##// END OF EJS Templates
Refactor notebook to use Jinja2 instead of tornado templates
Cameron Bates -
Show More
@@ -27,10 +27,13 b' import stat'
27 import threading
27 import threading
28 import time
28 import time
29 import uuid
29 import uuid
30 import os
30
31
31 from tornado import web
32 from tornado import web
32 from tornado import websocket
33 from tornado import websocket
33
34
35 from jinja2 import Environment, FileSystemLoader
36
34 from zmq.eventloop import ioloop
37 from zmq.eventloop import ioloop
35 from zmq.utils import jsonapi
38 from zmq.utils import jsonapi
36
39
@@ -210,27 +213,29 b' class ProjectDashboardHandler(AuthenticatedHandler):'
210 def get(self):
213 def get(self):
211 nbm = self.application.notebook_manager
214 nbm = self.application.notebook_manager
212 project = nbm.notebook_dir
215 project = nbm.notebook_dir
213 self.render(
216 env = Environment(loader=FileSystemLoader(os.path.join(os.path.abspath("."), "IPython/frontend/html/notebook/templates")))
214 'projectdashboard.html', project=project,
217 nb = env.get_template('projectdashboard.html')
218 self.write( nb.render(project=project,
215 base_project_url=self.application.ipython_app.base_project_url,
219 base_project_url=self.application.ipython_app.base_project_url,
216 base_kernel_url=self.application.ipython_app.base_kernel_url,
220 base_kernel_url=self.application.ipython_app.base_kernel_url,
217 read_only=self.read_only,
221 read_only=self.read_only,
218 logged_in=self.logged_in,
222 logged_in=self.logged_in,
219 login_available=self.login_available
223 login_available=self.login_available))
220 )
221
224
222
225
223 class LoginHandler(AuthenticatedHandler):
226 class LoginHandler(AuthenticatedHandler):
224
227
225 def _render(self, message=None):
228 def _render(self, message=None):
226 self.render('login.html',
229 env = Environment(loader=FileSystemLoader(os.path.join(os.path.abspath("."), "IPython/frontend/html/notebook/templates")))
230 nb = env.get_template('login.html')
231 self.write( nb.render(
227 next=self.get_argument('next', default=self.application.ipython_app.base_project_url),
232 next=self.get_argument('next', default=self.application.ipython_app.base_project_url),
228 read_only=self.read_only,
233 read_only=self.read_only,
229 logged_in=self.logged_in,
234 logged_in=self.logged_in,
230 login_available=self.login_available,
235 login_available=self.login_available,
231 base_project_url=self.application.ipython_app.base_project_url,
236 base_project_url=self.application.ipython_app.base_project_url,
232 message=message
237 message=message
233 )
238 ))
234
239
235 def get(self):
240 def get(self):
236 if self.current_user:
241 if self.current_user:
@@ -260,12 +265,14 b' class LogoutHandler(AuthenticatedHandler):'
260 message = {'warning': 'Cannot log out. Notebook authentication '
265 message = {'warning': 'Cannot log out. Notebook authentication '
261 'is disabled.'}
266 'is disabled.'}
262
267
263 self.render('logout.html',
268 env = Environment(loader=FileSystemLoader(os.path.join(os.path.abspath("."), "IPython/frontend/html/notebook/templates")))
269 nb = env.get_template('logout.html')
270 self.write( nb.render(
264 read_only=self.read_only,
271 read_only=self.read_only,
265 logged_in=self.logged_in,
272 logged_in=self.logged_in,
266 login_available=self.login_available,
273 login_available=self.login_available,
267 base_project_url=self.application.ipython_app.base_project_url,
274 base_project_url=self.application.ipython_app.base_project_url,
268 message=message)
275 message=message))
269
276
270
277
271 class NewHandler(AuthenticatedHandler):
278 class NewHandler(AuthenticatedHandler):
@@ -277,7 +284,6 b' class NewHandler(AuthenticatedHandler):'
277 notebook_id = nbm.new_notebook()
284 notebook_id = nbm.new_notebook()
278 self.redirect('/'+urljoin(self.application.ipython_app.base_project_url, notebook_id))
285 self.redirect('/'+urljoin(self.application.ipython_app.base_project_url, notebook_id))
279
286
280
281 class NamedNotebookHandler(AuthenticatedHandler):
287 class NamedNotebookHandler(AuthenticatedHandler):
282
288
283 @authenticate_unless_readonly
289 @authenticate_unless_readonly
@@ -286,9 +292,9 b' class NamedNotebookHandler(AuthenticatedHandler):'
286 project = nbm.notebook_dir
292 project = nbm.notebook_dir
287 if not nbm.notebook_exists(notebook_id):
293 if not nbm.notebook_exists(notebook_id):
288 raise web.HTTPError(404, u'Notebook does not exist: %s' % notebook_id)
294 raise web.HTTPError(404, u'Notebook does not exist: %s' % notebook_id)
289
295 env = Environment(loader=FileSystemLoader(os.path.join(os.path.abspath("."), "IPython/frontend/html/notebook/templates")))
290 self.render(
296 nb = env.get_template('notebook/notebook.html')
291 'notebook.html', project=project,
297 self.write( nb.render(project=project,
292 notebook_id=notebook_id,
298 notebook_id=notebook_id,
293 base_project_url=self.application.ipython_app.base_project_url,
299 base_project_url=self.application.ipython_app.base_project_url,
294 base_kernel_url=self.application.ipython_app.base_kernel_url,
300 base_kernel_url=self.application.ipython_app.base_kernel_url,
@@ -296,8 +302,7 b' class NamedNotebookHandler(AuthenticatedHandler):'
296 read_only=self.read_only,
302 read_only=self.read_only,
297 logged_in=self.logged_in,
303 logged_in=self.logged_in,
298 login_available=self.login_available,
304 login_available=self.login_available,
299 mathjax_url=self.application.ipython_app.mathjax_url,
305 mathjax_url=self.application.ipython_app.mathjax_url,))
300 )
301
306
302
307
303 class PrintNotebookHandler(AuthenticatedHandler):
308 class PrintNotebookHandler(AuthenticatedHandler):
@@ -309,8 +314,10 b' class PrintNotebookHandler(AuthenticatedHandler):'
309 if not nbm.notebook_exists(notebook_id):
314 if not nbm.notebook_exists(notebook_id):
310 raise web.HTTPError(404, u'Notebook does not exist: %s' % notebook_id)
315 raise web.HTTPError(404, u'Notebook does not exist: %s' % notebook_id)
311
316
312 self.render(
317 env = Environment(loader=FileSystemLoader(os.path.join(os.path.abspath("."), "IPython/frontend/html/notebook/templates")))
313 'printnotebook.html', project=project,
318 nb = env.get_template('printnotebook.html')
319 self.write( nb.render(
320 project=project,
314 notebook_id=notebook_id,
321 notebook_id=notebook_id,
315 base_project_url=self.application.ipython_app.base_project_url,
322 base_project_url=self.application.ipython_app.base_project_url,
316 base_kernel_url=self.application.ipython_app.base_kernel_url,
323 base_kernel_url=self.application.ipython_app.base_kernel_url,
@@ -319,7 +326,7 b' class PrintNotebookHandler(AuthenticatedHandler):'
319 logged_in=self.logged_in,
326 logged_in=self.logged_in,
320 login_available=self.login_available,
327 login_available=self.login_available,
321 mathjax_url=self.application.ipython_app.mathjax_url,
328 mathjax_url=self.application.ipython_app.mathjax_url,
322 )
329 ))
323
330
324 #-----------------------------------------------------------------------------
331 #-----------------------------------------------------------------------------
325 # Kernel handlers
332 # Kernel handlers
@@ -1,9 +1,10 b''
1 {% extends page.html %}
1 {% extends "page.html" %}
2
2 {% block stylesheet %}
3 {% block stylesheet %}
3
4
4 {% if mathjax_url %}
5 {% if mathjax_url %}
5 <script type="text/javascript" src="{{mathjax_url}}?config=TeX-AMS_HTML" charset="utf-8"></script>
6 <script type="text/javascript" src="{{mathjax_url}}?config=TeX-AMS_HTML" charset="utf-8"></script>
6 {% end %}
7 {% endif %}
7 <script type="text/javascript">
8 <script type="text/javascript">
8 // MathJax disabled, set as null to distingish from *missing* MathJax,
9 // MathJax disabled, set as null to distingish from *missing* MathJax,
9 // where it will be undefined, and should prompt a dialog later.
10 // where it will be undefined, and should prompt a dialog later.
@@ -20,9 +21,7 b' window.mathjax_url = "{{mathjax_url}}";'
20 <link rel="stylesheet" href="{{ static_url("css/renderedhtml.css") }}" type="text/css" />
21 <link rel="stylesheet" href="{{ static_url("css/renderedhtml.css") }}" type="text/css" />
21
22
22 <link rel="stylesheet" href="{{ static_url("css/printnotebook.css") }}" type="text/css" media="print"/>
23 <link rel="stylesheet" href="{{ static_url("css/printnotebook.css") }}" type="text/css" media="print"/>
23
24 {% endblock %}
24 {% end %}
25
26
25
27 {% block params %}
26 {% block params %}
28
27
@@ -32,7 +31,7 b' data-base-kernel-url={{base_kernel_url}}'
32 data-read-only={{read_only and not logged_in}}
31 data-read-only={{read_only and not logged_in}}
33 data-notebook-id={{notebook_id}}
32 data-notebook-id={{notebook_id}}
34
33
35 {% end %}
34 {% endblock %}
36
35
37
36
38 {% block header %}
37 {% block header %}
@@ -42,7 +41,7 b' data-notebook-id={{notebook_id}}'
42 <span id="save_status"></span>
41 <span id="save_status"></span>
43 </span>
42 </span>
44
43
45 {% end %}
44 {% endblock %}
46
45
47
46
48 {% block site %}
47 {% block site %}
@@ -207,7 +206,7 b' data-notebook-id={{notebook_id}}'
207 <div id='tooltip' class='tooltip ui-corner-all' style='display:none'></div>
206 <div id='tooltip' class='tooltip ui-corner-all' style='display:none'></div>
208
207
209
208
210 {% end %}
209 {% endblock %}
211
210
212
211
213 {% block script %}
212 {% block script %}
@@ -248,5 +247,7 b' data-notebook-id={{notebook_id}}'
248 <script src="{{ static_url("js/notebookmain.js") }}" type="text/javascript" charset="utf-8"></script>
247 <script src="{{ static_url("js/notebookmain.js") }}" type="text/javascript" charset="utf-8"></script>
249
248
250 <script src="{{ static_url("js/contexthint.js") }}" charset="utf-8"></script>
249 <script src="{{ static_url("js/contexthint.js") }}" charset="utf-8"></script>
250 {% endblock %}
251
252
251
253
252 {% end %}
@@ -1,26 +1,31 b''
1
2
1 <!DOCTYPE HTML>
3 <!DOCTYPE HTML>
4 {% macro static_url(name) -%}
5 /static/{{ name }}
6 {%- endmacro %}
2 <html>
7 <html>
3
8
4 <head>
9 <head>
5 <meta charset="utf-8">
10 <meta charset="utf-8">
6
11
7 <title>{% block title %}IPython Notebook{% end %}</title>
12 <title>{% block title %}IPython Notebook{% endblock %}</title>
8
13
9 <link rel="stylesheet" href="{{static_url("jquery/css/themes/base/jquery-ui.min.css") }}" type="text/css" />
14 <link rel="stylesheet" href="{{static_url("jquery/css/themes/base/jquery-ui.min.css") }}" type="text/css" />
10 <link rel="stylesheet" href="{{static_url("css/boilerplate.css") }}" type="text/css" />
15 <link rel="stylesheet" href="{{static_url("css/boilerplate.css") }}" type="text/css" />
11 <link rel="stylesheet" href="{{static_url("css/fbm.css") }}" type="text/css" />
16 <link rel="stylesheet" href="{{static_url("css/fbm.css") }}" type="text/css" />
12 <link rel="stylesheet" href="{{static_url("css/page.css") }}" type="text/css"/>
17 <link rel="stylesheet" href="{{static_url("css/page.css") }}" type="text/css"/>
13 {% block stylesheet %}
18 {% block stylesheet %}
14 {% end %}
19 {% endblock %}
15 <link rel="stylesheet" href="{{ static_url("css/custom.css") }}" type="text/css" />
20 <link rel="stylesheet" href="{{ static_url("css/custom.css") }}" type="text/css" />
16
21
17
22
18 {% block meta %}
23 {% block meta %}
19 {% end %}
24 {% endblock %}
20
25
21 </head>
26 </head>
22
27
23 <body {% block params %}{% end %}>
28 <body {% block params %}{% endblock %}>
24
29
25 <div id="header">
30 <div id="header">
26 <span id="ipython_notebook"><h1><a href={{base_project_url}} alt='dashboard'><img src='{{static_url("ipynblogo.png") }}' alt='IPython Notebook'/></a></h1></span>
31 <span id="ipython_notebook"><h1><a href={{base_project_url}} alt='dashboard'><img src='{{static_url("ipynblogo.png") }}' alt='IPython Notebook'/></a></h1></span>
@@ -32,18 +37,18 b''
32 <button id="logout">Logout</button>
37 <button id="logout">Logout</button>
33 {% elif login_available and not logged_in %}
38 {% elif login_available and not logged_in %}
34 <button id="login">Login</button>
39 <button id="login">Login</button>
35 {% end %}
40 {% endif %}
36 </span>
41 </span>
37
42
38 {% end %}
43 {% endblock %}
39
44
40 {% block header %}
45 {% block header %}
41 {% end %}
46 {% endblock %}
42 </div>
47 </div>
43
48
44 <div id="site">
49 <div id="site">
45 {% block site %}
50 {% block site %}
46 {% end %}
51 {% endblock %}
47 </div>
52 </div>
48
53
49 <script src="{{static_url("jquery/js/jquery-1.7.1.min.js") }}" type="text/javascript" charset="utf-8"></script>
54 <script src="{{static_url("jquery/js/jquery-1.7.1.min.js") }}" type="text/javascript" charset="utf-8"></script>
@@ -53,7 +58,7 b''
53 <script src="{{static_url("js/loginwidget.js") }}" type="text/javascript" charset="utf-8"></script>
58 <script src="{{static_url("js/loginwidget.js") }}" type="text/javascript" charset="utf-8"></script>
54
59
55 {% block script %}
60 {% block script %}
56 {% end %}
61 {% endblock %}
57
62
58 <script src="{{static_url("js/custom.js") }}" type="text/javascript" charset="utf-8"></script>
63 <script src="{{static_url("js/custom.js") }}" type="text/javascript" charset="utf-8"></script>
59
64
@@ -1,11 +1,11 b''
1 {% extends page.html %}
1 {% extends "page.html" %}
2
2
3 {% block title %}IPython Dashboard{% end %}
3 {% block title %}IPython Dashboard{% endblock %}
4
4
5 {% block stylesheet %}
5 {% block stylesheet %}
6 <link rel="stylesheet" href="{{static_url("css/projectdashboard.css") }}" type="text/css" />
6 <link rel="stylesheet" href="{{static_url("css/projectdashboard.css") }}" type="text/css" />
7 <link rel="stylesheet" href="{{static_url("css/alternateuploadform.css") }}" type="text/css" />
7 <link rel="stylesheet" href="{{static_url("css/alternateuploadform.css") }}" type="text/css" />
8 {% end %}
8 {% endblock %}
9
9
10
10
11 {% block params %}
11 {% block params %}
@@ -15,7 +15,7 b' data-base-project-url={{base_project_url}}'
15 data-base-kernel-url={{base_kernel_url}}
15 data-base-kernel-url={{base_kernel_url}}
16 data-read-only={{read_only}}
16 data-read-only={{read_only}}
17
17
18 {% end %}
18 {% endblock %}
19
19
20
20
21 {% block site %}
21 {% block site %}
@@ -42,7 +42,7 b' data-read-only={{read_only}}'
42 <button id="new_notebook" title="Create new notebook">New Notebook</button>
42 <button id="new_notebook" title="Create new notebook">New Notebook</button>
43 </span>
43 </span>
44 </div>
44 </div>
45 {% end %}
45 {% endif %}
46
46
47 <div id="notebook_list">
47 <div id="notebook_list">
48 <div id="project_name"><h2>{{project}}</h2></div>
48 <div id="project_name"><h2>{{project}}</h2></div>
@@ -72,10 +72,10 b' data-read-only={{read_only}}'
72
72
73 </div>
73 </div>
74
74
75 {% end %}
75 {% endblock %}
76
76
77 {% block script %}
77 {% block script %}
78 <script src="{{static_url("js/notebooklist.js") }}" type="text/javascript" charset="utf-8"></script>
78 <script src="{{static_url("js/notebooklist.js") }}" type="text/javascript" charset="utf-8"></script>
79 <script src="{{static_url("js/clusterlist.js") }}" type="text/javascript" charset="utf-8"></script>
79 <script src="{{static_url("js/clusterlist.js") }}" type="text/javascript" charset="utf-8"></script>
80 <script src="{{static_url("js/projectdashboardmain.js") }}" type="text/javascript" charset="utf-8"></script>
80 <script src="{{static_url("js/projectdashboardmain.js") }}" type="text/javascript" charset="utf-8"></script>
81 {% end %}
81 {% endblock %}
General Comments 0
You need to be logged in to leave comments. Login now