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, |
|
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