src/cm/media/js/lib/yui/yui3-3.15.0/build/loader-rollup/loader-rollup.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-rollup', 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
 * Optional automatic rollup logic for reducing http connections
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
 * when not using a combo service.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
 * @module loader
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
 * @submodule rollup
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
 * Look for rollup packages to determine if all of the modules a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
 * rollup supersedes are required.  If so, include the rollup to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
 * help reduce the total number of connections required.  Called
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
 * by calculate().  This is an optional feature, and requires the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
 * appropriate submodule to function.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
 * @method _rollup
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
 * @for Loader
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
Y.Loader.prototype._rollup = function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
    var i, j, m, s, r = this.required, roll,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
        info = this.moduleInfo, rolled, c, smod;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
    // find and cache rollup modules
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
    if (this.dirty || !this.rollups) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
        this.rollups = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
        for (i in info) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
            if (info.hasOwnProperty(i)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
                m = this.getModule(i);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
                // if (m && m.rollup && m.supersedes) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
                if (m && m.rollup) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
                    this.rollups[i] = m;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
            }
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
    // make as many passes as needed to pick up rollup rollups
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
    for (;;) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
        rolled = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
        // go through the rollup candidates
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
        for (i in this.rollups) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
            if (this.rollups.hasOwnProperty(i)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
                // there can be only one, unless forced
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
                if (!r[i] && ((!this.loaded[i]) || this.forceMap[i])) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
                    m = this.getModule(i);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
                    s = m.supersedes || [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
                    roll = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
                    // @TODO remove continue
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
                    if (!m.rollup) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
                        continue;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
                    c = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
                    // check the threshold
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
                    for (j = 0; j < s.length; j++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
                        smod = info[s[j]];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
                        // if the superseded module is loaded, we can't
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
                        // load the rollup unless it has been forced.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
                        if (this.loaded[s[j]] && !this.forceMap[s[j]]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
                            roll = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
                            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
                        // increment the counter if this module is required.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
                        // if we are beyond the rollup threshold, we will
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
                        // use the rollup module
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
                        } else if (r[s[j]] && m.type === smod.type) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
                            c++;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
                            roll = (c >= m.rollup);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
                            if (roll) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
                                break;
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
                    if (roll) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
                        // add the rollup
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
                        r[i] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
                        rolled = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
                        // expand the rollup's dependencies
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
                        this.getRequires(m);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
        // if we made it here w/o rolling up something, we are done
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
        if (!rolled) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
            break;
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
}, '@VERSION@', {"requires": ["loader-base"]});