"use strict";
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
/*!
* Chart.js
* http://chartjs.org/
* Version: 2.7.2
*
* Copyright 2018 Chart.js Contributors
* Released under the MIT license
* https://github.com/chartjs/Chart.js/blob/master/LICENSE.md
* triglav.rs
*/
!function (t) {
if ("object" == (typeof exports === "undefined" ? "undefined" : _typeof(exports)) && "undefined" != typeof module) module.exports = t();else if ("function" == typeof define && define.amd) define([], t);else {
("undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this).Chart = t();
}
}(function () {
return function t(e, i, n) {
function a(r, s) {
if (!i[r]) {
if (!e[r]) {
var l = "function" == typeof require && require;if (!s && l) return l(r, !0);if (o) return o(r, !0);var u = new Error("Cannot find module '" + r + "'");throw u.code = "MODULE_NOT_FOUND", u;
}var d = i[r] = { exports: {} };e[r][0].call(d.exports, function (t) {
var i = e[r][1][t];return a(i || t);
}, d, d.exports, t, e, i, n);
}return i[r].exports;
}for (var o = "function" == typeof require && require, r = 0; r < n.length; r++) {
a(n[r]);
}return a;
}({ 1: [function (t, e, i) {}, {}], 2: [function (t, e, i) {
var n = t(6);function a(t) {
if (t) {
var e = [0, 0, 0],
i = 1,
a = t.match(/^#([a-fA-F0-9]{3})$/i);if (a) {
a = a[1];for (var o = 0; o < e.length; o++) {
e[o] = parseInt(a[o] + a[o], 16);
}
} else if (a = t.match(/^#([a-fA-F0-9]{6})$/i)) {
a = a[1];for (o = 0; o < e.length; o++) {
e[o] = parseInt(a.slice(2 * o, 2 * o + 2), 16);
}
} else if (a = t.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)) {
for (o = 0; o < e.length; o++) {
e[o] = parseInt(a[o + 1]);
}i = parseFloat(a[4]);
} else if (a = t.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)) {
for (o = 0; o < e.length; o++) {
e[o] = Math.round(2.55 * parseFloat(a[o + 1]));
}i = parseFloat(a[4]);
} else if (a = t.match(/(\w+)/)) {
if ("transparent" == a[1]) return [0, 0, 0, 0];if (!(e = n[a[1]])) return;
}for (o = 0; o < e.length; o++) {
e[o] = d(e[o], 0, 255);
}return i = i || 0 == i ? d(i, 0, 1) : 1, e[3] = i, e;
}
}function o(t) {
if (t) {
var e = t.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if (e) {
var i = parseFloat(e[4]);return [d(parseInt(e[1]), 0, 360), d(parseFloat(e[2]), 0, 100), d(parseFloat(e[3]), 0, 100), d(isNaN(i) ? 1 : i, 0, 1)];
}
}
}function r(t) {
if (t) {
var e = t.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if (e) {
var i = parseFloat(e[4]);return [d(parseInt(e[1]), 0, 360), d(parseFloat(e[2]), 0, 100), d(parseFloat(e[3]), 0, 100), d(isNaN(i) ? 1 : i, 0, 1)];
}
}
}function s(t, e) {
return void 0 === e && (e = void 0 !== t[3] ? t[3] : 1), "rgba(" + t[0] + ", " + t[1] + ", " + t[2] + ", " + e + ")";
}function l(t, e) {
return "rgba(" + Math.round(t[0] / 255 * 100) + "%, " + Math.round(t[1] / 255 * 100) + "%, " + Math.round(t[2] / 255 * 100) + "%, " + (e || t[3] || 1) + ")";
}function u(t, e) {
return void 0 === e && (e = void 0 !== t[3] ? t[3] : 1), "hsla(" + t[0] + ", " + t[1] + "%, " + t[2] + "%, " + e + ")";
}function d(t, e, i) {
return Math.min(Math.max(e, t), i);
}function c(t) {
var e = t.toString(16).toUpperCase();return e.length < 2 ? "0" + e : e;
}e.exports = { getRgba: a, getHsla: o, getRgb: function getRgb(t) {
var e = a(t);return e && e.slice(0, 3);
}, getHsl: function getHsl(t) {
var e = o(t);return e && e.slice(0, 3);
}, getHwb: r, getAlpha: function getAlpha(t) {
var e = a(t);{
if (e) return e[3];if (e = o(t)) return e[3];if (e = r(t)) return e[3];
}
}, hexString: function hexString(t) {
return "#" + c(t[0]) + c(t[1]) + c(t[2]);
}, rgbString: function rgbString(t, e) {
if (e < 1 || t[3] && t[3] < 1) return s(t, e);return "rgb(" + t[0] + ", " + t[1] + ", " + t[2] + ")";
}, rgbaString: s, percentString: function percentString(t, e) {
if (e < 1 || t[3] && t[3] < 1) return l(t, e);var i = Math.round(t[0] / 255 * 100),
n = Math.round(t[1] / 255 * 100),
a = Math.round(t[2] / 255 * 100);return "rgb(" + i + "%, " + n + "%, " + a + "%)";
}, percentaString: l, hslString: function hslString(t, e) {
if (e < 1 || t[3] && t[3] < 1) return u(t, e);return "hsl(" + t[0] + ", " + t[1] + "%, " + t[2] + "%)";
}, hslaString: u, hwbString: function hwbString(t, e) {
void 0 === e && (e = void 0 !== t[3] ? t[3] : 1);return "hwb(" + t[0] + ", " + t[1] + "%, " + t[2] + "%" + (void 0 !== e && 1 !== e ? ", " + e : "") + ")";
}, keyword: function keyword(t) {
return h[t.slice(0, 3)];
} };var h = {};for (var f in n) {
h[n[f]] = f;
}
}, { 6: 6 }], 3: [function (t, e, i) {
var n = t(5),
a = t(2),
o = function o(t) {
return t instanceof o ? t : this instanceof o ? (this.valid = !1, this.values = { rgb: [0, 0, 0], hsl: [0, 0, 0], hsv: [0, 0, 0], hwb: [0, 0, 0], cmyk: [0, 0, 0, 0], alpha: 1 }, void ("string" == typeof t ? (e = a.getRgba(t)) ? this.setValues("rgb", e) : (e = a.getHsla(t)) ? this.setValues("hsl", e) : (e = a.getHwb(t)) && this.setValues("hwb", e) : "object" == (typeof t === "undefined" ? "undefined" : _typeof(t)) && (void 0 !== (e = t).r || void 0 !== e.red ? this.setValues("rgb", e) : void 0 !== e.l || void 0 !== e.lightness ? this.setValues("hsl", e) : void 0 !== e.v || void 0 !== e.value ? this.setValues("hsv", e) : void 0 !== e.w || void 0 !== e.whiteness ? this.setValues("hwb", e) : void 0 === e.c && void 0 === e.cyan || this.setValues("cmyk", e)))) : new o(t);var e;
};o.prototype = { isValid: function isValid() {
return this.valid;
}, rgb: function rgb() {
return this.setSpace("rgb", arguments);
}, hsl: function hsl() {
return this.setSpace("hsl", arguments);
}, hsv: function hsv() {
return this.setSpace("hsv", arguments);
}, hwb: function hwb() {
return this.setSpace("hwb", arguments);
}, cmyk: function cmyk() {
return this.setSpace("cmyk", arguments);
}, rgbArray: function rgbArray() {
return this.values.rgb;
}, hslArray: function hslArray() {
return this.values.hsl;
}, hsvArray: function hsvArray() {
return this.values.hsv;
}, hwbArray: function hwbArray() {
var t = this.values;return 1 !== t.alpha ? t.hwb.concat([t.alpha]) : t.hwb;
}, cmykArray: function cmykArray() {
return this.values.cmyk;
}, rgbaArray: function rgbaArray() {
var t = this.values;return t.rgb.concat([t.alpha]);
}, hslaArray: function hslaArray() {
var t = this.values;return t.hsl.concat([t.alpha]);
}, alpha: function alpha(t) {
return void 0 === t ? this.values.alpha : (this.setValues("alpha", t), this);
}, red: function red(t) {
return this.setChannel("rgb", 0, t);
}, green: function green(t) {
return this.setChannel("rgb", 1, t);
}, blue: function blue(t) {
return this.setChannel("rgb", 2, t);
}, hue: function hue(t) {
return t && (t = (t %= 360) < 0 ? 360 + t : t), this.setChannel("hsl", 0, t);
}, saturation: function saturation(t) {
return this.setChannel("hsl", 1, t);
}, lightness: function lightness(t) {
return this.setChannel("hsl", 2, t);
}, saturationv: function saturationv(t) {
return this.setChannel("hsv", 1, t);
}, whiteness: function whiteness(t) {
return this.setChannel("hwb", 1, t);
}, blackness: function blackness(t) {
return this.setChannel("hwb", 2, t);
}, value: function value(t) {
return this.setChannel("hsv", 2, t);
}, cyan: function cyan(t) {
return this.setChannel("cmyk", 0, t);
}, magenta: function magenta(t) {
return this.setChannel("cmyk", 1, t);
}, yellow: function yellow(t) {
return this.setChannel("cmyk", 2, t);
}, black: function black(t) {
return this.setChannel("cmyk", 3, t);
}, hexString: function hexString() {
return a.hexString(this.values.rgb);
}, rgbString: function rgbString() {
return a.rgbString(this.values.rgb, this.values.alpha);
}, rgbaString: function rgbaString() {
return a.rgbaString(this.values.rgb, this.values.alpha);
}, percentString: function percentString() {
return a.percentString(this.values.rgb, this.values.alpha);
}, hslString: function hslString() {
return a.hslString(this.values.hsl, this.values.alpha);
}, hslaString: function hslaString() {
return a.hslaString(this.values.hsl, this.values.alpha);
}, hwbString: function hwbString() {
return a.hwbString(this.values.hwb, this.values.alpha);
}, keyword: function keyword() {
return a.keyword(this.values.rgb, this.values.alpha);
}, rgbNumber: function rgbNumber() {
var t = this.values.rgb;return t[0] << 16 | t[1] << 8 | t[2];
}, luminosity: function luminosity() {
for (var t = this.values.rgb, e = [], i = 0; i < t.length; i++) {
var n = t[i] / 255;e[i] = n <= .03928 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4);
}return .2126 * e[0] + .7152 * e[1] + .0722 * e[2];
}, contrast: function contrast(t) {
var e = this.luminosity(),
i = t.luminosity();return e > i ? (e + .05) / (i + .05) : (i + .05) / (e + .05);
}, level: function level(t) {
var e = this.contrast(t);return e >= 7.1 ? "AAA" : e >= 4.5 ? "AA" : "";
}, dark: function dark() {
var t = this.values.rgb;return (299 * t[0] + 587 * t[1] + 114 * t[2]) / 1e3 < 128;
}, light: function light() {
return !this.dark();
}, negate: function negate() {
for (var t = [], e = 0; e < 3; e++) {
t[e] = 255 - this.values.rgb[e];
}return this.setValues("rgb", t), this;
}, lighten: function lighten(t) {
var e = this.values.hsl;return e[2] += e[2] * t, this.setValues("hsl", e), this;
}, darken: function darken(t) {
var e = this.values.hsl;return e[2] -= e[2] * t, this.setValues("hsl", e), this;
}, saturate: function saturate(t) {
var e = this.values.hsl;return e[1] += e[1] * t, this.setValues("hsl", e), this;
}, desaturate: function desaturate(t) {
var e = this.values.hsl;return e[1] -= e[1] * t, this.setValues("hsl", e), this;
}, whiten: function whiten(t) {
var e = this.values.hwb;return e[1] += e[1] * t, this.setValues("hwb", e), this;
}, blacken: function blacken(t) {
var e = this.values.hwb;return e[2] += e[2] * t, this.setValues("hwb", e), this;
}, greyscale: function greyscale() {
var t = this.values.rgb,
e = .3 * t[0] + .59 * t[1] + .11 * t[2];return this.setValues("rgb", [e, e, e]), this;
}, clearer: function clearer(t) {
var e = this.values.alpha;return this.setValues("alpha", e - e * t), this;
}, opaquer: function opaquer(t) {
var e = this.values.alpha;return this.setValues("alpha", e + e * t), this;
}, rotate: function rotate(t) {
var e = this.values.hsl,
i = (e[0] + t) % 360;return e[0] = i < 0 ? 360 + i : i, this.setValues("hsl", e), this;
}, mix: function mix(t, e) {
var i = this,
n = t,
a = void 0 === e ? .5 : e,
o = 2 * a - 1,
r = i.alpha() - n.alpha(),
s = ((o * r == -1 ? o : (o + r) / (1 + o * r)) + 1) / 2,
l = 1 - s;return this.rgb(s * i.red() + l * n.red(), s * i.green() + l * n.green(), s * i.blue() + l * n.blue()).alpha(i.alpha() * a + n.alpha() * (1 - a));
}, toJSON: function toJSON() {
return this.rgb();
}, clone: function clone() {
var t,
e,
i = new o(),
n = this.values,
a = i.values;for (var r in n) {
n.hasOwnProperty(r) && (t = n[r], "[object Array]" === (e = {}.toString.call(t)) ? a[r] = t.slice(0) : "[object Number]" === e ? a[r] = t : console.error("unexpected color value:", t));
}return i;
} }, o.prototype.spaces = { rgb: ["red", "green", "blue"], hsl: ["hue", "saturation", "lightness"], hsv: ["hue", "saturation", "value"], hwb: ["hue", "whiteness", "blackness"], cmyk: ["cyan", "magenta", "yellow", "black"] }, o.prototype.maxes = { rgb: [255, 255, 255], hsl: [360, 100, 100], hsv: [360, 100, 100], hwb: [360, 100, 100], cmyk: [100, 100, 100, 100] }, o.prototype.getValues = function (t) {
for (var e = this.values, i = {}, n = 0; n < t.length; n++) {
i[t.charAt(n)] = e[t][n];
}return 1 !== e.alpha && (i.a = e.alpha), i;
}, o.prototype.setValues = function (t, e) {
var i,
a,
o = this.values,
r = this.spaces,
s = this.maxes,
l = 1;if (this.valid = !0, "alpha" === t) l = e;else if (e.length) o[t] = e.slice(0, t.length), l = e[t.length];else if (void 0 !== e[t.charAt(0)]) {
for (i = 0; i < t.length; i++) {
o[t][i] = e[t.charAt(i)];
}l = e.a;
} else if (void 0 !== e[r[t][0]]) {
var u = r[t];for (i = 0; i < t.length; i++) {
o[t][i] = e[u[i]];
}l = e.alpha;
}if (o.alpha = Math.max(0, Math.min(1, void 0 === l ? o.alpha : l)), "alpha" === t) return !1;for (i = 0; i < t.length; i++) {
a = Math.max(0, Math.min(s[t][i], o[t][i])), o[t][i] = Math.round(a);
}for (var d in r) {
d !== t && (o[d] = n[t][d](o[t]));
}return !0;
}, o.prototype.setSpace = function (t, e) {
var i = e[0];return void 0 === i ? this.getValues(t) : ("number" == typeof i && (i = Array.prototype.slice.call(e)), this.setValues(t, i), this);
}, o.prototype.setChannel = function (t, e, i) {
var n = this.values[t];return void 0 === i ? n[e] : i === n[e] ? this : (n[e] = i, this.setValues(t, n), this);
}, "undefined" != typeof window && (window.Color = o), e.exports = o;
}, { 2: 2, 5: 5 }], 4: [function (t, e, i) {
function n(t) {
var e,
i,
n = t[0] / 255,
a = t[1] / 255,
o = t[2] / 255,
r = Math.min(n, a, o),
s = Math.max(n, a, o),
l = s - r;return s == r ? e = 0 : n == s ? e = (a - o) / l : a == s ? e = 2 + (o - n) / l : o == s && (e = 4 + (n - a) / l), (e = Math.min(60 * e, 360)) < 0 && (e += 360), i = (r + s) / 2, [e, 100 * (s == r ? 0 : i <= .5 ? l / (s + r) : l / (2 - s - r)), 100 * i];
}function a(t) {
var e,
i,
n = t[0],
a = t[1],
o = t[2],
r = Math.min(n, a, o),
s = Math.max(n, a, o),
l = s - r;return i = 0 == s ? 0 : l / s * 1e3 / 10, s == r ? e = 0 : n == s ? e = (a - o) / l : a == s ? e = 2 + (o - n) / l : o == s && (e = 4 + (n - a) / l), (e = Math.min(60 * e, 360)) < 0 && (e += 360), [e, i, s / 255 * 1e3 / 10];
}function o(t) {
var e = t[0],
i = t[1],
a = t[2];return [n(t)[0], 100 * (1 / 255 * Math.min(e, Math.min(i, a))), 100 * (a = 1 - 1 / 255 * Math.max(e, Math.max(i, a)))];
}function s(t) {
var e,
i = t[0] / 255,
n = t[1] / 255,
a = t[2] / 255;return [100 * ((1 - i - (e = Math.min(1 - i, 1 - n, 1 - a))) / (1 - e) || 0), 100 * ((1 - n - e) / (1 - e) || 0), 100 * ((1 - a - e) / (1 - e) || 0), 100 * e];
}function l(t) {
return C[JSON.stringify(t)];
}function u(t) {
var e = t[0] / 255,
i = t[1] / 255,
n = t[2] / 255;return [100 * (.4124 * (e = e > .04045 ? Math.pow((e + .055) / 1.055, 2.4) : e / 12.92) + .3576 * (i = i > .04045 ? Math.pow((i + .055) / 1.055, 2.4) : i / 12.92) + .1805 * (n = n > .04045 ? Math.pow((n + .055) / 1.055, 2.4) : n / 12.92)), 100 * (.2126 * e + .7152 * i + .0722 * n), 100 * (.0193 * e + .1192 * i + .9505 * n)];
}function d(t) {
var e = u(t),
i = e[0],
n = e[1],
a = e[2];return n /= 100, a /= 108.883, i = (i /= 95.047) > .008856 ? Math.pow(i, 1 / 3) : 7.787 * i + 16 / 116, [116 * (n = n > .008856 ? Math.pow(n, 1 / 3) : 7.787 * n + 16 / 116) - 16, 500 * (i - n), 200 * (n - (a = a > .008856 ? Math.pow(a, 1 / 3) : 7.787 * a + 16 / 116))];
}function c(t) {
var e,
i,
n,
a,
o,
r = t[0] / 360,
s = t[1] / 100,
l = t[2] / 100;if (0 == s) return [o = 255 * l, o, o];e = 2 * l - (i = l < .5 ? l * (1 + s) : l + s - l * s), a = [0, 0, 0];for (var u = 0; u < 3; u++) {
(n = r + 1 / 3 * -(u - 1)) < 0 && n++, n > 1 && n--, o = 6 * n < 1 ? e + 6 * (i - e) * n : 2 * n < 1 ? i : 3 * n < 2 ? e + (i - e) * (2 / 3 - n) * 6 : e, a[u] = 255 * o;
}return a;
}function h(t) {
var e = t[0] / 60,
i = t[1] / 100,
n = t[2] / 100,
a = Math.floor(e) % 6,
o = e - Math.floor(e),
r = 255 * n * (1 - i),
s = 255 * n * (1 - i * o),
l = 255 * n * (1 - i * (1 - o));n *= 255;switch (a) {case 0:
return [n, l, r];case 1:
return [s, n, r];case 2:
return [r, n, l];case 3:
return [r, s, n];case 4:
return [l, r, n];case 5:
return [n, r, s];}
}function f(t) {
var e,
i,
n,
a,
o = t[0] / 360,
s = t[1] / 100,
l = t[2] / 100,
u = s + l;switch (u > 1 && (s /= u, l /= u), n = 6 * o - (e = Math.floor(6 * o)), 0 != (1 & e) && (n = 1 - n), a = s + n * ((i = 1 - l) - s), e) {default:case 6:case 0:
r = i, g = a, b = s;break;case 1:
r = a, g = i, b = s;break;case 2:
r = s, g = i, b = a;break;case 3:
r = s, g = a, b = i;break;case 4:
r = a, g = s, b = i;break;case 5:
r = i, g = s, b = a;}return [255 * r, 255 * g, 255 * b];
}function p(t) {
var e = t[0] / 100,
i = t[1] / 100,
n = t[2] / 100,
a = t[3] / 100;return [255 * (1 - Math.min(1, e * (1 - a) + a)), 255 * (1 - Math.min(1, i * (1 - a) + a)), 255 * (1 - Math.min(1, n * (1 - a) + a))];
}function m(t) {
var e,
i,
n,
a = t[0] / 100,
o = t[1] / 100,
r = t[2] / 100;return i = -.9689 * a + 1.8758 * o + .0415 * r, n = .0557 * a + -.204 * o + 1.057 * r, e = (e = 3.2406 * a + -1.5372 * o + -.4986 * r) > .0031308 ? 1.055 * Math.pow(e, 1 / 2.4) - .055 : e *= 12.92, i = i > .0031308 ? 1.055 * Math.pow(i, 1 / 2.4) - .055 : i *= 12.92, n = n > .0031308 ? 1.055 * Math.pow(n, 1 / 2.4) - .055 : n *= 12.92, [255 * (e = Math.min(Math.max(0, e), 1)), 255 * (i = Math.min(Math.max(0, i), 1)), 255 * (n = Math.min(Math.max(0, n), 1))];
}function v(t) {
var e = t[0],
i = t[1],
n = t[2];return i /= 100, n /= 108.883, e = (e /= 95.047) > .008856 ? Math.pow(e, 1 / 3) : 7.787 * e + 16 / 116, [116 * (i = i > .008856 ? Math.pow(i, 1 / 3) : 7.787 * i + 16 / 116) - 16, 500 * (e - i), 200 * (i - (n = n > .008856 ? Math.pow(n, 1 / 3) : 7.787 * n + 16 / 116))];
}function x(t) {
var e,
i,
n,
a,
o = t[0],
r = t[1],
s = t[2];return o <= 8 ? a = (i = 100 * o / 903.3) / 100 * 7.787 + 16 / 116 : (i = 100 * Math.pow((o + 16) / 116, 3), a = Math.pow(i / 100, 1 / 3)), [e = e / 95.047 <= .008856 ? e = 95.047 * (r / 500 + a - 16 / 116) / 7.787 : 95.047 * Math.pow(r / 500 + a, 3), i, n = n / 108.883 <= .008859 ? n = 108.883 * (a - s / 200 - 16 / 116) / 7.787 : 108.883 * Math.pow(a - s / 200, 3)];
}function y(t) {
var e,
i = t[0],
n = t[1],
a = t[2];return (e = 360 * Math.atan2(a, n) / 2 / Math.PI) < 0 && (e += 360), [i, Math.sqrt(n * n + a * a), e];
}function k(t) {
return m(x(t));
}function M(t) {
var e,
i = t[0],
n = t[1];return e = t[2] / 360 * 2 * Math.PI, [i, n * Math.cos(e), n * Math.sin(e)];
}function w(t) {
return S[t];
}e.exports = { rgb2hsl: n, rgb2hsv: a, rgb2hwb: o, rgb2cmyk: s, rgb2keyword: l, rgb2xyz: u, rgb2lab: d, rgb2lch: function rgb2lch(t) {
return y(d(t));
}, hsl2rgb: c, hsl2hsv: function hsl2hsv(t) {
var e = t[0],
i = t[1] / 100,
n = t[2] / 100;if (0 === n) return [0, 0, 0];return [e, 100 * (2 * (i *= (n *= 2) <= 1 ? n : 2 - n) / (n + i)), 100 * ((n + i) / 2)];
}, hsl2hwb: function hsl2hwb(t) {
return o(c(t));
}, hsl2cmyk: function hsl2cmyk(t) {
return s(c(t));
}, hsl2keyword: function hsl2keyword(t) {
return l(c(t));
}, hsv2rgb: h, hsv2hsl: function hsv2hsl(t) {
var e,
i,
n = t[0],
a = t[1] / 100,
o = t[2] / 100;return e = a * o, [n, 100 * (e = (e /= (i = (2 - a) * o) <= 1 ? i : 2 - i) || 0), 100 * (i /= 2)];
}, hsv2hwb: function hsv2hwb(t) {
return o(h(t));
}, hsv2cmyk: function hsv2cmyk(t) {
return s(h(t));
}, hsv2keyword: function hsv2keyword(t) {
return l(h(t));
}, hwb2rgb: f, hwb2hsl: function hwb2hsl(t) {
return n(f(t));
}, hwb2hsv: function hwb2hsv(t) {
return a(f(t));
}, hwb2cmyk: function hwb2cmyk(t) {
return s(f(t));
}, hwb2keyword: function hwb2keyword(t) {
return l(f(t));
}, cmyk2rgb: p, cmyk2hsl: function cmyk2hsl(t) {
return n(p(t));
}, cmyk2hsv: function cmyk2hsv(t) {
return a(p(t));
}, cmyk2hwb: function cmyk2hwb(t) {
return o(p(t));
}, cmyk2keyword: function cmyk2keyword(t) {
return l(p(t));
}, keyword2rgb: w, keyword2hsl: function keyword2hsl(t) {
return n(w(t));
}, keyword2hsv: function keyword2hsv(t) {
return a(w(t));
}, keyword2hwb: function keyword2hwb(t) {
return o(w(t));
}, keyword2cmyk: function keyword2cmyk(t) {
return s(w(t));
}, keyword2lab: function keyword2lab(t) {
return d(w(t));
}, keyword2xyz: function keyword2xyz(t) {
return u(w(t));
}, xyz2rgb: m, xyz2lab: v, xyz2lch: function xyz2lch(t) {
return y(v(t));
}, lab2xyz: x, lab2rgb: k, lab2lch: y, lch2lab: M, lch2xyz: function lch2xyz(t) {
return x(M(t));
}, lch2rgb: function lch2rgb(t) {
return k(M(t));
} };var S = { aliceblue: [240, 248, 255], antiquewhite: [250, 235, 215], aqua: [0, 255, 255], aquamarine: [127, 255, 212], azure: [240, 255, 255], beige: [245, 245, 220], bisque: [255, 228, 196], black: [0, 0, 0], blanchedalmond: [255, 235, 205], blue: [0, 0, 255], blueviolet: [138, 43, 226], brown: [165, 42, 42], burlywood: [222, 184, 135], cadetblue: [95, 158, 160], chartreuse: [127, 255, 0], chocolate: [210, 105, 30], coral: [255, 127, 80], cornflowerblue: [100, 149, 237], cornsilk: [255, 248, 220], crimson: [220, 20, 60], cyan: [0, 255, 255], darkblue: [0, 0, 139], darkcyan: [0, 139, 139], darkgoldenrod: [184, 134, 11], darkgray: [169, 169, 169], darkgreen: [0, 100, 0], darkgrey: [169, 169, 169], darkkhaki: [189, 183, 107], darkmagenta: [139, 0, 139], darkolivegreen: [85, 107, 47], darkorange: [255, 140, 0], darkorchid: [153, 50, 204], darkred: [139, 0, 0], darksalmon: [233, 150, 122], darkseagreen: [143, 188, 143], darkslateblue: [72, 61, 139], darkslategray: [47, 79, 79], darkslategrey: [47, 79, 79], darkturquoise: [0, 206, 209], darkviolet: [148, 0, 211], deeppink: [255, 20, 147], deepskyblue: [0, 191, 255], dimgray: [105, 105, 105], dimgrey: [105, 105, 105], dodgerblue: [30, 144, 255], firebrick: [178, 34, 34], floralwhite: [255, 250, 240], forestgreen: [34, 139, 34], fuchsia: [255, 0, 255], gainsboro: [220, 220, 220], ghostwhite: [248, 248, 255], gold: [255, 215, 0], goldenrod: [218, 165, 32], gray: [128, 128, 128], green: [0, 128, 0], greenyellow: [173, 255, 47], grey: [128, 128, 128], honeydew: [240, 255, 240], hotpink: [255, 105, 180], indianred: [205, 92, 92], indigo: [75, 0, 130], ivory: [255, 255, 240], khaki: [240, 230, 140], lavender: [230, 230, 250], lavenderblush: [255, 240, 245], lawngreen: [124, 252, 0], lemonchiffon: [255, 250, 205], lightblue: [173, 216, 230], lightcoral: [240, 128, 128], lightcyan: [224, 255, 255], lightgoldenrodyellow: [250, 250, 210], lightgray: [211, 211, 211], lightgreen: [144, 238, 144], lightgrey: [211, 211, 211], lightpink: [255, 182, 193], lightsalmon: [255, 160, 122], lightseagreen: [32, 178, 170], lightskyblue: [135, 206, 250], lightslategray: [119, 136, 153], lightslategrey: [119, 136, 153], lightsteelblue: [176, 196, 222], lightyellow: [255, 255, 224], lime: [0, 255, 0], limegreen: [50, 205, 50], linen: [250, 240, 230], magenta: [255, 0, 255], maroon: [128, 0, 0], mediumaquamarine: [102, 205, 170], mediumblue: [0, 0, 205], mediumorchid: [186, 85, 211], mediumpurple: [147, 112, 219], mediumseagreen: [60, 179, 113], mediumslateblue: [123, 104, 238], mediumspringgreen: [0, 250, 154], mediumturquoise: [72, 209, 204], mediumvioletred: [199, 21, 133], midnightblue: [25, 25, 112], mintcream: [245, 255, 250], mistyrose: [255, 228, 225], moccasin: [255, 228, 181], navajowhite: [255, 222, 173], navy: [0, 0, 128], oldlace: [253, 245, 230], olive: [128, 128, 0], olivedrab: [107, 142, 35], orange: [255, 165, 0], orangered: [255, 69, 0], orchid: [218, 112, 214], palegoldenrod: [238, 232, 170], palegreen: [152, 251, 152], paleturquoise: [175, 238, 238], palevioletred: [219, 112, 147], papayawhip: [255, 239, 213], peachpuff: [255, 218, 185], peru: [205, 133, 63], pink: [255, 192, 203], plum: [221, 160, 221], powderblue: [176, 224, 230], purple: [128, 0, 128], rebeccapurple: [102, 51, 153], red: [255, 0, 0], rosybrown: [188, 143, 143], royalblue: [65, 105, 225], saddlebrown: [139, 69, 19], salmon: [250, 128, 114], sandybrown: [244, 164, 96], seagreen: [46, 139, 87], seashell: [255, 245, 238], sienna: [160, 82, 45], silver: [192, 192, 192], skyblue: [135, 206, 235], slateblue: [106, 90, 205], slategray: [112, 128, 144], slategrey: [112, 128, 144], snow: [255, 250, 250], springgreen: [0, 255, 127], steelblue: [70, 130, 180], tan: [210, 180, 140], teal: [0, 128, 128], thistle: [216, 191, 216], tomato: [255, 99, 71], turquoise: [64, 224, 208], violet: [238, 130, 238], wheat: [245, 222, 179], white: [255, 255, 255], whitesmoke: [245, 245, 245], yellow: [255, 255, 0], yellowgreen: [154, 205, 50] },
C = {};for (var _ in S) {
C[JSON.stringify(S[_])] = _;
}
}, {}], 5: [function (t, e, i) {
var n = t(4),
a = function a() {
return new u();
};for (var o in n) {
a[o + "Raw"] = function (t) {
return function (e) {
return "number" == typeof e && (e = Array.prototype.slice.call(arguments)), n[t](e);
};
}(o);var r = /(\w+)2(\w+)/.exec(o),
s = r[1],
l = r[2];(a[s] = a[s] || {})[l] = a[o] = function (t) {
return function (e) {
"number" == typeof e && (e = Array.prototype.slice.call(arguments));var i = n[t](e);if ("string" == typeof i || void 0 === i) return i;for (var a = 0; a < i.length; a++) {
i[a] = Math.round(i[a]);
}return i;
};
}(o);
}var u = function u() {
this.convs = {};
};u.prototype.routeSpace = function (t, e) {
var i = e[0];return void 0 === i ? this.getValues(t) : ("number" == typeof i && (i = Array.prototype.slice.call(e)), this.setValues(t, i));
}, u.prototype.setValues = function (t, e) {
return this.space = t, this.convs = {}, this.convs[t] = e, this;
}, u.prototype.getValues = function (t) {
var e = this.convs[t];if (!e) {
var i = this.space,
n = this.convs[i];e = a[i][t](n), this.convs[t] = e;
}return e;
}, ["rgb", "hsl", "hsv", "cmyk", "keyword"].forEach(function (t) {
u.prototype[t] = function (e) {
return this.routeSpace(t, arguments);
};
}), e.exports = a;
}, { 4: 4 }], 6: [function (t, e, i) {
"use strict";
e.exports = { aliceblue: [240, 248, 255], antiquewhite: [250, 235, 215], aqua: [0, 255, 255], aquamarine: [127, 255, 212], azure: [240, 255, 255], beige: [245, 245, 220], bisque: [255, 228, 196], black: [0, 0, 0], blanchedalmond: [255, 235, 205], blue: [0, 0, 255], blueviolet: [138, 43, 226], brown: [165, 42, 42], burlywood: [222, 184, 135], cadetblue: [95, 158, 160], chartreuse: [127, 255, 0], chocolate: [210, 105, 30], coral: [255, 127, 80], cornflowerblue: [100, 149, 237], cornsilk: [255, 248, 220], crimson: [220, 20, 60], cyan: [0, 255, 255], darkblue: [0, 0, 139], darkcyan: [0, 139, 139], darkgoldenrod: [184, 134, 11], darkgray: [169, 169, 169], darkgreen: [0, 100, 0], darkgrey: [169, 169, 169], darkkhaki: [189, 183, 107], darkmagenta: [139, 0, 139], darkolivegreen: [85, 107, 47], darkorange: [255, 140, 0], darkorchid: [153, 50, 204], darkred: [139, 0, 0], darksalmon: [233, 150, 122], darkseagreen: [143, 188, 143], darkslateblue: [72, 61, 139], darkslategray: [47, 79, 79], darkslategrey: [47, 79, 79], darkturquoise: [0, 206, 209], darkviolet: [148, 0, 211], deeppink: [255, 20, 147], deepskyblue: [0, 191, 255], dimgray: [105, 105, 105], dimgrey: [105, 105, 105], dodgerblue: [30, 144, 255], firebrick: [178, 34, 34], floralwhite: [255, 250, 240], forestgreen: [34, 139, 34], fuchsia: [255, 0, 255], gainsboro: [220, 220, 220], ghostwhite: [248, 248, 255], gold: [255, 215, 0], goldenrod: [218, 165, 32], gray: [128, 128, 128], green: [0, 128, 0], greenyellow: [173, 255, 47], grey: [128, 128, 128], honeydew: [240, 255, 240], hotpink: [255, 105, 180], indianred: [205, 92, 92], indigo: [75, 0, 130], ivory: [255, 255, 240], khaki: [240, 230, 140], lavender: [230, 230, 250], lavenderblush: [255, 240, 245], lawngreen: [124, 252, 0], lemonchiffon: [255, 250, 205], lightblue: [173, 216, 230], lightcoral: [240, 128, 128], lightcyan: [224, 255, 255], lightgoldenrodyellow: [250, 250, 210], lightgray: [211, 211, 211], lightgreen: [144, 238, 144], lightgrey: [211, 211, 211], lightpink: [255, 182, 193], lightsalmon: [255, 160, 122], lightseagreen: [32, 178, 170], lightskyblue: [135, 206, 250], lightslategray: [119, 136, 153], lightslategrey: [119, 136, 153], lightsteelblue: [176, 196, 222], lightyellow: [255, 255, 224], lime: [0, 255, 0], limegreen: [50, 205, 50], linen: [250, 240, 230], magenta: [255, 0, 255], maroon: [128, 0, 0], mediumaquamarine: [102, 205, 170], mediumblue: [0, 0, 205], mediumorchid: [186, 85, 211], mediumpurple: [147, 112, 219], mediumseagreen: [60, 179, 113], mediumslateblue: [123, 104, 238], mediumspringgreen: [0, 250, 154], mediumturquoise: [72, 209, 204], mediumvioletred: [199, 21, 133], midnightblue: [25, 25, 112], mintcream: [245, 255, 250], mistyrose: [255, 228, 225], moccasin: [255, 228, 181], navajowhite: [255, 222, 173], navy: [0, 0, 128], oldlace: [253, 245, 230], olive: [128, 128, 0], olivedrab: [107, 142, 35], orange: [255, 165, 0], orangered: [255, 69, 0], orchid: [218, 112, 214], palegoldenrod: [238, 232, 170], palegreen: [152, 251, 152], paleturquoise: [175, 238, 238], palevioletred: [219, 112, 147], papayawhip: [255, 239, 213], peachpuff: [255, 218, 185], peru: [205, 133, 63], pink: [255, 192, 203], plum: [221, 160, 221], powderblue: [176, 224, 230], purple: [128, 0, 128], rebeccapurple: [102, 51, 153], red: [255, 0, 0], rosybrown: [188, 143, 143], royalblue: [65, 105, 225], saddlebrown: [139, 69, 19], salmon: [250, 128, 114], sandybrown: [244, 164, 96], seagreen: [46, 139, 87], seashell: [255, 245, 238], sienna: [160, 82, 45], silver: [192, 192, 192], skyblue: [135, 206, 235], slateblue: [106, 90, 205], slategray: [112, 128, 144], slategrey: [112, 128, 144], snow: [255, 250, 250], springgreen: [0, 255, 127], steelblue: [70, 130, 180], tan: [210, 180, 140], teal: [0, 128, 128], thistle: [216, 191, 216], tomato: [255, 99, 71], turquoise: [64, 224, 208], violet: [238, 130, 238], wheat: [245, 222, 179], white: [255, 255, 255], whitesmoke: [245, 245, 245], yellow: [255, 255, 0], yellowgreen: [154, 205, 50] };
}, {}], 7: [function (t, e, i) {
var n = t(29)();n.helpers = t(45), t(27)(n), n.defaults = t(25), n.Element = t(26), n.elements = t(40), n.Interaction = t(28), n.layouts = t(30), n.platform = t(48), n.plugins = t(31), n.Ticks = t(34), t(22)(n), t(23)(n), t(24)(n), t(33)(n), t(32)(n), t(35)(n), t(55)(n), t(53)(n), t(54)(n), t(56)(n), t(57)(n), t(58)(n), t(15)(n), t(16)(n), t(17)(n), t(18)(n), t(19)(n), t(20)(n), t(21)(n), t(8)(n), t(9)(n), t(10)(n), t(11)(n), t(12)(n), t(13)(n), t(14)(n);var a = t(49);for (var o in a) {
a.hasOwnProperty(o) && n.plugins.register(a[o]);
}n.platform.initialize(), e.exports = n, "undefined" != typeof window && (window.Chart = n), n.Legend = a.legend._element, n.Title = a.title._element, n.pluginService = n.plugins, n.PluginBase = n.Element.extend({}), n.canvasHelpers = n.helpers.canvas, n.layoutService = n.layouts;
}, { 10: 10, 11: 11, 12: 12, 13: 13, 14: 14, 15: 15, 16: 16, 17: 17, 18: 18, 19: 19, 20: 20, 21: 21, 22: 22, 23: 23, 24: 24, 25: 25, 26: 26, 27: 27, 28: 28, 29: 29, 30: 30, 31: 31, 32: 32, 33: 33, 34: 34, 35: 35, 40: 40, 45: 45, 48: 48, 49: 49, 53: 53, 54: 54, 55: 55, 56: 56, 57: 57, 58: 58, 8: 8, 9: 9 }], 8: [function (t, e, i) {
"use strict";
e.exports = function (t) {
t.Bar = function (e, i) {
return i.type = "bar", new t(e, i);
};
};
}, {}], 9: [function (t, e, i) {
"use strict";
e.exports = function (t) {
t.Bubble = function (e, i) {
return i.type = "bubble", new t(e, i);
};
};
}, {}], 10: [function (t, e, i) {
"use strict";
e.exports = function (t) {
t.Doughnut = function (e, i) {
return i.type = "doughnut", new t(e, i);
};
};
}, {}], 11: [function (t, e, i) {
"use strict";
e.exports = function (t) {
t.Line = function (e, i) {
return i.type = "line", new t(e, i);
};
};
}, {}], 12: [function (t, e, i) {
"use strict";
e.exports = function (t) {
t.PolarArea = function (e, i) {
return i.type = "polarArea", new t(e, i);
};
};
}, {}], 13: [function (t, e, i) {
"use strict";
e.exports = function (t) {
t.Radar = function (e, i) {
return i.type = "radar", new t(e, i);
};
};
}, {}], 14: [function (t, e, i) {
"use strict";
e.exports = function (t) {
t.Scatter = function (e, i) {
return i.type = "scatter", new t(e, i);
};
};
}, {}], 15: [function (t, e, i) {
"use strict";
var n = t(25),
a = t(40),
o = t(45);n._set("bar", { hover: { mode: "label" }, scales: { xAxes: [{ type: "category", categoryPercentage: .8, barPercentage: .9, offset: !0, gridLines: { offsetGridLines: !0 } }], yAxes: [{ type: "linear" }] } }), n._set("horizontalBar", { hover: { mode: "index", axis: "y" }, scales: { xAxes: [{ type: "linear", position: "bottom" }], yAxes: [{ position: "left", type: "category", categoryPercentage: .8, barPercentage: .9, offset: !0, gridLines: { offsetGridLines: !0 } }] }, elements: { rectangle: { borderSkipped: "left" } }, tooltips: { callbacks: { title: function title(t, e) {
var i = "";return t.length > 0 && (t[0].yLabel ? i = t[0].yLabel : e.labels.length > 0 && t[0].index < e.labels.length && (i = e.labels[t[0].index])), i;
}, label: function label(t, e) {
return (e.datasets[t.datasetIndex].label || "") + ": " + t.xLabel;
} }, mode: "index", axis: "y" } }), e.exports = function (t) {
t.controllers.bar = t.DatasetController.extend({ dataElementType: a.Rectangle, initialize: function initialize() {
var e;t.DatasetController.prototype.initialize.apply(this, arguments), (e = this.getMeta()).stack = this.getDataset().stack, e.bar = !0;
}, update: function update(t) {
var e,
i,
n = this.getMeta().data;for (this._ruler = this.getRuler(), e = 0, i = n.length; e < i; ++e) {
this.updateElement(n[e], e, t);
}
}, updateElement: function updateElement(t, e, i) {
var n = this,
a = n.chart,
r = n.getMeta(),
s = n.getDataset(),
l = t.custom || {},
u = a.options.elements.rectangle;t._xScale = n.getScaleForId(r.xAxisID), t._yScale = n.getScaleForId(r.yAxisID), t._datasetIndex = n.index, t._index = e, t._model = { datasetLabel: s.label, label: a.data.labels[e], borderSkipped: l.borderSkipped ? l.borderSkipped : u.borderSkipped, backgroundColor: l.backgroundColor ? l.backgroundColor : o.valueAtIndexOrDefault(s.backgroundColor, e, u.backgroundColor), borderColor: l.borderColor ? l.borderColor : o.valueAtIndexOrDefault(s.borderColor, e, u.borderColor), borderWidth: l.borderWidth ? l.borderWidth : o.valueAtIndexOrDefault(s.borderWidth, e, u.borderWidth) }, n.updateElementGeometry(t, e, i), t.pivot();
}, updateElementGeometry: function updateElementGeometry(t, e, i) {
var n = this,
a = t._model,
o = n.getValueScale(),
r = o.getBasePixel(),
s = o.isHorizontal(),
l = n._ruler || n.getRuler(),
u = n.calculateBarValuePixels(n.index, e),
d = n.calculateBarIndexPixels(n.index, e, l);a.horizontal = s, a.base = i ? r : u.base, a.x = s ? i ? r : u.head : d.center, a.y = s ? d.center : i ? r : u.head, a.height = s ? d.size : void 0, a.width = s ? void 0 : d.size;
}, getValueScaleId: function getValueScaleId() {
return this.getMeta().yAxisID;
}, getIndexScaleId: function getIndexScaleId() {
return this.getMeta().xAxisID;
}, getValueScale: function getValueScale() {
return this.getScaleForId(this.getValueScaleId());
}, getIndexScale: function getIndexScale() {
return this.getScaleForId(this.getIndexScaleId());
}, _getStacks: function _getStacks(t) {
var e,
i,
n = this.chart,
a = this.getIndexScale().options.stacked,
o = void 0 === t ? n.data.datasets.length : t + 1,
r = [];for (e = 0; e < o; ++e) {
(i = n.getDatasetMeta(e)).bar && n.isDatasetVisible(e) && (!1 === a || !0 === a && -1 === r.indexOf(i.stack) || void 0 === a && (void 0 === i.stack || -1 === r.indexOf(i.stack))) && r.push(i.stack);
}return r;
}, getStackCount: function getStackCount() {
return this._getStacks().length;
}, getStackIndex: function getStackIndex(t, e) {
var i = this._getStacks(t),
n = void 0 !== e ? i.indexOf(e) : -1;return -1 === n ? i.length - 1 : n;
}, getRuler: function getRuler() {
var t,
e,
i = this.getIndexScale(),
n = this.getStackCount(),
a = this.index,
r = i.isHorizontal(),
s = r ? i.left : i.top,
l = s + (r ? i.width : i.height),
u = [];for (t = 0, e = this.getMeta().data.length; t < e; ++t) {
u.push(i.getPixelForValue(null, t, a));
}return { min: o.isNullOrUndef(i.options.barThickness) ? function (t, e) {
var i,
n,
a,
o,
r = t.isHorizontal() ? t.width : t.height,
s = t.getTicks();for (a = 1, o = e.length; a < o; ++a) {
r = Math.min(r, e[a] - e[a - 1]);
}for (a = 0, o = s.length; a < o; ++a) {
n = t.getPixelForTick(a), r = a > 0 ? Math.min(r, n - i) : r, i = n;
}return r;
}(i, u) : -1, pixels: u, start: s, end: l, stackCount: n, scale: i };
}, calculateBarValuePixels: function calculateBarValuePixels(t, e) {
var i,
n,
a,
o,
r,
s,
l = this.chart,
u = this.getMeta(),
d = this.getValueScale(),
c = l.data.datasets,
h = d.getRightValue(c[t].data[e]),
f = d.options.stacked,
g = u.stack,
p = 0;if (f || void 0 === f && void 0 !== g) for (i = 0; i < t; ++i) {
(n = l.getDatasetMeta(i)).bar && n.stack === g && n.controller.getValueScaleId() === d.id && l.isDatasetVisible(i) && (a = d.getRightValue(c[i].data[e]), (h < 0 && a < 0 || h >= 0 && a > 0) && (p += a));
}return o = d.getPixelForValue(p), { size: s = ((r = d.getPixelForValue(p + h)) - o) / 2, base: o, head: r, center: r + s / 2 };
}, calculateBarIndexPixels: function calculateBarIndexPixels(t, e, i) {
var n,
a,
r,
s,
l,
u,
d,
c,
h,
f,
g,
p,
m,
v,
b,
x,
y,
k = i.scale.options,
M = "flex" === k.barThickness ? (h = e, g = k, m = (f = i).pixels, v = m[h], b = h > 0 ? m[h - 1] : null, x = h < m.length - 1 ? m[h + 1] : null, y = g.categoryPercentage, null === b && (b = v - (null === x ? f.end - v : x - v)), null === x && (x = v + v - b), p = v - (v - b) / 2 * y, { chunk: (x - b) / 2 * y / f.stackCount, ratio: g.barPercentage, start: p }) : (n = e, a = i, u = (r = k).barThickness, d = a.stackCount, c = a.pixels[n], o.isNullOrUndef(u) ? (s = a.min * r.categoryPercentage, l = r.barPercentage) : (s = u * d, l = 1), { chunk: s / d, ratio: l, start: c - s / 2 }),
w = this.getStackIndex(t, this.getMeta().stack),
S = M.start + M.chunk * w + M.chunk / 2,
C = Math.min(o.valueOrDefault(k.maxBarThickness, 1 / 0), M.chunk * M.ratio);return { base: S - C / 2, head: S + C / 2, center: S, size: C };
}, draw: function draw() {
var t = this.chart,
e = this.getValueScale(),
i = this.getMeta().data,
n = this.getDataset(),
a = i.length,
r = 0;for (o.canvas.clipArea(t.ctx, t.chartArea); r < a; ++r) {
isNaN(e.getRightValue(n.data[r])) || i[r].draw();
}o.canvas.unclipArea(t.ctx);
}, setHoverStyle: function setHoverStyle(t) {
var e = this.chart.data.datasets[t._datasetIndex],
i = t._index,
n = t.custom || {},
a = t._model;a.backgroundColor = n.hoverBackgroundColor ? n.hoverBackgroundColor : o.valueAtIndexOrDefault(e.hoverBackgroundColor, i, o.getHoverColor(a.backgroundColor)), a.borderColor = n.hoverBorderColor ? n.hoverBorderColor : o.valueAtIndexOrDefault(e.hoverBorderColor, i, o.getHoverColor(a.borderColor)), a.borderWidth = n.hoverBorderWidth ? n.hoverBorderWidth : o.valueAtIndexOrDefault(e.hoverBorderWidth, i, a.borderWidth);
}, removeHoverStyle: function removeHoverStyle(t) {
var e = this.chart.data.datasets[t._datasetIndex],
i = t._index,
n = t.custom || {},
a = t._model,
r = this.chart.options.elements.rectangle;a.backgroundColor = n.backgroundColor ? n.backgroundColor : o.valueAtIndexOrDefault(e.backgroundColor, i, r.backgroundColor), a.borderColor = n.borderColor ? n.borderColor : o.valueAtIndexOrDefault(e.borderColor, i, r.borderColor), a.borderWidth = n.borderWidth ? n.borderWidth : o.valueAtIndexOrDefault(e.borderWidth, i, r.borderWidth);
} }), t.controllers.horizontalBar = t.controllers.bar.extend({ getValueScaleId: function getValueScaleId() {
return this.getMeta().xAxisID;
}, getIndexScaleId: function getIndexScaleId() {
return this.getMeta().yAxisID;
} });
};
}, { 25: 25, 40: 40, 45: 45 }], 16: [function (t, e, i) {
"use strict";
var n = t(25),
a = t(40),
o = t(45);n._set("bubble", { hover: { mode: "single" }, scales: { xAxes: [{ type: "linear", position: "bottom", id: "x-axis-0" }], yAxes: [{ type: "linear", position: "left", id: "y-axis-0" }] }, tooltips: { callbacks: { title: function title() {
return "";
}, label: function label(t, e) {
var i = e.datasets[t.datasetIndex].label || "",
n = e.datasets[t.datasetIndex].data[t.index];return i + ": (" + t.xLabel + ", " + t.yLabel + ", " + n.r + ")";
} } } }), e.exports = function (t) {
t.controllers.bubble = t.DatasetController.extend({ dataElementType: a.Point, update: function update(t) {
var e = this,
i = e.getMeta().data;o.each(i, function (i, n) {
e.updateElement(i, n, t);
});
}, updateElement: function updateElement(t, e, i) {
var n = this,
a = n.getMeta(),
o = t.custom || {},
r = n.getScaleForId(a.xAxisID),
s = n.getScaleForId(a.yAxisID),
l = n._resolveElementOptions(t, e),
u = n.getDataset().data[e],
d = n.index,
c = i ? r.getPixelForDecimal(.5) : r.getPixelForValue("object" == (typeof u === "undefined" ? "undefined" : _typeof(u)) ? u : NaN, e, d),
h = i ? s.getBasePixel() : s.getPixelForValue(u, e, d);t._xScale = r, t._yScale = s, t._options = l, t._datasetIndex = d, t._index = e, t._model = { backgroundColor: l.backgroundColor, borderColor: l.borderColor, borderWidth: l.borderWidth, hitRadius: l.hitRadius, pointStyle: l.pointStyle, radius: i ? 0 : l.radius, skip: o.skip || isNaN(c) || isNaN(h), x: c, y: h }, t.pivot();
}, setHoverStyle: function setHoverStyle(t) {
var e = t._model,
i = t._options;e.backgroundColor = o.valueOrDefault(i.hoverBackgroundColor, o.getHoverColor(i.backgroundColor)), e.borderColor = o.valueOrDefault(i.hoverBorderColor, o.getHoverColor(i.borderColor)), e.borderWidth = o.valueOrDefault(i.hoverBorderWidth, i.borderWidth), e.radius = i.radius + i.hoverRadius;
}, removeHoverStyle: function removeHoverStyle(t) {
var e = t._model,
i = t._options;e.backgroundColor = i.backgroundColor, e.borderColor = i.borderColor, e.borderWidth = i.borderWidth, e.radius = i.radius;
}, _resolveElementOptions: function _resolveElementOptions(t, e) {
var i,
n,
a,
r = this.chart,
s = r.data.datasets[this.index],
l = t.custom || {},
u = r.options.elements.point,
d = o.options.resolve,
c = s.data[e],
h = {},
f = { chart: r, dataIndex: e, dataset: s, datasetIndex: this.index },
g = ["backgroundColor", "borderColor", "borderWidth", "hoverBackgroundColor", "hoverBorderColor", "hoverBorderWidth", "hoverRadius", "hitRadius", "pointStyle"];for (i = 0, n = g.length; i < n; ++i) {
h[a = g[i]] = d([l[a], s[a], u[a]], f, e);
}return h.radius = d([l.radius, c ? c.r : void 0, s.radius, u.radius], f, e), h;
} });
};
}, { 25: 25, 40: 40, 45: 45 }], 17: [function (t, e, i) {
"use strict";
var n = t(25),
a = t(40),
o = t(45);n._set("doughnut", { animation: { animateRotate: !0, animateScale: !1 }, hover: { mode: "single" }, legendCallback: function legendCallback(t) {
var e = [];e.push('
');var i = t.data,
n = i.datasets,
a = i.labels;if (n.length) for (var o = 0; o < n[0].data.length; ++o) {
e.push('- '), a[o] && e.push(a[o]), e.push("
");
}return e.push("
"), e.join("");
}, legend: { labels: { generateLabels: function generateLabels(t) {
var e = t.data;return e.labels.length && e.datasets.length ? e.labels.map(function (i, n) {
var a = t.getDatasetMeta(0),
r = e.datasets[0],
s = a.data[n],
l = s && s.custom || {},
u = o.valueAtIndexOrDefault,
d = t.options.elements.arc;return { text: i, fillStyle: l.backgroundColor ? l.backgroundColor : u(r.backgroundColor, n, d.backgroundColor), strokeStyle: l.borderColor ? l.borderColor : u(r.borderColor, n, d.borderColor), lineWidth: l.borderWidth ? l.borderWidth : u(r.borderWidth, n, d.borderWidth), hidden: isNaN(r.data[n]) || a.data[n].hidden, index: n };
}) : [];
} }, onClick: function onClick(t, e) {
var i,
n,
a,
o = e.index,
r = this.chart;for (i = 0, n = (r.data.datasets || []).length; i < n; ++i) {
(a = r.getDatasetMeta(i)).data[o] && (a.data[o].hidden = !a.data[o].hidden);
}r.update();
} }, cutoutPercentage: 50, rotation: -.5 * Math.PI, circumference: 2 * Math.PI, tooltips: { callbacks: { title: function title() {
return "";
}, label: function label(t, e) {
var i = e.labels[t.index],
n = ": " + e.datasets[t.datasetIndex].data[t.index];return o.isArray(i) ? (i = i.slice())[0] += n : i += n, i;
} } } }), n._set("pie", o.clone(n.doughnut)), n._set("pie", { cutoutPercentage: 0 }), e.exports = function (t) {
t.controllers.doughnut = t.controllers.pie = t.DatasetController.extend({ dataElementType: a.Arc, linkScales: o.noop, getRingIndex: function getRingIndex(t) {
for (var e = 0, i = 0; i < t; ++i) {
this.chart.isDatasetVisible(i) && ++e;
}return e;
}, update: function update(t) {
var e = this,
i = e.chart,
n = i.chartArea,
a = i.options,
r = a.elements.arc,
s = n.right - n.left - r.borderWidth,
l = n.bottom - n.top - r.borderWidth,
u = Math.min(s, l),
d = { x: 0, y: 0 },
c = e.getMeta(),
h = a.cutoutPercentage,
f = a.circumference;if (f < 2 * Math.PI) {
var g = a.rotation % (2 * Math.PI),
p = (g += 2 * Math.PI * (g >= Math.PI ? -1 : g < -Math.PI ? 1 : 0)) + f,
m = Math.cos(g),
v = Math.sin(g),
b = Math.cos(p),
x = Math.sin(p),
y = g <= 0 && p >= 0 || g <= 2 * Math.PI && 2 * Math.PI <= p,
k = g <= .5 * Math.PI && .5 * Math.PI <= p || g <= 2.5 * Math.PI && 2.5 * Math.PI <= p,
M = g <= -Math.PI && -Math.PI <= p || g <= Math.PI && Math.PI <= p,
w = g <= .5 * -Math.PI && .5 * -Math.PI <= p || g <= 1.5 * Math.PI && 1.5 * Math.PI <= p,
S = h / 100,
C = M ? -1 : Math.min(m * (m < 0 ? 1 : S), b * (b < 0 ? 1 : S)),
_ = w ? -1 : Math.min(v * (v < 0 ? 1 : S), x * (x < 0 ? 1 : S)),
D = y ? 1 : Math.max(m * (m > 0 ? 1 : S), b * (b > 0 ? 1 : S)),
I = k ? 1 : Math.max(v * (v > 0 ? 1 : S), x * (x > 0 ? 1 : S)),
P = .5 * (D - C),
A = .5 * (I - _);u = Math.min(s / P, l / A), d = { x: -.5 * (D + C), y: -.5 * (I + _) };
}i.borderWidth = e.getMaxBorderWidth(c.data), i.outerRadius = Math.max((u - i.borderWidth) / 2, 0), i.innerRadius = Math.max(h ? i.outerRadius / 100 * h : 0, 0), i.radiusLength = (i.outerRadius - i.innerRadius) / i.getVisibleDatasetCount(), i.offsetX = d.x * i.outerRadius, i.offsetY = d.y * i.outerRadius, c.total = e.calculateTotal(), e.outerRadius = i.outerRadius - i.radiusLength * e.getRingIndex(e.index), e.innerRadius = Math.max(e.outerRadius - i.radiusLength, 0), o.each(c.data, function (i, n) {
e.updateElement(i, n, t);
});
}, updateElement: function updateElement(t, e, i) {
var n = this,
a = n.chart,
r = a.chartArea,
s = a.options,
l = s.animation,
u = (r.left + r.right) / 2,
d = (r.top + r.bottom) / 2,
c = s.rotation,
h = s.rotation,
f = n.getDataset(),
g = i && l.animateRotate ? 0 : t.hidden ? 0 : n.calculateCircumference(f.data[e]) * (s.circumference / (2 * Math.PI)),
p = i && l.animateScale ? 0 : n.innerRadius,
m = i && l.animateScale ? 0 : n.outerRadius,
v = o.valueAtIndexOrDefault;o.extend(t, { _datasetIndex: n.index, _index: e, _model: { x: u + a.offsetX, y: d + a.offsetY, startAngle: c, endAngle: h, circumference: g, outerRadius: m, innerRadius: p, label: v(f.label, e, a.data.labels[e]) } });var b = t._model;this.removeHoverStyle(t), i && l.animateRotate || (b.startAngle = 0 === e ? s.rotation : n.getMeta().data[e - 1]._model.endAngle, b.endAngle = b.startAngle + b.circumference), t.pivot();
}, removeHoverStyle: function removeHoverStyle(e) {
t.DatasetController.prototype.removeHoverStyle.call(this, e, this.chart.options.elements.arc);
}, calculateTotal: function calculateTotal() {
var t,
e = this.getDataset(),
i = this.getMeta(),
n = 0;return o.each(i.data, function (i, a) {
t = e.data[a], isNaN(t) || i.hidden || (n += Math.abs(t));
}), n;
}, calculateCircumference: function calculateCircumference(t) {
var e = this.getMeta().total;return e > 0 && !isNaN(t) ? 2 * Math.PI * (Math.abs(t) / e) : 0;
}, getMaxBorderWidth: function getMaxBorderWidth(t) {
for (var e, i, n = 0, a = this.index, o = t.length, r = 0; r < o; r++) {
e = t[r]._model ? t[r]._model.borderWidth : 0, n = (i = t[r]._chart ? t[r]._chart.config.data.datasets[a].hoverBorderWidth : 0) > (n = e > n ? e : n) ? i : n;
}return n;
} });
};
}, { 25: 25, 40: 40, 45: 45 }], 18: [function (t, e, i) {
"use strict";
var n = t(25),
a = t(40),
o = t(45);n._set("line", { showLines: !0, spanGaps: !1, hover: { mode: "label" }, scales: { xAxes: [{ type: "category", id: "x-axis-0" }], yAxes: [{ type: "linear", id: "y-axis-0" }] } }), e.exports = function (t) {
function e(t, e) {
return o.valueOrDefault(t.showLine, e.showLines);
}t.controllers.line = t.DatasetController.extend({ datasetElementType: a.Line, dataElementType: a.Point, update: function update(t) {
var i,
n,
a,
r = this,
s = r.getMeta(),
l = s.dataset,
u = s.data || [],
d = r.chart.options,
c = d.elements.line,
h = r.getScaleForId(s.yAxisID),
f = r.getDataset(),
g = e(f, d);for (g && (a = l.custom || {}, void 0 !== f.tension && void 0 === f.lineTension && (f.lineTension = f.tension), l._scale = h, l._datasetIndex = r.index, l._children = u, l._model = { spanGaps: f.spanGaps ? f.spanGaps : d.spanGaps, tension: a.tension ? a.tension : o.valueOrDefault(f.lineTension, c.tension), backgroundColor: a.backgroundColor ? a.backgroundColor : f.backgroundColor || c.backgroundColor, borderWidth: a.borderWidth ? a.borderWidth : f.borderWidth || c.borderWidth, borderColor: a.borderColor ? a.borderColor : f.borderColor || c.borderColor, borderCapStyle: a.borderCapStyle ? a.borderCapStyle : f.borderCapStyle || c.borderCapStyle, borderDash: a.borderDash ? a.borderDash : f.borderDash || c.borderDash, borderDashOffset: a.borderDashOffset ? a.borderDashOffset : f.borderDashOffset || c.borderDashOffset, borderJoinStyle: a.borderJoinStyle ? a.borderJoinStyle : f.borderJoinStyle || c.borderJoinStyle, fill: a.fill ? a.fill : void 0 !== f.fill ? f.fill : c.fill, steppedLine: a.steppedLine ? a.steppedLine : o.valueOrDefault(f.steppedLine, c.stepped), cubicInterpolationMode: a.cubicInterpolationMode ? a.cubicInterpolationMode : o.valueOrDefault(f.cubicInterpolationMode, c.cubicInterpolationMode) }, l.pivot()), i = 0, n = u.length; i < n; ++i) {
r.updateElement(u[i], i, t);
}for (g && 0 !== l._model.tension && r.updateBezierControlPoints(), i = 0, n = u.length; i < n; ++i) {
u[i].pivot();
}
}, getPointBackgroundColor: function getPointBackgroundColor(t, e) {
var i = this.chart.options.elements.point.backgroundColor,
n = this.getDataset(),
a = t.custom || {};return a.backgroundColor ? i = a.backgroundColor : n.pointBackgroundColor ? i = o.valueAtIndexOrDefault(n.pointBackgroundColor, e, i) : n.backgroundColor && (i = n.backgroundColor), i;
}, getPointBorderColor: function getPointBorderColor(t, e) {
var i = this.chart.options.elements.point.borderColor,
n = this.getDataset(),
a = t.custom || {};return a.borderColor ? i = a.borderColor : n.pointBorderColor ? i = o.valueAtIndexOrDefault(n.pointBorderColor, e, i) : n.borderColor && (i = n.borderColor), i;
}, getPointBorderWidth: function getPointBorderWidth(t, e) {
var i = this.chart.options.elements.point.borderWidth,
n = this.getDataset(),
a = t.custom || {};return isNaN(a.borderWidth) ? !isNaN(n.pointBorderWidth) || o.isArray(n.pointBorderWidth) ? i = o.valueAtIndexOrDefault(n.pointBorderWidth, e, i) : isNaN(n.borderWidth) || (i = n.borderWidth) : i = a.borderWidth, i;
}, updateElement: function updateElement(t, e, i) {
var n,
a,
r = this,
s = r.getMeta(),
l = t.custom || {},
u = r.getDataset(),
d = r.index,
c = u.data[e],
h = r.getScaleForId(s.yAxisID),
f = r.getScaleForId(s.xAxisID),
g = r.chart.options.elements.point;void 0 !== u.radius && void 0 === u.pointRadius && (u.pointRadius = u.radius), void 0 !== u.hitRadius && void 0 === u.pointHitRadius && (u.pointHitRadius = u.hitRadius), n = f.getPixelForValue("object" == (typeof c === "undefined" ? "undefined" : _typeof(c)) ? c : NaN, e, d), a = i ? h.getBasePixel() : r.calculatePointY(c, e, d), t._xScale = f, t._yScale = h, t._datasetIndex = d, t._index = e, t._model = { x: n, y: a, skip: l.skip || isNaN(n) || isNaN(a), radius: l.radius || o.valueAtIndexOrDefault(u.pointRadius, e, g.radius), pointStyle: l.pointStyle || o.valueAtIndexOrDefault(u.pointStyle, e, g.pointStyle), backgroundColor: r.getPointBackgroundColor(t, e), borderColor: r.getPointBorderColor(t, e), borderWidth: r.getPointBorderWidth(t, e), tension: s.dataset._model ? s.dataset._model.tension : 0, steppedLine: !!s.dataset._model && s.dataset._model.steppedLine, hitRadius: l.hitRadius || o.valueAtIndexOrDefault(u.pointHitRadius, e, g.hitRadius) };
}, calculatePointY: function calculatePointY(t, e, i) {
var n,
a,
o,
r = this.chart,
s = this.getMeta(),
l = this.getScaleForId(s.yAxisID),
u = 0,
d = 0;if (l.options.stacked) {
for (n = 0; n < i; n++) {
if (a = r.data.datasets[n], "line" === (o = r.getDatasetMeta(n)).type && o.yAxisID === l.id && r.isDatasetVisible(n)) {
var c = Number(l.getRightValue(a.data[e]));c < 0 ? d += c || 0 : u += c || 0;
}
}var h = Number(l.getRightValue(t));return h < 0 ? l.getPixelForValue(d + h) : l.getPixelForValue(u + h);
}return l.getPixelForValue(t);
}, updateBezierControlPoints: function updateBezierControlPoints() {
var t,
e,
i,
n,
a = this.getMeta(),
r = this.chart.chartArea,
s = a.data || [];function l(t, e, i) {
return Math.max(Math.min(t, i), e);
}if (a.dataset._model.spanGaps && (s = s.filter(function (t) {
return !t._model.skip;
})), "monotone" === a.dataset._model.cubicInterpolationMode) o.splineCurveMonotone(s);else for (t = 0, e = s.length; t < e; ++t) {
i = s[t]._model, n = o.splineCurve(o.previousItem(s, t)._model, i, o.nextItem(s, t)._model, a.dataset._model.tension), i.controlPointPreviousX = n.previous.x, i.controlPointPreviousY = n.previous.y, i.controlPointNextX = n.next.x, i.controlPointNextY = n.next.y;
}if (this.chart.options.elements.line.capBezierPoints) for (t = 0, e = s.length; t < e; ++t) {
(i = s[t]._model).controlPointPreviousX = l(i.controlPointPreviousX, r.left, r.right), i.controlPointPreviousY = l(i.controlPointPreviousY, r.top, r.bottom), i.controlPointNextX = l(i.controlPointNextX, r.left, r.right), i.controlPointNextY = l(i.controlPointNextY, r.top, r.bottom);
}
}, draw: function draw() {
var t = this.chart,
i = this.getMeta(),
n = i.data || [],
a = t.chartArea,
r = n.length,
s = 0;for (o.canvas.clipArea(t.ctx, a), e(this.getDataset(), t.options) && i.dataset.draw(), o.canvas.unclipArea(t.ctx); s < r; ++s) {
n[s].draw(a);
}
}, setHoverStyle: function setHoverStyle(t) {
var e = this.chart.data.datasets[t._datasetIndex],
i = t._index,
n = t.custom || {},
a = t._model;a.radius = n.hoverRadius || o.valueAtIndexOrDefault(e.pointHoverRadius, i, this.chart.options.elements.point.hoverRadius), a.backgroundColor = n.hoverBackgroundColor || o.valueAtIndexOrDefault(e.pointHoverBackgroundColor, i, o.getHoverColor(a.backgroundColor)), a.borderColor = n.hoverBorderColor || o.valueAtIndexOrDefault(e.pointHoverBorderColor, i, o.getHoverColor(a.borderColor)), a.borderWidth = n.hoverBorderWidth || o.valueAtIndexOrDefault(e.pointHoverBorderWidth, i, a.borderWidth);
}, removeHoverStyle: function removeHoverStyle(t) {
var e = this,
i = e.chart.data.datasets[t._datasetIndex],
n = t._index,
a = t.custom || {},
r = t._model;void 0 !== i.radius && void 0 === i.pointRadius && (i.pointRadius = i.radius), r.radius = a.radius || o.valueAtIndexOrDefault(i.pointRadius, n, e.chart.options.elements.point.radius), r.backgroundColor = e.getPointBackgroundColor(t, n), r.borderColor = e.getPointBorderColor(t, n), r.borderWidth = e.getPointBorderWidth(t, n);
} });
};
}, { 25: 25, 40: 40, 45: 45 }], 19: [function (t, e, i) {
"use strict";
var n = t(25),
a = t(40),
o = t(45);n._set("polarArea", { scale: { type: "radialLinear", angleLines: { display: !1 }, gridLines: { circular: !0 }, pointLabels: { display: !1 }, ticks: { beginAtZero: !0 } }, animation: { animateRotate: !0, animateScale: !0 }, startAngle: -.5 * Math.PI, legendCallback: function legendCallback(t) {
var e = [];e.push('');var i = t.data,
n = i.datasets,
a = i.labels;if (n.length) for (var o = 0; o < n[0].data.length; ++o) {
e.push('- '), a[o] && e.push(a[o]), e.push("
");
}return e.push("
"), e.join("");
}, legend: { labels: { generateLabels: function generateLabels(t) {
var e = t.data;return e.labels.length && e.datasets.length ? e.labels.map(function (i, n) {
var a = t.getDatasetMeta(0),
r = e.datasets[0],
s = a.data[n].custom || {},
l = o.valueAtIndexOrDefault,
u = t.options.elements.arc;return { text: i, fillStyle: s.backgroundColor ? s.backgroundColor : l(r.backgroundColor, n, u.backgroundColor), strokeStyle: s.borderColor ? s.borderColor : l(r.borderColor, n, u.borderColor), lineWidth: s.borderWidth ? s.borderWidth : l(r.borderWidth, n, u.borderWidth), hidden: isNaN(r.data[n]) || a.data[n].hidden, index: n };
}) : [];
} }, onClick: function onClick(t, e) {
var i,
n,
a,
o = e.index,
r = this.chart;for (i = 0, n = (r.data.datasets || []).length; i < n; ++i) {
(a = r.getDatasetMeta(i)).data[o].hidden = !a.data[o].hidden;
}r.update();
} }, tooltips: { callbacks: { title: function title() {
return "";
}, label: function label(t, e) {
return e.labels[t.index] + ": " + t.yLabel;
} } } }), e.exports = function (t) {
t.controllers.polarArea = t.DatasetController.extend({ dataElementType: a.Arc, linkScales: o.noop, update: function update(t) {
var e = this,
i = e.chart,
n = i.chartArea,
a = e.getMeta(),
r = i.options,
s = r.elements.arc,
l = Math.min(n.right - n.left, n.bottom - n.top);i.outerRadius = Math.max((l - s.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(), e.outerRadius = i.outerRadius - i.radiusLength * e.index, e.innerRadius = e.outerRadius - i.radiusLength, a.count = e.countVisibleElements(), o.each(a.data, function (i, n) {
e.updateElement(i, n, t);
});
}, updateElement: function updateElement(t, e, i) {
for (var n = this, a = n.chart, r = n.getDataset(), s = a.options, l = s.animation, u = a.scale, d = a.data.labels, c = n.calculateCircumference(r.data[e]), h = u.xCenter, f = u.yCenter, g = 0, p = n.getMeta(), m = 0; m < e; ++m) {
isNaN(r.data[m]) || p.data[m].hidden || ++g;
}var v = s.startAngle,
b = t.hidden ? 0 : u.getDistanceFromCenterForValue(r.data[e]),
x = v + c * g,
y = x + (t.hidden ? 0 : c),
k = l.animateScale ? 0 : u.getDistanceFromCenterForValue(r.data[e]);o.extend(t, { _datasetIndex: n.index, _index: e, _scale: u, _model: { x: h, y: f, innerRadius: 0, outerRadius: i ? k : b, startAngle: i && l.animateRotate ? v : x, endAngle: i && l.animateRotate ? v : y, label: o.valueAtIndexOrDefault(d, e, d[e]) } }), n.removeHoverStyle(t), t.pivot();
}, removeHoverStyle: function removeHoverStyle(e) {
t.DatasetController.prototype.removeHoverStyle.call(this, e, this.chart.options.elements.arc);
}, countVisibleElements: function countVisibleElements() {
var t = this.getDataset(),
e = this.getMeta(),
i = 0;return o.each(e.data, function (e, n) {
isNaN(t.data[n]) || e.hidden || i++;
}), i;
}, calculateCircumference: function calculateCircumference(t) {
var e = this.getMeta().count;return e > 0 && !isNaN(t) ? 2 * Math.PI / e : 0;
} });
};
}, { 25: 25, 40: 40, 45: 45 }], 20: [function (t, e, i) {
"use strict";
var n = t(25),
a = t(40),
o = t(45);n._set("radar", { scale: { type: "radialLinear" }, elements: { line: { tension: 0 } } }), e.exports = function (t) {
t.controllers.radar = t.DatasetController.extend({ datasetElementType: a.Line, dataElementType: a.Point, linkScales: o.noop, update: function update(t) {
var e = this,
i = e.getMeta(),
n = i.dataset,
a = i.data,
r = n.custom || {},
s = e.getDataset(),
l = e.chart.options.elements.line,
u = e.chart.scale;void 0 !== s.tension && void 0 === s.lineTension && (s.lineTension = s.tension), o.extend(i.dataset, { _datasetIndex: e.index, _scale: u, _children: a, _loop: !0, _model: { tension: r.tension ? r.tension : o.valueOrDefault(s.lineTension, l.tension), backgroundColor: r.backgroundColor ? r.backgroundColor : s.backgroundColor || l.backgroundColor, borderWidth: r.borderWidth ? r.borderWidth : s.borderWidth || l.borderWidth, borderColor: r.borderColor ? r.borderColor : s.borderColor || l.borderColor, fill: r.fill ? r.fill : void 0 !== s.fill ? s.fill : l.fill, borderCapStyle: r.borderCapStyle ? r.borderCapStyle : s.borderCapStyle || l.borderCapStyle, borderDash: r.borderDash ? r.borderDash : s.borderDash || l.borderDash, borderDashOffset: r.borderDashOffset ? r.borderDashOffset : s.borderDashOffset || l.borderDashOffset, borderJoinStyle: r.borderJoinStyle ? r.borderJoinStyle : s.borderJoinStyle || l.borderJoinStyle } }), i.dataset.pivot(), o.each(a, function (i, n) {
e.updateElement(i, n, t);
}, e), e.updateBezierControlPoints();
}, updateElement: function updateElement(t, e, i) {
var n = this,
a = t.custom || {},
r = n.getDataset(),
s = n.chart.scale,
l = n.chart.options.elements.point,
u = s.getPointPositionForValue(e, r.data[e]);void 0 !== r.radius && void 0 === r.pointRadius && (r.pointRadius = r.radius), void 0 !== r.hitRadius && void 0 === r.pointHitRadius && (r.pointHitRadius = r.hitRadius), o.extend(t, { _datasetIndex: n.index, _index: e, _scale: s, _model: { x: i ? s.xCenter : u.x, y: i ? s.yCenter : u.y, tension: a.tension ? a.tension : o.valueOrDefault(r.lineTension, n.chart.options.elements.line.tension), radius: a.radius ? a.radius : o.valueAtIndexOrDefault(r.pointRadius, e, l.radius), backgroundColor: a.backgroundColor ? a.backgroundColor : o.valueAtIndexOrDefault(r.pointBackgroundColor, e, l.backgroundColor), borderColor: a.borderColor ? a.borderColor : o.valueAtIndexOrDefault(r.pointBorderColor, e, l.borderColor), borderWidth: a.borderWidth ? a.borderWidth : o.valueAtIndexOrDefault(r.pointBorderWidth, e, l.borderWidth), pointStyle: a.pointStyle ? a.pointStyle : o.valueAtIndexOrDefault(r.pointStyle, e, l.pointStyle), hitRadius: a.hitRadius ? a.hitRadius : o.valueAtIndexOrDefault(r.pointHitRadius, e, l.hitRadius) } }), t._model.skip = a.skip ? a.skip : isNaN(t._model.x) || isNaN(t._model.y);
}, updateBezierControlPoints: function updateBezierControlPoints() {
var t = this.chart.chartArea,
e = this.getMeta();o.each(e.data, function (i, n) {
var a = i._model,
r = o.splineCurve(o.previousItem(e.data, n, !0)._model, a, o.nextItem(e.data, n, !0)._model, a.tension);a.controlPointPreviousX = Math.max(Math.min(r.previous.x, t.right), t.left), a.controlPointPreviousY = Math.max(Math.min(r.previous.y, t.bottom), t.top), a.controlPointNextX = Math.max(Math.min(r.next.x, t.right), t.left), a.controlPointNextY = Math.max(Math.min(r.next.y, t.bottom), t.top), i.pivot();
});
}, setHoverStyle: function setHoverStyle(t) {
var e = this.chart.data.datasets[t._datasetIndex],
i = t.custom || {},
n = t._index,
a = t._model;a.radius = i.hoverRadius ? i.hoverRadius : o.valueAtIndexOrDefault(e.pointHoverRadius, n, this.chart.options.elements.point.hoverRadius), a.backgroundColor = i.hoverBackgroundColor ? i.hoverBackgroundColor : o.valueAtIndexOrDefault(e.pointHoverBackgroundColor, n, o.getHoverColor(a.backgroundColor)), a.borderColor = i.hoverBorderColor ? i.hoverBorderColor : o.valueAtIndexOrDefault(e.pointHoverBorderColor, n, o.getHoverColor(a.borderColor)), a.borderWidth = i.hoverBorderWidth ? i.hoverBorderWidth : o.valueAtIndexOrDefault(e.pointHoverBorderWidth, n, a.borderWidth);
}, removeHoverStyle: function removeHoverStyle(t) {
var e = this.chart.data.datasets[t._datasetIndex],
i = t.custom || {},
n = t._index,
a = t._model,
r = this.chart.options.elements.point;a.radius = i.radius ? i.radius : o.valueAtIndexOrDefault(e.pointRadius, n, r.radius), a.backgroundColor = i.backgroundColor ? i.backgroundColor : o.valueAtIndexOrDefault(e.pointBackgroundColor, n, r.backgroundColor), a.borderColor = i.borderColor ? i.borderColor : o.valueAtIndexOrDefault(e.pointBorderColor, n, r.borderColor), a.borderWidth = i.borderWidth ? i.borderWidth : o.valueAtIndexOrDefault(e.pointBorderWidth, n, r.borderWidth);
} });
};
}, { 25: 25, 40: 40, 45: 45 }], 21: [function (t, e, i) {
"use strict";
t(25)._set("scatter", { hover: { mode: "single" }, scales: { xAxes: [{ id: "x-axis-1", type: "linear", position: "bottom" }], yAxes: [{ id: "y-axis-1", type: "linear", position: "left" }] }, showLines: !1, tooltips: { callbacks: { title: function title() {
return "";
}, label: function label(t) {
return "(" + t.xLabel + ", " + t.yLabel + ")";
} } } }), e.exports = function (t) {
t.controllers.scatter = t.controllers.line;
};
}, { 25: 25 }], 22: [function (t, e, i) {
"use strict";
var n = t(25),
a = t(26),
o = t(45);n._set("global", { animation: { duration: 1e3, easing: "easeOutQuart", onProgress: o.noop, onComplete: o.noop } }), e.exports = function (t) {
t.Animation = a.extend({ chart: null, currentStep: 0, numSteps: 60, easing: "", render: null, onAnimationProgress: null, onAnimationComplete: null }), t.animationService = { frameDuration: 17, animations: [], dropFrames: 0, request: null, addAnimation: function addAnimation(t, e, i, n) {
var a,
o,
r = this.animations;for (e.chart = t, n || (t.animating = !0), a = 0, o = r.length; a < o; ++a) {
if (r[a].chart === t) return void (r[a] = e);
}r.push(e), 1 === r.length && this.requestAnimationFrame();
}, cancelAnimation: function cancelAnimation(t) {
var e = o.findIndex(this.animations, function (e) {
return e.chart === t;
});-1 !== e && (this.animations.splice(e, 1), t.animating = !1);
}, requestAnimationFrame: function requestAnimationFrame() {
var t = this;null === t.request && (t.request = o.requestAnimFrame.call(window, function () {
t.request = null, t.startDigest();
}));
}, startDigest: function startDigest() {
var t = this,
e = Date.now(),
i = 0;t.dropFrames > 1 && (i = Math.floor(t.dropFrames), t.dropFrames = t.dropFrames % 1), t.advance(1 + i);var n = Date.now();t.dropFrames += (n - e) / t.frameDuration, t.animations.length > 0 && t.requestAnimationFrame();
}, advance: function advance(t) {
for (var e, i, n = this.animations, a = 0; a < n.length;) {
i = (e = n[a]).chart, e.currentStep = (e.currentStep || 0) + t, e.currentStep = Math.min(e.currentStep, e.numSteps), o.callback(e.render, [i, e], i), o.callback(e.onAnimationProgress, [e], i), e.currentStep >= e.numSteps ? (o.callback(e.onAnimationComplete, [e], i), i.animating = !1, n.splice(a, 1)) : ++a;
}
} }, Object.defineProperty(t.Animation.prototype, "animationObject", { get: function get() {
return this;
} }), Object.defineProperty(t.Animation.prototype, "chartInstance", { get: function get() {
return this.chart;
}, set: function set(t) {
this.chart = t;
} });
};
}, { 25: 25, 26: 26, 45: 45 }], 23: [function (t, e, i) {
"use strict";
var n = t(25),
a = t(45),
o = t(28),
r = t(30),
s = t(48),
l = t(31);e.exports = function (t) {
function e(t) {
return "top" === t || "bottom" === t;
}t.types = {}, t.instances = {}, t.controllers = {}, a.extend(t.prototype, { construct: function construct(e, i) {
var o,
r,
l = this;(r = (o = (o = i) || {}).data = o.data || {}).datasets = r.datasets || [], r.labels = r.labels || [], o.options = a.configMerge(n.global, n[o.type], o.options || {}), i = o;var u = s.acquireContext(e, i),
d = u && u.canvas,
c = d && d.height,
h = d && d.width;l.id = a.uid(), l.ctx = u, l.canvas = d, l.config = i, l.width = h, l.height = c, l.aspectRatio = c ? h / c : null, l.options = i.options, l._bufferedRender = !1, l.chart = l, l.controller = l, t.instances[l.id] = l, Object.defineProperty(l, "data", { get: function get() {
return l.config.data;
}, set: function set(t) {
l.config.data = t;
} }), u && d ? (l.initialize(), l.update()) : console.error("Failed to create chart: can't acquire context from the given item");
}, initialize: function initialize() {
var t = this;return l.notify(t, "beforeInit"), a.retinaScale(t, t.options.devicePixelRatio), t.bindEvents(), t.options.responsive && t.resize(!0), t.ensureScalesHaveIDs(), t.buildOrUpdateScales(), t.initToolTip(), l.notify(t, "afterInit"), t;
}, clear: function clear() {
return a.canvas.clear(this), this;
}, stop: function stop() {
return t.animationService.cancelAnimation(this), this;
}, resize: function resize(t) {
var e = this,
i = e.options,
n = e.canvas,
o = i.maintainAspectRatio && e.aspectRatio || null,
r = Math.max(0, Math.floor(a.getMaximumWidth(n))),
s = Math.max(0, Math.floor(o ? r / o : a.getMaximumHeight(n)));if ((e.width !== r || e.height !== s) && (n.width = e.width = r, n.height = e.height = s, n.style.width = r + "px", n.style.height = s + "px", a.retinaScale(e, i.devicePixelRatio), !t)) {
var u = { width: r, height: s };l.notify(e, "resize", [u]), e.options.onResize && e.options.onResize(e, u), e.stop(), e.update(e.options.responsiveAnimationDuration);
}
}, ensureScalesHaveIDs: function ensureScalesHaveIDs() {
var t = this.options,
e = t.scales || {},
i = t.scale;a.each(e.xAxes, function (t, e) {
t.id = t.id || "x-axis-" + e;
}), a.each(e.yAxes, function (t, e) {
t.id = t.id || "y-axis-" + e;
}), i && (i.id = i.id || "scale");
}, buildOrUpdateScales: function buildOrUpdateScales() {
var i = this,
n = i.options,
o = i.scales || {},
r = [],
s = Object.keys(o).reduce(function (t, e) {
return t[e] = !1, t;
}, {});n.scales && (r = r.concat((n.scales.xAxes || []).map(function (t) {
return { options: t, dtype: "category", dposition: "bottom" };
}), (n.scales.yAxes || []).map(function (t) {
return { options: t, dtype: "linear", dposition: "left" };
}))), n.scale && r.push({ options: n.scale, dtype: "radialLinear", isDefault: !0, dposition: "chartArea" }), a.each(r, function (n) {
var r = n.options,
l = r.id,
u = a.valueOrDefault(r.type, n.dtype);e(r.position) !== e(n.dposition) && (r.position = n.dposition), s[l] = !0;var d = null;if (l in o && o[l].type === u) (d = o[l]).options = r, d.ctx = i.ctx, d.chart = i;else {
var c = t.scaleService.getScaleConstructor(u);if (!c) return;d = new c({ id: l, type: u, options: r, ctx: i.ctx, chart: i }), o[d.id] = d;
}d.mergeTicksOptions(), n.isDefault && (i.scale = d);
}), a.each(s, function (t, e) {
t || delete o[e];
}), i.scales = o, t.scaleService.addScalesToLayout(this);
}, buildOrUpdateControllers: function buildOrUpdateControllers() {
var e = this,
i = [],
n = [];return a.each(e.data.datasets, function (a, o) {
var r = e.getDatasetMeta(o),
s = a.type || e.config.type;if (r.type && r.type !== s && (e.destroyDatasetMeta(o), r = e.getDatasetMeta(o)), r.type = s, i.push(r.type), r.controller) r.controller.updateIndex(o), r.controller.linkScales();else {
var l = t.controllers[r.type];if (void 0 === l) throw new Error('"' + r.type + '" is not a chart type.');r.controller = new l(e, o), n.push(r.controller);
}
}, e), n;
}, resetElements: function resetElements() {
var t = this;a.each(t.data.datasets, function (e, i) {
t.getDatasetMeta(i).controller.reset();
}, t);
}, reset: function reset() {
this.resetElements(), this.tooltip.initialize();
}, update: function update(e) {
var i,
n,
o = this;if (e && "object" == (typeof e === "undefined" ? "undefined" : _typeof(e)) || (e = { duration: e, lazy: arguments[1] }), n = (i = o).options, a.each(i.scales, function (t) {
r.removeBox(i, t);
}), n = a.configMerge(t.defaults.global, t.defaults[i.config.type], n), i.options = i.config.options = n, i.ensureScalesHaveIDs(), i.buildOrUpdateScales(), i.tooltip._options = n.tooltips, i.tooltip.initialize(), l._invalidate(o), !1 !== l.notify(o, "beforeUpdate")) {
o.tooltip._data = o.data;var s = o.buildOrUpdateControllers();a.each(o.data.datasets, function (t, e) {
o.getDatasetMeta(e).controller.buildOrUpdateElements();
}, o), o.updateLayout(), o.options.animation && o.options.animation.duration && a.each(s, function (t) {
t.reset();
}), o.updateDatasets(), o.tooltip.initialize(), o.lastActive = [], l.notify(o, "afterUpdate"), o._bufferedRender ? o._bufferedRequest = { duration: e.duration, easing: e.easing, lazy: e.lazy } : o.render(e);
}
}, updateLayout: function updateLayout() {
!1 !== l.notify(this, "beforeLayout") && (r.update(this, this.width, this.height), l.notify(this, "afterScaleUpdate"), l.notify(this, "afterLayout"));
}, updateDatasets: function updateDatasets() {
if (!1 !== l.notify(this, "beforeDatasetsUpdate")) {
for (var t = 0, e = this.data.datasets.length; t < e; ++t) {
this.updateDataset(t);
}l.notify(this, "afterDatasetsUpdate");
}
}, updateDataset: function updateDataset(t) {
var e = this.getDatasetMeta(t),
i = { meta: e, index: t };!1 !== l.notify(this, "beforeDatasetUpdate", [i]) && (e.controller.update(), l.notify(this, "afterDatasetUpdate", [i]));
}, render: function render(e) {
var i = this;e && "object" == (typeof e === "undefined" ? "undefined" : _typeof(e)) || (e = { duration: e, lazy: arguments[1] });var n = e.duration,
o = e.lazy;if (!1 !== l.notify(i, "beforeRender")) {
var r = i.options.animation,
s = function s(t) {
l.notify(i, "afterRender"), a.callback(r && r.onComplete, [t], i);
};if (r && (void 0 !== n && 0 !== n || void 0 === n && 0 !== r.duration)) {
var u = new t.Animation({ numSteps: (n || r.duration) / 16.66, easing: e.easing || r.easing, render: function render(t, e) {
var i = a.easing.effects[e.easing],
n = e.currentStep,
o = n / e.numSteps;t.draw(i(o), o, n);
}, onAnimationProgress: r.onProgress, onAnimationComplete: s });t.animationService.addAnimation(i, u, n, o);
} else i.draw(), s(new t.Animation({ numSteps: 0, chart: i }));return i;
}
}, draw: function draw(t) {
var e = this;e.clear(), a.isNullOrUndef(t) && (t = 1), e.transition(t), !1 !== l.notify(e, "beforeDraw", [t]) && (a.each(e.boxes, function (t) {
t.draw(e.chartArea);
}, e), e.scale && e.scale.draw(), e.drawDatasets(t), e._drawTooltip(t), l.notify(e, "afterDraw", [t]));
}, transition: function transition(t) {
for (var e = 0, i = (this.data.datasets || []).length; e < i; ++e) {
this.isDatasetVisible(e) && this.getDatasetMeta(e).controller.transition(t);
}this.tooltip.transition(t);
}, drawDatasets: function drawDatasets(t) {
var e = this;if (!1 !== l.notify(e, "beforeDatasetsDraw", [t])) {
for (var i = (e.data.datasets || []).length - 1; i >= 0; --i) {
e.isDatasetVisible(i) && e.drawDataset(i, t);
}l.notify(e, "afterDatasetsDraw", [t]);
}
}, drawDataset: function drawDataset(t, e) {
var i = this.getDatasetMeta(t),
n = { meta: i, index: t, easingValue: e };!1 !== l.notify(this, "beforeDatasetDraw", [n]) && (i.controller.draw(e), l.notify(this, "afterDatasetDraw", [n]));
}, _drawTooltip: function _drawTooltip(t) {
var e = this.tooltip,
i = { tooltip: e, easingValue: t };!1 !== l.notify(this, "beforeTooltipDraw", [i]) && (e.draw(), l.notify(this, "afterTooltipDraw", [i]));
}, getElementAtEvent: function getElementAtEvent(t) {
return o.modes.single(this, t);
}, getElementsAtEvent: function getElementsAtEvent(t) {
return o.modes.label(this, t, { intersect: !0 });
}, getElementsAtXAxis: function getElementsAtXAxis(t) {
return o.modes["x-axis"](this, t, { intersect: !0 });
}, getElementsAtEventForMode: function getElementsAtEventForMode(t, e, i) {
var n = o.modes[e];return "function" == typeof n ? n(this, t, i) : [];
}, getDatasetAtEvent: function getDatasetAtEvent(t) {
return o.modes.dataset(this, t, { intersect: !0 });
}, getDatasetMeta: function getDatasetMeta(t) {
var e = this.data.datasets[t];e._meta || (e._meta = {});var i = e._meta[this.id];return i || (i = e._meta[this.id] = { type: null, data: [], dataset: null, controller: null, hidden: null, xAxisID: null, yAxisID: null }), i;
}, getVisibleDatasetCount: function getVisibleDatasetCount() {
for (var t = 0, e = 0, i = this.data.datasets.length; e < i; ++e) {
this.isDatasetVisible(e) && t++;
}return t;
}, isDatasetVisible: function isDatasetVisible(t) {
var e = this.getDatasetMeta(t);return "boolean" == typeof e.hidden ? !e.hidden : !this.data.datasets[t].hidden;
}, generateLegend: function generateLegend() {
return this.options.legendCallback(this);
}, destroyDatasetMeta: function destroyDatasetMeta(t) {
var e = this.id,
i = this.data.datasets[t],
n = i._meta && i._meta[e];n && (n.controller.destroy(), delete i._meta[e]);
}, destroy: function destroy() {
var e,
i,
n = this,
o = n.canvas;for (n.stop(), e = 0, i = n.data.datasets.length; e < i; ++e) {
n.destroyDatasetMeta(e);
}o && (n.unbindEvents(), a.canvas.clear(n), s.releaseContext(n.ctx), n.canvas = null, n.ctx = null), l.notify(n, "destroy"), delete t.instances[n.id];
}, toBase64Image: function toBase64Image() {
return this.canvas.toDataURL.apply(this.canvas, arguments);
}, initToolTip: function initToolTip() {
var e = this;e.tooltip = new t.Tooltip({ _chart: e, _chartInstance: e, _data: e.data, _options: e.options.tooltips }, e);
}, bindEvents: function bindEvents() {
var t = this,
e = t._listeners = {},
i = function i() {
t.eventHandler.apply(t, arguments);
};a.each(t.options.events, function (n) {
s.addEventListener(t, n, i), e[n] = i;
}), t.options.responsive && (i = function i() {
t.resize();
}, s.addEventListener(t, "resize", i), e.resize = i);
}, unbindEvents: function unbindEvents() {
var t = this,
e = t._listeners;e && (delete t._listeners, a.each(e, function (e, i) {
s.removeEventListener(t, i, e);
}));
}, updateHoverStyle: function updateHoverStyle(t, e, i) {
var n,
a,
o,
r = i ? "setHoverStyle" : "removeHoverStyle";for (a = 0, o = t.length; a < o; ++a) {
(n = t[a]) && this.getDatasetMeta(n._datasetIndex).controller[r](n);
}
}, eventHandler: function eventHandler(t) {
var e = this,
i = e.tooltip;if (!1 !== l.notify(e, "beforeEvent", [t])) {
e._bufferedRender = !0, e._bufferedRequest = null;var n = e.handleEvent(t);i && (n = i._start ? i.handleEvent(t) : n | i.handleEvent(t)), l.notify(e, "afterEvent", [t]);var a = e._bufferedRequest;return a ? e.render(a) : n && !e.animating && (e.stop(), e.render(e.options.hover.animationDuration, !0)), e._bufferedRender = !1, e._bufferedRequest = null, e;
}
}, handleEvent: function handleEvent(t) {
var e,
i = this,
n = i.options || {},
o = n.hover;return i.lastActive = i.lastActive || [], "mouseout" === t.type ? i.active = [] : i.active = i.getElementsAtEventForMode(t, o.mode, o), a.callback(n.onHover || n.hover.onHover, [t.native, i.active], i), "mouseup" !== t.type && "click" !== t.type || n.onClick && n.onClick.call(i, t.native, i.active), i.lastActive.length && i.updateHoverStyle(i.lastActive, o.mode, !1), i.active.length && o.mode && i.updateHoverStyle(i.active, o.mode, !0), e = !a.arrayEquals(i.active, i.lastActive), i.lastActive = i.active, e;
} }), t.Controller = t;
};
}, { 25: 25, 28: 28, 30: 30, 31: 31, 45: 45, 48: 48 }], 24: [function (t, e, i) {
"use strict";
var n = t(45);e.exports = function (t) {
var e = ["push", "pop", "shift", "splice", "unshift"];function i(t, i) {
var n = t._chartjs;if (n) {
var a = n.listeners,
o = a.indexOf(i);-1 !== o && a.splice(o, 1), a.length > 0 || (e.forEach(function (e) {
delete t[e];
}), delete t._chartjs);
}
}t.DatasetController = function (t, e) {
this.initialize(t, e);
}, n.extend(t.DatasetController.prototype, { datasetElementType: null, dataElementType: null, initialize: function initialize(t, e) {
this.chart = t, this.index = e, this.linkScales(), this.addElements();
}, updateIndex: function updateIndex(t) {
this.index = t;
}, linkScales: function linkScales() {
var t = this,
e = t.getMeta(),
i = t.getDataset();null !== e.xAxisID && e.xAxisID in t.chart.scales || (e.xAxisID = i.xAxisID || t.chart.options.scales.xAxes[0].id), null !== e.yAxisID && e.yAxisID in t.chart.scales || (e.yAxisID = i.yAxisID || t.chart.options.scales.yAxes[0].id);
}, getDataset: function getDataset() {
return this.chart.data.datasets[this.index];
}, getMeta: function getMeta() {
return this.chart.getDatasetMeta(this.index);
}, getScaleForId: function getScaleForId(t) {
return this.chart.scales[t];
}, reset: function reset() {
this.update(!0);
}, destroy: function destroy() {
this._data && i(this._data, this);
}, createMetaDataset: function createMetaDataset() {
var t = this.datasetElementType;return t && new t({ _chart: this.chart, _datasetIndex: this.index });
}, createMetaData: function createMetaData(t) {
var e = this.dataElementType;return e && new e({ _chart: this.chart, _datasetIndex: this.index, _index: t });
}, addElements: function addElements() {
var t,
e,
i = this.getMeta(),
n = this.getDataset().data || [],
a = i.data;for (t = 0, e = n.length; t < e; ++t) {
a[t] = a[t] || this.createMetaData(t);
}i.dataset = i.dataset || this.createMetaDataset();
}, addElementAndReset: function addElementAndReset(t) {
var e = this.createMetaData(t);this.getMeta().data.splice(t, 0, e), this.updateElement(e, t, !0);
}, buildOrUpdateElements: function buildOrUpdateElements() {
var t,
a,
o = this,
r = o.getDataset(),
s = r.data || (r.data = []);o._data !== s && (o._data && i(o._data, o), a = o, (t = s)._chartjs ? t._chartjs.listeners.push(a) : (Object.defineProperty(t, "_chartjs", { configurable: !0, enumerable: !1, value: { listeners: [a] } }), e.forEach(function (e) {
var i = "onData" + e.charAt(0).toUpperCase() + e.slice(1),
a = t[e];Object.defineProperty(t, e, { configurable: !0, enumerable: !1, value: function value() {
var e = Array.prototype.slice.call(arguments),
o = a.apply(this, e);return n.each(t._chartjs.listeners, function (t) {
"function" == typeof t[i] && t[i].apply(t, e);
}), o;
} });
})), o._data = s), o.resyncElements();
}, update: n.noop, transition: function transition(t) {
for (var e = this.getMeta(), i = e.data || [], n = i.length, a = 0; a < n; ++a) {
i[a].transition(t);
}e.dataset && e.dataset.transition(t);
}, draw: function draw() {
var t = this.getMeta(),
e = t.data || [],
i = e.length,
n = 0;for (t.dataset && t.dataset.draw(); n < i; ++n) {
e[n].draw();
}
}, removeHoverStyle: function removeHoverStyle(t, e) {
var i = this.chart.data.datasets[t._datasetIndex],
a = t._index,
o = t.custom || {},
r = n.valueAtIndexOrDefault,
s = t._model;s.backgroundColor = o.backgroundColor ? o.backgroundColor : r(i.backgroundColor, a, e.backgroundColor), s.borderColor = o.borderColor ? o.borderColor : r(i.borderColor, a, e.borderColor), s.borderWidth = o.borderWidth ? o.borderWidth : r(i.borderWidth, a, e.borderWidth);
}, setHoverStyle: function setHoverStyle(t) {
var e = this.chart.data.datasets[t._datasetIndex],
i = t._index,
a = t.custom || {},
o = n.valueAtIndexOrDefault,
r = n.getHoverColor,
s = t._model;s.backgroundColor = a.hoverBackgroundColor ? a.hoverBackgroundColor : o(e.hoverBackgroundColor, i, r(s.backgroundColor)), s.borderColor = a.hoverBorderColor ? a.hoverBorderColor : o(e.hoverBorderColor, i, r(s.borderColor)), s.borderWidth = a.hoverBorderWidth ? a.hoverBorderWidth : o(e.hoverBorderWidth, i, s.borderWidth);
}, resyncElements: function resyncElements() {
var t = this.getMeta(),
e = this.getDataset().data,
i = t.data.length,
n = e.length;n < i ? t.data.splice(n, i - n) : n > i && this.insertElements(i, n - i);
}, insertElements: function insertElements(t, e) {
for (var i = 0; i < e; ++i) {
this.addElementAndReset(t + i);
}
}, onDataPush: function onDataPush() {
this.insertElements(this.getDataset().data.length - 1, arguments.length);
}, onDataPop: function onDataPop() {
this.getMeta().data.pop();
}, onDataShift: function onDataShift() {
this.getMeta().data.shift();
}, onDataSplice: function onDataSplice(t, e) {
this.getMeta().data.splice(t, e), this.insertElements(t, arguments.length - 2);
}, onDataUnshift: function onDataUnshift() {
this.insertElements(0, arguments.length);
} }), t.DatasetController.extend = n.inherits;
};
}, { 45: 45 }], 25: [function (t, e, i) {
"use strict";
var n = t(45);e.exports = { _set: function _set(t, e) {
return n.merge(this[t] || (this[t] = {}), e);
} };
}, { 45: 45 }], 26: [function (t, e, i) {
"use strict";
var n = t(3),
a = t(45);var o = function o(t) {
a.extend(this, t), this.initialize.apply(this, arguments);
};a.extend(o.prototype, { initialize: function initialize() {
this.hidden = !1;
}, pivot: function pivot() {
var t = this;return t._view || (t._view = a.clone(t._model)), t._start = {}, t;
}, transition: function transition(t) {
var e = this,
i = e._model,
a = e._start,
o = e._view;return i && 1 !== t ? (o || (o = e._view = {}), a || (a = e._start = {}), function (t, e, i, a) {
var o,
r,
s,
l,
u,
d,
c,
h,
f,
g = Object.keys(i);for (o = 0, r = g.length; o < r; ++o) {
if (d = i[s = g[o]], e.hasOwnProperty(s) || (e[s] = d), (l = e[s]) !== d && "_" !== s[0]) {
if (t.hasOwnProperty(s) || (t[s] = l), (c = typeof d === "undefined" ? "undefined" : _typeof(d)) == _typeof(u = t[s])) if ("string" === c) {
if ((h = n(u)).valid && (f = n(d)).valid) {
e[s] = f.mix(h, a).rgbString();continue;
}
} else if ("number" === c && isFinite(u) && isFinite(d)) {
e[s] = u + (d - u) * a;continue;
}e[s] = d;
}
}
}(a, o, i, t), e) : (e._view = i, e._start = null, e);
}, tooltipPosition: function tooltipPosition() {
return { x: this._model.x, y: this._model.y };
}, hasValue: function hasValue() {
return a.isNumber(this._model.x) && a.isNumber(this._model.y);
} }), o.extend = a.inherits, e.exports = o;
}, { 3: 3, 45: 45 }], 27: [function (t, e, i) {
"use strict";
var n = t(3),
a = t(25),
o = t(45);e.exports = function (t) {
function e(t, e, i) {
var n;return "string" == typeof t ? (n = parseInt(t, 10), -1 !== t.indexOf("%") && (n = n / 100 * e.parentNode[i])) : n = t, n;
}function i(t) {
return null != t && "none" !== t;
}function r(t, n, a) {
var o = document.defaultView,
r = t.parentNode,
s = o.getComputedStyle(t)[n],
l = o.getComputedStyle(r)[n],
u = i(s),
d = i(l),
c = Number.POSITIVE_INFINITY;return u || d ? Math.min(u ? e(s, t, a) : c, d ? e(l, r, a) : c) : "none";
}o.configMerge = function () {
return o.merge(o.clone(arguments[0]), [].slice.call(arguments, 1), { merger: function merger(e, i, n, a) {
var r = i[e] || {},
s = n[e];"scales" === e ? i[e] = o.scaleMerge(r, s) : "scale" === e ? i[e] = o.merge(r, [t.scaleService.getScaleDefaults(s.type), s]) : o._merger(e, i, n, a);
} });
}, o.scaleMerge = function () {
return o.merge(o.clone(arguments[0]), [].slice.call(arguments, 1), { merger: function merger(e, i, n, a) {
if ("xAxes" === e || "yAxes" === e) {
var r,
s,
l,
u = n[e].length;for (i[e] || (i[e] = []), r = 0; r < u; ++r) {
l = n[e][r], s = o.valueOrDefault(l.type, "xAxes" === e ? "category" : "linear"), r >= i[e].length && i[e].push({}), !i[e][r].type || l.type && l.type !== i[e][r].type ? o.merge(i[e][r], [t.scaleService.getScaleDefaults(s), l]) : o.merge(i[e][r], l);
}
} else o._merger(e, i, n, a);
} });
}, o.where = function (t, e) {
if (o.isArray(t) && Array.prototype.filter) return t.filter(e);var i = [];return o.each(t, function (t) {
e(t) && i.push(t);
}), i;
}, o.findIndex = Array.prototype.findIndex ? function (t, e, i) {
return t.findIndex(e, i);
} : function (t, e, i) {
i = void 0 === i ? t : i;for (var n = 0, a = t.length; n < a; ++n) {
if (e.call(i, t[n], n, t)) return n;
}return -1;
}, o.findNextWhere = function (t, e, i) {
o.isNullOrUndef(i) && (i = -1);for (var n = i + 1; n < t.length; n++) {
var a = t[n];if (e(a)) return a;
}
}, o.findPreviousWhere = function (t, e, i) {
o.isNullOrUndef(i) && (i = t.length);for (var n = i - 1; n >= 0; n--) {
var a = t[n];if (e(a)) return a;
}
}, o.isNumber = function (t) {
return !isNaN(parseFloat(t)) && isFinite(t);
}, o.almostEquals = function (t, e, i) {
return Math.abs(t - e) < i;
}, o.almostWhole = function (t, e) {
var i = Math.round(t);return i - e < t && i + e > t;
}, o.max = function (t) {
return t.reduce(function (t, e) {
return isNaN(e) ? t : Math.max(t, e);
}, Number.NEGATIVE_INFINITY);
}, o.min = function (t) {
return t.reduce(function (t, e) {
return isNaN(e) ? t : Math.min(t, e);
}, Number.POSITIVE_INFINITY);
}, o.sign = Math.sign ? function (t) {
return Math.sign(t);
} : function (t) {
return 0 === (t = +t) || isNaN(t) ? t : t > 0 ? 1 : -1;
}, o.log10 = Math.log10 ? function (t) {
return Math.log10(t);
} : function (t) {
var e = Math.log(t) * Math.LOG10E,
i = Math.round(e);return t === Math.pow(10, i) ? i : e;
}, o.toRadians = function (t) {
return t * (Math.PI / 180);
}, o.toDegrees = function (t) {
return t * (180 / Math.PI);
}, o.getAngleFromPoint = function (t, e) {
var i = e.x - t.x,
n = e.y - t.y,
a = Math.sqrt(i * i + n * n),
o = Math.atan2(n, i);return o < -.5 * Math.PI && (o += 2 * Math.PI), { angle: o, distance: a };
}, o.distanceBetweenPoints = function (t, e) {
return Math.sqrt(Math.pow(e.x - t.x, 2) + Math.pow(e.y - t.y, 2));
}, o.aliasPixel = function (t) {
return t % 2 == 0 ? 0 : .5;
}, o.splineCurve = function (t, e, i, n) {
var a = t.skip ? e : t,
o = e,
r = i.skip ? e : i,
s = Math.sqrt(Math.pow(o.x - a.x, 2) + Math.pow(o.y - a.y, 2)),
l = Math.sqrt(Math.pow(r.x - o.x, 2) + Math.pow(r.y - o.y, 2)),
u = s / (s + l),
d = l / (s + l),
c = n * (u = isNaN(u) ? 0 : u),
h = n * (d = isNaN(d) ? 0 : d);return { previous: { x: o.x - c * (r.x - a.x), y: o.y - c * (r.y - a.y) }, next: { x: o.x + h * (r.x - a.x), y: o.y + h * (r.y - a.y) } };
}, o.EPSILON = Number.EPSILON || 1e-14, o.splineCurveMonotone = function (t) {
var e,
i,
n,
a,
r,
s,
l,
u,
d,
c = (t || []).map(function (t) {
return { model: t._model, deltaK: 0, mK: 0 };
}),
h = c.length;for (e = 0; e < h; ++e) {
if (!(n = c[e]).model.skip) {
if (i = e > 0 ? c[e - 1] : null, (a = e < h - 1 ? c[e + 1] : null) && !a.model.skip) {
var f = a.model.x - n.model.x;n.deltaK = 0 !== f ? (a.model.y - n.model.y) / f : 0;
}!i || i.model.skip ? n.mK = n.deltaK : !a || a.model.skip ? n.mK = i.deltaK : this.sign(i.deltaK) !== this.sign(n.deltaK) ? n.mK = 0 : n.mK = (i.deltaK + n.deltaK) / 2;
}
}for (e = 0; e < h - 1; ++e) {
n = c[e], a = c[e + 1], n.model.skip || a.model.skip || (o.almostEquals(n.deltaK, 0, this.EPSILON) ? n.mK = a.mK = 0 : (r = n.mK / n.deltaK, s = a.mK / n.deltaK, (u = Math.pow(r, 2) + Math.pow(s, 2)) <= 9 || (l = 3 / Math.sqrt(u), n.mK = r * l * n.deltaK, a.mK = s * l * n.deltaK)));
}for (e = 0; e < h; ++e) {
(n = c[e]).model.skip || (i = e > 0 ? c[e - 1] : null, a = e < h - 1 ? c[e + 1] : null, i && !i.model.skip && (d = (n.model.x - i.model.x) / 3, n.model.controlPointPreviousX = n.model.x - d, n.model.controlPointPreviousY = n.model.y - d * n.mK), a && !a.model.skip && (d = (a.model.x - n.model.x) / 3, n.model.controlPointNextX = n.model.x + d, n.model.controlPointNextY = n.model.y + d * n.mK));
}
}, o.nextItem = function (t, e, i) {
return i ? e >= t.length - 1 ? t[0] : t[e + 1] : e >= t.length - 1 ? t[t.length - 1] : t[e + 1];
}, o.previousItem = function (t, e, i) {
return i ? e <= 0 ? t[t.length - 1] : t[e - 1] : e <= 0 ? t[0] : t[e - 1];
}, o.niceNum = function (t, e) {
var i = Math.floor(o.log10(t)),
n = t / Math.pow(10, i);return (e ? n < 1.5 ? 1 : n < 3 ? 2 : n < 7 ? 5 : 10 : n <= 1 ? 1 : n <= 2 ? 2 : n <= 5 ? 5 : 10) * Math.pow(10, i);
}, o.requestAnimFrame = "undefined" == typeof window ? function (t) {
t();
} : window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (t) {
return window.setTimeout(t, 1e3 / 60);
}, o.getRelativePosition = function (t, e) {
var i,
n,
a = t.originalEvent || t,
r = t.currentTarget || t.srcElement,
s = r.getBoundingClientRect(),
l = a.touches;l && l.length > 0 ? (i = l[0].clientX, n = l[0].clientY) : (i = a.clientX, n = a.clientY);var u = parseFloat(o.getStyle(r, "padding-left")),
d = parseFloat(o.getStyle(r, "padding-top")),
c = parseFloat(o.getStyle(r, "padding-right")),
h = parseFloat(o.getStyle(r, "padding-bottom")),
f = s.right - s.left - u - c,
g = s.bottom - s.top - d - h;return { x: i = Math.round((i - s.left - u) / f * r.width / e.currentDevicePixelRatio), y: n = Math.round((n - s.top - d) / g * r.height / e.currentDevicePixelRatio) };
}, o.getConstraintWidth = function (t) {
return r(t, "max-width", "clientWidth");
}, o.getConstraintHeight = function (t) {
return r(t, "max-height", "clientHeight");
}, o.getMaximumWidth = function (t) {
var e = t.parentNode;if (!e) return t.clientWidth;var i = parseInt(o.getStyle(e, "padding-left"), 10),
n = parseInt(o.getStyle(e, "padding-right"), 10),
a = e.clientWidth - i - n,
r = o.getConstraintWidth(t);return isNaN(r) ? a : Math.min(a, r);
}, o.getMaximumHeight = function (t) {
var e = t.parentNode;if (!e) return t.clientHeight;var i = parseInt(o.getStyle(e, "padding-top"), 10),
n = parseInt(o.getStyle(e, "padding-bottom"), 10),
a = e.clientHeight - i - n,
r = o.getConstraintHeight(t);return isNaN(r) ? a : Math.min(a, r);
}, o.getStyle = function (t, e) {
return t.currentStyle ? t.currentStyle[e] : document.defaultView.getComputedStyle(t, null).getPropertyValue(e);
}, o.retinaScale = function (t, e) {
var i = t.currentDevicePixelRatio = e || window.devicePixelRatio || 1;if (1 !== i) {
var n = t.canvas,
a = t.height,
o = t.width;n.height = a * i, n.width = o * i, t.ctx.scale(i, i), n.style.height || n.style.width || (n.style.height = a + "px", n.style.width = o + "px");
}
}, o.fontString = function (t, e, i) {
return e + " " + t + "px " + i;
}, o.longestText = function (t, e, i, n) {
var a = (n = n || {}).data = n.data || {},
r = n.garbageCollect = n.garbageCollect || [];n.font !== e && (a = n.data = {}, r = n.garbageCollect = [], n.font = e), t.font = e;var s = 0;o.each(i, function (e) {
null != e && !0 !== o.isArray(e) ? s = o.measureText(t, a, r, s, e) : o.isArray(e) && o.each(e, function (e) {
null == e || o.isArray(e) || (s = o.measureText(t, a, r, s, e));
});
});var l = r.length / 2;if (l > i.length) {
for (var u = 0; u < l; u++) {
delete a[r[u]];
}r.splice(0, l);
}return s;
}, o.measureText = function (t, e, i, n, a) {
var o = e[a];return o || (o = e[a] = t.measureText(a).width, i.push(a)), o > n && (n = o), n;
}, o.numberOfLabelLines = function (t) {
var e = 1;return o.each(t, function (t) {
o.isArray(t) && t.length > e && (e = t.length);
}), e;
}, o.color = n ? function (t) {
return t instanceof CanvasGradient && (t = a.global.defaultColor), n(t);
} : function (t) {
return console.error("Color.js not found!"), t;
}, o.getHoverColor = function (t) {
return t instanceof CanvasPattern ? t : o.color(t).saturate(.5).darken(.1).rgbString();
};
};
}, { 25: 25, 3: 3, 45: 45 }], 28: [function (t, e, i) {
"use strict";
var n = t(45);function a(t, e) {
return t.native ? { x: t.x, y: t.y } : n.getRelativePosition(t, e);
}function o(t, e) {
var i, n, a, o, r;for (n = 0, o = t.data.datasets.length; n < o; ++n) {
if (t.isDatasetVisible(n)) for (a = 0, r = (i = t.getDatasetMeta(n)).data.length; a < r; ++a) {
var s = i.data[a];s._view.skip || e(s);
}
}
}function r(t, e) {
var i = [];return o(t, function (t) {
t.inRange(e.x, e.y) && i.push(t);
}), i;
}function s(t, e, i, n) {
var a = Number.POSITIVE_INFINITY,
r = [];return o(t, function (t) {
if (!i || t.inRange(e.x, e.y)) {
var o = t.getCenterPoint(),
s = n(e, o);s < a ? (r = [t], a = s) : s === a && r.push(t);
}
}), r;
}function l(t) {
var e = -1 !== t.indexOf("x"),
i = -1 !== t.indexOf("y");return function (t, n) {
var a = e ? Math.abs(t.x - n.x) : 0,
o = i ? Math.abs(t.y - n.y) : 0;return Math.sqrt(Math.pow(a, 2) + Math.pow(o, 2));
};
}function u(t, e, i) {
var n = a(e, t);i.axis = i.axis || "x";var o = l(i.axis),
u = i.intersect ? r(t, n) : s(t, n, !1, o),
d = [];return u.length ? (t.data.datasets.forEach(function (e, i) {
if (t.isDatasetVisible(i)) {
var n = t.getDatasetMeta(i).data[u[0]._index];n && !n._view.skip && d.push(n);
}
}), d) : [];
}e.exports = { modes: { single: function single(t, e) {
var i = a(e, t),
n = [];return o(t, function (t) {
if (t.inRange(i.x, i.y)) return n.push(t), n;
}), n.slice(0, 1);
}, label: u, index: u, dataset: function dataset(t, e, i) {
var n = a(e, t);i.axis = i.axis || "xy";var o = l(i.axis),
u = i.intersect ? r(t, n) : s(t, n, !1, o);return u.length > 0 && (u = t.getDatasetMeta(u[0]._datasetIndex).data), u;
}, "x-axis": function xAxis(t, e) {
return u(t, e, { intersect: !1 });
}, point: function point(t, e) {
return r(t, a(e, t));
}, nearest: function nearest(t, e, i) {
var n = a(e, t);i.axis = i.axis || "xy";var o = l(i.axis),
r = s(t, n, i.intersect, o);return r.length > 1 && r.sort(function (t, e) {
var i = t.getArea() - e.getArea();return 0 === i && (i = t._datasetIndex - e._datasetIndex), i;
}), r.slice(0, 1);
}, x: function x(t, e, i) {
var n = a(e, t),
r = [],
s = !1;return o(t, function (t) {
t.inXRange(n.x) && r.push(t), t.inRange(n.x, n.y) && (s = !0);
}), i.intersect && !s && (r = []), r;
}, y: function y(t, e, i) {
var n = a(e, t),
r = [],
s = !1;return o(t, function (t) {
t.inYRange(n.y) && r.push(t), t.inRange(n.x, n.y) && (s = !0);
}), i.intersect && !s && (r = []), r;
} } };
}, { 45: 45 }], 29: [function (t, e, i) {
"use strict";
t(25)._set("global", { responsive: !0, responsiveAnimationDuration: 0, maintainAspectRatio: !0, events: ["mousemove", "mouseout", "click", "touchstart", "touchmove"], hover: { onHover: null, mode: "nearest", intersect: !0, animationDuration: 400 }, onClick: null, defaultColor: "rgba(0,0,0,0.1)", defaultFontColor: "#666", defaultFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif", defaultFontSize: 12, defaultFontStyle: "normal", showLines: !0, elements: {}, layout: { padding: { top: 0, right: 0, bottom: 0, left: 0 } } }), e.exports = function () {
var t = function t(_t, e) {
return this.construct(_t, e), this;
};return t.Chart = t, t;
};
}, { 25: 25 }], 30: [function (t, e, i) {
"use strict";
var n = t(45);function a(t, e) {
return n.where(t, function (t) {
return t.position === e;
});
}function o(t, e) {
t.forEach(function (t, e) {
return t._tmpIndex_ = e, t;
}), t.sort(function (t, i) {
var n = e ? i : t,
a = e ? t : i;return n.weight === a.weight ? n._tmpIndex_ - a._tmpIndex_ : n.weight - a.weight;
}), t.forEach(function (t) {
delete t._tmpIndex_;
});
}e.exports = { defaults: {}, addBox: function addBox(t, e) {
t.boxes || (t.boxes = []), e.fullWidth = e.fullWidth || !1, e.position = e.position || "top", e.weight = e.weight || 0, t.boxes.push(e);
}, removeBox: function removeBox(t, e) {
var i = t.boxes ? t.boxes.indexOf(e) : -1;-1 !== i && t.boxes.splice(i, 1);
}, configure: function configure(t, e, i) {
for (var n, a = ["fullWidth", "position", "weight"], o = a.length, r = 0; r < o; ++r) {
n = a[r], i.hasOwnProperty(n) && (e[n] = i[n]);
}
}, update: function update(t, e, i) {
if (t) {
var r = t.options.layout || {},
s = n.options.toPadding(r.padding),
l = s.left,
u = s.right,
d = s.top,
c = s.bottom,
h = a(t.boxes, "left"),
f = a(t.boxes, "right"),
g = a(t.boxes, "top"),
p = a(t.boxes, "bottom"),
m = a(t.boxes, "chartArea");o(h, !0), o(f, !1), o(g, !0), o(p, !1);var v = e - l - u,
b = i - d - c,
x = b / 2,
y = (e - v / 2) / (h.length + f.length),
k = (i - x) / (g.length + p.length),
M = v,
w = b,
S = [];n.each(h.concat(f, g, p), function (t) {
var e,
i = t.isHorizontal();i ? (e = t.update(t.fullWidth ? v : M, k), w -= e.height) : (e = t.update(y, w), M -= e.width), S.push({ horizontal: i, minSize: e, box: t });
});var C = 0,
_ = 0,
D = 0,
I = 0;n.each(g.concat(p), function (t) {
if (t.getPadding) {
var e = t.getPadding();C = Math.max(C, e.left), _ = Math.max(_, e.right);
}
}), n.each(h.concat(f), function (t) {
if (t.getPadding) {
var e = t.getPadding();D = Math.max(D, e.top), I = Math.max(I, e.bottom);
}
});var P = l,
A = u,
T = d,
F = c;n.each(h.concat(f), N), n.each(h, function (t) {
P += t.width;
}), n.each(f, function (t) {
A += t.width;
}), n.each(g.concat(p), N), n.each(g, function (t) {
T += t.height;
}), n.each(p, function (t) {
F += t.height;
}), n.each(h.concat(f), function (t) {
var e = n.findNextWhere(S, function (e) {
return e.box === t;
}),
i = { left: 0, right: 0, top: T, bottom: F };e && t.update(e.minSize.width, w, i);
}), P = l, A = u, T = d, F = c, n.each(h, function (t) {
P += t.width;
}), n.each(f, function (t) {
A += t.width;
}), n.each(g, function (t) {
T += t.height;
}), n.each(p, function (t) {
F += t.height;
});var O = Math.max(C - P, 0);P += O, A += Math.max(_ - A, 0);var R = Math.max(D - T, 0);T += R, F += Math.max(I - F, 0);var L = i - T - F,
z = e - P - A;z === M && L === w || (n.each(h, function (t) {
t.height = L;
}), n.each(f, function (t) {
t.height = L;
}), n.each(g, function (t) {
t.fullWidth || (t.width = z);
}), n.each(p, function (t) {
t.fullWidth || (t.width = z);
}), w = L, M = z);var B = l + O,
W = d + R;n.each(h.concat(g), V), B += M, W += w, n.each(f, V), n.each(p, V), t.chartArea = { left: P, top: T, right: P + M, bottom: T + w }, n.each(m, function (e) {
e.left = t.chartArea.left, e.top = t.chartArea.top, e.right = t.chartArea.right, e.bottom = t.chartArea.bottom, e.update(M, w);
});
}function N(t) {
var e = n.findNextWhere(S, function (e) {
return e.box === t;
});if (e) if (t.isHorizontal()) {
var i = { left: Math.max(P, C), right: Math.max(A, _), top: 0, bottom: 0 };t.update(t.fullWidth ? v : M, b / 2, i);
} else t.update(e.minSize.width, w);
}function V(t) {
t.isHorizontal() ? (t.left = t.fullWidth ? l : P, t.right = t.fullWidth ? e - u : P + M, t.top = W, t.bottom = W + t.height, W = t.bottom) : (t.left = B, t.right = B + t.width, t.top = T, t.bottom = T + w, B = t.right);
}
} };
}, { 45: 45 }], 31: [function (t, e, i) {
"use strict";
var n = t(25),
a = t(45);n._set("global", { plugins: {} }), e.exports = { _plugins: [], _cacheId: 0, register: function register(t) {
var e = this._plugins;[].concat(t).forEach(function (t) {
-1 === e.indexOf(t) && e.push(t);
}), this._cacheId++;
}, unregister: function unregister(t) {
var e = this._plugins;[].concat(t).forEach(function (t) {
var i = e.indexOf(t);-1 !== i && e.splice(i, 1);
}), this._cacheId++;
}, clear: function clear() {
this._plugins = [], this._cacheId++;
}, count: function count() {
return this._plugins.length;
}, getAll: function getAll() {
return this._plugins;
}, notify: function notify(t, e, i) {
var n,
a,
o,
r,
s,
l = this.descriptors(t),
u = l.length;for (n = 0; n < u; ++n) {
if ("function" == typeof (s = (o = (a = l[n]).plugin)[e]) && ((r = [t].concat(i || [])).push(a.options), !1 === s.apply(o, r))) return !1;
}return !0;
}, descriptors: function descriptors(t) {
var e = t.$plugins || (t.$plugins = {});if (e.id === this._cacheId) return e.descriptors;var i = [],
o = [],
r = t && t.config || {},
s = r.options && r.options.plugins || {};return this._plugins.concat(r.plugins || []).forEach(function (t) {
if (-1 === i.indexOf(t)) {
var e = t.id,
r = s[e];!1 !== r && (!0 === r && (r = a.clone(n.global.plugins[e])), i.push(t), o.push({ plugin: t, options: r || {} }));
}
}), e.descriptors = o, e.id = this._cacheId, o;
}, _invalidate: function _invalidate(t) {
delete t.$plugins;
} };
}, { 25: 25, 45: 45 }], 32: [function (t, e, i) {
"use strict";
var n = t(25),
a = t(26),
o = t(45),
r = t(34);function s(t) {
var e,
i,
n = [];for (e = 0, i = t.length; e < i; ++e) {
n.push(t[e].label);
}return n;
}function l(t, e, i) {
var n = t.getPixelForTick(e);return i && (n -= 0 === e ? (t.getPixelForTick(1) - n) / 2 : (n - t.getPixelForTick(e - 1)) / 2), n;
}n._set("scale", { display: !0, position: "left", offset: !1, gridLines: { display: !0, color: "rgba(0, 0, 0, 0.1)", lineWidth: 1, drawBorder: !0, drawOnChartArea: !0, drawTicks: !0, tickMarkLength: 10, zeroLineWidth: 1, zeroLineColor: "rgba(0,0,0,0.25)", zeroLineBorderDash: [], zeroLineBorderDashOffset: 0, offsetGridLines: !1, borderDash: [], borderDashOffset: 0 }, scaleLabel: { display: !1, labelString: "", lineHeight: 1.2, padding: { top: 4, bottom: 4 } }, ticks: { beginAtZero: !1, minRotation: 0, maxRotation: 50, mirror: !1, padding: 0, reverse: !1, display: !0, autoSkip: !0, autoSkipPadding: 0, labelOffset: 0, callback: r.formatters.values, minor: {}, major: {} } }), e.exports = function (t) {
function e(t, e, i) {
return o.isArray(e) ? o.longestText(t, i, e) : t.measureText(e).width;
}function i(t) {
var e = o.valueOrDefault,
i = n.global,
a = e(t.fontSize, i.defaultFontSize),
r = e(t.fontStyle, i.defaultFontStyle),
s = e(t.fontFamily, i.defaultFontFamily);return { size: a, style: r, family: s, font: o.fontString(a, r, s) };
}function r(t) {
return o.options.toLineHeight(o.valueOrDefault(t.lineHeight, 1.2), o.valueOrDefault(t.fontSize, n.global.defaultFontSize));
}t.Scale = a.extend({ getPadding: function getPadding() {
return { left: this.paddingLeft || 0, top: this.paddingTop || 0, right: this.paddingRight || 0, bottom: this.paddingBottom || 0 };
}, getTicks: function getTicks() {
return this._ticks;
}, mergeTicksOptions: function mergeTicksOptions() {
var t = this.options.ticks;for (var e in !1 === t.minor && (t.minor = { display: !1 }), !1 === t.major && (t.major = { display: !1 }), t) {
"major" !== e && "minor" !== e && (void 0 === t.minor[e] && (t.minor[e] = t[e]), void 0 === t.major[e] && (t.major[e] = t[e]));
}
}, beforeUpdate: function beforeUpdate() {
o.callback(this.options.beforeUpdate, [this]);
}, update: function update(t, e, i) {
var n,
a,
r,
s,
l,
u,
d = this;for (d.beforeUpdate(), d.maxWidth = t, d.maxHeight = e, d.margins = o.extend({ left: 0, right: 0, top: 0, bottom: 0 }, i), d.longestTextCache = d.longestTextCache || {}, d.beforeSetDimensions(), d.setDimensions(), d.afterSetDimensions(), d.beforeDataLimits(), d.determineDataLimits(), d.afterDataLimits(), d.beforeBuildTicks(), l = d.buildTicks() || [], d.afterBuildTicks(), d.beforeTickToLabelConversion(), r = d.convertTicksToLabels(l) || d.ticks, d.afterTickToLabelConversion(), d.ticks = r, n = 0, a = r.length; n < a; ++n) {
s = r[n], (u = l[n]) ? u.label = s : l.push(u = { label: s, major: !1 });
}return d._ticks = l, d.beforeCalculateTickRotation(), d.calculateTickRotation(), d.afterCalculateTickRotation(), d.beforeFit(), d.fit(), d.afterFit(), d.afterUpdate(), d.minSize;
}, afterUpdate: function afterUpdate() {
o.callback(this.options.afterUpdate, [this]);
}, beforeSetDimensions: function beforeSetDimensions() {
o.callback(this.options.beforeSetDimensions, [this]);
}, setDimensions: function setDimensions() {
var t = this;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;
}, afterSetDimensions: function afterSetDimensions() {
o.callback(this.options.afterSetDimensions, [this]);
}, beforeDataLimits: function beforeDataLimits() {
o.callback(this.options.beforeDataLimits, [this]);
}, determineDataLimits: o.noop, afterDataLimits: function afterDataLimits() {
o.callback(this.options.afterDataLimits, [this]);
}, beforeBuildTicks: function beforeBuildTicks() {
o.callback(this.options.beforeBuildTicks, [this]);
}, buildTicks: o.noop, afterBuildTicks: function afterBuildTicks() {
o.callback(this.options.afterBuildTicks, [this]);
}, beforeTickToLabelConversion: function beforeTickToLabelConversion() {
o.callback(this.options.beforeTickToLabelConversion, [this]);
}, convertTicksToLabels: function convertTicksToLabels() {
var t = this.options.ticks;this.ticks = this.ticks.map(t.userCallback || t.callback, this);
}, afterTickToLabelConversion: function afterTickToLabelConversion() {
o.callback(this.options.afterTickToLabelConversion, [this]);
}, beforeCalculateTickRotation: function beforeCalculateTickRotation() {
o.callback(this.options.beforeCalculateTickRotation, [this]);
}, calculateTickRotation: function calculateTickRotation() {
var t = this,
e = t.ctx,
n = t.options.ticks,
a = s(t._ticks),
r = i(n);e.font = r.font;var l = n.minRotation || 0;if (a.length && t.options.display && t.isHorizontal()) for (var u, d = o.longestText(e, r.font, a, t.longestTextCache), c = d, h = t.getPixelForTick(1) - t.getPixelForTick(0) - 6; c > h && l < n.maxRotation;) {
var f = o.toRadians(l);if (u = Math.cos(f), Math.sin(f) * d > t.maxHeight) {
l--;break;
}l++, c = u * d;
}t.labelRotation = l;
}, afterCalculateTickRotation: function afterCalculateTickRotation() {
o.callback(this.options.afterCalculateTickRotation, [this]);
}, beforeFit: function beforeFit() {
o.callback(this.options.beforeFit, [this]);
}, fit: function fit() {
var t = this,
n = t.minSize = { width: 0, height: 0 },
a = s(t._ticks),
l = t.options,
u = l.ticks,
d = l.scaleLabel,
c = l.gridLines,
h = l.display,
f = t.isHorizontal(),
g = i(u),
p = l.gridLines.tickMarkLength;if (n.width = f ? t.isFullWidth() ? t.maxWidth - t.margins.left - t.margins.right : t.maxWidth : h && c.drawTicks ? p : 0, n.height = f ? h && c.drawTicks ? p : 0 : t.maxHeight, d.display && h) {
var m = r(d) + o.options.toPadding(d.padding).height;f ? n.height += m : n.width += m;
}if (u.display && h) {
var v = o.longestText(t.ctx, g.font, a, t.longestTextCache),
b = o.numberOfLabelLines(a),
x = .5 * g.size,
y = t.options.ticks.padding;if (f) {
t.longestLabelWidth = v;var k = o.toRadians(t.labelRotation),
M = Math.cos(k),
w = Math.sin(k) * v + g.size * b + x * (b - 1) + x;n.height = Math.min(t.maxHeight, n.height + w + y), t.ctx.font = g.font;var S = e(t.ctx, a[0], g.font),
C = e(t.ctx, a[a.length - 1], g.font);0 !== t.labelRotation ? (t.paddingLeft = "bottom" === l.position ? M * S + 3 : M * x + 3, t.paddingRight = "bottom" === l.position ? M * x + 3 : M * C + 3) : (t.paddingLeft = S / 2 + 3, t.paddingRight = C / 2 + 3);
} else u.mirror ? v = 0 : v += y + x, n.width = Math.min(t.maxWidth, n.width + v), t.paddingTop = g.size / 2, t.paddingBottom = g.size / 2;
}t.handleMargins(), t.width = n.width, t.height = n.height;
}, handleMargins: function handleMargins() {
var t = this;t.margins && (t.paddingLeft = Math.max(t.paddingLeft - t.margins.left, 0), t.paddingTop = Math.max(t.paddingTop - t.margins.top, 0), t.paddingRight = Math.max(t.paddingRight - t.margins.right, 0), t.paddingBottom = Math.max(t.paddingBottom - t.margins.bottom, 0));
}, afterFit: function afterFit() {
o.callback(this.options.afterFit, [this]);
}, isHorizontal: function isHorizontal() {
return "top" === this.options.position || "bottom" === this.options.position;
}, isFullWidth: function isFullWidth() {
return this.options.fullWidth;
}, getRightValue: function getRightValue(t) {
if (o.isNullOrUndef(t)) return NaN;if ("number" == typeof t && !isFinite(t)) return NaN;if (t) if (this.isHorizontal()) {
if (void 0 !== t.x) return this.getRightValue(t.x);
} else if (void 0 !== t.y) return this.getRightValue(t.y);return t;
}, getLabelForIndex: o.noop, getPixelForValue: o.noop, getValueForPixel: o.noop, getPixelForTick: function getPixelForTick(t) {
var e = this,
i = e.options.offset;if (e.isHorizontal()) {
var n = (e.width - (e.paddingLeft + e.paddingRight)) / Math.max(e._ticks.length - (i ? 0 : 1), 1),
a = n * t + e.paddingLeft;i && (a += n / 2);var o = e.left + Math.round(a);return o += e.isFullWidth() ? e.margins.left : 0;
}var r = e.height - (e.paddingTop + e.paddingBottom);return e.top + t * (r / (e._ticks.length - 1));
}, getPixelForDecimal: function getPixelForDecimal(t) {
var e = this;if (e.isHorizontal()) {
var i = (e.width - (e.paddingLeft + e.paddingRight)) * t + e.paddingLeft,
n = e.left + Math.round(i);return n += e.isFullWidth() ? e.margins.left : 0;
}return e.top + t * e.height;
}, getBasePixel: function getBasePixel() {
return this.getPixelForValue(this.getBaseValue());
}, getBaseValue: function getBaseValue() {
var t = this.min,
e = this.max;return this.beginAtZero ? 0 : t < 0 && e < 0 ? e : t > 0 && e > 0 ? t : 0;
}, _autoSkip: function _autoSkip(t) {
var e,
i,
n,
a,
r = this,
s = r.isHorizontal(),
l = r.options.ticks.minor,
u = t.length,
d = o.toRadians(r.labelRotation),
c = Math.cos(d),
h = r.longestLabelWidth * c,
f = [];for (l.maxTicksLimit && (a = l.maxTicksLimit), s && (e = !1, (h + l.autoSkipPadding) * u > r.width - (r.paddingLeft + r.paddingRight) && (e = 1 + Math.floor((h + l.autoSkipPadding) * u / (r.width - (r.paddingLeft + r.paddingRight)))), a && u > a && (e = Math.max(e, Math.floor(u / a)))), i = 0; i < u; i++) {
n = t[i], (e > 1 && i % e > 0 || i % e == 0 && i + e >= u) && i !== u - 1 && delete n.label, f.push(n);
}return f;
}, draw: function draw(t) {
var e = this,
a = e.options;if (a.display) {
var s = e.ctx,
u = n.global,
d = a.ticks.minor,
c = a.ticks.major || d,
h = a.gridLines,
f = a.scaleLabel,
g = 0 !== e.labelRotation,
p = e.isHorizontal(),
m = d.autoSkip ? e._autoSkip(e.getTicks()) : e.getTicks(),
v = o.valueOrDefault(d.fontColor, u.defaultFontColor),
b = i(d),
x = o.valueOrDefault(c.fontColor, u.defaultFontColor),
y = i(c),
k = h.drawTicks ? h.tickMarkLength : 0,
M = o.valueOrDefault(f.fontColor, u.defaultFontColor),
w = i(f),
S = o.options.toPadding(f.padding),
C = o.toRadians(e.labelRotation),
_ = [],
D = e.options.gridLines.lineWidth,
I = "right" === a.position ? e.right : e.right - D - k,
P = "right" === a.position ? e.right + k : e.right,
A = "bottom" === a.position ? e.top + D : e.bottom - k - D,
T = "bottom" === a.position ? e.top + D + k : e.bottom + D;if (o.each(m, function (i, n) {
if (!o.isNullOrUndef(i.label)) {
var r,
s,
c,
f,
v,
b,
x,
y,
M,
w,
S,
F,
O,
R,
L = i.label;n === e.zeroLineIndex && a.offset === h.offsetGridLines ? (r = h.zeroLineWidth, s = h.zeroLineColor, c = h.zeroLineBorderDash, f = h.zeroLineBorderDashOffset) : (r = o.valueAtIndexOrDefault(h.lineWidth, n), s = o.valueAtIndexOrDefault(h.color, n), c = o.valueOrDefault(h.borderDash, u.borderDash), f = o.valueOrDefault(h.borderDashOffset, u.borderDashOffset));var z = "middle",
B = "middle",
W = d.padding;if (p) {
var N = k + W;"bottom" === a.position ? (B = g ? "middle" : "top", z = g ? "right" : "center", R = e.top + N) : (B = g ? "middle" : "bottom", z = g ? "left" : "center", R = e.bottom - N);var V = l(e, n, h.offsetGridLines && m.length > 1);V < e.left && (s = "rgba(0,0,0,0)"), V += o.aliasPixel(r), O = e.getPixelForTick(n) + d.labelOffset, v = x = M = S = V, b = A, y = T, w = t.top, F = t.bottom + D;
} else {
var E,
H = "left" === a.position;d.mirror ? (z = H ? "left" : "right", E = W) : (z = H ? "right" : "left", E = k + W), O = H ? e.right - E : e.left + E;var j = l(e, n, h.offsetGridLines && m.length > 1);j < e.top && (s = "rgba(0,0,0,0)"), j += o.aliasPixel(r), R = e.getPixelForTick(n) + d.labelOffset, v = I, x = P, M = t.left, S = t.right + D, b = y = w = F = j;
}_.push({ tx1: v, ty1: b, tx2: x, ty2: y, x1: M, y1: w, x2: S, y2: F, labelX: O, labelY: R, glWidth: r, glColor: s, glBorderDash: c, glBorderDashOffset: f, rotation: -1 * C, label: L, major: i.major, textBaseline: B, textAlign: z });
}
}), o.each(_, function (t) {
if (h.display && (s.save(), s.lineWidth = t.glWidth, s.strokeStyle = t.glColor, s.setLineDash && (s.setLineDash(t.glBorderDash), s.lineDashOffset = t.glBorderDashOffset), s.beginPath(), h.drawTicks && (s.moveTo(t.tx1, t.ty1), s.lineTo(t.tx2, t.ty2)), h.drawOnChartArea && (s.moveTo(t.x1, t.y1), s.lineTo(t.x2, t.y2)), s.stroke(), s.restore()), d.display) {
s.save(), s.translate(t.labelX, t.labelY), s.rotate(t.rotation), s.font = t.major ? y.font : b.font, s.fillStyle = t.major ? x : v, s.textBaseline = t.textBaseline, s.textAlign = t.textAlign;var i = t.label;if (o.isArray(i)) for (var n = i.length, a = 1.5 * b.size, r = e.isHorizontal() ? 0 : -a * (n - 1) / 2, l = 0; l < n; ++l) {
s.fillText("" + i[l], 0, r), r += a;
} else s.fillText(i, 0, 0);s.restore();
}
}), f.display) {
var F,
O,
R = 0,
L = r(f) / 2;if (p) F = e.left + (e.right - e.left) / 2, O = "bottom" === a.position ? e.bottom - L - S.bottom : e.top + L + S.top;else {
var z = "left" === a.position;F = z ? e.left + L + S.top : e.right - L - S.top, O = e.top + (e.bottom - e.top) / 2, R = z ? -.5 * Math.PI : .5 * Math.PI;
}s.save(), s.translate(F, O), s.rotate(R), s.textAlign = "center", s.textBaseline = "middle", s.fillStyle = M, s.font = w.font, s.fillText(f.labelString, 0, 0), s.restore();
}if (h.drawBorder) {
s.lineWidth = o.valueAtIndexOrDefault(h.lineWidth, 0), s.strokeStyle = o.valueAtIndexOrDefault(h.color, 0);var B = e.left,
W = e.right + D,
N = e.top,
V = e.bottom + D,
E = o.aliasPixel(s.lineWidth);p ? (N = V = "top" === a.position ? e.bottom : e.top, N += E, V += E) : (B = W = "left" === a.position ? e.right : e.left, B += E, W += E), s.beginPath(), s.moveTo(B, N), s.lineTo(W, V), s.stroke();
}
}
} });
};
}, { 25: 25, 26: 26, 34: 34, 45: 45 }], 33: [function (t, e, i) {
"use strict";
var n = t(25),
a = t(45),
o = t(30);e.exports = function (t) {
t.scaleService = { constructors: {}, defaults: {}, registerScaleType: function registerScaleType(t, e, i) {
this.constructors[t] = e, this.defaults[t] = a.clone(i);
}, getScaleConstructor: function getScaleConstructor(t) {
return this.constructors.hasOwnProperty(t) ? this.constructors[t] : void 0;
}, getScaleDefaults: function getScaleDefaults(t) {
return this.defaults.hasOwnProperty(t) ? a.merge({}, [n.scale, this.defaults[t]]) : {};
}, updateScaleDefaults: function updateScaleDefaults(t, e) {
this.defaults.hasOwnProperty(t) && (this.defaults[t] = a.extend(this.defaults[t], e));
}, addScalesToLayout: function addScalesToLayout(t) {
a.each(t.scales, function (e) {
e.fullWidth = e.options.fullWidth, e.position = e.options.position, e.weight = e.options.weight, o.addBox(t, e);
});
} };
};
}, { 25: 25, 30: 30, 45: 45 }], 34: [function (t, e, i) {
"use strict";
var n = t(45);e.exports = { formatters: { values: function values(t) {
return n.isArray(t) ? t : "" + t;
}, linear: function linear(t, e, i) {
var a = i.length > 3 ? i[2] - i[1] : i[1] - i[0];Math.abs(a) > 1 && t !== Math.floor(t) && (a = t - Math.floor(t));var o = n.log10(Math.abs(a)),
r = "";if (0 !== t) {
var s = -1 * Math.floor(o);s = Math.max(Math.min(s, 20), 0), r = t.toFixed(s);
} else r = "0";return r;
}, logarithmic: function logarithmic(t, e, i) {
var a = t / Math.pow(10, Math.floor(n.log10(t)));return 0 === t ? "0" : 1 === a || 2 === a || 5 === a || 0 === e || e === i.length - 1 ? t.toExponential() : "";
} } };
}, { 45: 45 }], 35: [function (t, e, i) {
"use strict";
var n = t(25),
a = t(26),
o = t(45);n._set("global", { tooltips: { enabled: !0, custom: null, mode: "nearest", position: "average", intersect: !0, backgroundColor: "rgba(0,0,0,0.8)", titleFontStyle: "bold", titleSpacing: 2, titleMarginBottom: 6, titleFontColor: "#fff", titleAlign: "left", bodySpacing: 2, bodyFontColor: "#fff", bodyAlign: "left", footerFontStyle: "bold", footerSpacing: 2, footerMarginTop: 6, footerFontColor: "#fff", footerAlign: "left", yPadding: 6, xPadding: 6, caretPadding: 2, caretSize: 5, cornerRadius: 6, multiKeyBackground: "#fff", displayColors: !0, borderColor: "rgba(0,0,0,0)", borderWidth: 0, callbacks: { beforeTitle: o.noop, title: function title(t, e) {
var i = "",
n = e.labels,
a = n ? n.length : 0;if (t.length > 0) {
var o = t[0];o.xLabel ? i = o.xLabel : a > 0 && o.index < a && (i = n[o.index]);
}return i;
}, afterTitle: o.noop, beforeBody: o.noop, beforeLabel: o.noop, label: function label(t, e) {
var i = e.datasets[t.datasetIndex].label || "";return i && (i += ": "), i += t.yLabel;
}, labelColor: function labelColor(t, e) {
var i = e.getDatasetMeta(t.datasetIndex).data[t.index]._view;return { borderColor: i.borderColor, backgroundColor: i.backgroundColor };
}, labelTextColor: function labelTextColor() {
return this._options.bodyFontColor;
}, afterLabel: o.noop, afterBody: o.noop, beforeFooter: o.noop, footer: o.noop, afterFooter: o.noop } } }), e.exports = function (t) {
function e(t, e) {
var i = o.color(t);return i.alpha(e * i.alpha()).rgbaString();
}function i(t, e) {
return e && (o.isArray(e) ? Array.prototype.push.apply(t, e) : t.push(e)), t;
}function r(t) {
var e = n.global,
i = o.valueOrDefault;return { xPadding: t.xPadding, yPadding: t.yPadding, xAlign: t.xAlign, yAlign: t.yAlign, bodyFontColor: t.bodyFontColor, _bodyFontFamily: i(t.bodyFontFamily, e.defaultFontFamily), _bodyFontStyle: i(t.bodyFontStyle, e.defaultFontStyle), _bodyAlign: t.bodyAlign, bodyFontSize: i(t.bodyFontSize, e.defaultFontSize), bodySpacing: t.bodySpacing, titleFontColor: t.titleFontColor, _titleFontFamily: i(t.titleFontFamily, e.defaultFontFamily), _titleFontStyle: i(t.titleFontStyle, e.defaultFontStyle), titleFontSize: i(t.titleFontSize, e.defaultFontSize), _titleAlign: t.titleAlign, titleSpacing: t.titleSpacing, titleMarginBottom: t.titleMarginBottom, footerFontColor: t.footerFontColor, _footerFontFamily: i(t.footerFontFamily, e.defaultFontFamily), _footerFontStyle: i(t.footerFontStyle, e.defaultFontStyle), footerFontSize: i(t.footerFontSize, e.defaultFontSize), _footerAlign: t.footerAlign, footerSpacing: t.footerSpacing, footerMarginTop: t.footerMarginTop, caretSize: t.caretSize, cornerRadius: t.cornerRadius, backgroundColor: t.backgroundColor, opacity: 0, legendColorBackground: t.multiKeyBackground, displayColors: t.displayColors, borderColor: t.borderColor, borderWidth: t.borderWidth };
}t.Tooltip = a.extend({ initialize: function initialize() {
this._model = r(this._options), this._lastActive = [];
}, getTitle: function getTitle() {
var t = this._options.callbacks,
e = t.beforeTitle.apply(this, arguments),
n = t.title.apply(this, arguments),
a = t.afterTitle.apply(this, arguments),
o = [];return o = i(o = i(o = i(o, e), n), a);
}, getBeforeBody: function getBeforeBody() {
var t = this._options.callbacks.beforeBody.apply(this, arguments);return o.isArray(t) ? t : void 0 !== t ? [t] : [];
}, getBody: function getBody(t, e) {
var n = this,
a = n._options.callbacks,
r = [];return o.each(t, function (t) {
var o = { before: [], lines: [], after: [] };i(o.before, a.beforeLabel.call(n, t, e)), i(o.lines, a.label.call(n, t, e)), i(o.after, a.afterLabel.call(n, t, e)), r.push(o);
}), r;
}, getAfterBody: function getAfterBody() {
var t = this._options.callbacks.afterBody.apply(this, arguments);return o.isArray(t) ? t : void 0 !== t ? [t] : [];
}, getFooter: function getFooter() {
var t = this._options.callbacks,
e = t.beforeFooter.apply(this, arguments),
n = t.footer.apply(this, arguments),
a = t.afterFooter.apply(this, arguments),
o = [];return o = i(o = i(o = i(o, e), n), a);
}, update: function update(e) {
var i,
n,
a,
s,
l,
u,
d,
c,
h,
f,
g,
p,
m,
v,
b,
x,
y,
k,
M,
w,
S = this,
C = S._options,
_ = S._model,
D = S._model = r(C),
I = S._active,
P = S._data,
A = { xAlign: _.xAlign, yAlign: _.yAlign },
T = { x: _.x, y: _.y },
F = { width: _.width, height: _.height },
O = { x: _.caretX, y: _.caretY };if (I.length) {
D.opacity = 1;var R = [],
L = [];O = t.Tooltip.positioners[C.position].call(S, I, S._eventPosition);var z = [];for (i = 0, n = I.length; i < n; ++i) {
z.push((x = I[i], y = void 0, k = void 0, void 0, void 0, y = x._xScale, k = x._yScale || x._scale, M = x._index, w = x._datasetIndex, { xLabel: y ? y.getLabelForIndex(M, w) : "", yLabel: k ? k.getLabelForIndex(M, w) : "", index: M, datasetIndex: w, x: x._model.x, y: x._model.y }));
}C.filter && (z = z.filter(function (t) {
return C.filter(t, P);
})), C.itemSort && (z = z.sort(function (t, e) {
return C.itemSort(t, e, P);
})), o.each(z, function (t) {
R.push(C.callbacks.labelColor.call(S, t, S._chart)), L.push(C.callbacks.labelTextColor.call(S, t, S._chart));
}), D.title = S.getTitle(z, P), D.beforeBody = S.getBeforeBody(z, P), D.body = S.getBody(z, P), D.afterBody = S.getAfterBody(z, P), D.footer = S.getFooter(z, P), D.x = Math.round(O.x), D.y = Math.round(O.y), D.caretPadding = C.caretPadding, D.labelColors = R, D.labelTextColors = L, D.dataPoints = z, A = function (t, e) {
var i,
n,
a,
o,
r,
s = t._model,
l = t._chart,
u = t._chart.chartArea,
d = "center",
c = "center";s.y < e.height ? c = "top" : s.y > l.height - e.height && (c = "bottom");var h = (u.left + u.right) / 2,
f = (u.top + u.bottom) / 2;"center" === c ? (i = function i(t) {
return t <= h;
}, n = function n(t) {
return t > h;
}) : (i = function i(t) {
return t <= e.width / 2;
}, n = function n(t) {
return t >= l.width - e.width / 2;
}), a = function a(t) {
return t + e.width + s.caretSize + s.caretPadding > l.width;
}, o = function o(t) {
return t - e.width - s.caretSize - s.caretPadding < 0;
}, r = function r(t) {
return t <= f ? "top" : "bottom";
}, i(s.x) ? (d = "left", a(s.x) && (d = "center", c = r(s.y))) : n(s.x) && (d = "right", o(s.x) && (d = "center", c = r(s.y)));var g = t._options;return { xAlign: g.xAlign ? g.xAlign : d, yAlign: g.yAlign ? g.yAlign : c };
}(this, F = function (t, e) {
var i = t._chart.ctx,
n = 2 * e.yPadding,
a = 0,
r = e.body,
s = r.reduce(function (t, e) {
return t + e.before.length + e.lines.length + e.after.length;
}, 0);s += e.beforeBody.length + e.afterBody.length;var l = e.title.length,
u = e.footer.length,
d = e.titleFontSize,
c = e.bodyFontSize,
h = e.footerFontSize;n += l * d, n += l ? (l - 1) * e.titleSpacing : 0, n += l ? e.titleMarginBottom : 0, n += s * c, n += s ? (s - 1) * e.bodySpacing : 0, n += u ? e.footerMarginTop : 0, n += u * h, n += u ? (u - 1) * e.footerSpacing : 0;var f = 0,
g = function g(t) {
a = Math.max(a, i.measureText(t).width + f);
};return i.font = o.fontString(d, e._titleFontStyle, e._titleFontFamily), o.each(e.title, g), i.font = o.fontString(c, e._bodyFontStyle, e._bodyFontFamily), o.each(e.beforeBody.concat(e.afterBody), g), f = e.displayColors ? c + 2 : 0, o.each(r, function (t) {
o.each(t.before, g), o.each(t.lines, g), o.each(t.after, g);
}), f = 0, i.font = o.fontString(h, e._footerFontStyle, e._footerFontFamily), o.each(e.footer, g), { width: a += 2 * e.xPadding, height: n };
}(this, D)), a = D, s = F, l = A, u = S._chart, d = a.x, c = a.y, h = a.caretSize, f = a.caretPadding, g = a.cornerRadius, p = l.xAlign, m = l.yAlign, v = h + f, b = g + f, "right" === p ? d -= s.width : "center" === p && ((d -= s.width / 2) + s.width > u.width && (d = u.width - s.width), d < 0 && (d = 0)), "top" === m ? c += v : c -= "bottom" === m ? s.height + v : s.height / 2, "center" === m ? "left" === p ? d += v : "right" === p && (d -= v) : "left" === p ? d -= b : "right" === p && (d += b), T = { x: d, y: c };
} else D.opacity = 0;return D.xAlign = A.xAlign, D.yAlign = A.yAlign, D.x = T.x, D.y = T.y, D.width = F.width, D.height = F.height, D.caretX = O.x, D.caretY = O.y, S._model = D, e && C.custom && C.custom.call(S, D), S;
}, drawCaret: function drawCaret(t, e) {
var i = this._chart.ctx,
n = this._view,
a = this.getCaretPosition(t, e, n);i.lineTo(a.x1, a.y1), i.lineTo(a.x2, a.y2), i.lineTo(a.x3, a.y3);
}, getCaretPosition: function getCaretPosition(t, e, i) {
var n,
a,
o,
r,
s,
l,
u = i.caretSize,
d = i.cornerRadius,
c = i.xAlign,
h = i.yAlign,
f = t.x,
g = t.y,
p = e.width,
m = e.height;if ("center" === h) s = g + m / 2, "left" === c ? (a = (n = f) - u, o = n, r = s + u, l = s - u) : (a = (n = f + p) + u, o = n, r = s - u, l = s + u);else if ("left" === c ? (n = (a = f + d + u) - u, o = a + u) : "right" === c ? (n = (a = f + p - d - u) - u, o = a + u) : (n = (a = i.caretX) - u, o = a + u), "top" === h) s = (r = g) - u, l = r;else {
s = (r = g + m) + u, l = r;var v = o;o = n, n = v;
}return { x1: n, x2: a, x3: o, y1: r, y2: s, y3: l };
}, drawTitle: function drawTitle(t, i, n, a) {
var r = i.title;if (r.length) {
n.textAlign = i._titleAlign, n.textBaseline = "top";var s,
l,
u = i.titleFontSize,
d = i.titleSpacing;for (n.fillStyle = e(i.titleFontColor, a), n.font = o.fontString(u, i._titleFontStyle, i._titleFontFamily), s = 0, l = r.length; s < l; ++s) {
n.fillText(r[s], t.x, t.y), t.y += u + d, s + 1 === r.length && (t.y += i.titleMarginBottom - d);
}
}
}, drawBody: function drawBody(t, i, n, a) {
var r = i.bodyFontSize,
s = i.bodySpacing,
l = i.body;n.textAlign = i._bodyAlign, n.textBaseline = "top", n.font = o.fontString(r, i._bodyFontStyle, i._bodyFontFamily);var u = 0,
d = function d(e) {
n.fillText(e, t.x + u, t.y), t.y += r + s;
};n.fillStyle = e(i.bodyFontColor, a), o.each(i.beforeBody, d);var c = i.displayColors;u = c ? r + 2 : 0, o.each(l, function (s, l) {
var u = e(i.labelTextColors[l], a);n.fillStyle = u, o.each(s.before, d), o.each(s.lines, function (o) {
c && (n.fillStyle = e(i.legendColorBackground, a), n.fillRect(t.x, t.y, r, r), n.lineWidth = 1, n.strokeStyle = e(i.labelColors[l].borderColor, a), n.strokeRect(t.x, t.y, r, r), n.fillStyle = e(i.labelColors[l].backgroundColor, a), n.fillRect(t.x + 1, t.y + 1, r - 2, r - 2), n.fillStyle = u), d(o);
}), o.each(s.after, d);
}), u = 0, o.each(i.afterBody, d), t.y -= s;
}, drawFooter: function drawFooter(t, i, n, a) {
var r = i.footer;r.length && (t.y += i.footerMarginTop, n.textAlign = i._footerAlign, n.textBaseline = "top", n.fillStyle = e(i.footerFontColor, a), n.font = o.fontString(i.footerFontSize, i._footerFontStyle, i._footerFontFamily), o.each(r, function (e) {
n.fillText(e, t.x, t.y), t.y += i.footerFontSize + i.footerSpacing;
}));
}, drawBackground: function drawBackground(t, i, n, a, o) {
n.fillStyle = e(i.backgroundColor, o), n.strokeStyle = e(i.borderColor, o), n.lineWidth = i.borderWidth;var r = i.xAlign,
s = i.yAlign,
l = t.x,
u = t.y,
d = a.width,
c = a.height,
h = i.cornerRadius;n.beginPath(), n.moveTo(l + h, u), "top" === s && this.drawCaret(t, a), n.lineTo(l + d - h, u), n.quadraticCurveTo(l + d, u, l + d, u + h), "center" === s && "right" === r && this.drawCaret(t, a), n.lineTo(l + d, u + c - h), n.quadraticCurveTo(l + d, u + c, l + d - h, u + c), "bottom" === s && this.drawCaret(t, a), n.lineTo(l + h, u + c), n.quadraticCurveTo(l, u + c, l, u + c - h), "center" === s && "left" === r && this.drawCaret(t, a), n.lineTo(l, u + h), n.quadraticCurveTo(l, u, l + h, u), n.closePath(), n.fill(), i.borderWidth > 0 && n.stroke();
}, draw: function draw() {
var t = this._chart.ctx,
e = this._view;if (0 !== e.opacity) {
var i = { width: e.width, height: e.height },
n = { x: e.x, y: e.y },
a = Math.abs(e.opacity < .001) ? 0 : e.opacity,
o = e.title.length || e.beforeBody.length || e.body.length || e.afterBody.length || e.footer.length;this._options.enabled && o && (this.drawBackground(n, e, t, i, a), n.x += e.xPadding, n.y += e.yPadding, this.drawTitle(n, e, t, a), this.drawBody(n, e, t, a), this.drawFooter(n, e, t, a));
}
}, handleEvent: function handleEvent(t) {
var e,
i = this,
n = i._options;return i._lastActive = i._lastActive || [], "mouseout" === t.type ? i._active = [] : i._active = i._chart.getElementsAtEventForMode(t, n.mode, n), (e = !o.arrayEquals(i._active, i._lastActive)) && (i._lastActive = i._active, (n.enabled || n.custom) && (i._eventPosition = { x: t.x, y: t.y }, i.update(!0), i.pivot())), e;
} }), t.Tooltip.positioners = { average: function average(t) {
if (!t.length) return !1;var e,
i,
n = 0,
a = 0,
o = 0;for (e = 0, i = t.length; e < i; ++e) {
var r = t[e];if (r && r.hasValue()) {
var s = r.tooltipPosition();n += s.x, a += s.y, ++o;
}
}return { x: Math.round(n / o), y: Math.round(a / o) };
}, nearest: function nearest(t, e) {
var i,
n,
a,
r = e.x,
s = e.y,
l = Number.POSITIVE_INFINITY;for (i = 0, n = t.length; i < n; ++i) {
var u = t[i];if (u && u.hasValue()) {
var d = u.getCenterPoint(),
c = o.distanceBetweenPoints(e, d);c < l && (l = c, a = u);
}
}if (a) {
var h = a.tooltipPosition();r = h.x, s = h.y;
}return { x: r, y: s };
} };
};
}, { 25: 25, 26: 26, 45: 45 }], 36: [function (t, e, i) {
"use strict";
var n = t(25),
a = t(26),
o = t(45);n._set("global", { elements: { arc: { backgroundColor: n.global.defaultColor, borderColor: "#fff", borderWidth: 2 } } }), e.exports = a.extend({ inLabelRange: function inLabelRange(t) {
var e = this._view;return !!e && Math.pow(t - e.x, 2) < Math.pow(e.radius + e.hoverRadius, 2);
}, inRange: function inRange(t, e) {
var i = this._view;if (i) {
for (var n = o.getAngleFromPoint(i, { x: t, y: e }), a = n.angle, r = n.distance, s = i.startAngle, l = i.endAngle; l < s;) {
l += 2 * Math.PI;
}for (; a > l;) {
a -= 2 * Math.PI;
}for (; a < s;) {
a += 2 * Math.PI;
}var u = a >= s && a <= l,
d = r >= i.innerRadius && r <= i.outerRadius;return u && d;
}return !1;
}, getCenterPoint: function getCenterPoint() {
var t = this._view,
e = (t.startAngle + t.endAngle) / 2,
i = (t.innerRadius + t.outerRadius) / 2;return { x: t.x + Math.cos(e) * i, y: t.y + Math.sin(e) * i };
}, getArea: function getArea() {
var t = this._view;return Math.PI * ((t.endAngle - t.startAngle) / (2 * Math.PI)) * (Math.pow(t.outerRadius, 2) - Math.pow(t.innerRadius, 2));
}, tooltipPosition: function tooltipPosition() {
var t = this._view,
e = t.startAngle + (t.endAngle - t.startAngle) / 2,
i = (t.outerRadius - t.innerRadius) / 2 + t.innerRadius;return { x: t.x + Math.cos(e) * i, y: t.y + Math.sin(e) * i };
}, draw: function draw() {
var t = this._chart.ctx,
e = this._view,
i = e.startAngle,
n = e.endAngle;t.beginPath(), t.arc(e.x, e.y, e.outerRadius, i, n), t.arc(e.x, e.y, e.innerRadius, n, i, !0), t.closePath(), t.strokeStyle = e.borderColor, t.lineWidth = e.borderWidth, t.fillStyle = e.backgroundColor, t.fill(), t.lineJoin = "bevel", e.borderWidth && t.stroke();
} });
}, { 25: 25, 26: 26, 45: 45 }], 37: [function (t, e, i) {
"use strict";
var n = t(25),
a = t(26),
o = t(45),
r = n.global;n._set("global", { elements: { line: { tension: .4, backgroundColor: r.defaultColor, borderWidth: 3, borderColor: r.defaultColor, borderCapStyle: "butt", borderDash: [], borderDashOffset: 0, borderJoinStyle: "miter", capBezierPoints: !0, fill: !0 } } }), e.exports = a.extend({ draw: function draw() {
var t,
e,
i,
n,
a = this._view,
s = this._chart.ctx,
l = a.spanGaps,
u = this._children.slice(),
d = r.elements.line,
c = -1;for (this._loop && u.length && u.push(u[0]), s.save(), s.lineCap = a.borderCapStyle || d.borderCapStyle, s.setLineDash && s.setLineDash(a.borderDash || d.borderDash), s.lineDashOffset = a.borderDashOffset || d.borderDashOffset, s.lineJoin = a.borderJoinStyle || d.borderJoinStyle, s.lineWidth = a.borderWidth || d.borderWidth, s.strokeStyle = a.borderColor || r.defaultColor, s.beginPath(), c = -1, t = 0; t < u.length; ++t) {
e = u[t], i = o.previousItem(u, t), n = e._view, 0 === t ? n.skip || (s.moveTo(n.x, n.y), c = t) : (i = -1 === c ? i : u[c], n.skip || (c !== t - 1 && !l || -1 === c ? s.moveTo(n.x, n.y) : o.canvas.lineTo(s, i._view, e._view), c = t));
}s.stroke(), s.restore();
} });
}, { 25: 25, 26: 26, 45: 45 }], 38: [function (t, e, i) {
"use strict";
var n = t(25),
a = t(26),
o = t(45),
r = n.global.defaultColor;function s(t) {
var e = this._view;return !!e && Math.abs(t - e.x) < e.radius + e.hitRadius;
}n._set("global", { elements: { point: { radius: 3, pointStyle: "circle", backgroundColor: r, borderColor: r, borderWidth: 1, hitRadius: 1, hoverRadius: 4, hoverBorderWidth: 1 } } }), e.exports = a.extend({ inRange: function inRange(t, e) {
var i = this._view;return !!i && Math.pow(t - i.x, 2) + Math.pow(e - i.y, 2) < Math.pow(i.hitRadius + i.radius, 2);
}, inLabelRange: s, inXRange: s, inYRange: function inYRange(t) {
var e = this._view;return !!e && Math.abs(t - e.y) < e.radius + e.hitRadius;
}, getCenterPoint: function getCenterPoint() {
var t = this._view;return { x: t.x, y: t.y };
}, getArea: function getArea() {
return Math.PI * Math.pow(this._view.radius, 2);
}, tooltipPosition: function tooltipPosition() {
var t = this._view;return { x: t.x, y: t.y, padding: t.radius + t.borderWidth };
}, draw: function draw(t) {
var e = this._view,
i = this._model,
a = this._chart.ctx,
s = e.pointStyle,
l = e.radius,
u = e.x,
d = e.y,
c = o.color,
h = 0;e.skip || (a.strokeStyle = e.borderColor || r, a.lineWidth = o.valueOrDefault(e.borderWidth, n.global.elements.point.borderWidth), a.fillStyle = e.backgroundColor || r, void 0 !== t && (i.x < t.left || 1.01 * t.right < i.x || i.y < t.top || 1.01 * t.bottom < i.y) && (i.x < t.left ? h = (u - i.x) / (t.left - i.x) : 1.01 * t.right < i.x ? h = (i.x - u) / (i.x - t.right) : i.y < t.top ? h = (d - i.y) / (t.top - i.y) : 1.01 * t.bottom < i.y && (h = (i.y - d) / (i.y - t.bottom)), h = Math.round(100 * h) / 100, a.strokeStyle = c(a.strokeStyle).alpha(h).rgbString(), a.fillStyle = c(a.fillStyle).alpha(h).rgbString()), o.canvas.drawPoint(a, s, l, u, d));
} });
}, { 25: 25, 26: 26, 45: 45 }], 39: [function (t, e, i) {
"use strict";
var n = t(25),
a = t(26);function o(t) {
return void 0 !== t._view.width;
}function r(t) {
var e,
i,
n,
a,
r = t._view;if (o(t)) {
var s = r.width / 2;e = r.x - s, i = r.x + s, n = Math.min(r.y, r.base), a = Math.max(r.y, r.base);
} else {
var l = r.height / 2;e = Math.min(r.x, r.base), i = Math.max(r.x, r.base), n = r.y - l, a = r.y + l;
}return { left: e, top: n, right: i, bottom: a };
}n._set("global", { elements: { rectangle: { backgroundColor: n.global.defaultColor, borderColor: n.global.defaultColor, borderSkipped: "bottom", borderWidth: 0 } } }), e.exports = a.extend({ draw: function draw() {
var t,
e,
i,
n,
a,
o,
r,
s = this._chart.ctx,
l = this._view,
u = l.borderWidth;if (l.horizontal ? (t = l.base, e = l.x, i = l.y - l.height / 2, n = l.y + l.height / 2, a = e > t ? 1 : -1, o = 1, r = l.borderSkipped || "left") : (t = l.x - l.width / 2, e = l.x + l.width / 2, i = l.y, a = 1, o = (n = l.base) > i ? 1 : -1, r = l.borderSkipped || "bottom"), u) {
var d = Math.min(Math.abs(t - e), Math.abs(i - n)),
c = (u = u > d ? d : u) / 2,
h = t + ("left" !== r ? c * a : 0),
f = e + ("right" !== r ? -c * a : 0),
g = i + ("top" !== r ? c * o : 0),
p = n + ("bottom" !== r ? -c * o : 0);h !== f && (i = g, n = p), g !== p && (t = h, e = f);
}s.beginPath(), s.fillStyle = l.backgroundColor, s.strokeStyle = l.borderColor, s.lineWidth = u;var m = [[t, n], [t, i], [e, i], [e, n]],
v = ["bottom", "left", "top", "right"].indexOf(r, 0);function b(t) {
return m[(v + t) % 4];
}-1 === v && (v = 0);var x = b(0);s.moveTo(x[0], x[1]);for (var y = 1; y < 4; y++) {
x = b(y), s.lineTo(x[0], x[1]);
}s.fill(), u && s.stroke();
}, height: function height() {
var t = this._view;return t.base - t.y;
}, inRange: function inRange(t, e) {
var i = !1;if (this._view) {
var n = r(this);i = t >= n.left && t <= n.right && e >= n.top && e <= n.bottom;
}return i;
}, inLabelRange: function inLabelRange(t, e) {
if (!this._view) return !1;var i = r(this);return o(this) ? t >= i.left && t <= i.right : e >= i.top && e <= i.bottom;
}, inXRange: function inXRange(t) {
var e = r(this);return t >= e.left && t <= e.right;
}, inYRange: function inYRange(t) {
var e = r(this);return t >= e.top && t <= e.bottom;
}, getCenterPoint: function getCenterPoint() {
var t,
e,
i = this._view;return o(this) ? (t = i.x, e = (i.y + i.base) / 2) : (t = (i.x + i.base) / 2, e = i.y), { x: t, y: e };
}, getArea: function getArea() {
var t = this._view;return t.width * Math.abs(t.y - t.base);
}, tooltipPosition: function tooltipPosition() {
var t = this._view;return { x: t.x, y: t.y };
} });
}, { 25: 25, 26: 26 }], 40: [function (t, e, i) {
"use strict";
e.exports = {}, e.exports.Arc = t(36), e.exports.Line = t(37), e.exports.Point = t(38), e.exports.Rectangle = t(39);
}, { 36: 36, 37: 37, 38: 38, 39: 39 }], 41: [function (t, e, i) {
"use strict";
var n = t(42);i = e.exports = { clear: function clear(t) {
t.ctx.clearRect(0, 0, t.width, t.height);
}, roundedRect: function roundedRect(t, e, i, n, a, o) {
if (o) {
var r = Math.min(o, n / 2),
s = Math.min(o, a / 2);t.moveTo(e + r, i), t.lineTo(e + n - r, i), t.quadraticCurveTo(e + n, i, e + n, i + s), t.lineTo(e + n, i + a - s), t.quadraticCurveTo(e + n, i + a, e + n - r, i + a), t.lineTo(e + r, i + a), t.quadraticCurveTo(e, i + a, e, i + a - s), t.lineTo(e, i + s), t.quadraticCurveTo(e, i, e + r, i);
} else t.rect(e, i, n, a);
}, drawPoint: function drawPoint(t, e, i, n, a) {
var o, r, s, l, u, d;if (!e || "object" != (typeof e === "undefined" ? "undefined" : _typeof(e)) || "[object HTMLImageElement]" !== (o = e.toString()) && "[object HTMLCanvasElement]" !== o) {
if (!(isNaN(i) || i <= 0)) {
switch (e) {default:
t.beginPath(), t.arc(n, a, i, 0, 2 * Math.PI), t.closePath(), t.fill();break;case "triangle":
t.beginPath(), u = (r = 3 * i / Math.sqrt(3)) * Math.sqrt(3) / 2, t.moveTo(n - r / 2, a + u / 3), t.lineTo(n + r / 2, a + u / 3), t.lineTo(n, a - 2 * u / 3), t.closePath(), t.fill();break;case "rect":
d = 1 / Math.SQRT2 * i, t.beginPath(), t.fillRect(n - d, a - d, 2 * d, 2 * d), t.strokeRect(n - d, a - d, 2 * d, 2 * d);break;case "rectRounded":
var c = i / Math.SQRT2,
h = n - c,
f = a - c,
g = Math.SQRT2 * i;t.beginPath(), this.roundedRect(t, h, f, g, g, i / 2), t.closePath(), t.fill();break;case "rectRot":
d = 1 / Math.SQRT2 * i, t.beginPath(), t.moveTo(n - d, a), t.lineTo(n, a + d), t.lineTo(n + d, a), t.lineTo(n, a - d), t.closePath(), t.fill();break;case "cross":
t.beginPath(), t.moveTo(n, a + i), t.lineTo(n, a - i), t.moveTo(n - i, a), t.lineTo(n + i, a), t.closePath();break;case "crossRot":
t.beginPath(), s = Math.cos(Math.PI / 4) * i, l = Math.sin(Math.PI / 4) * i, t.moveTo(n - s, a - l), t.lineTo(n + s, a + l), t.moveTo(n - s, a + l), t.lineTo(n + s, a - l), t.closePath();break;case "star":
t.beginPath(), t.moveTo(n, a + i), t.lineTo(n, a - i), t.moveTo(n - i, a), t.lineTo(n + i, a), s = Math.cos(Math.PI / 4) * i, l = Math.sin(Math.PI / 4) * i, t.moveTo(n - s, a - l), t.lineTo(n + s, a + l), t.moveTo(n - s, a + l), t.lineTo(n + s, a - l), t.closePath();break;case "line":
t.beginPath(), t.moveTo(n - i, a), t.lineTo(n + i, a), t.closePath();break;case "dash":
t.beginPath(), t.moveTo(n, a), t.lineTo(n + i, a), t.closePath();}t.stroke();
}
} else t.drawImage(e, n - e.width / 2, a - e.height / 2, e.width, e.height);
}, clipArea: function clipArea(t, e) {
t.save(), t.beginPath(), t.rect(e.left, e.top, e.right - e.left, e.bottom - e.top), t.clip();
}, unclipArea: function unclipArea(t) {
t.restore();
}, lineTo: function lineTo(t, e, i, n) {
if (i.steppedLine) return "after" === i.steppedLine && !n || "after" !== i.steppedLine && n ? t.lineTo(e.x, i.y) : t.lineTo(i.x, e.y), void t.lineTo(i.x, i.y);i.tension ? t.bezierCurveTo(n ? e.controlPointPreviousX : e.controlPointNextX, n ? e.controlPointPreviousY : e.controlPointNextY, n ? i.controlPointNextX : i.controlPointPreviousX, n ? i.controlPointNextY : i.controlPointPreviousY, i.x, i.y) : t.lineTo(i.x, i.y);
} };n.clear = i.clear, n.drawRoundedRectangle = function (t) {
t.beginPath(), i.roundedRect.apply(i, arguments), t.closePath();
};
}, { 42: 42 }], 42: [function (t, e, i) {
"use strict";
var n,
a = { noop: function noop() {}, uid: (n = 0, function () {
return n++;
}), isNullOrUndef: function isNullOrUndef(t) {
return null == t;
}, isArray: Array.isArray ? Array.isArray : function (t) {
return "[object Array]" === Object.prototype.toString.call(t);
}, isObject: function isObject(t) {
return null !== t && "[object Object]" === Object.prototype.toString.call(t);
}, valueOrDefault: function valueOrDefault(t, e) {
return void 0 === t ? e : t;
}, valueAtIndexOrDefault: function valueAtIndexOrDefault(t, e, i) {
return a.valueOrDefault(a.isArray(t) ? t[e] : t, i);
}, callback: function callback(t, e, i) {
if (t && "function" == typeof t.call) return t.apply(i, e);
}, each: function each(t, e, i, n) {
var o, r, s;if (a.isArray(t)) {
if (r = t.length, n) for (o = r - 1; o >= 0; o--) {
e.call(i, t[o], o);
} else for (o = 0; o < r; o++) {
e.call(i, t[o], o);
}
} else if (a.isObject(t)) for (r = (s = Object.keys(t)).length, o = 0; o < r; o++) {
e.call(i, t[s[o]], s[o]);
}
}, arrayEquals: function arrayEquals(t, e) {
var i, n, o, r;if (!t || !e || t.length !== e.length) return !1;for (i = 0, n = t.length; i < n; ++i) {
if (o = t[i], r = e[i], o instanceof Array && r instanceof Array) {
if (!a.arrayEquals(o, r)) return !1;
} else if (o !== r) return !1;
}return !0;
}, clone: function clone(t) {
if (a.isArray(t)) return t.map(a.clone);if (a.isObject(t)) {
for (var e = {}, i = Object.keys(t), n = i.length, o = 0; o < n; ++o) {
e[i[o]] = a.clone(t[i[o]]);
}return e;
}return t;
}, _merger: function _merger(t, e, i, n) {
var o = e[t],
r = i[t];a.isObject(o) && a.isObject(r) ? a.merge(o, r, n) : e[t] = a.clone(r);
}, _mergerIf: function _mergerIf(t, e, i) {
var n = e[t],
o = i[t];a.isObject(n) && a.isObject(o) ? a.mergeIf(n, o) : e.hasOwnProperty(t) || (e[t] = a.clone(o));
}, merge: function merge(t, e, i) {
var n,
o,
r,
s,
l,
u = a.isArray(e) ? e : [e],
d = u.length;if (!a.isObject(t)) return t;for (n = (i = i || {}).merger || a._merger, o = 0; o < d; ++o) {
if (e = u[o], a.isObject(e)) for (l = 0, s = (r = Object.keys(e)).length; l < s; ++l) {
n(r[l], t, e, i);
}
}return t;
}, mergeIf: function mergeIf(t, e) {
return a.merge(t, e, { merger: a._mergerIf });
}, extend: function extend(t) {
for (var e = function e(_e, i) {
t[i] = _e;
}, i = 1, n = arguments.length; i < n; ++i) {
a.each(arguments[i], e);
}return t;
}, inherits: function inherits(t) {
var e = this,
i = t && t.hasOwnProperty("constructor") ? t.constructor : function () {
return e.apply(this, arguments);
},
n = function n() {
this.constructor = i;
};return n.prototype = e.prototype, i.prototype = new n(), i.extend = a.inherits, t && a.extend(i.prototype, t), i.__super__ = e.prototype, i;
} };e.exports = a, a.callCallback = a.callback, a.indexOf = function (t, e, i) {
return Array.prototype.indexOf.call(t, e, i);
}, a.getValueOrDefault = a.valueOrDefault, a.getValueAtIndexOrDefault = a.valueAtIndexOrDefault;
}, {}], 43: [function (t, e, i) {
"use strict";
var n = t(42),
a = { linear: function linear(t) {
return t;
}, easeInQuad: function easeInQuad(t) {
return t * t;
}, easeOutQuad: function easeOutQuad(t) {
return -t * (t - 2);
}, easeInOutQuad: function easeInOutQuad(t) {
return (t /= .5) < 1 ? .5 * t * t : -.5 * (--t * (t - 2) - 1);
}, easeInCubic: function easeInCubic(t) {
return t * t * t;
}, easeOutCubic: function easeOutCubic(t) {
return (t -= 1) * t * t + 1;
}, easeInOutCubic: function easeInOutCubic(t) {
return (t /= .5) < 1 ? .5 * t * t * t : .5 * ((t -= 2) * t * t + 2);
}, easeInQuart: function easeInQuart(t) {
return t * t * t * t;
}, easeOutQuart: function easeOutQuart(t) {
return -((t -= 1) * t * t * t - 1);
}, easeInOutQuart: function easeInOutQuart(t) {
return (t /= .5) < 1 ? .5 * t * t * t * t : -.5 * ((t -= 2) * t * t * t - 2);
}, easeInQuint: function easeInQuint(t) {
return t * t * t * t * t;
}, easeOutQuint: function easeOutQuint(t) {
return (t -= 1) * t * t * t * t + 1;
}, easeInOutQuint: function easeInOutQuint(t) {
return (t /= .5) < 1 ? .5 * t * t * t * t * t : .5 * ((t -= 2) * t * t * t * t + 2);
}, easeInSine: function easeInSine(t) {
return 1 - Math.cos(t * (Math.PI / 2));
}, easeOutSine: function easeOutSine(t) {
return Math.sin(t * (Math.PI / 2));
}, easeInOutSine: function easeInOutSine(t) {
return -.5 * (Math.cos(Math.PI * t) - 1);
}, easeInExpo: function easeInExpo(t) {
return 0 === t ? 0 : Math.pow(2, 10 * (t - 1));
}, easeOutExpo: function easeOutExpo(t) {
return 1 === t ? 1 : 1 - Math.pow(2, -10 * t);
}, easeInOutExpo: function easeInOutExpo(t) {
return 0 === t ? 0 : 1 === t ? 1 : (t /= .5) < 1 ? .5 * Math.pow(2, 10 * (t - 1)) : .5 * (2 - Math.pow(2, -10 * --t));
}, easeInCirc: function easeInCirc(t) {
return t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1);
}, easeOutCirc: function easeOutCirc(t) {
return Math.sqrt(1 - (t -= 1) * t);
}, easeInOutCirc: function easeInOutCirc(t) {
return (t /= .5) < 1 ? -.5 * (Math.sqrt(1 - t * t) - 1) : .5 * (Math.sqrt(1 - (t -= 2) * t) + 1);
}, easeInElastic: function easeInElastic(t) {
var e = 1.70158,
i = 0,
n = 1;return 0 === t ? 0 : 1 === t ? 1 : (i || (i = .3), n < 1 ? (n = 1, e = i / 4) : e = i / (2 * Math.PI) * Math.asin(1 / n), -n * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - e) * (2 * Math.PI) / i));
}, easeOutElastic: function easeOutElastic(t) {
var e = 1.70158,
i = 0,
n = 1;return 0 === t ? 0 : 1 === t ? 1 : (i || (i = .3), n < 1 ? (n = 1, e = i / 4) : e = i / (2 * Math.PI) * Math.asin(1 / n), n * Math.pow(2, -10 * t) * Math.sin((t - e) * (2 * Math.PI) / i) + 1);
}, easeInOutElastic: function easeInOutElastic(t) {
var e = 1.70158,
i = 0,
n = 1;return 0 === t ? 0 : 2 == (t /= .5) ? 1 : (i || (i = .45), n < 1 ? (n = 1, e = i / 4) : e = i / (2 * Math.PI) * Math.asin(1 / n), t < 1 ? n * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - e) * (2 * Math.PI) / i) * -.5 : n * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - e) * (2 * Math.PI) / i) * .5 + 1);
}, easeInBack: function easeInBack(t) {
return t * t * (2.70158 * t - 1.70158);
}, easeOutBack: function easeOutBack(t) {
return (t -= 1) * t * (2.70158 * t + 1.70158) + 1;
}, easeInOutBack: function easeInOutBack(t) {
var e = 1.70158;return (t /= .5) < 1 ? t * t * ((1 + (e *= 1.525)) * t - e) * .5 : .5 * ((t -= 2) * t * ((1 + (e *= 1.525)) * t + e) + 2);
}, easeInBounce: function easeInBounce(t) {
return 1 - a.easeOutBounce(1 - t);
}, easeOutBounce: function easeOutBounce(t) {
return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;
}, easeInOutBounce: function easeInOutBounce(t) {
return t < .5 ? .5 * a.easeInBounce(2 * t) : .5 * a.easeOutBounce(2 * t - 1) + .5;
} };e.exports = { effects: a }, n.easingEffects = a;
}, { 42: 42 }], 44: [function (t, e, i) {
"use strict";
var n = t(42);e.exports = { toLineHeight: function toLineHeight(t, e) {
var i = ("" + t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if (!i || "normal" === i[1]) return 1.2 * e;switch (t = +i[2], i[3]) {case "px":
return t;case "%":
t /= 100;}return e * t;
}, toPadding: function toPadding(t) {
var e, i, a, o;return n.isObject(t) ? (e = +t.top || 0, i = +t.right || 0, a = +t.bottom || 0, o = +t.left || 0) : e = i = a = o = +t || 0, { top: e, right: i, bottom: a, left: o, height: e + a, width: o + i };
}, resolve: function resolve(t, e, i) {
var a, o, r;for (a = 0, o = t.length; a < o; ++a) {
if (void 0 !== (r = t[a]) && (void 0 !== e && "function" == typeof r && (r = r(e)), void 0 !== i && n.isArray(r) && (r = r[i]), void 0 !== r)) return r;
}
} };
}, { 42: 42 }], 45: [function (t, e, i) {
"use strict";
e.exports = t(42), e.exports.easing = t(43), e.exports.canvas = t(41), e.exports.options = t(44);
}, { 41: 41, 42: 42, 43: 43, 44: 44 }], 46: [function (t, e, i) {
e.exports = { acquireContext: function acquireContext(t) {
return t && t.canvas && (t = t.canvas), t && t.getContext("2d") || null;
} };
}, {}], 47: [function (t, e, i) {
"use strict";
var n = t(45),
a = "$chartjs",
o = "chartjs-",
r = o + "render-monitor",
s = o + "render-animation",
l = ["animationstart", "webkitAnimationStart"],
u = { touchstart: "mousedown", touchmove: "mousemove", touchend: "mouseup", pointerenter: "mouseenter", pointerdown: "mousedown", pointermove: "mousemove", pointerup: "mouseup", pointerleave: "mouseout", pointerout: "mouseout" };function d(t, e) {
var i = n.getStyle(t, e),
a = i && i.match(/^(\d+)(\.\d+)?px$/);return a ? Number(a[1]) : void 0;
}var c = !!function () {
var t = !1;try {
var e = Object.defineProperty({}, "passive", { get: function get() {
t = !0;
} });window.addEventListener("e", null, e);
} catch (t) {}return t;
}() && { passive: !0 };function h(t, e, i) {
t.addEventListener(e, i, c);
}function f(t, e, i) {
t.removeEventListener(e, i, c);
}function g(t, e, i, n, a) {
return { type: t, chart: e, native: a || null, x: void 0 !== i ? i : null, y: void 0 !== n ? n : null };
}function p(t, e, i) {
var u,
d,
c,
f,
p,
m,
v,
b,
x = t[a] || (t[a] = {}),
y = x.resizer = function (t) {
var e = document.createElement("div"),
i = o + "size-monitor",
n = "position:absolute;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1;";e.style.cssText = n, e.className = i, e.innerHTML = '';var a = e.childNodes[0],
r = e.childNodes[1];e._reset = function () {
a.scrollLeft = 1e6, a.scrollTop = 1e6, r.scrollLeft = 1e6, r.scrollTop = 1e6;
};var s = function s() {
e._reset(), t();
};return h(a, "scroll", s.bind(a, "expand")), h(r, "scroll", s.bind(r, "shrink")), e;
}((u = function u() {
if (x.resizer) return e(g("resize", i));
}, c = !1, f = [], function () {
f = Array.prototype.slice.call(arguments), d = d || this, c || (c = !0, n.requestAnimFrame.call(window, function () {
c = !1, u.apply(d, f);
}));
}));m = function m() {
if (x.resizer) {
var e = t.parentNode;e && e !== y.parentNode && e.insertBefore(y, e.firstChild), y._reset();
}
}, v = (p = t)[a] || (p[a] = {}), b = v.renderProxy = function (t) {
t.animationName === s && m();
}, n.each(l, function (t) {
h(p, t, b);
}), v.reflow = !!p.offsetParent, p.classList.add(r);
}function m(t) {
var e,
i,
o,
s = t[a] || {},
u = s.resizer;delete s.resizer, i = (e = t)[a] || {}, (o = i.renderProxy) && (n.each(l, function (t) {
f(e, t, o);
}), delete i.renderProxy), e.classList.remove(r), u && u.parentNode && u.parentNode.removeChild(u);
}e.exports = { _enabled: "undefined" != typeof window && "undefined" != typeof document, initialize: function initialize() {
var t,
e,
i,
n = "from{opacity:0.99}to{opacity:1}";e = "@-webkit-keyframes " + s + "{" + n + "}@keyframes " + s + "{" + n + "}." + r + "{-webkit-animation:" + s + " 0.001s;animation:" + s + " 0.001s;}", i = (t = this)._style || document.createElement("style"), t._style || (t._style = i, e = "/* Chart.js */\n" + e, i.setAttribute("type", "text/css"), document.getElementsByTagName("head")[0].appendChild(i)), i.appendChild(document.createTextNode(e));
}, acquireContext: function acquireContext(t, e) {
"string" == typeof t ? t = document.getElementById(t) : t.length && (t = t[0]), t && t.canvas && (t = t.canvas);var i = t && t.getContext && t.getContext("2d");return i && i.canvas === t ? (function (t, e) {
var i = t.style,
n = t.getAttribute("height"),
o = t.getAttribute("width");if (t[a] = { initial: { height: n, width: o, style: { display: i.display, height: i.height, width: i.width } } }, i.display = i.display || "block", null === o || "" === o) {
var r = d(t, "width");void 0 !== r && (t.width = r);
}if (null === n || "" === n) if ("" === t.style.height) t.height = t.width / (e.options.aspectRatio || 2);else {
var s = d(t, "height");void 0 !== r && (t.height = s);
}
}(t, e), i) : null;
}, releaseContext: function releaseContext(t) {
var e = t.canvas;if (e[a]) {
var i = e[a].initial;["height", "width"].forEach(function (t) {
var a = i[t];n.isNullOrUndef(a) ? e.removeAttribute(t) : e.setAttribute(t, a);
}), n.each(i.style || {}, function (t, i) {
e.style[i] = t;
}), e.width = e.width, delete e[a];
}
}, addEventListener: function addEventListener(t, e, i) {
var o = t.canvas;if ("resize" !== e) {
var r = i[a] || (i[a] = {});h(o, e, (r.proxies || (r.proxies = {}))[t.id + "_" + e] = function (e) {
var a, o, r, s;i((o = t, r = u[(a = e).type] || a.type, s = n.getRelativePosition(a, o), g(r, o, s.x, s.y, a)));
});
} else p(o, i, t);
}, removeEventListener: function removeEventListener(t, e, i) {
var n = t.canvas;if ("resize" !== e) {
var o = ((i[a] || {}).proxies || {})[t.id + "_" + e];o && f(n, e, o);
} else m(n);
} }, n.addEvent = h, n.removeEvent = f;
}, { 45: 45 }], 48: [function (t, e, i) {
"use strict";
var n = t(45),
a = t(46),
o = t(47),
r = o._enabled ? o : a;e.exports = n.extend({ initialize: function initialize() {}, acquireContext: function acquireContext() {}, releaseContext: function releaseContext() {}, addEventListener: function addEventListener() {}, removeEventListener: function removeEventListener() {} }, r);
}, { 45: 45, 46: 46, 47: 47 }], 49: [function (t, e, i) {
"use strict";
e.exports = {}, e.exports.filler = t(50), e.exports.legend = t(51), e.exports.title = t(52);
}, { 50: 50, 51: 51, 52: 52 }], 50: [function (t, e, i) {
"use strict";
var n = t(25),
a = t(40),
o = t(45);n._set("global", { plugins: { filler: { propagate: !0 } } });var r = { dataset: function dataset(t) {
var e = t.fill,
i = t.chart,
n = i.getDatasetMeta(e),
a = n && i.isDatasetVisible(e) && n.dataset._children || [],
o = a.length || 0;return o ? function (t, e) {
return e < o && a[e]._view || null;
} : null;
}, boundary: function boundary(t) {
var e = t.boundary,
i = e ? e.x : null,
n = e ? e.y : null;return function (t) {
return { x: null === i ? t.x : i, y: null === n ? t.y : n };
};
} };function s(t, e, i) {
var n,
a = t._model || {},
o = a.fill;if (void 0 === o && (o = !!a.backgroundColor), !1 === o || null === o) return !1;if (!0 === o) return "origin";if (n = parseFloat(o, 10), isFinite(n) && Math.floor(n) === n) return "-" !== o[0] && "+" !== o[0] || (n = e + n), !(n === e || n < 0 || n >= i) && n;switch (o) {case "bottom":
return "start";case "top":
return "end";case "zero":
return "origin";case "origin":case "start":case "end":
return o;default:
return !1;}
}function l(t) {
var e,
i = t.el._model || {},
n = t.el._scale || {},
a = t.fill,
o = null;if (isFinite(a)) return null;if ("start" === a ? o = void 0 === i.scaleBottom ? n.bottom : i.scaleBottom : "end" === a ? o = void 0 === i.scaleTop ? n.top : i.scaleTop : void 0 !== i.scaleZero ? o = i.scaleZero : n.getBasePosition ? o = n.getBasePosition() : n.getBasePixel && (o = n.getBasePixel()), null != o) {
if (void 0 !== o.x && void 0 !== o.y) return o;if ("number" == typeof o && isFinite(o)) return { x: (e = n.isHorizontal()) ? o : null, y: e ? null : o };
}return null;
}function u(t, e, i) {
var n,
a = t[e].fill,
o = [e];if (!i) return a;for (; !1 !== a && -1 === o.indexOf(a);) {
if (!isFinite(a)) return a;if (!(n = t[a])) return !1;if (n.visible) return a;o.push(a), a = n.fill;
}return !1;
}function d(t) {
return t && !t.skip;
}function c(t, e, i, n, a) {
var r;if (n && a) {
for (t.moveTo(e[0].x, e[0].y), r = 1; r < n; ++r) {
o.canvas.lineTo(t, e[r - 1], e[r]);
}for (t.lineTo(i[a - 1].x, i[a - 1].y), r = a - 1; r > 0; --r) {
o.canvas.lineTo(t, i[r], i[r - 1], !0);
}
}
}e.exports = { id: "filler", afterDatasetsUpdate: function afterDatasetsUpdate(t, e) {
var i,
n,
o,
d,
c,
h,
f,
g = (t.data.datasets || []).length,
p = e.propagate,
m = [];for (n = 0; n < g; ++n) {
d = null, (o = (i = t.getDatasetMeta(n)).dataset) && o._model && o instanceof a.Line && (d = { visible: t.isDatasetVisible(n), fill: s(o, n, g), chart: t, el: o }), i.$filler = d, m.push(d);
}for (n = 0; n < g; ++n) {
(d = m[n]) && (d.fill = u(m, n, p), d.boundary = l(d), d.mapper = (void 0, f = void 0, h = (c = d).fill, f = "dataset", !1 === h ? null : (isFinite(h) || (f = "boundary"), r[f](c))));
}
}, beforeDatasetDraw: function beforeDatasetDraw(t, e) {
var i = e.meta.$filler;if (i) {
var a = t.ctx,
r = i.el,
s = r._view,
l = r._children || [],
u = i.mapper,
h = s.backgroundColor || n.global.defaultColor;u && h && l.length && (o.canvas.clipArea(a, t.chartArea), function (t, e, i, n, a, o) {
var r,
s,
l,
u,
h,
f,
g,
p = e.length,
m = n.spanGaps,
v = [],
b = [],
x = 0,
y = 0;for (t.beginPath(), r = 0, s = p + !!o; r < s; ++r) {
h = i(u = e[l = r % p]._view, l, n), f = d(u), g = d(h), f && g ? (x = v.push(u), y = b.push(h)) : x && y && (m ? (f && v.push(u), g && b.push(h)) : (c(t, v, b, x, y), x = y = 0, v = [], b = []));
}c(t, v, b, x, y), t.closePath(), t.fillStyle = a, t.fill();
}(a, l, u, s, h, r._loop), o.canvas.unclipArea(a));
}
} };
}, { 25: 25, 40: 40, 45: 45 }], 51: [function (t, e, i) {
"use strict";
var n = t(25),
a = t(26),
o = t(45),
r = t(30),
s = o.noop;function l(t, e) {
return t.usePointStyle ? e * Math.SQRT2 : t.boxWidth;
}n._set("global", { legend: { display: !0, position: "top", fullWidth: !0, reverse: !1, weight: 1e3, onClick: function onClick(t, e) {
var i = e.datasetIndex,
n = this.chart,
a = n.getDatasetMeta(i);a.hidden = null === a.hidden ? !n.data.datasets[i].hidden : null, n.update();
}, onHover: null, labels: { boxWidth: 40, padding: 10, generateLabels: function generateLabels(t) {
var e = t.data;return o.isArray(e.datasets) ? e.datasets.map(function (e, i) {
return { text: e.label, fillStyle: o.isArray(e.backgroundColor) ? e.backgroundColor[0] : e.backgroundColor, hidden: !t.isDatasetVisible(i), lineCap: e.borderCapStyle, lineDash: e.borderDash, lineDashOffset: e.borderDashOffset, lineJoin: e.borderJoinStyle, lineWidth: e.borderWidth, strokeStyle: e.borderColor, pointStyle: e.pointStyle, datasetIndex: i };
}, this) : [];
} } }, legendCallback: function legendCallback(t) {
var e = [];e.push('');for (var i = 0; i < t.data.datasets.length; i++) {
e.push('- '), t.data.datasets[i].label && e.push(t.data.datasets[i].label), e.push("
");
}return e.push("
"), e.join("");
} });var u = a.extend({ initialize: function initialize(t) {
o.extend(this, t), this.legendHitBoxes = [], this.doughnutMode = !1;
}, beforeUpdate: s, update: function update(t, e, i) {
var n = this;return n.beforeUpdate(), n.maxWidth = t, n.maxHeight = e, n.margins = i, n.beforeSetDimensions(), n.setDimensions(), n.afterSetDimensions(), n.beforeBuildLabels(), n.buildLabels(), n.afterBuildLabels(), n.beforeFit(), n.fit(), n.afterFit(), n.afterUpdate(), n.minSize;
}, afterUpdate: s, beforeSetDimensions: s, setDimensions: function setDimensions() {
var t = this;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 = { width: 0, height: 0 };
}, afterSetDimensions: s, beforeBuildLabels: s, buildLabels: function buildLabels() {
var t = this,
e = t.options.labels || {},
i = o.callback(e.generateLabels, [t.chart], t) || [];e.filter && (i = i.filter(function (i) {
return e.filter(i, t.chart.data);
})), t.options.reverse && i.reverse(), t.legendItems = i;
}, afterBuildLabels: s, beforeFit: s, fit: function fit() {
var t = this,
e = t.options,
i = e.labels,
a = e.display,
r = t.ctx,
s = n.global,
u = o.valueOrDefault,
d = u(i.fontSize, s.defaultFontSize),
c = u(i.fontStyle, s.defaultFontStyle),
h = u(i.fontFamily, s.defaultFontFamily),
f = o.fontString(d, c, h),
g = t.legendHitBoxes = [],
p = t.minSize,
m = t.isHorizontal();if (m ? (p.width = t.maxWidth, p.height = a ? 10 : 0) : (p.width = a ? 10 : 0, p.height = t.maxHeight), a) if (r.font = f, m) {
var v = t.lineWidths = [0],
b = t.legendItems.length ? d + i.padding : 0;r.textAlign = "left", r.textBaseline = "top", o.each(t.legendItems, function (e, n) {
var a = l(i, d) + d / 2 + r.measureText(e.text).width;v[v.length - 1] + a + i.padding >= t.width && (b += d + i.padding, v[v.length] = t.left), g[n] = { left: 0, top: 0, width: a, height: d }, v[v.length - 1] += a + i.padding;
}), p.height += b;
} else {
var x = i.padding,
y = t.columnWidths = [],
k = i.padding,
M = 0,
w = 0,
S = d + x;o.each(t.legendItems, function (t, e) {
var n = l(i, d) + d / 2 + r.measureText(t.text).width;w + S > p.height && (k += M + i.padding, y.push(M), M = 0, w = 0), M = Math.max(M, n), w += S, g[e] = { left: 0, top: 0, width: n, height: d };
}), k += M, y.push(M), p.width += k;
}t.width = p.width, t.height = p.height;
}, afterFit: s, isHorizontal: function isHorizontal() {
return "top" === this.options.position || "bottom" === this.options.position;
}, draw: function draw() {
var t = this,
e = t.options,
i = e.labels,
a = n.global,
r = a.elements.line,
s = t.width,
u = t.lineWidths;if (e.display) {
var d,
c = t.ctx,
h = o.valueOrDefault,
f = h(i.fontColor, a.defaultFontColor),
g = h(i.fontSize, a.defaultFontSize),
p = h(i.fontStyle, a.defaultFontStyle),
m = h(i.fontFamily, a.defaultFontFamily),
v = o.fontString(g, p, m);c.textAlign = "left", c.textBaseline = "middle", c.lineWidth = .5, c.strokeStyle = f, c.fillStyle = f, c.font = v;var b = l(i, g),
x = t.legendHitBoxes,
y = t.isHorizontal();d = y ? { x: t.left + (s - u[0]) / 2, y: t.top + i.padding, line: 0 } : { x: t.left + i.padding, y: t.top + i.padding, line: 0 };var k = g + i.padding;o.each(t.legendItems, function (n, l) {
var f,
p,
m,
v,
M,
w = c.measureText(n.text).width,
S = b + g / 2 + w,
C = d.x,
_ = d.y;y ? C + S >= s && (_ = d.y += k, d.line++, C = d.x = t.left + (s - u[d.line]) / 2) : _ + k > t.bottom && (C = d.x = C + t.columnWidths[d.line] + i.padding, _ = d.y = t.top + i.padding, d.line++), function (t, i, n) {
if (!(isNaN(b) || b <= 0)) {
c.save(), c.fillStyle = h(n.fillStyle, a.defaultColor), c.lineCap = h(n.lineCap, r.borderCapStyle), c.lineDashOffset = h(n.lineDashOffset, r.borderDashOffset), c.lineJoin = h(n.lineJoin, r.borderJoinStyle), c.lineWidth = h(n.lineWidth, r.borderWidth), c.strokeStyle = h(n.strokeStyle, a.defaultColor);var s = 0 === h(n.lineWidth, r.borderWidth);if (c.setLineDash && c.setLineDash(h(n.lineDash, r.borderDash)), e.labels && e.labels.usePointStyle) {
var l = g * Math.SQRT2 / 2,
u = l / Math.SQRT2,
d = t + u,
f = i + u;o.canvas.drawPoint(c, n.pointStyle, l, d, f);
} else s || c.strokeRect(t, i, b, g), c.fillRect(t, i, b, g);c.restore();
}
}(C, _, n), x[l].left = C, x[l].top = _, f = n, p = w, v = b + (m = g / 2) + C, M = _ + m, c.fillText(f.text, v, M), f.hidden && (c.beginPath(), c.lineWidth = 2, c.moveTo(v, M), c.lineTo(v + p, M), c.stroke()), y ? d.x += S + i.padding : d.y += k;
});
}
}, handleEvent: function handleEvent(t) {
var e = this,
i = e.options,
n = "mouseup" === t.type ? "click" : t.type,
a = !1;if ("mousemove" === n) {
if (!i.onHover) return;
} else {
if ("click" !== n) return;if (!i.onClick) return;
}var o = t.x,
r = t.y;if (o >= e.left && o <= e.right && r >= e.top && r <= e.bottom) for (var s = e.legendHitBoxes, l = 0; l < s.length; ++l) {
var u = s[l];if (o >= u.left && o <= u.left + u.width && r >= u.top && r <= u.top + u.height) {
if ("click" === n) {
i.onClick.call(e, t.native, e.legendItems[l]), a = !0;break;
}if ("mousemove" === n) {
i.onHover.call(e, t.native, e.legendItems[l]), a = !0;break;
}
}
}return a;
} });function d(t, e) {
var i = new u({ ctx: t.ctx, options: e, chart: t });r.configure(t, i, e), r.addBox(t, i), t.legend = i;
}e.exports = { id: "legend", _element: u, beforeInit: function beforeInit(t) {
var e = t.options.legend;e && d(t, e);
}, beforeUpdate: function beforeUpdate(t) {
var e = t.options.legend,
i = t.legend;e ? (o.mergeIf(e, n.global.legend), i ? (r.configure(t, i, e), i.options = e) : d(t, e)) : i && (r.removeBox(t, i), delete t.legend);
}, afterEvent: function afterEvent(t, e) {
var i = t.legend;i && i.handleEvent(e);
} };
}, { 25: 25, 26: 26, 30: 30, 45: 45 }], 52: [function (t, e, i) {
"use strict";
var n = t(25),
a = t(26),
o = t(45),
r = t(30),
s = o.noop;n._set("global", { title: { display: !1, fontStyle: "bold", fullWidth: !0, lineHeight: 1.2, padding: 10, position: "top", text: "", weight: 2e3 } });var l = a.extend({ initialize: function initialize(t) {
o.extend(this, t), this.legendHitBoxes = [];
}, beforeUpdate: s, update: function update(t, e, i) {
var n = this;return n.beforeUpdate(), n.maxWidth = t, n.maxHeight = e, n.margins = i, n.beforeSetDimensions(), n.setDimensions(), n.afterSetDimensions(), n.beforeBuildLabels(), n.buildLabels(), n.afterBuildLabels(), n.beforeFit(), n.fit(), n.afterFit(), n.afterUpdate(), n.minSize;
}, afterUpdate: s, beforeSetDimensions: s, setDimensions: function setDimensions() {
var t = this;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 = { width: 0, height: 0 };
}, afterSetDimensions: s, beforeBuildLabels: s, buildLabels: s, afterBuildLabels: s, beforeFit: s, fit: function fit() {
var t = this,
e = o.valueOrDefault,
i = t.options,
a = i.display,
r = e(i.fontSize, n.global.defaultFontSize),
s = t.minSize,
l = o.isArray(i.text) ? i.text.length : 1,
u = o.options.toLineHeight(i.lineHeight, r),
d = a ? l * u + 2 * i.padding : 0;t.isHorizontal() ? (s.width = t.maxWidth, s.height = d) : (s.width = d, s.height = t.maxHeight), t.width = s.width, t.height = s.height;
}, afterFit: s, isHorizontal: function isHorizontal() {
var t = this.options.position;return "top" === t || "bottom" === t;
}, draw: function draw() {
var t = this,
e = t.ctx,
i = o.valueOrDefault,
a = t.options,
r = n.global;if (a.display) {
var s,
l,
u,
d = i(a.fontSize, r.defaultFontSize),
c = i(a.fontStyle, r.defaultFontStyle),
h = i(a.fontFamily, r.defaultFontFamily),
f = o.fontString(d, c, h),
g = o.options.toLineHeight(a.lineHeight, d),
p = g / 2 + a.padding,
m = 0,
v = t.top,
b = t.left,
x = t.bottom,
y = t.right;e.fillStyle = i(a.fontColor, r.defaultFontColor), e.font = f, t.isHorizontal() ? (l = b + (y - b) / 2, u = v + p, s = y - b) : (l = "left" === a.position ? b + p : y - p, u = v + (x - v) / 2, s = x - v, m = Math.PI * ("left" === a.position ? -.5 : .5)), e.save(), e.translate(l, u), e.rotate(m), e.textAlign = "center", e.textBaseline = "middle";var k = a.text;if (o.isArray(k)) for (var M = 0, w = 0; w < k.length; ++w) {
e.fillText(k[w], 0, M, s), M += g;
} else e.fillText(k, 0, 0, s);e.restore();
}
} });function u(t, e) {
var i = new l({ ctx: t.ctx, options: e, chart: t });r.configure(t, i, e), r.addBox(t, i), t.titleBlock = i;
}e.exports = { id: "title", _element: l, beforeInit: function beforeInit(t) {
var e = t.options.title;e && u(t, e);
}, beforeUpdate: function beforeUpdate(t) {
var e = t.options.title,
i = t.titleBlock;e ? (o.mergeIf(e, n.global.title), i ? (r.configure(t, i, e), i.options = e) : u(t, e)) : i && (r.removeBox(t, i), delete t.titleBlock);
} };
}, { 25: 25, 26: 26, 30: 30, 45: 45 }], 53: [function (t, e, i) {
"use strict";
e.exports = function (t) {
var e = t.Scale.extend({ getLabels: function getLabels() {
var t = this.chart.data;return this.options.labels || (this.isHorizontal() ? t.xLabels : t.yLabels) || t.labels;
}, determineDataLimits: function determineDataLimits() {
var t,
e = this,
i = e.getLabels();e.minIndex = 0, e.maxIndex = i.length - 1, void 0 !== e.options.ticks.min && (t = i.indexOf(e.options.ticks.min), e.minIndex = -1 !== t ? t : e.minIndex), void 0 !== e.options.ticks.max && (t = i.indexOf(e.options.ticks.max), e.maxIndex = -1 !== t ? t : e.maxIndex), e.min = i[e.minIndex], e.max = i[e.maxIndex];
}, buildTicks: function buildTicks() {
var t = this,
e = t.getLabels();t.ticks = 0 === t.minIndex && t.maxIndex === e.length - 1 ? e : e.slice(t.minIndex, t.maxIndex + 1);
}, getLabelForIndex: function getLabelForIndex(t, e) {
var i = this,
n = i.chart.data,
a = i.isHorizontal();return n.yLabels && !a ? i.getRightValue(n.datasets[e].data[t]) : i.ticks[t - i.minIndex];
}, getPixelForValue: function getPixelForValue(t, e) {
var i,
n = this,
a = n.options.offset,
o = Math.max(n.maxIndex + 1 - n.minIndex - (a ? 0 : 1), 1);if (null != t && (i = n.isHorizontal() ? t.x : t.y), void 0 !== i || void 0 !== t && isNaN(e)) {
t = i || t;var r = n.getLabels().indexOf(t);e = -1 !== r ? r : e;
}if (n.isHorizontal()) {
var s = n.width / o,
l = s * (e - n.minIndex);return a && (l += s / 2), n.left + Math.round(l);
}var u = n.height / o,
d = u * (e - n.minIndex);return a && (d += u / 2), n.top + Math.round(d);
}, getPixelForTick: function getPixelForTick(t) {
return this.getPixelForValue(this.ticks[t], t + this.minIndex, null);
}, getValueForPixel: function getValueForPixel(t) {
var e = this,
i = e.options.offset,
n = Math.max(e._ticks.length - (i ? 0 : 1), 1),
a = e.isHorizontal(),
o = (a ? e.width : e.height) / n;return t -= a ? e.left : e.top, i && (t -= o / 2), (t <= 0 ? 0 : Math.round(t / o)) + e.minIndex;
}, getBasePixel: function getBasePixel() {
return this.bottom;
} });t.scaleService.registerScaleType("category", e, { position: "bottom" });
};
}, {}], 54: [function (t, e, i) {
"use strict";
var n = t(25),
a = t(45),
o = t(34);e.exports = function (t) {
var e = { position: "left", ticks: { callback: o.formatters.linear } },
i = t.LinearScaleBase.extend({ determineDataLimits: function determineDataLimits() {
var t = this,
e = t.options,
i = t.chart,
n = i.data.datasets,
o = t.isHorizontal();function r(e) {
return o ? e.xAxisID === t.id : e.yAxisID === t.id;
}t.min = null, t.max = null;var s = e.stacked;if (void 0 === s && a.each(n, function (t, e) {
if (!s) {
var n = i.getDatasetMeta(e);i.isDatasetVisible(e) && r(n) && void 0 !== n.stack && (s = !0);
}
}), e.stacked || s) {
var l = {};a.each(n, function (n, o) {
var s = i.getDatasetMeta(o),
u = [s.type, void 0 === e.stacked && void 0 === s.stack ? o : "", s.stack].join(".");void 0 === l[u] && (l[u] = { positiveValues: [], negativeValues: [] });var d = l[u].positiveValues,
c = l[u].negativeValues;i.isDatasetVisible(o) && r(s) && a.each(n.data, function (i, n) {
var a = +t.getRightValue(i);isNaN(a) || s.data[n].hidden || (d[n] = d[n] || 0, c[n] = c[n] || 0, e.relativePoints ? d[n] = 100 : a < 0 ? c[n] += a : d[n] += a);
});
}), a.each(l, function (e) {
var i = e.positiveValues.concat(e.negativeValues),
n = a.min(i),
o = a.max(i);t.min = null === t.min ? n : Math.min(t.min, n), t.max = null === t.max ? o : Math.max(t.max, o);
});
} else a.each(n, function (e, n) {
var o = i.getDatasetMeta(n);i.isDatasetVisible(n) && r(o) && a.each(e.data, function (e, i) {
var n = +t.getRightValue(e);isNaN(n) || o.data[i].hidden || (null === t.min ? t.min = n : n < t.min && (t.min = n), null === t.max ? t.max = n : n > t.max && (t.max = n));
});
});t.min = isFinite(t.min) && !isNaN(t.min) ? t.min : 0, t.max = isFinite(t.max) && !isNaN(t.max) ? t.max : 1, this.handleTickRangeOptions();
}, getTickLimit: function getTickLimit() {
var t,
e = this.options.ticks;if (this.isHorizontal()) t = Math.min(e.maxTicksLimit ? e.maxTicksLimit : 11, Math.ceil(this.width / 50));else {
var i = a.valueOrDefault(e.fontSize, n.global.defaultFontSize);t = Math.min(e.maxTicksLimit ? e.maxTicksLimit : 11, Math.ceil(this.height / (2 * i)));
}return t;
}, handleDirectionalChanges: function handleDirectionalChanges() {
this.isHorizontal() || this.ticks.reverse();
}, getLabelForIndex: function getLabelForIndex(t, e) {
return +this.getRightValue(this.chart.data.datasets[e].data[t]);
}, getPixelForValue: function getPixelForValue(t) {
var e = this,
i = e.start,
n = +e.getRightValue(t),
a = e.end - i;return e.isHorizontal() ? e.left + e.width / a * (n - i) : e.bottom - e.height / a * (n - i);
}, getValueForPixel: function getValueForPixel(t) {
var e = this,
i = e.isHorizontal(),
n = i ? e.width : e.height,
a = (i ? t - e.left : e.bottom - t) / n;return e.start + (e.end - e.start) * a;
}, getPixelForTick: function getPixelForTick(t) {
return this.getPixelForValue(this.ticksAsNumbers[t]);
} });t.scaleService.registerScaleType("linear", i, e);
};
}, { 25: 25, 34: 34, 45: 45 }], 55: [function (t, e, i) {
"use strict";
var n = t(45);e.exports = function (t) {
var e = n.noop;t.LinearScaleBase = t.Scale.extend({ getRightValue: function getRightValue(e) {
return "string" == typeof e ? +e : t.Scale.prototype.getRightValue.call(this, e);
}, handleTickRangeOptions: function handleTickRangeOptions() {
var t = this,
e = t.options.ticks;if (e.beginAtZero) {
var i = n.sign(t.min),
a = n.sign(t.max);i < 0 && a < 0 ? t.max = 0 : i > 0 && a > 0 && (t.min = 0);
}var o = void 0 !== e.min || void 0 !== e.suggestedMin,
r = void 0 !== e.max || void 0 !== e.suggestedMax;void 0 !== e.min ? t.min = e.min : void 0 !== e.suggestedMin && (null === t.min ? t.min = e.suggestedMin : t.min = Math.min(t.min, e.suggestedMin)), void 0 !== e.max ? t.max = e.max : void 0 !== e.suggestedMax && (null === t.max ? t.max = e.suggestedMax : t.max = Math.max(t.max, e.suggestedMax)), o !== r && t.min >= t.max && (o ? t.max = t.min + 1 : t.min = t.max - 1), t.min === t.max && (t.max++, e.beginAtZero || t.min--);
}, getTickLimit: e, handleDirectionalChanges: e, buildTicks: function buildTicks() {
var t = this,
e = t.options.ticks,
i = t.getTickLimit(),
a = { maxTicks: i = Math.max(2, i), min: e.min, max: e.max, stepSize: n.valueOrDefault(e.fixedStepSize, e.stepSize) },
o = t.ticks = function (t, e) {
var i,
a = [];if (t.stepSize && t.stepSize > 0) i = t.stepSize;else {
var o = n.niceNum(e.max - e.min, !1);i = n.niceNum(o / (t.maxTicks - 1), !0);
}var r = Math.floor(e.min / i) * i,
s = Math.ceil(e.max / i) * i;t.min && t.max && t.stepSize && n.almostWhole((t.max - t.min) / t.stepSize, i / 1e3) && (r = t.min, s = t.max);var l = (s - r) / i;l = n.almostEquals(l, Math.round(l), i / 1e3) ? Math.round(l) : Math.ceil(l);var u = 1;i < 1 && (u = Math.pow(10, i.toString().length - 2), r = Math.round(r * u) / u, s = Math.round(s * u) / u), a.push(void 0 !== t.min ? t.min : r);for (var d = 1; d < l; ++d) {
a.push(Math.round((r + d * i) * u) / u);
}return a.push(void 0 !== t.max ? t.max : s), a;
}(a, t);t.handleDirectionalChanges(), t.max = n.max(o), t.min = n.min(o), e.reverse ? (o.reverse(), t.start = t.max, t.end = t.min) : (t.start = t.min, t.end = t.max);
}, convertTicksToLabels: function convertTicksToLabels() {
var e = this;e.ticksAsNumbers = e.ticks.slice(), e.zeroLineIndex = e.ticks.indexOf(0), t.Scale.prototype.convertTicksToLabels.call(e);
} });
};
}, { 45: 45 }], 56: [function (t, e, i) {
"use strict";
var n = t(45),
a = t(34);e.exports = function (t) {
var e = { position: "left", ticks: { callback: a.formatters.logarithmic } },
i = t.Scale.extend({ determineDataLimits: function determineDataLimits() {
var t = this,
e = t.options,
i = t.chart,
a = i.data.datasets,
o = t.isHorizontal();function r(e) {
return o ? e.xAxisID === t.id : e.yAxisID === t.id;
}t.min = null, t.max = null, t.minNotZero = null;var s = e.stacked;if (void 0 === s && n.each(a, function (t, e) {
if (!s) {
var n = i.getDatasetMeta(e);i.isDatasetVisible(e) && r(n) && void 0 !== n.stack && (s = !0);
}
}), e.stacked || s) {
var l = {};n.each(a, function (a, o) {
var s = i.getDatasetMeta(o),
u = [s.type, void 0 === e.stacked && void 0 === s.stack ? o : "", s.stack].join(".");i.isDatasetVisible(o) && r(s) && (void 0 === l[u] && (l[u] = []), n.each(a.data, function (e, i) {
var n = l[u],
a = +t.getRightValue(e);isNaN(a) || s.data[i].hidden || a < 0 || (n[i] = n[i] || 0, n[i] += a);
}));
}), n.each(l, function (e) {
if (e.length > 0) {
var i = n.min(e),
a = n.max(e);t.min = null === t.min ? i : Math.min(t.min, i), t.max = null === t.max ? a : Math.max(t.max, a);
}
});
} else n.each(a, function (e, a) {
var o = i.getDatasetMeta(a);i.isDatasetVisible(a) && r(o) && n.each(e.data, function (e, i) {
var n = +t.getRightValue(e);isNaN(n) || o.data[i].hidden || n < 0 || (null === t.min ? t.min = n : n < t.min && (t.min = n), null === t.max ? t.max = n : n > t.max && (t.max = n), 0 !== n && (null === t.minNotZero || n < t.minNotZero) && (t.minNotZero = n));
});
});this.handleTickRangeOptions();
}, handleTickRangeOptions: function handleTickRangeOptions() {
var t = this,
e = t.options.ticks,
i = n.valueOrDefault;t.min = i(e.min, t.min), t.max = i(e.max, t.max), t.min === t.max && (0 !== t.min && null !== t.min ? (t.min = Math.pow(10, Math.floor(n.log10(t.min)) - 1), t.max = Math.pow(10, Math.floor(n.log10(t.max)) + 1)) : (t.min = 1, t.max = 10)), null === t.min && (t.min = Math.pow(10, Math.floor(n.log10(t.max)) - 1)), null === t.max && (t.max = 0 !== t.min ? Math.pow(10, Math.floor(n.log10(t.min)) + 1) : 10), null === t.minNotZero && (t.min > 0 ? t.minNotZero = t.min : t.max < 1 ? t.minNotZero = Math.pow(10, Math.floor(n.log10(t.max))) : t.minNotZero = 1);
}, buildTicks: function buildTicks() {
var t = this,
e = t.options.ticks,
i = !t.isHorizontal(),
a = { min: e.min, max: e.max },
o = t.ticks = function (t, e) {
var i,
a,
o = [],
r = n.valueOrDefault,
s = r(t.min, Math.pow(10, Math.floor(n.log10(e.min)))),
l = Math.floor(n.log10(e.max)),
u = Math.ceil(e.max / Math.pow(10, l));0 === s ? (i = Math.floor(n.log10(e.minNotZero)), a = Math.floor(e.minNotZero / Math.pow(10, i)), o.push(s), s = a * Math.pow(10, i)) : (i = Math.floor(n.log10(s)), a = Math.floor(s / Math.pow(10, i)));for (var d = i < 0 ? Math.pow(10, Math.abs(i)) : 1; o.push(s), 10 == ++a && (a = 1, d = ++i >= 0 ? 1 : d), s = Math.round(a * Math.pow(10, i) * d) / d, i < l || i === l && a < u;) {}var c = r(t.max, s);return o.push(c), o;
}(a, t);t.max = n.max(o), t.min = n.min(o), e.reverse ? (i = !i, t.start = t.max, t.end = t.min) : (t.start = t.min, t.end = t.max), i && o.reverse();
}, convertTicksToLabels: function convertTicksToLabels() {
this.tickValues = this.ticks.slice(), t.Scale.prototype.convertTicksToLabels.call(this);
}, getLabelForIndex: function getLabelForIndex(t, e) {
return +this.getRightValue(this.chart.data.datasets[e].data[t]);
}, getPixelForTick: function getPixelForTick(t) {
return this.getPixelForValue(this.tickValues[t]);
}, _getFirstTickValue: function _getFirstTickValue(t) {
var e = Math.floor(n.log10(t));return Math.floor(t / Math.pow(10, e)) * Math.pow(10, e);
}, getPixelForValue: function getPixelForValue(e) {
var i,
a,
o,
r,
s,
l = this,
u = l.options.ticks.reverse,
d = n.log10,
c = l._getFirstTickValue(l.minNotZero),
h = 0;return e = +l.getRightValue(e), u ? (o = l.end, r = l.start, s = -1) : (o = l.start, r = l.end, s = 1), l.isHorizontal() ? (i = l.width, a = u ? l.right : l.left) : (i = l.height, s *= -1, a = u ? l.top : l.bottom), e !== o && (0 === o && (i -= h = n.getValueOrDefault(l.options.ticks.fontSize, t.defaults.global.defaultFontSize), o = c), 0 !== e && (h += i / (d(r) - d(o)) * (d(e) - d(o))), a += s * h), a;
}, getValueForPixel: function getValueForPixel(e) {
var i,
a,
o,
r,
s = this,
l = s.options.ticks.reverse,
u = n.log10,
d = s._getFirstTickValue(s.minNotZero);if (l ? (a = s.end, o = s.start) : (a = s.start, o = s.end), s.isHorizontal() ? (i = s.width, r = l ? s.right - e : e - s.left) : (i = s.height, r = l ? e - s.top : s.bottom - e), r !== a) {
if (0 === a) {
var c = n.getValueOrDefault(s.options.ticks.fontSize, t.defaults.global.defaultFontSize);r -= c, i -= c, a = d;
}r *= u(o) - u(a), r /= i, r = Math.pow(10, u(a) + r);
}return r;
} });t.scaleService.registerScaleType("logarithmic", i, e);
};
}, { 34: 34, 45: 45 }], 57: [function (t, e, i) {
"use strict";
var n = t(25),
a = t(45),
o = t(34);e.exports = function (t) {
var e = n.global,
i = { display: !0, animate: !0, position: "chartArea", angleLines: { display: !0, color: "rgba(0, 0, 0, 0.1)", lineWidth: 1 }, gridLines: { circular: !1 }, ticks: { showLabelBackdrop: !0, backdropColor: "rgba(255,255,255,0.75)", backdropPaddingY: 2, backdropPaddingX: 2, callback: o.formatters.linear }, pointLabels: { display: !0, fontSize: 10, callback: function callback(t) {
return t;
} } };function r(t) {
var e = t.options;return e.angleLines.display || e.pointLabels.display ? t.chart.data.labels.length : 0;
}function s(t) {
var i = t.options.pointLabels,
n = a.valueOrDefault(i.fontSize, e.defaultFontSize),
o = a.valueOrDefault(i.fontStyle, e.defaultFontStyle),
r = a.valueOrDefault(i.fontFamily, e.defaultFontFamily);return { size: n, style: o, family: r, font: a.fontString(n, o, r) };
}function l(t, e, i, n, a) {
return t === n || t === a ? { start: e - i / 2, end: e + i / 2 } : t < n || t > a ? { start: e - i - 5, end: e } : { start: e, end: e + i + 5 };
}function u(t, e, i, n) {
if (a.isArray(e)) for (var o = i.y, r = 1.5 * n, s = 0; s < e.length; ++s) {
t.fillText(e[s], i.x, o), o += r;
} else t.fillText(e, i.x, i.y);
}function d(t) {
return a.isNumber(t) ? t : 0;
}var c = t.LinearScaleBase.extend({ setDimensions: function setDimensions() {
var t = this,
i = t.options,
n = i.ticks;t.width = t.maxWidth, t.height = t.maxHeight, t.xCenter = Math.round(t.width / 2), t.yCenter = Math.round(t.height / 2);var o = a.min([t.height, t.width]),
r = a.valueOrDefault(n.fontSize, e.defaultFontSize);t.drawingArea = i.display ? o / 2 - (r / 2 + n.backdropPaddingY) : o / 2;
}, determineDataLimits: function determineDataLimits() {
var t = this,
e = t.chart,
i = Number.POSITIVE_INFINITY,
n = Number.NEGATIVE_INFINITY;a.each(e.data.datasets, function (o, r) {
if (e.isDatasetVisible(r)) {
var s = e.getDatasetMeta(r);a.each(o.data, function (e, a) {
var o = +t.getRightValue(e);isNaN(o) || s.data[a].hidden || (i = Math.min(o, i), n = Math.max(o, n));
});
}
}), t.min = i === Number.POSITIVE_INFINITY ? 0 : i, t.max = n === Number.NEGATIVE_INFINITY ? 0 : n, t.handleTickRangeOptions();
}, getTickLimit: function getTickLimit() {
var t = this.options.ticks,
i = a.valueOrDefault(t.fontSize, e.defaultFontSize);return Math.min(t.maxTicksLimit ? t.maxTicksLimit : 11, Math.ceil(this.drawingArea / (1.5 * i)));
}, convertTicksToLabels: function convertTicksToLabels() {
var e = this;t.LinearScaleBase.prototype.convertTicksToLabels.call(e), e.pointLabels = e.chart.data.labels.map(e.options.pointLabels.callback, e);
}, getLabelForIndex: function getLabelForIndex(t, e) {
return +this.getRightValue(this.chart.data.datasets[e].data[t]);
}, fit: function fit() {
var t, e;this.options.pointLabels.display ? function (t) {
var e,
i,
n,
o = s(t),
u = Math.min(t.height / 2, t.width / 2),
d = { r: t.width, l: 0, t: t.height, b: 0 },
c = {};t.ctx.font = o.font, t._pointLabelSizes = [];var h,
f,
g,
p = r(t);for (e = 0; e < p; e++) {
n = t.getPointPosition(e, u), h = t.ctx, f = o.size, g = t.pointLabels[e] || "", i = a.isArray(g) ? { w: a.longestText(h, h.font, g), h: g.length * f + 1.5 * (g.length - 1) * f } : { w: h.measureText(g).width, h: f }, t._pointLabelSizes[e] = i;var m = t.getIndexAngle(e),
v = a.toDegrees(m) % 360,
b = l(v, n.x, i.w, 0, 180),
x = l(v, n.y, i.h, 90, 270);b.start < d.l && (d.l = b.start, c.l = m), b.end > d.r && (d.r = b.end, c.r = m), x.start < d.t && (d.t = x.start, c.t = m), x.end > d.b && (d.b = x.end, c.b = m);
}t.setReductions(u, d, c);
}(this) : (t = this, e = Math.min(t.height / 2, t.width / 2), t.drawingArea = Math.round(e), t.setCenterPoint(0, 0, 0, 0));
}, setReductions: function setReductions(t, e, i) {
var n = e.l / Math.sin(i.l),
a = Math.max(e.r - this.width, 0) / Math.sin(i.r),
o = -e.t / Math.cos(i.t),
r = -Math.max(e.b - this.height, 0) / Math.cos(i.b);n = d(n), a = d(a), o = d(o), r = d(r), this.drawingArea = Math.min(Math.round(t - (n + a) / 2), Math.round(t - (o + r) / 2)), this.setCenterPoint(n, a, o, r);
}, setCenterPoint: function setCenterPoint(t, e, i, n) {
var a = this,
o = a.width - e - a.drawingArea,
r = t + a.drawingArea,
s = i + a.drawingArea,
l = a.height - n - a.drawingArea;a.xCenter = Math.round((r + o) / 2 + a.left), a.yCenter = Math.round((s + l) / 2 + a.top);
}, getIndexAngle: function getIndexAngle(t) {
return t * (2 * Math.PI / r(this)) + (this.chart.options && this.chart.options.startAngle ? this.chart.options.startAngle : 0) * Math.PI * 2 / 360;
}, getDistanceFromCenterForValue: function getDistanceFromCenterForValue(t) {
var e = this;if (null === t) return 0;var i = e.drawingArea / (e.max - e.min);return e.options.ticks.reverse ? (e.max - t) * i : (t - e.min) * i;
}, getPointPosition: function getPointPosition(t, e) {
var i = this.getIndexAngle(t) - Math.PI / 2;return { x: Math.round(Math.cos(i) * e) + this.xCenter, y: Math.round(Math.sin(i) * e) + this.yCenter };
}, getPointPositionForValue: function getPointPositionForValue(t, e) {
return this.getPointPosition(t, this.getDistanceFromCenterForValue(e));
}, getBasePosition: function getBasePosition() {
var t = this.min,
e = this.max;return this.getPointPositionForValue(0, this.beginAtZero ? 0 : t < 0 && e < 0 ? e : t > 0 && e > 0 ? t : 0);
}, draw: function draw() {
var t = this,
i = t.options,
n = i.gridLines,
o = i.ticks,
l = a.valueOrDefault;if (i.display) {
var d = t.ctx,
c = this.getIndexAngle(0),
h = l(o.fontSize, e.defaultFontSize),
f = l(o.fontStyle, e.defaultFontStyle),
g = l(o.fontFamily, e.defaultFontFamily),
p = a.fontString(h, f, g);a.each(t.ticks, function (i, s) {
if (s > 0 || o.reverse) {
var u = t.getDistanceFromCenterForValue(t.ticksAsNumbers[s]);if (n.display && 0 !== s && function (t, e, i, n) {
var o = t.ctx;if (o.strokeStyle = a.valueAtIndexOrDefault(e.color, n - 1), o.lineWidth = a.valueAtIndexOrDefault(e.lineWidth, n - 1), t.options.gridLines.circular) o.beginPath(), o.arc(t.xCenter, t.yCenter, i, 0, 2 * Math.PI), o.closePath(), o.stroke();else {
var s = r(t);if (0 === s) return;o.beginPath();var l = t.getPointPosition(0, i);o.moveTo(l.x, l.y);for (var u = 1; u < s; u++) {
l = t.getPointPosition(u, i), o.lineTo(l.x, l.y);
}o.closePath(), o.stroke();
}
}(t, n, u, s), o.display) {
var f = l(o.fontColor, e.defaultFontColor);if (d.font = p, d.save(), d.translate(t.xCenter, t.yCenter), d.rotate(c), o.showLabelBackdrop) {
var g = d.measureText(i).width;d.fillStyle = o.backdropColor, d.fillRect(-g / 2 - o.backdropPaddingX, -u - h / 2 - o.backdropPaddingY, g + 2 * o.backdropPaddingX, h + 2 * o.backdropPaddingY);
}d.textAlign = "center", d.textBaseline = "middle", d.fillStyle = f, d.fillText(i, 0, -u), d.restore();
}
}
}), (i.angleLines.display || i.pointLabels.display) && function (t) {
var i = t.ctx,
n = t.options,
o = n.angleLines,
l = n.pointLabels;i.lineWidth = o.lineWidth, i.strokeStyle = o.color;var d,
c,
h,
f,
g = t.getDistanceFromCenterForValue(n.ticks.reverse ? t.min : t.max),
p = s(t);i.textBaseline = "top";for (var m = r(t) - 1; m >= 0; m--) {
if (o.display) {
var v = t.getPointPosition(m, g);i.beginPath(), i.moveTo(t.xCenter, t.yCenter), i.lineTo(v.x, v.y), i.stroke(), i.closePath();
}if (l.display) {
var b = t.getPointPosition(m, g + 5),
x = a.valueAtIndexOrDefault(l.fontColor, m, e.defaultFontColor);i.font = p.font, i.fillStyle = x;var y = t.getIndexAngle(m),
k = a.toDegrees(y);i.textAlign = 0 === (f = k) || 180 === f ? "center" : f < 180 ? "left" : "right", d = k, c = t._pointLabelSizes[m], h = b, 90 === d || 270 === d ? h.y -= c.h / 2 : (d > 270 || d < 90) && (h.y -= c.h), u(i, t.pointLabels[m] || "", b, p.size);
}
}
}(t);
}
} });t.scaleService.registerScaleType("radialLinear", c, i);
};
}, { 25: 25, 34: 34, 45: 45 }], 58: [function (t, e, i) {
"use strict";
var n = t(1);n = "function" == typeof n ? n : window.moment;var a = t(25),
o = t(45),
r = Number.MIN_SAFE_INTEGER || -9007199254740991,
s = Number.MAX_SAFE_INTEGER || 9007199254740991,
l = { millisecond: { common: !0, size: 1, steps: [1, 2, 5, 10, 20, 50, 100, 250, 500] }, second: { common: !0, size: 1e3, steps: [1, 2, 5, 10, 30] }, minute: { common: !0, size: 6e4, steps: [1, 2, 5, 10, 30] }, hour: { common: !0, size: 36e5, steps: [1, 2, 3, 6, 12] }, day: { common: !0, size: 864e5, steps: [1, 2, 5] }, week: { common: !1, size: 6048e5, steps: [1, 2, 3, 4] }, month: { common: !0, size: 2628e6, steps: [1, 2, 3] }, quarter: { common: !1, size: 7884e6, steps: [1, 2, 3, 4] }, year: { common: !0, size: 3154e7 } },
u = Object.keys(l);function d(t, e) {
return t - e;
}function c(t) {
var e,
i,
n,
a = {},
o = [];for (e = 0, i = t.length; e < i; ++e) {
a[n = t[e]] || (a[n] = !0, o.push(n));
}return o;
}function h(t, e, i, n) {
var a = function (t, e, i) {
for (var n, a, o, r = 0, s = t.length - 1; r >= 0 && r <= s;) {
if (a = t[(n = r + s >> 1) - 1] || null, o = t[n], !a) return { lo: null, hi: o };if (o[e] < i) r = n + 1;else {
if (!(a[e] > i)) return { lo: a, hi: o };s = n - 1;
}
}return { lo: o, hi: null };
}(t, e, i),
o = a.lo ? a.hi ? a.lo : t[t.length - 2] : t[0],
r = a.lo ? a.hi ? a.hi : t[t.length - 1] : t[1],
s = r[e] - o[e],
l = s ? (i - o[e]) / s : 0,
u = (r[n] - o[n]) * l;return o[n] + u;
}function f(t, e) {
var i = e.parser,
a = e.parser || e.format;return "function" == typeof i ? i(t) : "string" == typeof t && "string" == typeof a ? n(t, a) : (t instanceof n || (t = n(t)), t.isValid() ? t : "function" == typeof a ? a(t) : t);
}function g(t, e) {
if (o.isNullOrUndef(t)) return null;var i = e.options.time,
n = f(e.getRightValue(t), i);return n.isValid() ? (i.round && n.startOf(i.round), n.valueOf()) : null;
}function p(t) {
for (var e = u.indexOf(t) + 1, i = u.length; e < i; ++e) {
if (l[u[e]].common) return u[e];
}
}function m(t, e, i, a) {
var r,
d = a.time,
c = d.unit || function (t, e, i, n) {
var a,
o,
r,
d = u.length;for (a = u.indexOf(t); a < d - 1; ++a) {
if (r = (o = l[u[a]]).steps ? o.steps[o.steps.length - 1] : s, o.common && Math.ceil((i - e) / (r * o.size)) <= n) return u[a];
}return u[d - 1];
}(d.minUnit, t, e, i),
h = p(c),
f = o.valueOrDefault(d.stepSize, d.unitStepSize),
g = "week" === c && d.isoWeekday,
m = a.ticks.major.enabled,
v = l[c],
b = n(t),
x = n(e),
y = [];for (f || (f = function (t, e, i, n) {
var a,
o,
r,
s = e - t,
u = l[i],
d = u.size,
c = u.steps;if (!c) return Math.ceil(s / (n * d));for (a = 0, o = c.length; a < o && (r = c[a], !(Math.ceil(s / (d * r)) <= n)); ++a) {}return r;
}(t, e, c, i)), g && (b = b.isoWeekday(g), x = x.isoWeekday(g)), b = b.startOf(g ? "day" : c), (x = x.startOf(g ? "day" : c)) < e && x.add(1, c), r = n(b), m && h && !g && !d.round && (r.startOf(h), r.add(~~((b - r) / (v.size * f)) * f, c)); r < x; r.add(f, c)) {
y.push(+r);
}return y.push(+r), y;
}e.exports = function (t) {
var e = t.Scale.extend({ initialize: function initialize() {
if (!n) 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");this.mergeTicksOptions(), t.Scale.prototype.initialize.call(this);
}, update: function update() {
var e = this.options;return e.time && e.time.format && console.warn("options.time.format is deprecated and replaced by options.time.parser."), t.Scale.prototype.update.apply(this, arguments);
}, getRightValue: function getRightValue(e) {
return e && void 0 !== e.t && (e = e.t), t.Scale.prototype.getRightValue.call(this, e);
}, determineDataLimits: function determineDataLimits() {
var t,
e,
i,
a,
l,
u,
h = this,
f = h.chart,
p = h.options.time,
m = p.unit || "day",
v = s,
b = r,
x = [],
y = [],
k = [];for (t = 0, i = f.data.labels.length; t < i; ++t) {
k.push(g(f.data.labels[t], h));
}for (t = 0, i = (f.data.datasets || []).length; t < i; ++t) {
if (f.isDatasetVisible(t)) {
if (l = f.data.datasets[t].data, o.isObject(l[0])) for (y[t] = [], e = 0, a = l.length; e < a; ++e) {
u = g(l[e], h), x.push(u), y[t][e] = u;
} else x.push.apply(x, k), y[t] = k.slice(0);
} else y[t] = [];
}k.length && (k = c(k).sort(d), v = Math.min(v, k[0]), b = Math.max(b, k[k.length - 1])), x.length && (x = c(x).sort(d), v = Math.min(v, x[0]), b = Math.max(b, x[x.length - 1])), v = g(p.min, h) || v, b = g(p.max, h) || b, v = v === s ? +n().startOf(m) : v, b = b === r ? +n().endOf(m) + 1 : b, h.min = Math.min(v, b), h.max = Math.max(v + 1, b), h._horizontal = h.isHorizontal(), h._table = [], h._timestamps = { data: x, datasets: y, labels: k };
}, buildTicks: function buildTicks() {
var t,
e,
i,
a,
o,
r,
s,
d,
c,
v,
b,
x,
y = this,
k = y.min,
M = y.max,
w = y.options,
S = w.time,
C = [],
_ = [];switch (w.ticks.source) {case "data":
C = y._timestamps.data;break;case "labels":
C = y._timestamps.labels;break;case "auto":default:
C = m(k, M, y.getLabelCapacity(k), w);}for ("ticks" === w.bounds && C.length && (k = C[0], M = C[C.length - 1]), k = g(S.min, y) || k, M = g(S.max, y) || M, t = 0, e = C.length; t < e; ++t) {
(i = C[t]) >= k && i <= M && _.push(i);
}return y.min = k, y.max = M, y._unit = S.unit || function (t, e, i, a) {
var o,
r,
s = n.duration(n(a).diff(n(i)));for (o = u.length - 1; o >= u.indexOf(e); o--) {
if (r = u[o], l[r].common && s.as(r) >= t.length) return r;
}return u[e ? u.indexOf(e) : 0];
}(_, S.minUnit, y.min, y.max), y._majorUnit = p(y._unit), y._table = function (t, e, i, n) {
if ("linear" === n || !t.length) return [{ time: e, pos: 0 }, { time: i, pos: 1 }];var a,
o,
r,
s,
l,
u = [],
d = [e];for (a = 0, o = t.length; a < o; ++a) {
(s = t[a]) > e && s < i && d.push(s);
}for (d.push(i), a = 0, o = d.length; a < o; ++a) {
l = d[a + 1], r = d[a - 1], s = d[a], void 0 !== r && void 0 !== l && Math.round((l + r) / 2) === s || u.push({ time: s, pos: a / (o - 1) });
}return u;
}(y._timestamps.data, k, M, w.distribution), y._offsets = (a = y._table, o = _, r = k, s = M, b = 0, x = 0, (d = w).offset && o.length && (d.time.min || (c = o.length > 1 ? o[1] : s, v = o[0], b = (h(a, "time", c, "pos") - h(a, "time", v, "pos")) / 2), d.time.max || (c = o[o.length - 1], v = o.length > 1 ? o[o.length - 2] : r, x = (h(a, "time", c, "pos") - h(a, "time", v, "pos")) / 2)), { left: b, right: x }), y._labelFormat = function (t, e) {
var i,
n,
a,
o = t.length;for (i = 0; i < o; i++) {
if (0 !== (n = f(t[i], e)).millisecond()) return "MMM D, YYYY h:mm:ss.SSS a";0 === n.second() && 0 === n.minute() && 0 === n.hour() || (a = !0);
}return a ? "MMM D, YYYY h:mm:ss a" : "MMM D, YYYY";
}(y._timestamps.data, S), function (t, e) {
var i,
a,
o,
r,
s = [];for (i = 0, a = t.length; i < a; ++i) {
o = t[i], r = !!e && o === +n(o).startOf(e), s.push({ value: o, major: r });
}return s;
}(_, y._majorUnit);
}, getLabelForIndex: function getLabelForIndex(t, e) {
var i = this.chart.data,
n = this.options.time,
a = i.labels && t < i.labels.length ? i.labels[t] : "",
r = i.datasets[e].data[t];return o.isObject(r) && (a = this.getRightValue(r)), n.tooltipFormat ? f(a, n).format(n.tooltipFormat) : "string" == typeof a ? a : f(a, n).format(this._labelFormat);
}, tickFormatFunction: function tickFormatFunction(t, e, i, n) {
var a = this.options,
r = t.valueOf(),
s = a.time.displayFormats,
l = s[this._unit],
u = this._majorUnit,
d = s[u],
c = t.clone().startOf(u).valueOf(),
h = a.ticks.major,
f = h.enabled && u && d && r === c,
g = t.format(n || (f ? d : l)),
p = f ? h : a.ticks.minor,
m = o.valueOrDefault(p.callback, p.userCallback);return m ? m(g, e, i) : g;
}, convertTicksToLabels: function convertTicksToLabels(t) {
var e,
i,
a = [];for (e = 0, i = t.length; e < i; ++e) {
a.push(this.tickFormatFunction(n(t[e].value), e, t));
}return a;
}, getPixelForOffset: function getPixelForOffset(t) {
var e = this,
i = e._horizontal ? e.width : e.height,
n = e._horizontal ? e.left : e.top,
a = h(e._table, "time", t, "pos");return n + i * (e._offsets.left + a) / (e._offsets.left + 1 + e._offsets.right);
}, getPixelForValue: function getPixelForValue(t, e, i) {
var n = null;if (void 0 !== e && void 0 !== i && (n = this._timestamps.datasets[i][e]), null === n && (n = g(t, this)), null !== n) return this.getPixelForOffset(n);
}, getPixelForTick: function getPixelForTick(t) {
var e = this.getTicks();return t >= 0 && t < e.length ? this.getPixelForOffset(e[t].value) : null;
}, getValueForPixel: function getValueForPixel(t) {
var e = this,
i = e._horizontal ? e.width : e.height,
a = e._horizontal ? e.left : e.top,
o = (i ? (t - a) / i : 0) * (e._offsets.left + 1 + e._offsets.left) - e._offsets.right,
r = h(e._table, "pos", o, "time");return n(r);
}, getLabelWidth: function getLabelWidth(t) {
var e = this.options.ticks,
i = this.ctx.measureText(t).width,
n = o.toRadians(e.maxRotation),
r = Math.cos(n),
s = Math.sin(n);return i * r + o.valueOrDefault(e.fontSize, a.global.defaultFontSize) * s;
}, getLabelCapacity: function getLabelCapacity(t) {
var e = this,
i = e.options.time.displayFormats.millisecond,
a = e.tickFormatFunction(n(t), 0, [], i),
o = e.getLabelWidth(a),
r = e.isHorizontal() ? e.width : e.height,
s = Math.floor(r / o);return s > 0 ? s : 1;
} });t.scaleService.registerScaleType("time", e, { position: "bottom", distribution: "linear", bounds: "data", time: { parser: !1, format: !1, unit: !1, round: !1, displayFormat: !1, isoWeekday: !1, minUnit: "millisecond", displayFormats: { millisecond: "h:mm:ss.SSS a", second: "h:mm:ss a", minute: "h:mm a", hour: "hA", day: "MMM D", week: "ll", month: "MMM YYYY", quarter: "[Q]Q - YYYY", year: "YYYY" } }, ticks: { autoSkip: !1, source: "auto", major: { enabled: !1 } } });
};
}, { 1: 1, 25: 25, 45: 45 }] }, {}, [7])(7);
});
"use strict";
(function (d) {
d.fn.shake = function (a) {
"function" === typeof a && (a = { callback: a });a = d.extend({ direction: "left", distance: 20, times: 3, speed: 140, easing: "swing" }, a);return this.each(function () {
var b = d(this),
k = { position: b.css("position"), top: b.css("top"), bottom: b.css("bottom"), left: b.css("left"), right: b.css("right") };b.css("position", "relative");var c = "up" == a.direction || "down" == a.direction ? "top" : "left",
e = "up" == a.direction || "left" == a.direction ? "pos" : "neg",
f = {},
g = {},
h = {};f[c] = ("pos" == e ? "-=" : "+=") + a.distance;g[c] = ("pos" == e ? "+=" : "-=") + 2 * a.distance;h[c] = ("pos" == e ? "-=" : "+=") + 2 * a.distance;b.animate(f, a.speed, a.easing);for (c = 1; c < a.times; c++) {
b.animate(g, a.speed, a.easing).animate(h, a.speed, a.easing);
}b.animate(g, a.speed, a.easing).animate(f, a.speed / 2, a.easing, function () {
b.css(k);a.callback && a.callback.apply(this, arguments);
});
});
};
})(jQuery);
"use strict";
/*
AngularJS v1.5.6
(c) 2010-2016 Google, Inc. http://angularjs.org
License: MIT
*/
(function (S, B) {
'use strict';
function Aa(a, b, c) {
if (!a) throw Ma("areq", b || "?", c || "required");return a;
}function Ba(a, b) {
if (!a && !b) return "";if (!a) return b;if (!b) return a;ca(a) && (a = a.join(" "));ca(b) && (b = b.join(" "));return a + " " + b;
}function Na(a) {
var b = {};a && (a.to || a.from) && (b.to = a.to, b.from = a.from);return b;
}function Y(a, b, c) {
var d = "";a = ca(a) ? a : a && P(a) && a.length ? a.split(/\s+/) : [];s(a, function (a, l) {
a && 0 < a.length && (d += 0 < l ? " " : "", d += c ? b + a : a + b);
});return d;
}function Oa(a) {
if (a instanceof E) switch (a.length) {case 0:
return a;
case 1:
if (1 === a[0].nodeType) return a;break;default:
return E(da(a));}if (1 === a.nodeType) return E(a);
}function da(a) {
if (!a[0]) return a;for (var b = 0; b < a.length; b++) {
var c = a[b];if (1 == c.nodeType) return c;
}
}function Pa(a, b, c) {
s(b, function (b) {
a.addClass(b, c);
});
}function Qa(a, b, c) {
s(b, function (b) {
a.removeClass(b, c);
});
}function V(a) {
return function (b, c) {
c.addClass && (Pa(a, b, c.addClass), c.addClass = null);c.removeClass && (Qa(a, b, c.removeClass), c.removeClass = null);
};
}function pa(a) {
a = a || {};if (!a.$$prepared) {
var b = a.domOperation || R;a.domOperation = function () {
a.$$domOperationFired = !0;b();b = R;
};a.$$prepared = !0;
}return a;
}function ha(a, b) {
Ca(a, b);Da(a, b);
}function Ca(a, b) {
b.from && (a.css(b.from), b.from = null);
}function Da(a, b) {
b.to && (a.css(b.to), b.to = null);
}function W(a, b, c) {
var d = b.options || {};c = c.options || {};var e = (d.addClass || "") + " " + (c.addClass || ""),
l = (d.removeClass || "") + " " + (c.removeClass || "");a = Ra(a.attr("class"), e, l);c.preparationClasses && (d.preparationClasses = Z(c.preparationClasses, d.preparationClasses), delete c.preparationClasses);
e = d.domOperation !== R ? d.domOperation : null;Ea(d, c);e && (d.domOperation = e);d.addClass = a.addClass ? a.addClass : null;d.removeClass = a.removeClass ? a.removeClass : null;b.addClass = d.addClass;b.removeClass = d.removeClass;return d;
}function Ra(a, b, c) {
function d(a) {
P(a) && (a = a.split(" "));var b = {};s(a, function (a) {
a.length && (b[a] = !0);
});return b;
}var e = {};a = d(a);b = d(b);s(b, function (a, b) {
e[b] = 1;
});c = d(c);s(c, function (a, b) {
e[b] = 1 === e[b] ? null : -1;
});var l = { addClass: "", removeClass: "" };s(e, function (b, c) {
var d, e;1 === b ? (d = "addClass", e = !a[c]) : -1 === b && (d = "removeClass", e = a[c]);e && (l[d].length && (l[d] += " "), l[d] += c);
});return l;
}function z(a) {
return a instanceof B.element ? a[0] : a;
}function Sa(a, b, c) {
var d = "";b && (d = Y(b, "ng-", !0));c.addClass && (d = Z(d, Y(c.addClass, "-add")));c.removeClass && (d = Z(d, Y(c.removeClass, "-remove")));d.length && (c.preparationClasses = d, a.addClass(d));
}function qa(a, b) {
var c = b ? "-" + b + "s" : "";la(a, [ma, c]);return [ma, c];
}function ta(a, b) {
var c = b ? "paused" : "",
d = $ + "PlayState";la(a, [d, c]);return [d, c];
}function la(a, b) {
a.style[b[0]] = b[1];
}function Z(a, b) {
return a ? b ? a + " " + b : a : b;
}function Fa(a, b, c) {
var d = Object.create(null),
e = a.getComputedStyle(b) || {};s(c, function (a, b) {
var c = e[a];if (c) {
var k = c.charAt(0);if ("-" === k || "+" === k || 0 <= k) c = Ta(c);0 === c && (c = null);d[b] = c;
}
});return d;
}function Ta(a) {
var b = 0;a = a.split(/\s*,\s*/);s(a, function (a) {
"s" == a.charAt(a.length - 1) && (a = a.substring(0, a.length - 1));a = parseFloat(a) || 0;b = b ? Math.max(a, b) : a;
});return b;
}function ua(a) {
return 0 === a || null != a;
}function Ga(a, b) {
var c = T,
d = a + "s";b ? c += "Duration" : d += " linear all";
return [c, d];
}function Ha() {
var a = Object.create(null);return { flush: function flush() {
a = Object.create(null);
}, count: function count(b) {
return (b = a[b]) ? b.total : 0;
}, get: function get(b) {
return (b = a[b]) && b.value;
}, put: function put(b, c) {
a[b] ? a[b].total++ : a[b] = { total: 1, value: c };
} };
}function Ia(a, b, c) {
s(c, function (c) {
a[c] = ea(a[c]) ? a[c] : b.style.getPropertyValue(c);
});
}var R = B.noop,
Ja = B.copy,
Ea = B.extend,
E = B.element,
s = B.forEach,
ca = B.isArray,
P = B.isString,
va = B.isObject,
O = B.isUndefined,
ea = B.isDefined,
Ka = B.isFunction,
wa = B.isElement,
T,
xa,
$,
ya;O(S.ontransitionend) && ea(S.onwebkittransitionend) ? (T = "WebkitTransition", xa = "webkitTransitionEnd transitionend") : (T = "transition", xa = "transitionend");O(S.onanimationend) && ea(S.onwebkitanimationend) ? ($ = "WebkitAnimation", ya = "webkitAnimationEnd animationend") : ($ = "animation", ya = "animationend");var ra = $ + "Delay",
za = $ + "Duration",
ma = T + "Delay",
La = T + "Duration",
Ma = B.$$minErr("ng"),
Ua = { transitionDuration: La, transitionDelay: ma, transitionProperty: T + "Property", animationDuration: za, animationDelay: ra, animationIterationCount: $ + "IterationCount" },
Va = { transitionDuration: La, transitionDelay: ma, animationDuration: za, animationDelay: ra };B.module("ngAnimate", []).directive("ngAnimateSwap", ["$animate", "$rootScope", function (a, b) {
return { restrict: "A", transclude: "element", terminal: !0, priority: 600, link: function link(b, d, e, l, m) {
var I, k;b.$watchCollection(e.ngAnimateSwap || e["for"], function (e) {
I && a.leave(I);k && (k.$destroy(), k = null);if (e || 0 === e) k = b.$new(), m(k, function (b) {
I = b;a.enter(b, null, d);
});
});
} };
}]).directive("ngAnimateChildren", ["$interpolate", function (a) {
return { link: function link(b, c, d) {
function e(a) {
c.data("$$ngAnimateChildren", "on" === a || "true" === a);
}var l = d.ngAnimateChildren;B.isString(l) && 0 === l.length ? c.data("$$ngAnimateChildren", !0) : (e(a(l)(b)), d.$observe("ngAnimateChildren", e));
} };
}]).factory("$$rAFScheduler", ["$$rAF", function (a) {
function b(a) {
d = d.concat(a);c();
}function c() {
if (d.length) {
for (var b = d.shift(), m = 0; m < b.length; m++) {
b[m]();
}e || a(function () {
e || c();
});
}
}var d, e;d = b.queue = [];b.waitUntilQuiet = function (b) {
e && e();e = a(function () {
e = null;b();c();
});
};return b;
}]).provider("$$animateQueue", ["$animateProvider", function (a) {
function b(a) {
if (!a) return null;a = a.split(" ");var b = Object.create(null);s(a, function (a) {
b[a] = !0;
});return b;
}function c(a, c) {
if (a && c) {
var d = b(c);return a.split(" ").some(function (a) {
return d[a];
});
}
}function d(a, b, c, d) {
return l[a].some(function (a) {
return a(b, c, d);
});
}function e(a, b) {
var c = 0 < (a.addClass || "").length,
d = 0 < (a.removeClass || "").length;return b ? c && d : c || d;
}var l = this.rules = { skip: [], cancel: [], join: [] };l.join.push(function (a, b, c) {
return !b.structural && e(b);
});l.skip.push(function (a, b, c) {
return !b.structural && !e(b);
});l.skip.push(function (a, b, c) {
return "leave" == c.event && b.structural;
});l.skip.push(function (a, b, c) {
return c.structural && 2 === c.state && !b.structural;
});l.cancel.push(function (a, b, c) {
return c.structural && b.structural;
});l.cancel.push(function (a, b, c) {
return 2 === c.state && b.structural;
});l.cancel.push(function (a, b, d) {
if (d.structural) return !1;a = b.addClass;b = b.removeClass;var e = d.addClass;d = d.removeClass;return O(a) && O(b) || O(e) && O(d) ? !1 : c(a, d) || c(b, e);
});this.$get = ["$$rAF", "$rootScope", "$rootElement", "$document", "$$HashMap", "$$animation", "$$AnimateRunner", "$templateRequest", "$$jqLite", "$$forceReflow", function (b, c, k, l, w, Wa, Q, u, F, n) {
function K() {
var a = !1;return function (b) {
a ? b() : c.$$postDigest(function () {
a = !0;b();
});
};
}function J(a, b, c) {
var f = z(b),
d = z(a),
L = [];(a = h[c]) && s(a, function (a) {
y.call(a.node, f) ? L.push(a.callback) : "leave" === c && y.call(a.node, d) && L.push(a.callback);
});return L;
}function r(a, b, c) {
var f = da(b);return a.filter(function (a) {
return !(a.node === f && (!c || a.callback === c));
});
}function t(a, h, x) {
function r(c, f, d, h) {
H(function () {
var c = J(oa, a, f);c.length ? b(function () {
s(c, function (b) {
b(a, d, h);
});"close" !== d || a[0].parentNode || sa.off(a);
}) : "close" !== d || a[0].parentNode || sa.off(a);
});c.progress(f, d, h);
}function g(b) {
var c = a,
f = p;f.preparationClasses && (c.removeClass(f.preparationClasses), f.preparationClasses = null);f.activeClasses && (c.removeClass(f.activeClasses), f.activeClasses = null);D(a, p);ha(a, p);p.domOperation();n.complete(!b);
}var p = Ja(x),
t,
oa;if (a = Oa(a)) t = z(a), oa = a.parent();var p = pa(p),
n = new Q(),
H = K();ca(p.addClass) && (p.addClass = p.addClass.join(" "));p.addClass && !P(p.addClass) && (p.addClass = null);ca(p.removeClass) && (p.removeClass = p.removeClass.join(" "));p.removeClass && !P(p.removeClass) && (p.removeClass = null);p.from && !va(p.from) && (p.from = null);p.to && !va(p.to) && (p.to = null);if (!t) return g(), n;x = [t.className, p.addClass, p.removeClass].join(" ");if (!Xa(x)) return g(), n;var k = 0 <= ["enter", "move", "leave"].indexOf(h),
y = l[0].hidden,
u = !f || y || L.get(t);x = !u && A.get(t) || {};var F = !!x.state;u || F && 1 == x.state || (u = !N(a, oa, h));if (u) return y && r(n, h, "start"), g(), y && r(n, h, "close"), n;k && M(a);y = { structural: k, element: a, event: h, addClass: p.addClass, removeClass: p.removeClass, close: g, options: p, runner: n };if (F) {
if (d("skip", a, y, x)) {
if (2 === x.state) return g(), n;W(a, x, y);return x.runner;
}if (d("cancel", a, y, x)) {
if (2 === x.state) x.runner.end();else if (x.structural) x.close();else return W(a, x, y), x.runner;
} else if (d("join", a, y, x)) if (2 === x.state) W(a, y, {});else return Sa(a, k ? h : null, p), h = y.event = x.event, p = W(a, x, y), x.runner;
} else W(a, y, {});(F = y.structural) || (F = "animate" === y.event && 0 < Object.keys(y.options.to || {}).length || e(y));if (!F) return g(), ka(a), n;var w = (x.counter || 0) + 1;y.counter = w;G(a, 1, y);c.$$postDigest(function () {
var b = A.get(t),
c = !b,
b = b || {},
f = 0 < (a.parent() || []).length && ("animate" === b.event || b.structural || e(b));if (c || b.counter !== w || !f) {
c && (D(a, p), ha(a, p));if (c || k && b.event !== h) p.domOperation(), n.end();f || ka(a);
} else h = !b.structural && e(b, !0) ? "setClass" : b.event, G(a, 2), b = Wa(a, h, b.options), n.setHost(b), r(n, h, "start", {}), b.done(function (b) {
g(!b);
(b = A.get(t)) && b.counter === w && ka(z(a));r(n, h, "close", {});
});
});return n;
}function M(a) {
a = z(a).querySelectorAll("[data-ng-animate]");s(a, function (a) {
var b = parseInt(a.getAttribute("data-ng-animate")),
c = A.get(a);if (c) switch (b) {case 2:
c.runner.end();case 1:
A.remove(a);}
});
}function ka(a) {
a = z(a);a.removeAttribute("data-ng-animate");A.remove(a);
}function g(a, b) {
return z(a) === z(b);
}function N(a, b, c) {
c = E(l[0].body);var f = g(a, c) || "HTML" === a[0].nodeName,
d = g(a, k),
h = !1,
r,
e = L.get(z(a));(a = E.data(a[0], "$ngAnimatePin")) && (b = a);for (b = z(b); b;) {
d || (d = g(b, k));if (1 !== b.nodeType) break;a = A.get(b) || {};if (!h) {
var n = L.get(b);if (!0 === n && !1 !== e) {
e = !0;break;
} else !1 === n && (e = !1);h = a.structural;
}if (O(r) || !0 === r) a = E.data(b, "$$ngAnimateChildren"), ea(a) && (r = a);if (h && !1 === r) break;f || (f = g(b, c));if (f && d) break;if (!d && (a = E.data(b, "$ngAnimatePin"))) {
b = z(a);continue;
}b = b.parentNode;
}return (!h || r) && !0 !== e && d && f;
}function G(a, b, c) {
c = c || {};c.state = b;a = z(a);a.setAttribute("data-ng-animate", b);c = (b = A.get(a)) ? Ea(b, c) : c;A.put(a, c);
}var A = new w(),
L = new w(),
f = null,
oa = c.$watch(function () {
return 0 === u.totalPendingRequests;
}, function (a) {
a && (oa(), c.$$postDigest(function () {
c.$$postDigest(function () {
null === f && (f = !0);
});
}));
}),
h = {},
H = a.classNameFilter(),
Xa = H ? function (a) {
return H.test(a);
} : function () {
return !0;
},
D = V(F),
y = S.Node.prototype.contains || function (a) {
return this === a || !!(this.compareDocumentPosition(a) & 16);
},
sa = { on: function on(a, b, c) {
var f = da(b);h[a] = h[a] || [];h[a].push({ node: f, callback: c });E(b).on("$destroy", function () {
A.get(f) || sa.off(a, b, c);
});
}, off: function off(a, b, c) {
if (1 !== arguments.length || B.isString(arguments[0])) {
var f = h[a];f && (h[a] = 1 === arguments.length ? null : r(f, b, c));
} else for (f in b = arguments[0], h) {
h[f] = r(h[f], b);
}
}, pin: function pin(a, b) {
Aa(wa(a), "element", "not an element");Aa(wa(b), "parentElement", "not an element");a.data("$ngAnimatePin", b);
}, push: function push(a, b, c, f) {
c = c || {};c.domOperation = f;return t(a, b, c);
}, enabled: function enabled(a, b) {
var c = arguments.length;if (0 === c) b = !!f;else if (wa(a)) {
var d = z(a),
h = L.get(d);1 === c ? b = !h : L.put(d, !b);
} else b = f = !!a;return b;
} };return sa;
}];
}]).provider("$$animation", ["$animateProvider", function (a) {
var b = this.drivers = [];this.$get = ["$$jqLite", "$rootScope", "$injector", "$$AnimateRunner", "$$HashMap", "$$rAFScheduler", function (a, d, e, l, m, I) {
function k(a) {
function b(a) {
if (a.processed) return a;a.processed = !0;var d = a.domNode,
t = d.parentNode;e.put(d, a);for (var M; t;) {
if (M = e.get(t)) {
M.processed || (M = b(M));break;
}t = t.parentNode;
}(M || c).children.push(a);return a;
}var c = { children: [] },
d,
e = new m();for (d = 0; d < a.length; d++) {
var k = a[d];e.put(k.domNode, a[d] = { domNode: k.domNode, fn: k.fn, children: [] });
}for (d = 0; d < a.length; d++) {
b(a[d]);
}return function (a) {
var b = [],
c = [],
d;for (d = 0; d < a.children.length; d++) {
c.push(a.children[d]);
}a = c.length;var e = 0,
g = [];for (d = 0; d < c.length; d++) {
var n = c[d];0 >= a && (a = e, e = 0, b.push(g), g = []);g.push(n.fn);n.children.forEach(function (a) {
e++;c.push(a);
});a--;
}g.length && b.push(g);return b;
}(c);
}var v = [],
w = V(a);return function (m, Q, u) {
function F(a) {
a = a.hasAttribute("ng-animate-ref") ? [a] : a.querySelectorAll("[ng-animate-ref]");var b = [];s(a, function (a) {
var c = a.getAttribute("ng-animate-ref");c && c.length && b.push(a);
});return b;
}function n(a) {
var b = [],
c = {};s(a, function (a, d) {
var h = z(a.element),
e = 0 <= ["enter", "move"].indexOf(a.event),
h = a.structural ? F(h) : [];if (h.length) {
var g = e ? "to" : "from";s(h, function (a) {
var b = a.getAttribute("ng-animate-ref");c[b] = c[b] || {};c[b][g] = { animationID: d, element: E(a) };
});
} else b.push(a);
});var d = {},
e = {};s(c, function (c, g) {
var r = c.from,
n = c.to;if (r && n) {
var A = a[r.animationID],
t = a[n.animationID],
m = r.animationID.toString();if (!e[m]) {
var k = e[m] = { structural: !0, beforeStart: function beforeStart() {
A.beforeStart();
t.beforeStart();
}, close: function close() {
A.close();t.close();
}, classes: K(A.classes, t.classes), from: A, to: t, anchors: [] };k.classes.length ? b.push(k) : (b.push(A), b.push(t));
}e[m].anchors.push({ out: r.element, "in": n.element });
} else r = r ? r.animationID : n.animationID, n = r.toString(), d[n] || (d[n] = !0, b.push(a[r]));
});return b;
}function K(a, b) {
a = a.split(" ");b = b.split(" ");for (var c = [], d = 0; d < a.length; d++) {
var e = a[d];if ("ng-" !== e.substring(0, 3)) for (var r = 0; r < b.length; r++) {
if (e === b[r]) {
c.push(e);break;
}
}
}return c.join(" ");
}function J(a) {
for (var c = b.length - 1; 0 <= c; c--) {
var d = b[c];if (e.has(d) && (d = e.get(d)(a))) return d;
}
}function r(a, b) {
function c(a) {
(a = a.data("$$animationRunner")) && a.setHost(b);
}a.from && a.to ? (c(a.from.element), c(a.to.element)) : c(a.element);
}function t() {
var a = m.data("$$animationRunner");!a || "leave" === Q && u.$$domOperationFired || a.end();
}function M(b) {
m.off("$destroy", t);m.removeData("$$animationRunner");w(m, u);ha(m, u);u.domOperation();G && a.removeClass(m, G);m.removeClass("ng-animate");g.complete(!b);
}u = pa(u);var ka = 0 <= ["enter", "move", "leave"].indexOf(Q),
g = new l({ end: function end() {
M();
}, cancel: function cancel() {
M(!0);
} });if (!b.length) return M(), g;m.data("$$animationRunner", g);var N = Ba(m.attr("class"), Ba(u.addClass, u.removeClass)),
G = u.tempClasses;G && (N += " " + G, u.tempClasses = null);var A;ka && (A = "ng-" + Q + "-prepare", a.addClass(m, A));v.push({ element: m, classes: N, event: Q, structural: ka, options: u, beforeStart: function beforeStart() {
m.addClass("ng-animate");G && a.addClass(m, G);A && (a.removeClass(m, A), A = null);
}, close: M });m.on("$destroy", t);if (1 < v.length) return g;d.$$postDigest(function () {
var a = [];s(v, function (b) {
b.element.data("$$animationRunner") ? a.push(b) : b.close();
});v.length = 0;var b = n(a),
c = [];s(b, function (a) {
c.push({ domNode: z(a.from ? a.from.element : a.element), fn: function fn() {
a.beforeStart();var b,
c = a.close;if ((a.anchors ? a.from.element || a.to.element : a.element).data("$$animationRunner")) {
var d = J(a);d && (b = d.start);
}b ? (b = b(), b.done(function (a) {
c(!a);
}), r(a, b)) : c();
} });
});I(k(c));
});return g;
};
}];
}]).provider("$animateCss", ["$animateProvider", function (a) {
var b = Ha(),
c = Ha();this.$get = ["$window", "$$jqLite", "$$AnimateRunner", "$timeout", "$$forceReflow", "$sniffer", "$$rAFScheduler", "$$animateQueue", function (a, e, l, m, I, k, v, w) {
function B(a, b) {
var c = a.parentNode;return (c.$$ngAnimateParentKey || (c.$$ngAnimateParentKey = ++K)) + "-" + a.getAttribute("class") + "-" + b;
}function Q(r, n, m, k) {
var g;0 < b.count(m) && (g = c.get(m), g || (n = Y(n, "-stagger"), e.addClass(r, n), g = Fa(a, r, k), g.animationDuration = Math.max(g.animationDuration, 0), g.transitionDuration = Math.max(g.transitionDuration, 0), e.removeClass(r, n), c.put(m, g)));return g || {};
}function u(a) {
J.push(a);
v.waitUntilQuiet(function () {
b.flush();c.flush();for (var a = I(), d = 0; d < J.length; d++) {
J[d](a);
}J.length = 0;
});
}function F(c, e, n) {
e = b.get(n);e || (e = Fa(a, c, Ua), "infinite" === e.animationIterationCount && (e.animationIterationCount = 1));b.put(n, e);c = e;n = c.animationDelay;e = c.transitionDelay;c.maxDelay = n && e ? Math.max(n, e) : n || e;c.maxDuration = Math.max(c.animationDuration * c.animationIterationCount, c.transitionDuration);return c;
}var n = V(e),
K = 0,
J = [];return function (a, c) {
function d() {
g();
}function v() {
g(!0);
}function g(b) {
if (!(y || E && K)) {
y = !0;K = !1;f.$$skipPreparationClasses || e.removeClass(a, ga);e.removeClass(a, ea);ta(h, !1);qa(h, !1);s(H, function (a) {
h.style[a[0]] = "";
});n(a, f);ha(a, f);Object.keys(J).length && s(J, function (a, b) {
a ? h.style.setProperty(b, a) : h.style.removeProperty(b);
});if (f.onDone) f.onDone();fa && fa.length && a.off(fa.join(" "), A);var c = a.data("$$animateCss");c && (m.cancel(c[0].timer), a.removeData("$$animateCss"));O && O.complete(!b);
}
}function N(a) {
q.blockTransition && qa(h, a);q.blockKeyframeAnimation && ta(h, !!a);
}function G() {
O = new l({ end: d, cancel: v });u(R);g();return { $$willAnimate: !1, start: function start() {
return O;
}, end: d };
}function A(a) {
a.stopPropagation();var b = a.originalEvent || a;a = b.$manualTimeStamp || Date.now();b = parseFloat(b.elapsedTime.toFixed(3));Math.max(a - W, 0) >= S && b >= p && (E = !0, g());
}function L() {
function b() {
if (!y) {
N(!1);s(H, function (a) {
h.style[a[0]] = a[1];
});n(a, f);e.addClass(a, ea);if (q.recalculateTimingStyles) {
na = h.className + " " + ga;ia = B(h, na);C = F(h, na, ia);aa = C.maxDelay;P = Math.max(aa, 0);p = C.maxDuration;if (0 === p) {
g();return;
}q.hasTransitions = 0 < C.transitionDuration;q.hasAnimations = 0 < C.animationDuration;
}q.applyAnimationDelay && (aa = "boolean" !== typeof f.delay && ua(f.delay) ? parseFloat(f.delay) : aa, P = Math.max(aa, 0), C.animationDelay = aa, ba = [ra, aa + "s"], H.push(ba), h.style[ba[0]] = ba[1]);S = 1E3 * P;V = 1E3 * p;if (f.easing) {
var d,
k = f.easing;q.hasTransitions && (d = T + "TimingFunction", H.push([d, k]), h.style[d] = k);q.hasAnimations && (d = $ + "TimingFunction", H.push([d, k]), h.style[d] = k);
}C.transitionDuration && fa.push(xa);C.animationDuration && fa.push(ya);W = Date.now();var L = S + 1.5 * V;d = W + L;var k = a.data("$$animateCss") || [],
l = !0;if (k.length) {
var G = k[0];(l = d > G.expectedEndTime) ? m.cancel(G.timer) : k.push(g);
}l && (L = m(c, L, !1), k[0] = { timer: L, expectedEndTime: d }, k.push(g), a.data("$$animateCss", k));if (fa.length) a.on(fa.join(" "), A);f.to && (f.cleanupStyles && Ia(J, h, Object.keys(f.to)), Da(a, f));
}
}function c() {
var b = a.data("$$animateCss");if (b) {
for (var d = 1; d < b.length; d++) {
b[d]();
}a.removeData("$$animateCss");
}
}if (!y) if (h.parentNode) {
var d = function d(a) {
if (E) K && a && (K = !1, g());else if (K = !a, C.animationDuration) if (a = ta(h, K), K) H.push(a);else {
var b = H,
c = b.indexOf(a);0 <= a && b.splice(c, 1);
}
},
k = 0 < da && (C.transitionDuration && 0 === X.transitionDuration || C.animationDuration && 0 === X.animationDuration) && Math.max(X.animationDelay, X.transitionDelay);k ? m(b, Math.floor(k * da * 1E3), !1) : b();x.resume = function () {
d(!0);
};x.pause = function () {
d(!1);
};
} else g();
}var f = c || {};f.$$prepared || (f = pa(Ja(f)));var J = {},
h = z(a);if (!h || !h.parentNode || !w.enabled()) return G();var H = [],
I = a.attr("class"),
D = Na(f),
y,
K,
E,
O,
x,
P,
S,
p,
V,
W,
fa = [];if (0 === f.duration || !k.animations && !k.transitions) return G();var ja = f.event && ca(f.event) ? f.event.join(" ") : f.event,
Z = "",
U = "";ja && f.structural ? Z = Y(ja, "ng-", !0) : ja && (Z = ja);f.addClass && (U += Y(f.addClass, "-add"));f.removeClass && (U.length && (U += " "), U += Y(f.removeClass, "-remove"));f.applyClassesEarly && U.length && n(a, f);var ga = [Z, U].join(" ").trim(),
na = I + " " + ga,
ea = Y(ga, "-active"),
I = D.to && 0 < Object.keys(D.to).length;if (!(0 < (f.keyframeStyle || "").length || I || ga)) return G();var ia, X;0 < f.stagger ? (D = parseFloat(f.stagger), X = { transitionDelay: D, animationDelay: D,
transitionDuration: 0, animationDuration: 0 }) : (ia = B(h, na), X = Q(h, ga, ia, Va));f.$$skipPreparationClasses || e.addClass(a, ga);f.transitionStyle && (D = [T, f.transitionStyle], la(h, D), H.push(D));0 <= f.duration && (D = 0 < h.style[T].length, D = Ga(f.duration, D), la(h, D), H.push(D));f.keyframeStyle && (D = [$, f.keyframeStyle], la(h, D), H.push(D));var da = X ? 0 <= f.staggerIndex ? f.staggerIndex : b.count(ia) : 0;(ja = 0 === da) && !f.skipBlocking && qa(h, 9999);var C = F(h, na, ia),
aa = C.maxDelay;P = Math.max(aa, 0);p = C.maxDuration;var q = {};q.hasTransitions = 0 < C.transitionDuration;q.hasAnimations = 0 < C.animationDuration;q.hasTransitionAll = q.hasTransitions && "all" == C.transitionProperty;q.applyTransitionDuration = I && (q.hasTransitions && !q.hasTransitionAll || q.hasAnimations && !q.hasTransitions);q.applyAnimationDuration = f.duration && q.hasAnimations;q.applyTransitionDelay = ua(f.delay) && (q.applyTransitionDuration || q.hasTransitions);q.applyAnimationDelay = ua(f.delay) && q.hasAnimations;q.recalculateTimingStyles = 0 < U.length;if (q.applyTransitionDuration || q.applyAnimationDuration) p = f.duration ? parseFloat(f.duration) : p, q.applyTransitionDuration && (q.hasTransitions = !0, C.transitionDuration = p, D = 0 < h.style[T + "Property"].length, H.push(Ga(p, D))), q.applyAnimationDuration && (q.hasAnimations = !0, C.animationDuration = p, H.push([za, p + "s"]));if (0 === p && !q.recalculateTimingStyles) return G();if (null != f.delay) {
var ba;"boolean" !== typeof f.delay && (ba = parseFloat(f.delay), P = Math.max(ba, 0));q.applyTransitionDelay && H.push([ma, ba + "s"]);q.applyAnimationDelay && H.push([ra, ba + "s"]);
}null == f.duration && 0 < C.transitionDuration && (q.recalculateTimingStyles = q.recalculateTimingStyles || ja);S = 1E3 * P;V = 1E3 * p;f.skipBlocking || (q.blockTransition = 0 < C.transitionDuration, q.blockKeyframeAnimation = 0 < C.animationDuration && 0 < X.animationDelay && 0 === X.animationDuration);f.from && (f.cleanupStyles && Ia(J, h, Object.keys(f.from)), Ca(a, f));q.blockTransition || q.blockKeyframeAnimation ? N(p) : f.skipBlocking || qa(h, !1);return { $$willAnimate: !0, end: d, start: function start() {
if (!y) return x = { end: d, cancel: v, resume: null, pause: null }, O = new l(x), u(L), O;
} };
};
}];
}]).provider("$$animateCssDriver", ["$$animationProvider", function (a) {
a.drivers.push("$$animateCssDriver");this.$get = ["$animateCss", "$rootScope", "$$AnimateRunner", "$rootElement", "$sniffer", "$$jqLite", "$document", function (a, c, d, e, l, m, I) {
function k(a) {
return a.replace(/\bng-\S+\b/g, "");
}function v(a, b) {
P(a) && (a = a.split(" "));P(b) && (b = b.split(" "));return a.filter(function (a) {
return -1 === b.indexOf(a);
}).join(" ");
}function w(c, e, m) {
function l(a) {
var b = {},
c = z(a).getBoundingClientRect();s(["width", "height", "top", "left"], function (a) {
var d = c[a];
switch (a) {case "top":
d += u.scrollTop;break;case "left":
d += u.scrollLeft;}b[a] = Math.floor(d) + "px";
});return b;
}function t() {
var c = k(m.attr("class") || ""),
d = v(c, g),
c = v(g, c),
d = a(w, { to: l(m), addClass: "ng-anchor-in " + d, removeClass: "ng-anchor-out " + c, delay: !0 });return d.$$willAnimate ? d : null;
}function I() {
w.remove();e.removeClass("ng-animate-shim");m.removeClass("ng-animate-shim");
}var w = E(z(e).cloneNode(!0)),
g = k(w.attr("class") || "");e.addClass("ng-animate-shim");m.addClass("ng-animate-shim");w.addClass("ng-anchor");
F.append(w);var N;c = function () {
var c = a(w, { addClass: "ng-anchor-out", delay: !0, from: l(e) });return c.$$willAnimate ? c : null;
}();if (!c && (N = t(), !N)) return I();var G = c || N;return { start: function start() {
function a() {
c && c.end();
}var b,
c = G.start();c.done(function () {
c = null;if (!N && (N = t())) return c = N.start(), c.done(function () {
c = null;I();b.complete();
}), c;I();b.complete();
});return b = new d({ end: a, cancel: a });
} };
}function B(a, b, c, e) {
var k = Q(a, R),
m = Q(b, R),
l = [];s(e, function (a) {
(a = w(c, a.out, a["in"])) && l.push(a);
});if (k || m || 0 !== l.length) return { start: function start() {
function a() {
s(b, function (a) {
a.end();
});
}var b = [];k && b.push(k.start());m && b.push(m.start());s(l, function (a) {
b.push(a.start());
});var c = new d({ end: a, cancel: a });d.all(b, function (a) {
c.complete(a);
});return c;
} };
}function Q(c) {
var d = c.element,
e = c.options || {};c.structural && (e.event = c.event, e.structural = !0, e.applyClassesEarly = !0, "leave" === c.event && (e.onDone = e.domOperation));e.preparationClasses && (e.event = Z(e.event, e.preparationClasses));c = a(d, e);return c.$$willAnimate ? c : null;
}if (!l.animations && !l.transitions) return R;var u = I[0].body;
c = z(e);var F = E(c.parentNode && 11 === c.parentNode.nodeType || u.contains(c) ? c : u);V(m);return function (a) {
return a.from && a.to ? B(a.from, a.to, a.classes, a.anchors) : Q(a);
};
}];
}]).provider("$$animateJs", ["$animateProvider", function (a) {
this.$get = ["$injector", "$$AnimateRunner", "$$jqLite", function (b, c, d) {
function e(c) {
c = ca(c) ? c : c.split(" ");for (var d = [], e = {}, l = 0; l < c.length; l++) {
var w = c[l],
s = a.$$registeredAnimations[w];s && !e[w] && (d.push(b.get(s)), e[w] = !0);
}return d;
}var l = V(d);return function (a, b, d, v) {
function w() {
v.domOperation();
l(a, v);
}function B(a, b, d, e, f) {
switch (d) {case "animate":
b = [b, e.from, e.to, f];break;case "setClass":
b = [b, n, K, f];break;case "addClass":
b = [b, n, f];break;case "removeClass":
b = [b, K, f];break;default:
b = [b, f];}b.push(e);if (a = a.apply(a, b)) if (Ka(a.start) && (a = a.start()), a instanceof c) a.done(f);else if (Ka(a)) return a;return R;
}function z(a, b, d, e, f) {
var g = [];s(e, function (e) {
var k = e[f];k && g.push(function () {
var e,
f,
h = !1,
g = function g(a) {
h || (h = !0, (f || R)(a), e.complete(!a));
};e = new c({ end: function end() {
g();
}, cancel: function cancel() {
g(!0);
} });
f = B(k, a, b, d, function (a) {
g(!1 === a);
});return e;
});
});return g;
}function u(a, b, d, e, f) {
var g = z(a, b, d, e, f);if (0 === g.length) {
var h, k;"beforeSetClass" === f ? (h = z(a, "removeClass", d, e, "beforeRemoveClass"), k = z(a, "addClass", d, e, "beforeAddClass")) : "setClass" === f && (h = z(a, "removeClass", d, e, "removeClass"), k = z(a, "addClass", d, e, "addClass"));h && (g = g.concat(h));k && (g = g.concat(k));
}if (0 !== g.length) return function (a) {
var b = [];g.length && s(g, function (a) {
b.push(a());
});b.length ? c.all(b, a) : a();return function (a) {
s(b, function (b) {
a ? b.cancel() : b.end();
});
};
};
}var F = !1;3 === arguments.length && va(d) && (v = d, d = null);v = pa(v);d || (d = a.attr("class") || "", v.addClass && (d += " " + v.addClass), v.removeClass && (d += " " + v.removeClass));var n = v.addClass,
K = v.removeClass,
J = e(d),
r,
t;if (J.length) {
var M, E;"leave" == b ? (E = "leave", M = "afterLeave") : (E = "before" + b.charAt(0).toUpperCase() + b.substr(1), M = b);"enter" !== b && "move" !== b && (r = u(a, b, v, J, E));t = u(a, b, v, J, M);
}if (r || t) {
var g;return { $$willAnimate: !0, end: function end() {
g ? g.end() : (F = !0, w(), ha(a, v), g = new c(), g.complete(!0));return g;
},
start: function start() {
function b(c) {
F = !0;w();ha(a, v);g.complete(c);
}if (g) return g;g = new c();var d,
e = [];r && e.push(function (a) {
d = r(a);
});e.length ? e.push(function (a) {
w();a(!0);
}) : w();t && e.push(function (a) {
d = t(a);
});g.setHost({ end: function end() {
F || ((d || R)(void 0), b(void 0));
}, cancel: function cancel() {
F || ((d || R)(!0), b(!0));
} });c.chain(e, b);return g;
} };
}
};
}];
}]).provider("$$animateJsDriver", ["$$animationProvider", function (a) {
a.drivers.push("$$animateJsDriver");this.$get = ["$$animateJs", "$$AnimateRunner", function (a, c) {
function d(c) {
return a(c.element, c.event, c.classes, c.options);
}return function (a) {
if (a.from && a.to) {
var b = d(a.from),
m = d(a.to);if (b || m) return { start: function start() {
function a() {
return function () {
s(d, function (a) {
a.end();
});
};
}var d = [];b && d.push(b.start());m && d.push(m.start());c.all(d, function (a) {
e.complete(a);
});var e = new c({ end: a(), cancel: a() });return e;
} };
} else return d(a);
};
}];
}]);
})(window, window.angular);
//# sourceMappingURL=angular-animate.min.js.map
"use strict";
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
/*
AngularJS v1.5.6
(c) 2010-2016 Google, Inc. http://angularjs.org
License: MIT
*/
(function (P, d) {
'use strict';
function G(t, g) {
g = g || {};d.forEach(g, function (d, q) {
delete g[q];
});for (var q in t) {
!t.hasOwnProperty(q) || "$" === q.charAt(0) && "$" === q.charAt(1) || (g[q] = t[q]);
}return g;
}var z = d.$$minErr("$resource"),
M = /^(\.[a-zA-Z_$@][0-9a-zA-Z_$@]*)+$/;d.module("ngResource", ["ng"]).provider("$resource", function () {
var t = /^https?:\/\/[^\/]*/,
g = this;this.defaults = { stripTrailingSlashes: !0, actions: { get: { method: "GET" }, save: { method: "POST" }, query: { method: "GET", isArray: !0 }, remove: { method: "DELETE" }, "delete": { method: "DELETE" } } };
this.$get = ["$http", "$log", "$q", "$timeout", function (q, L, H, I) {
function A(d, h) {
return encodeURIComponent(d).replace(/%40/gi, "@").replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, h ? "%20" : "+");
}function B(d, h) {
this.template = d;this.defaults = v({}, g.defaults, h);this.urlParams = {};
}function J(e, h, n, k) {
function c(a, b) {
var c = {};b = v({}, h, b);u(b, function (b, h) {
x(b) && (b = b());var f;if (b && b.charAt && "@" == b.charAt(0)) {
f = a;var l = b.substr(1);if (null == l || "" === l || "hasOwnProperty" === l || !M.test("." + l)) throw z("badmember", l);for (var l = l.split("."), m = 0, k = l.length; m < k && d.isDefined(f); m++) {
var r = l[m];f = null !== f ? f[r] : void 0;
}
} else f = b;c[h] = f;
});return c;
}function N(a) {
return a.resource;
}function m(a) {
G(a || {}, this);
}var t = new B(e, k);n = v({}, g.defaults.actions, n);m.prototype.toJSON = function () {
var a = v({}, this);delete a.$promise;delete a.$resolved;return a;
};u(n, function (a, b) {
var h = /^(POST|PUT|PATCH)$/i.test(a.method),
e = a.timeout,
E = d.isDefined(a.cancellable) ? a.cancellable : k && d.isDefined(k.cancellable) ? k.cancellable : g.defaults.cancellable;e && !d.isNumber(e) && (L.debug("ngResource:\n Only numeric values are allowed as `timeout`.\n Promises are not supported in $resource, because the same value would be used for multiple requests. If you are looking for a way to cancel requests, you should use the `cancellable` option."), delete a.timeout, e = null);m[b] = function (f, l, k, g) {
var r = {},
n,
w,
C;switch (arguments.length) {case 4:
C = g, w = k;case 3:case 2:
if (x(l)) {
if (x(f)) {
w = f;C = l;break;
}w = l;C = k;
} else {
r = f;n = l;w = k;break;
}case 1:
x(f) ? w = f : h ? n = f : r = f;break;case 0:
break;default:
throw z("badargs", arguments.length);}var D = this instanceof m,
p = D ? n : a.isArray ? [] : new m(n),
s = {},
A = a.interceptor && a.interceptor.response || N,
B = a.interceptor && a.interceptor.responseError || void 0,
y,
F;u(a, function (a, b) {
switch (b) {default:
s[b] = O(a);case "params":case "isArray":case "interceptor":case "cancellable":}
});!D && E && (y = H.defer(), s.timeout = y.promise, e && (F = I(y.resolve, e)));h && (s.data = n);t.setUrlParams(s, v({}, c(n, a.params || {}), r), a.url);r = q(s).then(function (f) {
var c = f.data;if (c) {
if (d.isArray(c) !== !!a.isArray) throw z("badcfg", b, a.isArray ? "array" : "object", d.isArray(c) ? "array" : "object", s.method, s.url);if (a.isArray) p.length = 0, u(c, function (b) {
"object" === (typeof b === "undefined" ? "undefined" : _typeof(b)) ? p.push(new m(b)) : p.push(b);
});else {
var l = p.$promise;G(c, p);p.$promise = l;
}
}f.resource = p;return f;
}, function (b) {
(C || K)(b);return H.reject(b);
});r["finally"](function () {
p.$resolved = !0;!D && E && (p.$cancelRequest = d.noop, I.cancel(F), y = F = s.timeout = null);
});r = r.then(function (b) {
var a = A(b);(w || K)(a, b.headers);return a;
}, B);
return D ? r : (p.$promise = r, p.$resolved = !1, E && (p.$cancelRequest = y.resolve), p);
};m.prototype["$" + b] = function (a, c, d) {
x(a) && (d = c, c = a, a = {});a = m[b].call(this, a, this, c, d);return a.$promise || a;
};
});m.bind = function (a) {
return J(e, v({}, h, a), n);
};return m;
}var K = d.noop,
u = d.forEach,
v = d.extend,
O = d.copy,
x = d.isFunction;B.prototype = { setUrlParams: function setUrlParams(e, h, n) {
var k = this,
c = n || k.template,
g,
m,
q = "",
a = k.urlParams = {};u(c.split(/\W/), function (b) {
if ("hasOwnProperty" === b) throw z("badname");!/^\d+$/.test(b) && b && new RegExp("(^|[^\\\\]):" + b + "(\\W|$)").test(c) && (a[b] = { isQueryParamValue: new RegExp("\\?.*=:" + b + "(?:\\W|$)").test(c) });
});c = c.replace(/\\:/g, ":");c = c.replace(t, function (a) {
q = a;return "";
});h = h || {};u(k.urlParams, function (a, e) {
g = h.hasOwnProperty(e) ? h[e] : k.defaults[e];d.isDefined(g) && null !== g ? (m = a.isQueryParamValue ? A(g, !0) : A(g, !0).replace(/%26/gi, "&").replace(/%3D/gi, "=").replace(/%2B/gi, "+"), c = c.replace(new RegExp(":" + e + "(\\W|$)", "g"), function (a, b) {
return m + b;
})) : c = c.replace(new RegExp("(/?):" + e + "(\\W|$)", "g"), function (a, b, c) {
return "/" == c.charAt(0) ? c : b + c;
});
});k.defaults.stripTrailingSlashes && (c = c.replace(/\/+$/, "") || "/");c = c.replace(/\/\.(?=\w+($|\?))/, ".");e.url = q + c.replace(/\/\\\./, "/.");u(h, function (a, c) {
k.urlParams[c] || (e.params = e.params || {}, e.params[c] = a);
});
} };return J;
}];
});
})(window, window.angular);
//# sourceMappingURL=angular-resource.min.js.map
"use strict";
/*
AngularJS v1.5.6
(c) 2010-2016 Google, Inc. http://angularjs.org
License: MIT
*/
(function (x, n) {
'use strict';
function s(f, k) {
var e = !1,
a = !1;this.ngClickOverrideEnabled = function (b) {
return n.isDefined(b) ? (b && !a && (a = !0, t.$$moduleName = "ngTouch", k.directive("ngClick", t), f.decorator("ngClickDirective", ["$delegate", function (a) {
if (e) a.shift();else for (var b = a.length - 1; 0 <= b;) {
if ("ngTouch" === a[b].$$moduleName) {
a.splice(b, 1);break;
}b--;
}return a;
}])), e = b, this) : e;
};this.$get = function () {
return { ngClickOverrideEnabled: function ngClickOverrideEnabled() {
return e;
} };
};
}function v(f, k, e) {
p.directive(f, ["$parse", "$swipe", function (a, b) {
return function (l, u, g) {
function h(c) {
if (!d) return !1;var a = Math.abs(c.y - d.y);c = (c.x - d.x) * k;return r && 75 > a && 0 < c && 30 < c && .3 > a / c;
}var m = a(g[f]),
d,
r,
c = ["touch"];n.isDefined(g.ngSwipeDisableMouse) || c.push("mouse");b.bind(u, { start: function start(c, a) {
d = c;r = !0;
}, cancel: function cancel(c) {
r = !1;
}, end: function end(c, d) {
h(c) && l.$apply(function () {
u.triggerHandler(e);m(l, { $event: d });
});
} }, c);
};
}]);
}var p = n.module("ngTouch", []);p.provider("$touch", s);s.$inject = ["$provide", "$compileProvider"];p.factory("$swipe", [function () {
function f(a) {
a = a.originalEvent || a;var b = a.touches && a.touches.length ? a.touches : [a];a = a.changedTouches && a.changedTouches[0] || b[0];return { x: a.clientX, y: a.clientY };
}function k(a, b) {
var l = [];n.forEach(a, function (a) {
(a = e[a][b]) && l.push(a);
});return l.join(" ");
}var e = { mouse: { start: "mousedown", move: "mousemove", end: "mouseup" }, touch: { start: "touchstart", move: "touchmove", end: "touchend", cancel: "touchcancel" } };return { bind: function bind(a, b, l) {
var e,
g,
h,
m,
d = !1;l = l || ["mouse", "touch"];a.on(k(l, "start"), function (c) {
h = f(c);d = !0;g = e = 0;m = h;b.start && b.start(h, c);
});var r = k(l, "cancel");if (r) a.on(r, function (c) {
d = !1;b.cancel && b.cancel(c);
});a.on(k(l, "move"), function (c) {
if (d && h) {
var a = f(c);e += Math.abs(a.x - m.x);g += Math.abs(a.y - m.y);m = a;10 > e && 10 > g || (g > e ? (d = !1, b.cancel && b.cancel(c)) : (c.preventDefault(), b.move && b.move(a, c)));
}
});a.on(k(l, "end"), function (c) {
d && (d = !1, b.end && b.end(f(c), c));
});
} };
}]);var t = ["$parse", "$timeout", "$rootElement", function (f, k, e) {
function a(a, d, b) {
for (var c = 0; c < a.length; c += 2) {
var g = a[c + 1],
e = b;if (25 > Math.abs(a[c] - d) && 25 > Math.abs(g - e)) return a.splice(c, c + 2), !0;
}return !1;
}function b(b) {
if (!(2500 < Date.now() - u)) {
var d = b.touches && b.touches.length ? b.touches : [b],
e = d[0].clientX,
d = d[0].clientY;if (!(1 > e && 1 > d || h && h[0] === e && h[1] === d)) {
h && (h = null);var c = b.target;"label" === n.lowercase(c.nodeName || c[0] && c[0].nodeName) && (h = [e, d]);a(g, e, d) || (b.stopPropagation(), b.preventDefault(), b.target && b.target.blur && b.target.blur());
}
}
}function l(a) {
a = a.touches && a.touches.length ? a.touches : [a];var b = a[0].clientX,
e = a[0].clientY;g.push(b, e);k(function () {
for (var a = 0; a < g.length; a += 2) {
if (g[a] == b && g[a + 1] == e) {
g.splice(a, a + 2);break;
}
}
}, 2500, !1);
}var u, g, h;return function (h, d, k) {
var c = f(k.ngClick),
w = !1,
q,
p,
s,
t;d.on("touchstart", function (a) {
w = !0;q = a.target ? a.target : a.srcElement;3 == q.nodeType && (q = q.parentNode);d.addClass("ng-click-active");p = Date.now();a = a.originalEvent || a;a = (a.touches && a.touches.length ? a.touches : [a])[0];s = a.clientX;t = a.clientY;
});d.on("touchcancel", function (a) {
w = !1;d.removeClass("ng-click-active");
});d.on("touchend", function (c) {
var h = Date.now() - p,
f = c.originalEvent || c,
m = (f.changedTouches && f.changedTouches.length ? f.changedTouches : f.touches && f.touches.length ? f.touches : [f])[0],
f = m.clientX,
m = m.clientY,
v = Math.sqrt(Math.pow(f - s, 2) + Math.pow(m - t, 2));w && 750 > h && 12 > v && (g || (e[0].addEventListener("click", b, !0), e[0].addEventListener("touchstart", l, !0), g = []), u = Date.now(), a(g, f, m), q && q.blur(), n.isDefined(k.disabled) && !1 !== k.disabled || d.triggerHandler("click", [c]));w = !1;d.removeClass("ng-click-active");
});d.onclick = function (a) {};d.on("click", function (a, b) {
h.$apply(function () {
c(h, { $event: b || a });
});
});d.on("mousedown", function (a) {
d.addClass("ng-click-active");
});d.on("mousemove mouseup", function (a) {
d.removeClass("ng-click-active");
});
};
}];v("ngSwipeLeft", -1, "swipeleft");v("ngSwipeRight", 1, "swiperight");
})(window, window.angular);
//# sourceMappingURL=angular-touch.min.js.map
'use strict';
angular.module("ngLocale", [], ["$provide", function ($provide) {
var PLURAL_CATEGORY = { ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other" };
function getDecimals(n) {
n = n + '';
var i = n.indexOf('.');
return i == -1 ? 0 : n.length - i - 1;
}
function getVF(n, opt_precision) {
var v = opt_precision;
if (undefined === v) {
v = Math.min(getDecimals(n), 3);
}
var base = Math.pow(10, v);
var f = (n * base | 0) % base;
return { v: v, f: f };
}
$provide.value("$locale", {
"DATETIME_FORMATS": {
"AMPMS": ["dop.", "pop."],
"DAY": ["nedelja", "ponedeljek", "torek", "sreda", "\u010Detrtek", "petek", "sobota"],
"ERANAMES": ["pred na\u0161im \u0161tetjem", "na\u0161e \u0161tetje"],
"ERAS": ["pr. n. \u0161t.", "po Kr."],
"FIRSTDAYOFWEEK": 0,
"MONTH": ["januar", "februar", "marec", "april", "maj", "junij", "julij", "avgust", "september", "oktober", "november", "december"],
"SHORTDAY": ["ned.", "pon.", "tor.", "sre.", "\u010Det.", "pet.", "sob."],
"SHORTMONTH": ["jan.", "feb.", "mar.", "apr.", "maj", "jun.", "jul.", "avg.", "sep.", "okt.", "nov.", "dec."],
"WEEKENDRANGE": [5, 6],
"fullDate": "EEEE, dd. MMMM y",
"longDate": "dd. MMMM y",
"medium": "d. MMM y HH.mm.ss",
"mediumDate": "d. MMM y",
"mediumTime": "HH.mm.ss",
"short": "d. MM. yy HH.mm",
"shortDate": "d. MM. yy",
"shortTime": "HH.mm"
},
"NUMBER_FORMATS": {
"CURRENCY_SYM": "\u20AC",
"DECIMAL_SEP": ",",
"GROUP_SEP": ".",
"PATTERNS": [{
"gSize": 3,
"lgSize": 3,
"maxFrac": 3,
"minFrac": 0,
"minInt": 1,
"negPre": "-",
"negSuf": "",
"posPre": "",
"posSuf": ""
}, {
"gSize": 3,
"lgSize": 3,
"maxFrac": 2,
"minFrac": 2,
"minInt": 1,
"negPre": "-",
"negSuf": "\xA0\xA4",
"posPre": "",
"posSuf": "\xA0\xA4"
}]
},
"id": "sl-si",
"pluralCat": function pluralCat(n, opt_precision) {
var i = n | 0;var vf = getVF(n, opt_precision);if (vf.v == 0 && i % 100 == 1) {
return PLURAL_CATEGORY.ONE;
}if (vf.v == 0 && i % 100 == 2) {
return PLURAL_CATEGORY.TWO;
}if (vf.v == 0 && i % 100 >= 3 && i % 100 <= 4 || vf.v != 0) {
return PLURAL_CATEGORY.FEW;
}return PLURAL_CATEGORY.OTHER;
}
});
}]);
"use strict";
/********************************************
* COOKIES
********************************************/
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);
var expires = "expires=" + d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
function setCookieLaw() {
closeCookies();
setCookie('cookie_agreement', "YES", 1000);
var ga_id = $('#div-cookie input').val();
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', ga_id);
}
function closeCookies() {
$("#div-cookie").fadeOut('fast', function () {});
}
$("#span-cookies-agree").click(function () {
setCookieLaw();
});
'use strict';
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
/*! angularjs-slider - v6.6.1 -
(c) Rafal Zajac , Valentin Hervieu , Jussi Saarivirta , Angelin Sirbu -
https://github.com/angular-slider/angularjs-slider -
2018-06-30 */
/*jslint unparam: true */
/*global angular: false, console: false, define, module */
;(function (root, factory) {
'use strict';
/* istanbul ignore next */
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['angular'], factory);
} else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
// to support bundler like browserify
var angularObj = angular || require('angular');
if ((!angularObj || !angularObj.module) && typeof angular != 'undefined') {
angularObj = angular;
}
module.exports = factory(angularObj);
} else {
// Browser globals (root is window)
factory(root.angular);
}
})(window, function (angular) {
'use strict';
var module = angular.module('rzModule', []).factory('RzSliderOptions', function () {
var defaultOptions = {
floor: 0,
ceil: null, //defaults to rz-slider-model
step: 1,
precision: 0,
minRange: null,
maxRange: null,
restrictedRange: null,
pushRange: false,
minLimit: null,
maxLimit: null,
id: null,
translate: null,
getLegend: null,
stepsArray: null,
bindIndexForStepsArray: false,
draggableRange: false,
draggableRangeOnly: false,
showSelectionBar: false,
showSelectionBarEnd: false,
showSelectionBarFromValue: null,
showOuterSelectionBars: false,
hidePointerLabels: false,
hideLimitLabels: false,
autoHideLimitLabels: true,
readOnly: false,
disabled: false,
interval: 350,
showTicks: false,
showTicksValues: false,
ticksArray: null,
ticksTooltip: null,
ticksValuesTooltip: null,
vertical: false,
getSelectionBarColor: null,
getTickColor: null,
getPointerColor: null,
keyboardSupport: true,
scale: 1,
enforceStep: true,
enforceRange: false,
noSwitching: false,
onlyBindHandles: false,
onStart: null,
onChange: null,
onEnd: null,
rightToLeft: false,
reversedControls: false,
boundPointerLabels: true,
mergeRangeLabelsIfSame: false,
labelOverlapSeparator: ' - ',
customTemplateScope: null,
logScale: false,
customValueToPosition: null,
customPositionToValue: null,
selectionBarGradient: null,
ariaLabel: null,
ariaLabelledBy: null,
ariaLabelHigh: null,
ariaLabelledByHigh: null
};
var globalOptions = {};
var factory = {};
/**
* `options({})` allows global configuration of all sliders in the
* application.
*
* var app = angular.module( 'App', ['rzModule'], function( RzSliderOptions ) {
* // show ticks for all sliders
* RzSliderOptions.options( { showTicks: true } );
* });
*/
factory.options = function (value) {
angular.extend(globalOptions, value);
};
factory.getOptions = function (options) {
return angular.extend({}, defaultOptions, globalOptions, options);
};
return factory;
}).factory('rzThrottle', ['$timeout', function ($timeout) {
/**
* rzThrottle
*
* Taken from underscore project
*
* @param {Function} func
* @param {number} wait
* @param {ThrottleOptions} options
* @returns {Function}
*/
return function (func, wait, options) {
'use strict';
/* istanbul ignore next */
var getTime = Date.now || function () {
return new Date().getTime();
};
var context, args, result;
var timeout = null;
var previous = 0;
options = options || {};
var later = function later() {
previous = getTime();
timeout = null;
result = func.apply(context, args);
context = args = null;
};
return function () {
var now = getTime();
var remaining = wait - (now - previous);
context = this;
args = arguments;
if (remaining <= 0) {
$timeout.cancel(timeout);
timeout = null;
previous = now;
result = func.apply(context, args);
context = args = null;
} else if (!timeout && options.trailing !== false) {
timeout = $timeout(later, remaining);
}
return result;
};
};
}]).factory('RzSlider', ['$timeout', '$document', '$window', '$compile', 'RzSliderOptions', 'rzThrottle', function ($timeout, $document, $window, $compile, RzSliderOptions, rzThrottle) {
'use strict';
/**
* Slider
*
* @param {ngScope} scope The AngularJS scope
* @param {Element} sliderElem The slider directive element wrapped in jqLite
* @constructor
*/
var Slider = function Slider(scope, sliderElem) {
/**
* The slider's scope
*
* @type {ngScope}
*/
this.scope = scope;
/**
* The slider inner low value (linked to rzSliderModel)
* @type {number}
*/
this.lowValue = 0;
/**
* The slider inner high value (linked to rzSliderHigh)
* @type {number}
*/
this.highValue = 0;
/**
* Slider element wrapped in jqLite
*
* @type {jqLite}
*/
this.sliderElem = sliderElem;
/**
* Slider type
*
* @type {boolean} Set to true for range slider
*/
this.range = this.scope.rzSliderModel !== undefined && this.scope.rzSliderHigh !== undefined;
/**
* Values recorded when first dragging the bar
*
* @type {Object}
*/
this.dragging = {
active: false,
value: 0,
difference: 0,
position: 0,
lowLimit: 0,
highLimit: 0
/**
* property that handle position (defaults to left for horizontal)
* @type {string}
*/
};this.positionProperty = 'left';
/**
* property that handle dimension (defaults to width for horizontal)
* @type {string}
*/
this.dimensionProperty = 'width';
/**
* Half of the width or height of the slider handles
*
* @type {number}
*/
this.handleHalfDim = 0;
/**
* Maximum position the slider handle can have
*
* @type {number}
*/
this.maxPos = 0;
/**
* Precision
*
* @type {number}
*/
this.precision = 0;
/**
* Step
*
* @type {number}
*/
this.step = 1;
/**
* The name of the handle we are currently tracking
*
* @type {string}
*/
this.tracking = '';
/**
* Minimum value (floor) of the model
*
* @type {number}
*/
this.minValue = 0;
/**
* Maximum value (ceiling) of the model
*
* @type {number}
*/
this.maxValue = 0;
/**
* The delta between min and max value
*
* @type {number}
*/
this.valueRange = 0;
/**
* If showTicks/showTicksValues options are number.
* In this case, ticks values should be displayed below the slider.
* @type {boolean}
*/
this.intermediateTicks = false;
/**
* Set to true if init method already executed
*
* @type {boolean}
*/
this.initHasRun = false;
/**
* Used to call onStart on the first keydown event
*
* @type {boolean}
*/
this.firstKeyDown = false;
/**
* Internal flag to prevent watchers to be called when the sliders value are modified internally.
* @type {boolean}
*/
this.internalChange = false;
/**
* Internal flag to keep track of the visibility of combo label
* @type {boolean}
*/
this.cmbLabelShown = false;
/**
* Internal variable to keep track of the focus element
*/
this.currentFocusElement = null;
// Slider DOM elements wrapped in jqLite
this.fullBar = null; // The whole slider bar
this.selBar = null; // Highlight between two handles
this.minH = null; // Left slider handle
this.maxH = null; // Right slider handle
this.flrLab = null; // Floor label
this.ceilLab = null; // Ceiling label
this.minLab = null; // Label above the low value
this.maxLab = null; // Label above the high value
this.cmbLab = null; // Combined label
this.ticks = null; // The ticks
// Initialize slider
this.init();
};
// Add instance methods
Slider.prototype = {
/**
* Initialize slider
*
* @returns {undefined}
*/
init: function init() {
var thrLow,
thrHigh,
self = this;
var calcDimFn = function calcDimFn() {
self.calcViewDimensions();
};
this.applyOptions();
this.syncLowValue();
if (this.range) this.syncHighValue();
this.initElemHandles();
this.manageElementsStyle();
this.setDisabledState();
this.calcViewDimensions();
this.setMinAndMax();
this.updateRestrictionBar();
this.addAccessibility();
this.updateCeilLab();
this.updateFloorLab();
this.initHandles();
this.manageEventsBindings();
// Recalculate slider view dimensions
this.scope.$on('reCalcViewDimensions', calcDimFn);
// Recalculate stuff if view port dimensions have changed
angular.element($window).on('resize', calcDimFn);
this.initHasRun = true;
// Watch for changes to the model
thrLow = rzThrottle(function () {
self.onLowHandleChange();
}, self.options.interval);
thrHigh = rzThrottle(function () {
self.onHighHandleChange();
}, self.options.interval);
this.scope.$on('rzSliderForceRender', function () {
self.resetLabelsValue();
thrLow();
if (self.range) {
thrHigh();
}
self.resetSlider();
});
// Watchers (order is important because in case of simultaneous change,
// watchers will be called in the same order)
this.scope.$watchCollection('rzSliderOptions()', function (newValue, oldValue) {
if (newValue === oldValue) return;
self.applyOptions(); // need to be called before synchronizing the values
self.syncLowValue();
if (self.range) self.syncHighValue();
self.resetSlider();
});
this.scope.$watch('rzSliderModel', function (newValue, oldValue) {
if (self.internalChange) return;
if (newValue === oldValue) return;
thrLow();
});
this.scope.$watch('rzSliderHigh', function (newValue, oldValue) {
if (self.internalChange) return;
if (newValue === oldValue) return;
if (newValue != null) thrHigh();
if (self.range && newValue == null || !self.range && newValue != null) {
self.applyOptions();
self.resetSlider();
}
});
this.scope.$on('$destroy', function () {
self.unbindEvents();
angular.element($window).off('resize', calcDimFn);
self.currentFocusElement = null;
});
},
findStepIndex: function findStepIndex(modelValue) {
var index = 0;
for (var i = 0; i < this.options.stepsArray.length; i++) {
var step = this.options.stepsArray[i];
if (step === modelValue) {
index = i;
break;
} else if (angular.isDate(step)) {
if (step.getTime() === modelValue.getTime()) {
index = i;
break;
}
} else if (angular.isObject(step)) {
if (angular.isDate(step.value) && step.value.getTime() === modelValue.getTime() || step.value === modelValue) {
index = i;
break;
}
}
}
return index;
},
syncLowValue: function syncLowValue() {
if (this.options.stepsArray) {
if (!this.options.bindIndexForStepsArray) this.lowValue = this.findStepIndex(this.scope.rzSliderModel);else this.lowValue = this.scope.rzSliderModel;
} else this.lowValue = this.scope.rzSliderModel;
},
syncHighValue: function syncHighValue() {
if (this.options.stepsArray) {
if (!this.options.bindIndexForStepsArray) this.highValue = this.findStepIndex(this.scope.rzSliderHigh);else this.highValue = this.scope.rzSliderHigh;
} else this.highValue = this.scope.rzSliderHigh;
},
getStepValue: function getStepValue(sliderValue) {
var step = this.options.stepsArray[sliderValue];
if (angular.isDate(step)) return step;
if (angular.isObject(step)) return step.value;
return step;
},
applyLowValue: function applyLowValue() {
if (this.options.stepsArray) {
if (!this.options.bindIndexForStepsArray) this.scope.rzSliderModel = this.getStepValue(this.lowValue);else this.scope.rzSliderModel = this.lowValue;
} else this.scope.rzSliderModel = this.lowValue;
},
applyHighValue: function applyHighValue() {
if (this.options.stepsArray) {
if (!this.options.bindIndexForStepsArray) this.scope.rzSliderHigh = this.getStepValue(this.highValue);else this.scope.rzSliderHigh = this.highValue;
} else this.scope.rzSliderHigh = this.highValue;
},
/*
* Reflow the slider when the low handle changes (called with throttle)
*/
onLowHandleChange: function onLowHandleChange() {
this.syncLowValue();
if (this.range) this.syncHighValue();
this.setMinAndMax();
this.updateLowHandle(this.valueToPosition(this.lowValue));
this.updateSelectionBar();
this.updateTicksScale();
this.updateAriaAttributes();
if (this.range) {
this.updateCmbLabel();
}
},
/*
* Reflow the slider when the high handle changes (called with throttle)
*/
onHighHandleChange: function onHighHandleChange() {
this.syncLowValue();
this.syncHighValue();
this.setMinAndMax();
this.updateHighHandle(this.valueToPosition(this.highValue));
this.updateSelectionBar();
this.updateTicksScale();
this.updateCmbLabel();
this.updateAriaAttributes();
},
/**
* Read the user options and apply them to the slider model
*/
applyOptions: function applyOptions() {
var sliderOptions;
if (this.scope.rzSliderOptions) sliderOptions = this.scope.rzSliderOptions();else sliderOptions = {};
this.options = RzSliderOptions.getOptions(sliderOptions);
if (this.options.step <= 0) this.options.step = 1;
this.range = this.scope.rzSliderModel !== undefined && this.scope.rzSliderHigh !== undefined;
this.options.draggableRange = this.range && this.options.draggableRange;
this.options.draggableRangeOnly = this.range && this.options.draggableRangeOnly;
if (this.options.draggableRangeOnly) {
this.options.draggableRange = true;
}
this.options.showTicks = this.options.showTicks || this.options.showTicksValues || !!this.options.ticksArray;
this.scope.showTicks = this.options.showTicks; //scope is used in the template
if (angular.isNumber(this.options.showTicks) || this.options.ticksArray) this.intermediateTicks = true;
this.options.showSelectionBar = this.options.showSelectionBar || this.options.showSelectionBarEnd || this.options.showSelectionBarFromValue !== null;
if (this.options.stepsArray) {
this.parseStepsArray();
} else {
if (this.options.translate) this.customTrFn = this.options.translate;else this.customTrFn = function (value) {
return String(value);
};
this.getLegend = this.options.getLegend;
}
if (this.options.vertical) {
this.positionProperty = 'bottom';
this.dimensionProperty = 'height';
}
if (this.options.customTemplateScope) this.scope.custom = this.options.customTemplateScope;
},
parseStepsArray: function parseStepsArray() {
this.options.floor = 0;
this.options.ceil = this.options.stepsArray.length - 1;
this.options.step = 1;
if (this.options.translate) {
this.customTrFn = this.options.translate;
} else {
this.customTrFn = function (modelValue) {
if (this.options.bindIndexForStepsArray) return this.getStepValue(modelValue);
return modelValue;
};
}
this.getLegend = function (index) {
var step = this.options.stepsArray[index];
if (angular.isObject(step)) return step.legend;
return null;
};
},
/**
* Resets slider
*
* @returns {undefined}
*/
resetSlider: function resetSlider() {
this.manageElementsStyle();
this.addAccessibility();
this.setMinAndMax();
this.updateCeilLab();
this.updateFloorLab();
this.unbindEvents();
this.manageEventsBindings();
this.setDisabledState();
this.calcViewDimensions();
this.updateRestrictionBar();
this.refocusPointerIfNeeded();
},
refocusPointerIfNeeded: function refocusPointerIfNeeded() {
if (this.currentFocusElement) {
this.onPointerFocus(this.currentFocusElement.pointer, this.currentFocusElement.ref);
this.focusElement(this.currentFocusElement.pointer);
}
},
/**
* Set the slider children to variables for easy access
*
* Run only once during initialization
*
* @returns {undefined}
*/
initElemHandles: function initElemHandles() {
// Assign all slider elements to object properties for easy access
angular.forEach(this.sliderElem.children(), function (elem, index) {
var jElem = angular.element(elem);
switch (index) {
case 0:
this.leftOutSelBar = jElem;
break;
case 1:
this.rightOutSelBar = jElem;
break;
case 2:
this.fullBar = jElem;
break;
case 3:
this.selBar = jElem;
break;
case 4:
this.restrictedBar = jElem;
break;
case 5:
this.minH = jElem;
break;
case 6:
this.maxH = jElem;
break;
case 7:
this.flrLab = jElem;
break;
case 8:
this.ceilLab = jElem;
break;
case 9:
this.minLab = jElem;
break;
case 10:
this.maxLab = jElem;
break;
case 11:
this.cmbLab = jElem;
break;
case 12:
this.ticks = jElem;
break;
}
}, this);
// Initialize position cache properties
this.selBar.rzsp = 0;
this.minH.rzsp = 0;
this.maxH.rzsp = 0;
this.flrLab.rzsp = 0;
this.ceilLab.rzsp = 0;
this.minLab.rzsp = 0;
this.maxLab.rzsp = 0;
this.cmbLab.rzsp = 0;
},
/**
* Update each elements style based on options
*/
manageElementsStyle: function manageElementsStyle() {
if (!this.range) this.maxH.css('display', 'none');else this.maxH.css('display', '');
this.alwaysHide(this.flrLab, this.options.showTicksValues || this.options.hideLimitLabels);
this.alwaysHide(this.ceilLab, this.options.showTicksValues || this.options.hideLimitLabels);
var hideLabelsForTicks = this.options.showTicksValues && !this.intermediateTicks;
this.alwaysHide(this.minLab, hideLabelsForTicks || this.options.hidePointerLabels);
this.alwaysHide(this.maxLab, hideLabelsForTicks || !this.range || this.options.hidePointerLabels);
this.alwaysHide(this.cmbLab, hideLabelsForTicks || !this.range || this.options.hidePointerLabels);
this.alwaysHide(this.selBar, !this.range && !this.options.showSelectionBar);
this.alwaysHide(this.leftOutSelBar, !this.range || !this.options.showOuterSelectionBars);
this.alwaysHide(this.restrictedBar, !this.options.restrictedRange);
this.alwaysHide(this.rightOutSelBar, !this.range || !this.options.showOuterSelectionBars);
if (this.range && this.options.showOuterSelectionBars) {
this.fullBar.addClass('rz-transparent');
}
if (this.options.vertical) this.sliderElem.addClass('rz-vertical');
if (this.options.draggableRange) this.selBar.addClass('rz-draggable');else this.selBar.removeClass('rz-draggable');
if (this.intermediateTicks && this.options.showTicksValues) this.ticks.addClass('rz-ticks-values-under');
},
alwaysHide: function alwaysHide(el, hide) {
el.rzAlwaysHide = hide;
if (hide) this.hideEl(el);else this.showEl(el);
},
/**
* Manage the events bindings based on readOnly and disabled options
*
* @returns {undefined}
*/
manageEventsBindings: function manageEventsBindings() {
if (this.options.disabled || this.options.readOnly) this.unbindEvents();else this.bindEvents();
},
/**
* Set the disabled state based on rzSliderDisabled
*
* @returns {undefined}
*/
setDisabledState: function setDisabledState() {
if (this.options.disabled) {
this.sliderElem.attr('disabled', 'disabled');
} else {
this.sliderElem.attr('disabled', null);
}
},
/**
* Reset label values
*
* @return {undefined}
*/
resetLabelsValue: function resetLabelsValue() {
this.minLab.rzsv = undefined;
this.maxLab.rzsv = undefined;
},
/**
* Initialize slider handles positions and labels
*
* Run only once during initialization and every time view port changes size
*
* @returns {undefined}
*/
initHandles: function initHandles() {
this.updateLowHandle(this.valueToPosition(this.lowValue));
/*
the order here is important since the selection bar should be
updated after the high handle but before the combined label
*/
if (this.range) this.updateHighHandle(this.valueToPosition(this.highValue));
this.updateSelectionBar();
if (this.range) this.updateCmbLabel();
this.updateTicksScale();
},
/**
* Translate value to human readable format
*
* @param {number|string} value
* @param {jqLite} label
* @param {String} which
* @param {boolean} [useCustomTr]
* @returns {undefined}
*/
translateFn: function translateFn(value, label, which, useCustomTr) {
useCustomTr = useCustomTr === undefined ? true : useCustomTr;
var valStr = '',
getDimension = false,
noLabelInjection = label.hasClass('no-label-injection');
if (useCustomTr) {
if (this.options.stepsArray && !this.options.bindIndexForStepsArray) value = this.getStepValue(value);
valStr = String(this.customTrFn(value, this.options.id, which));
} else {
valStr = String(value);
}
if (label.rzsv === undefined || label.rzsv.length !== valStr.length || label.rzsv.length > 0 && label.rzsd === 0) {
getDimension = true;
label.rzsv = valStr;
}
if (!noLabelInjection) {
label.html(valStr);
}
this.scope[which + 'Label'] = valStr;
// Update width only when length of the label have changed
if (getDimension) {
this.getDimension(label);
}
},
/**
* Set maximum and minimum values for the slider and ensure the model and high
* value match these limits
* @returns {undefined}
*/
setMinAndMax: function setMinAndMax() {
this.step = +this.options.step;
this.precision = +this.options.precision;
this.minValue = this.options.floor;
if (this.options.logScale && this.minValue === 0) throw Error("Can't use floor=0 with logarithmic scale");
if (this.options.enforceStep) {
this.lowValue = this.roundStep(this.lowValue);
if (this.range) this.highValue = this.roundStep(this.highValue);
}
if (this.options.ceil != null) this.maxValue = this.options.ceil;else this.maxValue = this.options.ceil = this.range ? this.highValue : this.lowValue;
if (this.options.enforceRange) {
this.lowValue = this.sanitizeValue(this.lowValue);
if (this.range) this.highValue = this.sanitizeValue(this.highValue);
}
this.applyLowValue();
if (this.range) this.applyHighValue();
this.valueRange = this.maxValue - this.minValue;
},
/**
* Adds accessibility attributes
*
* Run only once during initialization
*
* @returns {undefined}
*/
addAccessibility: function addAccessibility() {
this.minH.attr('role', 'slider');
this.updateAriaAttributes();
if (this.options.keyboardSupport && !(this.options.readOnly || this.options.disabled)) this.minH.attr('tabindex', '0');else this.minH.attr('tabindex', '');
if (this.options.vertical) this.minH.attr('aria-orientation', 'vertical');
if (this.options.ariaLabel) this.minH.attr('aria-label', this.options.ariaLabel);else if (this.options.ariaLabelledBy) this.minH.attr('aria-labelledby', this.options.ariaLabelledBy);
if (this.range) {
this.maxH.attr('role', 'slider');
if (this.options.keyboardSupport && !(this.options.readOnly || this.options.disabled)) this.maxH.attr('tabindex', '0');else this.maxH.attr('tabindex', '');
if (this.options.vertical) this.maxH.attr('aria-orientation', 'vertical');
if (this.options.ariaLabelHigh) this.maxH.attr('aria-label', this.options.ariaLabelHigh);else if (this.options.ariaLabelledByHigh) this.maxH.attr('aria-labelledby', this.options.ariaLabelledByHigh);
}
},
/**
* Updates aria attributes according to current values
*/
updateAriaAttributes: function updateAriaAttributes() {
this.minH.attr({
'aria-valuenow': this.scope.rzSliderModel,
'aria-valuetext': this.customTrFn(this.scope.rzSliderModel, this.options.id, 'model'),
'aria-valuemin': this.minValue,
'aria-valuemax': this.maxValue
});
if (this.range) {
this.maxH.attr({
'aria-valuenow': this.scope.rzSliderHigh,
'aria-valuetext': this.customTrFn(this.scope.rzSliderHigh, this.options.id, 'high'),
'aria-valuemin': this.minValue,
'aria-valuemax': this.maxValue
});
}
},
/**
* Calculate dimensions that are dependent on view port size
*
* Run once during initialization and every time view port changes size.
*
* @returns {undefined}
*/
calcViewDimensions: function calcViewDimensions() {
var handleWidth = this.getDimension(this.minH);
this.handleHalfDim = handleWidth / 2;
this.barDimension = this.getDimension(this.fullBar);
this.maxPos = this.barDimension - handleWidth;
this.getDimension(this.sliderElem);
this.sliderElem.rzsp = this.sliderElem[0].getBoundingClientRect()[this.positionProperty];
if (this.initHasRun) {
this.updateFloorLab();
this.updateCeilLab();
this.initHandles();
var self = this;
$timeout(function () {
self.updateTicksScale();
});
}
},
/**
* Update the ticks position
*
* @returns {undefined}
*/
updateTicksScale: function updateTicksScale() {
if (!this.options.showTicks) return;
var ticksArray = this.options.ticksArray || this.getTicksArray(),
translate = this.options.vertical ? 'translateY' : 'translateX',
self = this;
if (this.options.rightToLeft) ticksArray.reverse();
this.scope.ticks = ticksArray.map(function (value) {
var position = self.valueToPosition(value);
if (self.options.vertical) position = self.maxPos - position;
var translation = translate + '(' + Math.round(position) + 'px)';
var tick = {
selected: self.isTickSelected(value),
style: {
'-webkit-transform': translation,
'-moz-transform': translation,
'-o-transform': translation,
'-ms-transform': translation,
transform: translation
}
};
if (tick.selected && self.options.getSelectionBarColor) {
tick.style['background-color'] = self.getSelectionBarColor();
}
if (!tick.selected && self.options.getTickColor) {
tick.style['background-color'] = self.getTickColor(value);
}
if (self.options.ticksTooltip) {
tick.tooltip = self.options.ticksTooltip(value);
tick.tooltipPlacement = self.options.vertical ? 'right' : 'top';
}
if (self.options.showTicksValues === true || value % self.options.showTicksValues === 0) {
tick.value = self.getDisplayValue(value, 'tick-value');
if (self.options.ticksValuesTooltip) {
tick.valueTooltip = self.options.ticksValuesTooltip(value);
tick.valueTooltipPlacement = self.options.vertical ? 'right' : 'top';
}
}
if (self.getLegend) {
var legend = self.getLegend(value, self.options.id);
if (legend) tick.legend = legend;
}
return tick;
});
},
getTicksArray: function getTicksArray() {
var step = this.step,
ticksArray = [];
if (this.intermediateTicks) step = this.options.showTicks;
for (var value = this.minValue; value <= this.maxValue; value += step) {
ticksArray.push(value);
}
return ticksArray;
},
isTickSelected: function isTickSelected(value) {
if (!this.range) {
if (this.options.showSelectionBarFromValue !== null) {
var center = this.options.showSelectionBarFromValue;
if (this.lowValue > center && value >= center && value <= this.lowValue) return true;else if (this.lowValue < center && value <= center && value >= this.lowValue) return true;
} else if (this.options.showSelectionBarEnd) {
if (value >= this.lowValue) return true;
} else if (this.options.showSelectionBar && value <= this.lowValue) return true;
}
if (this.range && value >= this.lowValue && value <= this.highValue) return true;
return false;
},
/**
* Update position of the floor label
*
* @returns {undefined}
*/
updateFloorLab: function updateFloorLab() {
this.translateFn(this.minValue, this.flrLab, 'floor');
this.getDimension(this.flrLab);
var position = this.options.rightToLeft ? this.barDimension - this.flrLab.rzsd : 0;
this.setPosition(this.flrLab, position);
},
/**
* Update position of the ceiling label
*
* @returns {undefined}
*/
updateCeilLab: function updateCeilLab() {
this.translateFn(this.maxValue, this.ceilLab, 'ceil');
this.getDimension(this.ceilLab);
var position = this.options.rightToLeft ? 0 : this.barDimension - this.ceilLab.rzsd;
this.setPosition(this.ceilLab, position);
},
/**
* Update slider handles and label positions
*
* @param {string} which
* @param {number} newPos
*/
updateHandles: function updateHandles(which, newPos) {
if (which === 'lowValue') this.updateLowHandle(newPos);else this.updateHighHandle(newPos);
this.updateSelectionBar();
this.updateTicksScale();
if (this.range) this.updateCmbLabel();
},
/**
* Helper function to work out the position for handle labels depending on RTL or not
*
* @param {string} labelName maxLab or minLab
* @param newPos
*
* @returns {number}
*/
getHandleLabelPos: function getHandleLabelPos(labelName, newPos) {
var labelRzsd = this[labelName].rzsd,
nearHandlePos = newPos - labelRzsd / 2 + this.handleHalfDim,
endOfBarPos = this.barDimension - labelRzsd;
if (!this.options.boundPointerLabels) return nearHandlePos;
if (this.options.rightToLeft && labelName === 'minLab' || !this.options.rightToLeft && labelName === 'maxLab') {
return Math.min(nearHandlePos, endOfBarPos);
} else {
return Math.min(Math.max(nearHandlePos, 0), endOfBarPos);
}
},
/**
* Update low slider handle position and label
*
* @param {number} newPos
* @returns {undefined}
*/
updateLowHandle: function updateLowHandle(newPos) {
this.setPosition(this.minH, newPos);
this.translateFn(this.lowValue, this.minLab, 'model');
this.setPosition(this.minLab, this.getHandleLabelPos('minLab', newPos));
if (this.options.getPointerColor) {
var pointercolor = this.getPointerColor('min');
this.scope.minPointerStyle = {
backgroundColor: pointercolor
};
}
if (this.options.autoHideLimitLabels) {
this.shFloorCeil();
}
},
/**
* Update high slider handle position and label
*
* @param {number} newPos
* @returns {undefined}
*/
updateHighHandle: function updateHighHandle(newPos) {
this.setPosition(this.maxH, newPos);
this.translateFn(this.highValue, this.maxLab, 'high');
this.setPosition(this.maxLab, this.getHandleLabelPos('maxLab', newPos));
if (this.options.getPointerColor) {
var pointercolor = this.getPointerColor('max');
this.scope.maxPointerStyle = {
backgroundColor: pointercolor
};
}
if (this.options.autoHideLimitLabels) {
this.shFloorCeil();
}
},
/**
* Show/hide floor/ceiling label
*
* @returns {undefined}
*/
shFloorCeil: function shFloorCeil() {
// Show based only on hideLimitLabels if pointer labels are hidden
if (this.options.hidePointerLabels) {
return;
}
var flHidden = false,
clHidden = false,
isMinLabAtFloor = this.isLabelBelowFloorLab(this.minLab),
isMinLabAtCeil = this.isLabelAboveCeilLab(this.minLab),
isMaxLabAtCeil = this.isLabelAboveCeilLab(this.maxLab),
isCmbLabAtFloor = this.isLabelBelowFloorLab(this.cmbLab),
isCmbLabAtCeil = this.isLabelAboveCeilLab(this.cmbLab);
if (isMinLabAtFloor) {
flHidden = true;
this.hideEl(this.flrLab);
} else {
flHidden = false;
this.showEl(this.flrLab);
}
if (isMinLabAtCeil) {
clHidden = true;
this.hideEl(this.ceilLab);
} else {
clHidden = false;
this.showEl(this.ceilLab);
}
if (this.range) {
var hideCeil = this.cmbLabelShown ? isCmbLabAtCeil : isMaxLabAtCeil;
var hideFloor = this.cmbLabelShown ? isCmbLabAtFloor : isMinLabAtFloor;
if (hideCeil) {
this.hideEl(this.ceilLab);
} else if (!clHidden) {
this.showEl(this.ceilLab);
}
// Hide or show floor label
if (hideFloor) {
this.hideEl(this.flrLab);
} else if (!flHidden) {
this.showEl(this.flrLab);
}
}
},
isLabelBelowFloorLab: function isLabelBelowFloorLab(label) {
var isRTL = this.options.rightToLeft,
pos = label.rzsp,
dim = label.rzsd,
floorPos = this.flrLab.rzsp,
floorDim = this.flrLab.rzsd;
return isRTL ? pos + dim >= floorPos - 2 : pos <= floorPos + floorDim + 2;
},
isLabelAboveCeilLab: function isLabelAboveCeilLab(label) {
var isRTL = this.options.rightToLeft,
pos = label.rzsp,
dim = label.rzsd,
ceilPos = this.ceilLab.rzsp,
ceilDim = this.ceilLab.rzsd;
return isRTL ? pos <= ceilPos + ceilDim + 2 : pos + dim >= ceilPos - 2;
},
/**
* Update restricted area bar
*
* @returns {undefined}
*/
updateRestrictionBar: function updateRestrictionBar() {
var position = 0,
dimension = 0;
if (this.options.restrictedRange) {
var from = this.valueToPosition(this.options.restrictedRange.from),
to = this.valueToPosition(this.options.restrictedRange.to);
dimension = Math.abs(to - from);
position = this.options.rightToLeft ? to + this.handleHalfDim : from + this.handleHalfDim;
this.setDimension(this.restrictedBar, dimension);
this.setPosition(this.restrictedBar, position);
}
},
/**
* Update slider selection bar, combined label and range label
*
* @returns {undefined}
*/
updateSelectionBar: function updateSelectionBar() {
var position = 0,
dimension = 0,
isSelectionBarFromRight = this.options.rightToLeft ? !this.options.showSelectionBarEnd : this.options.showSelectionBarEnd,
positionForRange = this.options.rightToLeft ? this.maxH.rzsp + this.handleHalfDim : this.minH.rzsp + this.handleHalfDim;
if (this.range) {
dimension = Math.abs(this.maxH.rzsp - this.minH.rzsp);
position = positionForRange;
} else {
if (this.options.showSelectionBarFromValue !== null) {
var center = this.options.showSelectionBarFromValue,
centerPosition = this.valueToPosition(center),
isModelGreaterThanCenter = this.options.rightToLeft ? this.lowValue <= center : this.lowValue > center;
if (isModelGreaterThanCenter) {
dimension = this.minH.rzsp - centerPosition;
position = centerPosition + this.handleHalfDim;
} else {
dimension = centerPosition - this.minH.rzsp;
position = this.minH.rzsp + this.handleHalfDim;
}
} else if (isSelectionBarFromRight) {
dimension = Math.abs(this.maxPos - this.minH.rzsp) + this.handleHalfDim;
position = this.minH.rzsp + this.handleHalfDim;
} else {
dimension = this.minH.rzsp + this.handleHalfDim;
position = 0;
}
}
this.setDimension(this.selBar, dimension);
this.setPosition(this.selBar, position);
if (this.range && this.options.showOuterSelectionBars) {
if (this.options.rightToLeft) {
this.setDimension(this.rightOutSelBar, position);
this.setPosition(this.rightOutSelBar, 0);
this.setDimension(this.leftOutSelBar, this.getDimension(this.fullBar) - (position + dimension));
this.setPosition(this.leftOutSelBar, position + dimension);
} else {
this.setDimension(this.leftOutSelBar, position);
this.setPosition(this.leftOutSelBar, 0);
this.setDimension(this.rightOutSelBar, this.getDimension(this.fullBar) - (position + dimension));
this.setPosition(this.rightOutSelBar, position + dimension);
}
}
if (this.options.getSelectionBarColor) {
var color = this.getSelectionBarColor();
this.scope.barStyle = {
backgroundColor: color
};
} else if (this.options.selectionBarGradient) {
var offset = this.options.showSelectionBarFromValue !== null ? this.valueToPosition(this.options.showSelectionBarFromValue) : 0,
reversed = offset - position > 0 ^ isSelectionBarFromRight,
direction = this.options.vertical ? reversed ? 'bottom' : 'top' : reversed ? 'left' : 'right';
this.scope.barStyle = {
backgroundImage: 'linear-gradient(to ' + direction + ', ' + this.options.selectionBarGradient.from + ' 0%,' + this.options.selectionBarGradient.to + ' 100%)'
};
if (this.options.vertical) {
this.scope.barStyle.backgroundPosition = 'center ' + (offset + dimension + position + (reversed ? -this.handleHalfDim : 0)) + 'px';
this.scope.barStyle.backgroundSize = '100% ' + (this.barDimension - this.handleHalfDim) + 'px';
} else {
this.scope.barStyle.backgroundPosition = offset - position + (reversed ? this.handleHalfDim : 0) + 'px center';
this.scope.barStyle.backgroundSize = this.barDimension - this.handleHalfDim + 'px 100%';
}
}
},
/**
* Wrapper around the getSelectionBarColor of the user to pass to
* correct parameters
*/
getSelectionBarColor: function getSelectionBarColor() {
if (this.range) return this.options.getSelectionBarColor(this.scope.rzSliderModel, this.scope.rzSliderHigh);
return this.options.getSelectionBarColor(this.scope.rzSliderModel);
},
/**
* Wrapper around the getPointerColor of the user to pass to
* correct parameters
*/
getPointerColor: function getPointerColor(pointerType) {
if (pointerType === 'max') {
return this.options.getPointerColor(this.scope.rzSliderHigh, pointerType);
}
return this.options.getPointerColor(this.scope.rzSliderModel, pointerType);
},
/**
* Wrapper around the getTickColor of the user to pass to
* correct parameters
*/
getTickColor: function getTickColor(value) {
return this.options.getTickColor(value);
},
/**
* Update combined label position and value
*
* @returns {undefined}
*/
updateCmbLabel: function updateCmbLabel() {
var isLabelOverlap = null;
if (this.options.rightToLeft) {
isLabelOverlap = this.minLab.rzsp - this.minLab.rzsd - 10 <= this.maxLab.rzsp;
} else {
isLabelOverlap = this.minLab.rzsp + this.minLab.rzsd + 10 >= this.maxLab.rzsp;
}
if (isLabelOverlap) {
var lowTr = this.getDisplayValue(this.lowValue, 'model'),
highTr = this.getDisplayValue(this.highValue, 'high'),
labelVal = '';
if (this.options.mergeRangeLabelsIfSame && lowTr === highTr) {
labelVal = lowTr;
} else {
labelVal = this.options.rightToLeft ? highTr + this.options.labelOverlapSeparator + lowTr : lowTr + this.options.labelOverlapSeparator + highTr;
}
this.translateFn(labelVal, this.cmbLab, 'cmb', false);
var pos = this.options.boundPointerLabels ? Math.min(Math.max(this.selBar.rzsp + this.selBar.rzsd / 2 - this.cmbLab.rzsd / 2, 0), this.barDimension - this.cmbLab.rzsd) : this.selBar.rzsp + this.selBar.rzsd / 2 - this.cmbLab.rzsd / 2;
this.setPosition(this.cmbLab, pos);
this.cmbLabelShown = true;
this.hideEl(this.minLab);
this.hideEl(this.maxLab);
this.showEl(this.cmbLab);
} else {
this.cmbLabelShown = false;
this.updateHighHandle(this.valueToPosition(this.highValue));
this.updateLowHandle(this.valueToPosition(this.lowValue));
this.showEl(this.maxLab);
this.showEl(this.minLab);
this.hideEl(this.cmbLab);
}
if (this.options.autoHideLimitLabels) {
this.shFloorCeil();
}
},
/**
* Return the translated value if a translate function is provided else the original value
* @param value
* @param which if it's min or max handle
* @returns {*}
*/
getDisplayValue: function getDisplayValue(value, which) {
if (this.options.stepsArray && !this.options.bindIndexForStepsArray) {
value = this.getStepValue(value);
}
return this.customTrFn(value, this.options.id, which);
},
/**
* Round value to step and precision based on minValue
*
* @param {number} value
* @param {number} customStep a custom step to override the defined step
* @returns {number}
*/
roundStep: function roundStep(value, customStep) {
var step = customStep ? customStep : this.step,
steppedDifference = parseFloat((value - this.minValue) / step).toPrecision(12);
steppedDifference = Math.round(+steppedDifference) * step;
var newValue = (this.minValue + steppedDifference).toFixed(this.precision);
return +newValue;
},
/**
* Hide element
*
* @param element
* @returns {jqLite} The jqLite wrapped DOM element
*/
hideEl: function hideEl(element) {
return element.css({
visibility: 'hidden'
});
},
/**
* Show element
*
* @param element The jqLite wrapped DOM element
* @returns {jqLite} The jqLite
*/
showEl: function showEl(element) {
if (!!element.rzAlwaysHide) {
return element;
}
return element.css({
visibility: 'visible'
});
},
/**
* Set element left/top position depending on whether slider is horizontal or vertical
*
* @param {jqLite} elem The jqLite wrapped DOM element
* @param {number} pos
* @returns {number}
*/
setPosition: function setPosition(elem, pos) {
elem.rzsp = pos;
var css = {};
css[this.positionProperty] = Math.round(pos) + 'px';
elem.css(css);
return pos;
},
/**
* Get element width/height depending on whether slider is horizontal or vertical
*
* @param {jqLite} elem The jqLite wrapped DOM element
* @returns {number}
*/
getDimension: function getDimension(elem) {
var val = elem[0].getBoundingClientRect();
if (this.options.vertical) elem.rzsd = (val.bottom - val.top) * this.options.scale;else elem.rzsd = (val.right - val.left) * this.options.scale;
return elem.rzsd;
},
/**
* Set element width/height depending on whether slider is horizontal or vertical
*
* @param {jqLite} elem The jqLite wrapped DOM element
* @param {number} dim
* @returns {number}
*/
setDimension: function setDimension(elem, dim) {
elem.rzsd = dim;
var css = {};
css[this.dimensionProperty] = Math.round(dim) + 'px';
elem.css(css);
return dim;
},
/**
* Returns a value that is within slider range
*
* @param {number} val
* @returns {number}
*/
sanitizeValue: function sanitizeValue(val) {
return Math.min(Math.max(val, this.minValue), this.maxValue);
},
/**
* Translate value to pixel position
*
* @param {number} val
* @returns {number}
*/
valueToPosition: function valueToPosition(val) {
var fn = this.linearValueToPosition;
if (this.options.customValueToPosition) fn = this.options.customValueToPosition;else if (this.options.logScale) fn = this.logValueToPosition;
val = this.sanitizeValue(val);
var percent = fn(val, this.minValue, this.maxValue) || 0;
if (this.options.rightToLeft) percent = 1 - percent;
return percent * this.maxPos;
},
linearValueToPosition: function linearValueToPosition(val, minVal, maxVal) {
var range = maxVal - minVal;
return (val - minVal) / range;
},
logValueToPosition: function logValueToPosition(val, minVal, maxVal) {
val = Math.log(val);
minVal = Math.log(minVal);
maxVal = Math.log(maxVal);
var range = maxVal - minVal;
return (val - minVal) / range;
},
/**
* Translate position to model value
*
* @param {number} position
* @returns {number}
*/
positionToValue: function positionToValue(position) {
var percent = position / this.maxPos;
if (this.options.rightToLeft) percent = 1 - percent;
var fn = this.linearPositionToValue;
if (this.options.customPositionToValue) fn = this.options.customPositionToValue;else if (this.options.logScale) fn = this.logPositionToValue;
return fn(percent, this.minValue, this.maxValue) || 0;
},
linearPositionToValue: function linearPositionToValue(percent, minVal, maxVal) {
return percent * (maxVal - minVal) + minVal;
},
logPositionToValue: function logPositionToValue(percent, minVal, maxVal) {
minVal = Math.log(minVal);
maxVal = Math.log(maxVal);
var value = percent * (maxVal - minVal) + minVal;
return Math.exp(value);
},
getEventAttr: function getEventAttr(event, attr) {
return event.originalEvent === undefined ? event[attr] : event.originalEvent[attr];
},
// Events
/**
* Get the X-coordinate or Y-coordinate of an event
*
* @param {Object} event The event
* @param targetTouchId The identifier of the touch with the X/Y coordinates
* @returns {number}
*/
getEventXY: function getEventXY(event, targetTouchId) {
/* http://stackoverflow.com/a/12336075/282882 */
//noinspection JSLint
var clientXY = this.options.vertical ? 'clientY' : 'clientX';
if (event[clientXY] !== undefined) {
return event[clientXY];
}
var touches = this.getEventAttr(event, 'touches');
if (targetTouchId !== undefined) {
for (var i = 0; i < touches.length; i++) {
if (touches[i].identifier === targetTouchId) {
return touches[i][clientXY];
}
}
}
// If no target touch or the target touch was not found in the event
// returns the coordinates of the first touch
return touches[0][clientXY];
},
/**
* Compute the event position depending on whether the slider is horizontal or vertical
* @param event
* @param targetTouchId If targetTouchId is provided it will be considered the position of that
* @returns {number}
*/
getEventPosition: function getEventPosition(event, targetTouchId) {
var sliderPos = this.sliderElem.rzsp,
eventPos = 0;
if (this.options.vertical) eventPos = -this.getEventXY(event, targetTouchId) + sliderPos;else eventPos = this.getEventXY(event, targetTouchId) - sliderPos;
return eventPos * this.options.scale - this.handleHalfDim; // #346 handleHalfDim is already scaled
},
/**
* Get event names for move and event end
*
* @param {Event} event The event
*
* @return {{moveEvent: string, endEvent: string}}
*/
getEventNames: function getEventNames(event) {
var eventNames = {
moveEvent: '',
endEvent: ''
};
if (this.getEventAttr(event, 'touches')) {
eventNames.moveEvent = 'touchmove';
eventNames.endEvent = 'touchend';
} else {
eventNames.moveEvent = 'mousemove';
eventNames.endEvent = 'mouseup';
}
return eventNames;
},
/**
* Get the handle closest to an event.
*
* @param event {Event} The event
* @returns {jqLite} The handle closest to the event.
*/
getNearestHandle: function getNearestHandle(event) {
if (!this.range) {
return this.minH;
}
var position = this.getEventPosition(event),
distanceMin = Math.abs(position - this.minH.rzsp),
distanceMax = Math.abs(position - this.maxH.rzsp);
if (distanceMin < distanceMax) return this.minH;else if (distanceMin > distanceMax) return this.maxH;else if (!this.options.rightToLeft)
//if event is at the same distance from min/max then if it's at left of minH, we return minH else maxH
return position < this.minH.rzsp ? this.minH : this.maxH;
//reverse in rtl
else return position > this.minH.rzsp ? this.minH : this.maxH;
},
/**
* Wrapper function to focus an angular element
*
* @param el {AngularElement} the element to focus
*/
focusElement: function focusElement(el) {
var DOM_ELEMENT = 0;
el[DOM_ELEMENT].focus();
},
/**
* Bind mouse and touch events to slider handles
*
* @returns {undefined}
*/
bindEvents: function bindEvents() {
var barTracking, barStart, barMove;
if (this.options.draggableRange) {
barTracking = 'rzSliderDrag';
barStart = this.onDragStart;
barMove = this.onDragMove;
} else {
barTracking = 'lowValue';
barStart = this.onStart;
barMove = this.onMove;
}
if (!this.options.onlyBindHandles) {
this.selBar.on('mousedown', angular.bind(this, barStart, null, barTracking));
this.selBar.on('mousedown', angular.bind(this, barMove, this.selBar));
}
if (this.options.draggableRangeOnly) {
this.minH.on('mousedown', angular.bind(this, barStart, null, barTracking));
this.maxH.on('mousedown', angular.bind(this, barStart, null, barTracking));
} else {
this.minH.on('mousedown', angular.bind(this, this.onStart, this.minH, 'lowValue'));
if (this.range) {
this.maxH.on('mousedown', angular.bind(this, this.onStart, this.maxH, 'highValue'));
}
if (!this.options.onlyBindHandles) {
this.fullBar.on('mousedown', angular.bind(this, this.onStart, null, null));
this.fullBar.on('mousedown', angular.bind(this, this.onMove, this.fullBar));
this.ticks.on('mousedown', angular.bind(this, this.onStart, null, null));
this.ticks.on('mousedown', angular.bind(this, this.onTickClick, this.ticks));
}
}
if (!this.options.onlyBindHandles) {
this.selBar.on('touchstart', angular.bind(this, barStart, null, barTracking));
this.selBar.on('touchstart', angular.bind(this, barMove, this.selBar));
}
if (this.options.draggableRangeOnly) {
this.minH.on('touchstart', angular.bind(this, barStart, null, barTracking));
this.maxH.on('touchstart', angular.bind(this, barStart, null, barTracking));
} else {
this.minH.on('touchstart', angular.bind(this, this.onStart, this.minH, 'lowValue'));
if (this.range) {
this.maxH.on('touchstart', angular.bind(this, this.onStart, this.maxH, 'highValue'));
}
if (!this.options.onlyBindHandles) {
this.fullBar.on('touchstart', angular.bind(this, this.onStart, null, null));
this.fullBar.on('touchstart', angular.bind(this, this.onMove, this.fullBar));
this.ticks.on('touchstart', angular.bind(this, this.onStart, null, null));
this.ticks.on('touchstart', angular.bind(this, this.onTickClick, this.ticks));
}
}
if (this.options.keyboardSupport) {
this.minH.on('focus', angular.bind(this, this.onPointerFocus, this.minH, 'lowValue'));
if (this.range) {
this.maxH.on('focus', angular.bind(this, this.onPointerFocus, this.maxH, 'highValue'));
}
}
},
/**
* Unbind mouse and touch events to slider handles
*
* @returns {undefined}
*/
unbindEvents: function unbindEvents() {
this.minH.off();
this.maxH.off();
this.fullBar.off();
this.selBar.off();
this.ticks.off();
},
/**
* onStart event handler
*
* @param {?Object} pointer The jqLite wrapped DOM element; if null, the closest handle is used
* @param {?string} ref The name of the handle being changed; if null, the closest handle's value is modified
* @param {Event} event The event
* @returns {undefined}
*/
onStart: function onStart(pointer, ref, event) {
var ehMove,
ehEnd,
eventNames = this.getEventNames(event);
event.stopPropagation();
event.preventDefault();
// We have to do this in case the HTML where the sliders are on
// have been animated into view.
this.calcViewDimensions();
if (pointer) {
this.tracking = ref;
} else {
pointer = this.getNearestHandle(event);
this.tracking = pointer === this.minH ? 'lowValue' : 'highValue';
}
pointer.addClass('rz-active');
if (this.options.keyboardSupport) this.focusElement(pointer);
ehMove = angular.bind(this, this.dragging.active ? this.onDragMove : this.onMove, pointer);
ehEnd = angular.bind(this, this.onEnd, ehMove);
$document.on(eventNames.moveEvent, ehMove);
$document.on(eventNames.endEvent, ehEnd);
this.endHandlerToBeRemovedOnEnd = ehEnd;
this.callOnStart();
var changedTouches = this.getEventAttr(event, 'changedTouches');
if (changedTouches) {
// Store the touch identifier
if (!this.touchId) {
this.isDragging = true;
this.touchId = changedTouches[0].identifier;
}
}
},
/**
* onMove event handler
*
* @param {jqLite} pointer
* @param {Event} event The event
* @param {boolean} fromTick if the event occured on a tick or not
* @returns {undefined}
*/
onMove: function onMove(pointer, event, fromTick) {
var changedTouches = this.getEventAttr(event, 'changedTouches');
var touchForThisSlider;
if (changedTouches) {
for (var i = 0; i < changedTouches.length; i++) {
if (changedTouches[i].identifier === this.touchId) {
touchForThisSlider = changedTouches[i];
break;
}
}
}
if (changedTouches && !touchForThisSlider) {
return;
}
var newPos = this.getEventPosition(event, touchForThisSlider ? touchForThisSlider.identifier : undefined),
newValue,
ceilValue = this.options.rightToLeft ? this.minValue : this.maxValue,
flrValue = this.options.rightToLeft ? this.maxValue : this.minValue;
if (newPos <= 0) {
newValue = flrValue;
} else if (newPos >= this.maxPos) {
newValue = ceilValue;
} else {
newValue = this.positionToValue(newPos);
if (fromTick && angular.isNumber(this.options.showTicks)) newValue = this.roundStep(newValue, this.options.showTicks);else newValue = this.roundStep(newValue);
}
this.positionTrackingHandle(newValue);
},
/**
* onEnd event handler
*
* @param {Event} event The event
* @param {Function} ehMove The bound move event handler
* @returns {undefined}
*/
onEnd: function onEnd(ehMove, event) {
var changedTouches = this.getEventAttr(event, 'changedTouches');
if (changedTouches && changedTouches[0].identifier !== this.touchId) {
return;
}
this.isDragging = false;
this.touchId = null;
if (!this.options.keyboardSupport) {
this.minH.removeClass('rz-active');
this.maxH.removeClass('rz-active');
this.tracking = '';
}
this.dragging.active = false;
var eventName = this.getEventNames(event);
$document.off(eventName.moveEvent, ehMove);
$document.off(eventName.endEvent, this.endHandlerToBeRemovedOnEnd);
this.endHandlerToBeRemovedOnEnd = null;
this.callOnEnd();
},
onTickClick: function onTickClick(pointer, event) {
this.onMove(pointer, event, true);
},
onPointerFocus: function onPointerFocus(pointer, ref) {
this.tracking = ref;
pointer.one('blur', angular.bind(this, this.onPointerBlur, pointer));
pointer.on('keydown', angular.bind(this, this.onKeyboardEvent));
pointer.on('keyup', angular.bind(this, this.onKeyUp));
this.firstKeyDown = true;
pointer.addClass('rz-active');
this.currentFocusElement = {
pointer: pointer,
ref: ref
};
},
onKeyUp: function onKeyUp() {
this.firstKeyDown = true;
this.callOnEnd();
},
onPointerBlur: function onPointerBlur(pointer) {
pointer.off('keydown');
pointer.off('keyup');
pointer.removeClass('rz-active');
if (!this.isDragging) {
this.tracking = '';
this.currentFocusElement = null;
}
},
/**
* Key actions helper function
*
* @param {number} currentValue value of the slider
*
* @returns {?Object} action value mappings
*/
getKeyActions: function getKeyActions(currentValue) {
var increaseStep = currentValue + this.step,
decreaseStep = currentValue - this.step,
increasePage = currentValue + this.valueRange / 10,
decreasePage = currentValue - this.valueRange / 10;
if (this.options.reversedControls) {
increaseStep = currentValue - this.step;
decreaseStep = currentValue + this.step;
increasePage = currentValue - this.valueRange / 10;
decreasePage = currentValue + this.valueRange / 10;
}
//Left to right default actions
var actions = {
UP: increaseStep,
DOWN: decreaseStep,
LEFT: decreaseStep,
RIGHT: increaseStep,
PAGEUP: increasePage,
PAGEDOWN: decreasePage,
HOME: this.options.reversedControls ? this.maxValue : this.minValue,
END: this.options.reversedControls ? this.minValue : this.maxValue
//right to left means swapping right and left arrows
};if (this.options.rightToLeft) {
actions.LEFT = increaseStep;
actions.RIGHT = decreaseStep;
// right to left and vertical means we also swap up and down
if (this.options.vertical) {
actions.UP = decreaseStep;
actions.DOWN = increaseStep;
}
}
return actions;
},
onKeyboardEvent: function onKeyboardEvent(event) {
var currentValue = this[this.tracking],
keyCode = event.keyCode || event.which,
keys = {
38: 'UP',
40: 'DOWN',
37: 'LEFT',
39: 'RIGHT',
33: 'PAGEUP',
34: 'PAGEDOWN',
36: 'HOME',
35: 'END'
},
actions = this.getKeyActions(currentValue),
key = keys[keyCode],
action = actions[key];
if (action == null || this.tracking === '') return;
event.preventDefault();
if (this.firstKeyDown) {
this.firstKeyDown = false;
this.callOnStart();
}
var self = this;
$timeout(function () {
var newValue = self.roundStep(self.sanitizeValue(action));
if (!self.options.draggableRangeOnly) {
self.positionTrackingHandle(newValue);
} else {
var difference = self.highValue - self.lowValue,
newMinValue,
newMaxValue;
if (self.tracking === 'lowValue') {
newMinValue = newValue;
newMaxValue = newValue + difference;
if (newMaxValue > self.maxValue) {
newMaxValue = self.maxValue;
newMinValue = newMaxValue - difference;
}
} else {
newMaxValue = newValue;
newMinValue = newValue - difference;
if (newMinValue < self.minValue) {
newMinValue = self.minValue;
newMaxValue = newMinValue + difference;
}
}
self.positionTrackingBar(newMinValue, newMaxValue);
}
});
},
/**
* onDragStart event handler
*
* Handles dragging of the middle bar.
*
* @param {Object} pointer The jqLite wrapped DOM element
* @param {string} ref One of the refLow, refHigh values
* @param {Event} event The event
* @returns {undefined}
*/
onDragStart: function onDragStart(pointer, ref, event) {
var position = this.getEventPosition(event);
this.dragging = {
active: true,
value: this.positionToValue(position),
difference: this.highValue - this.lowValue,
lowLimit: this.options.rightToLeft ? this.minH.rzsp - position : position - this.minH.rzsp,
highLimit: this.options.rightToLeft ? position - this.maxH.rzsp : this.maxH.rzsp - position
};
this.onStart(pointer, ref, event);
},
/**
* getValue helper function
*
* gets max or min value depending on whether the newPos is outOfBounds above or below the bar and rightToLeft
*
* @param {string} type 'max' || 'min' The value we are calculating
* @param {number} newPos The new position
* @param {boolean} outOfBounds Is the new position above or below the max/min?
* @param {boolean} isAbove Is the new position above the bar if out of bounds?
*
* @returns {number}
*/
getValue: function getValue(type, newPos, outOfBounds, isAbove) {
var isRTL = this.options.rightToLeft,
value = null;
if (type === 'min') {
if (outOfBounds) {
if (isAbove) {
value = isRTL ? this.minValue : this.maxValue - this.dragging.difference;
} else {
value = isRTL ? this.maxValue - this.dragging.difference : this.minValue;
}
} else {
value = isRTL ? this.positionToValue(newPos + this.dragging.lowLimit) : this.positionToValue(newPos - this.dragging.lowLimit);
}
} else {
if (outOfBounds) {
if (isAbove) {
value = isRTL ? this.minValue + this.dragging.difference : this.maxValue;
} else {
value = isRTL ? this.maxValue : this.minValue + this.dragging.difference;
}
} else {
if (isRTL) {
value = this.positionToValue(newPos + this.dragging.lowLimit) + this.dragging.difference;
} else {
value = this.positionToValue(newPos - this.dragging.lowLimit) + this.dragging.difference;
}
}
}
return this.roundStep(value);
},
/**
* onDragMove event handler
*
* Handles dragging of the middle bar.
*
* @param {jqLite} pointer
* @param {Event} event The event
* @returns {undefined}
*/
onDragMove: function onDragMove(pointer, event) {
var newPos = this.getEventPosition(event),
newMinValue,
newMaxValue,
ceilLimit,
flrLimit,
isUnderFlrLimit,
isOverCeilLimit,
flrH,
ceilH;
if (this.options.rightToLeft) {
ceilLimit = this.dragging.lowLimit;
flrLimit = this.dragging.highLimit;
flrH = this.maxH;
ceilH = this.minH;
} else {
ceilLimit = this.dragging.highLimit;
flrLimit = this.dragging.lowLimit;
flrH = this.minH;
ceilH = this.maxH;
}
isUnderFlrLimit = newPos <= flrLimit;
isOverCeilLimit = newPos >= this.maxPos - ceilLimit;
if (isUnderFlrLimit) {
if (flrH.rzsp === 0) return;
newMinValue = this.getValue('min', newPos, true, false);
newMaxValue = this.getValue('max', newPos, true, false);
} else if (isOverCeilLimit) {
if (ceilH.rzsp === this.maxPos) return;
newMaxValue = this.getValue('max', newPos, true, true);
newMinValue = this.getValue('min', newPos, true, true);
} else {
newMinValue = this.getValue('min', newPos, false);
newMaxValue = this.getValue('max', newPos, false);
}
this.positionTrackingBar(newMinValue, newMaxValue);
},
/**
* Set the new value and position for the entire bar
*
* @param {number} newMinValue the new minimum value
* @param {number} newMaxValue the new maximum value
*/
positionTrackingBar: function positionTrackingBar(newMinValue, newMaxValue) {
if (this.options.minLimit != null && newMinValue < this.options.minLimit) {
newMinValue = this.options.minLimit;
newMaxValue = newMinValue + this.dragging.difference;
}
if (this.options.maxLimit != null && newMaxValue > this.options.maxLimit) {
newMaxValue = this.options.maxLimit;
newMinValue = newMaxValue - this.dragging.difference;
}
this.lowValue = newMinValue;
this.highValue = newMaxValue;
this.applyLowValue();
if (this.range) this.applyHighValue();
this.applyModel(true);
this.updateHandles('lowValue', this.valueToPosition(newMinValue));
this.updateHandles('highValue', this.valueToPosition(newMaxValue));
},
/**
* Set the new value and position to the current tracking handle
*
* @param {number} newValue new model value
*/
positionTrackingHandle: function positionTrackingHandle(newValue) {
var valueChanged = false;
newValue = this.applyMinMaxLimit(newValue);
newValue = this.applyRestrictedRange(newValue);
if (this.range) {
if (this.options.pushRange) {
newValue = this.applyPushRange(newValue);
valueChanged = true;
} else {
if (this.options.noSwitching) {
if (this.tracking === 'lowValue' && newValue > this.highValue) newValue = this.applyMinMaxRange(this.highValue);else if (this.tracking === 'highValue' && newValue < this.lowValue) newValue = this.applyMinMaxRange(this.lowValue);
}
newValue = this.applyMinMaxRange(newValue);
/* This is to check if we need to switch the min and max handles */
if (this.tracking === 'lowValue' && newValue > this.highValue) {
this.lowValue = this.highValue;
this.applyLowValue();
this.applyModel();
this.updateHandles(this.tracking, this.maxH.rzsp);
this.updateAriaAttributes();
this.tracking = 'highValue';
this.minH.removeClass('rz-active');
this.maxH.addClass('rz-active');
if (this.options.keyboardSupport) this.focusElement(this.maxH);
valueChanged = true;
} else if (this.tracking === 'highValue' && newValue < this.lowValue) {
this.highValue = this.lowValue;
this.applyHighValue();
this.applyModel();
this.updateHandles(this.tracking, this.minH.rzsp);
this.updateAriaAttributes();
this.tracking = 'lowValue';
this.maxH.removeClass('rz-active');
this.minH.addClass('rz-active');
if (this.options.keyboardSupport) this.focusElement(this.minH);
valueChanged = true;
}
}
}
if (this[this.tracking] !== newValue) {
this[this.tracking] = newValue;
if (this.tracking === 'lowValue') this.applyLowValue();else this.applyHighValue();
this.applyModel();
this.updateHandles(this.tracking, this.valueToPosition(newValue));
this.updateAriaAttributes();
valueChanged = true;
}
if (valueChanged) this.applyModel(true);
},
applyMinMaxLimit: function applyMinMaxLimit(newValue) {
if (this.options.minLimit != null && newValue < this.options.minLimit) return this.options.minLimit;
if (this.options.maxLimit != null && newValue > this.options.maxLimit) return this.options.maxLimit;
return newValue;
},
applyMinMaxRange: function applyMinMaxRange(newValue) {
var oppositeValue = this.tracking === 'lowValue' ? this.highValue : this.lowValue,
difference = Math.abs(newValue - oppositeValue);
if (this.options.minRange != null) {
if (difference < this.options.minRange) {
if (this.tracking === 'lowValue') return this.highValue - this.options.minRange;else return this.lowValue + this.options.minRange;
}
}
if (this.options.maxRange != null) {
if (difference > this.options.maxRange) {
if (this.tracking === 'lowValue') return this.highValue - this.options.maxRange;else return this.lowValue + this.options.maxRange;
}
}
return newValue;
},
applyRestrictedRange: function applyRestrictedRange(newValue) {
if (this.options.restrictedRange != null && newValue > this.options.restrictedRange.from && newValue < this.options.restrictedRange.to) {
var halfWidth = (this.options.restrictedRange.to - this.options.restrictedRange.from) / 2;
if (this.tracking === 'lowValue') {
return newValue > this.options.restrictedRange.from + halfWidth ? this.options.restrictedRange.to : this.options.restrictedRange.from;
}
if (this.tracking === 'highValue') {
return newValue < this.options.restrictedRange.to - halfWidth ? this.options.restrictedRange.from : this.options.restrictedRange.to;
}
}
return newValue;
},
applyPushRange: function applyPushRange(newValue) {
var difference = this.tracking === 'lowValue' ? this.highValue - newValue : newValue - this.lowValue,
minRange = this.options.minRange !== null ? this.options.minRange : this.options.step,
maxRange = this.options.maxRange;
// if smaller than minRange
if (difference < minRange) {
if (this.tracking === 'lowValue') {
this.highValue = Math.min(newValue + minRange, this.maxValue);
newValue = this.highValue - minRange;
this.applyHighValue();
this.updateHandles('highValue', this.valueToPosition(this.highValue));
} else {
this.lowValue = Math.max(newValue - minRange, this.minValue);
newValue = this.lowValue + minRange;
this.applyLowValue();
this.updateHandles('lowValue', this.valueToPosition(this.lowValue));
}
this.updateAriaAttributes();
} else if (maxRange !== null && difference > maxRange) {
// if greater than maxRange
if (this.tracking === 'lowValue') {
this.highValue = newValue + maxRange;
this.applyHighValue();
this.updateHandles('highValue', this.valueToPosition(this.highValue));
} else {
this.lowValue = newValue - maxRange;
this.applyLowValue();
this.updateHandles('lowValue', this.valueToPosition(this.lowValue));
}
this.updateAriaAttributes();
}
return newValue;
},
/**
* Apply the model values using scope.$apply.
* We wrap it with the internalChange flag to avoid the watchers to be called
*/
applyModel: function applyModel(callOnChange) {
this.internalChange = true;
this.scope.$apply();
callOnChange && this.callOnChange();
this.internalChange = false;
},
/**
* Call the onStart callback if defined
* The callback call is wrapped in a $evalAsync to ensure that its result will be applied to the scope.
*
* @returns {undefined}
*/
callOnStart: function callOnStart() {
if (this.options.onStart) {
var self = this,
pointerType = this.tracking === 'lowValue' ? 'min' : 'max';
this.scope.$evalAsync(function () {
self.options.onStart(self.options.id, self.scope.rzSliderModel, self.scope.rzSliderHigh, pointerType);
});
}
},
/**
* Call the onChange callback if defined
* The callback call is wrapped in a $evalAsync to ensure that its result will be applied to the scope.
*
* @returns {undefined}
*/
callOnChange: function callOnChange() {
if (this.options.onChange) {
var self = this,
pointerType = this.tracking === 'lowValue' ? 'min' : 'max';
this.scope.$evalAsync(function () {
self.options.onChange(self.options.id, self.scope.rzSliderModel, self.scope.rzSliderHigh, pointerType);
});
}
},
/**
* Call the onEnd callback if defined
* The callback call is wrapped in a $evalAsync to ensure that its result will be applied to the scope.
*
* @returns {undefined}
*/
callOnEnd: function callOnEnd() {
if (this.options.onEnd) {
var self = this,
pointerType = this.tracking === 'lowValue' ? 'min' : 'max';
this.scope.$evalAsync(function () {
self.options.onEnd(self.options.id, self.scope.rzSliderModel, self.scope.rzSliderHigh, pointerType);
});
}
this.scope.$emit('slideEnded');
}
};
return Slider;
}]).directive('rzslider', ['RzSlider', function (RzSlider) {
'use strict';
return {
restrict: 'AE',
replace: true,
scope: {
rzSliderModel: '=?',
rzSliderHigh: '=?',
rzSliderOptions: '&?',
rzSliderTplUrl: '@'
},
/**
* Return template URL
*
* @param {jqLite} elem
* @param {Object} attrs
* @return {string}
*/
templateUrl: function templateUrl(elem, attrs) {
//noinspection JSUnresolvedVariable
return attrs.rzSliderTplUrl || 'rzSliderTpl.html';
},
link: function link(scope, elem) {
scope.slider = new RzSlider(scope, elem); //attach on scope so we can test it
}
};
}]);
// IDE assist
/**
* @name ngScope
*
* @property {number} rzSliderModel
* @property {number} rzSliderHigh
* @property {Object} rzSliderOptions
*/
/**
* @name jqLite
*
* @property {number|undefined} rzsp rzslider label position position
* @property {number|undefined} rzsd rzslider element dimension
* @property {string|undefined} rzsv rzslider label value/text
* @property {Function} css
* @property {Function} text
*/
/**
* @name Event
* @property {Array} touches
* @property {Event} originalEvent
*/
/**
* @name ThrottleOptions
*
* @property {boolean} leading
* @property {boolean} trailing
*/
module.run(['$templateCache', function ($templateCache) {
'use strict';
$templateCache.put('rzSliderTpl.html', " - {{ t.value }} {{ t.legend }}
");
}]);
return module.name;
});
'use strict';
/**
* @ngdoc overview
* @name alterKonfig
* @description
* # alterKonfig
*
* Main module of the application.
*/
angular.module('triglavQuiz', ['ngAnimate', 'ngResource', 'rzModule', '720kb.tooltips', 'angularjs-datetime-picker', 'angular-google-analytics']
//'ui.bootstrap',
// 'toastr',
//'ngCookies',
).run(['$window', '$rootScope', 'RzSliderOptions', function ($window, $rootScope, RzSliderOptions) {
$rootScope.busy = false;
//rzSlider
RzSliderOptions.options({
noSwitching: true,
showTicks: false,
showSelectionBar: true,
hidePointerLabels: true,
hideLimitLabels: true,
enforceStep: false
});
}]).directive('numberInput', ['$parse', function ($parse) {
return {
require: 'ngModel',
link: function link(scope, element, attrs, modelCtrl) {
var capitalize = function capitalize(inputValue) {
if (inputValue === undefined || typeof inputValue !== "string") {
inputValue = '';
}
var parsed = inputValue.replace(/[^\d]/g, "");
if (parsed !== inputValue) {
modelCtrl.$setViewValue(parsed);
modelCtrl.$render();
}
return parsed;
};
modelCtrl.$parsers.push(capitalize);
capitalize($parse(attrs.ngModel)(scope)); // capitalize initial value
}
};
}]).directive('roundSlider', [function () {
return {
restrict: 'A',
scope: {
sliderModel: "=roundSlider",
options: "=sliderOptions"
},
link: function link(scope, element, attr) {
angular.element(element).roundSlider(angular.extend({}, scope.options, {
change: function change(vl) {
scope.$apply(function () {
scope.sliderModel = vl.value;
});
}
}));
}
};
}]).directive('radarChart', [function () {
return {
restrict: 'A',
scope: {
radarChart: "=radarChart"
},
link: function link(scope, element, attr) {
//var ctx = angular.element(element)[0].getContext('2d');
new Chart(angular.element(element)[0].getContext('2d'), {
type: 'radar',
data: scope.radarChart,
options: {
legend: {
display: false
}
}
});
}
};
}]).directive('staticSocialShare', ['$timeout', function ($timeout) {
return {
restrict: 'A',
link: function link(scope, element, attr) {
$timeout(function () {
angular.element(element).specto_sharer({
//CONTENT
content_wrapp_id: ".static-social-share-texts", //id of content wrapper - valid only if not present in href atttribute or html is rendered by plugin
//string or function, which translates to any css selector (!string!)
elm_title: function elm_title(icn_wrapper, share_type) {
return share_type === "linkedin" ? ".title-linked" : ".title";
},
elm_description: function elm_description(icn_wrapper, share_type) {
return share_type === "email" ? ".description-mail" : share_type === "linkedin" ? ".desc-linked" : ".description";
},
elm_image: "img", // css selector for image element
//FB settings
appId: "348860999185792", //Facebook appId
version: "v3.1", //Facebook app version
has_fb: true //has facebook sharer (to async load fb sdk) -> by default is false
});
}, 200);
}
};
}]).directive('socialShareQuiz', ['$timeout', function ($timeout) {
return {
restrict: 'A',
link: function link(scope, element, attr) {
$timeout(function () {
angular.element(element).specto_sharer({
//CONTENT
content_wrapp_id: "#socialResults", //id of content wrapper - valid only if not present in href atttribute or html is rendered by plugin
//string or function, which translates to any css selector (!string!)
elm_title: function elm_title(icn_wrapper, share_type) {
return share_type === "linkedin" ? ".share_title_linked" : ".share_title";
},
elm_description: function elm_description(icn_wrapper, share_type) {
return share_type === "email" ? ".share_description_mail" : share_type === "linkedin" ? ".share_description_linked" : ".share_description";
},
elm_image: "img", // css selector for image element
//FB settings
appId: "348860999185792", //Facebook appId
version: "v3.1", //Facebook app version
has_fb: true //has facebook sharer (to async load fb sdk) -> by default is false
});
}, 200);
}
};
}]).directive('equalHeight', ['$timeout', function ($timeout) {
return {
restrict: 'A',
link: function link(scope, element, attr) {
$timeout(function () {
$(element).find('.equal-height-title').matchHeight({
byRow: true,
property: 'height',
target: null,
remove: false
});
$(element).find('.equal-height-par').matchHeight({
byRow: true,
property: 'height',
target: null,
remove: false
});
}, 200);
}
};
}]).config(['AnalyticsProvider', function (AnalyticsProvider) {
AnalyticsProvider.setAccount({
tracker: 'UA-71445619-3',
trackEvent: true
});
if($.cookie("cookie_module_cat") == "01" || $.cookie("cookie_module_cat") == "00") {
AnalyticsProvider.disableAnalytics(true);
}
}]).run(['Analytics', function(Analytics) {
}]).directive("datepicker", function () {
return {
restrict: "A",
require: "ngModel",
link: function (scope, elem, attrs, ngModelCtrl) {
var updateModel = function (dateText) {
scope.$apply(function () {
ngModelCtrl.$setViewValue(dateText);
});
};
var options = {
closeText: "Potrdi",
minDate: +1,
maxDate: +356,
dateFormat: 'dd.mm.yy',
timeFormat: "HH:mm",
hour: new Date().getHours(),
minute: new Date().getMinutes(),
controlType: 'select',
onSelect: function (dateText) {
updateModel(dateText);
}
};
elem.datetimepicker(options, $.datepicker.regional["sl"] );
}
}
}).directive('onlyNumbers', function () {
return {
restrict: 'A',
link: function (scope, elm, attrs, ctrl) {
elm.on('keydown', function (event) {
if(event.shiftKey){event.preventDefault(); return false;}
//console.log(event.which);
if ([8, 13, 27, 37, 38, 39, 40].indexOf(event.which) > -1) {
// backspace, enter, escape, arrows
return true;
} else if (event.which >= 48 && event.which <= 57) {
// numbers 0 to 9
return true;
} else if (event.which >= 96 && event.which <= 105) {
// numpad number
return true;
}
// else if ([110, 190].indexOf(event.which) > -1) {
// // dot and numpad dot
// return true;
// }
else {
event.preventDefault();
return false;
}
});
}
}
});
/* .filter('notDisabled', function() {
return function(input, list) {
if(input) {
var filtered = [];
angular.forEach(input, function(item, ind){
if(list.indexOf(item.code) < 0) filtered.push(item);
});
return filtered;
}
return [];
}
}); */
window.mobileAndTabletcheck = function () {
var check = false;
(function (a) {
if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) {
check = true;
}
if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
check = true;
}
})(navigator.userAgent || navigator.vendor || window.opera);
return check;
};
function emailCheck(checkit) {
return checkit.search(/^[\w\d\._\-]+@[\w\d\-_\.]+\.[\d\w][\d\w]+$/) > -1;
}
'use strict';
angular.module('triglavQuiz')
.controller('Quiz', ['$scope', '$window', '$http', '$timeout', '$sce', '$filter', 'Analytics', function ($scope, $window, $http, $timeout, $sce, $filter, Analytics) {
$scope.scrolling_speed = 600;
$scope.step = 1;
$scope.isStep = function(step){ return step == $scope.step; };
$scope.changeStep = function(step){
$scope.step = step;
$timeout(function(){
specto_scroll($(".calc-quiz-wrap").offset().top, $scope.scrolling_speed, 'easeInOutQuint'); //scroll to start steps
}, 0);
};
$scope.tooltip = $sce.trustAsHtml("" +
"
" +
"
Od starosti zavise izloženost potencijalno kritičnim bolestima, vaši prihodi i drugi faktori koji utiču na vaš život. Starost se takođe uzima u obzir kod ugovaranja Životnog osiguranja za slučaj smrti, jer ga mogu ugovoriti samo osobe od 18 do 65 godina.
" +
"
");
$scope.moneyFormat = function(value){ return $filter("number")(value); };
$scope.questions = {
step1: {
starost: {
value: 53,
options: {
floor: 18,
ceil: 65,
showTicks: true,
showTicksValues: true,
ticksArray: [18,30,40,50,60,65],
}
},
partner_je: -1,
partner_starost: {
value: 0,
options: {
floor: 18,
ceil: 99,
showTicks: true,
showTicksValues: true,
ticksArray: [18,30,40,50,60,70,80,90,99],
}
},
partner_dela: -1,
otrok_je: -1,
otrok_najmlajsi: {
value: 23,
options: {
floor: 0,
ceil: 50,
showTicks: true,
showTicksValues: true,
ticksArray: [0,10,20,30,40,50],
}
},
},
step2: {
ima_kredit: -1,
preostanek_kredita: {
value: 74000,
options: {
floor: 1000,
ceil: 500000,
step : 1000,
showTicks: true,
showTicksValues: true,
ticksArray: [1000,50000,100000,200000,300000,400000,500000],
translate: $scope.moneyFormat,
}
},
prihranki: {
value: 48000,
options: {
floor: 0,
ceil: 100000,
onEnd: function(){ $scope.questions.step2.prihranki_extra = false; },
step : 1000,
showTicks: true,
showTicksValues: true,
ticksArray: [0,10000,20000,40000,60000,80000,100000],
translate: $scope.moneyFormat,
}
},
prihranki_extra: false,
prihranki_extra_val: "",
drugo_premozenje: -1,
drugo_premozenje_val: {
value: 12000,
options: {
floor: 0,
ceil: 600000,
step : 1000,
showTicks: true,
showTicksValues: true,
ticksArray: [1000,100000,200000,300000,400000,500000,600000],
translate: $scope.moneyFormat,
}
},
ze_zivljensko: -1,
zavarovalna_ob_smrti_ne_vem: false,
zavarovalna_ob_smrti: {
value: 74000,
options: {
floor: 0,
ceil: 600000,
step : 1000,
showTicks: true,
showTicksValues: true,
ticksArray: [1000,100000,200000,300000,400000,500000,600000],
translate: $scope.moneyFormat,
}
},
},
step3: {
prihodki: {
value: 1000,
options: {
floor: 0,
ceil: 10000,
onEnd: function(){ $scope.questions.step3.brezposeln = false; },
step: 100,
showTicks: true,
showTicksValues: true,
ticksArray: [0,1000,2000,3000,4000,5000,6000,7000,8000,9000,10000],
translate: $scope.moneyFormat,
}
},
brezposeln: false,
},
};
//finish screen
$scope.isFinished = false;
$scope.final_values = {
death_sum: 0, //znesek, ki nastane ob smrti zavarovanca
n: 0, //število let, ki bi zadostovalo, da se družina postavi na noge
standard: 0, //Izračun zagotovitve življenjskega standarda za "n" število let
family_sum: 0, //Izračun zavarovalne vsote, ki bi jo zapustili družini
partner_n: 0,
otrok_n: 0,
dolgovi: 0,
prihranki: 0,
no_partner_no_child: false,
tooltipPartner: "",
tooltipChild: "",
n_partner: false,
n_otrok: false,
};
//mark invalid question
$scope.scrollToElmFind = function(elm){
$timeout(function(){
var elem = "[elm-find='"+ elm +"']";
if($(elem).length < 1) { console.log("Element not found!"); return; } //prevent error
specto_scroll($(elem).offset().top, $scope.scrolling_speed, 'easeInOutQuint'); //scroll to start steps
$(elem).addClass("invalid").shake({speed: 70});
$timeout(function(){ $(elem).removeClass("invalid"); }, 5000);
}, 0);
};
//NEXT STEP
//validation
$scope.canGoToSecond = function(){
var is_valid = { val: true, elm: null };
var req_radios = ["partner_je","otrok_je"];
if($scope.questions.step1["partner_je"] > 0) req_radios.push("partner_dela");
angular.forEach(req_radios, function(item, ind){ if($scope.questions.step1[item] < 0 && is_valid.val) { is_valid.val = false; is_valid.elm = item; } });
return is_valid;
};
$scope.canGoToThird = function(){
var is_valid = { val: true, elm: null };
angular.forEach(["ima_kredit","drugo_premozenje","ze_zivljensko"], function(item, ind){
if($scope.questions.step2[item] < 0 && is_valid.val) { is_valid.val = false; is_valid.elm = item; }
});
if($scope.questions.step2.prihranki_extra) if(isNaN(parseInt($scope.questions.step2.prihranki_extra_val))) { is_valid.val = false; is_valid.elm = "prihranki_extra_val"; }
return is_valid;
};
//go to
$scope.scndStep = function(){
var valid = $scope.canGoToSecond();
if(valid.val) $scope.changeStep(2);
else $scope.scrollToElmFind(valid.elm);
};
$scope.thirdStep = function(){
var valid = $scope.canGoToThird();
if(valid.val) $scope.changeStep(3);
else $scope.scrollToElmFind(valid.elm);
};
//finish
$scope.finalize = function(){
//reformat to int all that must be integer
angular.forEach(["step1.starost","step1.partner_starost","step1.otrok_najmlajsi","step2.preostanek_kredita","step2.prihranki","step2.drugo_premozenje_val","step2.zavarovalna_ob_smrti","step3.prihodki"], function(item, ind){
var param = item.split(".");
$scope.questions[param[0]][param[1]].value = parseInt($scope.questions[param[0]][param[1]].value);
});
$scope.questions.step2.prihranki_extra_val = parseInt($scope.questions.step2.prihranki_extra_val);
//calculate
//znesek ob smrti zavarovanca
/* $scope.final_values.death_sum = ($scope.questions.step2.ima_kredit > 0 ? $scope.questions.step2.preostanek_kredita.value : 0) -
($scope.questions.step2.prihranki_extra ? parseInt($scope.questions.step2.prihranki_extra_val) : $scope.questions.step2.prihranki.value) -
($scope.questions.step2.drugo_premozenje > 0 ? $scope.questions.step2.drugo_premozenje_val.value : 0) -
($scope.questions.step2.ze_zivljensko > 0 && !$scope.questions.step2.zavarovalna_ob_smrti_ne_vem ? $scope.questions.step2.zavarovalna_ob_smrti.value : 0); */
//n start
var partner_n = 0;
var otrok_n = 0;
if($scope.questions.step1.partner_je > 0){ //ima partnerja?
if($scope.questions.step1.partner_dela < 1){
if($scope.questions.step1.partner_starost.value < 35) {
partner_n = 10;
$scope.final_values.tooltipPartner = "Budući da je Vaš partner u godinama u kojima obično postoji mnoštvo izazova i finansijskih obaveza (krediti, obrazovanje dece, briga o poboljšanju kvaliteta života…), životno osiguranje se preporučuje kao vid brige o finansijski zavisnom partneru jer mu/joj obezbeđuje odgovarajuću nadoknadu za gubitak Vašeg prihoda u slučaju Vaše smrti. Savetujemo da razmotrite produženje razdoblja u kojem biste osigurali gubitak prihoda. Proizvod broja godina osiguranog perioda i Vaše godišnje neto plate dodaje se razlici između dugova i štednje i uvećava proračun osigurane sume.
";
}
else if($scope.questions.step1.partner_starost.value > 34 && $scope.questions.step1.partner_starost.value < 46){
partner_n = 7;
$scope.final_values.tooltipPartner = "Budući da je Vaš partner u godinama kada su finansijske potrebe I obaveze obično stabilne I teško ih je izmeniti, životno osiguranje se preporučuje kao vid brige o finansijski zavisnom partneru jer mu/joj obezbeđuje odgovarajuću nadoknadu za gubitak Vašeg prihoda u slučaju Vaše smrti. Savetujemo da razmotrite produženje razdoblja u kojem biste osigurali gubitak prihoda. Proizvod broja godina osiguranog perioda i Vaše godišnje neto plate dodaje se razlici između dugova i štednje i uvećava proračun osigurane sume.
";
}
else {
partner_n = 5;
$scope.final_values.tooltipPartner = "Posebno je važno za partnera koji finansijski zavisi od vas da mu osigurate odgovarajuću nadoknadu za gubitak prihoda u slučaju vaše smrti. Savetujemo da razmotrite produženje razdoblja u kom biste osigurali nadoknadu za gubitak svog prihoda jer bi pred vašim partnerom bili dugi periodi suočavanja sa svakodnevnim izazovima i finansijskim obavezama. Proizvod ovog broja godina i vaša godišnja neto plata dodaje se razlici između dugova i štednje za proračun osigurane sume.
";
}
}
else {
partner_n = 3;
$scope.final_values.tooltipPartner = "Preporučeni minimalni period (broj godina) osiguranja naknade za Vaš prihod u slučaju Vaše smrti kako bi Vaš partner bio u mogućnosti da se finansijski oporavi je tri godine. Stvarno trajanje ovog perioda zavisi od specifičnih potreba vaše porodice (dospeće kredita, starost dece ili drugih članova porodice o kojima brinete…) Možete da razgovarate sa našim savetnikom o najadekvatnijem trajanju ovog perioda za vašu porodicu. Proizvod ovog broja godina i Vaše godišnje neto plate dodaje se razlici između dugova i štednje za proračun osigurane sume.
";
}
}
if($scope.questions.step1.otrok_je > 0){ //ima otroke?
otrok_n = 18 - $scope.questions.step1.otrok_najmlajsi.value;
$scope.final_values.tooltipChild = "Ako dete izgubi roditelja, isplata osiguranja može mu osigurati finansijsku sigurnost u najosetljivijim godinama, pokriti troškove školovanja i druge troškove odrastanja. Ako su deca starija od 16 godina, period u kome se nadoknađuje gubitak prihoda i na taj način osigurava finansijski oporavak porodice je tri godine (preporučeni minimum). Proizvod ovog broja godina i Vaše godišnje neto plate dodaje se razlici između dugova i štednje za proračun osigurane sume.
";
if(otrok_n > 10) {
otrok_n = 10;
$scope.final_values.tooltipChild = "Ako dete izgubi roditelja, isplata osiguranja može mu osigurati finansijsku sigurnost u najosetljivijim godinama, pokriti troškove školovanja i druge troškove odrastanja. Ako su deca starija od 16 godina, period u kome se nadoknađuje gubitak prihoda i na taj način osigurava finansijski oporavak porodice je tri godine (preporučeni minimum). Proizvod ovog broja godina i Vaše godišnje neto plate dodaje se razlici između dugova i štednje za proračun osigurane sume.
";
}
else if(otrok_n < 3) otrok_n = 3; //minimalno 3 leta
}
$scope.final_values.partner_n = partner_n;
$scope.final_values.otrok_n = otrok_n;
//n final
if($scope.questions.step1.otrok_je > 0){ //ima otroke?
if($scope.questions.step1.partner_je > 0){ //ima partnerja?
if($scope.questions.step1.partner_dela > 0) { $scope.final_values.n = otrok_n; $scope.final_values.n_otrok = true; }
else {
$scope.final_values.n = Math.max(otrok_n, partner_n);
$scope.final_values.n_otrok = otrok_n == $scope.final_values.n;
if(!$scope.final_values.n_otrok) $scope.final_values.n_partner = true;
}
}
else { $scope.final_values.n = otrok_n; $scope.final_values.n_otrok = true; }
}
else {
if($scope.questions.step1.partner_je > 0) { $scope.final_values.n = partner_n; $scope.final_values.n_partner = true; }
else $scope.final_values.n = 1;
}
//življenjski standard
$scope.final_values.standard = ($scope.questions.step3.brezposeln ? 0 : parseInt($scope.questions.step3.prihodki.value)) * 12 * $scope.final_values.n;
//dolgovi & prihranki
$scope.final_values.dolgovi = $scope.questions.step2.ima_kredit ? $scope.questions.step2.preostanek_kredita.value : 0;
$scope.final_values.prihranki = ($scope.questions.step2.prihranki_extra ? parseInt($scope.questions.step2.prihranki_extra_val) : $scope.questions.step2.prihranki.value) +
($scope.questions.step2.drugo_premozenje > 0 ? $scope.questions.step2.drugo_premozenje_val.value : 0) +
($scope.questions.step2.ze_zivljensko > 0 && !$scope.questions.step2.zavarovalna_ob_smrti_ne_vem ? $scope.questions.step2.zavarovalna_ob_smrti.value : 0);
$scope.final_values.death_sum = $scope.final_values.dolgovi - $scope.final_values.prihranki;
//brez partnerja in otrok
$scope.final_values.no_partner_no_child = $scope.questions.step1.partner_je < 1 && $scope.questions.step1.otrok_je < 1;
//zapuščena zavarovalna vsota
$scope.final_values.family_sum = $scope.final_values.death_sum + $scope.final_values.standard;
$scope.isFinished = true;
$timeout(function(){
specto_scroll($(".main").offset().top, $scope.scrolling_speed, 'easeInOutQuint'); //scroll to start steps
}, 0);
//send user values
$http.post("https://zivljenje.triglav.si/9nasvetov", {
questions: $scope.questions,
final_values: $scope.final_values,
action: "quiz_save-values"
},{withCredentials: true}).then(function(response) {
$.cookie('quiz_uid', response.data);
});
};
if($scope.isStep(1)) {
if($.cookie("cookie_module_cat") == "11") {
Analytics.trackEvent('Koliko bi bilo potrebno mojim najmilijima', 'Kalkulator', 'Izracun - Zacet');
}
}
}]);
'use strict';
angular.module('triglavQuiz')
.controller('Risk', ['$scope', '$window', '$http', '$timeout', '$filter', '$interval', function ($scope, $window, $http, $timeout, $filter, $interval) {
var self = this;
self.moneyFormat = function(value){ return $filter("number")(value); };
self.last_step = 10;
$scope.scrolling_speed = 600;
$scope.scrollToTop = function(css){
$timeout(function(){
specto_scroll($(css || "main.main").offset().top, $scope.scrolling_speed, 'easeInOutQuint'); //scroll to start steps
}, 0);
};
$scope.too_jung = false;
$scope.too_jung_text = "";
$scope.homeScreen = true;
$scope.startQuiz = function(){ //start quiz
$scope.homeScreen = false;
$scope.changeStep(1);
$scope.scrollToTop();
};
//STEPS
$scope.stepNr = 0;
$scope.isStep = function(step){ return step == $scope.stepNr; };
$scope.isStep_orGreater = function(step){ return step <= parseInt($scope.stepNr); };
$scope.changeStep = function(step, substep_check){ //change quiz step
if(!self.canChangeStep["to_step_"+ step]){ console.log("Error. required check doesn't exist! step:"+ step); return false; }
else if(self.canChangeStep["to_step_"+ step]()){
$scope.stepNr = substep_check ? self.canChangeStep["to_substep_"+ step]() : step;
$scope.scrollToTop();
if($scope.isStep_orGreater(self.last_step)) self.finalizeQuiz();
}
};
//check if can change step
self.canChangeStep = {
to_step_1: function(){ return true; },
to_step_2: function(){
var is_valid = true;
$scope.too_jung = false;
$scope.too_jung_text = "";
angular.forEach(["spol","starost","visina","teza"], function(item, ind){
if(!$scope.results[item] && is_valid){
is_valid = false;
self.markQuestionInvalid(item);
}
});
if(is_valid){ //number required ranges
if(parseInt($scope.results.starost) < 15){
is_valid = false; self.markQuestionInvalid("starost");
$scope.too_jung = true; $scope.too_jung_text = "Pozor, izračun je možen samo za osebe starejše od 14 let.";
}
else if(parseInt($scope.results.starost) > 99){
is_valid = false; self.markQuestionInvalid("starost");
$scope.too_jung = true; $scope.too_jung_text = "Pozor, izračun je možen samo za osebe mlajše od 99 let.";
}
if(parseInt($scope.results.visina) < 100 || parseInt($scope.results.visina) > 240){
is_valid = false; self.markQuestionInvalid("visina");
$scope.too_jung = true; $scope.too_jung_text = "Pozor, izračun je mogoč samo za osebe, ki so visoke od 100 cm do 250 cm.";
}
if(parseInt($scope.results.teza) < 35 || parseInt($scope.results.teza) > 300){
is_valid = false; self.markQuestionInvalid("teza");
$scope.too_jung = true; $scope.too_jung_text = "Pozor, izračun je možen samo za osebe, ki tehtajo od 35 kg do 300 kg.";
}
}
return is_valid;
},
to_step_3: function(){
var is_valid = $scope.results.ocena_zdravja.changed;
if(!is_valid) self.markQuestionInvalid("ocena_zdravja");
return is_valid;
},
to_step_4: function(){
var is_valid = $scope.results.jedilnik.length > 0;
if(!is_valid) self.markQuestionInvalid("jedilnik");
return is_valid;
},
to_step_5: function(){
var is_valid = $scope.results.na_poti.changed;
if(!is_valid) self.markQuestionInvalid("na_poti");
return is_valid;
},
to_step_6: function(){
var is_valid = $scope.results.prisotnost_stresa.value !== null;
if(!is_valid) self.markQuestionInvalid("prisotnost_stresa");
return is_valid;
},
to_step_7: function(){
var is_valid = $scope.results.spanje.value !== null;
if(!is_valid) self.markQuestionInvalid("spanje");
return is_valid;
},
to_step_8: function(){
var is_valid = $scope.results.rekreacija !== null;
if(!is_valid) self.markQuestionInvalid("rekreacija");
return is_valid;
},
to_step_8b: function(){
var is_valid = $scope.results.kadilec !== null;
if(!is_valid) self.markQuestionInvalid("kadilec");
return is_valid;
},
to_substep_8b: function(){ return $scope.results.kadilec > 0 ? "8b" : $scope.isStep_orGreater(9) ? 8 : 9; }, //substep special
to_step_9: function(){
var is_valid = $scope.results.kadilec_kolicina.changed;
if(!is_valid) self.markQuestionInvalid("kadilec_kolicina");
return is_valid;
},
to_step_9b: function(){
var is_valid = $scope.results.alkohol !== null;
if(!is_valid) self.markQuestionInvalid("alkohol");
return is_valid;
},
to_substep_9b: function(){ return $scope.results.alkohol > 0 ? "9b" : 10; }, //substep special - last screen
to_step_10: function(){
var is_valid = $scope.results.alkohol_kolicina.changed;
if(!is_valid) self.markQuestionInvalid("alkohol_kolicina");
return is_valid;
},
};
//mark element invalid
self.markQuestionInvalid = function(elm){
$timeout(function(){
var elem = "[elm-find='"+ elm +"']";
if($(elem).length < 1) { console.log("Element not found!"); return; } //prevent error
specto_scroll($(elem).offset().top, $scope.scrolling_speed, 'easeInOutQuint'); //scroll to start steps
$(elem).addClass("invalid").shake({speed: 70});
$timeout(function(){ $(elem).removeClass("invalid"); }, 5000);
}, 0);
};
//RESULTS
$scope.results = {
//step 1
spol: "",
starost: "",
visina: "",
teza: "",
//step2
ocena_zdravja: {
value: 4,
changed: true,
options: {
floor: 0,
ceil: 10,
hideLimitLabels: false,
translate: function(value, sliderId, label) {
switch(label){
case "floor":
return value +" (zelo slabo)"; break;
case "ceil":
return "(fantastično) "+ value; break;
default:
return value;
}
},
//onEnd: function(){ $scope.results.ocena_zdravja.changed = true; },
showTicks: true,
getLegend: function(value, sliderId){ //show only active legend
return $scope.results.ocena_zdravja.value == value && $scope.results.ocena_zdravja.value < $scope.results.ocena_zdravja.options.ceil && $scope.results.ocena_zdravja.value > 0 ? value : "";
},
}
},
//step3
jedilnik: [],
//step4
na_poti: {
value: 15000,
changed: true,
options: {
floor: 0,
ceil: 45000,
step: 100,
hideLimitLabels: false,
translate: function(value, sliderId, label) {
switch(label){
case "ceil":
return "45.000+"; break;
default:
return value;
}
},
//onEnd: function(){ $scope.results.na_poti.changed = true; },
showTicks: true,
getLegend: function(value, sliderId){ //show only active legend
return $scope.results.na_poti.value == value && $scope.results.na_poti.value < $scope.results.na_poti.options.ceil && $scope.results.na_poti.value > 0 ? self.moneyFormat(value) : "";
},
}
},
//step5
prisotnost_stresa: {
value: 5,
options: {
min: 0,
max: 10,
step: 1,
value: 5,
radius: 145,
width: 4,
handleSize: 23,
circleShape: "half-top",
sliderType: "min-range",
mouseScrollAction: true,
},
},
//step6
spanje: {
value: 8,
options: {
min: 2,
max: 14,
step: 1,
value: 8,
radius: 100,
width: 4,
handleSize: 23,
startAngle: 90,
endAngle: 405,
sliderType: "min-range",
mouseScrollAction: true,
}
},
//step7
rekreacija: null,
//step8
kadilec: null,
//step 8b
kadilec_kolicina: {
value: 15,
changed: true,
percent: {},
calcPercent: function(){ $scope.results.kadilec_kolicina.percent.width = (Math.round( $scope.results.kadilec_kolicina.value / $scope.results.kadilec_kolicina.options.ceil * 10000 ) / 100) +"%"; },
options: {
floor: 0,
ceil: 60,
hideLimitLabels: false,
translate: function(value, sliderId, label) {
switch(label){
case "ceil":
return "60+"; break;
default:
return value;
}
},
onChange : function(){ $scope.results.kadilec_kolicina.calcPercent(); },
//onEnd: function(){ $scope.results.kadilec_kolicina.changed = true; },
showTicks: true,
getLegend: function(value, sliderId){ //show only active legend
return $scope.results.kadilec_kolicina.value == value && $scope.results.kadilec_kolicina.value < $scope.results.kadilec_kolicina.options.ceil && $scope.results.kadilec_kolicina.value > 0 ? value : "";
},
}
},
//step9
alkohol: null,
//step 8b
alkohol_kolicina: {
value: 3,
changed: true,
percent: {},
calcPercent: function(){ $scope.results.alkohol_kolicina.percent.width = (Math.round( $scope.results.alkohol_kolicina.value / $scope.results.alkohol_kolicina.options.ceil * 10000 ) / 100) +"%"; },
options: {
floor: 0,
ceil: 10,
hideLimitLabels: false,
translate: function(value, sliderId, label) {
switch(label){
case "ceil":
return "10+"; break;
default:
return value;
}
},
onChange : function(){ $scope.results.alkohol_kolicina.calcPercent(); },
//onEnd: function(){ $scope.results.kadilec_kolicina.changed = true; },
showTicks: true,
getLegend: function(value, sliderId){ //show only active legend
return $scope.results.alkohol_kolicina.value == value && $scope.results.alkohol_kolicina.value < $scope.results.alkohol_kolicina.options.ceil && $scope.results.alkohol_kolicina.value > 0 ? value : "";
},
}
},
};
//calc percents
$scope.results.kadilec_kolicina.calcPercent();
$scope.results.alkohol_kolicina.calcPercent();
//EXTRAS
//jedilnik - step 3
$scope.menu_items = [
{name: "Pusto meso", icon: "icon-dry-meat", is_healthy: true},
{name: "Hitra prehrana", icon: "icon-fast-food", is_healthy: false},
{name: "Sladkarije", icon: "icon-sweets", is_healthy: false},
{name: "Stročnice", icon: "icon-beans", is_healthy: true},
{name: "Sadje", icon: "icon-fruit", is_healthy: true},
{name: "Zelenjava", icon: "icon-vegetable", is_healthy: true},
{name: "Sladke pijače", icon: "icon-juice", is_healthy: false},
{name: "Slani prigrizki", icon: "icon-salty-baverage", is_healthy: false},
{name: "Izdelki iz bele moke", icon: "icon-bread", is_healthy: false},
{name: "Voda", icon: "icon-water", is_healthy: true},
];
//fill result array - jedilnik
$scope.add_to_result_array = function(item, result_name){
if($scope.results[result_name].indexOf(item) > -1){ $scope.results[result_name].splice($scope.results[result_name].indexOf(item), 1); }
else if($scope.results[result_name].length < 5) $scope.results[result_name].push(item); //max 5 jedi
};
//rekreacija na teden - step 7
$scope.rekreacija_options = [
{name: "0", icon: "icon-recreation1", risk_factor: 10},
{name: "1-2", icon: "icon-recreation2", risk_factor: 5},
{name: "2-3", icon: "icon-recreation3", risk_factor: 3},
{name: "3-4", icon: "icon-recreation4", risk_factor: 1},
{name: "5 +", icon: "icon-recreation5", risk_factor: 0},
];
/* RESULT SETTINGS */
$scope.filters = {
spol: "all",
starost: "all",
itm: "all",
};
$scope.all_filter_options = {
spol: [{name: "Vsi", slug: "all"},{name: "Ženske", slug: "z", icon: "icon-female"},{name: "Moški", slug: "m", icon: "icon-male"},],
starost: [
{name: "Vsi", slug: "all", range_min: "", range_max: ""},
{name: "15-24", slug: "1524", range_min: 15, range_max: 24, icon: "icon-age1"},
{name: "25-34", slug: "2534", range_min: 25, range_max: 34, icon: "icon-age2"},
{name: "35-44", slug: "3544", range_min: 35, range_max: 44, icon: "icon-age3"},
{name: "45-54", slug: "4554", range_min: 45, range_max: 54, icon: "icon-age4"},
{name: "55-64", slug: "5564", range_min: 55, range_max: 64, icon: "icon-age5"},
{name: "65 +", slug: "65+", range_min: 65, range_max: 200, icon: "icon-age6"},
],
itm: [
{name: "Vsi", slug: "all", range_min: "", range_max: ""},
{name: "< 18,50", slug: "min", range_min: 0, range_max: 18.50, icon: "icon-itm1"},
{name: "18,50-24,99", slug: "1825", range_min: 18.50, range_max: 24.99, icon: "icon-itm2"},
{name: "25-29,99", slug: "2530", range_min: 25, range_max: 29.99, icon: "icon-itm3"},
{name: "≥ 30,00", slug: "30+", range_min: 30, range_max: 1000, icon: "icon-itm4"},
],
};
$scope.changeFilter = function(filter, newVal){
$scope.filters[filter] = newVal;
self.calcStatistics();
};
$scope.final_screen = {
active: false,
loading_results: true,
is_form: false,
};
/* FINALIZE */
$scope.final_values = {
starost: 0,
itm_value: 0,
groups: {
spol: "",
starost: "",
itm: "",
},
singles: {
itm: 0,
zdravje: 0,
jedilnik: 0,
na_poti: 0,
prisotnost_stresa: 0,
spanje: 0,
rekreacija: 0,
kadilec: 0,
alkohol: 0,
},
sum: 0,
};
$scope.shown_risk = 0;
$scope.calc_risk = 0;
$scope.risk_text = "";
$scope.radar_chart_values = {
labels: ["ITM","Zdravje","Prehrana","Vožnja","Stres","Spanje","Šport","Kajenje","Alkohol"],
datasets: [{
label: "label",
backgroundColor: "rgba(237, 41, 57, 0.5)",
borderColor: "rgba(237, 41, 57, 0.5)",
borderJoinStyle: "round",
lineTension: 0.1,
data: []
}]
};
$scope.statistics = {
total: 0,
itm: {avg: 0, jaz_css: {}, avg_css: {}},
zdravje: {avg: 0, jaz_css: {}, avg_css: {}},
jedilnik: {avg: 0, jaz_css: {}, avg_css: {}},
na_poti: {avg: 0, jaz_css: {}, avg_css: {}},
prisotnost_stresa: {avg: 0, jaz_css: {}, avg_css: {}},
spanje: {avg: 0, jaz_css: {}, avg_css: {}},
rekreacija: {avg: 0, jaz_css: {}, avg_css: {}},
kadilec: {avg: 0, jaz_css: {}, avg_css: {}},
alkohol: {avg: 0, jaz_css: {}, avg_css: {}},
};
self.statistics_result = {};
self.finalizeQuiz = function(){
$scope.final_values.itm_value = parseInt($scope.results.teza) / Math.pow(parseInt($scope.results.visina) / 100, 2); //itm value
$scope.final_values.itm_value = Math.ceil($scope.final_values.itm_value * 100) / 100; //round to 2 decimals
if($scope.final_values.itm_value > 1000) $scope.final_values.itm_value = 1000; //prevent error
$scope.final_values.groups.spol = $scope.results.spol;
angular.forEach($scope.all_filter_options.starost, function(item, ind){
if(item.slug){ //ignore all option
if($scope.results.starost >= item.range_min && $scope.results.starost <= item.range_max) $scope.final_values.groups.starost = item.slug;
}
});
angular.forEach($scope.all_filter_options.itm, function(item, ind){
if(item.slug){ //ignore all option
if($scope.final_values.itm_value >= item.range_min && $scope.final_values.itm_value <= item.range_max) $scope.final_values.groups.itm = item.slug;
}
});
$scope.final_values.starost = parseInt($scope.results.starost);
//TOČKE
if($scope.final_values.itm_value < 16) $scope.final_values.singles.itm = 8;
else if($scope.final_values.itm_value < 17) $scope.final_values.singles.itm = 4;
else if($scope.final_values.itm_value < 18.50) $scope.final_values.singles.itm = 2;
else if($scope.final_values.itm_value < 25) $scope.final_values.singles.itm = 0;
else if($scope.final_values.itm_value < 27.50) $scope.final_values.singles.itm = 2;
else if($scope.final_values.itm_value < 30) $scope.final_values.singles.itm = 4;
else if($scope.final_values.itm_value < 35) $scope.final_values.singles.itm = 6;
else if($scope.final_values.itm_value < 40) $scope.final_values.singles.itm = 8;
else $scope.final_values.singles.itm = 10;
//zdravje
$scope.final_values.singles.zdravje = Math.abs($scope.results.ocena_zdravja.value - 10);
//jedilnik
angular.forEach($scope.results.jedilnik, function(item, ind){
angular.forEach($scope.menu_items, function(original_itm, indx){
if(item === original_itm.name){
if(!original_itm.is_healthy) $scope.final_values.singles.jedilnik += 2;
}
});
});
//na_poti
if($scope.results.na_poti.value <= 5000) $scope.final_values.singles.na_poti = 1;
else if($scope.results.na_poti.value <= 10000) $scope.final_values.singles.na_poti = 2;
else if($scope.results.na_poti.value <= 15000) $scope.final_values.singles.na_poti = 3;
else if($scope.results.na_poti.value <= 20000) $scope.final_values.singles.na_poti = 4;
else if($scope.results.na_poti.value <= 25000) $scope.final_values.singles.na_poti = 5;
else if($scope.results.na_poti.value <= 30000) $scope.final_values.singles.na_poti = 6;
else if($scope.results.na_poti.value <= 35000) $scope.final_values.singles.na_poti = 7;
else if($scope.results.na_poti.value <= 40000) $scope.final_values.singles.na_poti = 8;
else $scope.final_values.singles.na_poti = 9;
//prisotnost_stresa
$scope.final_values.singles.prisotnost_stresa = $scope.results.prisotnost_stresa.value;
//spanje
switch($scope.results.spanje.value){
case 2: $scope.final_values.singles.spanje = 10; break;
case 3: $scope.final_values.singles.spanje = 8; break;
case 12:
case 4: $scope.final_values.singles.spanje = 6; break;
case 11:
case 5: $scope.final_values.singles.spanje = 4; break;
case 10:
case 6: $scope.final_values.singles.spanje = 2; break;
case 9:
case 8:
case 7: $scope.final_values.singles.spanje = 0; break;
default: console.log("error. Unknown sleep time value");
}
//rekreacija
angular.forEach($scope.rekreacija_options, function(original_itm, indx){
if($scope.results.rekreacija === original_itm.name) $scope.final_values.singles.rekreacija = original_itm.risk_factor;
});
//kadilec
if($scope.results.kadilec > 0){
if($scope.results.kadilec_kolicina.value < 3) $scope.final_values.singles.kadilec = 2;
else if($scope.results.kadilec_kolicina.value < 6) $scope.final_values.singles.kadilec = 4;
else if($scope.results.kadilec_kolicina.value < 11) $scope.final_values.singles.kadilec = 6;
else if($scope.results.kadilec_kolicina.value < 21) $scope.final_values.singles.kadilec = 8;
else $scope.final_values.singles.kadilec = 10;
}
//alkohol
if($scope.results.alkohol > 0){
if($scope.results.alkohol_kolicina.value < 4) $scope.final_values.singles.alkohol = 2;
else if($scope.results.alkohol_kolicina.value < 6) $scope.final_values.singles.alkohol = 4;
else if($scope.results.alkohol_kolicina.value < 8) $scope.final_values.singles.alkohol = 6;
else if($scope.results.alkohol_kolicina.value < 10) $scope.final_values.singles.alkohol = 8;
else $scope.final_values.singles.alkohol = 10;
}
//sum
angular.forEach($scope.final_values.singles, function(item, ind){
$scope.final_values.sum += item;
});
//SUM TEKST
if($scope.final_values.sum <= 30) $scope.risk_text = "Stopnja tveganja v vašem življenju je trenutno zelo nizka. Primeren življenjski slog in obvladovanje dejavnikov, ki tveganje zvišujejo, so prednosti, ki jih ohranjajte. A zavedati se je treba, da se na nekaterih področjih tveganje lahko kaj hitro poveča, zato priporočamo razmislek tudi o ustreznem zavarovanju.";
else if($scope.final_values.sum <= 40) $scope.risk_text = "Indeks kaže, da je večina tveganj v vašem življenju trenutno nizka. Oglejte si, na katerih področjih bi lahko bili nevarnostim še manj izpostavljeni. Hkrati se je dobro zavedati, da se tveganjem nikoli ne morete v celoti izogniti, zato le ohranite zdrav življenjski slog. Smiselno pa se je tudi ustrezno zavarovati.";
else if($scope.final_values.sum <= 50) $scope.risk_text = "Iz izračunanega indeksa se kaže, da na nekaterih področjih stopnja tveganja ni visoka, na drugih pa se že precej dviguje. Ker se tveganja s starostjo še povečujejo, je smiselno, da že danes razmislite, kje bi jih lahko učinkoviteje obvladovali in kako bi se lahko primerno zavarovali.";
else if($scope.final_values.sum <= 60) $scope.risk_text = "Povprečni indeks tveganj v vašem primeru je nad 50, kar že kaže na višjo stopnjo nevarnosti, ki ste jim izpostavljeni. Bodite pozorni na področjih, kjer je stopnja najvišja, in razmislite o tem, kaj lahko v svojem življenjskem slogu spremenite. Izberite tudi primerno zavarovanje.";
else if($scope.final_values.sum <= 70) $scope.risk_text = "Rezultat kaže, da je vaša izpostavljenost tveganjem že zelo visoka. Ker se ob vašem življenjskem slogu in vplivu drugih dejavnikov tveganje lahko hitro spremeni v neželen in potencialno tudi kritičen dogodek, poskrbite za spremembe in se tudi primerno zavarujte.";
else $scope.risk_text = "Izračunani indeks kaže na vašo kritično izpostavljenost tveganjem, saj ta v več kategorijah dosega najvišjo raven. Nujna je korenita sprememba vašega življenjskega sloga, saj so tveganja že danes previsoka, z leti pa še naraščajo. Poskrbite tudi za primerno zavarovanje.";
//radar chart
angular.forEach($scope.final_values.singles, function(item, ind){
$scope.radar_chart_values.datasets[0].data.push(item);
});
//reformat from 100 to 10
$scope.final_values.sum = $scope.final_values.sum / 10;
//are requirements met for form?
if($scope.results.kadilec < 1 && ($scope.final_values.itm_value >= 19 && $scope.final_values.itm_value <= 27) && $scope.final_values.singles.rekreacija < 10 && $scope.final_values.sum <= 3) $scope.final_screen.is_form = true;
//Show final screen
$scope.final_screen.active = true;
//animate sum
$timeout(function(){
self.animateRiskInterval = $interval(function(){
$scope.calc_risk += 0.1;
$scope.calc_risk = Math.round($scope.calc_risk * 10) / 10; //prevent decimal bug
$scope.shown_risk = ($scope.calc_risk +"").replace(".",",");
if($scope.calc_risk == $scope.final_values.sum) {
$interval.cancel(self.animateRiskInterval);
}
}, 30);
}, 500);
//save results + get statistics
self.saveResults();
//console.log($scope.final_values);
};
self.animateRiskInterval = null;
self.saveResults = function(){
//calc jaz_css ofsets
angular.forEach(["itm", "zdravje", "jedilnik", "na_poti", "prisotnost_stresa", "spanje", "rekreacija", "kadilec", "alkohol"], function(item, ind){
$scope.statistics[item].jaz_css = {left: ($scope.final_values.singles[item] * 10) +"%"};
});
//save result
$http.post("//eos.triglav.si/webapp/svetovalnica/save_results.php", $scope.final_values).then(function(back){
$scope.statistics.total = back.data.results_nr;
self.statistics_result = back.data;
self.calcStatistics();
$scope.final_screen.loading_results = false;
});
};
self.calcStatistics = function(){
var objekt = self.statistics_result[$scope.filters.spol][$scope.filters.starost][$scope.filters.itm];
//var total = objekt.nr;
angular.forEach(["itm", "zdravje", "jedilnik", "na_poti", "prisotnost_stresa", "spanje", "rekreacija", "kadilec", "alkohol"], function(item, ind){
$scope.statistics[item].avg = Math.round(objekt[item] / objekt.nr * 10) / 10;
if(isNaN($scope.statistics[item].avg)) $scope.statistics[item].avg = 0;
$scope.statistics[item].avg_css = {left: ($scope.statistics[item].avg * 10) +"%"};
});
};
//sending form
$scope.form_data = {
name: "",
email: "",
tel: "",
postcode: "",
captcha: "",
};
$scope.wrongCaptcha = false;
$scope.resultFormButtonClick = false;
$scope.visitedEmail = false;
$scope.formSended = false;
$scope.captchaUrl = 'https://www.triglav.hr/zivljenje.triglav.si/captchaw.png';
$scope.sendForm = function(e){
e.preventDefault();
e.stopPropagation();
//send values
/* MISSING VALIDATION FOR ALL */
$scope.resultFormButtonClick = true;
$scope.resultForm.result_name.$setTouched();
$scope.resultForm.result_email.$setTouched();
$scope.resultForm.result_phone.$setTouched();
$scope.resultForm.result_captcha.$setTouched();
$scope.resultForm.result_postcode.$setTouched();
if($scope.resultForm.$valid) {
$http({
method : "POST",
url : "https://www.triglav.hr/zivljenje.triglav.si/risk-save-values",
headers: {
'Content-Type': 'application/json; charset=UTF-8'
},
withCredentials: true,
data: { form: $scope.form_data, result: $scope.final_values }
}).then(function(back){
if (back.data == 'Wrong captcha') {
$scope.wrongCaptchaAgent = true;
$scope.captchaUrl = "https://www.triglav.hr/zivljenje.triglav.si/captchaw.png?rand=" + Math.random().toString();
$scope.wrongCaptcha = true;
}
else if (back.data == 'OK'){
$scope.formSended = true;
Analytics.trackEvent(
'Zivljenska zavarovanja',
'Aplikacija - Izracun tveganja',
'Uspesno oddano - informativni izracun'
);
}
});
} else {
console.log("form not valid");
}
};
}]);
"use strict";
angular.module('triglavQuiz').controller('Newsletter', ['$scope', '$http', 'Analytics', function ($scope, $http, Analytics) {
$scope.eml_add = /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/;
$scope.newsletterResponseText = "";
$scope.formButtonClick = false;
$scope.newsletterIsFinished = false;
$scope.subscribeNewsletter = function() {
$scope.formButtonClick = true;
$scope.newsletterForm.email.$setTouched();
$scope.newsletterForm.personal_newsletter.$setTouched();
var d=new Date();
var datum=""+d.getDate()+"."+(d.getMonth()+1)+"."+d.getFullYear()+" "+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds();
var datum2=new Date().toISOString().substr(0, 19);
if($scope.newsletterForm.$valid) {
$http({
method : "POST",
url : "https://gpw.eglasnik.si/i/submit_contact_v1-1.php",
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
data: 'ml_code=9bHEYyB2tm0%3D' +
'&sec_code=s1725v1wkx' +
'&confirmation=0' +
'&lang=SLO' +
'&api_mode=RESTFUL' +
'&contacteml=' + $scope.newsletterForm.email.$viewValue +
'&sourceuser=' + datum2 + ";" + window.location +
'&category=Q1pwooQfdhg%3D' +
'&a01=' +
'&a02=' + datum
}).then(function(response) {
if (response.data == 'ok') {
$scope.newsletterIsFinished = true;
if($.cookie("cookie_module_cat") == "11") {
Analytics.trackEvent('Koliko bi bilo potrebno mojim najmilijima', 'Newsletter', 'Uspesen subscription');
}
}
else {
$scope.newsletterResponseText = "Ste že prijavljeni.";
}
})
} else {
console.log("form not valid");
}
};
}]);
"use strict";
angular.module('triglavQuiz').controller('Whitepaper', ['$scope', '$http', 'Analytics', function ($scope, $http, Analytics) {
$scope.eml_add = /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/;
$scope.whitepaperResponseText = "";
$scope.whitepaperFormButtonClick = false;
$scope.wrongCaptcha = false;
$scope.captchaZivljenje = "https://zivljenje.triglav.si/captcha.png";
$scope.whitepaperIsFinished = false;
$scope.subscribeWhitepaper = function() {
$scope.whitepaperFormButtonClick = true;
$scope.whitepaperForm.email.$setTouched();
$scope.whitepaperForm.captcha.$setTouched();
$scope.whitepaperForm.whitepaper.$setTouched();
$scope.whitepaperForm.age.$setTouched();
var d=new Date();
var datum=""+d.getDate()+"."+(d.getMonth()+1)+"."+d.getFullYear()+" "+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds();
if($scope.whitepaperForm.$valid) {
$http({
method : "POST",
url : "https://zivljenje.triglav.si/9nasvetov",
withCredentials: true,
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
data: '&action=whitepaper' +
'&email=' + $scope.whitepaperForm.email.$viewValue +
'&captcha=' + $scope.whitepaperForm.captcha.$viewValue +
'&whitepaper=' + $scope.whitepaperForm.whitepaper.$viewValue +
'&personal_newsletter=' + $scope.whitepaperForm.personal_newsletter.$viewValue
}).then(function(response) {
if (response.data == 'Wrong captcha') {
$scope.wrongCaptcha = true;
$scope.captchaZivljenje = "https://zivljenje.triglav.si/captcha.png?rand="+ Math.random().toString();
}
else if (response.data == 'OK'){
$scope.wrongCaptcha = false;
//$scope.whitepaperResponseText = "Nasvete boste prejeli na e-naslov.";
$scope.whitepaperIsFinished = true;
if($.cookie("cookie_module_cat") == "10" || $.cookie("cookie_module_cat") == "11") {
fbq('track', 'Contact');
Analytics.trackEvent('Zivljenska zavarovanja', 'Narocilo na e-knjizico', 'Uspesno oddano');
}
} else {
$scope.whitepaperResponseText = "Napaka pri pošiljanju.";
}
})
} else {
console.log("form not valid");
}
};
}]);
"use strict";
angular.module('triglavQuiz').controller('AgentRequest_v2', ['$scope', '$http', 'Analytics', function ($scope, $http, Analytics) {
$scope.eml_add_agent = /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/;
$scope.agentResponseText = "";
$scope.agentFormButtonClick = false;
$scope.wrongCaptchaAgent = false;
$scope.captchaUrl = 'https://zivljenje.triglav.si/captcha.png';
$scope.agentRequestSend = function() {
$scope.agentFormButtonClick = true;
$scope.agentForm.name.$setTouched();
$scope.agentForm.email.$setTouched();
$scope.agentForm.phone.$setTouched();
$scope.agentForm.captcha.$setTouched();
if($scope.agentForm.$valid) {
$http({
method : "POST",
url : "https://zivljenje.triglav.si/9nasvetov",
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
withCredentials: true,
data: '&action=agent_request_v2' +
'&name=' + encodeURIComponent($scope.agentForm.name.$viewValue) +
'&email=' + encodeURIComponent($scope.agentForm.email.$viewValue) +
'&phoneNumber=' + encodeURIComponent($scope.agentForm.phone.$viewValue) +
'&inputMessage=' + encodeURIComponent($scope.agentForm.more.$viewValue) +
'&source=zivljenje.triglav.si' +
'&receiver=' +
'&jcaptcha=' + encodeURIComponent($scope.agentForm.captcha.$viewValue)
}).then(function(response) {
if (response.data == 'Wrong captcha') {
$scope.wrongCaptchaAgent = true;
$scope.captchaUrl = "https://zivljenje.triglav.si/captcha.png?rand=" + Math.random().toString();
}
else if (response.data == 'OK'){
$scope.wrongCaptchaAgent = false;
//$scope.agentResponseText = "OK.";
if($.cookie("cookie_module_cat") == "10" || $.cookie("cookie_module_cat") == "11") {
fbq('track', 'Lead');
Analytics.trackEvent(
'Zivljenska zavarovanja',
'Narocilo svetovalca',
'Uspesno oddano',
{
hitCallback: function () {
window.location.href = '/wps/wcm/connect/zivljenje.triglav.si/home/narocite-svetovalca/hvala';
}
}
);
} else {
window.location.href = '/wps/wcm/connect/zivljenje.triglav.si/home/narocite-svetovalca/hvala';
}
} else {
$scope.agentResponseText = "Napaka pri pošiljanju.";
}
})
} else {
console.log("form not valid");
}
};
$scope.changeCaptcha = function() {
$scope.captchaUrl = "https://zivljenje.triglav.si/captcha.png?rand=" + Math.random().toString();
}
}]);
"use strict";
angular.module('triglavQuiz').controller('AgentRequestQuiz', ['$scope', '$http', 'Analytics', function ($scope, $http, Analytics) {
$scope.eml_add_agent = /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/;
$scope.agentResponseText = "";
$scope.agentFormButtonClick = false;
$scope.wrongCaptchaAgent = false;
$scope.captchaUrl = 'https://www.triglav.rs/zivljenje.triglav.si/captchaw.png';
$scope.agentRequestQuizSubmitted = false;
$scope.agentRequestSend = function() {
$scope.agentFormButtonClick = true;
$scope.agentForm.name.$setTouched();
$scope.agentForm.email.$setTouched();
$scope.agentForm.phone.$setTouched();
$scope.agentForm.captcha.$setTouched();
$scope.agentForm.post.$setTouched();
$scope.agentForm.city.$setTouched();
if($scope.agentForm.$valid) {
$http({
method : "POST",
url : "https://www.triglav.rs/zivljenje.triglav.si/calculation-info-tobg",
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
withCredentials: true,
data: '&name=' + encodeURIComponent($scope.agentForm.name.$viewValue) +
'&email=' + encodeURIComponent($scope.agentForm.email.$viewValue) +
'&phoneNumber=' + encodeURIComponent($scope.agentForm.phone.$viewValue) +
'&jcaptcha=' + encodeURIComponent($scope.agentForm.captcha.$viewValue) +
'&post=' + encodeURIComponent($scope.agentForm.post.$viewValue) +
'&city=' + encodeURIComponent($scope.agentForm.city.$viewValue) +
'&uid=' + $.cookie('quiz_uid')
}).then(function(response) {
if (response.data == 'Wrong captcha') {
$scope.wrongCaptchaAgent = true;
$scope.captchaUrl = "https://www.triglav.rs/zivljenje.triglav.si/captchaw.png?rand=" + Math.random().toString();
}
else if (response.data == 'OK'){
$scope.wrongCaptchaAgent = false;
$scope.agentRequestQuizSubmitted = true;
if($.cookie("cookie_module_cat") == "11") {
Analytics.trackEvent(
'Koliko bi bilo potrebno mojim najmilijima',
'Kalkulator',
'Obrazec - poslan'
);
}
} else {
$scope.agentResponseText = "Greška prilikom slanja.";
}
})
} else {
console.log("form not valid");
}
};
$scope.changeCaptcha = function() {
$scope.captchaUrl = "https://zivljenje.triglav.si/captcha.png?rand=" + Math.random().toString();
}
}]);
"use strict";
angular.module('triglavQuiz').controller('VodnikZaStarse', ['$scope', '$http', 'Analytics', function ($scope, $http, Analytics) {
$scope.eml_add_vodnik = /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/;
$scope.vodnikResponseText = "";
$scope.vodnikFormButtonClick = false;
$scope.wrongCaptchaVodnik = false;
$scope.captchaUrl = 'https://zivljenje.triglav.si/captcha.png';
$scope.vodnikRequestSend = function() {
$scope.vodnikFormButtonClick = true;
$scope.vodnikForm.name.$setTouched();
$scope.vodnikForm.email.$setTouched();
$scope.vodnikForm.phone.$setTouched();
$scope.vodnikForm.postal_code.$setTouched();
$scope.vodnikForm.captcha.$setTouched();
if($scope.vodnikForm.$valid) {
$http({
method : "POST",
url : "https://zivljenje.triglav.si/9nasvetov",
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
withCredentials: true,
data: '&action=vodnik-za-starse' +
'&name=' + encodeURIComponent($scope.vodnikForm.name.$viewValue) +
'&email=' + encodeURIComponent($scope.vodnikForm.email.$viewValue) +
'&phoneNumber=' + encodeURIComponent($scope.vodnikForm.phone.$viewValue) +
'&postal_code=' + encodeURIComponent($scope.vodnikForm.postal_code.$viewValue) +
'&captcha=' + encodeURIComponent($scope.vodnikForm.captcha.$viewValue)
}).then(function(response) {
if (response.data == 'Wrong captcha') {
$scope.wrongCaptchaVodnik = true;
$scope.captchaUrl = "https://zivljenje.triglav.si/captcha.png?rand=" + Math.random().toString();
}
else if (response.data == 'OK'){
$scope.wrongCaptchaVodnik = false;
//$scope.vodnikResponseText = "OK.";
if($.cookie("cookie_module_cat") == "10" || $.cookie("cookie_module_cat") == "11") {
Analytics.trackEvent(
'Zivljenska zavarovanja',
'Vodnik za bodoce starse',
'Uspesno oddano',
{
hitCallback: function () {
window.location.href = '/wps/wcm/connect/zivljenje.triglav.si/home/ugodnost/hvala';
}
}
);
} else {
window.location.href = '/wps/wcm/connect/zivljenje.triglav.si/home/ugodnost/hvala';
}
} else {
$scope.vodnikResponseText = "Napaka pri pošiljanju.";
}
})
} else {
console.log("form not valid");
}
};
$scope.changeCaptcha = function() {
$scope.captchaUrl = "https://zivljenje.triglav.si/captcha.png?rand=" + Math.random().toString();
}
}]);
"use strict";
// FASTCLICK
$(function () {
FastClick.attach(document.body);
});
//********************************************
//********************************************
// 1.0 - READY
//********************************************
$(document).ready(function () {
$(".menu-img-title").each(function () {
$(this).on("click", function () {
if ($(this).parent().hasClass("is-active")) {
$(this).parent().removeClass("is-active").find(".menu-main-nav").slideUp("250");
} else {
$(this).parent().addClass("is-active").find(".menu-main-nav").slideDown("250");
}
});
});
// OPEN FAQ
$(".faq-title").each(function () {
$(this).on("click", function () {
if ($(this).parent().hasClass("is-open")) {
$(this).parent().removeClass("is-open").find(".faq-content").slideUp("300");
} else {
$(this).parent().addClass("is-open").find(".faq-content").slideDown("300");
}
});
});
// Featured articles slider
$('.why-slider').slick({
//centerMode: true,
speed: 500,
//centerPadding: '0px',
slidesToShow: 1,
slidesToScroll: 1,
//adaptiveHeight: true,
draggable: true,
infinite: false,
dots: true,
fade: true,
cssEase: 'ease-in',
arrows: true,
// appendArrows: $('.featured-slider-arrows'),
prevArrow: '',
nextArrow: ''
}).on('beforeChange', function (event, slick, currentSlide, nextSlide) {
//var currentSlide = nextSlide + 1;
//var totalSlides = slick.slideCount;
//$('.gallery-modal-counter').html(currentSlide + " / " + totalSlides);
});
// SCROLL FROM FIRST SECTION ON HOMEPAGE TO THE SECOND
$(".page-scroll").click(function () {
$([document.documentElement, document.body]).animate({
scrollTop: $("#homepage-video").offset().top
}, 2000);
});
// FAKER INI
var chooseCategorieIni = $(".choose-categorie select").specto_faker({
on_change: function on_change(newVal, jsEvent) {
animateScreens($(".articles-list:not(.mfp-hide)"), ".articles-list.articles-" + newVal, true);
},
animated: false
});
//EQUAL HEIGHT
$(function () {
$('.equal-height').matchHeight({
byRow: true,
property: 'height',
target: null,
remove: false
});
});
$(function () {
$('.equal-height-title').matchHeight({
byRow: true,
property: 'height',
target: null,
remove: false
});
});
$(function () {
$('.equal-height-par').matchHeight({
byRow: true,
property: 'height',
target: null,
remove: false
});
});
// OPEN CONTENT OF CATEGORIE
$(".categorie-single .btn").on("click", function (e) {
e.preventDefault();
var singleCategorieId = $(this).attr("id").replace(/[^\d]/g, "");
$(".sc-categories-content").addClass("categorie-open");
animateScreens(".categories-list", ".articles-tabs, .categories-email-subs, .sub-head", true);
$(chooseCategorieIni[0]).find(".drop-selection div[rel='" + singleCategorieId + "']")[0].click();
console.log($(chooseCategorieIni[0]).find(".drop-value"));
$(chooseCategorieIni[0]).find(".drop-value")[0].click();
});
// CLOSE CONTENT OF CATEGORIE
$(".back-to-cat-list").on("click", function (e) {
e.preventDefault();
$(".sc-categories-content").removeClass("categorie-open");
animateScreens(".articles-tabs", ".categories-list", true);
fadeInEl(".categories-email-subs, .sub-head", true);
});
});
// RESIZE WATCH
$(window).resize(function () {
$.fn.matchHeight._update();
});
//animacija prehodov med screeni
function animateScreens(hidet, showt, noscroll) {
$(hidet).animate({ opacity: "0" }, {
duration: 200,
always: function always() {
$(this).addClass("mfp-hide");
$(showt).css({ opacity: "0" }).removeClass("mfp-hide").animate({ opacity: "1" }, { duration: 500, queue: false });
if (!noscroll) $("html,body").animate({ scrollTop: 0 }, { duration: 950, queue: false });
}
});
return;
}
//single element fade
function fadeInEl(el, fadeout) {
if (!fadeout) $(el).css({ opacity: "0" }).removeClass("mfp-hide").animate({ opacity: "1" }, { duration: 200, queue: false });else $(el).animate({ opacity: "0" }, { duration: 200, queue: false, always: function always() {
$(this).addClass("mfp-hide").removeAttr("style");
} });
}
//********************************************
// Return Window Width
function win_width() {
return $(window).width();
}
//********************************************
// Return Window Height
function win_height() {
return $(window).outerHeight();
}
//********************************************
// Return Header Height
function header_height() {
return $('.header-main').outerHeight();
}
//********************************************
// 1.0 - READY
//********************************************
$(document).ready(function () {
// Header Dropdown
// headerDropdown();
// Round slide
//roundSliderInit();
});
//********************************************
// 2.0 - WINDOW LOAD
//********************************************
$(window).on('load', function () {
// Slickslider
// slickSlidersInit();
// Match height added to class equal-height
$('.equal-height').matchHeight();
$('.equal-height-inner').matchHeight();
$('.equal-height-not-by-row').matchHeight({
byRow: false
});
});
// WINDOW RESIZE
$(window).on('resize', function () {
/*
$(".ui-datepicker").css({
top: $("#inputTerminDate").offset().top + 41,
left: $("#inputTerminDate").offset().left
});
*/
});