index.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. /*-----------------------------------------------------------------------------
  2. | Copyright (c) Jupyter Development Team.
  3. | Distributed under the terms of the Modified BSD License.
  4. |----------------------------------------------------------------------------*/
  5. require('es6-promise/auto'); // polyfill Promise on IE
  6. import {
  7. PageConfig
  8. } from '@jupyterlab/coreutils';
  9. // eslint-disable-next-line no-undef
  10. __webpack_public_path__ = PageConfig.getOption('fullStaticUrl') + '/';
  11. // This must be after the public path is set.
  12. // This cannot be extracted because the public path is dynamic.
  13. require('./imports.css');
  14. /**
  15. * The main entry point for the application.
  16. */
  17. function main() {
  18. var JupyterLab = require('@jupyterlab/application').JupyterLab;
  19. // Get the disabled extensions.
  20. var disabled = { patterns: [], matches: [] };
  21. var disabledExtensions = [];
  22. try {
  23. var tempDisabled = PageConfig.getOption('disabledExtensions');
  24. if (tempDisabled) {
  25. disabledExtensions = JSON.parse(tempDisabled).map(function(pattern) {
  26. disabled.patterns.push(pattern);
  27. return { raw: pattern, rule: new RegExp(pattern) };
  28. });
  29. }
  30. } catch (error) {
  31. console.warn('Unable to parse disabled extensions.', error);
  32. }
  33. // Get the deferred extensions.
  34. var deferred = { patterns: [], matches: [] };
  35. var deferredExtensions = [];
  36. var ignorePlugins = [];
  37. try {
  38. var tempDeferred = PageConfig.getOption('deferredExtensions');
  39. if (tempDeferred) {
  40. deferredExtensions = JSON.parse(tempDeferred).map(function(pattern) {
  41. deferred.patterns.push(pattern);
  42. return { raw: pattern, rule: new RegExp(pattern) };
  43. });
  44. }
  45. } catch (error) {
  46. console.warn('Unable to parse deferred extensions.', error);
  47. }
  48. function isDeferred(value) {
  49. return deferredExtensions.some(function(pattern) {
  50. return pattern.raw === value || pattern.rule.test(value);
  51. });
  52. }
  53. function isDisabled(value) {
  54. return disabledExtensions.some(function(pattern) {
  55. return pattern.raw === value || pattern.rule.test(value);
  56. });
  57. }
  58. var register = [];
  59. // Handle the registered mime extensions.
  60. var mimeExtensions = [];
  61. var extension;
  62. var extMod;
  63. {{#each jupyterlab_mime_extensions}}
  64. try {
  65. if (isDeferred('{{key}}')) {
  66. deferred.matches.push('{{key}}');
  67. ignorePlugins.push('{{key}}');
  68. }
  69. if (isDisabled('{{@key}}')) {
  70. disabled.matches.push('{{@key}}');
  71. } else {
  72. extMod = require('{{@key}}/{{this}}');
  73. extension = extMod.default;
  74. // Handle CommonJS exports.
  75. if (!extMod.hasOwnProperty('__esModule')) {
  76. extension = extMod;
  77. }
  78. if (Array.isArray(extension)) {
  79. extension.forEach(function(plugin) {
  80. if (isDeferred(plugin.id)) {
  81. deferred.matches.push(plugin.id);
  82. ignorePlugins.push(plugin.id);
  83. }
  84. if (isDisabled(plugin.id)) {
  85. disabled.matches.push(plugin.id);
  86. return;
  87. }
  88. mimeExtensions.push(plugin);
  89. });
  90. } else {
  91. mimeExtensions.push(extension);
  92. }
  93. }
  94. } catch (e) {
  95. console.error(e);
  96. }
  97. {{/each}}
  98. // Handled the registered standard extensions.
  99. {{#each jupyterlab_extensions}}
  100. try {
  101. if (isDeferred('{{key}}')) {
  102. deferred.matches.push('{{key}}');
  103. ignorePlugins.push('{{key}}');
  104. }
  105. if (isDisabled('{{@key}}')) {
  106. disabled.matches.push('{{@key}}');
  107. } else {
  108. extMod = require('{{@key}}/{{this}}');
  109. extension = extMod.default;
  110. // Handle CommonJS exports.
  111. if (!extMod.hasOwnProperty('__esModule')) {
  112. extension = extMod;
  113. }
  114. if (Array.isArray(extension)) {
  115. extension.forEach(function(plugin) {
  116. if (isDeferred(plugin.id)) {
  117. deferred.matches.push(plugin.id);
  118. ignorePlugins.push(plugin.id);
  119. }
  120. if (isDisabled(plugin.id)) {
  121. disabled.matches.push(plugin.id);
  122. return;
  123. }
  124. register.push(plugin);
  125. });
  126. } else {
  127. register.push(extension);
  128. }
  129. }
  130. } catch (e) {
  131. console.error(e);
  132. }
  133. {{/each}}
  134. var lab = new JupyterLab({
  135. mimeExtensions: mimeExtensions,
  136. disabled: disabled,
  137. deferred: deferred
  138. });
  139. register.forEach(function(item) { lab.registerPluginModule(item); });
  140. lab.start({ ignorePlugins: ignorePlugins });
  141. // Expose global lab instance when in dev mode.
  142. if ((PageConfig.getOption('devMode') || '').toLowerCase() === 'true') {
  143. window.lab = lab;
  144. }
  145. // Handle a browser test.
  146. var browserTest = PageConfig.getOption('browserTest');
  147. if (browserTest.toLowerCase() === 'true') {
  148. var el = document.createElement('div');
  149. el.id = 'browserTest';
  150. document.body.appendChild(el);
  151. el.textContent = '[]';
  152. el.style.display = 'none';
  153. var errors = [];
  154. var reported = false;
  155. var timeout = 25000;
  156. var report = function() {
  157. if (reported) {
  158. return;
  159. }
  160. reported = true;
  161. el.className = 'completed';
  162. }
  163. window.onerror = function(msg, url, line, col, error) {
  164. errors.push(String(error));
  165. el.textContent = JSON.stringify(errors)
  166. };
  167. console.error = function(message) {
  168. errors.push(String(message));
  169. el.textContent = JSON.stringify(errors)
  170. };
  171. lab.restored
  172. .then(function() { report(errors); })
  173. .catch(function(reason) { report([`RestoreError: ${reason.message}`]); });
  174. // Handle failures to restore after the timeout has elapsed.
  175. window.setTimeout(function() { report(errors); }, timeout);
  176. }
  177. }
  178. window.addEventListener('load', main);