summaryrefslogtreecommitdiff
path: root/html/includes/js/modules/solid-gauge.src.js
diff options
context:
space:
mode:
Diffstat (limited to 'html/includes/js/modules/solid-gauge.src.js')
-rw-r--r--html/includes/js/modules/solid-gauge.src.js234
1 files changed, 234 insertions, 0 deletions
diff --git a/html/includes/js/modules/solid-gauge.src.js b/html/includes/js/modules/solid-gauge.src.js
new file mode 100644
index 0000000..6fd14c9
--- /dev/null
+++ b/html/includes/js/modules/solid-gauge.src.js
@@ -0,0 +1,234 @@
+/**
+ * @license Highcharts JS v4.0.4 (2014-09-02)
+ * Solid angular gauge module
+ *
+ * (c) 2010-2014 Torstein Honsi
+ *
+ * License: www.highcharts.com/license
+ */
+
+/*global Highcharts*/
+(function (H) {
+ "use strict";
+
+ var defaultPlotOptions = H.getOptions().plotOptions,
+ pInt = H.pInt,
+ pick = H.pick,
+ each = H.each,
+ colorAxisMethods,
+ UNDEFINED;
+
+ // The default options
+ defaultPlotOptions.solidgauge = H.merge(defaultPlotOptions.gauge, {
+ colorByPoint: true
+ });
+
+
+ // These methods are defined in the ColorAxis object, and copied here.
+ // If we implement an AMD system we should make ColorAxis a dependency.
+ colorAxisMethods = {
+
+
+ initDataClasses: function (userOptions) {
+ var axis = this,
+ chart = this.chart,
+ dataClasses,
+ colorCounter = 0,
+ options = this.options;
+ this.dataClasses = dataClasses = [];
+
+ each(userOptions.dataClasses, function (dataClass, i) {
+ var colors;
+
+ dataClass = H.merge(dataClass);
+ dataClasses.push(dataClass);
+ if (!dataClass.color) {
+ if (options.dataClassColor === 'category') {
+ colors = chart.options.colors;
+ dataClass.color = colors[colorCounter++];
+ // loop back to zero
+ if (colorCounter === colors.length) {
+ colorCounter = 0;
+ }
+ } else {
+ dataClass.color = axis.tweenColors(H.Color(options.minColor), H.Color(options.maxColor), i / (userOptions.dataClasses.length - 1));
+ }
+ }
+ });
+ },
+
+ initStops: function (userOptions) {
+ this.stops = userOptions.stops || [
+ [0, this.options.minColor],
+ [1, this.options.maxColor]
+ ];
+ each(this.stops, function (stop) {
+ stop.color = H.Color(stop[1]);
+ });
+ },
+ /**
+ * Translate from a value to a color
+ */
+ toColor: function (value, point) {
+ var pos,
+ stops = this.stops,
+ from,
+ to,
+ color,
+ dataClasses = this.dataClasses,
+ dataClass,
+ i;
+
+ if (dataClasses) {
+ i = dataClasses.length;
+ while (i--) {
+ dataClass = dataClasses[i];
+ from = dataClass.from;
+ to = dataClass.to;
+ if ((from === UNDEFINED || value >= from) && (to === UNDEFINED || value <= to)) {
+ color = dataClass.color;
+ if (point) {
+ point.dataClass = i;
+ }
+ break;
+ }
+ }
+
+ } else {
+
+ if (this.isLog) {
+ value = this.val2lin(value);
+ }
+ pos = 1 - ((this.max - value) / (this.max - this.min));
+ i = stops.length;
+ while (i--) {
+ if (pos > stops[i][0]) {
+ break;
+ }
+ }
+ from = stops[i] || stops[i + 1];
+ to = stops[i + 1] || from;
+
+ // The position within the gradient
+ pos = 1 - (to[0] - pos) / ((to[0] - from[0]) || 1);
+
+ color = this.tweenColors(
+ from.color,
+ to.color,
+ pos
+ );
+ }
+ return color;
+ },
+ tweenColors: function (from, to, pos) {
+ // Check for has alpha, because rgba colors perform worse due to lack of
+ // support in WebKit.
+ var hasAlpha = (to.rgba[3] !== 1 || from.rgba[3] !== 1);
+
+ if (from.rgba.length === 0 || to.rgba.length === 0) {
+ return 'none';
+ }
+ return (hasAlpha ? 'rgba(' : 'rgb(') +
+ Math.round(to.rgba[0] + (from.rgba[0] - to.rgba[0]) * (1 - pos)) + ',' +
+ Math.round(to.rgba[1] + (from.rgba[1] - to.rgba[1]) * (1 - pos)) + ',' +
+ Math.round(to.rgba[2] + (from.rgba[2] - to.rgba[2]) * (1 - pos)) +
+ (hasAlpha ? (',' + (to.rgba[3] + (from.rgba[3] - to.rgba[3]) * (1 - pos))) : '') + ')';
+ }
+ };
+
+ // The series prototype
+ H.seriesTypes.solidgauge = H.extendClass(H.seriesTypes.gauge, {
+ type: 'solidgauge',
+
+ bindAxes: function () {
+ var axis;
+ H.seriesTypes.gauge.prototype.bindAxes.call(this);
+
+ axis = this.yAxis;
+ H.extend(axis, colorAxisMethods);
+
+ // Prepare data classes
+ if (axis.options.dataClasses) {
+ axis.initDataClasses(axis.options);
+ }
+ axis.initStops(axis.options);
+ },
+
+ /**
+ * Draw the points where each point is one needle
+ */
+ drawPoints: function () {
+ var series = this,
+ yAxis = series.yAxis,
+ center = yAxis.center,
+ options = series.options,
+ renderer = series.chart.renderer;
+
+ H.each(series.points, function (point) {
+ var graphic = point.graphic,
+ rotation = yAxis.startAngleRad + yAxis.translate(point.y, null, null, null, true),
+ radius = (pInt(pick(options.radius, 100)) * center[2]) / 200,
+ innerRadius = (pInt(pick(options.innerRadius, 60)) * center[2]) / 200,
+ shapeArgs,
+ d,
+ toColor = yAxis.toColor(point.y, point),
+ fromColor;
+
+ if (toColor !== 'none') {
+ fromColor = point.color;
+ point.color = toColor;
+ }
+
+ // Handle the wrap option
+ if (options.wrap === false) {
+ rotation = Math.max(yAxis.startAngleRad, Math.min(yAxis.endAngleRad, rotation));
+ }
+ rotation = rotation * 180 / Math.PI;
+
+ var angle1 = rotation / (180 / Math.PI),
+ angle2 = yAxis.startAngleRad,
+ minAngle = Math.min(angle1, angle2),
+ maxAngle = Math.max(angle1, angle2);
+
+ if (maxAngle - minAngle > 2 * Math.PI) {
+ maxAngle = minAngle + 2 * Math.PI;
+ }
+
+ shapeArgs = {
+ x: center[0],
+ y: center[1],
+ r: radius,
+ innerR: innerRadius,
+ start: minAngle,
+ end: maxAngle
+ };
+
+ if (graphic) {
+ d = shapeArgs.d;
+
+ /*jslint unparam: true*/
+ graphic.attr({
+ fill: point.color
+ }).animate(shapeArgs, {
+ step: function (value, fx) {
+ graphic.attr('fill', colorAxisMethods.tweenColors(H.Color(fromColor), H.Color(toColor), fx.pos));
+ }
+ });
+ /*jslint unparam: false*/
+ shapeArgs.d = d; // animate alters it
+ } else {
+ point.graphic = renderer.arc(shapeArgs)
+ .attr({
+ stroke: options.borderColor || 'none',
+ 'stroke-width': options.borderWidth || 0,
+ fill: point.color,
+ 'sweep-flag': 0
+ })
+ .add(series.group);
+ }
+ });
+ },
+ animate: null
+ });
+
+}(Highcharts));