UNPKG

@coreui/coreui-plugin-chartjs-custom-tooltips

Version:

Chart.js custom tooltips designed for CoreUI Templates

146 lines (119 loc) 5.14 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); /** * -------------------------------------------------------------------------- * CoreUI Plugins - Custom Tooltips for Chart.js (v1.3.1): custom-tooltips.js * Licensed under MIT (https://coreui.io/license) * -------------------------------------------------------------------------- */ function CustomTooltips(tooltipModel) { var _this = this; // Add unique id if not exist var _setCanvasId = function _setCanvasId() { var _idMaker = function _idMaker() { var _hex = 16; var _multiplier = 0x10000; return ((1 + Math.random()) * _multiplier | 0).toString(_hex); }; var _canvasId = "_canvas-" + (_idMaker() + _idMaker()); _this._chart.canvas.id = _canvasId; return _canvasId; }; var ClassName = { ABOVE: 'above', BELOW: 'below', CHARTJS_TOOLTIP: 'chartjs-tooltip', NO_TRANSFORM: 'no-transform', TOOLTIP_BODY: 'tooltip-body', TOOLTIP_BODY_ITEM: 'tooltip-body-item', TOOLTIP_BODY_ITEM_COLOR: 'tooltip-body-item-color', TOOLTIP_BODY_ITEM_LABEL: 'tooltip-body-item-label', TOOLTIP_BODY_ITEM_VALUE: 'tooltip-body-item-value', TOOLTIP_HEADER: 'tooltip-header', TOOLTIP_HEADER_ITEM: 'tooltip-header-item' }; var Selector = { DIV: 'div', SPAN: 'span', TOOLTIP: (this._chart.canvas.id || _setCanvasId()) + "-tooltip" }; var tooltip = document.getElementById(Selector.TOOLTIP); if (!tooltip) { tooltip = document.createElement('div'); tooltip.id = Selector.TOOLTIP; tooltip.className = ClassName.CHARTJS_TOOLTIP; this._chart.canvas.parentNode.appendChild(tooltip); } // Hide if no tooltip if (tooltipModel.opacity === 0) { tooltip.style.opacity = 0; return; } // Set caret Position tooltip.classList.remove(ClassName.ABOVE, ClassName.BELOW, ClassName.NO_TRANSFORM); if (tooltipModel.yAlign) { tooltip.classList.add(tooltipModel.yAlign); } else { tooltip.classList.add(ClassName.NO_TRANSFORM); } // Set Text if (tooltipModel.body) { var titleLines = tooltipModel.title || []; var tooltipHeader = document.createElement(Selector.DIV); tooltipHeader.className = ClassName.TOOLTIP_HEADER; titleLines.forEach(function (title) { var tooltipHeaderTitle = document.createElement(Selector.DIV); tooltipHeaderTitle.className = ClassName.TOOLTIP_HEADER_ITEM; tooltipHeaderTitle.innerHTML = title; tooltipHeader.appendChild(tooltipHeaderTitle); }); var tooltipBody = document.createElement(Selector.DIV); tooltipBody.className = ClassName.TOOLTIP_BODY; var tooltipBodyItems = tooltipModel.body.map(function (item) { return item.lines; }); tooltipBodyItems.forEach(function (item, i) { var tooltipBodyItem = document.createElement(Selector.DIV); tooltipBodyItem.className = ClassName.TOOLTIP_BODY_ITEM; var colors = tooltipModel.labelColors[i]; var tooltipBodyItemColor = document.createElement(Selector.SPAN); tooltipBodyItemColor.className = ClassName.TOOLTIP_BODY_ITEM_COLOR; tooltipBodyItemColor.style.backgroundColor = colors.backgroundColor; tooltipBodyItem.appendChild(tooltipBodyItemColor); if (item[0].split(':').length > 1) { var tooltipBodyItemLabel = document.createElement(Selector.SPAN); tooltipBodyItemLabel.className = ClassName.TOOLTIP_BODY_ITEM_LABEL; tooltipBodyItemLabel.innerHTML = item[0].split(': ')[0]; tooltipBodyItem.appendChild(tooltipBodyItemLabel); var tooltipBodyItemValue = document.createElement(Selector.SPAN); tooltipBodyItemValue.className = ClassName.TOOLTIP_BODY_ITEM_VALUE; tooltipBodyItemValue.innerHTML = item[0].split(': ').pop(); tooltipBodyItem.appendChild(tooltipBodyItemValue); } else { var _tooltipBodyItemValue = document.createElement(Selector.SPAN); _tooltipBodyItemValue.className = ClassName.TOOLTIP_BODY_ITEM_VALUE; _tooltipBodyItemValue.innerHTML = item[0]; tooltipBodyItem.appendChild(_tooltipBodyItemValue); } tooltipBody.appendChild(tooltipBodyItem); }); tooltip.innerHTML = ''; tooltip.appendChild(tooltipHeader); tooltip.appendChild(tooltipBody); } var position = this._chart.canvas.getBoundingClientRect(); var positionY = this._chart.canvas.offsetTop; var positionX = this._chart.canvas.offsetLeft; var positionLeft = positionX + tooltipModel.caretX; var positionTop = positionY + tooltipModel.caretY; // eslint-disable-next-line var halfWidth = tooltipModel.width / 2; if (positionLeft + halfWidth > position.width) { positionLeft -= halfWidth; } else if (positionLeft < halfWidth) { positionLeft += halfWidth; } // Display, position, and set styles for font tooltip.style.opacity = 1; tooltip.style.left = positionLeft + "px"; tooltip.style.top = positionTop + "px"; } var customTooltips = CustomTooltips; // TODO: camel-case exports.CustomTooltips = CustomTooltips; exports.customTooltips = customTooltips; //# sourceMappingURL=custom-tooltips.js.map