Przeglądaj źródła

Added zoom links to histogram and zoom event to timepicker. Issue #14

Rashid Khan 12 lat temu
rodzic
commit
f5302fc713

+ 4 - 1
panels/histogram/editor.html

@@ -44,11 +44,14 @@
     <label class="small">Time correction</label> 
     <select ng-change="$emit('render')" ng-model="panel.timezone" class='input-small' ng-options="f for f in ['browser','utc']"></select>
   </div>
+  <div class="span2"> 
+    <label class="small">Zoom Links</label><input type="checkbox" ng-model="panel.zoomlinks" ng-checked="panel.zoomlinks">
+  </div>
 </div>
 <h5>Panel Spy</h5>
 <div class="row-fluid">
   <div class="span2"> 
-    <label class="small"> Spyable </label><input type="checkbox" ng-model="panel.spyable" ng-checked="panel.spyable">
+    <label class="small">Spyable</label><input type="checkbox" ng-model="panel.spyable" ng-checked="panel.spyable">
   </div>
   <div class="span9 small">
     The panel spy shows 'behind the scenes' information about a panel. It can

+ 4 - 0
panels/histogram/module.html

@@ -2,5 +2,9 @@
   <span ng-show="panel.spyable" style="position:absolute;right:0px;top:0px" class='panelextra pointer'>
       <i bs-modal="'partials/modal.html'" class="icon-eye-open"></i>
   </span>
+  <center ng-show='panel.zoomlinks && data'>
+    <a class='small' ng-click='zoom(0.5)'><i class='icon-zoom-in'></i> Zoom In</a>
+    <a class='small' ng-click='zoom(2)'><i class='icon-zoom-out'></i> Zoom Out</a>
+  </center>
   <div histogram params="{{panel}}" style="height:{{panel.height || row.height}};position:relative"></div>
 </kibana-panel>         

+ 14 - 7
panels/histogram/module.js

@@ -3,13 +3,14 @@ angular.module('kibana.histogram', [])
 
   // Set and populate defaults
   var _d = {
-    query   : [ {query: "*", label:"Query"} ],
-    interval: secondsToHms(calculate_interval($scope.from,$scope.to,40,0)/1000),
-    show    : ['bars','y-axis','x-axis','legend'],
-    fill    : 3,
-    timezone: 'browser', // browser, utc or a standard timezone
-    spyable : true,
-    group   : "default",
+    query     : [ {query: "*", label:"Query"} ],
+    interval  : secondsToHms(calculate_interval($scope.from,$scope.to,40,0)/1000),
+    show      : ['bars','y-axis','x-axis','legend'],
+    fill      : 3,
+    timezone  : 'browser', // browser, utc or a standard timezone
+    spyable   : true,
+    zoomlinks : true,
+    group     : "default",
   }
   _.defaults($scope.panel,_d)
 
@@ -123,6 +124,12 @@ angular.module('kibana.histogram', [])
     });
   }
 
+  // function $scope.zoom
+  // factor :: Zoom factor, so 0.5 = cuts timespan in half, 2 doubles timespan
+  $scope.zoom = function(factor) {
+    eventBus.broadcast($scope.$id,$scope.panel.group,'zoom',factor)
+  }
+
   // I really don't like this function, too much dom manip. Break out into directive?
   $scope.populate_modal = function(request) {
     $scope.modal = {

+ 17 - 0
panels/timepicker/module.js

@@ -91,6 +91,23 @@ angular.module('kibana.timepicker', [])
       $scope.time_apply()
     });
     
+    eventBus.register($scope,"zoom", function(event,factor) {
+      var _timespan = ($scope.time.to.getTime() - $scope.time.from.getTime());
+      try {
+        if($scope.panel.mode != 'absolute') {
+          $scope.panel.mode = 'since'
+          set_timepicker(new Date($scope.time.to.getTime() - _timespan*factor),$scope.time.to)
+        } else {
+          var _center = $scope.time.to - _timespan/2
+          set_timepicker(new Date(_center - (_timespan*factor)/2),
+                         new Date(_center + (_timespan*factor)/2))        
+        }
+      } catch (e) {
+        console.log(e)
+      }     
+      $scope.time_apply();
+    });
+    
     $scope.$on('render', function (){
       $scope.time_apply();
     });