1/*! 2 * Chart.js 3 * http://chartjs.org/ 4 * Version: 2.1.6 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 Q[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 C(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 M(t) { 490 return i(C(t)) 491 } 492 493 function D(t) { 494 return n(C(t)) 495 } 496 497 function A(t) { 498 return l(C(t)) 499 } 500 501 function I(t) { 502 return s(C(t)) 503 } 504 505 function F(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 T(t) { 511 return i(F(t)) 512 } 513 514 function P(t) { 515 return n(F(t)) 516 } 517 518 function _(t) { 519 return o(F(t)) 520 } 521 522 function R(t) { 523 return s(F(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 O(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 L(t) { 537 return W(O(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 H(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 N(t) { 560 return B(H(t)) 561 } 562 563 function E(t) { 564 return z(H(t)) 565 } 566 567 function U(t) { 568 return G[t] 569 } 570 571 function q(t) { 572 return i(U(t)) 573 } 574 575 function j(t) { 576 return n(U(t)) 577 } 578 579 function Y(t) { 580 return o(U(t)) 581 } 582 583 function J(t) { 584 return l(U(t)) 585 } 586 587 function X(t) { 588 return u(U(t)) 589 } 590 591 function Z(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: C, 615 hwb2hsl: M, 616 hwb2hsv: D, 617 hwb2cmyk: A, 618 hwb2keyword: I, 619 cmyk2rgb: F, 620 cmyk2hsl: T, 621 cmyk2hsv: P, 622 cmyk2hwb: _, 623 cmyk2keyword: R, 624 keyword2rgb: U, 625 keyword2hsl: q, 626 keyword2hsv: j, 627 keyword2hwb: Y, 628 keyword2cmyk: J, 629 keyword2lab: X, 630 keyword2xyz: Z, 631 xyz2rgb: V, 632 xyz2lab: O, 633 xyz2lch: L, 634 lab2xyz: B, 635 lab2rgb: z, 636 lab2lch: W, 637 lch2lab: H, 638 lch2xyz: N, 639 lch2rgb: E 640 }; 641 var G = { 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 }, Q = {}; 791 for (var $ in G)Q[JSON.stringify(G[$])] = $ 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(26)(); 986 t(25)(i), t(24)(i), t(21)(i), t(22)(i), t(23)(i), t(27)(i), t(31)(i), t(29)(i), t(30)(i), t(32)(i), t(28)(i), t(33)(i), t(34)(i), t(35)(i), t(36)(i), t(37)(i), t(40)(i), t(38)(i), t(39)(i), t(41)(i), t(42)(i), t(43)(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 8: 8, 1023 9: 9 1024 }], 8: [function (t, e, a) { 1025 "use strict"; 1026 e.exports = function (t) { 1027 t.Bar = function (e, a) { 1028 return a.type = "bar", new t(e, a) 1029 } 1030 } 1031 }, {}], 9: [function (t, e, a) { 1032 "use strict"; 1033 e.exports = function (t) { 1034 t.Bubble = function (e, a) { 1035 return a.type = "bubble", new t(e, a) 1036 } 1037 } 1038 }, {}], 10: [function (t, e, a) { 1039 "use strict"; 1040 e.exports = function (t) { 1041 t.Doughnut = function (e, a) { 1042 return a.type = "doughnut", new t(e, a) 1043 } 1044 } 1045 }, {}], 11: [function (t, e, a) { 1046 "use strict"; 1047 e.exports = function (t) { 1048 t.Line = function (e, a) { 1049 return a.type = "line", new t(e, a) 1050 } 1051 } 1052 }, {}], 12: [function (t, e, a) { 1053 "use strict"; 1054 e.exports = function (t) { 1055 t.PolarArea = function (e, a) { 1056 return a.type = "polarArea", new t(e, a) 1057 } 1058 } 1059 }, {}], 13: [function (t, e, a) { 1060 "use strict"; 1061 e.exports = function (t) { 1062 t.Radar = function (e, a) { 1063 return a.options = t.helpers.configMerge({aspectRatio: 1}, a.options), a.type = "radar", new t(e, a) 1064 } 1065 } 1066 }, {}], 14: [function (t, e, a) { 1067 "use strict"; 1068 e.exports = function (t) { 1069 var e = { 1070 hover: {mode: "single"}, 1071 scales: { 1072 xAxes: [{type: "linear", position: "bottom", id: "x-axis-1"}], 1073 yAxes: [{type: "linear", position: "left", id: "y-axis-1"}] 1074 }, 1075 tooltips: { 1076 callbacks: { 1077 title: function (t, e) { 1078 return "" 1079 }, label: function (t, e) { 1080 return "(" + t.xLabel + ", " + t.yLabel + ")" 1081 } 1082 } 1083 } 1084 }; 1085 t.defaults.scatter = e, t.controllers.scatter = t.controllers.line, t.Scatter = function (e, a) { 1086 return a.type = "scatter", new t(e, a) 1087 } 1088 } 1089 }, {}], 15: [function (t, e, a) { 1090 "use strict"; 1091 e.exports = function (t) { 1092 var e = t.helpers; 1093 t.defaults.bar = { 1094 hover: {mode: "label"}, 1095 scales: { 1096 xAxes: [{ 1097 type: "category", 1098 categoryPercentage: .8, 1099 barPercentage: .9, 1100 gridLines: {offsetGridLines: !0} 1101 }], yAxes: [{type: "linear"}] 1102 } 1103 }, t.controllers.bar = t.DatasetController.extend({ 1104 dataElementType: t.elements.Rectangle, 1105 initialize: function (e, a) { 1106 t.DatasetController.prototype.initialize.call(this, e, a), this.getMeta().bar = !0 1107 }, 1108 getBarCount: function () { 1109 var t = this, a = 0; 1110 return e.each(t.chart.data.datasets, function (e, i) { 1111 var n = t.chart.getDatasetMeta(i); 1112 n.bar && t.chart.isDatasetVisible(i) && ++a 1113 }, t), a 1114 }, 1115 update: function (t) { 1116 var a = this; 1117 e.each(a.getMeta().data, function (e, i) { 1118 a.updateElement(e, i, t) 1119 }, a) 1120 }, 1121 updateElement: function (t, a, i) { 1122 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(); 1123 e.extend(t, { 1124 _xScale: r, 1125 _yScale: l, 1126 _datasetIndex: n.index, 1127 _index: a, 1128 _model: { 1129 x: n.calculateBarX(a, n.index), 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(a), 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 } 1140 }), t.pivot() 1141 }, 1142 calculateBarBase: function (t, e) { 1143 var a = this, i = a.getMeta(), n = a.getScaleForId(i.yAxisID), o = 0; 1144 if (n.options.stacked) {
1145 var r = a.chart, l = r.data.datasets, s = l[t].data[e]; 1146 if (0 > s)for (var d = 0; t > d; d++) { 1147 var u = l[d], c = r.getDatasetMeta(d); 1148 c.bar && c.yAxisID === n.id && r.isDatasetVisible(d) && (o += u.data[e] < 0 ? u.data[e] : 0) 1149 } else for (var h = 0; t > h; h++) { 1150 var f = l[h], g = r.getDatasetMeta(h); 1151 g.bar && g.yAxisID === n.id && r.isDatasetVisible(h) && (o += f.data[e] > 0 ? f.data[e] : 0) 1152 } 1153 return n.getPixelForValue(o) 1154 } 1155 return n.getBasePixel() 1156 }, 1157 getRuler: function (t) { 1158 var e, a = this, i = a.getMeta(), n = a.getScaleForId(i.xAxisID), o = a.getBarCount(); 1159 e = "category" === n.options.type ? n.getPixelForTick(t + 1) - n.getPixelForTick(t) : n.width / n.ticks.length; 1160 var r = e * n.options.categoryPercentage, l = (e - e * n.options.categoryPercentage) / 2, s = r / o; 1161 if (n.ticks.length !== a.chart.data.labels.length) { 1162 var d = n.ticks.length / a.chart.data.labels.length; 1163 s *= d 1164 } 1165 var u = s * n.options.barPercentage, c = s - s * n.options.barPercentage; 1166 return { 1167 datasetCount: o, 1168 tickWidth: e, 1169 categoryWidth: r, 1170 categorySpacing: l, 1171 fullBarWidth: s, 1172 barWidth: u, 1173 barSpacing: c 1174 } 1175 }, 1176 calculateBarWidth: function (t) { 1177 var e = this.getScaleForId(this.getMeta().xAxisID), a = this.getRuler(t); 1178 return e.options.stacked ? a.categoryWidth : a.barWidth 1179 }, 1180 getBarIndex: function (t) { 1181 var e, a, i = 0; 1182 for (a = 0; t > a; ++a)e = this.chart.getDatasetMeta(a), e.bar && this.chart.isDatasetVisible(a) && ++i; 1183 return i 1184 }, 1185 calculateBarX: function (t, e) { 1186 var a = this, i = a.getMeta(), n = a.getScaleForId(i.xAxisID), o = a.getBarIndex(e), r = a.getRuler(t), l = n.getPixelForValue(null, t, e, a.chart.isCombo); 1187 return l -= a.chart.isCombo ? r.tickWidth / 2 : 0, n.options.stacked ? l + r.categoryWidth / 2 + r.categorySpacing : l + r.barWidth / 2 + r.categorySpacing + r.barWidth * o + r.barSpacing / 2 + r.barSpacing * o 1188 }, 1189 calculateBarY: function (t, e) { 1190 var a = this, i = a.getMeta(), n = a.getScaleForId(i.yAxisID), o = a.getDataset().data[t]; 1191 if (n.options.stacked) { 1192 for (var r = 0, l = 0, s = 0; e > s; s++) { 1193 var d = a.chart.data.datasets[s], u = a.chart.getDatasetMeta(s); 1194 u.bar && u.yAxisID === n.id && a.chart.isDatasetVisible(s) && (d.data[t] < 0 ? l += d.data[t] || 0 : r += d.data[t] || 0) 1195 } 1196 return 0 > o ? n.getPixelForValue(l + o) : n.getPixelForValue(r + o) 1197 } 1198 return n.getPixelForValue(o) 1199 }, 1200 draw: function (t) { 1201 var a = this, i = t || 1; 1202 e.each(a.getMeta().data, function (t, e) { 1203 var n = a.getDataset().data[e]; 1204 null === n || void 0 === n || isNaN(n) || t.transition(i).draw() 1205 }, a) 1206 }, 1207 setHoverStyle: function (t) { 1208 var a = this.chart.data.datasets[t._datasetIndex], i = t._index, n = t.custom || {}, o = t._model;
1209 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) 1210 }, 1211 removeHoverStyle: function (t) { 1212 var a = this.chart.data.datasets[t._datasetIndex], i = t._index, n = t.custom || {}, o = t._model, r = this.chart.options.elements.rectangle; 1213 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) 1214 } 1215 }), t.defaults.horizontalBar = { 1216 hover: {mode: "label"}, 1217 scales: { 1218 xAxes: [{type: "linear", position: "bottom"}], 1219 yAxes: [{ 1220 position: "left", 1221 type: "category", 1222 categoryPercentage: .8, 1223 barPercentage: .9, 1224 gridLines: {offsetGridLines: !0} 1225 }] 1226 }, 1227 elements: {rectangle: {borderSkipped: "left"}}, 1228 tooltips: { 1229 callbacks: { 1230 title: function (t, e) { 1231 var a = ""; 1232 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 1233 }, label: function (t, e) { 1234 var a = e.datasets[t.datasetIndex].label || ""; 1235 return a + ": " + t.xLabel 1236 } 1237 } 1238 } 1239 }, t.controllers.horizontalBar = t.controllers.bar.extend({ 1240 updateElement: function (t, a, i, n) { 1241 var o = this, r = o.getMeta(), l = o.getScaleForId(r.xAxisID), s = o.getScaleForId(r.yAxisID), d = l.getBasePixel(), u = t.custom || {}, c = o.getDataset(), h = o.chart.options.elements.rectangle; 1242 e.extend(t, { 1243 _xScale: l, 1244 _yScale: s, 1245 _datasetIndex: o.index, 1246 _index: a, 1247 _model: { 1248 x: i ? d : o.calculateBarX(a, o.index), 1249 y: o.calculateBarY(a, o.index), 1250 label: o.chart.data.labels[a], 1251 datasetLabel: c.label, 1252 base: i ? d : o.calculateBarBase(o.index, a), 1253 height: o.calculateBarHeight(a), 1254 backgroundColor: u.backgroundColor ? u.backgroundColor : e.getValueAtIndexOrDefault(c.backgroundColor, a, h.backgroundColor), 1255 borderSkipped: u.borderSkipped ? u.borderSkipped : h.borderSkipped, 1256 borderColor: u.borderColor ? u.borderColor : e.getValueAtIndexOrDefault(c.borderColor, a, h.borderColor), 1257 borderWidth: u.borderWidth ? u.borderWidth : e.getValueAtIndexOrDefault(c.borderWidth, a, h.borderWidth) 1258 }, 1259 draw: function () { 1260 function t(t) { 1261 return s[(u + t) % 4] 1262 } 1263 1264 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; 1265 a.borderWidth && (n += l, o -= l, r += l), e.beginPath(), e.fillStyle = a.backgroundColor, e.strokeStyle = a.borderColor, e.lineWidth = a.borderWidth; 1266 var s = [[a.base, o], [a.base, n], [r, n], [r, o]], d = ["bottom", "left", "top", "right"], u = d.indexOf(a.borderSkipped, 0); 1267 -1 === u && (u = 0), e.moveTo.apply(e, t(0)); 1268 for (var c = 1; 4 > c; c++)e.lineTo.apply(e, t(c)); 1269 e.fill(), a.borderWidth && e.stroke() 1270 }, 1271 inRange: function (t, e) { 1272 var a = this._view, i = !1; 1273 return a && (i = a.x < a.base ? e >= a.y - a.height / 2 && e <= a.y + a.height / 2 && t >= a.x && t <= a.base : e >= a.y - a.height / 2 && e <= a.y + a.height / 2 && t >= a.base && t <= a.x), i 1274 } 1275 }), t.pivot() 1276 }, calculateBarBase: function (t, e) { 1277 var a = this, i = a.getMeta(), n = a.getScaleForId(i.xAxisID), o = 0; 1278 if (n.options.stacked) {
1279 var r = a.chart.data.datasets[t].data[e]; 1280 if (0 > r)for (var l = 0; t > l; l++) { 1281 var s = a.chart.data.datasets[l], d = a.chart.getDatasetMeta(l); 1282 d.bar && d.xAxisID === n.id && a.chart.isDatasetVisible(l) && (o += s.data[e] < 0 ? s.data[e] : 0) 1283 } else for (var u = 0; t > u; u++) { 1284 var c = a.chart.data.datasets[u], h = a.chart.getDatasetMeta(u); 1285 h.bar && h.xAxisID === n.id && a.chart.isDatasetVisible(u) && (o += c.data[e] > 0 ? c.data[e] : 0) 1286 } 1287 return n.getPixelForValue(o) 1288 } 1289 return n.getBasePixel() 1290 }, getRuler: function (t) { 1291 var e, a = this, i = a.getMeta(), n = a.getScaleForId(i.yAxisID), o = a.getBarCount(); 1292 e = "category" === n.options.type ? n.getPixelForTick(t + 1) - n.getPixelForTick(t) : n.width / n.ticks.length; 1293 var r = e * n.options.categoryPercentage, l = (e - e * n.options.categoryPercentage) / 2, s = r / o; 1294 if (n.ticks.length !== a.chart.data.labels.length) { 1295 var d = n.ticks.length / a.chart.data.labels.length; 1296 s *= d 1297 } 1298 var u = s * n.options.barPercentage, c = s - s * n.options.barPercentage; 1299 return { 1300 datasetCount: o, 1301 tickHeight: e, 1302 categoryHeight: r, 1303 categorySpacing: l, 1304 fullBarHeight: s, 1305 barHeight: u, 1306 barSpacing: c 1307 } 1308 }, calculateBarHeight: function (t) { 1309 var e = this, a = e.getScaleForId(e.getMeta().yAxisID), i = e.getRuler(t); 1310 return a.options.stacked ? i.categoryHeight : i.barHeight 1311 }, calculateBarX: function (t, e) { 1312 var a = this, i = a.getMeta(), n = a.getScaleForId(i.xAxisID), o = a.getDataset().data[t]; 1313 if (n.options.stacked) { 1314 for (var r = 0, l = 0, s = 0; e > s; s++) { 1315 var d = a.chart.data.datasets[s], u = a.chart.getDatasetMeta(s); 1316 u.bar && u.xAxisID === n.id && a.chart.isDatasetVisible(s) && (d.data[t] < 0 ? l += d.data[t] || 0 : r += d.data[t] || 0) 1317 } 1318 return 0 > o ? n.getPixelForValue(l + o) : n.getPixelForValue(r + o) 1319 } 1320 return n.getPixelForValue(o) 1321 }, calculateBarY: function (t, e) { 1322 var a = this, i = a.getMeta(), n = a.getScaleForId(i.yAxisID), o = a.getBarIndex(e), r = a.getRuler(t), l = n.getPixelForValue(null, t, e, a.chart.isCombo); 1323 return l -= a.chart.isCombo ? r.tickHeight / 2 : 0, n.options.stacked ? l + r.categoryHeight / 2 + r.categorySpacing : l + r.barHeight / 2 + r.categorySpacing + r.barHeight * o + r.barSpacing / 2 + r.barSpacing * o 1324 } 1325 }) 1326 } 1327 }, {}], 16: [function (t, e, a) { 1328 "use strict"; 1329 e.exports = function (t) { 1330 var e = t.helpers; 1331 t.defaults.bubble = { 1332 hover: {mode: "single"}, 1333 scales: { 1334 xAxes: [{type: "linear", position: "bottom", id: "x-axis-0"}], 1335 yAxes: [{type: "linear", position: "left", id: "y-axis-0"}] 1336 }, 1337 tooltips: { 1338 callbacks: { 1339 title: function (t, e) { 1340 return "" 1341 }, label: function (t, e) { 1342 var a = e.datasets[t.datasetIndex].label || "", i = e.datasets[t.datasetIndex].data[t.index]; 1343 return a + ": (" + i.x + ", " + i.y + ", " + i.r + ")" 1344 } 1345 } 1346 } 1347 }, t.controllers.bubble = t.DatasetController.extend({ 1348 dataElementType: t.elements.Point, 1349 update: function (t) { 1350 var a = this, i = a.getMeta(), n = i.data; 1351 e.each(n, function (e, i) { 1352 a.updateElement(e, i, t) 1353 }) 1354 }, 1355 updateElement: function (a, i, n) { 1356 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; 1357 e.extend(a, { 1358 _xScale: l, 1359 _yScale: s, 1360 _datasetIndex: f, 1361 _index: i, 1362 _model: { 1363 x: n ? l.getPixelForDecimal(.5) : l.getPixelForValue(c, i, f, o.chart.isCombo), 1364 y: n ? s.getBasePixel() : s.getPixelForValue(c, i, f), 1365 radius: n ? 0 : d.radius ? d.radius : o.getRadius(c), 1366 hitRadius: d.hitRadius ? d.hitRadius : e.getValueAtIndexOrDefault(u.hitRadius, i, h.hitRadius) 1367 } 1368 }), t.DatasetController.prototype.removeHoverStyle.call(o, a, h); 1369 var g = a._model; 1370 g.skip = d.skip ? d.skip : isNaN(g.x) || isNaN(g.y), a.pivot() 1371 }, 1372 getRadius: function (t) { 1373 return t.r || this.chart.options.elements.point.radius 1374 }, 1375 setHoverStyle: function (a) { 1376 var i = this; 1377 t.DatasetController.prototype.setHoverStyle.call(i, a); 1378 var n = i.chart.data.datasets[a._datasetIndex], o = a._index, r = a.
1378custom || {}, l = a._model; 1379 l.radius = r.hoverRadius ? r.hoverRadius : e.getValueAtIndexOrDefault(n.hoverRadius, o, i.chart.options.elements.point.hoverRadius) + i.getRadius(n.data[o]) 1380 }, 1381 removeHoverStyle: function (e) { 1382 var a = this; 1383 t.DatasetController.prototype.removeHoverStyle.call(a, e, a.chart.options.elements.point); 1384 var i = a.chart.data.datasets[e._datasetIndex].data[e._index], n = e.custom || {}, o = e._model; 1385 o.radius = n.radius ? n.radius : a.getRadius(i) 1386 } 1387 }) 1388 } 1389 }, {}], 17: [function (t, e, a) { 1390 "use strict"; 1391 e.exports = function (t) { 1392 var e = t.helpers, a = t.defaults; 1393 a.doughnut = { 1394 animation: {animateRotate: !0, animateScale: !1}, 1395 aspectRatio: 1, 1396 hover: {mode: "single"}, 1397 legendCallback: function (t) { 1398 var e = []; 1399 e.push('<ul class="' + t.id + '-legend">'); 1400 var a = t.data, i = a.datasets, n = a.labels; 1401 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>"); 1402 return e.push("</ul>"), e.join("") 1403 }, 1404 legend: { 1405 labels: { 1406 generateLabels: function (t) { 1407 var a = t.data; 1408 return a.labels.length && a.datasets.length ? a.labels.map(function (i, n) { 1409 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); 1410 return { 1411 text: i, 1412 fillStyle: c, 1413 strokeStyle: h, 1414 lineWidth: f, 1415 hidden: isNaN(r.data[n]) || o.data[n].hidden, 1416 index: n 1417 } 1418 }) : [] 1419 } 1420 }, onClick: function (t, e) { 1421 var a, i, n, o = e.index, r = this.chart; 1422 for (a = 0, i = (r.data.datasets || []).length; i > a; ++a)n = r.getDatasetMeta(a), n.data[o].hidden = !n.data[o].hidden; 1423 r.update() 1424 } 1425 }, 1426 cutoutPercentage: 50, 1427 rotation: Math.PI * -.5, 1428 circumference: 2 * Math.PI, 1429 tooltips: { 1430 callbacks: { 1431 title: function () { 1432 return "" 1433 }, label: function (t, e) { 1434 return e.labels[t.index] + ": " + e.datasets[t.datasetIndex].data[t.index] 1435 } 1436 } 1437 } 1438 }, a.pie = e.clone(a.doughnut), e.extend(a.pie, {cutoutPercentage: 0}), t.controllers.doughnut = t.controllers.pie = t.DatasetController.extend({ 1439 dataElementType: t.elements.Arc, 1440 linkScales: e.noop, 1441 getRingIndex: function (t) { 1442 for (var e = 0, a = 0; t > a; ++a)this.chart.isDatasetVisible(a) && ++e; 1443 return e 1444 }, 1445 update: function (t) { 1446 var a = this, i = a.chart, n = i.chartArea, o = i.options, r = o.elements.ar
1446c, l = n.right - n.left - r.borderWidth, s = n.bottom - n.top - r.borderWidth, d = Math.min(l, s), u = { 1447 x: 0, 1448 y: 0 1449 }, c = a.getMeta(), h = o.cutoutPercentage, f = o.circumference; 1450 if (f < 2 * Math.PI) { 1451 var g = o.rotation % (2 * Math.PI); 1452 g += 2 * Math.PI * (g >= Math.PI ? -1 : g < -Math.PI ? 1 : 0); 1453 var p = g + f, m = {x: Math.cos(g), y: Math.sin(g)}, b = { 1454 x: Math.cos(p), 1455 y: Math.sin(p) 1456 }, 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 = { 1457 x: y ? -1 : Math.min(m.x * (m.x < 0 ? 1 : S), b.x * (b.x < 0 ? 1 : S)), 1458 y: k ? -1 : Math.min(m.y * (m.y < 0 ? 1 : S), b.y * (b.y < 0 ? 1 : S)) 1459 }, C = { 1460 x: v ? 1 : Math.max(m.x * (m.x > 0 ? 1 : S), b.x * (b.x > 0 ? 1 : S)), 1461 y: x ? 1 : Math.max(m.y * (m.y > 0 ? 1 : S), b.y * (b.y > 0 ? 1 : S)) 1462 }, M = {width: .5 * (C.x - w.x), height: .5 * (C.y - w.y)}; 1463 d = Math.min(l / M.width, s / M.height), u = {x: (C.x + w.x) * -.5, y: (C.y + w.y) * -.5} 1464 } 1465 i.outerRadius = Math.max(d / 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) { 1466 a.updateElement(e, i, t) 1467 }) 1468 }, 1469 updateElement: function (t, a, i) { 1470 var n = this, o = n.chart, r = o.chartArea, l = o.options, s = l.animation, d = (l.elements.arc, (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 = (t.custom || {}, e.getValueAtIndexOrDefault); 1471 e.extend(t, { 1472 _datasetIndex: n.index, 1473 _index: a, 1474 _model: { 1475 x: d + o.offsetX, 1476 y: u + o.offsetY, 1477 startAngle: c, 1478 endAngle: h, 1479 circumference: g, 1480 outerRadius: m, 1481 innerRadius: p, 1482 label: b(f.label, a, o.data.labels[a]) 1483 } 1484 }); 1485 var v = t._model; 1486 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() 1487 }, 1488 removeHoverStyle: function (e) { 1489 t.DatasetController.prototype.removeHoverStyle.call(this, e, this.chart.options.elements.arc) 1490 }, 1491 calculateTotal: function () { 1492 var t, a = this.getDataset(), i = this.getMeta(), n = 0; 1493 return e.each(i.data, function (e, i) { 1494 t = a.data[i], isNaN(t) || e.hidden || (n += Math.abs(t)) 1495 }), n 1496 }, 1497 calculateCircumference: function (t) { 1498 var e = this.getMeta().total; 1499 return e > 0 && !isNaN(t) ? 2 * Math.PI * (t / e) : 0 1500 } 1501 }) 1502 } 1503 }, {}], 18: [function (t, e, a) { 1504 "use strict"; 1505 e.exports = function (t) { 1506 function e(t, e) {
1507 return a.getValueOrDefault(t.showLine, e.showLines) 1508 } 1509 1510 var a = t.helpers; 1511 t.defaults.line = { 1512 showLines: !0, 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 addElementAndReset: function (a) { 1519 var i = this, n = i.chart.options, o = i.getMeta(); 1520 t.DatasetController.prototype.addElementAndReset.call(i, a), e(i.getDataset(), n) && 0 !== o.dataset._model.tension && i.updateBezierControlPoints() 1521 }, 1522 update: function (t) { 1523 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); 1524 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 = { 1525 spanGaps: f.spanGaps ? f.spanGaps : !1, 1526 tension: o.tension ? o.tension : a.getValueOrDefault(f.lineTension, c.tension), 1527 backgroundColor: o.backgroundColor ? o.backgroundColor : f.backgroundColor || c.backgroundColor, 1528 borderWidth: o.borderWidth ? o.borderWidth : f.borderWidth || c.borderWidth, 1529 borderColor: o.borderColor ? o.borderColor : f.borderColor || c.borderColor, 1530 borderCapStyle: o.borderCapStyle ? o.borderCapStyle : f.borderCapStyle || c.borderCapStyle, 1531 borderDash: o.borderDash ? o.borderDash : f.borderDash || c.borderDash, 1532 borderDashOffset: o.borderDashOffset ? o.borderDashOffset : f.borderDashOffset || c.borderDashOffset, 1533 borderJoinStyle: o.borderJoinStyle ? o.borderJoinStyle : f.borderJoinStyle || c.borderJoinStyle, 1534 fill: o.fill ? o.fill : void 0 !== f.fill ? f.fill : c.fill, 1535 scaleTop: h.top, 1536 scaleBottom: h.bottom, 1537 scaleZero: h.getBasePixel() 1538 }, s.pivot()), i = 0, n = d.length; n > i; ++i)r.updateElement(d[i], i, t); 1539 for (g && 0 !== s._model.tension && r.updateBezierControlPoints(), i = 0, n = d.length; n > i; ++i)d[i].pivot() 1540 },
vendor: 2,301 bytes, lines 1541-1561
1541 getPointBackgroundColor: function (t, e) { 1542 var i = this.chart.options.elements.point.backgroundColor, n = this.getDataset(), o = t.custom || {}; 1543 return o.backgroundColor ? i = o.backgroundColor : n.pointBackgroundColor ? i = a.getValueAtIndexOrDefault(n.pointBackgroundColor, e, i) : n.backgroundColor && (i = n.backgroundColor), i 1544 }, 1545 getPointBorderColor: function (t, e) { 1546 var i = this.chart.options.elements.point.borderColor, n = this.getDataset(), o = t.custom || {}; 1547 return o.borderColor ? i = o.borderColor : n.pointBorderColor ? i = a.getValueAtIndexOrDefault(n.pointBorderColor, e, i) : n.borderColor && (i = n.borderColor), i 1548 }, 1549 getPointBorderWidth: function (t, e) { 1550 var i = this.chart.options.elements.point.borderWidth, n = this.getDataset(), o = t.custom || {}; 1551 return o.borderWidth ? i = o.borderWidth : n.pointBorderWidth ? i = a.getValueAtIndexOrDefault(n.pointBorderWidth, e, i) : n.borderWidth && (i = n.borderWidth), i 1552 }, 1553 updateElement: function (t, e, i) { 1554 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; 1555 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(c, e, u, r.chart.isCombo), o = i ? h.getBasePixel() : r.calculatePointY(c, e, u, r.chart.isCombo), t._xScale = f, t._yScale = h, t._datasetIndex = u, t._index = e, t._model = { 1556 x: n, 1557 y: o, 1558 skip: s.skip || isNaN(n) || isNaN(o), 1559 radius: s.radius || a.getValueAtIndexOrDefault(d.pointRadius, e, g.radius), 1560 pointStyle: s.pointStyle || a.getValueAtIndexOrDefault(d.pointStyle, e, g.pointStyle), 1561 backgroundColor: r.getPointBackgroun
1561dColor(t, e), 1562 borderColor: r.getPointBorderColor(t, e), 1563 borderWidth: r.getPointBorderWidth(t, e), 1564 tension: l.dataset._model ? l.dataset._model.tension : 0, 1565 hitRadius: s.hitRadius || a.getValueAtIndexOrDefault(d.pointHitRadius, e, g.hitRadius) 1566 } 1567 }, 1568 calculatePointY: function (t, e, a, i) { 1569 var n, o, r, l = this, s = l.chart, d = l.getMeta(), u = l.getScaleForId(d.yAxisID), c = 0, h = 0; 1570 if (u.options.stacked) { 1571 for (n = 0; a > n; n++)o = s.data.datasets[n], r = s.getDatasetMeta(n), "line" === r.type && s.isDatasetVisible(n) && (o.data[e] < 0 ? h += o.data[e] || 0 : c += o.data[e] || 0); 1572 return 0 > t ? u.getPixelForValue(h + t) : u.getPixelForValue(c + t) 1573 } 1574 return u.getPixelForValue(t) 1575 }, 1576 updateBezierControlPoints: function () { 1577 var t, e, i, n, o, r = this.getMeta(), l = (this.chart.chartArea, r.data || []); 1578 for (t = 0, e = l.length; e > t; ++t)i = l[t], n = i._model, o = a.splineCurve(a.previousItem(l, t)._model, n, a.nextItem(l, t)._model, r.dataset._model.tension), n.controlPointPreviousX = o.previous.x, n.controlPointPreviousY = o.previous.y, n.controlPointNextX = o.next.x, n.controlPointNextY = o.next.y 1579 }, 1580 draw: function (t) { 1581 var a, i, n = this, o = n.getMeta(), r = o.data || [], l = t || 1; 1582 for (a = 0, i = r.length; i > a; ++a)r[a].transition(l); 1583 for (e(n.getDataset(), n.chart.options) && o.dataset.transition(l).draw(), a = 0, i = r.length; i > a; ++a)r[a].draw() 1584 }, 1585 setHoverStyle: function (t) { 1586 var e = this.chart.data.datasets[t._datasetIndex], i = t._index, n = t.custom || {}, o = t._model; 1587 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) 1588 }, 1589 removeHoverStyle: function (t) { 1590 var e = this, i = e.chart.data.datasets[t._datasetIndex], n = t._index, o = t.custom || {}, r = t._model; 1591 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
1591dColor(t, n), r.borderColor = e.getPointBorderColor(t, n), r.borderWidth = e.getPointBorderWidth(t, n) 1592 } 1593 }) 1594 } 1595 }, {}], 19: [function (t, e, a) { 1596 "use strict"; 1597 e.exports = function (t) { 1598 var e = t.helpers; 1599 t.defaults.polarArea = { 1600 scale: {type: "radialLinear", lineArc: !0}, 1601 animation: {animateRotate: !0, animateScale: !0}, 1602 aspectRatio: 1, 1603 legendCallback: function (t) { 1604 var e = []; 1605 e.push('<ul class="' + t.id + '-legend">'); 1606 var a = t.data, i = a.datasets, n = a.labels; 1607 if (i.length)for (var o = 0; o < i[0].data.length; ++o)e.push('<li><span style="background-color:' + i[0].backgroundColor[o] + '">'), n[o] && e.push(n[o]), e.push("</span></li>"); 1608 return e.push("</ul>"), e.join("") 1609 }, 1610 legend: { 1611 labels: { 1612 generateLabels: function (t) { 1613 var a = t.data; 1614 return a.labels.length && a.datasets.length ? a.labels.map(function (i, n) { 1615 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); 1616 return { 1617 text: i, 1618 fillStyle: c, 1619 strokeStyle: h, 1620 lineWidth: f, 1621 hidden: isNaN(r.data[n]) || o.data[n].hidden, 1622 index: n 1623 } 1624 }) : [] 1625 } 1626 }, onClick: function (t, e) { 1627 var a, i, n, o = e.index, r = this.chart; 1628 for (a = 0, i = (r.data.datasets || []).length; i > a; ++a)n = r.getDatasetMeta(a), n.data[o].hidden = !n.data[o].hidden; 1629 r.update() 1630 } 1631 }, 1632 tooltips: { 1633 callbacks: { 1634 title: function () { 1635 return "" 1636 }, label: function (t, e) { 1637 return e.labels[t.index] + ": " + t.yLabel 1638 } 1639 } 1640 } 1641 }, t.controllers.polarArea = t.DatasetController.extend({ 1642 dataElementType: t.elements.Arc, 1643 linkScales: e.noop, 1644 update: function (t) { 1645 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); 1646 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) { 1647 a.updateElement(e, i, t) 1648 }) 1649 }, 1650 updateElement: function (t, a, i) { 1651 for (var n = this, o = n.chart, r = o.chartArea, l = n.getDataset(), s = o.options, d = s.animation, u = (s.elements.arc, t.custom || {}, o.scale), c = e.getValueAtIndexOrDefault, h = o.data.labels, f = n.calculateCircumference(l.data[a]), g = (r.left + r.right) / 2, p = (r.top + r.bottom) / 2, m = 0, b = n.getMeta(), v = 0; a > v; ++v)isNaN(l.data[v]) || b.data[v].hidden || ++m; 1652 var x = -.5 * Math.PI, y = t.hidden ? 0 : u.getDistanceFromCenterForValue(l.data[a]), k = x + f * m, S = k + (t.hidden ? 0 : f), w = d.animateScale ? 0 : u.getDistanceFromCenterForValue(l.data[a]); 1653 e.extend(t, { 1654 _datasetIndex: n.index, 1655 _index: a, 1656 _scale: u, 1657 _model: { 1658 x: g, 1659 y: p, 1660 innerRadius: 0, 1661 outerRadius: i ? w : y, 1662 startAngle: i && d.animateRotate ? x : k, 1663 endAngle: i && d.animateRotate ? x : S, 1664 label: c(h, a, h[a]) 1665 } 1666 }), n.removeHoverStyle(t), t.pivot() 1667 }, 1668 removeHoverStyle: function (e) { 1669 t.DatasetController.prototype.removeHoverStyle.call(this, e, this.chart.options.elements.ar
vendor: 4,191 bytes, lines 1669-1732
1669c) 1670 }, 1671 countVisibleElements: function () { 1672 var t = this.getDataset(), a = this.getMeta(), i = 0; 1673 return e.each(a.data, function (e, a) { 1674 isNaN(t.data[a]) || e.hidden || i++ 1675 }), i 1676 }, 1677 calculateCircumference: function (t) { 1678 var e = this.getMeta().count; 1679 return e > 0 && !isNaN(t) ? 2 * Math.PI / e : 0 1680 } 1681 }) 1682 } 1683 }, {}], 20: [function (t, e, a) { 1684 "use strict"; 1685 e.exports = function (t) { 1686 var e = t.helpers; 1687 t.defaults.radar = { 1688 scale: {type: "radialLinear"}, 1689 elements: {line: {tension: 0}} 1690 }, t.controllers.radar = t.DatasetController.extend({ 1691 datasetElementType: t.elements.Line, 1692 dataElementType: t.elements.Point, 1693 linkScales: e.noop, 1694 addElementAndReset: function (e) { 1695 t.DatasetController.prototype.addElementAndReset.call(this, e), this.updateBezierControlPoints() 1696 }, 1697 update: function (t) { 1698 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; 1699 void 0 !== l.tension && void 0 === l.lineTension && (l.lineTension = l.tension), e.extend(i.dataset, { 1700 _datasetIndex: a.index, 1701 _children: o, 1702 _loop: !0, 1703 _model: { 1704 tension: r.tension ? r.tension : e.getValueOrDefault(l.lineTension, s.tension), 1705 backgroundColor: r.backgroundColor ? r.backgroundColor : l.backgroundColor || s.backgroundColor, 1706 borderWidth: r.borderWidth ? r.borderWidth : l.borderWidth || s.borderWidth, 1707 borderColor: r.borderColor ? r.borderColor : l.borderColor || s.borderColor, 1708 fill: r.fill ? r.fill : void 0 !== l.fill ? l.fill : s.fill, 1709 borderCapStyle: r.borderCapStyle ? r.borderCapStyle : l.borderCapStyle || s.borderCapStyle, 1710 borderDash: r.borderDash ? r.borderDash : l.borderDash || s.borderDash, 1711 borderDashOffset: r.borderDashOffset ? r.borderDashOffset : l.borderDashOffset || s.borderDashOffset, 1712 borderJoinStyle: r.borderJoinStyle ? r.borderJoinStyle : l.borderJoinStyle || s.borderJoinStyle, 1713 scaleTop: d.top, 1714 scaleBottom: d.bottom, 1715 scaleZero: d.getBasePosition() 1716 } 1717 }), i.dataset.pivot(), e.each(o, function (e, i) { 1718 a.updateElement(e, i, t) 1719 }, a), a.updateBezierControlPoints() 1720 }, 1721 updateElement: function (t, a, i) { 1722 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]); 1723 e.extend(t, { 1724 _datasetIndex: n.index, 1725 _index: a, 1726 _scale: l, 1727 _model: { 1728 x: i ? l.xCenter : d.x, 1729 y: i ? l.yCenter : d.y, 1730 tension: o.tension ? o.tension : e.getValueOrDefault(r.tension, n.chart.options.elements.line.tension), 1731 radius: o.radius ? o.radius : e.getValueAtIndexOrDefault(r.pointRadius, a, s.radius), 1732 backgroundColor: o.backgroundColor ? o.backgroundColor : e.getValueAtIndexOrDefault(r.pointBackgroun
1732dColor, a, s.backgroundColor), 1733 borderColor: o.borderColor ? o.borderColor : e.getValueAtIndexOrDefault(r.pointBorderColor, a, s.borderColor), 1734 borderWidth: o.borderWidth ? o.borderWidth : e.getValueAtIndexOrDefault(r.pointBorderWidth, a, s.borderWidth), 1735 pointStyle: o.pointStyle ? o.pointStyle : e.getValueAtIndexOrDefault(r.pointStyle, a, s.pointStyle), 1736 hitRadius: o.hitRadius ? o.hitRadius : e.getValueAtIndexOrDefault(r.hitRadius, a, s.hitRadius) 1737 } 1738 }), t._model.skip = o.skip ? o.skip : isNaN(t._model.x) || isNaN(t._model.y) 1739 }, 1740 updateBezierControlPoints: function () { 1741 var t = this.chart.chartArea, a = this.getMeta(); 1742 e.each(a.data, function (i, n) { 1743 var o = i._model, r = e.splineCurve(e.previousItem(a.data, n, !0)._model, o, e.nextItem(a.data, n, !0)._model, o.tension); 1744 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() 1745 }) 1746 }, 1747 draw: function (t) { 1748 var a = this.getMeta(), i = t || 1; 1749 e.each(a.data, function (t, e) { 1750 t.transition(i) 1751 }), a.dataset.transition(i).draw(), e.each(a.data, function (t) { 1752 t.draw() 1753 }) 1754 }, 1755 setHoverStyle: function (t) { 1756 var a = this.chart.data.datasets[t._datasetIndex], i = t.custom || {}, n = t._index, o = t._model; 1757 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) 1758 }, 1759 removeHoverStyle: function (t) { 1760 var a = this.chart.data.datasets[t._datasetIndex], i = t.custom || {}, n = t._index, o = t._model, r = this.chart.options.elements.point; 1761 o.radius = i.radius ? i.radius : e.getValueAtIndexOrDefault(a.radius, n, r.radius), o.backgroundColor = i.backgroundColor ? i.backgroundColor : e.getValueAtIndexOrDefault(a.pointBackgroun
1761dColor, 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) 1762 } 1763 }) 1764 } 1765 }, {}], 21: [function (t, e, a) { 1766 "use strict"; 1767 e.exports = function (t) { 1768 var e = t.helpers; 1769 t.defaults.global.animation = { 1770 duration: 1e3, 1771 easing: "easeOutQuart", 1772 onProgress: e.noop, 1773 onComplete: e.noop 1774 }, t.Animation = t.Element.extend({ 1775 currentStep: null, 1776 numSteps: 60, 1777 easing: "", 1778 render: null, 1779 onAnimationProgress: null, 1780 onAnimationComplete: null 1781 }), t.animationService = { 1782 frameDuration: 17, 1783 animations: [], 1784 dropFrames: 0, 1785 request: null, 1786 addAnimation: function (t, e, a, i) { 1787 var n = this; 1788 i || (t.animating = !0); 1789 for (var o = 0; o < n.animations.length; ++o)if (n.animations[o].chartInstance === t)return void(n.animations[o].animationObject = e); 1790 n.animations.push({ 1791 chartInstance: t, 1792 animationObject: e 1793 }), 1 === n.animations.length && n.requestAnimationFrame() 1794 }, 1795 cancelAnimation: function (t) { 1796 var a = e.findIndex(this.animations, function (e) { 1797 return e.chartInstance === t 1798 }); 1799 -1 !== a && (this.animations.splice(a, 1), t.animating = !1) 1800 }, 1801 requestAnimationFrame: function () { 1802 var t = this; 1803 null === t.request && (t.request = e.requestAnimFrame.call(window, function () { 1804 t.request = null, t.startDigest() 1805 })) 1806 }, 1807 startDigest: function () { 1808 var t = this, e = Date.now(), a = 0; 1809 t.dropFrames > 1 && (a = Math.floor(t.dropFrames), t.dropFrames = t.dropFrames % 1); 1810 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; 1811 var n = Date.now(), o = (n - e) / t.frameDuration; 1812 t.dropFrames += o, t.animations.length > 0 && t.requestAnimationFrame() 1813 } 1814 } 1815 } 1816 }, {}], 22: [function (t, e, a) { 1817 "use strict"; 1818 e.exports = function (t) { 1819 var e = t.helpers; 1820 t.types = {}, t.instances = {}, t.controllers = {}, t.Controller = function (a) { 1821 return this.chart = a, this.config = a.config, this.options = this.config.options = e.configMerge(t.defaults.global, t.defaults[this.config.type], this.config.options || {}), this.id = e.uid(), Object.defineProperty(this, "data", { 1822 get: function () { 1823 return this.config.data 1824 } 1825 }), t.instances[this.id] = this, this.options.responsive && this.resize(!0), this.initialize(), this 1826 }, e.extend(t.Controller.prototype, { 1827 initialize: function () { 1828 var e = this; 1829 return t.plugins.notify("beforeInit", [e]), e.bindEvents(), e.ensureScalesHaveIDs(), e.buildOrUpdateControllers(), e.buildScales(), e.updateLayout(), e.resetElements(), e.initToolTip(), e.update(
1829), t.plugins.notify("afterInit", [e]), e 1830 }, clear: function () { 1831 return e.clear(this.chart), this 1832 }, stop: function () { 1833 return t.animationService.cancelAnimation(this), this 1834 }, resize: function (a) { 1835 var i = this, n = i.chart, o = n.canvas, r = e.getMaximumWidth(o), l = n.aspectRatio, s = i.options.maintainAspectRatio && isNaN(l) === !1 && isFinite(l) && 0 !== l ? r / l : e.getMaximumHeight(o), d = n.width !== r || n.height !== s; 1836 if (!d)return i; 1837 o.width = n.width = r, o.height = n.height = s, e.retinaScale(n); 1838 var u = {width: r, height: s}; 1839 return t.plugins.notify("resize", [i, u]), i.options.onResize && i.options.onResize(i, u), a || (i.stop(), i.update(i.options.responsiveAnimationDuration)), i 1840 }, ensureScalesHaveIDs: function () { 1841 var t = this.options, a = t.scales || {}, i = t.scale; 1842 e.each(a.xAxes, function (t, e) { 1843 t.id = t.id || "x-axis-" + e 1844 }), e.each(a.yAxes, function (t, e) { 1845 t.id = t.id || "y-axis-" + e 1846 }), i && (i.id = i.id || "scale") 1847 }, buildScales: function () { 1848 var a = this, i = a.options, n = a.scales = {}, o = []; 1849 i.scales && (o = o.concat((i.scales.xAxes || []).map(function (t) { 1850 return {options: t, dtype: "category"} 1851 }), (i.scales.yAxes || []).map(function (t) { 1852 return {options: t, dtype: "linear"} 1853 }))), i.scale && o.push({ 1854 options: i.scale, 1855 dtype: "radialLinear", 1856 isDefault: !0 1857 }), e.each(o, function (i, o) { 1858 var r = i.options, l = e.getValueOrDefault(r.type, i.dtype), s = t.scaleService.getScaleConstructor(l); 1859 if (s) { 1860 var d = new s({id: r.id, options: r, ctx: a.chart.ctx, chart: a}); 1861 n[d.id] = d, i.isDefault && (a.scale = d) 1862 } 1863 }), t.scaleService.addScalesToLayout(this) 1864 }, updateLayout: function () { 1865 t.layoutService.update(this, this.chart.width, this.chart.height) 1866 }, buildOrUpdateControllers: function () { 1867 var a = this, i = [], n = []; 1868 if (e.each(a.data.datasets, function (e, o) { 1869 var r = a.getDatasetMeta(o); 1870 r.type || (r.type = e.type || a.config.type), i.push(r.type), r.controller ? r.controller.updateIndex(o) : (r.controller = new t.controllers[r.type](a, o), n.push(r.controller)) 1871 }, a), i.length > 1)for (var o = 1; o < i.length; o++)if (i[o] !== i[o - 1]) { 1872 a.isCombo = !0; 1873 break 1874 } 1875 return n 1876 }, resetElements: function () { 1877 var t = this; 1878 e.each(t.data.datasets, function (e, a) { 1879 t.getDatasetMeta(a).controller.reset() 1880 }, t) 1881 }, update: function (a, i) { 1882 var n = this; 1883 t.plugins.notify("beforeUpdate", [n]), n.tooltip._data = n.data; 1884 var o = n.buildOrUpdateControllers(); 1885 e.each(n.data.datasets, function (t, e) { 1886 n.getDatasetMeta(e).controller.buildOrUpdateElements() 1887 }, n), t.layoutService.update(n, n.chart.width, n.chart.height), t.plugins.notify("afterScaleUpdate", [n]), e.each(o, function (t) { 1888 t.reset() 1889 }), n.updateDatasets(), t.plugins.notify("afterUpdate", [n]), n.render(a, i) 1890 }, updateDatasets: function () { 1891 var e, a, i = this; 1892 if (t.plugins.notify("beforeDatasetsUpdate", [i])) { 1893 for (e = 0, a = i.data.datasets.length; a > e;
1893 ++e)i.getDatasetMeta(e).controller.update(); 1894 t.plugins.notify("afterDatasetsUpdate", [i]) 1895 } 1896 }, render: function (a, i) { 1897 var n = this; 1898 t.plugins.notify("beforeRender", [n]); 1899 var o = n.options.animation; 1900 if (o && ("undefined" != typeof a && 0 !== a || "undefined" == typeof a && 0 !== o.duration)) { 1901 var r = new t.Animation; 1902 r.numSteps = (a || o.duration) / 16.66, r.easing = o.easing, r.render = function (t, a) { 1903 var i = e.easingEffects[a.easing], n = a.currentStep / a.numSteps, o = i(n); 1904 t.draw(o, n, a.currentStep) 1905 }, r.onAnimationProgress = o.onProgress, r.onAnimationComplete = o.onComplete, t.animationService.addAnimation(n, r, a, i) 1906 } else n.draw(), o && o.onComplete && o.onComplete.call && o.onComplete.call(n); 1907 return n 1908 }, draw: function (a) { 1909 var i = this, n = a || 1; 1910 i.clear(), t.plugins.notify("beforeDraw", [i, n]), e.each(i.boxes, function (t) { 1911 t.draw(i.chartArea) 1912 }, i), i.scale && i.scale.draw(), t.plugins.notify("beforeDatasetsDraw", [i, n]), e.each(i.data.datasets, function (t, e) { 1913 i.isDatasetVisible(e) && i.getDatasetMeta(e).controller.draw(a) 1914 }, i, !0), t.plugins.notify("afterDatasetsDraw", [i, n]), i.tooltip.transition(n).draw(), t.plugins.notify("afterDraw", [i, n]) 1915 }, getElementAtEvent: function (t) { 1916 var a = this, i = e.getRelativePosition(t, a.chart), n = []; 1917 return e.each(a.data.datasets, function (t, o) { 1918 if (a.isDatasetVisible(o)) { 1919 var r = a.getDatasetMeta(o); 1920 e.each(r.data, function (t, e) { 1921 return t.inRange(i.x, i.y) ? (n.push(t), n) : void 0 1922 }) 1923 } 1924 }), n 1925 }, getElementsAtEvent: function (t) { 1926 var a = this, i = e.getRelativePosition(t, a.chart), n = [], o = function () { 1927 if (a.data.datasets)for (var t = 0; t < a.data.datasets.length; t++) { 1928 var e = a.getDatasetMeta(t); 1929 if (a.isDatasetVisible(t))for (var n = 0; n < e.data.length; n++)if (e.data[n].inRange(i.x, i.y))return e.data[n] 1930 } 1931 }.call(a); 1932 return o ? (e.each(a.data.datasets, function (t, e) { 1933 if (a.isDatasetVisible(e)) { 1934 var i = a.getDatasetMeta(e); 1935 n.push(i.data[o._index]) 1936 } 1937 }, a), n) : n 1938 }, getElementsAtEventForMode: function (t, e) { 1939 var a = this; 1940 switch (e) { 1941 case"single": 1942 return a.getElementAtEvent(t); 1943 case"label": 1944 return a.getElementsAtEvent(t); 1945 case"dataset": 1946 return a.getDatasetAtEvent(t); 1947 default: 1948 return t 1949 } 1950 }, getDatasetAtEvent: function (t) { 1951 var e = this.getElementAtEvent(t); 1952 return e.length > 0 && (e = this.getDatasetMeta(e[0]._datasetIndex).data), e 1953 }, getDatasetMeta: function (t) { 1954 var e = this, a = e.data.datasets[t]; 1955 a._meta || (a._meta = {}); 1956 var i = a._meta[e.id]; 1957 return i || (i = a._meta[e.id] = { 1958 type: null, 1959 data: [], 1960 dataset: null, 1961 controller: null, 1962 hidden: null, 1963 xAxisID: null, 1964 yAxisID: null 1965 }), i 1966 }, getVisibleDatasetCount: function () { 1967 for (var t = 0, e = 0, a = this.data.datasets.length; a > e; ++e)this.isDatasetVisible(e) && t++; 1968 return t 1969 }, isDatasetVisible: function (t) { 1970 var e = this.getDatasetMeta(t); 1971 return "boolean" == typeof e.hidden ? !e.hidden : !this.data.datasets[t].hidden 1972 }, generateLegend: function () { 1973 return this.options.legendCallback(this) 1974 }, destroy: function () { 1975 var a = this; 1976 a.stop(), a.clear(), e.unbindEvents(a, a.events), e.removeResizeListener(a.chart.canvas.parentNode); 1977 var i = a.chart.canvas; 1978 i.width = a.chart.width, i.height = a.chart.height, void 0 !== a.chart.originalDevicePixelRatio && a.chart.ctx.scale(1 / a.chart.originalDevicePixelRatio, 1 / a.chart.originalDevicePixelRatio), i.style.width = a.chart.originalCanvasStyleWidth, i.style.height = a.chart.originalCanvasStyleHeight, t.plugins.notify("destroy", [a]), delete t.instances[a.id] 1979 }, toBase64Image: function () { 1980 return this.chart.canvas.toDataURL.apply(this.chart.canvas, arguments) 1981 }, initToolTip: function () { 1982 var e = this; 1983 e.tooltip = new t.Tooltip({ 1984 _chart: e.chart, 1985 _chartInstance: e, 1986 _data: e.data, 1987 _options: e.options.tooltips 1988 }, e) 1989 }, bindEvents: function () { 1990 var t = this; 1991 e.bindEvents(t, t.options.events, function (e) { 1992 t.eventHandler(e) 1993 }) 1994 }, updateHoverStyle: function (t, e, a) { 1995 var i, n, o, r = a ? "setHoverStyle" : "removeHoverStyle"; 1996 switch (e) { 1997 case"single": 1998 t = [t[0]]; 1999 break; 2000 case"label": 2001 case"dataset": 2002 break; 2003 default: 2004 return 2005 } 2006 for (n = 0, o = t.length; o > n; ++n)i = t[n], i && this.getDatasetMeta(i._datasetIndex).controller[r](i) 2007 }, eventHandler: function (t) { 2008 var a = this, i = a.tooltip, n = a.options || {}, o = n.hover, r = n.tooltips; 2009 return a.lastActive = a.lastActive || [], a.lastTooltipActive = a.lastTooltipActive || [], "mouseout" === t.type ? (a.active = [], a.tooltipActive = []) : (a.active = a.getElementsAtEventForMode(t, o.mode), a.tooltipActive = a.getElementsAtEventForMode(t, r.mode)), o.onHover && o.onHover.call(a, a.active), ("mouseup" === t.type || "click" === t.type) && (n.onClick && n.onClick.call(a, t, a.active), a.legend && a.legend.handleEvent && a.legend.handleEvent(t)), a.lastActive.length && a.updateHoverStyle(a.lastActive, o.mode, !1), a.active.length && o.mode && a.updateHoverStyle(a.active, o.mode, !0), (r.enabled || r.custom) && (i.initialize(), i._active = a.tooltipActive, i.update(!0)), i.pivot(), a.animating || e.arrayEquals(a.active, a.lastActive) && e.arrayEquals(a.tooltipActive, a.lastTooltipActive) || (a.stop(), (r.enabled || r.custom) && i.update(!0), a.render(o.animationDuration, !0)), a.lastActive = a.active, a.lastTooltipActive = a.tooltipActive, a 2010 } 2011 }) 2012 } 2013 }, {}], 23: [function (t, e, a) { 2014 "use strict"; 2015 e.exports = function (t) { 2016 var e = t.helpers, a = e.noop; 2017 t.DatasetController = function (t, e) { 2018 this.initialize.call(this, t, e) 2019 }, e.extend(t.DatasetController.prototype, { 2020 datasetElementType: null, dataElementType: null, initialize: function (t, e) { 2021 var a = this; 2022 a.chart = t, a.index = e, a.linkScales(), a.addElements() 2023 }, updateIndex: function (t) { 2024 this.index = t 2025 }, linkScales: function () { 2026 var t = this, e = t.getMeta(), a = t.getDataset(); 2027 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); 2028 }, getDataset: function () { 2029 return this.chart.data.datasets[this.index] 2030 }, getMeta: function () { 2031 return this.chart.getDatasetMeta(this.index) 2032 }, getScaleForId: function (t) { 2033 return this.chart.scales[t] 2034 }, reset: function () { 2035 this.update(!0) 2036 }, createMetaDataset: function () { 2037 var t = this, e = t.datasetElementType; 2038 return e && new e({_chart: t.chart.chart, _datasetIndex: t.index}) 2039 }, createMetaData: function (t) { 2040 var e = this, a = e.dataElementType; 2041 return a && new a({_chart: e.chart.chart, _datasetIndex: e.index, _index: t}) 2042 }, addElements: function () { 2043 var t, e, a = this, i = a.getMeta(), n = a.getDataset().data || [], o = i.data; 2044 for (t = 0, e = n.length; e > t; ++t)o[t] = o[t] || a.createMetaData(i, t); 2045 i.dataset = i.dataset || a.createMetaDataset() 2046 }, addElementAndReset: function (t) { 2047 var e = this, a = e.createMetaData(t); 2048 e.getMeta().data.splice(t, 0, a), e.updateElement(a, t, !0) 2049 }, buildOrUpdateElements: function () { 2050 var t = this.getMeta(), e = t.data, a = this.getDataset().data.length, i = e.length; 2051 if (i > a)e.splice(a, i - a); else if (a > i)for (var n = i; a > n; ++n)this.addElementAndReset(n) 2052 }, update: a, draw: function (t) { 2053 var a = t || 1; 2054 e.each(this.getMeta().data, function (t, e) { 2055 t.transition(a).draw() 2056 }) 2057 }, removeHoverStyle: function (t, a) { 2058 var i = this.chart.data.datasets[t._datasetIndex], n = t._index, o = t.custom || {}, r = e.getValueAtIndexOrDefault, l = (e.color, t._model); 2059 l.backgroundColor = o.backgroundColor ? o.backgroundColor : r(i.backgroundColor, n, a.backgroundColor), l.borderColor = o.borderColor ? o.borderColor : r(i.borderColor, n, a.borderColor), l.borderWidth = o.borderWidth ? o.borderWidth : r(i.borderWidth, n, a.borderWidth) 2060 }, setHoverStyle: function (t) { 2061 var a = this.chart.data.datasets[t._datasetIndex], i = t._index, n = t.custom || {}, o = e.getValueAtIndexOrDefault, r = (e.color, e.getHoverColor), l = t._model;
2062 l.backgroundColor = n.hoverBackgroundColor ? n.hoverBackgroundColor : o(a.hoverBackgroundColor, i, r(l.backgroundColor)), l.borderColor = n.hoverBorderColor ? n.hoverBorderColor : o(a.hoverBorderColor, i, r(l.borderColor)), l.borderWidth = n.hoverBorderWidth ? n.hoverBorderWidth : o(a.hoverBorderWidth, i, l.borderWidth) 2063 } 2064 }), t.DatasetController.extend = e.inherits 2065 } 2066 }, {}], 24: [function (t, e, a) { 2067 "use strict"; 2068 e.exports = function (t) { 2069 var e = t.helpers; 2070 t.elements = {}, t.Element = function (t) { 2071 e.extend(this, t), this.initialize.apply(this, arguments) 2072 }, e.extend(t.Element.prototype, { 2073 initialize: function () { 2074 this.hidden = !1 2075 }, pivot: function () { 2076 var t = this; 2077 return t._view || (t._view = e.clone(t._model)), t._start = e.clone(t._view), t 2078 }, transition: function (t) { 2079 var a = this; 2080 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) { 2081 if ("_" === n[0]); else if (a._view.hasOwnProperty(n))if (i === a._view[n]); else if ("string" == typeof i)try { 2082 var o = e.color(a._model[n]).mix(e.color(a._start[n]), t); 2083 a._view[n] = o.rgbString() 2084 } catch (r) { 2085 a._view[n] = i 2086 } else if ("number" == typeof i) { 2087 var l = void 0 !== a._start[n] && isNaN(a._start[n]) === !1 ? a._start[n] : 0; 2088 a._view[n] = (a._model[n] - l) * t + l 2089 } else a._view[n] = i; else"number" != typeof i || isNaN(a._view[n]) ? a._view[n] = i : a._view[n] = i * t 2090 }, a), a) 2091 }, tooltipPosition: function () { 2092 return {x: this._model.x, y: this._model.y} 2093 }, hasValue: function () { 2094 return e.isNumber(this._model.x) && e.isNumber(this._model.y) 2095 } 2096 }), t.Element.extend = e.inherits 2097 } 2098 }, {}], 25: [function (t, e, a) { 2099 "use strict"; 2100 var i = t(3); 2101 e.exports = function (t) { 2102 function e(t, e, a) { 2103 var i; 2104 return "string" == typeof t ? (i = parseInt(t, 10), -1 != t.indexOf("%") && (i = i / 100 * e.parentNode[a])) : i = t, i 2105 } 2106 2107 function a(t) { 2108 return void 0 !== t && null !== t && "none" !== t 2109 } 2110 2111 function n(t, i, n) { 2112 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; 2113 return d || u ? Math.min(d ? e(l, t, n) : c, u ? e(s, r, n) : c) : "none" 2114 } 2115 2116 var o = t.helpers = {}; 2117 o.each = function (t, e, a, i) { 2118 var n, r; 2119 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) { 2120 var l = Object.keys(t); 2121 for (r = l.length, n = 0; r > n; n++)e.call(a, t[l[n]], l[n]) 2122 } 2123 }, o.clone = function (t) { 2124 var e = {}; 2125 return o.each(t, function (t, a) { 2126 o.isArray(t) ? e[a] = t.slice(0) : "object" == typeof t && null !== t ? e[a] = o.clone(t) : e[a] = t 2127 }), e 2128 }, o.extend = function (t) { 2129 for (var e = function (e, a) { 2130 t[a] = e 2131 }, a = 1, i = arguments.length; i > a; a++)o.each(arguments[a], e); 2132 return t 2133 }, o.configMerge = function (e) { 2134 var a = o.clone(e); 2135 return o.each(Array.prototype.slice.call(arguments, 1), function (e) { 2136 o.each(e, function (e, i) { 2137 if ("scales" === i)a[i] = o.scaleMerge(a.hasOwnProperty(i) ? a[i] : {}, e); else if ("scale" === i)a[i] = o.configMerge(a.hasOwnProperty(i) ? a[i] : {}, t.scaleService.getScaleDefaults(e.type), e); else if (a.hasOwnProperty(i) && o.isArray(a[i]) && o.isArray(e)) { 2138 var n = a[i]; 2139 o.each(e, function (t, e) { 2140 e < n.length ? "object" == typeof n[e] && null !== n[e] && "object" == typeof t && null !== t ? n[e] = o.configMerge(n[e], t) : n[e] = t : n.push(t) 2141 }) 2142 } else a.hasOwnProperty(i) && "object" == typeof a[i] && null !== a[i] && "object" == typeof e ? a[i] = o.configMerge(a[i], e) : a[i] = e
2143 }) 2144 }), a 2145 }, o.scaleMerge = function (e, a) { 2146 var i = o.clone(e); 2147 return o.each(a, function (e, a) { 2148 "xAxes" === a || "yAxes" === a ? i.hasOwnProperty(a) ? o.each(e, function (e, n) { 2149 var r = o.getValueOrDefault(e.type, "xAxes" === a ? "category" : "linear"), l = t.scaleService.getScaleDefaults(r); 2150 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) 2151 }) : (i[a] = [], o.each(e, function (e) { 2152 var n = o.getValueOrDefault(e.type, "xAxes" === a ? "category" : "linear"); 2153 i[a].push(o.configMerge(t.scaleService.getScaleDefaults(n), e)) 2154 })) : i.hasOwnProperty(a) && "object" == typeof i[a] && null !== i[a] && "object" == typeof e ? i[a] = o.configMerge(i[a], e) : i[a] = e 2155 }), i 2156 }, o.getValueAtIndexOrDefault = function (t, e, a) { 2157 return void 0 === t || null === t ? a : o.isArray(t) ? e < t.length ? t[e] : a : t 2158 }, o.getValueOrDefault = function (t, e) { 2159 return void 0 === t ? e : t 2160 }, o.indexOf = Array.prototype.indexOf ? function (t, e) { 2161 return t.indexOf(e) 2162 } : function (t, e) { 2163 for (var a = 0, i = t.length; i > a; ++a)if (t[a] === e)return a; 2164 return -1 2165 }, o.where = function (t, e) { 2166 if (o.isArray(t) && Array.prototype.filter)return t.filter(e); 2167 var a = []; 2168 return o.each(t, function (t) { 2169 e(t) && a.push(t) 2170 }), a 2171 }, o.findIndex = Array.prototype.findIndex ? function (t, e, a) { 2172 return t.findIndex(e, a) 2173 } : function (t, e, a) { 2174 a = void 0 === a ? t : a; 2175 for (var i = 0, n = t.length; n > i; ++i)if (e.call(a, t[i], i, t))return i; 2176 return -1 2177 }, o.findNextWhere = function (t, e, a) { 2178 (void 0 === a || null === a) && (a = -1); 2179 for (var i = a + 1; i < t.length; i++) { 2180 var n = t[i]; 2181 if (e(n))return n 2182 } 2183 }, o.findPreviousWhere = function (t, e, a) { 2184 (void 0 === a || null === a) && (a = t.length); 2185 for (var i = a - 1; i >= 0; i--) { 2186 var n = t[i]; 2187 if (e(n))return n 2188 } 2189 }, o.inherits = function (t) { 2190 var e = this, a = t && t.hasOwnProperty("constructor") ? t.constructor : function () { 2191 return e.apply(this, arguments) 2192 }, i = function () { 2193 this.constructor = a 2194 }; 2195 return i.prototype = e.prototype, a.prototype = new i, a.extend = o.inherits, t && o.extend(a.prototype, t), a.__super__ = e.prototype, a 2196 }, o.noop = function () { 2197 }, o.uid = function () { 2198 var t = 0; 2199 return function () { 2200 return t++ 2201 } 2202 }(), o.isNumber = function (t) { 2203 return !isNaN(parseFloat(t)) && isFinite(t) 2204 }, o.almostEquals = function (t, e, a) { 2205 return Math.abs(t - e) < a 2206 }, o.max = function (t) { 2207 return t.reduce(function (t, e) { 2208 return isNaN(e) ? t : Math.max(t, e) 2209 }, Number.NEGATIVE_INFINITY) 2210 }, o.min = function (t) { 2211 return t.reduce(function (t, e) { 2212 return isNaN(e) ? t : Math.min(t, e) 2213 }, Number.POSITIVE_INFINITY) 2214 }, o.sign = Math.sign ? function (t) { 2215 return Math.sign(t) 2216 } : function (t) { 2217 return t = +t, 0 === t || isNaN(t) ? t : t > 0 ? 1 : -1 2218 }, o.log10 = Math.log10 ? function (t) { 2219 return Math.log10(t) 2220 } : function (t) { 2221 return Math.log(t) / Math.LN10 2222 }, o.toRadians = function (t) { 2223 return t * (Math.PI / 180) 2224 }, o.toDegrees = function (t) { 2225 return t * (180 / Math.PI) 2226 }, o.getAngleFromPoint = function (t, e) {
2227 var a = e.x - t.x, i = e.y - t.y, n = Math.sqrt(a * a + i * i), o = Math.atan2(i, a); 2228 return o < -.5 * Math.PI && (o += 2 * Math.PI), {angle: o, distance: n} 2229 }, o.aliasPixel = function (t) { 2230 return t % 2 === 0 ? 0 : .5 2231 }, o.splineCurve = function (t, e, a, i) { 2232 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); 2233 d = isNaN(d) ? 0 : d, u = isNaN(u) ? 0 : u; 2234 var c = i * d, h = i * u; 2235 return { 2236 previous: {x: o.x - c * (r.x - n.x), y: o.y - c * (r.y - n.y)}, 2237 next: {x: o.x + h * (r.x - n.x), y: o.y + h * (r.y - n.y)} 2238 } 2239 }, o.nextItem = function (t, e, a) { 2240 return a ? e >= t.length - 1 ? t[0] : t[e + 1] : e >= t.length - 1 ? t[t.length - 1] : t[e + 1] 2241 }, o.previousItem = function (t, e, a) { 2242 return a ? 0 >= e ? t[t.length - 1] : t[e - 1] : 0 >= e ? t[0] : t[e - 1] 2243 }, o.niceNum = function (t, e) { 2244 var a, i = Math.floor(o.log10(t)), n = t / Math.pow(10, i); 2245 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) 2246 }; 2247 var r = o.easingEffects = { 2248 linear: function (t) { 2249 return t 2250 }, easeInQuad: function (t) { 2251 return t * t 2252 }, easeOutQuad: function (t) { 2253 return -1 * t * (t - 2) 2254 }, easeInOutQuad: function (t) { 2255 return (t /= .5) < 1 ? .5 * t * t : -0.5 * (--t * (t - 2) - 1) 2256 }, easeInCubic: function (t) { 2257 return t * t * t 2258 }, easeOutCubic: function (t) { 2259 return 1 * ((t = t / 1 - 1) * t * t + 1) 2260 }, easeInOutCubic: function (t) { 2261 return (t /= .5) < 1 ? .5 * t * t * t : .5 * ((t -= 2) * t * t + 2) 2262 }, easeInQuart: function (t) { 2263 return t * t * t * t 2264 }, easeOutQuart: function (t) { 2265 return -1 * ((t = t / 1 - 1) * t * t * t - 1) 2266 }, easeInOutQuart: function (t) { 2267 return (t /= .5) < 1 ? .5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2) 2268 }, easeInQuint: function (t) { 2269 return 1 * (t /= 1) * t * t * t * t 2270 }, easeOutQuint: function (t) { 2271 return 1 * ((t = t / 1 - 1) * t * t * t * t + 1) 2272 }, easeInOutQuint: function (t) { 2273 return (t /= .5) < 1 ? .5 * t * t * t * t * t : .5 * ((t -= 2) * t * t * t * t + 2) 2274 }, easeInSine: function (t) { 2275 return -1 * Math.cos(t / 1 * (Math.PI / 2)) + 1 2276 }, easeOutSine: function (t) { 2277 return 1 * Math.sin(t / 1 * (Math.PI / 2)) 2278 }, easeInOutSine: function (t) { 2279 return -0.5 * (Math.cos(Math.PI * t / 1) - 1) 2280 }, easeInExpo: function (t) { 2281 return 0 === t ? 1 : 1 * Math.pow(2, 10 * (t / 1 - 1)) 2282 }, easeOutExpo: function (t) { 2283 return 1 === t ? 1 : 1 * (-Math.pow(2, -10 * t / 1) + 1) 2284 }, easeInOutExpo: function (t) { 2285 return 0 === t ? 0 : 1 === t ? 1 : (t /= .5) < 1 ? .5 * Math.pow(2, 10 * (t - 1)) : .5 * (-Math.pow(2, -10 * --t) + 2) 2286 }, easeInCirc: function (t) { 2287 return t >= 1 ? t : -1 * (Math.sqrt(1 - (t /= 1) * t) - 1) 2288 }, easeOutCirc: function (t) { 2289 return 1 * Math.sqrt(1 - (t = t / 1 - 1) * t) 2290 }, easeInOutCirc: function (t) { 2291 return (t /= .5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : .5 * (Math.sqrt(1 - (t -= 2) * t) + 1) 2292 }, easeInElastic: function (t) { 2293 var e = 1.70158, a = 0, i = 1; 2294 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))) 2295 }, easeOutElastic: function (t) { 2296 var e = 1.70158, a = 0, i = 1; 2297 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) 2298 }, easeInOutElastic: function (t) { 2299 var e = 1.70158, a = 0, i = 1; 2300 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) 2301 }, easeInBack: function (t) { 2302 var e = 1.70158; 2303 return 1 * (t /= 1) * t * ((e + 1) * t - e) 2304 }, easeOutBack: function (t) { 2305 var e = 1.70158; 2306 return 1 * ((t = t / 1 - 1) * t * ((e + 1) * t + e) + 1) 2307 }, easeInOutBack: function (t) { 2308 var e = 1.70158; 2309 return (t /= .5) < 1 ? .5 * (t * t * (((e *= 1.525) + 1) * t - e)) : .5 * ((t -= 2) * t * (((e *= 1.525) + 1) * t + e) + 2) 2310 }, easeInBounce: function (t) { 2311 return 1 - r.easeOutBounce(1 - t) 2312 }, easeOutBounce: function (t) { 2313 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) 2314 }, easeInOutBounce: function (t) { 2315 return .5 > t ? .5 * r.easeInBounce(2 * t) : .5 * r.easeOutBounce(2 * t - 1) + .5 2316 } 2317 }; 2318 o.requestAnimFrame = function () { 2319 return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (t) { 2320 return window.setTimeout(t, 1e3 / 60) 2321 } 2322 }(), o.cancelAnimFrame = function () { 2323 return window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || window.msCancelAnimationFrame || function (t) { 2324 return window.clearTimeout(t, 1e3 / 60) 2325 } 2326 }(), o.getRelativePosition = function (t, e) { 2327 var a, i, n = t.originalEvent || t, r = t.currentTarget || t.srcElement, l = r.getBoundingClientRect(), s = n.touches; 2328 s && s.length > 0 ? (a = s[0].clientX, i = s[0].clientY) : (a = n.clientX, i = n.clientY); 2329 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; 2330 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), { 2331 x: a, 2332 y: i 2333 } 2334 }, o.addEvent = function (t, e, a) { 2335 t.addEventListener ? t.addEventListener(e, a) : t.attachEvent ? t.attachEvent("on" + e, a) : t["on" + e] = a 2336 }, o.removeEvent = function (t, e, a) { 2337 t.removeEventListener ? t.removeEventListener(e, a, !1) : t.detachEvent ? t.detachEvent("on" + e, a) : t["on" + e] = o.no
2337op 2338 }, o.bindEvents = function (t, e, a) { 2339 var i = t.events = t.events || {}; 2340 o.each(e, function (e) { 2341 i[e] = function () { 2342 a.apply(t, arguments) 2343 }, o.addEvent(t.chart.canvas, e, i[e]) 2344 }) 2345 }, o.unbindEvents = function (t, e) { 2346 var a = t.chart.canvas; 2347 o.each(e, function (t, e) { 2348 o.removeEvent(a, e, t) 2349 }) 2350 }, o.getConstraintWidth = function (t) { 2351 return n(t, "max-width", "clientWidth") 2352 }, o.getConstraintHeight = function (t) { 2353 return n(t, "max-height", "clientHeight") 2354 }, o.getMaximumWidth = function (t) { 2355 var e = t.parentNode, a = parseInt(o.getStyle(e, "padding-left")) + parseInt(o.getStyle(e, "padding-right")), i = e.clientWidth - a, n = o.getConstraintWidth(t); 2356 return isNaN(n) ? i : Math.min(i, n) 2357 }, o.getMaximumHeight = function (t) { 2358 var e = t.parentNode, a = parseInt(o.getStyle(e, "padding-top")) + parseInt(o.getStyle(e, "padding-bottom")), i = e.clientHeight - a, n = o.getConstraintHeight(t); 2359 return isNaN(n) ? i : Math.min(i, n) 2360 }, o.getStyle = function (t, e) { 2361 return t.currentStyle ? t.currentStyle[e] : document.defaultView.getComputedStyle(t, null).getPropertyValue(e) 2362 }, o.retinaScale = function (t) { 2363 var e = t.ctx, a = t.canvas, i = a.width, n = a.height, o = t.currentDevicePixelRatio = window.devicePixelRatio || 1; 2364 1 !== o && (a.height = n * o, a.width = i * o, e.scale(o, o), t.originalDevicePixelRatio = t.originalDevicePixelRatio || o), a.style.width = i + "px", a.style.height = n + "px" 2365 }, o.clear = function (t) { 2366 t.ctx.clearRect(0, 0, t.width, t.height) 2367 }, o.fontString = function (t, e, a) { 2368 return e + " " + t + "px " + a 2369 }, o.longestText = function (t, e, a, i) { 2370 i = i || {}; 2371 var n = i.data = i.data || {}, r = i.garbageCollect = i.garbageCollect || []; 2372 i.font !== e && (n = i.data = {}, r = i.garbageCollect = [], i.font = e), t.font = e; 2373 var l = 0; 2374 o.each(a, function (e) { 2375 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) { 2376 void 0 === e || null === e || o.isArray(e) || (l = o.measureText(t, n, r, l, e)) 2377 }) 2378 }); 2379 var s = r.length / 2; 2380 if (s > a.length) { 2381 for (var d = 0; s > d; d++)delete n[r[d]]; 2382 r.splice(0, s) 2383 } 2384 return l 2385 }, o.measureText = function (t, e, a, i, n) { 2386 var o = e[n]; 2387 return o || (o = e[n] = t.measureText(n).width, a.push(n)), o > i && (i = o), i 2388 }, o.numberOfLabelLines = function (t) { 2389 var e = 1; 2390 return o.each(t, function (t) { 2391 o.isArray(t) && t.length > e && (e = t.length) 2392 }), e 2393 }, o.drawRoundedRectangle = function (t, e, a, i, n, o) { 2394 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() 2395 }, o.color = function (e) { 2396 return i ? i(e instanceof CanvasGradient ? t.defaults.global.defaultColor : e) : (console.log("Color.js not found!"), e) 2397 }, o.addResizeListener = function (t, e) { 2398 var a = document.createElement("iframe"), i = "chartjs-hidden-iframe"; 2399 a.classlist ? a.classlist.add(i) : a.setAttribute("class", i); 2400 var n = a.style; 2401 n.width = "100%", n.display = "block", n.border = 0, n.height = 0, n.margin = 0, n.position = "absolute", n.left = 0, n.right = 0, n.top = 0, n.bottom = 0, t.insertBefore(a, t.firstChild), (a.contentWindow || a).onresize = function () { 2402 e && e() 2403 } 2404 }, o.removeResizeListener = function (t) { 2405 var e = t.querySelector(".chartjs-hidden-iframe"); 2406 e && e.parentNode.removeChild(e) 2407 }, o.isArray = Array.isArray ? function (t) { 2408 return Array.isArray(t) 2409 } : function (t) { 2410 return "[object Array]" === Object.prototype.toString.call(t) 2411 }, o.arrayEquals = function (t, e) { 2412 var a, i, n, r; 2413 if (!t || !e || t.length != e.length)return !1; 2414 for (a = 0, i = t.length; i > a; ++a)if (n = t[a], r = e[a], n instanceof Array && r instanceof Array) { 2415 if (!o.arrayEquals(n, r))return !1 2416 } else if (n != r)return !1; 2417 return !0 2418 }
2418, o.callCallback = function (t, e, a) { 2419 t && "function" == typeof t.call && t.apply(a, e) 2420 }, o.getHoverColor = function (t) { 2421 return t instanceof CanvasPattern ? t : o.color(t).saturate(.5).darken(.1).rgbString() 2422 } 2423 } 2424 }, {3: 3}], 26: [function (t, e, a) { 2425 "use strict"; 2426 e.exports = function () { 2427 var t = function (e, a) { 2428 var i = this, n = t.helpers; 2429 return i.config = a, e.length && e[0].getContext && (e = e[0]), e.getContext && (e = e.getContext("2d")), i.ctx = e, i.canvas = e.canvas, e.canvas.style.display = e.canvas.style.display || "block", i.width = e.canvas.width || parseInt(n.getStyle(e.canvas, "width"), 10) || n.getMaximumWidth(e.canvas), i.height = e.canvas.height || parseInt(n.getStyle(e.canvas, "height"), 10) || n.getMaximumHeight(e.canvas), i.aspectRatio = i.width / i.height, (isNaN(i.aspectRatio) || isFinite(i.aspectRatio) === !1) && (i.aspectRatio = void 0 !== a.aspectRatio ? a.aspectRatio : 2), i.originalCanvasStyleWidth = e.canvas.style.width, i.originalCanvasStyleHeight = e.canvas.style.height, n.retinaScale(i), a && (i.controller = new t.Controller(i)), n.addResizeListener(e.canvas.parentNode, function () { 2430 i.controller && i.controller.config.options.responsive && i.controller.resize() 2431 }), i.controller ? i.controller : i 2432 }; 2433 return t.defaults = { 2434 global: { 2435 responsive: !0, 2436 responsiveAnimationDuration: 0, 2437 maintainAspectRatio: !0, 2438 events: ["mousemove", "mouseout", "click", "touchstart", "touchmove"], 2439 hover: {onHover: null, mode: "single", animationDuration: 400}, 2440 onClick: null, 2441 defaultColor: "rgba(0,0,0,0.1)", 2442 defaultFontColor: "#666", 2443 defaultFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif", 2444 defaultFontSize: 12, 2445 defaultFontStyle: "normal", 2446 showLines: !0, 2447 elements: {}, 2448 legendCallback: function (t) { 2449 var e = []; 2450 e.push('<ul class="' + t.id + '-legend">'); 2451 for (var a = 0; a < t.data.datasets.length; 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>"); 2452 return e.push("</ul>"), e.join("") 2453 } 2454 } 2455 }, t.Chart = t, t 2456 } 2457 }, {}], 27: [function (t, e, a) { 2458 "use strict"; 2459 e.exports = function (t) { 2460 var e = t.helpers; 2461 t.layoutService = { 2462 defaults: {}, addBox: function (t, e) { 2463 t.boxes || (t.boxes = []), t.boxes.push(e) 2464 }, removeBox: function (t, e) { 2465 t.boxes && t.boxes.splice(t.boxes.indexOf(e), 1) 2466 }, update: function (t, a, i) { 2467 function n(t) { 2468 var e, a = t.isHorizontal(); 2469 a ? (e = t.update(t.options.fullWidth ? p : k, y), S -= e.height) : (e = t.update(x, v), k -= e.width), w.push({ 2470 horizontal: a, 2471 minSize: e, 2472 box: t 2473 }) 2474 } 2475 2476 function o(t) { 2477 var a = e.findNextWhere(w, function (e) { 2478 return e.box === t 2479 }); 2480 if (a)if (t.isHorizontal()) { 2481 var i = {left: C, right: M, top: 0, bottom: 0}; 2482 t.update(t.options.fullWidth ? p : k, m / 2, i) 2483 } else t.update(a.minSize.width, S) 2484 } 2485 2486 function r(t) { 2487 var a = e.findNextWhere(w, function (e) { 2488 return e.box === t 2489 }), i = {left: 0, right: 0, top: D, bottom: A}; 2490 a && t.update(a.minSize.width, S, i) 2491 } 2492 2493 function l(t) { 2494 t.isHorizontal() ? (t.left = t.options.fullWidth ? s : C, t.right = t.options.fullWidth ? a - s : C + k, t.top = P, t.bottom = P + t.height, P = t.bottom) : (t.left = T, t.right = T + t.width, t.top = D, t.bottom = D + S, T = t.right) 2495 } 2496 2497 if (t) { 2498 var s = 0, d = 0, u = e.where(t.boxes, function (t) { 2499 return "left" === t.options.position 2500 }), c = e.where(t.boxes, function (t) { 2501 return "right" === t.options.position 2502 }), h = e.where(t.boxes, function (t) { 2503 return "top" === t.options.position 2504 }), f = e.where(t.boxes, function (t) { 2505 return "bottom" === t.options.position 2506 }), g = e.where(t.boxes, function (t) { 2507 return "chartArea" === t.options.position 2508 }); 2509 h.sort(function (t, e) { 2510 return (e.options.fullWidth ? 1 : 0) - (t.options.fullWidth ? 1 : 0) 2511 }), f.sort(function (t, e) { 2512 return (t.options.fullWidth ? 1 : 0) - (e.options.fullWidth ? 1 : 0) 2513 }); 2514 var p = a - 2 * s, m = i - 2 * d, b = p / 2, v = m / 2, x = (a
2514- b) / (u.length + c.length), y = (i - v) / (h.length + f.length), k = p, S = m, w = []; 2515 e.each(u.concat(c, h, f), n); 2516 var C = s, M = s, D = d, A = d; 2517 e.each(u.concat(c), o), e.each(u, function (t) { 2518 C += t.width 2519 }), e.each(c, function (t) { 2520 M += t.width 2521 }), e.each(h.concat(f), o), e.each(h, function (t) { 2522 D += t.height 2523 }), e.each(f, function (t) { 2524 A += t.height 2525 }), e.each(u.concat(c), r), C = s, M = s, D = d, A = d, e.each(u, function (t) { 2526 C += t.width 2527 }), e.each(c, function (t) { 2528 M += t.width 2529 }), e.each(h, function (t) { 2530 D += t.height 2531 }), e.each(f, function (t) { 2532 A += t.height 2533 }); 2534 var I = i - D - A, F = a - C - M; 2535 (F !== k || I !== S) && (e.each(u, function (t) { 2536 t.height = I 2537 }), e.each(c, function (t) { 2538 t.height = I 2539 }), e.each(h, function (t) { 2540 t.options.fullWidth || (t.width = F) 2541 }), e.each(f, function (t) { 2542 t.options.fullWidth || (t.width = F) 2543 }), S = I, k = F); 2544 var T = s, P = d; 2545 e.each(u.concat(h), l), T += k, P += S, e.each(c, l), e.each(f, l), t.chartArea = { 2546 left: C, 2547 top: D, 2548 right: C + k, 2549 bottom: D + S 2550 }, e.each(g, function (e) { 2551 e.left = t.chartArea.left, e.top = t.chartArea.top, e.right = t.chartArea.right, e.bottom = t.chartArea.bottom, e.update(k, S) 2552 }) 2553 } 2554 } 2555 } 2556 } 2557 }, {}], 28: [function (t, e, a) { 2558 "use strict"; 2559 e.exports = function (t) { 2560 var e = t.helpers, a = e.noop; 2561 t.defaults.global.legend = { 2562 display: !0, 2563 position: "top", 2564 fullWidth: !0, 2565 reverse: !1, 2566 onClick: function (t, e) { 2567 var a = e.datasetIndex, i = this.chart, n = i.getDatasetMeta(a); 2568 n.hidden = null === n.hidden ? !i.data.datasets[a].hidden : null, i.update() 2569 }, 2570 labels: { 2571 boxWidth: 40, padding: 10, generateLabels: function (t) { 2572 var a = t.data; 2573 return e.isArray(a.datasets) ? a.datasets.map(function (a, i) { 2574 return { 2575 text: a.label, 2576 fillStyle: e.isArray(a.backgroundColor) ? a.backgroundColor[0] : a.backgroundColor, 2577 hidden: !t.isDatasetVisible(i), 2578 lineCap: a.borderCapStyle, 2579 lineDash: a.borderDash, 2580 lineDashOffset: a.borderDashOffset, 2581 lineJoin: a.borderJoinStyle, 2582 lineWidth: a.borderWidth, 2583 strokeStyle: a.borderColor, 2584 datasetIndex: i 2585 } 2586 }, this) : [] 2587 } 2588 } 2589 }, t.Legend = t.Element.extend({ 2590 initialize: function (t) { 2591 e.extend(this, t), this.legendHitBoxes = [], this.doughnutMode = !1 2592 }, beforeUpdate: a, update: function (t, e, a) { 2593 var i = this; 2594 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 2595 }, afterUpdate: a, beforeSetDimensions: a, setDimensions: function () { 2596 var t = this; 2597 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 = { 2598 width: 0, 2599 height: 0 2600 } 2601 }, afterSetDimensions: a, beforeBuildLabels: a, buildLabels: function () { 2602 var t = this; 2603 t.legendItems = t.options.labels.generateLabels.call(t, t.chart), t.options.reverse && t.legendItems.reverse() 2604 }, afterBuildLabels: a, beforeFit: a, fit: function () { 2605 var a = this, i = a.options, n = i.labels, o = i.display, r = a.
2605ctx, l = t.defaults.global, s = e.getValueOrDefault, d = s(n.fontSize, l.defaultFontSize), u = s(n.fontStyle, l.defaultFontStyle), c = s(n.fontFamily, l.defaultFontFamily), h = e.fontString(d, u, c), f = a.legendHitBoxes = [], g = a.minSize, p = a.isHorizontal(); 2606 if (p ? (g.width = a.maxWidth, g.height = o ? 10 : 0) : (g.width = o ? 10 : 0, g.height = a.maxHeight), o)if (r.font = h, p) { 2607 var m = a.lineWidths = [0], b = a.legendItems.length ? d + n.padding : 0; 2608 r.textAlign = "left", r.textBaseline = "top", e.each(a.legendItems, function (t, e) { 2609 var i = n.boxWidth + d / 2 + r.measureText(t.text).width; 2610 m[m.length - 1] + i + n.padding >= a.width && (b += d + n.padding, m[m.length] = a.left), f[e] = { 2611 left: 0, 2612 top: 0, 2613 width: i, 2614 height: d 2615 }, m[m.length - 1] += i + n.padding 2616 }), g.height += b 2617 } else { 2618 var v = n.padding, x = a.columnWidths = [], y = n.padding, k = 0, S = 0, w = d + v; 2619 e.each(a.legendItems, function (t, e) { 2620 var a = n.boxWidth + d / 2 + r.measureText(t.text).width; 2621 S + w > g.height && (y += k + n.padding, x.push(k), k = 0, S = 0), k = Math.max(k, a), S += w, f[e] = { 2622 left: 0, 2623 top: 0, 2624 width: a, 2625 height: d 2626 } 2627 }), y += k, x.push(k), g.width += y 2628 } 2629 a.width = g.width, a.height = g.height 2630 }, afterFit: a, isHorizontal: function () { 2631 return "top" === this.options.position || "bottom" === this.options.position 2632 }, draw: function () { 2633 var a = this, i = a.options, n = i.labels, o = t.defaults.global, r = o.elements.line, l = a.width, s = (a.height, a.lineWidths); 2634 if (i.display) { 2635 var d, u = a.ctx, c = e.getValueOrDefault, h = c(n.fontColor, o.defaultFontColor), f = c(n.fontSize, o.defaultFontSize), g = c(n.fontStyle, o.defaultFontStyle), p = c(n.fontFamily, o.defaultFontFamily), m = e.fontString(f, g, p); 2636 u.textAlign = "left", u.textBaseline = "top", u.lineWidth = .5, u.strokeStyle = h, u.fillStyle = h, u.font = m; 2637 var b = n.boxWidth, v = a.legendHitBoxes, x = function (t, e, a) { 2638 u.save(), u.fillStyle = c(a.fillStyle, o.defaultColor), u.lineCap = c(a.lineCap, r.borderCapStyle), u.lineDashOffset = c(a.lineDashOffset, r.borderDashOffset), u.lineJoin = c(a.lineJoin, r.borderJoinStyle), u.lineWidth = c(a.lineWidth, r.borderWidth), u.strokeStyle = c(a.strokeStyle, o.defaultColor), u.setLineDash && u.setLineDash(c(a.lineDash, r.borderDash)), u.strokeRect(t, e, b, f), u.fillRect(t, e, b, f), u.restore() 2639 }, y = function (t, e, a, i) { 2640 u.fillText(a.text, b + f / 2 + t, e), a.hidden && (u.beginPath(), u.lineWidth = 2, u.moveTo(b + f / 2 + t, e + f / 2), u.lineTo(b + f / 2 + t + i, e + f / 2), u.stroke()) 2641 }, k = a.isHorizontal(); 2642 d = k ? {x: a.left + (l - s[0]) / 2, y: a.top + n.padding, line: 0} : { 2643 x: a.left + n.padding, 2644 y: a.top, 2645 line: 0 2646 }; 2647 var S = f + n.padding; 2648 e.each(a.legendItems, function (t, e) { 2649 var i = u.measureText(t.text).width, o = b + f / 2 + i, r = d.x, c = d.y; 2650 k ? r + o >= l && (c = d.y += f + n.padding, d.line++, r = d.x = a.left + (l - s[d.line]) / 2) : c + S > a.bottom && (r = d.x = r + a.columnWidths[d.line] + n.padding, c = d.y = a.top, d.line++), x(r, c, t), v[e].left = r, v[e].top = c, y(r, c, t, i), k ? d.x += o + n.padding : d.y += S 2651 }) 2652 } 2653 }, handleEvent: function (t) { 2654 var a = this, i = e.getRelativePosition(t, a.chart.chart), n = i.x, o = i.y, r = a.options; 2655 if (n >= a.left && n <= a.right && o >= a.top && o <= a.bottom)for (var l = a.legendHitBoxes, s = 0; s < l.length; ++s) { 2656 var d = l[s]; 2657 if (n >= d.left && n <= d.left + d.width && o >= d.top && o <= d.top + d.height) { 2658 r.onClick && r.onClick.call(a, t, a.legendItems[s]); 2659 break 2660 } 2661 } 2662 } 2663 }), t.plugins.register({ 2664 beforeInit: function (e) { 2665 var a = e.options, i = a.legend; 2666 i && (e.legend = new t.Legend({ 2667 ctx: e.chart.ctx, 2668 options: i, 2669 chart: e 2670 }), t.layoutService.addBox(e, e.legend)) 2671 } 2672 }) 2673 } 2674 }, {}], 29: [function (t, e, a) { 2675 "use strict"; 2676 e.exports = function (t) { 2677 var e = t.helpers.noop; 2678 t.plugins = { 2679 _plugins: [], register: function (t) { 2680 var e = this._plugins; 2681 [].concat(t).forEach(function (t) { 2682 -1 === e.indexOf(t) && e.push(t) 2683 }) 2684 }, unregister: function (t) { 2685 var e = this._plugins; 2686 [].concat(t).forEach(function (t) { 2687 var a = e.indexOf(t); 2688 -1 !== a && e.splice(a, 1) 2689 }) 2690 }, clear: function () { 2691 this._plugins = [] 2692 }, count: function () { 2693 return this._plugins.length 2694 }, getAll: function () { 2695 return this._plugins 2696 }, notify: function (t, e) { 2697 var a, i, n = this._plugins, o = n.length; 2698 for (a = 0; o > a; ++a)if (i = n[a], "function" == typeof i[t] && i[t].apply(i, e || []) === !1)return !1; 2699 return !0 2700 } 2701 }, t.PluginBase = t.Element.extend({ 2702 beforeInit: e, 2703 afterInit: e, 2704 beforeUpdate: e, 2705 afterUpdate: e, 2706 beforeDraw: e, 2707 afterDraw: e, 2708 destroy: e 2709 }), t.pluginService = t.plugins 2710 } 2711 }, {}], 30: [function (t, e, a) { 2712 "use strict"; 2713 e.exports = function (t) { 2714 var e = t.helpers; 2715 t.defaults.scale = { 2716 display: !0, 2717 position: "left", 2718 gridLines: { 2719 display: !0, 2720 color: "rgba(0, 0, 0, 0.1)", 2721 lineWidth: 1, 2722 drawBorder: !0, 2723 drawOnChartArea: !0, 2724 drawTicks: !0, 2725 tickMarkLength: 10,
2726 zeroLineWidth: 1, 2727 zeroLineColor: "rgba(0,0,0,0.25)", 2728 offsetGridLines: !1 2729 }, 2730 scaleLabel: {labelString: "", display: !1}, 2731 ticks: { 2732 beginAtZero: !1, 2733 minRotation: 0, 2734 maxRotation: 50, 2735 mirror: !1, 2736 padding: 10, 2737 reverse: !1, 2738 display: !0, 2739 autoSkip: !0, 2740 autoSkipPadding: 0, 2741 labelOffset: 0, 2742 callback: function (t) { 2743 return e.isArray(t) ? t : "" + t 2744 } 2745 } 2746 }, t.Scale = t.Element.extend({ 2747 beforeUpdate: function () { 2748 e.callCallback(this.options.beforeUpdate, [this]) 2749 }, 2750 update: function (t, a, i) { 2751 var n = this; 2752 return n.beforeUpdate(), n.maxWidth = t, n.maxHeight = a, n.margins = e.extend({ 2753 left: 0, 2754 right: 0, 2755 top: 0, 2756 bottom: 0 2757 }, 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 2758 }, 2759 afterUpdate: function () { 2760 e.callCallback(this.options.afterUpdate, [this]) 2761 }, 2762 beforeSetDimensions: function () { 2763 e.callCallback(this.options.beforeSetDimensions, [this]) 2764 }, 2765 setDimensions: function () { 2766 var t = this; 2767 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 2768 }, 2769 afterSetDimensions: function () { 2770 e.callCallback(this.options.afterSetDimensions, [this]) 2771 }, 2772 beforeDataLimits: function () { 2773 e.callCallback(this.options.beforeDataLimits, [this]) 2774 }, 2775 determineDataLimits: e.noop, 2776 afterDataLimits: function () { 2777 e.callCallback(this.options.afterDataLimits, [this]) 2778 }, 2779 beforeBuildTicks: function () { 2780 e.callCallback(this.options.beforeBuildTicks, [this]) 2781 }, 2782 buildTicks: e.noop, 2783 afterBuildTicks: function () { 2784 e.callCallback(this.options.afterBuildTicks, [this]) 2785 }, 2786 beforeTickToLabelConversion: function () { 2787 e.callCallback(this.options.beforeTickToLabelConversion, [this]) 2788 }, 2789 convertTicksToLabels: function () { 2790 var t = this; 2791 t.ticks = t.ticks.map(function (e, a, i) { 2792 return t.options.ticks.userCallback ? t.options.ticks.userCallback(e, a, i) : t.options.ticks.callback(e, a, i) 2793 }, t) 2794 }, 2795 afterTickToLabelConversion: function () { 2796 e.callCallback(this.options.afterTickToLabelConversion, [this]) 2797 }, 2798 beforeCalculateTickRotation: function () { 2799 e.callCallback(this.options.beforeCalculateTickRotation, [this]) 2800 }, 2801 calculateTickRotation: function () { 2802 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); 2803 i.font = d; 2804 var u, c = i.measureText(a.ticks[0]).width, h = i.measureText(a.ticks[a.ticks.length - 1]).width; 2805 if (a.labelRotation = o.minRotation || 0, a.paddingRight = 0, a.paddingLeft = 0, a.options.display && a.isHorizontal()) { 2806 a.paddingRight = h / 2 + 3, a.paddingLeft = c / 2 + 3, a.longestTextCache || (a.longestTextCache = {}); 2807 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;) {
2808 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) { 2809 a.labelRotation--; 2810 break 2811 } 2812 a.labelRotation++, m = f * p 2813 } 2814 } 2815 a.margins && (a.paddingLeft = Math.max(a.paddingLeft - a.margins.left, 0), a.paddingRight = Math.max(a.paddingRight - a.margins.right, 0)) 2816 }, 2817 afterCalculateTickRotation: function () { 2818 e.callCallback(this.options.afterCalculateTickRotation, [this]) 2819 }, 2820 beforeFit: function () { 2821 e.callCallback(this.options.beforeFit, [this]) 2822 }, 2823 fit: function () { 2824 var a = this, i = a.minSize = { 2825 width: 0, 2826 height: 0 2827 }, n = a.options, o = t.defaults.global, r = n.ticks, l = n.scaleLabel, s = n.display, d = a.isHorizontal(), u = e.getValueOrDefault(r.fontSize, o.defaultFontSize), c = e.getValueOrDefault(r.fontStyle, o.defaultFontStyle), h = e.getValueOrDefault(r.fontFamily, o.defaultFontFamily), f = e.fontString(u, c, h), g = e.getValueOrDefault(l.fontSize, o.defaultFontSize), p = e.getValueOrDefault(l.fontStyle, o.defaultFontStyle), m = e.getValueOrDefault(l.fontFamily, o.defaultFontFamily), b = (e.fontString(g, p, m), n.gridLines.tickMarkLength); 2828 if (d ? i.width = a.isFullWidth() ? a.maxWidth - a.margins.left - a.margins.right : a.maxWidth : i.width = s ? b : 0, d ? i.height = s ? b : 0 : i.height = a.maxHeight, l.display && s && (d ? i.height += 1.5 * g : i.width += 1.5 * g), r.display && s) { 2829 a.longestTextCache || (a.longestTextCache = {}); 2830 var v = e.longestText(a.ctx, f, a.ticks, a.longestTextCache), x = e.numberOfLabelLines(a.ticks), y = .5 * u; 2831 if (d) { 2832 a.longestLabelWidth = v; 2833 var k = Math.sin(e.toRadians(a.labelRotation)) * a.longestLabelWidth + u * x + y * x; 2834 i.height = Math.min(a.maxHeight, i.height + k), a.ctx.font = f; 2835 var S = a.ctx.measureText(a.ticks[0]).width, w = a.ctx.measureText(a.ticks[a.ticks.length - 1]).width, C = Math.cos(e.toRadians(a.labelRotation)), M = Math.sin(e.toRadians(a.labelRotation)); 2836 a.paddingLeft = 0 !== a.labelRotation ? C * S + 3 : S / 2 + 3, a.paddingRight = 0 !== a.labelRotation ? M * (u / 2) + 3 : w / 2 + 3 2837 } else { 2838 var D = a.maxWidth - i.width, A = r.mirror; 2839 A ? v = 0 : v += a.options.ticks.padding, D > v ? i.width += v : i.width = a.maxWidth, a.paddingTop = u / 2, a.paddingBottom = u / 2 2840 } 2841 } 2842 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 2843 }, 2844 afterFit: function () { 2845 e.callCallback(this.options.afterFit, [this]) 2846 }, 2847 isHorizontal: function () { 2848 return "top" === this.options.position || "bottom" === this.options.position 2849 }, 2850 isFullWidth: function () { 2851 return this.options.fullWidth 2852 }, 2853 getRightValue: function a(t) { 2854 return null === t || "undefined" == typeof t ? NaN : "number" == typeof t && isNaN(t) ? NaN : "object" == typeof t ? t instanceof Date || t.isValid ? t : a(this.isHorizontal() ? t.x : t.
2854y) : t 2855 }, 2856 getLabelForIndex: e.noop, 2857 getPixelForValue: e.noop, 2858 getValueForPixel: e.noop, 2859 getPixelForTick: function (t, e) { 2860 var a = this; 2861 if (a.isHorizontal()) { 2862 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; 2863 e && (o += n / 2); 2864 var r = a.left + Math.round(o); 2865 return r += a.isFullWidth() ? a.margins.left : 0 2866 } 2867 var l = a.height - (a.paddingTop + a.paddingBottom); 2868 return a.top + t * (l / (a.ticks.length - 1)) 2869 }, 2870 getPixelForDecimal: function (t) { 2871 var e = this; 2872 if (e.isHorizontal()) { 2873 var a = e.width - (e.paddingLeft + e.paddingRight), i = a * t + e.paddingLeft, n = e.left + Math.round(i); 2874 return n += e.isFullWidth() ? e.margins.left : 0 2875 } 2876 return e.top + t * e.height 2877 }, 2878 getBasePixel: function () { 2879 var t = this, e = t.min, a = t.max; 2880 return t.getPixelForValue(t.beginAtZero ? 0 : 0 > e && 0 > a ? a : e > 0 && a > 0 ? e : 0) 2881 }, 2882 draw: function (a) { 2883 var i = this, n = i.options; 2884 if (n.display) { 2885 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(); 2886 d.maxTicksLimit && (r = d.maxTicksLimit); 2887 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(c.fontColor, s.defaultFontColor), S = e.getValueOrDefault(c.fontSize, s.defaultFontSize), w = e.getValueOrDefault(c.fontStyle, s.defaultFontStyle), C = e.getValueOrDefault(c.fontFamily, s.defaultFontFamily), M = e.fontString(S, w, C), D = e.toRadians(i.labelRotation), A = Math.cos(D), I = (Math.sin(D), i.longestLabelWidth * A); 2888 l.fillStyle = p; 2889 var F = []; 2890 if (g) { 2891 if (o = !1, h && (I /= 2), (I + d.autoSkipPadding) * i.ticks.length > i.width - (i.paddingLeft + i.paddingRight) && (o = 1 + Math.floor((I + 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; 2892 f || (o = !1) 2893 } 2894 var T = "right" === n.position ? i.left : i.right - y, P = "right" === n.position ? i.left + y : i.right, _ = "bottom" === n.position ? i.top : i.bottom - y, R = "bottom" === n.position ? i.top + y : i.bottom; 2895 if (e.each(i.ticks, function (t, r) { 2896 if (void 0 !== t && null !== t) { 2897 var l = i.ticks.length === r + 1, s = o > 1 && r % o > 0 || r % o === 0 && r + o >= i.ticks.length; 2898 if ((!s || l) && void 0 !== t && null !== t) { 2899 var c, f; 2900 r === ("undefined" != typeof i.zeroLineIndex ? i.zeroLineIndex : 0) ? (c = u.zeroLineWi
2900dth, f = u.zeroLineColor) : (c = e.getValueAtIndexOrDefault(u.lineWidth, r), f = e.getValueAtIndexOrDefault(u.color, r)); 2901 var p, m, b, v, x, k, S, w, C, M, A, I = "middle"; 2902 if (g) { 2903 h || (I = "top" === n.position ? "bottom" : "top"), A = h ? "right" : "center"; 2904 var V = i.getPixelForTick(r) + e.aliasPixel(c); 2905 C = i.getPixelForTick(r, u.offsetGridLines) + d.labelOffset, M = h ? i.top + 12 : "top" === n.position ? i.bottom - y : i.top + y, p = b = x = S = V, m = _, v = R, k = a.top, w = a.bottom 2906 } else { 2907 "left" === n.position ? d.mirror ? (C = i.right + d.padding, A = "left") : (C = i.right - d.padding, A = "right") : d.mirror ? (C = i.left - d.padding, A = "right") : (C = i.left + d.padding, A = "left"); 2908 var O = i.getPixelForTick(r); 2909 O += e.aliasPixel(c), M = i.getPixelForTick(r, u.offsetGridLines), p = T, b = P, x = a.left, S = a.right, m = v = k = w = O 2910 } 2911 F.push({ 2912 tx1: p, 2913 ty1: m, 2914 tx2: b, 2915 ty2: v, 2916 x1: x, 2917 y1: k, 2918 x2: S, 2919 y2: w, 2920 labelX: C, 2921 labelY: M, 2922 glWidth: c, 2923 glColor: f, 2924 rotation: -1 * D, 2925 label: t, 2926 textBaseline: I, 2927 textAlign: A 2928 }) 2929 } 2930 } 2931 }), e.each(F, function (t) { 2932 if (u.display && (l.lineWidth = t.glWidth, l.strokeStyle = t.glColor, 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()), d.display) { 2933 l.save(), l.translate(t.labelX, t.labelY), l.rotate(t.rotation), l.font = x, l.textBaseline = t.textBaseline, l.textAlign = t.textAlign; 2934 var a = t.label; 2935 if (e.isArray(a))for (var i = 0, n = 0; i < a.length; ++i)l.fillText("" + a[i], 0, n), n += 1.5 * m; else l.fillText(a, 0, 0); 2936 l.restore() 2937 } 2938 }), c.display) { 2939 var V, O, L = 0; 2940 if (g)V = i.left + (i.right - i.left) / 2, O = "bottom" === n.position ? i.bottom - S / 2 : i.top + S / 2; else { 2941 var B = "left" === n.position; 2942 V = B ? i.left + S / 2 : i.right - S / 2, O = i.top + (i.bottom - i.top) / 2, L = B ? -.5 * Math.PI : .5 * Math.PI 2943 } 2944 l.save(), l.translate(V, O), l.rotate(L), l.textAlign = "center", l.textBaseline = "middle", l.fillStyle = k, l.font = M, l.fillText(c.labelString, 0, 0
2944), l.restore() 2945 } 2946 if (u.drawBorder) { 2947 l.lineWidth = e.getValueAtIndexOrDefault(u.lineWidth, 0), l.strokeStyle = e.getValueAtIndexOrDefault(u.color, 0); 2948 var W = i.left, z = i.right, H = i.top, N = i.bottom, E = e.aliasPixel(l.lineWidth); 2949 g ? (H = N = "top" === n.position ? i.bottom : i.top, H += E, N += E) : (W = z = "left" === n.position ? i.right : i.left, W += E, z += E), l.beginPath(), l.moveTo(W, H), l.lineTo(z, N), l.stroke() 2950 } 2951 } 2952 } 2953 }) 2954 } 2955 }, {}], 31: [function (t, e, a) { 2956 "use strict"; 2957 e.exports = function (t) { 2958 var e = t.helpers; 2959 t.scaleService = { 2960 constructors: {}, defaults: {}, registerScaleType: function (t, a, i) { 2961 this.constructors[t] = a, this.defaults[t] = e.clone(i) 2962 }, getScaleConstructor: function (t) { 2963 return this.constructors.hasOwnProperty(t) ? this.constructors[t] : void 0 2964 }, getScaleDefaults: function (a) { 2965 return this.defaults.hasOwnProperty(a) ? e.scaleMerge(t.defaults.scale, this.defaults[a]) : {} 2966 }, updateScaleDefaults: function (t, a) { 2967 var i = this.defaults; 2968 i.hasOwnProperty(t) && (i[t] = e.extend(i[t], a)) 2969 }, addScalesToLayout: function (a) { 2970 e.each(a.scales, function (e) { 2971 t.layoutService.addBox(a, e) 2972 }) 2973 } 2974 } 2975 } 2976 }, {}], 32: [function (t, e, a) { 2977 "use strict"; 2978 e.exports = function (t) { 2979 var e = t.helpers; 2980 t.defaults.global.title = { 2981 display: !1, 2982 position: "top", 2983 fullWidth: !0, 2984 fontStyle: "bold", 2985 padding: 10, 2986 text: "" 2987 }; 2988 var a = e.noop; 2989 t.Title = t.Element.extend({ 2990 initialize: function (a) { 2991 var i = this; 2992 e.extend(i, a), i.options = e.configMerge(t.defaults.global.title, a.options), i.legendHitBoxes = [] 2993 }, 2994 beforeUpdate: function () { 2995 var a = this.chart.options; 2996 a && a.title && (this.options = e.configMerge(t.defaults.global.title, a.title)) 2997 }, 2998 update: function (t, e, a) { 2999 var i = this; 3000 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 3001 }, 3002 afterUpdate: a, 3003 beforeSetDimensions: a, 3004 setDimensions: function () { 3005 var t = this; 3006 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 = { 3007 width: 0, 3008 height: 0 3009 } 3010 }, 3011 afterSetDimensions: a, 3012 beforeBuildLabels: a, 3013 buildLabels: a, 3014 afterBuildLabels: a, 3015 beforeFit: a, 3016 fit: function () { 3017 var a = this, i = (a.ctx, e.getValueOrDefault), n = a.options, o = t.defaults.global, r = n.display, l = i(n.fontSize, o.defaultFontSize), s = a.minSize; 3018 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 3019 }, 3020 afterFit: a, 3021 isHorizontal: function () { 3022 var t = this.options.position; 3023 return "top" === t || "bottom" === t 3024 }, 3025 draw: function () { 3026 var a = this, i = a.ctx, n = e.getValueOrDefault, o = a.options, r = t.defaults.global; 3027 if (o.display) { 3028 var l, s, d = n(o.fontSize, r.defaultFontSize), u = n(o.fontStyle, r.defaultFontStyle), c = n(o.fontFamily, r.defaultFontFamily), h = e.fontString(d, u, c), f = 0, g = a.top, p = a.left, m = a.bottom, b = a.right; 3029 i.fillStyle = n(o.fontColor, r.defaultFontColor), i.font = h, a.isHorizontal() ? (l = p + (b - p) / 2, s = g + (m - g) / 2) : (l = "left" === o.position ? p + d / 2 : b - d / 2, s = g + (m - g) / 2, f = Math.PI * ("left" === o.position ? -.5 : .5)), i.save(), i.translate(l, s), i.rotate(f), i.textAlign = "center", i.textBaseline = "middle", i.fillText(o.text, 0, 0
3029), i.restore() 3030 } 3031 } 3032 }), t.plugins.register({ 3033 beforeInit: function (e) { 3034 var a = e.options, i = a.title; 3035 i && (e.titleBlock = new t.Title({ 3036 ctx: e.chart.ctx, 3037 options: i, 3038 chart: e 3039 }), t.layoutService.addBox(e, e.titleBlock)) 3040 } 3041 }) 3042 } 3043 }, {}], 33: [function (t, e, a) { 3044 "use strict"; 3045 e.exports = function (t) { 3046 function e(t, e) { 3047 return e && (n.isArray(e) ? Array.prototype.push.apply(t, e) : t.push(e)), t 3048 } 3049 3050 function a(t) { 3051 if (!t.length)return !1; 3052 var e, a, i = [], n = []; 3053 for (e = 0, a = t.length; a > e; ++e) { 3054 var o = t[e]; 3055 if (o && o.hasValue()) { 3056 var r = o.tooltipPosition(); 3057 i.push(r.x), n.push(r.y) 3058 } 3059 } 3060 var l = 0, s = 0; 3061 for (e = 0, a - i.length; a > e; ++e)l += i[e], s += n[e]; 3062 return {x: Math.round(l / i.length), y: Math.round(s / i.length)} 3063 } 3064 3065 function i(t) { 3066 var e = t._xScale, a = t._yScale || t._scale, i = t._index, n = t._datasetIndex; 3067 return { 3068 xLabel: e ? e.getLabelForIndex(i, n) : "", 3069 yLabel: a ? a.getLabelForIndex(i, n) : "", 3070 index: i, 3071 datasetIndex: n 3072 } 3073 } 3074 3075 var n = t.helpers; 3076 t.defaults.global.tooltips = { 3077 enabled: !0, 3078 custom: null, 3079 mode: "single", 3080 backgroundColor: "rgba(0,0,0,0.8)", 3081 titleFontStyle: "bold", 3082 titleSpacing: 2, 3083 titleMarginBottom: 6, 3084 titleFontColor: "#fff", 3085 titleAlign: "left", 3086 bodySpacing: 2, 3087 bodyFontColor: "#fff", 3088 bodyAlign: "left", 3089 footerFontStyle: "bold", 3090 footerSpacing: 2, 3091 footerMarginTop: 6, 3092 footerFontColor: "#fff", 3093 footerAlign: "left", 3094 yPadding: 6, 3095 xPadding: 6, 3096 yAlign: "center", 3097 xAlign: "center", 3098 caretSize: 5, 3099 cornerRadius: 6, 3100 multiKeyBackground: "#fff", 3101 callbacks: { 3102 beforeTitle: n.noop, 3103 title: function (t, e) { 3104 var a = "", i = e.labels, n = i ? i.length : 0; 3105 if (t.length > 0) { 3106 var o = t[0]; 3107 o.xLabel ? a = o.xLabel : n > 0 && o.index < n && (a = i[o.index]) 3108 } 3109 return a 3110 }, 3111 afterTitle: n.noop, 3112 beforeBody: n.noop, 3113 beforeLabel: n.noop, 3114 label: function (t, e) { 3115 var a = e.datasets[t.datasetIndex].label || ""; 3116 return a + ": " + t.yLabel 3117 }, 3118 labelColor: function (t, e) { 3119 var a = e.getDatasetMeta(t.datasetIndex), i = a.data[t.index], n = i._view; 3120 return {borderColor: n.borderColor, backgroundColor: n.backgroundColor} 3121 }, 3122 afterLabel: n.noop, 3123 afterBody: n.noop, 3124 beforeFooter: n.noop, 3125 footer: n.noop, 3126 afterFooter: n.noop 3127 } 3128 }, t.Tooltip = t.Element.extend({ 3129 initialize: function () { 3130 var e = this, a = t.defaults.global, i = e._options, o = n.getValueOrDefault; 3131 n.extend(e, { 3132 _model: { 3133 xPadding: i.xPadding, 3134 yPadding: i.yPadding, 3135 xAlign: i.yAlign, 3136 yAlign: i.xAlign, 3137 bodyFontColor: i.bodyFontColor, 3138 _bodyFontFamily: o(i.bodyFontFamily, a.defaultFontFamily), 3139 _bodyFontStyle: o(i.bodyFontStyle, a.defaultFontStyle), 3140 _bodyAlign: i.bodyAlign, 3141 bodyFontSize: o(i.bodyFontSize, a.defaultFontSize), 3142 bodySpacing: i.bodySpacing, 3143 titleFontColor: i.titleFontColor, 3144 _titleFontFamily: o(i.titleFontFamily, a.defaultFontFamily), 3145 _titleFontStyle: o(i.titleFontStyle, a.defaultFontStyle), 3146 titleFontSize: o(i.titleFontSize, a.defaultFontSize), 3147 _titleAlign: i.titleAlign, 3148 titleSpacing: i.titleSpacing, 3149 titleMarginBottom: i.titleMarginBottom, 3150 footerFontColor: i.footerFontColor, 3151 _footerFontFamily: o(i.footerFontFamily, a.defaultFontFamily), 3152 _footerFontStyle: o(i.footerFontStyle, a.defaultFontStyle), 3153 footerFontSize: o(i.footerFontSize, a.defaultFontSize), 3154 _footerAlign: i.footerAlign, 3155 footerSpacing: i.footerSpacing, 3156 footerMarginTop: i.footerMarginTop, 3157 caretSize: i.caretSize, 3158 cornerRadius: i.cornerRadius, 3159 backgroundColor: i.backgroundColor, 3160 opacity: 0,
3161 legendColorBackground: i.multiKeyBackground 3162 } 3163 }) 3164 }, getTitle: function () { 3165 var t = this, a = t._options, i = a.callbacks, n = i.beforeTitle.apply(t, arguments), o = i.title.apply(t, arguments), r = i.afterTitle.apply(t, arguments), l = []; 3166 return l = e(l, n), l = e(l, o), l = e(l, r) 3167 }, getBeforeBody: function () { 3168 var t = this._options.callbacks.beforeBody.apply(this, arguments); 3169 return n.isArray(t) ? t : void 0 !== t ? [t] : [] 3170 }, getBody: function (t, a) { 3171 var i = this, o = i._options.callbacks, r = []; 3172 return n.each(t, function (t) { 3173 var n = {before: [], lines: [], after: []}; 3174 e(n.before, o.beforeLabel.call(i, t, a)), e(n.lines, o.label.call(i, t, a)), e(n.after, o.afterLabel.call(i, t, a)), r.push(n) 3175 }), r 3176 }, getAfterBody: function () { 3177 var t = this._options.callbacks.afterBody.apply(this, arguments); 3178 return n.isArray(t) ? t : void 0 !== t ? [t] : [] 3179 }, getFooter: function () { 3180 var t = this, a = t._options.callbacks, i = a.beforeFooter.apply(t, arguments), n = a.footer.apply(t, arguments), o = a.afterFooter.apply(t, arguments), r = []; 3181 return r = e(r, i), r = e(r, n), r = e(r, o) 3182 }, update: function (t) { 3183 var e, o, r = this, l = r._options, s = r._model, d = r._active, u = r._data, c = r._chartInstance; 3184 if (d.length) { 3185 s.opacity = 1; 3186 var h = [], f = a(d), g = []; 3187 for (e = 0, o = d.length; o > e; ++e)g.push(i(d[e])); 3188 l.itemSort && (g = g.sort(l.itemSort)), d.length > 1 && n.each(g, function (t) { 3189 h.push(l.callbacks.labelColor.call(r, t, c)) 3190 }), n.extend(s, { 3191 title: r.getTitle(g, u), 3192 beforeBody: r.getBeforeBody(g, u), 3193 body: r.getBody(g, u), 3194 afterBody: r.getAfterBody(g, u), 3195 footer: r.getFooter(g, u), 3196 x: Math.round(f.x), 3197 y: Math.round(f.y), 3198 caretPadding: n.getValueOrDefault(f.padding, 2), 3199 labelColors: h 3200 }); 3201 var p = r.getTooltipSize(s); 3202 r.determineAlignment(p), n.extend(s, r.getBackgroundPoint(s, p)) 3203 } else r._model.opacity = 0; 3204 return t && l.custom && l.custom.call(r, s), r 3205 }, getTooltipSize: function (t) { 3206 var e = this._chart.ctx, a = { 3207 height: 2 * t.yPadding, 3208 width: 0 3209 }, i = t.body, o = i.reduce(function (t, e) { 3210 return t + e.before.length + e.lines.length + e.after.length 3211 }, 0); 3212 o += t.beforeBody.length + t.afterBody.length; 3213 var r = t.title.length, l = t.footer.length, s = t.titleFontSize, d = t.bodyFontSize, u = t.footerFontSize; 3214 a.height += r * s, a.height += (r - 1) * t.titleSpacing, a.height += r ? t.titleMarginBottom : 0, a.height += o * d, a.height += o ? (o - 1) * t.bodySpacing : 0, a.height += l ? t.footerMarginTop : 0, a.height += l * u, a.height += l ? (l - 1) * t.footerSpacing : 0; 3215 var c = 0, h = function (t) { 3216 a.width = Math.max(a.width, e.measureText(t).width + c) 3217 }; 3218 return e.font = n.fontString(s, t._titleFontStyle, t._titleFontFamily), n.each(t.title, h), e.font = n.fontString(d, t._bodyFontStyle, t._bodyFontFamily), n.each(t.beforeBody.concat(t.afterBody), h), c = i.length > 1 ? d + 2 : 0, n.each(i, function (t) { 3219 n.each(t.before, h), n.each(t.lines, h), n.each(t.after, h) 3220 }), c = 0, e.font = n.fontString(u, t._footerFontStyle, t._footerFontFamily), n.each(t.footer, h), a.width += 2 * t.xPadding, a 3221 }, determineAlignment: function (t) { 3222 var e = this, a = e._model, i = e._chart, n = e._chartInstance.chartArea; 3223 a.y < t.height ? a.yAlign = "top" : a.y > i.height - t.height && (a.yAlign = "bottom"); 3224 var o, r, l, s, d, u = (n.left + n.right) / 2, c = (n.top + n.bottom) / 2; 3225 "center" === a.yAlign ? (o = function (t) { 3226 return u >= t 3227 }, r = function (t) { 3228 return t > u 3229 }) : (o = function (e) { 3230 return e <= t.width / 2 3231 }, r = function (e) { 3232 return e >= i.width - t.width / 2 3233 }), l = function (e) { 3234 return e + t.width > i.width 3235 }, s = function (e) { 3236 return e - t.width < 0 3237 }, d = function (t) { 3238 return c >= t ? "top" : "bottom" 3239 }
3239, o(a.x) ? (a.xAlign = "left", l(a.x) && (a.xAlign = "center", a.yAlign = d(a.y))) : r(a.x) && (a.xAlign = "right", s(a.x) && (a.xAlign = "center", a.yAlign = d(a.y))) 3240 }, getBackgroundPoint: function (t, e) { 3241 var a = { 3242 x: t.x, 3243 y: t.y 3244 }, i = t.caretSize, n = t.caretPadding, o = t.cornerRadius, r = t.xAlign, l = t.yAlign, s = i + n, d = o + n; 3245 return "right" === r ? a.x -= e.width : "center" === r && (a.x -= e.width / 2), "top" === l ? a.y += s : "bottom" === l ? a.y -= e.height + s : a.y -= e.height / 2, "center" === l ? "left" === r ? a.x += s : "right" === r && (a.x -= s) : "left" === r ? a.x -= d : "right" === r && (a.x += d), a 3246 }, drawCaret: function (t, e, a, i) { 3247 var o, r, l, s, d, u, c = this._view, h = this._chart.ctx, f = c.caretSize, g = c.cornerRadius, p = c.xAlign, m = c.yAlign, b = t.x, v = t.y, x = e.width, y = e.height; 3248 "center" === m ? ("left" === p ? (o = b, r = o - f, l = o) : (o = b + x, r = o + f, l = o), d = v + y / 2, s = d - f, u = d + f) : ("left" === p ? (o = b + g, r = o + f, l = r + f) : "right" === p ? (o = b + x - g, r = o - f, l = r - f) : (r = b + x / 2, o = r - f, l = r + f), "top" === m ? (s = v, d = s - f, u = s) : (s = v + y, d = s + f, u = s)); 3249 var k = n.color(c.backgroundColor); 3250 h.fillStyle = k.alpha(a * k.alpha()).rgbString(), h.beginPath(), h.moveTo(o, s), h.lineTo(r, d), h.lineTo(l, u), h.closePath(), h.fill() 3251 }, drawTitle: function (t, e, a, i) { 3252 var o = e.title; 3253 if (o.length) { 3254 a.textAlign = e._titleAlign, a.textBaseline = "top"; 3255 var r = e.titleFontSize, l = e.titleSpacing, s = n.color(e.titleFontColor); 3256 a.fillStyle = s.alpha(i * s.alpha()).rgbString(), a.font = n.fontString(r, e._titleFontStyle, e._titleFontFamily); 3257 var d, u; 3258 for (d = 0, u = o.length; u > d; ++d)a.fillText(o[d], t.x, t.y), t.y += r + l, d + 1 === o.length && (t.y += e.titleMarginBottom - l) 3259 } 3260 }, drawBody: function (t, e, a, i) { 3261 var o = e.bodyFontSize, r = e.bodySpacing, l = e.body; 3262 a.textAlign = e._bodyAlign, a.textBaseline = "top"; 3263 var s = n.color(e.bodyFontColor), d = s.alpha(i * s.alpha()).rgbString(); 3264 a.fillStyle = d, a.font = n.fontString(o, e._bodyFontStyle, e._bodyFontFamily); 3265 var u = 0, c = function (e) { 3266 a.fillText(e, t.x + u, t.y), t.y += o + r 3267 }; 3268 n.each(e.beforeBody, c); 3269 var h = l.length > 1; 3270 u = h ? o + 2 : 0, n.each(l, function (r, l) { 3271 n.each(r.before, c), n.each(r.lines, function (r) { 3272 h && (a.fillStyle = n.color(e.legendColorBackground).alpha(i).rgbaString(), a.fillRect(t.x, t.y, o, o), a.strokeStyle = n.color(e.labelColors[l].borderColor).alpha(i).rgbaString(), a.strokeRect(t.x, t.y, o, o), a.fillStyle = n.color(e.labelColors[l].backgroundColor).alpha(i).rgbaString(), a.fillRect(t.x + 1, t.y + 1, o - 2, o - 2), a.fillStyle = d), c(r) 3273 }), n.each(r.after, c) 3274 }), u = 0, n.each(e.afterBody, c), t.y -= r 3275 }, drawFooter: function (t, e, a, i) { 3276 var o = e.footer; 3277 if (o.length) { 3278 t.y += e.footerMarginTop, a.textAlign = e._footerAlign, a.textBaseline = "top"; 3279 var r = n.color(e.footerFontColor); 3280 a.fillStyle = r.alpha(i * r.alpha()).rgbString(), a.font = n.fontString(e.footerFontSize, e._footerFontStyle, e._footerFontFamily), n.each(o, function (i) { 3281 a.fillText(i, t.x, t.y), t.y += e.footerFontSize + e.footerSpacing 3282 }) 3283 } 3284 }, draw: function () { 3285 var t = this._chart.ctx, e = this._view; 3286 if (0 !== e.opacity) { 3287 var a = this.getTooltipSize(e), i = { 3288 x: e.x, 3289 y: e.y 3290 }, o = Math.abs(e.opacity < .001) ? 0 : e.opacity; 3291 if (this._options.enabled) { 3292 var r = n.color(e.backgroundColor); 3293 t.fillStyle = r.alpha(o * r.alpha()).rgbString(), n.drawRoundedRectangle(t, i.x, i.y, a.width, a.height, e.cornerRadius), t.fill(), this.drawCaret(i, a, o, e.caretPadding), i.x += e.xPadding, i.y += e.yPadding, this.drawTitle(i, e, t, o), this.drawBody(i, e, t, o), this.drawFooter(i, e, t, o) 3294 } 3295 } 3296 } 3297 }) 3298 } 3299 }, {}], 34: [function (t, e, a) { 3300 "use strict"; 3301 e.exports = function (t, e) { 3302 var a = t.helpers, i = t.defaults.global;
3303 i.elements.arc = { 3304 backgroundColor: i.defaultColor, 3305 borderColor: "#fff", 3306 borderWidth: 2 3307 }, t.elements.Arc = t.Element.extend({ 3308 inLabelRange: function (t) { 3309 var e = this._view; 3310 return e ? Math.pow(t - e.x, 2) < Math.pow(e.radius + e.hoverRadius, 2) : !1 3311 }, inRange: function (t, e) { 3312 var i = this._view; 3313 if (i) { 3314 for (var n = a.getAngleFromPoint(i, { 3315 x: t, 3316 y: e 3317 }), o = n.angle, r = n.distance, l = i.startAngle, s = i.endAngle; l > s;)s += 2 * Math.PI; 3318 for (; o > s;)o -= 2 * Math.PI; 3319 for (; l > o;)o += 2 * Math.PI; 3320 var d = o >= l && s >= o, u = r >= i.innerRadius && r <= i.outerRadius; 3321 return d && u 3322 } 3323 return !1 3324 }, tooltipPosition: function () { 3325 var t = this._view, e = t.startAngle + (t.endAngle - t.startAngle) / 2, a = (t.outerRadius - t.innerRadius) / 2 + t.innerRadius; 3326 return {x: t.x + Math.cos(e) * a, y: t.y + Math.sin(e) * a} 3327 }, draw: function () { 3328 var t = this._chart.ctx, e = this._view, a = e.startAngle, i = e.endAngle; 3329 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() 3330 } 3331 }) 3332 } 3333 }, {}], 35: [function (t, e, a) { 3334 "use strict"; 3335 e.exports = function (t) { 3336 var e = t.helpers, a = t.defaults.global; 3337 t.defaults.global.elements.line = { 3338 tension: .4, 3339 backgroundColor: a.defaultColor, 3340 borderWidth: 3, 3341 borderColor: a.defaultColor, 3342 borderCapStyle: "butt", 3343 borderDash: [], 3344 borderDashOffset: 0, 3345 borderJoinStyle: "miter", 3346 fill: !0 3347 }, t.elements.Line = t.Element.extend({ 3348 lineToNextPoint: function (t, e, a, i, n) { 3349 var o = this, r = o._chart.ctx, l = o._view ? o._view.spanGaps : !1; 3350 e._view.skip && !l ? i.call(o, t, e, a) : t._view.skip && !l ? n.call(o, t, e, a) : 0 === e._view.tension ? r.lineTo(e._view.x, e._view.y) : r.bezierCurveTo(t._view.controlPointNextX, t._view.controlPointNextY, e._view.controlPointPreviousX, e._view.controlPointPreviousY, e._view.x, e._view.y) 3351 }, draw: function () { 3352 function t(t) { 3353 r._view.skip || l._view.skip ? t && o.lineTo(i._view.scaleZero.x, i._view.scaleZero.y) : o.bezierCurveTo(l._view.controlPointNextX, l._view.controlPointNextY, r._view.controlPointPreviousX, r._view.controlPointPreviousY, r._view.x, r._view.y) 3354 } 3355 3356 var i = this, n = i._view, o = i._chart.ctx, r = i._children[0], l = i._children[i._children.length - 1]; 3357 o.save(), i._children.length > 0 && n.fill && (o.beginPath(), e.each(i._children, function (t, a) { 3358 var r = e.previousItem(i._children, a), l = e.nextItem(i._children, a); 3359 0 === a ? (i._loop ? o.moveTo(n.scaleZero.x, n.scaleZero.y) : o.moveTo(t._view.x, n.scaleZero), t._view.skip ? i._loop || o.moveTo(l._view.x, i._view.scaleZero) : o.lineTo(t._view.x, t._view.y)) : i.lineToNextPoint(r, t, l, function (t, e, a) { 3360 i._loop ? o.lineTo(i._view.scaleZero.x, i._view.scaleZero.y) : (o.lineTo(t._view.x, i._view.scaleZero), o.moveTo(a._view.x, i._view.scaleZero)) 3361 }, function (t, e) { 3362 o.lineTo(e._view.x, e._view.y) 3363 }) 3364 }, i), i._loop ? t(!0) : (o.lineTo(i._children[i._children.length - 1]._view.x, n.scaleZero), o.lineTo(i._children[0]._view.x, n.scaleZero)), o.fillStyle = n.backgroundColor || a.defaultColor, o.closePath(), o.fill()); 3365 var s = a.elements.line; 3366 o.lineCap = n.borderCapStyle || s.borderCapStyle, o.setLineDash && o.setLineDash(n.borderDash || s.borderDash), o.lineDashOffset = n.borderDashOffset || s.borderDashOffset, o.lineJoin = n.borderJoinStyle || s.borderJoinStyle, o.lineWidth = n.borderWidth || s.borderWidth, o.strokeStyle = n.borderColor || a.defaultColor, o.beginPath(), e.each(i._children, function (t, a) { 3367 var n = e.previousItem(i._children, a), r = e.nextItem(i._children, a); 3368 0 === a ? o.moveTo(t._view.x, t._view.y) : i.lineToNextPoint(n, t, r, function (t, e, a) { 3369 o.moveTo(a._view.x, a._view.y) 3370 }, function (t, e) { 3371 o.moveTo(e._view.x, e._view.y) 3372 }) 3373 }, i), i._loop && i._children.length >
3373 0 && t(), o.stroke(), o.restore() 3374 } 3375 }) 3376 } 3377 }, {}], 36: [function (t, e, a) { 3378 "use strict"; 3379 e.exports = function (t) { 3380 var e = t.helpers, a = t.defaults.global, i = a.defaultColor; 3381 a.elements.point = { 3382 radius: 3, 3383 pointStyle: "circle", 3384 backgroundColor: i, 3385 borderWidth: 1, 3386 borderColor: i, 3387 hitRadius: 1, 3388 hoverRadius: 4, 3389 hoverBorderWidth: 1 3390 }, t.elements.Point = t.Element.extend({ 3391 inRange: function (t, e) { 3392 var a = this._view; 3393 return a ? Math.pow(t - a.x, 2) + Math.pow(e - a.y, 2) < Math.pow(a.hitRadius + a.radius, 2) : !1 3394 }, inLabelRange: function (t) { 3395 var e = this._view; 3396 return e ? Math.pow(t - e.x, 2) < Math.pow(e.radius + e.hitRadius, 2) : !1 3397 }, tooltipPosition: function () { 3398 var t = this._view; 3399 return {x: t.x, y: t.y, padding: t.radius + t.borderWidth} 3400 }, draw: function () { 3401 var t, n, o, r, l, s, d = this._view, u = this._chart.ctx, c = d.pointStyle, h = d.radius, f = d.x, g = d.y; 3402 if (!d.skip) { 3403 if ("object" == typeof c && (t = c.toString(), "[object HTMLImageElement]" === t || "[object HTMLCanvasElement]" === t))return void u.drawImage(c, f - c.width / 2, g - c.height / 2); 3404 if (!(isNaN(h) || 0 >= h)) { 3405 switch (u.strokeStyle = d.borderColor || i, u.lineWidth = e.getValueOrDefault(d.borderWidth, a.elements.point.borderWidth), u.fillStyle = d.backgroundColor || i, c) { 3406 default: 3407 u.beginPath(), u.arc(f, g, h, 0, 2 * Math.PI), u.closePath(), u.fill(); 3408 break; 3409 case"triangle": 3410 u.beginPath(), n = 3 * h / Math.sqrt(3), l = n * Math.sqrt(3) / 2, u.moveTo(f - n / 2, g + l / 3), u.lineTo(f + n / 2, g + l / 3), u.lineTo(f, g - 2 * l / 3), u.closePath(), u.fill(); 3411 break; 3412 case"rect": 3413 s = 1 / Math.SQRT2 * h, u.fillRect(f - s, g - s, 2 * s, 2 * s), u.strokeRect(f - s, g - s, 2 * s, 2 * s); 3414 break; 3415 case"rectRot": 3416 s = 1 / Math.SQRT2 * h, u.beginPath(), u.moveTo(f - s, g), u.lineTo(f, g + s), u.lineTo(f + s, g), u.lineTo(f, g - s), u.closePath(), u.fill(); 3417 break; 3418 case"cross": 3419 u.beginPath(), u.moveTo(f, g + h), u.lineTo(f, g - h), u.moveTo(f - h, g), u.lineTo(f + h, g), u.closePath(); 3420 break; 3421 case"crossRot": 3422 u.beginPath(), o = Math.cos(Math.PI / 4) * h, r = Math.sin(Math.PI / 4) * h, u.moveTo(f - o, g - r), u.lineTo(f + o, g + r), u.moveTo(f - o, g + r), u.lineTo(f + o, g - r), u.closePath(); 3423 break; 3424 case"star": 3425 u.beginPath(), u.moveTo(f, g + h), u.lineTo(f, g - h), u.moveTo(f - h, g), u.lineTo(f + h, g), o = Math.cos(Math.PI / 4) * h, r = Math.sin(Math.PI / 4) * h, u.moveTo(f - o, g - r), u.lineTo(f + o, g + r), u.moveTo(f - o, g + r), u.lineTo(f + o, g - r), u.closePath(); 3426 break; 3427 case"line": 3428 u.beginPath(), u.moveTo(f - h, g), u.lineTo(f + h, g), u.closePath(); 3429 break; 3430 case"dash": 3431 u.beginPath(), u.moveTo(f, g), u.lineTo(f + h, g), u.closePath() 3432 } 3433 u.stroke() 3434 } 3435 } 3436 } 3437 }) 3438 } 3439 }, {}], 37: [function (t, e, a) { 3440 "use strict"; 3441 e.exports = function (t) { 3442 var e = (t.helpers, t.defaults.global); 3443 e.elements.rectangle = { 3444 backgroundColor: e.defaultColor, 3445 borderWidth: 0, 3446 borderColor: e.defaultColor, 3447 borderSkipped: "bottom" 3448 }, t.elements.Rectangle = t.Element.extend({ 3449 draw: function () { 3450 function t(t) { 3451 return s[(u + t) % 4] 3452 } 3453 3454 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; 3455 a.borderWidth && (n += l, o -= l, r += l), e.beginPath(), e.fillStyle = a.backgroundColor, e.strokeStyle = a.borderColor, e.lineWidth = a.borderWidth; 3456 var s = [[n, a.base], [n, r], [o, r], [o, a.base]], d = ["bottom", "left", "top", "right"], u = d.indexOf(a.borderSkipped, 0); 3457 -1 === u && (u = 0), e.moveTo.apply(e, t(0)); 3458 for (var c = 1; 4 > c; c++)e.lineTo.apply(e, t(c)); 3459 e.fill(), a.borderWidth && e.stroke() 3460 }, height: function () { 3461 var t = this._view; 3462 return t.base - t.y 3463 }, inRange: function (t, e) { 3464 var a = this._view; 3465 return a ? a.y < a.base ? t >= a.x - a.width / 2 && t <= a.x + a.width / 2 && e >= a.y && e <= a.base : t >= a.x - a.width / 2 && t <= a.x + a.width / 2 && e >= a.base && e <= a.y : !1 3466 }, inLabelRange: function (t) { 3467 var e = this._view; 3468 return e ? t >= e.x - e.width / 2 && t <= e.x + e.width / 2 : !1 3469 }, tooltipPosition: function () { 3470 var t = this._view; 3471 return {x: t.x, y: t.y} 3472 } 3473 }) 3474 } 3475 }, {}], 38: [function (t, e, a) { 3476 "use strict"; 3477 e.exports = function (t) { 3478 var e = t.helpers, a = {position: "bottom"}, i = t.Scale.extend({ 3479 determineDataLimits: function () { 3480 var t = this; 3481 t.minIndex = 0, t.maxIndex = t.chart.data.labels.length - 1; 3482 var a; 3483 void 0 !== t.options.ticks.min && (a = e.indexOf(t.chart.data.labels, t.options.ticks.min), t.minIndex = -1 !== a ? a : t.minIndex), void 0 !== t.options.ticks.max && (a = e.indexOf(t.chart.data.labels, t.options.ticks.max), t.maxIndex = -1 !== a ? a : t.maxIndex), t.min = t.chart.data.labels[t.minIndex], t.max = t.chart.data.labels[t.maxIndex] 3484 }, buildTicks: function (t) { 3485 var e = this; 3486 e.ticks = 0 === e.minIndex && e.maxIndex === e.chart.data.labels.length - 1 ? e.chart.data.labels : e.chart.data.labels.slice(e.minIndex, e.maxIndex + 1) 3487 }, getLabelForIndex: function (t, e) { 3488 return this.ticks[t] 3489 }, getPixelForValue: function (t, e, a, i) { 3490 var n = this, o = Math.max(n.maxIndex + 1 - n.minIndex - (n.options.gridLines.offsetGridLines ? 0 : 1), 1); 3491 if (n.isHorizontal()) { 3492 var r = n.width - (n.paddingLeft + n.paddingRight), l = r / o, s = l * (e - n.minIndex) + n.paddingLeft; 3493 return n.options.gridLines.offsetGridLines && i && (s += l / 2), n.left + Math.round(s) 3494 } 3495 var d = n.height - (n.paddingTop + n.paddingBottom), u = d / o, c = u * (e - n.minIndex) + n.paddingTop; 3496 return n.options.gridLines.offsetGridLines && i && (c += u / 2), n.top + Math.round(c) 3497 }, getPixelForTick: function (t, e) { 3498 return this.getPixelForValue(this.ticks[t], t + this.minIndex, null, e) 3499 }, getValueForPixel: function (t) { 3500 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; 3501 return a.options.gridLines.offsetGridLines && (t -= r / 2), t -= n ? a.paddingLeft : a.paddingTop, e = 0 >= t ? 0 : Math.round(t / r) 3502 } 3503 }); 3504 t.scaleService.registerScaleType("category", i, a) 3505 } 3506 }, {}], 39: [function (t, e, a) { 3507 "use strict"; 3508 e.exports = function (t) { 3509 var e = t.helpers, a = { 3510 position: "left", ticks: { 3511 callback: function (t, a, i) { 3512 var n = i.length > 3 ? i[2] - i[1] : i[1] - i[0]; 3513 Math.abs(n) > 1 && t !== Math.floor(t) && (n = t - Math.floor(t)); 3514 var o = e.log10(Math.abs(n)), r = ""; 3515 if (0 !== t) { 3516 var l = -1 * Math.floor(o); 3517 l = Math.max(Math.min(l, 20), 0), r = t.toFixed(l) 3518 } else r = "0"; 3519 return r 3520 } 3521 } 3522 }, i = t.LinearScaleBase.extend({ 3523 determineDataLimits: function () { 3524 function t(t) { 3525 return l ? t.xAxisID === a.id : t.yAxisID === a.id 3526 } 3527 3528 var a = this, i = a.options, n = (i.ticks, a.chart), o = n.data, r = o.datasets, l = a.isHorizontal(); 3529 if (a.min = null, a.max = null, i.stacked) { 3530 var s = {}, d = !1, u = !1; 3531 e.each(r, function (o, r) { 3532 var l = n.getDatasetMeta(r); 3533 void 0 === s[l.type] && (s[l.type] = {positiveValues: [], negativeValues: []}); 3534 var c = s[l.type].positiveValues, h = s[l.type].negativeValues; 3535 n.isDatasetVisible(r) && t(l) && e.each(o.data, function (t, e) { 3536 var n = +a.getRightValue(t); 3537 isNaN(n) || l.data[e].hidden || (c[e] = c[e] || 0, h[e] = h[e] || 0, i.relativePoints ? c[e] = 100 : 0 > n ? (u = !0, h[e] += n) : (d = !0, c[e] += n)) 3538 }) 3539 }), e.each(s, function (t) { 3540 var i = t.positiveValues.concat(t.negativeValues), n = e.min(i), o = e.max(i); 3541 a.min = null === a.min ? n : Math.min(a.min, n), a.max = null === a.max ? o : Math.max(a.max, o) 3542 }) 3543 } else e.each(r, function (i, o) { 3544 var r = n.getDatasetMeta(o); 3545 n.isDatasetVisible(o) && t(r) && e.each(i.data, function (t, e) { 3546 var i = +a.getRightValue(t); 3547 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)) 3548 }) 3549 }); 3550 this.handleTickRangeOptions() 3551 }, getTickLimit: function () { 3552 var a, i = this, n = i.options.ticks; 3553 if (i.isHorizontal())a = Math.min(n.maxTicksLimit ? n.maxTicksLimit : 11, Math.ceil(i.width / 50)); else { 3554 var o = e.getValueOrDefault(n.fontSize, t.defaults.global.defaultFontSize); 3555 a = Math.min(n.maxTicksLimit ? n.maxTicksLimit : 11, Math.ceil(i.height / (2 * o))) 3556 } 3557 return a 3558 }, handleDirectionalChanges: function () { 3559 this.isHorizontal() || this.ticks.reverse() 3560 }, getLabelForIndex: function (t, e) { 3561 return +this.getRightValue(this.chart.data.datasets[e].data[t]) 3562 }, getPixelForValue: function (t, e, a, i) { 3563 var n, o, r = this, l = r.paddingLeft, s = r.paddingBottom, d = r.start, u = +r.getRightValue(t), c = r.end - d; 3564 return r.isHorizontal() ? (o = r.width - (l + r.paddingRight), n = r.left + o / c * (u - d), Math.round(n + l)) : (o = r.height - (r.paddingTop + s), n = r.bottom - s - o / c * (u - d), Math.round(n)) 3565 }, getValueForPixel: function (t) { 3566 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; 3567 return e.start + (e.end - e.start) * r 3568 }, getPixelForTick: function (t, e) { 3569 return this.getPixelForValue(this.ticksAsNumbers[t], null, null, e) 3570 } 3571 }); 3572 t.scaleService.registerScaleType("linear", i, a) 3573 } 3574 }, {}], 40: [function (t, e, a) { 3575 "use strict"; 3576 e.exports = function (t) { 3577 var e = t.helpers, a = e.noop; 3578 t.LinearScaleBase = t.Scale.extend({ 3579 handleTickRangeOptions: function () { 3580 var t = this, a = t.options, i = a.ticks; 3581 if (i.beginAtZero) { 3582 var n = e.sign(t.min), o = e.sign(t.max); 3583 0 > n && 0 > o ? t.max = 0 : n > 0 && o > 0 && (t.min = 0) 3584 } 3585 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--) 3586 }, getTickLimit: a, handleDirectionalChanges: a, buildTicks: function () { 3587 var t = this, a = t.options, i = a.ticks, n = e.getValueOrDefault, o = (t.isHorizontal(), t.ticks = []), r = t.getTickLimit(); 3588 r = Math.max(2, r); 3589 var l, s = i.fixedStepSize && i.fixedStepSize > 0 || i.stepSize && i.stepSize > 0; 3590 if (s)l = n(i.fixedStepSize, i.stepSize); else { 3591 var d = e.niceNum(t.max - t.min, !1); 3592 l = e.niceNum(d / (r - 1), !0) 3593 } 3594 var u = Math.floor(t.min / l) * l, c = Math.ceil(t.max / l) * l, h = (c - u) / l; 3595 h = e.almostEquals(h, Math.round(h), l / 1e3) ? Math.round(h) : Math.ceil(h), o.push(void 0 !== i.min ? i.min : u); 3596 for (var f = 1; h > f; ++f)o.push(u + f * l); 3597 o.push(void 0 !== i.max ? i.max : c), t.handleDirectionalChanges(), t.max = e.max(o), t.min = e.min(o), i.reverse ? (o.reverse(), t.start = t.max, t.end = t.min) : (t.start = t.min, t.end = t.max) 3598 }, convertTicksToLabels: function () { 3599 var e = this; 3600 e.ticksAsNumbers = e.ticks.slice(), e.zeroLineIndex = e.ticks.indexOf(0), t.Scale.prototype.convertTicksToLabels.call(e) 3601 } 3602 }) 3603 } 3604 }, {}], 41: [function (t, e, a) { 3605 "use strict";
3605 3606 e.exports = function (t) { 3607 var e = t.helpers, a = { 3608 position: "left", ticks: { 3609 callback: function (t, a, i) { 3610 var n = t / Math.pow(10, Math.floor(e.log10(t))); 3611 return 1 === n || 2 === n || 5 === n || 0 === a || a === i.length - 1 ? t.toExponential() : "" 3612 } 3613 } 3614 }, i = t.Scale.extend({ 3615 determineDataLimits: function () { 3616 function t(t) { 3617 return d ? t.xAxisID === a.id : t.yAxisID === a.id 3618 } 3619 3620 var a = this, i = a.options, n = i.ticks, o = a.chart, r = o.data, l = r.datasets, s = e.getValueOrDefault, d = a.isHorizontal(); 3621 if (a.min = null, a.max = null, i.stacked) { 3622 var u = {}; 3623 e.each(l, function (n, r) { 3624 var l = o.getDatasetMeta(r); 3625 o.isDatasetVisible(r) && t(l) && (void 0 === u[l.type] && (u[l.type] = []), e.each(n.data, function (t, e) { 3626 var n = u[l.type], o = +a.getRightValue(t); 3627 isNaN(o) || l.data[e].hidden || (n[e] = n[e] || 0, i.relativePoints ? n[e] = 100 : n[e] += o) 3628 })) 3629 }), e.each(u, function (t) { 3630 var i = e.min(t), n = e.max(t); 3631 a.min = null === a.min ? i : Math.min(a.min, i), a.max = null === a.max ? n : Math.max(a.max, n) 3632 }) 3633 } else e.each(l, function (i, n) { 3634 var r = o.getDatasetMeta(n); 3635 o.isDatasetVisible(n) && t(r) && e.each(i.data, function (t, e) { 3636 var i = +a.getRightValue(t); 3637 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)) 3638 }) 3639 }); 3640 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)) 3641 }, buildTicks: function () { 3642 for (var t = this, a = t.options, i = a.ticks, n = e.getValueOrDefault, o = t.ticks = [], r = n(i.min, Math.pow(10, Math.floor(e.log10(t.min)))); r < t.max;) { 3643 o.push(r); 3644 var l = Math.floor(e.log10(r)), s = Math.floor(r / Math.pow(10, l)) + 1; 3645 10 === s && (s = 1, ++l), r = s * Math.pow(10, l) 3646 } 3647 var d = n(i.max, r); 3648 o.push(d), t.isHorizontal() || o.reverse(), t.max = e.max(o), t.min = e.min(o), i.reverse ? (o.reverse(), t.start = t.max, t.end = t.min) : (t.start = t.min, t.end = t.max) 3649 }, convertTicksToLabels: function () { 3650 this.tickValues = this.ticks.slice(), t.Scale.prototype.convertTicksToLabels.call(this) 3651 }, getLabelForIndex: function (t, e) { 3652 return +this.getRightValue(this.chart.data.datasets[e].data[t]) 3653 }, getPixelForTick: function (t, e) { 3654 return this.getPixelForValue(this.tickValues[t], null, null, e) 3655 }, getPixelForValue: function (t, a, i, n) { 3656 var o, r, l = this, s = l.start, d = +l.getRightValue(t), u = e.log10(l.end) - e.log10(s), c = l.paddingTop, h = l.paddingBottom, f = l.paddingLeft; 3657 return l.isHorizontal() ? 0 === d ? r = l.left + f : (o = l.width - (f + l.paddingRight), r = l.left + o / u * (e.log10(d) - e.log10(s)), r += f) : 0 === d ? r = l.top + c : (o = l.height - (c + h), r = l.bottom - h - o / u * (e.log10(d) - e.log10(s))), r 3658 }, getValueForPixel: function (t) { 3659 var a, i, n = this, o = e.log10(n.end) - e.log10(n.start); 3660 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 3661 } 3662 }); 3663 t.scaleService.registerScaleType("logarithmic", i, a) 3664 } 3665 }, {}], 42: [function (t, e, a) { 3666 "use strict"; 3667 e.exports = function (t) { 3668 var e = t.helpers, a = t.defaults.global, i = { 3669 display: !0, 3670 animate: !0, 3671 lineArc: !1, 3672 position: "chartArea", 3673 angleLines: {display: !0, color: "rgba(0, 0, 0, 0.1)", lineWidth: 1}, 3674 ticks: { 3675 showLabelBackdrop: !0, 3676 backdropColor: "rgba(255,255,255,0.75)", 3677 backdropPaddingY: 2, 3678 backdropPaddingX: 2 3679 }, 3680 pointLabels: { 3681 fontSize: 10, callback: function (t) { 3682 return t 3683 } 3684 } 3685 }, n = t.LinearScaleBase.extend({ 3686 getValueCount: function () { 3687 return this.chart.data.labels.length 3688 }, setDimensions: function () { 3689 var t = this, i = t.options, n = i.ticks; 3690 t.width = t.maxWidth, t.height = t.maxHeight, t.xCenter = Math.round(t.width / 2), t.yCenter = Math.round(t.height / 2); 3691 var o = e.min([t.height, t.width]), r = e.getValueOrDefault(n.fontSize, a.defaultFontSize); 3692 t.drawingArea = i.display ? o / 2 - (r / 2 + n.backdropPaddingY) : o / 2 3693 }, determineDataLimits: function () { 3694 var t = this, a = t.chart; 3695 t.min = null, t.max = null, e.each(a.data.datasets, function (i, n) { 3696 if (a.isDatasetVisible(n)) { 3697 var o = a.getDatasetMeta(n); 3698 e.each(i.data, function (e, a) { 3699 var i = +t.getRightValue(e); 3700 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)) 3701 }) 3702 } 3703 }), t.handleTickRangeOptions() 3704 }, getTickLimit: function () { 3705 var t = this.options.ticks, i = e.getValueOrDefault(t.fontSize, a.defaultFontSize); 3706 return Math.min(t.maxTicksLimit ? t.maxTicksLimit : 11, Math.ceil(this.drawingArea / (1.5 * i))) 3707 }, convertTicksToLabels: function () { 3708 var e = this; 3709 t.LinearScaleBase.prototype.convertTicksToLabels.call(e), e.pointLabels = e.chart.data.labels.map(e.options.pointLabels.callback, e) 3710 }, getLabelForIndex: function (t, e) { 3711 return +this.getRightValue(this.chart.data.datasets[e].data[t]) 3712 }, fit: function () { 3713 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; 3714 for (this.ctx.font = v, i = 0; i < this.getValueCount(); i++)t = this.getPointPosition(i, x), n = this.ctx.measureText(this.pointLabels[i] ? this.pointLabels[i] : "").width + 5, 0 === i || i === this.getValueCount() / 2 ? (o = n / 2, t.x + o > y && (y = t.x + o, r = i), t.x - o < k && (k = t.x - o, s = i)) : i < this.getValueCount() / 2 ? t.x + n >
3714 y && (y = t.x + n, r = i) : i > this.getValueCount() / 2 && t.x - n < k && (k = t.x - n, s = i); 3715 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) 3716 }, setCenterPoint: function (t, e) { 3717 var a = this, i = a.width - e - a.drawingArea, n = t + a.drawingArea; 3718 a.xCenter = Math.round((n + i) / 2 + a.left), a.yCenter = Math.round(a.height / 2 + a.top) 3719 }, getIndexAngle: function (t) { 3720 var e = 2 * Math.PI / this.getValueCount(); 3721 return t * e - Math.PI / 2 3722 }, getDistanceFromCenterForValue: function (t) { 3723 var e = this; 3724 if (null === t)return 0; 3725 var a = e.drawingArea / (e.max - e.min); 3726 return e.options.reverse ? (e.max - t) * a : (t - e.min) * a 3727 }, getPointPosition: function (t, e) { 3728 var a = this, i = a.getIndexAngle(t); 3729 return {x: Math.round(Math.cos(i) * e) + a.xCenter, y: Math.round(Math.sin(i) * e) + a.yCenter} 3730 }, getPointPositionForValue: function (t, e) { 3731 return this.getPointPosition(t, this.getDistanceFromCenterForValue(e)) 3732 }, getBasePosition: function () { 3733 var t = this, e = t.min, a = t.max; 3734 return t.getPointPositionForValue(0, t.beginAtZero ? 0 : 0 > e && 0 > a ? a : e > 0 && a > 0 ? e : 0) 3735 }, draw: function () { 3736 var t = this, i = t.options, n = i.gridLines, o = i.ticks, r = i.angleLines, l = i.pointLabels, s = e.getValueOrDefault; 3737 if (i.display) { 3738 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); 3739 if (e.each(t.ticks, function (r, l) { 3740 if (l > 0 || i.reverse) { 3741 var c = t.getDistanceFromCenterForValue(t.ticksAsNumbers[l]), h = t.yCenter - c; 3742 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 { 3743 d.beginPath(); 3744 for (var g = 0; g < t.getValueCount(); g++) { 3745 var p = t.getPointPosition(g, c); 3746 0 === g ? d.moveTo(p.x, p.y) : d.lineTo(p.x, p.y) 3747 } 3748 d.closePath(), d.stroke() 3749 } 3750 if (o.display) { 3751 var m = s(o.fontColor, a.defaultFontColor); 3752 if (d.font = f, o.showLabelBackdrop) { 3753 var b = d.measureText(r).width; 3754 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) 3755 } 3756 d.textAlign = "center", d.textBaseline = "middle", d.fillStyle = m, d.fillText(r, t.xCenter, h) 3757 } 3758 } 3759 }), !i.lineArc) { 3760 d.lineWidth = r.lineWidth, d.strokeStyle = r.color; 3761 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--) { 3762 if (r.display) { 3763 var y = t.getPointPosition(x, g); 3764 d.beginPath(), d.moveTo(t.xCenter, t.yCenter), d.lineTo(y.x, y.y), d.stroke(), d.closePath() 3765 } 3766 var k = t.getPointPosition(x, g + 5), S = s(l.fontColor, a.defaultFontColor); 3767 d.font = v, d.fillStyle = S; 3768 var w = t.pointLabels, C = w.length, M = w.length / 2, D = M / 2, A = D > x || x > C - D, I = x === D || x === C - D; 3769 0 === x ? d.textAlign = "center" : x === M ? d.textAlign = "center" : M > x ? d.textAlign = "left" : d.textAlign = "right", I ? d.textBaseline = "middle" : A ? d.textBaseline = "bottom" : d.textBaseline = "top", d.fillText(w[x] ? w[x] : "", k.x, k.y) 3770 } 3771 } 3772 } 3773 } 3774 }); 3775 t.scaleService.registerScaleType("radialLinear", n, i) 3776 } 3777 }, {}], 43: [function (t, e, a) { 3778 "use strict"; 3779 var i = t(1); 3780 i = "function" == typeof i ? i : window.moment, e.exports = function (t) { 3781 var e = t.helpers, a = { 3782 units: [{ 3783 name: "millisecond", 3784 steps: [1, 2, 5, 10, 20, 50, 100, 250, 500] 3785 }, {name: "second", steps: [1, 2, 5, 10, 30]}, { 3786 name: "minute", 3787 steps: [1, 2, 5, 10, 30] 3788 }, {name: "hour", steps: [1, 2, 3, 6, 12]}, {name: "day", steps: [1, 2, 5]}, {
3789 name: "week", 3790 maxStep: 4 3791 }, {name: "month", maxStep: 3}, {name: "quarter", maxStep: 4}, {name: "year", maxStep: !1}] 3792 }, n = { 3793 position: "bottom", 3794 time: { 3795 parser: !1, 3796 format: !1, 3797 unit: !1, 3798 round: !1, 3799 displayFormat: !1, 3800 isoWeekday: !1, 3801 displayFormats: { 3802 millisecond: "h:mm:ss.SSS a", 3803 second: "h:mm:ss a", 3804 minute: "h:mm:ss a", 3805 hour: "MMM D, hA", 3806 day: "ll", 3807 week: "ll", 3808 month: "MMM YYYY", 3809 quarter: "[Q]Q - YYYY", 3810 year: "YYYY" 3811 } 3812 }, 3813 ticks: {autoSkip: !1} 3814 }, o = t.Scale.extend({ 3815 initialize: function () { 3816 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"); 3817 t.Scale.prototype.initialize.call(this) 3818 }, getLabelMoment: function (t, e) { 3819 return this.labelMoments[t][e] 3820 }, getMomentStartOf: function (t) { 3821 var e = this; 3822 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) 3823 }, determineDataLimits: function () { 3824 var t = this; 3825 t.labelMoments = []; 3826 var a = []; 3827 t.chart.data.labels && t.chart.data.labels.length > 0 ? (e.each(t.chart.data.labels, function (e, i) { 3828 var n = t.parseTime(e); 3829 n.isValid() && (t.options.time.round && n.startOf(t.options.time.round), a.push(n)) 3830 }, 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) { 3831 var r = [], l = t.chart.isDatasetVisible(o); 3832 "object" == typeof n.data[0] && null !== n.data[0] ? e.each(n.data, function (e, a) { 3833 var n = t.parseTime(t.getRightValue(e)); 3834 n.isValid() && (t.options.time.round && n.startOf(t.options.time.round), r.push(n), l && (t.firstTick = null !== t.firstTick ? i.min(t.firstTick, n) : n, t.lastTick = null !== t.lastTick ? i.max(t.lastTick, n) : n)) 3835 }, t) : r = a, t.labelMoments.push(r) 3836 }, 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() 3837 }, buildTicks: function (i) { 3838 var n = this; 3839 n.ctx.save(); 3840 var o = e.getValueOrDefault(n.options.ticks.fontSize, t.defaults.global.defaultFontSize), r = e.getValueOrDefault(n.options.ticks.fontStyle, t.defaults.global.defaultFontStyle), l = e.getValueOrDefault(n.options.ticks.fontFamily, t.defaults.global.defaultFontFamily), s = e.fontString(o, r, l); 3841 if (n.ctx.font = s, n.ticks = [], n.unitScale = 1, n.scaleSizeInUnits = 0, n.options.time.unit)n.tickUnit = n.options.time.unit || "day", n.displayFormat = n.options.time.displayFormats[n.tickUnit], n.scaleSizeInUnits = n.lastTick.diff(n.firstTick, n.tickUnit, !0), n.unitScale = e.getValueOrDefault(n.options.time.unitStepSize, 1); else { 3842 var d = n.isHorizontal() ? n.width - (n.paddingLeft + n.paddingRight) : n.height - (n.paddingTop + n.paddingBottom), u = n.tickFormatFunction(n.firstTick, 0, []), c = n.ctx.measureText(u).width, h = Math.cos(e.toRadians(n.options.ticks.maxRotation)), f = Math.sin(e.toRadians(n.options.ticks.maxRotation)); 3843 c = c * h + o * f; 3844 var g = d / c; 3845 n.tickUnit = "millisecond", n.scaleSizeInUnits = n.lastTick.diff(n.firstTick, n.tickUnit, !0), n.displayFormat = n.options.time.displayFormats[n.tickUnit]; 3846 for (var p = 0, m = a.units[p]; p < a.units.length;) { 3847 if (n.unitScale = 1, e.isArray(m.steps) && Math.ceil(n.scaleSizeInUnits / g) < e.max(m.steps)) { 3848 for (var b = 0; b < m.steps.length; ++b)if (m.steps[b] >= Math.ceil(n.scaleSizeInUnits / g)) { 3849 n.unitScale = e.getValueOrDefault(n.options.time.unitStepSize, m.steps[b]); 3850 break 3851 } 3852 break 3853 } 3854 if (m.maxStep === !1 || Math.ceil(n.scaleSizeInUnits / g) < m.maxStep) { 3855 n.unitScale = e.getValueOrDefault(n.options.time.unitStepSize, Math.ceil(n.scaleSizeInUnits / g)); 3856 break 3857 } 3858 ++p, m = a.units[p], n.tickUnit = m.name; 3859 var v = n.firstTick.diff(n.getMomentStartOf(n.firstTick), n.tickUnit, !0), x = n.getMomentStartOf(n.lastTick.clone().add(1, n.tickUnit)).diff(n.lastTick, n.tickUnit, !0); 3860 n.scaleSizeInUnits = n.lastTick.diff(n.firstTick, n.tickUnit, !0) + v + x, n.displayFormat = n.options.time.displayFormats[m.name] 3861 } 3862 } 3863 var y; 3864 if (n.options.time.min ? y = n.getMomentStartOf(n.firstTick) : (n.firstTick = n.getMomentStartOf(n.firstTick), y = n.firstTick), !n.options.time.max) { 3865 var k = n.getMomentStartOf(n.lastTick); 3866 0 !== k.diff(n.lastTick, n.tickUnit, !0) && (n.lastTick = n.getMomentStartOf(n.lastTick.add(1, n.tickUnit))) 3867 } 3868 n.smallestLabelSeparation = n.width, e.each(n.chart.data.datasets, function (t, e) { 3869 for (var a = 1; a < n.labelMoments[e].length; a++)n.smallestLabelSeparation = Math.min(n.smallestLabelSeparation, n.labelMoments[e][a].diff(n.labelMoments[e][a - 1], n.tickUnit, !0)) 3870 }, n), n.options.time.displayFormat && (n.displayFormat = n.options.time.displayFormat), n.ticks.push(n.firstTick.clone()); 3871 for (var S = 1; S <= n.scaleSizeInUnits; ++S) { 3872 var w = y.clone().add(S, n.tickUnit); 3873 if (n.options.time.max && w.diff(n.lastTick, n.tickUnit, !0) >= 0)break; 3874 S % n.unitScale === 0 && n.ticks.push(w) 3875 } 3876 var C = n.ticks[n.ticks.length - 1].diff(n.lastTick, n.tickUnit); 3877 (0 !== C || 0 === n.scaleSizeInUnits) && (n.options.time.max ? (n.ticks.push(n.lastTick.clone()), n.scaleSizeInUnits = n.lastTick.diff(n.ticks[0], n.tickUnit, !0)) : (n.ticks.push(n.lastTick.clone()), n.scaleSizeInUnits = n.lastTick.diff(n.firstTick, n.tickUnit, !0))), n.ctx.restore(
3877) 3878 }, getLabelForIndex: function (t, e) { 3879 var a = this, i = a.chart.data.labels && t < a.chart.data.labels.length ? a.chart.data.labels[t] : ""; 3880 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 3881 }, tickFormatFunction: function (t, a, i) { 3882 var n = t.format(this.displayFormat), o = this.options.ticks, r = e.getValueOrDefault(o.callback, o.userCallback); 3883 return r ? r(n, a, i) : n 3884 }, convertTicksToLabels: function () { 3885 var t = this; 3886 t.tickMoments = t.ticks, t.ticks = t.ticks.map(t.tickFormatFunction, t) 3887 }, getPixelForValue: function (t, e, a, i) { 3888 var n = this, o = t && t.isValid && t.isValid() ? t : n.getLabelMoment(a, e); 3889 if (o) { 3890 var r = o.diff(n.firstTick, n.tickUnit, !0), l = r / n.scaleSizeInUnits; 3891 if (n.isHorizontal()) { 3892 var s = n.width - (n.paddingLeft + n.paddingRight), d = (s / Math.max(n.ticks.length - 1, 1), s * l + n.paddingLeft); 3893 return n.left + Math.round(d) 3894 } 3895 var u = n.height - (n.paddingTop + n.paddingBottom), c = (u / Math.max(n.ticks.length - 1, 1), u * l + n.paddingTop); 3896 return n.top + Math.round(c) 3897 } 3898 }, getPixelForTick: function (t, e) { 3899 return this.getPixelForValue(this.tickMoments[t], null, null, e) 3900 }, getValueForPixel: function (t) { 3901 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; 3902 return n *= e.scaleSizeInUnits, e.firstTick.clone().add(i.duration(n, e.tickUnit).asSeconds(), "seconds") 3903 }, parseTime: function (t) { 3904 var e = this; 3905 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) 3906 } 3907 }); 3908 t.scaleService.registerScaleType("time", o, n) 3909 } 3910 }, {1: 1}] 3911 }, {}, [7])(7) 3912});
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.