src/cm/media/js/lib/yui/yui_3.10.3/build/attribute-extras/attribute-extras.js
changeset 525 89ef5ed3c48b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cm/media/js/lib/yui/yui_3.10.3/build/attribute-extras/attribute-extras.js	Tue Jul 16 14:29:46 2013 +0200
@@ -0,0 +1,152 @@
+/*
+YUI 3.10.3 (build 2fb5187)
+Copyright 2013 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: readOnly, writeOnce,
+         * broadcast and getter.
+         * </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);
+                        }
+                    }
+                }
+            }
+            /*jshint maxlen:200*/
+            /*jshint maxlen:150 */
+        },
+
+        /**
+         * 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.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.10.3', {"requires": ["oop"]});