src/cm/media/js/lib/yui/yui_3.0.0b1/build/base/base-build.js
author raph
Mon, 23 Nov 2009 15:14:29 +0100
changeset 0 40c8f766c9b8
permissions -rw-r--r--
import from internal svn r 4007
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.0b1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
build: 1163
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('base-build', 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
     * The base-build submodule provides Base.build functionality, which
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
     * can be used to create custom classes, by aggregating extensions onto 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
     * a main class.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
     * @module base
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
     * @submodule base-build
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
     * @for Base
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
    var Base = Y.Base,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
        L = Y.Lang;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
     * The build configuration for the Base class.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
     * Defines the static fields which need to be aggregated
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
     * when the Base class is used as the main class passed to 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
     * the <a href="#method_Base.build">Base.build</a> method.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
     * @property Base._buildCfg
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
     * @type Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
     * @final
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
     * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
    Base._buildCfg = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
        aggregates : ["ATTRS", "_PLUG", "_UNPLUG"]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
     * <p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
     * Builds a custom constructor function (class) from the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
     * main function, and array of extension functions (classes)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
     * provided. The NAME field for the constructor function is 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
     * defined by the first argument passed in.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
     * </p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
     * <p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
     * The cfg object supports the following properties
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
     * </p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
     * <dl>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
     *    <dt>dynamic &#60;boolean&#62;</dt>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
     *    <dd>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
     *    <p>If true (default), a completely new class
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
     *    is created which extends the main class, and acts as the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
     *    host on which the extension classes are augmented.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
     *    <p>If false, the extensions classes are augmented directly to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
     *    the main class, modifying the main class' prototype.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
     *    </dd>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
     *    <dt>aggregates &#60;String[]&#62;</dt>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
     *    <dd>An array of static property names, which will get aggregated
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
     *    on to the built class, in addition to the default properties build 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
     *    will always aggregate as defined by the main class' static _buildCfg
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
     *    property.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
     *    </dd>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
     * </dl>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
     * @method Base.build
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
     * @param {Function} name The name of the new class. Used to defined the NAME property for the new class.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
     * @param {Function} main The main class on which to base the built class
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
     * @param {Function[]} extensions The set of extension classes which will be
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
     * augmented/aggregated to the built class.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
     * @param {Object} cfg Optional. Build configuration for the class (see description).
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
     * @return {Function} A custom class, created from the provided main and extension classes
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
    Base.build = function(name, main, extensions, cfg) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
        var build = Base.build,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
            builtClass = build._getClass(main, cfg),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
            aggregates = build._getAggregates(main, cfg),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
            dynamic = builtClass._yuibuild.dynamic,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
            i, l, val, extClass;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
        // Shallow isolate aggregates
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
        if (dynamic) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
            if (aggregates) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
                for (i = 0, l = aggregates.length; i < l; ++i) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
                    val = aggregates[i];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
                    if (main.hasOwnProperty(val)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
                        builtClass[val] = L.isArray(main[val]) ? [] : {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
                Y.aggregate(builtClass, main, true, aggregates);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
        // Augment/Aggregate
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
        for (i = 0, l = extensions.length; i < l; i++) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
            extClass = extensions[i];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
            if (aggregates) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
                Y.aggregate(builtClass, extClass, true, aggregates);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
            // Old augment
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
            Y.mix(builtClass, extClass, true, null, 1);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
            builtClass._yuibuild.exts.push(extClass);
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
        builtClass.prototype.hasImpl = build._hasImpl;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
        if (dynamic) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
            builtClass.NAME = name;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
            builtClass.prototype.constructor = builtClass;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
        return builtClass;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
    Y.mix(Base.build, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
        _template: function(main) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
            function BuiltClass() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
                BuiltClass.superclass.constructor.apply(this, arguments);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
                var f = BuiltClass._yuibuild.exts, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
                    l = f.length,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
                    i;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
                for (i = 0; i < l; i++) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
                    f[i].apply(this, arguments);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
                return this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
            Y.extend(BuiltClass, main);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
            return BuiltClass;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
        _hasImpl : function(extClass) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
            if (this.constructor._yuibuild) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
                var f = this.constructor._yuibuild.exts,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
                    l = f.length,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
                    i;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
                for (i = 0; i < l; i++) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
                    if (f[i] === extClass) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
                        return true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
            return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
        _getClass : function(main, cfg) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
           var dynamic = (cfg && false === cfg.dynamic) ? false : true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
                builtClass = (dynamic) ? Base.build._template(main) : main;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
            builtClass._yuibuild = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
                id: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
                exts : [],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
                dynamic : dynamic
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
            };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
            return builtClass;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
        _getAggregates : function(main, cfg) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
            var aggr = [],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
                cfgAggr = (cfg && cfg.aggregates),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
                c = main,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
                classAggr;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
            while (c && c.prototype) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
                classAggr = c._buildCfg && c._buildCfg.aggregates;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
                if (classAggr) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
                    aggr = aggr.concat(classAggr);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
                c = c.superclass ? c.superclass.constructor : null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
            if (cfgAggr) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
                aggr = aggr.concat(cfgAggr);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
            return aggr;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
}, '3.0.0b1' ,{requires:['base-base']});