diff --git a/src/app/controllers/graphiteTarget.js b/src/app/controllers/graphiteTarget.js
index 138cea61e9e..4225dcedb17 100644
--- a/src/app/controllers/graphiteTarget.js
+++ b/src/app/controllers/graphiteTarget.js
@@ -2,10 +2,10 @@ define([
'angular',
'underscore',
'config',
- '../services/graphite/graphiteFuncs',
+ '../services/graphite/gfunc',
'../services/graphite/parser'
],
-function (angular, _, config, graphiteFuncs, Parser) {
+function (angular, _, config, gfunc, Parser) {
'use strict';
var module = angular.module('kibana.controllers');
@@ -13,7 +13,7 @@ function (angular, _, config, graphiteFuncs, Parser) {
module.controller('GraphiteTargetCtrl', function($scope, $http, filterSrv, graphiteSrv) {
$scope.init = function() {
- $scope.funcCategories = graphiteFuncs.getCategories();
+ $scope.funcCategories = gfunc.getCategories();
parseTarget();
};
@@ -56,7 +56,7 @@ function (angular, _, config, graphiteFuncs, Parser) {
switch(astNode.type) {
case 'function':
- var innerFunc = graphiteFuncs.createFuncInstance(astNode.name);
+ var innerFunc = gfunc.createFuncInstance(astNode.name);
_.each(astNode.params, function(param, index) {
parseTargeRecursive(param, innerFunc, index);
@@ -226,7 +226,7 @@ function (angular, _, config, graphiteFuncs, Parser) {
};
$scope.addFunction = function(funcDef) {
- $scope.functions.push(graphiteFuncs.createFuncInstance(funcDef));
+ $scope.functions.push(gfunc.createFuncInstance(funcDef));
$scope.targetChanged();
};
diff --git a/src/app/panels/column/editor.html b/src/app/panels/column/editor.html
deleted file mode 100644
index b85e5f96f5a..00000000000
--- a/src/app/panels/column/editor.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
Add Panel to Column
-
-
Select Type
-
-
-
-
diff --git a/src/app/panels/column/module.html b/src/app/panels/column/module.html
deleted file mode 100644
index 864ec84b315..00000000000
--- a/src/app/panels/column/module.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
×
-
Oops! {{panel.error}}
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/app/panels/column/module.js b/src/app/panels/column/module.js
deleted file mode 100644
index 56687633e7a..00000000000
--- a/src/app/panels/column/module.js
+++ /dev/null
@@ -1,115 +0,0 @@
-/** @scratch /panels/5
- * include::panels/column.asciidoc[]
- */
-
-/** @scratch /panels/column/0
- * == Column
- * Status: *Stable*
- *
- * A pseudo panel that lets you add other panels to be arranged in a column with defined heights.
- * While the column panel is stable, it does have many limitations, including the inability to drag
- * and drop panels within its borders. It may be removed in a future release.
- *
- */
-define([
- 'angular',
- 'app',
- 'underscore',
- 'config'
-],
-function (angular, app, _, config) {
- 'use strict';
-
- var module = angular.module('kibana.panels.column', []);
-
- app.useModule(module);
-
- module.controller('column', function($scope, $rootScope, $timeout) {
- $scope.panelMeta = {
- status : "Stable",
- description : "A pseudo panel that lets you add other panels to be arranged in a column with"+
- "defined heights."
- };
-
- // Set and populate defaults
- var _d = {
- /** @scratch /panels/column/3
- * === Parameters
- *
- * panel:: An array of panel objects
- */
- panels : []
- };
- _.defaults($scope.panel,_d);
-
- $scope.init = function(){
- $scope.reset_panel();
- };
-
- $scope.toggle_row = function(panel) {
- panel.collapse = panel.collapse ? false : true;
- if (!panel.collapse) {
- $timeout(function() {
- $scope.send_render();
- });
- }
- };
-
- $scope.send_render = function() {
- $scope.$broadcast('render');
- };
-
- $scope.add_panel = function(panel) {
- $scope.panel.panels.push(panel);
- };
-
- $scope.reset_panel = function(type) {
- $scope.new_panel = {
- loading: false,
- error: false,
- sizeable: false,
- span: 12,
- height: "150px",
- editable: true,
- type: type,
- draggable: false
- };
- };
-
- });
-
- module.directive('columnEdit', function($compile,$timeout) {
- return {
- scope : {
- new_panel:"=panel",
- row:"=",
- config:"=",
- dashboards:"=",
- type:"=type"
- },
- link: function(scope, elem) {
- scope.$on('render', function () {
-
- // Make sure the digest has completed and populated the attributes
- $timeout(function() {
- // Create a reference to the new_panel as panel so that the existing
- // editors work with our isolate scope
- scope.panel = scope.new_panel;
- var template = '';
-
- if(!(_.isUndefined(scope.type)) && scope.type !== "") {
- template = template+'';
- }
- elem.html($compile(angular.element(template))(scope));
- });
- });
- }
- };
- });
-
- module.filter('withoutColumn', function() {
- return function() {
- return _.without(config.panel_names,'column');
- };
- });
-});
\ No newline at end of file
diff --git a/src/app/panels/column/panelgeneral.html b/src/app/panels/column/panelgeneral.html
deleted file mode 100644
index b952c1e0363..00000000000
--- a/src/app/panels/column/panelgeneral.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
\ No newline at end of file
diff --git a/src/app/panels/graphite/module.js b/src/app/panels/graphite/module.js
index c0abdc7e6d3..cc96b750bde 100644
--- a/src/app/panels/graphite/module.js
+++ b/src/app/panels/graphite/module.js
@@ -370,23 +370,23 @@ function (angular, app, $, _, kbn, moment, timeSeries) {
};
$scope.enterFullscreenMode = function(options) {
- var oldHeight = $scope.row.height;
var docHeight = $(window).height();
var oldTimeRange = $scope.range;
- $scope.row.height = options.edit ? 200 : Math.floor(docHeight * 0.7);
+ $scope.height = options.edit ? 200 : Math.floor(docHeight * 0.7);
$scope.editMode = options.edit;
if (!$scope.fullscreen) {
var closeEditMode = $rootScope.$on('panel-fullscreen-exit', function() {
$scope.editMode = false;
$scope.fullscreen = false;
- $scope.row.height = oldHeight;
+ delete $scope.height;
closeEditMode();
$timeout(function() {
$scope.$emit('render');
+
if (oldTimeRange !== $scope.range) {
$scope.dashboard.refresh();
}
@@ -515,7 +515,7 @@ function (angular, app, $, _, kbn, moment, timeSeries) {
}
// IE doesn't work without this
- elem.css({height:scope.panel.height || scope.row.height});
+ elem.css({height:scope.height || scope.row.height});
_.each(data, function(series) {
series.label = series.info.alias;
diff --git a/src/app/services/graphite/graphiteFuncs.js b/src/app/services/graphite/gfunc.js
similarity index 89%
rename from src/app/services/graphite/graphiteFuncs.js
rename to src/app/services/graphite/gfunc.js
index 9068668e1d9..b76078ef233 100644
--- a/src/app/services/graphite/graphiteFuncs.js
+++ b/src/app/services/graphite/gfunc.js
@@ -14,6 +14,9 @@ function (_) {
};
function addFuncDef(funcDef) {
+ funcDef.params = funcDef.params || [];
+ funcDef.defaultParams = funcDef.defaultParams || [];
+
if (funcDef.category) {
funcDef.category.push(funcDef);
}
@@ -38,8 +41,6 @@ function (_) {
addFuncDef({
name: "holtWintersForecast",
category: categories.Calculate,
- params: [],
- defaultParams: []
});
addFuncDef({
@@ -60,16 +61,12 @@ function (_) {
name: 'sumSeries',
shortName: 'sum',
category: categories.Combine,
- params: [],
- defaultParams: []
});
addFuncDef({
name: 'averageSeries',
shortName: 'avg',
category: categories.Combine,
- params: [],
- defaultParams: []
});
addFuncDef({
@@ -106,15 +103,11 @@ function (_) {
addFuncDef({
name: 'integral',
category: categories.Transform,
- params: [],
- defaultParams: []
});
addFuncDef({
name: 'derivate',
category: categories.Transform,
- params: [],
- defaultParams: []
});
addFuncDef({
@@ -150,15 +143,14 @@ function (_) {
};
return {
- createFuncInstance: function(name) {
- if (_.isString(name)) {
- var funcDef = index[name];
- if (!funcDef) {
+ createFuncInstance: function(funcDef) {
+ if (_.isString(funcDef)) {
+ if (!index[funcDef]) {
throw { message: 'Method not found ' + name };
}
- name = funcDef;
+ funcDef = index[funcDef];
}
- return new FuncInstance(name);
+ return new FuncInstance(funcDef);
},
getCategories: function() {
diff --git a/src/config.js b/src/config.js
index f844e7a9522..88188252fcb 100644
--- a/src/config.js
+++ b/src/config.js
@@ -50,8 +50,6 @@ function (Settings) {
*/
panel_names: [
'text',
- 'column',
- 'histogram',
'graphite'
]
});
diff --git a/src/test/karma.conf.js b/src/test/karma.conf.js
index e28da108300..50c65184087 100644
--- a/src/test/karma.conf.js
+++ b/src/test/karma.conf.js
@@ -8,6 +8,7 @@ module.exports = function(config) {
files: [
'test/test-main.js',
{pattern: 'app/**/*.js', included: false},
+ {pattern: 'vendor/**/*.js', included: false},
{pattern: 'test/**/*.js', included: false}
],
diff --git a/src/test/specs/gfunc-specs.js b/src/test/specs/gfunc-specs.js
new file mode 100644
index 00000000000..0a4e637f9c2
--- /dev/null
+++ b/src/test/specs/gfunc-specs.js
@@ -0,0 +1,46 @@
+define([
+ 'app/services/graphite/gfunc'
+], function(gfunc) {
+
+ describe('when creating func instance from func namae', function() {
+
+ it('should return func instance', function() {
+ var func = gfunc.createFuncInstance('sumSeries');
+ expect(func).to.be.ok();
+ expect(func.def.name).to.equal('sumSeries');
+ expect(func.def.params.length).to.equal(0);
+ expect(func.def.defaultParams.length).to.equal(0);
+ expect(func.def.defaultParams.length).to.equal(0);
+ });
+
+ it('should return func instance with shortName', function() {
+ var func = gfunc.createFuncInstance('sum');
+ expect(func).to.be.ok();
+ });
+
+ it('should return func instance from funcDef', function() {
+ var func = gfunc.createFuncInstance('sum');
+ var func = gfunc.createFuncInstance(func.def);
+ expect(func).to.be.ok();
+ });
+
+ it('func instance should have text representation', function() {
+ var func = gfunc.createFuncInstance('groupByNode');
+ func.params[0] = 5;
+ func.params[1] = 'avg';
+ func.updateText();
+ expect(func.text).to.equal("groupByNode(5, avg)");
+ });
+
+ });
+
+ describe('when requesting function categories', function() {
+
+ it('should return function categories', function() {
+ var catIndex = gfunc.getCategories();
+ expect(catIndex.Special.length).to.equal(3);
+ });
+
+ });
+
+});
diff --git a/src/test/test-main.js b/src/test/test-main.js
index 3b48c825c04..b1700b37dd5 100644
--- a/src/test/test-main.js
+++ b/src/test/test-main.js
@@ -1,10 +1,22 @@
require.config({
- baseUrl:'base'
+ baseUrl: 'base',
+
+ paths: {
+ underscore: 'app/components/underscore.extended',
+ 'underscore-src': 'vendor/underscore',
+ },
+
+ shim: {
+ underscore: {
+ exports: '_'
+ },
+ }
});
require([
'test/specs/lexer-specs',
'test/specs/parser-specs',
+ 'test/specs/gfunc-specs',
], function () {
window.__karma__.start();
});
\ No newline at end of file