/** * Functions related to VU meters. * These functions are intimately tied to the markup defined in the * VU templates in _vu_meters.html.erb */ (function(context, $) { "use strict"; context.JK = context.JK || {}; // As these are helper functions, just have a single // static object with functions. Each function should // take all necessary arguments to complete its work. context.JK.VuHelpers = { /** * Render a VU meter into the provided selector. * vuType can be either "horizontal" or "vertical" */ renderVU: function(selector, userOptions) { /** * The default options for rendering a VU */ var renderVUDefaults = { vuType: "vertical", lightCount: 12, lightWidth: 3, lightHeight: 17 }; var options = $.extend({}, renderVUDefaults, userOptions); var templateSelector = "#template-vu-v"; if (options.vuType === "horizontal") { templateSelector = "#template-vu-h"; } var templateSource = $(templateSelector).html(); $(selector).empty(); $(selector).html(context._.template(templateSource, options, {variable: 'data'})); }, /** * Given a selector representing a container for a VU meter and * a value between 0.0 and 1.0, light the appropriate lights. */ updateVU: function (selector, value) { // There are 13 VU lights. Figure out how many to // light based on the incoming value. var countSelector = 'tr'; var horizontal = ($('table.horizontal', selector).length); if (horizontal) { countSelector = 'td'; } var lightCount = $(countSelector, selector).length; var i = 0; var state = 'on'; var lights = Math.round(value * lightCount); var redSwitch = Math.round(lightCount * 0.6666667); var $light = null; var colorClass = 'vu-green-'; var lightSelectorPrefix = selector + ' td.vu'; var thisLightSelector = null; // Remove all light classes from all lights var allLightsSelector = selector + ' td.vulight'; $(allLightsSelector).removeClass('vu-green-off vu-green-on vu-red-off vu-red-on'); // Set the lights for (i=0; i= redSwitch) { colorClass = 'vu-red-'; } if (i >= lights) { state = 'off'; } thisLightSelector = lightSelectorPrefix + i; $light = $(thisLightSelector); $light.addClass(colorClass + state); } } }; })(window, jQuery);