Version 3.18.1

APIs

  • Begin typing in the search box above to see results.
Show:

File: button/js/button.js

 /**
 * 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;
 
 

AltStyle によって変換されたページ (->オリジナル) /