requirejs-rails 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -16,6 +16,7 @@ module Requirejs
16
16
  LOGICAL_PATH_PATTERNS = [
17
17
  Regexp.new("\\.html\\z"),
18
18
  Regexp.new("\\.js\\z"),
19
+ Regexp.new("\\.es6\\z"),
19
20
  Regexp.new("\\.txt\\z"),
20
21
  BOWER_PATH_PATTERN
21
22
  ]
@@ -99,6 +100,7 @@ module Requirejs
99
100
  uglify2
100
101
  useStrict
101
102
  wrap
103
+ wrapShim
102
104
  }
103
105
  end
104
106
 
@@ -36,7 +36,12 @@ module Requirejs
36
36
  end
37
37
  end
38
38
 
39
- manifest_directory = config.assets.manifest || File.join(::Rails.public_path, config.assets.prefix)
39
+ manifest_directory = if config.assets.manifest
40
+ File.basename(config.assets.manifest) =~ /\./ ? File.dirname(config.assets.manifest) : config.assets.manifest
41
+ else
42
+ File.join(::Rails.public_path, config.assets.prefix)
43
+ end
44
+
40
45
  manifest_path = File.join(manifest_directory, "rjs_manifest.yml")
41
46
  config.requirejs.manifest_path = Pathname.new(manifest_path)
42
47
  end
@@ -50,12 +55,28 @@ module Requirejs
50
55
  end
51
56
  end
52
57
 
58
+ # Are we running in the precompilation Rake task? If so, we need to adjust certain environmental configuration
59
+ # values.
60
+ if defined?(Rake) && Rake.application.top_level_tasks.include?("requirejs:precompile:all")
61
+ initializer "requirejs.modify_environment_config", after: "load_environment_config", group: :all do |app|
62
+ app.configure do
63
+ # If we don't set this to true, sprockets-rails will assign `Rails.application.assets` to `nil`.
64
+ config.assets.compile = true
65
+
66
+ # Don't compress JavaScripts fed into the r.js optimizer.
67
+ config.assets.js_compressor = false
68
+
69
+ # Don't use any cache to retrieve assets.
70
+ config.assets.cache = nil
71
+ end
72
+ end
73
+ end
74
+
53
75
  if ::Rails::VERSION::MAJOR >= 4
54
76
  config.after_initialize do |app|
55
77
  config = app.config
56
- rails_manifest_path = File.join(app.root, 'public', config.assets.prefix)
57
- rails_manifest = ::Sprockets::Manifest.new(app.assets, rails_manifest_path)
58
- if config.requirejs.manifest_path.exist? && rails_manifest
78
+ if config.requirejs.manifest_path.exist?
79
+ rails_manifest = ::Sprockets::Railtie.build_manifest(app)
59
80
  rjs_digests = YAML.load(ERB.new(File.new(config.requirejs.manifest_path).read).result)
60
81
  rails_manifest.assets.merge!(rjs_digests)
61
82
  ActionView::Base.instance_eval do
@@ -4,7 +4,16 @@ cdn_pattern = Regexp.new("\\Ahttps?://")
4
4
 
5
5
  modifiedHash = build_config.select { |k, _| k != "modules" }
6
6
  pathsHash = modifiedHash["paths"]
7
- modifiedHash["dir"] = build_dir.to_s
7
+
8
+ case loader
9
+ when :requirejs
10
+ modifiedHash['dir'] = build_dir.to_s
11
+ when :almond
12
+ almond_module = build_config['modules'][0]
13
+ modifiedHash.merge!(almond_module)
14
+ modifiedHash['out'] = build_dir + (module_name_for(almond_module) + '.js')
15
+ end
16
+
8
17
  modifiedHash["paths"] = Hash[
9
18
  pathsHash.map do |k, v|
10
19
  [k, v.is_a?(Array) || cdn_pattern.match(v) ? "empty:" : v]
@@ -14,10 +23,12 @@ modifiedHash["paths"] = Hash[
14
23
  JSON.pretty_generate(modifiedHash)
15
24
  %>;
16
25
 
26
+ <% unless loader == :almond %>
17
27
  baseConfig.modules = [
18
28
  <% build_config["modules"].each do |m| %>
19
29
  <%= JSON.pretty_generate(m) %>,
20
30
  <% end %>
21
31
  ];
32
+ <% end %>
22
33
 
23
34
  requirejs.optimize(baseConfig);
@@ -1,6 +1,6 @@
1
1
  module Requirejs
2
2
  module Rails
3
- Version = "1.0.0"
3
+ Version = "1.0.1"
4
4
  LibVersion = "2.1.22"
5
5
  end
6
6
  end
@@ -0,0 +1,9 @@
1
+ module Requirejs
2
+ module Rails
3
+ class View < ::ActionView::Base
4
+ # This allows requirejs-rails to serve up modules by their undigestified asset paths.
5
+ self.check_precompiled_asset = false \
6
+ if respond_to?(:check_precompiled_asset)
7
+ end
8
+ end
9
+ end
@@ -88,14 +88,6 @@ OS X Homebrew users can use 'brew install node'.
88
88
  "requirejs:clean"] do
89
89
  requirejs.config.source_dir.mkpath
90
90
 
91
- # Save the original JS compressor and cache, which will be restored later.
92
-
93
- original_js_compressor = requirejs.env.js_compressor
94
- requirejs.env.js_compressor = false
95
-
96
- original_cache = requirejs.env.cache
97
- requirejs.env.cache = nil
98
-
99
91
  requirejs.env.each_logical_path(requirejs.config.logical_path_patterns) do |logical_path|
100
92
  m = ::Requirejs::Rails::Config::BOWER_PATH_PATTERN.match(logical_path)
101
93
 
@@ -118,10 +110,6 @@ OS X Homebrew users can use 'brew install node'.
118
110
  end
119
111
  end
120
112
  end
121
-
122
- # Restore the original JS compressor and cache.
123
- requirejs.env.js_compressor = original_js_compressor
124
- requirejs.env.cache = original_cache
125
113
  end
126
114
 
127
115
  task generate_rjs_driver: ["requirejs:setup"] do
@@ -162,8 +150,8 @@ OS X Homebrew users can use 'brew install node'.
162
150
  built_asset_path = requirejs.config.build_dir.join(asset_name)
163
151
 
164
152
  # Compute the digest based on the contents of the compiled file, *not* on the contents of the RequireJS module.
165
- file_digest = ::Rails.application.assets.file_digest(built_asset_path.to_s)
166
- hex_digest = Sprockets::DigestUtils.pack_hexdigest(file_digest)
153
+ file_digest = requirejs.env.file_digest(built_asset_path.to_s)
154
+ hex_digest = file_digest.unpack("H*").first
167
155
  digest_name = asset.logical_path.gsub(path_extension_pattern) { |ext| "-#{hex_digest}#{ext}" }
168
156
 
169
157
  digest_asset_path = requirejs.config.target_dir + digest_name
@@ -1,11 +1,9 @@
1
1
  /**
2
- * @license almond 0.3.1 Copyright (c) 2011-2014, The Dojo Foundation All Rights Reserved.
3
- * Available via the MIT or new BSD license.
4
- * see: http://github.com/jrburke/almond for details
2
+ * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.
3
+ * Released under MIT license, http://github.com/requirejs/almond/LICENSE
5
4
  */
6
5
  //Going sloppy to avoid 'use strict' string cost, but strict practices should
7
6
  //be followed.
8
- /*jslint sloppy: true */
9
7
  /*global setTimeout: false */
10
8
 
11
9
  var requirejs, require, define;
@@ -33,60 +31,58 @@ var requirejs, require, define;
33
31
  */
34
32
  function normalize(name, baseName) {
35
33
  var nameParts, nameSegment, mapValue, foundMap, lastIndex,
36
- foundI, foundStarMap, starI, i, j, part,
34
+ foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,
37
35
  baseParts = baseName && baseName.split("/"),
38
36
  map = config.map,
39
37
  starMap = (map && map['*']) || {};
40
38
 
41
39
  //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
- name = name.split('/');
48
- lastIndex = name.length - 1;
49
-
50
- // Node .js allowance:
51
- if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {
52
- name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');
53
- }
40
+ if (name) {
41
+ name = name.split('/');
42
+ lastIndex = name.length - 1;
43
+
44
+ // If wanting node ID compatibility, strip .js from end
45
+ // of IDs. Have to do this here, and not in nameToUrl
46
+ // because node allows either .js or non .js to map
47
+ // to same file.
48
+ if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {
49
+ name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');
50
+ }
54
51
 
55
- //Lop off the last part of baseParts, so that . matches the
56
- //"directory" and not name of the baseName's module. For instance,
57
- //baseName of "one/two/three", maps to "one/two/three.js", but we
58
- //want the directory, "one/two" for this normalization.
59
- name = baseParts.slice(0, baseParts.length - 1).concat(name);
60
-
61
- //start trimDots
62
- for (i = 0; i < name.length; i += 1) {
63
- part = name[i];
64
- if (part === ".") {
65
- name.splice(i, 1);
66
- i -= 1;
67
- } else if (part === "..") {
68
- if (i === 1 && (name[2] === '..' || name[0] === '..')) {
69
- //End of the line. Keep at least one non-dot
70
- //path segment at the front so it can be mapped
71
- //correctly to disk. Otherwise, there is likely
72
- //no path mapping for a path starting with '..'.
73
- //This can still fail, but catches the most reasonable
74
- //uses of ..
75
- break;
76
- } else if (i > 0) {
77
- name.splice(i - 1, 2);
78
- i -= 2;
79
- }
52
+ // Starts with a '.' so need the baseName
53
+ if (name[0].charAt(0) === '.' && baseParts) {
54
+ //Convert baseName to array, and lop off the last part,
55
+ //so that . matches that 'directory' and not name of the baseName's
56
+ //module. For instance, baseName of 'one/two/three', maps to
57
+ //'one/two/three.js', but we want the directory, 'one/two' for
58
+ //this normalization.
59
+ normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);
60
+ name = normalizedBaseParts.concat(name);
61
+ }
62
+
63
+ //start trimDots
64
+ for (i = 0; i < name.length; i++) {
65
+ part = name[i];
66
+ if (part === '.') {
67
+ name.splice(i, 1);
68
+ i -= 1;
69
+ } else if (part === '..') {
70
+ // If at the start, or previous value is still ..,
71
+ // keep them so that when converted to a path it may
72
+ // still work when converted to a path, even though
73
+ // as an ID it is less than ideal. In larger point
74
+ // releases, may be better to just kick out an error.
75
+ if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {
76
+ continue;
77
+ } else if (i > 0) {
78
+ name.splice(i - 1, 2);
79
+ i -= 2;
80
80
  }
81
81
  }
82
- //end trimDots
83
-
84
- name = name.join("/");
85
- } else if (name.indexOf('./') === 0) {
86
- // No baseName, so this is ID is resolved relative
87
- // to baseUrl, pull off the leading dot.
88
- name = name.substring(2);
89
82
  }
83
+ //end trimDots
84
+
85
+ name = name.join('/');
90
86
  }
91
87
 
92
88
  //Apply map config if available.
@@ -199,32 +195,39 @@ var requirejs, require, define;
199
195
  return [prefix, name];
200
196
  }
201
197
 
198
+ //Creates a parts array for a relName where first part is plugin ID,
199
+ //second part is resource ID. Assumes relName has already been normalized.
200
+ function makeRelParts(relName) {
201
+ return relName ? splitPrefix(relName) : [];
202
+ }
203
+
202
204
  /**
203
205
  * Makes a name map, normalizing the name, and using a plugin
204
206
  * for normalization if necessary. Grabs a ref to plugin
205
207
  * too, as an optimization.
206
208
  */
207
- makeMap = function (name, relName) {
209
+ makeMap = function (name, relParts) {
208
210
  var plugin,
209
211
  parts = splitPrefix(name),
210
- prefix = parts[0];
212
+ prefix = parts[0],
213
+ relResourceName = relParts[1];
211
214
 
212
215
  name = parts[1];
213
216
 
214
217
  if (prefix) {
215
- prefix = normalize(prefix, relName);
218
+ prefix = normalize(prefix, relResourceName);
216
219
  plugin = callDep(prefix);
217
220
  }
218
221
 
219
222
  //Normalize according
220
223
  if (prefix) {
221
224
  if (plugin && plugin.normalize) {
222
- name = plugin.normalize(name, makeNormalize(relName));
225
+ name = plugin.normalize(name, makeNormalize(relResourceName));
223
226
  } else {
224
- name = normalize(name, relName);
227
+ name = normalize(name, relResourceName);
225
228
  }
226
229
  } else {
227
- name = normalize(name, relName);
230
+ name = normalize(name, relResourceName);
228
231
  parts = splitPrefix(name);
229
232
  prefix = parts[0];
230
233
  name = parts[1];
@@ -271,13 +274,14 @@ var requirejs, require, define;
271
274
  };
272
275
 
273
276
  main = function (name, deps, callback, relName) {
274
- var cjsModule, depName, ret, map, i,
277
+ var cjsModule, depName, ret, map, i, relParts,
275
278
  args = [],
276
279
  callbackType = typeof callback,
277
280
  usingExports;
278
281
 
279
282
  //Use name if no relName
280
283
  relName = relName || name;
284
+ relParts = makeRelParts(relName);
281
285
 
282
286
  //Call the callback to define the module, if necessary.
283
287
  if (callbackType === 'undefined' || callbackType === 'function') {
@@ -286,7 +290,7 @@ var requirejs, require, define;
286
290
  //Default to [require, exports, module] if no deps
287
291
  deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;
288
292
  for (i = 0; i < deps.length; i += 1) {
289
- map = makeMap(deps[i], relName);
293
+ map = makeMap(deps[i], relParts);
290
294
  depName = map.f;
291
295
 
292
296
  //Fast path CommonJS standard dependencies.
@@ -342,7 +346,7 @@ var requirejs, require, define;
342
346
  //deps arg is the module name, and second arg (if passed)
343
347
  //is just the relName.
344
348
  //Normalize module name, if it contains . or ..
345
- return callDep(makeMap(deps, callback).f);
349
+ return callDep(makeMap(deps, makeRelParts(callback)).f);
346
350
  } else if (!deps.splice) {
347
351
  //deps is a config object, not an array.
348
352
  config = deps;
@@ -1,7 +1,6 @@
1
1
  /** vim: et:ts=4:sw=4:sts=4
2
- * @license RequireJS 2.1.22 Copyright (c) 2010-2015, The Dojo Foundation All Rights Reserved.
3
- * Available via the MIT or new BSD license.
4
- * see: http://github.com/jrburke/requirejs for details
2
+ * @license RequireJS 2.3.5 Copyright jQuery Foundation and other contributors.
3
+ * Released under MIT license, https://github.com/requirejs/requirejs/blob/master/LICENSE
5
4
  */
6
5
  //Not using strict: uneven strict support in browsers, #392, and causes
7
6
  //problems with requirejs.exec()/transpiler plugins that may not be strict.
@@ -9,18 +8,17 @@
9
8
  /*global window, navigator, document, importScripts, setTimeout, opera */
10
9
 
11
10
  var requirejs, require, define;
12
- (function (global) {
11
+ (function (global, setTimeout) {
13
12
  var req, s, head, baseElement, dataMain, src,
14
13
  interactiveScript, currentlyAddingScript, mainScript, subPath,
15
- version = '2.1.22',
16
- commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,
14
+ version = '2.3.5',
15
+ commentRegExp = /\/\*[\s\S]*?\*\/|([^:"'=]|^)\/\/.*$/mg,
17
16
  cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,
18
17
  jsSuffixRegExp = /\.js$/,
19
18
  currDirRegExp = /^\.\//,
20
19
  op = Object.prototype,
21
20
  ostring = op.toString,
22
21
  hasOwn = op.hasOwnProperty,
23
- ap = Array.prototype,
24
22
  isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document),
25
23
  isWebWorker = !isBrowser && typeof importScripts !== 'undefined',
26
24
  //PS3 indicates loaded and complete, but need to wait for complete
@@ -37,6 +35,11 @@ var requirejs, require, define;
37
35
  globalDefQueue = [],
38
36
  useInteractive = false;
39
37
 
38
+ //Could match something like ')//comment', do not lose the prefix to comment.
39
+ function commentReplace(match, singlePrefix) {
40
+ return singlePrefix || '';
41
+ }
42
+
40
43
  function isFunction(it) {
41
44
  return ostring.call(it) === '[object Function]';
42
45
  }
@@ -437,7 +440,9 @@ var requirejs, require, define;
437
440
  //Account for relative paths if there is a base name.
438
441
  if (name) {
439
442
  if (prefix) {
440
- if (pluginModule && pluginModule.normalize) {
443
+ if (isNormalized) {
444
+ normalizedName = name;
445
+ } else if (pluginModule && pluginModule.normalize) {
441
446
  //Plugin is loaded, use its normalize method.
442
447
  normalizedName = pluginModule.normalize(name, function (name) {
443
448
  return normalize(name, parentName, applyMap);
@@ -861,10 +866,21 @@ var requirejs, require, define;
861
866
 
862
867
  if (this.depCount < 1 && !this.defined) {
863
868
  if (isFunction(factory)) {
864
- try {
869
+ //If there is an error listener, favor passing
870
+ //to that instead of throwing an error. However,
871
+ //only do it for define()'d modules. require
872
+ //errbacks should not be called for failures in
873
+ //their callbacks (#699). However if a global
874
+ //onError is set, use that.
875
+ if ((this.events.error && this.map.isDefine) ||
876
+ req.onError !== defaultOnError) {
877
+ try {
878
+ exports = context.execCb(id, factory, depExports, exports);
879
+ } catch (e) {
880
+ err = e;
881
+ }
882
+ } else {
865
883
  exports = context.execCb(id, factory, depExports, exports);
866
- } catch (e) {
867
- err = e;
868
884
  }
869
885
 
870
886
  // Favor return value over exports. If node/cjs in play,
@@ -881,30 +897,12 @@ var requirejs, require, define;
881
897
  }
882
898
 
883
899
  if (err) {
884
- // If there is an error listener, favor passing
885
- // to that instead of throwing an error. However,
886
- // only do it for define()'d modules. require
887
- // errbacks should not be called for failures in
888
- // their callbacks (#699). However if a global
889
- // onError is set, use that.
890
- if ((this.events.error && this.map.isDefine) ||
891
- req.onError !== defaultOnError) {
892
- err.requireMap = this.map;
893
- err.requireModules = this.map.isDefine ? [this.map.id] : null;
894
- err.requireType = this.map.isDefine ? 'define' : 'require';
895
- return onError((this.error = err));
896
- } else if (typeof console !== 'undefined' &&
897
- console.error) {
898
- // Log the error for debugging. If promises could be
899
- // used, this would be different, but making do.
900
- console.error(err);
901
- } else {
902
- // Do not want to completely lose the error. While this
903
- // will mess up processing and lead to similar results
904
- // as bug 1440, it at least surfaces the error.
905
- req.onError(err);
906
- }
900
+ err.requireMap = this.map;
901
+ err.requireModules = this.map.isDefine ? [this.map.id] : null;
902
+ err.requireType = this.map.isDefine ? 'define' : 'require';
903
+ return onError((this.error = err));
907
904
  }
905
+
908
906
  } else {
909
907
  //Just a literal value
910
908
  exports = factory;
@@ -976,7 +974,8 @@ var requirejs, require, define;
976
974
  //prefix and name should already be normalized, no need
977
975
  //for applying map config again either.
978
976
  normalizedMap = makeModuleMap(map.prefix + '!' + name,
979
- this.map.parentMap);
977
+ this.map.parentMap,
978
+ true);
980
979
  on(normalizedMap,
981
980
  'defined', bind(this, function (value) {
982
981
  this.map.normalizedMap = normalizedMap;
@@ -1288,6 +1287,14 @@ var requirejs, require, define;
1288
1287
  }
1289
1288
  }
1290
1289
 
1290
+ // Convert old style urlArgs string to a function.
1291
+ if (typeof cfg.urlArgs === 'string') {
1292
+ var urlArgs = cfg.urlArgs;
1293
+ cfg.urlArgs = function(id, url) {
1294
+ return (url.indexOf('?') === -1 ? '?' : '&') + urlArgs;
1295
+ };
1296
+ }
1297
+
1291
1298
  //Save off the paths since they require special processing,
1292
1299
  //they are additive.
1293
1300
  var shim = config.shim,
@@ -1664,13 +1671,12 @@ var requirejs, require, define;
1664
1671
 
1665
1672
  //Join the path parts together, then figure out if baseUrl is needed.
1666
1673
  url = syms.join('/');
1667
- url += (ext || (/^data\:|\?/.test(url) || skipExt ? '' : '.js'));
1674
+ url += (ext || (/^data\:|^blob\:|\?/.test(url) || skipExt ? '' : '.js'));
1668
1675
  url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url;
1669
1676
  }
1670
1677
 
1671
- return config.urlArgs ? url +
1672
- ((url.indexOf('?') === -1 ? '?' : '&') +
1673
- config.urlArgs) : url;
1678
+ return config.urlArgs && !/^blob\:/.test(url) ?
1679
+ url + config.urlArgs(moduleName, url) : url;
1674
1680
  },
1675
1681
 
1676
1682
  //Delegates to req.load. Broken out as a separate function to
@@ -1724,8 +1730,8 @@ var requirejs, require, define;
1724
1730
  each(value.depMaps, function(depMap) {
1725
1731
  if (depMap.id === data.id) {
1726
1732
  parents.push(key);
1733
+ return true;
1727
1734
  }
1728
- return true;
1729
1735
  });
1730
1736
  }
1731
1737
  });
@@ -1891,9 +1897,6 @@ var requirejs, require, define;
1891
1897
  if (isBrowser) {
1892
1898
  //In the browser so use a script tag
1893
1899
  node = req.createNode(config, moduleName, url);
1894
- if (config.onNodeCreated) {
1895
- config.onNodeCreated(node, config, moduleName, url);
1896
- }
1897
1900
 
1898
1901
  node.setAttribute('data-requirecontext', context.contextName);
1899
1902
  node.setAttribute('data-requiremodule', moduleName);
@@ -1909,11 +1912,11 @@ var requirejs, require, define;
1909
1912
  if (node.attachEvent &&
1910
1913
  //Check if node.attachEvent is artificially added by custom script or
1911
1914
  //natively supported by browser
1912
- //read https://github.com/jrburke/requirejs/issues/187
1915
+ //read https://github.com/requirejs/requirejs/issues/187
1913
1916
  //if we can NOT find [native code] then it must NOT natively supported.
1914
1917
  //in IE8, node.attachEvent does not have toString()
1915
1918
  //Note the test for "[native code" with no closing brace, see:
1916
- //https://github.com/jrburke/requirejs/issues/273
1919
+ //https://github.com/requirejs/requirejs/issues/273
1917
1920
  !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) &&
1918
1921
  !isOpera) {
1919
1922
  //Probably IE. IE (at least 6-8) do not fire
@@ -1941,6 +1944,12 @@ var requirejs, require, define;
1941
1944
  }
1942
1945
  node.src = url;
1943
1946
 
1947
+ //Calling onNodeCreated after all properties on the node have been
1948
+ //set, but before it is placed in the DOM.
1949
+ if (config.onNodeCreated) {
1950
+ config.onNodeCreated(node, config, moduleName, url);
1951
+ }
1952
+
1944
1953
  //For some cache cases in IE 6-8, the script executes before the end
1945
1954
  //of the appendChild execution, so to tie an anonymous define
1946
1955
  //call to the module name (which is stored on the node), hold on
@@ -1962,6 +1971,11 @@ var requirejs, require, define;
1962
1971
  //are in play, the expectation is that a build has been done so
1963
1972
  //that only one script needs to be loaded anyway. This may need
1964
1973
  //to be reevaluated if other use cases become common.
1974
+
1975
+ // Post a task to the event loop to work around a bug in WebKit
1976
+ // where the worker gets garbage-collected after calling
1977
+ // importScripts(): https://webkit.org/b/153317
1978
+ setTimeout(function() {}, 0);
1965
1979
  importScripts(url);
1966
1980
 
1967
1981
  //Account for anonymous modules
@@ -2007,8 +2021,10 @@ var requirejs, require, define;
2007
2021
  //Preserve dataMain in case it is a path (i.e. contains '?')
2008
2022
  mainScript = dataMain;
2009
2023
 
2010
- //Set final baseUrl if there is not already an explicit one.
2011
- if (!cfg.baseUrl) {
2024
+ //Set final baseUrl if there is not already an explicit one,
2025
+ //but only do so if the data-main value is not a loader plugin
2026
+ //module ID.
2027
+ if (!cfg.baseUrl && mainScript.indexOf('!') === -1) {
2012
2028
  //Pull off the directory of data-main for use as the
2013
2029
  //baseUrl.
2014
2030
  src = mainScript.split('/');
@@ -2069,7 +2085,7 @@ var requirejs, require, define;
2069
2085
  if (callback.length) {
2070
2086
  callback
2071
2087
  .toString()
2072
- .replace(commentRegExp, '')
2088
+ .replace(commentRegExp, commentReplace)
2073
2089
  .replace(cjsRequireRegExp, function (match, dep) {
2074
2090
  deps.push(dep);
2075
2091
  });
@@ -2126,4 +2142,4 @@ var requirejs, require, define;
2126
2142
 
2127
2143
  //Set up with config info.
2128
2144
  req(cfg);
2129
- }(this));
2145
+ }(this, (typeof setTimeout === 'undefined' ? undefined : setTimeout)));