From 18edcd3fb433c03b637f4eb487887378e8e11607 Mon Sep 17 00:00:00 2001 From: Jonathan Frederic Date: Mon, 8 Feb 2016 12:07:39 -0800 Subject: [PATCH] Allow old style imports, but deprecate them --- .gitignore | 1 + notebook/static/deprecated-imports.js | 79 +++++++++++++++++++++++++++ notebook/static/index.js | 69 +++++++++++++++++++++++ notebook/templates/page.html | 73 +++++++++++++++++++++++++ webpack.config.js | 11 +++- 5 files changed, 232 insertions(+), 1 deletion(-) create mode 100644 notebook/static/deprecated-imports.js create mode 100644 notebook/static/index.js diff --git a/.gitignore b/.gitignore index 0b5d0f78a..171313f0b 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ notebook/static/components notebook/static/style/*.min.css* notebook/static/*/js/built/ notebook/static/*/built/ +notebook/static/built/ node_modules *.py[co] __pycache__ diff --git a/notebook/static/deprecated-imports.js b/notebook/static/deprecated-imports.js new file mode 100644 index 000000000..e7da5df80 --- /dev/null +++ b/notebook/static/deprecated-imports.js @@ -0,0 +1,79 @@ +// Copyright (c) Jupyter Development Team. +// Distributed under the terms of the Modified BSD License. + +// TODO: Remove me in notebook version 6.0 + +[ + 'edit/js/savewidget', + 'edit/js/main', + 'edit/js/menubar', + 'edit/js/editor', + 'edit/js/notificationarea', + 'base/js/keyboard', + 'base/js/dialog', + 'base/js/notificationwidget', + 'base/js/namespace', + 'base/js/utils', + 'base/js/notificationarea', + 'base/js/events', + 'base/js/security', + 'base/js/page', + 'auth/js/main', + 'auth/js/logoutmain', + 'auth/js/loginmain', + 'auth/js/loginwidget', + 'terminal/js/main', + 'terminal/js/terminado', + 'notebook/js/toolbar', + 'notebook/js/savewidget', + 'notebook/js/main', + 'notebook/js/completer', + 'notebook/js/contexthint', + 'notebook/js/textcell', + 'notebook/js/cell', + 'notebook/js/tour', + 'notebook/js/menubar', + 'notebook/js/mathjaxutils', + 'notebook/js/codecell', + 'notebook/js/codemirror-ipython', + 'notebook/js/kernelselector', + 'notebook/js/codemirror-ipythongfm', + 'notebook/js/celltoolbarpresets/example', + 'notebook/js/celltoolbarpresets/default', + 'notebook/js/celltoolbarpresets/slideshow', + 'notebook/js/celltoolbarpresets/rawcell', + 'notebook/js/tooltip', + 'notebook/js/maintoolbar', + 'notebook/js/about', + 'notebook/js/notificationarea', + 'notebook/js/quickhelp', + 'notebook/js/actions', + 'notebook/js/pager', + 'notebook/js/searchandreplace', + 'notebook/js/keyboardmanager', + 'notebook/js/notebook', + 'notebook/js/scrollmanager', + 'notebook/js/outputarea', + 'notebook/js/celltoolbar', + 'notebook/js/commandpalette', + 'tree/js/sessionlist', + 'tree/js/main', + 'tree/js/kernellist', + 'tree/js/newnotebook', + 'tree/js/terminallist', + 'tree/js/notebooklist', + 'services/sessions/session', + 'services/contents', + 'services/kernels/serialize', + 'services/kernels/comm', + 'services/kernels/kernel', + 'services/config' +].forEach(function (modulePath) { + define(modulePath, ['notebook'], function(notebookApp) { + console.warn(["Direct module require deprecated. Instead of using", + "`define(['" + modulePath + "'], function(module) {});`, use", + "`define(['notebook'], function(notebookApp) { var module = ", + "notebookApp['" + modulePath + "']});`"].join(' ')); + return notebookApp[modulePath]; + }); +}); \ No newline at end of file diff --git a/notebook/static/index.js b/notebook/static/index.js new file mode 100644 index 000000000..c59d3ecd6 --- /dev/null +++ b/notebook/static/index.js @@ -0,0 +1,69 @@ +// Copyright (c) Jupyter Development Team. +// Distributed under the terms of the Modified BSD License. + +module.exports = { + 'edit/js/savewidget': require('./edit/js/savewidget.js'), + 'edit/js/main': require('./edit/js/main.js'), + 'edit/js/menubar': require('./edit/js/menubar.js'), + 'edit/js/editor': require('./edit/js/editor.js'), + 'edit/js/notificationarea': require('./edit/js/notificationarea.js'), + 'base/js/keyboard': require('./base/js/keyboard.js'), + 'base/js/dialog': require('./base/js/dialog.js'), + 'base/js/notificationwidget': require('./base/js/notificationwidget.js'), + 'base/js/namespace': require('./base/js/namespace.js'), + 'base/js/utils': require('./base/js/utils.js'), + 'base/js/notificationarea': require('./base/js/notificationarea.js'), + 'base/js/events': require('./base/js/events.js'), + 'base/js/security': require('./base/js/security.js'), + 'base/js/page': require('./base/js/page.js'), + 'auth/js/main': require('./auth/js/main.js'), + 'auth/js/logoutmain': require('./auth/js/logoutmain.js'), + 'auth/js/loginmain': require('./auth/js/loginmain.js'), + 'auth/js/loginwidget': require('./auth/js/loginwidget.js'), + 'terminal/js/main': require('./terminal/js/main.js'), + 'terminal/js/terminado': require('./terminal/js/terminado.js'), + 'notebook/js/toolbar': require('./notebook/js/toolbar.js'), + 'notebook/js/savewidget': require('./notebook/js/savewidget.js'), + 'notebook/js/main': require('./notebook/js/main.js'), + 'notebook/js/completer': require('./notebook/js/completer.js'), + 'notebook/js/contexthint': require('./notebook/js/contexthint.js'), + 'notebook/js/textcell': require('./notebook/js/textcell.js'), + 'notebook/js/cell': require('./notebook/js/cell.js'), + 'notebook/js/tour': require('./notebook/js/tour.js'), + 'notebook/js/menubar': require('./notebook/js/menubar.js'), + 'notebook/js/mathjaxutils': require('./notebook/js/mathjaxutils.js'), + 'notebook/js/codecell': require('./notebook/js/codecell.js'), + 'notebook/js/codemirror-ipython': require('./notebook/js/codemirror-ipython.js'), + 'notebook/js/kernelselector': require('./notebook/js/kernelselector.js'), + 'notebook/js/codemirror-ipythongfm': require('./notebook/js/codemirror-ipythongfm.js'), + 'notebook/js/celltoolbarpresets/example': require('./notebook/js/celltoolbarpresets/example.js'), + 'notebook/js/celltoolbarpresets/default': require('./notebook/js/celltoolbarpresets/default.js'), + 'notebook/js/celltoolbarpresets/slideshow': require('./notebook/js/celltoolbarpresets/slideshow.js'), + 'notebook/js/celltoolbarpresets/rawcell': require('./notebook/js/celltoolbarpresets/rawcell.js'), + 'notebook/js/tooltip': require('./notebook/js/tooltip.js'), + 'notebook/js/maintoolbar': require('./notebook/js/maintoolbar.js'), + 'notebook/js/about': require('./notebook/js/about.js'), + 'notebook/js/notificationarea': require('./notebook/js/notificationarea.js'), + 'notebook/js/quickhelp': require('./notebook/js/quickhelp.js'), + 'notebook/js/actions': require('./notebook/js/actions.js'), + 'notebook/js/pager': require('./notebook/js/pager.js'), + 'notebook/js/searchandreplace': require('./notebook/js/searchandreplace.js'), + 'notebook/js/keyboardmanager': require('./notebook/js/keyboardmanager.js'), + 'notebook/js/notebook': require('./notebook/js/notebook.js'), + 'notebook/js/scrollmanager': require('./notebook/js/scrollmanager.js'), + 'notebook/js/outputarea': require('./notebook/js/outputarea.js'), + 'notebook/js/celltoolbar': require('./notebook/js/celltoolbar.js'), + 'notebook/js/commandpalette': require('./notebook/js/commandpalette.js'), + 'tree/js/sessionlist': require('./tree/js/sessionlist.js'), + 'tree/js/main': require('./tree/js/main.js'), + 'tree/js/kernellist': require('./tree/js/kernellist.js'), + 'tree/js/newnotebook': require('./tree/js/newnotebook.js'), + 'tree/js/terminallist': require('./tree/js/terminallist.js'), + 'tree/js/notebooklist': require('./tree/js/notebooklist.js'), + 'services/sessions/session': require('./services/sessions/session.js'), + 'services/contents': require('./services/contents.js'), + 'services/kernels/serialize': require('./services/kernels/serialize.js'), + 'services/kernels/comm': require('./services/kernels/comm.js'), + 'services/kernels/kernel': require('./services/kernels/kernel.js'), + 'services/config': require('./services/config.js'), +}; \ No newline at end of file diff --git a/notebook/templates/page.html b/notebook/templates/page.html index dd5d39251..ab2a09591 100644 --- a/notebook/templates/page.html +++ b/notebook/templates/page.html @@ -40,6 +40,9 @@ codemirror: 'components/codemirror', termjs: 'components/term.js/src/term', + // Define aliases for requirejs webpack imports + notebook: 'built/index', + // Anything jQuery related is loaded globally because it will // pollute the global object regardless and we want to avoid one // jQuery thinger from clompering another. @@ -47,6 +50,7 @@ bootstrap: 'base/js/jquery', bootstraptour: 'base/js/tour', 'jquery-ui': 'base/js/jquery', + jqueryui: 'base/js/jquery', typeahead: 'base/js/typeahead' }, map: { // for backward compatibility @@ -80,6 +84,75 @@ } }, waitSeconds: 30, + // TODO: Remove me in notebook version 6.0 + bundles: { + 'deprecated-imports': [ + 'edit/js/savewidget', + 'edit/js/main', + 'edit/js/menubar', + 'edit/js/editor', + 'edit/js/notificationarea', + 'base/js/keyboard', + 'base/js/dialog', + 'base/js/notificationwidget', + 'base/js/namespace', + 'base/js/utils', + 'base/js/notificationarea', + 'base/js/events', + 'base/js/security', + 'base/js/page', + 'auth/js/main', + 'auth/js/logoutmain', + 'auth/js/loginmain', + 'auth/js/loginwidget', + 'terminal/js/main', + 'terminal/js/terminado', + 'notebook/js/toolbar', + 'notebook/js/savewidget', + 'notebook/js/main', + 'notebook/js/completer', + 'notebook/js/contexthint', + 'notebook/js/textcell', + 'notebook/js/cell', + 'notebook/js/tour', + 'notebook/js/menubar', + 'notebook/js/mathjaxutils', + 'notebook/js/codecell', + 'notebook/js/codemirror-ipython', + 'notebook/js/kernelselector', + 'notebook/js/codemirror-ipythongfm', + 'notebook/js/celltoolbarpresets/example', + 'notebook/js/celltoolbarpresets/default', + 'notebook/js/celltoolbarpresets/slideshow', + 'notebook/js/celltoolbarpresets/rawcell', + 'notebook/js/tooltip', + 'notebook/js/maintoolbar', + 'notebook/js/about', + 'notebook/js/notificationarea', + 'notebook/js/quickhelp', + 'notebook/js/actions', + 'notebook/js/pager', + 'notebook/js/searchandreplace', + 'notebook/js/keyboardmanager', + 'notebook/js/notebook', + 'notebook/js/scrollmanager', + 'notebook/js/outputarea', + 'notebook/js/celltoolbar', + 'notebook/js/commandpalette', + 'tree/js/sessionlist', + 'tree/js/main', + 'tree/js/kernellist', + 'tree/js/newnotebook', + 'tree/js/terminallist', + 'tree/js/notebooklist', + 'services/sessions/session', + 'services/contents', + 'services/kernels/serialize', + 'services/kernels/comm', + 'services/kernels/kernel', + 'services/config' + ] + } }); require.config({ diff --git a/webpack.config.js b/webpack.config.js index 39bf4a91e..f2917de79 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -61,5 +61,14 @@ module.exports = [ path: './notebook/static/services/built', libraryTarget: 'amd' }, - }) + }), + _.extend({}, commonConfig, { + entry: './notebook/static/index.js', + output: { + filename: 'index.js', + path: './notebook/static/built', + libraryTarget: 'amd', + publicPath: "/static/built/" + }, + }), ].map(x => buildConfig(x));