requirejs-rails 0.5.3 → 0.5.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +1 -1
- data/README.md +6 -2
- data/bin/r.js +393 -96
- data/lib/requirejs/rails/rjs_driver.js.erb +7 -3
- data/lib/requirejs/rails/version.rb +1 -1
- data/test/requirejs-rails_test.rb +1 -1
- data/vendor/assets/javascripts/order.js +13 -4
- data/vendor/assets/javascripts/require.js +117 -28
- metadata +10 -10
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -111,11 +111,15 @@ define ['jquery'], ($) ->
|
|
111
111
|
|
112
112
|
### Backbone.js
|
113
113
|
|
114
|
-
|
114
|
+
**DO NOT USE vanilla Backbone 0.5.3 with require.js!**
|
115
|
+
|
116
|
+
Backbone with AMD support hasn't been released yet. In the meantime, you can download [Backbone 0.5.3 with AMD support](https://github.com/jrburke/backbone/raw/optamd3/backbone.js) from [jrburke's optamd3 branch](https://github.com/jrburke/backbone/tree/optamd3). See pull request [documentcloud/backbone#710](https://github.com/documentcloud/backbone/pull/710) for details. Backbone's module name is `backbone`.
|
115
117
|
|
116
118
|
### Underscore.js
|
117
119
|
|
118
|
-
Underscore version 1.2.2 or later has integrated AMD support. Get it from [Underscore.js' homepage](http://documentcloud.github.com/underscore/). Underscore's module name is `underscore`.
|
120
|
+
Underscore version 1.2.x, 1.2.2 or later has integrated AMD support. Get it from [Underscore.js' homepage](http://documentcloud.github.com/underscore/). Underscore's module name is `underscore`.
|
121
|
+
|
122
|
+
**IMPORTANT:** Underscore has **removed** AMD support again in the 1.3.x series. Please consult the [requirejs mailing list](http://groups.google.com/group/requirejs/) for the current recommended solution.
|
119
123
|
|
120
124
|
## Changes
|
121
125
|
|
data/bin/r.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license r.js 1.0.
|
2
|
+
* @license r.js 1.0.5 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
|
3
3
|
* Available via the MIT or new BSD license.
|
4
4
|
* see: http://github.com/jrburke/requirejs for details
|
5
5
|
*/
|
@@ -20,9 +20,10 @@ var requirejs, require, define;
|
|
20
20
|
|
21
21
|
var fileName, env, fs, vm, path, exec, rhinoContext, dir, nodeRequire,
|
22
22
|
nodeDefine, exists, reqMain, loadedOptimizedLib,
|
23
|
-
version = '1.0.
|
23
|
+
version = '1.0.5',
|
24
24
|
jsSuffixRegExp = /\.js$/,
|
25
25
|
commandOption = '',
|
26
|
+
useLibLoaded = {},
|
26
27
|
//Used by jslib/rhino/args.js
|
27
28
|
rhinoArgs = args,
|
28
29
|
readFile = typeof readFileFunc !== 'undefined' ? readFileFunc : null;
|
@@ -101,19 +102,17 @@ var requirejs, require, define;
|
|
101
102
|
}
|
102
103
|
|
103
104
|
/** vim: et:ts=4:sw=4:sts=4
|
104
|
-
* @license RequireJS 1.0.
|
105
|
+
* @license RequireJS 1.0.5 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
|
105
106
|
* Available via the MIT or new BSD license.
|
106
107
|
* see: http://github.com/jrburke/requirejs for details
|
107
108
|
*/
|
108
109
|
/*jslint strict: false, plusplus: false, sub: true */
|
109
|
-
/*global window
|
110
|
-
jQuery: false, clearInterval: false, setInterval: false, self: false,
|
111
|
-
setTimeout: false, opera: false */
|
110
|
+
/*global window, navigator, document, importScripts, jQuery, setTimeout, opera */
|
112
111
|
|
113
112
|
|
114
113
|
(function () {
|
115
114
|
//Change this version number for each release.
|
116
|
-
var version = "1.0.
|
115
|
+
var version = "1.0.5",
|
117
116
|
commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,
|
118
117
|
cjsRequireRegExp = /require\(\s*["']([^'"\s]+)["']\s*\)/g,
|
119
118
|
currDirRegExp = /^\.\//,
|
@@ -139,8 +138,13 @@ var requirejs, require, define;
|
|
139
138
|
interactiveScript = null,
|
140
139
|
checkLoadedDepth = 0,
|
141
140
|
useInteractive = false,
|
141
|
+
reservedDependencies = {
|
142
|
+
require: true,
|
143
|
+
module: true,
|
144
|
+
exports: true
|
145
|
+
},
|
142
146
|
req, cfg = {}, currentlyAddingScript, s, head, baseElement, scripts, script,
|
143
|
-
src, subPath, mainScript, dataMain,
|
147
|
+
src, subPath, mainScript, dataMain, globalI, ctx, jQueryCheck, checkLoadedTimeoutId;
|
144
148
|
|
145
149
|
function isFunction(it) {
|
146
150
|
return ostring.call(it) === "[object Function]";
|
@@ -493,8 +497,8 @@ var requirejs, require, define;
|
|
493
497
|
* per module because of the implication of path mappings that may
|
494
498
|
* need to be relative to the module name.
|
495
499
|
*/
|
496
|
-
function makeRequire(relModuleMap, enableBuildCallback) {
|
497
|
-
var modRequire = makeContextModuleFunc(context.require, relModuleMap, enableBuildCallback);
|
500
|
+
function makeRequire(relModuleMap, enableBuildCallback, altRequire) {
|
501
|
+
var modRequire = makeContextModuleFunc(altRequire || context.require, relModuleMap, enableBuildCallback);
|
498
502
|
|
499
503
|
mixin(modRequire, {
|
500
504
|
nameToUrl: makeContextModuleFunc(context.nameToUrl, relModuleMap),
|
@@ -709,7 +713,22 @@ var requirejs, require, define;
|
|
709
713
|
//Use parentName here since the plugin's name is not reliable,
|
710
714
|
//could be some weird string with no path that actually wants to
|
711
715
|
//reference the parentName's path.
|
712
|
-
plugin.load(name, makeRequire(map.parentMap, true
|
716
|
+
plugin.load(name, makeRequire(map.parentMap, true, function (deps, cb) {
|
717
|
+
var moduleDeps = [],
|
718
|
+
i, dep, depMap;
|
719
|
+
//Convert deps to full names and hold on to them
|
720
|
+
//for reference later, when figuring out if they
|
721
|
+
//are blocked by a circular dependency.
|
722
|
+
for (i = 0; (dep = deps[i]); i++) {
|
723
|
+
depMap = makeModuleMap(dep, map.parentMap);
|
724
|
+
deps[i] = depMap.fullName;
|
725
|
+
if (!depMap.prefix) {
|
726
|
+
moduleDeps.push(deps[i]);
|
727
|
+
}
|
728
|
+
}
|
729
|
+
depManager.moduleDeps = (depManager.moduleDeps || []).concat(moduleDeps);
|
730
|
+
return context.require(deps, cb);
|
731
|
+
}), load, config);
|
713
732
|
}
|
714
733
|
}
|
715
734
|
|
@@ -976,15 +995,62 @@ var requirejs, require, define;
|
|
976
995
|
}
|
977
996
|
};
|
978
997
|
|
979
|
-
function
|
980
|
-
|
981
|
-
|
998
|
+
function findCycle(manager, traced) {
|
999
|
+
var fullName = manager.map.fullName,
|
1000
|
+
depArray = manager.depArray,
|
1001
|
+
fullyLoaded = true,
|
1002
|
+
i, depName, depManager, result;
|
1003
|
+
|
1004
|
+
if (manager.isDone || !fullName || !loaded[fullName]) {
|
1005
|
+
return result;
|
1006
|
+
}
|
1007
|
+
|
1008
|
+
//Found the cycle.
|
1009
|
+
if (traced[fullName]) {
|
1010
|
+
return manager;
|
1011
|
+
}
|
1012
|
+
|
1013
|
+
traced[fullName] = true;
|
1014
|
+
|
1015
|
+
//Trace through the dependencies.
|
1016
|
+
if (depArray) {
|
1017
|
+
for (i = 0; i < depArray.length; i++) {
|
1018
|
+
//Some array members may be null, like if a trailing comma
|
1019
|
+
//IE, so do the explicit [i] access and check if it has a value.
|
1020
|
+
depName = depArray[i];
|
1021
|
+
if (!loaded[depName] && !reservedDependencies[depName]) {
|
1022
|
+
fullyLoaded = false;
|
1023
|
+
break;
|
1024
|
+
}
|
1025
|
+
depManager = waiting[depName];
|
1026
|
+
if (depManager && !depManager.isDone && loaded[depName]) {
|
1027
|
+
result = findCycle(depManager, traced);
|
1028
|
+
if (result) {
|
1029
|
+
break;
|
1030
|
+
}
|
1031
|
+
}
|
1032
|
+
}
|
1033
|
+
if (!fullyLoaded) {
|
1034
|
+
//Discard the cycle that was found, since it cannot
|
1035
|
+
//be forced yet. Also clear this module from traced.
|
1036
|
+
result = undefined;
|
1037
|
+
delete traced[fullName];
|
1038
|
+
}
|
982
1039
|
}
|
983
1040
|
|
1041
|
+
return result;
|
1042
|
+
}
|
1043
|
+
|
1044
|
+
function forceExec(manager, traced) {
|
984
1045
|
var fullName = manager.map.fullName,
|
985
1046
|
depArray = manager.depArray,
|
986
1047
|
i, depName, depManager, prefix, prefixManager, value;
|
987
1048
|
|
1049
|
+
|
1050
|
+
if (manager.isDone || !fullName || !loaded[fullName]) {
|
1051
|
+
return undefined;
|
1052
|
+
}
|
1053
|
+
|
988
1054
|
if (fullName) {
|
989
1055
|
if (traced[fullName]) {
|
990
1056
|
return defined[fullName];
|
@@ -1015,7 +1081,7 @@ var requirejs, require, define;
|
|
1015
1081
|
}
|
1016
1082
|
}
|
1017
1083
|
|
1018
|
-
return
|
1084
|
+
return defined[fullName];
|
1019
1085
|
}
|
1020
1086
|
|
1021
1087
|
/**
|
@@ -1028,8 +1094,9 @@ var requirejs, require, define;
|
|
1028
1094
|
var waitInterval = config.waitSeconds * 1000,
|
1029
1095
|
//It is possible to disable the wait interval by using waitSeconds of 0.
|
1030
1096
|
expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(),
|
1031
|
-
noLoads = "", hasLoadedProp = false, stillLoading = false,
|
1032
|
-
|
1097
|
+
noLoads = "", hasLoadedProp = false, stillLoading = false,
|
1098
|
+
cycleDeps = [],
|
1099
|
+
i, prop, err, manager, cycleManager, moduleDeps;
|
1033
1100
|
|
1034
1101
|
//If there are items still in the paused queue processing wait.
|
1035
1102
|
//This is particularly important in the sync case where each paused
|
@@ -1059,7 +1126,20 @@ var requirejs, require, define;
|
|
1059
1126
|
noLoads += prop + " ";
|
1060
1127
|
} else {
|
1061
1128
|
stillLoading = true;
|
1062
|
-
|
1129
|
+
if (prop.indexOf('!') === -1) {
|
1130
|
+
//No reason to keep looking for unfinished
|
1131
|
+
//loading. If the only stillLoading is a
|
1132
|
+
//plugin resource though, keep going,
|
1133
|
+
//because it may be that a plugin resource
|
1134
|
+
//is waiting on a non-plugin cycle.
|
1135
|
+
cycleDeps = [];
|
1136
|
+
break;
|
1137
|
+
} else {
|
1138
|
+
moduleDeps = managerCallbacks[prop] && managerCallbacks[prop].moduleDeps;
|
1139
|
+
if (moduleDeps) {
|
1140
|
+
cycleDeps.push.apply(cycleDeps, moduleDeps);
|
1141
|
+
}
|
1142
|
+
}
|
1063
1143
|
}
|
1064
1144
|
}
|
1065
1145
|
}
|
@@ -1078,7 +1158,23 @@ var requirejs, require, define;
|
|
1078
1158
|
err.requireModules = noLoads;
|
1079
1159
|
return req.onError(err);
|
1080
1160
|
}
|
1081
|
-
|
1161
|
+
|
1162
|
+
//If still loading but a plugin is waiting on a regular module cycle
|
1163
|
+
//break the cycle.
|
1164
|
+
if (stillLoading && cycleDeps.length) {
|
1165
|
+
for (i = 0; (manager = waiting[cycleDeps[i]]); i++) {
|
1166
|
+
if ((cycleManager = findCycle(manager, {}))) {
|
1167
|
+
forceExec(cycleManager, {});
|
1168
|
+
break;
|
1169
|
+
}
|
1170
|
+
}
|
1171
|
+
|
1172
|
+
}
|
1173
|
+
|
1174
|
+
//If still waiting on loads, and the waiting load is something
|
1175
|
+
//other than a plugin resource, or there are still outstanding
|
1176
|
+
//scripts, then just try back later.
|
1177
|
+
if (!expired && (stillLoading || context.scriptCount)) {
|
1082
1178
|
//Something is still waiting to load. Wait for it, but only
|
1083
1179
|
//if a timeout is not already in effect.
|
1084
1180
|
if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) {
|
@@ -1136,6 +1232,9 @@ var requirejs, require, define;
|
|
1136
1232
|
resume = function () {
|
1137
1233
|
var manager, map, url, i, p, args, fullName;
|
1138
1234
|
|
1235
|
+
//Any defined modules in the global queue, intake them now.
|
1236
|
+
context.takeGlobalQueue();
|
1237
|
+
|
1139
1238
|
resumeDepth += 1;
|
1140
1239
|
|
1141
1240
|
if (context.scriptCount <= 0) {
|
@@ -1299,8 +1398,7 @@ var requirejs, require, define;
|
|
1299
1398
|
context.requireWait = false;
|
1300
1399
|
//But first, call resume to register any defined modules that may
|
1301
1400
|
//be in a data-main built file before the priority config
|
1302
|
-
//call.
|
1303
|
-
context.takeGlobalQueue();
|
1401
|
+
//call.
|
1304
1402
|
resume();
|
1305
1403
|
|
1306
1404
|
context.require(cfg.priority);
|
@@ -1377,10 +1475,6 @@ var requirejs, require, define;
|
|
1377
1475
|
//then resume the dependency processing.
|
1378
1476
|
if (!context.requireWait) {
|
1379
1477
|
while (!context.scriptCount && context.paused.length) {
|
1380
|
-
//For built layers, there can be some defined
|
1381
|
-
//modules waiting for intake into the context,
|
1382
|
-
//in particular module plugins. Take them.
|
1383
|
-
context.takeGlobalQueue();
|
1384
1478
|
resume();
|
1385
1479
|
}
|
1386
1480
|
}
|
@@ -1944,7 +2038,7 @@ var requirejs, require, define;
|
|
1944
2038
|
//Figure out baseUrl. Get it from the script tag with require.js in it.
|
1945
2039
|
scripts = document.getElementsByTagName("script");
|
1946
2040
|
|
1947
|
-
for (
|
2041
|
+
for (globalI = scripts.length - 1; globalI > -1 && (script = scripts[globalI]); globalI--) {
|
1948
2042
|
//Set the "head" where we can append children by
|
1949
2043
|
//using the script's parent.
|
1950
2044
|
if (!head) {
|
@@ -2052,10 +2146,6 @@ var requirejs, require, define;
|
|
2052
2146
|
setTimeout(function () {
|
2053
2147
|
ctx.requireWait = false;
|
2054
2148
|
|
2055
|
-
//Any modules included with the require.js file will be in the
|
2056
|
-
//global queue, assign them to this context.
|
2057
|
-
ctx.takeGlobalQueue();
|
2058
|
-
|
2059
2149
|
if (!ctx.scriptCount) {
|
2060
2150
|
ctx.resume();
|
2061
2151
|
}
|
@@ -2364,6 +2454,7 @@ if(env === 'node') {
|
|
2364
2454
|
define('node/file', ['fs', 'path'], function (fs, path) {
|
2365
2455
|
|
2366
2456
|
var isWindows = process.platform === 'win32',
|
2457
|
+
windowsDriveRegExp = /^[a-zA-Z]\:\/$/,
|
2367
2458
|
file;
|
2368
2459
|
|
2369
2460
|
function frontSlash(path) {
|
@@ -2385,7 +2476,7 @@ define('node/file', ['fs', 'path'], function (fs, path) {
|
|
2385
2476
|
}
|
2386
2477
|
|
2387
2478
|
function mkDir(dir) {
|
2388
|
-
if (!exists(dir)) {
|
2479
|
+
if (!exists(dir) && (!isWindows || !windowsDriveRegExp.test(dir))) {
|
2389
2480
|
fs.mkdirSync(dir, 511);
|
2390
2481
|
}
|
2391
2482
|
}
|
@@ -2897,6 +2988,14 @@ define('lang', function () {
|
|
2897
2988
|
return lang.ostring.call(it) === "[object Array]";
|
2898
2989
|
},
|
2899
2990
|
|
2991
|
+
isFunction: function(it) {
|
2992
|
+
return lang.ostring.call(it) === "[object Function]";
|
2993
|
+
},
|
2994
|
+
|
2995
|
+
isRegExp: function(it) {
|
2996
|
+
return it && it instanceof RegExp;
|
2997
|
+
},
|
2998
|
+
|
2900
2999
|
/**
|
2901
3000
|
* Simple function to mix in properties from source into target,
|
2902
3001
|
* but only if target does not already have a property of the same name.
|
@@ -6726,11 +6825,15 @@ define('parse', ['uglifyjs/index'], function (uglify) {
|
|
6726
6825
|
* @param {Function} onMatch function to call on a parse match.
|
6727
6826
|
* @param {Object} [options] This is normally the build config options if
|
6728
6827
|
* it is passed.
|
6828
|
+
* @param {Function} [recurseCallback] function to call on each valid
|
6829
|
+
* node, defaults to parse.parseNode.
|
6729
6830
|
*/
|
6730
|
-
parse.recurse = function (parentNode, onMatch, options) {
|
6831
|
+
parse.recurse = function (parentNode, onMatch, options, recurseCallback) {
|
6731
6832
|
var hasHas = options && options.has,
|
6732
6833
|
i, node;
|
6733
6834
|
|
6835
|
+
recurseCallback = recurseCallback || this.parseNode;
|
6836
|
+
|
6734
6837
|
if (isArray(parentNode)) {
|
6735
6838
|
for (i = 0; i < parentNode.length; i++) {
|
6736
6839
|
node = parentNode[i];
|
@@ -6750,17 +6853,17 @@ define('parse', ['uglifyjs/index'], function (uglify) {
|
|
6750
6853
|
if (hasHas && node[0] === 'if' && node[1] && node[1][0] === 'name' &&
|
6751
6854
|
(node[1][1] === 'true' || node[1][1] === 'false')) {
|
6752
6855
|
if (node[1][1] === 'true') {
|
6753
|
-
this.recurse([node[2]], onMatch, options);
|
6856
|
+
this.recurse([node[2]], onMatch, options, recurseCallback);
|
6754
6857
|
} else {
|
6755
|
-
this.recurse([node[3]], onMatch, options);
|
6858
|
+
this.recurse([node[3]], onMatch, options, recurseCallback);
|
6756
6859
|
}
|
6757
6860
|
} else {
|
6758
|
-
if (
|
6861
|
+
if (recurseCallback(node, onMatch)) {
|
6759
6862
|
//The onMatch indicated parsing should
|
6760
6863
|
//stop for children of this node.
|
6761
6864
|
continue;
|
6762
6865
|
}
|
6763
|
-
this.recurse(node, onMatch, options);
|
6866
|
+
this.recurse(node, onMatch, options, recurseCallback);
|
6764
6867
|
}
|
6765
6868
|
}
|
6766
6869
|
}
|
@@ -6859,6 +6962,37 @@ define('parse', ['uglifyjs/index'], function (uglify) {
|
|
6859
6962
|
return null;
|
6860
6963
|
};
|
6861
6964
|
|
6965
|
+
/**
|
6966
|
+
* Finds any config that is passed to requirejs.
|
6967
|
+
* @param {String} fileName
|
6968
|
+
* @param {String} fileContents
|
6969
|
+
*
|
6970
|
+
* @returns {Object} a config object. Will be null if no config.
|
6971
|
+
* Can throw an error if the config in the file cannot be evaluated in
|
6972
|
+
* a build context to valid JavaScript.
|
6973
|
+
*/
|
6974
|
+
parse.findConfig = function (fileName, fileContents) {
|
6975
|
+
/*jslint evil: true */
|
6976
|
+
//This is a litle bit inefficient, it ends up with two uglifyjs parser
|
6977
|
+
//calls. Can revisit later, but trying to build out larger functional
|
6978
|
+
//pieces first.
|
6979
|
+
var foundConfig = null,
|
6980
|
+
astRoot = parser.parse(fileContents);
|
6981
|
+
|
6982
|
+
parse.recurse(astRoot, function (configNode) {
|
6983
|
+
var jsConfig;
|
6984
|
+
|
6985
|
+
if (!foundConfig && configNode) {
|
6986
|
+
jsConfig = parse.nodeToString(configNode);
|
6987
|
+
foundConfig = eval('(' + jsConfig + ')');
|
6988
|
+
return foundConfig;
|
6989
|
+
}
|
6990
|
+
return undefined;
|
6991
|
+
}, null, parse.parseConfigNode);
|
6992
|
+
|
6993
|
+
return foundConfig;
|
6994
|
+
};
|
6995
|
+
|
6862
6996
|
/**
|
6863
6997
|
* Finds all dependencies specified in dependency arrays and inside
|
6864
6998
|
* simplified commonjs wrappers.
|
@@ -6872,7 +7006,7 @@ define('parse', ['uglifyjs/index'], function (uglify) {
|
|
6872
7006
|
//This is a litle bit inefficient, it ends up with two uglifyjs parser
|
6873
7007
|
//calls. Can revisit later, but trying to build out larger functional
|
6874
7008
|
//pieces first.
|
6875
|
-
var dependencies =
|
7009
|
+
var dependencies = [],
|
6876
7010
|
astRoot = parser.parse(fileContents);
|
6877
7011
|
|
6878
7012
|
parse.recurse(astRoot, function (callName, config, name, deps) {
|
@@ -7047,6 +7181,56 @@ define('parse', ['uglifyjs/index'], function (uglify) {
|
|
7047
7181
|
return false;
|
7048
7182
|
};
|
7049
7183
|
|
7184
|
+
|
7185
|
+
/**
|
7186
|
+
* Determines if a specific node is a valid require/requirejs config
|
7187
|
+
* call. That includes calls to require/requirejs.config().
|
7188
|
+
* @param {Array} node
|
7189
|
+
* @param {Function} onMatch a function to call when a match is found.
|
7190
|
+
* It is passed the match name, and the config, name, deps possible args.
|
7191
|
+
* The config, name and deps args are not normalized.
|
7192
|
+
*
|
7193
|
+
* @returns {String} a JS source string with the valid require/define call.
|
7194
|
+
* Otherwise null.
|
7195
|
+
*/
|
7196
|
+
parse.parseConfigNode = function (node, onMatch) {
|
7197
|
+
var call, configNode, args;
|
7198
|
+
|
7199
|
+
if (!isArray(node)) {
|
7200
|
+
return false;
|
7201
|
+
}
|
7202
|
+
|
7203
|
+
if (node[0] === 'call') {
|
7204
|
+
call = node[1];
|
7205
|
+
args = node[2];
|
7206
|
+
|
7207
|
+
if (call) {
|
7208
|
+
//A require.config() or requirejs.config() call.
|
7209
|
+
if ((call[0] === 'dot' &&
|
7210
|
+
(call[1] && call[1][0] === 'name' &&
|
7211
|
+
(call[1][1] === 'require' || call[1][1] === 'requirejs')) &&
|
7212
|
+
call[2] === 'config') ||
|
7213
|
+
//A require() or requirejs() config call.
|
7214
|
+
|
7215
|
+
(call[0] === 'name' &&
|
7216
|
+
(call[1] === 'require' || call[1] === 'requirejs'))
|
7217
|
+
) {
|
7218
|
+
//It is a plain require() call.
|
7219
|
+
configNode = args[0];
|
7220
|
+
|
7221
|
+
if (configNode[0] !== 'object') {
|
7222
|
+
return null;
|
7223
|
+
}
|
7224
|
+
|
7225
|
+
return onMatch(configNode);
|
7226
|
+
|
7227
|
+
}
|
7228
|
+
}
|
7229
|
+
}
|
7230
|
+
|
7231
|
+
return false;
|
7232
|
+
};
|
7233
|
+
|
7050
7234
|
/**
|
7051
7235
|
* Converts an AST node into a JS source string. Does not maintain formatting
|
7052
7236
|
* or even comments from original source, just returns valid JS source.
|
@@ -8669,6 +8853,104 @@ function (lang, logger, file, parse, optimize, pragma,
|
|
8669
8853
|
return path.replace(lang.backSlashRegExp, '/');
|
8670
8854
|
};
|
8671
8855
|
|
8856
|
+
build.makeAbsObject = function (props, obj, absFilePath) {
|
8857
|
+
var i, prop;
|
8858
|
+
if (obj) {
|
8859
|
+
for (i = 0; (prop = props[i]); i++) {
|
8860
|
+
if (obj.hasOwnProperty(prop)) {
|
8861
|
+
obj[prop] = build.makeAbsPath(obj[prop], absFilePath);
|
8862
|
+
}
|
8863
|
+
}
|
8864
|
+
}
|
8865
|
+
};
|
8866
|
+
|
8867
|
+
/**
|
8868
|
+
* For any path in a possible config, make it absolute relative
|
8869
|
+
* to the absFilePath passed in.
|
8870
|
+
*/
|
8871
|
+
build.makeAbsConfig = function (config, absFilePath) {
|
8872
|
+
var props, prop, i, originalBaseUrl;
|
8873
|
+
|
8874
|
+
props = ["appDir", "dir", "baseUrl"];
|
8875
|
+
for (i = 0; (prop = props[i]); i++) {
|
8876
|
+
if (config[prop]) {
|
8877
|
+
//Add abspath if necessary, make sure these paths end in
|
8878
|
+
//slashes
|
8879
|
+
if (prop === "baseUrl") {
|
8880
|
+
originalBaseUrl = config.baseUrl;
|
8881
|
+
if (config.appDir) {
|
8882
|
+
//If baseUrl with an appDir, the baseUrl is relative to
|
8883
|
+
//the appDir, *not* the absFilePath. appDir and dir are
|
8884
|
+
//made absolute before baseUrl, so this will work.
|
8885
|
+
config.baseUrl = build.makeAbsPath(originalBaseUrl, config.appDir);
|
8886
|
+
//Set up dir output baseUrl.
|
8887
|
+
config.dirBaseUrl = build.makeAbsPath(originalBaseUrl, config.dir);
|
8888
|
+
} else {
|
8889
|
+
//The dir output baseUrl is same as regular baseUrl, both
|
8890
|
+
//relative to the absFilePath.
|
8891
|
+
config.baseUrl = build.makeAbsPath(config[prop], absFilePath);
|
8892
|
+
config.dirBaseUrl = config.dir || config.baseUrl;
|
8893
|
+
}
|
8894
|
+
|
8895
|
+
//Make sure dirBaseUrl ends in a slash, since it is
|
8896
|
+
//concatenated with other strings.
|
8897
|
+
config.dirBaseUrl = endsWithSlash(config.dirBaseUrl);
|
8898
|
+
} else {
|
8899
|
+
config[prop] = build.makeAbsPath(config[prop], absFilePath);
|
8900
|
+
}
|
8901
|
+
|
8902
|
+
config[prop] = endsWithSlash(config[prop]);
|
8903
|
+
}
|
8904
|
+
}
|
8905
|
+
|
8906
|
+
//Do not allow URLs for paths resources.
|
8907
|
+
if (config.paths) {
|
8908
|
+
for (prop in config.paths) {
|
8909
|
+
if (config.paths.hasOwnProperty(prop)) {
|
8910
|
+
config.paths[prop] = build.makeAbsPath(config.paths[prop],
|
8911
|
+
(config.baseUrl || absFilePath));
|
8912
|
+
}
|
8913
|
+
}
|
8914
|
+
}
|
8915
|
+
|
8916
|
+
build.makeAbsObject(["out", "cssIn"], config, absFilePath);
|
8917
|
+
build.makeAbsObject(["startFile", "endFile"], config.wrap, absFilePath);
|
8918
|
+
};
|
8919
|
+
|
8920
|
+
build.nestedMix = {
|
8921
|
+
paths: true,
|
8922
|
+
has: true,
|
8923
|
+
hasOnSave: true,
|
8924
|
+
pragmas: true,
|
8925
|
+
pragmasOnSave: true
|
8926
|
+
};
|
8927
|
+
|
8928
|
+
/**
|
8929
|
+
* Mixes additional source config into target config, and merges some
|
8930
|
+
* nested config, like paths, correctly.
|
8931
|
+
*/
|
8932
|
+
function mixConfig(target, source) {
|
8933
|
+
var prop, value;
|
8934
|
+
|
8935
|
+
for (prop in source) {
|
8936
|
+
if (source.hasOwnProperty(prop)) {
|
8937
|
+
//If the value of the property is a plain object, then
|
8938
|
+
//allow a one-level-deep mixing of it.
|
8939
|
+
value = source[prop];
|
8940
|
+
if (typeof value === 'object' && value &&
|
8941
|
+
!lang.isArray(value) && !lang.isFunction(value) &&
|
8942
|
+
!lang.isRegExp(value)) {
|
8943
|
+
if (!target[prop]) {
|
8944
|
+
target[prop] = {};
|
8945
|
+
}
|
8946
|
+
lang.mixin(target[prop], source[prop], true);
|
8947
|
+
} else {
|
8948
|
+
target[prop] = source[prop];
|
8949
|
+
}
|
8950
|
+
}
|
8951
|
+
}
|
8952
|
+
}
|
8953
|
+
|
8672
8954
|
/**
|
8673
8955
|
* Creates a config object for an optimization build.
|
8674
8956
|
* It will also read the build profile if it is available, to create
|
@@ -8682,13 +8964,15 @@ function (lang, logger, file, parse, optimize, pragma,
|
|
8682
8964
|
*/
|
8683
8965
|
build.createConfig = function (cfg) {
|
8684
8966
|
/*jslint evil: true */
|
8685
|
-
var config = {}, buildFileContents, buildFileConfig,
|
8686
|
-
|
8967
|
+
var config = {}, buildFileContents, buildFileConfig, mainConfig,
|
8968
|
+
mainConfigFile, prop, buildFile, absFilePath;
|
8687
8969
|
|
8688
8970
|
lang.mixin(config, buildBaseConfig);
|
8689
8971
|
lang.mixin(config, cfg, true);
|
8690
8972
|
|
8973
|
+
//Make sure all paths are relative to current directory.
|
8691
8974
|
absFilePath = file.absPath('.');
|
8975
|
+
build.makeAbsConfig(config, absFilePath);
|
8692
8976
|
|
8693
8977
|
if (config.buildFile) {
|
8694
8978
|
//A build file exists, load it to get more config.
|
@@ -8701,35 +8985,71 @@ function (lang, logger, file, parse, optimize, pragma,
|
|
8701
8985
|
}
|
8702
8986
|
|
8703
8987
|
absFilePath = config.baseUrl = file.absPath(file.parent(buildFile));
|
8704
|
-
config.dir = config.baseUrl + "/build/";
|
8705
8988
|
|
8706
8989
|
//Load build file options.
|
8707
8990
|
buildFileContents = file.readFile(buildFile);
|
8708
8991
|
try {
|
8709
8992
|
buildFileConfig = eval("(" + buildFileContents + ")");
|
8993
|
+
build.makeAbsConfig(buildFileConfig, absFilePath);
|
8994
|
+
|
8995
|
+
if (!buildFileConfig.out && !buildFileConfig.dir) {
|
8996
|
+
buildFileConfig.dir = (buildFileConfig.baseUrl || config.baseUrl) + "/build/";
|
8997
|
+
}
|
8998
|
+
|
8710
8999
|
} catch (e) {
|
8711
9000
|
throw new Error("Build file " + buildFile + " is malformed: " + e);
|
8712
9001
|
}
|
8713
|
-
|
9002
|
+
}
|
8714
9003
|
|
8715
|
-
|
8716
|
-
|
8717
|
-
|
8718
|
-
|
8719
|
-
|
8720
|
-
|
8721
|
-
|
8722
|
-
|
9004
|
+
mainConfigFile = config.mainConfigFile || (buildFileConfig && buildFileConfig.mainConfigFile);
|
9005
|
+
if (mainConfigFile) {
|
9006
|
+
mainConfigFile = build.makeAbsPath(mainConfigFile, absFilePath);
|
9007
|
+
try {
|
9008
|
+
mainConfig = parse.findConfig(mainConfigFile, file.readFile(mainConfigFile));
|
9009
|
+
} catch (configError) {
|
9010
|
+
throw new Error('The config in mainConfigFile ' +
|
9011
|
+
mainConfigFile +
|
9012
|
+
' cannot be used because it cannot be evaluated' +
|
9013
|
+
' correctly while running in the optimizer. Try only' +
|
9014
|
+
' using a config that is also valid JSON, or do not use' +
|
9015
|
+
' mainConfigFile and instead copy the config values needed' +
|
9016
|
+
' into a build file or command line arguments given to the optimizer.');
|
9017
|
+
}
|
9018
|
+
if (mainConfig) {
|
9019
|
+
//If no baseUrl, then use the directory holding the main config.
|
9020
|
+
if (!mainConfig.baseUrl) {
|
9021
|
+
mainConfig.baseUrl = mainConfigFile.substring(0, mainConfigFile.lastIndexOf('/'));
|
9022
|
+
}
|
9023
|
+
build.makeAbsConfig(mainConfig, mainConfigFile);
|
9024
|
+
mixConfig(config, mainConfig);
|
8723
9025
|
}
|
8724
9026
|
}
|
8725
9027
|
|
9028
|
+
//Mix in build file config, but only after mainConfig has been mixed in.
|
9029
|
+
if (buildFileConfig) {
|
9030
|
+
mixConfig(config, buildFileConfig);
|
9031
|
+
}
|
9032
|
+
|
9033
|
+
//Re-apply the override config values. Command line
|
9034
|
+
//args should take precedence over build file values.
|
9035
|
+
mixConfig(config, cfg);
|
9036
|
+
|
9037
|
+
//Check for errors in config
|
9038
|
+
if (config.cssIn && !config.out) {
|
9039
|
+
throw new Error("ERROR: 'out' option missing.");
|
9040
|
+
}
|
8726
9041
|
if (!config.cssIn && !config.baseUrl) {
|
8727
9042
|
throw new Error("ERROR: 'baseUrl' option missing.");
|
8728
9043
|
}
|
8729
|
-
|
8730
9044
|
if (!config.out && !config.dir) {
|
8731
9045
|
throw new Error('Missing either an "out" or "dir" config value.');
|
8732
9046
|
}
|
9047
|
+
if (config.out && config.dir) {
|
9048
|
+
throw new Error('The "out" and "dir" options are incompatible.' +
|
9049
|
+
' Use "out" if you are targeting a single file for' +
|
9050
|
+
' for optimization, and "dir" if you want the appDir' +
|
9051
|
+
' or baseUrl directories optimized.');
|
9052
|
+
}
|
8733
9053
|
|
8734
9054
|
if (config.out && !config.cssIn) {
|
8735
9055
|
//Just one file to optimize.
|
@@ -8754,60 +9074,15 @@ function (lang, logger, file, parse, optimize, pragma,
|
|
8754
9074
|
}
|
8755
9075
|
}
|
8756
9076
|
|
8757
|
-
//Adjust the path properties as appropriate.
|
8758
|
-
//First make sure build paths use front slashes and end in a slash,
|
8759
|
-
//and make sure they are aboslute paths.
|
8760
|
-
props = ["appDir", "dir", "baseUrl"];
|
8761
|
-
for (i = 0; (prop = props[i]); i++) {
|
8762
|
-
if (config[prop]) {
|
8763
|
-
config[prop] = config[prop].replace(lang.backSlashRegExp, "/");
|
8764
|
-
|
8765
|
-
//Add abspath if necessary.
|
8766
|
-
if (prop === "baseUrl") {
|
8767
|
-
originalBaseUrl = config.baseUrl;
|
8768
|
-
if (config.appDir) {
|
8769
|
-
//If baseUrl with an appDir, the baseUrl is relative to
|
8770
|
-
//the appDir, *not* the absFilePath. appDir and dir are
|
8771
|
-
//made absolute before baseUrl, so this will work.
|
8772
|
-
config.baseUrl = build.makeAbsPath(originalBaseUrl, config.appDir);
|
8773
|
-
//Set up dir output baseUrl.
|
8774
|
-
config.dirBaseUrl = build.makeAbsPath(originalBaseUrl, config.dir);
|
8775
|
-
} else {
|
8776
|
-
//The dir output baseUrl is same as regular baseUrl, both
|
8777
|
-
//relative to the absFilePath.
|
8778
|
-
config.baseUrl = build.makeAbsPath(config[prop], absFilePath);
|
8779
|
-
config.dirBaseUrl = config.dir || config.baseUrl;
|
8780
|
-
}
|
8781
|
-
|
8782
|
-
//Make sure dirBaseUrl ends in a slash, since it is
|
8783
|
-
//concatenated with other strings.
|
8784
|
-
config.dirBaseUrl = endsWithSlash(config.dirBaseUrl);
|
8785
|
-
} else {
|
8786
|
-
config[prop] = build.makeAbsPath(config[prop], absFilePath);
|
8787
|
-
}
|
8788
|
-
|
8789
|
-
config[prop] = endsWithSlash(config[prop]);
|
8790
|
-
}
|
8791
|
-
}
|
8792
|
-
|
8793
9077
|
//Do not allow URLs for paths resources.
|
8794
9078
|
if (config.paths) {
|
8795
9079
|
for (prop in config.paths) {
|
8796
9080
|
if (config.paths.hasOwnProperty(prop)) {
|
8797
|
-
config.paths[prop] = config.paths[prop].replace(lang.backSlashRegExp, "/");
|
8798
9081
|
disallowUrls(config.paths[prop]);
|
8799
9082
|
}
|
8800
9083
|
}
|
8801
9084
|
}
|
8802
9085
|
|
8803
|
-
//Make sure some other paths are absolute.
|
8804
|
-
props = ["out", "cssIn"];
|
8805
|
-
for (i = 0; (prop = props[i]); i++) {
|
8806
|
-
if (config[prop]) {
|
8807
|
-
config[prop] = build.makeAbsPath(config[prop], absFilePath);
|
8808
|
-
}
|
8809
|
-
}
|
8810
|
-
|
8811
9086
|
//Get any wrap text.
|
8812
9087
|
try {
|
8813
9088
|
if (config.wrap) {
|
@@ -9070,7 +9345,7 @@ function (lang, logger, file, parse, optimize, pragma,
|
|
9070
9345
|
//define(\n//begin v1.x content
|
9071
9346
|
//for a comment.
|
9072
9347
|
return new RegExp('(^|[^\\.])(' + (namespace || '').replace(/\./g, '\\.') +
|
9073
|
-
'define|define)\\s*\\(\\s*(\\/\\/[^\\n\\r]*[\\r\\n])?(\\[|
|
9348
|
+
'define|define)\\s*\\(\\s*(\\/\\/[^\\n\\r]*[\\r\\n])?(\\[|function|[\\w\\d_\\$]+\\s*\\)|\\{|["\']([^"\']+)["\'])(\\s*,\\s*f)?');
|
9074
9349
|
};
|
9075
9350
|
|
9076
9351
|
build.leadingCommaRegExp = /^\s*,/;
|
@@ -9181,6 +9456,28 @@ function (lang, logger, file, parse, optimize, pragma,
|
|
9181
9456
|
}, ['build', 'logger'], runBuild);
|
9182
9457
|
};
|
9183
9458
|
|
9459
|
+
requirejs.tools = {
|
9460
|
+
useLib: function (contextName, callback) {
|
9461
|
+
if (!callback) {
|
9462
|
+
callback = contextName;
|
9463
|
+
contextName = 'uselib';
|
9464
|
+
}
|
9465
|
+
|
9466
|
+
if (!useLibLoaded[contextName]) {
|
9467
|
+
loadLib();
|
9468
|
+
useLibLoaded[contextName] = true;
|
9469
|
+
}
|
9470
|
+
|
9471
|
+
var req = requirejs({
|
9472
|
+
context: contextName
|
9473
|
+
});
|
9474
|
+
|
9475
|
+
req(['build'], function () {
|
9476
|
+
callback(req);
|
9477
|
+
});
|
9478
|
+
}
|
9479
|
+
};
|
9480
|
+
|
9184
9481
|
requirejs.define = define;
|
9185
9482
|
|
9186
9483
|
module.exports = requirejs;
|
@@ -18,9 +18,13 @@ var module_specs = [
|
|
18
18
|
<% build_config['modules'].each do |m| %>
|
19
19
|
{
|
20
20
|
name: "<%= m['name'] %>",
|
21
|
-
|
22
|
-
include: [<%= m['
|
23
|
-
|
21
|
+
<% if m['include'] %>
|
22
|
+
include: [<%= m['include'].map {|i| "'#{i}'" }.join(", ") %>],
|
23
|
+
<% end %>
|
24
|
+
<% if m['exclude'] %>
|
25
|
+
exclude: [<%= m['exclude'].map {|i| "'#{i}'" }.join(", ") %>],
|
26
|
+
<% end %>
|
27
|
+
|
24
28
|
out: '<%= module_path_for m['name'] %>'
|
25
29
|
},
|
26
30
|
<% end %>
|
@@ -13,7 +13,7 @@ class RequirejsRailsTest < ActiveSupport::TestCase
|
|
13
13
|
test "require.js version" do
|
14
14
|
require_js = Pathname.new(__FILE__+'/../../vendor/assets/javascripts/require.js').cleanpath.read
|
15
15
|
context = ExecJS.compile(require_js)
|
16
|
-
assert_equal "1.0.
|
16
|
+
assert_equal "1.0.5", context.eval("require.version")
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license RequireJS order 1.0.
|
2
|
+
* @license RequireJS order 1.0.5 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.
|
3
3
|
* Available via the MIT or new BSD license.
|
4
4
|
* see: http://github.com/jrburke/requirejs for details
|
5
5
|
*/
|
@@ -120,11 +120,20 @@
|
|
120
120
|
}
|
121
121
|
|
122
122
|
define({
|
123
|
-
version: '1.0.
|
123
|
+
version: '1.0.5',
|
124
124
|
|
125
125
|
load: function (name, req, onLoad, config) {
|
126
|
-
var
|
127
|
-
node, context;
|
126
|
+
var hasToUrl = !!req.nameToUrl,
|
127
|
+
url, node, context;
|
128
|
+
|
129
|
+
//If no nameToUrl, then probably a build with a loader that
|
130
|
+
//does not support it, and all modules are inlined.
|
131
|
+
if (!hasToUrl) {
|
132
|
+
req([name], onLoad);
|
133
|
+
return;
|
134
|
+
}
|
135
|
+
|
136
|
+
url = req.nameToUrl(name, null);
|
128
137
|
|
129
138
|
//Make sure the async attribute is not set for any pathway involving
|
130
139
|
//this script.
|
@@ -1,17 +1,15 @@
|
|
1
1
|
/** vim: et:ts=4:sw=4:sts=4
|
2
|
-
* @license RequireJS 1.0.
|
2
|
+
* @license RequireJS 1.0.5 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
|
3
3
|
* Available via the MIT or new BSD license.
|
4
4
|
* see: http://github.com/jrburke/requirejs for details
|
5
5
|
*/
|
6
6
|
/*jslint strict: false, plusplus: false, sub: true */
|
7
|
-
/*global window
|
8
|
-
jQuery: false, clearInterval: false, setInterval: false, self: false,
|
9
|
-
setTimeout: false, opera: false */
|
7
|
+
/*global window, navigator, document, importScripts, jQuery, setTimeout, opera */
|
10
8
|
|
11
9
|
var requirejs, require, define;
|
12
10
|
(function () {
|
13
11
|
//Change this version number for each release.
|
14
|
-
var version = "1.0.
|
12
|
+
var version = "1.0.5",
|
15
13
|
commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,
|
16
14
|
cjsRequireRegExp = /require\(\s*["']([^'"\s]+)["']\s*\)/g,
|
17
15
|
currDirRegExp = /^\.\//,
|
@@ -37,8 +35,13 @@ var requirejs, require, define;
|
|
37
35
|
interactiveScript = null,
|
38
36
|
checkLoadedDepth = 0,
|
39
37
|
useInteractive = false,
|
38
|
+
reservedDependencies = {
|
39
|
+
require: true,
|
40
|
+
module: true,
|
41
|
+
exports: true
|
42
|
+
},
|
40
43
|
req, cfg = {}, currentlyAddingScript, s, head, baseElement, scripts, script,
|
41
|
-
src, subPath, mainScript, dataMain,
|
44
|
+
src, subPath, mainScript, dataMain, globalI, ctx, jQueryCheck, checkLoadedTimeoutId;
|
42
45
|
|
43
46
|
function isFunction(it) {
|
44
47
|
return ostring.call(it) === "[object Function]";
|
@@ -391,8 +394,8 @@ var requirejs, require, define;
|
|
391
394
|
* per module because of the implication of path mappings that may
|
392
395
|
* need to be relative to the module name.
|
393
396
|
*/
|
394
|
-
function makeRequire(relModuleMap, enableBuildCallback) {
|
395
|
-
var modRequire = makeContextModuleFunc(context.require, relModuleMap, enableBuildCallback);
|
397
|
+
function makeRequire(relModuleMap, enableBuildCallback, altRequire) {
|
398
|
+
var modRequire = makeContextModuleFunc(altRequire || context.require, relModuleMap, enableBuildCallback);
|
396
399
|
|
397
400
|
mixin(modRequire, {
|
398
401
|
nameToUrl: makeContextModuleFunc(context.nameToUrl, relModuleMap),
|
@@ -607,7 +610,22 @@ var requirejs, require, define;
|
|
607
610
|
//Use parentName here since the plugin's name is not reliable,
|
608
611
|
//could be some weird string with no path that actually wants to
|
609
612
|
//reference the parentName's path.
|
610
|
-
plugin.load(name, makeRequire(map.parentMap, true
|
613
|
+
plugin.load(name, makeRequire(map.parentMap, true, function (deps, cb) {
|
614
|
+
var moduleDeps = [],
|
615
|
+
i, dep, depMap;
|
616
|
+
//Convert deps to full names and hold on to them
|
617
|
+
//for reference later, when figuring out if they
|
618
|
+
//are blocked by a circular dependency.
|
619
|
+
for (i = 0; (dep = deps[i]); i++) {
|
620
|
+
depMap = makeModuleMap(dep, map.parentMap);
|
621
|
+
deps[i] = depMap.fullName;
|
622
|
+
if (!depMap.prefix) {
|
623
|
+
moduleDeps.push(deps[i]);
|
624
|
+
}
|
625
|
+
}
|
626
|
+
depManager.moduleDeps = (depManager.moduleDeps || []).concat(moduleDeps);
|
627
|
+
return context.require(deps, cb);
|
628
|
+
}), load, config);
|
611
629
|
}
|
612
630
|
}
|
613
631
|
|
@@ -874,15 +892,62 @@ var requirejs, require, define;
|
|
874
892
|
}
|
875
893
|
};
|
876
894
|
|
877
|
-
function
|
878
|
-
|
879
|
-
|
895
|
+
function findCycle(manager, traced) {
|
896
|
+
var fullName = manager.map.fullName,
|
897
|
+
depArray = manager.depArray,
|
898
|
+
fullyLoaded = true,
|
899
|
+
i, depName, depManager, result;
|
900
|
+
|
901
|
+
if (manager.isDone || !fullName || !loaded[fullName]) {
|
902
|
+
return result;
|
903
|
+
}
|
904
|
+
|
905
|
+
//Found the cycle.
|
906
|
+
if (traced[fullName]) {
|
907
|
+
return manager;
|
908
|
+
}
|
909
|
+
|
910
|
+
traced[fullName] = true;
|
911
|
+
|
912
|
+
//Trace through the dependencies.
|
913
|
+
if (depArray) {
|
914
|
+
for (i = 0; i < depArray.length; i++) {
|
915
|
+
//Some array members may be null, like if a trailing comma
|
916
|
+
//IE, so do the explicit [i] access and check if it has a value.
|
917
|
+
depName = depArray[i];
|
918
|
+
if (!loaded[depName] && !reservedDependencies[depName]) {
|
919
|
+
fullyLoaded = false;
|
920
|
+
break;
|
921
|
+
}
|
922
|
+
depManager = waiting[depName];
|
923
|
+
if (depManager && !depManager.isDone && loaded[depName]) {
|
924
|
+
result = findCycle(depManager, traced);
|
925
|
+
if (result) {
|
926
|
+
break;
|
927
|
+
}
|
928
|
+
}
|
929
|
+
}
|
930
|
+
if (!fullyLoaded) {
|
931
|
+
//Discard the cycle that was found, since it cannot
|
932
|
+
//be forced yet. Also clear this module from traced.
|
933
|
+
result = undefined;
|
934
|
+
delete traced[fullName];
|
935
|
+
}
|
880
936
|
}
|
881
937
|
|
938
|
+
return result;
|
939
|
+
}
|
940
|
+
|
941
|
+
function forceExec(manager, traced) {
|
882
942
|
var fullName = manager.map.fullName,
|
883
943
|
depArray = manager.depArray,
|
884
944
|
i, depName, depManager, prefix, prefixManager, value;
|
885
945
|
|
946
|
+
|
947
|
+
if (manager.isDone || !fullName || !loaded[fullName]) {
|
948
|
+
return undefined;
|
949
|
+
}
|
950
|
+
|
886
951
|
if (fullName) {
|
887
952
|
if (traced[fullName]) {
|
888
953
|
return defined[fullName];
|
@@ -913,7 +978,7 @@ var requirejs, require, define;
|
|
913
978
|
}
|
914
979
|
}
|
915
980
|
|
916
|
-
return
|
981
|
+
return defined[fullName];
|
917
982
|
}
|
918
983
|
|
919
984
|
/**
|
@@ -926,8 +991,9 @@ var requirejs, require, define;
|
|
926
991
|
var waitInterval = config.waitSeconds * 1000,
|
927
992
|
//It is possible to disable the wait interval by using waitSeconds of 0.
|
928
993
|
expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(),
|
929
|
-
noLoads = "", hasLoadedProp = false, stillLoading = false,
|
930
|
-
|
994
|
+
noLoads = "", hasLoadedProp = false, stillLoading = false,
|
995
|
+
cycleDeps = [],
|
996
|
+
i, prop, err, manager, cycleManager, moduleDeps;
|
931
997
|
|
932
998
|
//If there are items still in the paused queue processing wait.
|
933
999
|
//This is particularly important in the sync case where each paused
|
@@ -957,7 +1023,20 @@ var requirejs, require, define;
|
|
957
1023
|
noLoads += prop + " ";
|
958
1024
|
} else {
|
959
1025
|
stillLoading = true;
|
960
|
-
|
1026
|
+
if (prop.indexOf('!') === -1) {
|
1027
|
+
//No reason to keep looking for unfinished
|
1028
|
+
//loading. If the only stillLoading is a
|
1029
|
+
//plugin resource though, keep going,
|
1030
|
+
//because it may be that a plugin resource
|
1031
|
+
//is waiting on a non-plugin cycle.
|
1032
|
+
cycleDeps = [];
|
1033
|
+
break;
|
1034
|
+
} else {
|
1035
|
+
moduleDeps = managerCallbacks[prop] && managerCallbacks[prop].moduleDeps;
|
1036
|
+
if (moduleDeps) {
|
1037
|
+
cycleDeps.push.apply(cycleDeps, moduleDeps);
|
1038
|
+
}
|
1039
|
+
}
|
961
1040
|
}
|
962
1041
|
}
|
963
1042
|
}
|
@@ -976,7 +1055,23 @@ var requirejs, require, define;
|
|
976
1055
|
err.requireModules = noLoads;
|
977
1056
|
return req.onError(err);
|
978
1057
|
}
|
979
|
-
|
1058
|
+
|
1059
|
+
//If still loading but a plugin is waiting on a regular module cycle
|
1060
|
+
//break the cycle.
|
1061
|
+
if (stillLoading && cycleDeps.length) {
|
1062
|
+
for (i = 0; (manager = waiting[cycleDeps[i]]); i++) {
|
1063
|
+
if ((cycleManager = findCycle(manager, {}))) {
|
1064
|
+
forceExec(cycleManager, {});
|
1065
|
+
break;
|
1066
|
+
}
|
1067
|
+
}
|
1068
|
+
|
1069
|
+
}
|
1070
|
+
|
1071
|
+
//If still waiting on loads, and the waiting load is something
|
1072
|
+
//other than a plugin resource, or there are still outstanding
|
1073
|
+
//scripts, then just try back later.
|
1074
|
+
if (!expired && (stillLoading || context.scriptCount)) {
|
980
1075
|
//Something is still waiting to load. Wait for it, but only
|
981
1076
|
//if a timeout is not already in effect.
|
982
1077
|
if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) {
|
@@ -1034,6 +1129,9 @@ var requirejs, require, define;
|
|
1034
1129
|
resume = function () {
|
1035
1130
|
var manager, map, url, i, p, args, fullName;
|
1036
1131
|
|
1132
|
+
//Any defined modules in the global queue, intake them now.
|
1133
|
+
context.takeGlobalQueue();
|
1134
|
+
|
1037
1135
|
resumeDepth += 1;
|
1038
1136
|
|
1039
1137
|
if (context.scriptCount <= 0) {
|
@@ -1197,8 +1295,7 @@ var requirejs, require, define;
|
|
1197
1295
|
context.requireWait = false;
|
1198
1296
|
//But first, call resume to register any defined modules that may
|
1199
1297
|
//be in a data-main built file before the priority config
|
1200
|
-
//call.
|
1201
|
-
context.takeGlobalQueue();
|
1298
|
+
//call.
|
1202
1299
|
resume();
|
1203
1300
|
|
1204
1301
|
context.require(cfg.priority);
|
@@ -1275,10 +1372,6 @@ var requirejs, require, define;
|
|
1275
1372
|
//then resume the dependency processing.
|
1276
1373
|
if (!context.requireWait) {
|
1277
1374
|
while (!context.scriptCount && context.paused.length) {
|
1278
|
-
//For built layers, there can be some defined
|
1279
|
-
//modules waiting for intake into the context,
|
1280
|
-
//in particular module plugins. Take them.
|
1281
|
-
context.takeGlobalQueue();
|
1282
1375
|
resume();
|
1283
1376
|
}
|
1284
1377
|
}
|
@@ -1842,7 +1935,7 @@ var requirejs, require, define;
|
|
1842
1935
|
//Figure out baseUrl. Get it from the script tag with require.js in it.
|
1843
1936
|
scripts = document.getElementsByTagName("script");
|
1844
1937
|
|
1845
|
-
for (
|
1938
|
+
for (globalI = scripts.length - 1; globalI > -1 && (script = scripts[globalI]); globalI--) {
|
1846
1939
|
//Set the "head" where we can append children by
|
1847
1940
|
//using the script's parent.
|
1848
1941
|
if (!head) {
|
@@ -1950,10 +2043,6 @@ var requirejs, require, define;
|
|
1950
2043
|
setTimeout(function () {
|
1951
2044
|
ctx.requireWait = false;
|
1952
2045
|
|
1953
|
-
//Any modules included with the require.js file will be in the
|
1954
|
-
//global queue, assign them to this context.
|
1955
|
-
ctx.takeGlobalQueue();
|
1956
|
-
|
1957
2046
|
if (!ctx.scriptCount) {
|
1958
2047
|
ctx.resume();
|
1959
2048
|
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: requirejs-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|
16
|
-
requirement: &
|
16
|
+
requirement: &70147562051000 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.1.1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70147562051000
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rails
|
27
|
-
requirement: &
|
27
|
+
requirement: &70147562050400 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 3.1.1
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70147562050400
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: sqlite3
|
38
|
-
requirement: &
|
38
|
+
requirement: &70147562049780 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70147562049780
|
47
47
|
description: This gem provides RequireJS support for your Rails 3 application.
|
48
48
|
email:
|
49
49
|
- whitley@bangpath.org
|
@@ -122,7 +122,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
122
122
|
version: '0'
|
123
123
|
segments:
|
124
124
|
- 0
|
125
|
-
hash:
|
125
|
+
hash: 926621835689614088
|
126
126
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
127
|
none: false
|
128
128
|
requirements:
|
@@ -131,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
131
131
|
version: '0'
|
132
132
|
segments:
|
133
133
|
- 0
|
134
|
-
hash:
|
134
|
+
hash: 926621835689614088
|
135
135
|
requirements:
|
136
136
|
- node.js is required for 'rake assets:precompile', used to run the r.js build
|
137
137
|
- If needed, jQuery should be v1.7 or greater (jquery-rails >= 1.0.17).
|