/* * Fuel UX Radio * https://github.com/ExactTarget/fuelux * * Copyright (c) 2012 ExactTarget * Licensed under the MIT license. */ define(['require','jquery'],function (require) { var $ = require('jquery'); // RADIO CONSTRUCTOR AND PROTOTYPE var Radio = function (element, options) { this.$element = $(element); this.options = $.extend({}, $.fn.radio.defaults, options); // cache elements this.$label = this.$element.parent(); this.$icon = this.$label.find('i'); this.$radio = this.$label.find('input[type=radio]'); this.groupName = this.$radio.attr('name'); // set default state this.setState(this.$radio); // handle events this.$radio.on('change', $.proxy(this.itemchecked, this)); }; Radio.prototype = { constructor: Radio, setState: function ($radio, resetGroupState) { var checked = $radio.is(':checked'); var disabled = $radio.is(':disabled'); // set state of radio if (checked === true) { this.$icon.addClass('checked'); } if (disabled === true) { this.$icon.addClass('disabled'); } }, resetGroup: function () { // reset all radio buttons in group $('input[name=' + this.groupName + ']').next().removeClass('checked'); }, enable: function () { this.$radio.attr('disabled', false); this.$icon.removeClass('disabled'); }, disable: function () { this.$radio.attr('disabled', true); this.$icon.addClass('disabled'); }, itemchecked: function (e) { var radio = $(e.target); this.resetGroup(); this.setState(radio); } }; // RADIO PLUGIN DEFINITION $.fn.radio = function (option, value) { var methodReturn; var $set = this.each(function () { var $this = $(this); var data = $this.data('radio'); var options = typeof option === 'object' && option; if (!data) $this.data('radio', (data = new Radio(this, options))); if (typeof option === 'string') methodReturn = data[option](value); }); return (methodReturn === undefined) ? $set : methodReturn; }; $.fn.radio.defaults = {}; $.fn.radio.Constructor = Radio; // RADIO DATA-API $(function () { $(window).on('load', function () { //$('i.radio').each(function () { $('.radio-custom > input[type=radio]').each(function () { var $this = $(this); if ($this.data('radio')) return; $this.radio($this.data()); }); }); }); });