Show More
@@ -81,19 +81,6 b' class NamedNotebookHandler(IPythonHandler):' | |||||
81 | self.finish(jsonapi.dumps({"name": notebook_name})) |
|
81 | self.finish(jsonapi.dumps({"name": notebook_name})) | |
82 |
|
82 | |||
83 |
|
83 | |||
84 | class NotebookCopyHandler(IPythonHandler): |
|
|||
85 |
|
||||
86 | @web.authenticated |
|
|||
87 | def get(self, notebook_path=None): |
|
|||
88 | nbm = self.notebook_manager |
|
|||
89 | name, path = nbm.named_notebook_path(notebook_path) |
|
|||
90 | notebook_name = self.notebook_manager.copy_notebook(name, path) |
|
|||
91 | if path==None: |
|
|||
92 | self.redirect(url_path_join(self.base_project_url, "notebooks", notebook_name)) |
|
|||
93 | else: |
|
|||
94 | self.redirect(url_path_join(self.base_project_url, "notebooks", path, notebook_name)) |
|
|||
95 |
|
||||
96 |
|
||||
97 | #----------------------------------------------------------------------------- |
|
84 | #----------------------------------------------------------------------------- | |
98 | # URL to handler mappings |
|
85 | # URL to handler mappings | |
99 | #----------------------------------------------------------------------------- |
|
86 | #----------------------------------------------------------------------------- | |
@@ -102,7 +89,6 b' class NotebookCopyHandler(IPythonHandler):' | |||||
102 | _notebook_path_regex = r"(?P<notebook_path>.+)" |
|
89 | _notebook_path_regex = r"(?P<notebook_path>.+)" | |
103 |
|
90 | |||
104 | default_handlers = [ |
|
91 | default_handlers = [ | |
105 | (r"/notebooks/%s/copy" % _notebook_path_regex, NotebookCopyHandler), |
|
|||
106 | (r"/notebooks/%s" % _notebook_path_regex, NamedNotebookHandler), |
|
92 | (r"/notebooks/%s" % _notebook_path_regex, NamedNotebookHandler), | |
107 | (r"/notebooks/", NotebookHandler) |
|
93 | (r"/notebooks/", NotebookHandler) | |
108 | ] |
|
94 | ] |
@@ -96,20 +96,25 b' class FileNotebookManager(NotebookManager):' | |||||
96 | def change_notebook(self, data, notebook_name, notebook_path=None): |
|
96 | def change_notebook(self, data, notebook_name, notebook_path=None): | |
97 | """Changes notebook""" |
|
97 | """Changes notebook""" | |
98 | changes = data.keys() |
|
98 | changes = data.keys() | |
|
99 | response = 200 | |||
99 | for change in changes: |
|
100 | for change in changes: | |
100 | full_path = self.get_path(notebook_name, notebook_path) |
|
101 | full_path = self.get_path(notebook_name, notebook_path) | |
101 |
if change == " |
|
102 | if change == "name": | |
102 | os.rename(full_path, |
|
103 | new_path = self.get_path(data['name'], notebook_path) | |
103 | self.get_path(data['notebook_name'], notebook_path)) |
|
104 | if os.path.isfile(new_path) == False: | |
104 | notebook_name = data['notebook_name'] |
|
105 | os.rename(full_path, | |
105 | if change == "notebook_path": |
|
106 | self.get_path(data['name'], notebook_path)) | |
106 | new_path = self.get_path(data['notebook_name'], data['notebook_path']) |
|
107 | notebook_name = data['name'] | |
|
108 | else: | |||
|
109 | response = 409 | |||
|
110 | if change == "path": | |||
|
111 | new_path = self.get_path(data['name'], data['path']) | |||
107 | stutil.move(full_path, new_path) |
|
112 | stutil.move(full_path, new_path) | |
108 |
notebook_path = data[' |
|
113 | notebook_path = data['path'] | |
109 | if change == "content": |
|
114 | if change == "content": | |
110 | self.save_notebook(data, notebook_name, notebook_path) |
|
115 | self.save_notebook(data, notebook_name, notebook_path) | |
111 | model = self.notebook_model(notebook_name, notebook_path) |
|
116 | model = self.notebook_model(notebook_name, notebook_path) | |
112 | return model |
|
117 | return model, response | |
113 |
|
118 | |||
114 | def notebook_exists(self, notebook_path): |
|
119 | def notebook_exists(self, notebook_path): | |
115 | """Does a notebook exist?""" |
|
120 | """Does a notebook exist?""" |
@@ -90,7 +90,8 b' class NotebookHandler(IPythonHandler):' | |||||
90 | nbm = self.notebook_manager |
|
90 | nbm = self.notebook_manager | |
91 | notebook_name, notebook_path = nbm.named_notebook_path(notebook_path) |
|
91 | notebook_name, notebook_path = nbm.named_notebook_path(notebook_path) | |
92 | data = jsonapi.loads(self.request.body) |
|
92 | data = jsonapi.loads(self.request.body) | |
93 | model = nbm.change_notebook(data, notebook_name, notebook_path) |
|
93 | model, response = nbm.change_notebook(data, notebook_name, notebook_path) | |
|
94 | self.set_status(response) | |||
94 | self.finish(jsonapi.dumps(model)) |
|
95 | self.finish(jsonapi.dumps(model)) | |
95 |
|
96 | |||
96 | @web.authenticated |
|
97 | @web.authenticated |
@@ -1789,7 +1789,8 b' var IPython = (function (IPython) {' | |||||
1789 | data : JSON.stringify(name), |
|
1789 | data : JSON.stringify(name), | |
1790 | dataType: "json", |
|
1790 | dataType: "json", | |
1791 | headers : {'Content-Type': 'application/json'}, |
|
1791 | headers : {'Content-Type': 'application/json'}, | |
1792 | success : $.proxy(that.rename_success, this) |
|
1792 | success : $.proxy(that.rename_success, this), | |
|
1793 | error : $.proxy(that.rename_error, this) | |||
1793 | }; |
|
1794 | }; | |
1794 | $([IPython.events]).trigger('notebook_rename.Notebook'); |
|
1795 | $([IPython.events]).trigger('notebook_rename.Notebook'); | |
1795 | var url = this.baseProjectUrl() + 'api/notebooks/' + this.notebookPath()+ this.notebook_name; |
|
1796 | var url = this.baseProjectUrl() + 'api/notebooks/' + this.notebookPath()+ this.notebook_name; | |
@@ -1803,7 +1804,37 b' var IPython = (function (IPython) {' | |||||
1803 | this.session.notebook_rename(notebook_path); |
|
1804 | this.session.notebook_rename(notebook_path); | |
1804 | $([IPython.events]).trigger('notebook_renamed.Notebook'); |
|
1805 | $([IPython.events]).trigger('notebook_renamed.Notebook'); | |
1805 | } |
|
1806 | } | |
1806 |
|
1807 | |||
|
1808 | Notebook.prototype.rename_error = function (json, status, xhr) { | |||
|
1809 | var that = this; | |||
|
1810 | var dialog = $('<div/>').append( | |||
|
1811 | $("<p/>").addClass("rename-message") | |||
|
1812 | .html('This notebook name already exists.') | |||
|
1813 | ) | |||
|
1814 | IPython.dialog.modal({ | |||
|
1815 | title: "Notebook Rename Error!", | |||
|
1816 | body: dialog, | |||
|
1817 | buttons : { | |||
|
1818 | "Cancel": {}, | |||
|
1819 | "OK": { | |||
|
1820 | class: "btn-primary", | |||
|
1821 | click: function () { | |||
|
1822 | IPython.save_widget.rename_notebook(); | |||
|
1823 | }} | |||
|
1824 | }, | |||
|
1825 | open : function (event, ui) { | |||
|
1826 | var that = $(this); | |||
|
1827 | // Upon ENTER, click the OK button. | |||
|
1828 | that.find('input[type="text"]').keydown(function (event, ui) { | |||
|
1829 | if (event.which === utils.keycodes.ENTER) { | |||
|
1830 | that.find('.btn-primary').first().click(); | |||
|
1831 | } | |||
|
1832 | }); | |||
|
1833 | that.find('input[type="text"]').focus(); | |||
|
1834 | } | |||
|
1835 | }); | |||
|
1836 | } | |||
|
1837 | ||||
1807 | /** |
|
1838 | /** | |
1808 | * Request a notebook's data from the server. |
|
1839 | * Request a notebook's data from the server. | |
1809 | * |
|
1840 | * |
@@ -129,7 +129,7 b' var IPython = (function (IPython) {' | |||||
129 | var nbname = IPython.notebook.notebook_name; |
|
129 | var nbname = IPython.notebook.notebook_name; | |
130 | var path = IPython.notebook.notebookPath(); |
|
130 | var path = IPython.notebook.notebookPath(); | |
131 | var state = {"path": path+nbname} |
|
131 | var state = {"path": path+nbname} | |
132 |
window.history. |
|
132 | window.history.replaceState(state, "", "/notebooks/" + path+nbname); | |
133 | } |
|
133 | } | |
134 |
|
134 | |||
135 |
|
135 |
@@ -75,16 +75,6 b' class ProjectRedirectHandler(IPythonHandler):' | |||||
75 | url = self.base_project_url + 'tree' |
|
75 | url = self.base_project_url + 'tree' | |
76 | self.redirect(url) |
|
76 | self.redirect(url) | |
77 |
|
77 | |||
78 | class NewFolderHandler(IPythonHandler): |
|
|||
79 |
|
||||
80 | @web.authenticated |
|
|||
81 | def get(self, notebook_path): |
|
|||
82 | nbm = self.notebook_manager |
|
|||
83 | name, path = nbm.named_notebook_path(notebook_path) |
|
|||
84 | nbm.add_new_folder(path) |
|
|||
85 | url = self.base_project_url + 'tree/' + notebook_path |
|
|||
86 | self.redirect(url) |
|
|||
87 |
|
||||
88 |
|
78 | |||
89 | #----------------------------------------------------------------------------- |
|
79 | #----------------------------------------------------------------------------- | |
90 | # URL to handler mappings |
|
80 | # URL to handler mappings | |
@@ -94,7 +84,6 b' class NewFolderHandler(IPythonHandler):' | |||||
94 | _notebook_path_regex = r"(?P<notebook_path>.+)" |
|
84 | _notebook_path_regex = r"(?P<notebook_path>.+)" | |
95 |
|
85 | |||
96 | default_handlers = [ |
|
86 | default_handlers = [ | |
97 | (r"/tree/%s/-new" %_notebook_path_regex, NewFolderHandler), |
|
|||
98 | (r"/tree/%s/" % _notebook_path_regex, TreePathRedirectHandler), |
|
87 | (r"/tree/%s/" % _notebook_path_regex, TreePathRedirectHandler), | |
99 | (r"/tree/%s" % _notebook_path_regex, ProjectPathDashboardHandler), |
|
88 | (r"/tree/%s" % _notebook_path_regex, ProjectPathDashboardHandler), | |
100 | (r"/tree", ProjectDashboardHandler), |
|
89 | (r"/tree", ProjectDashboardHandler), |
General Comments 0
You need to be logged in to leave comments.
Login now