diff --git a/Gruntfile.js b/Gruntfile.js
index 58c59c0..f9b5273 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -15,16 +15,7 @@ module.exports = function(grunt) {
expand: true,
src: [
'**/*',
- '!**/datasource.js',
- '!**/module.js',
- '!**/query.controller.js',
- '!**/utils.js',
- '!**/DataProcessor.js',
- '!**/zabbixAPICore.service.js',
- '!**/zabbixAPI.service.js',
- '!**/queryProcessor.service.js',
- '!**/zabbixCache.service.js',
- '!**/metricFunctions.js',
+ '!**/*.js',
'!**/*.scss'
],
dest: 'dist/'
@@ -55,16 +46,7 @@ module.exports = function(grunt) {
cwd: 'src',
expand: true,
src: [
- '**/**/module.js',
- '**/**/datasource.js',
- '**/**/query.controller.js',
- '**/**/utils.js',
- '**/**/DataProcessor.js',
- '**/**/zabbixAPICore.service.js',
- '**/**/zabbixAPI.service.js',
- '**/**/queryProcessor.service.js',
- '**/**/zabbixCache.service.js',
- '**/**/metricFunctions.js'
+ '**/**/*.js'
],
dest: 'dist/'
}]
diff --git a/src/datasource-zabbix/add-metric-function.directive.js b/src/datasource-zabbix/add-metric-function.directive.js
index 2001265..a3676ee 100644
--- a/src/datasource-zabbix/add-metric-function.directive.js
+++ b/src/datasource-zabbix/add-metric-function.directive.js
@@ -1,107 +1,104 @@
-define([
- 'angular',
- 'lodash',
- 'jquery',
- './metricFunctions'
-],
-function (angular, _, $, metricFunctions) {
- 'use strict';
+import angular from 'angular';
+import _ from 'lodash';
+import $ from 'jquery';
+import * as metricFunctions from './metricFunctions';
- angular
- .module('grafana.directives')
- .directive('addMetricFunction', function($compile) {
- var inputTemplate = '';
+/** @ngInject */
+angular
+ .module('grafana.directives')
+ .directive('addMetricFunction', function($compile) {
+ var inputTemplate = '';
- var buttonTemplate = '' +
- '';
+ var buttonTemplate = '' +
+ '';
- return {
- link: function($scope, elem) {
- var categories = metricFunctions.getCategories();
- var allFunctions = getAllFunctionNames(categories);
+ return {
+ link: function($scope, elem) {
+ var categories = metricFunctions.getCategories();
+ var allFunctions = getAllFunctionNames(categories);
- $scope.functionMenu = createFunctionDropDownMenu(categories);
+ $scope.functionMenu = createFunctionDropDownMenu(categories);
- var $input = $(inputTemplate);
- var $button = $(buttonTemplate);
- $input.appendTo(elem);
- $button.appendTo(elem);
+ var $input = $(inputTemplate);
+ var $button = $(buttonTemplate);
+ $input.appendTo(elem);
+ $button.appendTo(elem);
- $input.attr('data-provide', 'typeahead');
- $input.typeahead({
- source: allFunctions,
- minLength: 1,
- items: 10,
- updater: function (value) {
- var funcDef = metricFunctions.getFuncDef(value);
- if (!funcDef) {
- // try find close match
- value = value.toLowerCase();
- funcDef = _.find(allFunctions, function(funcName) {
- return funcName.toLowerCase().indexOf(value) === 0;
- });
-
- if (!funcDef) { return; }
- }
-
- $scope.$apply(function() {
- $scope.addFunction(funcDef);
+ $input.attr('data-provide', 'typeahead');
+ $input.typeahead({
+ source: allFunctions,
+ minLength: 1,
+ items: 10,
+ updater: function (value) {
+ var funcDef = metricFunctions.getFuncDef(value);
+ if (!funcDef) {
+ // try find close match
+ value = value.toLowerCase();
+ funcDef = _.find(allFunctions, function(funcName) {
+ return funcName.toLowerCase().indexOf(value) === 0;
});
- $input.trigger('blur');
- return '';
+ if (!funcDef) { return; }
}
- });
- $button.click(function() {
- $button.hide();
- $input.show();
- $input.focus();
- });
+ $scope.$apply(function() {
+ $scope.addFunction(funcDef);
+ });
- $input.keyup(function() {
- elem.toggleClass('open', $input.val() === '');
- });
+ $input.trigger('blur');
+ return '';
+ }
+ });
- $input.blur(function() {
- // clicking the function dropdown menu wont
- // work if you remove class at once
- setTimeout(function() {
- $input.val('');
- $input.hide();
- $button.show();
- elem.removeClass('open');
- }, 200);
- });
+ $button.click(function() {
+ $button.hide();
+ $input.show();
+ $input.focus();
+ });
- $compile(elem.contents())($scope);
- }
- };
+ $input.keyup(function() {
+ elem.toggleClass('open', $input.val() === '');
+ });
+
+ $input.blur(function() {
+ // clicking the function dropdown menu wont
+ // work if you remove class at once
+ setTimeout(function() {
+ $input.val('');
+ $input.hide();
+ $button.show();
+ elem.removeClass('open');
+ }, 200);
+ });
+
+ $compile(elem.contents())($scope);
+ }
+ };
+ });
+
+function getAllFunctionNames(categories) {
+ return _.reduce(categories, function(list, category) {
+ _.each(category, function(func) {
+ list.push(func.name);
});
+ return list;
+ }, []);
+}
- function getAllFunctionNames(categories) {
- return _.reduce(categories, function(list, category) {
- _.each(category, function(func) {
- list.push(func.name);
- });
- return list;
- }, []);
- }
+function createFunctionDropDownMenu(categories) {
+ return _.map(categories, function(list, category) {
+ return {
+ text: category,
+ submenu: _.map(list, function(value) {
+ return {
+ text: value.name,
+ click: "ctrl.addFunction('" + value.name + "')",
+ };
+ })
+ };
+ });
+}
- function createFunctionDropDownMenu(categories) {
- return _.map(categories, function(list, category) {
- return {
- text: category,
- submenu: _.map(list, function(value) {
- return {
- text: value.name,
- click: "ctrl.addFunction('" + value.name + "')",
- };
- })
- };
- });
- }
-});
diff --git a/src/datasource-zabbix/metric-function-editor.directive.js b/src/datasource-zabbix/metric-function-editor.directive.js
index a7af58c..e001194 100644
--- a/src/datasource-zabbix/metric-function-editor.directive.js
+++ b/src/datasource-zabbix/metric-function-editor.directive.js
@@ -1,247 +1,242 @@
-define([
- 'angular',
- 'lodash',
- 'jquery',
-],
-function (angular, _, $) {
- 'use strict';
+import angular from 'angular';
+import _ from 'lodash';
+import $ from 'jquery';
- angular
- .module('grafana.directives')
- .directive('metricFunctionEditor', function($compile, templateSrv) {
+/** @ngInject */
+angular
+ .module('grafana.directives')
+ .directive('metricFunctionEditor', function($compile, templateSrv) {
- var funcSpanTemplate = '{{func.def.name}}(';
- var paramTemplate = '';
+ var funcSpanTemplate = '{{func.def.name}}(';
+ var paramTemplate = '';
- var funcControlsTemplate =
- '
' +
- '' +
- '' +
- '' +
- '' +
- '
';
+ var funcControlsTemplate =
+ '' +
+ '' +
+ '' +
+ '' +
+ '' +
+ '
';
- return {
- restrict: 'A',
- link: function postLink($scope, elem) {
- var $funcLink = $(funcSpanTemplate);
- var $funcControls = $(funcControlsTemplate);
- var ctrl = $scope.ctrl;
- var func = $scope.func;
- var funcDef = func.def;
- var scheduledRelink = false;
- var paramCountAtLink = 0;
+ return {
+ restrict: 'A',
+ link: function postLink($scope, elem) {
+ var $funcLink = $(funcSpanTemplate);
+ var $funcControls = $(funcControlsTemplate);
+ var ctrl = $scope.ctrl;
+ var func = $scope.func;
+ var funcDef = func.def;
+ var scheduledRelink = false;
+ var paramCountAtLink = 0;
- function clickFuncParam(paramIndex) {
- /*jshint validthis:true */
+ function clickFuncParam(paramIndex) {
+ /*jshint validthis:true */
- var $link = $(this);
- var $input = $link.next();
+ var $link = $(this);
+ var $input = $link.next();
- $input.val(func.params[paramIndex]);
- $input.css('width', ($link.width() + 16) + 'px');
+ $input.val(func.params[paramIndex]);
+ $input.css('width', ($link.width() + 16) + 'px');
- $link.hide();
- $input.show();
- $input.focus();
- $input.select();
+ $link.hide();
+ $input.show();
+ $input.focus();
+ $input.select();
- var typeahead = $input.data('typeahead');
- if (typeahead) {
- $input.val('');
- typeahead.lookup();
- }
+ var typeahead = $input.data('typeahead');
+ if (typeahead) {
+ $input.val('');
+ typeahead.lookup();
+ }
+ }
+
+ function scheduledRelinkIfNeeded() {
+ if (paramCountAtLink === func.params.length) {
+ return;
}
- function scheduledRelinkIfNeeded() {
- if (paramCountAtLink === func.params.length) {
+ if (!scheduledRelink) {
+ scheduledRelink = true;
+ setTimeout(function() {
+ relink();
+ scheduledRelink = false;
+ }, 200);
+ }
+ }
+
+ function inputBlur(paramIndex) {
+ /*jshint validthis:true */
+ var $input = $(this);
+ var $link = $input.prev();
+ var newValue = $input.val();
+
+ if (newValue !== '' || func.def.params[paramIndex].optional) {
+ $link.html(templateSrv.highlightVariablesAsHtml(newValue));
+
+ func.updateParam($input.val(), paramIndex);
+ scheduledRelinkIfNeeded();
+
+ $scope.$apply(function() {
+ ctrl.targetChanged();
+ });
+
+ $input.hide();
+ $link.show();
+ }
+ }
+
+ function inputKeyPress(paramIndex, e) {
+ /*jshint validthis:true */
+ if(e.which === 13) {
+ inputBlur.call(this, paramIndex);
+ }
+ }
+
+ function inputKeyDown() {
+ /*jshint validthis:true */
+ this.style.width = (3 + this.value.length) * 8 + 'px';
+ }
+
+ function addTypeahead($input, paramIndex) {
+ $input.attr('data-provide', 'typeahead');
+
+ var options = funcDef.params[paramIndex].options;
+ if (funcDef.params[paramIndex].type === 'int') {
+ options = _.map(options, function(val) { return val.toString(); });
+ }
+
+ $input.typeahead({
+ source: options,
+ minLength: 0,
+ items: 20,
+ updater: function (value) {
+ setTimeout(function() {
+ inputBlur.call($input[0], paramIndex);
+ }, 0);
+ return value;
+ }
+ });
+
+ var typeahead = $input.data('typeahead');
+ typeahead.lookup = function () {
+ this.query = this.$element.val() || '';
+ return this.process(this.source);
+ };
+ }
+
+ function toggleFuncControls() {
+ var targetDiv = elem.closest('.tight-form');
+
+ if (elem.hasClass('show-function-controls')) {
+ elem.removeClass('show-function-controls');
+ targetDiv.removeClass('has-open-function');
+ $funcControls.hide();
+ return;
+ }
+
+ elem.addClass('show-function-controls');
+ targetDiv.addClass('has-open-function');
+
+ $funcControls.show();
+ }
+
+ function addElementsAndCompile() {
+ $funcControls.appendTo(elem);
+ $funcLink.appendTo(elem);
+
+ _.each(funcDef.params, function(param, index) {
+ if (param.optional && func.params.length <= index) {
return;
}
- if (!scheduledRelink) {
- scheduledRelink = true;
- setTimeout(function() {
- relink();
- scheduledRelink = false;
- }, 200);
+ if (index > 0) {
+ $(', ').appendTo(elem);
}
+
+ var paramValue = templateSrv.highlightVariablesAsHtml(func.params[index]);
+ var $paramLink = $('' + paramValue + '');
+ var $input = $(paramTemplate);
+
+ paramCountAtLink++;
+
+ $paramLink.appendTo(elem);
+ $input.appendTo(elem);
+
+ $input.blur(_.partial(inputBlur, index));
+ $input.keyup(inputKeyDown);
+ $input.keypress(_.partial(inputKeyPress, index));
+ $paramLink.click(_.partial(clickFuncParam, index));
+
+ if (funcDef.params[index].options) {
+ addTypeahead($input, index);
+ }
+
+ });
+
+ $(')').appendTo(elem);
+
+ $compile(elem.contents())($scope);
+ }
+
+ function ifJustAddedFocusFistParam() {
+ if ($scope.func.added) {
+ $scope.func.added = false;
+ setTimeout(function() {
+ elem.find('.graphite-func-param-link').first().click();
+ }, 10);
}
+ }
- function inputBlur(paramIndex) {
- /*jshint validthis:true */
- var $input = $(this);
- var $link = $input.prev();
- var newValue = $input.val();
-
- if (newValue !== '' || func.def.params[paramIndex].optional) {
- $link.html(templateSrv.highlightVariablesAsHtml(newValue));
-
- func.updateParam($input.val(), paramIndex);
- scheduledRelinkIfNeeded();
+ function registerFuncControlsToggle() {
+ $funcLink.click(toggleFuncControls);
+ }
+ function registerFuncControlsActions() {
+ $funcControls.click(function(e) {
+ var $target = $(e.target);
+ if ($target.hasClass('fa-remove')) {
+ toggleFuncControls();
$scope.$apply(function() {
+ ctrl.removeFunction($scope.func);
+ });
+ return;
+ }
+
+ if ($target.hasClass('fa-arrow-left')) {
+ $scope.$apply(function() {
+ _.move($scope.target.functions, $scope.$index, $scope.$index - 1);
ctrl.targetChanged();
});
-
- $input.hide();
- $link.show();
- }
- }
-
- function inputKeyPress(paramIndex, e) {
- /*jshint validthis:true */
- if(e.which === 13) {
- inputBlur.call(this, paramIndex);
- }
- }
-
- function inputKeyDown() {
- /*jshint validthis:true */
- this.style.width = (3 + this.value.length) * 8 + 'px';
- }
-
- function addTypeahead($input, paramIndex) {
- $input.attr('data-provide', 'typeahead');
-
- var options = funcDef.params[paramIndex].options;
- if (funcDef.params[paramIndex].type === 'int') {
- options = _.map(options, function(val) { return val.toString(); });
- }
-
- $input.typeahead({
- source: options,
- minLength: 0,
- items: 20,
- updater: function (value) {
- setTimeout(function() {
- inputBlur.call($input[0], paramIndex);
- }, 0);
- return value;
- }
- });
-
- var typeahead = $input.data('typeahead');
- typeahead.lookup = function () {
- this.query = this.$element.val() || '';
- return this.process(this.source);
- };
- }
-
- function toggleFuncControls() {
- var targetDiv = elem.closest('.tight-form');
-
- if (elem.hasClass('show-function-controls')) {
- elem.removeClass('show-function-controls');
- targetDiv.removeClass('has-open-function');
- $funcControls.hide();
return;
}
- elem.addClass('show-function-controls');
- targetDiv.addClass('has-open-function');
-
- $funcControls.show();
- }
-
- function addElementsAndCompile() {
- $funcControls.appendTo(elem);
- $funcLink.appendTo(elem);
-
- _.each(funcDef.params, function(param, index) {
- if (param.optional && func.params.length <= index) {
- return;
- }
-
- if (index > 0) {
- $(', ').appendTo(elem);
- }
-
- var paramValue = templateSrv.highlightVariablesAsHtml(func.params[index]);
- var $paramLink = $('' + paramValue + '');
- var $input = $(paramTemplate);
-
- paramCountAtLink++;
-
- $paramLink.appendTo(elem);
- $input.appendTo(elem);
-
- $input.blur(_.partial(inputBlur, index));
- $input.keyup(inputKeyDown);
- $input.keypress(_.partial(inputKeyPress, index));
- $paramLink.click(_.partial(clickFuncParam, index));
-
- if (funcDef.params[index].options) {
- addTypeahead($input, index);
- }
-
- });
-
- $(')').appendTo(elem);
-
- $compile(elem.contents())($scope);
- }
-
- function ifJustAddedFocusFistParam() {
- if ($scope.func.added) {
- $scope.func.added = false;
- setTimeout(function() {
- elem.find('.graphite-func-param-link').first().click();
- }, 10);
+ if ($target.hasClass('fa-arrow-right')) {
+ $scope.$apply(function() {
+ _.move($scope.target.functions, $scope.$index, $scope.$index + 1);
+ ctrl.targetChanged();
+ });
+ return;
}
- }
- function registerFuncControlsToggle() {
- $funcLink.click(toggleFuncControls);
- }
-
- function registerFuncControlsActions() {
- $funcControls.click(function(e) {
- var $target = $(e.target);
- if ($target.hasClass('fa-remove')) {
- toggleFuncControls();
- $scope.$apply(function() {
- ctrl.removeFunction($scope.func);
- });
- return;
- }
-
- if ($target.hasClass('fa-arrow-left')) {
- $scope.$apply(function() {
- _.move($scope.target.functions, $scope.$index, $scope.$index - 1);
- ctrl.targetChanged();
- });
- return;
- }
-
- if ($target.hasClass('fa-arrow-right')) {
- $scope.$apply(function() {
- _.move($scope.target.functions, $scope.$index, $scope.$index + 1);
- ctrl.targetChanged();
- });
- return;
- }
-
- if ($target.hasClass('fa-question-circle')) {
- window.open("http://graphite.readthedocs.org/en/latest/functions.html#graphite.render.functions." + funcDef.name,'_blank');
- return;
- }
- });
- }
-
- function relink() {
- elem.children().remove();
-
- addElementsAndCompile();
- ifJustAddedFocusFistParam();
- registerFuncControlsToggle();
- registerFuncControlsActions();
- }
-
- relink();
+ if ($target.hasClass('fa-question-circle')) {
+ window.open("http://graphite.readthedocs.org/en/latest/functions.html#graphite.render.functions." + funcDef.name,'_blank');
+ return;
+ }
+ });
}
- };
- });
+ function relink() {
+ elem.children().remove();
-});
+ addElementsAndCompile();
+ ifJustAddedFocusFistParam();
+ registerFuncControlsToggle();
+ registerFuncControlsActions();
+ }
+
+ relink();
+ }
+ };
+
+ });