Sfoglia il codice sorgente

[search] Ground work for multi serie bar charts

Enrico Berti 11 anni fa
parent
commit
c21b3ca963

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

@@ -424,7 +424,7 @@ ${ commonheader(_('Search'), "search", user, "60px") | n,unicode }
       ${ _('Gap') }: <input type="text" data-bind="value: properties.gap" />
     </div> 
 
-    <div data-bind="barChart: {data: {counts: counts, widget_id: $parent.id()}, field: field, label: label, 
+    <div data-bind="barChart: {datum: {counts: counts, widget_id: $parent.id(), label: label}, field: field, label: label,
       transformer: barChartDataTransformer,
       onClick: function(d){ viewModel.query.selectRangeFacet({count: d.obj.value, widget_id: d.obj.widget_id, from: d.obj.from, to: d.obj.to, cat: d.obj.field}) }, 
       onComplete: function(){ viewModel.getWidgetById(id).isLoading(false) } }"
@@ -472,7 +472,6 @@ ${ commonheader(_('Search'), "search", user, "60px") | n,unicode }
 
 <script type="text/html" id="filter-widget">
   <div data-bind="foreach: $root.query.fqs">
-    lala?
     <span data-bind="text: ko.mapping.toJSON($data), click: function(){ viewModel.query.removeFilter($data); viewModel.search() }"></span>
   </div>
   <div class="widget-spinner" data-bind="visible: isLoading()">
@@ -772,10 +771,11 @@ function rangePieChartDataTransformer(data) {
   return _data;
 }
 
-function barChartDataTransformer(data) {
+function barChartDataTransformer(rawDatum) {
+  var _datum = [];
   var _data = [];
-  $(data.counts).each(function (cnt, item) {
-    item.widget_id = data.widget_id;
+  $(rawDatum.counts).each(function (cnt, item) {
+    item.widget_id = rawDatum.widget_id;
     if (typeof item.from != "undefined"){
       _data.push({
         series: 0,
@@ -794,7 +794,11 @@ function barChartDataTransformer(data) {
       });
     }
   });
-  return _data;
+  _datum.push({
+    key: rawDatum.label,
+    values: _data
+  });
+  return _datum;
 }
 
 function timelineChartDataTransformer(data) { 

+ 8 - 11
apps/search/static/js/charts.ko.js

@@ -81,7 +81,7 @@ ko.bindingHandlers.timelineChart = {
 };
 
 function barChart(element, options, isTimeline) {
-  var _data = options.transformer(options.data);
+  var _datum = options.transformer(options.datum);
   $(element).height(300);
 
   nv.addGraph(function () {
@@ -97,10 +97,12 @@ function barChart(element, options, isTimeline) {
     }
     else {
       var _isDiscrete = false;
-      for (var i=0;i<_data.length;i++){
-        if (isNaN(_data[i].x * 1)){
-          _isDiscrete = true;
-          break;
+      for (var j=0;j<_datum.length;j++){
+        for (var i=0;i<_datum[j].values.length;i++){
+          if (isNaN(_datum[j].values[i].x * 1)){
+            _isDiscrete = true;
+            break;
+          }
         }
       }
       if (_isDiscrete){
@@ -124,12 +126,7 @@ function barChart(element, options, isTimeline) {
         .tickFormat(d3.format(',0f'));
 
     var _d3 = ($(element).find('svg').length > 0) ? d3.select($(element).find('svg')[0]) : d3.select($(element)[0]).append('svg');
-    _d3.datum([
-          {
-            key: options.label,
-            values: _data
-          }
-        ])
+    _d3.datum(_datum)
         .transition().duration(350)
         .each("end", options.onComplete)
         .call(_chart);