Commit 2be31e57 by Torkel Ödegaard

worked on dashboard search and keyboard nav, improved duplicate panel

parent 5472e5f9
...@@ -73,6 +73,23 @@ function (angular, config, _) { ...@@ -73,6 +73,23 @@ function (angular, config, _) {
}); });
}; };
$scope.countWatchers = function (scopeStart) {
var q = [scopeStart || $rootScope], watchers = 0, scope;
while (q.length > 0) {
scope = q.pop();
if (scope.$$watchers) {
watchers += scope.$$watchers.length;
}
if (scope.$$childHead) {
q.push(scope.$$childHead);
}
if (scope.$$nextSibling) {
q.push(scope.$$nextSibling);
}
}
window.console.log(watchers);
};
$scope.isPanel = function(obj) { $scope.isPanel = function(obj) {
if(!_.isNull(obj) && !_.isUndefined(obj) && !_.isUndefined(obj.type)) { if(!_.isNull(obj) && !_.isUndefined(obj) && !_.isUndefined(obj.type)) {
return true; return true;
......
...@@ -71,6 +71,10 @@ function (angular, _) { ...@@ -71,6 +71,10 @@ function (angular, _) {
}; };
$scope.elasticsearch_delete = function(id) { $scope.elasticsearch_delete = function(id) {
if (!confirm('Are you sure you want to delete dashboard?')) {
return;
}
dashboard.elasticsearch_delete(id).then( dashboard.elasticsearch_delete(id).then(
function(result) { function(result) {
if(!_.isUndefined(result)) { if(!_.isUndefined(result)) {
......
...@@ -9,12 +9,12 @@ function (angular, _, config, $) { ...@@ -9,12 +9,12 @@ function (angular, _, config, $) {
var module = angular.module('kibana.controllers'); var module = angular.module('kibana.controllers');
module.controller('SearchCtrl', function($scope, dashboard, keyboardManager, $element) { module.controller('SearchCtrl', function($scope, dashboard, keyboardManager, $element, $location) {
$scope.init = function() { $scope.init = function() {
$scope.elasticsearch = $scope.elasticsearch || {}; $scope.elasticsearch = $scope.elasticsearch || {};
$scope.giveSearchFocus = 0; $scope.giveSearchFocus = 0;
$scope.selectedIndex = null; $scope.selectedIndex = -1;
/*keyboardManager.bind('shift+s', function() { /*keyboardManager.bind('shift+s', function() {
$element.find('.dropdown').addClass('open'); $element.find('.dropdown').addClass('open');
...@@ -28,7 +28,19 @@ function (angular, _, config, $) { ...@@ -28,7 +28,19 @@ function (angular, _, config, $) {
$scope.keyDown = function (evt) { $scope.keyDown = function (evt) {
if (evt.keyCode === 40) { if (evt.keyCode === 40) {
$scope.selectedIndex = ($scope.selectedIndex || 0) + 1; $scope.selectedIndex++;
}
if (evt.keyCode === 38) {
$scope.selectedIndex--;
}
if (evt.keyCode === 13) {
var selectedDash = $scope.search_results.dashboards[$scope.selectedIndex];
if (selectedDash) {
$location.path("/dashboard/elasticsearch/" + encodeURIComponent(selectedDash._id));
setTimeout(function(){
$('body').click(); // hack to force dropdown to close;
});
}
} }
}; };
...@@ -51,6 +63,7 @@ function (angular, _, config, $) { ...@@ -51,6 +63,7 @@ function (angular, _, config, $) {
$scope.elasticsearch_dblist = function(queryStr) { $scope.elasticsearch_dblist = function(queryStr) {
$scope.showImport = false; $scope.showImport = false;
$scope.selectedIndex = -1;
queryStr = queryStr.toLowerCase(); queryStr = queryStr.toLowerCase();
......
...@@ -211,7 +211,7 @@ function (angular, app, $, _, kbn, moment, timeSeries) { ...@@ -211,7 +211,7 @@ function (angular, app, $, _, kbn, moment, timeSeries) {
$scope.init = function() { $scope.init = function() {
//$scope.openConfigureModal();
$scope.panelMenuItems = [ $scope.panelMenuItems = [
{ text: 'View fullscreen', action: $scope.toggleFullscreen }, { text: 'View fullscreen', action: $scope.toggleFullscreen },
{ text: 'Edit', action: $scope.openConfigureModal }, { text: 'Edit', action: $scope.openConfigureModal },
...@@ -446,17 +446,23 @@ function (angular, app, $, _, kbn, moment, timeSeries) { ...@@ -446,17 +446,23 @@ function (angular, app, $, _, kbn, moment, timeSeries) {
$scope.render(); $scope.render();
}; };
$scope.duplicate = function() { $scope.duplicate = function(addToRow) {
var panelCopy = angular.copy($scope.panel); addToRow = addToRow || $scope.row;
var currentRowSpan = $scope.rowSpan(addToRow);
var currentRowSpan = $scope.rowSpan($scope.row);
if (currentRowSpan <= 8) { if (currentRowSpan <= 8) {
$scope.row.panels.push(panelCopy); addToRow.panels.push(angular.copy($scope.panel));
} }
else { else {
var rowCopy = angular.copy($scope.row); var rowsList = $scope.dashboard.current.rows;
rowCopy.panels = [panelCopy]; var rowIndex = _.indexOf(rowsList, addToRow);
$scope.dashboard.current.rows.push(rowCopy); if (rowIndex === rowsList.length - 1) {
var newRow = angular.copy($scope.row);
newRow.panels = [];
$scope.duplicate(newRow);
}
else {
$scope.duplicate(rowsList[rowIndex+1]);
}
} }
}; };
......
...@@ -27,7 +27,9 @@ ...@@ -27,7 +27,9 @@
ng-change="elasticsearch_dblist(elasticsearch.query)" /> ng-change="elasticsearch_dblist(elasticsearch.query)" />
<h6 ng-hide="search_results.dashboards.length || search_results.metrics.length">No dashboards or metrics matching your query found</h6> <h6 ng-hide="search_results.dashboards.length || search_results.metrics.length">No dashboards or metrics matching your query found</h6>
<table class="table table-condensed table-striped"> <table class="table table-condensed table-striped">
<tr bindonce ng-repeat="row in search_results.metrics" class="grafana-search-metric-result"> <tr bindonce ng-repeat="row in search_results.metrics"
class="grafana-search-metric-result"
ng-class="{'selected': $index === selectedIndex }">
<td><span class="label label-info">metric</span></td> <td><span class="label label-info">metric</span></td>
<td class="grafana-search-metric-name"> <td class="grafana-search-metric-name">
{{row._id}} {{row._id}}
...@@ -39,7 +41,9 @@ ...@@ -39,7 +41,9 @@
</td> </td>
</tr> </tr>
<tr bindonce ng-repeat="row in search_results.dashboards | orderBy:['_id']"> <tr bindonce
ng-repeat="row in search_results.dashboards"
ng-class="{'selected': $index === selectedIndex }">
<td><a ng-click="elasticsearch_delete(row._id)"><i class="icon-remove"></i></a></td> <td><a ng-click="elasticsearch_delete(row._id)"><i class="icon-remove"></i></a></td>
<td style="width:100%"><a href="#/dashboard/elasticsearch/{{row._id}}" bo-text="row._id"></a></td> <td style="width:100%"><a href="#/dashboard/elasticsearch/{{row._id}}" bo-text="row._id"></a></td>
<td><a><i class="icon-share" ng-click="share = dashboard.share_link(row._id,'elasticsearch',row._id)" bs-modal="'app/panels/dashcontrol/share.html'"></i></a></td> <td><a><i class="icon-share" ng-click="share = dashboard.share_link(row._id,'elasticsearch',row._id)" bs-modal="'app/panels/dashcontrol/share.html'"></i></a></td>
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -12,6 +12,15 @@ ...@@ -12,6 +12,15 @@
.box-sizing(border-box); .box-sizing(border-box);
padding: 15px; padding: 15px;
} }
.selected td, tr.selected:nth-child(odd)>td {
background: darken(@blue, 20%);
color: white;
text-shadow: -1px -1px 1px rgba(0,0,0,0.3);
a {
color: white;
}
}
} }
.panelCont { .panelCont {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment