-
Notifications
You must be signed in to change notification settings - Fork 504
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #282 from SylvainCorlay/drop-html-loader
Drop HTML manager
- Loading branch information
Showing
4 changed files
with
71 additions
and
44 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
let cdn = 'https://unpkg.com/'; | ||
|
||
/** | ||
* Load a package using requirejs and return a promise | ||
* | ||
* @param pkg Package name or names to load | ||
*/ | ||
let requirePromise = function(pkg) { | ||
return new Promise((resolve, reject) => { | ||
let require =window.requirejs; | ||
if (require === undefined) { | ||
reject("Requirejs is needed, please ensure it is loaded on the page."); | ||
} else { | ||
require(pkg, resolve, reject); | ||
} | ||
}); | ||
} | ||
|
||
function moduleNameToCDNUrl(moduleName, moduleVersion) { | ||
let packageName = moduleName; | ||
let fileName = 'index'; // default filename | ||
// if a '/' is present, like 'foo/bar', packageName is changed to 'foo', and path to 'bar' | ||
// We first find the first '/' | ||
let index = moduleName.indexOf('/'); | ||
if ((index != -1) && (moduleName[0] == '@')) { | ||
// if we have a namespace, it's a different story | ||
// @foo/bar/baz should translate to @foo/bar and baz | ||
// so we find the 2nd '/' | ||
index = moduleName.indexOf('/', index+1); | ||
} | ||
if (index != -1) { | ||
fileName = moduleName.substr(index+1); | ||
packageName = moduleName.substr(0, index); | ||
} | ||
return `${cdn}${packageName}@${moduleVersion}/dist/${fileName}`; | ||
} | ||
|
||
/** | ||
* Load an amd module locally and fall back to specified CDN if unavailable. | ||
* | ||
* @param moduleName The name of the module to load.. | ||
* @param version The semver range for the module, if loaded from a CDN. | ||
* | ||
* By default, the CDN service used is unpkg.com. However, this default can be | ||
* overriden by specifying another URL via the HTML attribute | ||
* "data-jupyter-widgets-cdn" on a script tag of the page. | ||
* | ||
* The semver range is only used with the CDN. | ||
*/ | ||
export | ||
function requireLoader(moduleName, moduleVersion) { | ||
return requirePromise([`${moduleName}`]).catch((err) => { | ||
let failedId = err.requireModules && err.requireModules[0]; | ||
if (failedId) { | ||
console.log(`Falling back to ${cdn} for ${moduleName}@${moduleVersion}`); | ||
let require = window.requirejs; | ||
if (require === undefined) { | ||
throw new Error("Requirejs is needed, please ensure it is loaded on the page."); | ||
} | ||
const conf = {paths: {}}; | ||
conf.paths[moduleName] = moduleNameToCDNUrl(moduleName, moduleVersion); | ||
require.undef(failedId); | ||
require.config(conf); | ||
|
||
return requirePromise([`${moduleName}`]); | ||
} | ||
}); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters