فهرست منبع

[search] Initial map support

Enrico Berti 11 سال پیش
والد
کامیت
72f1a71

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

@@ -515,7 +515,23 @@ ${ commonheader(_('Search'), "search", user, "60px") | n,unicode }
 </script>
 
 <script type="text/html" id="map-widget">
-  This is the map widget
+  <!-- ko ifnot: $root.getFacetFromQuery(id) -->
+    <a data-bind="click: showAddFacetDemiModal" 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" />
+    </div>
+    <div data-bind="with: $root.collection.getFacetById($parent.id())">
+      <div data-bind="mapChart: {data: {counts: $parent.counts, widget_id: $parent.id}, field: field, fqs: $root.query.fqs,
+        transformer: mapChartDataTransformer,
+        onClick: function(d){ viewModel.query.selectRangeFacet({count: d.data.obj.value, widget_id: d.data.obj.widget_id, from: d.data.obj.from, to: d.data.obj.to, cat: d.data.obj.field}) },
+        onComplete: function(){ viewModel.getWidgetById($parent.id).isLoading(false)} }" />
+    </div>
+  </div>
+  <!-- /ko -->
   <div class="widget-spinner" data-bind="visible: isLoading()">
     <!--[if !IE]> --><i class="fa fa-spinner fa-spin"></i><!-- <![endif]-->
     <!--[if IE]><img src="/static/art/spinner.gif" /><![endif]-->
@@ -558,6 +574,8 @@ ${ commonheader(_('Search'), "search", user, "60px") | n,unicode }
 <script src="/static/ext/js/d3.v3.js" type="text/javascript" charset="utf-8"></script>
 <script src="/static/ext/js/nv.d3.min.js" type="text/javascript" charset="utf-8"></script>
 <link href="/static/ext/css/nv.d3.min.css" rel="stylesheet">
+<script src="/static/ext/js/topojson.v1.min.js" type="text/javascript" charset="utf-8"></script>
+<script src="/static/ext/js/datamaps.all.min.js" type="text/javascript" charset="utf-8"></script>
 
 <script src="/search/static/js/nv.d3.multiBarWithBrushChart.js" type="text/javascript" charset="utf-8"></script>
 <script src="/search/static/js/nv.d3.lineWithBrushChart.js" type="text/javascript" charset="utf-8"></script>
@@ -906,6 +924,20 @@ function timelineChartDataTransformer(rawDatum) {
   return _datum;
 }
 
+function mapChartDataTransformer(data) {
+  var _data = [];
+  $(data.counts).each(function (cnt, item) {
+    item.widget_id = data.widget_id;
+    _data.push({
+      label: item.value,
+      value: item.count,
+      obj: item
+    });
+  });
+  return _data;
+}
+
+
 $(document).ready(function () {
 
   $(document).on("click", ".widget-settings-pill", function(){

+ 18 - 0
apps/search/static/js/charts.ko.js

@@ -90,6 +90,24 @@ ko.bindingHandlers.lineChart = {
   }
 };
 
+ko.bindingHandlers.mapChart = {
+  init: function (element, valueAccessor) {
+    $(element).height($(element).width()/2.5);
+    $(element).css("position", "relative");
+    var _options = valueAccessor();
+    var basic = new Datamap({
+      element: element
+    });
+    _options.onComplete();
+  },
+  update: function (element, valueAccessor) {
+    var value = valueAccessor();
+    // do something with the updated value
+  }
+};
+
+
+
 function lineChart(element, options) {
   var _datum = options.transformer(options.datum);
   $(element).height(300);

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
desktop/core/static/ext/js/datamaps.all.min.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
desktop/core/static/ext/js/topojson.v1.min.js


برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است