Prechádzať zdrojové kódy

[search] Add Pie widget

Refactor field facet logic
Romain Rigaux 11 rokov pred
rodič
commit
142f055

+ 13 - 2
apps/search/src/search/models.py

@@ -394,6 +394,14 @@ def get_facet_field_format(field, type, facets):
     pass
     pass
   return format
   return format
 
 
+
+def get_facet_field(category, field, facets):
+  facets = filter(lambda facet: facet['type'] == category and facet['field'] == field, facets)
+  if facets:
+    return facets[0]
+  else:
+    return None
+
 def get_facet_field(category, field, facets):
 def get_facet_field(category, field, facets):
   facets = filter(lambda facet: facet['type'] == category and facet['field'] == field, facets)
   facets = filter(lambda facet: facet['type'] == category and facet['field'] == field, facets)
   if facets:
   if facets:
@@ -455,7 +463,7 @@ def augment_solr_response2(response, collection, solr_query):
 
 
   normalized_facets = []
   normalized_facets = []
 
 
-  def pairwise2(cat, fq, iterable):
+  def pairwise2(cat, selected_field, iterable):
       pairs = []
       pairs = []
       a, b = itertools.tee(iterable)
       a, b = itertools.tee(iterable)
       for element in a:
       for element in a:
@@ -465,8 +473,11 @@ def augment_solr_response2(response, collection, solr_query):
   fq = solr_query['fq']
   fq = solr_query['fq']
 
 
   if response and response.get('facet_counts'):
   if response and response.get('facet_counts'):
-    category = 'field'
+    # [{u'field': u'sun', u'type': u'query', u'id': u'67b43a63-ed22-747b-47e8-b31aad1431ea', u'label': u'sun'}
+    #for facet in collection['facets']:
+    category = 'field' # pie
     if response['facet_counts']['facet_fields']:
     if response['facet_counts']['facet_fields']:
+      # text, pie, graph
       for name in response['facet_counts']['facet_fields']:
       for name in response['facet_counts']['facet_fields']:
         selected_field = fq.get(name, '')
         selected_field = fq.get(name, '')
         collection_facet = get_facet_field(category, name, collection['facets'])
         collection_facet = get_facet_field(category, name, collection['facets'])

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

@@ -445,7 +445,21 @@ ${ commonheader(_('Search'), "search", user, "60px") | n,unicode }
 </script>
 </script>
 
 
 <script type="text/html" id="pie-widget">
 <script type="text/html" id="pie-widget">
-  This is the pai widget
+  <!-- ko ifnot: $root.getFacetFromQuery(id) -->
+    <a data-bind="click: showAddFacetModal" class="btn" href="javascript:void(0)"><i class="fa fa-plus"></i></a>
+  <!-- /ko -->
+
+  <!-- ko if: $root.getFacetFromQuery(id) -->
+  <div class="row-fluid" data-bind="with: $root.getFacetFromQuery(id)">
+    <div data-bind="visible: $root.isEditing, with: $root.collection.getFacetById($parent.id())" style="margin-bottom: 20px">      
+      ${ _('Label') }: <input type="text" data-bind="value: label" />
+      <br/>      
+      ${ _('Field') }: <input type="text" data-bind="value: field" />
+    </div>  
+
+    <span data-bind="text: query" />: <span data-bind="text: count" />
+  </div>
+  <!-- /ko -->
 </script>
 </script>
 
 
 <script type="text/html" id="area-widget">
 <script type="text/html" id="area-widget">

+ 17 - 8
apps/search/static/js/search.ko.js

@@ -193,7 +193,7 @@ var Query = function (vm, query) {
   self.fq = query.fq
   self.fq = query.fq
 
 
   self.selectFacet = function (facet_json) {
   self.selectFacet = function (facet_json) {
-    self.fq[facet_json.cat] = facet_json.value;
+    self.fq[facet_json.cat] = facet_json.value; // need to add facet id too
     vm.search();
     vm.search();
   }
   }
 
 
@@ -222,18 +222,27 @@ var Collection = function (vm, collection) {
     vm.search();
     vm.search();
   });
   });
   self.facets = ko.mapping.fromJS(collection.facets);
   self.facets = ko.mapping.fromJS(collection.facets);
+  $.each(self.facets(), function (index, facet) {
+    facet.field.subscribe(function () {
+      vm.search();
+    });
+  });
+
 
 
   self.fields = ko.mapping.fromJS(collection.fields);
   self.fields = ko.mapping.fromJS(collection.fields);
 
 
   self.addFacet = function (facet_json) {
   self.addFacet = function (facet_json) {
 	var facetType = facet_json.widgetType == 'hit-widget' ? 'query' : 'field';
 	var facetType = facet_json.widgetType == 'hit-widget' ? 'query' : 'field';
-
-    self.facets.push(ko.mapping.fromJS({
-      "id": facet_json.widget_id,
-      "label": facet_json.name,
-      "field": facet_json.name,
-      "type": facetType
-    }));
+    var facet = ko.mapping.fromJS({
+        "id": facet_json.widget_id,
+        "label": facet_json.name,
+        "field": facet_json.name,
+        "type": facetType
+    });
+    facet.field.subscribe(function () {
+      vm.search();
+    });
+    self.facets.push(facet);
   };
   };
 
 
   self.removeFacet = function (widget_id) {
   self.removeFacet = function (widget_id) {