src/cm/media/js/lib/yui/yui_3.10.3/build/base-build/base-build.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 525 89ef5ed3c48b
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
YUI 3.10.3 (build 2fb5187)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
Copyright 2013 Yahoo! Inc. All rights reserved.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
Licensed under the BSD License.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
http://yuilibrary.com/license/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
YUI.add('base-build', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
     * The base-build submodule provides Base.build functionality, which
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
     * can be used to create custom classes, by aggregating extensions onto
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
     * a main class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
     * @module base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
     * @submodule base-build
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
     * @for Base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
    var BaseCore = Y.BaseCore,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
        Base     = Y.Base,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
        L        = Y.Lang,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
        INITIALIZER = "initializer",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
        DESTRUCTOR  = "destructor",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
        AGGREGATES  = ["_PLUG", "_UNPLUG"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
        build;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
    // Utility function used in `_buildCfg` to aggregate array values into a new
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
    // array from the sender constructor to the receiver constructor.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
    function arrayAggregator(prop, r, s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
        if (s[prop]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
            r[prop] = (r[prop] || []).concat(s[prop]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
    // Utility function used in `_buildCfg` to aggregate `_ATTR_CFG` array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
    // values from the sender constructor into a new array on receiver's
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
    // constructor, and clear the cached hash.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
    function attrCfgAggregator(prop, r, s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
        if (s._ATTR_CFG) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
            // Clear cached hash.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
            r._ATTR_CFG_HASH = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
            arrayAggregator.apply(null, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
    // Utility function used in `_buildCfg` to aggregate ATTRS configs from one
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
    // the sender constructor to the receiver constructor.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
    function attrsAggregator(prop, r, s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
        BaseCore.modifyAttrs(r, s.ATTRS);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
    Base._build = function(name, main, extensions, px, sx, cfg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
        var build = Base._build,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
            builtClass = build._ctor(main, cfg),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
            buildCfg = build._cfg(main, cfg, extensions),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
            _mixCust = build._mixCust,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
            dynamic = builtClass._yuibuild.dynamic,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
            i, l, extClass, extProto,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
            initializer,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
            destructor;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
        // Augment/Aggregate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
        for (i = 0, l = extensions.length; i < l; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
            extClass = extensions[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
            extProto = extClass.prototype;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
            initializer = extProto[INITIALIZER];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
            destructor = extProto[DESTRUCTOR];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
            delete extProto[INITIALIZER];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
            delete extProto[DESTRUCTOR];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
            // Prototype, old non-displacing augment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
            Y.mix(builtClass, extClass, true, null, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
            // Custom Statics
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
            _mixCust(builtClass, extClass, buildCfg);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
            if (initializer) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
                extProto[INITIALIZER] = initializer;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
            if (destructor) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
                extProto[DESTRUCTOR] = destructor;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
            builtClass._yuibuild.exts.push(extClass);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
        if (px) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
            Y.mix(builtClass.prototype, px, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
        if (sx) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
            Y.mix(builtClass, build._clean(sx, buildCfg), true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
            _mixCust(builtClass, sx, buildCfg);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
        builtClass.prototype.hasImpl = build._impl;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
        if (dynamic) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
            builtClass.NAME = name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
            builtClass.prototype.constructor = builtClass;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
            // Carry along the reference to `modifyAttrs()` from `main`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
            builtClass.modifyAttrs = main.modifyAttrs;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
        return builtClass;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
    build = Base._build;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
    Y.mix(build, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
        _mixCust: function(r, s, cfg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
            var aggregates,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
                custom,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
                statics,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
                aggr,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
                l,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
                i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
            if (cfg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
                aggregates = cfg.aggregates;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
                custom = cfg.custom;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
                statics = cfg.statics;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
            if (statics) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
                Y.mix(r, s, true, statics);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
            if (aggregates) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
                for (i = 0, l = aggregates.length; i < l; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
                    aggr = aggregates[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
                    if (!r.hasOwnProperty(aggr) && s.hasOwnProperty(aggr)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
                        r[aggr] = L.isArray(s[aggr]) ? [] : {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
                    Y.aggregate(r, s, true, [aggr]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
            if (custom) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
                for (i in custom) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
                    if (custom.hasOwnProperty(i)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
                        custom[i](i, r, s);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
        _tmpl: function(main) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
            function BuiltClass() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
                BuiltClass.superclass.constructor.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
            Y.extend(BuiltClass, main);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
            return BuiltClass;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
        _impl : function(extClass) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
            var classes = this._getClasses(), i, l, cls, exts, ll, j;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
            for (i = 0, l = classes.length; i < l; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
                cls = classes[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
                if (cls._yuibuild) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
                    exts = cls._yuibuild.exts;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
                    ll = exts.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
                    for (j = 0; j < ll; j++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
                        if (exts[j] === extClass) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
                            return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
            return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
        _ctor : function(main, cfg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
           var dynamic = (cfg && false === cfg.dynamic) ? false : true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
               builtClass = (dynamic) ? build._tmpl(main) : main,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
               buildCfg = builtClass._yuibuild;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
            if (!buildCfg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
                buildCfg = builtClass._yuibuild = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
            buildCfg.id = buildCfg.id || null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
            buildCfg.exts = buildCfg.exts || [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
            buildCfg.dynamic = dynamic;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
            return builtClass;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
        _cfg : function(main, cfg, exts) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
            var aggr = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
                cust = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
                statics = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
                buildCfg,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
                cfgAggr = (cfg && cfg.aggregates),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
                cfgCustBuild = (cfg && cfg.custom),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
                cfgStatics = (cfg && cfg.statics),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
                c = main,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
                i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
                l;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
            // Prototype Chain
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
            while (c && c.prototype) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
                buildCfg = c._buildCfg;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
                if (buildCfg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
                    if (buildCfg.aggregates) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
                        aggr = aggr.concat(buildCfg.aggregates);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
                    if (buildCfg.custom) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
                        Y.mix(cust, buildCfg.custom, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
                    if (buildCfg.statics) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
                        statics = statics.concat(buildCfg.statics);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
                c = c.superclass ? c.superclass.constructor : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
            // Exts
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
            if (exts) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
                for (i = 0, l = exts.length; i < l; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
                    c = exts[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
                    buildCfg = c._buildCfg;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
                    if (buildCfg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
                        if (buildCfg.aggregates) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
                            aggr = aggr.concat(buildCfg.aggregates);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
                        if (buildCfg.custom) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
                            Y.mix(cust, buildCfg.custom, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
                        if (buildCfg.statics) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
                            statics = statics.concat(buildCfg.statics);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
            if (cfgAggr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
                aggr = aggr.concat(cfgAggr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
            if (cfgCustBuild) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
                Y.mix(cust, cfg.cfgBuild, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
            if (cfgStatics) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
                statics = statics.concat(cfgStatics);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
            return {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
                aggregates: aggr,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
                custom: cust,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
                statics: statics
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
        _clean : function(sx, cfg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
            var prop, i, l, sxclone = Y.merge(sx),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
                aggregates = cfg.aggregates,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
                custom = cfg.custom;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
            for (prop in custom) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
                if (sxclone.hasOwnProperty(prop)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
                    delete sxclone[prop];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
            for (i = 0, l = aggregates.length; i < l; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
                prop = aggregates[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
                if (sxclone.hasOwnProperty(prop)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
                    delete sxclone[prop];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
            return sxclone;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
     * <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
     * Builds a custom constructor function (class) from the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
     * main function, and array of extension functions (classes)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
     * provided. The NAME field for the constructor function is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
     * defined by the first argument passed in.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
     * </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
     * <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
     * The cfg object supports the following properties
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
     * </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
     * <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
     *    <dt>dynamic &#60;boolean&#62;</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
     *    <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
     *    <p>If true (default), a completely new class
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
     *    is created which extends the main class, and acts as the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
     *    host on which the extension classes are augmented.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
     *    <p>If false, the extensions classes are augmented directly to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
     *    the main class, modifying the main class' prototype.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
     *    </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
     *    <dt>aggregates &#60;String[]&#62;</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
     *    <dd>An array of static property names, which will get aggregated
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
     *    on to the built class, in addition to the default properties build
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
     *    will always aggregate as defined by the main class' static _buildCfg
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
     *    property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
     *    </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
     * </dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
     * @method build
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
     * @deprecated Use the more convenient Base.create and Base.mix methods instead
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
     * @param {Function} name The name of the new class. Used to define the NAME property for the new class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
     * @param {Function} main The main class on which to base the built class
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
     * @param {Function[]} extensions The set of extension classes which will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
     * augmented/aggregated to the built class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
     * @param {Object} cfg Optional. Build configuration for the class (see description).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
     * @return {Function} A custom class, created from the provided main and extension classes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
    Base.build = function(name, main, extensions, cfg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
        return build(name, main, extensions, null, null, cfg);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
     * Creates a new class (constructor function) which extends the base class passed in as the second argument,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
     * and mixes in the array of extensions provided.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
     * Prototype properties or methods can be added to the new class, using the px argument (similar to Y.extend).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
     * Static properties or methods can be added to the new class, using the sx argument (similar to Y.extend).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
     * **NOTE FOR COMPONENT DEVELOPERS**: Both the `base` class, and `extensions` can define static a `_buildCfg`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
     * property, which acts as class creation meta-data, and drives how special static properties from the base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
     * class, or extensions should be copied, aggregated or (custom) mixed into the newly created class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
     * The `_buildCfg` property is a hash with 3 supported properties: `statics`, `aggregates` and `custom`, e.g:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
     *     // If the Base/Main class is the thing introducing the property:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
     *     MyBaseClass._buildCfg = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
     *        // Static properties/methods to copy (Alias) to the built class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
     *        statics: ["CopyThisMethod", "CopyThisProperty"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
     *        // Static props to aggregate onto the built class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
     *        aggregates: ["AggregateThisProperty"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
     *        // Static properties which need custom handling (e.g. deep merge etc.)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
     *        custom: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
     *           "CustomProperty" : function(property, Receiver, Supplier) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
     *              ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
     *              var triggers = Receiver.CustomProperty.triggers;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
     *              Receiver.CustomProperty.triggers = triggers.concat(Supplier.CustomProperty.triggers);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
     *              ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
     *           }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
     *        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
     *     };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
     *     MyBaseClass.CopyThisMethod = function() {...};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
     *     MyBaseClass.CopyThisProperty = "foo";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
     *     MyBaseClass.AggregateThisProperty = {...};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
     *     MyBaseClass.CustomProperty = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
     *        triggers: [...]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
     *     }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
     *     // Or, if the Extension is the thing introducing the property:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
     *     MyExtension._buildCfg = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
     *         statics : ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
     *         aggregates : ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
     *         custom : ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
     *     }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
     * This way, when users pass your base or extension class to `Y.Base.create` or `Y.Base.mix`, they don't need to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
     * know which properties need special handling. `Y.Base` has a buildCfg which defines `ATTRS` for custom mix handling
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
     * (to protect the static config objects), and `Y.Widget` has a buildCfg which specifies `HTML_PARSER` for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
     * straight up aggregation.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
     * @method create
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
     * @param {String} name The name of the newly created class. Used to define the NAME property for the new class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
     * @param {Function} main The base class which the new class should extend.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
     * This class needs to be Base or a class derived from base (e.g. Widget).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
     * @param {Function[]} extensions The list of extensions which will be mixed into the built class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
     * @param {Object} px The set of prototype properties/methods to add to the built class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
     * @param {Object} sx The set of static properties/methods to add to the built class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
     * @return {Function} The newly created class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
    Base.create = function(name, base, extensions, px, sx) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
        return build(name, base, extensions, px, sx);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
     * <p>Mixes in a list of extensions to an existing class.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
     * @method mix
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
     * @param {Function} main The existing class into which the extensions should be mixed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
     * The class needs to be Base or a class derived from Base (e.g. Widget)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
     * @param {Function[]} extensions The set of extension classes which will mixed into the existing main class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
     * @return {Function} The modified main class, with extensions mixed in.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
    Base.mix = function(main, extensions) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
        if (main._CACHED_CLASS_DATA) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
            main._CACHED_CLASS_DATA = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
        return build(null, main, extensions, null, null, {dynamic:false});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
     * The build configuration for the Base class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
     * Defines the static fields which need to be aggregated when the Base class
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
     * is used as the main class passed to the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
     * <a href="#method_Base.build">Base.build</a> method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
     * @property _buildCfg
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
     * @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
     * @final
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
    BaseCore._buildCfg = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
        aggregates: AGGREGATES.concat(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
        custom: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
            ATTRS         : attrsAggregator,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
            _ATTR_CFG     : attrCfgAggregator,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
            _NON_ATTRS_CFG: arrayAggregator
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
    // Makes sure Base and BaseCore use separate `_buildCfg` objects.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
    Base._buildCfg = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
        aggregates: AGGREGATES.concat(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
        custom: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
            ATTRS         : attrsAggregator,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
            _ATTR_CFG     : attrCfgAggregator,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
            _NON_ATTRS_CFG: arrayAggregator
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
}, '3.10.3', {"requires": ["base-base"]});