Selaa lähdekoodia

[search] Only display available fields in add widget modal

Romain Rigaux 11 vuotta sitten
vanhempi
commit
6c3784f
2 muutettua tiedostoa jossa 31 lisäystä ja 13 poistoa
  1. 15 6
      apps/search/src/search/templates/search2.mako
  2. 16 7
      apps/search/static/js/search.ko.js

+ 15 - 6
apps/search/src/search/templates/search2.mako

@@ -533,7 +533,7 @@ ${ commonheader(_('Search'), "search", user, "80px") | n,unicode }
 <script type="text/html" id="resultset-pagination">
   <span data-bind="text: $data.response.numFound"></span> ${ _(' results') } <i class="fa fa-arrow-right"></i>
   
-  <span class="pull-right" data-bind="visible: $data.response.numFound > 0">
+  <span class="pull-right" data-bind="visible: $data.response.numFound > 0 && $data.response.numFound <= 1000">
     <a class="btn" href="javascript:void(0)" id="download-csv"><i class="hfo hfo-file-csv"></i></a>
     <a class="btn" href="javascript:void(0)" id="download-xls"><i class="hfo hfo-file-xls"></i></a>
   </span>
@@ -718,11 +718,18 @@ ${ commonheader(_('Search'), "search", user, "80px") | n,unicode }
   </div>
   <div class="modal-body">
     <p>
-      <input type="text" data-bind="value: $root.collection.template.fieldsModalFilter, valueUpdate:'afterkeydown'" placeholder="${_('Filter fields')}" class="input-xlarge" />
-      <ul data-bind="foreach: $root.collection.template.filteredFieldsAttributes().sort(function (l, r) { return l.name() > r.name() ? 1 : -1 })" class="unstyled inline fields-chooser">
-        <li data-bind="click: addFacetDemiModalFieldClick"><span class="badge badge-info"><i class="fa fa-file-text-o"></i> <span data-bind="text: name()"></span> </span></li>
+      <input type="text" data-bind="value: $root.collection.template.fieldsModalFilter, valueUpdate:'afterkeydown'" 
+          placeholder="${_('Filter fields')}" class="input-xlarge" />
+      <ul data-bind="foreach: $root.collection.template.filteredFieldsAttributes().sort(function (l, r) { return l.name() > r.name() ? 1 : -1 })"
+          class="unstyled inline fields-chooser">
+        <li data-bind="click: addFacetDemiModalFieldClick">
+          <span class="badge badge-info" style="font-size:20px"><span data-bind="text: name(), attr: {'title': type()}"></span>
+          </span>
+        </li>
       </ul>
-      <div class="alert alert-info" data-bind="visible: $root.collection.template.filteredFieldsAttributes().length == 0">${_('There are no fields matching your search term.')}</div>
+      <div class="alert alert-info" data-bind="visible: $root.collection.template.filteredFieldsAttributes().length == 0">
+        ${_('There are no fields matching your search term.')}
+      </div>
     </p>
   </div>
 </div>
@@ -1225,7 +1232,9 @@ $(document).ready(function () {
   var selectedWidget = null;
   function showAddFacetDemiModal(widget) {
     if (["resultset-widget", "html-resultset-widget", "filter-widget"].indexOf(widget.widgetType()) == -1) {
-      viewModel.collection.template.fieldsModalFilter("");
+      viewModel.collection.template.fieldsModalFilter();
+      viewModel.collection.template.fieldsModalType(widget.widgetType());
+      viewModel.collection.template.fieldsModalFilter("");      
       selectedWidget = widget;
       $("#addFacetDemiModal").modal("show");
       $("#addFacetDemiModal input[type='text']").focus();

+ 16 - 7
apps/search/static/js/search.ko.js

@@ -439,13 +439,16 @@ var Collection = function (vm, collection) {
     return _field;    
   };
 
-  self.template.fieldsModalFilter = ko.observable("");
-  self.template.filteredFieldsAttributes = ko.observableArray(self.template.fieldsAttributes());
-
-  self.template.fieldsModalFilter.subscribe(function(value){
+  self.template.fieldsModalFilter = ko.observable(); // For UI
+  self.template.fieldsModalType = ko.observable("");
+  self.template.filteredFieldsAttributes = ko.observableArray();
+  
+  self.template.fieldsModalFilter.subscribe(function(value) {
     var _fields = [];
-    $.each(self.template.fieldsAttributes(), function (index, field) {
-      if (field.name().toLowerCase().indexOf(self.template.fieldsModalFilter().toLowerCase()) > -1){
+    var _availableFields = self.template.fieldsModalType() == 'histogram-widget'? vm.availableDateFields() : self.availableFacetFields(); 
+
+    $.each(_availableFields, function (index, field) {
+      if (self.template.fieldsModalFilter() == "" || field.name().toLowerCase().indexOf(self.template.fieldsModalFilter().toLowerCase()) > -1){
         _fields.push(field);
       }
     });
@@ -581,6 +584,8 @@ var NewTemplate = function (vm, initial) {
 };
 
 
+var DATE_TYPE = ['date', 'tdate'];
+
 var SearchViewModel = function (collection_json, query_json, initial_json) {
   var self = this;
 
@@ -634,6 +639,10 @@ var SearchViewModel = function (collection_json, query_json, initial_json) {
   self.draggablePie = ko.observable(new Widget(12, UUID(), "Pie Chart", "pie-widget"));
   self.draggableFilter = ko.observable(new Widget(12, UUID(), "Filter Bar", "filter-widget"));  
 
+  self.availableDateFields = ko.computed(function() {
+    return $.grep(self.collection.availableFacetFields(), function(field) { return DATE_TYPE.indexOf(field.type()) != -1; });
+  });
+  
   function getWidgets(equalsTo) {
 	return $.map(self.columns(), function (col){return $.map(col.rows(), function(row){ return $.grep(row.widgets(), function(widget){ return equalsTo(widget); });}) ;})
   };
@@ -646,7 +655,7 @@ var SearchViewModel = function (collection_json, query_json, initial_json) {
   });  
   self.availableDraggableHistogram = ko.computed(function() {
 	return getWidgets(function(widget){ return widget.widgetType() == 'histogram-widget'; }).length == 0 &&
-	  $.map(self.collection.availableFacetFields(), function(field) { return ['date', 'tdate'].indexOf(field.type()) != -1; });
+	  self.availableDateFields().length > 0;
   });
   self.availableDraggableChart = ko.computed(function() {
     return self.collection.availableFacetFields().length > 0;