// #### Gauge // The Gauge object encapsulates the behavior // of simple gauge. Most of the implementation // is in the CSS rules, but we do have a bit // of JavaScript to set or read the gauge value function Gauge(el) { // ##### Private Properties and Attributes var element, // Containing element for the info component data, // `.gauge__data` element needle, // `.gauge__needle` element value = 0.0, // Current gauge value from 0 to 1 prop, // Style for transform valueLabel; // `.gauge__label--spacer` element // ##### Private Methods and Functions var setElement = function(el) { // Keep a reference to the various elements and sub-elements element = el; data = element.querySelector('.gauge__data'); needle = element.querySelector('.gauge__needle'); valueLabel = element.querySelector('.gauge__label--spacer'); //valueLabel = element.getElementsByTagName('span'); //valueLabel = element.querySelector('span.gauge__label--spacer'); }; var setValue = function(x, max, unit) { percentage = x * 100 / max; value = percentage / 100; var turns = -0.5 + (value * 0.5); data.style[prop] = 'rotate(' + turns + 'turn)'; needle.style[prop] = 'rotate(' + turns + 'turn)'; valueLabel.textContent = x + unit; /* for (var i = 0; i < valueLabel.children.length; i++) { window.alert(valueLabel.children[i].className); if (valueLabel.children[i].className == 'gauge__label--spacer') { window.alert(valueLabel.children[i]); valueLabel.children[i].textContent = x + unit; break; } } */ }; // ##### Object to be Returned function exports() { }; // ##### Public API Methods exports.element = function(el) { if (!arguments.length) { return element; } setElement(el); return this; }; exports.value = function(x, max=100, unit='%') { if (!arguments.length) { return value; } setValue(x, max, unit); return this; }; // ##### Initialization var body = document.getElementsByTagName('body')[0]; ['webkitTransform', 'mozTransform', 'msTransform', 'oTransform', 'transform']. forEach(function(p) { if (typeof body.style[p] !== 'undefined') { prop = p; } } ); if (arguments.length) { setElement(el); } return exports; };