src/cm/media/js/lib/yui/yui3.0.0/build/attribute/attribute-complex.js
author raph
Tue, 20 Apr 2010 11:14:21 +0200
branchpreserve_html
changeset 259 0371caf8bcc6
parent 0 40c8f766c9b8
permissions -rw-r--r--
always use pandoc but in raw mode for html->html convert
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
/*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
Code licensed under the BSD License:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
http://developer.yahoo.net/yui/license.txt
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
version: 3.0.0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
build: 1549
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
YUI.add('attribute-complex', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
     * Adds support for attribute providers to handle complex attributes in the constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
     * @module attribute
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
     * @submodule attribute-complex
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
     * @for Attribute
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
    var O = Y.Object,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
        DOT = ".";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
    Y.Attribute.Complex = function() {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
    Y.Attribute.Complex.prototype = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
         * Utility method to split out simple attribute name/value pairs ("x") 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
         * from complex attribute name/value pairs ("x.y.z"), so that complex
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
         * attributes can be keyed by the top level attribute name.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
         * @method _normAttrVals
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
         * @param {Object} valueHash An object with attribute name/value pairs
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
         * @return {Object} An object literal with 2 properties - "simple" and "complex",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
         * containing simple and complex attribute values respectively keyed 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
         * by the top level attribute name, or null, if valueHash is falsey.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
        _normAttrVals : function(valueHash) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
            var vals = {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
                subvals = {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
                path,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
                attr,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
                v, k;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
            if (valueHash) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
                for (k in valueHash) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
                    if (valueHash.hasOwnProperty(k)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
                        if (k.indexOf(DOT) !== -1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
                            path = k.split(DOT);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
                            attr = path.shift();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
                            v = subvals[attr] = subvals[attr] || [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
                            v[v.length] = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
                                path : path, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
                                value: valueHash[k]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
                            };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
                        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
                            vals[k] = valueHash[k];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
                return { simple:vals, complex:subvals };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
                return null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
         * Returns the initial value of the given attribute from
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
         * either the default configuration provided, or the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
         * over-ridden value if it exists in the set of initValues 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
         * provided and the attribute is not read-only.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
         * @param {String} attr The name of the attribute
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
         * @param {Object} cfg The attribute configuration object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
         * @param {Object} initValues The object with simple and complex attribute name/value pairs returned from _normAttrVals
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
         * @return {Any} The initial value of the attribute.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
         * @method _getAttrInitVal
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
        _getAttrInitVal : function(attr, cfg, initValues) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
            var val = (cfg.valueFn) ? cfg.valueFn.call(this) : cfg.value,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
                simple,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
                complex,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
                i,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
                l,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
                path,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
                subval,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
                subvals;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
            if (!cfg.readOnly && initValues) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
                // Simple Attributes
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
                simple = initValues.simple;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
                if (simple && simple.hasOwnProperty(attr)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
                    val = simple[attr];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
                // Complex Attributes (complex values applied, after simple, incase both are set)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
                complex = initValues.complex;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
                if (complex && complex.hasOwnProperty(attr)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
                    subvals = complex[attr];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
                    for (i = 0, l = subvals.length; i < l; ++i) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
                        path = subvals[i].path;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
                        subval = subvals[i].value;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
                        O.setValue(val, path, subval);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
            return val;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
    Y.mix(Y.Attribute, Y.Attribute.Complex, true, null, 1);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
}, '3.0.0' ,{requires:['attribute-base']});