diff --git a/IPython/html/tree/handlers.py b/IPython/html/tree/handlers.py
index 63e7b9c..2fd67a6 100644
--- a/IPython/html/tree/handlers.py
+++ b/IPython/html/tree/handlers.py
@@ -18,6 +18,7 @@ Authors:
from tornado import web
from ..base.handlers import IPythonHandler
+from urllib import quote, unquote
#-----------------------------------------------------------------------------
# Handlers
@@ -31,12 +32,54 @@ class ProjectDashboardHandler(IPythonHandler):
self.write(self.render_template('tree.html',
project=self.project,
project_component=self.project.split('/'),
+ notebook_path= "''"
))
+class ProjectPathDashboardHandler(IPythonHandler):
+
+ @authenticate_unless_readonly
+ def get(self, notebook_path):
+ nbm = self.notebook_manager
+ name, path = nbm.named_notebook_path(notebook_path)
+ if name != None:
+ if path == None:
+ self.redirect(self.base_project_url + 'notebooks/' + quote(name))
+ else:
+ self.redirect(self.base_project_url + 'notebooks/' + path + quote(name))
+ else:
+ project = self.project + '/' + notebook_path
+ self.write(self.render_template('tree.html',
+ project=project,
+ project_component=project.split('/'),
+ notebook_path=path,
+ notebook_name=name))
+
+
+class TreeRedirectHandler(IPythonHandler):
+
+ @authenticate_unless_readonly
+ def get(self):
+ url = self.base_project_url + 'tree'
+ self.redirect(url)
+
+class ProjectRedirectHandler(IPythonHandler):
+
+ @authenticate_unless_readonly
+ def get(self):
+ url = self.base_project_url + 'tree'
+ self.redirect(url)
+
#-----------------------------------------------------------------------------
# URL to handler mappings
#-----------------------------------------------------------------------------
-default_handlers = [(r"/", ProjectDashboardHandler)]
\ No newline at end of file
+_notebook_path_regex = r"(?P.+)"
+
+default_handlers = [
+ (r"/tree/%s" % _notebook_path_regex, ProjectPathDashboardHandler),
+ (r"/tree", ProjectDashboardHandler),
+ (r"/tree/", TreeRedirectHandler),
+ (r"/", ProjectRedirectHandler)
+ ]