define([ 'angular', 'app', 'lodash' ], function (angular, app, _) { 'use strict'; var module = angular.module('kibana.controllers'); module.controller('RowCtrl', function($scope, $rootScope, $timeout,ejsResource, querySrv) { var _d = { title: "Row", height: "150px", collapse: false, collapsable: true, editable: true, panels: [], notice: false }; _.defaults($scope.row,_d); $scope.init = function() { $scope.querySrv = querySrv; $scope.reset_panel(); }; $scope.toggle_row = function(row) { if(!row.collapsable) { return; } row.collapse = row.collapse ? false : true; if (!row.collapse) { $timeout(function() { $scope.$broadcast('render'); }); } else { row.notice = false; } }; $scope.rowSpan = function(row) { var panels = _.filter(row.panels, function(p) { return $scope.isPanel(p); }); return _.reduce(_.pluck(panels,'span'), function(p,v) { return p+v; },0); }; // This can be overridden by individual panels $scope.close_edit = function() { $scope.$broadcast('render'); }; $scope.add_panel = function(row,panel) { $scope.row.panels.push(panel); }; $scope.duplicate_panel = function(panel) { var clone = angular.copy(panel); $scope.row.panels.push(clone); }; /** @scratch /panels/0 * [[panels]] * = Panels * * [partintro] * -- * *Kibana* dashboards are made up of blocks called +panels+. Panels are organized into rows * and can serve many purposes, though most are designed to provide the results of a query or * multiple queries as a visualization. Other panels may show collections of documents or * allow you to insert instructions for your users. * * Panels can be configured easily via the Kibana web interface. For more advanced usage, such * as templated or scripted dashboards, documentation of panel properties is available in this * section. You may find settings here which are not exposed via the web interface. * * Each panel type has its own properties, hover there are several that are shared. * */ $scope.reset_panel = function(type) { var defaultSpan = 4, _as = 12-$scope.rowSpan($scope.row); $scope.panel = { error : false, /** @scratch /panels/1 * span:: A number, 1-12, that describes the width of the panel. */ span : _as < defaultSpan && _as > 0 ? _as : defaultSpan, /** @scratch /panels/1 * editable:: Enable or disable the edit button the the panel */ editable: true, /** @scratch /panels/1 * type:: The type of panel this object contains. Each panel type will require additional * properties. See the panel types list to the right. */ type : type }; }; /** @scratch /panels/2 * -- */ $scope.init(); } ); });