diff --git a/Gruntfile.js b/Gruntfile.js index 869fdb574bc4..3bebe1f350dd 100755 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -234,7 +234,8 @@ module.exports = function (grunt) { 'angular-strap', 'directives/all', 'jquery.flot.pie', - 'angular-sanitize' + 'angular-sanitize', + 'angular-dragdrop' ] } ]; diff --git a/src/app/app.js b/src/app/app.js index 92b1291be125..8481e3e150df 100755 --- a/src/app/app.js +++ b/src/app/app.js @@ -11,6 +11,7 @@ define([ 'bootstrap', 'angular-sanitize', 'angular-strap', + 'angular-dragdrop', 'extend-jquery' ], function (angular, $, _, appLevelRequire) { @@ -83,7 +84,8 @@ function (angular, $, _, appLevelRequire) { 'elasticjs.service', '$strap.directives', 'ngSanitize', - 'kibana', + 'ngDragDrop', + 'kibana' ]; _.each('controllers directives factories services filters'.split(' '), diff --git a/src/app/components/require.config.js b/src/app/components/require.config.js index eee7f31da061..59d00e6968c1 100755 --- a/src/app/components/require.config.js +++ b/src/app/components/require.config.js @@ -15,6 +15,7 @@ require.config({ filesaver: '../vendor/filesaver', angular: '../vendor/angular/angular', + 'angular-dragdrop': '../vendor/angular/angular-dragdrop', 'angular-strap': '../vendor/angular/angular-strap', 'angular-sanitize': '../vendor/angular/angular-sanitize', timepicker: '../vendor/angular/timepicker', @@ -25,6 +26,7 @@ require.config({ bootstrap: '../vendor/bootstrap/bootstrap', jquery: '../vendor/jquery/jquery-1.8.0', + 'jquery-ui': '../vendor/jquery/jquery-ui-1.10.3', 'extend-jquery': 'components/extend-jquery', @@ -61,6 +63,7 @@ require.config({ }, // simple dependency declaration + 'jquery-ui': ['jquery'], 'jquery.flot': ['jquery'], 'jquery.flot.pie': ['jquery', 'jquery.flot'], 'jquery.flot.selection':['jquery', 'jquery.flot'], @@ -70,6 +73,7 @@ require.config({ 'angular-sanitize': ['angular'], 'angular-cookies': ['angular'], + 'angular-dragdrop': ['jquery','jquery-ui','angular'], 'angular-loader': ['angular'], 'angular-mocks': ['angular'], 'angular-resource': ['angular'], diff --git a/src/app/controllers/all.js b/src/app/controllers/all.js index 158bf04c8183..8dfca49d716a 100755 --- a/src/app/controllers/all.js +++ b/src/app/controllers/all.js @@ -1,5 +1,5 @@ define([ './dash', './dashLoader', - './row' + './row', ], function () {}); \ No newline at end of file diff --git a/src/app/controllers/dash.js b/src/app/controllers/dash.js index 0db6a4ff2921..3aca01a89011 100755 --- a/src/app/controllers/dash.js +++ b/src/app/controllers/dash.js @@ -2,7 +2,6 @@ define([ 'angular', 'config', 'underscore', - 'services/all' ], function (angular, config, _) { @@ -10,11 +9,22 @@ function (angular, config, _) { var module = angular.module('kibana.controllers'); - module.controller('DashCtrl', function($scope, $route, ejsResource, fields, dashboard, alertSrv) { + module.controller('DashCtrl', function( + $scope, $route, ejsResource, fields, dashboard, alertSrv, panelMove) { $scope.editor = { index: 0 }; + // For moving stuff around the dashboard. Needs better names + $scope.panelMove = panelMove; + $scope.panelMoveDrop = panelMove.onDrop; + $scope.panelMoveStart = panelMove.onStart; + $scope.panelMoveStop = panelMove.onStop; + $scope.panelMoveOver = panelMove.onOver; + $scope.panelMoveOut = panelMove.onOut; + + + $scope.init = function() { $scope.config = config; // Make underscore.js available to views @@ -30,6 +40,14 @@ function (angular, config, _) { $scope.ejs = ejsResource(config.elasticsearch); }; + $scope.isPanel = function(obj) { + if(!_.isNull(obj) && !_.isUndefined(obj) && !_.isUndefined(obj.type)) { + return true; + } else { + return false; + } + }; + $scope.add_row = function(dash,row) { dash.rows.push(row); }; diff --git a/src/app/controllers/row.js b/src/app/controllers/row.js index 35866786eab0..f20f2aef00b5 100755 --- a/src/app/controllers/row.js +++ b/src/app/controllers/row.js @@ -38,7 +38,10 @@ function (angular, app, _) { }; $scope.rowSpan = function(row) { - return _.reduce(_.pluck(row.panels,'span'), function(p,v) { + var panels = _.filter(row.panels, function(p) { + return $scope.isPanel(p); + }); + return _.reduce(_.pluck(panels,'span'), function(p,v) { return p+v; },0); }; diff --git a/src/app/directives/kibanaPanel.js b/src/app/directives/kibanaPanel.js index 5778889bd9ea..148cb88ea807 100755 --- a/src/app/directives/kibanaPanel.js +++ b/src/app/directives/kibanaPanel.js @@ -7,36 +7,47 @@ function (angular) { angular .module('kibana.directives') .directive('kibanaPanel', function($compile) { + var container = '
'; + var editorTemplate = - '' + - '' + + '