/* A class to parse color values @author Stoyan Stefanov @link http://www.phpied.com/rgb-color-parser-in-javascript/ Use it if you like it canvg.js - Javascript SVG parser and renderer on Canvas MIT Licensed Gabe Lerner (gabelerner@gmail.com) http://code.google.com/p/canvg/ Requires: rgbcolor.js - http://www.phpied.com/rgb-color-parser-in-javascript/ Highcharts JS v3.0.6 (2013-10-04) CanVGRenderer Extension module (c) 2011-2012 Torstein Hønsi, Erik Olsson License: www.highcharts.com/license */ function RGBColor(m) { this.ok = !1; m.charAt(0) == '#' && (m = m.substr(1, 6)); var m = m.replace(/ /g, ''), m = m.toLowerCase(), a = { aliceblue: 'f0f8ff', antiquewhite: 'faebd7', aqua: '00ffff', aquamarine: '7fffd4', azure: 'f0ffff', beige: 'f5f5dc', bisque: 'ffe4c4', black: '000000', blanchedalmond: 'ffebcd', blue: '0000ff', blueviolet: '8a2be2', brown: 'a52a2a', burlywood: 'deb887', cadetblue: '5f9ea0', chartreuse: '7fff00', chocolate: 'd2691e', coral: 'ff7f50', cornflowerblue: '6495ed', cornsilk: 'fff8dc', crimson: 'dc143c', cyan: '00ffff', darkblue: '00008b', darkcyan: '008b8b', darkgoldenrod: 'b8860b', darkgray: 'a9a9a9', darkgreen: '006400', darkkhaki: 'bdb76b', darkmagenta: '8b008b', darkolivegreen: '556b2f', darkorange: 'ff8c00', darkorchid: '9932cc', darkred: '8b0000', darksalmon: 'e9967a', darkseagreen: '8fbc8f', darkslateblue: '483d8b', darkslategray: '2f4f4f', darkturquoise: '00ced1', darkviolet: '9400d3', deeppink: 'ff1493', deepskyblue: '00bfff', dimgray: '696969', dodgerblue: '1e90ff', feldspar: 'd19275', firebrick: 'b22222', floralwhite: 'fffaf0', forestgreen: '228b22', fuchsia: 'ff00ff', gainsboro: 'dcdcdc', ghostwhite: 'f8f8ff', gold: 'ffd700', goldenrod: 'daa520', gray: '808080', green: '008000', greenyellow: 'adff2f', honeydew: 'f0fff0', hotpink: 'ff69b4', indianred: 'cd5c5c', indigo: '4b0082', ivory: 'fffff0', khaki: 'f0e68c', lavender: 'e6e6fa', lavenderblush: 'fff0f5', lawngreen: '7cfc00', lemonchiffon: 'fffacd', lightblue: 'add8e6', lightcoral: 'f08080', lightcyan: 'e0ffff', lightgoldenrodyellow: 'fafad2', lightgrey: 'd3d3d3', lightgreen: '90ee90', lightpink: 'ffb6c1', lightsalmon: 'ffa07a', lightseagreen: '20b2aa', lightskyblue: '87cefa', lightslateblue: '8470ff', lightslategray: '778899', lightsteelblue: 'b0c4de', lightyellow: 'ffffe0', lime: '00ff00', limegreen: '32cd32', linen: 'faf0e6', magenta: 'ff00ff', maroon: '800000', mediumaquamarine: '66cdaa', mediumblue: '0000cd', mediumorchid: 'ba55d3', mediumpurple: '9370d8', mediumseagreen: '3cb371', mediumslateblue: '7b68ee', mediumspringgreen: '00fa9a', mediumturquoise: '48d1cc', mediumvioletred: 'c71585', midnightblue: '191970', mintcream: 'f5fffa', mistyrose: 'ffe4e1', moccasin: 'ffe4b5', navajowhite: 'ffdead', navy: '000080', oldlace: 'fdf5e6', olive: '808000', olivedrab: '6b8e23', orange: 'ffa500', orangered: 'ff4500', orchid: 'da70d6', palegoldenrod: 'eee8aa', palegreen: '98fb98', paleturquoise: 'afeeee', palevioletred: 'd87093', papayawhip: 'ffefd5', peachpuff: 'ffdab9', peru: 'cd853f', pink: 'ffc0cb', plum: 'dda0dd', powderblue: 'b0e0e6', purple: '800080', red: 'ff0000', rosybrown: 'bc8f8f', royalblue: '4169e1', saddlebrown: '8b4513', salmon: 'fa8072', sandybrown: 'f4a460', seagreen: '2e8b57', seashell: 'fff5ee', sienna: 'a0522d', silver: 'c0c0c0', skyblue: '87ceeb', slateblue: '6a5acd', slategray: '708090', snow: 'fffafa', springgreen: '00ff7f', steelblue: '4682b4', tan: 'd2b48c', teal: '008080', thistle: 'd8bfd8', tomato: 'ff6347', turquoise: '40e0d0', violet: 'ee82ee', violetred: 'd02090', wheat: 'f5deb3', white: 'ffffff', whitesmoke: 'f5f5f5', yellow: 'ffff00', yellowgreen: '9acd32', }, c; for (c in a) m == c && (m = a[c]); var d = [ { re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/, example: ['rgb(123, 234, 45)', 'rgb(255,234,245)'], process: function (b) { return [parseInt(b[1]), parseInt(b[2]), parseInt(b[3])]; }, }, { re: /^(\w{2})(\w{2})(\w{2})$/, example: ['#00ff00', '336699'], process: function (b) { return [parseInt(b[1], 16), parseInt(b[2], 16), parseInt(b[3], 16)]; }, }, { re: /^(\w{1})(\w{1})(\w{1})$/, example: ['#fb0', 'f0f'], process: function (b) { return [parseInt(b[1] + b[1], 16), parseInt(b[2] + b[2], 16), parseInt(b[3] + b[3], 16)]; }, }, ]; for (c = 0; c < d.length; c++) { var b = d[c].process, k = d[c].re.exec(m); if (k) (channels = b(k)), (this.r = channels[0]), (this.g = channels[1]), (this.b = channels[2]), (this.ok = !0); } this.r = this.r < 0 || isNaN(this.r) ? 0 : this.r > 255 ? 255 : this.r; this.g = this.g < 0 || isNaN(this.g) ? 0 : this.g > 255 ? 255 : this.g; this.b = this.b < 0 || isNaN(this.b) ? 0 : this.b > 255 ? 255 : this.b; this.toRGB = function () { return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }; this.toHex = function () { var b = this.r.toString(16), a = this.g.toString(16), d = this.b.toString(16); b.length == 1 && (b = '0' + b); a.length == 1 && (a = '0' + a); d.length == 1 && (d = '0' + d); return '#' + b + a + d; }; this.getHelpXML = function () { for (var b = [], k = 0; k < d.length; k++) for (var c = d[k].example, j = 0; j < c.length; j++) b[b.length] = c[j]; for (var h in a) b[b.length] = h; c = document.createElement('ul'); c.setAttribute('id', 'rgbcolor-examples'); for (k = 0; k < b.length; k++) try { var l = document.createElement('li'), o = new RGBColor(b[k]), n = document.createElement('div'); n.style.cssText = 'margin: 3px; border: 1px solid black; background:' + o.toHex() + '; color:' + o.toHex(); n.appendChild(document.createTextNode('test')); var q = document.createTextNode(' ' + b[k] + ' -> ' + o.toRGB() + ' -> ' + o.toHex()); l.appendChild(n); l.appendChild(q); c.appendChild(l); } catch (p) {} return c; }; } if (!window.console) (window.console = {}), (window.console.log = function () {}), (window.console.dir = function () {}); if (!Array.prototype.indexOf) Array.prototype.indexOf = function (m) { for (var a = 0; a < this.length; a++) if (this[a] == m) return a; return -1; }; (function () { function m() { var a = { FRAMERATE: 30, MAX_VIRTUAL_PIXELS: 3e4 }; a.init = function (c) { a.Definitions = {}; a.Styles = {}; a.Animations = []; a.Images = []; a.ctx = c; a.ViewPort = new (function () { this.viewPorts = []; this.Clear = function () { this.viewPorts = []; }; this.SetCurrent = function (a, b) { this.viewPorts.push({ width: a, height: b }); }; this.RemoveCurrent = function () { this.viewPorts.pop(); }; this.Current = function () { return this.viewPorts[this.viewPorts.length - 1]; }; this.width = function () { return this.Current().width; }; this.height = function () { return this.Current().height; }; this.ComputeSize = function (a) { return a != null && typeof a == 'number' ? a : a == 'x' ? this.width() : a == 'y' ? this.height() : Math.sqrt(Math.pow(this.width(), 2) + Math.pow(this.height(), 2)) / Math.sqrt(2); }; })(); }; a.init(); a.ImagesLoaded = function () { for (var c = 0; c < a.Images.length; c++) if (!a.Images[c].loaded) return !1; return !0; }; a.trim = function (a) { return a.replace(/^\s+|\s+$/g, ''); }; a.compressSpaces = function (a) { return a.replace(/[\s\r\t\n]+/gm, ' '); }; a.ajax = function (a) { var d; return (d = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP')) ? (d.open('GET', a, !1), d.send(null), d.responseText) : null; }; a.parseXml = function (a) { if (window.DOMParser) return new DOMParser().parseFromString(a, 'text/xml'); else { var a = a.replace(/]*>/, ''), d = new ActiveXObject('Microsoft.XMLDOM'); d.async = 'false'; d.loadXML(a); return d; } }; a.Property = function (c, d) { this.name = c; this.value = d; this.hasValue = function () { return this.value != null && this.value !== ''; }; this.numValue = function () { if (!this.hasValue()) return 0; var b = parseFloat(this.value); (this.value + '').match(/%$/) && (b /= 100); return b; }; this.valueOrDefault = function (b) { return this.hasValue() ? this.value : b; }; this.numValueOrDefault = function (b) { return this.hasValue() ? this.numValue() : b; }; var b = this; this.Color = { addOpacity: function (d) { var c = b.value; if (d != null && d != '') { var f = new RGBColor(b.value); f.ok && (c = 'rgba(' + f.r + ', ' + f.g + ', ' + f.b + ', ' + d + ')'); } return new a.Property(b.name, c); }, }; this.Definition = { getDefinition: function () { var d = b.value.replace(/^(url\()?#([^\)]+)\)?$/, '$2'); return a.Definitions[d]; }, isUrl: function () { return b.value.indexOf('url(') == 0; }, getFillStyle: function (b) { var d = this.getDefinition(); return d != null && d.createGradient ? d.createGradient(a.ctx, b) : d != null && d.createPattern ? d.createPattern(a.ctx, b) : null; }, }; this.Length = { DPI: function () { return 96; }, EM: function (b) { var d = 12, c = new a.Property('fontSize', a.Font.Parse(a.ctx.font).fontSize); c.hasValue() && (d = c.Length.toPixels(b)); return d; }, toPixels: function (d) { if (!b.hasValue()) return 0; var c = b.value + ''; return c.match(/em$/) ? b.numValue() * this.EM(d) : c.match(/ex$/) ? (b.numValue() * this.EM(d)) / 2 : c.match(/px$/) ? b.numValue() : c.match(/pt$/) ? b.numValue() * 1.25 : c.match(/pc$/) ? b.numValue() * 15 : c.match(/cm$/) ? (b.numValue() * this.DPI(d)) / 2.54 : c.match(/mm$/) ? (b.numValue() * this.DPI(d)) / 25.4 : c.match(/in$/) ? b.numValue() * this.DPI(d) : c.match(/%$/) ? b.numValue() * a.ViewPort.ComputeSize(d) : b.numValue(); }, }; this.Time = { toMilliseconds: function () { if (!b.hasValue()) return 0; var a = b.value + ''; if (a.match(/s$/)) return b.numValue() * 1e3; a.match(/ms$/); return b.numValue(); }, }; this.Angle = { toRadians: function () { if (!b.hasValue()) return 0; var a = b.value + ''; return a.match(/deg$/) ? b.numValue() * (Math.PI / 180) : a.match(/grad$/) ? b.numValue() * (Math.PI / 200) : a.match(/rad$/) ? b.numValue() : b.numValue() * (Math.PI / 180); }, }; }; a.Font = new (function () { this.Styles = ['normal', 'italic', 'oblique', 'inherit']; this.Variants = ['normal', 'small-caps', 'inherit']; this.Weights = 'normal,bold,bolder,lighter,100,200,300,400,500,600,700,800,900,inherit'.split( ',', ); this.CreateFont = function (d, b, c, e, f, g) { g = g != null ? this.Parse(g) : this.CreateFont('', '', '', '', '', a.ctx.font); return { fontFamily: f || g.fontFamily, fontSize: e || g.fontSize, fontStyle: d || g.fontStyle, fontWeight: c || g.fontWeight, fontVariant: b || g.fontVariant, toString: function () { return [ this.fontStyle, this.fontVariant, this.fontWeight, this.fontSize, this.fontFamily, ].join(' '); }, }; }; var c = this; this.Parse = function (d) { for ( var b = {}, d = a.trim(a.compressSpaces(d || '')).split(' '), k = !1, e = !1, f = !1, g = !1, j = '', h = 0; h < d.length; h++ ) if (!e && c.Styles.indexOf(d[h]) != -1) { if (d[h] != 'inherit') b.fontStyle = d[h]; e = !0; } else if (!g && c.Variants.indexOf(d[h]) != -1) { if (d[h] != 'inherit') b.fontVariant = d[h]; e = g = !0; } else if (!f && c.Weights.indexOf(d[h]) != -1) { if (d[h] != 'inherit') b.fontWeight = d[h]; e = g = f = !0; } else if (k) d[h] != 'inherit' && (j += d[h]); else { if (d[h] != 'inherit') b.fontSize = d[h].split('/')[0]; e = g = f = k = !0; } if (j != '') b.fontFamily = j; return b; }; })(); a.ToNumberArray = function (c) { for ( var c = a.trim(a.compressSpaces((c || '').replace(/,/g, ' '))).split(' '), d = 0; d < c.length; d++ ) c[d] = parseFloat(c[d]); return c; }; a.Point = function (a, d) { this.x = a; this.y = d; this.angleTo = function (b) { return Math.atan2(b.y - this.y, b.x - this.x); }; this.applyTransform = function (b) { var a = this.x * b[1] + this.y * b[3] + b[5]; this.x = this.x * b[0] + this.y * b[2] + b[4]; this.y = a; }; }; a.CreatePoint = function (c) { c = a.ToNumberArray(c); return new a.Point(c[0], c[1]); }; a.CreatePath = function (c) { for (var c = a.ToNumberArray(c), d = [], b = 0; b < c.length; b += 2) d.push(new a.Point(c[b], c[b + 1])); return d; }; a.BoundingBox = function (a, d, b, k) { this.y2 = this.x2 = this.y1 = this.x1 = Number.NaN; this.x = function () { return this.x1; }; this.y = function () { return this.y1; }; this.width = function () { return this.x2 - this.x1; }; this.height = function () { return this.y2 - this.y1; }; this.addPoint = function (b, a) { if (b != null) { if (isNaN(this.x1) || isNaN(this.x2)) this.x2 = this.x1 = b; if (b < this.x1) this.x1 = b; if (b > this.x2) this.x2 = b; } if (a != null) { if (isNaN(this.y1) || isNaN(this.y2)) this.y2 = this.y1 = a; if (a < this.y1) this.y1 = a; if (a > this.y2) this.y2 = a; } }; this.addX = function (b) { this.addPoint(b, null); }; this.addY = function (b) { this.addPoint(null, b); }; this.addBoundingBox = function (b) { this.addPoint(b.x1, b.y1); this.addPoint(b.x2, b.y2); }; this.addQuadraticCurve = function (b, a, d, c, k, l) { d = b + (2 / 3) * (d - b); c = a + (2 / 3) * (c - a); this.addBezierCurve(b, a, d, d + (1 / 3) * (k - b), c, c + (1 / 3) * (l - a), k, l); }; this.addBezierCurve = function (b, a, d, c, k, l, o, n) { var q = [b, a], p = [d, c], t = [k, l], m = [o, n]; this.addPoint(q[0], q[1]); this.addPoint(m[0], m[1]); for (i = 0; i <= 1; i++) (b = function (b) { return ( Math.pow(1 - b, 3) * q[i] + 3 * Math.pow(1 - b, 2) * b * p[i] + 3 * (1 - b) * Math.pow(b, 2) * t[i] + Math.pow(b, 3) * m[i] ); }), (a = 6 * q[i] - 12 * p[i] + 6 * t[i]), (d = -3 * q[i] + 9 * p[i] - 9 * t[i] + 3 * m[i]), (c = 3 * p[i] - 3 * q[i]), d == 0 ? a != 0 && ((a = -c / a), 0 < a && a < 1 && (i == 0 && this.addX(b(a)), i == 1 && this.addY(b(a)))) : ((c = Math.pow(a, 2) - 4 * c * d), c < 0 || ((k = (-a + Math.sqrt(c)) / (2 * d)), 0 < k && k < 1 && (i == 0 && this.addX(b(k)), i == 1 && this.addY(b(k))), (a = (-a - Math.sqrt(c)) / (2 * d)), 0 < a && a < 1 && (i == 0 && this.addX(b(a)), i == 1 && this.addY(b(a))))); }; this.isPointInBox = function (b, a) { return this.x1 <= b && b <= this.x2 && this.y1 <= a && a <= this.y2; }; this.addPoint(a, d); this.addPoint(b, k); }; a.Transform = function (c) { var d = this; this.Type = {}; this.Type.translate = function (b) { this.p = a.CreatePoint(b); this.apply = function (b) { b.translate(this.p.x || 0, this.p.y || 0); }; this.applyToPoint = function (b) { b.applyTransform([1, 0, 0, 1, this.p.x || 0, this.p.y || 0]); }; }; this.Type.rotate = function (b) { b = a.ToNumberArray(b); this.angle = new a.Property('angle', b[0]); this.cx = b[1] || 0; this.cy = b[2] || 0; this.apply = function (b) { b.translate(this.cx, this.cy); b.rotate(this.angle.Angle.toRadians()); b.translate(-this.cx, -this.cy); }; this.applyToPoint = function (b) { var a = this.angle.Angle.toRadians(); b.applyTransform([1, 0, 0, 1, this.p.x || 0, this.p.y || 0]); b.applyTransform([Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0]); b.applyTransform([1, 0, 0, 1, -this.p.x || 0, -this.p.y || 0]); }; }; this.Type.scale = function (b) { this.p = a.CreatePoint(b); this.apply = function (b) { b.scale(this.p.x || 1, this.p.y || this.p.x || 1); }; this.applyToPoint = function (b) { b.applyTransform([this.p.x || 0, 0, 0, this.p.y || 0, 0, 0]); }; }; this.Type.matrix = function (b) { this.m = a.ToNumberArray(b); this.apply = function (b) { b.transform(this.m[0], this.m[1], this.m[2], this.m[3], this.m[4], this.m[5]); }; this.applyToPoint = function (b) { b.applyTransform(this.m); }; }; this.Type.SkewBase = function (b) { this.base = d.Type.matrix; this.base(b); this.angle = new a.Property('angle', b); }; this.Type.SkewBase.prototype = new this.Type.matrix(); this.Type.skewX = function (b) { this.base = d.Type.SkewBase; this.base(b); this.m = [1, 0, Math.tan(this.angle.Angle.toRadians()), 1, 0, 0]; }; this.Type.skewX.prototype = new this.Type.SkewBase(); this.Type.skewY = function (b) { this.base = d.Type.SkewBase; this.base(b); this.m = [1, Math.tan(this.angle.Angle.toRadians()), 0, 1, 0, 0]; }; this.Type.skewY.prototype = new this.Type.SkewBase(); this.transforms = []; this.apply = function (b) { for (var a = 0; a < this.transforms.length; a++) this.transforms[a].apply(b); }; this.applyToPoint = function (b) { for (var a = 0; a < this.transforms.length; a++) this.transforms[a].applyToPoint(b); }; for (var c = a.trim(a.compressSpaces(c)).split(/\s(?=[a-z])/), b = 0; b < c.length; b++) { var k = c[b].split('(')[0], e = c[b].split('(')[1].replace(')', ''); this.transforms.push(new this.Type[k](e)); } }; a.AspectRatio = function (c, d, b, k, e, f, g, j, h, l) { var d = a.compressSpaces(d), d = d.replace(/^defer\s/, ''), o = d.split(' ')[0] || 'xMidYMid', d = d.split(' ')[1] || 'meet', n = b / k, q = e / f, p = Math.min(n, q), m = Math.max(n, q); d == 'meet' && ((k *= p), (f *= p)); d == 'slice' && ((k *= m), (f *= m)); h = new a.Property('refX', h); l = new a.Property('refY', l); h.hasValue() && l.hasValue() ? c.translate(-p * h.Length.toPixels('x'), -p * l.Length.toPixels('y')) : (o.match(/^xMid/) && ((d == 'meet' && p == q) || (d == 'slice' && m == q)) && c.translate(b / 2 - k / 2, 0), o.match(/YMid$/) && ((d == 'meet' && p == n) || (d == 'slice' && m == n)) && c.translate(0, e / 2 - f / 2), o.match(/^xMax/) && ((d == 'meet' && p == q) || (d == 'slice' && m == q)) && c.translate(b - k, 0), o.match(/YMax$/) && ((d == 'meet' && p == n) || (d == 'slice' && m == n)) && c.translate(0, e - f)); o == 'none' ? c.scale(n, q) : d == 'meet' ? c.scale(p, p) : d == 'slice' && c.scale(m, m); c.translate(g == null ? 0 : -g, j == null ? 0 : -j); }; a.Element = {}; a.Element.ElementBase = function (c) { this.attributes = {}; this.styles = {}; this.children = []; this.attribute = function (b, d) { var c = this.attributes[b]; if (c != null) return c; c = new a.Property(b, ''); d == !0 && (this.attributes[b] = c); return c; }; this.style = function (b, d) { var c = this.styles[b]; if (c != null) return c; c = this.attribute(b); if (c != null && c.hasValue()) return c; c = this.parent; if (c != null && ((c = c.style(b)), c != null && c.hasValue())) return c; c = new a.Property(b, ''); d == !0 && (this.styles[b] = c); return c; }; this.render = function (b) { if ( this.style('display').value != 'none' && this.attribute('visibility').value != 'hidden' ) { b.save(); this.setContext(b); if (this.attribute('mask').hasValue()) { var a = this.attribute('mask').Definition.getDefinition(); a != null && a.apply(b, this); } else this.style('filter').hasValue() ? ((a = this.style('filter').Definition.getDefinition()), a != null && a.apply(b, this)) : this.renderChildren(b); this.clearContext(b); b.restore(); } }; this.setContext = function () {}; this.clearContext = function () {}; this.renderChildren = function (b) { for (var a = 0; a < this.children.length; a++) this.children[a].render(b); }; this.addChild = function (b, d) { var c = b; d && (c = a.CreateElement(b)); c.parent = this; this.children.push(c); }; if (c != null && c.nodeType == 1) { for (var d = 0; d < c.childNodes.length; d++) { var b = c.childNodes[d]; b.nodeType == 1 && this.addChild(b, !0); } for (d = 0; d < c.attributes.length; d++) (b = c.attributes[d]), (this.attributes[b.nodeName] = new a.Property(b.nodeName, b.nodeValue)); b = a.Styles[c.nodeName]; if (b != null) for (var k in b) this.styles[k] = b[k]; if (this.attribute('class').hasValue()) for ( var d = a.compressSpaces(this.attribute('class').value).split(' '), e = 0; e < d.length; e++ ) { b = a.Styles['.' + d[e]]; if (b != null) for (k in b) this.styles[k] = b[k]; b = a.Styles[c.nodeName + '.' + d[e]]; if (b != null) for (k in b) this.styles[k] = b[k]; } if (this.attribute('style').hasValue()) { b = this.attribute('style').value.split(';'); for (d = 0; d < b.length; d++) a.trim(b[d]) != '' && ((c = b[d].split(':')), (k = a.trim(c[0])), (c = a.trim(c[1])), (this.styles[k] = new a.Property(k, c))); } this.attribute('id').hasValue() && a.Definitions[this.attribute('id').value] == null && (a.Definitions[this.attribute('id').value] = this); } }; a.Element.RenderedElementBase = function (c) { this.base = a.Element.ElementBase; this.base(c); this.setContext = function (d) { if (this.style('fill').Definition.isUrl()) { var b = this.style('fill').Definition.getFillStyle(this); if (b != null) d.fillStyle = b; } else if (this.style('fill').hasValue()) (b = this.style('fill')), this.style('fill-opacity').hasValue() && (b = b.Color.addOpacity(this.style('fill-opacity').value)), (d.fillStyle = b.value == 'none' ? 'rgba(0,0,0,0)' : b.value); if (this.style('stroke').Definition.isUrl()) { if (((b = this.style('stroke').Definition.getFillStyle(this)), b != null)) d.strokeStyle = b; } else if (this.style('stroke').hasValue()) (b = this.style('stroke')), this.style('stroke-opacity').hasValue() && (b = b.Color.addOpacity(this.style('stroke-opacity').value)), (d.strokeStyle = b.value == 'none' ? 'rgba(0,0,0,0)' : b.value); if (this.style('stroke-width').hasValue()) d.lineWidth = this.style('stroke-width').Length.toPixels(); if (this.style('stroke-linecap').hasValue()) d.lineCap = this.style('stroke-linecap').value; if (this.style('stroke-linejoin').hasValue()) d.lineJoin = this.style('stroke-linejoin').value; if (this.style('stroke-miterlimit').hasValue()) d.miterLimit = this.style('stroke-miterlimit').value; if (typeof d.font != 'undefined') d.font = a.Font.CreateFont( this.style('font-style').value, this.style('font-variant').value, this.style('font-weight').value, this.style('font-size').hasValue() ? this.style('font-size').Length.toPixels() + 'px' : '', this.style('font-family').value, ).toString(); this.attribute('transform').hasValue() && new a.Transform(this.attribute('transform').value).apply(d); this.attribute('clip-path').hasValue() && ((b = this.attribute('clip-path').Definition.getDefinition()), b != null && b.apply(d)); if (this.style('opacity').hasValue()) d.globalAlpha = this.style('opacity').numValue(); }; }; a.Element.RenderedElementBase.prototype = new a.Element.ElementBase(); a.Element.PathElementBase = function (c) { this.base = a.Element.RenderedElementBase; this.base(c); this.path = function (d) { d != null && d.beginPath(); return new a.BoundingBox(); }; this.renderChildren = function (d) { this.path(d); a.Mouse.checkPath(this, d); d.fillStyle != '' && d.fill(); d.strokeStyle != '' && d.stroke(); var b = this.getMarkers(); if (b != null) { if (this.style('marker-start').Definition.isUrl()) { var c = this.style('marker-start').Definition.getDefinition(); c.render(d, b[0][0], b[0][1]); } if (this.style('marker-mid').Definition.isUrl()) for ( var c = this.style('marker-mid').Definition.getDefinition(), e = 1; e < b.length - 1; e++ ) c.render(d, b[e][0], b[e][1]); this.style('marker-end').Definition.isUrl() && ((c = this.style('marker-end').Definition.getDefinition()), c.render(d, b[b.length - 1][0], b[b.length - 1][1])); } }; this.getBoundingBox = function () { return this.path(); }; this.getMarkers = function () { return null; }; }; a.Element.PathElementBase.prototype = new a.Element.RenderedElementBase(); a.Element.svg = function (c) { this.base = a.Element.RenderedElementBase; this.base(c); this.baseClearContext = this.clearContext; this.clearContext = function (d) { this.baseClearContext(d); a.ViewPort.RemoveCurrent(); }; this.baseSetContext = this.setContext; this.setContext = function (d) { d.strokeStyle = 'rgba(0,0,0,0)'; d.lineCap = 'butt'; d.lineJoin = 'miter'; d.miterLimit = 4; this.baseSetContext(d); this.attribute('x').hasValue() && this.attribute('y').hasValue() && d.translate( this.attribute('x').Length.toPixels('x'), this.attribute('y').Length.toPixels('y'), ); var b = a.ViewPort.width(), c = a.ViewPort.height(); if ( typeof this.root == 'undefined' && this.attribute('width').hasValue() && this.attribute('height').hasValue() ) { var b = this.attribute('width').Length.toPixels('x'), c = this.attribute('height').Length.toPixels('y'), e = 0, f = 0; this.attribute('refX').hasValue() && this.attribute('refY').hasValue() && ((e = -this.attribute('refX').Length.toPixels('x')), (f = -this.attribute('refY').Length.toPixels('y'))); d.beginPath(); d.moveTo(e, f); d.lineTo(b, f); d.lineTo(b, c); d.lineTo(e, c); d.closePath(); d.clip(); } a.ViewPort.SetCurrent(b, c); if (this.attribute('viewBox').hasValue()) { var e = a.ToNumberArray(this.attribute('viewBox').value), f = e[0], g = e[1], b = e[2], c = e[3]; a.AspectRatio( d, this.attribute('preserveAspectRatio').value, a.ViewPort.width(), b, a.ViewPort.height(), c, f, g, this.attribute('refX').value, this.attribute('refY').value, ); a.ViewPort.RemoveCurrent(); a.ViewPort.SetCurrent(e[2], e[3]); } }; }; a.Element.svg.prototype = new a.Element.RenderedElementBase(); a.Element.rect = function (c) { this.base = a.Element.PathElementBase; this.base(c); this.path = function (d) { var b = this.attribute('x').Length.toPixels('x'), c = this.attribute('y').Length.toPixels('y'), e = this.attribute('width').Length.toPixels('x'), f = this.attribute('height').Length.toPixels('y'), g = this.attribute('rx').Length.toPixels('x'), j = this.attribute('ry').Length.toPixels('y'); this.attribute('rx').hasValue() && !this.attribute('ry').hasValue() && (j = g); this.attribute('ry').hasValue() && !this.attribute('rx').hasValue() && (g = j); d != null && (d.beginPath(), d.moveTo(b + g, c), d.lineTo(b + e - g, c), d.quadraticCurveTo(b + e, c, b + e, c + j), d.lineTo(b + e, c + f - j), d.quadraticCurveTo(b + e, c + f, b + e - g, c + f), d.lineTo(b + g, c + f), d.quadraticCurveTo(b, c + f, b, c + f - j), d.lineTo(b, c + j), d.quadraticCurveTo(b, c, b + g, c), d.closePath()); return new a.BoundingBox(b, c, b + e, c + f); }; }; a.Element.rect.prototype = new a.Element.PathElementBase(); a.Element.circle = function (c) { this.base = a.Element.PathElementBase; this.base(c); this.path = function (d) { var b = this.attribute('cx').Length.toPixels('x'), c = this.attribute('cy').Length.toPixels('y'), e = this.attribute('r').Length.toPixels(); d != null && (d.beginPath(), d.arc(b, c, e, 0, Math.PI * 2, !0), d.closePath()); return new a.BoundingBox(b - e, c - e, b + e, c + e); }; }; a.Element.circle.prototype = new a.Element.PathElementBase(); a.Element.ellipse = function (c) { this.base = a.Element.PathElementBase; this.base(c); this.path = function (d) { var b = 4 * ((Math.sqrt(2) - 1) / 3), c = this.attribute('rx').Length.toPixels('x'), e = this.attribute('ry').Length.toPixels('y'), f = this.attribute('cx').Length.toPixels('x'), g = this.attribute('cy').Length.toPixels('y'); d != null && (d.beginPath(), d.moveTo(f, g - e), d.bezierCurveTo(f + b * c, g - e, f + c, g - b * e, f + c, g), d.bezierCurveTo(f + c, g + b * e, f + b * c, g + e, f, g + e), d.bezierCurveTo(f - b * c, g + e, f - c, g + b * e, f - c, g), d.bezierCurveTo(f - c, g - b * e, f - b * c, g - e, f, g - e), d.closePath()); return new a.BoundingBox(f - c, g - e, f + c, g + e); }; }; a.Element.ellipse.prototype = new a.Element.PathElementBase(); a.Element.line = function (c) { this.base = a.Element.PathElementBase; this.base(c); this.getPoints = function () { return [ new a.Point( this.attribute('x1').Length.toPixels('x'), this.attribute('y1').Length.toPixels('y'), ), new a.Point( this.attribute('x2').Length.toPixels('x'), this.attribute('y2').Length.toPixels('y'), ), ]; }; this.path = function (d) { var b = this.getPoints(); d != null && (d.beginPath(), d.moveTo(b[0].x, b[0].y), d.lineTo(b[1].x, b[1].y)); return new a.BoundingBox(b[0].x, b[0].y, b[1].x, b[1].y); }; this.getMarkers = function () { var a = this.getPoints(), b = a[0].angleTo(a[1]); return [ [a[0], b], [a[1], b], ]; }; }; a.Element.line.prototype = new a.Element.PathElementBase(); a.Element.polyline = function (c) { this.base = a.Element.PathElementBase; this.base(c); this.points = a.CreatePath(this.attribute('points').value); this.path = function (d) { var b = new a.BoundingBox(this.points[0].x, this.points[0].y); d != null && (d.beginPath(), d.moveTo(this.points[0].x, this.points[0].y)); for (var c = 1; c < this.points.length; c++) b.addPoint(this.points[c].x, this.points[c].y), d != null && d.lineTo(this.points[c].x, this.points[c].y); return b; }; this.getMarkers = function () { for (var a = [], b = 0; b < this.points.length - 1; b++) a.push([this.points[b], this.points[b].angleTo(this.points[b + 1])]); a.push([this.points[this.points.length - 1], a[a.length - 1][1]]); return a; }; }; a.Element.polyline.prototype = new a.Element.PathElementBase(); a.Element.polygon = function (c) { this.base = a.Element.polyline; this.base(c); this.basePath = this.path; this.path = function (a) { var b = this.basePath(a); a != null && (a.lineTo(this.points[0].x, this.points[0].y), a.closePath()); return b; }; }; a.Element.polygon.prototype = new a.Element.polyline(); a.Element.path = function (c) { this.base = a.Element.PathElementBase; this.base(c); c = this.attribute('d').value; c = c.replace(/,/gm, ' '); c = c.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm, '$1 $2'); c = c.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm, '$1 $2'); c = c.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\s])/gm, '$1 $2'); c = c.replace(/([^\s])([MmZzLlHhVvCcSsQqTtAa])/gm, '$1 $2'); c = c.replace(/([0-9])([+\-])/gm, '$1 $2'); c = c.replace(/(\.[0-9]*)(\.)/gm, '$1 $2'); c = c.replace(/([Aa](\s+[0-9]+){3})\s+([01])\s*([01])/gm, '$1 $3 $4 '); c = a.compressSpaces(c); c = a.trim(c); this.PathParser = new (function (d) { this.tokens = d.split(' '); this.reset = function () { this.i = -1; this.previousCommand = this.command = ''; this.start = new a.Point(0, 0); this.control = new a.Point(0, 0); this.current = new a.Point(0, 0); this.points = []; this.angles = []; }; this.isEnd = function () { return this.i >= this.tokens.length - 1; }; this.isCommandOrEnd = function () { return this.isEnd() ? !0 : this.tokens[this.i + 1].match(/^[A-Za-z]$/) != null; }; this.isRelativeCommand = function () { return this.command == this.command.toLowerCase(); }; this.getToken = function () { this.i += 1; return this.tokens[this.i]; }; this.getScalar = function () { return parseFloat(this.getToken()); }; this.nextCommand = function () { this.previousCommand = this.command; this.command = this.getToken(); }; this.getPoint = function () { return this.makeAbsolute(new a.Point(this.getScalar(), this.getScalar())); }; this.getAsControlPoint = function () { var b = this.getPoint(); return (this.control = b); }; this.getAsCurrentPoint = function () { var b = this.getPoint(); return (this.current = b); }; this.getReflectedControlPoint = function () { return this.previousCommand.toLowerCase() != 'c' && this.previousCommand.toLowerCase() != 's' ? this.current : new a.Point(2 * this.current.x - this.control.x, 2 * this.current.y - this.control.y); }; this.makeAbsolute = function (b) { if (this.isRelativeCommand()) (b.x = this.current.x + b.x), (b.y = this.current.y + b.y); return b; }; this.addMarker = function (b, a, d) { d != null && this.angles.length > 0 && this.angles[this.angles.length - 1] == null && (this.angles[this.angles.length - 1] = this.points[this.points.length - 1].angleTo(d)); this.addMarkerAngle(b, a == null ? null : a.angleTo(b)); }; this.addMarkerAngle = function (b, a) { this.points.push(b); this.angles.push(a); }; this.getMarkerPoints = function () { return this.points; }; this.getMarkerAngles = function () { for (var b = 0; b < this.angles.length; b++) if (this.angles[b] == null) for (var a = b + 1; a < this.angles.length; a++) if (this.angles[a] != null) { this.angles[b] = this.angles[a]; break; } return this.angles; }; })(c); this.path = function (d) { var b = this.PathParser; b.reset(); var c = new a.BoundingBox(); for (d != null && d.beginPath(); !b.isEnd(); ) switch ((b.nextCommand(), b.command.toUpperCase())) { case 'M': var e = b.getAsCurrentPoint(); b.addMarker(e); c.addPoint(e.x, e.y); d != null && d.moveTo(e.x, e.y); for (b.start = b.current; !b.isCommandOrEnd(); ) (e = b.getAsCurrentPoint()), b.addMarker(e, b.start), c.addPoint(e.x, e.y), d != null && d.lineTo(e.x, e.y); break; case 'L': for (; !b.isCommandOrEnd(); ) { var f = b.current, e = b.getAsCurrentPoint(); b.addMarker(e, f); c.addPoint(e.x, e.y); d != null && d.lineTo(e.x, e.y); } break; case 'H': for (; !b.isCommandOrEnd(); ) (e = new a.Point( (b.isRelativeCommand() ? b.current.x : 0) + b.getScalar(), b.current.y, )), b.addMarker(e, b.current), (b.current = e), c.addPoint(b.current.x, b.current.y), d != null && d.lineTo(b.current.x, b.current.y); break; case 'V': for (; !b.isCommandOrEnd(); ) (e = new a.Point( b.current.x, (b.isRelativeCommand() ? b.current.y : 0) + b.getScalar(), )), b.addMarker(e, b.current), (b.current = e), c.addPoint(b.current.x, b.current.y), d != null && d.lineTo(b.current.x, b.current.y); break; case 'C': for (; !b.isCommandOrEnd(); ) { var g = b.current, f = b.getPoint(), j = b.getAsControlPoint(), e = b.getAsCurrentPoint(); b.addMarker(e, j, f); c.addBezierCurve(g.x, g.y, f.x, f.y, j.x, j.y, e.x, e.y); d != null && d.bezierCurveTo(f.x, f.y, j.x, j.y, e.x, e.y); } break; case 'S': for (; !b.isCommandOrEnd(); ) (g = b.current), (f = b.getReflectedControlPoint()), (j = b.getAsControlPoint()), (e = b.getAsCurrentPoint()), b.addMarker(e, j, f), c.addBezierCurve(g.x, g.y, f.x, f.y, j.x, j.y, e.x, e.y), d != null && d.bezierCurveTo(f.x, f.y, j.x, j.y, e.x, e.y); break; case 'Q': for (; !b.isCommandOrEnd(); ) (g = b.current), (j = b.getAsControlPoint()), (e = b.getAsCurrentPoint()), b.addMarker(e, j, j), c.addQuadraticCurve(g.x, g.y, j.x, j.y, e.x, e.y), d != null && d.quadraticCurveTo(j.x, j.y, e.x, e.y); break; case 'T': for (; !b.isCommandOrEnd(); ) (g = b.current), (j = b.getReflectedControlPoint()), (b.control = j), (e = b.getAsCurrentPoint()), b.addMarker(e, j, j), c.addQuadraticCurve(g.x, g.y, j.x, j.y, e.x, e.y), d != null && d.quadraticCurveTo(j.x, j.y, e.x, e.y); break; case 'A': for (; !b.isCommandOrEnd(); ) { var g = b.current, h = b.getScalar(), l = b.getScalar(), f = b.getScalar() * (Math.PI / 180), o = b.getScalar(), j = b.getScalar(), e = b.getAsCurrentPoint(), n = new a.Point( (Math.cos(f) * (g.x - e.x)) / 2 + (Math.sin(f) * (g.y - e.y)) / 2, (-Math.sin(f) * (g.x - e.x)) / 2 + (Math.cos(f) * (g.y - e.y)) / 2, ), q = Math.pow(n.x, 2) / Math.pow(h, 2) + Math.pow(n.y, 2) / Math.pow(l, 2); q > 1 && ((h *= Math.sqrt(q)), (l *= Math.sqrt(q))); o = (o == j ? -1 : 1) * Math.sqrt( (Math.pow(h, 2) * Math.pow(l, 2) - Math.pow(h, 2) * Math.pow(n.y, 2) - Math.pow(l, 2) * Math.pow(n.x, 2)) / (Math.pow(h, 2) * Math.pow(n.y, 2) + Math.pow(l, 2) * Math.pow(n.x, 2)), ); isNaN(o) && (o = 0); var p = new a.Point((o * h * n.y) / l, (o * -l * n.x) / h), g = new a.Point( (g.x + e.x) / 2 + Math.cos(f) * p.x - Math.sin(f) * p.y, (g.y + e.y) / 2 + Math.sin(f) * p.x + Math.cos(f) * p.y, ), m = function (b, a) { return ( (b[0] * a[0] + b[1] * a[1]) / (Math.sqrt(Math.pow(b[0], 2) + Math.pow(b[1], 2)) * Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2))) ); }, s = function (b, a) { return (b[0] * a[1] < b[1] * a[0] ? -1 : 1) * Math.acos(m(b, a)); }, o = s([1, 0], [(n.x - p.x) / h, (n.y - p.y) / l]), q = [(n.x - p.x) / h, (n.y - p.y) / l], p = [(-n.x - p.x) / h, (-n.y - p.y) / l], n = s(q, p); if (m(q, p) <= -1) n = Math.PI; m(q, p) >= 1 && (n = 0); j == 0 && n > 0 && (n -= 2 * Math.PI); j == 1 && n < 0 && (n += 2 * Math.PI); q = new a.Point(g.x - h * Math.cos((o + n) / 2), g.y - l * Math.sin((o + n) / 2)); b.addMarkerAngle(q, (o + n) / 2 + ((j == 0 ? 1 : -1) * Math.PI) / 2); b.addMarkerAngle(e, n + ((j == 0 ? 1 : -1) * Math.PI) / 2); c.addPoint(e.x, e.y); d != null && ((m = h > l ? h : l), (e = h > l ? 1 : h / l), (h = h > l ? l / h : 1), d.translate(g.x, g.y), d.rotate(f), d.scale(e, h), d.arc(0, 0, m, o, o + n, 1 - j), d.scale(1 / e, 1 / h), d.rotate(-f), d.translate(-g.x, -g.y)); } break; case 'Z': d != null && d.closePath(), (b.current = b.start); } return c; }; this.getMarkers = function () { for ( var a = this.PathParser.getMarkerPoints(), b = this.PathParser.getMarkerAngles(), c = [], e = 0; e < a.length; e++ ) c.push([a[e], b[e]]); return c; }; }; a.Element.path.prototype = new a.Element.PathElementBase(); a.Element.pattern = function (c) { this.base = a.Element.ElementBase; this.base(c); this.createPattern = function (d) { var b = new a.Element.svg(); b.attributes.viewBox = new a.Property('viewBox', this.attribute('viewBox').value); b.attributes.x = new a.Property('x', this.attribute('x').value); b.attributes.y = new a.Property('y', this.attribute('y').value); b.attributes.width = new a.Property('width', this.attribute('width').value); b.attributes.height = new a.Property('height', this.attribute('height').value); b.children = this.children; var c = document.createElement('canvas'); c.width = this.attribute('width').Length.toPixels('x'); c.height = this.attribute('height').Length.toPixels('y'); b.render(c.getContext('2d')); return d.createPattern(c, 'repeat'); }; }; a.Element.pattern.prototype = new a.Element.ElementBase(); a.Element.marker = function (c) { this.base = a.Element.ElementBase; this.base(c); this.baseRender = this.render; this.render = function (d, b, c) { d.translate(b.x, b.y); this.attribute('orient').valueOrDefault('auto') == 'auto' && d.rotate(c); this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth' && d.scale(d.lineWidth, d.lineWidth); d.save(); var e = new a.Element.svg(); e.attributes.viewBox = new a.Property('viewBox', this.attribute('viewBox').value); e.attributes.refX = new a.Property('refX', this.attribute('refX').value); e.attributes.refY = new a.Property('refY', this.attribute('refY').value); e.attributes.width = new a.Property('width', this.attribute('markerWidth').value); e.attributes.height = new a.Property('height', this.attribute('markerHeight').value); e.attributes.fill = new a.Property('fill', this.attribute('fill').valueOrDefault('black')); e.attributes.stroke = new a.Property( 'stroke', this.attribute('stroke').valueOrDefault('none'), ); e.children = this.children; e.render(d); d.restore(); this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth' && d.scale(1 / d.lineWidth, 1 / d.lineWidth); this.attribute('orient').valueOrDefault('auto') == 'auto' && d.rotate(-c); d.translate(-b.x, -b.y); }; }; a.Element.marker.prototype = new a.Element.ElementBase(); a.Element.defs = function (c) { this.base = a.Element.ElementBase; this.base(c); this.render = function () {}; }; a.Element.defs.prototype = new a.Element.ElementBase(); a.Element.GradientBase = function (c) { this.base = a.Element.ElementBase; this.base(c); this.gradientUnits = this.attribute('gradientUnits').valueOrDefault('objectBoundingBox'); this.stops = []; for (c = 0; c < this.children.length; c++) this.stops.push(this.children[c]); this.getGradient = function () {}; this.createGradient = function (d, b) { var c = this; this.attribute('xlink:href').hasValue() && (c = this.attribute('xlink:href').Definition.getDefinition()); for (var e = this.getGradient(d, b), f = 0; f < c.stops.length; f++) e.addColorStop(c.stops[f].offset, c.stops[f].color); if (this.attribute('gradientTransform').hasValue()) { c = a.ViewPort.viewPorts[0]; f = new a.Element.rect(); f.attributes.x = new a.Property('x', -a.MAX_VIRTUAL_PIXELS / 3); f.attributes.y = new a.Property('y', -a.MAX_VIRTUAL_PIXELS / 3); f.attributes.width = new a.Property('width', a.MAX_VIRTUAL_PIXELS); f.attributes.height = new a.Property('height', a.MAX_VIRTUAL_PIXELS); var g = new a.Element.g(); g.attributes.transform = new a.Property( 'transform', this.attribute('gradientTransform').value, ); g.children = [f]; f = new a.Element.svg(); f.attributes.x = new a.Property('x', 0); f.attributes.y = new a.Property('y', 0); f.attributes.width = new a.Property('width', c.width); f.attributes.height = new a.Property('height', c.height); f.children = [g]; g = document.createElement('canvas'); g.width = c.width; g.height = c.height; c = g.getContext('2d'); c.fillStyle = e; f.render(c); return c.createPattern(g, 'no-repeat'); } return e; }; }; a.Element.GradientBase.prototype = new a.Element.ElementBase(); a.Element.linearGradient = function (c) { this.base = a.Element.GradientBase; this.base(c); this.getGradient = function (a, b) { var c = b.getBoundingBox(), e = this.gradientUnits == 'objectBoundingBox' ? c.x() + c.width() * this.attribute('x1').numValue() : this.attribute('x1').Length.toPixels('x'), f = this.gradientUnits == 'objectBoundingBox' ? c.y() + c.height() * this.attribute('y1').numValue() : this.attribute('y1').Length.toPixels('y'), g = this.gradientUnits == 'objectBoundingBox' ? c.x() + c.width() * this.attribute('x2').numValue() : this.attribute('x2').Length.toPixels('x'), c = this.gradientUnits == 'objectBoundingBox' ? c.y() + c.height() * this.attribute('y2').numValue() : this.attribute('y2').Length.toPixels('y'); return a.createLinearGradient(e, f, g, c); }; }; a.Element.linearGradient.prototype = new a.Element.GradientBase(); a.Element.radialGradient = function (c) { this.base = a.Element.GradientBase; this.base(c); this.getGradient = function (a, b) { var c = b.getBoundingBox(), e = this.gradientUnits == 'objectBoundingBox' ? c.x() + c.width() * this.attribute('cx').numValue() : this.attribute('cx').Length.toPixels('x'), f = this.gradientUnits == 'objectBoundingBox' ? c.y() + c.height() * this.attribute('cy').numValue() : this.attribute('cy').Length.toPixels('y'), g = e, j = f; this.attribute('fx').hasValue() && (g = this.gradientUnits == 'objectBoundingBox' ? c.x() + c.width() * this.attribute('fx').numValue() : this.attribute('fx').Length.toPixels('x')); this.attribute('fy').hasValue() && (j = this.gradientUnits == 'objectBoundingBox' ? c.y() + c.height() * this.attribute('fy').numValue() : this.attribute('fy').Length.toPixels('y')); c = this.gradientUnits == 'objectBoundingBox' ? ((c.width() + c.height()) / 2) * this.attribute('r').numValue() : this.attribute('r').Length.toPixels(); return a.createRadialGradient(g, j, 0, e, f, c); }; }; a.Element.radialGradient.prototype = new a.Element.GradientBase(); a.Element.stop = function (c) { this.base = a.Element.ElementBase; this.base(c); this.offset = this.attribute('offset').numValue(); c = this.style('stop-color'); this.style('stop-opacity').hasValue() && (c = c.Color.addOpacity(this.style('stop-opacity').value)); this.color = c.value; }; a.Element.stop.prototype = new a.Element.ElementBase(); a.Element.AnimateBase = function (c) { this.base = a.Element.ElementBase; this.base(c); a.Animations.push(this); this.duration = 0; this.begin = this.attribute('begin').Time.toMilliseconds(); this.maxDuration = this.begin + this.attribute('dur').Time.toMilliseconds(); this.getProperty = function () { var a = this.attribute('attributeType').value, b = this.attribute('attributeName').value; return a == 'CSS' ? this.parent.style(b, !0) : this.parent.attribute(b, !0); }; this.initialValue = null; this.removed = !1; this.calcValue = function () { return ''; }; this.update = function (a) { if (this.initialValue == null) this.initialValue = this.getProperty().value; if (this.duration > this.maxDuration) if (this.attribute('repeatCount').value == 'indefinite') this.duration = 0; else return this.attribute('fill').valueOrDefault('remove') == 'remove' && !this.removed ? ((this.removed = !0), (this.getProperty().value = this.initialValue), !0) : !1; this.duration += a; a = !1; if (this.begin < this.duration) (a = this.calcValue()), this.attribute('type').hasValue() && (a = this.attribute('type').value + '(' + a + ')'), (this.getProperty().value = a), (a = !0); return a; }; this.progress = function () { return (this.duration - this.begin) / (this.maxDuration - this.begin); }; }; a.Element.AnimateBase.prototype = new a.Element.ElementBase(); a.Element.animate = function (c) { this.base = a.Element.AnimateBase; this.base(c); this.calcValue = function () { var a = this.attribute('from').numValue(), b = this.attribute('to').numValue(); return a + (b - a) * this.progress(); }; }; a.Element.animate.prototype = new a.Element.AnimateBase(); a.Element.animateColor = function (c) { this.base = a.Element.AnimateBase; this.base(c); this.calcValue = function () { var a = new RGBColor(this.attribute('from').value), b = new RGBColor(this.attribute('to').value); if (a.ok && b.ok) { var c = a.r + (b.r - a.r) * this.progress(), e = a.g + (b.g - a.g) * this.progress(), a = a.b + (b.b - a.b) * this.progress(); return 'rgb(' + parseInt(c, 10) + ',' + parseInt(e, 10) + ',' + parseInt(a, 10) + ')'; } return this.attribute('from').value; }; }; a.Element.animateColor.prototype = new a.Element.AnimateBase(); a.Element.animateTransform = function (c) { this.base = a.Element.animate; this.base(c); }; a.Element.animateTransform.prototype = new a.Element.animate(); a.Element.font = function (c) { this.base = a.Element.ElementBase; this.base(c); this.horizAdvX = this.attribute('horiz-adv-x').numValue(); this.isArabic = this.isRTL = !1; this.missingGlyph = this.fontFace = null; this.glyphs = []; for (c = 0; c < this.children.length; c++) { var d = this.children[c]; if (d.type == 'font-face') (this.fontFace = d), d.style('font-family').hasValue() && (a.Definitions[d.style('font-family').value] = this); else if (d.type == 'missing-glyph') this.missingGlyph = d; else if (d.type == 'glyph') d.arabicForm != '' ? ((this.isArabic = this.isRTL = !0), typeof this.glyphs[d.unicode] == 'undefined' && (this.glyphs[d.unicode] = []), (this.glyphs[d.unicode][d.arabicForm] = d)) : (this.glyphs[d.unicode] = d); } }; a.Element.font.prototype = new a.Element.ElementBase(); a.Element.fontface = function (c) { this.base = a.Element.ElementBase; this.base(c); this.ascent = this.attribute('ascent').value; this.descent = this.attribute('descent').value; this.unitsPerEm = this.attribute('units-per-em').numValue(); }; a.Element.fontface.prototype = new a.Element.ElementBase(); a.Element.missingglyph = function (c) { this.base = a.Element.path; this.base(c); this.horizAdvX = 0; }; a.Element.missingglyph.prototype = new a.Element.path(); a.Element.glyph = function (c) { this.base = a.Element.path; this.base(c); this.horizAdvX = this.attribute('horiz-adv-x').numValue(); this.unicode = this.attribute('unicode').value; this.arabicForm = this.attribute('arabic-form').value; }; a.Element.glyph.prototype = new a.Element.path(); a.Element.text = function (c) { this.base = a.Element.RenderedElementBase; this.base(c); if (c != null) { this.children = []; for (var d = 0; d < c.childNodes.length; d++) { var b = c.childNodes[d]; b.nodeType == 1 ? this.addChild(b, !0) : b.nodeType == 3 && this.addChild(new a.Element.tspan(b), !1); } } this.baseSetContext = this.setContext; this.setContext = function (b) { this.baseSetContext(b); if (this.style('dominant-baseline').hasValue()) b.textBaseline = this.style('dominant-baseline').value; if (this.style('alignment-baseline').hasValue()) b.textBaseline = this.style('alignment-baseline').value; }; this.renderChildren = function (b) { for ( var a = this.style('text-anchor').valueOrDefault('start'), c = this.attribute('x').Length.toPixels('x'), d = this.attribute('y').Length.toPixels('y'), j = 0; j < this.children.length; j++ ) { var h = this.children[j]; h.attribute('x').hasValue() ? (h.x = h.attribute('x').Length.toPixels('x')) : (h.attribute('dx').hasValue() && (c += h.attribute('dx').Length.toPixels('x')), (h.x = c)); c = h.measureText(b); if (a != 'start' && (j == 0 || h.attribute('x').hasValue())) { for (var l = c, o = j + 1; o < this.children.length; o++) { var n = this.children[o]; if (n.attribute('x').hasValue()) break; l += n.measureText(b); } h.x -= a == 'end' ? l : l / 2; } c = h.x + c; h.attribute('y').hasValue() ? (h.y = h.attribute('y').Length.toPixels('y')) : (h.attribute('dy').hasValue() && (d += h.attribute('dy').Length.toPixels('y')), (h.y = d)); d = h.y; h.render(b); } }; }; a.Element.text.prototype = new a.Element.RenderedElementBase(); a.Element.TextElementBase = function (c) { this.base = a.Element.RenderedElementBase; this.base(c); this.getGlyph = function (a, b, c) { var e = b[c], f = null; if (a.isArabic) { var g = 'isolated'; if ((c == 0 || b[c - 1] == ' ') && c < b.length - 2 && b[c + 1] != ' ') g = 'terminal'; c > 0 && b[c - 1] != ' ' && c < b.length - 2 && b[c + 1] != ' ' && (g = 'medial'); if (c > 0 && b[c - 1] != ' ' && (c == b.length - 1 || b[c + 1] == ' ')) g = 'initial'; typeof a.glyphs[e] != 'undefined' && ((f = a.glyphs[e][g]), f == null && a.glyphs[e].type == 'glyph' && (f = a.glyphs[e])); } else f = a.glyphs[e]; if (f == null) f = a.missingGlyph; return f; }; this.renderChildren = function (c) { var b = this.parent.style('font-family').Definition.getDefinition(); if (b != null) { var k = this.parent .style('font-size') .numValueOrDefault(a.Font.Parse(a.ctx.font).fontSize), e = this.parent.style('font-style').valueOrDefault(a.Font.Parse(a.ctx.font).fontStyle), f = this.getText(); b.isRTL && (f = f.split('').reverse().join('')); for ( var g = a.ToNumberArray(this.parent.attribute('dx').value), j = 0; j < f.length; j++ ) { var h = this.getGlyph(b, f, j), l = k / b.fontFace.unitsPerEm; c.translate(this.x, this.y); c.scale(l, -l); var o = c.lineWidth; c.lineWidth = (c.lineWidth * b.fontFace.unitsPerEm) / k; e == 'italic' && c.transform(1, 0, 0.4, 1, 0, 0); h.render(c); e == 'italic' && c.transform(1, 0, -0.4, 1, 0, 0); c.lineWidth = o; c.scale(1 / l, -1 / l); c.translate(-this.x, -this.y); this.x += (k * (h.horizAdvX || b.horizAdvX)) / b.fontFace.unitsPerEm; typeof g[j] != 'undefined' && !isNaN(g[j]) && (this.x += g[j]); } } else c.strokeStyle != '' && c.strokeText(a.compressSpaces(this.getText()), this.x, this.y), c.fillStyle != '' && c.fillText(a.compressSpaces(this.getText()), this.x, this.y); }; this.getText = function () {}; this.measureText = function (c) { var b = this.parent.style('font-family').Definition.getDefinition(); if (b != null) { var c = this.parent .style('font-size') .numValueOrDefault(a.Font.Parse(a.ctx.font).fontSize), k = 0, e = this.getText(); b.isRTL && (e = e.split('').reverse().join('')); for ( var f = a.ToNumberArray(this.parent.attribute('dx').value), g = 0; g < e.length; g++ ) { var j = this.getGlyph(b, e, g); k += ((j.horizAdvX || b.horizAdvX) * c) / b.fontFace.unitsPerEm; typeof f[g] != 'undefined' && !isNaN(f[g]) && (k += f[g]); } return k; } b = a.compressSpaces(this.getText()); if (!c.measureText) return b.length * 10; c.save(); this.setContext(c); b = c.measureText(b).width; c.restore(); return b; }; }; a.Element.TextElementBase.prototype = new a.Element.RenderedElementBase(); a.Element.tspan = function (c) { this.base = a.Element.TextElementBase; this.base(c); this.text = c.nodeType == 3 ? c.nodeValue : c.childNodes.length > 0 ? c.childNodes[0].nodeValue : c.text; this.getText = function () { return this.text; }; }; a.Element.tspan.prototype = new a.Element.TextElementBase(); a.Element.tref = function (c) { this.base = a.Element.TextElementBase; this.base(c); this.getText = function () { var a = this.attribute('xlink:href').Definition.getDefinition(); if (a != null) return a.children[0].getText(); }; }; a.Element.tref.prototype = new a.Element.TextElementBase(); a.Element.a = function (c) { this.base = a.Element.TextElementBase; this.base(c); this.hasText = !0; for (var d = 0; d < c.childNodes.length; d++) if (c.childNodes[d].nodeType != 3) this.hasText = !1; this.text = this.hasText ? c.childNodes[0].nodeValue : ''; this.getText = function () { return this.text; }; this.baseRenderChildren = this.renderChildren; this.renderChildren = function (b) { if (this.hasText) { this.baseRenderChildren(b); var c = new a.Property('fontSize', a.Font.Parse(a.ctx.font).fontSize); a.Mouse.checkBoundingBox( this, new a.BoundingBox( this.x, this.y - c.Length.toPixels('y'), this.x + this.measureText(b), this.y, ), ); } else (c = new a.Element.g()), (c.children = this.children), (c.parent = this), c.render(b); }; this.onclick = function () { window.open(this.attribute('xlink:href').value); }; this.onmousemove = function () { a.ctx.canvas.style.cursor = 'pointer'; }; }; a.Element.a.prototype = new a.Element.TextElementBase(); a.Element.image = function (c) { this.base = a.Element.RenderedElementBase; this.base(c); a.Images.push(this); this.img = document.createElement('img'); this.loaded = !1; var d = this; this.img.onload = function () { d.loaded = !0; }; this.img.src = this.attribute('xlink:href').value; this.renderChildren = function (b) { var c = this.attribute('x').Length.toPixels('x'), d = this.attribute('y').Length.toPixels('y'), f = this.attribute('width').Length.toPixels('x'), g = this.attribute('height').Length.toPixels('y'); f == 0 || g == 0 || (b.save(), b.translate(c, d), a.AspectRatio( b, this.attribute('preserveAspectRatio').value, f, this.img.width, g, this.img.height, 0, 0, ), b.drawImage(this.img, 0, 0), b.restore()); }; }; a.Element.image.prototype = new a.Element.RenderedElementBase(); a.Element.g = function (c) { this.base = a.Element.RenderedElementBase; this.base(c); this.getBoundingBox = function () { for (var c = new a.BoundingBox(), b = 0; b < this.children.length; b++) c.addBoundingBox(this.children[b].getBoundingBox()); return c; }; }; a.Element.g.prototype = new a.Element.RenderedElementBase(); a.Element.symbol = function (c) { this.base = a.Element.RenderedElementBase; this.base(c); this.baseSetContext = this.setContext; this.setContext = function (c) { this.baseSetContext(c); if (this.attribute('viewBox').hasValue()) { var b = a.ToNumberArray(this.attribute('viewBox').value), k = b[0], e = b[1]; width = b[2]; height = b[3]; a.AspectRatio( c, this.attribute('preserveAspectRatio').value, this.attribute('width').Length.toPixels('x'), width, this.attribute('height').Length.toPixels('y'), height, k, e, ); a.ViewPort.SetCurrent(b[2], b[3]); } }; }; a.Element.symbol.prototype = new a.Element.RenderedElementBase(); a.Element.style = function (c) { this.base = a.Element.ElementBase; this.base(c); for ( var c = c.childNodes[0].nodeValue + (c.childNodes.length > 1 ? c.childNodes[1].nodeValue : ''), c = c.replace(/(\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)|(^[\s]*\/\/.*)/gm, ''), c = a.compressSpaces(c), c = c.split('}'), d = 0; d < c.length; d++ ) if (a.trim(c[d]) != '') for ( var b = c[d].split('{'), k = b[0].split(','), b = b[1].split(';'), e = 0; e < k.length; e++ ) { var f = a.trim(k[e]); if (f != '') { for (var g = {}, j = 0; j < b.length; j++) { var h = b[j].indexOf(':'), l = b[j].substr(0, h), h = b[j].substr(h + 1, b[j].length - h); l != null && h != null && (g[a.trim(l)] = new a.Property(a.trim(l), a.trim(h))); } a.Styles[f] = g; if (f == '@font-face') { f = g['font-family'].value.replace(/"/g, ''); g = g.src.value.split(','); for (j = 0; j < g.length; j++) if (g[j].indexOf('format("svg")') > 0) { l = g[j].indexOf('url'); h = g[j].indexOf(')', l); l = g[j].substr(l + 5, h - l - 6); l = a.parseXml(a.ajax(l)).getElementsByTagName('font'); for (h = 0; h < l.length; h++) { var o = a.CreateElement(l[h]); a.Definitions[f] = o; } } } } } }; a.Element.style.prototype = new a.Element.ElementBase(); a.Element.use = function (c) { this.base = a.Element.RenderedElementBase; this.base(c); this.baseSetContext = this.setContext; this.setContext = function (a) { this.baseSetContext(a); this.attribute('x').hasValue() && a.translate(this.attribute('x').Length.toPixels('x'), 0); this.attribute('y').hasValue() && a.translate(0, this.attribute('y').Length.toPixels('y')); }; this.getDefinition = function () { var a = this.attribute('xlink:href').Definition.getDefinition(); if (this.attribute('width').hasValue()) a.attribute('width', !0).value = this.attribute('width').value; if (this.attribute('height').hasValue()) a.attribute('height', !0).value = this.attribute('height').value; return a; }; this.path = function (a) { var b = this.getDefinition(); b != null && b.path(a); }; this.renderChildren = function (a) { var b = this.getDefinition(); b != null && b.render(a); }; }; a.Element.use.prototype = new a.Element.RenderedElementBase(); a.Element.mask = function (c) { this.base = a.Element.ElementBase; this.base(c); this.apply = function (a, b) { var c = this.attribute('x').Length.toPixels('x'), e = this.attribute('y').Length.toPixels('y'), f = this.attribute('width').Length.toPixels('x'), g = this.attribute('height').Length.toPixels('y'), j = b.attribute('mask').value; b.attribute('mask').value = ''; var h = document.createElement('canvas'); h.width = c + f; h.height = e + g; var l = h.getContext('2d'); this.renderChildren(l); var o = document.createElement('canvas'); o.width = c + f; o.height = e + g; var n = o.getContext('2d'); b.render(n); n.globalCompositeOperation = 'destination-in'; n.fillStyle = l.createPattern(h, 'no-repeat'); n.fillRect(0, 0, c + f, e + g); a.fillStyle = n.createPattern(o, 'no-repeat'); a.fillRect(0, 0, c + f, e + g); b.attribute('mask').value = j; }; this.render = function () {}; }; a.Element.mask.prototype = new a.Element.ElementBase(); a.Element.clipPath = function (c) { this.base = a.Element.ElementBase; this.base(c); this.apply = function (a) { for (var b = 0; b < this.children.length; b++) this.children[b].path && (this.children[b].path(a), a.clip()); }; this.render = function () {}; }; a.Element.clipPath.prototype = new a.Element.ElementBase(); a.Element.filter = function (c) { this.base = a.Element.ElementBase; this.base(c); this.apply = function (a, b) { var c = b.getBoundingBox(), e = this.attribute('x').Length.toPixels('x'), f = this.attribute('y').Length.toPixels('y'); if (e == 0 || f == 0) (e = c.x1), (f = c.y1); var g = this.attribute('width').Length.toPixels('x'), j = this.attribute('height').Length.toPixels('y'); if (g == 0 || j == 0) (g = c.width()), (j = c.height()); c = b.style('filter').value; b.style('filter').value = ''; var h = 0.2 * g, l = 0.2 * j, o = document.createElement('canvas'); o.width = g + 2 * h; o.height = j + 2 * l; var n = o.getContext('2d'); n.translate(-e + h, -f + l); b.render(n); for (var q = 0; q < this.children.length; q++) this.children[q].apply(n, 0, 0, g + 2 * h, j + 2 * l); a.drawImage(o, 0, 0, g + 2 * h, j + 2 * l, e - h, f - l, g + 2 * h, j + 2 * l); b.style('filter', !0).value = c; }; this.render = function () {}; }; a.Element.filter.prototype = new a.Element.ElementBase(); a.Element.feGaussianBlur = function (c) { function d(a, c, d, f, g) { for (var j = 0; j < g; j++) for (var h = 0; h < f; h++) for (var l = a[j * f * 4 + h * 4 + 3] / 255, o = 0; o < 4; o++) { for ( var n = d[0] * (l == 0 ? 255 : a[j * f * 4 + h * 4 + o]) * (l == 0 || o == 3 ? 1 : l), q = 1; q < d.length; q++ ) { var p = Math.max(h - q, 0), m = a[j * f * 4 + p * 4 + 3] / 255, p = Math.min(h + q, f - 1), p = a[j * f * 4 + p * 4 + 3] / 255, s = d[q], r; m == 0 ? (r = 255) : ((r = Math.max(h - q, 0)), (r = a[j * f * 4 + r * 4 + o])); m = r * (m == 0 || o == 3 ? 1 : m); p == 0 ? (r = 255) : ((r = Math.min(h + q, f - 1)), (r = a[j * f * 4 + r * 4 + o])); n += s * (m + r * (p == 0 || o == 3 ? 1 : p)); } c[h * g * 4 + j * 4 + o] = n; } } this.base = a.Element.ElementBase; this.base(c); this.apply = function (a, c, e, f, g) { var e = this.attribute('stdDeviation').numValue(), c = a.getImageData(0, 0, f, g), e = Math.max(e, 0.01), j = Math.ceil(e * 4) + 1; mask = []; for (var h = 0; h < j; h++) mask[h] = Math.exp(-0.5 * (h / e) * (h / e)); e = mask; j = 0; for (h = 1; h < e.length; h++) j += Math.abs(e[h]); j = 2 * j + Math.abs(e[0]); for (h = 0; h < e.length; h++) e[h] /= j; tmp = []; d(c.data, tmp, e, f, g); d(tmp, c.data, e, g, f); a.clearRect(0, 0, f, g); a.putImageData(c, 0, 0); }; }; a.Element.filter.prototype = new a.Element.feGaussianBlur(); a.Element.title = function () {}; a.Element.title.prototype = new a.Element.ElementBase(); a.Element.desc = function () {}; a.Element.desc.prototype = new a.Element.ElementBase(); a.Element.MISSING = function (a) { console.log("ERROR: Element '" + a.nodeName + "' not yet implemented."); }; a.Element.MISSING.prototype = new a.Element.ElementBase(); a.CreateElement = function (c) { var d = c.nodeName.replace(/^[^:]+:/, ''), d = d.replace(/\-/g, ''), b = null, b = typeof a.Element[d] != 'undefined' ? new a.Element[d](c) : new a.Element.MISSING(c); b.type = c.nodeName; return b; }; a.load = function (c, d) { a.loadXml(c, a.ajax(d)); }; a.loadXml = function (c, d) { a.loadXmlDoc(c, a.parseXml(d)); }; a.loadXmlDoc = function (c, d) { a.init(c); var b = function (a) { for (var b = c.canvas; b; ) (a.x -= b.offsetLeft), (a.y -= b.offsetTop), (b = b.offsetParent); window.scrollX && (a.x += window.scrollX); window.scrollY && (a.y += window.scrollY); return a; }; if (a.opts.ignoreMouse != !0) (c.canvas.onclick = function (c) { c = b( new a.Point( c != null ? c.clientX : event.clientX, c != null ? c.clientY : event.clientY, ), ); a.Mouse.onclick(c.x, c.y); }), (c.canvas.onmousemove = function (c) { c = b( new a.Point( c != null ? c.clientX : event.clientX, c != null ? c.clientY : event.clientY, ), ); a.Mouse.onmousemove(c.x, c.y); }); var k = a.CreateElement(d.documentElement), e = (k.root = !0), f = function () { a.ViewPort.Clear(); c.canvas.parentNode && a.ViewPort.SetCurrent( c.canvas.parentNode.clientWidth, c.canvas.parentNode.clientHeight, ); if (a.opts.ignoreDimensions != !0) { if (k.style('width').hasValue()) (c.canvas.width = k.style('width').Length.toPixels('x')), (c.canvas.style.width = c.canvas.width + 'px'); if (k.style('height').hasValue()) (c.canvas.height = k.style('height').Length.toPixels('y')), (c.canvas.style.height = c.canvas.height + 'px'); } var b = c.canvas.clientWidth || c.canvas.width, d = c.canvas.clientHeight || c.canvas.height; a.ViewPort.SetCurrent(b, d); if (a.opts != null && a.opts.offsetX != null) k.attribute('x', !0).value = a.opts.offsetX; if (a.opts != null && a.opts.offsetY != null) k.attribute('y', !0).value = a.opts.offsetY; if (a.opts != null && a.opts.scaleWidth != null && a.opts.scaleHeight != null) { var f = 1, g = 1; k.attribute('width').hasValue() && (f = k.attribute('width').Length.toPixels('x') / a.opts.scaleWidth); k.attribute('height').hasValue() && (g = k.attribute('height').Length.toPixels('y') / a.opts.scaleHeight); k.attribute('width', !0).value = a.opts.scaleWidth; k.attribute('height', !0).value = a.opts.scaleHeight; k.attribute('viewBox', !0).value = '0 0 ' + b * f + ' ' + d * g; k.attribute('preserveAspectRatio', !0).value = 'none'; } a.opts.ignoreClear != !0 && c.clearRect(0, 0, b, d); k.render(c); e && ((e = !1), a.opts != null && typeof a.opts.renderCallback == 'function' && a.opts.renderCallback()); }, g = !0; a.ImagesLoaded() && ((g = !1), f()); a.intervalID = setInterval(function () { var b = !1; g && a.ImagesLoaded() && ((g = !1), (b = !0)); a.opts.ignoreMouse != !0 && (b |= a.Mouse.hasEvents()); if (a.opts.ignoreAnimation != !0) for (var c = 0; c < a.Animations.length; c++) b |= a.Animations[c].update(1e3 / a.FRAMERATE); a.opts != null && typeof a.opts.forceRedraw == 'function' && a.opts.forceRedraw() == !0 && (b = !0); b && (f(), a.Mouse.runEvents()); }, 1e3 / a.FRAMERATE); }; a.stop = function () { a.intervalID && clearInterval(a.intervalID); }; a.Mouse = new (function () { this.events = []; this.hasEvents = function () { return this.events.length != 0; }; this.onclick = function (a, d) { this.events.push({ type: 'onclick', x: a, y: d, run: function (a) { if (a.onclick) a.onclick(); }, }); }; this.onmousemove = function (a, d) { this.events.push({ type: 'onmousemove', x: a, y: d, run: function (a) { if (a.onmousemove) a.onmousemove(); }, }); }; this.eventElements = []; this.checkPath = function (a, d) { for (var b = 0; b < this.events.length; b++) { var k = this.events[b]; d.isPointInPath && d.isPointInPath(k.x, k.y) && (this.eventElements[b] = a); } }; this.checkBoundingBox = function (a, d) { for (var b = 0; b < this.events.length; b++) { var k = this.events[b]; d.isPointInBox(k.x, k.y) && (this.eventElements[b] = a); } }; this.runEvents = function () { a.ctx.canvas.style.cursor = ''; for (var c = 0; c < this.events.length; c++) for (var d = this.events[c], b = this.eventElements[c]; b; ) d.run(b), (b = b.parent); this.events = []; this.eventElements = []; }; })(); return a; } this.canvg = function (a, c, d) { if (a == null && c == null && d == null) for (var c = document.getElementsByTagName('svg'), b = 0; b < c.length; b++) { a = c[b]; d = document.createElement('canvas'); d.width = a.clientWidth; d.height = a.clientHeight; a.parentNode.insertBefore(d, a); a.parentNode.removeChild(a); var k = document.createElement('div'); k.appendChild(a); canvg(d, k.innerHTML); } else (d = d || {}), typeof a == 'string' && (a = document.getElementById(a)), a.svg == null ? ((b = m()), (a.svg = b)) : ((b = a.svg), b.stop()), (b.opts = d), (a = a.getContext('2d')), typeof c.documentElement != 'undefined' ? b.loadXmlDoc(a, c) : c.substr(0, 1) == '<' ? b.loadXml(a, c) : b.load(a, c); }; })(); if (CanvasRenderingContext2D) CanvasRenderingContext2D.prototype.drawSvg = function (m, a, c, d, b) { canvg(this.canvas, m, { ignoreMouse: !0, ignoreAnimation: !0, ignoreDimensions: !0, ignoreClear: !0, offsetX: a, offsetY: c, scaleWidth: d, scaleHeight: b, }); }; (function (m) { var a = m.css, c = m.CanVGRenderer, d = m.SVGRenderer, b = m.extend, k = m.merge, e = m.addEvent, f = m.createElement, g = m.discardElement; b(c.prototype, d.prototype); b(c.prototype, { create: function (a, b, c, d) { this.setContainer(b, c, d); this.configure(a); }, setContainer: function (a, b, c) { var d = a.style, e = a.parentNode, g = d.left, d = d.top, k = a.offsetWidth, m = a.offsetHeight, s = { visibility: 'hidden', position: 'absolute' }; this.init.apply(this, [a, b, c]); this.canvas = f( 'canvas', { width: k, height: m }, { position: 'relative', left: g, top: d }, a, ); this.ttLine = f('div', null, s, e); this.ttDiv = f('div', null, s, e); this.ttTimer = void 0; this.hiddenSvg = a = f( 'div', { width: k, height: m }, { visibility: 'hidden', left: g, top: d }, e, ); a.appendChild(this.box); }, configure: function (b) { var c = this, d = b.options.tooltip, f = d.borderWidth, g = c.ttDiv, m = d.style, p = c.ttLine, t = parseInt(m.padding, 10), m = k(m, { padding: t + 'px', 'background-color': d.backgroundColor, 'border-style': 'solid', 'border-width': f + 'px', 'border-radius': d.borderRadius + 'px', }); d.shadow && (m = k(m, { 'box-shadow': '1px 1px 3px gray', '-webkit-box-shadow': '1px 1px 3px gray' })); a(g, m); a(p, { 'border-left': '1px solid darkgray' }); e(b, 'tooltipRefresh', function (d) { var e = b.container, f = e.offsetLeft, e = e.offsetTop, k; g.innerHTML = d.text; k = b.tooltip.getPosition(g.offsetWidth, g.offsetHeight, { plotX: d.x, plotY: d.y }); a(g, { visibility: 'visible', left: k.x + 'px', top: k.y + 'px', 'border-color': d.borderColor, }); a(p, { visibility: 'visible', left: f + d.x + 'px', top: e + b.plotTop + 'px', height: b.plotHeight + 'px', }); c.ttTimer !== void 0 && clearTimeout(c.ttTimer); c.ttTimer = setTimeout(function () { a(g, { visibility: 'hidden' }); a(p, { visibility: 'hidden' }); }, 3e3); }); }, destroy: function () { g(this.canvas); this.ttTimer !== void 0 && clearTimeout(this.ttTimer); g(this.ttLine); g(this.ttDiv); g(this.hiddenSvg); return d.prototype.destroy.apply(this); }, color: function (a, b, c) { a && a.linearGradient && (a = a.stops[a.stops.length - 1][1]); return d.prototype.color.call(this, a, b, c); }, draw: function () { window.canvg(this.canvas, this.hiddenSvg.innerHTML); }, }); })(Highcharts);