src/cm/media/js/lib/yui/yui3-3.15.0/build/loader-base/loader-base-debug.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 602 e16a97fb364a
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     1
YUI.add('loader-base', function (Y, NAME) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     2
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     3
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     4
 * The YUI loader core
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
 * @module loader
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
 * @submodule loader-base
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
(function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
    var VERSION = Y.version,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
        BUILD = '/build/',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
        ROOT = VERSION + '/',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
        CDN_BASE = Y.Env.base,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
        GALLERY_VERSION = 'gallery-2014.02.20-23-55',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
        TNT = '2in3',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
        TNT_VERSION = '4',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
        YUI2_VERSION = '2.9.0',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
        COMBO_BASE = CDN_BASE + 'combo?',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
        META = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
            version: VERSION,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
            root: ROOT,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
            base: Y.Env.base,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
            comboBase: COMBO_BASE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
            skin: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
                defaultSkin: 'sam',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
                base: 'assets/skins/',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
                path: 'skin.css',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
                after: [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
                    'cssreset',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
                    'cssfonts',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
                    'cssgrids',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
                    'cssbase',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
                    'cssreset-context',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
                    'cssfonts-context'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
                ]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
            groups: {},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
            patterns: {}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
        groups = META.groups,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
        yui2Update = function(tnt, yui2, config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
            var root = TNT + '.' +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
                    (tnt || TNT_VERSION) + '/' +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
                    (yui2 || YUI2_VERSION) + BUILD,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
                base = (config && config.base) ? config.base : CDN_BASE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
                combo = (config && config.comboBase) ? config.comboBase : COMBO_BASE;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
            groups.yui2.base = base + root;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
            groups.yui2.root = root;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
            groups.yui2.comboBase = combo;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
        galleryUpdate = function(tag, config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
            var root = (tag || GALLERY_VERSION) + BUILD,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
                base = (config && config.base) ? config.base : CDN_BASE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
                combo = (config && config.comboBase) ? config.comboBase : COMBO_BASE;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
            groups.gallery.base = base + root;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
            groups.gallery.root = root;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
            groups.gallery.comboBase = combo;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
    groups[VERSION] = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
    groups.gallery = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
        ext: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
        combine: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
        comboBase: COMBO_BASE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
        update: galleryUpdate,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
        patterns: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
            'gallery-': {},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
            'lang/gallery-': {},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
            'gallerycss-': {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
                type: 'css'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
    groups.yui2 = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
        combine: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
        ext: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
        comboBase: COMBO_BASE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
        update: yui2Update,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
        patterns: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
            'yui2-': {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
                configFn: function(me) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
                    if (/-skin|reset|fonts|grids|base/.test(me.name)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
                        me.type = 'css';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
                        me.path = me.path.replace(/\.js/, '.css');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
                        // this makes skins in builds earlier than
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
                        // 2.6.0 work as long as combine is false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
                        me.path = me.path.replace(/\/yui2-skin/,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
                                            '/assets/skins/sam/yui2-skin');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
    galleryUpdate();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
    yui2Update();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
    if (YUI.Env[VERSION]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
        Y.mix(META, YUI.Env[VERSION], false, [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
            'modules',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
            'groups',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
            'skin'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
        ], 0, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
    YUI.Env[VERSION] = META;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
}());
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
/*jslint forin: true, maxlen: 350 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
 * Loader dynamically loads script and css files.  It includes the dependency
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
 * information for the version of the library in use, and will automatically pull in
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
 * dependencies for the modules requested. It can also load the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
 * files from the Yahoo! CDN, and it can utilize the combo service provided on
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
 * this network to reduce the number of http connections required to download
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
 * YUI files.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
 * @module loader
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
 * @main loader
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
 * @submodule loader-base
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
var NOT_FOUND = {},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
    NO_REQUIREMENTS = [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
    MAX_URL_LENGTH = 1024,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
    GLOBAL_ENV = YUI.Env,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
    GLOBAL_LOADED = GLOBAL_ENV._loaded,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
    CSS = 'css',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
    JS = 'js',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
    INTL = 'intl',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
    DEFAULT_SKIN = 'sam',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
    VERSION = Y.version,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
    ROOT_LANG = '',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
    YObject = Y.Object,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
    oeach = YObject.each,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
    yArray = Y.Array,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
    _queue = GLOBAL_ENV._loaderQueue,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
    META = GLOBAL_ENV[VERSION],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
    SKIN_PREFIX = 'skin-',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
    L = Y.Lang,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
    ON_PAGE = GLOBAL_ENV.mods,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
    modulekey,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
    _path = function(dir, file, type, nomin) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
        var path = dir + '/' + file;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
        if (!nomin) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
            path += '-min';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
        path += '.' + (type || CSS);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
        return path;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
    if (!YUI.Env._cssLoaded) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
        YUI.Env._cssLoaded = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
 * The component metadata is stored in Y.Env.meta.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
 * Part of the loader module.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
 * @property meta
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
 * @for YUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
Y.Env.meta = META;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
 * Loader dynamically loads script and css files.  It includes the dependency
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
 * info for the version of the library in use, and will automatically pull in
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
 * dependencies for the modules requested. It can load the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
 * files from the Yahoo! CDN, and it can utilize the combo service provided on
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
 * this network to reduce the number of http connections required to download
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
 * YUI files. You can also specify an external, custom combo service to host
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
 * your modules as well.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
        var Y = YUI();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
        var loader = new Y.Loader({
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
            filter: 'debug',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
            base: '../../',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
            root: 'build/',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
            combine: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
            require: ['node', 'dd', 'console']
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
        var out = loader.resolve(true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   191
 * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   192
 * @class Loader
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   193
 * @param {Object} config an optional set of configuration options.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   194
 * @param {String} config.base The base dir which to fetch this module from
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   195
 * @param {String} config.comboBase The Combo service base path. Ex: `http://yui.yahooapis.com/combo?`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   196
 * @param {String} config.root The root path to prepend to module names for the combo service. Ex: `2.5.2/build/`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
 * @param {String|Object} config.filter A filter to apply to result urls. <a href="#property_filter">See filter property</a>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   198
 * @param {Object} config.filters Per-component filter specification.  If specified for a given component, this overrides the filter config.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   199
 * @param {Boolean} config.combine Use a combo service to reduce the number of http connections required to load your dependencies
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   200
 * @param {Boolean} [config.async=true] Fetch files in async
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   201
 * @param {Array} config.ignore: A list of modules that should never be dynamically loaded
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   202
 * @param {Array} config.force A list of modules that should always be loaded when required, even if already present on the page
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   203
 * @param {HTMLElement|String} config.insertBefore Node or id for a node that should be used as the insertion point for new nodes
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   204
 * @param {Object} config.jsAttributes Object literal containing attributes to add to script nodes
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   205
 * @param {Object} config.cssAttributes Object literal containing attributes to add to link nodes
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   206
 * @param {Number} config.timeout The number of milliseconds before a timeout occurs when dynamically loading nodes.  If not set, there is no timeout
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   207
 * @param {Object} config.context Execution context for all callbacks
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   208
 * @param {Function} config.onSuccess Callback for the 'success' event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   209
 * @param {Function} config.onFailure Callback for the 'failure' event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   210
 * @param {Function} config.onCSS Callback for the 'CSSComplete' event.  When loading YUI components with CSS the CSS is loaded first, then the script.  This provides a moment you can tie into to improve the presentation of the page while the script is loading.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   211
 * @param {Function} config.onTimeout Callback for the 'timeout' event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   212
 * @param {Function} config.onProgress Callback executed each time a script or css file is loaded
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   213
 * @param {Object} config.modules A list of module definitions.  See <a href="#method_addModule">Loader.addModule</a> for the supported module metadata
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   214
 * @param {Object} config.groups A list of group definitions.  Each group can contain specific definitions for `base`, `comboBase`, `combine`, and accepts a list of `modules`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   215
 * @param {String} config.2in3 The version of the YUI 2 in 3 wrapper to use.  The intrinsic support for YUI 2 modules in YUI 3 relies on versions of the YUI 2 components inside YUI 3 module wrappers.  These wrappers change over time to accomodate the issues that arise from running YUI 2 in a YUI 3 sandbox.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   216
 * @param {String} config.yui2 When using the 2in3 project, you can select the version of YUI 2 to use.  Valid values are `2.2.2`, `2.3.1`, `2.4.1`, `2.5.2`, `2.6.0`, `2.7.0`, `2.8.0`, `2.8.1` and `2.9.0` [default] -- plus all versions of YUI 2 going forward.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   217
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   218
Y.Loader = function(o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   219
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   220
    var self = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   221
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   222
    //Catch no config passed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   223
    o = o || {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   224
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   225
    modulekey = META.md5;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   226
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   227
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   228
     * Internal callback to handle multiple internal insert() calls
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   229
     * so that css is inserted prior to js
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   230
     * @property _internalCallback
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   231
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   232
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   233
    // self._internalCallback = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   234
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   235
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   236
     * Callback that will be executed when the loader is finished
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   237
     * with an insert
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   238
     * @method onSuccess
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   239
     * @type function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   240
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   241
    // self.onSuccess = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   242
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   243
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   244
     * Callback that will be executed if there is a failure
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   245
     * @method onFailure
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   246
     * @type function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   247
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   248
    // self.onFailure = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   249
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   250
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   251
     * Callback for the 'CSSComplete' event.  When loading YUI components
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   252
     * with CSS the CSS is loaded first, then the script.  This provides
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   253
     * a moment you can tie into to improve the presentation of the page
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   254
     * while the script is loading.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   255
     * @method onCSS
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   256
     * @type function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   257
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   258
    // self.onCSS = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   259
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   260
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   261
     * Callback executed each time a script or css file is loaded
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   262
     * @method onProgress
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   263
     * @type function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   264
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   265
    // self.onProgress = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   266
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   267
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   268
     * Callback that will be executed if a timeout occurs
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   269
     * @method onTimeout
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   270
     * @type function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   271
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   272
    // self.onTimeout = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   273
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   274
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   275
     * The execution context for all callbacks
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   276
     * @property context
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   277
     * @default {YUI} the YUI instance
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   278
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   279
    self.context = Y;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   280
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   281
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   282
     * Data that is passed to all callbacks
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   283
     * @property data
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   284
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   285
    // self.data = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   286
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   287
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   288
     * Node reference or id where new nodes should be inserted before
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   289
     * @property insertBefore
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   290
     * @type string|HTMLElement
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   291
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   292
    // self.insertBefore = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   293
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   294
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   295
     * The charset attribute for inserted nodes
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   296
     * @property charset
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   297
     * @type string
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   298
     * @deprecated , use cssAttributes or jsAttributes.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   299
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   300
    // self.charset = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   301
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   302
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   303
     * An object literal containing attributes to add to link nodes
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   304
     * @property cssAttributes
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   305
     * @type object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   306
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   307
    // self.cssAttributes = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   308
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   309
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   310
     * An object literal containing attributes to add to script nodes
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   311
     * @property jsAttributes
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   312
     * @type object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   313
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   314
    // self.jsAttributes = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   315
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   316
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   317
     * The base directory.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   318
     * @property base
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   319
     * @type string
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   320
     * @default http://yui.yahooapis.com/[YUI VERSION]/build/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   321
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   322
    self.base = Y.Env.meta.base + Y.Env.meta.root;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   323
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   324
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   325
     * Base path for the combo service
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   326
     * @property comboBase
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   327
     * @type string
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   328
     * @default http://yui.yahooapis.com/combo?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   329
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   330
    self.comboBase = Y.Env.meta.comboBase;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   331
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   332
    /*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   333
     * Base path for language packs.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   334
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   335
    // self.langBase = Y.Env.meta.langBase;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   336
    // self.lang = "";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   337
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   338
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   339
     * If configured, the loader will attempt to use the combo
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   340
     * service for YUI resources and configured external resources.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   341
     * @property combine
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   342
     * @type boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   343
     * @default true if a base dir isn't in the config
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   344
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   345
    self.combine = o.base &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   346
        (o.base.indexOf(self.comboBase.substr(0, 20)) > -1);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   347
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   348
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   349
    * The default seperator to use between files in a combo URL
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   350
    * @property comboSep
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   351
    * @type {String}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   352
    * @default Ampersand
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   353
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   354
    self.comboSep = '&';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   355
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   356
     * Max url length for combo urls.  The default is 1024. This is the URL
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   357
     * limit for the Yahoo! hosted combo servers.  If consuming
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   358
     * a different combo service that has a different URL limit
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   359
     * it is possible to override this default by supplying
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   360
     * the maxURLLength config option.  The config option will
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   361
     * only take effect if lower than the default.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   362
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   363
     * @property maxURLLength
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   364
     * @type int
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   365
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   366
    self.maxURLLength = MAX_URL_LENGTH;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   367
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   368
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   369
     * Ignore modules registered on the YUI global
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   370
     * @property ignoreRegistered
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   371
     * @default false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   372
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   373
    self.ignoreRegistered = o.ignoreRegistered;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   374
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   375
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   376
     * Root path to prepend to module path for the combo
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   377
     * service
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   378
     * @property root
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   379
     * @type string
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   380
     * @default [YUI VERSION]/build/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   381
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   382
    self.root = Y.Env.meta.root;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   383
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   384
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   385
     * Timeout value in milliseconds.  If set, self value will be used by
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   386
     * the get utility.  the timeout event will fire if
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   387
     * a timeout occurs.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   388
     * @property timeout
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   389
     * @type int
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   390
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   391
    self.timeout = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   392
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   393
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   394
     * A list of modules that should not be loaded, even if
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   395
     * they turn up in the dependency tree
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   396
     * @property ignore
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   397
     * @type string[]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   398
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   399
    // self.ignore = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   400
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   401
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   402
     * A list of modules that should always be loaded, even
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   403
     * if they have already been inserted into the page.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   404
     * @property force
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   405
     * @type string[]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   406
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   407
    // self.force = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   408
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   409
    self.forceMap = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   410
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   411
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   412
     * Should we allow rollups
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   413
     * @property allowRollup
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   414
     * @type boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   415
     * @default false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   416
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   417
    self.allowRollup = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   418
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   419
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   420
     * A filter to apply to result urls.  This filter will modify the default
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   421
     * path for all modules.  The default path for the YUI library is the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   422
     * minified version of the files (e.g., event-min.js).  The filter property
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   423
     * can be a predefined filter or a custom filter.  The valid predefined
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   424
     * filters are:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   425
     * <dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   426
     *  <dt>DEBUG</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   427
     *  <dd>Selects the debug versions of the library (e.g., event-debug.js).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   428
     *      This option will automatically include the Logger widget</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   429
     *  <dt>RAW</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   430
     *  <dd>Selects the non-minified version of the library (e.g., event.js).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   431
     *  </dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   432
     * </dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   433
     * You can also define a custom filter, which must be an object literal
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   434
     * containing a search expression and a replace string:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   435
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   436
     *      myFilter: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   437
     *          'searchExp': "-min\\.js",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   438
     *          'replaceStr': "-debug.js"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   439
     *      }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   440
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   441
     * @property filter
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   442
     * @type string| {searchExp: string, replaceStr: string}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   443
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   444
    // self.filter = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   445
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   446
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   447
     * per-component filter specification.  If specified for a given
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   448
     * component, this overrides the filter config.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   449
     * @property filters
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   450
     * @type object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   451
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   452
    self.filters = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   453
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   454
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   455
     * The list of requested modules
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   456
     * @property required
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   457
     * @type {string: boolean}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   458
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   459
    self.required = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   460
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   461
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   462
     * If a module name is predefined when requested, it is checked againsts
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   463
     * the patterns provided in this property.  If there is a match, the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   464
     * module is added with the default configuration.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   465
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   466
     * At the moment only supporting module prefixes, but anticipate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   467
     * supporting at least regular expressions.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   468
     * @property patterns
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   469
     * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   470
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   471
    // self.patterns = Y.merge(Y.Env.meta.patterns);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   472
    self.patterns = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   473
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   474
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   475
     * The library metadata
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   476
     * @property moduleInfo
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   477
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   478
    // self.moduleInfo = Y.merge(Y.Env.meta.moduleInfo);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   479
    self.moduleInfo = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   480
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   481
    self.groups = Y.merge(Y.Env.meta.groups);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   482
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   483
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   484
     * Provides the information used to skin the skinnable components.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   485
     * The following skin definition would result in 'skin1' and 'skin2'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   486
     * being loaded for calendar (if calendar was requested), and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   487
     * 'sam' for all other skinnable components:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   488
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   489
     *      skin: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   490
     *          // The default skin, which is automatically applied if not
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   491
     *          // overriden by a component-specific skin definition.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   492
     *          // Change this in to apply a different skin globally
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   493
     *          defaultSkin: 'sam',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   494
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   495
     *          // This is combined with the loader base property to get
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   496
     *          // the default root directory for a skin. ex:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   497
     *          // http://yui.yahooapis.com/2.3.0/build/assets/skins/sam/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   498
     *          base: 'assets/skins/',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   499
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   500
     *          // Any component-specific overrides can be specified here,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   501
     *          // making it possible to load different skins for different
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   502
     *          // components.  It is possible to load more than one skin
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   503
     *          // for a given component as well.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   504
     *          overrides: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   505
     *              calendar: ['skin1', 'skin2']
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   506
     *          }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   507
     *      }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   508
     * @property skin
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   509
     * @type {Object}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   510
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   511
    self.skin = Y.merge(Y.Env.meta.skin);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   512
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   513
    /*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   514
     * Map of conditional modules
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   515
     * @since 3.2.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   516
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   517
    self.conditions = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   518
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   519
    // map of modules with a hash of modules that meet the requirement
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   520
    // self.provides = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   521
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   522
    self.config = o;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   523
    self._internal = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   524
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   525
    self._populateCache();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   526
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   527
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   528
     * Set when beginning to compute the dependency tree.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   529
     * Composed of what YUI reports to be loaded combined
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   530
     * with what has been loaded by any instance on the page
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   531
     * with the version number specified in the metadata.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   532
     * @property loaded
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   533
     * @type {string: boolean}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   534
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   535
    self.loaded = GLOBAL_LOADED[VERSION];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   536
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   537
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   538
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   539
    * Should Loader fetch scripts in `async`, defaults to `true`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   540
    * @property async
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   541
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   542
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   543
    self.async = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   544
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   545
    self._inspectPage();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   546
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   547
    self._internal = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   548
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   549
    self._config(o);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   550
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   551
    self.forceMap = (self.force) ? Y.Array.hash(self.force) : {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   552
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   553
    self.testresults = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   554
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   555
    if (Y.config.tests) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   556
        self.testresults = Y.config.tests;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   557
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   558
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   559
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   560
     * List of rollup files found in the library metadata
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   561
     * @property rollups
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   562
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   563
    // self.rollups = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   564
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   565
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   566
     * Whether or not to load optional dependencies for
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   567
     * the requested modules
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   568
     * @property loadOptional
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   569
     * @type boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   570
     * @default false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   571
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   572
    // self.loadOptional = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   573
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   574
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   575
     * All of the derived dependencies in sorted order, which
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   576
     * will be populated when either calculate() or insert()
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   577
     * is called
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   578
     * @property sorted
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   579
     * @type string[]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   580
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   581
    self.sorted = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   582
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   583
    /*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   584
     * A list of modules to attach to the YUI instance when complete.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   585
     * If not supplied, the sorted list of dependencies are applied.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   586
     * @property attaching
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   587
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   588
    // self.attaching = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   589
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   590
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   591
     * Flag to indicate the dependency tree needs to be recomputed
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   592
     * if insert is called again.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   593
     * @property dirty
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   594
     * @type boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   595
     * @default true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   596
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   597
    self.dirty = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   598
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   599
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   600
     * List of modules inserted by the utility
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   601
     * @property inserted
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   602
     * @type {string: boolean}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   603
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   604
    self.inserted = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   605
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   606
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   607
     * List of skipped modules during insert() because the module
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   608
     * was not defined
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   609
     * @property skipped
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   610
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   611
    self.skipped = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   612
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   613
    // Y.on('yui:load', self.loadNext, self);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   614
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   615
    self.tested = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   616
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   617
    /*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   618
     * Cached sorted calculate results
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   619
     * @property results
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   620
     * @since 3.2.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   621
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   622
    //self.results = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   623
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   624
    if (self.ignoreRegistered) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   625
        //Clear inpage already processed modules.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   626
        self._resetModules();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   627
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   628
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   629
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   630
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   631
Y.Loader.prototype = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   632
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   633
    * Checks the cache for modules and conditions, if they do not exist
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   634
    * process the default metadata and populate the local moduleInfo hash.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   635
    * @method _populateCache
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   636
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   637
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   638
    _populateCache: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   639
        var self = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   640
            defaults = META.modules,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   641
            cache = GLOBAL_ENV._renderedMods,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   642
            i;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   643
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   644
        if (cache && !self.ignoreRegistered) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   645
            for (i in cache) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   646
                if (cache.hasOwnProperty(i)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   647
                    self.moduleInfo[i] = Y.merge(cache[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   648
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   649
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   650
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   651
            cache = GLOBAL_ENV._conditions;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   652
            for (i in cache) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   653
                if (cache.hasOwnProperty(i)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   654
                    self.conditions[i] = Y.merge(cache[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   655
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   656
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   657
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   658
        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   659
            for (i in defaults) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   660
                if (defaults.hasOwnProperty(i)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   661
                    self.addModule(defaults[i], i);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   662
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   663
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   664
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   665
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   666
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   667
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   668
    * Reset modules in the module cache to a pre-processed state so additional
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   669
    * computations with a different skin or language will work as expected.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   670
    * @method _resetModules
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   671
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   672
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   673
    _resetModules: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   674
        var self = this, i, o,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   675
            mod, name, details;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   676
        for (i in self.moduleInfo) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   677
            if (self.moduleInfo.hasOwnProperty(i)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   678
                mod = self.moduleInfo[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   679
                name = mod.name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   680
                details  = (YUI.Env.mods[name] ? YUI.Env.mods[name].details : null);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   681
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   682
                if (details) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   683
                    self.moduleInfo[name]._reset = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   684
                    self.moduleInfo[name].requires = details.requires || [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   685
                    self.moduleInfo[name].optional = details.optional || [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   686
                    self.moduleInfo[name].supersedes = details.supercedes || [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   687
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   688
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   689
                if (mod.defaults) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   690
                    for (o in mod.defaults) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   691
                        if (mod.defaults.hasOwnProperty(o)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   692
                            if (mod[o]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   693
                                mod[o] = mod.defaults[o];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   694
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   695
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   696
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   697
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   698
                delete mod.langCache;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   699
                delete mod.skinCache;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   700
                if (mod.skinnable) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   701
                    self._addSkin(self.skin.defaultSkin, mod.name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   702
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   703
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   704
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   705
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   706
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   707
    Regex that matches a CSS URL. Used to guess the file type when it's not
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   708
    specified.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   709
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   710
    @property REGEX_CSS
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   711
    @type RegExp
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   712
    @final
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   713
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   714
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   715
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   716
    REGEX_CSS: /\.css(?:[?;].*)?$/i,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   717
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   718
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   719
    * Default filters for raw and debug
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   720
    * @property FILTER_DEFS
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   721
    * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   722
    * @final
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   723
    * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   724
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   725
    FILTER_DEFS: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   726
        RAW: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   727
            'searchExp': '-min\\.js',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   728
            'replaceStr': '.js'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   729
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   730
        DEBUG: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   731
            'searchExp': '-min\\.js',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   732
            'replaceStr': '-debug.js'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   733
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   734
        COVERAGE: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   735
            'searchExp': '-min\\.js',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   736
            'replaceStr': '-coverage.js'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   737
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   738
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   739
    /*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   740
    * Check the pages meta-data and cache the result.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   741
    * @method _inspectPage
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   742
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   743
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   744
    _inspectPage: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   745
        var self = this, v, m, req, mr, i;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   746
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   747
        //Inspect the page for CSS only modules and mark them as loaded.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   748
        for (i in self.moduleInfo) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   749
            if (self.moduleInfo.hasOwnProperty(i)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   750
                v = self.moduleInfo[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   751
                if (v.type && v.type === CSS) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   752
                    if (self.isCSSLoaded(v.name)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   753
                        Y.log('Found CSS module on page: ' + v.name, 'info', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   754
                        self.loaded[i] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   755
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   756
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   757
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   758
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   759
        for (i in ON_PAGE) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   760
            if (ON_PAGE.hasOwnProperty(i)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   761
                v = ON_PAGE[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   762
                if (v.details) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   763
                    m = self.moduleInfo[v.name];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   764
                    req = v.details.requires;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   765
                    mr = m && m.requires;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   766
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   767
                   if (m) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   768
                       if (!m._inspected && req && mr.length !== req.length) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   769
                           // console.log('deleting ' + m.name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   770
                           delete m.expanded;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   771
                       }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   772
                   } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   773
                       m = self.addModule(v.details, i);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   774
                   }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   775
                   m._inspected = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   776
               }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   777
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   778
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   779
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   780
    /*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   781
    * returns true if b is not loaded, and is required directly or by means of modules it supersedes.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   782
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   783
    * @method _requires
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   784
    * @param {String} mod1 The first module to compare
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   785
    * @param {String} mod2 The second module to compare
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   786
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   787
   _requires: function(mod1, mod2) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   788
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   789
        var i, rm, after_map, s,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   790
            info = this.moduleInfo,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   791
            m = info[mod1],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   792
            other = info[mod2];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   793
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   794
        if (!m || !other) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   795
            return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   796
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   797
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   798
        rm = m.expanded_map;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   799
        after_map = m.after_map;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   800
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   801
        // check if this module should be sorted after the other
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   802
        // do this first to short circut circular deps
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   803
        if (after_map && (mod2 in after_map)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   804
            return true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   805
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   806
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   807
        after_map = other.after_map;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   808
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   809
        // and vis-versa
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   810
        if (after_map && (mod1 in after_map)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   811
            return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   812
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   813
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   814
        // check if this module requires one the other supersedes
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   815
        s = info[mod2] && info[mod2].supersedes;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   816
        if (s) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   817
            for (i = 0; i < s.length; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   818
                if (this._requires(mod1, s[i])) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   819
                    return true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   820
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   821
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   822
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   823
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   824
        s = info[mod1] && info[mod1].supersedes;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   825
        if (s) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   826
            for (i = 0; i < s.length; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   827
                if (this._requires(mod2, s[i])) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   828
                    return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   829
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   830
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   831
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   832
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   833
        // check if this module requires the other directly
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   834
        // if (r && yArray.indexOf(r, mod2) > -1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   835
        if (rm && (mod2 in rm)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   836
            return true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   837
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   838
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   839
        // external css files should be sorted below yui css
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   840
        if (m.ext && m.type === CSS && !other.ext && other.type === CSS) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   841
            return true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   842
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   843
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   844
        return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   845
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   846
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   847
    * Apply a new config to the Loader instance
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   848
    * @method _config
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   849
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   850
    * @param {Object} o The new configuration
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   851
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   852
    _config: function(o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   853
        var i, j, val, a, f, group, groupName, self = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   854
            mods = [], mod;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   855
        // apply config values
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   856
        if (o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   857
            for (i in o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   858
                if (o.hasOwnProperty(i)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   859
                    val = o[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   860
                    //TODO This should be a case
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   861
                    if (i === 'require') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   862
                        self.require(val);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   863
                    } else if (i === 'skin') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   864
                        //If the config.skin is a string, format to the expected object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   865
                        if (typeof val === 'string') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   866
                            self.skin.defaultSkin = o.skin;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   867
                            val = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   868
                                defaultSkin: val
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   869
                            };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   870
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   871
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   872
                        Y.mix(self.skin, val, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   873
                    } else if (i === 'groups') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   874
                        for (j in val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   875
                            if (val.hasOwnProperty(j)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   876
                                // Y.log('group: ' + j);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   877
                                groupName = j;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   878
                                group = val[j];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   879
                                self.addGroup(group, groupName);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   880
                                if (group.aliases) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   881
                                    for (a in group.aliases) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   882
                                        if (group.aliases.hasOwnProperty(a)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   883
                                            self.addAlias(group.aliases[a], a);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   884
                                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   885
                                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   886
                                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   887
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   888
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   889
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   890
                    } else if (i === 'modules') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   891
                        // add a hash of module definitions
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   892
                        for (j in val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   893
                            if (val.hasOwnProperty(j)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   894
                                self.addModule(val[j], j);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   895
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   896
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   897
                    } else if (i === 'aliases') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   898
                        for (j in val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   899
                            if (val.hasOwnProperty(j)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   900
                                self.addAlias(val[j], j);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   901
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   902
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   903
                    } else if (i === 'gallery') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   904
                        if (this.groups.gallery.update) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   905
                            this.groups.gallery.update(val, o);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   906
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   907
                    } else if (i === 'yui2' || i === '2in3') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   908
                        if (this.groups.yui2.update) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   909
                            this.groups.yui2.update(o['2in3'], o.yui2, o);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   910
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   911
                    } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   912
                        self[i] = val;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   913
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   914
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   915
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   916
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   917
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   918
        // fix filter
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   919
        f = self.filter;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   920
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   921
        if (L.isString(f)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   922
            f = f.toUpperCase();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   923
            self.filterName = f;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   924
            self.filter = self.FILTER_DEFS[f];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   925
            if (f === 'DEBUG') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   926
                self.require('yui-log', 'dump');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   927
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   928
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   929
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   930
        if (self.filterName && self.coverage) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   931
            if (self.filterName === 'COVERAGE' && L.isArray(self.coverage) && self.coverage.length) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   932
                for (i = 0; i < self.coverage.length; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   933
                    mod = self.coverage[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   934
                    if (self.moduleInfo[mod] && self.moduleInfo[mod].use) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   935
                        mods = [].concat(mods, self.moduleInfo[mod].use);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   936
                    } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   937
                        mods.push(mod);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   938
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   939
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   940
                self.filters = self.filters || {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   941
                Y.Array.each(mods, function(mod) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   942
                    self.filters[mod] = self.FILTER_DEFS.COVERAGE;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   943
                });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   944
                self.filterName = 'RAW';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   945
                self.filter = self.FILTER_DEFS[self.filterName];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   946
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   947
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   948
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   949
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   950
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   951
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   952
     * Returns the skin module name for the specified skin name.  If a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   953
     * module name is supplied, the returned skin module name is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   954
     * specific to the module passed in.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   955
     * @method formatSkin
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   956
     * @param {string} skin the name of the skin.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   957
     * @param {string} mod optional: the name of a module to skin.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   958
     * @return {string} the full skin module name.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   959
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   960
    formatSkin: function(skin, mod) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   961
        var s = SKIN_PREFIX + skin;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   962
        if (mod) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   963
            s = s + '-' + mod;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   964
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   965
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   966
        return s;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   967
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   968
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   969
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   970
     * Adds the skin def to the module info
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   971
     * @method _addSkin
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   972
     * @param {string} skin the name of the skin.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   973
     * @param {string} mod the name of the module.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   974
     * @param {string} parent parent module if this is a skin of a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   975
     * submodule or plugin.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   976
     * @return {string} the module name for the skin.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   977
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   978
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   979
    _addSkin: function(skin, mod, parent) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   980
        var mdef, pkg, name, nmod,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   981
            info = this.moduleInfo,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   982
            sinf = this.skin,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   983
            ext = info[mod] && info[mod].ext;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   984
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   985
        // Add a module definition for the module-specific skin css
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   986
        if (mod) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   987
            name = this.formatSkin(skin, mod);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   988
            if (!info[name]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   989
                mdef = info[mod];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   990
                pkg = mdef.pkg || mod;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   991
                nmod = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   992
                    skin: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   993
                    name: name,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   994
                    group: mdef.group,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   995
                    type: 'css',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   996
                    after: sinf.after,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   997
                    path: (parent || pkg) + '/' + sinf.base + skin +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   998
                          '/' + mod + '.css',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   999
                    ext: ext
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1000
                };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1001
                if (mdef.base) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1002
                    nmod.base = mdef.base;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1003
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1004
                if (mdef.configFn) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1005
                    nmod.configFn = mdef.configFn;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1006
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1007
                this.addModule(nmod, name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1008
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1009
                Y.log('Adding skin (' + name + '), ' + parent + ', ' + pkg + ', ' + info[name].path, 'info', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1010
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1011
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1012
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1013
        return name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1014
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1015
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1016
    * Adds an alias module to the system
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1017
    * @method addAlias
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1018
    * @param {Array} use An array of modules that makes up this alias
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1019
    * @param {String} name The name of the alias
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1020
    * @example
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1021
    *       var loader = new Y.Loader({});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1022
    *       loader.addAlias([ 'node', 'yql' ], 'davglass');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1023
    *       loader.require(['davglass']);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1024
    *       var out = loader.resolve(true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1025
    *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1026
    *       //out.js will contain Node and YQL modules
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1027
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1028
    addAlias: function(use, name) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1029
        YUI.Env.aliases[name] = use;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1030
        this.addModule({
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1031
            name: name,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1032
            use: use
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1033
        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1034
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1035
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1036
     * Add a new module group
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1037
     * @method addGroup
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1038
     * @param {Object} config An object containing the group configuration data
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1039
     * @param {String} config.name required, the group name
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1040
     * @param {String} config.base The base directory for this module group
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1041
     * @param {String} config.root The root path to add to each combo resource path
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1042
     * @param {Boolean} config.combine Should the request be combined
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1043
     * @param {String} config.comboBase Combo service base path
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1044
     * @param {Object} config.modules The group of modules
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1045
     * @param {String} name the group name.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1046
     * @example
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1047
     *      var loader = new Y.Loader({});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1048
     *      loader.addGroup({
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1049
     *          name: 'davglass',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1050
     *          combine: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1051
     *          comboBase: '/combo?',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1052
     *          root: '',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1053
     *          modules: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1054
     *              //Module List here
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1055
     *          }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1056
     *      }, 'davglass');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1057
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1058
    addGroup: function(o, name) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1059
        var mods = o.modules,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1060
            self = this, i, v;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1061
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1062
        name = name || o.name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1063
        o.name = name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1064
        self.groups[name] = o;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1065
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1066
        if (o.patterns) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1067
            for (i in o.patterns) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1068
                if (o.patterns.hasOwnProperty(i)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1069
                    o.patterns[i].group = name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1070
                    self.patterns[i] = o.patterns[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1071
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1072
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1073
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1074
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1075
        if (mods) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1076
            for (i in mods) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1077
                if (mods.hasOwnProperty(i)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1078
                    v = mods[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1079
                    if (typeof v === 'string') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1080
                        v = { name: i, fullpath: v };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1081
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1082
                    v.group = name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1083
                    self.addModule(v, i);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1084
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1085
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1086
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1087
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1088
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1089
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1090
     * Add a new module to the component metadata.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1091
     * @method addModule
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1092
     * @param {Object} config An object containing the module data.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1093
     * @param {String} config.name Required, the component name
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1094
     * @param {String} config.type Required, the component type (js or css)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1095
     * @param {String} config.path Required, the path to the script from `base`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1096
     * @param {Array} config.requires Array of modules required by this component
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1097
     * @param {Array} [config.optional] Array of optional modules for this component
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1098
     * @param {Array} [config.supersedes] Array of the modules this component replaces
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1099
     * @param {Array} [config.after] Array of modules the components which, if present, should be sorted above this one
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1100
     * @param {Object} [config.after_map] Faster alternative to 'after' -- supply a hash instead of an array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1101
     * @param {Number} [config.rollup] The number of superseded modules required for automatic rollup
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1102
     * @param {String} [config.fullpath] If `fullpath` is specified, this is used instead of the configured `base + path`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1103
     * @param {Boolean} [config.skinnable] Flag to determine if skin assets should automatically be pulled in
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1104
     * @param {Object} [config.submodules] Hash of submodules
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1105
     * @param {String} [config.group] The group the module belongs to -- this is set automatically when it is added as part of a group configuration.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1106
     * @param {Array} [config.lang] Array of BCP 47 language tags of languages for which this module has localized resource bundles, e.g., `["en-GB", "zh-Hans-CN"]`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1107
     * @param {Object} [config.condition] Specifies that the module should be loaded automatically if a condition is met. This is an object with up to four fields:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1108
     * @param {String} [config.condition.trigger] The name of a module that can trigger the auto-load
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1109
     * @param {Function} [config.condition.test] A function that returns true when the module is to be loaded.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1110
     * @param {String} [config.condition.ua] The UA name of <a href="UA.html">Y.UA</a> object that returns true when the module is to be loaded. e.g., `"ie"`, `"nodejs"`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1111
     * @param {String} [config.condition.when] Specifies the load order of the conditional module
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1112
     *  with regard to the position of the trigger module.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1113
     *  This should be one of three values: `before`, `after`, or `instead`.  The default is `after`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1114
     * @param {Object} [config.testresults] A hash of test results from `Y.Features.all()`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1115
     * @param {Function} [config.configFn] A function to exectute when configuring this module
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1116
     * @param {Object} config.configFn.mod The module config, modifying this object will modify it's config. Returning false will delete the module's config.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1117
     * @param {String} [name] The module name, required if not in the module data.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1118
     * @return {Object} the module definition or null if the object passed in did not provide all required attributes.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1119
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1120
    addModule: function(o, name) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1121
        name = name || o.name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1122
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1123
        if (typeof o === 'string') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1124
            o = { name: name, fullpath: o };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1125
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1126
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1127
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1128
        var subs, i, l, t, sup, s, smod, plugins, plug,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1129
            j, langs, packName, supName, flatSup, flatLang, lang, ret,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1130
            overrides, skinname, when, g, p,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1131
            conditions = this.conditions, trigger;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1132
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1133
        //Only merge this data if the temp flag is set
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1134
        //from an earlier pass from a pattern or else
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1135
        //an override module (YUI_config) can not be used to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1136
        //replace a default module.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1137
        if (this.moduleInfo[name] && this.moduleInfo[name].temp) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1138
            //This catches temp modules loaded via a pattern
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1139
            // The module will be added twice, once from the pattern and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1140
            // Once from the actual add call, this ensures that properties
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1141
            // that were added to the module the first time around (group: gallery)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1142
            // are also added the second time around too.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1143
            o = Y.merge(this.moduleInfo[name], o);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1144
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1145
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1146
        o.name = name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1147
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1148
        if (!o || !o.name) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1149
            return null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1150
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1151
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1152
        if (!o.type) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1153
            //Always assume it's javascript unless the CSS pattern is matched.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1154
            o.type = JS;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1155
            p = o.path || o.fullpath;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1156
            if (p && this.REGEX_CSS.test(p)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1157
                Y.log('Auto determined module type as CSS', 'warn', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1158
                o.type = CSS;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1159
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1160
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1161
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1162
        if (!o.path && !o.fullpath) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1163
            o.path = _path(name, name, o.type);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1164
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1165
        o.supersedes = o.supersedes || o.use;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1166
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1167
        o.ext = ('ext' in o) ? o.ext : (this._internal) ? false : true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1168
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1169
        // Handle submodule logic
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1170
        subs = o.submodules;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1171
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1172
        this.moduleInfo[name] = o;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1173
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1174
        o.requires = o.requires || [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1175
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1176
        /*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1177
        Only allowing the cascade of requires information, since
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1178
        optional and supersedes are far more fine grained than
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1179
        a blanket requires is.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1180
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1181
        if (this.requires) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1182
            for (i = 0; i < this.requires.length; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1183
                o.requires.push(this.requires[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1184
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1185
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1186
        if (o.group && this.groups && this.groups[o.group]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1187
            g = this.groups[o.group];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1188
            if (g.requires) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1189
                for (i = 0; i < g.requires.length; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1190
                    o.requires.push(g.requires[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1191
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1192
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1193
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1194
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1195
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1196
        if (!o.defaults) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1197
            o.defaults = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1198
                requires: o.requires ? [].concat(o.requires) : null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1199
                supersedes: o.supersedes ? [].concat(o.supersedes) : null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1200
                optional: o.optional ? [].concat(o.optional) : null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1201
            };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1202
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1203
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1204
        if (o.skinnable && o.ext && o.temp) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1205
            skinname = this._addSkin(this.skin.defaultSkin, name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1206
            o.requires.unshift(skinname);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1207
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1208
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1209
        if (o.requires.length) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1210
            o.requires = this.filterRequires(o.requires) || [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1211
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1212
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1213
        if (!o.langPack && o.lang) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1214
            langs = yArray(o.lang);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1215
            for (j = 0; j < langs.length; j++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1216
                lang = langs[j];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1217
                packName = this.getLangPackName(lang, name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1218
                smod = this.moduleInfo[packName];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1219
                if (!smod) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1220
                    smod = this._addLangPack(lang, o, packName);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1221
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1222
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1223
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1224
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1225
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1226
        if (subs) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1227
            sup = o.supersedes || [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1228
            l = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1229
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1230
            for (i in subs) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1231
                if (subs.hasOwnProperty(i)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1232
                    s = subs[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1233
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1234
                    s.path = s.path || _path(name, i, o.type);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1235
                    s.pkg = name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1236
                    s.group = o.group;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1237
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1238
                    if (s.supersedes) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1239
                        sup = sup.concat(s.supersedes);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1240
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1241
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1242
                    smod = this.addModule(s, i);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1243
                    sup.push(i);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1244
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1245
                    if (smod.skinnable) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1246
                        o.skinnable = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1247
                        overrides = this.skin.overrides;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1248
                        if (overrides && overrides[i]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1249
                            for (j = 0; j < overrides[i].length; j++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1250
                                skinname = this._addSkin(overrides[i][j],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1251
                                         i, name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1252
                                sup.push(skinname);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1253
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1254
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1255
                        skinname = this._addSkin(this.skin.defaultSkin,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1256
                                        i, name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1257
                        sup.push(skinname);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1258
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1259
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1260
                    // looks like we are expected to work out the metadata
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1261
                    // for the parent module language packs from what is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1262
                    // specified in the child modules.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1263
                    if (s.lang && s.lang.length) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1264
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1265
                        langs = yArray(s.lang);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1266
                        for (j = 0; j < langs.length; j++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1267
                            lang = langs[j];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1268
                            packName = this.getLangPackName(lang, name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1269
                            supName = this.getLangPackName(lang, i);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1270
                            smod = this.moduleInfo[packName];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1271
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1272
                            if (!smod) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1273
                                smod = this._addLangPack(lang, o, packName);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1274
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1275
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1276
                            flatSup = flatSup || yArray.hash(smod.supersedes);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1277
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1278
                            if (!(supName in flatSup)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1279
                                smod.supersedes.push(supName);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1280
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1281
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1282
                            o.lang = o.lang || [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1283
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1284
                            flatLang = flatLang || yArray.hash(o.lang);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1285
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1286
                            if (!(lang in flatLang)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1287
                                o.lang.push(lang);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1288
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1289
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1290
// Y.log('pack ' + packName + ' should supersede ' + supName);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1291
// Add rollup file, need to add to supersedes list too
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1292
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1293
                            // default packages
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1294
                            packName = this.getLangPackName(ROOT_LANG, name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1295
                            supName = this.getLangPackName(ROOT_LANG, i);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1296
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1297
                            smod = this.moduleInfo[packName];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1298
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1299
                            if (!smod) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1300
                                smod = this._addLangPack(lang, o, packName);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1301
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1302
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1303
                            if (!(supName in flatSup)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1304
                                smod.supersedes.push(supName);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1305
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1306
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1307
// Y.log('pack ' + packName + ' should supersede ' + supName);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1308
// Add rollup file, need to add to supersedes list too
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1309
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1310
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1311
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1312
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1313
                    l++;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1314
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1315
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1316
            //o.supersedes = YObject.keys(yArray.hash(sup));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1317
            o.supersedes = yArray.dedupe(sup);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1318
            if (this.allowRollup) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1319
                o.rollup = (l < 4) ? l : Math.min(l - 1, 4);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1320
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1321
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1322
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1323
        plugins = o.plugins;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1324
        if (plugins) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1325
            for (i in plugins) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1326
                if (plugins.hasOwnProperty(i)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1327
                    plug = plugins[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1328
                    plug.pkg = name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1329
                    plug.path = plug.path || _path(name, i, o.type);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1330
                    plug.requires = plug.requires || [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1331
                    plug.group = o.group;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1332
                    this.addModule(plug, i);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1333
                    if (o.skinnable) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1334
                        this._addSkin(this.skin.defaultSkin, i, name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1335
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1336
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1337
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1338
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1339
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1340
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1341
        if (o.condition) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1342
            t = o.condition.trigger;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1343
            if (YUI.Env.aliases[t]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1344
                t = YUI.Env.aliases[t];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1345
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1346
            if (!Y.Lang.isArray(t)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1347
                t = [t];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1348
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1349
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1350
            for (i = 0; i < t.length; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1351
                trigger = t[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1352
                when = o.condition.when;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1353
                conditions[trigger] = conditions[trigger] || {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1354
                conditions[trigger][name] = o.condition;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1355
                // the 'when' attribute can be 'before', 'after', or 'instead'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1356
                // the default is after.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1357
                if (when && when !== 'after') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1358
                    if (when === 'instead') { // replace the trigger
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1359
                        o.supersedes = o.supersedes || [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1360
                        o.supersedes.push(trigger);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1361
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1362
                    // before the trigger
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1363
                        // the trigger requires the conditional mod,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1364
                        // so it should appear before the conditional
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1365
                        // mod if we do not intersede.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1366
                } else { // after the trigger
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1367
                    o.after = o.after || [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1368
                    o.after.push(trigger);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1369
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1370
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1371
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1372
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1373
        if (o.supersedes) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1374
            o.supersedes = this.filterRequires(o.supersedes);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1375
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1376
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1377
        if (o.after) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1378
            o.after = this.filterRequires(o.after);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1379
            o.after_map = yArray.hash(o.after);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1380
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1381
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1382
        // this.dirty = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1383
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1384
        if (o.configFn) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1385
            ret = o.configFn(o);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1386
            if (ret === false) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1387
                Y.log('Config function returned false for ' + name + ', skipping.', 'info', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1388
                delete this.moduleInfo[name];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1389
                delete GLOBAL_ENV._renderedMods[name];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1390
                o = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1391
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1392
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1393
        //Add to global cache
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1394
        if (o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1395
            if (!GLOBAL_ENV._renderedMods) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1396
                GLOBAL_ENV._renderedMods = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1397
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1398
            GLOBAL_ENV._renderedMods[name] = Y.mix(GLOBAL_ENV._renderedMods[name] || {}, o);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1399
            GLOBAL_ENV._conditions = conditions;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1400
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1401
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1402
        return o;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1403
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1404
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1405
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1406
     * Add a requirement for one or more module
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1407
     * @method require
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1408
     * @param {string[] | string*} what the modules to load.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1409
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1410
    require: function(what) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1411
        var a = (typeof what === 'string') ? yArray(arguments) : what;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1412
        this.dirty = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1413
        this.required = Y.merge(this.required, yArray.hash(this.filterRequires(a)));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1414
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1415
        this._explodeRollups();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1416
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1417
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1418
    * Grab all the items that were asked for, check to see if the Loader
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1419
    * meta-data contains a "use" array. If it doesm remove the asked item and replace it with
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1420
    * the content of the "use".
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1421
    * This will make asking for: "dd"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1422
    * Actually ask for: "dd-ddm-base,dd-ddm,dd-ddm-drop,dd-drag,dd-proxy,dd-constrain,dd-drop,dd-scroll,dd-drop-plugin"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1423
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1424
    * @method _explodeRollups
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1425
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1426
    _explodeRollups: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1427
        var self = this, m, m2, i, a, v, len, len2,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1428
        r = self.required;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1429
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1430
        if (!self.allowRollup) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1431
            for (i in r) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1432
                if (r.hasOwnProperty(i)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1433
                    m = self.getModule(i);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1434
                    if (m && m.use) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1435
                        len = m.use.length;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1436
                        for (a = 0; a < len; a++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1437
                            m2 = self.getModule(m.use[a]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1438
                            if (m2 && m2.use) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1439
                                len2 = m2.use.length;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1440
                                for (v = 0; v < len2; v++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1441
                                    r[m2.use[v]] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1442
                                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1443
                            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1444
                                r[m.use[a]] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1445
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1446
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1447
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1448
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1449
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1450
            self.required = r;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1451
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1452
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1453
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1454
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1455
    * Explodes the required array to remove aliases and replace them with real modules
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1456
    * @method filterRequires
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1457
    * @param {Array} r The original requires array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1458
    * @return {Array} The new array of exploded requirements
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1459
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1460
    filterRequires: function(r) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1461
        if (r) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1462
            if (!Y.Lang.isArray(r)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1463
                r = [r];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1464
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1465
            r = Y.Array(r);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1466
            var c = [], i, mod, o, m;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1467
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1468
            for (i = 0; i < r.length; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1469
                mod = this.getModule(r[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1470
                if (mod && mod.use) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1471
                    for (o = 0; o < mod.use.length; o++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1472
                        //Must walk the other modules in case a module is a rollup of rollups (datatype)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1473
                        m = this.getModule(mod.use[o]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1474
                        if (m && m.use && (m.name !== mod.name)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1475
                            c = Y.Array.dedupe([].concat(c, this.filterRequires(m.use)));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1476
                        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1477
                            c.push(mod.use[o]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1478
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1479
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1480
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1481
                    c.push(r[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1482
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1483
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1484
            r = c;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1485
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1486
        return r;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1487
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1488
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1489
     * Returns an object containing properties for all modules required
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1490
     * in order to load the requested module
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1491
     * @method getRequires
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1492
     * @param {object}  mod The module definition from moduleInfo.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1493
     * @return {array} the expanded requirement list.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1494
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1495
    getRequires: function(mod) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1496
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1497
        if (!mod) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1498
            //console.log('returning no reqs for ' + mod.name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1499
            return NO_REQUIREMENTS;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1500
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1501
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1502
        if (mod._parsed) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1503
            //console.log('returning requires for ' + mod.name, mod.requires);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1504
            return mod.expanded || NO_REQUIREMENTS;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1505
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1506
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1507
        //TODO add modue cache here out of scope..
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1508
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1509
        var i, m, j, add, packName, lang, testresults = this.testresults,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1510
            name = mod.name, cond,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1511
            adddef = ON_PAGE[name] && ON_PAGE[name].details,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1512
            d, go, def,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1513
            r, old_mod,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1514
            o, skinmod, skindef, skinpar, skinname,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1515
            intl = mod.lang || mod.intl,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1516
            info = this.moduleInfo,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1517
            ftests = Y.Features && Y.Features.tests.load,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1518
            hash, reparse;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1519
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1520
        // console.log(name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1521
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1522
        // pattern match leaves module stub that needs to be filled out
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1523
        if (mod.temp && adddef) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1524
            old_mod = mod;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1525
            mod = this.addModule(adddef, name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1526
            mod.group = old_mod.group;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1527
            mod.pkg = old_mod.pkg;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1528
            delete mod.expanded;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1529
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1530
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1531
        // console.log('cache: ' + mod.langCache + ' == ' + this.lang);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1532
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1533
        //If a skin or a lang is different, reparse..
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1534
        reparse = !((!this.lang || mod.langCache === this.lang) && (mod.skinCache === this.skin.defaultSkin));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1535
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1536
        if (mod.expanded && !reparse) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1537
            //Y.log('Already expanded ' + name + ', ' + mod.expanded);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1538
            return mod.expanded;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1539
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1540
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1541
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1542
        d = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1543
        hash = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1544
        r = this.filterRequires(mod.requires);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1545
        if (mod.lang) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1546
            //If a module has a lang attribute, auto add the intl requirement.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1547
            d.unshift('intl');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1548
            r.unshift('intl');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1549
            intl = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1550
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1551
        o = this.filterRequires(mod.optional);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1552
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1553
        // Y.log("getRequires: " + name + " (dirty:" + this.dirty +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1554
        // ", expanded:" + mod.expanded + ")");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1555
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1556
        mod._parsed = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1557
        mod.langCache = this.lang;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1558
        mod.skinCache = this.skin.defaultSkin;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1559
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1560
        for (i = 0; i < r.length; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1561
            //Y.log(name + ' requiring ' + r[i], 'info', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1562
            if (!hash[r[i]]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1563
                d.push(r[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1564
                hash[r[i]] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1565
                m = this.getModule(r[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1566
                if (m) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1567
                    add = this.getRequires(m);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1568
                    intl = intl || (m.expanded_map &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1569
                        (INTL in m.expanded_map));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1570
                    for (j = 0; j < add.length; j++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1571
                        d.push(add[j]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1572
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1573
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1574
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1575
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1576
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1577
        // get the requirements from superseded modules, if any
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1578
        r = this.filterRequires(mod.supersedes);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1579
        if (r) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1580
            for (i = 0; i < r.length; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1581
                if (!hash[r[i]]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1582
                    // if this module has submodules, the requirements list is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1583
                    // expanded to include the submodules.  This is so we can
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1584
                    // prevent dups when a submodule is already loaded and the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1585
                    // parent is requested.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1586
                    if (mod.submodules) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1587
                        d.push(r[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1588
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1589
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1590
                    hash[r[i]] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1591
                    m = this.getModule(r[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1592
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1593
                    if (m) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1594
                        add = this.getRequires(m);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1595
                        intl = intl || (m.expanded_map &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1596
                            (INTL in m.expanded_map));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1597
                        for (j = 0; j < add.length; j++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1598
                            d.push(add[j]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1599
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1600
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1601
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1602
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1603
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1604
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1605
        if (o && this.loadOptional) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1606
            for (i = 0; i < o.length; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1607
                if (!hash[o[i]]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1608
                    d.push(o[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1609
                    hash[o[i]] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1610
                    m = info[o[i]];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1611
                    if (m) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1612
                        add = this.getRequires(m);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1613
                        intl = intl || (m.expanded_map &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1614
                            (INTL in m.expanded_map));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1615
                        for (j = 0; j < add.length; j++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1616
                            d.push(add[j]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1617
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1618
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1619
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1620
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1621
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1622
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1623
        cond = this.conditions[name];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1624
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1625
        if (cond) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1626
            //Set the module to not parsed since we have conditionals and this could change the dependency tree.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1627
            mod._parsed = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1628
            if (testresults && ftests) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1629
                oeach(testresults, function(result, id) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1630
                    var condmod = ftests[id].name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1631
                    if (!hash[condmod] && ftests[id].trigger === name) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1632
                        if (result && ftests[id]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1633
                            hash[condmod] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1634
                            d.push(condmod);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1635
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1636
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1637
                });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1638
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1639
                for (i in cond) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1640
                    if (cond.hasOwnProperty(i)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1641
                        if (!hash[i]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1642
                            def = cond[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1643
                            //first see if they've specfied a ua check
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1644
                            //then see if they've got a test fn & if it returns true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1645
                            //otherwise just having a condition block is enough
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1646
                            go = def && ((!def.ua && !def.test) || (def.ua && Y.UA[def.ua]) ||
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1647
                                        (def.test && def.test(Y, r)));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1648
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1649
                            if (go) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1650
                                hash[i] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1651
                                d.push(i);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1652
                                m = this.getModule(i);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1653
                                if (m) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1654
                                    add = this.getRequires(m);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1655
                                    for (j = 0; j < add.length; j++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1656
                                        d.push(add[j]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1657
                                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1658
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1659
                                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1660
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1661
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1662
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1663
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1664
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1665
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1666
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1667
        // Create skin modules
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1668
        if (mod.skinnable) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1669
            skindef = this.skin.overrides;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1670
            for (i in YUI.Env.aliases) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1671
                if (YUI.Env.aliases.hasOwnProperty(i)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1672
                    if (Y.Array.indexOf(YUI.Env.aliases[i], name) > -1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1673
                        skinpar = i;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1674
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1675
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1676
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1677
            if (skindef && (skindef[name] || (skinpar && skindef[skinpar]))) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1678
                skinname = name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1679
                if (skindef[skinpar]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1680
                    skinname = skinpar;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1681
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1682
                for (i = 0; i < skindef[skinname].length; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1683
                    skinmod = this._addSkin(skindef[skinname][i], name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1684
                    if (!this.isCSSLoaded(skinmod, this._boot)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1685
                        d.push(skinmod);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1686
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1687
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1688
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1689
                skinmod = this._addSkin(this.skin.defaultSkin, name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1690
                if (!this.isCSSLoaded(skinmod, this._boot)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1691
                    d.push(skinmod);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1692
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1693
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1694
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1695
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1696
        mod._parsed = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1697
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1698
        if (intl) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1699
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1700
            if (mod.lang && !mod.langPack && Y.Intl) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1701
                lang = Y.Intl.lookupBestLang(this.lang || ROOT_LANG, mod.lang);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1702
                //Y.log('Best lang: ' + lang + ', this.lang: ' + this.lang + ', mod.lang: ' + mod.lang);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1703
                packName = this.getLangPackName(lang, name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1704
                if (packName) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1705
                    d.unshift(packName);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1706
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1707
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1708
            d.unshift(INTL);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1709
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1710
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1711
        mod.expanded_map = yArray.hash(d);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1712
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1713
        mod.expanded = YObject.keys(mod.expanded_map);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1714
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1715
        return mod.expanded;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1716
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1717
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1718
    * Check to see if named css module is already loaded on the page
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1719
    * @method isCSSLoaded
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1720
    * @param {String} name The name of the css file
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1721
    * @return Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1722
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1723
    isCSSLoaded: function(name, skip) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1724
        //TODO - Make this call a batching call with name being an array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1725
        if (!name || !YUI.Env.cssStampEl || (!skip && this.ignoreRegistered)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1726
            Y.log('isCSSLoaded was skipped for ' + name, 'warn', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1727
            return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1728
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1729
        var el = YUI.Env.cssStampEl,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1730
            ret = false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1731
            mod = YUI.Env._cssLoaded[name],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1732
            style = el.currentStyle; //IE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1733
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1734
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1735
        if (mod !== undefined) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1736
            //Y.log('isCSSLoaded was cached for ' + name, 'warn', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1737
            return mod;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1738
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1739
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1740
        //Add the classname to the element
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1741
        el.className = name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1742
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1743
        if (!style) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1744
            style = Y.config.doc.defaultView.getComputedStyle(el, null);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1745
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1746
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1747
        if (style && style.display === 'none') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1748
            ret = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1749
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1750
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1751
        Y.log('Has Skin? ' + name + ' : ' + ret, 'info', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1752
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1753
        el.className = ''; //Reset the classname to ''
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1754
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1755
        YUI.Env._cssLoaded[name] = ret;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1756
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1757
        return ret;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1758
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1759
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1760
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1761
     * Returns a hash of module names the supplied module satisfies.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1762
     * @method getProvides
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1763
     * @param {string} name The name of the module.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1764
     * @return {object} what this module provides.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1765
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1766
    getProvides: function(name) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1767
        var m = this.getModule(name), o, s;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1768
            // supmap = this.provides;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1769
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1770
        if (!m) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1771
            return NOT_FOUND;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1772
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1773
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1774
        if (m && !m.provides) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1775
            o = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1776
            s = m.supersedes;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1777
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1778
            if (s) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1779
                yArray.each(s, function(v) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1780
                    Y.mix(o, this.getProvides(v));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1781
                }, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1782
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1783
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1784
            o[name] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1785
            m.provides = o;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1786
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1787
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1788
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1789
        return m.provides;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1790
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1791
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1792
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1793
     * Calculates the dependency tree, the result is stored in the sorted
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1794
     * property.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1795
     * @method calculate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1796
     * @param {object} o optional options object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1797
     * @param {string} type optional argument to prune modules.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1798
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1799
    calculate: function(o, type) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1800
        if (o || type || this.dirty) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1801
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1802
            if (o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1803
                this._config(o);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1804
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1805
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1806
            if (!this._init) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1807
                this._setup();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1808
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1809
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1810
            this._explode();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1811
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1812
            if (this.allowRollup) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1813
                this._rollup();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1814
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1815
                this._explodeRollups();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1816
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1817
            this._reduce();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1818
            this._sort();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1819
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1820
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1821
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1822
    * Creates a "psuedo" package for languages provided in the lang array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1823
    * @method _addLangPack
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1824
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1825
    * @param {String} lang The language to create
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1826
    * @param {Object} m The module definition to create the language pack around
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1827
    * @param {String} packName The name of the package (e.g: lang/datatype-date-en-US)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1828
    * @return {Object} The module definition
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1829
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1830
    _addLangPack: function(lang, m, packName) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1831
        var name = m.name,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1832
            packPath, conf,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1833
            existing = this.moduleInfo[packName];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1834
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1835
        if (!existing) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1836
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1837
            packPath = _path((m.pkg || name), packName, JS, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1838
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1839
            conf = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1840
                path: packPath,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1841
                intl: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1842
                langPack: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1843
                ext: m.ext,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1844
                group: m.group,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1845
                supersedes: []
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1846
            };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1847
            if (m.root) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1848
                conf.root = m.root;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1849
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1850
            if (m.base) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1851
                conf.base = m.base;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1852
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1853
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1854
            if (m.configFn) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1855
                conf.configFn = m.configFn;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1856
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1857
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1858
            this.addModule(conf, packName);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1859
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1860
            if (lang) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1861
                Y.Env.lang = Y.Env.lang || {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1862
                Y.Env.lang[lang] = Y.Env.lang[lang] || {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1863
                Y.Env.lang[lang][name] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1864
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1865
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1866
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1867
        return this.moduleInfo[packName];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1868
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1869
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1870
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1871
     * Investigates the current YUI configuration on the page.  By default,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1872
     * modules already detected will not be loaded again unless a force
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1873
     * option is encountered.  Called by calculate()
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1874
     * @method _setup
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1875
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1876
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1877
    _setup: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1878
        var info = this.moduleInfo, name, i, j, m, l,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1879
            packName;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1880
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1881
        for (name in info) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1882
            if (info.hasOwnProperty(name)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1883
                m = info[name];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1884
                if (m) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1885
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1886
                    // remove dups
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1887
                    //m.requires = YObject.keys(yArray.hash(m.requires));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1888
                    m.requires = yArray.dedupe(m.requires);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1889
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1890
                    // Create lang pack modules
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1891
                    //if (m.lang && m.lang.length) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1892
                    if (m.lang) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1893
                        // Setup root package if the module has lang defined,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1894
                        // it needs to provide a root language pack
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1895
                        packName = this.getLangPackName(ROOT_LANG, name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1896
                        this._addLangPack(null, m, packName);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1897
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1898
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1899
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1900
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1901
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1902
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1903
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1904
        //l = Y.merge(this.inserted);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1905
        l = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1906
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1907
        // available modules
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1908
        if (!this.ignoreRegistered) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1909
            Y.mix(l, GLOBAL_ENV.mods);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1910
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1911
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1912
        // add the ignore list to the list of loaded packages
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1913
        if (this.ignore) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1914
            Y.mix(l, yArray.hash(this.ignore));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1915
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1916
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1917
        // expand the list to include superseded modules
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1918
        for (j in l) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1919
            if (l.hasOwnProperty(j)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1920
                Y.mix(l, this.getProvides(j));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1921
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1922
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1923
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1924
        // remove modules on the force list from the loaded list
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1925
        if (this.force) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1926
            for (i = 0; i < this.force.length; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1927
                if (this.force[i] in l) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1928
                    delete l[this.force[i]];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1929
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1930
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1931
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1932
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1933
        Y.mix(this.loaded, l);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1934
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1935
        this._init = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1936
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1937
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1938
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1939
     * Builds a module name for a language pack
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1940
     * @method getLangPackName
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1941
     * @param {string} lang the language code.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1942
     * @param {string} mname the module to build it for.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1943
     * @return {string} the language pack module name.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1944
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1945
    getLangPackName: function(lang, mname) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1946
        return ('lang/' + mname + ((lang) ? '_' + lang : ''));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1947
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1948
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1949
     * Inspects the required modules list looking for additional
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1950
     * dependencies.  Expands the required list to include all
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1951
     * required modules.  Called by calculate()
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1952
     * @method _explode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1953
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1954
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1955
    _explode: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1956
        //TODO Move done out of scope
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1957
        var r = this.required, m, reqs, done = {},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1958
            self = this, name, expound;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1959
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1960
        // the setup phase is over, all modules have been created
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1961
        self.dirty = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1962
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1963
        self._explodeRollups();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1964
        r = self.required;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1965
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1966
        for (name in r) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1967
            if (r.hasOwnProperty(name)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1968
                if (!done[name]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1969
                    done[name] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1970
                    m = self.getModule(name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1971
                    if (m) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1972
                        expound = m.expound;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1973
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1974
                        if (expound) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1975
                            r[expound] = self.getModule(expound);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1976
                            reqs = self.getRequires(r[expound]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1977
                            Y.mix(r, yArray.hash(reqs));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1978
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1979
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1980
                        reqs = self.getRequires(m);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1981
                        Y.mix(r, yArray.hash(reqs));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1982
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1983
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1984
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1985
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1986
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1987
        // Y.log('After explode: ' + YObject.keys(r));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1988
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1989
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1990
    * The default method used to test a module against a pattern
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1991
    * @method _patternTest
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1992
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1993
    * @param {String} mname The module being tested
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1994
    * @param {String} pname The pattern to match
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1995
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1996
    _patternTest: function(mname, pname) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1997
        return (mname.indexOf(pname) > -1);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1998
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1999
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2000
    * Get's the loader meta data for the requested module
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2001
    * @method getModule
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2002
    * @param {String} mname The module name to get
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2003
    * @return {Object} The module metadata
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2004
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2005
    getModule: function(mname) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2006
        //TODO: Remove name check - it's a quick hack to fix pattern WIP
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2007
        if (!mname) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2008
            return null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2009
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2010
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2011
        var p, found, pname,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2012
            m = this.moduleInfo[mname],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2013
            patterns = this.patterns;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2014
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2015
        // check the patterns library to see if we should automatically add
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2016
        // the module with defaults
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2017
        if (!m || (m && m.ext)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2018
           // Y.log('testing patterns ' + YObject.keys(patterns));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2019
            for (pname in patterns) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2020
                if (patterns.hasOwnProperty(pname)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2021
                    // Y.log('testing pattern ' + i);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2022
                    p = patterns[pname];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2023
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2024
                    //There is no test method, create a default one that tests
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2025
                    // the pattern against the mod name
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2026
                    if (!p.test) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2027
                        p.test = this._patternTest;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2028
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2029
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2030
                    if (p.test(mname, pname)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2031
                        // use the metadata supplied for the pattern
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2032
                        // as the module definition.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2033
                        found = p;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2034
                        break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2035
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2036
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2037
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2038
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2039
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2040
        if (!m) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2041
            if (found) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2042
                if (p.action) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2043
                    // Y.log('executing pattern action: ' + pname);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2044
                    p.action.call(this, mname, pname);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2045
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2046
Y.log('Undefined module: ' + mname + ', matched a pattern: ' +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2047
    pname, 'info', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2048
                    // ext true or false?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2049
                    m = this.addModule(Y.merge(found), mname);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2050
                    if (found.configFn) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2051
                        m.configFn = found.configFn;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2052
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2053
                    m.temp = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2054
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2055
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2056
        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2057
            if (found && m && found.configFn && !m.configFn) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2058
                m.configFn = found.configFn;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2059
                m.configFn(m);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2060
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2061
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2062
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2063
        return m;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2064
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2065
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2066
    // impl in rollup submodule
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2067
    _rollup: function() { },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2068
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2069
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2070
     * Remove superceded modules and loaded modules.  Called by
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2071
     * calculate() after we have the mega list of all dependencies
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2072
     * @method _reduce
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2073
     * @return {object} the reduced dependency hash.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2074
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2075
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2076
    _reduce: function(r) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2077
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2078
        r = r || this.required;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2079
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2080
        var i, j, s, m, type = this.loadType,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2081
        ignore = this.ignore ? yArray.hash(this.ignore) : false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2082
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2083
        for (i in r) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2084
            if (r.hasOwnProperty(i)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2085
                m = this.getModule(i);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2086
                // remove if already loaded
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2087
                if (((this.loaded[i] || ON_PAGE[i]) &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2088
                        !this.forceMap[i] && !this.ignoreRegistered) ||
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2089
                        (type && m && m.type !== type)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2090
                    delete r[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2091
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2092
                if (ignore && ignore[i]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2093
                    delete r[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2094
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2095
                // remove anything this module supersedes
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2096
                s = m && m.supersedes;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2097
                if (s) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2098
                    for (j = 0; j < s.length; j++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2099
                        if (s[j] in r) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2100
                            delete r[s[j]];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2101
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2102
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2103
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2104
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2105
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2106
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2107
        return r;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2108
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2109
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2110
    * Handles the queue when a module has been loaded for all cases
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2111
    * @method _finish
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2112
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2113
    * @param {String} msg The message from Loader
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2114
    * @param {Boolean} success A boolean denoting success or failure
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2115
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2116
    _finish: function(msg, success) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2117
        Y.log('loader finishing: ' + msg + ', ' + Y.id + ', ' +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2118
            this.data, 'info', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2119
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2120
        _queue.running = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2121
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2122
        var onEnd = this.onEnd;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2123
        if (onEnd) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2124
            onEnd.call(this.context, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2125
                msg: msg,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2126
                data: this.data,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2127
                success: success
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2128
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2129
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2130
        this._continue();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2131
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2132
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2133
    * The default Loader onSuccess handler, calls this.onSuccess with a payload
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2134
    * @method _onSuccess
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2135
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2136
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2137
    _onSuccess: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2138
        var self = this, skipped = Y.merge(self.skipped), fn,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2139
            failed = [], rreg = self.requireRegistration,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2140
            success, msg, i, mod;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2141
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2142
        for (i in skipped) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2143
            if (skipped.hasOwnProperty(i)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2144
                delete self.inserted[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2145
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2146
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2147
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2148
        self.skipped = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2149
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2150
        for (i in self.inserted) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2151
            if (self.inserted.hasOwnProperty(i)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2152
                mod = self.getModule(i);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2153
                if (mod && rreg && mod.type === JS && !(i in YUI.Env.mods)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2154
                    failed.push(i);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2155
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2156
                    Y.mix(self.loaded, self.getProvides(i));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2157
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2158
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2159
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2160
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2161
        fn = self.onSuccess;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2162
        msg = (failed.length) ? 'notregistered' : 'success';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2163
        success = !(failed.length);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2164
        if (fn) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2165
            fn.call(self.context, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2166
                msg: msg,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2167
                data: self.data,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2168
                success: success,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2169
                failed: failed,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2170
                skipped: skipped
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2171
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2172
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2173
        self._finish(msg, success);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2174
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2175
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2176
    * The default Loader onProgress handler, calls this.onProgress with a payload
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2177
    * @method _onProgress
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2178
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2179
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2180
    _onProgress: function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2181
        var self = this, i;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2182
        //set the internal cache to what just came in.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2183
        if (e.data && e.data.length) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2184
            for (i = 0; i < e.data.length; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2185
                e.data[i] = self.getModule(e.data[i].name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2186
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2187
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2188
        if (self.onProgress) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2189
            self.onProgress.call(self.context, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2190
                name: e.url,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2191
                data: e.data
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2192
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2193
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2194
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2195
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2196
    * The default Loader onFailure handler, calls this.onFailure with a payload
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2197
    * @method _onFailure
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2198
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2199
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2200
    _onFailure: function(o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2201
        var f = this.onFailure, msg = [], i = 0, len = o.errors.length;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2202
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2203
        for (i; i < len; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2204
            msg.push(o.errors[i].error);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2205
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2206
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2207
        msg = msg.join(',');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2208
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2209
        Y.log('load error: ' + msg + ', ' + Y.id, 'error', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2210
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2211
        if (f) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2212
            f.call(this.context, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2213
                msg: msg,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2214
                data: this.data,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2215
                success: false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2216
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2217
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2218
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2219
        this._finish(msg, false);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2220
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2221
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2222
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2223
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2224
    * The default Loader onTimeout handler, calls this.onTimeout with a payload
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2225
    * @method _onTimeout
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2226
    * @param {Get.Transaction} transaction The Transaction object from `Y.Get`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2227
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2228
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2229
    _onTimeout: function(transaction) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2230
        Y.log('loader timeout: ' + Y.id, 'error', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2231
        var f = this.onTimeout;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2232
        if (f) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2233
            f.call(this.context, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2234
                msg: 'timeout',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2235
                data: this.data,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2236
                success: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2237
                transaction: transaction
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2238
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2239
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2240
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2241
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2242
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2243
     * Sorts the dependency tree.  The last step of calculate()
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2244
     * @method _sort
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2245
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2246
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2247
    _sort: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2248
        var name, 
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2249
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2250
            // Object containing module names.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2251
            required = this.required, 
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2252
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2253
            // Keep track of whether we've visited a module.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2254
            visited = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2255
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2256
        // Will contain modules names, in the correct order, 
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2257
        // according to dependencies.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2258
        this.sorted = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2259
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2260
        for (name in required) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2261
            if (!visited[name] && required.hasOwnProperty(name)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2262
                this._visit(name, visited);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2263
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2264
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2265
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2266
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2267
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2268
     * Recursively visits the dependencies of the module name
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2269
     * passed in, and appends each module name to the `sorted` property.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2270
     * @param {String} name The name of a module.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2271
     * @param {Object} visited Keeps track of whether a module was visited.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2272
     * @method _visit
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2273
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2274
     */ 
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2275
    _visit: function (name, visited) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2276
        var required, moduleInfo, dependency, dependencies, i, l;     
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2277
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2278
        visited[name] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2279
        required = this.required;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2280
        moduleInfo = this.moduleInfo[name];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2281
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2282
        if (moduleInfo) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2283
            // Recurse on each dependency of this module, 
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2284
            // figuring out its dependencies, and so on.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2285
            dependencies = moduleInfo.requires;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2286
            for (i = 0, l = dependencies.length; i < l; ++i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2287
                dependency = dependencies[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2288
                
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2289
                // Is this module name in the required list of modules,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2290
                // and have we not already visited it?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2291
                if (required[dependency] && !visited[dependency]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2292
                    this._visit(dependency, visited);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2293
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2294
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2295
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2296
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2297
        this.sorted.push(name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2298
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2299
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2300
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2301
    * Handles the actual insertion of script/link tags
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2302
    * @method _insert
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2303
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2304
    * @param {Object} source The YUI instance the request came from
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2305
    * @param {Object} o The metadata to include
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2306
    * @param {String} type JS or CSS
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2307
    * @param {Boolean} [skipcalc=false] Do a Loader.calculate on the meta
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2308
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2309
    _insert: function(source, o, type, skipcalc) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2310
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2311
        Y.log('private _insert() ' + (type || '') + ', ' + Y.id, "info", "loader");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2312
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2313
        // restore the state at the time of the request
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2314
        if (source) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2315
            this._config(source);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2316
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2317
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2318
        // build the dependency list
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2319
        // don't include type so we can process CSS and script in
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2320
        // one pass when the type is not specified.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2321
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2322
        var modules = this.resolve(!skipcalc),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2323
            self = this, comp = 0, actions = 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2324
            mods = {}, deps, complete;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2325
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2326
        self._refetch = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2327
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2328
        if (type) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2329
            //Filter out the opposite type and reset the array so the checks later work
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2330
            modules[((type === JS) ? CSS : JS)] = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2331
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2332
        if (!self.fetchCSS) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2333
            modules.css = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2334
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2335
        if (modules.js.length) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2336
            comp++;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2337
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2338
        if (modules.css.length) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2339
            comp++;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2340
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2341
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2342
        //console.log('Resolved Modules: ', modules);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2343
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2344
        complete = function(d) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2345
            actions++;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2346
            var errs = {}, i = 0, o = 0, u = '', fn,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2347
                modName, resMods;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2348
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2349
            if (d && d.errors) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2350
                for (i = 0; i < d.errors.length; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2351
                    if (d.errors[i].request) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2352
                        u = d.errors[i].request.url;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2353
                    } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2354
                        u = d.errors[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2355
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2356
                    errs[u] = u;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2357
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2358
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2359
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2360
            if (d && d.data && d.data.length && (d.type === 'success')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2361
                for (i = 0; i < d.data.length; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2362
                    self.inserted[d.data[i].name] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2363
                    //If the external module has a skin or a lang, reprocess it
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2364
                    if (d.data[i].lang || d.data[i].skinnable) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2365
                        delete self.inserted[d.data[i].name];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2366
                        self._refetch.push(d.data[i].name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2367
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2368
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2369
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2370
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2371
            if (actions === comp) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2372
                self._loading = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2373
                Y.log('Loader actions complete!', 'info', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2374
                if (self._refetch.length) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2375
                    //Get the deps for the new meta-data and reprocess
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2376
                    Y.log('Found potential modules to refetch', 'info', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2377
                    for (i = 0; i < self._refetch.length; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2378
                        deps = self.getRequires(self.getModule(self._refetch[i]));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2379
                        for (o = 0; o < deps.length; o++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2380
                            if (!self.inserted[deps[o]]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2381
                                //We wouldn't be to this point without the module being here
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2382
                                mods[deps[o]] = deps[o];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2383
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2384
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2385
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2386
                    mods = Y.Object.keys(mods);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2387
                    if (mods.length) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2388
                        Y.log('Refetching modules with new meta-data', 'info', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2389
                        self.require(mods);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2390
                        resMods = self.resolve(true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2391
                        if (resMods.cssMods.length) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2392
                            for (i=0; i <  resMods.cssMods.length; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2393
                                modName = resMods.cssMods[i].name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2394
                                delete YUI.Env._cssLoaded[modName];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2395
                                if (self.isCSSLoaded(modName)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2396
                                    self.inserted[modName] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2397
                                    delete self.required[modName];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2398
                                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2399
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2400
                            self.sorted = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2401
                            self._sort();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2402
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2403
                        d = null; //bail
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2404
                        self._insert(); //insert the new deps
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2405
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2406
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2407
                if (d && d.fn) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2408
                    Y.log('Firing final Loader callback!', 'info', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2409
                    fn = d.fn;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2410
                    delete d.fn;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2411
                    fn.call(self, d);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2412
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2413
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2414
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2415
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2416
        this._loading = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2417
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2418
        if (!modules.js.length && !modules.css.length) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2419
            Y.log('No modules resolved..', 'warn', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2420
            actions = -1;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2421
            complete({
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2422
                fn: self._onSuccess
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2423
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2424
            return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2425
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2426
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2427
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2428
        if (modules.css.length) { //Load CSS first
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2429
            Y.log('Loading CSS modules', 'info', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2430
            Y.Get.css(modules.css, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2431
                data: modules.cssMods,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2432
                attributes: self.cssAttributes,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2433
                insertBefore: self.insertBefore,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2434
                charset: self.charset,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2435
                timeout: self.timeout,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2436
                context: self,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2437
                onProgress: function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2438
                    self._onProgress.call(self, e);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2439
                },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2440
                onTimeout: function(d) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2441
                    self._onTimeout.call(self, d);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2442
                },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2443
                onSuccess: function(d) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2444
                    d.type = 'success';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2445
                    d.fn = self._onSuccess;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2446
                    complete.call(self, d);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2447
                },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2448
                onFailure: function(d) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2449
                    d.type = 'failure';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2450
                    d.fn = self._onFailure;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2451
                    complete.call(self, d);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2452
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2453
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2454
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2455
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2456
        if (modules.js.length) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2457
            Y.log('Loading JS modules', 'info', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2458
            Y.Get.js(modules.js, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2459
                data: modules.jsMods,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2460
                insertBefore: self.insertBefore,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2461
                attributes: self.jsAttributes,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2462
                charset: self.charset,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2463
                timeout: self.timeout,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2464
                autopurge: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2465
                context: self,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2466
                async: self.async,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2467
                onProgress: function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2468
                    self._onProgress.call(self, e);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2469
                },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2470
                onTimeout: function(d) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2471
                    self._onTimeout.call(self, d);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2472
                },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2473
                onSuccess: function(d) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2474
                    d.type = 'success';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2475
                    d.fn = self._onSuccess;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2476
                    complete.call(self, d);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2477
                },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2478
                onFailure: function(d) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2479
                    d.type = 'failure';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2480
                    d.fn = self._onFailure;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2481
                    complete.call(self, d);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2482
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2483
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2484
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2485
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2486
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2487
    * Once a loader operation is completely finished, process any additional queued items.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2488
    * @method _continue
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2489
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2490
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2491
    _continue: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2492
        if (!(_queue.running) && _queue.size() > 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2493
            _queue.running = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2494
            _queue.next()();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2495
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2496
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2497
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2498
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2499
     * inserts the requested modules and their dependencies.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2500
     * <code>type</code> can be "js" or "css".  Both script and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2501
     * css are inserted if type is not provided.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2502
     * @method insert
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2503
     * @param {object} o optional options object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2504
     * @param {string} type the type of dependency to insert.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2505
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2506
    insert: function(o, type, skipsort) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2507
         Y.log('public insert() ' + (type || '') + ', ' +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2508
         Y.Object.keys(this.required), "info", "loader");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2509
        var self = this, copy = Y.merge(this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2510
        delete copy.require;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2511
        delete copy.dirty;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2512
        _queue.add(function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2513
            self._insert(copy, o, type, skipsort);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2514
        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2515
        this._continue();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2516
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2517
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2518
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2519
     * Executed every time a module is loaded, and if we are in a load
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2520
     * cycle, we attempt to load the next script.  Public so that it
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2521
     * is possible to call this if using a method other than
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2522
     * Y.register to determine when scripts are fully loaded
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2523
     * @method loadNext
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2524
     * @deprecated
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2525
     * @param {string} mname optional the name of the module that has
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2526
     * been loaded (which is usually why it is time to load the next
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2527
     * one).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2528
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2529
    loadNext: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2530
        Y.log('loadNext was called..', 'error', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2531
        return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2532
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2533
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2534
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2535
     * Apply filter defined for this instance to a url/path
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2536
     * @method _filter
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2537
     * @param {string} u the string to filter.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2538
     * @param {string} name the name of the module, if we are processing
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2539
     * a single module as opposed to a combined url.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2540
     * @return {string} the filtered string.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2541
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2542
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2543
    _filter: function(u, name, group) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2544
        var f = this.filter,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2545
            hasFilter = name && (name in this.filters),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2546
            modFilter = hasFilter && this.filters[name],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2547
            groupName = group || (this.moduleInfo[name] ? this.moduleInfo[name].group : null);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2548
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2549
        if (groupName && this.groups[groupName] && this.groups[groupName].filter) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2550
            modFilter = this.groups[groupName].filter;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2551
            hasFilter = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2552
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2553
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2554
        if (u) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2555
            if (hasFilter) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2556
                f = (L.isString(modFilter)) ? this.FILTER_DEFS[modFilter.toUpperCase()] || null : modFilter;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2557
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2558
            if (f) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2559
                u = u.replace(new RegExp(f.searchExp, 'g'), f.replaceStr);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2560
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2561
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2562
        return u;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2563
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2564
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2565
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2566
     * Generates the full url for a module
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2567
     * @method _url
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2568
     * @param {string} path the path fragment.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2569
     * @param {String} name The name of the module
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2570
     * @param {String} [base] The base url to use. Defaults to self.base
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2571
     * @return {string} the full url.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2572
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2573
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2574
    _url: function(path, name, base) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2575
        return this._filter((base || this.base || '') + path, name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2576
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2577
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2578
    * Returns an Object hash of file arrays built from `loader.sorted` or from an arbitrary list of sorted modules.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2579
    * @method resolve
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2580
    * @param {Boolean} [calc=false] Perform a loader.calculate() before anything else
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2581
    * @param {Array} [s] An override for the loader.sorted array. Defaults to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2582
    * `loader.sorted`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2583
    * @return {Object} Object hash (js and css) of two arrays of file lists
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2584
    * @example This method can be used as an off-line dep calculator
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2585
    *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2586
    *        var Y = YUI();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2587
    *        var loader = new Y.Loader({
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2588
    *            filter: 'debug',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2589
    *            base: '../../',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2590
    *            root: 'build/',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2591
    *            combine: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2592
    *            require: ['node', 'dd', 'console']
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2593
    *        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2594
    *        var out = loader.resolve(true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2595
    *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2596
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2597
    resolve: function(calc, s) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2598
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2599
        var len, i, m, url, group, groupName, j, frag,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2600
            comboSource, comboSources, mods, comboBase,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2601
            base, urls, u = [], tmpBase, baseLen, resCombos = {},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2602
            self = this, comboSep, maxURLLength,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2603
            inserted = (self.ignoreRegistered) ? {} : self.inserted,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2604
            resolved = { js: [], jsMods: [], css: [], cssMods: [] },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2605
            type = self.loadType || 'js', addSingle;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2606
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2607
        if (self.skin.overrides || self.skin.defaultSkin !== DEFAULT_SKIN || self.ignoreRegistered) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2608
            self._resetModules();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2609
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2610
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2611
        if (calc) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2612
            self.calculate();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2613
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2614
        s = s || self.sorted;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2615
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2616
        addSingle = function(m) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2617
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2618
            if (m) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2619
                group = (m.group && self.groups[m.group]) || NOT_FOUND;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2620
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2621
                //Always assume it's async
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2622
                if (group.async === false) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2623
                    m.async = group.async;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2624
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2625
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2626
                url = (m.fullpath) ? self._filter(m.fullpath, s[i]) :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2627
                      self._url(m.path, s[i], group.base || m.base);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2628
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2629
                if (m.attributes || m.async === false) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2630
                    url = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2631
                        url: url,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2632
                        async: m.async
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2633
                    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2634
                    if (m.attributes) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2635
                        url.attributes = m.attributes;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2636
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2637
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2638
                resolved[m.type].push(url);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2639
                resolved[m.type + 'Mods'].push(m);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2640
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2641
                Y.log('Undefined Module', 'warn', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2642
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2643
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2644
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2645
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2646
        len = s.length;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2647
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2648
        // the default combo base
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2649
        comboBase = self.comboBase;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2650
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2651
        url = comboBase;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2652
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2653
        comboSources = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2654
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2655
        for (i = 0; i < len; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2656
            comboSource = comboBase;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2657
            m = self.getModule(s[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2658
            groupName = m && m.group;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2659
            group = self.groups[groupName];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2660
            if (groupName && group) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2661
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2662
                if (!group.combine || m.fullpath) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2663
                    //This is not a combo module, skip it and load it singly later.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2664
                    addSingle(m);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2665
                    continue;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2666
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2667
                m.combine = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2668
                if (group.comboBase) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2669
                    comboSource = group.comboBase;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2670
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2671
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2672
                if ("root" in group && L.isValue(group.root)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2673
                    m.root = group.root;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2674
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2675
                m.comboSep = group.comboSep || self.comboSep;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2676
                m.maxURLLength = group.maxURLLength || self.maxURLLength;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2677
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2678
                if (!self.combine) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2679
                    //This is not a combo module, skip it and load it singly later.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2680
                    addSingle(m);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2681
                    continue;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2682
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2683
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2684
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2685
            comboSources[comboSource] = comboSources[comboSource] || [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2686
            comboSources[comboSource].push(m);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2687
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2688
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2689
        for (j in comboSources) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2690
            if (comboSources.hasOwnProperty(j)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2691
                resCombos[j] = resCombos[j] || { js: [], jsMods: [], css: [], cssMods: [] };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2692
                url = j;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2693
                mods = comboSources[j];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2694
                len = mods.length;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2695
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2696
                if (len) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2697
                    for (i = 0; i < len; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2698
                        if (inserted[mods[i]]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2699
                            continue;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2700
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2701
                        m = mods[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2702
                        // Do not try to combine non-yui JS unless combo def
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2703
                        // is found
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2704
                        if (m && (m.combine || !m.ext)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2705
                            resCombos[j].comboSep = m.comboSep;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2706
                            resCombos[j].group = m.group;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2707
                            resCombos[j].maxURLLength = m.maxURLLength;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2708
                            frag = ((L.isValue(m.root)) ? m.root : self.root) + (m.path || m.fullpath);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2709
                            frag = self._filter(frag, m.name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2710
                            resCombos[j][m.type].push(frag);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2711
                            resCombos[j][m.type + 'Mods'].push(m);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2712
                        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2713
                            //Add them to the next process..
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2714
                            if (mods[i]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2715
                                addSingle(mods[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2716
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2717
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2718
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2719
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2720
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2721
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2722
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2723
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2724
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2725
        for (j in resCombos) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2726
            if (resCombos.hasOwnProperty(j)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2727
                base = j;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2728
                comboSep = resCombos[base].comboSep || self.comboSep;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2729
                maxURLLength = resCombos[base].maxURLLength || self.maxURLLength;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2730
                Y.log('Using maxURLLength of ' + maxURLLength, 'info', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2731
                for (type in resCombos[base]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2732
                    if (type === JS || type === CSS) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2733
                        urls = resCombos[base][type];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2734
                        mods = resCombos[base][type + 'Mods'];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2735
                        len = urls.length;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2736
                        tmpBase = base + urls.join(comboSep);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2737
                        baseLen = tmpBase.length;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2738
                        if (maxURLLength <= base.length) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2739
                            Y.log('maxURLLength (' + maxURLLength + ') is lower than the comboBase length (' + base.length + '), resetting to default (' + MAX_URL_LENGTH + ')', 'error', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2740
                            maxURLLength = MAX_URL_LENGTH;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2741
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2742
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2743
                        if (len) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2744
                            if (baseLen > maxURLLength) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2745
                                Y.log('Exceeded maxURLLength (' + maxURLLength + ') for ' + type + ', splitting', 'info', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2746
                                u = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2747
                                for (s = 0; s < len; s++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2748
                                    u.push(urls[s]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2749
                                    tmpBase = base + u.join(comboSep);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2750
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2751
                                    if (tmpBase.length > maxURLLength) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2752
                                        m = u.pop();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2753
                                        tmpBase = base + u.join(comboSep);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2754
                                        resolved[type].push(self._filter(tmpBase, null, resCombos[base].group));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2755
                                        u = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2756
                                        if (m) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2757
                                            u.push(m);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2758
                                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2759
                                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2760
                                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2761
                                if (u.length) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2762
                                    tmpBase = base + u.join(comboSep);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2763
                                    resolved[type].push(self._filter(tmpBase, null, resCombos[base].group));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2764
                                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2765
                            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2766
                                resolved[type].push(self._filter(tmpBase, null, resCombos[base].group));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2767
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2768
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2769
                        resolved[type + 'Mods'] = resolved[type + 'Mods'].concat(mods);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2770
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2771
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2772
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2773
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2774
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2775
        resCombos = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2776
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2777
        return resolved;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2778
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2779
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2780
    Shortcut to calculate, resolve and load all modules.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2781
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2782
        var loader = new Y.Loader({
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2783
            ignoreRegistered: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2784
            modules: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2785
                mod: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2786
                    path: 'mod.js'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2787
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2788
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2789
            requires: [ 'mod' ]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2790
        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2791
        loader.load(function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2792
            console.log('All modules have loaded..');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2793
        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2794
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2795
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2796
    @method load
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2797
    @param {Function} cb Executed after all load operations are complete
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2798
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2799
    load: function(cb) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2800
        if (!cb) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2801
            Y.log('No callback supplied to load()', 'error', 'loader');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2802
            return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2803
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2804
        var self = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2805
            out = self.resolve(true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2806
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2807
        self.data = out;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2808
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2809
        self.onEnd = function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2810
            cb.apply(self.context || self, arguments);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2811
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2812
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2813
        self.insert();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2814
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2815
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2816
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2817
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2818
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2819
}, '@VERSION@', {"requires": ["get", "features"]});