|
@@ -1,10 +1,12 @@
|
|
|
define([
|
|
define([
|
|
|
'jquery',
|
|
'jquery',
|
|
|
- 'lodash'
|
|
|
|
|
|
|
+ 'app/core/core',
|
|
|
],
|
|
],
|
|
|
-function ($) {
|
|
|
|
|
|
|
+function ($, core) {
|
|
|
'use strict';
|
|
'use strict';
|
|
|
|
|
|
|
|
|
|
+ var appEvents = core.appEvents;
|
|
|
|
|
+
|
|
|
function GraphTooltip(elem, dashboard, scope, getSeriesFn) {
|
|
function GraphTooltip(elem, dashboard, scope, getSeriesFn) {
|
|
|
var self = this;
|
|
var self = this;
|
|
|
var ctrl = scope.ctrl;
|
|
var ctrl = scope.ctrl;
|
|
@@ -41,7 +43,7 @@ function ($) {
|
|
|
return j - 1;
|
|
return j - 1;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- this.showTooltip = function(absoluteTime, innerHtml, pos, xMode) {
|
|
|
|
|
|
|
+ this.renderAndShow = function(absoluteTime, innerHtml, pos, xMode) {
|
|
|
if (xMode === 'time') {
|
|
if (xMode === 'time') {
|
|
|
innerHtml = '<div class="graph-tooltip-time">'+ absoluteTime + '</div>' + innerHtml;
|
|
innerHtml = '<div class="graph-tooltip-time">'+ absoluteTime + '</div>' + innerHtml;
|
|
|
}
|
|
}
|
|
@@ -140,43 +142,34 @@ function ($) {
|
|
|
plot.unhighlight();
|
|
plot.unhighlight();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- if (dashboard.sharedTooltip) {
|
|
|
|
|
- ctrl.publishAppEvent('clearTooltip');
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if (dashboard.sharedCrosshair) {
|
|
|
|
|
- ctrl.publishAppEvent('clearCrosshair');
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ appEvents.emit('graph-hover-clear');
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
elem.bind("plothover", function (event, pos, item) {
|
|
elem.bind("plothover", function (event, pos, item) {
|
|
|
- if (dashboard.sharedCrosshair) {
|
|
|
|
|
- ctrl.publishAppEvent('setCrosshair', {pos: pos, scope: scope});
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ self.show(pos, item);
|
|
|
|
|
|
|
|
- if (dashboard.sharedTooltip) {
|
|
|
|
|
- pos.panelRelY = (pos.pageY - elem.offset().top) / elem.height();
|
|
|
|
|
- ctrl.publishAppEvent('setTooltip', {pos: pos, scope: scope});
|
|
|
|
|
- }
|
|
|
|
|
- self.setTooltip(pos, item);
|
|
|
|
|
|
|
+ // broadcast to other graph panels that we are hovering!
|
|
|
|
|
+ pos.panelRelY = (pos.pageY - elem.offset().top) / elem.height();
|
|
|
|
|
+ appEvents.emit('graph-hover', {pos: pos, panel: panel});
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
- this.clearTooltip = function() {
|
|
|
|
|
|
|
+ this.clear = function(plot) {
|
|
|
$tooltip.detach();
|
|
$tooltip.detach();
|
|
|
|
|
+ plot.clearCrosshair();
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- this.setTooltip = function(pos, item) {
|
|
|
|
|
|
|
+ this.show = function(pos, item) {
|
|
|
var plot = elem.data().plot;
|
|
var plot = elem.data().plot;
|
|
|
var plotData = plot.getData();
|
|
var plotData = plot.getData();
|
|
|
var xAxes = plot.getXAxes();
|
|
var xAxes = plot.getXAxes();
|
|
|
var xMode = xAxes[0].options.mode;
|
|
var xMode = xAxes[0].options.mode;
|
|
|
var seriesList = getSeriesFn();
|
|
var seriesList = getSeriesFn();
|
|
|
|
|
+ var allSeriesMode = panel.tooltip.shared;
|
|
|
var group, value, absoluteTime, hoverInfo, i, series, seriesHtml, tooltipFormat;
|
|
var group, value, absoluteTime, hoverInfo, i, series, seriesHtml, tooltipFormat;
|
|
|
|
|
|
|
|
// if panelRelY is defined another panel wants us to show a tooltip
|
|
// if panelRelY is defined another panel wants us to show a tooltip
|
|
|
// get pageX from position on x axis and pageY from relative position in original panel
|
|
// get pageX from position on x axis and pageY from relative position in original panel
|
|
|
- if (pos.panelRelY !== undefined) {
|
|
|
|
|
|
|
+ if (pos.panelRelY) {
|
|
|
var pointOffset = plot.pointOffset({x: pos.x});
|
|
var pointOffset = plot.pointOffset({x: pos.x});
|
|
|
if (Number.isNaN(pointOffset.left) || pointOffset.left < 0) {
|
|
if (Number.isNaN(pointOffset.left) || pointOffset.left < 0) {
|
|
|
$tooltip.detach();
|
|
$tooltip.detach();
|
|
@@ -184,6 +177,8 @@ function ($) {
|
|
|
}
|
|
}
|
|
|
pos.pageX = elem.offset().left + pointOffset.left;
|
|
pos.pageX = elem.offset().left + pointOffset.left;
|
|
|
pos.pageY = elem.offset().top + elem.height() * pos.panelRelY;
|
|
pos.pageY = elem.offset().top + elem.height() * pos.panelRelY;
|
|
|
|
|
+ plot.setCrosshair(pos);
|
|
|
|
|
+ allSeriesMode = true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (seriesList.length === 0) {
|
|
if (seriesList.length === 0) {
|
|
@@ -196,7 +191,7 @@ function ($) {
|
|
|
tooltipFormat = 'YYYY-MM-DD HH:mm:ss';
|
|
tooltipFormat = 'YYYY-MM-DD HH:mm:ss';
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if (panel.tooltip.shared) {
|
|
|
|
|
|
|
+ if (allSeriesMode) {
|
|
|
plot.unhighlight();
|
|
plot.unhighlight();
|
|
|
|
|
|
|
|
var seriesHoverInfo = self.getMultiSeriesPlotHoverInfo(plotData, pos);
|
|
var seriesHoverInfo = self.getMultiSeriesPlotHoverInfo(plotData, pos);
|
|
@@ -239,7 +234,7 @@ function ($) {
|
|
|
plot.highlight(hoverInfo.index, hoverInfo.hoverIndex);
|
|
plot.highlight(hoverInfo.index, hoverInfo.hoverIndex);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- self.showTooltip(absoluteTime, seriesHtml, pos, xMode);
|
|
|
|
|
|
|
+ self.renderAndShow(absoluteTime, seriesHtml, pos, xMode);
|
|
|
}
|
|
}
|
|
|
// single series tooltip
|
|
// single series tooltip
|
|
|
else if (item) {
|
|
else if (item) {
|
|
@@ -260,7 +255,7 @@ function ($) {
|
|
|
|
|
|
|
|
group += '<div class="graph-tooltip-value">' + value + '</div>';
|
|
group += '<div class="graph-tooltip-value">' + value + '</div>';
|
|
|
|
|
|
|
|
- self.showTooltip(absoluteTime, group, pos, xMode);
|
|
|
|
|
|
|
+ self.renderAndShow(absoluteTime, group, pos, xMode);
|
|
|
}
|
|
}
|
|
|
// no hit
|
|
// no hit
|
|
|
else {
|
|
else {
|