1/*! 2 * Chart.js 3 * http://chartjs.org/ 4 * Version: 2.4.0 5 * 6 * Copyright 2016 Nick Downie 7 * Released under the MIT license 8 * https://github.com/chartjs/Chart.js/blob/master/LICENSE.md 9 */ 10!function (t) { 11 if ("object" == typeof exports && "undefined" != typeof module)module.exports = t(); else if ("function" == typeof define && define.amd)define([], t); else { 12 var e; 13 e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this, e.Chart = t() 14 } 15}(function () { 16 return function t(e, a, i) { 17 function n(r, l) { 18 if (!a[r]) { 19 if (!e[r]) { 20 var s = "function" == typeof require && require; 21 if (!l && s)return s(r, !0); 22 if (o)return o(r, !0); 23 var d = new Error("Cannot find module '" + r + "'"); 24 throw d.code = "MODULE_NOT_FOUND", d 25 } 26 var u = a[r] = {exports: {}}; 27 e[r][0].call(u.exports, function (t) { 28 var a = e[r][1][t]; 29 return n(a ? a : t) 30 }, u, u.exports, t, e, a, i) 31 } 32 return a[r].exports 33 } 34 35 for (var o = "function" == typeof require && require, r = 0; r < i.length; r++)n(i[r]); 36 return n 37 }({ 38 1: [function (t, e, a) { 39 }, {}], 2: [function (t, e, a) { 40 function i(t) { 41 if (t) { 42 var e = /^#([a-fA-F0-9]{3})$/, a = /^#([a-fA-F0-9]{6})$/, i = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/, n = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/, o = /(\w+)/, r = [0, 0, 0], l = 1, s = t.match(e); 43 if (s) { 44 s = s[1]; 45 for (var d = 0; d < r.length; d++)r[d] = parseInt(s[d] + s[d], 16) 46 } else if (s = t.match(a)) { 47 s = s[1]; 48 for (var d = 0; d < r.length; d++)r[d] = parseInt(s.slice(2 * d, 2 * d + 2), 16) 49 } else if (s = t.match(i)) { 50 for (var d = 0; d < r.length; d++)r[d] = parseInt(s[d + 1]); 51 l = parseFloat(s[4]) 52 } else if (s = t.match(n)) { 53 for (var d = 0; d < r.length; d++)r[d] = Math.round(2.55 * parseFloat(s[d + 1])); 54 l = parseFloat(s[4]) 55 } else if (s = t.match(o)) { 56 if ("transparent" == s[1])return [0, 0, 0, 0]; 57 if (r = y[s[1]], !r)return 58 } 59 for (var d = 0; d < r.length; d++)r[d] = v(r[d], 0, 255); 60 return l = l || 0 == l ? v(l, 0, 1) : 1, r[3] = l, r 61 } 62 } 63 64 function n(t) { 65 if (t) { 66 var e = /^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/, a = t.match(e); 67 if (a) { 68 var i = parseFloat(a[4]), n = v(parseInt(a[1]), 0, 360), o = v(parseFloat(a[2]), 0, 100), r = v(parseFloat(a[3]), 0, 100), l = v(isNaN(i) ? 1 : i, 0, 1); 69 return [n, o, r, l] 70 } 71 } 72 } 73 74 function o(t) { 75 if (t) { 76 var e = /^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/, a = t.match(e); 77 if (a) { 78 var i = parseFloat(a[4]), n = v(parseInt(a[1]), 0, 360), o = v(parseFloat(a[2]), 0, 100), r = v(parseFloat(a[3]), 0, 100), l = v(isNaN(i) ? 1 : i, 0, 1); 79 return [n, o, r, l] 80 } 81 } 82 } 83 84 function r(t) { 85 var e = i(t); 86 return e && e.slice(0, 3) 87 } 88 89 function l(t) { 90 var e = n(t); 91 return e && e.slice(0, 3) 92 } 93 94 function s(t) { 95 var e = i(t); 96 return e ? e[3] : (e = n(t)) ? e[3] : (e = o(t)) ? e[3] : void 0 97 } 98 99 function d(t) { 100 return "#" + x(t[0]) + x(t[1]) + x(t[2]) 101 } 102 103 function u(t, e) { 104 return 1 > e || t[3] && t[3] < 1 ? c(t, e) : "rgb(" + t[0] + ", " + t[1] + ", " + t[2] + ")" 105 } 106 107 function c(t, e) { 108 return void 0 === e && (e = void 0 !== t[3] ? t[3] : 1), "rgba(" + t[0] + ", " + t[1] + ", " + t[2] + ", " + e + ")" 109 } 110 111 function h(t, e) { 112 if (1 > e || t[3] && t[3] < 1)return f(t, e);
113 var a = Math.round(t[0] / 255 * 100), i = Math.round(t[1] / 255 * 100), n = Math.round(t[2] / 255 * 100); 114 return "rgb(" + a + "%, " + i + "%, " + n + "%)" 115 } 116 117 function f(t, e) { 118 var a = Math.round(t[0] / 255 * 100), i = Math.round(t[1] / 255 * 100), n = Math.round(t[2] / 255 * 100); 119 return "rgba(" + a + "%, " + i + "%, " + n + "%, " + (e || t[3] || 1) + ")" 120 } 121 122 function g(t, e) { 123 return 1 > e || t[3] && t[3] < 1 ? p(t, e) : "hsl(" + t[0] + ", " + t[1] + "%, " + t[2] + "%)" 124 } 125 126 function p(t, e) { 127 return void 0 === e && (e = void 0 !== t[3] ? t[3] : 1), "hsla(" + t[0] + ", " + t[1] + "%, " + t[2] + "%, " + e + ")" 128 } 129 130 function m(t, e) { 131 return void 0 === e && (e = void 0 !== t[3] ? t[3] : 1), "hwb(" + t[0] + ", " + t[1] + "%, " + t[2] + "%" + (void 0 !== e && 1 !== e ? ", " + e : "") + ")" 132 } 133 134 function b(t) { 135 return k[t.slice(0, 3)] 136 } 137 138 function v(t, e, a) { 139 return Math.min(Math.max(e, t), a) 140 } 141 142 function x(t) { 143 var e = t.toString(16).toUpperCase(); 144 return e.length < 2 ? "0" + e : e 145 } 146 147 var y = t(6); 148 e.exports = { 149 getRgba: i, 150 getHsla: n, 151 getRgb: r, 152 getHsl: l, 153 getHwb: o, 154 getAlpha: s, 155 hexString: d, 156 rgbString: u, 157 rgbaString: c, 158 percentString: h, 159 percentaString: f, 160 hslString: g, 161 hslaString: p, 162 hwbString: m, 163 keyword: b 164 }; 165 var k = {}; 166 for (var S in y)k[y[S]] = S 167 }, {6: 6}], 3: [function (t, e, a) { 168 var i = t(5), n = t(2), o = function (t) { 169 if (t instanceof o)return t; 170 if (!(this instanceof o))return new o(t); 171 this.values = { 172 rgb: [0, 0, 0], 173 hsl: [0, 0, 0], 174 hsv: [0, 0, 0], 175 hwb: [0, 0, 0], 176 cmyk: [0, 0, 0, 0], 177 alpha: 1 178 }; 179 var e; 180 if ("string" == typeof t)if (e = n.getRgba(t))this.setValues("rgb", e); else if (e = n.getHsla(t))this.setValues("hsl", e); else { 181 if (!(e = n.getHwb(t)))throw new Error('Unable to parse color from string "' + t + '"'); 182 this.setValues("hwb", e) 183 } else if ("object" == typeof t)if (e = t, void 0 !== e.r || void 0 !== e.red)this.setValues("rgb", e); else if (void 0 !== e.l || void 0 !== e.lightness)this.setValues("hsl", e); else if (void 0 !== e.v || void 0 !== e.value)this.setValues("hsv", e); else if (void 0 !== e.w || void 0 !== e.whiteness)this.setValues("hwb", e); else { 184 if (void 0 === e.c && void 0 === e.cyan)throw new Error("Unable to parse color from object " + JSON.stringify(t)); 185 this.setValues("cmyk", e) 186 } 187 }; 188 o.prototype = { 189 rgb: function () { 190 return this.setSpace("rgb", arguments) 191 }, hsl: function () { 192 return this.setSpace("hsl", arguments) 193 }, hsv: function () { 194 return this.setSpace("hsv", arguments) 195 }, hwb: function () { 196 return this.setSpace("hwb", arguments) 197 }, cmyk: function () { 198 return this.setSpace("cmyk", arguments) 199 }, rgbArray: function () { 200 return this.values.rgb 201 }, hslArray: function () { 202 return this.values.hsl 203 }, hsvArray: function () { 204 return this.values.hsv 205 }, hwbArray: function () { 206 var t = this.values; 207 return 1 !== t.alpha ? t.hwb.concat([t.alpha]) : t.hwb 208 }, cmykArray: function () { 209 return this.values.cmyk 210 }, rgbaArray: function () { 211 var t = this.values; 212 return t.rgb.concat([t.alpha]) 213 }, hslaArray: function () { 214 var t = this.values; 215 return t.hsl.concat([t.alpha]) 216 }, alpha: function (t) { 217 return void 0 === t ? this.values.alpha : (this.setValues("alph
217a", t), this) 218 }, red: function (t) { 219 return this.setChannel("rgb", 0, t) 220 }, green: function (t) { 221 return this.setChannel("rgb", 1, t) 222 }, blue: function (t) { 223 return this.setChannel("rgb", 2, t) 224 }, hue: function (t) { 225 return t && (t %= 360, t = 0 > t ? 360 + t : t), this.setChannel("hsl", 0, t) 226 }, saturation: function (t) { 227 return this.setChannel("hsl", 1, t) 228 }, lightness: function (t) { 229 return this.setChannel("hsl", 2, t) 230 }, saturationv: function (t) { 231 return this.setChannel("hsv", 1, t) 232 }, whiteness: function (t) { 233 return this.setChannel("hwb", 1, t) 234 }, blackness: function (t) { 235 return this.setChannel("hwb", 2, t) 236 }, value: function (t) { 237 return this.setChannel("hsv", 2, t) 238 }, cyan: function (t) { 239 return this.setChannel("cmyk", 0, t) 240 }, magenta: function (t) { 241 return this.setChannel("cmyk", 1, t) 242 }, yellow: function (t) { 243 return this.setChannel("cmyk", 2, t) 244 }, black: function (t) { 245 return this.setChannel("cmyk", 3, t) 246 }, hexString: function () { 247 return n.hexString(this.values.rgb) 248 }, rgbString: function () { 249 return n.rgbString(this.values.rgb, this.values.alpha) 250 }, rgbaString: function () { 251 return n.rgbaString(this.values.rgb, this.values.alpha) 252 }, percentString: function () { 253 return n.percentString(this.values.rgb, this.values.alpha) 254 }, hslString: function () { 255 return n.hslString(this.values.hsl, this.values.alpha) 256 }, hslaString: function () { 257 return n.hslaString(this.values.hsl, this.values.alpha) 258 }, hwbString: function () { 259 return n.hwbString(this.values.hwb, this.values.alpha) 260 }, keyword: function () { 261 return n.keyword(this.values.rgb, this.values.alpha) 262 }, rgbNumber: function () { 263 var t = this.values.rgb; 264 return t[0] << 16 | t[1] << 8 | t[2] 265 }, luminosity: function () { 266 for (var t = this.values.rgb, e = [], a = 0; a < t.length; a++) { 267 var i = t[a] / 255; 268 e[a] = .03928 >= i ? i / 12.92 : Math.pow((i + .055) / 1.055, 2.4) 269 } 270 return .2126 * e[0] + .7152 * e[1] + .0722 * e[2] 271 }, contrast: function (t) { 272 var e = this.luminosity(), a = t.luminosity(); 273 return e > a ? (e + .05) / (a + .05) : (a + .05) / (e + .05) 274 }, level: function (t) { 275 var e = this.contrast(t); 276 return e >= 7.1 ? "AAA" : e >= 4.5 ? "AA" : "" 277 }, dark: function () { 278 var t = this.values.rgb, e = (299 * t[0] + 587 * t[1] + 114 * t[2]) / 1e3; 279 return 128 > e 280 }, light: function () { 281 return !this.dark() 282 }, negate: function () { 283 for (var t = [], e = 0; 3 > e; e++)t[e] = 255 - this.values.rgb[e]; 284 return this.setValues("rgb", t), this 285 }, lighten: function (t) { 286 var e = this.values.hsl; 287 return e[2] += e[2] * t, this.setValues("hsl", e), this 288 }, darken: function (t) { 289 var e = this.values.hsl; 290 return e[2] -= e[2] * t, this.setValues("hsl", e), this 291 }, saturate: function (t) { 292 var e = this.values.hsl; 293 return e[1] += e[1] * t, this.setValues("hsl", e), this 294 }, desaturate: function (t) { 295 var e = this.values.hsl; 296 return e[1] -= e[1] * t, this.setValues("hsl", e), this 297 }, whiten: function (t) { 298 var e = this.values.hwb; 299 return e[1] += e[1] * t, this.setValues("hwb", e), this 300 }, blacken: function (t) { 301 var e = this.values.hwb; 302 return e[2] += e[2] * t, this.setValues("hwb", e), this 303 }, greyscale: function () { 304 var t = this.values.rgb, e = .3 * t[0] + .59 * t[1] + .11 * t[2]; 305 return this.setValues("rgb", [e, e, e]), this 306 }, clearer: function (t) { 307 var e = this.values.alpha;
308 return this.setValues("alpha", e - e * t), this 309 }, opaquer: function (t) { 310 var e = this.values.alpha; 311 return this.setValues("alpha", e + e * t), this 312 }, rotate: function (t) { 313 var e = this.values.hsl, a = (e[0] + t) % 360; 314 return e[0] = 0 > a ? 360 + a : a, this.setValues("hsl", e), this 315 }, mix: function (t, e) { 316 var a = this, i = t, n = void 0 === e ? .5 : e, o = 2 * n - 1, r = a.alpha() - i.alpha(), l = ((o * r === -1 ? o : (o + r) / (1 + o * r)) + 1) / 2, s = 1 - l; 317 return this.rgb(l * a.red() + s * i.red(), l * a.green() + s * i.green(), l * a.blue() + s * i.blue()).alpha(a.alpha() * n + i.alpha() * (1 - n)) 318 }, toJSON: function () { 319 return this.rgb() 320 }, clone: function () { 321 var t, e, a = new o, i = this.values, n = a.values; 322 for (var r in i)i.hasOwnProperty(r) && (t = i[r], e = {}.toString.call(t), "[object Array]" === e ? n[r] = t.slice(0) : "[object Number]" === e ? n[r] = t : console.error("unexpected color value:", t)); 323 return a 324 } 325 }, o.prototype.spaces = { 326 rgb: ["red", "green", "blue"], 327 hsl: ["hue", "saturation", "lightness"], 328 hsv: ["hue", "saturation", "value"], 329 hwb: ["hue", "whiteness", "blackness"], 330 cmyk: ["cyan", "magenta", "yellow", "black"] 331 }, o.prototype.maxes = { 332 rgb: [255, 255, 255], 333 hsl: [360, 100, 100], 334 hsv: [360, 100, 100], 335 hwb: [360, 100, 100], 336 cmyk: [100, 100, 100, 100] 337 }, o.prototype.getValues = function (t) { 338 for (var e = this.values, a = {}, i = 0; i < t.length; i++)a[t.charAt(i)] = e[t][i]; 339 return 1 !== e.alpha && (a.a = e.alpha), a 340 }, o.prototype.setValues = function (t, e) { 341 var a, n = this.values, o = this.spaces, r = this.maxes, l = 1; 342 if ("alpha" === t)l = e; else if (e.length)n[t] = e.slice(0, t.length), l = e[t.length]; else if (void 0 !== e[t.charAt(0)]) { 343 for (a = 0; a < t.length; a++)n[t][a] = e[t.charAt(a)]; 344 l = e.a 345 } else if (void 0 !== e[o[t][0]]) { 346 var s = o[t]; 347 for (a = 0; a < t.length; a++)n[t][a] = e[s[a]]; 348 l = e.alpha 349 } 350 if (n.alpha = Math.max(0, Math.min(1, void 0 === l ? n.alpha : l)), "alpha" === t)return !1; 351 var d; 352 for (a = 0; a < t.length; a++)d = Math.max(0, Math.min(r[t][a], n[t][a])), n[t][a] = Math.round(d); 353 for (var u in o)u !== t && (n[u] = i[t][u](n[t])); 354 return !0 355 }, o.prototype.setSpace = function (t, e) { 356 var a = e[0]; 357 return void 0 === a ? this.getValues(t) : ("number" == typeof a && (a = Array.prototype.slice.call(e)), this.setValues(t, a), this) 358 }, o.prototype.setChannel = function (t, e, a) { 359 var i = this.values[t]; 360 return void 0 === a ? i[e] : a === i[e] ? this : (i[e] = a, this.setValues(t, i), this) 361 }, "undefined" != typeof window && (window.Color = o), e.exports = o 362 }, {2: 2, 5: 5}], 4: [function (t, e, a) { 363 function i(t) { 364 var e, a, i, n = t[0] / 255, o = t[1] / 255, r = t[2] / 255, l = Math.min(n, o, r), s = Math.max(n, o, r), d = s - l; 365 return s == l ? e = 0 : n == s ? e = (o - r) / d : o == s ? e = 2 + (r - n) / d : r == s && (e = 4 + (n - o) / d), e = Math.min(60 * e, 360), 0 > e && (e += 360), i = (l + s) / 2, a = s == l ? 0 : .5 >= i ? d / (s + l) : d / (2 - s - l), [e, 100 * a, 100 * i] 366 } 367 368 function n(t) { 369 var e, a, i, n = t[0], o = t[1], r = t[2], l = Math.min(n, o, r), s = Math.max(n, o, r), d = s - l; 370 return a = 0 == s ? 0 : d / s * 1e3 / 10, s == l ? e = 0 : n == s ? e = (o - r) / d : o == s ? e = 2 + (r - n) / d : r == s && (e = 4 + (n - o) / d), e = Math.min(60 * e, 360), 0 > e && (e += 360), i = s / 255 * 1e3 / 10, [e, a, i] 371 } 372 373 function o(t) { 374 var e = t[0], a = t[1], n = t[2], o = i(t)[0], r = 1 / 255 * Math.min(e, Math.min(a, n)), n = 1 - 1 / 255 * Math.max(e, Math.max(a, n)); 375 return [o, 100 * r, 100 * n] 376 } 377 378 function l(t) {
379 var e, a, i, n, o = t[0] / 255, r = t[1] / 255, l = t[2] / 255; 380 return n = Math.min(1 - o, 1 - r, 1 - l), e = (1 - o - n) / (1 - n) || 0, a = (1 - r - n) / (1 - n) || 0, i = (1 - l - n) / (1 - n) || 0, [100 * e, 100 * a, 100 * i, 100 * n] 381 } 382 383 function s(t) { 384 return G[JSON.stringify(t)] 385 } 386 387 function d(t) { 388 var e = t[0] / 255, a = t[1] / 255, i = t[2] / 255; 389 e = e > .04045 ? Math.pow((e + .055) / 1.055, 2.4) : e / 12.92, a = a > .04045 ? Math.pow((a + .055) / 1.055, 2.4) : a / 12.92, i = i > .04045 ? Math.pow((i + .055) / 1.055, 2.4) : i / 12.92; 390 var n = .4124 * e + .3576 * a + .1805 * i, o = .2126 * e + .7152 * a + .0722 * i, r = .0193 * e + .1192 * a + .9505 * i; 391 return [100 * n, 100 * o, 100 * r] 392 } 393 394 function u(t) { 395 var e, a, i, n = d(t), o = n[0], r = n[1], l = n[2]; 396 return o /= 95.047, r /= 100, l /= 108.883, o = o > .008856 ? Math.pow(o, 1 / 3) : 7.787 * o + 16 / 116, r = r > .008856 ? Math.pow(r, 1 / 3) : 7.787 * r + 16 / 116, l = l > .008856 ? Math.pow(l, 1 / 3) : 7.787 * l + 16 / 116, e = 116 * r - 16, a = 500 * (o - r), i = 200 * (r - l), [e, a, i] 397 } 398 399 function c(t) { 400 return W(u(t)) 401 } 402 403 function h(t) { 404 var e, a, i, n, o, r = t[0] / 360, l = t[1] / 100, s = t[2] / 100; 405 if (0 == l)return o = 255 * s, [o, o, o]; 406 a = .5 > s ? s * (1 + l) : s + l - s * l, e = 2 * s - a, n = [0, 0, 0]; 407 for (var d = 0; 3 > d; d++)i = r + 1 / 3 * -(d - 1), 0 > i && i++, i > 1 && i--, o = 1 > 6 * i ? e + 6 * (a - e) * i : 1 > 2 * i ? a : 2 > 3 * i ? e + (a - e) * (2 / 3 - i) * 6 : e, n[d] = 255 * o; 408 return n 409 } 410 411 function f(t) { 412 var e, a, i = t[0], n = t[1] / 100, o = t[2] / 100; 413 return 0 === o ? [0, 0, 0] : (o *= 2, n *= 1 >= o ? o : 2 - o, a = (o + n) / 2, e = 2 * n / (o + n), [i, 100 * e, 100 * a]) 414 } 415 416 function p(t) { 417 return o(h(t)) 418 } 419 420 function m(t) { 421 return l(h(t)) 422 } 423 424 function v(t) { 425 return s(h(t)) 426 } 427 428 function x(t) { 429 var e = t[0] / 60, a = t[1] / 100, i = t[2] / 100, n = Math.floor(e) % 6, o = e - Math.floor(e), r = 255 * i * (1 - a), l = 255 * i * (1 - a * o), s = 255 * i * (1 - a * (1 - o)), i = 255 * i; 430 switch (n) { 431 case 0: 432 return [i, s, r]; 433 case 1: 434 return [l, i, r]; 435 case 2: 436 return [r, i, s]; 437 case 3: 438 return [r, l, i]; 439 case 4: 440 return [s, r, i]; 441 case 5: 442 return [i, r, l] 443 } 444 } 445 446 function y(t) { 447 var e, a, i = t[0], n = t[1] / 100, o = t[2] / 100; 448 return a = (2 - n) * o, e = n * o, e /= 1 >= a ? a : 2 - a, e = e || 0, a /= 2, [i, 100 * e, 100 * a] 449 } 450 451 function k(t) { 452 return o(x(t)) 453 } 454 455 function S(t) { 456 return l(x(t)) 457 } 458 459 function w(t) { 460 return s(x(t)) 461 } 462 463 function M(t) { 464 var e, a, i, n, o = t[0] / 360, l = t[1] / 100, s = t[2] / 100, d = l + s; 465 switch (d > 1 && (l /= d, s /= d), e = Math.floor(6 * o), a = 1 - s, i = 6 * o - e, 0 != (1 & e) && (i = 1 - i), n = l + i * (a - l), e) { 466 default: 467 case 6: 468 case 0: 469 r = a, g = n, b = l; 470 break; 471 case 1: 472 r = n, g = a, b = l; 473 break; 474 case 2: 475 r = l, g = a, b = n; 476 break; 477 case 3: 478 r = l, g = n, b = a; 479 break; 480 case 4: 481 r = n, g = l, b = a; 482 break; 483 case 5: 484 r = a, g = l, b = n 485 } 486 return [255 * r, 255 * g, 255 * b] 487 } 488 489 function C(t) { 490 return i(M(t)) 491 } 492 493 function D(t) { 494 return n(M(t)) 495 } 496 497 function I(t) { 498 return l(M(t)) 499 } 500 501 function A(t) { 502 return s(M(t)) 503 } 504 505 function T(t) { 506 var e, a, i, n = t[0] / 100, o = t[1] / 100, r = t[2] / 100, l = t[3] / 100; 507 return e = 1 - Math.min(1, n * (1 - l) + l), a = 1 - Math.min(1, o * (1 - l) + l), i = 1 - Math.min(1, r * (1 - l) + l), [255 * e, 255 * a, 255 * i] 508 } 509 510 function P(t) { 511 return i(T(t)) 512 } 513 514 function F(t) { 515 return n(T(t)) 516 } 517 518 function _(t) { 519 return o(T(t)) 520 } 521 522 function R(t) { 523 return s(T(t)) 524 } 525 526 function V(t) { 527 var e, a, i, n = t[0] / 100, o = t[1] / 100, r = t[2] / 100; 528 return e = 3.2406 * n + -1.5372 * o + r * -.4986, a = n * -.9689 + 1.8758 * o + .0415 * r, i = .0557 * n + o * -.204 + 1.057 * r, e = e > .0031308 ? 1.055 * Math.pow(e, 1 / 2.4) - .055 : e = 12.92 * e, a = a > .0031308 ? 1.055 * Math.pow(a, 1 / 2.4) - .055 : a = 12.92 * a, i = i > .0031308 ? 1.055 * Math.pow(i, 1 / 2.4) - .055 : i = 12.92 * i, e = Math.min(Math.max(0, e), 1), a = Math.min(Math.max(0, a), 1), i = Math.min(Math.max(0, i), 1), [255 * e, 255 * a, 255 * i] 529 } 530 531 function L(t) { 532 var e, a, i, n = t[0], o = t[1], r = t[2]; 533 return n /= 95.047, o /= 100, r /= 108.883, n = n > .008856 ? Math.pow(n, 1 / 3) : 7.787 * n + 16 / 116, o = o > .008856 ? Math.pow(o, 1 / 3) : 7.787 * o + 16 / 116, r = r > .008856 ? Math.pow(r, 1 / 3) : 7.787 * r + 16 / 116, e = 116 * o - 16, a = 500 * (n - o), i = 200 * (o - r), [e, a, i] 534 } 535 536 function O(t) { 537 return W(L(t)) 538 } 539 540 function B(t) { 541 var e, a, i, n, o = t[0], r = t[1], l = t[2]; 542 return 8 >= o ? (a = 100 * o / 903.3, n = 7.787 * (a / 100) + 16 / 116) : (a = 100 * Math.pow((o + 16) / 116, 3), n = Math.pow(a / 100, 1 / 3)), e = .008856 >= e / 95.047 ? e = 95.047 * (r / 500 + n - 16 / 116) / 7.787 : 95.047 * Math.pow(r / 500 + n, 3), i = .008859 >= i / 108.883 ? i = 108.883 * (n - l / 200 - 16 / 116) / 7.787 : 108.883 * Math.pow(n - l / 200, 3), [e, a, i] 543 } 544 545 function W(t) { 546 var e, a, i, n = t[0], o = t[1], r = t[2]; 547 return e = Math.atan2(r, o), a = 360 * e / 2 / Math.PI, 0 > a && (a += 360), i = Math.sqrt(o * o + r * r), [n, i, a] 548 } 549 550 function z(t) { 551 return V(B(t)) 552 } 553 554 function N(t) { 555 var e, a, i, n = t[0], o = t[1], r = t[2]; 556 return i = r / 360 * 2 * Math.PI, e = o * Math.cos(i), a = o * Math.sin(i), [n, e, a] 557 } 558 559 function E(t) { 560 return B(N(t)) 561 } 562 563 function H(t) { 564 return z(N(t)) 565 } 566 567 function U(t) { 568 return Z[t] 569 } 570 571 function j(t) { 572 return i(U(t)) 573 } 574 575 function q(t) { 576 return n(U(t)) 577 } 578 579 function Y(t) { 580 return o(U(t)) 581 } 582 583 function X(t) { 584 return l(U(t)) 585 } 586 587 function K(t) { 588 return u(U(t)) 589 } 590 591 function J(t) { 592 return d(U(t)) 593 } 594 595 e.exports = { 596 rgb2hsl: i, 597 rgb2hsv: n, 598 rgb2hwb: o, 599 rgb2cmyk: l, 600 rgb2keyword: s, 601 rgb2xyz: d, 602 rgb2lab: u, 603 rgb2lch: c, 604 hsl2rgb: h, 605 hsl2hsv: f, 606 hsl2hwb: p, 607 hsl2cmyk: m, 608 hsl2keyword: v, 609 hsv2rgb: x, 610 hsv2hsl: y, 611 hsv2hwb: k, 612 hsv2cmyk: S, 613 hsv2keyword: w, 614 hwb2rgb: M, 615 hwb2hsl: C, 616 hwb2hsv: D, 617 hwb2cmyk: I, 618 hwb2keyword: A, 619 cmyk2rgb: T, 620 cmyk2hsl: P, 621 cmyk2hsv: F, 622 cmyk2hwb: _, 623 cmyk2keyword: R, 624 keyword2rgb: U, 625 keyword2hsl: j, 626 keyword2hsv: q, 627 keyword2hwb: Y, 628 keyword2cmyk: X, 629 keyword2lab: K, 630 keyword2xyz: J, 631 xyz2rgb: V, 632 xyz2lab: L, 633 xyz2lch: O, 634 lab2xyz: B, 635 lab2rgb: z, 636 lab2lch: W, 637 lch2lab: N, 638 lch2xyz: E, 639 lch2rgb: H 640 }; 641 var Z = { 642 aliceblue: [240, 248, 255], 643 antiquewhite: [250, 235, 215], 644 aqua: [0, 255, 255], 645 aquamarine: [127, 255, 212], 646 azure: [240, 255, 255], 647 beige: [245, 245, 220], 648 bisque: [255, 228, 196], 649 black: [0, 0, 0], 650 blanchedalmond: [255, 235, 205], 651 blue: [0, 0, 255], 652 blueviolet: [138, 43, 226], 653 brown: [165, 42, 42], 654 burlywood: [222, 184, 135], 655 cadetblue: [95, 158, 160], 656 chartreuse: [127, 255, 0], 657 chocolate: [210, 105, 30], 658 coral: [255, 127, 80], 659 cornflowerblue: [100, 149, 237], 660 cornsilk: [255, 248, 220], 661 crimson: [220, 20, 60], 662 cyan: [0, 255, 255], 663 darkblue: [0, 0, 139], 664 darkcyan: [0, 139, 139], 665 darkgoldenrod: [184, 134, 11], 666 darkgray: [169, 169, 169], 667 darkgreen: [0, 100, 0], 668 darkgrey: [169, 169, 169], 669 darkkhaki: [189, 183, 107], 670 darkmagenta: [139, 0, 139], 671 darkolivegreen: [85, 107, 47], 672 darkorange: [255, 140, 0], 673 darkorchid: [153, 50, 204], 674 darkred: [139, 0, 0], 675 darksalmon: [233, 150, 122], 676 darkseagreen: [143, 188, 143], 677 darkslateblue: [72, 61, 139], 678 darkslategray: [47, 79, 79], 679 darkslategrey: [47, 79, 79], 680 darkturquoise: [0, 206, 209], 681 darkviolet: [148, 0, 211], 682 deeppink: [255, 20, 147], 683 deepskyblue: [0, 191, 255], 684 dimgray: [105, 105, 105], 685 dimgrey: [105, 105, 105], 686 dodgerblue: [30, 144, 255], 687 firebrick: [178, 34, 34], 688 floralwhite: [255, 250, 240], 689 forestgreen: [34, 139, 34], 690 fuchsia: [255, 0, 255], 691 gainsboro: [220, 220, 220], 692 ghostwhite: [248, 248, 255], 693 gold: [255, 215, 0], 694 goldenrod: [218, 165, 32], 695 gray: [128, 128, 128], 696 green: [0, 128, 0], 697 greenyellow: [173, 255, 47], 698 grey: [128, 128, 128], 699 honeydew: [240, 255, 240], 700 hotpink: [255, 105, 180], 701 indianred: [205, 92, 92], 702 indigo: [75, 0, 130], 703 ivory: [255, 255, 240], 704 khaki: [240, 230, 140], 705 lavender: [230, 230, 250], 706 lavenderblush: [255, 240, 245], 707 lawngreen: [124, 252, 0], 708 lemonchiffon: [255, 250, 205], 709 lightblue: [173, 216, 230], 710 lightcoral: [240, 128, 128], 711 lightcyan: [224, 255, 255], 712 lightgoldenrodyellow: [250, 250, 210], 713 lightgray: [211, 211, 211], 714 lightgreen: [144, 238, 144], 715 lightgrey: [211, 211, 211], 716 lightpink: [255, 182, 193], 717 lightsalmon: [255, 160, 122], 718 lightseagreen: [32, 178, 170], 719 lightskyblue: [135, 206, 250], 720 lightslategray: [119, 136, 153], 721 lightslategrey: [119, 136, 153], 722 lightsteelblue: [176, 196, 222], 723 lightyellow: [255, 255, 224], 724 lime: [0, 255, 0], 725 limegreen: [50, 205, 50], 726 linen: [250, 240, 230], 727 magenta: [255, 0, 255], 728 maroon: [128, 0, 0], 729 mediumaquamarine: [102, 205, 170], 730 mediumblue: [0, 0, 205], 731 mediumorchid: [186, 85, 211], 732 mediumpurple: [147, 112, 219], 733 mediumseagreen: [60, 179, 113], 734 mediumslateblue: [123, 104, 238], 735 mediumspringgreen: [0, 250, 154], 736 mediumturquoise: [72, 209, 204], 737 mediumvioletred: [199, 21, 133], 738 midnightblue: [25, 25, 112], 739 mintcream: [245, 255, 250], 740 mistyrose: [255, 228, 225], 741 moccasin: [255, 228, 181], 742 navajowhite: [255, 222, 173], 743 navy: [0, 0, 128], 744 oldlace: [253, 245, 230], 745 olive: [128, 128, 0], 746 olivedrab: [107, 142, 35], 747 orange: [255, 165, 0], 748 orangered: [255, 69, 0], 749 orchid: [218, 112, 214], 750 palegoldenrod: [238, 232, 170], 751 palegreen: [152, 251, 152], 752 paleturquoise: [175, 238, 238], 753 palevioletred: [219, 112, 147], 754 papayawhip: [255, 239, 213], 755 peachpuff: [255, 218, 185], 756 peru: [205, 133, 63], 757 pink: [255, 192, 203], 758 plum: [221, 160, 221], 759 powderblue: [176, 224, 230], 760 purple: [128, 0, 128], 761 rebeccapurple: [102, 51, 153], 762 red: [255, 0, 0], 763 rosybrown: [188, 143, 143], 764 royalblue: [65, 105, 225], 765 saddlebrown: [139, 69, 19], 766 salmon: [250, 128, 114], 767 sandybrown: [244, 164, 96], 768 seagreen: [46, 139, 87], 769 seashell: [255, 245, 238], 770 sienna: [160, 82, 45], 771 silver: [192, 192, 192], 772 skyblue: [135, 206, 235], 773 slateblue: [106, 90, 205], 774 slategray: [112, 128, 144], 775 slategrey: [112, 128, 144], 776 snow: [255, 250, 250], 777 springgreen: [0, 255, 127], 778 steelblue: [70, 130, 180], 779 tan: [210, 180, 140], 780 teal: [0, 128, 128], 781 thistle: [216, 191, 216], 782 tomato: [255, 99, 71], 783 turquoise: [64, 224, 208], 784 violet: [238, 130, 238], 785 wheat: [245, 222, 179], 786 white: [255, 255, 255], 787 whitesmoke: [245, 245, 245], 788 yellow: [255, 255, 0], 789 yellowgreen: [154, 205, 50] 790 }, G = {}; 791 for (var Q in Z)G[JSON.stringify(Z[Q])] = Q 792 }, {}], 5: [function (t, e, a) { 793 var i = t(4), n = function () { 794 return new d 795 }; 796 for (var o in i) { 797 n[o + "Raw"] = function (t) { 798 return function (e) { 799 return "number" == typeof e && (e = Array.prototype.slice.call(arguments)), i[t](e) 800 } 801 }(o); 802
802 var r = /(\w+)2(\w+)/.exec(o), l = r[1], s = r[2]; 803 n[l] = n[l] || {}, n[l][s] = n[o] = function (t) { 804 return function (e) { 805 "number" == typeof e && (e = Array.prototype.slice.call(arguments)); 806 var a = i[t](e); 807 if ("string" == typeof a || void 0 === a)return a; 808 for (var n = 0; n < a.length; n++)a[n] = Math.round(a[n]); 809 return a 810 } 811 }(o) 812 } 813 var d = function () { 814 this.convs = {} 815 }; 816 d.prototype.routeSpace = function (t, e) { 817 var a = e[0]; 818 return void 0 === a ? this.getValues(t) : ("number" == typeof a && (a = Array.prototype.slice.call(e)), this.setValues(t, a)) 819 }, d.prototype.setValues = function (t, e) { 820 return this.space = t, this.convs = {}, this.convs[t] = e, this 821 }, d.prototype.getValues = function (t) { 822 var e = this.convs[t]; 823 if (!e) { 824 var a = this.space, i = this.convs[a]; 825 e = n[a][t](i), this.convs[t] = e 826 } 827 return e 828 }, ["rgb", "hsl", "hsv", "cmyk", "keyword"].forEach(function (t) { 829 d.prototype[t] = function (e) { 830 return this.routeSpace(t, arguments) 831 } 832 }), e.exports = n 833 }, {4: 4}], 6: [function (t, e, a) { 834 e.exports = { 835 aliceblue: [240, 248, 255], 836 antiquewhite: [250, 235, 215], 837 aqua: [0, 255, 255], 838 aquamarine: [127, 255, 212], 839 azure: [240, 255, 255], 840 beige: [245, 245, 220], 841 bisque: [255, 228, 196], 842 black: [0, 0, 0], 843 blanchedalmond: [255, 235, 205], 844 blue: [0, 0, 255], 845 blueviolet: [138, 43, 226], 846 brown: [165, 42, 42], 847 burlywood: [222, 184, 135], 848 cadetblue: [95, 158, 160], 849 chartreuse: [127, 255, 0], 850 chocolate: [210, 105, 30], 851 coral: [255, 127, 80], 852 cornflowerblue: [100, 149, 237], 853 cornsilk: [255, 248, 220], 854 crimson: [220, 20, 60], 855 cyan: [0, 255, 255], 856 darkblue: [0, 0, 139], 857 darkcyan: [0, 139, 139], 858 darkgoldenrod: [184, 134, 11], 859 darkgray: [169, 169, 169], 860 darkgreen: [0, 100, 0], 861 darkgrey: [169, 169, 169], 862 darkkhaki: [189, 183, 107], 863 darkmagenta: [139, 0, 139], 864 darkolivegreen: [85, 107, 47], 865 darkorange: [255, 140, 0], 866 darkorchid: [153, 50, 204], 867 darkred: [139, 0, 0], 868 darksalmon: [233, 150, 122], 869 darkseagreen: [143, 188, 143], 870 darkslateblue: [72, 61, 139], 871 darkslategray: [47, 79, 79], 872 darkslategrey: [47, 79, 79], 873 darkturquoise: [0, 206, 209], 874 darkviolet: [148, 0, 211], 875 deeppink: [255, 20, 147], 876 deepskyblue: [0, 191, 255], 877 dimgray: [105, 105, 105], 878 dimgrey: [105, 105, 105], 879 dodgerblue: [30, 144, 255], 880 firebrick: [178, 34, 34], 881 floralwhite: [255, 250, 240], 882 forestgreen: [34, 139, 34], 883 fuchsia: [255, 0, 255], 884 gainsboro: [220, 220, 220], 885 ghostwhite: [248, 248, 255], 886 gold: [255, 215, 0], 887 goldenrod: [218, 165, 32], 888 gray: [128, 128, 128], 889 green: [0, 128, 0], 890 greenyellow: [173, 255, 47], 891 grey: [128, 128, 128], 892 honeydew: [240, 255, 240], 893 hotpink: [255, 105, 180], 894 indianred: [205, 92, 92], 895 indigo: [75, 0, 130], 896 ivory: [255, 255, 240], 897 khaki: [240, 230, 140], 898 lavender: [230, 230, 250], 899 lavenderblush: [255, 240, 245], 900 lawngreen: [124, 252, 0], 901 lemonchiffon: [255, 250, 205], 902 lightblue: [173, 216, 230], 903 lightcoral: [240, 128, 128], 904 lightcyan: [224, 255, 255], 905 lightgoldenrodyellow: [250, 250, 210], 906 lightgray: [211, 211, 211], 907 lightgreen: [144, 238, 144], 908 lightgrey: [211, 211, 211], 909 lightpink: [255, 182, 193], 910 lightsalmon: [255, 160, 122], 911 lightseagreen: [32, 178, 170], 912 lightskyblue: [135, 206, 250], 913 lightslategray: [119, 136, 153], 914 lightslategrey: [119, 136, 153], 915 lightsteelblue: [176, 196, 222], 916 lightyellow: [255, 255, 224], 917 lime: [0, 255, 0], 918 limegreen: [50, 205, 50], 919 linen: [250, 240, 230], 920 magenta: [255, 0, 255], 921 maroon: [128, 0, 0], 922 mediumaquamarine: [102, 205, 170], 923 mediumblue: [0, 0, 205], 924 mediumorchid: [186, 85, 211], 925 mediumpurple: [147, 112, 219], 926 mediumseagreen: [60, 179, 113], 927 mediumslateblue: [123, 104, 238], 928 mediumspringgreen: [0, 250, 154], 929 mediumturquoise: [72, 209, 204], 930 mediumvioletred: [199, 21, 133], 931 midnightblue: [25, 25, 112], 932 mintcream: [245, 255, 250], 933 mistyrose: [255, 228, 225], 934 moccasin: [255, 228, 181], 935 navajowhite: [255, 222, 173], 936 navy: [0, 0, 128], 937 oldlace: [253, 245, 230], 938 olive: [128, 128, 0], 939 olivedrab: [107, 142, 35], 940 orange: [255, 165, 0], 941 orangered: [255, 69, 0], 942 orchid: [218, 112, 214], 943 palegoldenrod: [238, 232, 170], 944 palegreen: [152, 251, 152], 945 paleturquoise: [175, 238, 238], 946 palevioletred: [219, 112, 147], 947 papayawhip: [255, 239, 213], 948 peachpuff: [255, 218, 185], 949 peru: [205, 133, 63], 950 pink: [255, 192, 203], 951 plum: [221, 160, 221], 952 powderblue: [176, 224, 230], 953 purple: [128, 0, 128], 954 rebeccapurple: [102, 51, 153], 955 red: [255, 0, 0], 956 rosybrown: [188, 143, 143], 957 royalblue: [65, 105, 225], 958 saddlebrown: [139, 69, 19], 959 salmon: [250, 128, 114], 960 sandybrown: [244, 164, 96], 961 seagreen: [46, 139, 87], 962 seashell: [255, 245, 238], 963 sienna: [160, 82, 45], 964 silver: [192, 192, 192], 965 skyblue: [135, 206, 235], 966 slateblue: [106, 90, 205], 967 slategray: [112, 128, 144], 968 slategrey: [112, 128, 144], 969 snow: [255, 250, 250], 970 springgreen: [0, 255, 127], 971 steelblue: [70, 130, 180], 972 tan: [210, 180, 140], 973 teal: [0, 128, 128], 974 thistle: [216, 191, 216], 975 tomato: [255, 99, 71], 976 turquoise: [64, 224, 208], 977 violet: [238, 130, 238], 978 wheat: [245, 222, 179], 979 white: [255, 255, 255], 980 whitesmoke: [245, 245, 245], 981 yellow: [255, 255, 0], 982 yellowgreen: [154, 205, 50] 983 } 984 }, {}], 7: [function (t, e, a) { 985 var i = t(28)(); 986 t(26)(i), t(22)(i), t(25)(i), t(21)(i), t(23)(i), t(24)(i), t(29)(i), t(33)(i), t(31)(i), t(34)(i), t(32)(i), t(35)(i), t(30)(i), t(27)(i), t(36)(i), t(37)(i), t(38)(i), t(39)(i), t(40)(i), t(43)(i), t(41)(i), t(42)(i), t(44)(i), t(45)(i), t(46)(i), t(15)(i), t(16)(i), t(17)(i), t(18)(i), t(19)(i), t(20)(i), t(8)(i), t(9)(i), t(10)(i), t(11)(i), t(12)(i), t(13)(i), t(14)(i), window.Chart = e.exports = i 987 }, { 988 10: 10, 989 11: 11, 990 12: 12, 991 13: 13, 992 14: 14, 993 15: 15, 994 16: 16, 995 17: 17, 996 18: 18, 997 19: 19, 998 20: 20, 999 21: 21, 1000 22: 22, 1001 23: 23, 1002 24: 24, 1003 25: 25, 1004 26: 26, 1005 27: 27, 1006 28: 28, 1007 29: 29, 1008 30: 30, 1009 31: 31, 1010 32: 32, 1011 33: 33, 1012 34: 34, 1013 35: 35, 1014 36: 36, 1015 37: 37, 1016 38: 38, 1017 39: 39, 1018 40: 40, 1019 41: 41, 1020 42: 42, 1021 43: 43, 1022 44: 44, 1023 45: 45, 1024 46: 46, 1025 8: 8, 1026 9: 9 1027 }], 8: [function (t, e, a) { 1028 "use strict"; 1029 e.exports = function (t) { 1030 t.Bar = function (e, a) { 1031 return a.type = "bar", new t(e, a) 1032 } 1033 } 1034 }, {}], 9: [function (t, e, a) { 1035 "use strict"; 1036 e.exports = function (t) { 1037 t.Bubble = function (e, a) { 1038 return a.type = "bubble", new t(e, a) 1039 } 1040 } 1041 }, {}], 10: [function (t, e, a) { 1042 "use strict"; 1043 e.exports = function (t) { 1044 t.Doughnut = function (e, a) { 1045 return a.type = "doughnut", new t(e, a) 1046 } 1047 } 1048 }, {}], 11: [function (t, e, a) { 1049 "use strict"; 1050 e.exports = function (t) { 1051 t.Line = function (e, a) { 1052 return a.type = "line", new t(e, a) 1053 } 1054 } 1055 }, {}], 12: [function (t, e, a) { 1056 "use strict"; 1057 e.exports = function (t) { 1058 t.PolarArea = function (e, a) { 1059 return a.type = "polarArea", new t(e, a) 1060 } 1061 } 1062 }, {}], 13: [function (t, e, a) { 1063 "use strict"; 1064 e.exports = function (t) { 1065 t.Radar = function (e, a) { 1066 return a.type = "radar", new t(e, a) 1067 } 1068 } 1069 }, {}], 14: [function (t, e, a) { 1070 "use strict"; 1071 e.exports = function (t) { 1072 var e = { 1073 hover: {mode: "single"}, 1074 scales: { 1075 xAxes: [{type: "linear", position: "bottom", id: "x-axis-1"}], 1076 yAxes: [{type: "linear", position: "left", id: "y-axis-1"}] 1077 }, 1078 tooltips: { 1079 callbacks: { 1080 title: function () { 1081 return "" 1082 }, label: function (t) { 1083 return "(" + t.xLabel + ", " + t.yLabel + ")" 1084 } 1085 } 1086 } 1087 }; 1088 t.defaults.scatter = e, t.controllers.scatter = t.controllers.line, t.Scatter = function (e, a) { 1089 return a.type = "scatter", new t(e, a) 1090 } 1091 } 1092 }, {}], 15: [function (t, e, a) { 1093 "use strict"; 1094 e.exports = function (t) { 1095 var e = t.helpers; 1096 t.defaults.bar = { 1097 hover: {mode: "label"}, 1098 scales: { 1099 xAxes: [{ 1100 type: "category", 1101 categoryPercentage: .8, 1102 barPercentage: .9, 1103 gridLines: {offsetGridLines: !0} 1104 }], yAxes: [{type: "linear"}] 1105 } 1106 }, t.controllers.bar = t.DatasetController.extend({ 1107 dataElementType: t.elements.Rectangle, 1108 initialize: function (e, a) { 1109 t.DatasetController.prototype.initialize.call(this, e, a), this.getMeta().bar = !0 1110 }, 1111 getBarCount: function () { 1112 var t = this, a = 0; 1113 return e.each(t.chart.data.datasets, function (e, i) { 1114 var n = t.chart.getDatasetMeta(i); 1115 n.bar && t.chart.isDatasetVisible(i) && ++a 1116 }, t), a 1117 }, 1118 update: function (t) { 1119 var a = this; 1120 e.each(a.getMeta().data, function (e, i) { 1121 a.updateElement(e, i, t) 1122 }, a) 1123 }, 1124 updateElement: function (t, a, i) { 1125 var n = this, o = n.getMeta(), r = n.getScaleForId(o.xAxisID), l = n.getScaleForId(o.yAxisID), s = l.getBasePixel(), d = n.chart.options.elements.rectangle, u = t.custom || {}, c = n.getDataset(); 1126 t._xScale = r, t._yScale = l, t._datasetIndex = n.index, t._index = a; 1127 var h = n.getRuler(a); 1128 t._model = { 1129 x: n.calculateBarX(a, n.index, h), 1130 y: i ? s : n.calculateBarY(a, n.index), 1131 label: n.chart.data.labels[a], 1132 datasetLabel: c.label, 1133 base: i ? s : n.calculateBarBase(n.index, a), 1134 width: n.calculateBarWidth(h), 1135 backgroundColor: u.backgroundColor ? u.backgroundColor : e.getValueAtIndexOrDefault(c.backgroundColor, a, d.backgroundColor), 1136 borderSkipped: u.borderSkipped ? u.borderSkipped : d.borderSkipped, 1137 borderColor: u.borderColor ? u.borderColor : e.getValueAtIndexOrDefault(c.borderColor, a, d.borderColor), 1138 borderWidth: u.borderWidth ? u.borderWidth : e.getValueAtIndexOrDefault(c.borderWidth, a, d.borderWidth) 1139 }, t.pivot() 1140 }, 1141 calculateBarBase: function (t, e) { 1142 var a = this, i = a.getMeta(), n = a.getScaleForId(i.yAxisID), o = 0; 1143 if (n.options.stacked) {
1144 for (var r = a.chart, l = r.data.datasets, s = Number(l[t].data[e]), d = 0; t > d; d++) { 1145 var u = l[d], c = r.getDatasetMeta(d); 1146 if (c.bar && c.yAxisID === n.id && r.isDatasetVisible(d)) { 1147 var h = Number(u.data[e]); 1148 o += 0 > s ? Math.min(h, 0) : Math.max(h, 0) 1149 } 1150 } 1151 return n.getPixelForValue(o) 1152 } 1153 return n.getBasePixel() 1154 }, 1155 getRuler: function (t) { 1156 var e, a = this, i = a.getMeta(), n = a.getScaleForId(i.xAxisID), o = a.getBarCount(); 1157 e = "category" === n.options.type ? n.getPixelForTick(t + 1) - n.getPixelForTick(t) : n.width / n.ticks.length; 1158 var r = e * n.options.categoryPercentage, l = (e - e * n.options.categoryPercentage) / 2, s = r / o; 1159 if (n.ticks.length !== a.chart.data.labels.length) { 1160 var d = n.ticks.length / a.chart.data.labels.length; 1161 s *= d 1162 } 1163 var u = s * n.options.barPercentage, c = s - s * n.options.barPercentage; 1164 return { 1165 datasetCount: o, 1166 tickWidth: e, 1167 categoryWidth: r, 1168 categorySpacing: l, 1169 fullBarWidth: s, 1170 barWidth: u, 1171 barSpacing: c 1172 } 1173 }, 1174 calculateBarWidth: function (t) { 1175 var e = this.getScaleForId(this.getMeta().xAxisID); 1176 return e.options.barThickness ? e.options.barThickness : e.options.stacked ? t.categoryWidth : t.barWidth 1177 }, 1178 getBarIndex: function (t) { 1179 var e, a, i = 0; 1180 for (a = 0; t > a; ++a)e = this.chart.getDatasetMeta(a), e.bar && this.chart.isDatasetVisible(a) && ++i; 1181 return i 1182 }, 1183 calculateBarX: function (t, e, a) { 1184 var i = this, n = i.getMeta(), o = i.getScaleForId(n.xAxisID), r = i.getBarIndex(e), l = o.getPixelForValue(null, t, e, i.chart.isCombo); 1185 return l -= i.chart.isCombo ? a.tickWidth / 2 : 0, o.options.stacked ? l + a.categoryWidth / 2 + a.categorySpacing : l + a.barWidth / 2 + a.categorySpacing + a.barWidth * r + a.barSpacing / 2 + a.barSpacing * r 1186 }, 1187 calculateBarY: function (t, e) { 1188 var a = this, i = a.getMeta(), n = a.getScaleForId(i.yAxisID), o = Number(a.getDataset().data[t]); 1189 if (n.options.stacked) { 1190 for (var r = 0, l = 0, s = 0; e > s; s++) { 1191 var d = a.chart.data.datasets[s], u = a.chart.getDatasetMeta(s); 1192 if (u.bar && u.yAxisID === n.id && a.chart.isDatasetVisible(s)) { 1193 var c = Number(d.data[t]); 1194 0 > c ? l += c || 0 : r += c || 0 1195 } 1196 } 1197 return 0 > o ? n.getPixelForValue(l + o) : n.getPixelForValue(r + o) 1198 } 1199 return n.getPixelForValue(o) 1200 }, 1201 draw: function (t) { 1202 var e, a, i = this, n = t || 1, o = i.getMeta().data, r = i.getDataset(); 1203 for (e = 0, a = o.length; a > e; ++e) { 1204 var l = r.data[e]; 1205 null === l || void 0 === l || isNaN(l) || o[e].transition(n).draw() 1206 } 1207 }, 1208 setHoverStyle: function (t) { 1209 var a = this.chart.data.datasets[t._datasetIndex], i = t._index, n = t.custom || {}, o = t._model;
1210 o.backgroundColor = n.hoverBackgroundColor ? n.hoverBackgroundColor : e.getValueAtIndexOrDefault(a.hoverBackgroundColor, i, e.getHoverColor(o.backgroundColor)), o.borderColor = n.hoverBorderColor ? n.hoverBorderColor : e.getValueAtIndexOrDefault(a.hoverBorderColor, i, e.getHoverColor(o.borderColor)), o.borderWidth = n.hoverBorderWidth ? n.hoverBorderWidth : e.getValueAtIndexOrDefault(a.hoverBorderWidth, i, o.borderWidth) 1211 }, 1212 removeHoverStyle: function (t) { 1213 var a = this.chart.data.datasets[t._datasetIndex], i = t._index, n = t.custom || {}, o = t._model, r = this.chart.options.elements.rectangle; 1214 o.backgroundColor = n.backgroundColor ? n.backgroundColor : e.getValueAtIndexOrDefault(a.backgroundColor, i, r.backgroundColor), o.borderColor = n.borderColor ? n.borderColor : e.getValueAtIndexOrDefault(a.borderColor, i, r.borderColor), o.borderWidth = n.borderWidth ? n.borderWidth : e.getValueAtIndexOrDefault(a.borderWidth, i, r.borderWidth) 1215 } 1216 }), t.defaults.horizontalBar = { 1217 hover: {mode: "label"}, 1218 scales: { 1219 xAxes: [{type: "linear", position: "bottom"}], 1220 yAxes: [{ 1221 position: "left", 1222 type: "category", 1223 categoryPercentage: .8, 1224 barPercentage: .9, 1225 gridLines: {offsetGridLines: !0} 1226 }] 1227 }, 1228 elements: {rectangle: {borderSkipped: "left"}}, 1229 tooltips: { 1230 callbacks: { 1231 title: function (t, e) { 1232 var a = ""; 1233 return t.length > 0 && (t[0].yLabel ? a = t[0].yLabel : e.labels.length > 0 && t[0].index < e.labels.length && (a = e.labels[t[0].index])), a 1234 }, label: function (t, e) { 1235 var a = e.datasets[t.datasetIndex].label || ""; 1236 return a + ": " + t.xLabel 1237 } 1238 } 1239 } 1240 }, t.controllers.horizontalBar = t.controllers.bar.extend({ 1241 updateElement: function (t, a, i) { 1242 var n = this, o = n.getMeta(), r = n.getScaleForId(o.xAxisID), l = n.getScaleForId(o.yAxisID), s = r.getBasePixel(), d = t.custom || {}, u = n.getDataset(), c = n.chart.options.elements.rectangle; 1243 t._xScale = r, t._yScale = l, t._datasetIndex = n.index, t._index = a; 1244 var h = n.getRuler(a); 1245 t._model = { 1246 x: i ? s : n.calculateBarX(a, n.index), 1247 y: n.calculateBarY(a, n.index, h), 1248 label: n.chart.data.labels[a], 1249 datasetLabel: u.label, 1250 base: i ? s : n.calculateBarBase(n.index, a), 1251 height: n.calculateBarHeight(h), 1252 backgroundColor: d.backgroundColor ? d.backgroundColor : e.getValueAtIndexOrDefault(u.backgroundColor, a, c.backgroundColor), 1253 borderSkipped: d.borderSkipped ? d.borderSkipped : c.borderSkipped, 1254 borderColor: d.borderColor ? d.borderColor : e.getValueAtIndexOrDefault(u.borderColor, a, c.borderColor), 1255 borderWidth: d.borderWidth ? d.borderWidth : e.getValueAtIndexOrDefault(u.borderWidth, a, c.borderWidth) 1256 }, t.draw = function () { 1257 function t(t) { 1258 return s[(u + t) % 4] 1259 } 1260 1261 var e = this._chart.ctx, a = this._view, i = a.height / 2, n = a.y - i, o = a.y + i, r = a.base - (a.base - a.x), l = a.borderWidth / 2; 1262 a.borderWidth && (n += l, o -= l, r += l), e.beginPath(), e.fillStyle = a.backgroundColor, e.strokeStyle = a.borderColor, e.lineWidth = a.borderWidth; 1263 var s = [[a.base, o], [a.base, n], [r, n], [r, o]], d = ["bottom", "left", "top", "right"], u = d.indexOf(a.borderSkipped, 0); 1264 -1 === u && (u = 0), e.moveTo.apply(e, t(0)); 1265 for (var c = 1; 4 > c; c++)e.lineTo.apply(e, t(c)); 1266 e.fill(), a.borderWidth && e.stroke() 1267 }, t.pivot() 1268 }, calculateBarBase: function (t, e) { 1269 var a = this, i = a.getMeta(), n = a.getScaleForId(i.xAxisID), o = 0; 1270 if (n.options.stacked) {
1271 for (var r = a.chart, l = r.data.datasets, s = Number(l[t].data[e]), d = 0; t > d; d++) { 1272 var u = l[d], c = r.getDatasetMeta(d); 1273 if (c.bar && c.xAxisID === n.id && r.isDatasetVisible(d)) { 1274 var h = Number(u.data[e]); 1275 o += 0 > s ? Math.min(h, 0) : Math.max(h, 0) 1276 } 1277 } 1278 return n.getPixelForValue(o) 1279 } 1280 return n.getBasePixel() 1281 }, getRuler: function (t) { 1282 var e, a = this, i = a.getMeta(), n = a.getScaleForId(i.yAxisID), o = a.getBarCount(); 1283 e = "category" === n.options.type ? n.getPixelForTick(t + 1) - n.getPixelForTick(t) : n.width / n.ticks.length; 1284 var r = e * n.options.categoryPercentage, l = (e - e * n.options.categoryPercentage) / 2, s = r / o; 1285 if (n.ticks.length !== a.chart.data.labels.length) { 1286 var d = n.ticks.length / a.chart.data.labels.length; 1287 s *= d 1288 } 1289 var u = s * n.options.barPercentage, c = s - s * n.options.barPercentage; 1290 return { 1291 datasetCount: o, 1292 tickHeight: e, 1293 categoryHeight: r, 1294 categorySpacing: l, 1295 fullBarHeight: s, 1296 barHeight: u, 1297 barSpacing: c 1298 } 1299 }, calculateBarHeight: function (t) { 1300 var e = this, a = e.getScaleForId(e.getMeta().yAxisID); 1301 return a.options.barThickness ? a.options.barThickness : a.options.stacked ? t.categoryHeight : t.barHeight 1302 }, calculateBarX: function (t, e) { 1303 var a = this, i = a.getMeta(), n = a.getScaleForId(i.xAxisID), o = Number(a.getDataset().data[t]); 1304 if (n.options.stacked) { 1305 for (var r = 0, l = 0, s = 0; e > s; s++) { 1306 var d = a.chart.data.datasets[s], u = a.chart.getDatasetMeta(s); 1307 if (u.bar && u.xAxisID === n.id && a.chart.isDatasetVisible(s)) { 1308 var c = Number(d.data[t]); 1309 0 > c ? l += c || 0 : r += c || 0 1310 } 1311 } 1312 return 0 > o ? n.getPixelForValue(l + o) : n.getPixelForValue(r + o) 1313 } 1314 return n.getPixelForValue(o) 1315 }, calculateBarY: function (t, e, a) { 1316 var i = this, n = i.getMeta(), o = i.getScaleForId(n.yAxisID), r = i.getBarIndex(e), l = o.getPixelForValue(null, t, e, i.chart.isCombo); 1317 return l -= i.chart.isCombo ? a.tickHeight / 2 : 0, o.options.stacked ? l + a.categoryHeight / 2 + a.categorySpacing : l + a.barHeight / 2 + a.categorySpacing + a.barHeight * r + a.barSpacing / 2 + a.barSpacing * r 1318 } 1319 }) 1320 } 1321 }, {}], 16: [function (t, e, a) { 1322 "use strict"; 1323 e.exports = function (t) { 1324 var e = t.helpers; 1325 t.defaults.bubble = { 1326 hover: {mode: "single"}, 1327 scales: { 1328 xAxes: [{type: "linear", position: "bottom", id: "x-axis-0"}], 1329 yAxes: [{type: "linear", position: "left", id: "y-axis-0"}] 1330 }, 1331 tooltips: { 1332 callbacks: { 1333 title: function () { 1334 return "" 1335 }, label: function (t, e) { 1336 var a = e.datasets[t.datasetIndex].label || "", i = e.datasets[t.datasetIndex].data[t.index]; 1337 return a + ": (" + t.xLabel + ", " + t.yLabel + ", " + i.r + ")" 1338 } 1339 } 1340 } 1341 }, t.controllers.bubble = t.DatasetController.extend({ 1342 dataElementType: t.elements.Point, 1343 update: function (t) { 1344 var a = this, i = a.getMeta(), n = i.data; 1345 e.each(n, function (e, i) { 1346 a.updateElement(e, i, t) 1347 }) 1348 }, 1349 updateElement: function (a, i, n) { 1350 var o = this, r = o.getMeta(), l = o.getScaleForId(r.xAxisID), s = o.getScaleForId(r.yAxisID), d = a.custom || {}, u = o.getDataset(), c = u.data[i], h = o.chart.options.elements.point, f = o.index; 1351 e.extend(a, { 1352 _xScale: l, 1353 _yScale: s, 1354 _datasetIndex: f, 1355 _index: i, 1356 _model: { 1357 x: n ? l.getPixelForDecimal(.5) : l.getPixelForValue("object" == typeof c ? c : NaN, i, f, o.chart.isCombo), 1358 y: n ? s.getBasePixel() : s.getPixelForValue(c, i, f), 1359 radius: n ? 0 : d.radius ? d.radius : o.getRadius(c), 1360 hitRadius: d.hitRadius ? d.hitRadius : e.getValueAtIndexOrDefault(u.hitRadius, i, h.hitRadius) 1361 } 1362 }), t.DatasetController.prototype.removeHoverStyle.call(o, a, h); 1363 var g = a._model; 1364 g.skip = d.skip ? d.skip : isNaN(g.x) || isNaN(g.y), a.pivot() 1365 }, 1366 getRadius: function (t) { 1367 return t.r || this.chart.options.elements.point.radius 1368 }, 1369 setHoverStyle: function (a) { 1370 var i = this; 1371 t.DatasetController.prototype.setHoverStyle.call(i, a); 1372 var n = i.chart.data.datasets[a._datasetIndex], o = a._index, r = a.
1372custom || {}, l = a._model; 1373 l.radius = r.hoverRadius ? r.hoverRadius : e.getValueAtIndexOrDefault(n.hoverRadius, o, i.chart.options.elements.point.hoverRadius) + i.getRadius(n.data[o]) 1374 }, 1375 removeHoverStyle: function (e) { 1376 var a = this; 1377 t.DatasetController.prototype.removeHoverStyle.call(a, e, a.chart.options.elements.point); 1378 var i = a.chart.data.datasets[e._datasetIndex].data[e._index], n = e.custom || {}, o = e._model; 1379 o.radius = n.radius ? n.radius : a.getRadius(i) 1380 } 1381 }) 1382 } 1383 }, {}], 17: [function (t, e, a) { 1384 "use strict"; 1385 e.exports = function (t) { 1386 var e = t.helpers, a = t.defaults; 1387 a.doughnut = { 1388 animation: {animateRotate: !0, animateScale: !1}, 1389 aspectRatio: 1, 1390 hover: {mode: "single"}, 1391 legendCallback: function (t) { 1392 var e = []; 1393 e.push('<ul class="' + t.id + '-legend">'); 1394 var a = t.data, i = a.datasets, n = a.labels; 1395 if (i.length)for (var o = 0; o < i[0].data.length; ++o)e.push('<li><span style="background-color:' + i[0].backgroundColor[o] + '"></span>'), n[o] && e.push(n[o]), e.push("</li>"); 1396 return e.push("</ul>"), e.join("") 1397 }, 1398 legend: { 1399 labels: { 1400 generateLabels: function (t) { 1401 var a = t.data; 1402 return a.labels.length && a.datasets.length ? a.labels.map(function (i, n) { 1403 var o = t.getDatasetMeta(0), r = a.datasets[0], l = o.data[n], s = l && l.custom || {}, d = e.getValueAtIndexOrDefault, u = t.options.elements.arc, c = s.backgroundColor ? s.backgroundColor : d(r.backgroundColor, n, u.backgroundColor), h = s.borderColor ? s.borderColor : d(r.borderColor, n, u.borderColor), f = s.borderWidth ? s.borderWidth : d(r.borderWidth, n, u.borderWidth); 1404 return { 1405 text: i, 1406 fillStyle: c, 1407 strokeStyle: h, 1408 lineWidth: f, 1409 hidden: isNaN(r.data[n]) || o.data[n].hidden, 1410 index: n 1411 } 1412 }) : [] 1413 } 1414 }, onClick: function (t, e) { 1415 var a, i, n, o = e.index, r = this.chart; 1416 for (a = 0, i = (r.data.datasets || []).length; i > a; ++a)n = r.getDatasetMeta(a), n.data[o] && (n.data[o].hidden = !n.data[o].hidden); 1417 r.update() 1418 } 1419 }, 1420 cutoutPercentage: 50, 1421 rotation: Math.PI * -.5, 1422 circumference: 2 * Math.PI, 1423 tooltips: { 1424 callbacks: { 1425 title: function () { 1426 return "" 1427 }, label: function (t, a) { 1428 var i = a.labels[t.index], n = ": " + a.datasets[t.datasetIndex].data[t.index]; 1429 return e.isArray(i) ? (i = i.slice(), i[0] += n) : i += n, i 1430 } 1431 } 1432 } 1433 }, a.pie = e.clone(a.doughnut), e.extend(a.pie, {cutoutPercentage: 0}), t.controllers.doughnut = t.controllers.pie = t.DatasetController.extend({ 1434 dataElementType: t.elements.Arc, 1435 linkScales: e.noop, 1436 getRingIndex: function (t) { 1437 for (var e = 0, a = 0; t > a; ++a)this.chart.isDatasetVisible(a) && ++e; 1438 return e 1439 }, 1440 update: function (t) { 1441 var a = this, i = a.chart, n = i.chartArea, o = i.options, r = o.elements.ar
vendor: 5,012 bytes, lines 1441-1505
1441c, l = n.right - n.left - r.borderWidth, s = n.bottom - n.top - r.borderWidth, d = Math.min(l, s), u = { 1442 x: 0, 1443 y: 0 1444 }, c = a.getMeta(), h = o.cutoutPercentage, f = o.circumference; 1445 if (f < 2 * Math.PI) { 1446 var g = o.rotation % (2 * Math.PI); 1447 g += 2 * Math.PI * (g >= Math.PI ? -1 : g < -Math.PI ? 1 : 0); 1448 var p = g + f, m = {x: Math.cos(g), y: Math.sin(g)}, b = { 1449 x: Math.cos(p), 1450 y: Math.sin(p) 1451 }, v = 0 >= g && p >= 0 || g <= 2 * Math.PI && 2 * Math.PI <= p, x = g <= .5 * Math.PI && .5 * Math.PI <= p || g <= 2.5 * Math.PI && 2.5 * Math.PI <= p, y = g <= -Math.PI && -Math.PI <= p || g <= Math.PI && Math.PI <= p, k = g <= .5 * -Math.PI && .5 * -Math.PI <= p || g <= 1.5 * Math.PI && 1.5 * Math.PI <= p, S = h / 100, w = { 1452 x: y ? -1 : Math.min(m.x * (m.x < 0 ? 1 : S), b.x * (b.x < 0 ? 1 : S)), 1453 y: k ? -1 : Math.min(m.y * (m.y < 0 ? 1 : S), b.y * (b.y < 0 ? 1 : S)) 1454 }, M = { 1455 x: v ? 1 : Math.max(m.x * (m.x > 0 ? 1 : S), b.x * (b.x > 0 ? 1 : S)), 1456 y: x ? 1 : Math.max(m.y * (m.y > 0 ? 1 : S), b.y * (b.y > 0 ? 1 : S)) 1457 }, C = {width: .5 * (M.x - w.x), height: .5 * (M.y - w.y)}; 1458 d = Math.min(l / C.width, s / C.height), u = {x: (M.x + w.x) * -.5, y: (M.y + w.y) * -.5} 1459 } 1460 i.borderWidth = a.getMaxBorderWidth(c.data), i.outerRadius = Math.max((d - i.borderWidth) / 2, 0), i.innerRadius = Math.max(h ? i.outerRadius / 100 * h : 1, 0), i.radiusLength = (i.outerRadius - i.innerRadius) / i.getVisibleDatasetCount(), i.offsetX = u.x * i.outerRadius, i.offsetY = u.y * i.outerRadius, c.total = a.calculateTotal(), a.outerRadius = i.outerRadius - i.radiusLength * a.getRingIndex(a.index), a.innerRadius = a.outerRadius - i.radiusLength, e.each(c.data, function (e, i) { 1461 a.updateElement(e, i, t) 1462 }) 1463 }, 1464 updateElement: function (t, a, i) { 1465 var n = this, o = n.chart, r = o.chartArea, l = o.options, s = l.animation, d = (r.left + r.right) / 2, u = (r.top + r.bottom) / 2, c = l.rotation, h = l.rotation, f = n.getDataset(), g = i && s.animateRotate ? 0 : t.hidden ? 0 : n.calculateCircumference(f.data[a]) * (l.circumference / (2 * Math.PI)), p = i && s.animateScale ? 0 : n.innerRadius, m = i && s.animateScale ? 0 : n.outerRadius, b = e.getValueAtIndexOrDefault; 1466 e.extend(t, { 1467 _datasetIndex: n.index, 1468 _index: a, 1469 _model: { 1470 x: d + o.offsetX, 1471 y: u + o.offsetY, 1472 startAngle: c, 1473 endAngle: h, 1474 circumference: g, 1475 outerRadius: m, 1476 innerRadius: p, 1477 label: b(f.label, a, o.data.labels[a]) 1478 } 1479 }); 1480 var v = t._model; 1481 this.removeHoverStyle(t), i && s.animateRotate || (0 === a ? v.startAngle = l.rotation : v.startAngle = n.getMeta().data[a - 1]._model.endAngle, v.endAngle = v.startAngle + v.circumference), t.pivot() 1482 }, 1483 removeHoverStyle: function (e) { 1484 t.DatasetController.prototype.removeHoverStyle.call(this, e, this.chart.options.elements.arc) 1485 }, 1486 calculateTotal: function () { 1487 var t, a = this.getDataset(), i = this.getMeta(), n = 0; 1488 return e.each(i.data, function (e, i) { 1489 t = a.data[i], isNaN(t) || e.hidden || (n += Math.abs(t)) 1490 }), n 1491 }, 1492 calculateCircumference: function (t) { 1493 var e = this.getMeta().total; 1494 return e > 0 && !isNaN(t) ? 2 * Math.PI * (t / e) : 0 1495 }, 1496 getMaxBorderWidth: function (t) { 1497 for (var e, a, i = 0, n = this.index, o = t.length, r = 0; o > r; r++)e = t[r]._model ? t[r]._model.borderWidth : 0, a = t[r]._chart ? t[r]._chart.config.data.datasets[n].hoverBorderWidth : 0, i = e > i ? e : i, i = a > i ? a : i; 1498 return i 1499 } 1500 }) 1501 } 1502 }, {}], 18: [function (t, e, a) { 1503 "use strict"; 1504 e.exports = function (t) { 1505 function e(t, e) {
1506 return a.getValueOrDefault(t.showLine, e.showLines) 1507 } 1508 1509 var a = t.helpers; 1510 t.defaults.line = { 1511 showLines: !0, 1512 spanGaps: !1, 1513 hover: {mode: "label"}, 1514 scales: {xAxes: [{type: "category", id: "x-axis-0"}], yAxes: [{type: "linear", id: "y-axis-0"}]} 1515 }, t.controllers.line = t.DatasetController.extend({ 1516 datasetElementType: t.elements.Line, 1517 dataElementType: t.elements.Point, 1518 update: function (t) { 1519 var i, n, o, r = this, l = r.getMeta(), s = l.dataset, d = l.data || [], u = r.chart.options, c = u.elements.line, h = r.getScaleForId(l.yAxisID), f = r.getDataset(), g = e(f, u); 1520 for (g && (o = s.custom || {}, void 0 !== f.tension && void 0 === f.lineTension && (f.lineTension = f.tension), s._scale = h, s._datasetIndex = r.index, s._children = d, s._model = { 1521 spanGaps: f.spanGaps ? f.spanGaps : u.spanGaps, 1522 tension: o.tension ? o.tension : a.getValueOrDefault(f.lineTension, c.tension), 1523 backgroundColor: o.backgroundColor ? o.backgroundColor : f.backgroundColor || c.backgroundColor, 1524 borderWidth: o.borderWidth ? o.borderWidth : f.borderWidth || c.borderWidth, 1525 borderColor: o.borderColor ? o.borderColor : f.borderColor || c.borderColor, 1526 borderCapStyle: o.borderCapStyle ? o.borderCapStyle : f.borderCapStyle || c.borderCapStyle, 1527 borderDash: o.borderDash ? o.borderDash : f.borderDash || c.borderDash, 1528 borderDashOffset: o.borderDashOffset ? o.borderDashOffset : f.borderDashOffset || c.borderDashOffset, 1529 borderJoinStyle: o.borderJoinStyle ? o.borderJoinStyle : f.borderJoinStyle || c.borderJoinStyle, 1530 fill: o.fill ? o.fill : void 0 !== f.fill ? f.fill : c.fill, 1531 steppedLine: o.steppedLine ? o.steppedLine : a.getValueOrDefault(f.steppedLine, c.stepped), 1532 cubicInterpolationMode: o.cubicInterpolationMode ? o.cubicInterpolationMode : a.getValueOrDefault(f.cubicInterpolationMode, c.cubicInterpolationMode), 1533 scaleTop: h.top, 1534 scaleBottom: h.bottom, 1535 scaleZero: h.getBasePixel() 1536 }, s.pivot()), i = 0, n = d.length; n > i; ++i)r.updateElement(d[i], i, t); 1537 for (g && 0 !== s._model.tension && r.updateBezierControlPoints(), i = 0, n = d.length; n > i; ++i)d[i].pivot() 1538 },
1539 getPointBackgroundColor: function (t, e) { 1540 var i = this.chart.options.elements.point.backgroundColor, n = this.getDataset(), o = t.custom || {}; 1541 return o.backgroundColor ? i = o.backgroundColor : n.pointBackgroundColor ? i = a.getValueAtIndexOrDefault(n.pointBackgroundColor, e, i) : n.backgroundColor && (i = n.backgroundColor), i 1542 }, 1543 getPointBorderColor: function (t, e) { 1544 var i = this.chart.options.elements.point.borderColor, n = this.getDataset(), o = t.custom || {}; 1545 return o.borderColor ? i = o.borderColor : n.pointBorderColor ? i = a.getValueAtIndexOrDefault(n.pointBorderColor, e, i) : n.borderColor && (i = n.borderColor), i 1546 }, 1547 getPointBorderWidth: function (t, e) { 1548 var i = this.chart.options.elements.point.borderWidth, n = this.getDataset(), o = t.custom || {}; 1549 return o.borderWidth ? i = o.borderWidth : n.pointBorderWidth ? i = a.getValueAtIndexOrDefault(n.pointBorderWidth, e, i) : n.borderWidth && (i = n.borderWidth), i 1550 }, 1551 updateElement: function (t, e, i) { 1552 var n, o, r = this, l = r.getMeta(), s = t.custom || {}, d = r.getDataset(), u = r.index, c = d.data[e], h = r.getScaleForId(l.yAxisID), f = r.getScaleForId(l.xAxisID), g = r.chart.options.elements.point, p = r.chart.data.labels || [], m = 1 === p.length || 1 === d.data.length || r.chart.isCombo; 1553 void 0 !== d.radius && void 0 === d.pointRadius && (d.pointRadius = d.radius), void 0 !== d.hitRadius && void 0 === d.pointHitRadius && (d.pointHitRadius = d.hitRadius), n = f.getPixelForValue("object" == typeof c ? c : NaN, e, u, m), o = i ? h.getBasePixel() : r.calculatePointY(c, e, u), t._xScale = f, t._yScale = h, t._datasetIndex = u, t._index = e, t._model = { 1554 x: n, 1555 y: o, 1556 skip: s.skip || isNaN(n) || isNaN(o), 1557 radius: s.radius || a.getValueAtIndexOrDefault(d.pointRadius, e, g.radius), 1558 pointStyle: s.pointStyle || a.getValueAtIndexOrDefault(d.pointStyle, e, g.pointStyle), 1559 backgroundColor: r.getPointBackgroun
1559dColor(t, e), 1560 borderColor: r.getPointBorderColor(t, e), 1561 borderWidth: r.getPointBorderWidth(t, e), 1562 tension: l.dataset._model ? l.dataset._model.tension : 0, 1563 steppedLine: l.dataset._model ? l.dataset._model.steppedLine : !1, 1564 hitRadius: s.hitRadius || a.getValueAtIndexOrDefault(d.pointHitRadius, e, g.hitRadius) 1565 } 1566 }, 1567 calculatePointY: function (t, e, a) { 1568 var i, n, o, r = this, l = r.chart, s = r.getMeta(), d = r.getScaleForId(s.yAxisID), u = 0, c = 0; 1569 if (d.options.stacked) { 1570 for (i = 0; a > i; i++)if (n = l.data.datasets[i], o = l.getDatasetMeta(i), "line" === o.type && o.yAxisID === d.id && l.isDatasetVisible(i)) { 1571 var h = Number(d.getRightValue(n.data[e])); 1572 0 > h ? c += h || 0 : u += h || 0 1573 } 1574 var f = Number(d.getRightValue(t)); 1575 return 0 > f ? d.getPixelForValue(c + f) : d.getPixelForValue(u + f) 1576 } 1577 return d.getPixelForValue(t) 1578 }, 1579 updateBezierControlPoints: function () { 1580 function t(t, e, a) { 1581 return Math.max(Math.min(t, a), e) 1582 } 1583 1584 var e, i, n, o, r, l = this, s = l.getMeta(), d = l.chart.chartArea, u = s.data || []; 1585 if (s.dataset._model.spanGaps && (u = u.filter(function (t) { 1586 return !t._model.skip 1587 })), "monotone" === s.dataset._model.cubicInterpolationMode)a.splineCurveMonotone(u); else for (e = 0, i = u.length; i > e; ++e)n = u[e], o = n._model, r = a.splineCurve(a.previousItem(u, e)._model, o, a.nextItem(u, e)._model, s.dataset._model.tension), o.controlPointPreviousX = r.previous.x, o.controlPointPreviousY = r.previous.y, o.controlPointNextX = r.next.x, o.controlPointNextY = r.next.y; 1588 if (l.chart.options.elements.line.capBezierPoints)for (e = 0, i = u.length; i > e; ++e)o = u[e]._model, o.controlPointPreviousX = t(o.controlPointPreviousX, d.left, d.right), o.controlPointPreviousY = t(o.controlPointPreviousY, d.top, d.bottom), o.controlPointNextX = t(o.controlPointNextX, d.left, d.right), o.controlPointNextY = t(o.controlPointNextY, d.top, d.bottom) 1589 }, 1590 draw: function (t) { 1591 var a, i, n = this, o = n.getMeta(), r = o.data || [], l = t || 1; 1592 for (a = 0, i = r.length; i > a; ++a)r[a].transition(l); 1593 for (e(n.getDataset(), n.chart.options) && o.dataset.transition(l).draw(), a = 0, i = r.length; i > a; ++a)r[a].draw() 1594 }, 1595 setHoverStyle: function (t) { 1596 var e = this.chart.data.datasets[t._datasetIndex], i = t._index, n = t.custom || {}, o = t._model; 1597 o.radius = n.hoverRadius || a.getValueAtIndexOrDefault(e.pointHoverRadius, i, this.chart.options.elements.point.hoverRadius), o.backgroundColor = n.hoverBackgroundColor || a.getValueAtIndexOrDefault(e.pointHoverBackgroundColor, i, a.getHoverColor(o.backgroundColor)), o.borderColor = n.hoverBorderColor || a.getValueAtIndexOrDefault(e.pointHoverBorderColor, i, a.getHoverColor(o.borderColor)), o.borderWidth = n.hoverBorderWidth || a.getValueAtIndexOrDefault(e.pointHoverBorderWidth, i, o.borderWidth) 1598 }, 1599 removeHoverStyle: function (t) { 1600 var e = this, i = e.chart.data.datasets[t._datasetIndex], n = t._index, o = t.custom || {}, r = t._model; 1601 void 0 !== i.radius && void 0 === i.pointRadius && (i.pointRadius = i.radius), r.radius = o.radius || a.getValueAtIndexOrDefault(i.pointRadius, n, e.chart.options.elements.point.radius), r.backgroundColor = e.getPointBackgroun
vendor: 9,435 bytes, lines 1601-1741
1601dColor(t, n), r.borderColor = e.getPointBorderColor(t, n), r.borderWidth = e.getPointBorderWidth(t, n) 1602 } 1603 }) 1604 } 1605 }, {}], 19: [function (t, e, a) { 1606 "use strict"; 1607 e.exports = function (t) { 1608 var e = t.helpers; 1609 t.defaults.polarArea = { 1610 scale: {type: "radialLinear", lineArc: !0, ticks: {beginAtZero: !0}}, 1611 animation: {animateRotate: !0, animateScale: !0}, 1612 startAngle: -.5 * Math.PI, 1613 aspectRatio: 1, 1614 legendCallback: function (t) { 1615 var e = []; 1616 e.push('<ul class="' + t.id + '-legend">'); 1617 var a = t.data, i = a.datasets, n = a.labels; 1618 if (i.length)for (var o = 0; o < i[0].data.length; ++o)e.push('<li><span style="background-color:' + i[0].backgroundColor[o] + '"></span>'), n[o] && e.push(n[o]), e.push("</li>"); 1619 return e.push("</ul>"), e.join("") 1620 }, 1621 legend: { 1622 labels: { 1623 generateLabels: function (t) { 1624 var a = t.data; 1625 return a.labels.length && a.datasets.length ? a.labels.map(function (i, n) { 1626 var o = t.getDatasetMeta(0), r = a.datasets[0], l = o.data[n], s = l.custom || {}, d = e.getValueAtIndexOrDefault, u = t.options.elements.arc, c = s.backgroundColor ? s.backgroundColor : d(r.backgroundColor, n, u.backgroundColor), h = s.borderColor ? s.borderColor : d(r.borderColor, n, u.borderColor), f = s.borderWidth ? s.borderWidth : d(r.borderWidth, n, u.borderWidth); 1627 return { 1628 text: i, 1629 fillStyle: c, 1630 strokeStyle: h, 1631 lineWidth: f, 1632 hidden: isNaN(r.data[n]) || o.data[n].hidden, 1633 index: n 1634 } 1635 }) : [] 1636 } 1637 }, onClick: function (t, e) { 1638 var a, i, n, o = e.index, r = this.chart; 1639 for (a = 0, i = (r.data.datasets || []).length; i > a; ++a)n = r.getDatasetMeta(a), n.data[o].hidden = !n.data[o].hidden; 1640 r.update() 1641 } 1642 }, 1643 tooltips: { 1644 callbacks: { 1645 title: function () { 1646 return "" 1647 }, label: function (t, e) { 1648 return e.labels[t.index] + ": " + t.yLabel 1649 } 1650 } 1651 } 1652 }, t.controllers.polarArea = t.DatasetController.extend({ 1653 dataElementType: t.elements.Arc, 1654 linkScales: e.noop, 1655 update: function (t) { 1656 var a = this, i = a.chart, n = i.chartArea, o = a.getMeta(), r = i.options, l = r.elements.arc, s = Math.min(n.right - n.left, n.bottom - n.top); 1657 i.outerRadius = Math.max((s - l.borderWidth / 2) / 2, 0), i.innerRadius = Math.max(r.cutoutPercentage ? i.outerRadius / 100 * r.cutoutPercentage : 1, 0), i.radiusLength = (i.outerRadius - i.innerRadius) / i.getVisibleDatasetCount(), a.outerRadius = i.outerRadius - i.radiusLength * a.index, a.innerRadius = a.outerRadius - i.radiusLength, o.count = a.countVisibleElements(), e.each(o.data, function (e, i) { 1658 a.updateElement(e, i, t) 1659 }) 1660 }, 1661 updateElement: function (t, a, i) { 1662 for (var n = this, o = n.chart, r = n.getDataset(), l = o.options, s = l.animation, d = o.scale, u = e.getValueAtIndexOrDefault, c = o.data.labels, h = n.calculateCircumference(r.data[a]), f = d.xCenter, g = d.yCenter, p = 0, m = n.getMeta(), b = 0; a > b; ++b)isNaN(r.data[b]) || m.data[b].hidden || ++p; 1663 var v = l.startAngle, x = t.hidden ? 0 : d.getDistanceFromCenterForValue(r.data[a]), y = v + h * p, k = y + (t.hidden ? 0 : h), S = s.animateScale ? 0 : d.getDistanceFromCenterForValue(r.data[a]); 1664 e.extend(t, { 1665 _datasetIndex: n.index, 1666 _index: a, 1667 _scale: d, 1668 _model: { 1669 x: f, 1670 y: g, 1671 innerRadius: 0, 1672 outerRadius: i ? S : x, 1673 startAngle: i && s.animateRotate ? v : y, 1674 endAngle: i && s.animateRotate ? v : k, 1675 label: u(c, a, c[a]) 1676 } 1677 }), n.removeHoverStyle(t), t.pivot() 1678 }, 1679 removeHoverStyle: function (e) { 1680 t.DatasetController.prototype.removeHoverStyle.call(this, e, this.chart.options.elements.arc) 1681 }, 1682 countVisibleElements: function () { 1683 var t = this.getDataset(), a = this.getMeta(), i = 0; 1684 return e.each(a.data, function (e, a) { 1685 isNaN(t.data[a]) || e.hidden || i++ 1686 }), i 1687 }, 1688 calculateCircumference: function (t) { 1689 var e = this.getMeta().count; 1690 return e > 0 && !isNaN(t) ? 2 * Math.PI / e : 0 1691 } 1692 }) 1693 } 1694 }, {}], 20: [function (t, e, a) { 1695 "use strict"; 1696 e.exports = function (t) { 1697 var e = t.helpers; 1698 t.defaults.radar = { 1699 aspectRatio: 1, 1700 scale: {type: "radialLinear"}, 1701 elements: {line: {tension: 0}} 1702 }, t.controllers.radar = t.DatasetController.extend({ 1703 datasetElementType: t.elements.Line, 1704 dataElementType: t.elements.Point, 1705 linkScales: e.noop, 1706 update: function (t) { 1707 var a = this, i = a.getMeta(), n = i.dataset, o = i.data, r = n.custom || {}, l = a.getDataset(), s = a.chart.options.elements.line, d = a.chart.scale; 1708 void 0 !== l.tension && void 0 === l.lineTension && (l.lineTension = l.tension), e.extend(i.dataset, { 1709 _datasetIndex: a.index, 1710 _children: o, 1711 _loop: !0, 1712 _model: { 1713 tension: r.tension ? r.tension : e.getValueOrDefault(l.lineTension, s.tension), 1714 backgroundColor: r.backgroundColor ? r.backgroundColor : l.backgroundColor || s.backgroundColor, 1715 borderWidth: r.borderWidth ? r.borderWidth : l.borderWidth || s.borderWidth, 1716 borderColor: r.borderColor ? r.borderColor : l.borderColor || s.borderColor, 1717 fill: r.fill ? r.fill : void 0 !== l.fill ? l.fill : s.fill, 1718 borderCapStyle: r.borderCapStyle ? r.borderCapStyle : l.borderCapStyle || s.borderCapStyle, 1719 borderDash: r.borderDash ? r.borderDash : l.borderDash || s.borderDash, 1720 borderDashOffset: r.borderDashOffset ? r.borderDashOffset : l.borderDashOffset || s.borderDashOffset, 1721 borderJoinStyle: r.borderJoinStyle ? r.borderJoinStyle : l.borderJoinStyle || s.borderJoinStyle, 1722 scaleTop: d.top, 1723 scaleBottom: d.bottom, 1724 scaleZero: d.getBasePosition() 1725 } 1726 }), i.dataset.pivot(), e.each(o, function (e, i) { 1727 a.updateElement(e, i, t) 1728 }, a), a.updateBezierControlPoints() 1729 }, 1730 updateElement: function (t, a, i) { 1731 var n = this, o = t.custom || {}, r = n.getDataset(), l = n.chart.scale, s = n.chart.options.elements.point, d = l.getPointPositionForValue(a, r.data[a]); 1732 e.extend(t, { 1733 _datasetIndex: n.index, 1734 _index: a, 1735 _scale: l, 1736 _model: { 1737 x: i ? l.xCenter : d.x, 1738 y: i ? l.yCenter : d.y, 1739 tension: o.tension ? o.tension : e.getValueOrDefault(r.tension, n.chart.options.elements.line.tension), 1740 radius: o.radius ? o.radius : e.getValueAtIndexOrDefault(r.pointRadius, a, s.radius), 1741 backgroundColor: o.backgroundColor ? o.backgroundColor : e.getValueAtIndexOrDefault(r.pointBackgroun
1741dColor, a, s.backgroundColor), 1742 borderColor: o.borderColor ? o.borderColor : e.getValueAtIndexOrDefault(r.pointBorderColor, a, s.borderColor), 1743 borderWidth: o.borderWidth ? o.borderWidth : e.getValueAtIndexOrDefault(r.pointBorderWidth, a, s.borderWidth), 1744 pointStyle: o.pointStyle ? o.pointStyle : e.getValueAtIndexOrDefault(r.pointStyle, a, s.pointStyle), 1745 hitRadius: o.hitRadius ? o.hitRadius : e.getValueAtIndexOrDefault(r.hitRadius, a, s.hitRadius) 1746 } 1747 }), t._model.skip = o.skip ? o.skip : isNaN(t._model.x) || isNaN(t._model.y) 1748 }, 1749 updateBezierControlPoints: function () { 1750 var t = this.chart.chartArea, a = this.getMeta(); 1751 e.each(a.data, function (i, n) { 1752 var o = i._model, r = e.splineCurve(e.previousItem(a.data, n, !0)._model, o, e.nextItem(a.data, n, !0)._model, o.tension); 1753 o.controlPointPreviousX = Math.max(Math.min(r.previous.x, t.right), t.left), o.controlPointPreviousY = Math.max(Math.min(r.previous.y, t.bottom), t.top), o.controlPointNextX = Math.max(Math.min(r.next.x, t.right), t.left), o.controlPointNextY = Math.max(Math.min(r.next.y, t.bottom), t.top), i.pivot() 1754 }) 1755 }, 1756 draw: function (t) { 1757 var a = this.getMeta(), i = t || 1; 1758 e.each(a.data, function (t) { 1759 t.transition(i) 1760 }), a.dataset.transition(i).draw(), e.each(a.data, function (t) { 1761 t.draw() 1762 }) 1763 }, 1764 setHoverStyle: function (t) { 1765 var a = this.chart.data.datasets[t._datasetIndex], i = t.custom || {}, n = t._index, o = t._model; 1766 o.radius = i.hoverRadius ? i.hoverRadius : e.getValueAtIndexOrDefault(a.pointHoverRadius, n, this.chart.options.elements.point.hoverRadius), o.backgroundColor = i.hoverBackgroundColor ? i.hoverBackgroundColor : e.getValueAtIndexOrDefault(a.pointHoverBackgroundColor, n, e.getHoverColor(o.backgroundColor)), o.borderColor = i.hoverBorderColor ? i.hoverBorderColor : e.getValueAtIndexOrDefault(a.pointHoverBorderColor, n, e.getHoverColor(o.borderColor)), o.borderWidth = i.hoverBorderWidth ? i.hoverBorderWidth : e.getValueAtIndexOrDefault(a.pointHoverBorderWidth, n, o.borderWidth) 1767 }, 1768 removeHoverStyle: function (t) { 1769 var a = this.chart.data.datasets[t._datasetIndex], i = t.custom || {}, n = t._index, o = t._model, r = this.chart.options.elements.point; 1770 o.radius = i.radius ? i.radius : e.getValueAtIndexOrDefault(a.radius, n, r.radius), o.backgroundColor = i.backgroundColor ? i.backgroundColor : e.getValueAtIndexOrDefault(a.pointBackgroun
1770dColor, n, r.backgroundColor), o.borderColor = i.borderColor ? i.borderColor : e.getValueAtIndexOrDefault(a.pointBorderColor, n, r.borderColor), o.borderWidth = i.borderWidth ? i.borderWidth : e.getValueAtIndexOrDefault(a.pointBorderWidth, n, r.borderWidth) 1771 } 1772 }) 1773 } 1774 }, {}], 21: [function (t, e, a) { 1775 "use strict"; 1776 e.exports = function (t) { 1777 var e = t.helpers; 1778 t.defaults.global.animation = { 1779 duration: 1e3, 1780 easing: "easeOutQuart", 1781 onProgress: e.noop, 1782 onComplete: e.noop 1783 }, t.Animation = t.Element.extend({ 1784 currentStep: null, 1785 numSteps: 60, 1786 easing: "", 1787 render: null, 1788 onAnimationProgress: null, 1789 onAnimationComplete: null 1790 }), t.animationService = { 1791 frameDuration: 17, 1792 animations: [], 1793 dropFrames: 0, 1794 request: null, 1795 addAnimation: function (t, e, a, i) { 1796 var n = this; 1797 i || (t.animating = !0); 1798 for (var o = 0; o < n.animations.length; ++o)if (n.animations[o].chartInstance === t)return void(n.animations[o].animationObject = e); 1799 n.animations.push({ 1800 chartInstance: t, 1801 animationObject: e 1802 }), 1 === n.animations.length && n.requestAnimationFrame() 1803 }, 1804 cancelAnimation: function (t) { 1805 var a = e.findIndex(this.animations, function (e) { 1806 return e.chartInstance === t 1807 }); 1808 -1 !== a && (this.animations.splice(a, 1), t.animating = !1) 1809 }, 1810 requestAnimationFrame: function () { 1811 var t = this; 1812 null === t.request && (t.request = e.requestAnimFrame.call(window, function () { 1813 t.request = null, t.startDigest() 1814 })) 1815 }, 1816 startDigest: function () { 1817 var t = this, e = Date.now(), a = 0; 1818 t.dropFrames > 1 && (a = Math.floor(t.dropFrames), t.dropFrames = t.dropFrames % 1); 1819 for (var i = 0; i < t.animations.length;)null === t.animations[i].animationObject.currentStep && (t.animations[i].animationObject.currentStep = 0), t.animations[i].animationObject.currentStep += 1 + a, t.animations[i].animationObject.currentStep > t.animations[i].animationObject.numSteps && (t.animations[i].animationObject.currentStep = t.animations[i].animationObject.numSteps), t.animations[i].animationObject.render(t.animations[i].chartInstance, t.animations[i].animationObject), t.animations[i].animationObject.onAnimationProgress && t.animations[i].animationObject.onAnimationProgress.call && t.animations[i].animationObject.onAnimationProgress.call(t.animations[i].chartInstance, t.animations[i]), t.animations[i].animationObject.currentStep === t.animations[i].animationObject.numSteps ? (t.animations[i].animationObject.onAnimationComplete && t.animations[i].animationObject.onAnimationComplete.call && t.animations[i].animationObject.onAnimationComplete.call(t.animations[i].chartInstance, t.animations[i]), t.animations[i].chartInstance.animating = !1, t.animations.splice(i, 1)) : ++i; 1820 var n = Date.now(), o = (n - e) / t.frameDuration; 1821 t.dropFrames += o, t.animations.length > 0 && t.requestAnimationFrame() 1822 } 1823 } 1824 } 1825 }, {}], 22: [function (t, e, a) { 1826 "use strict"; 1827 e.exports = function (t) { 1828 var e = t.canvasHelpers = {}; 1829 e.drawPoint = function (t, e, a, i, n) { 1830 var o, r, l, s, d, u; 1831 if ("object" == typeof e && (o = e.toString(), "[object HTMLImageElement]" === o || "[object HTMLCanvasElement]" === o))return void t.drawImage(e, i - e.width / 2, n - e.height / 2); 1832 if (!(isNaN(a) || 0 >= a)) { 1833 switch (e) { 1834 default: 1835 t.beginPath(), t.arc(i, n, a, 0, 2 * Math.PI), t.closePath(), t.fill(); 1836 break; 1837 case"triangle": 1838 t.beginPath(), r = 3 * a / Math.sqrt(3), d = r * Math.sqrt(3) / 2, t.moveTo(i - r / 2, n + d / 3), t.lineTo(i + r / 2, n + d / 3), t.lineTo(i, n - 2 * d / 3), t.closePath(), t.fill(); 1839 break; 1840 case"rect": 1841 u = 1 / Math.SQRT2 * a, t.beginPath(), t.fillRect(i - u, n - u, 2 * u, 2 * u), t.strokeRect(i - u, n - u, 2 * u, 2 * u); 1842 break; 1843 case"rectRot": 1844 u = 1 / Math.SQRT2 * a, t.beginPath(), t.moveTo(i - u, n), t.lineTo(i, n + u), t.lineTo(i + u, n), t.lineTo(i, n - u), t.closePath(), t.fill(); 1845 break; 1846 case"cross": 1847 t.beginPath(), t.moveTo(i, n + a), t.lineTo(i, n - a), t.moveTo(i - a, n), t.lineTo(i + a, n), t.closePath(); 1848 break; 1849 case"crossRot":
1850 t.beginPath(), l = Math.cos(Math.PI / 4) * a, s = Math.sin(Math.PI / 4) * a, t.moveTo(i - l, n - s), t.lineTo(i + l, n + s), t.moveTo(i - l, n + s), t.lineTo(i + l, n - s), t.closePath(); 1851 break; 1852 case"star": 1853 t.beginPath(), t.moveTo(i, n + a), t.lineTo(i, n - a), t.moveTo(i - a, n), t.lineTo(i + a, n), l = Math.cos(Math.PI / 4) * a, s = Math.sin(Math.PI / 4) * a, t.moveTo(i - l, n - s), t.lineTo(i + l, n + s), t.moveTo(i - l, n + s), t.lineTo(i + l, n - s), t.closePath(); 1854 break; 1855 case"line": 1856 t.beginPath(), t.moveTo(i - a, n), t.lineTo(i + a, n), t.closePath(); 1857 break; 1858 case"dash": 1859 t.beginPath(), t.moveTo(i, n), t.lineTo(i + a, n), t.closePath() 1860 } 1861 t.stroke() 1862 } 1863 } 1864 } 1865 }, {}], 23: [function (t, e, a) { 1866 "use strict"; 1867 e.exports = function (t) { 1868 function e(t, e) { 1869 var a = r.getStyle(t, e), i = a && a.match(/(\d+)px/); 1870 return i ? Number(i[1]) : void 0 1871 } 1872 1873 function a(t, a) { 1874 var i = t.style, n = t.getAttribute("height"), o = t.getAttribute("width"); 1875 if (t._chartjs = { 1876 initial: { 1877 height: n, 1878 width: o, 1879 style: {display: i.display, height: i.height, width: i.width} 1880 } 1881 }, i.display = i.display || "block", null === o || "" === o) { 1882 var r = e(t, "width"); 1883 void 0 !== r && (t.width = r) 1884 } 1885 if (null === n || "" === n)if ("" === t.style.height)t.height = t.width / (a.options.aspectRatio || 2); else { 1886 var l = e(t, "height"); 1887 void 0 !== r && (t.height = l) 1888 } 1889 return t 1890 } 1891 1892 function i(t) { 1893 if (t._chartjs) { 1894 var e = t._chartjs.initial; 1895 ["height", "width"].forEach(function (a) { 1896 var i = e[a]; 1897 void 0 === i || null === i ? t.removeAttribute(a) : t.setAttribute(a, i) 1898 }), r.each(e.style || {}, function (e, a) { 1899 t.style[a] = e 1900 }), t.width = t.width, delete t._chartjs 1901 } 1902 } 1903 1904 function n(t, e) { 1905 if ("string" == typeof t ? t = document.getElementById(t) : t.length && (t = t[0]), t && t.canvas && (t = t.canvas), t instanceof HTMLCanvasElement) { 1906 var i = t.getContext && t.getContext("2d"); 1907 if (i instanceof CanvasRenderingContext2D)return a(t, e), i 1908 } 1909 return null 1910 } 1911 1912 function o(e) { 1913 e = e || {}; 1914 var a = e.data = e.data || {}; 1915 return a.datasets = a.datasets || [], a.labels = a.labels || [], e.options = r.configMerge(t.defaults.global, t.defaults[e.type], e.options || {}), e 1916 } 1917 1918 var r = t.helpers; 1919 t.types = {}, t.instances = {}, t.controllers = {}, t.Controller = function (e, a, i) { 1920 var l = this; 1921 a = o(a); 1922 var s = n(e, a), d = s && s.canvas, u = d && d.height, c = d && d.width; 1923 return i.ctx = s, i.canvas = d, i.config = a, i.width = c, i.height = u, i.aspectRatio = u ? c / u : null, l.id = r.uid(), l.chart = i, l.config = a, l.options = a.options, l._bufferedRender = !1, t.instances[l.id] = l, Object.defineProperty(l, "data", { 1924 get: function () { 1925 return l.config.data 1926 } 1927 }), s && d ? (r.retinaScale(i), l.options.responsive && (r.addResizeListener(d.parentNode, function () { 1928 l.resize() 1929 }), l.resize(!0)), l.initialize(), l) : (console.error("Failed to create chart: can't acquire context from the given item"), l) 1930 }, r.extend(t.Controller.prototype, { 1931 initialize: function () { 1932 var e = this; 1933 return t.plugins.notify("beforeInit", [e]), e.bindEvents(), e.ensureScalesHaveIDs(), e.buildOrUpdateControllers(), e.buildScales(), e.updateLayout(), e.resetElements(), e.initToolTip(), e.update(
1933), t.plugins.notify("afterInit", [e]), e 1934 }, clear: function () { 1935 return r.clear(this.chart), this 1936 }, stop: function () { 1937 return t.animationService.cancelAnimation(this), this 1938 }, resize: function (e) { 1939 var a = this, i = a.chart, n = a.options, o = i.canvas, l = n.maintainAspectRatio && i.aspectRatio || null, s = Math.floor(r.getMaximumWidth(o)), d = Math.floor(l ? s / l : r.getMaximumHeight(o)); 1940 if (i.width !== s || i.height !== d) { 1941 o.width = i.width = s, o.height = i.height = d, o.style.width = s + "px", o.style.height = d + "px", r.retinaScale(i); 1942 var u = {width: s, height: d}; 1943 t.plugins.notify("resize", [a, u]), a.options.onResize && a.options.onResize(a, u), e || (a.stop(), a.update(a.options.responsiveAnimationDuration)) 1944 } 1945 }, ensureScalesHaveIDs: function () { 1946 var t = this.options, e = t.scales || {}, a = t.scale; 1947 r.each(e.xAxes, function (t, e) { 1948 t.id = t.id || "x-axis-" + e 1949 }), r.each(e.yAxes, function (t, e) { 1950 t.id = t.id || "y-axis-" + e 1951 }), a && (a.id = a.id || "scale") 1952 }, buildScales: function () { 1953 var e = this, a = e.options, i = e.scales = {}, n = []; 1954 a.scales && (n = n.concat((a.scales.xAxes || []).map(function (t) { 1955 return {options: t, dtype: "category"} 1956 }), (a.scales.yAxes || []).map(function (t) { 1957 return {options: t, dtype: "linear"} 1958 }))), a.scale && n.push({ 1959 options: a.scale, 1960 dtype: "radialLinear", 1961 isDefault: !0 1962 }), r.each(n, function (a) { 1963 var n = a.options, o = r.getValueOrDefault(n.type, a.dtype), l = t.scaleService.getScaleConstructor(o); 1964 if (l) { 1965 var s = new l({id: n.id, options: n, ctx: e.chart.ctx, chart: e}); 1966 i[s.id] = s, a.isDefault && (e.scale = s) 1967 } 1968 }), t.scaleService.addScalesToLayout(this) 1969 }, updateLayout: function () { 1970 t.layoutService.update(this, this.chart.width, this.chart.height) 1971 }, buildOrUpdateControllers: function () { 1972 var e = this, a = [], i = []; 1973 if (r.each(e.data.datasets, function (n, o) { 1974 var r = e.getDatasetMeta(o); 1975 r.type || (r.type = n.type || e.config.type), a.push(r.type), r.controller ? r.controller.updateIndex(o) : (r.controller = new t.controllers[r.type](e, o), i.push(r.controller)) 1976 }, e), a.length > 1)for (var n = 1; n < a.length; n++)if (a[n] !== a[n - 1]) { 1977 e.isCombo = !0; 1978 break 1979 } 1980 return i 1981 }, resetElements: function () { 1982 var t = this; 1983 r.each(t.data.datasets, function (e, a) { 1984 t.getDatasetMeta(a).controller.reset() 1985 }, t) 1986 }, reset: function () { 1987 this.resetElements(), this.tooltip.initialize() 1988 }, update: function (e, a) { 1989 var i = this; 1990 t.plugins.notify("beforeUpdate", [i]), i.tooltip._data = i.data; 1991 var n = i.buildOrUpdateControllers(); 1992 r.each(i.data.datasets, function (t, e) { 1993 i.getDatasetMeta(e).controller.buildOrUpdateElements() 1994 }, i), t.layoutService.update(i, i.chart.width, i.chart.height), t.plugins.notify("afterScaleUpdate", [i]), r.each(n, function (t) { 1995 t.reset() 1996 }), i.updateDatasets(), t.plugins.notify("afterUpdate", [i]), i._bufferedRender ? i._bufferedRequest = { 1997 lazy: a, 1998 duration: e 1999 } : i.render(e, a) 2000 }, updateDatasets: function () { 2001 var e, a, i = this; 2002 if (t.plugins.notify("beforeDatasetsUpdate", [i])) { 2003 for (e = 0, a = i.data.datasets.length; a > e;
2003 ++e)i.getDatasetMeta(e).controller.update(); 2004 t.plugins.notify("afterDatasetsUpdate", [i]) 2005 } 2006 }, render: function (e, a) { 2007 var i = this; 2008 t.plugins.notify("beforeRender", [i]); 2009 var n = i.options.animation; 2010 if (n && ("undefined" != typeof e && 0 !== e || "undefined" == typeof e && 0 !== n.duration)) { 2011 var o = new t.Animation; 2012 o.numSteps = (e || n.duration) / 16.66, o.easing = n.easing, o.render = function (t, e) { 2013 var a = r.easingEffects[e.easing], i = e.currentStep / e.numSteps, n = a(i); 2014 t.draw(n, i, e.currentStep) 2015 }, o.onAnimationProgress = n.onProgress, o.onAnimationComplete = n.onComplete, t.animationService.addAnimation(i, o, e, a) 2016 } else i.draw(), n && n.onComplete && n.onComplete.call && n.onComplete.call(i); 2017 return i 2018 }, draw: function (e) { 2019 var a = this, i = e || 1; 2020 a.clear(), t.plugins.notify("beforeDraw", [a, i]), r.each(a.boxes, function (t) { 2021 t.draw(a.chartArea) 2022 }, a), a.scale && a.scale.draw(), t.plugins.notify("beforeDatasetsDraw", [a, i]), r.each(a.data.datasets, function (t, i) { 2023 a.isDatasetVisible(i) && a.getDatasetMeta(i).controller.draw(e) 2024 }, a, !0), t.plugins.notify("afterDatasetsDraw", [a, i]), a.tooltip.transition(i).draw(), t.plugins.notify("afterDraw", [a, i]) 2025 }, getElementAtEvent: function (e) { 2026 return t.Interaction.modes.single(this, e) 2027 }, getElementsAtEvent: function (e) { 2028 return t.Interaction.modes.label(this, e, {intersect: !0}) 2029 }, getElementsAtXAxis: function (e) { 2030 return t.Interaction.modes["x-axis"](this, e, {intersect: !0}) 2031 }, getElementsAtEventForMode: function (e, a, i) { 2032 var n = t.Interaction.modes[a]; 2033 return "function" == typeof n ? n(this, e, i) : [] 2034 }, getDatasetAtEvent: function (e) { 2035 return t.Interaction.modes.dataset(this, e) 2036 }, getDatasetMeta: function (t) { 2037 var e = this, a = e.data.datasets[t]; 2038 a._meta || (a._meta = {}); 2039 var i = a._meta[e.id]; 2040 return i || (i = a._meta[e.id] = { 2041 type: null, 2042 data: [], 2043 dataset: null, 2044 controller: null, 2045 hidden: null, 2046 xAxisID: null, 2047 yAxisID: null 2048 }), i 2049 }, getVisibleDatasetCount: function () { 2050 for (var t = 0, e = 0, a = this.data.datasets.length; a > e; ++e)this.isDatasetVisible(e) && t++; 2051 return t 2052 }, isDatasetVisible: function (t) { 2053 var e = this.getDatasetMeta(t); 2054 return "boolean" == typeof e.hidden ? !e.hidden : !this.data.datasets[t].hidden 2055 }, generateLegend: function () { 2056 return this.options.legendCallback(this) 2057 }, destroy: function () { 2058 var e, a, n, o = this, l = o.chart.canvas; 2059 for (o.stop(), a = 0, n = o.data.datasets.length; n > a; ++a)e = o.getDatasetMeta(a), e.controller && (e.controller.destroy(), e.controller = null); 2060 l && (r.unbindEvents(o, o.events), r.removeResizeListener(l.parentNode), r.clear(o.chart), i(l), o.chart.canvas = null, o.chart.ctx = null), t.plugins.notify("destroy", [o]), delete t.instances[o.id] 2061 }, toBase64Image: function () { 2062 return this.chart.canvas.toDataURL.apply(this.chart.canvas, arguments) 2063 }, initToolTip: function () { 2064 var e = this; 2065 e.tooltip = new t.Tooltip({ 2066 _chart: e.chart, 2067 _chartInstance: e, 2068 _data: e.data, 2069 _options: e.options.tooltips 2070 }, e), e.tooltip.initialize() 2071 }, bindEvents: function () { 2072 var t = this; 2073 r.bindEvents(t, t.options.events, function (e) { 2074 t.eventHandler(e) 2075 }) 2076 }, updateHoverStyle: function (t, e, a) { 2077 var i, n, o, r = a ? "setHoverStyle" : "removeHoverStyle"; 2078 for (n = 0, o = t.length; o > n; ++n)i = t[n], i && this.getDatasetMeta(i._datasetIndex).controller[r](i) 2079 }, eventHandler: function (t) { 2080 var e = this, a = e.legend, i = e.tooltip, n = e.options.hover; 2081 e._bufferedRender = !0, e._bufferedRequest = null; 2082 var o = e.handleEvent(t); 2083 o |= a && a.handleEvent(t), o |= i && i.handleEvent(t); 2084 var r = e._bufferedRequest; 2085 return r ? e.render(r.duration, r.lazy) : o && !e.animating && (e.stop(), e.render(n.animationDuration, !0)), e._bufferedRender = !1, e._bufferedRequest = null, e 2086 }, handleEvent: function (t) { 2087 var e = this, a = e.options || {}, i = a.hover, n = !1; 2088 return e.lastActive = e.lastActive || [], "mouseout" === t.type ? e.active = [] : e.active = e.getElementsAtEventForMode(t, i.mode, i), i.onHover && i.onHover.call(e, e.active), ("mouseup" === t.type || "click" === t.type) && a.onClick && a.onClick.call(e, t, e.active), e.lastActive.length && e.updateHoverStyle(e.lastActive, i.mode, !1), e.active.length && i.mode && e.updateHoverStyle(e.active, i.mode, !0), n = !r.arrayEquals(e.active, e.lastActive), e.lastActive = e.active, n 2089 } 2090 }) 2091 } 2092 }, {}], 24: [function (t, e, a) { 2093 "use strict"; 2094 e.exports = function (t) { 2095 function e(t, e) { 2096 return t._chartjs ? void t._chartjs.listeners.push(e) : (Object.defineProperty(t, "_chartjs", { 2097 configurable: !0, 2098 enumerable: !1, 2099 value: {listeners: [e]} 2100 }
2100), void n.forEach(function (e) { 2101 var a = "onData" + e.charAt(0).toUpperCase() + e.slice(1), n = t[e]; 2102 Object.defineProperty(t, e, { 2103 configurable: !0, enumerable: !1, value: function () { 2104 var e = Array.prototype.slice.call(arguments), o = n.apply(this, e); 2105 return i.each(t._chartjs.listeners, function (t) { 2106 "function" == typeof t[a] && t[a].apply(t, e) 2107 }), o 2108 } 2109 }) 2110 })) 2111 } 2112 2113 function a(t, e) { 2114 var a = t._chartjs; 2115 if (a) { 2116 var i = a.listeners, o = i.indexOf(e); 2117 -1 !== o && i.splice(o, 1), i.length > 0 || (n.forEach(function (e) { 2118 delete t[e] 2119 }), delete t._chartjs) 2120 } 2121 } 2122 2123 var i = t.helpers, n = ["push", "pop", "shift", "splice", "unshift"]; 2124 t.DatasetController = function (t, e) { 2125 this.initialize(t, e) 2126 }, i.extend(t.DatasetController.prototype, { 2127 datasetElementType: null, 2128 dataElementType: null, 2129 initialize: function (t, e) { 2130 var a = this; 2131 a.chart = t, a.index = e, a.linkScales(), a.addElements() 2132 }, 2133 updateIndex: function (t) { 2134 this.index = t 2135 }, 2136 linkScales: function () { 2137 var t = this, e = t.getMeta(), a = t.getDataset(); 2138 null === e.xAxisID && (e.xAxisID = a.xAxisID || t.chart.options.scales.xAxes[0].id), null === e.yAxisID && (e.yAxisID = a.yAxisID || t.chart.options.scales.yAxes[0].id) 2139 }, 2140 getDataset: function () { 2141 return this.chart.data.datasets[this.index] 2142 }, 2143 getMeta: function () { 2144 return this.chart.getDatasetMeta(this.index) 2145 }, 2146 getScaleForId: function (t) { 2147 return this.chart.scales[t] 2148 }, 2149 reset: function () { 2150 this.update(!0) 2151 }, 2152 destroy: function () { 2153 this._data && a(this._data, this) 2154 }, 2155 createMetaDataset: function () { 2156 var t = this, e = t.datasetElementType; 2157 return e && new e({_chart: t.chart.chart, _datasetIndex: t.index}) 2158 }, 2159 createMetaData: function (t) { 2160 var e = this, a = e.dataElementType; 2161 return a && new a({_chart: e.chart.chart, _datasetIndex: e.index, _index: t}) 2162 }, 2163 addElements: function () { 2164 var t, e, a = this, i = a.getMeta(), n = a.getDataset().data || [], o = i.data; 2165 for (t = 0, e = n.length; e > t; ++t)o[t] = o[t] || a.createMetaData(t); 2166 i.dataset = i.dataset || a.createMetaDataset() 2167 }, 2168 addElementAndReset: function (t) { 2169 var e = this.createMetaData(t); 2170 this.getMeta().data.splice(t, 0, e), this.updateElement(e, t, !0) 2171 }, 2172 buildOrUpdateElements: function () { 2173 var t = this, i = t.getDataset(), n = i.data || (i.data = []); 2174 t._data !== n && (t._data && a(t._data, t), e(n, t), t._data = n), t.resyncElements() 2175 }, 2176 update: i.noop, 2177 draw: function (t) { 2178 var e, a, i = t || 1, n = this.getMeta().data; 2179 for (e = 0, a = n.length; a > e; ++e)n[e].transition(i).draw() 2180 }, 2181 removeHoverStyle: function (t, e) { 2182 var a = this.chart.data.datasets[t._datasetIndex], n = t._index, o = t.custom || {}, r = i.getValueAtIndexOrDefault, l = t._model; 2183 l.backgroundColor = o.backgroundColor ? o.backgroundColor : r(a.backgroundColor, n, e.backgroundColor), l.borderColor = o.borderColor ? o.borderColor : r(a.borderColor, n, e.borderColor), l.borderWidth = o.borderWidth ? o.borderWidth : r(a.borderWidth, n, e.borderWidth) 2184 }, 2185 setHoverStyle: function (t) { 2186 var e = this.chart.data.datasets[t._datasetIndex], a = t._index, n = t.custom || {}, o = i.getValueAtIndexOrDefault, r = i.getHoverColor, l = t._model;
2187 l.backgroundColor = n.hoverBackgroundColor ? n.hoverBackgroundColor : o(e.hoverBackgroundColor, a, r(l.backgroundColor)), l.borderColor = n.hoverBorderColor ? n.hoverBorderColor : o(e.hoverBorderColor, a, r(l.borderColor)), l.borderWidth = n.hoverBorderWidth ? n.hoverBorderWidth : o(e.hoverBorderWidth, a, l.borderWidth) 2188 }, 2189 resyncElements: function () { 2190 var t = this, e = t.getMeta(), a = t.getDataset().data, i = e.data.length, n = a.length; 2191 i > n ? e.data.splice(n, i - n) : n > i && t.insertElements(i, n - i) 2192 }, 2193 insertElements: function (t, e) { 2194 for (var a = 0; e > a; ++a)this.addElementAndReset(t + a) 2195 }, 2196 onDataPush: function () { 2197 this.insertElements(this.getDataset().data.length - 1, arguments.length) 2198 }, 2199 onDataPop: function () { 2200 this.getMeta().data.pop() 2201 }, 2202 onDataShift: function () { 2203 this.getMeta().data.shift() 2204 }, 2205 onDataSplice: function (t, e) { 2206 this.getMeta().data.splice(t, e), this.insertElements(t, arguments.length - 2) 2207 }, 2208 onDataUnshift: function () { 2209 this.insertElements(0, arguments.length) 2210 } 2211 }), t.DatasetController.extend = i.inherits 2212 } 2213 }, {}], 25: [function (t, e, a) { 2214 "use strict"; 2215 e.exports = function (t) { 2216 var e = t.helpers; 2217 t.elements = {}, t.Element = function (t) { 2218 e.extend(this, t), this.initialize.apply(this, arguments) 2219 }, e.extend(t.Element.prototype, { 2220 initialize: function () { 2221 this.hidden = !1 2222 }, pivot: function () { 2223 var t = this; 2224 return t._view || (t._view = e.clone(t._model)), t._start = e.clone(t._view), t 2225 }, transition: function (t) { 2226 var a = this; 2227 return a._view || (a._view = e.clone(a._model)), 1 === t ? (a._view = a._model, a._start = null, a) : (a._start || a.pivot(), e.each(a._model, function (i, n) { 2228 if ("_" === n[0]); else if (a._view.hasOwnProperty(n))if (i === a._view[n]); else if ("string" == typeof i)try { 2229 var o = e.color(a._model[n]).mix(e.color(a._start[n]), t); 2230 a._view[n] = o.rgbString() 2231 } catch (r) { 2232 a._view[n] = i 2233 } else if ("number" == typeof i) { 2234 var l = void 0 !== a._start[n] && isNaN(a._start[n]) === !1 ? a._start[n] : 0; 2235 a._view[n] = (a._model[n] - l) * t + l 2236 } else a._view[n] = i; else"number" != typeof i || isNaN(a._view[n]) ? a._view[n] = i : a._view[n] = i * t 2237 }, a), a) 2238 }, tooltipPosition: function () { 2239 return {x: this._model.x, y: this._model.y} 2240 }, hasValue: function () { 2241 return e.isNumber(this._model.x) && e.isNumber(this._model.y) 2242 } 2243 }), t.Element.extend = e.inherits 2244 } 2245 }, {}], 26: [function (t, e, a) { 2246 "use strict"; 2247 var i = t(3); 2248 e.exports = function (t) { 2249 function e(t, e, a) { 2250 var i; 2251 return "string" == typeof t ? (i = parseInt(t, 10), -1 !== t.indexOf("%") && (i = i / 100 * e.parentNode[a])) : i = t, i 2252 } 2253 2254 function a(t) { 2255 return void 0 !== t && null !== t && "none" !== t 2256 } 2257 2258 function n(t, i, n) { 2259 var o = document.defaultView, r = t.parentNode, l = o.getComputedStyle(t)[i], s = o.getComputedStyle(r)[i], d = a(l), u = a(s), c = Number.POSITIVE_INFINITY; 2260 return d || u ? Math.min(d ? e(l, t, n) : c, u ? e(s, r, n) : c) : "none" 2261 } 2262 2263 var o = t.helpers = {}; 2264 o.each = function (t, e, a, i) { 2265 var n, r; 2266 if (o.isArray(t))if (r = t.length, i)for (n = r - 1; n >= 0; n--)e.call(a, t[n], n); else for (n = 0; r > n; n++)e.call(a, t[n], n); else if ("object" == typeof t) { 2267 var l = Object.keys(t); 2268 for (r = l.length, n = 0; r > n; n++)e.call(a, t[l[n]], l[n]) 2269 } 2270 }, o.clone = function (t) { 2271 var e = {}; 2272 return o.each(t, function (t, a) { 2273 o.isArray(t) ? e[a] = t.slice(0) : "object" == typeof t && null !== t ? e[a] = o.clone(t) : e[a] = t 2274 }), e 2275 }, o.extend = function (t) { 2276 for (var e = function (e, a) { 2277 t[a] = e 2278 }, a = 1, i = arguments.length; i > a; a++)o.each(arguments[a], e); 2279 return t 2280 }, o.configMerge = function (e) { 2281 var a = o.clone(e); 2282 return o.each(Array.prototype.slice.call(arguments, 1), function (e) { 2283 o.each(e, function (e, i) { 2284 var n = a.hasOwnProperty(i), r = n ? a[i] : {}; 2285 "scales" === i ? a[i] = o.scaleMerge(r, e) : "scale" === i ? a[i] = o.configMerge(r, t.scaleService.getScaleDefaults(e.type), e) : !n || "object" != typeof r || o.isArray(r) || null === r || "object" != typeof e || o.isArray(e) ? a[i] = e : a[i] = o.configMerge(r, e) 2286 }) 2287 }), a 2288 }, o.scaleMerge = function (e, a) { 2289 var i = o.clone(e); 2290 return o.each(a, function (e, a) { 2291 "xAxes" === a || "yAxes" === a ? i.hasOwnProperty(a) ? o.each(e, function (e, n) { 2292 var r = o.getValueOrDefault(e.type, "xAxes" === a ? "category" : "linear"), l = t.scaleService.getScaleDefaults(r); 2293 n >= i[a].length || !i[a][n].type ? i[a].push(o.configMerge(l, e)) : e.type && e.type !== i[a][n].type ? i[a][n] = o.configMerge(i[a][n], l, e) : i[a][n] = o.configMerge(i[a][n], e) 2294 }) : (i[a] = [], o.each(e, function (e) { 2295 var n = o.getValueOrDefault(e.type, "xAxes" === a ? "category" : "linear"); 2296 i[a].push(o.configMerge(t.scaleService.getScaleDefaults(n), e)) 2297 })) : i.hasOwnProperty(a) && "object" == typeof i[a] && null !== i[a] && "object" == typeof e ? i[a] = o.configMerge(i[a], e) : i[a] = e 2298 }), i 2299 }, o.getValueAtIndexOrDefault = function (t, e, a) { 2300 return void 0 === t || null === t ? a : o.isArray(t) ? e < t.length ? t[e] : a : t 2301 }, o.getValueOrDefault = function (t, e) { 2302 return void 0 === t ? e : t 2303 }, o.indexOf = Array.prototype.indexOf ? function (t, e) { 2304 return t.indexOf(e) 2305 } : function (t, e) { 2306 for (var a = 0, i = t.length; i > a; ++a)if (t[a] === e)return a; 2307 return -1 2308 }, o.where = function (t, e) { 2309 if (o.isArray(t) && Array.prototype.filter)return t.filter(e); 2310 var a = []; 2311 return o.each(t, function (t) { 2312 e(t) && a.push(t) 2313 }), a 2314 }, o.findIndex = Array.prototype.findIndex ? function (t, e, a) { 2315 return t.findIndex(e, a) 2316 } : function (t, e, a) { 2317 a = void 0 === a ? t : a; 2318 for (var i = 0, n = t.length; n > i; ++i)if (e.call(a, t[i], i, t))return i; 2319 return -1 2320 }, o.findNextWhere = function (t, e, a) { 2321 (void 0 === a || null === a) && (a = -1); 2322 for (var i = a + 1; i < t.length; i++) { 2323 var n = t[i]; 2324 if (e(n))return n 2325 } 2326 }, o.findPreviousWhere = function (t, e, a) { 2327 (void 0 === a || null === a) && (a = t.length); 2328 for (var i = a - 1; i >= 0; i--) { 2329 var n = t[i]; 2330 if (e(n))return n 2331 } 2332 }, o.inherits = function (t) { 2333 var e = this, a = t && t.hasOwnProperty("constructor") ? t.constructor : function () { 2334 return e.apply(this, arguments) 2335 }, i = function () { 2336 this.constructor = a 2337 }; 2338 return i.prototype = e.prototype, a.prototype = new i, a.extend = o.inherits, t && o.extend(a.prototype, t), a.__super__ = e.prototype, a 2339 }, o.noop = function () { 2340 }, o.uid = function () { 2341 var t = 0; 2342 return function () { 2343 return t++ 2344 } 2345 }(), o.isNumber = function (t) { 2346 return !isNaN(parseFloat(t)) && isFinite(t) 2347 }, o.almostEquals = function (t, e, a) { 2348 return Math.abs(t - e) < a 2349 }, o.max = function (t) { 2350 return t.reduce(function (t, e) { 2351 return isNaN(e) ? t : Math.max(t, e) 2352 }, Number.NEGATIVE_INFINITY) 2353 }, o.min = function (t) { 2354 return t.reduce(function (t, e) { 2355 return isNaN(e) ? t : Math.min(t, e) 2356 }, Number.POSITIVE_INFINITY) 2357 }, o.sign = Math.sign ? function (t) { 2358 return Math.sign(t) 2359 } : function (t) { 2360 return t = +t, 0 === t || isNaN(t) ? t : t > 0 ? 1 : -1 2361 }, o.log10 = Math.log10 ? function (t) { 2362 return Math.log10(t) 2363 } : function (t) { 2364 return Math.log(t) / Math.LN10 2365 }, o.toRadians = function (t) { 2366 return t * (Math.PI / 180) 2367 }, o.toDegrees = function (t) { 2368 return t * (180 / Math.PI) 2369 }, o.getAngleFromPoint = function (t, e) {
2370 var a = e.x - t.x, i = e.y - t.y, n = Math.sqrt(a * a + i * i), o = Math.atan2(i, a); 2371 return o < -.5 * Math.PI && (o += 2 * Math.PI), {angle: o, distance: n} 2372 }, o.distanceBetweenPoints = function (t, e) { 2373 return Math.sqrt(Math.pow(e.x - t.x, 2) + Math.pow(e.y - t.y, 2)) 2374 }, o.aliasPixel = function (t) { 2375 return t % 2 === 0 ? 0 : .5 2376 }, o.splineCurve = function (t, e, a, i) { 2377 var n = t.skip ? e : t, o = e, r = a.skip ? e : a, l = Math.sqrt(Math.pow(o.x - n.x, 2) + Math.pow(o.y - n.y, 2)), s = Math.sqrt(Math.pow(r.x - o.x, 2) + Math.pow(r.y - o.y, 2)), d = l / (l + s), u = s / (l + s); 2378 d = isNaN(d) ? 0 : d, u = isNaN(u) ? 0 : u; 2379 var c = i * d, h = i * u; 2380 return { 2381 previous: {x: o.x - c * (r.x - n.x), y: o.y - c * (r.y - n.y)}, 2382 next: {x: o.x + h * (r.x - n.x), y: o.y + h * (r.y - n.y)} 2383 } 2384 }, o.EPSILON = Number.EPSILON || 1e-14, o.splineCurveMonotone = function (t) { 2385 var e, a, i, n, r = (t || []).map(function (t) { 2386 return {model: t._model, deltaK: 0, mK: 0} 2387 }), l = r.length; 2388 for (e = 0; l > e; ++e)i = r[e], i.model.skip || (a = e > 0 ? r[e - 1] : null, n = l - 1 > e ? r[e + 1] : null, n && !n.model.skip && (i.deltaK = (n.model.y - i.model.y) / (n.model.x - i.model.x)), !a || a.model.skip ? i.mK = i.deltaK : !n || n.model.skip ? i.mK = a.deltaK : this.sign(a.deltaK) !== this.sign(i.deltaK) ? i.mK = 0 : i.mK = (a.deltaK + i.deltaK) / 2); 2389 var s, d, u, c; 2390 for (e = 0; l - 1 > e; ++e)i = r[e], n = r[e + 1], i.model.skip || n.model.skip || (o.almostEquals(i.deltaK, 0, this.EPSILON) ? i.mK = n.mK = 0 : (s = i.mK / i.deltaK, d = n.mK / i.deltaK, c = Math.pow(s, 2) + Math.pow(d, 2), 9 >= c || (u = 3 / Math.sqrt(c), i.mK = s * u * i.deltaK, n.mK = d * u * i.deltaK))); 2391 var h; 2392 for (e = 0; l > e; ++e)i = r[e], i.model.skip || (a = e > 0 ? r[e - 1] : null, n = l - 1 > e ? r[e + 1] : null, a && !a.model.skip && (h = (i.model.x - a.model.x) / 3, i.model.controlPointPreviousX = i.model.x - h, i.model.controlPointPreviousY = i.model.y - h * i.mK), n && !n.model.skip && (h = (n.model.x - i.model.x) / 3, i.model.controlPointNextX = i.model.x + h, i.model.controlPointNextY = i.model.y + h * i.mK)) 2393 }, o.nextItem = function (t, e, a) { 2394 return a ? e >= t.length - 1 ? t[0] : t[e + 1] : e >= t.length - 1 ? t[t.length - 1] : t[e + 1] 2395 }, o.previousItem = function (t, e, a) { 2396 return a ? 0 >= e ? t[t.length - 1] : t[e - 1] : 0 >= e ? t[0] : t[e - 1] 2397 }, o.niceNum = function (t, e) { 2398 var a, i = Math.floor(o.log10(t)), n = t / Math.pow(10, i); 2399 return a = e ? 1.5 > n ? 1 : 3 > n ? 2 : 7 > n ? 5 : 10 : 1 >= n ? 1 : 2 >= n ? 2 : 5 >= n ? 5 : 10, a * Math.pow(10, i) 2400 }; 2401 var r = o.easingEffects = { 2402 linear: function (t) { 2403 return t 2404 }, easeInQuad: function (t) { 2405 return t * t 2406 }, easeOutQuad: function (t) { 2407 return -1 * t * (t - 2) 2408 }, easeInOutQuad: function (t) { 2409 return (t /= .5) < 1 ? .5 * t * t : -0.5 * (--t * (t - 2) - 1) 2410 }, easeInCubic: function (t) { 2411 return t * t * t 2412 }, easeOutCubic: function (t) { 2413 return 1 * ((t = t / 1 - 1) * t * t + 1) 2414 }, easeInOutCubic: function (t) { 2415 return (t /= .5) < 1 ? .5 * t * t * t : .5 * ((t -= 2) * t * t + 2) 2416 }, easeInQuart: function (t) { 2417 return t * t * t * t 2418 }, easeOutQuart: function (t) { 2419 return -1 * ((t = t / 1 - 1) * t * t * t - 1) 2420 }, easeInOutQuart: function (t) { 2421 return (t /= .5) < 1 ? .5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2) 2422 }, easeInQuint: function (t) { 2423 return 1 * (t /= 1) * t * t * t * t 2424 }, easeOutQuint: function (t) { 2425 return 1 * ((t = t / 1 - 1) * t * t * t * t + 1) 2426 }, easeInOutQuint: function (t) { 2427 return (t /= .5) < 1 ? .5 * t * t * t * t * t : .5 * ((t -= 2) * t * t * t * t + 2) 2428 }, easeInSine: function (t) { 2429 return -1 * Math.cos(t / 1 * (Math.PI / 2)) + 1 2430 }, easeOutSine: function (t) { 2431 return 1 * Math.sin(t / 1 * (Math.PI / 2)) 2432 }, easeInOutSine: function (t) { 2433 return -0.5 * (Math.cos(Math.PI * t / 1) - 1) 2434 }, easeInExpo: function (t) { 2435 return 0 === t ? 1 : 1 * Math.pow(2, 10 * (t / 1 - 1)) 2436 }, easeOutExpo: function (t) { 2437 return 1 === t ? 1 : 1 * (-Math.pow(2, -10 * t / 1) + 1) 2438 }, easeInOutExpo: function (t) { 2439 return 0 === t ? 0 : 1 === t ? 1 : (t /= .5) < 1 ? .5 * Math.pow(2, 10 * (t - 1)) : .5 * (-Math.pow(2, -10 * --t) + 2) 2440 }, easeInCirc: function (t) { 2441 return t >= 1 ? t : -1 * (Math.sqrt(1 - (t /= 1) * t) - 1) 2442 }, easeOutCirc: function (t) { 2443 return 1 * Math.sqrt(1 - (t = t / 1 - 1) * t) 2444 }, easeInOutCirc: function (t) { 2445 return (t /= .5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : .5 * (Math.sqrt(1 - (t -= 2) * t) + 1) 2446 }, easeInElastic: function (t) { 2447 var e = 1.70158, a = 0, i = 1; 2448 return 0 === t ? 0 : 1 === (t /= 1) ? 1 : (a || (a = .3), i < Math.abs(1) ? (i = 1, e = a / 4) : e = a / (2 * Math.PI) * Math.asin(1 / i), -(i * Math.pow(2, 10 * (t -= 1)) * Math.sin((1 * t - e) * (2 * Math.PI) / a))) 2449 }, easeOutElastic: function (t) { 2450 var e = 1.70158, a = 0, i = 1; 2451 return 0 === t ? 0 : 1 === (t /= 1) ? 1 : (a || (a = .3), i < Math.abs(1) ? (i = 1, e = a / 4) : e = a / (2 * Math.PI) * Math.asin(1 / i), i * Math.pow(2, -10 * t) * Math.sin((1 * t - e) * (2 * Math.PI) / a) + 1) 2452 }, easeInOutElastic: function (t) { 2453 var e = 1.70158, a = 0, i = 1; 2454 return 0 === t ? 0 : 2 === (t /= .5) ? 1 : (a || (a = 1 * (.3 * 1.5)), i < Math.abs(1) ? (i = 1, e = a / 4) : e = a / (2 * Math.PI) * Math.asin(1 / i), 1 > t ? -.5 * (i * Math.pow(2, 10 * (t -= 1)) * Math.sin((1 * t - e) * (2 * Math.PI) / a)) : i * Math.pow(2, -10 * (t -= 1)) * Math.sin((1 * t - e) * (2 * Math.PI) / a) * .5 + 1) 2455 }, easeInBack: function (t) { 2456 var e = 1.70158; 2457 return 1 * (t /= 1) * t * ((e + 1) * t - e) 2458 }, easeOutBack: function (t) { 2459 var e = 1.70158; 2460 return 1 * ((t = t / 1 - 1) * t * ((e + 1) * t + e) + 1) 2461 }, easeInOutBack: function (t) { 2462 var e = 1.70158; 2463 return (t /= .5) < 1 ? .5 * (t * t * (((e *= 1.525) + 1) * t - e)) : .5 * ((t -= 2) * t * (((e *= 1.525) + 1) * t + e) + 2) 2464 }, easeInBounce: function (t) { 2465 return 1 - r.easeOutBounce(1 - t) 2466 }, easeOutBounce: function (t) { 2467 return (t /= 1) < 1 / 2.75 ? 1 * (7.5625 * t * t) : 2 / 2.75 > t ? 1 * (7.5625 * (t -= 1.5 / 2.75) * t + .75) : 2.5 / 2.75 > t ? 1 * (7.5625 * (t -= 2.25 / 2.75) * t + .9375) : 1 * (7.5625 * (t -= 2.625 / 2.75) * t + .984375) 2468 }, easeInOutBounce: function (t) { 2469 return .5 > t ? .5 * r.easeInBounce(2 * t) : .5 * r.easeOutBounce(2 * t - 1) + .5 2470 } 2471 }; 2472 o.requestAnimFrame = function () { 2473 return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (t) { 2474 return window.setTimeout(t, 1e3 / 60) 2475 } 2476 }(), o.cancelAnimFrame = function () { 2477 return window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || window.msCancelAnimationFrame || function (t) { 2478 return window.clearTimeout(t, 1e3 / 60) 2479 } 2480 }(), o.getRelativePosition = function (t, e) { 2481 var a, i, n = t.originalEvent || t, r = t.currentTarget || t.srcElement, l = r.getBoundingClientRect(), s = n.touches; 2482 s && s.length > 0 ? (a = s[0].clientX, i = s[0].clientY) : (a = n.clientX, i = n.clientY); 2483 var d = parseFloat(o.getStyle(r, "padding-left")), u = parseFloat(o.getStyle(r, "padding-top")), c = parseFloat(o.getStyle(r, "padding-right")), h = parseFloat(o.getStyle(r, "padding-bottom")), f = l.right - l.left - d - c, g = l.bottom - l.top - u - h; 2484 return a = Math.round((a - l.left - d) / f * r.width / e.currentDevicePixelRatio), i = Math.round((i - l.top - u) / g * r.height / e.currentDevicePixelRatio), { 2485 x: a, 2486 y: i 2487 } 2488 }, o.addEvent = function (t, e, a) { 2489 t.addEventListener ? t.addEventListener(e, a) : t.attachEvent ? t.attachEvent("on" + e, a) : t["on" + e] = a 2490 }, o.removeEvent = function (t, e, a) { 2491 t.removeEventListener ? t.removeEventListener(e, a, !1) : t.detachEvent ? t.detachEvent("on" + e, a) : t["on" + e] = o.no
2491op 2492 }, o.bindEvents = function (t, e, a) { 2493 var i = t.events = t.events || {}; 2494 o.each(e, function (e) { 2495 i[e] = function () { 2496 a.apply(t, arguments) 2497 }, o.addEvent(t.chart.canvas, e, i[e]) 2498 }) 2499 }, o.unbindEvents = function (t, e) { 2500 var a = t.chart.canvas; 2501 o.each(e, function (t, e) { 2502 o.removeEvent(a, e, t) 2503 }) 2504 }, o.getConstraintWidth = function (t) { 2505 return n(t, "max-width", "clientWidth") 2506 }, o.getConstraintHeight = function (t) { 2507 return n(t, "max-height", "clientHeight") 2508 }, o.getMaximumWidth = function (t) { 2509 var e = t.parentNode, a = parseInt(o.getStyle(e, "padding-left"), 10), i = parseInt(o.getStyle(e, "padding-right"), 10), n = e.clientWidth - a - i, r = o.getConstraintWidth(t); 2510 return isNaN(r) ? n : Math.min(n, r) 2511 }, o.getMaximumHeight = function (t) { 2512 var e = t.parentNode, a = parseInt(o.getStyle(e, "padding-top"), 10), i = parseInt(o.getStyle(e, "padding-bottom"), 10), n = e.clientHeight - a - i, r = o.getConstraintHeight(t); 2513 return isNaN(r) ? n : Math.min(n, r) 2514 }, o.getStyle = function (t, e) { 2515 return t.currentStyle ? t.currentStyle[e] : document.defaultView.getComputedStyle(t, null).getPropertyValue(e) 2516 }, o.retinaScale = function (t) { 2517 var e = t.currentDevicePixelRatio = window.devicePixelRatio || 1; 2518 if (1 !== e) { 2519 var a = t.canvas, i = t.height, n = t.width; 2520 a.height = i * e, a.width = n * e, t.ctx.scale(e, e), a.style.height = i + "px", a.style.width = n + "px" 2521 } 2522 }, o.clear = function (t) { 2523 t.ctx.clearRect(0, 0, t.width, t.height) 2524 }, o.fontString = function (t, e, a) { 2525 return e + " " + t + "px " + a 2526 }, o.longestText = function (t, e, a, i) { 2527 i = i || {}; 2528 var n = i.data = i.data || {}, r = i.garbageCollect = i.garbageCollect || []; 2529 i.font !== e && (n = i.data = {}, r = i.garbageCollect = [], i.font = e), t.font = e; 2530 var l = 0; 2531 o.each(a, function (e) { 2532 void 0 !== e && null !== e && o.isArray(e) !== !0 ? l = o.measureText(t, n, r, l, e) : o.isArray(e) && o.each(e, function (e) { 2533 void 0 === e || null === e || o.isArray(e) || (l = o.measureText(t, n, r, l, e)) 2534 }) 2535 }); 2536 var s = r.length / 2; 2537 if (s > a.length) { 2538 for (var d = 0; s > d; d++)delete n[r[d]]; 2539 r.splice(0, s) 2540 } 2541 return l 2542 }, o.measureText = function (t, e, a, i, n) { 2543 var o = e[n]; 2544 return o || (o = e[n] = t.measureText(n).width, a.push(n)), o > i && (i = o), i 2545 }, o.numberOfLabelLines = function (t) { 2546 var e = 1; 2547 return o.each(t, function (t) { 2548 o.isArray(t) && t.length > e && (e = t.length) 2549 }), e 2550 }, o.drawRoundedRectangle = function (t, e, a, i, n, o) { 2551 t.beginPath(), t.moveTo(e + o, a), t.lineTo(e + i - o, a), t.quadraticCurveTo(e + i, a, e + i, a + o), t.lineTo(e + i, a + n - o), t.quadraticCurveTo(e + i, a + n, e + i - o, a + n), t.lineTo(e + o, a + n), t.quadraticCurveTo(e, a + n, e, a + n - o), t.lineTo(e, a + o), t.quadraticCurveTo(e, a, e + o, a), t.closePath() 2552 }, o.color = function (e) { 2553 return i ? i(e instanceof CanvasGradient ? t.defaults.global.defaultColor : e) : (console.error("Color.js not found!"), e) 2554 }, o.addResizeListener = function (t, e) { 2555 var a = document.createElement("iframe"); 2556 a.className = "chartjs-hidden-iframe", a.style.cssText = "display:block;overflow:hidden;border:0;margin:0;top:0;left:0;bottom:0;right:0;height:100%;width:100%;position:absolute;pointer-events:none;z-index:-1;", a.tabIndex = -1; 2557 var i = t._chartjs = {resizer: a, ticking: !1}, n = function () { 2558 i.ticking || (i.ticking = !0, o.requestAnimFrame.call(window, function () { 2559 return i.resizer ? (i.ticking = !1, e()) : void 0 2560 })) 2561 }; 2562 o.addEvent(a, "load", function () { 2563 o.addEvent(a.contentWindow || a, "resize", n), n() 2564 }), t.insertBefore(a, t.firstChild) 2565 }, o.removeResizeListener = function (t) { 2566 if (t && t._chartjs) { 2567 var e = t._chartjs.resizer; 2568 e && (e.parentNode.removeChild(e), t._chartjs.resizer = null), delete t._chartjs 2569 } 2570 }, o.isArray = Array.isArray ? function (t) { 2571 return Array.isArray(t) 2572 } : function (t) { 2573 return "[object Array]" === Object.prototype.toString.call(t) 2574 }, o.arrayEquals = function (t, e) { 2575 var a, i, n, r; 2576 if (!t || !e || t.length !== e.length)return !1; 2577 for (a = 0, i = t.length; i > a; ++a)if (n = t[a], r = e[a], n instanceof Array && r instanceof Array) { 2578 if (!o.arrayEquals(n, r))return !1 2579 } else if (n !== r)return !1; 2580 return !0 2581 }
2581, o.callCallback = function (t, e, a) { 2582 t && "function" == typeof t.call && t.apply(a, e) 2583 }, o.getHoverColor = function (t) { 2584 return t instanceof CanvasPattern ? t : o.color(t).saturate(.5).darken(.1).rgbString() 2585 } 2586 } 2587 }, {3: 3}], 27: [function (t, e, a) { 2588 "use strict"; 2589 e.exports = function (t) { 2590 function e(t, e) { 2591 var a, i, n, o, r, l = t.data.datasets; 2592 for (i = 0, o = l.length; o > i; ++i)if (t.isDatasetVisible(i))for (a = t.getDatasetMeta(i), n = 0, r = a.data.length; r > n; ++n) { 2593 var s = a.data[n]; 2594 s._view.skip || e(s) 2595 } 2596 } 2597 2598 function a(t, a) { 2599 var i = []; 2600 return e(t, function (t) { 2601 t.inRange(a.x, a.y) && i.push(t) 2602 }), i 2603 } 2604 2605 function i(t, a, i, n) { 2606 var r = Number.POSITIVE_INFINITY, l = []; 2607 return n || (n = o.distanceBetweenPoints), e(t, function (t) { 2608 if (!i || t.inRange(a.x, a.y)) { 2609 var e = t.getCenterPoint(), o = n(a, e); 2610 r > o ? (l = [t], r = o) : o === r && l.push(t) 2611 } 2612 }), l 2613 } 2614 2615 function n(t, e, n) { 2616 var r = o.getRelativePosition(e, t.chart), l = function (t, e) { 2617 return Math.abs(t.x - e.x) 2618 }, s = n.intersect ? a(t, r) : i(t, r, !1, l), d = []; 2619 return s.length ? (t.data.datasets.forEach(function (e, a) { 2620 if (t.isDatasetVisible(a)) { 2621 var i = t.getDatasetMeta(a), n = i.data[s[0]._index]; 2622 n && !n._view.skip && d.push(n) 2623 } 2624 }), d) : [] 2625 } 2626 2627 var o = t.helpers; 2628 t.Interaction = { 2629 modes: { 2630 single: function (t, a) { 2631 var i = o.getRelativePosition(a, t.chart), n = []; 2632 return e(t, function (t) { 2633 return t.inRange(i.x, i.y) ? (n.push(t), n) : void 0 2634 }), n.slice(0, 1) 2635 }, label: n, index: n, dataset: function (t, e, n) { 2636 var r = o.getRelativePosition(e, t.chart), l = n.intersect ? a(t, r) : i(t, r, !1); 2637 return l.length > 0 && (l = t.getDatasetMeta(l[0]._datasetIndex).data), l 2638 }, "x-axis": function (t, e) { 2639 return n(t, e, !0) 2640 }, point: function (t, e) { 2641 var i = o.getRelativePosition(e, t.chart); 2642 return a(t, i) 2643 }, nearest: function (t, e, a) { 2644 var n = o.getRelativePosition(e, t.chart), r = i(t, n, a.intersect); 2645 return r.length > 1 && r.sort(function (t, e) { 2646 var a = t.getArea(), i = e.getArea(), n = a - i; 2647 return 0 === n && (n = t._datasetIndex - e._datasetIndex), n 2648 }), r.slice(0, 1) 2649 }, x: function (t, a, i) { 2650 var n = o.getRelativePosition(a, t.chart), r = [], l = !1; 2651 return e(t, function (t) { 2652 t.inXRange(n.x) && r.push(t), t.inRange(n.x, n.y) && (l = !0) 2653 }), i.intersect && !l && (r = []), r 2654 }, y: function (t, a, i) { 2655 var n = o.getRelativePosition(a, t.chart), r = [], l = !1; 2656 return e(t, function (t) { 2657 t.inYRange(n.y) && r.push(t), t.inRange(n.x, n.y) && (l = !0) 2658 }), i.intersect && !l && (r = []), r 2659 } 2660 } 2661 } 2662 } 2663 }, {}], 28: [function (t, e, a) { 2664 "use strict"; 2665 e.exports = function () { 2666 var t = function (e, a) { 2667 return this.controller = new t.Controller(e, a, this), this.controller 2668 }; 2669 return t.defaults = { 2670 global: { 2671 responsive: !0, 2672 responsiveAnimationDuration: 0, 2673 maintainAspectRatio: !0, 2674 events: ["mousemove", "mouseout", "click", "touchstart", "touchmove"], 2675 hover: {onHover: null, mode: "nearest", intersect: !0, animationDuration: 400}, 2676 onClick: null, 2677 defaultColor: "rgba(0,0,0,0.1)", 2678 defaultFontColor: "#666", 2679 defaultFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif", 2680 defaultFontSize: 12, 2681 defaultFontStyle: "normal", 2682 showLines: !0, 2683 elements: {}, 2684 legendCallback: function (t) { 2685 var e = []; 2686 e.push('<ul class="' + t.id + '-legend">'); 2687 for (var a = 0; a < t.data.datasets.length;
2687 a++)e.push('<li><span style="background-color:' + t.data.datasets[a].backgroundColor + '"></span>'), t.data.datasets[a].label && e.push(t.data.datasets[a].label), e.push("</li>"); 2688 return e.push("</ul>"), e.join("") 2689 } 2690 } 2691 }, t.Chart = t, t 2692 } 2693 }, {}], 29: [function (t, e, a) { 2694 "use strict"; 2695 e.exports = function (t) { 2696 var e = t.helpers; 2697 t.layoutService = { 2698 defaults: {}, addBox: function (t, e) { 2699 t.boxes || (t.boxes = []), t.boxes.push(e) 2700 }, removeBox: function (t, e) { 2701 t.boxes && t.boxes.splice(t.boxes.indexOf(e), 1) 2702 }, update: function (t, a, i) { 2703 function n(t) { 2704 var e, a = t.isHorizontal(); 2705 a ? (e = t.update(t.options.fullWidth ? x : C, M), D -= e.height) : (e = t.update(w, S), C -= e.width), I.push({ 2706 horizontal: a, 2707 minSize: e, 2708 box: t 2709 }) 2710 } 2711 2712 function o(t) { 2713 var a = e.findNextWhere(I, function (e) { 2714 return e.box === t 2715 }); 2716 if (a)if (t.isHorizontal()) { 2717 var i = {left: A, right: T, top: 0, bottom: 0}; 2718 t.update(t.options.fullWidth ? x : C, y / 2, i) 2719 } else t.update(a.minSize.width, D) 2720 } 2721 2722 function r(t) { 2723 var a = e.findNextWhere(I, function (e) { 2724 return e.box === t 2725 }), i = {left: 0, right: 0, top: P, bottom: F}; 2726 a && t.update(a.minSize.width, D, i) 2727 } 2728 2729 function l(t) { 2730 t.isHorizontal() ? (t.left = t.options.fullWidth ? u : A, t.right = t.options.fullWidth ? a - c : A + C, t.top = L, t.bottom = L + t.height, L = t.bottom) : (t.left = V, t.right = V + t.width, t.top = P, t.bottom = P + D, V = t.right) 2731 } 2732 2733 if (t) { 2734 var s = t.options.layout, d = s ? s.padding : null, u = 0, c = 0, h = 0, f = 0; 2735 isNaN(d) ? (u = d.left || 0, c = d.right || 0, h = d.top || 0, f = d.bottom || 0) : (u = d, c = d, h = d, f = d); 2736 var g = e.where(t.boxes, function (t) { 2737 return "left" === t.options.position 2738 }), p = e.where(t.boxes, function (t) { 2739 return "right" === t.options.position 2740 }), m = e.where(t.boxes, function (t) { 2741 return "top" === t.options.position 2742 }), b = e.where(t.boxes, function (t) { 2743 return "bottom" === t.options.position 2744 }), v = e.where(t.boxes, function (t) { 2745 return "chartArea" === t.options.position 2746 }); 2747 m.sort(function (t, e) { 2748 return (e.options.fullWidth ? 1 : 0) - (t.options.fullWidth ? 1 : 0) 2749 }), b.sort(function (t, e) { 2750 return (t.options.fullWidth ? 1 : 0) - (e.options.fullWidth ? 1 : 0) 2751 }); 2752 var x = a - u - c, y = i - h - f, k = x / 2, S = y / 2, w = (a - k) / (g.length + p.length), M = (i - S) / (m.length + b.length), C = x, D = y, I = []; 2753 e.each(g.concat(p, m, b), n); 2754 var A = u, T = c, P = h, F = f; 2755 e.each(g.concat(p), o), e.each(g, function (t) { 2756 A += t.width 2757 }), e.each(p, function (t) { 2758 T += t.width 2759 }), e.each(m.concat(b), o), e.each(m, function (t) {
2760 P += t.height 2761 }), e.each(b, function (t) { 2762 F += t.height 2763 }), e.each(g.concat(p), r), A = u, T = c, P = h, F = f, e.each(g, function (t) { 2764 A += t.width 2765 }), e.each(p, function (t) { 2766 T += t.width 2767 }), e.each(m, function (t) { 2768 P += t.height 2769 }), e.each(b, function (t) { 2770 F += t.height 2771 }); 2772 var _ = i - P - F, R = a - A - T; 2773 (R !== C || _ !== D) && (e.each(g, function (t) { 2774 t.height = _ 2775 }), e.each(p, function (t) { 2776 t.height = _ 2777 }), e.each(m, function (t) { 2778 t.options.fullWidth || (t.width = R) 2779 }), e.each(b, function (t) { 2780 t.options.fullWidth || (t.width = R) 2781 }), D = _, C = R); 2782 var V = u, L = h; 2783 e.each(g.concat(m), l), V += C, L += D, e.each(p, l), e.each(b, l), t.chartArea = { 2784 left: A, 2785 top: P, 2786 right: A + C, 2787 bottom: P + D 2788 }, e.each(v, function (e) { 2789 e.left = t.chartArea.left, e.top = t.chartArea.top, e.right = t.chartArea.right, e.bottom = t.chartArea.bottom, e.update(C, D) 2790 }) 2791 } 2792 } 2793 } 2794 } 2795 }, {}], 30: [function (t, e, a) { 2796 "use strict"; 2797 e.exports = function (t) { 2798 function e(t, e) { 2799 return t.usePointStyle ? e * Math.SQRT2 : t.boxWidth 2800 } 2801 2802 var a = t.helpers, i = a.noop; 2803 t.defaults.global.legend = { 2804 display: !0, 2805 position: "top", 2806 fullWidth: !0, 2807 reverse: !1, 2808 onClick: function (t, e) { 2809 var a = e.datasetIndex, i = this.chart, n = i.getDatasetMeta(a); 2810 n.hidden = null === n.hidden ? !i.data.datasets[a].hidden : null, i.update() 2811 }, 2812 onHover: null, 2813 labels: { 2814 boxWidth: 40, padding: 10, generateLabels: function (t) { 2815 var e = t.data; 2816 return a.isArray(e.datasets) ? e.datasets.map(function (e, i) { 2817 return { 2818 text: e.label, 2819 fillStyle: a.isArray(e.backgroundColor) ? e.backgroundColor[0] : e.backgroundColor, 2820 hidden: !t.isDatasetVisible(i), 2821 lineCap: e.borderCapStyle, 2822 lineDash: e.borderDash, 2823 lineDashOffset: e.borderDashOffset, 2824 lineJoin: e.borderJoinStyle, 2825 lineWidth: e.borderWidth, 2826 strokeStyle: e.borderColor, 2827 pointStyle: e.pointStyle, 2828 datasetIndex: i 2829 } 2830 }, this) : [] 2831 } 2832 } 2833 }, t.Legend = t.Element.extend({ 2834 initialize: function (t) { 2835 a.extend(this, t), this.legendHitBoxes = [], this.doughnutMode = !1 2836 }, beforeUpdate: i, update: function (t, e, a) { 2837 var i = this; 2838 return i.beforeUpdate(), i.maxWidth = t, i.maxHeight = e, i.margins = a, i.beforeSetDimensions(), i.setDimensions(), i.afterSetDimensions(), i.beforeBuildLabels(), i.buildLabels(), i.afterBuildLabels(), i.beforeFit(), i.fit(), i.afterFit(), i.afterUpdate(), i.minSize 2839 }, afterUpdate: i, beforeSetDimensions: i, setDimensions: function () { 2840 var t = this; 2841 t.isHorizontal() ? (t.width = t.maxWidth, t.left = 0, t.right = t.width) : (t.height = t.maxHeight, t.top = 0, t.bottom = t.height), t.paddingLeft = 0, t.paddingTop = 0, t.paddingRight = 0, t.paddingBottom = 0, t.minSize = { 2842 width: 0, 2843 height: 0 2844 } 2845 }, afterSetDimensions: i, beforeBuildLabels: i, buildLabels: function () { 2846 var t = this; 2847 t.legendItems = t.options.labels.generateLabels.call(t, t.chart), t.options.reverse && t.legendItems.reverse() 2848 }, afterBuildLabels: i, beforeFit: i, fit: function () { 2849 var i = this, n = i.options, o = n.labels, r = n.display, l = i.ctx, s = t.defaults.global, d = a.getValueOrDefault, u = d(o.fontSize, s.defaultFontSize), c = d(o.fontStyle, s.defaultFontStyle), h = d(o.fontFamily, s.defaultFontFamily), f = a.fontString(u, c, h), g = i.legendHitBoxes = [], p
2849= i.minSize, m = i.isHorizontal(); 2850 if (m ? (p.width = i.maxWidth, p.height = r ? 10 : 0) : (p.width = r ? 10 : 0, p.height = i.maxHeight), r)if (l.font = f, m) { 2851 var b = i.lineWidths = [0], v = i.legendItems.length ? u + o.padding : 0; 2852 l.textAlign = "left", l.textBaseline = "top", a.each(i.legendItems, function (t, a) { 2853 var n = e(o, u), r = n + u / 2 + l.measureText(t.text).width; 2854 b[b.length - 1] + r + o.padding >= i.width && (v += u + o.padding, b[b.length] = i.left), g[a] = { 2855 left: 0, 2856 top: 0, 2857 width: r, 2858 height: u 2859 }, b[b.length - 1] += r + o.padding 2860 }), p.height += v 2861 } else { 2862 var x = o.padding, y = i.columnWidths = [], k = o.padding, S = 0, w = 0, M = u + x; 2863 a.each(i.legendItems, function (t, a) { 2864 var i = e(o, u), n = i + u / 2 + l.measureText(t.text).width; 2865 w + M > p.height && (k += S + o.padding, y.push(S), S = 0, w = 0), S = Math.max(S, n), w += M, g[a] = { 2866 left: 0, 2867 top: 0, 2868 width: n, 2869 height: u 2870 } 2871 }), k += S, y.push(S), p.width += k 2872 } 2873 i.width = p.width, i.height = p.height 2874 }, afterFit: i, isHorizontal: function () { 2875 return "top" === this.options.position || "bottom" === this.options.position 2876 }, draw: function () { 2877 var i = this, n = i.options, o = n.labels, r = t.defaults.global, l = r.elements.line, s = i.width, d = i.lineWidths; 2878 if (n.display) { 2879 var u, c = i.ctx, h = a.getValueOrDefault, f = h(o.fontColor, r.defaultFontColor), g = h(o.fontSize, r.defaultFontSize), p = h(o.fontStyle, r.defaultFontStyle), m = h(o.fontFamily, r.defaultFontFamily), b = a.fontString(g, p, m); 2880 c.textAlign = "left", c.textBaseline = "top", c.lineWidth = .5, c.strokeStyle = f, c.fillStyle = f, c.font = b; 2881 var v = e(o, g), x = i.legendHitBoxes, y = function (e, a, i) { 2882 if (!(isNaN(v) || 0 >= v)) { 2883 c.save(), c.fillStyle = h(i.fillStyle, r.defaultColor), c.lineCap = h(i.lineCap, l.borderCapStyle), c.lineDashOffset = h(i.lineDashOffset, l.borderDashOffset), c.lineJoin = h(i.lineJoin, l.borderJoinStyle), c.lineWidth = h(i.lineWidth, l.borderWidth), c.strokeStyle = h(i.strokeStyle, r.defaultColor); 2884 var o = 0 === h(i.lineWidth, l.borderWidth); 2885 if (c.setLineDash && c.setLineDash(h(i.lineDash, l.borderDash)), n.labels && n.labels.usePointStyle) { 2886 var s = g * Math.SQRT2 / 2, d = s / Math.SQRT2, u = e + d, f = a + d; 2887 t.canvasHelpers.drawPoint(c, i.pointStyle, s, u, f) 2888 } else o || c.strokeRect(e, a, v, g), c.fillRect(e, a, v, g); 2889 c.restore() 2890 } 2891 }, k = function (t, e, a, i) { 2892 c.fillText(a.text, v + g / 2 + t, e), a.hidden && (c.beginPath(), c.lineWidth = 2, c.moveTo(v + g / 2 + t, e + g / 2), c.lineTo(v + g / 2 + t + i, e + g / 2), c.stroke()) 2893 }, S = i.isHorizontal(); 2894 u = S ? {x: i.left + (s - d[0]) / 2, y: i.top + o.padding, line: 0} : { 2895 x: i.left + o.padding, 2896 y: i.top + o.padding, 2897 line: 0 2898 }; 2899 var w = g + o.padding; 2900 a.each(i.legendItems, function (t, e) { 2901 var a = c.measureText(t.text).width, n = v + g / 2 + a, r = u.x, l = u.y; 2902 S ? r + n >= s && (l = u.y += w, u.line++, r = u.x = i.left + (s - d[u.line]) / 2) : l + w > i.bottom && (r = u.x = r + i.columnWidths[u.line] + o.padding, l = u.y = i.top, u.line++), y(r, l, t), x[e].left = r, x[e].top = l, k(r, l, t, a), S ? u.x += n + o.padding : u.y += w 2903 }) 2904 } 2905 }, handleEvent: function (t) { 2906 var e = this, i = e.options, n = "mouseup" === t.type ? "click" : t.type, o = !1; 2907 if ("mousemove" === n) { 2908 if (!i.onHover)return 2909 } else { 2910 if ("click" !== n)return; 2911 if (!i.onClick)return 2912 } 2913 var r = a.getRelativePosition(t, e.chart.chart), l = r.x, s = r.y; 2914 if (l >= e.left && l <= e.right && s >= e.top && s <= e.bottom)for (var d = e.legendHitBoxes, u = 0; u < d.length; ++u) { 2915 var c = d[u]; 2916 if (l >= c.left && l <= c.left + c.width && s >= c.top && s <= c.top + c.height) { 2917 if ("click" === n) { 2918 i.onClick.call(e, t, e.legendItems[u]), o = !0; 2919 break 2920 } 2921 if ("mousemove" === n) { 2922 i.onHover.call(e, t, e.legendItems[u]), o = !0; 2923 break 2924 } 2925 } 2926 } 2927 return o 2928 } 2929 }), t.plugins.register({ 2930 beforeInit: function (e) { 2931 var a = e.options, i = a.legend; 2932 i && (e.legend = new t.Legend({ 2933 ctx: e.chart.ctx, 2934 options: i, 2935 chart: e 2936 }), t.layoutService.addBox(e, e.legend)) 2937 } 2938 }) 2939 } 2940 }, {}], 31: [function (t, e, a) { 2941 "use strict"; 2942 e.exports = function (t) { 2943 var e = t.helpers.noop; 2944 t.plugins = { 2945 _plugins: [], register: function (t) { 2946 var e = this._plugins; 2947 [].concat(t).forEach(function (t) { 2948 -1 === e.indexOf(t) && e.push(t) 2949 }) 2950 }, unregister: function (t) { 2951 var e = this._plugins; 2952 [].concat(t).forEach(function (t) { 2953 var a = e.indexOf(t); 2954 -1 !== a && e.splice(a, 1) 2955 }) 2956 }, clear: function () { 2957 this._plugins = [] 2958 }, count: function () { 2959 return this._plugins.length 2960 }, getAll: function () { 2961 return this._plugins 2962 }, notify: function (t, e) { 2963 var a, i, n = this._plugins, o = n.length; 2964 for (a = 0; o > a; ++a)if (i = n[a], "function" == typeof i[t] && i[t].apply(i, e || []) === !1)return !1; 2965 return !0 2966 } 2967 }, t.PluginBase = t.Element.extend({ 2968 beforeInit: e, 2969 afterInit: e, 2970 beforeUpdate: e, 2971 afterUpdate: e, 2972 beforeDraw: e, 2973 afterDraw: e, 2974 destroy: e 2975 }), t.pluginService = t.plugins 2976 } 2977 }, {}], 32: [function (t, e, a) { 2978 "use strict"; 2979 e.exports = function (t) { 2980 var e = t.helpers; 2981 t.defaults.scale = { 2982 display: !0, 2983 position: "left", 2984 gridLines: { 2985 display: !0, 2986 color: "rgba(0, 0, 0, 0.1)", 2987 lineWidth: 1, 2988 drawBorder: !0, 2989 drawOnChartArea: !0, 2990 drawTicks: !0, 2991 tickMarkLength: 10,
2992 zeroLineWidth: 1, 2993 zeroLineColor: "rgba(0,0,0,0.25)", 2994 offsetGridLines: !1, 2995 borderDash: [], 2996 borderDashOffset: 0 2997 }, 2998 scaleLabel: {labelString: "", display: !1}, 2999 ticks: { 3000 beginAtZero: !1, 3001 minRotation: 0, 3002 maxRotation: 50, 3003 mirror: !1, 3004 padding: 10, 3005 reverse: !1, 3006 display: !0, 3007 autoSkip: !0, 3008 autoSkipPadding: 0, 3009 labelOffset: 0, 3010 callback: t.Ticks.formatters.values 3011 } 3012 }, t.Scale = t.Element.extend({ 3013 beforeUpdate: function () { 3014 e.callCallback(this.options.beforeUpdate, [this]) 3015 }, 3016 update: function (t, a, i) { 3017 var n = this; 3018 return n.beforeUpdate(), n.maxWidth = t, n.maxHeight = a, n.margins = e.extend({ 3019 left: 0, 3020 right: 0, 3021 top: 0, 3022 bottom: 0 3023 }, i), n.beforeSetDimensions(), n.setDimensions(), n.afterSetDimensions(), n.beforeDataLimits(), n.determineDataLimits(), n.afterDataLimits(), n.beforeBuildTicks(), n.buildTicks(), n.afterBuildTicks(), n.beforeTickToLabelConversion(), n.convertTicksToLabels(), n.afterTickToLabelConversion(), n.beforeCalculateTickRotation(), n.calculateTickRotation(), n.afterCalculateTickRotation(), n.beforeFit(), n.fit(), n.afterFit(), n.afterUpdate(), n.minSize 3024 }, 3025 afterUpdate: function () { 3026 e.callCallback(this.options.afterUpdate, [this]) 3027 }, 3028 beforeSetDimensions: function () { 3029 e.callCallback(this.options.beforeSetDimensions, [this]) 3030 }, 3031 setDimensions: function () { 3032 var t = this; 3033 t.isHorizontal() ? (t.width = t.maxWidth, t.left = 0, t.right = t.width) : (t.height = t.maxHeight, t.top = 0, t.bottom = t.height), t.paddingLeft = 0, t.paddingTop = 0, t.paddingRight = 0, t.paddingBottom = 0 3034 }, 3035 afterSetDimensions: function () { 3036 e.callCallback(this.options.afterSetDimensions, [this]) 3037 }, 3038 beforeDataLimits: function () { 3039 e.callCallback(this.options.beforeDataLimits, [this]) 3040 }, 3041 determineDataLimits: e.noop, 3042 afterDataLimits: function () { 3043 e.callCallback(this.options.afterDataLimits, [this]) 3044 }, 3045 beforeBuildTicks: function () { 3046 e.callCallback(this.options.beforeBuildTicks, [this]) 3047 }, 3048 buildTicks: e.noop, 3049 afterBuildTicks: function () { 3050 e.callCallback(this.options.afterBuildTicks, [this]) 3051 }, 3052 beforeTickToLabelConversion: function () { 3053 e.callCallback(this.options.beforeTickToLabelConversion, [this]) 3054 }, 3055 convertTicksToLabels: function () { 3056 var t = this, e = t.options.ticks; 3057 t.ticks = t.ticks.map(e.userCallback || e.callback) 3058 }, 3059 afterTickToLabelConversion: function () { 3060 e.callCallback(this.options.afterTickToLabelConversion, [this]) 3061 }, 3062 beforeCalculateTickRotation: function () { 3063 e.callCallback(this.options.beforeCalculateTickRotation, [this]) 3064 }, 3065 calculateTickRotation: function () { 3066 var a = this, i = a.ctx, n = t.defaults.global, o = a.options.ticks, r = e.getValueOrDefault(o.fontSize, n.defaultFontSize), l = e.getValueOrDefault(o.fontStyle, n.defaultFontStyle), s = e.getValueOrDefault(o.fontFamily, n.defaultFontFamily), d = e.fontString(r, l, s); 3067 i.font = d; 3068 var u, c = i.measureText(a.ticks[0]).width, h = i.measureText(a.ticks[a.ticks.length - 1]).width; 3069 if (a.labelRotation = o.minRotation || 0, a.paddingRight = 0, a.paddingLeft = 0, a.options.display && a.isHorizontal()) { 3070 a.paddingRight = h / 2 + 3, a.paddingLeft = c / 2 + 3, a.longestTextCache || (a.longestTextCache = {}); 3071 for (var f, g, p = e.longestText(i, d, a.ticks, a.longestTextCache), m = p, b = a.getPixelForTick(1) - a.getPixelForTick(0) - 6; m > b && a.labelRotation < o.maxRotation;) {
3072 if (f = Math.cos(e.toRadians(a.labelRotation)), g = Math.sin(e.toRadians(a.labelRotation)), u = f * c, u + r / 2 > a.yLabelWidth && (a.paddingLeft = u + r / 2), a.paddingRight = r / 2, g * p > a.maxHeight) { 3073 a.labelRotation--; 3074 break 3075 } 3076 a.labelRotation++, m = f * p 3077 } 3078 } 3079 a.margins && (a.paddingLeft = Math.max(a.paddingLeft - a.margins.left, 0), a.paddingRight = Math.max(a.paddingRight - a.margins.right, 0)) 3080 }, 3081 afterCalculateTickRotation: function () { 3082 e.callCallback(this.options.afterCalculateTickRotation, [this]) 3083 }, 3084 beforeFit: function () { 3085 e.callCallback(this.options.beforeFit, [this]) 3086 }, 3087 fit: function () { 3088 var a = this, i = a.minSize = { 3089 width: 0, 3090 height: 0 3091 }, n = a.options, o = t.defaults.global, r = n.ticks, l = n.scaleLabel, s = n.gridLines, d = n.display, u = a.isHorizontal(), c = e.getValueOrDefault(r.fontSize, o.defaultFontSize), h = e.getValueOrDefault(r.fontStyle, o.defaultFontStyle), f = e.getValueOrDefault(r.fontFamily, o.defaultFontFamily), g = e.fontString(c, h, f), p = e.getValueOrDefault(l.fontSize, o.defaultFontSize), m = n.gridLines.tickMarkLength; 3092 if (u ? i.width = a.isFullWidth() ? a.maxWidth - a.margins.left - a.margins.right : a.maxWidth : i.width = d && s.drawTicks ? m : 0, u ? i.height = d && s.drawTicks ? m : 0 : i.height = a.maxHeight, l.display && d && (u ? i.height += 1.5 * p : i.width += 1.5 * p), r.display && d) { 3093 a.longestTextCache || (a.longestTextCache = {}); 3094 var b = e.longestText(a.ctx, g, a.ticks, a.longestTextCache), v = e.numberOfLabelLines(a.ticks), x = .5 * c; 3095 if (u) { 3096 a.longestLabelWidth = b; 3097 var y = Math.sin(e.toRadians(a.labelRotation)) * a.longestLabelWidth + c * v + x * v; 3098 i.height = Math.min(a.maxHeight, i.height + y), a.ctx.font = g; 3099 var k = a.ctx.measureText(a.ticks[0]).width, S = a.ctx.measureText(a.ticks[a.ticks.length - 1]).width, w = Math.cos(e.toRadians(a.labelRotation)), M = Math.sin(e.toRadians(a.labelRotation)); 3100 a.paddingLeft = 0 !== a.labelRotation ? w * k + 3 : k / 2 + 3, a.paddingRight = 0 !== a.labelRotation ? M * (c / 2) + 3 : S / 2 + 3 3101 } else { 3102 var C = a.maxWidth - i.width, D = r.mirror; 3103 D ? b = 0 : b += a.options.ticks.padding, C > b ? i.width += b : i.width = a.maxWidth, a.paddingTop = c / 2, a.paddingBottom = c / 2 3104 } 3105 } 3106 a.margins && (a.paddingLeft = Math.max(a.paddingLeft - a.margins.left, 0), a.paddingTop = Math.max(a.paddingTop - a.margins.top, 0), a.paddingRight = Math.max(a.paddingRight - a.margins.right, 0), a.paddingBottom = Math.max(a.paddingBottom - a.margins.bottom, 0)), a.width = i.width, a.height = i.height 3107 }, 3108 afterFit: function () { 3109 e.callCallback(this.options.afterFit, [this]) 3110 }, 3111 isHorizontal: function () { 3112 return "top" === this.options.position || "bottom" === this.options.position 3113 }, 3114 isFullWidth: function () { 3115 return this.options.fullWidth 3116 }, 3117 getRightValue: function (t) { 3118 return null === t || "undefined" == typeof t ? NaN : "number" != typeof t || isFinite(t) ? "object" == typeof t ? t instanceof Date || t.isValid ? t : this.getRightValue(this.isHorizontal() ? t.x : t.
3118y) : t : NaN 3119 }, 3120 getLabelForIndex: e.noop, 3121 getPixelForValue: e.noop, 3122 getValueForPixel: e.noop, 3123 getPixelForTick: function (t, e) { 3124 var a = this; 3125 if (a.isHorizontal()) { 3126 var i = a.width - (a.paddingLeft + a.paddingRight), n = i / Math.max(a.ticks.length - (a.options.gridLines.offsetGridLines ? 0 : 1), 1), o = n * t + a.paddingLeft; 3127 e && (o += n / 2); 3128 var r = a.left + Math.round(o); 3129 return r += a.isFullWidth() ? a.margins.left : 0 3130 } 3131 var l = a.height - (a.paddingTop + a.paddingBottom); 3132 return a.top + t * (l / (a.ticks.length - 1)) 3133 }, 3134 getPixelForDecimal: function (t) { 3135 var e = this; 3136 if (e.isHorizontal()) { 3137 var a = e.width - (e.paddingLeft + e.paddingRight), i = a * t + e.paddingLeft, n = e.left + Math.round(i); 3138 return n += e.isFullWidth() ? e.margins.left : 0 3139 } 3140 return e.top + t * e.height 3141 }, 3142 getBasePixel: function () { 3143 var t = this, e = t.min, a = t.max; 3144 return t.getPixelForValue(t.beginAtZero ? 0 : 0 > e && 0 > a ? a : e > 0 && a > 0 ? e : 0) 3145 }, 3146 draw: function (a) { 3147 var i = this, n = i.options; 3148 if (n.display) { 3149 var o, r, l = i.ctx, s = t.defaults.global, d = n.ticks, u = n.gridLines, c = n.scaleLabel, h = 0 !== i.labelRotation, f = d.autoSkip, g = i.isHorizontal(); 3150 d.maxTicksLimit && (r = d.maxTicksLimit); 3151 var p = e.getValueOrDefault(d.fontColor, s.defaultFontColor), m = e.getValueOrDefault(d.fontSize, s.defaultFontSize), b = e.getValueOrDefault(d.fontStyle, s.defaultFontStyle), v = e.getValueOrDefault(d.fontFamily, s.defaultFontFamily), x = e.fontString(m, b, v), y = u.tickMarkLength, k = e.getValueOrDefault(u.borderDash, s.borderDash), S = e.getValueOrDefault(u.borderDashOffset, s.borderDashOffset), w = e.getValueOrDefault(c.fontColor, s.defaultFontColor), M = e.getValueOrDefault(c.fontSize, s.defaultFontSize), C = e.getValueOrDefault(c.fontStyle, s.defaultFontStyle), D = e.getValueOrDefault(c.fontFamily, s.defaultFontFamily), I = e.fontString(M, C, D), A = e.toRadians(i.labelRotation), T = Math.cos(A), P = i.longestLabelWidth * T; 3152 l.fillStyle = p; 3153 var F = []; 3154 if (g) { 3155 if (o = !1, h && (P /= 2), (P + d.autoSkipPadding) * i.ticks.length > i.width - (i.paddingLeft + i.paddingRight) && (o = 1 + Math.floor((P + d.autoSkipPadding) * i.ticks.length / (i.width - (i.paddingLeft + i.paddingRight)))), r && i.ticks.length > r)for (; !o || i.ticks.length / (o || 1) > r;)o || (o = 1), o += 1; 3156 f || (o = !1) 3157 } 3158 var _ = "right" === n.position ? i.left : i.right - y, R = "right" === n.position ? i.left + y : i.right, V = "bottom" === n.position ? i.top : i.bottom - y, L = "bottom" === n.position ? i.top + y : i.bottom; 3159 if (e.each(i.ticks, function (t, r) { 3160 if (void 0 !== t && null !== t) { 3161 var l = i.ticks.length === r + 1, s = o > 1 && r % o > 0 || r % o === 0 && r + o >= i.ticks.length; 3162 if ((!s || l) && void 0 !== t && null !== t) { 3163 var c, f; 3164 r === ("undefined" != typeof i.zeroLineIndex ? i.zeroLineIndex : 0) ? (c = u.zeroLineWi
3164dth, f = u.zeroLineColor) : (c = e.getValueAtIndexOrDefault(u.lineWidth, r), f = e.getValueAtIndexOrDefault(u.color, r)); 3165 var p, m, b, v, x, w, M, C, D, I, T = "middle", P = "middle"; 3166 if (g) { 3167 h || (P = "top" === n.position ? "bottom" : "top"), T = h ? "right" : "center"; 3168 var O = i.getPixelForTick(r) + e.aliasPixel(c); 3169 D = i.getPixelForTick(r, u.offsetGridLines) + d.labelOffset, I = h ? i.top + 12 : "top" === n.position ? i.bottom - y : i.top + y, p = b = x = M = O, m = V, v = L, w = a.top, C = a.bottom 3170 } else { 3171 "left" === n.position ? d.mirror ? (D = i.right + d.padding, T = "left") : (D = i.right - d.padding, T = "right") : d.mirror ? (D = i.left - d.padding, T = "right") : (D = i.left + d.padding, T = "left"); 3172 var B = i.getPixelForTick(r); 3173 B += e.aliasPixel(c), I = i.getPixelForTick(r, u.offsetGridLines), p = _, b = R, x = a.left, M = a.right, m = v = w = C = B 3174 } 3175 F.push({ 3176 tx1: p, 3177 ty1: m, 3178 tx2: b, 3179 ty2: v, 3180 x1: x, 3181 y1: w, 3182 x2: M, 3183 y2: C, 3184 labelX: D, 3185 labelY: I, 3186 glWidth: c, 3187 glColor: f, 3188 glBorderDash: k, 3189 glBorderDashOffset: S, 3190 rotation: -1 * A, 3191 label: t, 3192 textBaseline: P, 3193 textAlign: T 3194 }) 3195 } 3196 } 3197 }), e.each(F, function (t) { 3198 if (u.display && (l.save(), l.lineWidth = t.glWidth, l.strokeStyle = t.glColor, l.setLineDash && (l.setLineDash(t.glBorderDash), l.lineDashOffset = t.glBorderDashOffset), l.beginPath(), u.drawTicks && (l.moveTo(t.tx1, t.ty1), l.lineTo(t.tx2, t.ty2)), u.drawOnChartArea && (l.moveTo(t.x1, t.y1), l.lineTo(t.x2, t.y2)), l.stroke(), l.restore()), d.display) { 3199 l.save(), l.translate(t.labelX, t.labelY), l.rotate(t.rotation), l.font = x, l.textBaseline = t.textBaseline, l.textAlign = t.textAlign; 3200 var a = t.label; 3201 if (e.isArray(a))for (var i = 0, n = -(a.length - 1) * m * .75; i < a.length; ++i)l.fillText("" + a[i], 0, n), n += 1.5 * m; else l.fillText(a, 0, 0); 3202 l.restore() 3203 } 3204 }), c.display) { 3205 var O, B, W = 0; 3206 if (g)O = i.left + (i.right - i.left) / 2, B = "bottom" === n.position ? i.bottom - M / 2 : i.top + M / 2; else { 3207 var z = "left" === n.position; 3208 O = z ? i.left + M / 2 : i.right - M / 2, B = i.top + (i.bottom - i.top) / 2, W = z ? -.5 * Math.PI : .5 * Math.PI 3209 } 3210 l.save(), l.translate(O, B), l.rotate(W), l.textAlign = "center", l.textBaseline = "middle", l.fillStyle = w, l.font = I, l.fillText(c.labelString, 0, 0
3210), l.restore() 3211 } 3212 if (u.drawBorder) { 3213 l.lineWidth = e.getValueAtIndexOrDefault(u.lineWidth, 0), l.strokeStyle = e.getValueAtIndexOrDefault(u.color, 0); 3214 var N = i.left, E = i.right, H = i.top, U = i.bottom, j = e.aliasPixel(l.lineWidth); 3215 g ? (H = U = "top" === n.position ? i.bottom : i.top, H += j, U += j) : (N = E = "left" === n.position ? i.right : i.left, N += j, E += j), l.beginPath(), l.moveTo(N, H), l.lineTo(E, U), l.stroke() 3216 } 3217 } 3218 } 3219 }) 3220 } 3221 }, {}], 33: [function (t, e, a) { 3222 "use strict"; 3223 e.exports = function (t) { 3224 var e = t.helpers; 3225 t.scaleService = { 3226 constructors: {}, defaults: {}, registerScaleType: function (t, a, i) { 3227 this.constructors[t] = a, this.defaults[t] = e.clone(i) 3228 }, getScaleConstructor: function (t) { 3229 return this.constructors.hasOwnProperty(t) ? this.constructors[t] : void 0 3230 }, getScaleDefaults: function (a) { 3231 return this.defaults.hasOwnProperty(a) ? e.scaleMerge(t.defaults.scale, this.defaults[a]) : {} 3232 }, updateScaleDefaults: function (t, a) { 3233 var i = this.defaults; 3234 i.hasOwnProperty(t) && (i[t] = e.extend(i[t], a)) 3235 }, addScalesToLayout: function (a) { 3236 e.each(a.scales, function (e) { 3237 t.layoutService.addBox(a, e) 3238 }) 3239 } 3240 } 3241 } 3242 }, {}], 34: [function (t, e, a) { 3243 "use strict"; 3244 e.exports = function (t) { 3245 var e = t.helpers; 3246 t.Ticks = { 3247 generators: { 3248 linear: function (t, a) { 3249 var i, n = []; 3250 if (t.stepSize && t.stepSize > 0)i = t.stepSize; else { 3251 var o = e.niceNum(a.max - a.min, !1); 3252 i = e.niceNum(o / (t.maxTicks - 1), !0) 3253 } 3254 var r = Math.floor(a.min / i) * i, l = Math.ceil(a.max / i) * i; 3255 if (t.min && t.max && t.stepSize) { 3256 var s = (t.max - t.min) % t.stepSize === 0; 3257 s && (r = t.min, l = t.max) 3258 } 3259 var d = (l - r) / i; 3260 d = e.almostEquals(d, Math.round(d), i / 1e3) ? Math.round(d) : Math.ceil(d), n.push(void 0 !== t.min ? t.min : r); 3261 for (var u = 1; d > u; ++u)n.push(r + u * i); 3262 return n.push(void 0 !== t.max ? t.max : l), n 3263 }, logarithmic: function (t, a) { 3264 for (var i = [], n = e.getValueOrDefault, o = n(t.min, Math.pow(10, Math.floor(e.log10(a.min)))); o < a.max;) { 3265 i.push(o); 3266 var r, l; 3267 0 === o ? (r = Math.floor(e.log10(a.minNotZero)), l = Math.round(a.minNotZero / Math.pow(10, r))) : (r = Math.floor(e.log10(o)), l = Math.floor(o / Math.pow(10, r)) + 1), 10 === l && (l = 1, ++r), o = l * Math.pow(10, r) 3268 } 3269 var s = n(t.max, o); 3270 return i.push(s), i 3271 } 3272 }, formatters: { 3273 values: function (t) { 3274 return e.isArray(t) ? t : "" + t 3275 }, linear: function (t, a, i) { 3276 var n = i.length > 3 ? i[2] - i[1] : i[1] - i[0]; 3277 Math.abs(n) > 1 && t !== Math.floor(t) && (n = t - Math.floor(t)); 3278 var o = e.log10(Math.abs(n)), r = ""; 3279 if (0 !== t) { 3280 var l = -1 * Math.floor(o); 3281 l = Math.max(Math.min(l, 20), 0), r = t.toFixed(l) 3282 } else r = "0"; 3283 return r 3284 }, logarithmic: function (t, a, i) { 3285 var n = t / Math.pow(10, Math.floor(e.log10(t))); 3286 return 0 === t ? "0" : 1 === n || 2 === n || 5 === n || 0 === a || a === i.length - 1 ? t.toExponential() : "" 3287 } 3288 } 3289 } 3290 } 3291 }, {}], 35: [function (t, e, a) { 3292 "use strict"; 3293 e.exports = function (t) { 3294 var e = t.helpers; 3295 t.defaults.global.title = { 3296 display: !1, 3297 position: "top", 3298 fullWidth: !0, 3299 fontStyle: "bold", 3300 padding: 10, 3301 text: "" 3302 }; 3303 var a = e.noop; 3304 t.Title = t.Element.extend({ 3305 initialize: function (a) { 3306 var i = this; 3307 e.extend(i, a), i.options = e.configMerge(t.defaults.global.title, a.options), i.legendHitBoxes = [] 3308 }, 3309 beforeUpdate: function () { 3310 var a = this.chart.options; 3311 a && a.title && (this.options = e.configMerge(t.defaults.global.title, a.title)) 3312 }, 3313 update: function (t, e, a) { 3314 var i = this; 3315 return i.beforeUpdate(), i.maxWidth = t, i.maxHeight = e, i.margins = a, i.beforeSetDimensions(), i.setDimensions(), i.afterSetDimensions(), i.beforeBuildLabels(), i.buildLabels(), i.afterBuildLabels(), i.beforeFit(), i.fit(), i.afterFit(), i.afterUpdate(), i.minSize 3316 }, 3317 afterUpdate: a, 3318 beforeSetDimensions: a, 3319 setDimensions: function () { 3320 var t = this; 3321 t.isHorizontal() ? (t.width = t.maxWidth, t.left = 0, t.right = t.width) : (t.height = t.maxHeight, t.top = 0, t.bottom = t.height), t.paddingLeft = 0, t.paddingTop = 0, t.paddingRight = 0, t.paddingBottom = 0, t.minSize = { 3322 width: 0, 3323 height: 0 3324 } 3325 }, 3326 afterSetDimensions: a, 3327 beforeBuildLabels: a, 3328 buildLabels: a, 3329 afterBuildLabels: a, 3330 beforeFit: a, 3331 fit: function () { 3332 var a = this, i = e.getValueOrDefault, n = a.options, o = t.defaults.global, r = n.display, l = i(n.fontSize, o.defaultFontSize), s = a.minSize; 3333 a.isHorizontal() ? (s.width = a.maxWidth, s.height = r ? l + 2 * n.padding : 0) : (s.width = r ? l + 2 * n.padding : 0, s.height = a.maxHeight), a.width = s.width, a.height = s.height 3334 }, 3335 afterFit: a, 3336 isHorizontal: function () { 3337 var t = this.options.position; 3338 return "top" === t || "bottom" === t 3339 }, 3340 draw: function () { 3341 var a = this, i = a.ctx, n = e.getValueOrDefault, o = a.options, r = t.defaults.global; 3342 if (o.display) { 3343 var l, s, d, u = n(o.fontSize, r.defaultFontSize), c = n(o.fontStyle, r.defaultFontStyle), h = n(o.fontFamily, r.defaultFontFamily), f = e.fontString(u, c, h), g = 0, p = a.top, m = a.left, b = a.bottom, v = a.right; 3344 i.fillStyle = n(o.fontColor, r.defaultFontColor), i.font = f, a.isHorizontal() ? (l = m + (v - m) / 2, s = p + (b - p) / 2, d = v - m) : (l = "left" === o.position ? m + u / 2 : v - u / 2, s = p + (b - p) / 2, d = b - p, g = Math.PI * ("left" === o.position ? -.5 : .5)), i.save(), i.translate(l, s), i.rotate(g), i.textAlign = "center", i.textBaseline = "middle", i.fillText(o.text, 0, 0, d), i.restore(
vendor: 7,727 bytes, lines 3344-3491
3344) 3345 } 3346 } 3347 }), t.plugins.register({ 3348 beforeInit: function (e) { 3349 var a = e.options, i = a.title; 3350 i && (e.titleBlock = new t.Title({ 3351 ctx: e.chart.ctx, 3352 options: i, 3353 chart: e 3354 }), t.layoutService.addBox(e, e.titleBlock)) 3355 } 3356 }) 3357 } 3358 }, {}], 36: [function (t, e, a) { 3359 "use strict"; 3360 e.exports = function (t) { 3361 function e(t, e) { 3362 var a = s.color(t); 3363 return a.alpha(e * a.alpha()).rgbaString() 3364 } 3365 3366 function a(t, e) { 3367 return e && (s.isArray(e) ? Array.prototype.push.apply(t, e) : t.push(e)), t 3368 } 3369 3370 function i(t) { 3371 var e = t._xScale, a = t._yScale || t._scale, i = t._index, n = t._datasetIndex; 3372 return { 3373 xLabel: e ? e.getLabelForIndex(i, n) : "", 3374 yLabel: a ? a.getLabelForIndex(i, n) : "", 3375 index: i, 3376 datasetIndex: n, 3377 x: t._model.x, 3378 y: t._model.y 3379 } 3380 } 3381 3382 function n(e) { 3383 var a = t.defaults.global, i = s.getValueOrDefault; 3384 return { 3385 xPadding: e.xPadding, 3386 yPadding: e.yPadding, 3387 xAlign: e.xAlign, 3388 yAlign: e.yAlign, 3389 bodyFontColor: e.bodyFontColor, 3390 _bodyFontFamily: i(e.bodyFontFamily, a.defaultFontFamily), 3391 _bodyFontStyle: i(e.bodyFontStyle, a.defaultFontStyle), 3392 _bodyAlign: e.bodyAlign, 3393 bodyFontSize: i(e.bodyFontSize, a.defaultFontSize), 3394 bodySpacing: e.bodySpacing, 3395 titleFontColor: e.titleFontColor, 3396 _titleFontFamily: i(e.titleFontFamily, a.defaultFontFamily), 3397 _titleFontStyle: i(e.titleFontStyle, a.defaultFontStyle), 3398 titleFontSize: i(e.titleFontSize, a.defaultFontSize), 3399 _titleAlign: e.titleAlign, 3400 titleSpacing: e.titleSpacing, 3401 titleMarginBottom: e.titleMarginBottom, 3402 footerFontColor: e.footerFontColor, 3403 _footerFontFamily: i(e.footerFontFamily, a.defaultFontFamily), 3404 _footerFontStyle: i(e.footerFontStyle, a.defaultFontStyle), 3405 footerFontSize: i(e.footerFontSize, a.defaultFontSize), 3406 _footerAlign: e.footerAlign, 3407 footerSpacing: e.footerSpacing, 3408 footerMarginTop: e.footerMarginTop, 3409 caretSize: e.caretSize, 3410 cornerRadius: e.cornerRadius, 3411 backgroundColor: e.backgroundColor, 3412 opacity: 0, 3413 legendColorBackground: e.multiKeyBackground, 3414 displayColors: e.displayColors 3415 } 3416 } 3417 3418 function o(t, e) { 3419 var a = t._chart.ctx, i = 2 * e.yPadding, n = 0, o = e.body, r = o.reduce(function (t, e) { 3420 return t + e.before.length + e.lines.length + e.after.length 3421 }, 0); 3422 r += e.beforeBody.length + e.afterBody.length; 3423 var l = e.title.length, d = e.footer.length, u = e.titleFontSize, c = e.bodyFontSize, h = e.footerFontSize; 3424 i += l * u, i += l ? (l - 1) * e.titleSpacing : 0, i += l ? e.titleMarginBottom : 0, i += r * c, i += r ? (r - 1) * e.bodySpacing : 0, i += d ? e.footerMarginTop : 0, i += d * h, i += d ? (d - 1) * e.footerSpacing : 0; 3425 var f = 0, g = function (t) { 3426 n = Math.max(n, a.measureText(t).width + f) 3427 }; 3428 return a.font = s.fontString(u, e._titleFontStyle, e._titleFontFamily), s.each(e.title, g), a.font = s.fontString(c, e._bodyFontStyle, e._bodyFontFamily), s.each(e.beforeBody.concat(e.afterBody), g), f = e.displayColors ? c + 2 : 0, s.each(o, function (t) { 3429 s.each(t.before, g), s.each(t.lines, g), s.each(t.after, g) 3430 }), f = 0, a.font = s.fontString(h, e._footerFontStyle, e._footerFontFamily), s.each(e.footer, g), n += 2 * e.xPadding, { 3431 width: n, 3432 height: i 3433 } 3434 } 3435 3436 function r(t, e) { 3437 var a = t._model, i = t._chart, n = t._chartInstance.chartArea, o = "center", r = "center"; 3438 a.y < e.height ? r = "top" : a.y > i.height - e.height && (r = "bottom"); 3439 var l, s, d, u, c, h = (n.left + n.right) / 2, f = (n.top + n.bottom) / 2; 3440 "center" === r ? (l = function (t) { 3441 return h >= t 3442 }, s = function (t) { 3443 return t > h 3444 }) : (l = function (t) { 3445 return t <= e.width / 2 3446 }, s = function (t) { 3447 return t >= i.width - e.width / 2 3448 }), d = function (t) { 3449 return t + e.width > i.width 3450 }, u = function (t) { 3451 return t - e.width < 0 3452 }, c = function (t) { 3453 return f >= t ? "top" : "bottom" 3454 }, l(a.x) ? (o = "left", d(a.x) && (o = "center", r = c(a.y))) : s(a.x) && (o = "right", u(a.x) && (o = "center", r = c(a.y))); 3455 var g = t._options; 3456 return {xAlign: g.xAlign ? g.xAlign : o, yAlign: g.yAlign ? g.yAlign : r} 3457 } 3458 3459 function l(t, e, a) { 3460 var i = t.x, n = t.y, o = t.caretSize, r = t.caretPadding, l = t.cornerRadius, s = a.xAlign, d = a.yAlign, u = o + r, c = l + r; 3461 return "right" === s ? i -= e.width : "center" === s && (i -= e.width / 2), "top" === d ? n += u : n -= "bottom" === d ? e.height + u : e.height / 2, "center" === d ? "left" === s ? i += u : "right" === s && (i -= u) : "left" === s ? i -= c : "right" === s && (i += c), { 3462 x: i, 3463 y: n 3464 } 3465 } 3466 3467 var s = t.helpers; 3468 t.defaults.global.tooltips = { 3469 enabled: !0, 3470 custom: null, 3471 mode: "nearest", 3472 position: "average", 3473 intersect: !0, 3474 backgroundColor: "rgba(0,0,0,0.8)", 3475 titleFontStyle: "bold", 3476 titleSpacing: 2, 3477 titleMarginBottom: 6, 3478 titleFontColor: "#fff", 3479 titleAlign: "left", 3480 bodySpacing: 2, 3481 bodyFontColor: "#fff", 3482 bodyAlign: "left", 3483 footerFontStyle: "bold", 3484 footerSpacing: 2, 3485 footerMarginTop: 6, 3486 footerFontColor: "#fff", 3487 footerAlign: "left", 3488 yPadding: 6, 3489 xPadding: 6, 3490 caretSize: 5, 3491 cornerRadius: 6,
3492 multiKeyBackground: "#fff", 3493 displayColors: !0, 3494 callbacks: { 3495 beforeTitle: s.noop, 3496 title: function (t, e) { 3497 var a = "", i = e.labels, n = i ? i.length : 0; 3498 if (t.length > 0) { 3499 var o = t[0]; 3500 o.xLabel ? a = o.xLabel : n > 0 && o.index < n && (a = i[o.index]) 3501 } 3502 return a 3503 }, 3504 afterTitle: s.noop, 3505 beforeBody: s.noop, 3506 beforeLabel: s.noop, 3507 label: function (t, e) { 3508 var a = e.datasets[t.datasetIndex].label || ""; 3509 return a + ": " + t.yLabel 3510 }, 3511 labelColor: function (t, e) { 3512 var a = e.getDatasetMeta(t.datasetIndex), i = a.data[t.index], n = i._view; 3513 return {borderColor: n.borderColor, backgroundColor: n.backgroundColor} 3514 }, 3515 afterLabel: s.noop, 3516 afterBody: s.noop, 3517 beforeFooter: s.noop, 3518 footer: s.noop, 3519 afterFooter: s.noop 3520 } 3521 }, t.Tooltip = t.Element.extend({ 3522 initialize: function () { 3523 this._model = n(this._options) 3524 }, getTitle: function () { 3525 var t = this, e = t._options, i = e.callbacks, n = i.beforeTitle.apply(t, arguments), o = i.title.apply(t, arguments), r = i.afterTitle.apply(t, arguments), l = []; 3526 return l = a(l, n), l = a(l, o), l = a(l, r) 3527 }, getBeforeBody: function () { 3528 var t = this._options.callbacks.beforeBody.apply(this, arguments); 3529 return s.isArray(t) ? t : void 0 !== t ? [t] : [] 3530 }, getBody: function (t, e) { 3531 var i = this, n = i._options.callbacks, o = []; 3532 return s.each(t, function (t) { 3533 var r = {before: [], lines: [], after: []}; 3534 a(r.before, n.beforeLabel.call(i, t, e)), a(r.lines, n.label.call(i, t, e)), a(r.after, n.afterLabel.call(i, t, e)), o.push(r) 3535 }), o 3536 }, getAfterBody: function () { 3537 var t = this._options.callbacks.afterBody.apply(this, arguments); 3538 return s.isArray(t) ? t : void 0 !== t ? [t] : [] 3539 }, getFooter: function () { 3540 var t = this, e = t._options.callbacks, i = e.beforeFooter.apply(t, arguments), n = e.footer.apply(t, arguments), o = e.afterFooter.apply(t, arguments), r = []; 3541 return r = a(r, i), r = a(r, n), r = a(r, o) 3542 }, update: function (e) { 3543 var a, d, u = this, c = u._options, h = u._model, f = u._model = n(c), g = u._active, p = u._data, m = u._chartInstance, b = { 3544 xAlign: h.xAlign, 3545 yAlign: h.yAlign 3546 }, v = {x: h.x, y: h.y}, x = {width: h.width, height: h.height}, y = {x: h.caretX, y: h.caretY}; 3547 if (g.length) { 3548 f.opacity = 1; 3549 var k = []; 3550 y = t.Tooltip.positioners[c.position](g, u._eventPosition); 3551 var S = []; 3552 for (a = 0, d = g.length; d > a; ++a)S.push(i(g[a])); 3553 c.filter && (S = S.filter(function (t) { 3554 return c.filter(t, p) 3555 })), c.itemSort && (S = S.sort(function (t, e) { 3556 return c.itemSort(t, e, p) 3557 })), s.each(S, function (t) { 3558 k.push(c.callbacks.labelColor.call(u, t, m)) 3559 }), f.title = u.getTitle(S, p), f.beforeBody = u.getBeforeBody(S, p), f.body = u.getBody(S, p), f.afterBody = u.getAfterBody(S, p), f.footer = u.getFooter(S, p), f.x = Math.round(y.x), f.y = Math.round(y.y), f.caretPadding = s.getValueOrDefault(y.padding, 2), f.labelColors = k, f.dataPoints = S, x = o(this, f), b = r(this, x), v = l(f, x, b) 3560 } else f.opacity = 0; 3561 return f.xAlign = b.xAlign, f.yAlign = b.yAlign, f.x = v.x, f.y = v.y, f.width = x.width, f.height = x.height, f.caretX = y.x, f.caretY = y.y, u._model = f, e && c.custom && c.custom.call(u, f), u 3562 }, drawCaret: function (t, a, i) { 3563 var n, o, r, l, s, d, u = this._view, c = this._chart.ctx, h = u.caretSize, f = u.cornerRadius, g = u.xAlign, p = u.yAlign, m = t.x, b = t.y, v = a.width, x = a.height; 3564 "center" === p ? ("left" === g ? (n = m, o = n - h, r = n) : (n = m + v, o = n + h, r = n), s = b + x / 2, l = s
3564- h, d = s + h) : ("left" === g ? (n = m + f, o = n + h, r = o + h) : "right" === g ? (n = m + v - f, o = n - h, r = o - h) : (o = m + v / 2, n = o - h, r = o + h), "top" === p ? (l = b, s = l - h, d = l) : (l = b + x, s = l + h, d = l)), c.fillStyle = e(u.backgroundColor, i), c.beginPath(), c.moveTo(n, l), c.lineTo(o, s), c.lineTo(r, d), c.closePath(), c.fill() 3565 }, drawTitle: function (t, a, i, n) { 3566 var o = a.title; 3567 if (o.length) { 3568 i.textAlign = a._titleAlign, i.textBaseline = "top"; 3569 var r = a.titleFontSize, l = a.titleSpacing; 3570 i.fillStyle = e(a.titleFontColor, n), i.font = s.fontString(r, a._titleFontStyle, a._titleFontFamily); 3571 var d, u; 3572 for (d = 0, u = o.length; u > d; ++d)i.fillText(o[d], t.x, t.y), t.y += r + l, d + 1 === o.length && (t.y += a.titleMarginBottom - l) 3573 } 3574 }, drawBody: function (t, a, i, n) { 3575 var o = a.bodyFontSize, r = a.bodySpacing, l = a.body; 3576 i.textAlign = a._bodyAlign, i.textBaseline = "top"; 3577 var d = e(a.bodyFontColor, n); 3578 i.fillStyle = d, i.font = s.fontString(o, a._bodyFontStyle, a._bodyFontFamily); 3579 var u = 0, c = function (e) { 3580 i.fillText(e, t.x + u, t.y), t.y += o + r 3581 }; 3582 s.each(a.beforeBody, c); 3583 var h = a.displayColors; 3584 u = h ? o + 2 : 0, s.each(l, function (r, l) { 3585 s.each(r.before, c), s.each(r.lines, function (r) { 3586 h && (i.fillStyle = e(a.legendColorBackground, n), i.fillRect(t.x, t.y, o, o), i.strokeStyle = e(a.labelColors[l].borderColor, n), i.strokeRect(t.x, t.y, o, o), i.fillStyle = e(a.labelColors[l].backgroundColor, n), i.fillRect(t.x + 1, t.y + 1, o - 2, o - 2), i.fillStyle = d), c(r) 3587 }), s.each(r.after, c) 3588 }), u = 0, s.each(a.afterBody, c), t.y -= r 3589 }, drawFooter: function (t, a, i, n) { 3590 var o = a.footer; 3591 o.length && (t.y += a.footerMarginTop, i.textAlign = a._footerAlign, i.textBaseline = "top", i.fillStyle = e(a.footerFontColor, n), i.font = s.fontString(a.footerFontSize, a._footerFontStyle, a._footerFontFamily), s.each(o, function (e) { 3592 i.fillText(e, t.x, t.y), t.y += a.footerFontSize + a.footerSpacing 3593 })) 3594 }, drawBackground: function (t, a, i, n, o) { 3595 i.fillStyle = e(a.backgroundColor, o), s.drawRoundedRectangle(i, t.x, t.y, n.width, n.height, a.cornerRadius), i.fill() 3596 }, draw: function () { 3597 var t = this._chart.ctx, e = this._view; 3598 if (0 !== e.opacity) { 3599 var a = {width: e.width, height: e.height}, i = { 3600 x: e.x, 3601 y: e.y 3602 }, n = Math.abs(e.opacity < .001) ? 0 : e.opacity; 3603 this._options.enabled && (this.drawBackground(i, e, t, a, n), this.drawCaret(i, a, n), i.x += e.xPadding, i.y += e.yPadding, this.drawTitle(i, e, t, n), this.drawBody(i, e, t, n), this.drawFooter(i, e, t, n)) 3604 } 3605 }, handleEvent: function (t) { 3606 var e = this, a = e._options, i = !1; 3607 if (e._lastActive = e._lastActive || [], "mouseout" === t.type ? e._active = [] : e._active = e._chartInstance.getElementsAtEventForMode(t, a.mode, a), i = !s.arrayEquals(e._active, e._lastActive), e._lastActive = e._active, a.enabled || a.custom) { 3608 e._eventPosition = s.getRelativePosition(t, e._chart); 3609 var n = e._model; 3610 e.update(!0), e.pivot(), i |= n.x !== e._model.x || n.y !== e._model.y 3611 } 3612 return i 3613 } 3614 }), t.Tooltip.positioners = { 3615 average: function (t) { 3616 if (!t.length)return !1; 3617 var e, a, i = 0, n = 0, o = 0; 3618 for (e = 0, a = t.length; a > e; ++e) { 3619 var r = t[e]; 3620 if (r && r.hasValue()) { 3621 var l = r.tooltipPosition(); 3622 i += l.x, n += l.y, ++o 3623 } 3624 } 3625 return {x: Math.round(i / o), y: Math.round(n / o)} 3626 }, nearest: function (t, e) { 3627 var a, i, n, o = e.x, r = e.y, l = Number.POSITIVE_INFINITY; 3628 for (i = 0, n = t.length; n > i; ++i) { 3629 var d = t[i]; 3630 if (d && d.hasValue()) { 3631 var u = d.getCenterPoint(), c = s.distanceBetweenPoints(e, u); 3632 l > c && (l = c, a = d) 3633 } 3634 } 3635 if (a) { 3636 var h = a.tooltipPosition(); 3637 o = h.x, r = h.y 3638 } 3639 return {x: o, y: r} 3640 } 3641 } 3642 } 3643 }, {}], 37: [function (t, e, a) { 3644 "use strict"; 3645 e.exports = function (t) { 3646 var e = t.helpers, a = t.defaults.global;
3647 a.elements.arc = { 3648 backgroundColor: a.defaultColor, 3649 borderColor: "#fff", 3650 borderWidth: 2 3651 }, t.elements.Arc = t.Element.extend({ 3652 inLabelRange: function (t) { 3653 var e = this._view; 3654 return e ? Math.pow(t - e.x, 2) < Math.pow(e.radius + e.hoverRadius, 2) : !1 3655 }, inRange: function (t, a) { 3656 var i = this._view; 3657 if (i) { 3658 for (var n = e.getAngleFromPoint(i, { 3659 x: t, 3660 y: a 3661 }), o = n.angle, r = n.distance, l = i.startAngle, s = i.endAngle; l > s;)s += 2 * Math.PI; 3662 for (; o > s;)o -= 2 * Math.PI; 3663 for (; l > o;)o += 2 * Math.PI; 3664 var d = o >= l && s >= o, u = r >= i.innerRadius && r <= i.outerRadius; 3665 return d && u 3666 } 3667 return !1 3668 }, getCenterPoint: function () { 3669 var t = this._view, e = (t.startAngle + t.endAngle) / 2, a = (t.innerRadius + t.outerRadius) / 2; 3670 return {x: t.x + Math.cos(e) * a, y: t.y + Math.sin(e) * a} 3671 }, getArea: function () { 3672 var t = this._view; 3673 return Math.PI * ((t.endAngle - t.startAngle) / (2 * Math.PI)) * (Math.pow(t.outerRadius, 2) - Math.pow(t.innerRadius, 2)) 3674 }, tooltipPosition: function () { 3675 var t = this._view, e = t.startAngle + (t.endAngle - t.startAngle) / 2, a = (t.outerRadius - t.innerRadius) / 2 + t.innerRadius; 3676 return {x: t.x + Math.cos(e) * a, y: t.y + Math.sin(e) * a} 3677 }, draw: function () { 3678 var t = this._chart.ctx, e = this._view, a = e.startAngle, i = e.endAngle; 3679 t.beginPath(), t.arc(e.x, e.y, e.outerRadius, a, i), t.arc(e.x, e.y, e.innerRadius, i, a, !0), t.closePath(), t.strokeStyle = e.borderColor, t.lineWidth = e.borderWidth, t.fillStyle = e.backgroundColor, t.fill(), t.lineJoin = "bevel", e.borderWidth && t.stroke() 3680 } 3681 }) 3682 } 3683 }, {}], 38: [function (t, e, a) { 3684 "use strict"; 3685 e.exports = function (t) { 3686 var e = t.helpers, a = t.defaults.global; 3687 t.defaults.global.elements.line = { 3688 tension: .4, 3689 backgroundColor: a.defaultColor, 3690 borderWidth: 3, 3691 borderColor: a.defaultColor, 3692 borderCapStyle: "butt", 3693 borderDash: [], 3694 borderDashOffset: 0, 3695 borderJoinStyle: "miter", 3696 capBezierPoints: !0, 3697 fill: !0 3698 }, t.elements.Line = t.Element.extend({ 3699 draw: function () { 3700 function t(t, e) { 3701 var a = e._view; 3702 e._view.steppedLine === !0 ? (s.lineTo(a.x, t._view.y), s.lineTo(a.x, a.y)) : 0 === e._view.tension ? s.lineTo(a.x, a.y) : s.bezierCurveTo(t._view.controlPointNextX, t._view.controlPointNextY, a.controlPointPreviousX, a.controlPointPreviousY, a.x, a.y) 3703 } 3704 3705 var i = this, n = i._view, o = n.spanGaps, r = n.scaleZero, l = i._loop; 3706 l || ("top" === n.fill ? r = n.scaleTop : "bottom" === n.fill && (r = n.scaleBottom)); 3707 var s = i._chart.ctx; 3708 s.save(); 3709 var d = i._children.slice(), u = -1; 3710 l && d.length && d.push(d[0]); 3711 var c, h, f, g; 3712 if (d.length && n.fill) { 3713 for (s.beginPath(), c = 0; c < d.length; ++c)h = d[c], f = e.previousItem(d, c), g = h._view, 0 === c ? (l ? s.moveTo(r.x, r.y) : s.moveTo(g.x, r), g.skip || (u = c, s.lineTo(g.x, g.y))) : (f = -1 === u ? f : d[u], g.skip ? o || u !== c - 1 || (l ? s.lineTo(r.x, r.y) : s.lineTo(f._view.x, r)) : (u !== c - 1 ? o && -1 !== u ? t(f, h) : l ? s.lineTo(g.x, g.y) : (s.lineTo(g.x, r), s.lineTo(g.x, g.y)) : t(f, h), u = c)); 3714 l || -1 === u || s.lineTo(d[u]._view.x, r), s.fillStyle = n.backgroundColor || a.defaultColor, s.closePath(), s.fill() 3715 } 3716 var p = a.elements.line; 3717 for (s.lineCap = n.borderCapStyle || p.borderCapStyle, s.setLineDash && s.setLineDash(n.borderDash || p.borderDash), s.lineDashOffset = n.borderDashOffset || p.borderDashOffset, s.lineJoin = n.borderJoinStyle || p.borderJoinStyle, s.lineWidth = n.borderWidth || p.borderWidth, s.strokeStyle = n.borderColor || a.defaultColor, s.beginPath(), u = -1, c = 0; c < d.length; ++c)h = d[c], f = e.previousItem(d, c), g = h._view, 0 === c ? g.skip || (s.moveTo(g.x, g.y), u = c) : (f = -1 === u ? f : d[u], g.skip || (u !== c - 1 && !o || -1 === u ? s.moveTo(g.x, g.y) : t(f, h), u = c));
3718 s.stroke(), s.restore() 3719 } 3720 }) 3721 } 3722 }, {}], 39: [function (t, e, a) { 3723 "use strict"; 3724 e.exports = function (t) { 3725 function e(t) { 3726 var e = this._view; 3727 return e ? Math.pow(t - e.x, 2) < Math.pow(e.radius + e.hitRadius, 2) : !1 3728 } 3729 3730 function a(t) { 3731 var e = this._view; 3732 return e ? Math.pow(t - e.y, 2) < Math.pow(e.radius + e.hitRadius, 2) : !1 3733 } 3734 3735 var i = t.helpers, n = t.defaults.global, o = n.defaultColor; 3736 n.elements.point = { 3737 radius: 3, 3738 pointStyle: "circle", 3739 backgroundColor: o, 3740 borderWidth: 1, 3741 borderColor: o, 3742 hitRadius: 1, 3743 hoverRadius: 4, 3744 hoverBorderWidth: 1 3745 }, t.elements.Point = t.Element.extend({ 3746 inRange: function (t, e) { 3747 var a = this._view; 3748 return a ? Math.pow(t - a.x, 2) + Math.pow(e - a.y, 2) < Math.pow(a.hitRadius + a.radius, 2) : !1 3749 }, inLabelRange: e, inXRange: e, inYRange: a, getCenterPoint: function () { 3750 var t = this._view; 3751 return {x: t.x, y: t.y} 3752 }, getArea: function () { 3753 return Math.PI * Math.pow(this._view.radius, 2) 3754 }, tooltipPosition: function () { 3755 var t = this._view; 3756 return {x: t.x, y: t.y, padding: t.radius + t.borderWidth} 3757 }, draw: function () { 3758 var e = this._view, a = this._chart.ctx, r = e.pointStyle, l = e.radius, s = e.x, d = e.y; 3759 e.skip || (a.strokeStyle = e.borderColor || o, a.lineWidth = i.getValueOrDefault(e.borderWidth, n.elements.point.borderWidth), a.fillStyle = e.backgroundColor || o, t.canvasHelpers.drawPoint(a, r, l, s, d)) 3760 } 3761 }) 3762 } 3763 }, {}], 40: [function (t, e, a) { 3764 "use strict"; 3765 e.exports = function (t) { 3766 function e(t) { 3767 return void 0 !== t._view.width 3768 } 3769 3770 function a(t) { 3771 var a, i, n, o, r = t._view; 3772 if (e(t)) { 3773 var l = r.width / 2; 3774 a = r.x - l, i = r.x + l, n = Math.min(r.y, r.base), o = Math.max(r.y, r.base) 3775 } else { 3776 var s = r.height / 2; 3777 a = Math.min(r.x, r.base), i = Math.max(r.x, r.base), n = r.y - s, o = r.y + s 3778 } 3779 return {left: a, top: n, right: i, bottom: o} 3780 } 3781 3782 var i = t.defaults.global; 3783 i.elements.rectangle = { 3784 backgroundColor: i.defaultColor, 3785 borderWidth: 0, 3786 borderColor: i.defaultColor, 3787 borderSkipped: "bottom" 3788 }, t.elements.Rectangle = t.Element.extend({ 3789 draw: function () { 3790 function t(t) { 3791 return s[(u + t) % 4] 3792 } 3793 3794 var e = this._chart.ctx, a = this._view, i = a.width / 2, n = a.x - i, o = a.x + i, r = a.base - (a.base - a.y), l = a.borderWidth / 2; 3795 a.borderWidth && (n += l, o -= l, r += l), e.beginPath(), e.fillStyle = a.backgroundColor, e.strokeStyle = a.borderColor, e.lineWidth = a.borderWidth; 3796 var s = [[n, a.base], [n, r], [o, r], [o, a.base]], d = ["bottom", "left", "top", "right"], u = d.indexOf(a.borderSkipped, 0); 3797 -1 === u && (u = 0); 3798 var c = t(0); 3799 e.moveTo(c[0], c[1]); 3800 for (var h = 1; 4 > h;
3800 h++)c = t(h), e.lineTo(c[0], c[1]); 3801 e.fill(), a.borderWidth && e.stroke() 3802 }, height: function () { 3803 var t = this._view; 3804 return t.base - t.y 3805 }, inRange: function (t, e) { 3806 var i = !1; 3807 if (this._view) { 3808 var n = a(this); 3809 i = t >= n.left && t <= n.right && e >= n.top && e <= n.bottom 3810 } 3811 return i 3812 }, inLabelRange: function (t, i) { 3813 var n = this; 3814 if (!n._view)return !1; 3815 var o = !1, r = a(n); 3816 return o = e(n) ? t >= r.left && t <= r.right : i >= r.top && i <= r.bottom 3817 }, inXRange: function (t) { 3818 var e = a(this); 3819 return t >= e.left && t <= e.right 3820 }, inYRange: function (t) { 3821 var e = a(this); 3822 return t >= e.top && t <= e.bottom 3823 }, getCenterPoint: function () { 3824 var t, a, i = this._view; 3825 return e(this) ? (t = i.x, a = (i.y + i.base) / 2) : (t = (i.x + i.base) / 2, a = i.y), { 3826 x: t, 3827 y: a 3828 } 3829 }, getArea: function () { 3830 var t = this._view; 3831 return t.width * Math.abs(t.y - t.base) 3832 }, tooltipPosition: function () { 3833 var t = this._view; 3834 return {x: t.x, y: t.y} 3835 } 3836 }) 3837 } 3838 }, {}], 41: [function (t, e, a) { 3839 "use strict"; 3840 e.exports = function (t) { 3841 var e = t.helpers, a = {position: "bottom"}, i = t.Scale.extend({ 3842 getLabels: function () { 3843 var t = this.chart.data; 3844 return (this.isHorizontal() ? t.xLabels : t.yLabels) || t.labels 3845 }, determineDataLimits: function () { 3846 var t = this, a = t.getLabels(); 3847 t.minIndex = 0, t.maxIndex = a.length - 1; 3848 var i; 3849 void 0 !== t.options.ticks.min && (i = e.indexOf(a, t.options.ticks.min), t.minIndex = -1 !== i ? i : t.minIndex), void 0 !== t.options.ticks.max && (i = e.indexOf(a, t.options.ticks.max), t.maxIndex = -1 !== i ? i : t.maxIndex), t.min = a[t.minIndex], t.max = a[t.maxIndex] 3850 }, buildTicks: function () { 3851 var t = this, e = t.getLabels(); 3852 t.ticks = 0 === t.minIndex && t.maxIndex === e.length - 1 ? e : e.slice(t.minIndex, t.maxIndex + 1) 3853 }, getLabelForIndex: function (t, e) { 3854 var a = this, i = a.chart.data, n = a.isHorizontal(); 3855 return i.xLabels && n || i.yLabels && !n ? a.getRightValue(i.datasets[e].data[t]) : a.ticks[t] 3856 }, getPixelForValue: function (t, e, a, i) { 3857 var n = this, o = Math.max(n.maxIndex + 1 - n.minIndex - (n.options.gridLines.offsetGridLines ? 0 : 1), 1); 3858 if (void 0 !== t && isNaN(e)) { 3859 var r = n.getLabels(), l = r.indexOf(t); 3860 e = -1 !== l ? l : e 3861 } 3862 if (n.isHorizontal()) { 3863 var s = n.width - (n.paddingLeft + n.paddingRight), d = s / o, u = d * (e - n.minIndex) + n.paddingLeft; 3864 return (n.options.gridLines.offsetGridLines && i || n.maxIndex === n.minIndex && i) && (u += d / 2), 3865 n.left + Math.round(u) 3866 } 3867 var c = n.height - (n.paddingTop + n.paddingBottom), h = c / o, f = h * (e - n.minIndex) + n.paddingTop; 3868 return n.options.gridLines.offsetGridLines && i && (f += h / 2), n.top + Math.round(f) 3869 }, getPixelForTick: function (t, e) { 3870 return this.getPixelForValue(this.ticks[t], t + this.minIndex, null, e) 3871 }, getValueForPixel: function (t) { 3872 var e, a = this, i = Math.max(a.ticks.length - (a.options.gridLines.offsetGridLines ? 0 : 1), 1), n = a.isHorizontal(), o = n ? a.width - (a.paddingLeft + a.paddingRight) : a.height - (a.paddingTop + a.paddingBottom), r = o / i; 3873 return t -= n ? a.left : a.top, a.options.gridLines.offsetGridLines && (t -= r / 2), t -= n ? a.paddingLeft : a.paddingTop, e = 0 >= t ? 0 : Math.round(t / r) 3874 }, getBasePixel: function () { 3875 return this.bottom 3876 } 3877 }); 3878 t.scaleService.registerScaleType("category", i, a) 3879 } 3880 }, {}], 42: [function (t, e, a) { 3881 "use strict"; 3882 e.exports = function (t) { 3883 var e = t.helpers, a = { 3884 position: "left", 3885 ticks: {callback: t.Ticks.formatters.linear} 3886 }, i = t.LinearScaleBase.extend({ 3887 determineDataLimits: function () { 3888 function t(t) { 3889 return l ? t.xAxisID === a.id : t.yAxisID === a.id 3890 } 3891 3892 var a = this, i = a.options, n = a.chart, o = n.data, r = o.datasets, l = a.isHorizontal(); 3893 if (a.min = null, a.max = null, i.stacked) { 3894 var s = {}; 3895 e.each(r, function (o, r) { 3896 var l = n.getDatasetMeta(r); 3897 void 0 === s[l.type] && (s[l.type] = {positiveValues: [], negativeValues: []}); 3898 var d = s[l.type].positiveValues, u = s[l.type].negativeValues; 3899 n.isDatasetVisible(r) && t(l) && e.each(o.data, function (t, e) { 3900 var n = +a.getRightValue(t); 3901 isNaN(n) || l.data[e].hidden || (d[e] = d[e] || 0, u[e] = u[e] || 0, i.relativePoints ? d[e] = 100 : 0 > n ? u[e] += n : d[e] += n) 3902 }) 3903 }), e.each(s, function (t) { 3904 var i = t.positiveValues.concat(t.negativeValues), n = e.min(i), o = e.max(i); 3905 a.min = null === a.min ? n : Math.min(a.min, n), a.max = null === a.max ? o : Math.max(a.max, o) 3906 }) 3907 } else e.each(r, function (i, o) { 3908 var r = n.getDatasetMeta(o); 3909 n.isDatasetVisible(o) && t(r) && e.each(i.data, function (t, e) { 3910 var i = +a.getRightValue(t); 3911 isNaN(i) || r.data[e].hidden || (null === a.min ? a.min = i : i < a.min && (a.min = i), null === a.max ? a.max = i : i > a.max && (a.max = i)) 3912 }) 3913 }); 3914 this.handleTickRangeOptions() 3915 }, getTickLimit: function () { 3916 var a, i = this, n = i.options.ticks; 3917 if (i.isHorizontal())a = Math.min(n.maxTicksLimit ? n.maxTicksLimit : 11, Math.ceil(i.width / 50)); else { 3918 var o = e.getValueOrDefault(n.fontSize, t.defaults.global.defaultFontSize); 3919 a = Math.min(n.maxTicksLimit ? n.maxTicksLimit : 11, Math.ceil(i.height / (2 * o))) 3920 } 3921 return a 3922 }, handleDirectionalChanges: function () { 3923 this.isHorizontal() || this.ticks.reverse() 3924 }, getLabelForIndex: function (t, e) { 3925 return +this.getRightValue(this.chart.data.datasets[e].data[t]) 3926 }, getPixelForValue: function (t) { 3927 var e, a, i = this, n = i.paddingLeft, o = i.paddingBottom, r = i.start, l = +i.getRightValue(t), s = i.end - r; 3928 return i.isHorizontal() ? (a = i.width - (n + i.paddingRight), e = i.left + a / s * (l - r), Math.round(e + n)) : (a = i.height - (i.paddingTop + o), e = i.bottom - o - a / s * (l - r), Math.round(e)) 3929 }, getValueForPixel: function (t) { 3930 var e = this, a = e.isHorizontal(), i = e.paddingLeft, n = e.paddingBottom, o = a ? e.width - (i + e.paddingRight) : e.height - (e.paddingTop + n), r = (a ? t - e.left - i : e.bottom - n - t) / o; 3931 return e.start + (e.end - e.start) * r 3932 }, getPixelForTick: function (t) { 3933 return this.getPixelForValue(this.ticksAsNumbers[t]) 3934 } 3935 }); 3936 t.scaleService.registerScaleType("linear", i, a) 3937 } 3938 }, {}], 43: [function (t, e, a) { 3939 "use strict"; 3940 e.exports = function (t) { 3941 var e = t.helpers, a = e.noop; 3942 t.LinearScaleBase = t.Scale.extend({ 3943 handleTickRangeOptions: function () { 3944 var t = this, a = t.options, i = a.ticks; 3945 if (i.beginAtZero) { 3946 var n = e.sign(t.min), o = e.sign(t.max); 3947 0 > n && 0 > o ? t.max = 0 : n > 0 && o > 0 && (t.min = 0) 3948 } 3949 void 0 !== i.min ? t.min = i.min : void 0 !== i.suggestedMin && (t.min = Math.min(t.min, i.suggestedMin)), void 0 !== i.max ? t.max = i.max : void 0 !== i.suggestedMax && (t.max = Math.max(t.max, i.suggestedMax)), t.min === t.max && (t.max++, i.beginAtZero || t.min--) 3950 }, getTickLimit: a, handleDirectionalChanges: a, buildTicks: function () { 3951 var a = this, i = a.options, n = i.ticks, o = a.getTickLimit(); 3952 o = Math.max(2, o); 3953 var r = { 3954 maxTicks: o, 3955 min: n.min, 3956 max: n.max, 3957 stepSize: e.getValueOrDefault(n.fixedStepSize, n.stepSize) 3958 }, l = a.ticks = t.Ticks.generators.linear(r, a); 3959 a.handleDirectionalChanges(), a.max = e.max(l), a.min = e.min(l), n.reverse ? (l.reverse(), a.start = a.max, a.end = a.min) : (a.start = a.min, a.end = a.max) 3960 }, convertTicksToLabels: function () { 3961 var e = this; 3962 e.ticksAsNumbers = e.ticks.slice(), e.zeroLineIndex = e.ticks.indexOf(0), t.Scale.prototype.convertTicksToLabels.call(e) 3963 } 3964 }) 3965 } 3966 }, {}], 44: [function (t, e, a) { 3967 "use strict"; 3968 e.exports = function (t) { 3969 var e = t.helpers, a = { 3970 position: "left", 3971 ticks: {callback: t.Ticks.formatters.logarithmic} 3972 }, i = t.Scale.extend({ 3973 determineDataLimits: function () { 3974 function t(t) { 3975 return d ? t.xAxisID === a.id : t.yAxisID === a.id 3976 } 3977 3978 var a = this, i = a.options, n = i.ticks, o = a.chart, r = o.data, l = r.datasets, s = e.getValueOrDefault, d = a.isHorizontal(); 3979 if (a.min = null, a.max = null, a.minNotZero = null, i.stacked) { 3980 var u = {}; 3981 e.each(l, function (n, r) { 3982 var l = o.getDatasetMeta(r); 3983 o.isDatasetVisible(r) && t(l) && (void 0 === u[l.type] && (u[l.type] = []), e.each(n.data, function (t, e) { 3984 var n = u[l.type], o = +a.getRightValue(t); 3985 isNaN(o) || l.data[e].hidden || (n[e] = n[e] || 0, i.relativePoints ? n[e] = 100 : n[e] += o) 3986 })) 3987 }), e.each(u, function (t) { 3988 var i = e.min(t), n = e.max(t); 3989 a.min = null === a.min ? i : Math.min(a.min, i), a.max = null === a.max ? n : Math.max(a.max, n) 3990 }) 3991 } else e.each(l, function (i, n) { 3992 var r = o.getDatasetMeta(n); 3993 o.isDatasetVisible(n) && t(r) && e.each(i.data, function (t, e) { 3994 var i = +a.getRightValue(t); 3995 isNaN(i) || r.data[e].hidden || (null === a.min ? a.min = i : i < a.min && (a.min = i), null === a.max ? a.max = i : i > a.max && (a.max = i), 0 !== i && (null === a.minNotZero || i < a.minNotZero) && (a.minNotZero = i)) 3996 }) 3997 }); 3998 a.min = s(n.min, a.min), a.max = s(n.max, a.max), a.min === a.max && (0 !== a.min && null !== a.min ? (a.min = Math.pow(10, Math.floor(e.log10(a.min)) - 1), a.max = Math.pow(10, Math.floor(e.log10(a.max)) + 1)) : (a.min = 1, a.max = 10)) 3999 }, buildTicks: function () { 4000 var a = this, i = a.options, n = i.ticks, o = { 4001 min: n.min, 4002 max: n.max 4003 }, r = a.ticks = t.Ticks.generators.logarithmic(o, a); 4004 a.isHorizontal() || r.reverse(), a.max = e.max(r), a.min = e.min(r), n.reverse ? (r.reverse(), a.start = a.max, a.end = a.min) : (a.start = a.min, a.end = a.max) 4005 }, convertTicksToLabels: function () { 4006 this.tickValues = this.ticks.slice(), t.Scale.prototype.convertTicksToLabels.call(this) 4007 }, getLabelForIndex: function (t, e) { 4008 return +this.getRightValue(this.chart.data.datasets[e].data[t]) 4009 }, getPixelForTick: function (t) { 4010 return this.getPixelForValue(this.tickValues[t]) 4011 }, getPixelForValue: function (t) { 4012 var a, i, n, o = this, r = o.start, l = +o.getRightValue(t), s = o.paddingTop, d = o.paddingBottom, u = o.paddingLeft, c = o.options, h = c.ticks; 4013 return o.isHorizontal() ? (n = e.log10(o.end) - e.log10(r), 0 === l ? i = o.left + u : (a = o.width - (u + o.paddingRight), i = o.left + a /
4013n * (e.log10(l) - e.log10(r)), i += u)) : (a = o.height - (s + d), 0 !== r || h.reverse ? 0 === o.end && h.reverse ? (n = e.log10(o.start) - e.log10(o.minNotZero), i = l === o.end ? o.top + s : l === o.minNotZero ? o.top + s + .02 * a : o.top + s + .02 * a + .98 * a / n * (e.log10(l) - e.log10(o.minNotZero))) : (n = e.log10(o.end) - e.log10(r), a = o.height - (s + d), i = o.bottom - d - a / n * (e.log10(l) - e.log10(r))) : (n = e.log10(o.end) - e.log10(o.minNotZero), i = l === r ? o.bottom - d : l === o.minNotZero ? o.bottom - d - .02 * a : o.bottom - d - .02 * a - .98 * a / n * (e.log10(l) - e.log10(o.minNotZero)))), i 4014 }, getValueForPixel: function (t) { 4015 var a, i, n = this, o = e.log10(n.end) - e.log10(n.start); 4016 return n.isHorizontal() ? (i = n.width - (n.paddingLeft + n.paddingRight), a = n.start * Math.pow(10, (t - n.left - n.paddingLeft) * o / i)) : (i = n.height - (n.paddingTop + n.paddingBottom), a = Math.pow(10, (n.bottom - n.paddingBottom - t) * o / i) / n.start), a 4017 } 4018 }); 4019 t.scaleService.registerScaleType("logarithmic", i, a) 4020 } 4021 }, {}], 45: [function (t, e, a) { 4022 "use strict"; 4023 e.exports = function (t) { 4024 var e = t.helpers, a = t.defaults.global, i = { 4025 display: !0, 4026 animate: !0, 4027 lineArc: !1, 4028 position: "chartArea", 4029 angleLines: {display: !0, color: "rgba(0, 0, 0, 0.1)", lineWidth: 1}, 4030 ticks: { 4031 showLabelBackdrop: !0, 4032 backdropColor: "rgba(255,255,255,0.75)", 4033 backdropPaddingY: 2, 4034 backdropPaddingX: 2, 4035 callback: t.Ticks.formatters.linear 4036 }, 4037 pointLabels: { 4038 fontSize: 10, callback: function (t) { 4039 return t 4040 } 4041 } 4042 }, n = t.LinearScaleBase.extend({ 4043 getValueCount: function () { 4044 return this.chart.data.labels.length 4045 }, setDimensions: function () { 4046 var t = this, i = t.options, n = i.ticks; 4047 t.width = t.maxWidth, t.height = t.maxHeight, t.xCenter = Math.round(t.width / 2), t.yCenter = Math.round(t.height / 2); 4048 var o = e.min([t.height, t.width]), r = e.getValueOrDefault(n.fontSize, a.defaultFontSize); 4049 t.drawingArea = i.display ? o / 2 - (r / 2 + n.backdropPaddingY) : o / 2 4050 }, determineDataLimits: function () { 4051 var t = this, a = t.chart; 4052 t.min = null, t.max = null, e.each(a.data.datasets, function (i, n) { 4053 if (a.isDatasetVisible(n)) { 4054 var o = a.getDatasetMeta(n); 4055 e.each(i.data, function (e, a) { 4056 var i = +t.getRightValue(e); 4057 isNaN(i) || o.data[a].hidden || (null === t.min ? t.min = i : i < t.min && (t.min = i), null === t.max ? t.max = i : i > t.max && (t.max = i)) 4058 }) 4059 } 4060 }), t.handleTickRangeOptions() 4061 }, getTickLimit: function () { 4062 var t = this.options.ticks, i = e.getValueOrDefault(t.fontSize, a.defaultFontSize); 4063 return Math.min(t.maxTicksLimit ? t.maxTicksLimit : 11, Math.ceil(this.drawingArea / (1.5 * i))) 4064 }, convertTicksToLabels: function () { 4065 var e = this; 4066 t.LinearScaleBase.prototype.convertTicksToLabels.call(e), e.pointLabels = e.chart.data.labels.map(e.options.pointLabels.callback, e) 4067 }, getLabelForIndex: function (t, e) { 4068 return +this.getRightValue(this.chart.data.datasets[e].data[t]) 4069 }, fit: function () { 4070 var t, i, n, o, r, l, s, d, u, c, h, f, g = this.options.pointLabels, p = e.getValueOrDefault(g.fontSize, a.defaultFontSize), m = e.getValueOrDefault(g.fontStyle, a.defaultFontStyle), b = e.getValueOrDefault(g.fontFamily, a.defaultFontFamily), v = e.fontString(p, m, b), x = e.min([this.height / 2 - p - 5, this.width / 2]), y = this.width, k = 0; 4071 for (this.ctx.font = v, i = 0; i < this.getValueCount(); i++) { 4072 t = this.getPointPosition(i, x), n = this.ctx.measureText(this.pointLabels[i] ? this.pointLabels[i] : "").width + 5; 4073 var S = this.getIndexAngle(i) + Math.PI / 2, w = 360 * S / (2 * Math.PI) % 360; 4074 0 === w || 180 === w ? (o = n / 2, t.x + o > y && (y = t.x + o, r = i), t.x - o < k && (k = t.x - o, s = i)) : 180 > w ? t.x + n >
4074 y && (y = t.x + n, r = i) : t.x - n < k && (k = t.x - n, s = i) 4075 } 4076 u = k, c = Math.ceil(y - this.width), l = this.getIndexAngle(r), d = this.getIndexAngle(s), h = c / Math.sin(l + Math.PI / 2), f = u / Math.sin(d + Math.PI / 2), h = e.isNumber(h) ? h : 0, f = e.isNumber(f) ? f : 0, this.drawingArea = Math.round(x - (f + h) / 2), this.setCenterPoint(f, h) 4077 }, setCenterPoint: function (t, e) { 4078 var a = this, i = a.width - e - a.drawingArea, n = t + a.drawingArea; 4079 a.xCenter = Math.round((n + i) / 2 + a.left), a.yCenter = Math.round(a.height / 2 + a.top) 4080 }, getIndexAngle: function (t) { 4081 var e = 2 * Math.PI / this.getValueCount(), a = this.chart.options && this.chart.options.startAngle ? this.chart.options.startAngle : 0, i = a * Math.PI * 2 / 360; 4082 return t * e - Math.PI / 2 + i 4083 }, getDistanceFromCenterForValue: function (t) { 4084 var e = this; 4085 if (null === t)return 0; 4086 var a = e.drawingArea / (e.max - e.min); 4087 return e.options.reverse ? (e.max - t) * a : (t - e.min) * a 4088 }, getPointPosition: function (t, e) { 4089 var a = this, i = a.getIndexAngle(t); 4090 return {x: Math.round(Math.cos(i) * e) + a.xCenter, y: Math.round(Math.sin(i) * e) + a.yCenter} 4091 }, getPointPositionForValue: function (t, e) { 4092 return this.getPointPosition(t, this.getDistanceFromCenterForValue(e)) 4093 }, getBasePosition: function () { 4094 var t = this, e = t.min, a = t.max; 4095 return t.getPointPositionForValue(0, t.beginAtZero ? 0 : 0 > e && 0 > a ? a : e > 0 && a > 0 ? e : 0) 4096 }, draw: function () { 4097 var t = this, i = t.options, n = i.gridLines, o = i.ticks, r = i.angleLines, l = i.pointLabels, s = e.getValueOrDefault; 4098 if (i.display) { 4099 var d = t.ctx, u = s(o.fontSize, a.defaultFontSize), c = s(o.fontStyle, a.defaultFontStyle), h = s(o.fontFamily, a.defaultFontFamily), f = e.fontString(u, c, h); 4100 if (e.each(t.ticks, function (r, l) { 4101 if (l > 0 || i.reverse) { 4102 var c = t.getDistanceFromCenterForValue(t.ticksAsNumbers[l]), h = t.yCenter - c; 4103 if (n.display && 0 !== l)if (d.strokeStyle = e.getValueAtIndexOrDefault(n.color, l - 1), d.lineWidth = e.getValueAtIndexOrDefault(n.lineWidth, l - 1), i.lineArc)d.beginPath(), d.arc(t.xCenter, t.yCenter, c, 0, 2 * Math.PI), d.closePath(), d.stroke(); else { 4104 d.beginPath(); 4105 for (var g = 0; g < t.getValueCount(); g++) { 4106 var p = t.getPointPosition(g, c); 4107 0 === g ? d.moveTo(p.x, p.y) : d.lineTo(p.x, p.y) 4108 } 4109 d.closePath(), d.stroke() 4110 } 4111 if (o.display) { 4112 var m = s(o.fontColor, a.defaultFontColor); 4113 if (d.font = f, o.showLabelBackdrop) { 4114 var b = d.measureText(r).width; 4115 d.fillStyle = o.backdropColor, d.fillRect(t.xCenter - b / 2 - o.backdropPaddingX, h - u / 2 - o.backdropPaddingY, b + 2 * o.backdropPaddingX, u + 2 * o.backdropPaddingY) 4116 } 4117 d.textAlign = "center", d.textBaseline = "middle", d.fillStyle = m, d.fillText(r, t.xCenter, h) 4118 } 4119 } 4120 }), !i.lineArc) { 4121 d.lineWidth = r.lineWidth, d.strokeStyle = r.color; 4122 for (var g = t.getDistanceFromCenterForValue(i.reverse ? t.min : t.max), p = s(l.fontSize, a.defaultFontSize), m = s(l.fontStyle, a.defaultFontStyle), b = s(l.fontFamily, a.defaultFontFamily), v = e.fontString(p, m, b), x = t.getValueCount() - 1; x >= 0; x--) { 4123 if (r.display) { 4124 var y = t.getPointPosition(x, g); 4125 d.beginPath(), d.moveTo(t.xCenter, t.yCenter), d.lineTo(y.x, y.y), d.stroke(), d.closePath() 4126 } 4127 var k = t.getPointPosition(x, g + 5), S = s(l.fontColor, a.defaultFontColor); 4128 d.font = v, d.fillStyle = S; 4129 var w = t.pointLabels, M = this.getIndexAngle(x) + Math.PI / 2, C = 360 * M / (2 * Math.PI) % 360; 4130 0 === C || 180 === C ? d.textAlign = "center" : 180 > C ? d.textAlign = "left" : d.textAlign = "right", 90 === C || 270 === C ? d.textBaseline = "middle" : C > 270 || 90 > C ? d.textBaseline = "bottom" : d.textBaseline = "top", d.fillText(w[x] ? w[x] : "", k.x, k.y) 4131 } 4132 } 4133 } 4134 } 4135 }); 4136 t.scaleService.registerScaleType("radialLinear", n, i) 4137 } 4138 }, {}], 46: [function (t, e, a) { 4139 "use strict"; 4140 var i = t(1); 4141 i = "function" == typeof i ? i : window.moment, e.exports = function (t) { 4142 var e = t.helpers, a = { 4143 units: [{ 4144 name: "millisecond", 4145 steps: [1, 2, 5, 10, 20, 50, 100, 250, 500] 4146 }, {name: "second", steps: [1, 2, 5, 10, 30]}, { 4147 name: "minute", 4148 steps: [1, 2, 5, 10, 30] 4149 }, {name: "hour", steps: [1, 2, 3, 6, 12]}, {name: "day", steps: [1, 2, 5]}, {
4150 name: "week", 4151 maxStep: 4 4152 }, {name: "month", maxStep: 3}, {name: "quarter", maxStep: 4}, {name: "year", maxStep: !1}] 4153 }, n = { 4154 position: "bottom", 4155 time: { 4156 parser: !1, 4157 format: !1, 4158 unit: !1, 4159 round: !1, 4160 displayFormat: !1, 4161 isoWeekday: !1, 4162 minUnit: "millisecond", 4163 displayFormats: { 4164 millisecond: "h:mm:ss.SSS a", 4165 second: "h:mm:ss a", 4166 minute: "h:mm:ss a", 4167 hour: "MMM D, hA", 4168 day: "ll", 4169 week: "ll", 4170 month: "MMM YYYY", 4171 quarter: "[Q]Q - YYYY", 4172 year: "YYYY" 4173 } 4174 }, 4175 ticks: {autoSkip: !1} 4176 }, o = t.Scale.extend({ 4177 initialize: function () { 4178 if (!i)throw new Error("Chart.js - Moment.js could not be found! You must include it before Chart.js to use the time scale. Download at https://momentjs.com"); 4179 t.Scale.prototype.initialize.call(this) 4180 }, getLabelMoment: function (t, e) { 4181 return null === t || null === e ? null : "undefined" != typeof this.labelMoments[t] ? this.labelMoments[t][e] : null 4182 }, getLabelDiff: function (t, e) { 4183 var a = this; 4184 return null === t || null === e ? null : (void 0 === a.labelDiffs && a.buildLabelDiffs(), "undefined" != typeof a.labelDiffs[t] ? a.labelDiffs[t][e]
4184: null) 4185 }, getMomentStartOf: function (t) { 4186 var e = this; 4187 return "week" === e.options.time.unit && e.options.time.isoWeekday !== !1 ? t.clone().startOf("isoWeek").isoWeekday(e.options.time.isoWeekday) : t.clone().startOf(e.tickUnit) 4188 }, determineDataLimits: function () { 4189 var t = this; 4190 t.labelMoments = []; 4191 var a = []; 4192 t.chart.data.labels && t.chart.data.labels.length > 0 ? (e.each(t.chart.data.labels, function (e) { 4193 var i = t.parseTime(e); 4194 i.isValid() && (t.options.time.round && i.startOf(t.options.time.round), a.push(i)) 4195 }, t), t.firstTick = i.min.call(t, a), t.lastTick = i.max.call(t, a)) : (t.firstTick = null, t.lastTick = null), e.each(t.chart.data.datasets, function (n, o) { 4196 var r = [], l = t.chart.isDatasetVisible(o); 4197 "object" == typeof n.data[0] && null !== n.data[0] ? e.each(n.data, function (e) { 4198 var a = t.parseTime(t.getRightValue(e)); 4199 a.isValid() && (t.options.time.round && a.startOf(t.options.time.round), r.push(a), l && (t.firstTick = null !== t.firstTick ? i.min(t.firstTick, a) : a, t.lastTick = null !== t.lastTick ? i.max(t.lastTick, a) : a)) 4200 }, t) : r = a, t.labelMoments.push(r) 4201 }, t), t.options.time.min && (t.firstTick = t.parseTime(t.options.time.min)), t.options.time.max && (t.lastTick = t.parseTime(t.options.time.max)), t.firstTick = (t.firstTick || i()).clone(), t.lastTick = (t.lastTick || i()).clone() 4202 }, buildLabelDiffs: function () { 4203 var t = this; 4204 t.labelDiffs = []; 4205 var a = []; 4206 t.chart.data.labels && t.chart.data.labels.length > 0 && e.each(t.chart.data.labels, function (e) { 4207 var i = t.parseTime(e); 4208 i.isValid() && (t.options.time.round && i.startOf(t.options.time.round), a.push(i.diff(t.firstTick, t.tickUnit, !0))) 4209 }, t), e.each(t.chart.data.datasets, function (i) { 4210 var n = []; 4211 "object" == typeof i.data[0] && null !== i.data[0] ? e.each(i.data, function (e) { 4212 var a = t.parseTime(t.getRightValue(e)); 4213 a.isValid() && (t.options.time.round && a.startOf(t.options.time.round), n.push(a.diff(t.firstTick, t.tickUnit, !0))) 4214 }, t) : n = a, t.labelDiffs.push(n) 4215 }, t) 4216 }, buildTicks: function () { 4217 var i = this; 4218 i.ctx.save(); 4219 var n = e.getValueOrDefault(i.options.ticks.fontSize, t.defaults.global.defaultFontSize), o = e.getValueOrDefault(i.options.ticks.fontStyle, t.defaults.global.defaultFontStyle), r = e.getValueOrDefault(i.options.ticks.fontFamily, t.defaults.global.defaultFontFamily), l = e.fontString(n, o, r); 4220 if (i.ctx.font = l, i.ticks = [], i.unitScale = 1, i.scaleSizeInUnits = 0, i.options.time.unit)i.tickUnit = i.options.time.unit || "day", i.displayFormat = i.options.time.displayFormats[i.tickUnit], i.scaleSizeInUnits = i.lastTick.diff(i.firstTick, i.tickUnit, !0), i.unitScale = e.getValueOrDefault(i.options.time.unitStepSize, 1); else { 4221 var s = i.isHorizontal() ? i.width - (i.paddingLeft + i.paddingRight) : i.height - (i.paddingTop + i.paddingBottom), d = i.tickFormatFunction(i.firstTick, 0, []), u = i.ctx.measureText(d).width, c = Math.cos(e.toRadians(i.options.ticks.maxRotation)), h = Math.sin(e.toRadians(i.options.ticks.maxRotation)); 4222 u = u * c + n * h; 4223 var f = s / u; 4224 i.tickUnit = i.options.time.minUnit, i.scaleSizeInUnits = i.lastTick.diff(i.firstTick, i.tickUnit, !0), i.displayFormat = i.options.time.displayFormats[i.tickUnit]; 4225 for (var g = 0, p = a.units[g]; g < a.units.length;) { 4226 if (i.unitScale = 1, e.isArray(p.steps) && Math.ceil(i.scaleSizeInUnits / f) < e.max(p.steps)) { 4227 for (var m = 0; m < p.steps.length; ++m)if (p.steps[m] >= Math.ceil(i.scaleSizeInUnits / f)) { 4228 i.unitScale = e.getValueOrDefault(i.options.time.unitStepSize, p.steps[m]); 4229 break 4230 } 4231 break 4232 } 4233 if (p.maxStep === !1 || Math.ceil(i.scaleSizeInUnits / f) < p.maxStep) { 4234 i.unitScale = e.getValueOrDefault(i.options.time.unitStepSize, Math.ceil(i.scaleSizeInUnits / f)); 4235 break 4236 } 4237 ++g, p = a.units[g], i.tickUnit = p.name; 4238 var b = i.firstTick.diff(i.getMomentStartOf(i.firstTick), i.tickUnit, !0), v = i.getMomentStartOf(i.lastTick.clone().add(1, i.tickUnit)).diff(i.lastTick, i.tickUnit, !0); 4239 i.scaleSizeInUnits = i.lastTick.diff(i.firstTick, i.tickUnit, !0) + b + v, i.displayFormat = i.options.time.displayFormats[p.name] 4240 } 4241 } 4242 var x; 4243 if (i.options.time.min ? x = i.getMomentStartOf(i.firstTick) : (i.firstTick = i.getMomentStartOf(i.firstTick), x = i.firstTick), !i.options.time.max) { 4244 var y = i.getMomentStartOf(i.lastTick), k = y.diff(i.lastTick, i.tickUnit, !0); 4245 0 > k ? i.lastTick = i.getMomentStartOf(i.lastTick.add(1, i.tickUnit)) : k >= 0 && (i.lastTick = y), i.scaleSizeInUnits = i.lastTick.diff(i.firstTick, i.tickUnit, !0) 4246 } 4247 i.options.time.displayFormat && (i.displayFormat = i.options.time.displayFormat), i.ticks.push(i.firstTick.clone()); 4248 for (var S = 1; S <= i.scaleSizeInUnits; ++S) { 4249 var w = x.clone().add(S, i.tickUnit); 4250 if (i.options.time.max && w.diff(i.lastTick, i.tickUnit, !0) >= 0)break; 4251 S % i.unitScale === 0 && i.ticks.push(w) 4252 } 4253 var M = i.ticks[i.ticks.length - 1].diff(i.lastTick, i.tickUnit); 4254 (0 !== M || 0 === i.scaleSizeInUnits) && (i.options.time.max ? (i.ticks.push(i.lastTick.clone()), i.scaleSizeInUnits = i.lastTick.diff(i.ticks[0], i.tickUnit, !0)) : (i.ticks.push(i.lastTick.clone()), i.scaleSizeInUnits = i.lastTick.diff(i.firstTick, i.tickUnit, !0))), i.ctx.restore(
4254), i.labelDiffs = void 0 4255 }, getLabelForIndex: function (t, e) { 4256 var a = this, i = a.chart.data.labels && t < a.chart.data.labels.length ? a.chart.data.labels[t] : ""; 4257 return "object" == typeof a.chart.data.datasets[e].data[0] && (i = a.getRightValue(a.chart.data.datasets[e].data[t])), a.options.time.tooltipFormat && (i = a.parseTime(i).format(a.options.time.tooltipFormat)), i 4258 }, tickFormatFunction: function (t, a, i) { 4259 var n = t.format(this.displayFormat), o = this.options.ticks, r = e.getValueOrDefault(o.callback, o.userCallback); 4260 return r ? r(n, a, i) : n 4261 }, convertTicksToLabels: function () { 4262 var t = this; 4263 t.tickMoments = t.ticks, t.ticks = t.ticks.map(t.tickFormatFunction, t) 4264 }, getPixelForValue: function (t, e, a) { 4265 var i = this, n = null; 4266 if (void 0 !== e && void 0 !== a && (n = i.getLabelDiff(a, e)), null === n && (t && t.isValid || (t = i.parseTime(i.getRightValue(t))), t && t.isValid && t.isValid() && (n = t.diff(i.firstTick, i.tickUnit, !0))), null !== n) { 4267 var o = 0 !== n ? n / i.scaleSizeInUnits : n; 4268 if (i.isHorizontal()) { 4269 var r = i.width - (i.paddingLeft + i.paddingRight), l = r * o + i.paddingLeft; 4270 return i.left + Math.round(l) 4271 } 4272 var s = i.height - (i.paddingTop + i.paddingBottom), d = s * o + i.paddingTop; 4273 return i.top + Math.round(d) 4274 } 4275 }, getPixelForTick: function (t) { 4276 return this.getPixelForValue(this.tickMoments[t], null, null) 4277 }, getValueForPixel: function (t) { 4278 var e = this, a = e.isHorizontal() ? e.width - (e.paddingLeft + e.paddingRight) : e.height - (e.paddingTop + e.paddingBottom), n = (t - (e.isHorizontal() ? e.left + e.paddingLeft : e.top + e.paddingTop)) / a; 4279 return n *= e.scaleSizeInUnits, e.firstTick.clone().add(i.duration(n, e.tickUnit).asSeconds(), "seconds") 4280 }, parseTime: function (t) { 4281 var e = this; 4282 return "string" == typeof e.options.time.parser ? i(t, e.options.time.parser) : "function" == typeof e.options.time.parser ? e.options.time.parser(t) : "function" == typeof t.getMonth || "number" == typeof t ? i(t) : t.isValid && t.isValid() ? t : "string" != typeof e.options.time.format && e.options.time.format.call ? (console.warn("options.time.format is deprecated and replaced by options.time.parser. See http://nnnick.github.io/Chart.js/docs-v2/#scales-time-scale"), e.options.time.format(t)) : i(t, e.options.time.format) 4283 } 4284 }); 4285 t.scaleService.registerScaleType("time", o, n) 4286 } 4287 }, {1: 1}] 4288 }, {}, [7])(7) 4289});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.