mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Added files removed in merge
This commit is contained in:
parent
bf6f0f1a65
commit
3f97bd8212
0
public/app/directives/giveFocus.js
Normal file
0
public/app/directives/giveFocus.js
Normal file
146
public/app/features/dashboard/dynamicDashboardSrv.js
Normal file
146
public/app/features/dashboard/dynamicDashboardSrv.js
Normal file
@ -0,0 +1,146 @@
|
||||
define([
|
||||
'angular',
|
||||
'lodash',
|
||||
],
|
||||
function (angular, _) {
|
||||
'use strict';
|
||||
|
||||
var module = angular.module('grafana.services');
|
||||
|
||||
module.service('dynamicDashboardSrv', function() {
|
||||
|
||||
this.init = function(dashboard) {
|
||||
this.handlePanelRepeats(dashboard);
|
||||
this.handleRowRepeats(dashboard);
|
||||
};
|
||||
|
||||
this.update = function(dashboard) {
|
||||
this.handlePanelRepeats(dashboard);
|
||||
this.handleRowRepeats(dashboard);
|
||||
};
|
||||
|
||||
this.removeLinkedPanels = function(dashboard) {
|
||||
var i, j, row, panel;
|
||||
for (i = 0; i < dashboard.rows.length; i++) {
|
||||
row = dashboard.rows[i];
|
||||
for (j = 0; j < row.panels.length; j++) {
|
||||
panel = row.panels[j];
|
||||
if (panel.linked) {
|
||||
row.panels = _.without(row.panels, panel);
|
||||
j = j - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.handlePanelRepeats = function(dashboard) {
|
||||
this.removeLinkedPanels(dashboard);
|
||||
|
||||
var i, j, row, panel;
|
||||
for (i = 0; i < dashboard.rows.length; i++) {
|
||||
row = dashboard.rows[i];
|
||||
for (j = 0; j < row.panels.length; j++) {
|
||||
panel = row.panels[j];
|
||||
if (panel.repeat) {
|
||||
this.repeatPanel(panel, row, dashboard);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.removeLinkedRows = function(dashboard) {
|
||||
var i, row;
|
||||
for (i = 0; i < dashboard.rows.length; i++) {
|
||||
row = dashboard.rows[i];
|
||||
if (row.linked) {
|
||||
dashboard.rows = _.without(dashboard.rows, row);
|
||||
i = i - 1;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.handleRowRepeats = function(dashboard) {
|
||||
this.removeLinkedRows(dashboard);
|
||||
var i, row;
|
||||
for (i = 0; i < dashboard.rows.length; i++) {
|
||||
row = dashboard.rows[i];
|
||||
if (row.repeat) {
|
||||
this.repeatRow(row, dashboard);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.repeatRow = function(row, dashboard) {
|
||||
console.log('repeat row');
|
||||
var variables = dashboard.templating.list;
|
||||
var variable = _.findWhere(variables, {name: row.repeat.replace('$', '')});
|
||||
if (!variable) {
|
||||
return;
|
||||
}
|
||||
|
||||
var selected, copy, i, panel;
|
||||
if (variable.current.text === 'All') {
|
||||
selected = variable.options.slice(1, variable.options.length);
|
||||
} else {
|
||||
selected = _.filter(variable.options, {selected: true});
|
||||
}
|
||||
|
||||
_.each(selected, function(option, index) {
|
||||
if (index > 0) {
|
||||
copy = angular.copy(row);
|
||||
copy.repeat = null;
|
||||
copy.linked = true;
|
||||
|
||||
// set new panel ids
|
||||
for (i = 0; i < copy.panels.length; i++) {
|
||||
panel = row.panels[i];
|
||||
panel.id = dashboard.getNextPanelId();
|
||||
}
|
||||
|
||||
dashboard.rows.push(copy);
|
||||
} else {
|
||||
copy = row;
|
||||
}
|
||||
|
||||
for (i = 0; i < copy.panels.length; i++) {
|
||||
panel = copy.panels[i];
|
||||
panel.scopedVars = panel.scopedVars || {};
|
||||
panel.scopedVars[variable.name] = option;
|
||||
}
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
this.repeatPanel = function(panel, row, dashboard) {
|
||||
var variables = dashboard.templating.list;
|
||||
var variable = _.findWhere(variables, {name: panel.repeat.replace('$', '')});
|
||||
if (!variable) {
|
||||
return;
|
||||
}
|
||||
|
||||
var selected;
|
||||
if (variable.current.text === 'All') {
|
||||
selected = variable.options.slice(1, variable.options.length);
|
||||
} else {
|
||||
selected = _.filter(variable.options, {selected: true});
|
||||
}
|
||||
|
||||
_.each(selected, function(option, index) {
|
||||
if (index > 0) {
|
||||
var copy = dashboard.duplicatePanel(panel, row);
|
||||
copy.repeat = null;
|
||||
copy.linked = true;
|
||||
copy.scopedVars = {};
|
||||
copy.scopedVars[variable.name] = option;
|
||||
} else {
|
||||
panel.scopedVars = {};
|
||||
panel.scopedVars[variable.name] = option;
|
||||
}
|
||||
console.log('duplicatePanel');
|
||||
});
|
||||
};
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
@ -0,0 +1,23 @@
|
||||
<a ng-click="show()" class="variable-value-link">
|
||||
{{linkText}}
|
||||
<i class="fa fa-caret-down"></i>
|
||||
</a>
|
||||
|
||||
<div ng-if="selectorOpen" class="variable-value-dropdown">
|
||||
<div class="search-field-wrapper">
|
||||
<span style="position: relative;">
|
||||
<input type="text" placeholder="Search variable values" give-focus="giveFocus" tabindex="1"
|
||||
ng-keydown="keyDown($event)" ng-model="query.query" ng-model-options="{ debounce: 500 }" spellcheck='false' ng-change="search()" />
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="variable-options-container" ng-if="!query.tagcloud">
|
||||
<a class="variable-option pointer" bindonce ng-repeat="option in options"
|
||||
ng-class="{'selected': option.selected}" ng-click="optionSelected(option)">
|
||||
<i class="fa fa-fw fa-square-o"></i>
|
||||
<i class="fa fa-fw fa-check-square-o"></i>
|
||||
<span >{{option.text}}</label>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
Loading…
Reference in New Issue
Block a user