Version 3.17.2

APIs

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

File: attribute/js/AttributeExtras.js

 /**
 * 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 {
 Y.log('Attribute modifyAttr:' + name + ' has not been added. Use addAttr to add the attribute', 'warn', 'attribute');
 }
 },
 /**
 * 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;
 

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