index.js 5.4 KB

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