Hi lucky623,
Refer below sample code.
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="Chart.min.js" type="text/javascript"></script>
<script src="Chart.Radar.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
var radarOptions = { datasetFill: false };
var radarData = {
labels: ["Eating", "Drinking", "Sleeping", "Designing", "Coding", "Partying", "Running"],
datasets: [
{ fillColor: "rgba(102,45,145,.1)", strokeColor: "rgba(102,45,145,1)",
pointColor: "rgba(220,220,220,1)", pointStrokeColor: "#fff",
data: [65, 59, 90, 81, 56, 55, 40]
},
{ fillColor: "rgba(63,169,245,.1)", strokeColor: "rgba(63,169,245,1)",
pointColor: "rgba(151,187,205,1)", pointStrokeColor: "#fff",
data: [28, 48, 40, 19, 96, 27, 100]
}
]
}
var canvas = document.getElementById("radarChart");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
var myNewChart = new Chart(ctx).Radar(radarData, radarOptions);
}
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<canvas id="radarChart" width="400" height="400"></canvas>
</div>
</form>
</body>
</html>
Chart.min.js
(function () { "use strict"; var a = this, b = a.Chart, c = function (a) { this.canvas = a.canvas, this.ctx = a; var c = function (a, b) { return a["offset" + b] ? a["offset" + b] : document.defaultView.getComputedStyle(a).getPropertyValue(b) }, e = this.width = c(a.canvas, "Width") || a.canvas.width, f = this.height = c(a.canvas, "Height") || a.canvas.height; return a.canvas.width = e, a.canvas.height = f, e = this.width = a.canvas.width, f = this.height = a.canvas.height, this.aspectRatio = this.width / this.height, d.retinaScale(this), this }; c.defaults = { global: { animation: !0, animationSteps: 60, animationEasing: "easeOutQuart", showScale: !0, scaleOverride: !1, scaleSteps: null, scaleStepWidth: null, scaleStartValue: null, scaleLineColor: "rgba(0,0,0,.1)", scaleLineWidth: 1, scaleShowLabels: !0, scaleLabel: "<%=value%>", scaleIntegersOnly: !0, scaleBeginAtZero: !1, scaleFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif", scaleFontSize: 12, scaleFontStyle: "normal", scaleFontColor: "#666", responsive: !1, maintainAspectRatio: !0, showTooltips: !0, customTooltips: !1, tooltipEvents: ["mousemove", "touchstart", "touchmove", "mouseout"], tooltipFillColor: "rgba(0,0,0,0.8)", tooltipFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif", tooltipFontSize: 14, tooltipFontStyle: "normal", tooltipFontColor: "#fff", tooltipTitleFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif", tooltipTitleFontSize: 14, tooltipTitleFontStyle: "bold", tooltipTitleFontColor: "#fff", tooltipYPadding: 6, tooltipXPadding: 6, tooltipCaretSize: 8, tooltipCornerRadius: 6, tooltipXOffset: 10, tooltipTemplate: "<%if (label){%><%=label%>: <%}%><%= value %>", multiTooltipTemplate: "<%= value %>", multiTooltipKeyBackground: "#fff", onAnimationProgress: function () { }, onAnimationComplete: function () { } } }, c.types = {}; var d = c.helpers = {}, e = d.each = function (a, b, c) { var d = Array.prototype.slice.call(arguments, 3); if (a) if (a.length === +a.length) { var e; for (e = 0; e < a.length; e++) b.apply(c, [a[e], e].concat(d)) } else for (var f in a) b.apply(c, [a[f], f].concat(d)) }, f = d.clone = function (a) { var b = {}; return e(a, function (c, d) { a.hasOwnProperty(d) && (b[d] = c) }), b }, g = d.extend = function (a) { return e(Array.prototype.slice.call(arguments, 1), function (b) { e(b, function (c, d) { b.hasOwnProperty(d) && (a[d] = c) }) }), a }, h = d.merge = function (a, b) { var c = Array.prototype.slice.call(arguments, 0); return c.unshift({}), g.apply(null, c) }, i = d.indexOf = function (a, b) { if (Array.prototype.indexOf) return a.indexOf(b); for (var c = 0; c < a.length; c++) if (a[c] === b) return c; return -1 }, m = (d.where = function (a, b) { var c = []; return d.each(a, function (a) { b(a) && c.push(a) }), c }, d.findNextWhere = function (a, b, c) { c || (c = -1); for (var d = c + 1; d < a.length; d++) { var e = a[d]; if (b(e)) return e } }, d.findPreviousWhere = function (a, b, c) { c || (c = a.length); for (var d = c - 1; d >= 0; d--) { var e = a[d]; if (b(e)) return e } }, d.inherits = function (a) { var b = this, c = a && a.hasOwnProperty("constructor") ? a.constructor : function () { return b.apply(this, arguments) }, d = function () { this.constructor = c }; return d.prototype = b.prototype, c.prototype = new d, c.extend = m, a && g(c.prototype, a), c.__super__ = b.prototype, c }), n = d.noop = function () { }, o = d.uid = function () { var a = 0; return function () { return "chart-" + a++ } } (), p = d.warn = function (a) { window.console && "function" == typeof window.console.warn && console.warn(a) }, q = d.amd = "function" == typeof define && define.amd, r = d.isNumber = function (a) { return !isNaN(parseFloat(a)) && isFinite(a) }, s = d.max = function (a) { return Math.max.apply(Math, a) }, t = d.min = function (a) { return Math.min.apply(Math, a) }, v = (d.cap = function (a, b, c) { if (r(b)) { if (a > b) return b } else if (r(c) && a < c) return c; return a }, d.getDecimalPlaces = function (a) { if (a % 1 != 0 && r(a)) { var b = a.toString(); if (b.indexOf("e-") < 0) return b.split(".")[1].length; if (b.indexOf(".") < 0) return parseInt(b.split("e-")[1]); var c = b.split(".")[1].split("e-"); return c[0].length + parseInt(c[1]) } return 0 }), w = d.radians = function (a) { return a * (Math.PI / 180) }, y = (d.getAngleFromPoint = function (a, b) { var c = b.x - a.x, d = b.y - a.y, e = Math.sqrt(c * c + d * d), f = 2 * Math.PI + Math.atan2(d, c); return c < 0 && d < 0 && (f += 2 * Math.PI), { angle: f, distance: e} }, d.aliasPixel = function (a) { return a % 2 == 0 ? 0 : .5 }), A = (d.splineCurve = function (a, b, c, d) { var e = Math.sqrt(Math.pow(b.x - a.x, 2) + Math.pow(b.y - a.y, 2)), f = Math.sqrt(Math.pow(c.x - b.x, 2) + Math.pow(c.y - b.y, 2)), g = d * e / (e + f), h = d * f / (e + f); return { inner: { x: b.x - g * (c.x - a.x), y: b.y - g * (c.y - a.y) }, outer: { x: b.x + h * (c.x - a.x), y: b.y + h * (c.y - a.y)}} }, d.calculateOrderOfMagnitude = function (a) { return Math.floor(Math.log(a) / Math.LN10) }), C = (d.calculateScaleRange = function (a, b, c, d, e) { var f = 2, g = Math.floor(b / (1.5 * c)), h = f >= g, i = s(a), j = t(a); i === j && (i += .5, j >= .5 && !d ? j -= .5 : i += .5); for (var k = Math.abs(i - j), l = A(k), m = Math.ceil(i / (1 * Math.pow(10, l))) * Math.pow(10, l), n = d ? 0 : Math.floor(j / (1 * Math.pow(10, l))) * Math.pow(10, l), o = m - n, p = Math.pow(10, l), q = Math.round(o / p); (q > g || 2 * q < g) && !h; ) if (q > g) p *= 2, (q = Math.round(o / p)) % 1 != 0 && (h = !0); else if (e && l >= 0) { if (p / 2 % 1 != 0) break; p /= 2, q = Math.round(o / p) } else p /= 2, q = Math.round(o / p); return h && (q = f, p = o / q), { steps: q, stepValue: p, min: n, max: n + q * p} }, d.template = function (a, b) { function d(a, b) { var d = /\W/.test(a) ? new Function("obj", "var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('" + a.replace(/[\r\t\n]/g, " ").split("<%").join("\t").replace(/((^|%>)[^\t]*)'/g, "$1\r").replace(/\t=(.*?)%>/g, "',$1,'").split("\t").join("');").split("%>").join("p.push('").split("\r").join("\\'") + "');}return p.join('');") : c[a] = c[a]; return b ? d(b) : d } if (a instanceof Function) return a(b); var c = {}; return d(a, b) }), E = (d.generateLabels = function (a, b, c, d) { var f = new Array(b); return a && e(f, function (b, e) { f[e] = C(a, { value: c + d * (e + 1) }) }), f }, d.easingEffects = { linear: function (a) { return a }, easeInQuad: function (a) { return a * a }, easeOutQuad: function (a) { return -1 * a * (a - 2) }, easeInOutQuad: function (a) { return (a /= .5) < 1 ? .5 * a * a : -.5 * (--a * (a - 2) - 1) }, easeInCubic: function (a) { return a * a * a }, easeOutCubic: function (a) { return 1 * ((a = a / 1 - 1) * a * a + 1) }, easeInOutCubic: function (a) { return (a /= .5) < 1 ? .5 * a * a * a : .5 * ((a -= 2) * a * a + 2) }, easeInQuart: function (a) { return a * a * a * a }, easeOutQuart: function (a) { return -1 * ((a = a / 1 - 1) * a * a * a - 1) }, easeInOutQuart: function (a) { return (a /= .5) < 1 ? .5 * a * a * a * a : -.5 * ((a -= 2) * a * a * a - 2) }, easeInQuint: function (a) { return 1 * (a /= 1) * a * a * a * a }, easeOutQuint: function (a) { return 1 * ((a = a / 1 - 1) * a * a * a * a + 1) }, easeInOutQuint: function (a) { return (a /= .5) < 1 ? .5 * a * a * a * a * a : .5 * ((a -= 2) * a * a * a * a + 2) }, easeInSine: function (a) { return -1 * Math.cos(a / 1 * (Math.PI / 2)) + 1 }, easeOutSine: function (a) { return 1 * Math.sin(a / 1 * (Math.PI / 2)) }, easeInOutSine: function (a) { return -.5 * (Math.cos(Math.PI * a / 1) - 1) }, easeInExpo: function (a) { return 0 === a ? 1 : 1 * Math.pow(2, 10 * (a / 1 - 1)) }, easeOutExpo: function (a) { return 1 === a ? 1 : 1 * (1 - Math.pow(2, -10 * a / 1)) }, easeInOutExpo: function (a) { return 0 === a ? 0 : 1 === a ? 1 : (a /= .5) < 1 ? .5 * Math.pow(2, 10 * (a - 1)) : .5 * (2 - Math.pow(2, -10 * --a)) }, easeInCirc: function (a) { return a >= 1 ? a : -1 * (Math.sqrt(1 - (a /= 1) * a) - 1) }, easeOutCirc: function (a) { return 1 * Math.sqrt(1 - (a = a / 1 - 1) * a) }, easeInOutCirc: function (a) { return (a /= .5) < 1 ? -.5 * (Math.sqrt(1 - a * a) - 1) : .5 * (Math.sqrt(1 - (a -= 2) * a) + 1) }, easeInElastic: function (a) { var b = 1.70158, c = 0, d = 1; return 0 === a ? 0 : 1 == (a /= 1) ? 1 : (c || (c = .3), d < Math.abs(1) ? (d = 1, b = c / 4) : b = c / (2 * Math.PI) * Math.asin(1 / d), -d * Math.pow(2, 10 * (a -= 1)) * Math.sin((1 * a - b) * (2 * Math.PI) / c)) }, easeOutElastic: function (a) { var b = 1.70158, c = 0, d = 1; return 0 === a ? 0 : 1 == (a /= 1) ? 1 : (c || (c = .3), d < Math.abs(1) ? (d = 1, b = c / 4) : b = c / (2 * Math.PI) * Math.asin(1 / d), d * Math.pow(2, -10 * a) * Math.sin((1 * a - b) * (2 * Math.PI) / c) + 1) }, easeInOutElastic: function (a) { var b = 1.70158, c = 0, d = 1; return 0 === a ? 0 : 2 == (a /= .5) ? 1 : (c || (c = .3 * 1.5 * 1), d < Math.abs(1) ? (d = 1, b = c / 4) : b = c / (2 * Math.PI) * Math.asin(1 / d), a < 1 ? d * Math.pow(2, 10 * (a -= 1)) * Math.sin((1 * a - b) * (2 * Math.PI) / c) * -.5 : d * Math.pow(2, -10 * (a -= 1)) * Math.sin((1 * a - b) * (2 * Math.PI) / c) * .5 + 1) }, easeInBack: function (a) { var b = 1.70158; return 1 * (a /= 1) * a * ((b + 1) * a - b) }, easeOutBack: function (a) { var b = 1.70158; return 1 * ((a = a / 1 - 1) * a * ((b + 1) * a + b) + 1) }, easeInOutBack: function (a) { var b = 1.70158; return (a /= .5) < 1 ? a * a * ((1 + (b *= 1.525)) * a - b) * .5 : .5 * ((a -= 2) * a * ((1 + (b *= 1.525)) * a + b) + 2) }, easeInBounce: function (a) { return 1 - E.easeOutBounce(1 - a) }, easeOutBounce: function (a) { return (a /= 1) < 1 / 2.75 ? 7.5625 * a * a * 1 : a < 2 / 2.75 ? 1 * (7.5625 * (a -= 1.5 / 2.75) * a + .75) : a < 2.5 / 2.75 ? 1 * (7.5625 * (a -= 2.25 / 2.75) * a + .9375) : 1 * (7.5625 * (a -= 2.625 / 2.75) * a + .984375) }, easeInOutBounce: function (a) { return a < .5 ? .5 * E.easeInBounce(2 * a) : .5 * E.easeOutBounce(2 * a - 1) + .5 } }), F = d.requestAnimFrame = function () { return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (a) { return window.setTimeout(a, 1e3 / 60) } } (), J = (d.cancelAnimFrame = function () { return window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || window.msCancelAnimationFrame || function (a) { return window.clearTimeout(a, 1e3 / 60) } } (), d.animationLoop = function (a, b, c, d, e, f) { var g = 0, h = E[c] || E.linear, i = function () { g++; var c = g / b, j = h(c); a.call(f, j, c, g), d.call(f, j, c), g < b ? f.animationFrame = F(i) : e.apply(f) }; F(i) }, d.getRelativePosition = function (a) { var b, c, d = a.originalEvent || a, e = a.currentTarget || a.srcElement, f = e.getBoundingClientRect(); return d.touches ? (b = d.touches[0].clientX - f.left, c = d.touches[0].clientY - f.top) : (b = d.clientX - f.left, c = d.clientY - f.top), { x: b, y: c} }, d.addEvent = function (a, b, c) { a.addEventListener ? a.addEventListener(b, c) : a.attachEvent ? a.attachEvent("on" + b, c) : a["on" + b] = c }), K = d.removeEvent = function (a, b, c) { a.removeEventListener ? a.removeEventListener(b, c, !1) : a.detachEvent ? a.detachEvent("on" + b, c) : a["on" + b] = n }, M = (d.bindEvents = function (a, b, c) { a.events || (a.events = {}), e(b, function (b) { a.events[b] = function () { c.apply(a, arguments) }, J(a.chart.canvas, b, a.events[b]) }) }, d.unbindEvents = function (a, b) { e(b, function (b, c) { K(a.chart.canvas, c, b) }) }), N = d.getMaximumWidth = function (a) { var b = a.parentNode, c = parseInt(P(b, "padding-left")) + parseInt(P(b, "padding-right")); return b.clientWidth - c }, O = d.getMaximumHeight = function (a) { var b = a.parentNode, c = parseInt(P(b, "padding-bottom")) + parseInt(P(b, "padding-top")); return b.clientHeight - c }, P = d.getStyle = function (a, b) { return a.currentStyle ? a.currentStyle[b] : document.defaultView.getComputedStyle(a, null).getPropertyValue(b) }, R = (d.getMaximumSize = d.getMaximumWidth, d.retinaScale = function (a) { var b = a.ctx, c = a.canvas.width, d = a.canvas.height; window.devicePixelRatio && (b.canvas.style.width = c + "px", b.canvas.style.height = d + "px", b.canvas.height = d * window.devicePixelRatio, b.canvas.width = c * window.devicePixelRatio, b.scale(window.devicePixelRatio, window.devicePixelRatio)) }), S = d.clear = function (a) { a.ctx.clearRect(0, 0, a.width, a.height) }, T = d.fontString = function (a, b, c) { return b + " " + a + "px " + c }, U = d.longestText = function (a, b, c) { a.font = b; var d = 0; return e(c, function (b) { var c = a.measureText(b).width; d = c > d ? c : d }), d }, V = d.drawRoundedRectangle = function (a, b, c, d, e, f) { a.beginPath(), a.moveTo(b + f, c), a.lineTo(b + d - f, c), a.quadraticCurveTo(b + d, c, b + d, c + f), a.lineTo(b + d, c + e - f), a.quadraticCurveTo(b + d, c + e, b + d - f, c + e), a.lineTo(b + f, c + e), a.quadraticCurveTo(b, c + e, b, c + e - f), a.lineTo(b, c + f), a.quadraticCurveTo(b, c, b + f, c), a.closePath() }; c.instances = {}, c.Type = function (a, b, d) { this.options = b, this.chart = d, this.id = o(), c.instances[this.id] = this, b.responsive && this.resize(), this.initialize.call(this, a) }, g(c.Type.prototype, { initialize: function () { return this }, clear: function () { return S(this.chart), this }, stop: function () { return c.animationService.cancelAnimation(this), this }, resize: function (a) { this.stop(); var b = this.chart.canvas, c = N(this.chart.canvas), d = this.options.maintainAspectRatio ? c / this.chart.aspectRatio : O(this.chart.canvas); return b.width = this.chart.width = c, b.height = this.chart.height = d, R(this.chart), "function" == typeof a && a.apply(this, Array.prototype.slice.call(arguments, 1)), this }, reflow: n, render: function (a) { if (a && this.reflow(), this.options.animation && !a) { var b = new c.Animation; b.numSteps = this.options.animationSteps, b.easing = this.options.animationEasing, b.render = function (a, b) { var c = d.easingEffects[b.easing], e = b.currentStep / b.numSteps, f = c(e); a.draw(f, e, b.currentStep) }, b.onAnimationProgress = this.options.onAnimationProgress, b.onAnimationComplete = this.options.onAnimationComplete, c.animationService.addAnimation(this, b) } else this.draw(), this.options.onAnimationComplete.call(this); return this }, generateLegend: function () { return C(this.options.legendTemplate, this) }, destroy: function () { this.clear(), M(this, this.events); var a = this.chart.canvas; a.width = this.chart.width, a.height = this.chart.height, a.style.removeProperty ? (a.style.removeProperty("width"), a.style.removeProperty("height")) : (a.style.removeAttribute("width"), a.style.removeAttribute("height")), delete c.instances[this.id] }, showTooltip: function (a, b) { if (void 0 === this.activeElements && (this.activeElements = []), function (a) { var b = !1; return a.length !== this.activeElements.length ? b = !0 : (e(a, function (a, c) { a !== this.activeElements[c] && (b = !0) }, this), b) } .call(this, a) || b) { if (this.activeElements = a, this.draw(), this.options.customTooltips && this.options.customTooltips(!1), a.length > 0) if (this.datasets && this.datasets.length > 1) { for (var g, h, j = this.datasets.length - 1; j >= 0 && (g = this.datasets[j].points || this.datasets[j].bars || this.datasets[j].segments, -1 === (h = i(g, a[0]))); j--); var k = [], l = [], m = function (a) { var c, g, i, j, m, b = [], e = [], f = []; return d.each(this.datasets, function (a) { c = a.points || a.bars || a.segments, c[h] && c[h].hasValue() && b.push(c[h]) }), d.each(b, function (a) { e.push(a.x), f.push(a.y), k.push(d.template(this.options.multiTooltipTemplate, a)), l.push({ fill: a._saved.fillColor || a.fillColor, stroke: a._saved.strokeColor || a.strokeColor }) }, this), m = t(f), i = s(f), j = t(e), g = s(e), { x: j > this.chart.width / 2 ? j : g, y: (m + i) / 2} } .call(this, h); new c.MultiTooltip({ x: m.x, y: m.y, xPadding: this.options.tooltipXPadding, yPadding: this.options.tooltipYPadding, xOffset: this.options.tooltipXOffset, fillColor: this.options.tooltipFillColor, textColor: this.options.tooltipFontColor, fontFamily: this.options.tooltipFontFamily, fontStyle: this.options.tooltipFontStyle, fontSize: this.options.tooltipFontSize, titleTextColor: this.options.tooltipTitleFontColor, titleFontFamily: this.options.tooltipTitleFontFamily, titleFontStyle: this.options.tooltipTitleFontStyle, titleFontSize: this.options.tooltipTitleFontSize, cornerRadius: this.options.tooltipCornerRadius, labels: k, legendColors: l, legendColorBackground: this.options.multiTooltipKeyBackground, title: a[0].label, chart: this.chart, ctx: this.chart.ctx, custom: this.options.customTooltips }).draw() } else e(a, function (a) { var b = a.tooltipPosition(); new c.Tooltip({ x: Math.round(b.x), y: Math.round(b.y), xPadding: this.options.tooltipXPadding, yPadding: this.options.tooltipYPadding, fillColor: this.options.tooltipFillColor, textColor: this.options.tooltipFontColor, fontFamily: this.options.tooltipFontFamily, fontStyle: this.options.tooltipFontStyle, fontSize: this.options.tooltipFontSize, caretHeight: this.options.tooltipCaretSize, cornerRadius: this.options.tooltipCornerRadius, text: C(this.options.tooltipTemplate, a), chart: this.chart, custom: this.options.customTooltips }).draw() }, this); return this } }, toBase64Image: function () { return this.chart.canvas.toDataURL.apply(this.chart.canvas, arguments) } }), c.Type.extend = function (a) { var b = this, d = function () { return b.apply(this, arguments) }; if (d.prototype = f(b.prototype), g(d.prototype, a), d.extend = c.Type.extend, a.name || b.prototype.name) { var e = a.name || b.prototype.name, i = c.defaults[b.prototype.name] ? f(c.defaults[b.prototype.name]) : {}; c.defaults[e] = g(i, a.defaults), c.types[e] = d, c.prototype[e] = function (a, b) { var f = h(c.defaults.global, c.defaults[e], b || {}); return new d(a, f, this) } } else p("Name not provided for this chart, so it hasn't been registered"); return b }, c.Element = function (a) { g(this, a), this.initialize.apply(this, arguments), this.save() }, g(c.Element.prototype, { initialize: function () { }, restore: function (a) { return a ? e(a, function (a) { this[a] = this._saved[a] }, this) : g(this, this._saved), this }, save: function () { return this._saved = f(this), delete this._saved._saved, this }, update: function (a) { return e(a, function (a, b) { this._saved[b] = this[b], this[b] = a }, this), this }, transition: function (a, b) { return e(a, function (a, c) { this[c] = (a - this._saved[c]) * b + this._saved[c] }, this), this }, tooltipPosition: function () { return { x: this.x, y: this.y} }, hasValue: function () { return r(this.value) } }), c.Element.extend = m, c.Point = c.Element.extend({ display: !0, inRange: function (a, b) { var c = this.hitDetectionRadius + this.radius; return Math.pow(a - this.x, 2) + Math.pow(b - this.y, 2) < Math.pow(c, 2) }, draw: function () { if (this.display) { var a = this.ctx; a.beginPath(), a.arc(this.x, this.y, this.radius, 0, 2 * Math.PI), a.closePath(), a.strokeStyle = this.strokeColor, a.lineWidth = this.strokeWidth, a.fillStyle = this.fillColor, a.fill(), a.stroke() } } }), c.Arc = c.Element.extend({ inRange: function (a, b) { var c = d.getAngleFromPoint(this, { x: a, y: b }), e = c.angle >= this.startAngle && c.angle <= this.endAngle, f = c.distance >= this.innerRadius && c.distance <= this.outerRadius; return e && f }, tooltipPosition: function () { var a = this.startAngle + (this.endAngle - this.startAngle) / 2, b = (this.outerRadius - this.innerRadius) / 2 + this.innerRadius; return { x: this.x + Math.cos(a) * b, y: this.y + Math.sin(a) * b} }, draw: function (a) { var c = this.ctx; c.beginPath(), c.arc(this.x, this.y, this.outerRadius, this.startAngle, this.endAngle), c.arc(this.x, this.y, this.innerRadius, this.endAngle, this.startAngle, !0), c.closePath(), c.strokeStyle = this.strokeColor, c.lineWidth = this.strokeWidth, c.fillStyle = this.fillColor, c.fill(), c.lineJoin = "bevel", this.showStroke && c.stroke() } }), c.Rectangle = c.Element.extend({ draw: function () { var a = this.ctx, b = this.width / 2, c = this.x - b, d = this.x + b, e = this.base - (this.base - this.y), f = this.strokeWidth / 2; this.showStroke && (c += f, d -= f, e += f), a.beginPath(), a.fillStyle = this.fillColor, a.strokeStyle = this.strokeColor, a.lineWidth = this.strokeWidth, a.moveTo(c, this.base), a.lineTo(c, e), a.lineTo(d, e), a.lineTo(d, this.base), a.fill(), this.showStroke && a.stroke() }, height: function () { return this.base - this.y }, inRange: function (a, b) { return a >= this.x - this.width / 2 && a <= this.x + this.width / 2 && b >= this.y && b <= this.base } }), c.Animation = c.Element.extend({ currentStep: null, numSteps: 60, easing: "", render: null, onAnimationProgress: null, onAnimationComplete: null }), c.Tooltip = c.Element.extend({ draw: function () { var a = this.chart.ctx; a.font = T(this.fontSize, this.fontStyle, this.fontFamily), this.xAlign = "center", this.yAlign = "above"; var b = this.caretPadding = 2, c = a.measureText(this.text).width + 2 * this.xPadding, d = this.fontSize + 2 * this.yPadding, e = d + this.caretHeight + b; this.x + c / 2 > this.chart.width ? this.xAlign = "left" : this.x - c / 2 < 0 && (this.xAlign = "right"), this.y - e < 0 && (this.yAlign = "below"); var f = this.x - c / 2, g = this.y - e; if (a.fillStyle = this.fillColor, this.custom) this.custom(this); else { switch (this.yAlign) { case "above": a.beginPath(), a.moveTo(this.x, this.y - b), a.lineTo(this.x + this.caretHeight, this.y - (b + this.caretHeight)), a.lineTo(this.x - this.caretHeight, this.y - (b + this.caretHeight)), a.closePath(), a.fill(); break; case "below": g = this.y + b + this.caretHeight, a.beginPath(), a.moveTo(this.x, this.y + b), a.lineTo(this.x + this.caretHeight, this.y + b + this.caretHeight), a.lineTo(this.x - this.caretHeight, this.y + b + this.caretHeight), a.closePath(), a.fill() } switch (this.xAlign) { case "left": f = this.x - c + (this.cornerRadius + this.caretHeight); break; case "right": f = this.x - (this.cornerRadius + this.caretHeight) } V(a, f, g, c, d, this.cornerRadius), a.fill(), a.fillStyle = this.textColor, a.textAlign = "center", a.textBaseline = "middle", a.fillText(this.text, f + c / 2, g + d / 2) } } }), c.MultiTooltip = c.Element.extend({ initialize: function () { this.font = T(this.fontSize, this.fontStyle, this.fontFamily), this.titleFont = T(this.titleFontSize, this.titleFontStyle, this.titleFontFamily), this.height = this.labels.length * this.fontSize + (this.labels.length - 1) * (this.fontSize / 2) + 2 * this.yPadding + 1.5 * this.titleFontSize, this.ctx.font = this.titleFont; var a = this.ctx.measureText(this.title).width, b = U(this.ctx, this.font, this.labels) + this.fontSize + 3, c = s([b, a]); this.width = c + 2 * this.xPadding; var d = this.height / 2; this.y - d < 0 ? this.y = d : this.y + d > this.chart.height && (this.y = this.chart.height - d), this.x > this.chart.width / 2 ? this.x -= this.xOffset + this.width : this.x += this.xOffset }, getLineHeight: function (a) { var b = this.y - this.height / 2 + this.yPadding, c = a - 1; return 0 === a ? b + this.titleFontSize / 2 : b + (1.5 * this.fontSize * c + this.fontSize / 2) + 1.5 * this.titleFontSize }, draw: function () { if (this.custom) this.custom(this); else { V(this.ctx, this.x, this.y - this.height / 2, this.width, this.height, this.cornerRadius); var a = this.ctx; a.fillStyle = this.fillColor, a.fill(), a.closePath(), a.textAlign = "left", a.textBaseline = "middle", a.fillStyle = this.titleTextColor, a.font = this.titleFont, a.fillText(this.title, this.x + this.xPadding, this.getLineHeight(0)), a.font = this.font, d.each(this.labels, function (b, c) { a.fillStyle = this.textColor, a.fillText(b, this.x + this.xPadding + this.fontSize + 3, this.getLineHeight(c + 1)), a.fillStyle = this.legendColorBackground, a.fillRect(this.x + this.xPadding, this.getLineHeight(c + 1) - this.fontSize / 2, this.fontSize, this.fontSize), a.fillStyle = this.legendColors[c].fill, a.fillRect(this.x + this.xPadding, this.getLineHeight(c + 1) - this.fontSize / 2, this.fontSize, this.fontSize) }, this) } } }), c.Scale = c.Element.extend({ initialize: function () { this.fit() }, buildYLabels: function () { this.yLabels = []; for (var a = v(this.stepValue), b = 0; b <= this.steps; b++) this.yLabels.push(C(this.templateString, { value: (this.min + b * this.stepValue).toFixed(a) })); this.yLabelWidth = this.display && this.showLabels ? U(this.ctx, this.font, this.yLabels) + 10 : 0 }, addXLabel: function (a) { this.xLabels.push(a), this.valuesCount++, this.fit() }, removeXLabel: function () { this.xLabels.shift(), this.valuesCount--, this.fit() }, fit: function () { this.startPoint = this.display ? this.fontSize : 0, this.endPoint = this.display ? this.height - 1.5 * this.fontSize - 5 : this.height, this.startPoint += this.padding, this.endPoint -= this.padding; var c, a = this.endPoint, b = this.endPoint - this.startPoint; for (this.calculateYRange(b), this.buildYLabels(), this.calculateXLabelRotation(); b > this.endPoint - this.startPoint; ) b = this.endPoint - this.startPoint, c = this.yLabelWidth, this.calculateYRange(b), this.buildYLabels(), c < this.yLabelWidth && (this.endPoint = a, this.calculateXLabelRotation()) }, calculateXLabelRotation: function () { this.ctx.font = this.font; var c, a = this.ctx.measureText(this.xLabels[0]).width, b = this.ctx.measureText(this.xLabels[this.xLabels.length - 1]).width; if (this.xScalePaddingRight = b / 2 + 3, this.xScalePaddingLeft = a / 2 > this.yLabelWidth ? a / 2 : this.yLabelWidth, this.xLabelRotation = 0, this.display) { var f, e = U(this.ctx, this.font, this.xLabels); this.xLabelWidth = e; for (var h = Math.floor(this.calculateX(1) - this.calculateX(0)) - 6; this.xLabelWidth > h && 0 === this.xLabelRotation || this.xLabelWidth > h && this.xLabelRotation <= 90 && this.xLabelRotation > 0; ) f = Math.cos(w(this.xLabelRotation)), c = f * a, f * b, c + this.fontSize / 2 > this.yLabelWidth && (this.xScalePaddingLeft = c + this.fontSize / 2), this.xScalePaddingRight = this.fontSize / 2, this.xLabelRotation++, this.xLabelWidth = f * e; this.xLabelRotation > 0 && (this.endPoint -= Math.sin(w(this.xLabelRotation)) * e + 3) } else this.xLabelWidth = 0, this.xScalePaddingRight = this.padding, this.xScalePaddingLeft = this.padding }, calculateYRange: n, drawingArea: function () { return this.startPoint - this.endPoint }, calculateY: function (a) { var b = this.drawingArea() / (this.min - this.max); return this.endPoint - b * (a - this.min) }, calculateX: function (a) { var c = (this.xLabelRotation, this.width - (this.xScalePaddingLeft + this.xScalePaddingRight)), d = c / Math.max(this.valuesCount - (this.offsetGridLines ? 0 : 1), 1), e = d * a + this.xScalePaddingLeft; return this.offsetGridLines && (e += d / 2), Math.round(e) }, update: function (a) { d.extend(this, a), this.fit() }, draw: function () { var a = this.ctx, b = (this.endPoint - this.startPoint) / this.steps, c = Math.round(this.xScalePaddingLeft); this.display && (a.fillStyle = this.textColor, a.font = this.font, e(this.yLabels, function (e, f) { var g = this.endPoint - b * f, h = Math.round(g), i = this.showHorizontalLines; a.textAlign = "right", a.textBaseline = "middle", this.showLabels && a.fillText(e, c - 10, g), 0 !== f || i || (i = !0), i && a.beginPath(), f > 0 ? (a.lineWidth = this.gridLineWidth, a.strokeStyle = this.gridLineColor) : (a.lineWidth = this.lineWidth, a.strokeStyle = this.lineColor), h += d.aliasPixel(a.lineWidth), i && (a.moveTo(c, h), a.lineTo(this.width, h), a.stroke(), a.closePath()), a.lineWidth = this.lineWidth, a.strokeStyle = this.lineColor, a.beginPath(), a.moveTo(c - 5, h), a.lineTo(c, h), a.stroke(), a.closePath() }, this), e(this.xLabels, function (b, c) { var d = this.calculateX(c) + y(this.lineWidth), e = this.calculateX(c - (this.offsetGridLines ? .5 : 0)) + y(this.lineWidth), f = this.xLabelRotation > 0, g = this.showVerticalLines; 0 !== c || g || (g = !0), g && a.beginPath(), c > 0 ? (a.lineWidth = this.gridLineWidth, a.strokeStyle = this.gridLineColor) : (a.lineWidth = this.lineWidth, a.strokeStyle = this.lineColor), g && (a.moveTo(e, this.endPoint), a.lineTo(e, this.startPoint - 3), a.stroke(), a.closePath()), a.lineWidth = this.lineWidth, a.strokeStyle = this.lineColor, a.beginPath(), a.moveTo(e, this.endPoint), a.lineTo(e, this.endPoint + 5), a.stroke(), a.closePath(), a.save(), a.translate(d, f ? this.endPoint + 12 : this.endPoint + 8), a.rotate(-1 * w(this.xLabelRotation)), a.font = this.font, a.textAlign = f ? "right" : "center", a.textBaseline = f ? "middle" : "top", a.fillText(b, 0, 0), a.restore() }, this)) } }), c.RadialScale = c.Element.extend({ initialize: function () { this.size = t([this.height, this.width]), this.drawingArea = this.display ? this.size / 2 - (this.fontSize / 2 + this.backdropPaddingY) : this.size / 2 }, calculateCenterOffset: function (a) { var b = this.drawingArea / (this.max - this.min); return (a - this.min) * b }, update: function () { this.lineArc ? this.drawingArea = this.display ? this.size / 2 - (this.fontSize / 2 + this.backdropPaddingY) : this.size / 2 : this.setScaleSize(), this.buildYLabels() }, buildYLabels: function () { this.yLabels = []; for (var a = v(this.stepValue), b = 0; b <= this.steps; b++) this.yLabels.push(C(this.templateString, { value: (this.min + b * this.stepValue).toFixed(a) })) }, getCircumference: function () { return 2 * Math.PI / this.valuesCount }, setScaleSize: function () { var b, c, d, e, g, h, j, k, l, m, n, o, a = t([this.height / 2 - this.pointLabelFontSize - 5, this.width / 2]), f = this.width, i = 0; for (this.ctx.font = T(this.pointLabelFontSize, this.pointLabelFontStyle, this.pointLabelFontFamily), c = 0; c < this.valuesCount; c++) b = this.getPointPosition(c, a), d = this.ctx.measureText(C(this.templateString, { value: this.labels[c] })).width + 5, 0 === c || c === this.valuesCount / 2 ? (e = d / 2, b.x + e > f && (f = b.x + e, g = c), b.x - e < i && (i = b.x - e, j = c)) : c < this.valuesCount / 2 ? b.x + d > f && (f = b.x + d, g = c) : c > this.valuesCount / 2 && b.x - d < i && (i = b.x - d, j = c); l = i, m = Math.ceil(f - this.width), h = this.getIndexAngle(g), k = this.getIndexAngle(j), n = m / Math.sin(h + Math.PI / 2), o = l / Math.sin(k + Math.PI / 2), n = r(n) ? n : 0, o = r(o) ? o : 0, this.drawingArea = a - (o + n) / 2, this.setCenterPoint(o, n) }, setCenterPoint: function (a, b) { var c = this.width - b - this.drawingArea, d = a + this.drawingArea; this.xCenter = (d + c) / 2, this.yCenter = this.height / 2 }, getIndexAngle: function (a) { return a * (2 * Math.PI / this.valuesCount) - Math.PI / 2 }, getPointPosition: function (a, b) { var c = this.getIndexAngle(a); return { x: Math.cos(c) * b + this.xCenter, y: Math.sin(c) * b + this.yCenter} }, draw: function () { if (this.display) { var a = this.ctx; if (e(this.yLabels, function (b, c) { if (c > 0) { var f, d = c * (this.drawingArea / this.steps), e = this.yCenter - d; if (this.lineWidth > 0) if (a.strokeStyle = this.lineColor, a.lineWidth = this.lineWidth, this.lineArc) a.beginPath(), a.arc(this.xCenter, this.yCenter, d, 0, 2 * Math.PI), a.closePath(), a.stroke(); else { a.beginPath(); for (var g = 0; g < this.valuesCount; g++) f = this.getPointPosition(g, this.calculateCenterOffset(this.min + c * this.stepValue)), 0 === g ? a.moveTo(f.x, f.y) : a.lineTo(f.x, f.y); a.closePath(), a.stroke() } if (this.showLabels) { if (a.font = T(this.fontSize, this.fontStyle, this.fontFamily), this.showLabelBackdrop) { var h = a.measureText(b).width; a.fillStyle = this.backdropColor, a.fillRect(this.xCenter - h / 2 - this.backdropPaddingX, e - this.fontSize / 2 - this.backdropPaddingY, h + 2 * this.backdropPaddingX, this.fontSize + 2 * this.backdropPaddingY) } a.textAlign = "center", a.textBaseline = "middle", a.fillStyle = this.fontColor, a.fillText(b, this.xCenter, e) } } }, this), !this.lineArc) { a.lineWidth = this.angleLineWidth, a.strokeStyle = this.angleLineColor; for (var b = this.valuesCount - 1; b >= 0; b--) { if (this.angleLineWidth > 0) { var c = this.getPointPosition(b, this.calculateCenterOffset(this.max)); a.beginPath(), a.moveTo(this.xCenter, this.yCenter), a.lineTo(c.x, c.y), a.stroke(), a.closePath() } var d = this.getPointPosition(b, this.calculateCenterOffset(this.max) + 5); a.font = T(this.pointLabelFontSize, this.pointLabelFontStyle, this.pointLabelFontFamily), a.fillStyle = this.pointLabelFontColor; var f = this.labels.length, g = this.labels.length / 2, h = g / 2, i = b < h || b > f - h, j = b === h || b === f - h; a.textAlign = 0 === b ? "center" : b === g ? "center" : b < g ? "left" : "right", a.textBaseline = j ? "middle" : i ? "bottom" : "top", a.fillText(this.labels[b], d.x, d.y) } } } } }), c.animationService = { frameDuration: 17, animations: [], dropFrames: 0, addAnimation: function (a, b) { for (var c = 0; c < this.animations.length; ++c) if (this.animations[c].chartInstance === a) return void (this.animations[c].animationObject = b); this.animations.push({ chartInstance: a, animationObject: b }), 1 == this.animations.length && d.requestAnimFrame.call(window, this.digestWrapper) }, cancelAnimation: function (a) { var b = d.findNextWhere(this.animations, function (b) { return b.chartInstance === a }); b && this.animations.splice(b, 1) }, digestWrapper: function () { c.animationService.startDigest.call(c.animationService) }, startDigest: function () { var a = Date.now(), b = 0; this.dropFrames > 1 && (b = Math.floor(this.dropFrames), this.dropFrames -= b); for (var c = 0; c < this.animations.length; c++) null === this.animations[c].animationObject.currentStep && (this.animations[c].animationObject.currentStep = 0), this.animations[c].animationObject.currentStep += 1 + b, this.animations[c].animationObject.currentStep > this.animations[c].animationObject.numSteps && (this.animations[c].animationObject.currentStep = this.animations[c].animationObject.numSteps), this.animations[c].animationObject.render(this.animations[c].chartInstance, this.animations[c].animationObject), this.animations[c].animationObject.currentStep == this.animations[c].animationObject.numSteps && (this.animations.splice(c, 1), c--); var e = Date.now(), f = e - a - this.frameDuration, g = f / this.frameDuration; g > 1 && (this.dropFrames += g), this.animations.length > 0 && d.requestAnimFrame.call(window, this.digestWrapper) } }, d.addEvent(window, "resize", function () { var a; return function () { clearTimeout(a), a = setTimeout(function () { e(c.instances, function (a) { a.options.responsive && a.resize(a.render, !0) }) }, 50) } } ()), q ? define(function () { return c }) : "object" == typeof module && module.exports && (module.exports = c), a.Chart = c, c.noConflict = function () { return a.Chart = b, c } }).call(this);
Chart.Radar.min.js
(function () { "use strict"; var a = this, b = a.Chart, c = b.helpers; b.Type.extend({ name: "Radar", defaults: { scaleShowLine: !0, angleShowLineOut: !0, scaleShowLabels: !1, scaleBeginAtZero: !0, angleLineColor: "rgba(0,0,0,.1)", angleLineWidth: 1, pointLabelFontFamily: "'Arial'", pointLabelFontStyle: "normal", pointLabelFontSize: 10, pointLabelFontColor: "#666", pointDot: !0, pointDotRadius: 3, pointDotStrokeWidth: 1, pointHitDetectionRadius: 20, datasetStroke: !0, datasetStrokeWidth: 2, datasetFill: !0, legendTemplate: '<ul class="<%=name.toLowerCase()%>-legend"><% for (var i=0; i<datasets.length; i++){%><li><span style="background-color:<%=datasets[i].strokeColor%>"><%if(datasets[i].label){%><%=datasets[i].label%><%}%></span></li><%}%></ul>' }, initialize: function (a) { this.PointClass = b.Point.extend({ strokeWidth: this.options.pointDotStrokeWidth, radius: this.options.pointDotRadius, display: this.options.pointDot, hitDetectionRadius: this.options.pointHitDetectionRadius, ctx: this.chart.ctx }), this.datasets = [], this.buildScale(a), this.options.showTooltips && c.bindEvents(this, this.options.tooltipEvents, function (a) { var b = "mouseout" !== a.type ? this.getPointsAtEvent(a) : []; this.eachPoints(function (a) { a.restore(["fillColor", "strokeColor"]) }), c.each(b, function (a) { a.fillColor = a.highlightFill, a.strokeColor = a.highlightStroke }), this.showTooltip(b) }), c.each(a.datasets, function (b) { var d = { label: b.label || null, fillColor: b.fillColor, strokeColor: b.strokeColor, pointColor: b.pointColor, pointStrokeColor: b.pointStrokeColor, points: [] }; this.datasets.push(d), c.each(b.data, function (c, e) { var f; this.scale.animation || (f = this.scale.getPointPosition(e, this.scale.calculateCenterOffset(c))), d.points.push(new this.PointClass({ value: c, label: a.labels[e], datasetLabel: b.label, x: this.options.animation ? this.scale.xCenter : f.x, y: this.options.animation ? this.scale.yCenter : f.y, strokeColor: b.pointStrokeColor, fillColor: b.pointColor, highlightFill: b.pointHighlightFill || b.pointColor, highlightStroke: b.pointHighlightStroke || b.pointStrokeColor })) }, this) }, this), this.render() }, eachPoints: function (a) { c.each(this.datasets, function (b) { c.each(b.points, a, this) }, this) }, getPointsAtEvent: function (a) { var b = c.getRelativePosition(a), d = c.getAngleFromPoint({ x: this.scale.xCenter, y: this.scale.yCenter }, b), e = 2 * Math.PI / this.scale.valuesCount, f = Math.round((d.angle - 1.5 * Math.PI) / e), g = []; return (f >= this.scale.valuesCount || f < 0) && (f = 0), d.distance <= this.scale.drawingArea && c.each(this.datasets, function (a) { g.push(a.points[f]) }), g }, buildScale: function (a) { this.scale = new b.RadialScale({ display: this.options.showScale, fontStyle: this.options.scaleFontStyle, fontSize: this.options.scaleFontSize, fontFamily: this.options.scaleFontFamily, fontColor: this.options.scaleFontColor, showLabels: this.options.scaleShowLabels, showLabelBackdrop: this.options.scaleShowLabelBackdrop, backdropColor: this.options.scaleBackdropColor, backdropPaddingY: this.options.scaleBackdropPaddingY, backdropPaddingX: this.options.scaleBackdropPaddingX, lineWidth: this.options.scaleShowLine ? this.options.scaleLineWidth : 0, lineColor: this.options.scaleLineColor, angleLineColor: this.options.angleLineColor, angleLineWidth: this.options.angleShowLineOut ? this.options.angleLineWidth : 0, pointLabelFontColor: this.options.pointLabelFontColor, pointLabelFontSize: this.options.pointLabelFontSize, pointLabelFontFamily: this.options.pointLabelFontFamily, pointLabelFontStyle: this.options.pointLabelFontStyle, height: this.chart.height, width: this.chart.width, xCenter: this.chart.width / 2, yCenter: this.chart.height / 2, ctx: this.chart.ctx, templateString: this.options.scaleLabel, labels: a.labels, valuesCount: a.datasets[0].data.length }), this.scale.setScaleSize(), this.updateScaleRange(a.datasets), this.scale.buildYLabels() }, updateScaleRange: function (a) { var b = function () { var b = []; return c.each(a, function (a) { a.data ? b = b.concat(a.data) : c.each(a.points, function (a) { b.push(a.value) }) }), b } (), d = this.options.scaleOverride ? { steps: this.options.scaleSteps, stepValue: this.options.scaleStepWidth, min: this.options.scaleStartValue, max: this.options.scaleStartValue + this.options.scaleSteps * this.options.scaleStepWidth} : c.calculateScaleRange(b, c.min([this.chart.width, this.chart.height]) / 2, this.options.scaleFontSize, this.options.scaleBeginAtZero, this.options.scaleIntegersOnly); c.extend(this.scale, d) }, addData: function (a, b) { this.scale.valuesCount++, c.each(a, function (a, c) { var d = this.scale.getPointPosition(this.scale.valuesCount, this.scale.calculateCenterOffset(a)); this.datasets[c].points.push(new this.PointClass({ value: a, label: b, datasetLabel: this.datasets[c].label, x: d.x, y: d.y, strokeColor: this.datasets[c].pointStrokeColor, fillColor: this.datasets[c].pointColor })) }, this), this.scale.labels.push(b), this.reflow(), this.update() }, removeData: function () { this.scale.valuesCount--, this.scale.labels.shift(), c.each(this.datasets, function (a) { a.points.shift() }, this), this.reflow(), this.update() }, update: function () { this.eachPoints(function (a) { a.save() }), this.reflow(), this.render() }, reflow: function () { c.extend(this.scale, { width: this.chart.width, height: this.chart.height, size: c.min([this.chart.width, this.chart.height]), xCenter: this.chart.width / 2, yCenter: this.chart.height / 2 }), this.updateScaleRange(this.datasets), this.scale.setScaleSize(), this.scale.buildYLabels() }, draw: function (a) { var b = a || 1, d = this.chart.ctx; this.clear(), this.scale.draw(), c.each(this.datasets, function (a) { c.each(a.points, function (a, c) { a.hasValue() && a.transition(this.scale.getPointPosition(c, this.scale.calculateCenterOffset(a.value)), b) }, this), d.lineWidth = this.options.datasetStrokeWidth, d.strokeStyle = a.strokeColor, d.beginPath(), c.each(a.points, function (a, b) { 0 === b ? d.moveTo(a.x, a.y) : d.lineTo(a.x, a.y) }, this), d.closePath(), d.stroke(), d.fillStyle = a.fillColor, this.options.datasetFill && d.fill(), c.each(a.points, function (a) { a.hasValue() && a.draw() }) }, this) } }) }).call(this);