- /**
- * A Button Widget
- *
- * @module button
- * @since 3.5.0
- */
-
- var ButtonCore = Y.ButtonCore,
- CLASS_NAMES = ButtonCore.CLASS_NAMES,
- ARIA_STATES = ButtonCore.ARIA_STATES,
- ARIA_ROLES = ButtonCore.ARIA_ROLES;
-
- /**
- * Creates a Button
- *
- * @class Button
- * @extends Widget
- * @uses ButtonCore
- * @param config {Object} Configuration object
- * @constructor
- */
- function Button() {
- Button.superclass.constructor.apply(this, arguments);
- }
-
- /* Button extends Widget */
- Y.extend(Button, Y.Widget, {
-
- // Y.Button prototype properties
-
- /**
- * Bounding box template that will contain the Button's DOM subtree.
- *
- * @property BOUNDING_TEMPLATE
- * @type {String}
- * @default <button/>
- */
- BOUNDING_TEMPLATE : ButtonCore.prototype.TEMPLATE,
-
- /**
- * Content box template
- *
- * @property CONTENT_TEMPLATE
- * @type {String}
- * @default null
- */
- CONTENT_TEMPLATE : null
-
- }, {
-
- // Y.Button static properties
-
- /**
- * The identity of the widget.
- *
- * @property NAME
- * @type String
- * @default 'button'
- * @readOnly
- * @protected
- * @static
- */
- NAME: ButtonCore.NAME,
-
- /**
- * Static property used to define the default attribute configuration of
- * the Widget.
- *
- * @property ATTRS
- * @type {Object}
- * @protected
- * @static
- */
- ATTRS: ButtonCore.ATTRS,
-
- /**
- * The text of the button's label
- *
- * @attribute label
- * @type String
- */
-
- /**
- * The HTML of the button's label
- *
- * This attribute accepts HTML and inserts it into the DOM **without**
- * sanitization. This attribute should only be used with HTML that has
- * either been escaped (using `Y.Escape.html`), or sanitized according to
- * the requirements of your application.
- *
- * If all you need is support for text labels, please use the `label`
- * attribute instead.
- *
- * @attribute labelHTML
- * @type HTML
- */
-
- /**
- * @property HTML_PARSER
- * @type {Object}
- * @protected
- * @static
- */
- HTML_PARSER: {
- labelHTML: ButtonCore._getHTMLFromNode,
- disabled: ButtonCore._getDisabledFromNode
- },
-
- /**
- * List of class names used in the Button's DOM
- *
- * @property CLASS_NAMES
- * @type Object
- * @static
- */
- CLASS_NAMES: CLASS_NAMES
- });
-
- Y.mix(Button.prototype, ButtonCore.prototype);
-
- /**
- * Creates a ToggleButton
- *
- * @class ToggleButton
- * @extends Button
- * @param config {Object} Configuration object
- * @constructor
- */
- function ToggleButton() {
- Button.superclass.constructor.apply(this, arguments);
- }
-
- // TODO: move to ButtonCore subclass to enable toggle plugin, widget, etc.
- /* ToggleButton extends Button */
- Y.extend(ToggleButton, Button, {
-
- /**
- *
- *
- * @property trigger
- * @type {String}
- * @default
- */
- trigger: 'click',
-
- /**
- *
- *
- * @property selectedAttrName
- * @type {String}
- * @default
- */
- selectedAttrName: '',
-
- /**
- *
- * @method initializer
- */
- initializer: function (config) {
- var button = this,
- type = button.get('type'),
- selectedAttrName = (type === "checkbox" ? 'checked' : 'pressed'),
- selectedState = config[selectedAttrName] || false;
-
- // Create the checked/pressed attribute
- button.addAttr(selectedAttrName, {
- value: selectedState
- });
-
- button.selectedAttrName = selectedAttrName;
- },
-
- /**
- *
- * @method destructor
- */
- destructor: function () {
- delete this.selectedAttrName;
- },
-
- /**
- * @method bindUI
- * @description Hooks up events for the widget
- */
- bindUI: function() {
- var button = this,
- cb = button.get('contentBox');
-
- ToggleButton.superclass.bindUI.call(button);
-
- cb.on(button.trigger, button.toggle, button);
- button.after(button.selectedAttrName + 'Change', button._afterSelectedChange);
- },
-
- /**
- * @method syncUI
- * @description Syncs the UI for the widget
- */
- syncUI: function() {
- var button = this,
- cb = button.get('contentBox'),
- type = button.get('type'),
- ROLES = ToggleButton.ARIA_ROLES,
- role = (type === 'checkbox' ? ROLES.CHECKBOX : ROLES.TOGGLE),
- selectedAttrName = button.selectedAttrName;
-
- ToggleButton.superclass.syncUI.call(button);
-
- cb.set('role', role);
- button._uiSetSelected(button.get(selectedAttrName));
- },
-
- /**
- * @method _afterSelectedChange
- * @private
- */
- _afterSelectedChange: function(e){
- this._uiSetSelected(e.newVal);
- },
-
- /**
- * @method _uiSetSelected
- * @private
- */
- _uiSetSelected: function(value) {
- var button = this,
- cb = button.get('contentBox'),
- STATES = ToggleButton.ARIA_STATES,
- type = button.get('type'),
- ariaState = (type === 'checkbox' ? STATES.CHECKED : STATES.PRESSED);
-
- cb.toggleClass(Button.CLASS_NAMES.SELECTED, value);
- cb.set(ariaState, value);
- },
-
- /**
- * @method toggle
- * @description Toggles the selected/pressed/checked state of a ToggleButton
- * @public
- */
- toggle: function() {
- var button = this;
- button._set(button.selectedAttrName, !button.get(button.selectedAttrName));
- }
-
- }, {
-
- /**
- * The identity of the widget.
- *
- * @property NAME
- * @type {String}
- * @default 'buttongroup'
- * @readOnly
- * @protected
- * @static
- */
- NAME: 'toggleButton',
-
- /**
- * Static property used to define the default attribute configuration of
- * the Widget.
- *
- * @property ATTRS
- * @type {Object}
- * @protected
- * @static
- */
- ATTRS: {
-
- /**
- *
- *
- * @attribute type
- * @type String
- */
- type: {
- value: 'toggle',
- writeOnce: 'initOnly'
- }
- },
-
- /**
- * @property HTML_PARSER
- * @type {Object}
- * @protected
- * @static
- */
- HTML_PARSER: {
- checked: function(node) {
- return node.hasClass(CLASS_NAMES.SELECTED);
- },
- pressed: function(node) {
- return node.hasClass(CLASS_NAMES.SELECTED);
- }
- },
-
- /**
- * @property ARIA_STATES
- * @type {Object}
- * @protected
- * @static
- */
- ARIA_STATES: ARIA_STATES,
-
- /**
- * @property ARIA_ROLES
- * @type {Object}
- * @protected
- * @static
- */
- ARIA_ROLES: ARIA_ROLES,
-
- /**
- * Array of static constants used to identify the classnames applied to DOM nodes
- *
- * @property CLASS_NAMES
- * @type Object
- * @static
- */
- CLASS_NAMES: CLASS_NAMES
-
- });
-
- // Export
- Y.Button = Button;
- Y.ToggleButton = ToggleButton;
-
-