AutorÃa | Ultima modificación | Ver Log |
YUI.add('button', function (Y, NAME) {/*** 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 attributebutton.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});// ExportY.Button = Button;Y.ToggleButton = ToggleButton;}, '3.18.1', {"requires": ["button-core", "cssbutton", "widget"]});