AutorÃa | Ultima modificación | Ver Log |
YUI.add('attribute-extras', function (Y, NAME) {/*** The attribute module provides an augmentable Attribute implementation, which* adds configurable attributes and attribute change events to the class being* augmented. It also provides a State class, which is used internally by Attribute,* but can also be used independently to provide a name/property/value data structure to* store state.** @module attribute*//*** The attribute-extras submodule provides less commonly used attribute methods, and can* be augmented/mixed into an implemention which used attribute-core.** @module attribute* @submodule attribute-extras*/var BROADCAST = "broadcast",PUBLISHED = "published",INIT_VALUE = "initValue",MODIFIABLE = {readOnly:1,writeOnce:1,getter:1,broadcast:1};/*** A augmentable implementation for AttributeCore, providing less frequently used* methods for Attribute management such as modifyAttrs(), removeAttr and reset()** @class AttributeExtras* @extensionfor AttributeCore*/function AttributeExtras() {}AttributeExtras.prototype = {/*** Updates the configuration of an attribute which has already been added.* <p>* The properties which can be modified through this interface are limited* to the following subset of attributes, which can be safely modified* after a value has already been set on the attribute:* </p>* <dl>* <dt>readOnly;</dt>* <dt>writeOnce;</dt>* <dt>broadcast; and</dt>* <dt>getter.</dt>* </dl>* <p>* Note: New attributes cannot be added using this interface. New attributes must be* added using {{#crossLink "AttributeCore/addAttr:method"}}addAttr{{/crossLink}}, or an* appropriate manner for a class which utilises Attributes (e.g. the* {{#crossLink "Base/ATTRS:property"}}ATTRS{{/crossLink}} property in* {{#crossLink "Base"}}Base{{/crossLink}}).* </p>* @method modifyAttr* @param {String} name The name of the attribute whose configuration is to be updated.* @param {Object} config An object with configuration property/value pairs, specifying the configuration properties to modify.*/modifyAttr: function(name, config) {var host = this, // help compressionprop, state;if (host.attrAdded(name)) {if (host._isLazyAttr(name)) {host._addLazyAttr(name);}state = host._state;for (prop in config) {if (MODIFIABLE[prop] && config.hasOwnProperty(prop)) {state.add(name, prop, config[prop]);// If we reconfigured broadcast, need to republishif (prop === BROADCAST) {state.remove(name, PUBLISHED);}}}} else {}},/*** Removes an attribute from the host object** @method removeAttr* @param {String} name The name of the attribute to be removed.*/removeAttr: function(name) {this._state.removeAll(name);},/*** Resets the attribute (or all attributes) to its initial value, as long as* the attribute is not readOnly, or writeOnce.** @method reset* @param {String} name Optional. The name of the attribute to reset. If omitted, all attributes are reset.* @return {Object} A reference to the host object.* @chainable*/reset : function(name) {var host = this; // help compressionif (name) {if (host._isLazyAttr(name)) {host._addLazyAttr(name);}host.set(name, host._state.get(name, INIT_VALUE));} else {Y.Object.each(host._state.data, function(v, n) {host.reset(n);});}return host;},/*** Returns an object with the configuration properties (and value)* for the given attribute. If attrName is not provided, returns the* configuration properties for all attributes.** @method _getAttrCfg* @protected* @param {String} name Optional. The attribute name. If not provided, the method will return the configuration for all attributes.* @return {Object} The configuration properties for the given attribute, or all attributes.*/_getAttrCfg : function(name) {var o,state = this._state;if (name) {o = state.getAll(name) || {};} else {o = {};Y.each(state.data, function(v, n) {o[n] = state.getAll(n);});}return o;}};Y.AttributeExtras = AttributeExtras;}, '3.18.1', {"requires": ["oop"]});