index.js 5.5 KB

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