`), \"\\n\");\n\n }\n\n // Ambiguous state: there multiple values in bucket!\n // TODO rename useMax to expectMultipleValues\n if (!this.panel.useMax && bucket.multipleValues) {\n tooltipHtml += `
Error: ${this.panelCtrl.dataWarnings.multipleValues.title}
`;\n }\n\n // Discrete mode errors\n if (this.panel.color.mode === 'discrete') {\n if (bucket.noColorDefined) {\n let badValues = this.panelCtrl.discreteExtraSeries.getNotColoredValues(values);\n tooltipHtml += `
Error: ${this.panelCtrl.dataWarnings.noColorDefined.title}\n
not colored values:\n
\n ${_.join(_.map(badValues, v => `- ${v}
`), \"\")}\n
\n
`;\n }\n }\n\n tooltip.html(tooltipHtml);\n\n // Assign mouse event handlers for \"frozen\" tooltip.\n if (frozen) {\n // Stop propagation mouse events up to parents to allow interaction with frozen tooltip’s elements.\n tooltip\n .on(\"click\", function(){d3.event.stopPropagation(); })\n .on(\"mousedown\", function(){d3.event.stopPropagation(); })\n .on(\"mouseup\", function(){d3.event.stopPropagation(); });\n\n // Activate close button\n tooltip.select(\"a.tooltip-close\")\n .on(\"click\", this.removeFrozen.bind(this));\n }\n }\n\n // Move tooltip as absolute positioned element.\n move(pos, tooltip) {\n if (!tooltip) { return; }\n\n let elem = $(tooltip.node())[0];\n let tooltipWidth = elem.clientWidth;\n this.tooltipWidth = tooltipWidth;\n let tooltipHeight = elem.clientHeight;\n\n let left = pos.pageX + TOOLTIP_PADDING_X;\n let top = pos.pageY + TOOLTIP_PADDING_Y;\n\n if (pos.pageX + tooltipWidth + 40 > window.innerWidth) {\n left = pos.pageX - tooltipWidth - TOOLTIP_PADDING_X;\n }\n\n if (pos.pageY - window.pageYOffset + tooltipHeight + 20 > window.innerHeight) {\n top = pos.pageY - tooltipHeight - TOOLTIP_PADDING_Y;\n }\n\n return tooltip\n .style(\"left\", left + \"px\")\n .style(\"top\", top + \"px\");\n }\n\n // Move tooltip relative to svg element of panel.\n moveRelative(pos, tooltip) {\n if (!tooltip) { return; }\n\n let panelX = pos.pageX - this.panelElem.offset().left;\n let panelY = pos.pageY - this.panelElem.offset().top;\n let panelWidth = this.panelElem.width();\n let panelHeight = this.panelElem.height();\n\n // 'position: relative' sets tooltip’s width to 100% of panel element.\n // Restore width from floating tooltip and add more space for 'Close' button.\n let tooltipWidth = this.tooltipWidth + 25;\n\n // Left property is clamped so tooltip stays inside panel bound box.\n let tooltipLeft = panelX + TOOLTIP_PADDING_X;\n if (tooltipLeft + tooltipWidth > panelWidth) {\n tooltipLeft = panelWidth - tooltipWidth;\n }\n if (tooltipLeft < 0 ) {\n tooltipLeft = 0;\n }\n\n // Frozen tooltip’s root element is appended next to panel’s svg element,\n // so top property is adjusted to move tooltip’s root element\n // up to the mouse pointer position.\n let tooltipTop = -(panelHeight - panelY + TOOLTIP_PADDING_Y);\n\n return tooltip\n .style(\"left\", tooltipLeft + \"px\")\n .style(\"top\", tooltipTop + \"px\")\n .style(\"width\", tooltipWidth + \"px\");\n }\n\n\n}\n"],"file":"tooltip.js"}
\ No newline at end of file
+{"version":3,"sources":["../src/tooltip.ts"],"names":["d3","$","_","TOOLTIP_PADDING_X","TOOLTIP_PADDING_Y","DefaultValueDateFormat","StatusmapTooltip","elem","scope","dashboard","ctrl","panelCtrl","panel","panelElem","mouseOverBucket","originalFillColor","on","onMouseOver","bind","onMouseLeave","e","tooltip","show","data","isEmpty","add","move","destroy","select","append","attr","remove","tooltipFrozen","pos","removeFrozen","displayTooltip","moveRelative","panelRelY","frozen","cardEl","target","yid","xid","bucket","bucketMatrix","get","timestamp","to","yLabel","value","values","tooltipTimeFormat","time","formatDate","tooltipClose","tooltipHtml","color","mode","statuses","seriesFilterIndex","discreteExtraSeries","convertValueToTooltips","convertValuesToTooltips","statusTitle","length","join","map","v","showItems","items","JSON","parse","stringify","scopedVars","valueVar","i","retrieveTimeVar","item","urlTemplate","link","dateFormat","valueDateFormat","valueDateVar","templateSrv","replace","urlToLowerCase","toLowerCase","label","urlText","truncate","urlIcon","useMax","multipleValues","dataWarnings","title","noColorDefined","badValues","getNotColoredValues","html","event","stopPropagation","node","tooltipWidth","clientWidth","tooltipHeight","clientHeight","left","pageX","top","pageY","window","innerWidth","pageYOffset","innerHeight","style","panelX","offset","panelY","panelWidth","width","panelHeight","height","tooltipLeft","tooltipTop"],"mappings":"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","sourcesContent":["import d3 from 'd3';\nimport $ from 'jquery';\nimport _ from 'lodash';\n\nimport { StatusHeatmapCtrl } from './module';\n\nlet TOOLTIP_PADDING_X = 30;\nlet TOOLTIP_PADDING_Y = 5;\n\n// TODO rename file to tooltip_ctrl.ts\n// TODO move DefaultValueDateFormat into tooltip.ts, as it used in several places (migration, partial and tooltip render)\nlet DefaultValueDateFormat = 'YYYY/MM/DD/HH_mm_ss';\n\nexport class StatusmapTooltip {\n tooltip: any;\n scope: any;\n dashboard: any;\n panelCtrl: StatusHeatmapCtrl;\n panel: any;\n panelElem: any;\n mouseOverBucket: any;\n originalFillColor: any;\n\n tooltipWidth: number;\n tooltipFrozen: any;\n\n constructor(elem: any, scope: any) {\n this.scope = scope;\n this.dashboard = scope.ctrl.dashboard;\n this.panelCtrl = scope.ctrl;\n this.panel = scope.ctrl.panel;\n this.panelElem = elem;\n this.mouseOverBucket = false;\n this.originalFillColor = null;\n\n elem.on(\"mouseover\", this.onMouseOver.bind(this));\n elem.on(\"mouseleave\", this.onMouseLeave.bind(this));\n }\n\n onMouseOver(e) {\n if (!this.panel.tooltip.show || !this.scope.ctrl.data || _.isEmpty(this.scope.ctrl.data)) { return; }\n\n if (!this.tooltip) {\n this.add();\n this.move(e, this.tooltip);\n }\n }\n\n onMouseLeave() {\n this.destroy();\n }\n\n onMouseMove(e) {\n if (!this.panel.tooltip.show) { return; }\n\n this.move(e, this.tooltip);\n }\n\n add() {\n this.tooltip = d3.select(\"body\")\n .append(\"div\")\n .attr(\"class\", \"graph-tooltip statusmap-tooltip\");\n }\n\n destroy() {\n if (this.tooltip) {\n this.tooltip.remove();\n }\n\n this.tooltip = null;\n }\n\n removeFrozen() {\n if (this.tooltipFrozen) {\n this.tooltipFrozen.remove();\n this.tooltipFrozen = null\n }\n }\n\n showFrozen(pos: any) {\n this.removeFrozen();\n this.tooltipFrozen = d3.select(this.panelElem[0])\n .append(\"div\")\n .attr(\"class\", \"graph-tooltip statusmap-tooltip statusmap-tooltip-frozen\");\n this.displayTooltip(pos, this.tooltipFrozen, true);\n this.moveRelative(pos, this.tooltipFrozen);\n }\n\n show(pos: any) {\n if (!this.panel.tooltip.show || !this.tooltip) { return; }\n\n // TODO support for shared tooltip mode\n if (pos.panelRelY) {\n return;\n }\n\n this.displayTooltip(pos, this.tooltip, false);\n\n this.move(pos, this.tooltip);\n }\n\n // Retrieve bucket and create html content inside tooltip’s div element.\n displayTooltip(pos: any, tooltip: any, frozen: boolean) {\n let cardEl = d3.select(pos.target);\n let yid = cardEl.attr('yid');\n let xid = cardEl.attr('xid');\n let bucket = this.panelCtrl.bucketMatrix.get(yid, xid); // TODO string-to-number conversion for xid\n if (!bucket || bucket.isEmpty()) {\n this.destroy();\n return;\n }\n\n let timestamp = bucket.to;\n let yLabel = bucket.yLabel;\n let value = bucket.value;\n let values = bucket.values;\n // TODO create option for this formatting.\n let tooltipTimeFormat:string = 'YYYY-MM-DD HH:mm:ss';\n let time: Date = this.dashboard.formatDate(+timestamp, tooltipTimeFormat);\n\n // Close button for the frozen tooltip.\n let tooltipClose:string = ``;\n if (frozen) {\n tooltipClose = `\n
\n \n\n`;\n }\n\n let tooltipHtml:string = `
${time}${tooltipClose}
`;\n\n if (this.panel.color.mode === 'discrete') {\n let statuses;\n if (this.panel.seriesFilterIndex >= 0) {\n statuses = this.panelCtrl.discreteExtraSeries.convertValueToTooltips(value);\n } else {\n statuses = this.panelCtrl.discreteExtraSeries.convertValuesToTooltips(values);\n }\n \n let statusTitle:string = \"status:\";\n if (statuses.length > 1) {\n statusTitle = \"statuses:\";\n }\n tooltipHtml += `\n
\n name:
${yLabel}\n
\n
${statusTitle}\n
\n ${_.join(_.map(statuses, v => `- ${v.tooltip}
`), \"\")}\n
\n
`;\n } else {\n if (values.length === 1) {\n tooltipHtml += `
\n name: ${yLabel}
\n value: ${value}
\n
`;\n } else {\n tooltipHtml += `
\n name:
${yLabel} \n values:\n
\n ${_.join(_.map(values, v => `- ${v}
`), \"\")}\n
\n
`;\n }\n }\n\n tooltipHtml += `
`;\n\n if (this.panel.tooltip.showItems) {\n // Additional information: urls, etc.\n // Clone additional items\n let items: any = JSON.parse(JSON.stringify(this.panel.tooltip.items));\n\n let scopedVars = {};\n\n let valueVar;\n for (let i = 0; i < bucket.values.length; i++) {\n valueVar = `__value_${i}`;\n scopedVars[valueVar] = {value: bucket.values[i] };\n }\n scopedVars[`__value`] = {value: bucket.value};\n scopedVars[`__y_label`] = {value: yLabel};\n // Grafana 7.0 compatible\n scopedVars[`__url_time_range`] = {value: this.panelCtrl.retrieveTimeVar()};\n\n for (let item of items) {\n if (_.isEmpty(item.urlTemplate)) {\n item.link = \"#\";\n } else {\n let dateFormat = item.valueDateFormat;\n if (dateFormat == '') {\n dateFormat = DefaultValueDateFormat;\n }\n let valueDateVar;\n for (let i = 0; i < bucket.values.length; i++) {\n valueDateVar = `__value_${i}_date`;\n scopedVars[valueDateVar] = {value: this.dashboard.formatDate(+bucket.values[i], dateFormat)};\n }\n scopedVars[`__value_date`] = {value: this.dashboard.formatDate(+bucket.value, dateFormat)};\n\n item.link = this.panelCtrl.templateSrv.replace(item.urlTemplate, scopedVars)\n\n // Force lowercase for link\n if (item.urlToLowerCase) {\n item.link = item.link.toLowerCase();\n }\n }\n\n item.label = item.urlText;\n if (_.isEmpty(item.label)) {\n item.label = _.isEmpty(item.urlTemplate) ? \"Empty URL\" : _.truncate(item.link);\n }\n }\n\n tooltipHtml += _.join(_.map(items, v => `\n
\n
\n `), \"\\n\");\n\n }\n\n // Ambiguous state: there multiple values in bucket!\n // TODO rename useMax to expectMultipleValues\n if (!this.panel.useMax && bucket.multipleValues) {\n tooltipHtml += `
Error: ${this.panelCtrl.dataWarnings.multipleValues.title}
`;\n }\n\n // Discrete mode errors\n if (this.panel.color.mode === 'discrete') {\n if (bucket.noColorDefined) {\n let badValues = this.panelCtrl.discreteExtraSeries.getNotColoredValues(values);\n tooltipHtml += `
Error: ${this.panelCtrl.dataWarnings.noColorDefined.title}\n
not colored values:\n
\n ${_.join(_.map(badValues, v => `- ${v}
`), \"\")}\n
\n
`;\n }\n }\n\n tooltip.html(tooltipHtml);\n\n // Assign mouse event handlers for \"frozen\" tooltip.\n if (frozen) {\n // Stop propagation mouse events up to parents to allow interaction with frozen tooltip’s elements.\n tooltip\n .on(\"click\", function(){d3.event.stopPropagation(); })\n .on(\"mousedown\", function(){d3.event.stopPropagation(); })\n .on(\"mouseup\", function(){d3.event.stopPropagation(); });\n\n // Activate close button\n tooltip.select(\"a.tooltip-close\")\n .on(\"click\", this.removeFrozen.bind(this));\n }\n }\n\n // Move tooltip as absolute positioned element.\n move(pos, tooltip) {\n if (!tooltip) { return; }\n\n let elem = $(tooltip.node())[0];\n let tooltipWidth = elem.clientWidth;\n this.tooltipWidth = tooltipWidth;\n let tooltipHeight = elem.clientHeight;\n\n let left = pos.pageX + TOOLTIP_PADDING_X;\n let top = pos.pageY + TOOLTIP_PADDING_Y;\n\n if (pos.pageX + tooltipWidth + 40 > window.innerWidth) {\n left = pos.pageX - tooltipWidth - TOOLTIP_PADDING_X;\n }\n\n if (pos.pageY - window.pageYOffset + tooltipHeight + 20 > window.innerHeight) {\n top = pos.pageY - tooltipHeight - TOOLTIP_PADDING_Y;\n }\n\n return tooltip\n .style(\"left\", left + \"px\")\n .style(\"top\", top + \"px\");\n }\n\n // Move tooltip relative to svg element of panel.\n moveRelative(pos, tooltip) {\n if (!tooltip) { return; }\n\n let panelX = pos.pageX - this.panelElem.offset().left;\n let panelY = pos.pageY - this.panelElem.offset().top;\n let panelWidth = this.panelElem.width();\n let panelHeight = this.panelElem.height();\n\n // 'position: relative' sets tooltip’s width to 100% of panel element.\n // Restore width from floating tooltip and add more space for 'Close' button.\n let tooltipWidth = this.tooltipWidth + 25;\n\n // Left property is clamped so tooltip stays inside panel bound box.\n let tooltipLeft = panelX + TOOLTIP_PADDING_X;\n if (tooltipLeft + tooltipWidth > panelWidth) {\n tooltipLeft = panelWidth - tooltipWidth;\n }\n if (tooltipLeft < 0 ) {\n tooltipLeft = 0;\n }\n\n // Frozen tooltip’s root element is appended next to panel’s svg element,\n // so top property is adjusted to move tooltip’s root element\n // up to the mouse pointer position.\n let tooltipTop = -(panelHeight - panelY + TOOLTIP_PADDING_Y);\n\n return tooltip\n .style(\"left\", tooltipLeft + \"px\")\n .style(\"top\", tooltipTop + \"px\")\n .style(\"width\", tooltipWidth + \"px\");\n }\n\n\n}\n"],"file":"tooltip.js"}
\ No newline at end of file
diff --git a/src/tooltip.ts b/src/tooltip.ts
index ae91408..7fd7412 100644
--- a/src/tooltip.ts
+++ b/src/tooltip.ts
@@ -154,12 +154,12 @@ export class StatusmapTooltip {
} else {
if (values.length === 1) {
tooltipHtml += `
- name: ${name}
+ name: ${yLabel}
value: ${value}
`;
} else {
tooltipHtml += `
- name:
${name}
+ name:
${yLabel}
values:
${_.join(_.map(values, v => `- ${v}
`), "")}