diff -r d334a616c023 -r e16a97fb364a src/cm/media/js/lib/yui/yui3-3.15.0/build/button-group/button-group.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cm/media/js/lib/yui/yui3-3.15.0/build/button-group/button-group.js Mon Mar 10 15:19:48 2014 +0100 @@ -0,0 +1,194 @@ +YUI.add('button-group', function (Y, NAME) { + +/** + * A Widget to create groups of buttons + * + * @module button-group + * @since 3.5.0 + */ + +var CONTENT_BOX = "contentBox", + CLICK_EVENT = "click", + CLASS_NAMES = Y.ButtonCore.CLASS_NAMES; + +/** + * Creates a ButtonGroup + * + * @class ButtonGroup + * @extends Widget + * @param config {Object} Configuration object + * @constructor + */ +function ButtonGroup() { + ButtonGroup.superclass.constructor.apply(this, arguments); +} + +/* ButtonGroup extends Widget */ +Y.ButtonGroup = Y.extend(ButtonGroup, Y.Widget, { + + /** + * @method renderUI + * @description Creates a visual representation of the widget based on existing parameters. + * @public + */ + renderUI: function() { + this.getButtons().plug(Y.Plugin.Button); + }, + + /** + * @method bindUI + * @description Hooks up events for the widget + * @public + */ + bindUI: function() { + var group = this, + cb = group.get(CONTENT_BOX); + + cb.delegate(CLICK_EVENT, group._handleClick, Y.ButtonGroup.BUTTON_SELECTOR, group); + group.after('disabledChange', group._afterDisabledChange); + }, + + _afterDisabledChange: function (e) { + this.getButtons().each(e.newVal + ? Y.ButtonCore.prototype.disable + : Y.ButtonCore.prototype.enable + ); + }, + + /** + * @method getButtons + * @description Returns all buttons inside this this button group + * @public + */ + getButtons: function() { + var cb = this.get(CONTENT_BOX); + + return cb.all(Y.ButtonGroup.BUTTON_SELECTOR); + }, + + /** + * @method getSelectedButtons + * @description Returns all Y.Buttons instances that are selected + * @public + */ + getSelectedButtons: function() { + var group = this, + selected = [], + buttons = group.getButtons(), + selectedClass = ButtonGroup.CLASS_NAMES.SELECTED; + + buttons.each(function(node){ + if (node.hasClass(selectedClass)){ + selected.push(node); + } + }); + + return selected; + }, + + /** + * @method getSelectedValues + * @description Returns the values of all Y.Button instances that are selected + * @public + */ + getSelectedValues: function() { + var selected = this.getSelectedButtons(), + values = [], + value; + + Y.Array.each(selected, function(node){ + value = node.getContent(); + values.push(value); + }); + + return values; + }, + + /** + * @method _handleClick + * @description A delegated click handler for when any button is clicked in the content box + * @param e {Object} An event object + * @private + */ + _handleClick: function(e){ + var group = this, + clickedNode = e.target.ancestor('.' + ButtonGroup.CLASS_NAMES.BUTTON, true), + type = group.get('type'), + selectedClass = ButtonGroup.CLASS_NAMES.SELECTED, + isSelected = clickedNode.hasClass(selectedClass), + buttons; + + // TODO: Anything for 'push' groups? + if (type === 'checkbox') { + clickedNode.toggleClass(selectedClass, !isSelected); + /** + * @event selectionChange + * @description fires when any button in the group changes its checked status + * @param {Event} the event object. It contains an "originEvent" property + * linking to the original DOM event that triggered the selection change + */ + group.fire('selectionChange', {originEvent: e}); + } + else if (type === 'radio' && !isSelected) { + buttons = group.getButtons(); // Todo: getSelectedButtons()? Need it to return an arraylist then. + buttons.removeClass(selectedClass); + clickedNode.addClass(selectedClass); + group.fire('selectionChange', {originEvent: e}); + } + } + +}, { + // Y.ButtonGroup static properties + + /** + * The identity of the widget. + * + * @property NAME + * @type {String} + * @default 'buttongroup' + * @readOnly + * @protected + * @static + */ + NAME: 'buttongroup', + + /** + * Static property used to define the default attribute configuration of + * the Widget. + * + * @property ATTRS + * @type {Object} + * @protected + * @static + */ + ATTRS: { + + /** + * @attribute type + * @type String + */ + type: { + writeOnce: 'initOnly', + value: 'radio' + } + }, + + /** + * List of class names to use for ButtonGroups + * + * @property CLASS_NAMES + * @type {Object} + * @static + */ + CLASS_NAMES: CLASS_NAMES, + + /** + * Selector used to find buttons inside a ButtonGroup + * @property BUTTON_SELECTOR + * @type {String} + */ + BUTTON_SELECTOR: "button, input[type=button], input[type=reset], input[type=submit], input[type=radio], input[type=checkbox]" +}); + + +}, '@VERSION@', {"requires": ["button-plugin", "cssbutton", "widget"]});