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