|
4 | 4 | import * as libembed from './libembed';
|
5 | 5 |
|
6 | 6 | let cdn = 'https://unpkg.com/';
|
| 7 | +let onlyCDN = false; |
7 | 8 |
|
8 | 9 | // find the data-cdn for any script tag, assuming it is only used for embed-amd.js
|
9 | 10 | const scripts = document.getElementsByTagName('script');
|
10 | 11 | Array.prototype.forEach.call(scripts, (script: HTMLScriptElement) => {
|
11 | 12 | cdn = script.getAttribute('data-jupyter-widgets-cdn') || cdn;
|
| 13 | + onlyCDN = |
| 14 | + onlyCDN || script.hasAttribute('data-jupyter-widgets-cdn-only'); |
12 | 15 | });
|
13 | 16 |
|
14 | 17 | /**
|
@@ -62,22 +65,28 @@ export function requireLoader(
|
62 | 65 | moduleName: string,
|
63 | 66 | moduleVersion: string
|
64 | 67 | ): Promise<any> {
|
| 68 | + const require = (window as any).requirejs; |
| 69 | + if (require === undefined) { |
| 70 | + throw new Error( |
| 71 | + 'Requirejs is needed, please ensure it is loaded on the page.' |
| 72 | + ); |
| 73 | + } |
| 74 | + function loadFromCDN(): Promise<any> { |
| 75 | + const conf: { paths: { [key: string]: string } } = { paths: {} }; |
| 76 | + conf.paths[moduleName] = moduleNameToCDNUrl(moduleName, moduleVersion); |
| 77 | + require.config(conf); |
| 78 | + return requirePromise([`${moduleName}`]); |
| 79 | + } |
| 80 | + if (onlyCDN) { |
| 81 | + console.log(`Loading from ${cdn} for ${moduleName}@${moduleVersion}`); |
| 82 | + return loadFromCDN(); |
| 83 | + } |
65 | 84 | return requirePromise([`${moduleName}`]).catch(err => {
|
66 | 85 | const failedId = err.requireModules && err.requireModules[0];
|
67 | 86 | if (failedId) {
|
68 |
| - console.log(`Falling back to ${cdn} for ${moduleName}@${moduleVersion}`); |
69 |
| - const require = (window as any).requirejs; |
70 |
| - if (require === undefined) { |
71 |
| - throw new Error( |
72 |
| - 'Requirejs is needed, please ensure it is loaded on the page.' |
73 |
| - ); |
74 |
| - } |
75 |
| - const conf: { paths: { [key: string]: string } } = { paths: {} }; |
76 |
| - conf.paths[moduleName] = moduleNameToCDNUrl(moduleName, moduleVersion); |
77 | 87 | require.undef(failedId);
|
78 |
| - require.config(conf); |
79 |
| - |
80 |
| - return requirePromise([`${moduleName}`]); |
| 88 | + console.log(`Falling back to ${cdn} for ${moduleName}@${moduleVersion}`); |
| 89 | + loadFromCDN(); |
81 | 90 | }
|
82 | 91 | });
|
83 | 92 | }
|
|
0 commit comments