Commit 70c82093

mo <mo.khan@gmail.com>
2017-09-09 18:46:07
validate search form.
1 parent c81e441
Changed files (5)
app
assets
views
config
locales
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
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'
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}_", '')
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>
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'