/* * The goal meter plugin. * * Applies the goal meter style to a scoreboard item. * * Data attributes: * - data-control="goal-meter" - enables the goal meter plugin * - data-value - sets the value, in percents * * JavaScript API: * $('.scoreboard .goal-meter').goalMeter({value: 20}) * $('.scoreboard .goal-meter').goalMeter(10) // Sets the current value */ +function ($) { "use strict"; var GoalMeter = function (element, options) { var $el = this.$el = $(element), self = this; this.options = options || {}; this.$indicatorBar = $('').text(this.options.value + '%') this.$indicatorOuter = $('').addClass('goal-meter-indicator').append(this.$indicatorBar) $('p', this.$el).first().before(this.$indicatorOuter) window.setTimeout(function(){ self.update(self.options.value) }, 200) } GoalMeter.prototype.update = function(value) { this.$indicatorBar.css('height', value + '%') } GoalMeter.DEFAULTS = { value: 50 } // GOALMETER PLUGIN DEFINITION // ============================ var old = $.fn.goalMeter $.fn.goalMeter = function (option) { return this.each(function () { var $this = $(this) var data = $this.data('oc.goalMeter') var options = $.extend({}, GoalMeter.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data) $this.data('oc.goalMeter', (data = new GoalMeter(this, options))) else data.update(option) }) } $.fn.goalMeter.Constructor = GoalMeter // GOALMETER NO CONFLICT // ================= $.fn.goalMeter.noConflict = function () { $.fn.goalMeter = old return this } // GOALMETER DATA-API // =============== $(document).render(function () { $('[data-control=goal-meter]').goalMeter() }) }(window.jQuery);