UNPKG

highcharts

Version:
103 lines (102 loc) 3.2 kB
/* * * * Imports * * */ import H from '../../Core/Globals.js'; import { pushUnique } from '../../Shared/Utilities.js'; const { composed } = H; /* * * * Composition * * */ var FlagsSymbols; (function (FlagsSymbols) { /* * * * Functions * * */ /** * @private */ function compose(SVGRendererClass) { if (pushUnique(composed, 'Series.Flags')) { const symbols = SVGRendererClass.prototype.symbols; symbols.flag = flag; createPinSymbol(symbols, 'circle'); createPinSymbol(symbols, 'square'); symbols['flag-icon'] = function (x, y, w, h) { return flag.call(this, x, y, w, Math.round(h * 0.6), { anchorX: Math.round(x), anchorY: Math.round(y + h) }); }; } } FlagsSymbols.compose = compose; /** * Create the flag icon with anchor. * @private */ function flag(x, y, w, h, options) { const anchorX = (options && options.anchorX) || x, anchorY = (options && options.anchorY) || y; const path = this.circle(anchorX - 1, anchorY - 1, 2, 2); path.push(['M', anchorX, anchorY], ['L', x, y + h], ['L', x, y], ['L', x + w, y], ['L', x + w, y + h], ['L', x, y + h], ['Z']); return path; } /** * Create the circlepin and squarepin icons with anchor. * @private */ function createPinSymbol(symbols, shape) { symbols[(shape + 'pin')] = function (x, y, w, h, options) { const anchorX = options && options.anchorX, anchorY = options && options.anchorY; let path; // For single-letter flags, make sure circular flags are not taller // than their width if (shape === 'circle' && h > w) { x -= Math.round((h - w) / 2); w = h; } path = (symbols[shape])(x, y, w, h, options); if (anchorX && anchorY) { /** * If the label is below the anchor, draw the connecting line * from the top edge of the label, otherwise start drawing from * the bottom edge */ let labelX = anchorX; if (shape === 'circle') { labelX = x + w / 2; } else { const startSeg = path[0]; const endSeg = path[1]; if (startSeg[0] === 'M' && endSeg[0] === 'L') { labelX = (startSeg[1] + endSeg[1]) / 2; } } const labelY = (y > anchorY) ? y : y + h; path.push([ 'M', labelX, labelY ], [ 'L', anchorX, anchorY ]); path = path.concat(symbols.circle(anchorX - 1, anchorY - 1, 2, 2)); } return path; }; } })(FlagsSymbols || (FlagsSymbols = {})); /* * * * Default Export * * */ export default FlagsSymbols;