diff --git a/dist/gauge.coffee b/dist/gauge.coffee index 8c7d781..51ce806 100644 --- a/dist/gauge.coffee +++ b/dist/gauge.coffee @@ -333,21 +333,28 @@ class Gauge extends BaseGauge for i in [0...(value.length - @gp.length)] @gp.push(new GaugePointer(@)) - # get max value and update pointer(s) + # get max and min values and update pointer(s) i = 0 max_hit = false + min_hit = false for val in value if val > @maxValue - @maxValue = @value * 1.1 + @maxValue = val max_hit = true + if val < @minValue + @minValue = val + min_hit = true + @gp[i].setOptions({maxValue: @maxValue, minValue: @minValue, angle: @options.angle}) @gp[i].value = val - @gp[i++].setOptions({maxValue: @maxValue, angle: @options.angle}) @value = value[value.length - 1] # TODO: Span maybe?? if max_hit unless @options.limitMax AnimationUpdater.run() + else if min_hit + unless @options.limitMin + AnimationUpdater.run() else AnimationUpdater.run() diff --git a/dist/gauge.js b/dist/gauge.js index f5b5e4a..bfc7596 100644 --- a/dist/gauge.js +++ b/dist/gauge.js @@ -1,774 +1,788 @@ -// Generated by CoffeeScript 1.6.3 +// Generated by CoffeeScript 1.4.0 +var AnimatedText, AnimatedTextFactory, Bar, BaseDonut, BaseGauge, Donut, Gauge, GaugePointer, TextRenderer, ValueUpdater, addCommas, cutHex, formatNumber, mergeObjects, secondsToString, updateObjectValues, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + (function() { - var AnimatedText, AnimatedTextFactory, Bar, BaseDonut, BaseGauge, Donut, Gauge, GaugePointer, TextRenderer, ValueUpdater, addCommas, cutHex, formatNumber, mergeObjects, secondsToString, updateObjectValues, _ref, _ref1, - __hasProp = {}.hasOwnProperty, - __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; - - (function() { - var browserRequestAnimationFrame, isCancelled, lastId, vendor, vendors, _i, _len; - vendors = ['ms', 'moz', 'webkit', 'o']; - for (_i = 0, _len = vendors.length; _i < _len; _i++) { - vendor = vendors[_i]; - if (window.requestAnimationFrame) { - break; - } - window.requestAnimationFrame = window[vendor + 'RequestAnimationFrame']; - window.cancelAnimationFrame = window[vendor + 'CancelAnimationFrame'] || window[vendor + 'CancelRequestAnimationFrame']; - } - browserRequestAnimationFrame = null; - lastId = 0; - isCancelled = {}; - if (!requestAnimationFrame) { - window.requestAnimationFrame = function(callback, element) { - var currTime, id, lastTime, timeToCall; - currTime = new Date().getTime(); - timeToCall = Math.max(0, 16 - (currTime - lastTime)); - id = window.setTimeout(function() { - return callback(currTime + timeToCall); - }, timeToCall); - lastTime = currTime + timeToCall; - return id; - }; - return window.cancelAnimationFrame = function(id) { - return clearTimeout(id); - }; - } else if (!window.cancelAnimationFrame) { - browserRequestAnimationFrame = window.requestAnimationFrame; - window.requestAnimationFrame = function(callback, element) { - var myId; - myId = ++lastId; - browserRequestAnimationFrame(function() { - if (!isCancelled[myId]) { - return callback(); - } - }, element); - return myId; - }; - return window.cancelAnimationFrame = function(id) { - return isCancelled[id] = true; - }; - } - })(); - - String.prototype.hashCode = function() { - var char, hash, i, _i, _ref; - hash = 0; - if (this.length === 0) { - return hash; - } - for (i = _i = 0, _ref = this.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) { - char = this.charCodeAt(i); - hash = ((hash << 5) - hash) + char; - hash = hash & hash; + var browserRequestAnimationFrame, isCancelled, lastId, vendor, vendors, _i, _len; + vendors = ['ms', 'moz', 'webkit', 'o']; + for (_i = 0, _len = vendors.length; _i < _len; _i++) { + vendor = vendors[_i]; + if (window.requestAnimationFrame) { + break; } + window.requestAnimationFrame = window[vendor + 'RequestAnimationFrame']; + window.cancelAnimationFrame = window[vendor + 'CancelAnimationFrame'] || window[vendor + 'CancelRequestAnimationFrame']; + } + browserRequestAnimationFrame = null; + lastId = 0; + isCancelled = {}; + if (!requestAnimationFrame) { + window.requestAnimationFrame = function(callback, element) { + var currTime, id, lastTime, timeToCall; + currTime = new Date().getTime(); + timeToCall = Math.max(0, 16 - (currTime - lastTime)); + id = window.setTimeout(function() { + return callback(currTime + timeToCall); + }, timeToCall); + lastTime = currTime + timeToCall; + return id; + }; + return window.cancelAnimationFrame = function(id) { + return clearTimeout(id); + }; + } else if (!window.cancelAnimationFrame) { + browserRequestAnimationFrame = window.requestAnimationFrame; + window.requestAnimationFrame = function(callback, element) { + var myId; + myId = ++lastId; + browserRequestAnimationFrame(function() { + if (!isCancelled[myId]) { + return callback(); + } + }, element); + return myId; + }; + return window.cancelAnimationFrame = function(id) { + return isCancelled[id] = true; + }; + } +})(); + +String.prototype.hashCode = function() { + var char, hash, i, _i, _ref; + hash = 0; + if (this.length === 0) { return hash; - }; + } + for (i = _i = 0, _ref = this.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) { + char = this.charCodeAt(i); + hash = ((hash << 5) - hash) + char; + hash = hash & hash; + } + return hash; +}; + +secondsToString = function(sec) { + var hr, min; + hr = Math.floor(sec / 3600); + min = Math.floor((sec - (hr * 3600)) / 60); + sec -= (hr * 3600) + (min * 60); + sec += ''; + min += ''; + while (min.length < 2) { + min = '0' + min; + } + while (sec.length < 2) { + sec = '0' + sec; + } + hr = hr ? hr + ':' : ''; + return hr + min + ':' + sec; +}; + +formatNumber = function(num) { + return addCommas(num.toFixed(0)); +}; + +updateObjectValues = function(obj1, obj2) { + var key, val; + for (key in obj2) { + if (!__hasProp.call(obj2, key)) continue; + val = obj2[key]; + obj1[key] = val; + } + return obj1; +}; + +mergeObjects = function(obj1, obj2) { + var key, out, val; + out = {}; + for (key in obj1) { + if (!__hasProp.call(obj1, key)) continue; + val = obj1[key]; + out[key] = val; + } + for (key in obj2) { + if (!__hasProp.call(obj2, key)) continue; + val = obj2[key]; + out[key] = val; + } + return out; +}; + +addCommas = function(nStr) { + var rgx, x, x1, x2; + nStr += ''; + x = nStr.split('.'); + x1 = x[0]; + x2 = ''; + if (x.length > 1) { + x2 = '.' + x[1]; + } + rgx = /(\d+)(\d{3})/; + while (rgx.test(x1)) { + x1 = x1.replace(rgx, '$1' + ',' + '$2'); + } + return x1 + x2; +}; + +cutHex = function(nStr) { + if (nStr.charAt(0) === "#") { + return nStr.substring(1, 7); + } + return nStr; +}; + +ValueUpdater = (function() { + + ValueUpdater.prototype.animationSpeed = 32; + + function ValueUpdater(addToAnimationQueue, clear) { + if (addToAnimationQueue == null) { + addToAnimationQueue = true; + } + this.clear = clear != null ? clear : true; + if (addToAnimationQueue) { + AnimationUpdater.add(this); + } + } - secondsToString = function(sec) { - var hr, min; - hr = Math.floor(sec / 3600); - min = Math.floor((sec - (hr * 3600)) / 60); - sec -= (hr * 3600) + (min * 60); - sec += ''; - min += ''; - while (min.length < 2) { - min = '0' + min; - } - while (sec.length < 2) { - sec = '0' + sec; - } - hr = hr ? hr + ':' : ''; - return hr + min + ':' + sec; + ValueUpdater.prototype.update = function(force) { + var diff; + if (force == null) { + force = false; + } + if (force || this.displayedValue !== this.value) { + if (this.ctx && this.clear) { + this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); + } + diff = this.value - this.displayedValue; + if (Math.abs(diff / this.animationSpeed) <= 0.001) { + this.displayedValue = this.value; + } else { + this.displayedValue = this.displayedValue + diff / this.animationSpeed; + } + this.render(); + return true; + } + return false; }; - formatNumber = function(num) { - return addCommas(num.toFixed(0)); - }; + return ValueUpdater; - updateObjectValues = function(obj1, obj2) { - var key, val; - for (key in obj2) { - if (!__hasProp.call(obj2, key)) continue; - val = obj2[key]; - obj1[key] = val; - } - return obj1; +})(); + +BaseGauge = (function(_super) { + + __extends(BaseGauge, _super); + + function BaseGauge() { + return BaseGauge.__super__.constructor.apply(this, arguments); + } + + BaseGauge.prototype.displayScale = 1; + + BaseGauge.prototype.setTextField = function(textField) { + return this.textField = textField instanceof TextRenderer ? textField : new TextRenderer(textField); }; - mergeObjects = function(obj1, obj2) { - var key, out, val; - out = {}; - for (key in obj1) { - if (!__hasProp.call(obj1, key)) continue; - val = obj1[key]; - out[key] = val; + BaseGauge.prototype.setMinValue = function(minValue, updateStartValue) { + var gauge, _i, _len, _ref, _results; + this.minValue = minValue; + if (updateStartValue == null) { + updateStartValue = true; } - for (key in obj2) { - if (!__hasProp.call(obj2, key)) continue; - val = obj2[key]; - out[key] = val; + if (updateStartValue) { + this.displayedValue = this.minValue; + _ref = this.gp || []; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + gauge = _ref[_i]; + _results.push(gauge.displayedValue = this.minValue); + } + return _results; } - return out; }; - addCommas = function(nStr) { - var rgx, x, x1, x2; - nStr += ''; - x = nStr.split('.'); - x1 = x[0]; - x2 = ''; - if (x.length > 1) { - x2 = '.' + x[1]; + BaseGauge.prototype.setOptions = function(options) { + if (options == null) { + options = null; + } + this.options = mergeObjects(this.options, options); + if (this.textField) { + this.textField.el.style.fontSize = options.fontSize + 'px'; } - rgx = /(\d+)(\d{3})/; - while (rgx.test(x1)) { - x1 = x1.replace(rgx, '$1' + ',' + '$2'); + if (this.options.angle > .5) { + this.gauge.options.angle = .5; } - return x1 + x2; + this.configDisplayScale(); + return this; }; - cutHex = function(nStr) { - if (nStr.charAt(0) === "#") { - return nStr.substring(1, 7); + BaseGauge.prototype.configDisplayScale = function() { + var backingStorePixelRatio, devicePixelRatio, height, prevDisplayScale, width; + prevDisplayScale = this.displayScale; + if (this.options.highDpiSupport === false) { + delete this.displayScale; + } else { + devicePixelRatio = window.devicePixelRatio || 1; + backingStorePixelRatio = this.ctx.webkitBackingStorePixelRatio || this.ctx.mozBackingStorePixelRatio || this.ctx.msBackingStorePixelRatio || this.ctx.oBackingStorePixelRatio || this.ctx.backingStorePixelRatio || 1; + this.displayScale = devicePixelRatio / backingStorePixelRatio; } - return nStr; + if (this.displayScale !== prevDisplayScale) { + width = this.canvas.G__width || this.canvas.width; + height = this.canvas.G__height || this.canvas.height; + this.canvas.width = width * this.displayScale; + this.canvas.height = height * this.displayScale; + this.canvas.style.width = "" + width + "px"; + this.canvas.style.height = "" + height + "px"; + this.canvas.G__width = width; + this.canvas.G__height = height; + } + return this; }; - ValueUpdater = (function() { - ValueUpdater.prototype.animationSpeed = 32; + return BaseGauge; - function ValueUpdater(addToAnimationQueue, clear) { - if (addToAnimationQueue == null) { - addToAnimationQueue = true; - } - this.clear = clear != null ? clear : true; - if (addToAnimationQueue) { - AnimationUpdater.add(this); - } - } +})(ValueUpdater); - ValueUpdater.prototype.update = function(force) { - var diff; - if (force == null) { - force = false; - } - if (force || this.displayedValue !== this.value) { - if (this.ctx && this.clear) { - this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); - } - diff = this.value - this.displayedValue; - if (Math.abs(diff / this.animationSpeed) <= 0.001) { - this.displayedValue = this.value; - } else { - this.displayedValue = this.displayedValue + diff / this.animationSpeed; - } - this.render(); - return true; - } - return false; - }; +TextRenderer = (function() { - return ValueUpdater; + function TextRenderer(el) { + this.el = el; + } - })(); + TextRenderer.prototype.render = function(gauge) { + return this.el.innerHTML = formatNumber(gauge.displayedValue); + }; - BaseGauge = (function(_super) { - __extends(BaseGauge, _super); + return TextRenderer; - function BaseGauge() { - _ref = BaseGauge.__super__.constructor.apply(this, arguments); - return _ref; - } +})(); - BaseGauge.prototype.displayScale = 1; +AnimatedText = (function(_super) { - BaseGauge.prototype.setTextField = function(textField) { - return this.textField = textField instanceof TextRenderer ? textField : new TextRenderer(textField); - }; + __extends(AnimatedText, _super); - BaseGauge.prototype.setMinValue = function(minValue, updateStartValue) { - var gauge, _i, _len, _ref1, _results; - this.minValue = minValue; - if (updateStartValue == null) { - updateStartValue = true; - } - if (updateStartValue) { - this.displayedValue = this.minValue; - _ref1 = this.gp || []; - _results = []; - for (_i = 0, _len = _ref1.length; _i < _len; _i++) { - gauge = _ref1[_i]; - _results.push(gauge.displayedValue = this.minValue); - } - return _results; - } - }; + AnimatedText.prototype.displayedValue = 0; - BaseGauge.prototype.setOptions = function(options) { - if (options == null) { - options = null; - } - this.options = mergeObjects(this.options, options); - if (this.textField) { - this.textField.el.style.fontSize = options.fontSize + 'px'; - } - if (this.options.angle > .5) { - this.gauge.options.angle = .5; - } - this.configDisplayScale(); - return this; - }; - - BaseGauge.prototype.configDisplayScale = function() { - var backingStorePixelRatio, devicePixelRatio, height, prevDisplayScale, width; - prevDisplayScale = this.displayScale; - if (this.options.highDpiSupport === false) { - delete this.displayScale; - } else { - devicePixelRatio = window.devicePixelRatio || 1; - backingStorePixelRatio = this.ctx.webkitBackingStorePixelRatio || this.ctx.mozBackingStorePixelRatio || this.ctx.msBackingStorePixelRatio || this.ctx.oBackingStorePixelRatio || this.ctx.backingStorePixelRatio || 1; - this.displayScale = devicePixelRatio / backingStorePixelRatio; - } - if (this.displayScale !== prevDisplayScale) { - width = this.canvas.G__width || this.canvas.width; - height = this.canvas.G__height || this.canvas.height; - this.canvas.width = width * this.displayScale; - this.canvas.height = height * this.displayScale; - this.canvas.style.width = "" + width + "px"; - this.canvas.style.height = "" + height + "px"; - this.canvas.G__width = width; - this.canvas.G__height = height; - } - return this; - }; - - return BaseGauge; + AnimatedText.prototype.value = 0; - })(ValueUpdater); + AnimatedText.prototype.setVal = function(value) { + return this.value = 1 * value; + }; - TextRenderer = (function() { - function TextRenderer(el) { - this.el = el; + function AnimatedText(elem, text) { + this.elem = elem; + this.text = text != null ? text : false; + this.value = 1 * this.elem.innerHTML; + if (this.text) { + this.value = 0; } + } + + AnimatedText.prototype.render = function() { + var textVal; + if (this.text) { + textVal = secondsToString(this.displayedValue.toFixed(0)); + } else { + textVal = addCommas(formatNumber(this.displayedValue)); + } + return this.elem.innerHTML = textVal; + }; - TextRenderer.prototype.render = function(gauge) { - return this.el.innerHTML = formatNumber(gauge.displayedValue); - }; - - return TextRenderer; - - })(); + return AnimatedText; - AnimatedText = (function(_super) { - __extends(AnimatedText, _super); +})(ValueUpdater); - AnimatedText.prototype.displayedValue = 0; +AnimatedTextFactory = { + create: function(objList) { + var elem, out, _i, _len; + out = []; + for (_i = 0, _len = objList.length; _i < _len; _i++) { + elem = objList[_i]; + out.push(new AnimatedText(elem)); + } + return out; + } +}; - AnimatedText.prototype.value = 0; +GaugePointer = (function(_super) { - AnimatedText.prototype.setVal = function(value) { - return this.value = 1 * value; - }; + __extends(GaugePointer, _super); - function AnimatedText(elem, text) { - this.elem = elem; - this.text = text != null ? text : false; - this.value = 1 * this.elem.innerHTML; - if (this.text) { - this.value = 0; - } - } - - AnimatedText.prototype.render = function() { - var textVal; - if (this.text) { - textVal = secondsToString(this.displayedValue.toFixed(0)); - } else { - textVal = addCommas(formatNumber(this.displayedValue)); - } - return this.elem.innerHTML = textVal; - }; + GaugePointer.prototype.displayedValue = 0; - return AnimatedText; + GaugePointer.prototype.value = 0; - })(ValueUpdater); + GaugePointer.prototype.options = { + strokeWidth: 0.035, + length: 0.1, + color: "#000000" + }; - AnimatedTextFactory = { - create: function(objList) { - var elem, out, _i, _len; - out = []; - for (_i = 0, _len = objList.length; _i < _len; _i++) { - elem = objList[_i]; - out.push(new AnimatedText(elem)); - } - return out; + function GaugePointer(gauge) { + this.gauge = gauge; + this.ctx = this.gauge.ctx; + this.canvas = this.gauge.canvas; + GaugePointer.__super__.constructor.call(this, false, false); + this.setOptions(); + } + + GaugePointer.prototype.setOptions = function(options) { + if (options == null) { + options = null; } + updateObjectValues(this.options, options); + this.length = this.canvas.height * this.options.length; + this.strokeWidth = this.canvas.height * this.options.strokeWidth; + this.maxValue = this.gauge.maxValue; + this.minValue = this.gauge.minValue; + this.animationSpeed = this.gauge.animationSpeed; + return this.options.angle = this.gauge.options.angle; }; - GaugePointer = (function(_super) { - __extends(GaugePointer, _super); - - GaugePointer.prototype.displayedValue = 0; - - GaugePointer.prototype.value = 0; - - GaugePointer.prototype.options = { - strokeWidth: 0.035, - length: 0.1, - color: "#000000" - }; + GaugePointer.prototype.render = function() { + var angle, centerX, centerY, endX, endY, startX, startY, x, y; + angle = this.gauge.getAngle.call(this, this.displayedValue); + centerX = this.canvas.width / 2; + centerY = this.canvas.height * 0.9; + x = Math.round(centerX + this.length * Math.cos(angle)); + y = Math.round(centerY + this.length * Math.sin(angle)); + startX = Math.round(centerX + this.strokeWidth * Math.cos(angle - Math.PI / 2)); + startY = Math.round(centerY + this.strokeWidth * Math.sin(angle - Math.PI / 2)); + endX = Math.round(centerX + this.strokeWidth * Math.cos(angle + Math.PI / 2)); + endY = Math.round(centerY + this.strokeWidth * Math.sin(angle + Math.PI / 2)); + this.ctx.fillStyle = this.options.color; + this.ctx.beginPath(); + this.ctx.arc(centerX, centerY, this.strokeWidth, 0, Math.PI * 2, true); + this.ctx.fill(); + this.ctx.beginPath(); + this.ctx.moveTo(startX, startY); + this.ctx.lineTo(x, y); + this.ctx.lineTo(endX, endY); + return this.ctx.fill(); + }; - function GaugePointer(gauge) { - this.gauge = gauge; - this.ctx = this.gauge.ctx; - this.canvas = this.gauge.canvas; - GaugePointer.__super__.constructor.call(this, false, false); - this.setOptions(); - } + return GaugePointer; - GaugePointer.prototype.setOptions = function(options) { - if (options == null) { - options = null; - } - updateObjectValues(this.options, options); - this.length = this.canvas.height * this.options.length; - this.strokeWidth = this.canvas.height * this.options.strokeWidth; - this.maxValue = this.gauge.maxValue; - this.minValue = this.gauge.minValue; - this.animationSpeed = this.gauge.animationSpeed; - return this.options.angle = this.gauge.options.angle; - }; +})(ValueUpdater); - GaugePointer.prototype.render = function() { - var angle, centerX, centerY, endX, endY, startX, startY, x, y; - angle = this.gauge.getAngle.call(this, this.displayedValue); - centerX = this.canvas.width / 2; - centerY = this.canvas.height * 0.9; - x = Math.round(centerX + this.length * Math.cos(angle)); - y = Math.round(centerY + this.length * Math.sin(angle)); - startX = Math.round(centerX + this.strokeWidth * Math.cos(angle - Math.PI / 2)); - startY = Math.round(centerY + this.strokeWidth * Math.sin(angle - Math.PI / 2)); - endX = Math.round(centerX + this.strokeWidth * Math.cos(angle + Math.PI / 2)); - endY = Math.round(centerY + this.strokeWidth * Math.sin(angle + Math.PI / 2)); - this.ctx.fillStyle = this.options.color; - this.ctx.beginPath(); - this.ctx.arc(centerX, centerY, this.strokeWidth, 0, Math.PI * 2, true); - this.ctx.fill(); - this.ctx.beginPath(); - this.ctx.moveTo(startX, startY); - this.ctx.lineTo(x, y); - this.ctx.lineTo(endX, endY); - return this.ctx.fill(); - }; +Bar = (function() { - return GaugePointer; + function Bar(elem) { + this.elem = elem; + } - })(ValueUpdater); + Bar.prototype.updateValues = function(arrValues) { + this.value = arrValues[0]; + this.maxValue = arrValues[1]; + this.avgValue = arrValues[2]; + return this.render(); + }; - Bar = (function() { - function Bar(elem) { - this.elem = elem; + Bar.prototype.render = function() { + var avgPercent, valPercent; + if (this.textField) { + this.textField.text(formatNumber(this.value)); + } + if (this.maxValue === 0) { + this.maxValue = this.avgValue * 2; } + valPercent = (this.value / this.maxValue) * 100; + avgPercent = (this.avgValue / this.maxValue) * 100; + $(".bar-value", this.elem).css({ + "width": valPercent + "%" + }); + return $(".typical-value", this.elem).css({ + "width": avgPercent + "%" + }); + }; - Bar.prototype.updateValues = function(arrValues) { - this.value = arrValues[0]; - this.maxValue = arrValues[1]; - this.avgValue = arrValues[2]; - return this.render(); - }; + return Bar; - Bar.prototype.render = function() { - var avgPercent, valPercent; - if (this.textField) { - this.textField.text(formatNumber(this.value)); - } - if (this.maxValue === 0) { - this.maxValue = this.avgValue * 2; - } - valPercent = (this.value / this.maxValue) * 100; - avgPercent = (this.avgValue / this.maxValue) * 100; - $(".bar-value", this.elem).css({ - "width": valPercent + "%" - }); - return $(".typical-value", this.elem).css({ - "width": avgPercent + "%" - }); - }; +})(); - return Bar; +Gauge = (function(_super) { - })(); + __extends(Gauge, _super); - Gauge = (function(_super) { - __extends(Gauge, _super); + Gauge.prototype.elem = null; - Gauge.prototype.elem = null; + Gauge.prototype.value = [20]; - Gauge.prototype.value = [20]; + Gauge.prototype.maxValue = 80; - Gauge.prototype.maxValue = 80; + Gauge.prototype.minValue = 0; - Gauge.prototype.minValue = 0; + Gauge.prototype.displayedAngle = 0; - Gauge.prototype.displayedAngle = 0; + Gauge.prototype.displayedValue = 0; - Gauge.prototype.displayedValue = 0; + Gauge.prototype.lineWidth = 40; - Gauge.prototype.lineWidth = 40; + Gauge.prototype.paddingBottom = 0.1; - Gauge.prototype.paddingBottom = 0.1; + Gauge.prototype.percentColors = null; - Gauge.prototype.percentColors = null; - - Gauge.prototype.options = { - colorStart: "#6fadcf", - colorStop: void 0, - gradientType: 0, - strokeColor: "#e0e0e0", - pointer: { - length: 0.8, - strokeWidth: 0.035 - }, - angle: 0.15, - lineWidth: 0.44, - fontSize: 40, - limitMax: false, - percentColors: [[0.0, "#a9d70b"], [0.50, "#f9c802"], [1.0, "#ff0000"]] - }; + Gauge.prototype.options = { + colorStart: "#6fadcf", + colorStop: void 0, + gradientType: 0, + strokeColor: "#e0e0e0", + pointer: { + length: 0.8, + strokeWidth: 0.035 + }, + angle: 0.15, + lineWidth: 0.44, + fontSize: 40, + limitMax: false, + percentColors: [[0.0, "#a9d70b"], [0.50, "#f9c802"], [1.0, "#ff0000"]] + }; - function Gauge(canvas) { - this.canvas = canvas; - Gauge.__super__.constructor.call(this); - this.percentColors = null; - if (typeof G_vmlCanvasManager !== 'undefined') { - this.canvas = window.G_vmlCanvasManager.initElement(this.canvas); - } - this.ctx = this.canvas.getContext('2d'); - this.gp = [new GaugePointer(this)]; - this.setOptions(); - this.render(); + function Gauge(canvas) { + this.canvas = canvas; + Gauge.__super__.constructor.call(this); + this.percentColors = null; + if (typeof G_vmlCanvasManager !== 'undefined') { + this.canvas = window.G_vmlCanvasManager.initElement(this.canvas); } + this.ctx = this.canvas.getContext('2d'); + this.gp = [new GaugePointer(this)]; + this.setOptions(); + this.render(); + } + + Gauge.prototype.setOptions = function(options) { + var gauge, _i, _len, _ref; + if (options == null) { + options = null; + } + Gauge.__super__.setOptions.call(this, options); + this.configPercentColors(); + this.lineWidth = this.canvas.height * (1 - this.paddingBottom) * this.options.lineWidth; + this.radius = this.canvas.height * (1 - this.paddingBottom) - this.lineWidth; + this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); + this.render(); + _ref = this.gp; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + gauge = _ref[_i]; + gauge.setOptions(this.options.pointer); + gauge.render(); + } + return this; + }; - Gauge.prototype.setOptions = function(options) { - var gauge, _i, _len, _ref1; - if (options == null) { - options = null; - } - Gauge.__super__.setOptions.call(this, options); - this.configPercentColors(); - this.lineWidth = this.canvas.height * (1 - this.paddingBottom) * this.options.lineWidth; - this.radius = this.canvas.height * (1 - this.paddingBottom) - this.lineWidth; - this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); - this.render(); - _ref1 = this.gp; - for (_i = 0, _len = _ref1.length; _i < _len; _i++) { - gauge = _ref1[_i]; - gauge.setOptions(this.options.pointer); - gauge.render(); - } - return this; - }; - - Gauge.prototype.configPercentColors = function() { - var bval, gval, i, rval, _i, _ref1, _results; - this.percentColors = null; - if (this.options.percentColors !== void 0) { - this.percentColors = new Array(); - _results = []; - for (i = _i = 0, _ref1 = this.options.percentColors.length - 1; 0 <= _ref1 ? _i <= _ref1 : _i >= _ref1; i = 0 <= _ref1 ? ++_i : --_i) { - rval = parseInt((cutHex(this.options.percentColors[i][1])).substring(0, 2), 16); - gval = parseInt((cutHex(this.options.percentColors[i][1])).substring(2, 4), 16); - bval = parseInt((cutHex(this.options.percentColors[i][1])).substring(4, 6), 16); - _results.push(this.percentColors[i] = { - pct: this.options.percentColors[i][0], - color: { - r: rval, - g: gval, - b: bval - } - }); - } - return _results; + Gauge.prototype.configPercentColors = function() { + var bval, gval, i, rval, _i, _ref, _results; + this.percentColors = null; + if (this.options.percentColors !== void 0) { + this.percentColors = new Array(); + _results = []; + for (i = _i = 0, _ref = this.options.percentColors.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) { + rval = parseInt((cutHex(this.options.percentColors[i][1])).substring(0, 2), 16); + gval = parseInt((cutHex(this.options.percentColors[i][1])).substring(2, 4), 16); + bval = parseInt((cutHex(this.options.percentColors[i][1])).substring(4, 6), 16); + _results.push(this.percentColors[i] = { + pct: this.options.percentColors[i][0], + color: { + r: rval, + g: gval, + b: bval + } + }); } - }; + return _results; + } + }; - Gauge.prototype.set = function(value) { - var i, max_hit, val, _i, _j, _len, _ref1; - if (!(value instanceof Array)) { - value = [value]; - } - if (value.length > this.gp.length) { - for (i = _i = 0, _ref1 = value.length - this.gp.length; 0 <= _ref1 ? _i < _ref1 : _i > _ref1; i = 0 <= _ref1 ? ++_i : --_i) { - this.gp.push(new GaugePointer(this)); - } + Gauge.prototype.set = function(value) { + var i, max_hit, min_hit, val, _i, _j, _len, _ref; + if (!(value instanceof Array)) { + value = [value]; + } + if (value.length > this.gp.length) { + for (i = _i = 0, _ref = value.length - this.gp.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) { + this.gp.push(new GaugePointer(this)); } - i = 0; - max_hit = false; - for (_j = 0, _len = value.length; _j < _len; _j++) { - val = value[_j]; - if (val > this.maxValue) { - this.maxValue = this.value * 1.1; - max_hit = true; - } - this.gp[i].value = val; - this.gp[i++].setOptions({ - maxValue: this.maxValue, - angle: this.options.angle - }); + } + i = 0; + max_hit = false; + min_hit = false; + for (_j = 0, _len = value.length; _j < _len; _j++) { + val = value[_j]; + if (val > this.maxValue) { + this.maxValue = val; + max_hit = true; + } + if (val < this.minValue) { + this.minValue = val; + min_hit = true; + } + this.gp[i].setOptions({ + maxValue: this.maxValue, + minValue: this.minValue, + angle: this.options.angle + }); + this.gp[i].value = val; + } + this.value = value[value.length - 1]; + if (max_hit) { + if (!this.options.limitMax) { + return AnimationUpdater.run(); } - this.value = value[value.length - 1]; - if (max_hit) { - if (!this.options.limitMax) { - return AnimationUpdater.run(); - } - } else { + } else if (min_hit) { + if (!this.options.limitMin) { return AnimationUpdater.run(); } - }; + } else { + return AnimationUpdater.run(); + } + }; - Gauge.prototype.getAngle = function(value) { - return (1 + this.options.angle) * Math.PI + ((value - this.minValue) / (this.maxValue - this.minValue)) * (1 - this.options.angle * 2) * Math.PI; - }; + Gauge.prototype.getAngle = function(value) { + return (1 + this.options.angle) * Math.PI + ((value - this.minValue) / (this.maxValue - this.minValue)) * (1 - this.options.angle * 2) * Math.PI; + }; - Gauge.prototype.getColorForPercentage = function(pct, grad) { - var color, endColor, i, rangePct, startColor, _i, _ref1; - if (pct === 0) { - color = this.percentColors[0].color; - } else { - color = this.percentColors[this.percentColors.length - 1].color; - for (i = _i = 0, _ref1 = this.percentColors.length - 1; 0 <= _ref1 ? _i <= _ref1 : _i >= _ref1; i = 0 <= _ref1 ? ++_i : --_i) { - if (pct <= this.percentColors[i].pct) { - if (grad === true) { - startColor = this.percentColors[i - 1]; - endColor = this.percentColors[i]; - rangePct = (pct - startColor.pct) / (endColor.pct - startColor.pct); - color = { - r: Math.floor(startColor.color.r * (1 - rangePct) + endColor.color.r * rangePct), - g: Math.floor(startColor.color.g * (1 - rangePct) + endColor.color.g * rangePct), - b: Math.floor(startColor.color.b * (1 - rangePct) + endColor.color.b * rangePct) - }; - } else { - color = this.percentColors[i].color; - } - break; + Gauge.prototype.getColorForPercentage = function(pct, grad) { + var color, endColor, i, rangePct, startColor, _i, _ref; + if (pct === 0) { + color = this.percentColors[0].color; + } else { + color = this.percentColors[this.percentColors.length - 1].color; + for (i = _i = 0, _ref = this.percentColors.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) { + if (pct <= this.percentColors[i].pct) { + if (grad === true) { + startColor = this.percentColors[i - 1]; + endColor = this.percentColors[i]; + rangePct = (pct - startColor.pct) / (endColor.pct - startColor.pct); + color = { + r: Math.floor(startColor.color.r * (1 - rangePct) + endColor.color.r * rangePct), + g: Math.floor(startColor.color.g * (1 - rangePct) + endColor.color.g * rangePct), + b: Math.floor(startColor.color.b * (1 - rangePct) + endColor.color.b * rangePct) + }; + } else { + color = this.percentColors[i].color; } + break; } } - return 'rgb(' + [color.r, color.g, color.b].join(',') + ')'; - }; + } + return 'rgb(' + [color.r, color.g, color.b].join(',') + ')'; + }; - Gauge.prototype.getColorForValue = function(val, grad) { - var pct; - pct = (val - this.minValue) / (this.maxValue - this.minValue); - return this.getColorForPercentage(pct, grad); - }; + Gauge.prototype.getColorForValue = function(val, grad) { + var pct; + pct = (val - this.minValue) / (this.maxValue - this.minValue); + return this.getColorForPercentage(pct, grad); + }; - Gauge.prototype.render = function() { - var displayedAngle, fillStyle, gauge, h, w, _i, _len, _ref1, _results; - w = this.canvas.width / 2; - h = this.canvas.height * (1 - this.paddingBottom); - displayedAngle = this.getAngle(this.displayedValue); - if (this.textField) { - this.textField.render(this); - } - this.ctx.lineCap = "butt"; - if (this.options.customFillStyle !== void 0) { - fillStyle = this.options.customFillStyle(this); - } else if (this.percentColors !== null) { - fillStyle = this.getColorForValue(this.displayedValue, true); - } else if (this.options.colorStop !== void 0) { - if (this.options.gradientType === 0) { - fillStyle = this.ctx.createRadialGradient(w, h, 9, w, h, 70); - } else { - fillStyle = this.ctx.createLinearGradient(0, 0, w, 0); - } - fillStyle.addColorStop(0, this.options.colorStart); - fillStyle.addColorStop(1, this.options.colorStop); + Gauge.prototype.render = function() { + var displayedAngle, fillStyle, gauge, h, w, _i, _len, _ref, _results; + w = this.canvas.width / 2; + h = this.canvas.height * (1 - this.paddingBottom); + displayedAngle = this.getAngle(this.displayedValue); + if (this.textField) { + this.textField.render(this); + } + this.ctx.lineCap = "butt"; + if (this.options.customFillStyle !== void 0) { + fillStyle = this.options.customFillStyle(this); + } else if (this.percentColors !== null) { + fillStyle = this.getColorForValue(this.displayedValue, true); + } else if (this.options.colorStop !== void 0) { + if (this.options.gradientType === 0) { + fillStyle = this.ctx.createRadialGradient(w, h, 9, w, h, 70); } else { - fillStyle = this.options.colorStart; + fillStyle = this.ctx.createLinearGradient(0, 0, w, 0); } - this.ctx.strokeStyle = fillStyle; - this.ctx.beginPath(); - this.ctx.arc(w, h, this.radius, (1 + this.options.angle) * Math.PI, displayedAngle, false); - this.ctx.lineWidth = this.lineWidth; - this.ctx.stroke(); - this.ctx.strokeStyle = this.options.strokeColor; - this.ctx.beginPath(); - this.ctx.arc(w, h, this.radius, displayedAngle, (2 - this.options.angle) * Math.PI, false); - this.ctx.stroke(); - _ref1 = this.gp; - _results = []; - for (_i = 0, _len = _ref1.length; _i < _len; _i++) { - gauge = _ref1[_i]; - _results.push(gauge.update(true)); - } - return _results; - }; + fillStyle.addColorStop(0, this.options.colorStart); + fillStyle.addColorStop(1, this.options.colorStop); + } else { + fillStyle = this.options.colorStart; + } + this.ctx.strokeStyle = fillStyle; + this.ctx.beginPath(); + this.ctx.arc(w, h, this.radius, (1 + this.options.angle) * Math.PI, displayedAngle, false); + this.ctx.lineWidth = this.lineWidth; + this.ctx.stroke(); + this.ctx.strokeStyle = this.options.strokeColor; + this.ctx.beginPath(); + this.ctx.arc(w, h, this.radius, displayedAngle, (2 - this.options.angle) * Math.PI, false); + this.ctx.stroke(); + _ref = this.gp; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + gauge = _ref[_i]; + _results.push(gauge.update(true)); + } + return _results; + }; - return Gauge; + return Gauge; - })(BaseGauge); +})(BaseGauge); - BaseDonut = (function(_super) { - __extends(BaseDonut, _super); +BaseDonut = (function(_super) { - BaseDonut.prototype.lineWidth = 15; + __extends(BaseDonut, _super); - BaseDonut.prototype.displayedValue = 0; + BaseDonut.prototype.lineWidth = 15; - BaseDonut.prototype.value = 33; + BaseDonut.prototype.displayedValue = 0; - BaseDonut.prototype.maxValue = 80; + BaseDonut.prototype.value = 33; - BaseDonut.prototype.minValue = 0; + BaseDonut.prototype.maxValue = 80; - BaseDonut.prototype.options = { - lineWidth: 0.10, - colorStart: "#6f6ea0", - colorStop: "#c0c0db", - strokeColor: "#eeeeee", - shadowColor: "#d5d5d5", - angle: 0.35 - }; + BaseDonut.prototype.minValue = 0; - function BaseDonut(canvas) { - this.canvas = canvas; - BaseDonut.__super__.constructor.call(this); - if (typeof G_vmlCanvasManager !== 'undefined') { - this.canvas = window.G_vmlCanvasManager.initElement(this.canvas); - } - this.ctx = this.canvas.getContext('2d'); - this.setOptions(); - this.render(); + BaseDonut.prototype.options = { + lineWidth: 0.10, + colorStart: "#6f6ea0", + colorStop: "#c0c0db", + strokeColor: "#eeeeee", + shadowColor: "#d5d5d5", + angle: 0.35 + }; + + function BaseDonut(canvas) { + this.canvas = canvas; + BaseDonut.__super__.constructor.call(this); + if (typeof G_vmlCanvasManager !== 'undefined') { + this.canvas = window.G_vmlCanvasManager.initElement(this.canvas); } + this.ctx = this.canvas.getContext('2d'); + this.setOptions(); + this.render(); + } - BaseDonut.prototype.getAngle = function(value) { - return (1 - this.options.angle) * Math.PI + ((value - this.minValue) / (this.maxValue - this.minValue)) * ((2 + this.options.angle) - (1 - this.options.angle)) * Math.PI; - }; + BaseDonut.prototype.getAngle = function(value) { + return (1 - this.options.angle) * Math.PI + ((value - this.minValue) / (this.maxValue - this.minValue)) * ((2 + this.options.angle) - (1 - this.options.angle)) * Math.PI; + }; - BaseDonut.prototype.setOptions = function(options) { - if (options == null) { - options = null; - } - BaseDonut.__super__.setOptions.call(this, options); - this.lineWidth = this.canvas.height * this.options.lineWidth; - this.radius = this.canvas.height / 2 - this.lineWidth / 2; - return this; - }; + BaseDonut.prototype.setOptions = function(options) { + if (options == null) { + options = null; + } + BaseDonut.__super__.setOptions.call(this, options); + this.lineWidth = this.canvas.height * this.options.lineWidth; + this.radius = this.canvas.height / 2 - this.lineWidth / 2; + return this; + }; - BaseDonut.prototype.set = function(value) { - this.value = value; - if (this.value > this.maxValue) { - this.maxValue = this.value * 1.1; - } - return AnimationUpdater.run(); - }; + BaseDonut.prototype.set = function(value) { + this.value = value; + if (this.value > this.maxValue) { + this.maxValue = this.value * 1.1; + } + return AnimationUpdater.run(); + }; - BaseDonut.prototype.render = function() { - var displayedAngle, grdFill, h, start, stop, w; - displayedAngle = this.getAngle(this.displayedValue); - w = this.canvas.width / 2; - h = this.canvas.height / 2; - if (this.textField) { - this.textField.render(this); - } - grdFill = this.ctx.createRadialGradient(w, h, 39, w, h, 70); - grdFill.addColorStop(0, this.options.colorStart); - grdFill.addColorStop(1, this.options.colorStop); - start = this.radius - this.lineWidth / 2; - stop = this.radius + this.lineWidth / 2; - this.ctx.strokeStyle = this.options.strokeColor; - this.ctx.beginPath(); - this.ctx.arc(w, h, this.radius, (1 - this.options.angle) * Math.PI, (2 + this.options.angle) * Math.PI, false); - this.ctx.lineWidth = this.lineWidth; - this.ctx.lineCap = "round"; - this.ctx.stroke(); - this.ctx.strokeStyle = grdFill; - this.ctx.beginPath(); - this.ctx.arc(w, h, this.radius, (1 - this.options.angle) * Math.PI, displayedAngle, false); - return this.ctx.stroke(); - }; + BaseDonut.prototype.render = function() { + var displayedAngle, grdFill, h, start, stop, w; + displayedAngle = this.getAngle(this.displayedValue); + w = this.canvas.width / 2; + h = this.canvas.height / 2; + if (this.textField) { + this.textField.render(this); + } + grdFill = this.ctx.createRadialGradient(w, h, 39, w, h, 70); + grdFill.addColorStop(0, this.options.colorStart); + grdFill.addColorStop(1, this.options.colorStop); + start = this.radius - this.lineWidth / 2; + stop = this.radius + this.lineWidth / 2; + this.ctx.strokeStyle = this.options.strokeColor; + this.ctx.beginPath(); + this.ctx.arc(w, h, this.radius, (1 - this.options.angle) * Math.PI, (2 + this.options.angle) * Math.PI, false); + this.ctx.lineWidth = this.lineWidth; + this.ctx.lineCap = "round"; + this.ctx.stroke(); + this.ctx.strokeStyle = grdFill; + this.ctx.beginPath(); + this.ctx.arc(w, h, this.radius, (1 - this.options.angle) * Math.PI, displayedAngle, false); + return this.ctx.stroke(); + }; - return BaseDonut; + return BaseDonut; - })(BaseGauge); +})(BaseGauge); - Donut = (function(_super) { - __extends(Donut, _super); +Donut = (function(_super) { - function Donut() { - _ref1 = Donut.__super__.constructor.apply(this, arguments); - return _ref1; - } + __extends(Donut, _super); - Donut.prototype.strokeGradient = function(w, h, start, stop) { - var grd; - grd = this.ctx.createRadialGradient(w, h, start, w, h, stop); - grd.addColorStop(0, this.options.shadowColor); - grd.addColorStop(0.12, this.options._orgStrokeColor); - grd.addColorStop(0.88, this.options._orgStrokeColor); - grd.addColorStop(1, this.options.shadowColor); - return grd; - }; + function Donut() { + return Donut.__super__.constructor.apply(this, arguments); + } - Donut.prototype.setOptions = function(options) { - var h, start, stop, w; - if (options == null) { - options = null; - } - Donut.__super__.setOptions.call(this, options); - w = this.canvas.width / 2; - h = this.canvas.height / 2; - start = this.radius - this.lineWidth / 2; - stop = this.radius + this.lineWidth / 2; - this.options._orgStrokeColor = this.options.strokeColor; - this.options.strokeColor = this.strokeGradient(w, h, start, stop); - return this; - }; + Donut.prototype.strokeGradient = function(w, h, start, stop) { + var grd; + grd = this.ctx.createRadialGradient(w, h, start, w, h, stop); + grd.addColorStop(0, this.options.shadowColor); + grd.addColorStop(0.12, this.options._orgStrokeColor); + grd.addColorStop(0.88, this.options._orgStrokeColor); + grd.addColorStop(1, this.options.shadowColor); + return grd; + }; - return Donut; + Donut.prototype.setOptions = function(options) { + var h, start, stop, w; + if (options == null) { + options = null; + } + Donut.__super__.setOptions.call(this, options); + w = this.canvas.width / 2; + h = this.canvas.height / 2; + start = this.radius - this.lineWidth / 2; + stop = this.radius + this.lineWidth / 2; + this.options._orgStrokeColor = this.options.strokeColor; + this.options.strokeColor = this.strokeGradient(w, h, start, stop); + return this; + }; - })(BaseDonut); + return Donut; - window.AnimationUpdater = { - elements: [], - animId: null, - addAll: function(list) { - var elem, _i, _len, _results; - _results = []; - for (_i = 0, _len = list.length; _i < _len; _i++) { - elem = list[_i]; - _results.push(AnimationUpdater.elements.push(elem)); - } - return _results; - }, - add: function(object) { - return AnimationUpdater.elements.push(object); - }, - run: function() { - var animationFinished, elem, _i, _len, _ref2; - animationFinished = true; - _ref2 = AnimationUpdater.elements; - for (_i = 0, _len = _ref2.length; _i < _len; _i++) { - elem = _ref2[_i]; - if (elem.update()) { - animationFinished = false; - } - } - if (!animationFinished) { - return AnimationUpdater.animId = requestAnimationFrame(AnimationUpdater.run); - } else { - return cancelAnimationFrame(AnimationUpdater.animId); +})(BaseDonut); + +window.AnimationUpdater = { + elements: [], + animId: null, + addAll: function(list) { + var elem, _i, _len, _results; + _results = []; + for (_i = 0, _len = list.length; _i < _len; _i++) { + elem = list[_i]; + _results.push(AnimationUpdater.elements.push(elem)); + } + return _results; + }, + add: function(object) { + return AnimationUpdater.elements.push(object); + }, + run: function() { + var animationFinished, elem, _i, _len, _ref; + animationFinished = true; + _ref = AnimationUpdater.elements; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + elem = _ref[_i]; + if (elem.update()) { + animationFinished = false; } } - }; - - window.Gauge = Gauge; + if (!animationFinished) { + return AnimationUpdater.animId = requestAnimationFrame(AnimationUpdater.run); + } else { + return cancelAnimationFrame(AnimationUpdater.animId); + } + } +}; - window.Donut = Donut; +window.Gauge = Gauge; - window.BaseDonut = BaseDonut; +window.Donut = Donut; - window.TextRenderer = TextRenderer; +window.BaseDonut = BaseDonut; -}).call(this); +window.TextRenderer = TextRenderer; diff --git a/dist/gauge.min.js b/dist/gauge.min.js index aa74cc0..628eef5 100644 --- a/dist/gauge.min.js +++ b/dist/gauge.min.js @@ -1 +1,2 @@ -!function(){var AnimatedText,AnimatedTextFactory,Bar,BaseDonut,BaseGauge,Donut,Gauge,GaugePointer,TextRenderer,ValueUpdater,addCommas,cutHex,formatNumber,mergeObjects,secondsToString,updateObjectValues,_ref,_ref1,__hasProp={}.hasOwnProperty,__extends=function(child,parent){for(var key in parent){if(__hasProp.call(parent,key))child[key]=parent[key]}function ctor(){this.constructor=child}ctor.prototype=parent.prototype;child.prototype=new ctor;child.__super__=parent.prototype;return child};!function(){var browserRequestAnimationFrame,isCancelled,lastId,vendor,vendors,_i,_len;vendors=["ms","moz","webkit","o"];for(_i=0,_len=vendors.length;_i<_len;_i++){vendor=vendors[_i];if(window.requestAnimationFrame){break}window.requestAnimationFrame=window[vendor+"RequestAnimationFrame"];window.cancelAnimationFrame=window[vendor+"CancelAnimationFrame"]||window[vendor+"CancelRequestAnimationFrame"]}browserRequestAnimationFrame=null;lastId=0;isCancelled={};if(!requestAnimationFrame){window.requestAnimationFrame=function(callback,element){var currTime,id,lastTime,timeToCall;currTime=(new Date).getTime();timeToCall=Math.max(0,16-(currTime-lastTime));id=window.setTimeout(function(){return callback(currTime+timeToCall)},timeToCall);lastTime=currTime+timeToCall;return id};return window.cancelAnimationFrame=function(id){return clearTimeout(id)}}else if(!window.cancelAnimationFrame){browserRequestAnimationFrame=window.requestAnimationFrame;window.requestAnimationFrame=function(callback,element){var myId;myId=++lastId;browserRequestAnimationFrame(function(){if(!isCancelled[myId]){return callback()}},element);return myId};return window.cancelAnimationFrame=function(id){return isCancelled[id]=true}}}();String.prototype.hashCode=function(){var char,hash,i,_i,_ref;hash=0;if(this.length===0){return hash}for(i=_i=0,_ref=this.length;0<=_ref?_i<_ref:_i>_ref;i=0<=_ref?++_i:--_i){char=this.charCodeAt(i);hash=(hash<<5)-hash+char;hash=hash&hash}return hash};secondsToString=function(sec){var hr,min;hr=Math.floor(sec/3600);min=Math.floor((sec-hr*3600)/60);sec-=hr*3600+min*60;sec+="";min+="";while(min.length<2){min="0"+min}while(sec.length<2){sec="0"+sec}hr=hr?hr+":":"";return hr+min+":"+sec};formatNumber=function(num){return addCommas(num.toFixed(0))};updateObjectValues=function(obj1,obj2){var key,val;for(key in obj2){if(!__hasProp.call(obj2,key))continue;val=obj2[key];obj1[key]=val}return obj1};mergeObjects=function(obj1,obj2){var key,out,val;out={};for(key in obj1){if(!__hasProp.call(obj1,key))continue;val=obj1[key];out[key]=val}for(key in obj2){if(!__hasProp.call(obj2,key))continue;val=obj2[key];out[key]=val}return out};addCommas=function(nStr){var rgx,x,x1,x2;nStr+="";x=nStr.split(".");x1=x[0];x2="";if(x.length>1){x2="."+x[1]}rgx=/(\d+)(\d{3})/;while(rgx.test(x1)){x1=x1.replace(rgx,"$1"+","+"$2")}return x1+x2};cutHex=function(nStr){if(nStr.charAt(0)==="#"){return nStr.substring(1,7)}return nStr};ValueUpdater=function(){ValueUpdater.prototype.animationSpeed=32;function ValueUpdater(addToAnimationQueue,clear){if(addToAnimationQueue==null){addToAnimationQueue=true}this.clear=clear!=null?clear:true;if(addToAnimationQueue){AnimationUpdater.add(this)}}ValueUpdater.prototype.update=function(force){var diff;if(force==null){force=false}if(force||this.displayedValue!==this.value){if(this.ctx&&this.clear){this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height)}diff=this.value-this.displayedValue;if(Math.abs(diff/this.animationSpeed)<=.001){this.displayedValue=this.value}else{this.displayedValue=this.displayedValue+diff/this.animationSpeed}this.render();return true}return false};return ValueUpdater}();BaseGauge=function(_super){__extends(BaseGauge,_super);function BaseGauge(){_ref=BaseGauge.__super__.constructor.apply(this,arguments);return _ref}BaseGauge.prototype.displayScale=1;BaseGauge.prototype.setTextField=function(textField){return this.textField=textField instanceof TextRenderer?textField:new TextRenderer(textField)};BaseGauge.prototype.setMinValue=function(minValue,updateStartValue){var gauge,_i,_len,_ref1,_results;this.minValue=minValue;if(updateStartValue==null){updateStartValue=true}if(updateStartValue){this.displayedValue=this.minValue;_ref1=this.gp||[];_results=[];for(_i=0,_len=_ref1.length;_i<_len;_i++){gauge=_ref1[_i];_results.push(gauge.displayedValue=this.minValue)}return _results}};BaseGauge.prototype.setOptions=function(options){if(options==null){options=null}this.options=mergeObjects(this.options,options);if(this.textField){this.textField.el.style.fontSize=options.fontSize+"px"}if(this.options.angle>.5){this.gauge.options.angle=.5}this.configDisplayScale();return this};BaseGauge.prototype.configDisplayScale=function(){var backingStorePixelRatio,devicePixelRatio,height,prevDisplayScale,width;prevDisplayScale=this.displayScale;if(this.options.highDpiSupport===false){delete this.displayScale}else{devicePixelRatio=window.devicePixelRatio||1;backingStorePixelRatio=this.ctx.webkitBackingStorePixelRatio||this.ctx.mozBackingStorePixelRatio||this.ctx.msBackingStorePixelRatio||this.ctx.oBackingStorePixelRatio||this.ctx.backingStorePixelRatio||1;this.displayScale=devicePixelRatio/backingStorePixelRatio}if(this.displayScale!==prevDisplayScale){width=this.canvas.G__width||this.canvas.width;height=this.canvas.G__height||this.canvas.height;this.canvas.width=width*this.displayScale;this.canvas.height=height*this.displayScale;this.canvas.style.width=""+width+"px";this.canvas.style.height=""+height+"px";this.canvas.G__width=width;this.canvas.G__height=height}return this};return BaseGauge}(ValueUpdater);TextRenderer=function(){function TextRenderer(el){this.el=el}TextRenderer.prototype.render=function(gauge){return this.el.innerHTML=formatNumber(gauge.displayedValue)};return TextRenderer}();AnimatedText=function(_super){__extends(AnimatedText,_super);AnimatedText.prototype.displayedValue=0;AnimatedText.prototype.value=0;AnimatedText.prototype.setVal=function(value){return this.value=1*value};function AnimatedText(elem,text){this.elem=elem;this.text=text!=null?text:false;this.value=1*this.elem.innerHTML;if(this.text){this.value=0}}AnimatedText.prototype.render=function(){var textVal;if(this.text){textVal=secondsToString(this.displayedValue.toFixed(0))}else{textVal=addCommas(formatNumber(this.displayedValue))}return this.elem.innerHTML=textVal};return AnimatedText}(ValueUpdater);AnimatedTextFactory={create:function(objList){var elem,out,_i,_len;out=[];for(_i=0,_len=objList.length;_i<_len;_i++){elem=objList[_i];out.push(new AnimatedText(elem))}return out}};GaugePointer=function(_super){__extends(GaugePointer,_super);GaugePointer.prototype.displayedValue=0;GaugePointer.prototype.value=0;GaugePointer.prototype.options={strokeWidth:.035,length:.1,color:"#000000"};function GaugePointer(gauge){this.gauge=gauge;this.ctx=this.gauge.ctx;this.canvas=this.gauge.canvas;GaugePointer.__super__.constructor.call(this,false,false);this.setOptions()}GaugePointer.prototype.setOptions=function(options){if(options==null){options=null}updateObjectValues(this.options,options);this.length=this.canvas.height*this.options.length;this.strokeWidth=this.canvas.height*this.options.strokeWidth;this.maxValue=this.gauge.maxValue;this.minValue=this.gauge.minValue;this.animationSpeed=this.gauge.animationSpeed;return this.options.angle=this.gauge.options.angle};GaugePointer.prototype.render=function(){var angle,centerX,centerY,endX,endY,startX,startY,x,y;angle=this.gauge.getAngle.call(this,this.displayedValue);centerX=this.canvas.width/2;centerY=this.canvas.height*.9;x=Math.round(centerX+this.length*Math.cos(angle));y=Math.round(centerY+this.length*Math.sin(angle));startX=Math.round(centerX+this.strokeWidth*Math.cos(angle-Math.PI/2));startY=Math.round(centerY+this.strokeWidth*Math.sin(angle-Math.PI/2));endX=Math.round(centerX+this.strokeWidth*Math.cos(angle+Math.PI/2));endY=Math.round(centerY+this.strokeWidth*Math.sin(angle+Math.PI/2));this.ctx.fillStyle=this.options.color;this.ctx.beginPath();this.ctx.arc(centerX,centerY,this.strokeWidth,0,Math.PI*2,true);this.ctx.fill();this.ctx.beginPath();this.ctx.moveTo(startX,startY);this.ctx.lineTo(x,y);this.ctx.lineTo(endX,endY);return this.ctx.fill()};return GaugePointer}(ValueUpdater);Bar=function(){function Bar(elem){this.elem=elem}Bar.prototype.updateValues=function(arrValues){this.value=arrValues[0];this.maxValue=arrValues[1];this.avgValue=arrValues[2];return this.render()};Bar.prototype.render=function(){var avgPercent,valPercent;if(this.textField){this.textField.text(formatNumber(this.value))}if(this.maxValue===0){this.maxValue=this.avgValue*2}valPercent=this.value/this.maxValue*100;avgPercent=this.avgValue/this.maxValue*100;$(".bar-value",this.elem).css({width:valPercent+"%"});return $(".typical-value",this.elem).css({width:avgPercent+"%"})};return Bar}();Gauge=function(_super){__extends(Gauge,_super);Gauge.prototype.elem=null;Gauge.prototype.value=[20];Gauge.prototype.maxValue=80;Gauge.prototype.minValue=0;Gauge.prototype.displayedAngle=0;Gauge.prototype.displayedValue=0;Gauge.prototype.lineWidth=40;Gauge.prototype.paddingBottom=.1;Gauge.prototype.percentColors=null;Gauge.prototype.options={colorStart:"#6fadcf",colorStop:void 0,gradientType:0,strokeColor:"#e0e0e0",pointer:{length:.8,strokeWidth:.035},angle:.15,lineWidth:.44,fontSize:40,limitMax:false,percentColors:[[0,"#a9d70b"],[.5,"#f9c802"],[1,"#ff0000"]]};function Gauge(canvas){this.canvas=canvas;Gauge.__super__.constructor.call(this);this.percentColors=null;if(typeof G_vmlCanvasManager!=="undefined"){this.canvas=window.G_vmlCanvasManager.initElement(this.canvas)}this.ctx=this.canvas.getContext("2d");this.gp=[new GaugePointer(this)];this.setOptions();this.render()}Gauge.prototype.setOptions=function(options){var gauge,_i,_len,_ref1;if(options==null){options=null}Gauge.__super__.setOptions.call(this,options);this.configPercentColors();this.lineWidth=this.canvas.height*(1-this.paddingBottom)*this.options.lineWidth;this.radius=this.canvas.height*(1-this.paddingBottom)-this.lineWidth;this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height);this.render();_ref1=this.gp;for(_i=0,_len=_ref1.length;_i<_len;_i++){gauge=_ref1[_i];gauge.setOptions(this.options.pointer);gauge.render()}return this};Gauge.prototype.configPercentColors=function(){var bval,gval,i,rval,_i,_ref1,_results;this.percentColors=null;if(this.options.percentColors!==void 0){this.percentColors=new Array;_results=[];for(i=_i=0,_ref1=this.options.percentColors.length-1;0<=_ref1?_i<=_ref1:_i>=_ref1;i=0<=_ref1?++_i:--_i){rval=parseInt(cutHex(this.options.percentColors[i][1]).substring(0,2),16);gval=parseInt(cutHex(this.options.percentColors[i][1]).substring(2,4),16);bval=parseInt(cutHex(this.options.percentColors[i][1]).substring(4,6),16);_results.push(this.percentColors[i]={pct:this.options.percentColors[i][0],color:{r:rval,g:gval,b:bval}})}return _results}};Gauge.prototype.set=function(value){var i,max_hit,val,_i,_j,_len,_ref1;if(!(value instanceof Array)){value=[value]}if(value.length>this.gp.length){for(i=_i=0,_ref1=value.length-this.gp.length;0<=_ref1?_i<_ref1:_i>_ref1;i=0<=_ref1?++_i:--_i){this.gp.push(new GaugePointer(this))}}i=0;max_hit=false;for(_j=0,_len=value.length;_j<_len;_j++){val=value[_j];if(val>this.maxValue){this.maxValue=this.value*1.1;max_hit=true}this.gp[i].value=val;this.gp[i++].setOptions({maxValue:this.maxValue,angle:this.options.angle})}this.value=value[value.length-1];if(max_hit){if(!this.options.limitMax){return AnimationUpdater.run()}}else{return AnimationUpdater.run()}};Gauge.prototype.getAngle=function(value){return(1+this.options.angle)*Math.PI+(value-this.minValue)/(this.maxValue-this.minValue)*(1-this.options.angle*2)*Math.PI};Gauge.prototype.getColorForPercentage=function(pct,grad){var color,endColor,i,rangePct,startColor,_i,_ref1;if(pct===0){color=this.percentColors[0].color}else{color=this.percentColors[this.percentColors.length-1].color;for(i=_i=0,_ref1=this.percentColors.length-1;0<=_ref1?_i<=_ref1:_i>=_ref1;i=0<=_ref1?++_i:--_i){if(pct<=this.percentColors[i].pct){if(grad===true){startColor=this.percentColors[i-1];endColor=this.percentColors[i];rangePct=(pct-startColor.pct)/(endColor.pct-startColor.pct);color={r:Math.floor(startColor.color.r*(1-rangePct)+endColor.color.r*rangePct),g:Math.floor(startColor.color.g*(1-rangePct)+endColor.color.g*rangePct),b:Math.floor(startColor.color.b*(1-rangePct)+endColor.color.b*rangePct)}}else{color=this.percentColors[i].color}break}}}return"rgb("+[color.r,color.g,color.b].join(",")+")"};Gauge.prototype.getColorForValue=function(val,grad){var pct;pct=(val-this.minValue)/(this.maxValue-this.minValue);return this.getColorForPercentage(pct,grad)};Gauge.prototype.render=function(){var displayedAngle,fillStyle,gauge,h,w,_i,_len,_ref1,_results;w=this.canvas.width/2;h=this.canvas.height*(1-this.paddingBottom);displayedAngle=this.getAngle(this.displayedValue);if(this.textField){this.textField.render(this)}this.ctx.lineCap="butt";if(this.options.customFillStyle!==void 0){fillStyle=this.options.customFillStyle(this)}else if(this.percentColors!==null){fillStyle=this.getColorForValue(this.displayedValue,true)}else if(this.options.colorStop!==void 0){if(this.options.gradientType===0){fillStyle=this.ctx.createRadialGradient(w,h,9,w,h,70)}else{fillStyle=this.ctx.createLinearGradient(0,0,w,0)}fillStyle.addColorStop(0,this.options.colorStart);fillStyle.addColorStop(1,this.options.colorStop)}else{fillStyle=this.options.colorStart}this.ctx.strokeStyle=fillStyle;this.ctx.beginPath();this.ctx.arc(w,h,this.radius,(1+this.options.angle)*Math.PI,displayedAngle,false);this.ctx.lineWidth=this.lineWidth;this.ctx.stroke();this.ctx.strokeStyle=this.options.strokeColor;this.ctx.beginPath();this.ctx.arc(w,h,this.radius,displayedAngle,(2-this.options.angle)*Math.PI,false);this.ctx.stroke();_ref1=this.gp;_results=[];for(_i=0,_len=_ref1.length;_i<_len;_i++){gauge=_ref1[_i];_results.push(gauge.update(true))}return _results};return Gauge}(BaseGauge);BaseDonut=function(_super){__extends(BaseDonut,_super);BaseDonut.prototype.lineWidth=15;BaseDonut.prototype.displayedValue=0;BaseDonut.prototype.value=33;BaseDonut.prototype.maxValue=80;BaseDonut.prototype.minValue=0;BaseDonut.prototype.options={lineWidth:.1,colorStart:"#6f6ea0",colorStop:"#c0c0db",strokeColor:"#eeeeee",shadowColor:"#d5d5d5",angle:.35};function BaseDonut(canvas){this.canvas=canvas;BaseDonut.__super__.constructor.call(this);if(typeof G_vmlCanvasManager!=="undefined"){this.canvas=window.G_vmlCanvasManager.initElement(this.canvas)}this.ctx=this.canvas.getContext("2d");this.setOptions();this.render()}BaseDonut.prototype.getAngle=function(value){return(1-this.options.angle)*Math.PI+(value-this.minValue)/(this.maxValue-this.minValue)*(2+this.options.angle-(1-this.options.angle))*Math.PI};BaseDonut.prototype.setOptions=function(options){if(options==null){options=null}BaseDonut.__super__.setOptions.call(this,options);this.lineWidth=this.canvas.height*this.options.lineWidth;this.radius=this.canvas.height/2-this.lineWidth/2;return this};BaseDonut.prototype.set=function(value){this.value=value;if(this.value>this.maxValue){this.maxValue=this.value*1.1}return AnimationUpdater.run()};BaseDonut.prototype.render=function(){var displayedAngle,grdFill,h,start,stop,w;displayedAngle=this.getAngle(this.displayedValue);w=this.canvas.width/2;h=this.canvas.height/2;if(this.textField){this.textField.render(this)}grdFill=this.ctx.createRadialGradient(w,h,39,w,h,70);grdFill.addColorStop(0,this.options.colorStart);grdFill.addColorStop(1,this.options.colorStop);start=this.radius-this.lineWidth/2;stop=this.radius+this.lineWidth/2;this.ctx.strokeStyle=this.options.strokeColor;this.ctx.beginPath();this.ctx.arc(w,h,this.radius,(1-this.options.angle)*Math.PI,(2+this.options.angle)*Math.PI,false);this.ctx.lineWidth=this.lineWidth;this.ctx.lineCap="round";this.ctx.stroke();this.ctx.strokeStyle=grdFill;this.ctx.beginPath();this.ctx.arc(w,h,this.radius,(1-this.options.angle)*Math.PI,displayedAngle,false);return this.ctx.stroke()};return BaseDonut}(BaseGauge);Donut=function(_super){__extends(Donut,_super);function Donut(){_ref1=Donut.__super__.constructor.apply(this,arguments);return _ref1}Donut.prototype.strokeGradient=function(w,h,start,stop){var grd;grd=this.ctx.createRadialGradient(w,h,start,w,h,stop);grd.addColorStop(0,this.options.shadowColor);grd.addColorStop(.12,this.options._orgStrokeColor);grd.addColorStop(.88,this.options._orgStrokeColor);grd.addColorStop(1,this.options.shadowColor);return grd};Donut.prototype.setOptions=function(options){var h,start,stop,w;if(options==null){options=null}Donut.__super__.setOptions.call(this,options);w=this.canvas.width/2;h=this.canvas.height/2;start=this.radius-this.lineWidth/2;stop=this.radius+this.lineWidth/2;this.options._orgStrokeColor=this.options.strokeColor;this.options.strokeColor=this.strokeGradient(w,h,start,stop);return this};return Donut}(BaseDonut);window.AnimationUpdater={elements:[],animId:null,addAll:function(list){var elem,_i,_len,_results;_results=[];for(_i=0,_len=list.length;_i<_len;_i++){elem=list[_i];_results.push(AnimationUpdater.elements.push(elem))}return _results},add:function(object){return AnimationUpdater.elements.push(object)},run:function(){var animationFinished,elem,_i,_len,_ref2;animationFinished=true;_ref2=AnimationUpdater.elements;for(_i=0,_len=_ref2.length;_i<_len;_i++){elem=_ref2[_i];if(elem.update()){animationFinished=false}}if(!animationFinished){return AnimationUpdater.animId=requestAnimationFrame(AnimationUpdater.run)}else{return cancelAnimationFrame(AnimationUpdater.animId)}}};window.Gauge=Gauge;window.Donut=Donut;window.BaseDonut=BaseDonut;window.TextRenderer=TextRenderer}.call(this); \ No newline at end of file +// Generated by CoffeeScript 1.4.0 +(function(){var e,t,n,r,i,s,o,u,a,f,l,c,h,p,d,v,m={}.hasOwnProperty,g=function(e,t){function r(){this.constructor=e}for(var n in t)m.call(t,n)&&(e[n]=t[n]);return r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype,e};(function(){var e,t,n,r,i,s,o;i=["ms","moz","webkit","o"];for(s=0,o=i.length;si;n=0<=i?++r:--r)e=this.charCodeAt(n),t=(t<<5)-t+e,t&=t;return t},d=function(e){var t,n;t=Math.floor(e/3600),n=Math.floor((e-t*3600)/60),e-=t*3600+n*60,e+="",n+="";while(n.length<2)n="0"+n;while(e.length<2)e="0"+e;return t=t?t+":":"",t+n+":"+e},h=function(e){return l(e.toFixed(0))},v=function(e,t){var n,r;for(n in t){if(!m.call(t,n))continue;r=t[n],e[n]=r}return e},p=function(e,t){var n,r,i;r={};for(n in e){if(!m.call(e,n))continue;i=e[n],r[n]=i}for(n in t){if(!m.call(t,n))continue;i=t[n],r[n]=i}return r},l=function(e){var t,n,r,i;e+="",n=e.split("."),r=n[0],i="",n.length>1&&(i="."+n[1]),t=/(\d+)(\d{3})/;while(t.test(r))r=r.replace(t,"$1,$2");return r+i},c=function(e){return e.charAt(0)==="#"?e.substring(1,7):e},f=function(){function e(e,t){e==null&&(e=!0),this.clear=t!=null?t:!0,e&&AnimationUpdater.add(this)}return e.prototype.animationSpeed=32,e.prototype.update=function(e){var t;return e==null&&(e=!1),e||this.displayedValue!==this.value?(this.ctx&&this.clear&&this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),t=this.value-this.displayedValue,Math.abs(t/this.animationSpeed)<=.001?this.displayedValue=this.value:this.displayedValue=this.displayedValue+t/this.animationSpeed,this.render(),!0):!1},e}(),i=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return g(t,e),t.prototype.displayScale=1,t.prototype.setTextField=function(e){return this.textField=e instanceof a?e:new a(e)},t.prototype.setMinValue=function(e,t){var n,r,i,s,o;this.minValue=e,t==null&&(t=!0);if(t){this.displayedValue=this.minValue,s=this.gp||[],o=[];for(r=0,i=s.length;r.5&&(this.gauge.options.angle=.5),this.configDisplayScale(),this},t.prototype.configDisplayScale=function(){var e,t,n,r,i;return r=this.displayScale,this.options.highDpiSupport===!1?delete this.displayScale:(t=window.devicePixelRatio||1,e=this.ctx.webkitBackingStorePixelRatio||this.ctx.mozBackingStorePixelRatio||this.ctx.msBackingStorePixelRatio||this.ctx.oBackingStorePixelRatio||this.ctx.backingStorePixelRatio||1,this.displayScale=t/e),this.displayScale!==r&&(i=this.canvas.G__width||this.canvas.width,n=this.canvas.G__height||this.canvas.height,this.canvas.width=i*this.displayScale,this.canvas.height=n*this.displayScale,this.canvas.style.width=""+i+"px",this.canvas.style.height=""+n+"px",this.canvas.G__width=i,this.canvas.G__height=n),this},t}(f),a=function(){function e(e){this.el=e}return e.prototype.render=function(e){return this.el.innerHTML=h(e.displayedValue)},e}(),e=function(e){function t(e,t){this.elem=e,this.text=t!=null?t:!1,this.value=1*this.elem.innerHTML,this.text&&(this.value=0)}return g(t,e),t.prototype.displayedValue=0,t.prototype.value=0,t.prototype.setVal=function(e){return this.value=1*e},t.prototype.render=function(){var e;return this.text?e=d(this.displayedValue.toFixed(0)):e=l(h(this.displayedValue)),this.elem.innerHTML=e},t}(f),t={create:function(t){var n,r,i,s;r=[];for(i=0,s=t.length;i=s;n=0<=s?++i:--i)r=parseInt(c(this.options.percentColors[n][1]).substring(0,2),16),t=parseInt(c(this.options.percentColors[n][1]).substring(2,4),16),e=parseInt(c(this.options.percentColors[n][1]).substring(4,6),16),o.push(this.percentColors[n]={pct:this.options.percentColors[n][0],color:{r:r,g:t,b:e}});return o}},t.prototype.set=function(e){var t,n,r,i,s,o,a,f;e instanceof Array||(e=[e]);if(e.length>this.gp.length)for(t=s=0,f=e.length-this.gp.length;0<=f?sf;t=0<=f?++s:--s)this.gp.push(new u(this));t=0,n=!1,r=!1;for(o=0,a=e.length;othis.maxValue&&(this.maxValue=i,n=!0),i=a;i=0<=a?++u:--u)if(e<=this.percentColors[i].pct){t===!0?(o=this.percentColors[i-1],r=this.percentColors[i],s=(e-o.pct)/(r.pct-o.pct),n={r:Math.floor(o.color.r*(1-s)+r.color.r*s),g:Math.floor(o.color.g*(1-s)+r.color.g*s),b:Math.floor(o.color.b*(1-s)+r.color.b*s)}):n=this.percentColors[i].color;break}}return"rgb("+[n.r,n.g,n.b].join(",")+")"},t.prototype.getColorForValue=function(e,t){var n;return n=(e-this.minValue)/(this.maxValue-this.minValue),this.getColorForPercentage(n,t)},t.prototype.render=function(){var e,t,n,r,i,s,o,u,a;i=this.canvas.width/2,r=this.canvas.height*(1-this.paddingBottom),e=this.getAngle(this.displayedValue),this.textField&&this.textField.render(this),this.ctx.lineCap="butt",this.options.customFillStyle!==void 0?t=this.options.customFillStyle(this):this.percentColors!==null?t=this.getColorForValue(this.displayedValue,!0):this.options.colorStop!==void 0?(this.options.gradientType===0?t=this.ctx.createRadialGradient(i,r,9,i,r,70):t=this.ctx.createLinearGradient(0,0,i,0),t.addColorStop(0,this.options.colorStart),t.addColorStop(1,this.options.colorStop)):t=this.options.colorStart,this.ctx.strokeStyle=t,this.ctx.beginPath(),this.ctx.arc(i,r,this.radius,(1+this.options.angle)*Math.PI,e,!1),this.ctx.lineWidth=this.lineWidth,this.ctx.stroke(),this.ctx.strokeStyle=this.options.strokeColor,this.ctx.beginPath(),this.ctx.arc(i,r,this.radius,e,(2-this.options.angle)*Math.PI,!1),this.ctx.stroke(),u=this.gp,a=[];for(s=0,o=u.length;sthis.maxValue&&(this.maxValue=this.value*1.1),AnimationUpdater.run()},t.prototype.render=function(){var e,t,n,r,i,s;return e=this.getAngle(this.displayedValue),s=this.canvas.width/2,n=this.canvas.height/2,this.textField&&this.textField.render(this),t=this.ctx.createRadialGradient(s,n,39,s,n,70),t.addColorStop(0,this.options.colorStart),t.addColorStop(1,this.options.colorStop),r=this.radius-this.lineWidth/2,i=this.radius+this.lineWidth/2,this.ctx.strokeStyle=this.options.strokeColor,this.ctx.beginPath(),this.ctx.arc(s,n,this.radius,(1-this.options.angle)*Math.PI,(2+this.options.angle)*Math.PI,!1),this.ctx.lineWidth=this.lineWidth,this.ctx.lineCap="round",this.ctx.stroke(),this.ctx.strokeStyle=t,this.ctx.beginPath(),this.ctx.arc(s,n,this.radius,(1-this.options.angle)*Math.PI,e,!1),this.ctx.stroke()},t}(i),s=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return g(t,e),t.prototype.strokeGradient=function(e,t,n,r){var i;return i=this.ctx.createRadialGradient(e,t,n,e,t,r),i.addColorStop(0,this.options.shadowColor),i.addColorStop(.12,this.options._orgStrokeColor),i.addColorStop(.88,this.options._orgStrokeColor),i.addColorStop(1,this.options.shadowColor),i},t.prototype.setOptions=function(e){var n,r,i,s;return e==null&&(e=null),t.__super__.setOptions.call(this,e),s=this.canvas.width/2,n=this.canvas.height/2,r=this.radius-this.lineWidth/2,i=this.radius+this.lineWidth/2,this.options._orgStrokeColor=this.options.strokeColor,this.options.strokeColor=this.strokeGradient(s,n,r,i),this},t}(r),window.AnimationUpdater={elements:[],animId:null,addAll:function(e){var t,n,r,i;i=[];for(n=0,r=e.length;n