|
|
@ -52,12 +52,11 @@ export class GraphRenderer { |
|
|
|
private $elem: JQuery<HTMLElement>; |
|
|
|
private $elem: JQuery<HTMLElement>; |
|
|
|
// private annotations: any[];
|
|
|
|
// private annotations: any[];
|
|
|
|
private contextSrv: any; |
|
|
|
private contextSrv: any; |
|
|
|
private popoverSrv: any; |
|
|
|
|
|
|
|
private scope: any; |
|
|
|
private scope: any; |
|
|
|
private timeSrv: any; |
|
|
|
private timeSrv: any; |
|
|
|
private _graphMousePosition: any; |
|
|
|
private _graphMousePosition: any; |
|
|
|
|
|
|
|
|
|
|
|
constructor ($elem: JQuery<HTMLElement>, timeSrv, popoverSrv, contextSrv, scope) { |
|
|
|
constructor ($elem: JQuery<HTMLElement>, timeSrv, contextSrv, scope) { |
|
|
|
|
|
|
|
|
|
|
|
var self = this; |
|
|
|
var self = this; |
|
|
|
this.$elem = $elem; |
|
|
|
this.$elem = $elem; |
|
|
@ -66,7 +65,6 @@ export class GraphRenderer { |
|
|
|
this.panel = this.ctrl.panel; |
|
|
|
this.panel = this.ctrl.panel; |
|
|
|
|
|
|
|
|
|
|
|
this.timeSrv = timeSrv; |
|
|
|
this.timeSrv = timeSrv; |
|
|
|
this.popoverSrv = popoverSrv; |
|
|
|
|
|
|
|
this.contextSrv = contextSrv; |
|
|
|
this.contextSrv = contextSrv; |
|
|
|
this.scope = scope; |
|
|
|
this.scope = scope; |
|
|
|
|
|
|
|
|
|
|
@ -89,7 +87,6 @@ export class GraphRenderer { |
|
|
|
|
|
|
|
|
|
|
|
// panel events
|
|
|
|
// panel events
|
|
|
|
this.ctrl.events.on('panel-teardown', () => { |
|
|
|
this.ctrl.events.on('panel-teardown', () => { |
|
|
|
|
|
|
|
|
|
|
|
if (this.plot) { |
|
|
|
if (this.plot) { |
|
|
|
this.plot.destroy(); |
|
|
|
this.plot.destroy(); |
|
|
|
this.plot = null; |
|
|
|
this.plot = null; |
|
|
@ -100,7 +97,42 @@ export class GraphRenderer { |
|
|
|
appEvents.on('graph-hover', this._onGraphHover.bind(this), scope); |
|
|
|
appEvents.on('graph-hover', this._onGraphHover.bind(this), scope); |
|
|
|
appEvents.on('graph-hover-clear', this._onGraphHoverClear.bind(this), scope); |
|
|
|
appEvents.on('graph-hover-clear', this._onGraphHoverClear.bind(this), scope); |
|
|
|
|
|
|
|
|
|
|
|
$elem.bind('plotselected', (event, selectionEvent) => { |
|
|
|
$elem.bind('plotselected', this._onPlotSelected.bind(this)); |
|
|
|
|
|
|
|
$elem.bind('plotclick', this._onPlotClick.bind(this)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$elem.mouseleave(() => { |
|
|
|
|
|
|
|
if (this.panel.tooltip.shared) { |
|
|
|
|
|
|
|
var plot = $elem.data().plot; |
|
|
|
|
|
|
|
if (plot) { |
|
|
|
|
|
|
|
this.tooltip.clear(plot); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
appEvents.emit('graph-hover-clear'); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$elem.bind("plothover", (event, pos, item) => { |
|
|
|
|
|
|
|
self.tooltip.show(pos, item); |
|
|
|
|
|
|
|
pos.panelRelY = (pos.pageY - $elem.offset().top) / $elem.height(); |
|
|
|
|
|
|
|
self._graphMousePosition = this.plot.p2c(pos); |
|
|
|
|
|
|
|
appEvents.emit('graph-hover', { pos: pos, panel: this.panel }); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$elem.bind("plotclick", (event, pos, item) => { |
|
|
|
|
|
|
|
appEvents.emit('graph-click', { pos: pos, panel: this.panel, item: item }); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$elem.mousedown(e => { |
|
|
|
|
|
|
|
this._analyticController.graphLocked = true; |
|
|
|
|
|
|
|
this._chooseSelectionColor(e); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$(document).mouseup(e => { |
|
|
|
|
|
|
|
this._analyticController.graphLocked = false; |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private _onPlotSelected(event, selectionEvent) { |
|
|
|
if (this.panel.xaxis.mode !== 'time') { |
|
|
|
if (this.panel.xaxis.mode !== 'time') { |
|
|
|
// Skip if panel in histogram or series mode
|
|
|
|
// Skip if panel in histogram or series mode
|
|
|
|
this.plot.clearSelection(); |
|
|
|
this.plot.clearSelection(); |
|
|
@ -122,25 +154,26 @@ export class GraphRenderer { |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
this._analyticController.addLabelSegment(segment); |
|
|
|
this._analyticController.addLabelSegment(segment); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
this.renderPanel(); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if ((selectionEvent.ctrlKey || selectionEvent.metaKey) && contextSrv.isEditor) { |
|
|
|
if ((selectionEvent.ctrlKey || selectionEvent.metaKey) && this.contextSrv.isEditor) { |
|
|
|
// Add annotation
|
|
|
|
// Add annotation
|
|
|
|
setTimeout(() => { |
|
|
|
// setTimeout(() => {
|
|
|
|
// this.eventManager.updateTime(selectionEvent.xaxis);
|
|
|
|
// this.eventManager.updateTime(selectionEvent.xaxis);
|
|
|
|
}, 100); |
|
|
|
// }, 100);
|
|
|
|
} else { |
|
|
|
} else { |
|
|
|
scope.$apply(function() { |
|
|
|
this.scope.$apply(function() { |
|
|
|
timeSrv.setTime({ |
|
|
|
this.timeSrv.setTime({ |
|
|
|
from: moment.utc(selectionEvent.xaxis.from), |
|
|
|
from: moment.utc(selectionEvent.xaxis.from), |
|
|
|
to: moment.utc(selectionEvent.xaxis.to), |
|
|
|
to: moment.utc(selectionEvent.xaxis.to), |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
$elem.bind('plotclick', (event, flotEvent, item) => { |
|
|
|
private _onPlotClick(event, flotEvent, item) { |
|
|
|
if (this.panel.xaxis.mode !== 'time') { |
|
|
|
if (this.panel.xaxis.mode !== 'time') { |
|
|
|
// Skip if panel in histogram or series mode
|
|
|
|
// Skip if panel in histogram or series mode
|
|
|
|
return; |
|
|
|
return; |
|
|
@ -150,47 +183,15 @@ export class GraphRenderer { |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if ((flotEvent.ctrlKey || flotEvent.metaKey) && contextSrv.isEditor) { |
|
|
|
if ((flotEvent.ctrlKey || flotEvent.metaKey) && this.contextSrv.isEditor) { |
|
|
|
// Skip if range selected (added in "plotselected" event handler)
|
|
|
|
// Skip if range selected (added in "plotselected" event handler)
|
|
|
|
let isRangeSelection = flotEvent.x !== flotEvent.x1; |
|
|
|
// let isRangeSelection = flotEvent.x !== flotEvent.x1;
|
|
|
|
if (!isRangeSelection) { |
|
|
|
// if (!isRangeSelection) {
|
|
|
|
setTimeout(() => { |
|
|
|
// setTimeout(() => {
|
|
|
|
// this.eventManager.updateTime({ from: flotEvent.x, to: null });
|
|
|
|
// this.eventManager.updateTime({ from: flotEvent.x, to: null });
|
|
|
|
}, 100); |
|
|
|
// }, 100);
|
|
|
|
} |
|
|
|
// }
|
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$elem.mouseleave(() => { |
|
|
|
|
|
|
|
if (this.panel.tooltip.shared) { |
|
|
|
|
|
|
|
var plot = $elem.data().plot; |
|
|
|
|
|
|
|
if (plot) { |
|
|
|
|
|
|
|
this.tooltip.clear(plot); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
appEvents.emit('graph-hover-clear'); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$elem.bind("plothover", (event, pos, item) => { |
|
|
|
|
|
|
|
self.tooltip.show(pos, item); |
|
|
|
|
|
|
|
pos.panelRelY = (pos.pageY - $elem.offset().top) / $elem.height(); |
|
|
|
|
|
|
|
self._graphMousePosition = this.plot.p2c(pos); |
|
|
|
|
|
|
|
appEvents.emit('graph-hover', { pos: pos, panel: this.panel }); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$elem.bind("plotclick", (event, pos, item) => { |
|
|
|
|
|
|
|
appEvents.emit('graph-click', { pos: pos, panel: this.panel, item: item }); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$elem.mousedown(e => { |
|
|
|
|
|
|
|
this._analyticController.graphLocked = true; |
|
|
|
|
|
|
|
this._chooseSelectionColor(e); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$(document).mouseup(e => { |
|
|
|
|
|
|
|
this._analyticController.graphLocked = false; |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public render(renderData) { |
|
|
|
public render(renderData) { |
|
|
|