##// END OF EJS Templates
Beginning work on notebook duplication.
Brian Granger -
Show More
@@ -604,6 +604,25 b' class NotebookHandler(AuthenticatedHandler):'
604 self.set_status(204)
604 self.set_status(204)
605 self.finish()
605 self.finish()
606
606
607
608 class NotebookCopyHandler(AuthenticatedHandler):
609
610 @web.authenticated
611 def get(self, notebook_id):
612 nbm = self.application.notebook_manager
613 project = nbm.notebook_dir
614 notebook_id = nbm.copy_notebook(notebook_id)
615 self.render(
616 'notebook.html', project=project,
617 notebook_id=notebook_id,
618 base_project_url=u'/', base_kernel_url=u'/',
619 kill_kernel=False,
620 read_only=False,
621 logged_in=self.logged_in,
622 login_available=self.login_available,
623 mathjax_url=self.application.ipython_app.mathjax_url,
624 )
625
607 #-----------------------------------------------------------------------------
626 #-----------------------------------------------------------------------------
608 # RST web service handlers
627 # RST web service handlers
609 #-----------------------------------------------------------------------------
628 #-----------------------------------------------------------------------------
@@ -48,8 +48,8 b' from .kernelmanager import MappingKernelManager'
48 from .handlers import (LoginHandler, LogoutHandler,
48 from .handlers import (LoginHandler, LogoutHandler,
49 ProjectDashboardHandler, NewHandler, NamedNotebookHandler,
49 ProjectDashboardHandler, NewHandler, NamedNotebookHandler,
50 MainKernelHandler, KernelHandler, KernelActionHandler, IOPubHandler,
50 MainKernelHandler, KernelHandler, KernelActionHandler, IOPubHandler,
51 ShellHandler, NotebookRootHandler, NotebookHandler, RSTHandler,
51 ShellHandler, NotebookRootHandler, NotebookHandler, NotebookCopyHandler,
52 AuthenticatedFileHandler,
52 RSTHandler, AuthenticatedFileHandler
53 )
53 )
54 from .notebookmanager import NotebookManager
54 from .notebookmanager import NotebookManager
55
55
@@ -97,6 +97,7 b' class NotebookWebApplication(web.Application):'
97 (r"/logout", LogoutHandler),
97 (r"/logout", LogoutHandler),
98 (r"/new", NewHandler),
98 (r"/new", NewHandler),
99 (r"/%s" % _notebook_id_regex, NamedNotebookHandler),
99 (r"/%s" % _notebook_id_regex, NamedNotebookHandler),
100 (r"/%s/copy" % _notebook_id_regex, NotebookCopyHandler),
100 (r"/kernels", MainKernelHandler),
101 (r"/kernels", MainKernelHandler),
101 (r"/kernels/%s" % _kernel_id_regex, KernelHandler),
102 (r"/kernels/%s" % _kernel_id_regex, KernelHandler),
102 (r"/kernels/%s/%s" % (_kernel_id_regex, _kernel_action_regex), KernelActionHandler),
103 (r"/kernels/%s/%s" % (_kernel_id_regex, _kernel_action_regex), KernelActionHandler),
@@ -253,3 +253,11 b' class NotebookManager(LoggingConfigurable):'
253 current.write(nb, f, u'json')
253 current.write(nb, f, u'json')
254 return notebook_id
254 return notebook_id
255
255
256 def copy_notebook(self, notebook_id):
257 """Create a new notebook and returns its notebook_id."""
258 last_mod, nb = self.get_notebook_object(notebook_id)
259 name = nb.metadata.name + '-Copy'
260 nb.metadata.name = name
261 notebook_id = self.new_notebook_id(name)
262 self.save_notebook_object(notebook_id, nb)
263 return notebook_id
@@ -55,6 +55,11 b' var IPython = (function (IPython) {'
55 this.element.find('#rename_notebook').click(function () {
55 this.element.find('#rename_notebook').click(function () {
56 IPython.save_widget.rename_notebook();
56 IPython.save_widget.rename_notebook();
57 });
57 });
58 this.element.find('#copy_notebook').click(function () {
59 var notebook_id = IPython.save_widget.get_notebook_id();
60 var url = $('body').data('baseProjectUrl') + notebook_id + '/copy';
61 window.open(url,'_newtab');
62 });
58 this.element.find('#save_notebook').click(function () {
63 this.element.find('#save_notebook').click(function () {
59 IPython.save_widget.save_notebook();
64 IPython.save_widget.save_notebook();
60 });
65 });
@@ -88,7 +88,6 b' var IPython = (function (IPython) {'
88 });
88 });
89 }
89 }
90
90
91
92 SaveWidget.prototype.notebook_saved = function () {
91 SaveWidget.prototype.notebook_saved = function () {
93 this.set_document_title();
92 this.set_document_title();
94 this.last_saved_name = this.get_notebook_name();
93 this.last_saved_name = this.get_notebook_name();
@@ -69,6 +69,7 b''
69 <li id="open_notebook"><span class="wijmo-wijmenu-text">Open...</span></li>
69 <li id="open_notebook"><span class="wijmo-wijmenu-text">Open...</span></li>
70 <li></li>
70 <li></li>
71 <li id="rename_notebook"><span class="wijmo-wijmenu-text">Rename...</span></li>
71 <li id="rename_notebook"><span class="wijmo-wijmenu-text">Rename...</span></li>
72 <li id="copy_notebook"><span class="wijmo-wijmenu-text">Make a Copy...</span></li>
72 <li id="save_notebook">
73 <li id="save_notebook">
73 <div>
74 <div>
74 <span class="wijmo-wijmenu-text">Save</span>
75 <span class="wijmo-wijmenu-text">Save</span>
General Comments 0
You need to be logged in to leave comments. Login now