diff options
| author | mo <mo.khan@gmail.com> | 2017-09-09 12:46:07 -0600 |
|---|---|---|
| committer | mo <mo.khan@gmail.com> | 2017-09-09 12:46:07 -0600 |
| commit | 70c8209344bbe125867062b74f21a12f73b6faf2 (patch) | |
| tree | 710f7cf19f71d75265eaf2c10b4d467994b42043 | |
| parent | c81e44144f9e7f392b5d158c3ec52062fa529532 (diff) | |
validate search form.
| -rw-r--r-- | app/assets/javascripts/models/search.js.coffee | 16 | ||||
| -rw-r--r-- | app/assets/javascripts/views/form_view.js.coffee | 5 | ||||
| -rw-r--r-- | app/assets/javascripts/views/search/form.js.coffee | 5 | ||||
| -rw-r--r-- | app/views/layouts/_header.html.erb | 10 | ||||
| -rw-r--r-- | config/locales/en.yml | 2 |
5 files changed, 33 insertions, 5 deletions
diff --git a/app/assets/javascripts/models/search.js.coffee b/app/assets/javascripts/models/search.js.coffee new file mode 100644 index 00000000..df81bd4a --- /dev/null +++ b/app/assets/javascripts/models/search.js.coffee @@ -0,0 +1,16 @@ +#= require ./translation + +class csx.Models.Search extends Backbone.Model + translation: new csx.Translation('search') + defaults: + q: null + + requiredFields: ['q'] + + validate: (attributes, options) -> + errors = {} + _.each @requiredFields, (field) => + if _.isEmpty(attributes[field]) + errors[field] = @translation.errorFor(field, 'blank') + + return errors if _.keys(errors).length > 0 diff --git a/app/assets/javascripts/views/form_view.js.coffee b/app/assets/javascripts/views/form_view.js.coffee index d58f7198..43183537 100644 --- a/app/assets/javascripts/views/form_view.js.coffee +++ b/app/assets/javascripts/views/form_view.js.coffee @@ -35,6 +35,9 @@ class csx.FormView extends csx.AutoView else element.val() + fieldName: (name) -> + return name if _.isEmpty(@modelKey) + "#{@modelKey}_#{name}" + field: (name) -> @$("##{@fieldName(name)}") - fieldName: (name) -> "#{@modelKey}_#{name}" fieldNameFor: (element) -> element.attr('id').replace("#{@modelKey}_", '') diff --git a/app/assets/javascripts/views/search/form.js.coffee b/app/assets/javascripts/views/search/form.js.coffee new file mode 100644 index 00000000..7e1b1f05 --- /dev/null +++ b/app/assets/javascripts/views/search/form.js.coffee @@ -0,0 +1,5 @@ +class csx.Views.SearchForm extends csx.FormView + @viewName 'search-form' + events: + 'input #q': 'onInput' + 'submit form': 'onSubmit' diff --git a/app/views/layouts/_header.html.erb b/app/views/layouts/_header.html.erb index 2597851a..0e1b403c 100644 --- a/app/views/layouts/_header.html.erb +++ b/app/views/layouts/_header.html.erb @@ -40,10 +40,12 @@ </li> <% end %> </ul> - <%= form_tag(configuration_for(:search_path, search_path), method: :get, name: "search", class: "form-inline my-2 my-lg-0") do %> - <%= text_field_tag :q, params[:q], class: 'form-control mr-sm-2', placeholder: 'Search', 'aria-label' => "Search", required: :required %> - <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button> - <% end %> + <div data-autoview="search-form" data-automodel="Search"> + <%= form_tag(configuration_for(:search_path, search_path), method: :get, name: "search", class: "form-inline my-2 my-lg-0", novalidate: :novalidate) do %> + <%= text_field_tag :q, params[:q], class: 'form-control mr-sm-2', placeholder: 'Search', 'aria-label' => "Search", required: :required %> + <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button> + <% end %> + </div> </div> </nav> </div> diff --git a/config/locales/en.yml b/config/locales/en.yml index 94543825..3ea4c436 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -22,6 +22,8 @@ en: profile_saved: Your settings have been updated successfully! activerecord: attributes: + search: + q: "Search query" session: email: 'Email' password: 'Password' |
