diff --git a/dist/color_legend.js b/dist/color_legend.js index a16b345..372fdd6 100644 --- a/dist/color_legend.js +++ b/dist/color_legend.js @@ -19,14 +19,6 @@ System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic var widthFactor = legendWidth / (rangeTo - rangeFrom); var valuesRange = d3.range(rangeFrom, rangeTo, rangeStep); - // console.debug({ - // "rangeStep": rangeStep, - // "widthFactor": widthFactor, - // "legendWidth": legendWidth, - // "steps": (rangeTo - rangeFrom)/rangeStep, - // }); - // console.debug(valuesRange); - var colorScale = getColorScale(colorScheme, maxValue, minValue); legend.selectAll(".status-heatmap-color-legend-rect").data(valuesRange).enter().append("rect") // translate from range space into pixels @@ -88,13 +80,13 @@ System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic // calculate max width of tooltip and use it as width for each item var textWidth = []; - legend.selectAll(".hidden-texts").data(tooltips).enter().append("text").attr("class", "axis tick").attr("font-family", "sans-serif").text(function (d) { + legend.selectAll(".hidden-texts").data(tooltips).enter().append("text").attr("class", "axis tick hidden-texts").attr("font-family", "sans-serif").text(function (d) { return d; }).each(function (d, i) { var thisWidth = this.getBBox().width; textWidth.push(thisWidth); - this.parentElement.removeChild(this); // remove them just after displaying them in IE friendly way }); + legend.selectAll(".hidden-texts").remove(); var legendWidth = Math.floor(_.min([graphWidth - 30, (_.max(textWidth) + 3) * valuesNumber])); legendElem.attr("width", legendWidth); diff --git a/dist/color_legend.js.map b/dist/color_legend.js.map index 379a72a..361604b 100644 --- a/dist/color_legend.js.map +++ b/dist/color_legend.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/color_legend.js"],"names":["drawColorLegend","elem","colorScheme","rangeFrom","rangeTo","maxValue","minValue","legendElem","$","find","legend","d3","select","get","clearLegend","legendWidth","Math","floor","outerWidth","legendHeight","attr","rangeStep","LEGEND_STEP_WIDTH","widthFactor","valuesRange","range","colorScale","getColorScale","selectAll","data","enter","append","d","drawLegendValues","drawOpacityLegend","options","opacityScale","getOpacityScale","cardColor","style","drawDiscreteColorLegend","colorOptions","discreteHelper","thresholds","tooltips","_","map","tr","tooltip","valuesNumber","length","$heatmap","parent","graphWidth","textWidth","text","each","i","thisWidth","getBBox","width","push","parentElement","removeChild","min","max","itemWidth","getDiscreteColor","drawDiscreteLegendValues","childNodes","legendValueScale","scaleLinear","domain","ticks","buildLegendTicks","xAxis","axisBottom","tickValues","tickSize","colorRect","posY","getSvgElemHeight","posX","getSvgElemX","call","remove","thresholdValues","thresholdTooltips","value","tickFormat","t","v","undefined","drawSimpleColorLegend","drawSimpleOpacityLegend","legendOpacityScale","scalePow","exponent","empty","colorInterpolator","d3ScaleChromatic","colorScaleInverted","invert","contextSrv","user","lightTheme","start","end","scaleSequential","svgElem","x","baseVal","height","tickStepSize","tickStep","ticksNum","round","current","isValueCloseTo","sortBy","uniq","val","valueTo","step","diff","abs","angular","mod","module","directive","restrict","template","link","scope","attrs","ctrl","panel","render","events","on","color","mode","colorSchemes","show","isEmpty","cardsData","cards"],"mappings":"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","file":"color_legend.js","sourcesContent":["import angular from 'angular';\nimport _ from 'lodash';\nimport $ from 'jquery';\nimport d3 from 'd3';\nimport * as d3ScaleChromatic from './libs/d3-scale-chromatic/index';\nimport {contextSrv} from 'app/core/core';\nimport {tickStep} from 'app/core/utils/ticks';\n\nlet mod = angular.module('grafana.directives');\n\nconst LEGEND_STEP_WIDTH = 2;\n\n/**\n * Color legend for heatmap editor.\n */\nmod.directive('optionsColorLegend', function() {\n return {\n restrict: 'E',\n template: '
',\n link: function(scope, elem, attrs) {\n let ctrl = scope.ctrl;\n let panel = scope.ctrl.panel;\n\n render();\n\n ctrl.events.on('render', function() {\n render();\n });\n\n function render() {\n let legendElem = $(elem).find('svg');\n let legendWidth = Math.floor(legendElem.outerWidth());\n\n if (panel.color.mode === 'spectrum') {\n let colorScheme = _.find(ctrl.colorSchemes, {value: panel.color.colorScheme});\n let colorScale = getColorScale(colorScheme, legendWidth);\n drawSimpleColorLegend(elem, colorScale);\n } else if (panel.color.mode === 'opacity') {\n let colorOptions = panel.color;\n drawSimpleOpacityLegend(elem, colorOptions);\n }\n }\n }\n };\n});\n\n/**\n * Heatmap legend with scale values.\n */\nmod.directive('statusHeatmapLegend', function() {\n return {\n restrict: 'E',\n template: '
',\n link: function(scope, elem, attrs) {\n let ctrl = scope.ctrl;\n let panel = scope.ctrl.panel;\n\n render();\n ctrl.events.on('render', function() {\n render();\n });\n\n function render() {\n clearLegend(elem);\n if (!ctrl.panel.legend.show) {\n return \n }\n if (!_.isEmpty(ctrl.cardsData) && !_.isEmpty(ctrl.cardsData.cards)) {\n let rangeFrom = ctrl.cardsData.minValue;\n let rangeTo = ctrl.cardsData.maxValue;\n let maxValue = panel.color.max || rangeTo;\n let minValue = panel.color.min || rangeFrom;\n\n if (panel.color.mode === 'spectrum') {\n let colorScheme = _.find(ctrl.colorSchemes, {value: panel.color.colorScheme});\n drawColorLegend(elem, colorScheme, rangeFrom, rangeTo, maxValue, minValue);\n } else if (panel.color.mode === 'opacity') {\n let colorOptions = panel.color;\n drawOpacityLegend(elem, colorOptions, rangeFrom, rangeTo, maxValue, minValue);\n } else if (panel.color.mode === 'discrete') {\n let colorOptions = panel.color;\n drawDiscreteColorLegend(elem, colorOptions, ctrl.discreteHelper);\n }\n }\n }\n }\n };\n});\n\nfunction drawColorLegend(elem, colorScheme, rangeFrom, rangeTo, maxValue, minValue) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth()) - 30; // narrow legendWidth by 30px to get space for first and last tick values\n let legendHeight = legendElem.attr(\"height\");\n\n let rangeStep = (rangeTo - rangeFrom) / (legendWidth/LEGEND_STEP_WIDTH);\n // width in pixels in legend space of unit segment in range space\n // rangeStep * witdhFactor == width in pixels of one rangeStep\n let widthFactor = legendWidth / (rangeTo - rangeFrom);\n let valuesRange = d3.range(rangeFrom, rangeTo, rangeStep);\n\n // console.debug({\n // \"rangeStep\": rangeStep,\n // \"widthFactor\": widthFactor,\n // \"legendWidth\": legendWidth,\n // \"steps\": (rangeTo - rangeFrom)/rangeStep,\n // });\n // console.debug(valuesRange);\n\n let colorScale = getColorScale(colorScheme, maxValue, minValue);\n legend.selectAll(\".status-heatmap-color-legend-rect\")\n .data(valuesRange)\n .enter().append(\"rect\")\n // translate from range space into pixels\n // and shift all rectangles to the right by 10\n .attr(\"x\", d => d * widthFactor+10)\n .attr(\"y\", 0)\n // rectangles are slightly overlaped to prevent gaps\n .attr(\"width\", LEGEND_STEP_WIDTH+1)\n .attr(\"height\", legendHeight)\n .attr(\"stroke-width\", 0)\n .attr(\"fill\", d => colorScale(d));\n\n drawLegendValues(elem, colorScale, rangeFrom, rangeTo, maxValue, minValue, legendWidth);\n}\n\nfunction drawOpacityLegend(elem, options, rangeFrom, rangeTo, maxValue, minValue) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth()) - 30; // narrow legendWidth by 30px to get space for first and last tick values\n let legendHeight = legendElem.attr(\"height\");\n\n let rangeStep = (rangeTo - rangeFrom) / (legendWidth/LEGEND_STEP_WIDTH);\n // width in pixels in legend space of unit segment in range space\n // rangeStep * witdhFactor == width in pixels of one rangeStep\n let widthFactor = legendWidth / (rangeTo - rangeFrom);\n let valuesRange = d3.range(rangeFrom, rangeTo, rangeStep);\n\n let opacityScale = getOpacityScale(options, maxValue, minValue);\n legend.selectAll(\".status-heatmap-opacity-legend-rect\")\n .data(valuesRange)\n .enter().append(\"rect\")\n // translate from range space into pixels\n // and shift all rectangles to the right by 10\n .attr(\"x\", d => d * widthFactor+10)\n .attr(\"y\", 0)\n // rectangles are slightly overlaped to prevent gaps\n .attr(\"width\", LEGEND_STEP_WIDTH+1)\n .attr(\"height\", legendHeight)\n .attr(\"stroke-width\", 0)\n .attr(\"fill\", options.cardColor)\n .style(\"opacity\", d => opacityScale(d));\n\n drawLegendValues(elem, opacityScale, rangeFrom, rangeTo, maxValue, minValue, legendWidth);\n}\n\nfunction drawDiscreteColorLegend(elem, colorOptions, discreteHelper) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let thresholds = colorOptions.thresholds;\n let tooltips = _.map(thresholds, tr => tr.tooltip);\n let valuesNumber = thresholds.length;\n\n // graph width as a fallback\n let $heatmap = $(elem).parent().parent().parent().find('.status-heatmap-panel');\n let graphWidth = $heatmap.find('svg').attr(\"width\");\n\n // calculate max width of tooltip and use it as width for each item\n let textWidth = [];\n legend.selectAll(\".hidden-texts\")\n .data(tooltips)\n .enter().append(\"text\")\n .attr(\"class\", \"axis tick\")\n .attr(\"font-family\", \"sans-serif\")\n .text(d => d)\n .each(function(d,i) {\n let thisWidth = this.getBBox().width;\n textWidth.push(thisWidth);\n this.parentElement.removeChild(this); // remove them just after displaying them in IE friendly way\n });\n\n let legendWidth = Math.floor(_.min([\n graphWidth - 30,\n (_.max(textWidth) + 3) * valuesNumber,\n ]));\n legendElem.attr(\"width\", legendWidth);\n\n let legendHeight = legendElem.attr(\"height\");\n\n let itemWidth = Math.floor(legendWidth / valuesNumber);\n let valuesRange = d3.range(valuesNumber); // from 0 to valuesNumber-1\n\n legend.selectAll(\".status-heatmap-color-legend-rect\")\n .data(valuesRange)\n .enter().append(\"rect\")\n .attr(\"x\", d => d*itemWidth)\n .attr(\"y\", 0)\n .attr(\"width\", itemWidth + 1) // Overlap rectangles to prevent gaps\n .attr(\"height\", legendHeight)\n .attr(\"stroke-width\", 0)\n .attr(\"fill\", d => discreteHelper.getDiscreteColor(d));\n\n drawDiscreteLegendValues(elem, colorOptions, legendWidth);\n}\n\n\nfunction drawLegendValues(elem, colorScale, rangeFrom, rangeTo, maxValue, minValue, legendWidth) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n\n if (legendWidth <= 0 || legendElem.get(0).childNodes.length === 0) {\n return;\n }\n\n let legendValueScale = d3.scaleLinear()\n .domain([0, rangeTo])\n .range([0, legendWidth]);\n\n let ticks = buildLegendTicks(0, rangeTo, maxValue, minValue);\n let xAxis = d3.axisBottom(legendValueScale)\n .tickValues(ticks)\n .tickSize(2);\n\n let colorRect = legendElem.find(\":first-child\");\n let posY = getSvgElemHeight(legendElem) + 2;\n let posX = getSvgElemX(colorRect);\n\n d3.select(legendElem.get(0)).append(\"g\")\n .attr(\"class\", \"axis\")\n .attr(\"transform\", \"translate(\" + posX + \",\" + posY + \")\")\n .call(xAxis);\n\n legend.select(\".axis\").select(\".domain\").remove();\n}\n\nfunction drawDiscreteLegendValues(elem, colorOptions, legendWidth) {\n let thresholds = colorOptions.thresholds;\n\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n\n if (legendWidth <= 0 || legendElem.get(0).childNodes.length === 0) {\n return;\n }\n\n let valuesNumber = thresholds.length;\n let rangeStep = Math.floor(legendWidth / valuesNumber);\n let valuesRange = d3.range(0, legendWidth, rangeStep);\n\n\n let legendValueScale = d3.scaleLinear()\n .domain([0, valuesNumber])\n .range([0, legendWidth]);\n\n let thresholdValues = [];\n let thresholdTooltips = [];\n for (let i = 0; i < thresholds.length; i++) {\n thresholdValues.push(thresholds[i].value);\n thresholdTooltips.push(thresholds[i].tooltip);\n }\n\n let xAxis = d3.axisBottom(legendValueScale)\n .tickValues(d3.range(0, valuesNumber, 1)) //thresholdValues)\n .tickSize(2)\n .tickFormat((t) => {\n let i = Math.floor(t);\n let v = thresholdTooltips[i];\n if (v != undefined) {\n return \"\"+v;\n } else {\n v = thresholdValues[i];\n if (v != undefined) {\n return \"\"+v;\n } else {\n return \"n/a\";\n }\n }\n });\n\n let colorRect = legendElem.find(\":first-child\");\n let posY = getSvgElemHeight(legendElem) + 2;\n let posX = getSvgElemX(colorRect) + Math.floor(rangeStep/2);\n\n d3.select(legendElem.get(0)).append(\"g\")\n .attr(\"class\", \"axis\")\n .attr(\"transform\", \"translate(\" + posX + \",\" + posY + \")\")\n .call(xAxis);\n\n legend.select(\".axis\").select(\".domain\").remove();\n}\n\nfunction drawSimpleColorLegend(elem, colorScale) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth());\n let legendHeight = legendElem.attr(\"height\");\n\n if (legendWidth) {\n let valuesRange = d3.range(0, legendWidth, LEGEND_STEP_WIDTH);\n\n legend.selectAll(\".status-heatmap-color-legend-rect\")\n .data(valuesRange)\n .enter().append(\"rect\")\n .attr(\"x\", d => d)\n .attr(\"y\", 0)\n .attr(\"width\", LEGEND_STEP_WIDTH + 1) // Overlap rectangles to prevent gaps\n .attr(\"height\", legendHeight)\n .attr(\"stroke-width\", 0)\n .attr(\"fill\", d => colorScale(d));\n }\n}\n\nfunction drawSimpleOpacityLegend(elem, options) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth());\n let legendHeight = legendElem.attr(\"height\");\n\n if (legendWidth) {\n let legendOpacityScale;\n if (options.colorScale === 'linear') {\n legendOpacityScale = d3.scaleLinear()\n .domain([0, legendWidth])\n .range([0, 1]);\n } else if (options.colorScale === 'sqrt') {\n legendOpacityScale = d3.scalePow().exponent(options.exponent)\n .domain([0, legendWidth])\n .range([0, 1]);\n }\n\n let valuesRange = d3.range(0, legendWidth, LEGEND_STEP_WIDTH);\n\n legend.selectAll(\".status-heatmap-opacity-legend-rect\")\n .data(valuesRange)\n .enter().append(\"rect\")\n .attr(\"x\", d => d)\n .attr(\"y\", 0)\n .attr(\"width\", LEGEND_STEP_WIDTH+1)\n .attr(\"height\", legendHeight)\n .attr(\"stroke-width\", 0)\n .attr(\"fill\", options.cardColor)\n .style(\"opacity\", d => legendOpacityScale(d));\n }\n}\n\n\nfunction clearLegend(elem) {\n let legendElem = $(elem).find('svg');\n legendElem.empty();\n}\n\nfunction getColorScale(colorScheme, maxValue, minValue = 0) {\n let colorInterpolator = d3ScaleChromatic[colorScheme.value];\n let colorScaleInverted = colorScheme.invert === 'always' ||\n (colorScheme.invert === 'dark' && !contextSrv.user.lightTheme);\n\n let start = colorScaleInverted ? maxValue : minValue;\n let end = colorScaleInverted ? minValue : maxValue;\n\n return d3.scaleSequential(colorInterpolator).domain([start, end]);\n}\n\nfunction getOpacityScale(options, maxValue, minValue = 0) {\n let legendOpacityScale;\n if (options.colorScale === 'linear') {\n legendOpacityScale = d3.scaleLinear()\n .domain([minValue, maxValue])\n .range([0, 1]);\n } else if (options.colorScale === 'sqrt') {\n legendOpacityScale = d3.scalePow().exponent(options.exponent)\n .domain([minValue, maxValue])\n .range([0, 1]);\n }\n return legendOpacityScale;\n}\n\nfunction getSvgElemX(elem) {\n let svgElem = elem.get(0);\n if (svgElem && svgElem.x && svgElem.x.baseVal) {\n return svgElem.x.baseVal.value;\n } else {\n return 0;\n }\n}\n\nfunction getSvgElemHeight(elem) {\n let svgElem = elem.get(0);\n if (svgElem && svgElem.height && svgElem.height.baseVal) {\n return svgElem.height.baseVal.value;\n } else {\n return 0;\n }\n}\n\nfunction buildLegendTicks(rangeFrom, rangeTo, maxValue, minValue) {\n let range = rangeTo - rangeFrom;\n let tickStepSize = tickStep(rangeFrom, rangeTo, 3);\n let ticksNum = Math.round(range / tickStepSize);\n let ticks = [];\n\n for (let i = 0; i < ticksNum; i++) {\n let current = tickStepSize * i;\n // Add user-defined min and max if it had been set\n if (isValueCloseTo(minValue, current, tickStepSize)) {\n ticks.push(minValue);\n continue;\n } else if (minValue < current) {\n ticks.push(minValue);\n }\n if (isValueCloseTo(maxValue, current, tickStepSize)) {\n ticks.push(maxValue);\n continue;\n } else if (maxValue < current) {\n ticks.push(maxValue);\n }\n ticks.push(tickStepSize * i);\n }\n if (!isValueCloseTo(maxValue, rangeTo, tickStepSize)) {\n ticks.push(maxValue);\n }\n ticks.push(rangeTo);\n ticks = _.sortBy(_.uniq(ticks));\n return ticks;\n}\n\nfunction isValueCloseTo(val, valueTo, step) {\n let diff = Math.abs(val - valueTo);\n return diff < step * 0.3;\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../src/color_legend.js"],"names":["drawColorLegend","elem","colorScheme","rangeFrom","rangeTo","maxValue","minValue","legendElem","$","find","legend","d3","select","get","clearLegend","legendWidth","Math","floor","outerWidth","legendHeight","attr","rangeStep","LEGEND_STEP_WIDTH","widthFactor","valuesRange","range","colorScale","getColorScale","selectAll","data","enter","append","d","drawLegendValues","drawOpacityLegend","options","opacityScale","getOpacityScale","cardColor","style","drawDiscreteColorLegend","colorOptions","discreteHelper","thresholds","tooltips","_","map","tr","tooltip","valuesNumber","length","$heatmap","parent","graphWidth","textWidth","text","each","i","thisWidth","getBBox","width","push","remove","min","max","itemWidth","getDiscreteColor","drawDiscreteLegendValues","childNodes","legendValueScale","scaleLinear","domain","ticks","buildLegendTicks","xAxis","axisBottom","tickValues","tickSize","colorRect","posY","getSvgElemHeight","posX","getSvgElemX","call","thresholdValues","thresholdTooltips","value","tickFormat","t","v","undefined","drawSimpleColorLegend","drawSimpleOpacityLegend","legendOpacityScale","scalePow","exponent","empty","colorInterpolator","d3ScaleChromatic","colorScaleInverted","invert","contextSrv","user","lightTheme","start","end","scaleSequential","svgElem","x","baseVal","height","tickStepSize","tickStep","ticksNum","round","current","isValueCloseTo","sortBy","uniq","val","valueTo","step","diff","abs","angular","mod","module","directive","restrict","template","link","scope","attrs","ctrl","panel","render","events","on","color","mode","colorSchemes","show","isEmpty","cardsData","cards"],"mappings":"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","file":"color_legend.js","sourcesContent":["import angular from 'angular';\nimport _ from 'lodash';\nimport $ from 'jquery';\nimport d3 from 'd3';\nimport * as d3ScaleChromatic from './libs/d3-scale-chromatic/index';\nimport {contextSrv} from 'app/core/core';\nimport {tickStep} from 'app/core/utils/ticks';\n\nlet mod = angular.module('grafana.directives');\n\nconst LEGEND_STEP_WIDTH = 2;\n\n/**\n * Color legend for heatmap editor.\n */\nmod.directive('optionsColorLegend', function() {\n return {\n restrict: 'E',\n template: '
',\n link: function(scope, elem, attrs) {\n let ctrl = scope.ctrl;\n let panel = scope.ctrl.panel;\n\n render();\n\n ctrl.events.on('render', function() {\n render();\n });\n\n function render() {\n let legendElem = $(elem).find('svg');\n let legendWidth = Math.floor(legendElem.outerWidth());\n\n if (panel.color.mode === 'spectrum') {\n let colorScheme = _.find(ctrl.colorSchemes, {value: panel.color.colorScheme});\n let colorScale = getColorScale(colorScheme, legendWidth);\n drawSimpleColorLegend(elem, colorScale);\n } else if (panel.color.mode === 'opacity') {\n let colorOptions = panel.color;\n drawSimpleOpacityLegend(elem, colorOptions);\n }\n }\n }\n };\n});\n\n/**\n * Heatmap legend with scale values.\n */\nmod.directive('statusHeatmapLegend', function() {\n return {\n restrict: 'E',\n template: '
',\n link: function(scope, elem, attrs) {\n let ctrl = scope.ctrl;\n let panel = scope.ctrl.panel;\n\n render();\n ctrl.events.on('render', function() {\n render();\n });\n\n function render() {\n clearLegend(elem);\n if (!ctrl.panel.legend.show) {\n return \n }\n if (!_.isEmpty(ctrl.cardsData) && !_.isEmpty(ctrl.cardsData.cards)) {\n let rangeFrom = ctrl.cardsData.minValue;\n let rangeTo = ctrl.cardsData.maxValue;\n let maxValue = panel.color.max || rangeTo;\n let minValue = panel.color.min || rangeFrom;\n\n if (panel.color.mode === 'spectrum') {\n let colorScheme = _.find(ctrl.colorSchemes, {value: panel.color.colorScheme});\n drawColorLegend(elem, colorScheme, rangeFrom, rangeTo, maxValue, minValue);\n } else if (panel.color.mode === 'opacity') {\n let colorOptions = panel.color;\n drawOpacityLegend(elem, colorOptions, rangeFrom, rangeTo, maxValue, minValue);\n } else if (panel.color.mode === 'discrete') {\n let colorOptions = panel.color;\n drawDiscreteColorLegend(elem, colorOptions, ctrl.discreteHelper);\n }\n }\n }\n }\n };\n});\n\nfunction drawColorLegend(elem, colorScheme, rangeFrom, rangeTo, maxValue, minValue) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth()) - 30; // narrow legendWidth by 30px to get space for first and last tick values\n let legendHeight = legendElem.attr(\"height\");\n\n let rangeStep = (rangeTo - rangeFrom) / (legendWidth/LEGEND_STEP_WIDTH);\n // width in pixels in legend space of unit segment in range space\n // rangeStep * witdhFactor == width in pixels of one rangeStep\n let widthFactor = legendWidth / (rangeTo - rangeFrom);\n let valuesRange = d3.range(rangeFrom, rangeTo, rangeStep);\n\n let colorScale = getColorScale(colorScheme, maxValue, minValue);\n legend.selectAll(\".status-heatmap-color-legend-rect\")\n .data(valuesRange)\n .enter().append(\"rect\")\n // translate from range space into pixels\n // and shift all rectangles to the right by 10\n .attr(\"x\", d => d * widthFactor+10)\n .attr(\"y\", 0)\n // rectangles are slightly overlaped to prevent gaps\n .attr(\"width\", LEGEND_STEP_WIDTH+1)\n .attr(\"height\", legendHeight)\n .attr(\"stroke-width\", 0)\n .attr(\"fill\", d => colorScale(d));\n\n drawLegendValues(elem, colorScale, rangeFrom, rangeTo, maxValue, minValue, legendWidth);\n}\n\nfunction drawOpacityLegend(elem, options, rangeFrom, rangeTo, maxValue, minValue) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth()) - 30; // narrow legendWidth by 30px to get space for first and last tick values\n let legendHeight = legendElem.attr(\"height\");\n\n let rangeStep = (rangeTo - rangeFrom) / (legendWidth/LEGEND_STEP_WIDTH);\n // width in pixels in legend space of unit segment in range space\n // rangeStep * witdhFactor == width in pixels of one rangeStep\n let widthFactor = legendWidth / (rangeTo - rangeFrom);\n let valuesRange = d3.range(rangeFrom, rangeTo, rangeStep);\n\n let opacityScale = getOpacityScale(options, maxValue, minValue);\n legend.selectAll(\".status-heatmap-opacity-legend-rect\")\n .data(valuesRange)\n .enter().append(\"rect\")\n // translate from range space into pixels\n // and shift all rectangles to the right by 10\n .attr(\"x\", d => d * widthFactor+10)\n .attr(\"y\", 0)\n // rectangles are slightly overlaped to prevent gaps\n .attr(\"width\", LEGEND_STEP_WIDTH+1)\n .attr(\"height\", legendHeight)\n .attr(\"stroke-width\", 0)\n .attr(\"fill\", options.cardColor)\n .style(\"opacity\", d => opacityScale(d));\n\n drawLegendValues(elem, opacityScale, rangeFrom, rangeTo, maxValue, minValue, legendWidth);\n}\n\nfunction drawDiscreteColorLegend(elem, colorOptions, discreteHelper) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let thresholds = colorOptions.thresholds;\n let tooltips = _.map(thresholds, tr => tr.tooltip);\n let valuesNumber = thresholds.length;\n\n // graph width as a fallback\n let $heatmap = $(elem).parent().parent().parent().find('.status-heatmap-panel');\n let graphWidth = $heatmap.find('svg').attr(\"width\");\n\n // calculate max width of tooltip and use it as width for each item\n let textWidth = [];\n legend.selectAll(\".hidden-texts\")\n .data(tooltips)\n .enter().append(\"text\")\n .attr(\"class\", \"axis tick hidden-texts\")\n .attr(\"font-family\", \"sans-serif\")\n .text(d => d)\n .each(function(d,i) {\n let thisWidth = this.getBBox().width;\n textWidth.push(thisWidth);\n });\n legend.selectAll(\".hidden-texts\").remove();\n\n let legendWidth = Math.floor(_.min([\n graphWidth - 30,\n (_.max(textWidth) + 3) * valuesNumber,\n ]));\n legendElem.attr(\"width\", legendWidth);\n\n let legendHeight = legendElem.attr(\"height\");\n\n let itemWidth = Math.floor(legendWidth / valuesNumber);\n let valuesRange = d3.range(valuesNumber); // from 0 to valuesNumber-1\n\n legend.selectAll(\".status-heatmap-color-legend-rect\")\n .data(valuesRange)\n .enter().append(\"rect\")\n .attr(\"x\", d => d*itemWidth)\n .attr(\"y\", 0)\n .attr(\"width\", itemWidth + 1) // Overlap rectangles to prevent gaps\n .attr(\"height\", legendHeight)\n .attr(\"stroke-width\", 0)\n .attr(\"fill\", d => discreteHelper.getDiscreteColor(d));\n\n drawDiscreteLegendValues(elem, colorOptions, legendWidth);\n}\n\n\nfunction drawLegendValues(elem, colorScale, rangeFrom, rangeTo, maxValue, minValue, legendWidth) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n\n if (legendWidth <= 0 || legendElem.get(0).childNodes.length === 0) {\n return;\n }\n\n let legendValueScale = d3.scaleLinear()\n .domain([0, rangeTo])\n .range([0, legendWidth]);\n\n let ticks = buildLegendTicks(0, rangeTo, maxValue, minValue);\n let xAxis = d3.axisBottom(legendValueScale)\n .tickValues(ticks)\n .tickSize(2);\n\n let colorRect = legendElem.find(\":first-child\");\n let posY = getSvgElemHeight(legendElem) + 2;\n let posX = getSvgElemX(colorRect);\n\n d3.select(legendElem.get(0)).append(\"g\")\n .attr(\"class\", \"axis\")\n .attr(\"transform\", \"translate(\" + posX + \",\" + posY + \")\")\n .call(xAxis);\n\n legend.select(\".axis\").select(\".domain\").remove();\n}\n\nfunction drawDiscreteLegendValues(elem, colorOptions, legendWidth) {\n let thresholds = colorOptions.thresholds;\n\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n\n if (legendWidth <= 0 || legendElem.get(0).childNodes.length === 0) {\n return;\n }\n\n let valuesNumber = thresholds.length;\n let rangeStep = Math.floor(legendWidth / valuesNumber);\n let valuesRange = d3.range(0, legendWidth, rangeStep);\n\n\n let legendValueScale = d3.scaleLinear()\n .domain([0, valuesNumber])\n .range([0, legendWidth]);\n\n let thresholdValues = [];\n let thresholdTooltips = [];\n for (let i = 0; i < thresholds.length; i++) {\n thresholdValues.push(thresholds[i].value);\n thresholdTooltips.push(thresholds[i].tooltip);\n }\n\n let xAxis = d3.axisBottom(legendValueScale)\n .tickValues(d3.range(0, valuesNumber, 1)) //thresholdValues)\n .tickSize(2)\n .tickFormat((t) => {\n let i = Math.floor(t);\n let v = thresholdTooltips[i];\n if (v != undefined) {\n return \"\"+v;\n } else {\n v = thresholdValues[i];\n if (v != undefined) {\n return \"\"+v;\n } else {\n return \"n/a\";\n }\n }\n });\n\n let colorRect = legendElem.find(\":first-child\");\n let posY = getSvgElemHeight(legendElem) + 2;\n let posX = getSvgElemX(colorRect) + Math.floor(rangeStep/2);\n\n d3.select(legendElem.get(0)).append(\"g\")\n .attr(\"class\", \"axis\")\n .attr(\"transform\", \"translate(\" + posX + \",\" + posY + \")\")\n .call(xAxis);\n\n legend.select(\".axis\").select(\".domain\").remove();\n}\n\nfunction drawSimpleColorLegend(elem, colorScale) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth());\n let legendHeight = legendElem.attr(\"height\");\n\n if (legendWidth) {\n let valuesRange = d3.range(0, legendWidth, LEGEND_STEP_WIDTH);\n\n legend.selectAll(\".status-heatmap-color-legend-rect\")\n .data(valuesRange)\n .enter().append(\"rect\")\n .attr(\"x\", d => d)\n .attr(\"y\", 0)\n .attr(\"width\", LEGEND_STEP_WIDTH + 1) // Overlap rectangles to prevent gaps\n .attr(\"height\", legendHeight)\n .attr(\"stroke-width\", 0)\n .attr(\"fill\", d => colorScale(d));\n }\n}\n\nfunction drawSimpleOpacityLegend(elem, options) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth());\n let legendHeight = legendElem.attr(\"height\");\n\n if (legendWidth) {\n let legendOpacityScale;\n if (options.colorScale === 'linear') {\n legendOpacityScale = d3.scaleLinear()\n .domain([0, legendWidth])\n .range([0, 1]);\n } else if (options.colorScale === 'sqrt') {\n legendOpacityScale = d3.scalePow().exponent(options.exponent)\n .domain([0, legendWidth])\n .range([0, 1]);\n }\n\n let valuesRange = d3.range(0, legendWidth, LEGEND_STEP_WIDTH);\n\n legend.selectAll(\".status-heatmap-opacity-legend-rect\")\n .data(valuesRange)\n .enter().append(\"rect\")\n .attr(\"x\", d => d)\n .attr(\"y\", 0)\n .attr(\"width\", LEGEND_STEP_WIDTH+1)\n .attr(\"height\", legendHeight)\n .attr(\"stroke-width\", 0)\n .attr(\"fill\", options.cardColor)\n .style(\"opacity\", d => legendOpacityScale(d));\n }\n}\n\n\nfunction clearLegend(elem) {\n let legendElem = $(elem).find('svg');\n legendElem.empty();\n}\n\nfunction getColorScale(colorScheme, maxValue, minValue = 0) {\n let colorInterpolator = d3ScaleChromatic[colorScheme.value];\n let colorScaleInverted = colorScheme.invert === 'always' ||\n (colorScheme.invert === 'dark' && !contextSrv.user.lightTheme);\n\n let start = colorScaleInverted ? maxValue : minValue;\n let end = colorScaleInverted ? minValue : maxValue;\n\n return d3.scaleSequential(colorInterpolator).domain([start, end]);\n}\n\nfunction getOpacityScale(options, maxValue, minValue = 0) {\n let legendOpacityScale;\n if (options.colorScale === 'linear') {\n legendOpacityScale = d3.scaleLinear()\n .domain([minValue, maxValue])\n .range([0, 1]);\n } else if (options.colorScale === 'sqrt') {\n legendOpacityScale = d3.scalePow().exponent(options.exponent)\n .domain([minValue, maxValue])\n .range([0, 1]);\n }\n return legendOpacityScale;\n}\n\nfunction getSvgElemX(elem) {\n let svgElem = elem.get(0);\n if (svgElem && svgElem.x && svgElem.x.baseVal) {\n return svgElem.x.baseVal.value;\n } else {\n return 0;\n }\n}\n\nfunction getSvgElemHeight(elem) {\n let svgElem = elem.get(0);\n if (svgElem && svgElem.height && svgElem.height.baseVal) {\n return svgElem.height.baseVal.value;\n } else {\n return 0;\n }\n}\n\nfunction buildLegendTicks(rangeFrom, rangeTo, maxValue, minValue) {\n let range = rangeTo - rangeFrom;\n let tickStepSize = tickStep(rangeFrom, rangeTo, 3);\n let ticksNum = Math.round(range / tickStepSize);\n let ticks = [];\n\n for (let i = 0; i < ticksNum; i++) {\n let current = tickStepSize * i;\n // Add user-defined min and max if it had been set\n if (isValueCloseTo(minValue, current, tickStepSize)) {\n ticks.push(minValue);\n continue;\n } else if (minValue < current) {\n ticks.push(minValue);\n }\n if (isValueCloseTo(maxValue, current, tickStepSize)) {\n ticks.push(maxValue);\n continue;\n } else if (maxValue < current) {\n ticks.push(maxValue);\n }\n ticks.push(tickStepSize * i);\n }\n if (!isValueCloseTo(maxValue, rangeTo, tickStepSize)) {\n ticks.push(maxValue);\n }\n ticks.push(rangeTo);\n ticks = _.sortBy(_.uniq(ticks));\n return ticks;\n}\n\nfunction isValueCloseTo(val, valueTo, step) {\n let diff = Math.abs(val - valueTo);\n return diff < step * 0.3;\n}\n"]} \ No newline at end of file diff --git a/src/color_legend.js b/src/color_legend.js index 83938f7..00083a6 100644 --- a/src/color_legend.js +++ b/src/color_legend.js @@ -101,14 +101,6 @@ function drawColorLegend(elem, colorScheme, rangeFrom, rangeTo, maxValue, minVal let widthFactor = legendWidth / (rangeTo - rangeFrom); let valuesRange = d3.range(rangeFrom, rangeTo, rangeStep); - // console.debug({ - // "rangeStep": rangeStep, - // "widthFactor": widthFactor, - // "legendWidth": legendWidth, - // "steps": (rangeTo - rangeFrom)/rangeStep, - // }); - // console.debug(valuesRange); - let colorScale = getColorScale(colorScheme, maxValue, minValue); legend.selectAll(".status-heatmap-color-legend-rect") .data(valuesRange) @@ -176,14 +168,14 @@ function drawDiscreteColorLegend(elem, colorOptions, discreteHelper) { legend.selectAll(".hidden-texts") .data(tooltips) .enter().append("text") - .attr("class", "axis tick") + .attr("class", "axis tick hidden-texts") .attr("font-family", "sans-serif") .text(d => d) .each(function(d,i) { let thisWidth = this.getBBox().width; textWidth.push(thisWidth); - this.parentElement.removeChild(this); // remove them just after displaying them in IE friendly way }); + legend.selectAll(".hidden-texts").remove(); let legendWidth = Math.floor(_.min([ graphWidth - 30,