You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
5.5 KiB
163 lines
5.5 KiB
/*
|
|
YUI 3.17.2 (build 9c3c78e)
|
|
Copyright 2014 Yahoo! Inc. All rights reserved.
|
|
Licensed under the BSD License.
|
|
http://yuilibrary.com/license/
|
|
*/
|
|
|
|
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 compression
|
|
prop, 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 republish
|
|
if (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 compression
|
|
|
|
if (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.17.2', {"requires": ["oop"]});
|
|
|