requirejs-rails 0.9.2 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,6 +20,15 @@ module Requirejs
20
20
 
21
21
  config.assets.precompile += config.requirejs.precompile
22
22
 
23
+ # Check for the existence of the requirejs:precompile:all top-level Rake task and disable asset pipeline
24
+ # compression to ensure that `r.js` gets uncompressed assets.
25
+ Rake.application.top_level_tasks.each do |task_name|
26
+ case task_name
27
+ when "requirejs:precompile:all"
28
+ config.assets.js_compressor = false
29
+ end
30
+ end if defined?(Rake.application)
31
+
23
32
  manifest_directory = config.assets.manifest || File.join(::Rails.public_path, config.assets.prefix)
24
33
  manifest_path = File.join(manifest_directory, "rjs_manifest.yml")
25
34
  config.requirejs.manifest_path = Pathname.new(manifest_path)
@@ -35,11 +35,10 @@ var errback = function(error) {
35
35
  // Do a series of builds of individual files, using the args suggested by:
36
36
  // http://requirejs.org/docs/optimization.html#onejs
37
37
  //
38
- // r.js will eventually need a nested call idiom to handle async
38
+ // r.js will eventually need a nested call idiom to handle async
39
39
  // builds. Anticipating that need.
40
40
  var async_runner = module_specs.reduceRight(function(prev, curr) {
41
41
  return function (buildReportText) {
42
- requirejs.optimize(mix(curr), prev);
43
42
  requirejs.optimize(mix(curr), prev, errback);
44
43
  };
45
44
  }, function(buildReportText) {} );
@@ -1,6 +1,6 @@
1
1
  module Requirejs
2
2
  module Rails
3
- Version = "0.9.2"
4
- LibVersion = "2.1.10"
3
+ Version = "0.9.3"
4
+ LibVersion = "2.1.11"
5
5
  end
6
6
  end
@@ -11,7 +11,7 @@ require 'active_support/ordered_options'
11
11
 
12
12
  namespace :requirejs do
13
13
  # This method was backported from an earlier version of Sprockets.
14
- def ruby_rake_task(task)
14
+ def ruby_rake_task(task, force = true)
15
15
  env = ENV["RAILS_ENV"] || "production"
16
16
  groups = ENV["RAILS_GROUPS"] || "assets"
17
17
  args = [$0, task, "RAILS_ENV=#{env}", "RAILS_GROUPS=#{groups}"]
@@ -77,19 +77,6 @@ OS X Homebrew users can use 'brew install node'.
77
77
  "requirejs:precompile:run_rjs",
78
78
  "requirejs:precompile:digestify_and_compress"]
79
79
 
80
- task :disable_js_compressor do
81
- # Ensure that Sprockets doesn't try to compress assets before they hit
82
- # r.js. Failure to do this can cause a build which works in dev, but
83
- # emits require.js "notloaded" errors, etc. in production.
84
- #
85
- # Note that a configuration block is used here to ensure that it runs
86
- # after the environment ("config/application.rb",
87
- # "config/environments/*.rb") has been set up.
88
- Rails.application.config.assets.configure do |env|
89
- env.js_compressor = nil
90
- end
91
- end
92
-
93
80
  # Invoke another ruby process if we're called from inside
94
81
  # assets:precompile so we don't clobber the environment
95
82
  #
@@ -160,6 +147,3 @@ OS X Homebrew users can use 'brew install node'.
160
147
  end
161
148
 
162
149
  task "assets:precompile" => ["requirejs:precompile:external"]
163
- if ARGV[0] == "requirejs:precompile:all"
164
- task "assets:environment" => ["requirejs:precompile:disable_js_compressor"]
165
- end
@@ -16,10 +16,10 @@ Gem::Specification.new do |s|
16
16
  git_test_files, git_files = `git ls-files`.split("\n").partition { |f| f =~ /^test/ }
17
17
  s.test_files = git_test_files
18
18
  s.files = git_files
19
- s.require_path = 'lib'
19
+ s.require_path = 'lib'
20
20
 
21
- s.add_dependency "railties", ">= 3.1.1", "< 4.1"
22
- s.add_development_dependency "rails", ">= 3.1.1", "< 4.1"
21
+ s.add_dependency "railties", ">= 3.1.1"
22
+ s.add_development_dependency "rails", ">= 3.1.1"
23
23
  s.add_development_dependency "sqlite3"
24
24
 
25
25
  s.requirements << "node.js is required for 'rake assets:precompile', used to run the r.js build"
@@ -1,5 +1,5 @@
1
1
  /**
2
- * almond 0.2.5 Copyright (c) 2011-2012, The Dojo Foundation All Rights Reserved.
2
+ * @license almond 0.2.9 Copyright (c) 2011-2014, The Dojo Foundation All Rights Reserved.
3
3
  * Available via the MIT or new BSD license.
4
4
  * see: http://github.com/jrburke/almond for details
5
5
  */
@@ -10,396 +10,412 @@
10
10
 
11
11
  var requirejs, require, define;
12
12
  (function (undef) {
13
- var main, req, makeMap, handlers,
14
- defined = {},
15
- waiting = {},
16
- config = {},
17
- defining = {},
18
- hasOwn = Object.prototype.hasOwnProperty,
19
- aps = [].slice;
20
-
21
- function hasProp(obj, prop) {
22
- return hasOwn.call(obj, prop);
23
- }
24
-
25
- /**
26
- * Given a relative module name, like ./something, normalize it to
27
- * a real name that can be mapped to a path.
28
- * @param {String} name the relative name
29
- * @param {String} baseName a real name that the name arg is relative
30
- * to.
31
- * @returns {String} normalized name
32
- */
33
- function normalize(name, baseName) {
34
- var nameParts, nameSegment, mapValue, foundMap,
35
- foundI, foundStarMap, starI, i, j, part,
36
- baseParts = baseName && baseName.split("/"),
37
- map = config.map,
38
- starMap = (map && map['*']) || {};
39
-
40
- //Adjust any relative paths.
41
- if (name && name.charAt(0) === ".") {
42
- //If have a base name, try to normalize against it,
43
- //otherwise, assume it is a top-level require that will
44
- //be relative to baseUrl in the end.
45
- if (baseName) {
46
- //Convert baseName to array, and lop off the last part,
47
- //so that . matches that "directory" and not name of the baseName's
48
- //module. For instance, baseName of "one/two/three", maps to
49
- //"one/two/three.js", but we want the directory, "one/two" for
50
- //this normalization.
51
- baseParts = baseParts.slice(0, baseParts.length - 1);
52
-
53
- name = baseParts.concat(name.split("/"));
54
-
55
- //start trimDots
56
- for (i = 0; i < name.length; i += 1) {
57
- part = name[i];
58
- if (part === ".") {
59
- name.splice(i, 1);
60
- i -= 1;
61
- } else if (part === "..") {
62
- if (i === 1 && (name[2] === '..' || name[0] === '..')) {
63
- //End of the line. Keep at least one non-dot
64
- //path segment at the front so it can be mapped
65
- //correctly to disk. Otherwise, there is likely
66
- //no path mapping for a path starting with '..'.
67
- //This can still fail, but catches the most reasonable
68
- //uses of ..
69
- break;
70
- } else if (i > 0) {
71
- name.splice(i - 1, 2);
72
- i -= 2;
73
- }
74
- }
75
- }
76
- //end trimDots
77
-
78
- name = name.join("/");
79
- } else if (name.indexOf('./') === 0) {
80
- // No baseName, so this is ID is resolved relative
81
- // to baseUrl, pull off the leading dot.
82
- name = name.substring(2);
83
- }
13
+ var main, req, makeMap, handlers,
14
+ defined = {},
15
+ waiting = {},
16
+ config = {},
17
+ defining = {},
18
+ hasOwn = Object.prototype.hasOwnProperty,
19
+ aps = [].slice,
20
+ jsSuffixRegExp = /\.js$/;
21
+
22
+ function hasProp(obj, prop) {
23
+ return hasOwn.call(obj, prop);
84
24
  }
85
25
 
86
- //Apply map config if available.
87
- if ((baseParts || starMap) && map) {
88
- nameParts = name.split('/');
89
-
90
- for (i = nameParts.length; i > 0; i -= 1) {
91
- nameSegment = nameParts.slice(0, i).join("/");
92
-
93
- if (baseParts) {
94
- //Find the longest baseName segment match in the config.
95
- //So, do joins on the biggest to smallest lengths of baseParts.
96
- for (j = baseParts.length; j > 0; j -= 1) {
97
- mapValue = map[baseParts.slice(0, j).join('/')];
98
-
99
- //baseName segment has config, find if it has one for
100
- //this name.
101
- if (mapValue) {
102
- mapValue = mapValue[nameSegment];
103
- if (mapValue) {
104
- //Match, update name to the new value.
105
- foundMap = mapValue;
106
- foundI = i;
107
- break;
108
- }
26
+ /**
27
+ * Given a relative module name, like ./something, normalize it to
28
+ * a real name that can be mapped to a path.
29
+ * @param {String} name the relative name
30
+ * @param {String} baseName a real name that the name arg is relative
31
+ * to.
32
+ * @returns {String} normalized name
33
+ */
34
+ function normalize(name, baseName) {
35
+ var nameParts, nameSegment, mapValue, foundMap, lastIndex,
36
+ foundI, foundStarMap, starI, i, j, part,
37
+ baseParts = baseName && baseName.split("/"),
38
+ map = config.map,
39
+ starMap = (map && map['*']) || {};
40
+
41
+ //Adjust any relative paths.
42
+ if (name && name.charAt(0) === ".") {
43
+ //If have a base name, try to normalize against it,
44
+ //otherwise, assume it is a top-level require that will
45
+ //be relative to baseUrl in the end.
46
+ if (baseName) {
47
+ //Convert baseName to array, and lop off the last part,
48
+ //so that . matches that "directory" and not name of the baseName's
49
+ //module. For instance, baseName of "one/two/three", maps to
50
+ //"one/two/three.js", but we want the directory, "one/two" for
51
+ //this normalization.
52
+ baseParts = baseParts.slice(0, baseParts.length - 1);
53
+ name = name.split('/');
54
+ lastIndex = name.length - 1;
55
+
56
+ // Node .js allowance:
57
+ if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {
58
+ name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');
59
+ }
60
+
61
+ name = baseParts.concat(name);
62
+
63
+ //start trimDots
64
+ for (i = 0; i < name.length; i += 1) {
65
+ part = name[i];
66
+ if (part === ".") {
67
+ name.splice(i, 1);
68
+ i -= 1;
69
+ } else if (part === "..") {
70
+ if (i === 1 && (name[2] === '..' || name[0] === '..')) {
71
+ //End of the line. Keep at least one non-dot
72
+ //path segment at the front so it can be mapped
73
+ //correctly to disk. Otherwise, there is likely
74
+ //no path mapping for a path starting with '..'.
75
+ //This can still fail, but catches the most reasonable
76
+ //uses of ..
77
+ break;
78
+ } else if (i > 0) {
79
+ name.splice(i - 1, 2);
80
+ i -= 2;
81
+ }
82
+ }
83
+ }
84
+ //end trimDots
85
+
86
+ name = name.join("/");
87
+ } else if (name.indexOf('./') === 0) {
88
+ // No baseName, so this is ID is resolved relative
89
+ // to baseUrl, pull off the leading dot.
90
+ name = name.substring(2);
109
91
  }
110
- }
111
92
  }
112
93
 
113
- if (foundMap) {
114
- break;
115
- }
94
+ //Apply map config if available.
95
+ if ((baseParts || starMap) && map) {
96
+ nameParts = name.split('/');
97
+
98
+ for (i = nameParts.length; i > 0; i -= 1) {
99
+ nameSegment = nameParts.slice(0, i).join("/");
100
+
101
+ if (baseParts) {
102
+ //Find the longest baseName segment match in the config.
103
+ //So, do joins on the biggest to smallest lengths of baseParts.
104
+ for (j = baseParts.length; j > 0; j -= 1) {
105
+ mapValue = map[baseParts.slice(0, j).join('/')];
106
+
107
+ //baseName segment has config, find if it has one for
108
+ //this name.
109
+ if (mapValue) {
110
+ mapValue = mapValue[nameSegment];
111
+ if (mapValue) {
112
+ //Match, update name to the new value.
113
+ foundMap = mapValue;
114
+ foundI = i;
115
+ break;
116
+ }
117
+ }
118
+ }
119
+ }
120
+
121
+ if (foundMap) {
122
+ break;
123
+ }
124
+
125
+ //Check for a star map match, but just hold on to it,
126
+ //if there is a shorter segment match later in a matching
127
+ //config, then favor over this star map.
128
+ if (!foundStarMap && starMap && starMap[nameSegment]) {
129
+ foundStarMap = starMap[nameSegment];
130
+ starI = i;
131
+ }
132
+ }
116
133
 
117
- //Check for a star map match, but just hold on to it,
118
- //if there is a shorter segment match later in a matching
119
- //config, then favor over this star map.
120
- if (!foundStarMap && starMap && starMap[nameSegment]) {
121
- foundStarMap = starMap[nameSegment];
122
- starI = i;
134
+ if (!foundMap && foundStarMap) {
135
+ foundMap = foundStarMap;
136
+ foundI = starI;
137
+ }
138
+
139
+ if (foundMap) {
140
+ nameParts.splice(0, foundI, foundMap);
141
+ name = nameParts.join('/');
142
+ }
123
143
  }
124
- }
125
144
 
126
- if (!foundMap && foundStarMap) {
127
- foundMap = foundStarMap;
128
- foundI = starI;
129
- }
145
+ return name;
146
+ }
130
147
 
131
- if (foundMap) {
132
- nameParts.splice(0, foundI, foundMap);
133
- name = nameParts.join('/');
134
- }
148
+ function makeRequire(relName, forceSync) {
149
+ return function () {
150
+ //A version of a require function that passes a moduleName
151
+ //value for items that may need to
152
+ //look up paths relative to the moduleName
153
+ return req.apply(undef, aps.call(arguments, 0).concat([relName, forceSync]));
154
+ };
135
155
  }
136
156
 
137
- return name;
138
- }
157
+ function makeNormalize(relName) {
158
+ return function (name) {
159
+ return normalize(name, relName);
160
+ };
161
+ }
139
162
 
140
- function makeRequire(relName, forceSync) {
141
- return function () {
142
- //A version of a require function that passes a moduleName
143
- //value for items that may need to
144
- //look up paths relative to the moduleName
145
- return req.apply(undef, aps.call(arguments, 0).concat([relName, forceSync]));
146
- };
147
- }
163
+ function makeLoad(depName) {
164
+ return function (value) {
165
+ defined[depName] = value;
166
+ };
167
+ }
148
168
 
149
- function makeNormalize(relName) {
150
- return function (name) {
151
- return normalize(name, relName);
152
- };
153
- }
169
+ function callDep(name) {
170
+ if (hasProp(waiting, name)) {
171
+ var args = waiting[name];
172
+ delete waiting[name];
173
+ defining[name] = true;
174
+ main.apply(undef, args);
175
+ }
154
176
 
155
- function makeLoad(depName) {
156
- return function (value) {
157
- defined[depName] = value;
158
- };
159
- }
160
-
161
- function callDep(name) {
162
- if (hasProp(waiting, name)) {
163
- var args = waiting[name];
164
- delete waiting[name];
165
- defining[name] = true;
166
- main.apply(undef, args);
177
+ if (!hasProp(defined, name) && !hasProp(defining, name)) {
178
+ throw new Error('No ' + name);
179
+ }
180
+ return defined[name];
167
181
  }
168
182
 
169
- if (!hasProp(defined, name) && !hasProp(defining, name)) {
170
- throw new Error('No ' + name);
171
- }
172
- return defined[name];
173
- }
174
-
175
- //Turns a plugin!resource to [plugin, resource]
176
- //with the plugin being undefined if the name
177
- //did not have a plugin prefix.
178
- function splitPrefix(name) {
179
- var prefix,
180
- index = name ? name.indexOf('!') : -1;
181
- if (index > -1) {
182
- prefix = name.substring(0, index);
183
- name = name.substring(index + 1, name.length);
184
- }
185
- return [prefix, name];
186
- }
187
-
188
- /**
189
- * Makes a name map, normalizing the name, and using a plugin
190
- * for normalization if necessary. Grabs a ref to plugin
191
- * too, as an optimization.
192
- */
193
- makeMap = function (name, relName) {
194
- var plugin,
195
- parts = splitPrefix(name),
196
- prefix = parts[0];
197
-
198
- name = parts[1];
199
-
200
- if (prefix) {
201
- prefix = normalize(prefix, relName);
202
- plugin = callDep(prefix);
183
+ //Turns a plugin!resource to [plugin, resource]
184
+ //with the plugin being undefined if the name
185
+ //did not have a plugin prefix.
186
+ function splitPrefix(name) {
187
+ var prefix,
188
+ index = name ? name.indexOf('!') : -1;
189
+ if (index > -1) {
190
+ prefix = name.substring(0, index);
191
+ name = name.substring(index + 1, name.length);
192
+ }
193
+ return [prefix, name];
203
194
  }
204
195
 
205
- //Normalize according
206
- if (prefix) {
207
- if (plugin && plugin.normalize) {
208
- name = plugin.normalize(name, makeNormalize(relName));
209
- } else {
210
- name = normalize(name, relName);
211
- }
212
- } else {
213
- name = normalize(name, relName);
214
- parts = splitPrefix(name);
215
- prefix = parts[0];
216
- name = parts[1];
217
- if (prefix) {
218
- plugin = callDep(prefix);
219
- }
196
+ /**
197
+ * Makes a name map, normalizing the name, and using a plugin
198
+ * for normalization if necessary. Grabs a ref to plugin
199
+ * too, as an optimization.
200
+ */
201
+ makeMap = function (name, relName) {
202
+ var plugin,
203
+ parts = splitPrefix(name),
204
+ prefix = parts[0];
205
+
206
+ name = parts[1];
207
+
208
+ if (prefix) {
209
+ prefix = normalize(prefix, relName);
210
+ plugin = callDep(prefix);
211
+ }
212
+
213
+ //Normalize according
214
+ if (prefix) {
215
+ if (plugin && plugin.normalize) {
216
+ name = plugin.normalize(name, makeNormalize(relName));
217
+ } else {
218
+ name = normalize(name, relName);
219
+ }
220
+ } else {
221
+ name = normalize(name, relName);
222
+ parts = splitPrefix(name);
223
+ prefix = parts[0];
224
+ name = parts[1];
225
+ if (prefix) {
226
+ plugin = callDep(prefix);
227
+ }
228
+ }
229
+
230
+ //Using ridiculous property names for space reasons
231
+ return {
232
+ f: prefix ? prefix + '!' + name : name, //fullName
233
+ n: name,
234
+ pr: prefix,
235
+ p: plugin
236
+ };
237
+ };
238
+
239
+ function makeConfig(name) {
240
+ return function () {
241
+ return (config && config.config && config.config[name]) || {};
242
+ };
220
243
  }
221
244
 
222
- //Using ridiculous property names for space reasons
223
- return {
224
- f: prefix ? prefix + '!' + name : name, //fullName
225
- n: name,
226
- pr: prefix,
227
- p: plugin
245
+ handlers = {
246
+ require: function (name) {
247
+ return makeRequire(name);
248
+ },
249
+ exports: function (name) {
250
+ var e = defined[name];
251
+ if (typeof e !== 'undefined') {
252
+ return e;
253
+ } else {
254
+ return (defined[name] = {});
255
+ }
256
+ },
257
+ module: function (name) {
258
+ return {
259
+ id: name,
260
+ uri: '',
261
+ exports: defined[name],
262
+ config: makeConfig(name)
263
+ };
264
+ }
228
265
  };
229
- };
230
266
 
231
- function makeConfig(name) {
232
- return function () {
233
- return (config && config.config && config.config[name]) || {};
267
+ main = function (name, deps, callback, relName) {
268
+ var cjsModule, depName, ret, map, i,
269
+ args = [],
270
+ callbackType = typeof callback,
271
+ usingExports;
272
+
273
+ //Use name if no relName
274
+ relName = relName || name;
275
+
276
+ //Call the callback to define the module, if necessary.
277
+ if (callbackType === 'undefined' || callbackType === 'function') {
278
+ //Pull out the defined dependencies and pass the ordered
279
+ //values to the callback.
280
+ //Default to [require, exports, module] if no deps
281
+ deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;
282
+ for (i = 0; i < deps.length; i += 1) {
283
+ map = makeMap(deps[i], relName);
284
+ depName = map.f;
285
+
286
+ //Fast path CommonJS standard dependencies.
287
+ if (depName === "require") {
288
+ args[i] = handlers.require(name);
289
+ } else if (depName === "exports") {
290
+ //CommonJS module spec 1.1
291
+ args[i] = handlers.exports(name);
292
+ usingExports = true;
293
+ } else if (depName === "module") {
294
+ //CommonJS module spec 1.1
295
+ cjsModule = args[i] = handlers.module(name);
296
+ } else if (hasProp(defined, depName) ||
297
+ hasProp(waiting, depName) ||
298
+ hasProp(defining, depName)) {
299
+ args[i] = callDep(depName);
300
+ } else if (map.p) {
301
+ map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});
302
+ args[i] = defined[depName];
303
+ } else {
304
+ throw new Error(name + ' missing ' + depName);
305
+ }
306
+ }
307
+
308
+ ret = callback ? callback.apply(defined[name], args) : undefined;
309
+
310
+ if (name) {
311
+ //If setting exports via "module" is in play,
312
+ //favor that over return value and exports. After that,
313
+ //favor a non-undefined return value over exports use.
314
+ if (cjsModule && cjsModule.exports !== undef &&
315
+ cjsModule.exports !== defined[name]) {
316
+ defined[name] = cjsModule.exports;
317
+ } else if (ret !== undef || !usingExports) {
318
+ //Use the return value from the function.
319
+ defined[name] = ret;
320
+ }
321
+ }
322
+ } else if (name) {
323
+ //May just be an object definition for the module. Only
324
+ //worry about defining if have a module name.
325
+ defined[name] = callback;
326
+ }
234
327
  };
235
- }
236
-
237
- handlers = {
238
- require: function (name) {
239
- return makeRequire(name);
240
- },
241
- exports: function (name) {
242
- var e = defined[name];
243
- if (typeof e !== 'undefined') {
244
- return e;
245
- } else {
246
- return (defined[name] = {});
247
- }
248
- },
249
- module: function (name) {
250
- return {
251
- id: name,
252
- uri: '',
253
- exports: defined[name],
254
- config: makeConfig(name)
255
- };
256
- }
257
- };
258
-
259
- main = function (name, deps, callback, relName) {
260
- var cjsModule, depName, ret, map, i,
261
- args = [],
262
- usingExports;
263
-
264
- //Use name if no relName
265
- relName = relName || name;
266
-
267
- //Call the callback to define the module, if necessary.
268
- if (typeof callback === 'function') {
269
-
270
- //Pull out the defined dependencies and pass the ordered
271
- //values to the callback.
272
- //Default to [require, exports, module] if no deps
273
- deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;
274
- for (i = 0; i < deps.length; i += 1) {
275
- map = makeMap(deps[i], relName);
276
- depName = map.f;
277
-
278
- //Fast path CommonJS standard dependencies.
279
- if (depName === "require") {
280
- args[i] = handlers.require(name);
281
- } else if (depName === "exports") {
282
- //CommonJS module spec 1.1
283
- args[i] = handlers.exports(name);
284
- usingExports = true;
285
- } else if (depName === "module") {
286
- //CommonJS module spec 1.1
287
- cjsModule = args[i] = handlers.module(name);
288
- } else if (hasProp(defined, depName) ||
289
- hasProp(waiting, depName) ||
290
- hasProp(defining, depName)) {
291
- args[i] = callDep(depName);
292
- } else if (map.p) {
293
- map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});
294
- args[i] = defined[depName];
295
- } else {
296
- throw new Error(name + ' missing ' + depName);
328
+
329
+ requirejs = require = req = function (deps, callback, relName, forceSync, alt) {
330
+ if (typeof deps === "string") {
331
+ if (handlers[deps]) {
332
+ //callback in this case is really relName
333
+ return handlers[deps](callback);
334
+ }
335
+ //Just return the module wanted. In this scenario, the
336
+ //deps arg is the module name, and second arg (if passed)
337
+ //is just the relName.
338
+ //Normalize module name, if it contains . or ..
339
+ return callDep(makeMap(deps, callback).f);
340
+ } else if (!deps.splice) {
341
+ //deps is a config object, not an array.
342
+ config = deps;
343
+ if (config.deps) {
344
+ req(config.deps, config.callback);
345
+ }
346
+ if (!callback) {
347
+ return;
348
+ }
349
+
350
+ if (callback.splice) {
351
+ //callback is an array, which means it is a dependency list.
352
+ //Adjust args if there are dependencies
353
+ deps = callback;
354
+ callback = relName;
355
+ relName = null;
356
+ } else {
357
+ deps = undef;
358
+ }
297
359
  }
298
- }
299
-
300
- ret = callback.apply(defined[name], args);
301
-
302
- if (name) {
303
- //If setting exports via "module" is in play,
304
- //favor that over return value and exports. After that,
305
- //favor a non-undefined return value over exports use.
306
- if (cjsModule && cjsModule.exports !== undef &&
307
- cjsModule.exports !== defined[name]) {
308
- defined[name] = cjsModule.exports;
309
- } else if (ret !== undef || !usingExports) {
310
- //Use the return value from the function.
311
- defined[name] = ret;
360
+
361
+ //Support require(['a'])
362
+ callback = callback || function () {};
363
+
364
+ //If relName is a function, it is an errback handler,
365
+ //so remove it.
366
+ if (typeof relName === 'function') {
367
+ relName = forceSync;
368
+ forceSync = alt;
312
369
  }
313
- }
314
- } else if (name) {
315
- //May just be an object definition for the module. Only
316
- //worry about defining if have a module name.
317
- defined[name] = callback;
318
- }
319
- };
320
-
321
- requirejs = require = req = function (deps, callback, relName, forceSync, alt) {
322
- if (typeof deps === "string") {
323
- if (handlers[deps]) {
324
- //callback in this case is really relName
325
- return handlers[deps](callback);
326
- }
327
- //Just return the module wanted. In this scenario, the
328
- //deps arg is the module name, and second arg (if passed)
329
- //is just the relName.
330
- //Normalize module name, if it contains . or ..
331
- return callDep(makeMap(deps, callback).f);
332
- } else if (!deps.splice) {
333
- //deps is a config object, not an array.
334
- config = deps;
335
- if (callback.splice) {
336
- //callback is an array, which means it is a dependency list.
337
- //Adjust args if there are dependencies
338
- deps = callback;
339
- callback = relName;
340
- relName = null;
341
- } else {
342
- deps = undef;
343
- }
344
- }
345
370
 
346
- //Support require(['a'])
347
- callback = callback || function () {};
371
+ //Simulate async callback;
372
+ if (forceSync) {
373
+ main(undef, deps, callback, relName);
374
+ } else {
375
+ //Using a non-zero value because of concern for what old browsers
376
+ //do, and latest browsers "upgrade" to 4 if lower value is used:
377
+ //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:
378
+ //If want a value immediately, use require('id') instead -- something
379
+ //that works in almond on the global level, but not guaranteed and
380
+ //unlikely to work in other AMD implementations.
381
+ setTimeout(function () {
382
+ main(undef, deps, callback, relName);
383
+ }, 4);
384
+ }
348
385
 
349
- //If relName is a function, it is an errback handler,
350
- //so remove it.
351
- if (typeof relName === 'function') {
352
- relName = forceSync;
353
- forceSync = alt;
354
- }
386
+ return req;
387
+ };
355
388
 
356
- //Simulate async callback;
357
- if (forceSync) {
358
- main(undef, deps, callback, relName);
359
- } else {
360
- //Using a non-zero value because of concern for what old browsers
361
- //do, and latest browsers "upgrade" to 4 if lower value is used:
362
- //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:
363
- //If want a value immediately, use require('id') instead -- something
364
- //that works in almond on the global level, but not guaranteed and
365
- //unlikely to work in other AMD implementations.
366
- setTimeout(function () {
367
- main(undef, deps, callback, relName);
368
- }, 4);
369
- }
389
+ /**
390
+ * Just drops the config on the floor, but returns req in case
391
+ * the config return value is used.
392
+ */
393
+ req.config = function (cfg) {
394
+ return req(cfg);
395
+ };
370
396
 
371
- return req;
372
- };
373
-
374
- /**
375
- * Just drops the config on the floor, but returns req in case
376
- * the config return value is used.
377
- */
378
- req.config = function (cfg) {
379
- config = cfg;
380
- if (config.deps) {
381
- req(config.deps, config.callback);
382
- }
383
- return req;
384
- };
385
-
386
- define = function (name, deps, callback) {
387
-
388
- //This module may not have dependencies
389
- if (!deps.splice) {
390
- //deps is not an array, so probably means
391
- //an object literal or factory function for
392
- //the value. Adjust args.
393
- callback = deps;
394
- deps = [];
395
- }
397
+ /**
398
+ * Expose module registry for debugging and tooling
399
+ */
400
+ requirejs._defined = defined;
396
401
 
397
- if (!hasProp(defined, name) && !hasProp(waiting, name)) {
398
- waiting[name] = [name, deps, callback];
399
- }
400
- };
402
+ define = function (name, deps, callback) {
403
+
404
+ //This module may not have dependencies
405
+ if (!deps.splice) {
406
+ //deps is not an array, so probably means
407
+ //an object literal or factory function for
408
+ //the value. Adjust args.
409
+ callback = deps;
410
+ deps = [];
411
+ }
401
412
 
402
- define.amd = {
403
- jQuery: true
404
- };
405
- }());
413
+ if (!hasProp(defined, name) && !hasProp(waiting, name)) {
414
+ waiting[name] = [name, deps, callback];
415
+ }
416
+ };
417
+
418
+ define.amd = {
419
+ jQuery: true
420
+ };
421
+ }());