-
Notifications
You must be signed in to change notification settings - Fork 0
/
nobleModulesInIE.js
38 lines (31 loc) · 1.44 KB
/
nobleModulesInIE.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// Copyright © 2011 Barnesandnoble.com llc
// Released under the MIT License (see MIT-LICENSE.txt).
// NOTE: requires jQuery; we didn't want to implement XHR and promises ourselves.
(function () {
// We detect IE by the presence of onreadystatechange on script, assuming that if IE ever removes this,
// they will start using the load/error events the same way as everyone else.
var isIE = document.createElement("script").onreadystatechange === null;
if (!isIE) {
return;
}
if (!module.constructor.prototype.load) {
throw new Error("The Modules/2.0 implementation in use does not support module provider plug-ins.");
}
var loadPromises = {};
// Override load to use jQuery's XHR to grab the script, then eval() it.
module.constructor.prototype.load = function (moduleIdentifier, onModuleLoaded) {
var id = require.id(moduleIdentifier);
var uri = require.uri(id);
// Only do the loading once, but store a promise so that future calls to module.load execute the module.declare
// (as per the spec) and get their callbacks called.
if (!Object.prototype.hasOwnProperty.call(loadPromises, id)) {
loadPromises[id] = jQuery.ajax({ url: uri, dataType: "text" });
}
loadPromises[id]
.success(function (data) {
eval(data);
onModuleLoaded();
})
.error(onModuleLoaded);
};
}());