src/cm/media/js/lib/yui/yui3-3.15.0/build/button-group/button-group-debug.js
changeset 602 e16a97fb364a
equal deleted inserted replaced
601:d334a616c023 602:e16a97fb364a
       
     1 YUI.add('button-group', function (Y, NAME) {
       
     2 
       
     3 /**
       
     4  * A Widget to create groups of buttons
       
     5  *
       
     6  * @module button-group
       
     7  * @since 3.5.0
       
     8  */
       
     9 
       
    10 var CONTENT_BOX = "contentBox",
       
    11     CLICK_EVENT = "click",
       
    12     CLASS_NAMES = Y.ButtonCore.CLASS_NAMES;
       
    13 
       
    14 /**
       
    15  * Creates a ButtonGroup
       
    16  *
       
    17  * @class ButtonGroup
       
    18  * @extends Widget
       
    19  * @param config {Object} Configuration object
       
    20  * @constructor
       
    21  */
       
    22 function ButtonGroup() {
       
    23     ButtonGroup.superclass.constructor.apply(this, arguments);
       
    24 }
       
    25 
       
    26 /* ButtonGroup extends Widget */
       
    27 Y.ButtonGroup = Y.extend(ButtonGroup, Y.Widget, {
       
    28 
       
    29     /**
       
    30      * @method renderUI
       
    31      * @description Creates a visual representation of the widget based on existing parameters.
       
    32      * @public
       
    33      */
       
    34     renderUI: function() {
       
    35         this.getButtons().plug(Y.Plugin.Button);
       
    36     },
       
    37 
       
    38     /**
       
    39      * @method bindUI
       
    40      * @description Hooks up events for the widget
       
    41      * @public
       
    42      */
       
    43     bindUI: function() {
       
    44         var group = this,
       
    45             cb = group.get(CONTENT_BOX);
       
    46 
       
    47         cb.delegate(CLICK_EVENT, group._handleClick, Y.ButtonGroup.BUTTON_SELECTOR, group);
       
    48         group.after('disabledChange', group._afterDisabledChange);
       
    49     },
       
    50 
       
    51     _afterDisabledChange: function (e) {
       
    52         this.getButtons().each(e.newVal
       
    53             ? Y.ButtonCore.prototype.disable
       
    54             : Y.ButtonCore.prototype.enable
       
    55         );
       
    56     },
       
    57 
       
    58     /**
       
    59      * @method getButtons
       
    60      * @description Returns all buttons inside this this button group
       
    61      * @public
       
    62      */
       
    63     getButtons: function() {
       
    64         var cb = this.get(CONTENT_BOX);
       
    65 
       
    66         return cb.all(Y.ButtonGroup.BUTTON_SELECTOR);
       
    67     },
       
    68 
       
    69     /**
       
    70      * @method getSelectedButtons
       
    71      * @description Returns all Y.Buttons instances that are selected
       
    72      * @public
       
    73      */
       
    74     getSelectedButtons: function() {
       
    75         var group = this,
       
    76             selected = [],
       
    77             buttons = group.getButtons(),
       
    78             selectedClass = ButtonGroup.CLASS_NAMES.SELECTED;
       
    79 
       
    80         buttons.each(function(node){
       
    81             if (node.hasClass(selectedClass)){
       
    82                 selected.push(node);
       
    83             }
       
    84         });
       
    85 
       
    86         return selected;
       
    87     },
       
    88 
       
    89     /**
       
    90      * @method getSelectedValues
       
    91      * @description Returns the values of all Y.Button instances that are selected
       
    92      * @public
       
    93      */
       
    94     getSelectedValues: function() {
       
    95         var selected = this.getSelectedButtons(),
       
    96             values = [],
       
    97             value;
       
    98 
       
    99         Y.Array.each(selected, function(node){
       
   100             value = node.getContent();
       
   101             values.push(value);
       
   102         });
       
   103 
       
   104         return values;
       
   105     },
       
   106 
       
   107     /**
       
   108      * @method _handleClick
       
   109      * @description A delegated click handler for when any button is clicked in the content box
       
   110      * @param e {Object} An event object
       
   111      * @private
       
   112      */
       
   113     _handleClick: function(e){
       
   114         var group = this,
       
   115             clickedNode = e.target.ancestor('.' + ButtonGroup.CLASS_NAMES.BUTTON, true),
       
   116             type = group.get('type'),
       
   117             selectedClass = ButtonGroup.CLASS_NAMES.SELECTED,
       
   118             isSelected = clickedNode.hasClass(selectedClass),
       
   119             buttons;
       
   120 
       
   121         // TODO: Anything for 'push' groups?
       
   122         if (type === 'checkbox') {
       
   123             clickedNode.toggleClass(selectedClass, !isSelected);
       
   124             /**
       
   125              * @event selectionChange
       
   126              * @description fires when any button in the group changes its checked status
       
   127              * @param {Event} the event object. It contains an "originEvent" property
       
   128              * linking to the original DOM event that triggered the selection change
       
   129              */
       
   130             group.fire('selectionChange', {originEvent: e});
       
   131         }
       
   132         else if (type === 'radio' && !isSelected) {
       
   133             buttons = group.getButtons(); // Todo: getSelectedButtons()? Need it to return an arraylist then.
       
   134             buttons.removeClass(selectedClass);
       
   135             clickedNode.addClass(selectedClass);
       
   136             group.fire('selectionChange', {originEvent: e});
       
   137         }
       
   138     }
       
   139 
       
   140 }, {
       
   141     // Y.ButtonGroup static properties
       
   142 
       
   143     /**
       
   144      * The identity of the widget.
       
   145      *
       
   146      * @property NAME
       
   147      * @type {String}
       
   148      * @default 'buttongroup'
       
   149      * @readOnly
       
   150      * @protected
       
   151      * @static
       
   152      */
       
   153     NAME: 'buttongroup',
       
   154 
       
   155     /**
       
   156      * Static property used to define the default attribute configuration of
       
   157      * the Widget.
       
   158      *
       
   159      * @property ATTRS
       
   160      * @type {Object}
       
   161      * @protected
       
   162      * @static
       
   163      */
       
   164     ATTRS: {
       
   165 
       
   166         /**
       
   167          * @attribute type
       
   168          * @type String
       
   169          */
       
   170         type: {
       
   171             writeOnce: 'initOnly',
       
   172             value: 'radio'
       
   173         }
       
   174     },
       
   175 
       
   176     /**
       
   177      * List of class names to use for ButtonGroups
       
   178      *
       
   179      * @property CLASS_NAMES
       
   180      * @type {Object}
       
   181      * @static
       
   182      */
       
   183     CLASS_NAMES: CLASS_NAMES,
       
   184 
       
   185     /**
       
   186      * Selector used to find buttons inside a ButtonGroup
       
   187      * @property BUTTON_SELECTOR
       
   188      * @type {String}
       
   189      */
       
   190     BUTTON_SELECTOR: "button, input[type=button], input[type=reset], input[type=submit], input[type=radio], input[type=checkbox]"
       
   191 });
       
   192 
       
   193 
       
   194 }, '@VERSION@', {"requires": ["button-plugin", "cssbutton", "widget"]});