##// END OF EJS Templates
Split read-only logic into three functions: read_only, logged_in, and login_available. Move display logic from javascript into templates.
Stefan van der Walt -
Show More
@@ -139,22 +139,29 b' class AuthenticatedHandler(RequestHandler):'
139 return user_id
139 return user_id
140
140
141 @property
141 @property
142 def logged_in(self):
143 """Is a user currently logged in?
144
145 """
146 user = self.get_current_user()
147 return (user and not user == 'anonymous')
148
149 @property
150 def login_available(self):
151 """May a user proceed to log in?
152
153 This returns True if login capability is available, irrespective of
154 whether the user is already logged in or not.
155
156 """
157 return bool(self.application.password)
158
159 @property
142 def read_only(self):
160 def read_only(self):
143 """Is the notebook read-only?
161 """Is the notebook read-only?
144
162
145 None -- notebook is read-only, but the user can log-in to edit
146 True -- notebook is read-only, no log-in available
147 False -- no read-only mode available, user must log in
148
149 """
163 """
150 user = self.get_current_user()
164 return self.application.read_only
151 if user and user != 'anonymous':
152 return False
153 elif self.application.read_only:
154 if self.application.password:
155 return None
156 else:
157 return True
158
165
159 @property
166 @property
160 def ws_url(self):
167 def ws_url(self):
@@ -177,6 +184,8 b' class ProjectDashboardHandler(AuthenticatedHandler):'
177 'projectdashboard.html', project=project,
184 'projectdashboard.html', project=project,
178 base_project_url=u'/', base_kernel_url=u'/',
185 base_project_url=u'/', base_kernel_url=u'/',
179 read_only=self.read_only,
186 read_only=self.read_only,
187 logged_in=self.logged_in,
188 login_available=self.login_available
180 )
189 )
181
190
182
191
@@ -186,6 +195,8 b' class LoginHandler(AuthenticatedHandler):'
186 self.render('login.html',
195 self.render('login.html',
187 next=self.get_argument('next', default='/'),
196 next=self.get_argument('next', default='/'),
188 read_only=self.read_only,
197 read_only=self.read_only,
198 logged_in=self.logged_in,
199 login_available=self.login_available,
189 message=message
200 message=message
190 )
201 )
191
202
@@ -211,7 +222,17 b' class LogoutHandler(AuthenticatedHandler):'
211
222
212 def get(self):
223 def get(self):
213 self.clear_cookie('username')
224 self.clear_cookie('username')
214 self.render('logout.html', message={'info': 'Successfully logged out.'})
225 if self.login_available:
226 message = {'info': 'Successfully logged out.'}
227 else:
228 message = {'warning': 'Cannot log out. Notebook authentication '
229 'is disabled.'}
230
231 self.render('logout.html',
232 read_only=self.read_only,
233 logged_in=self.logged_in,
234 login_available=self.login_available,
235 message=message)
215
236
216
237
217 class NewHandler(AuthenticatedHandler):
238 class NewHandler(AuthenticatedHandler):
@@ -227,6 +248,8 b' class NewHandler(AuthenticatedHandler):'
227 base_project_url=u'/', base_kernel_url=u'/',
248 base_project_url=u'/', base_kernel_url=u'/',
228 kill_kernel=False,
249 kill_kernel=False,
229 read_only=False,
250 read_only=False,
251 logged_in=self.logged_in,
252 login_available=self.login_available,
230 mathjax_url=self.application.ipython_app.mathjax_url,
253 mathjax_url=self.application.ipython_app.mathjax_url,
231 )
254 )
232
255
@@ -246,6 +269,8 b' class NamedNotebookHandler(AuthenticatedHandler):'
246 base_project_url=u'/', base_kernel_url=u'/',
269 base_project_url=u'/', base_kernel_url=u'/',
247 kill_kernel=False,
270 kill_kernel=False,
248 read_only=self.read_only,
271 read_only=self.read_only,
272 logged_in=self.logged_in,
273 login_available=self.login_available,
249 mathjax_url=self.application.ipython_app.mathjax_url,
274 mathjax_url=self.application.ipython_app.mathjax_url,
250 )
275 )
251
276
@@ -28,18 +28,9 b' $(document).ready(function () {'
28 $('div#right_panel').addClass('box-flex');
28 $('div#right_panel').addClass('box-flex');
29
29
30 IPython.read_only = $('meta[name=read_only]').attr("content") == 'True';
30 IPython.read_only = $('meta[name=read_only]').attr("content") == 'True';
31
32 IPython.notebook_list = new IPython.NotebookList('div#notebook_list');
31 IPython.notebook_list = new IPython.NotebookList('div#notebook_list');
33 IPython.login_widget = new IPython.LoginWidget('span#login_widget');
32 IPython.login_widget = new IPython.LoginWidget('span#login_widget');
34
33
35 if (IPython.read_only){
36 // unhide login button if it's relevant
37 $('span#login_widget').removeClass('hidden');
38 $('#drag_info').remove();
39 } else {
40 $('#new_notebook').removeClass('hidden');
41 $('#drag_info').removeClass('hidden');
42 }
43 IPython.notebook_list.load_list();
34 IPython.notebook_list.load_list();
44
35
45 // These have display: none in the css file and are made visible here to prevent FLOUC.
36 // These have display: none in the css file and are made visible here to prevent FLOUC.
@@ -23,9 +23,9 b''
23 <div id="header">
23 <div id="header">
24 <span id="ipython_notebook"><h1><img src='static/ipynblogo.png' alt='IPython Notebook'/></h1></span>
24 <span id="ipython_notebook"><h1><img src='static/ipynblogo.png' alt='IPython Notebook'/></h1></span>
25 <span id="login_widget">
25 <span id="login_widget">
26 {% if current_user and current_user != 'anonymous' %}
26 {% if logged_in %}
27 <button id="logout">Logout</button>
27 <button id="logout">Logout</button>
28 {% elif read_only is None %}
28 {% elif login_available and not logged_in %}
29 <button id="login">Login</button>
29 <button id="login">Login</button>
30 {% end %}
30 {% end %}
31 </span>
31 </span>
@@ -1,10 +1,16 b''
1 {% extends layout.html %}
1 {% extends layout.html %}
2
2
3 {% block content_panel %}
3 {% block content_panel %}
4
5 {% if login_available %}
6
4 <form action="/login?next={{url_escape(next)}}" method="post">
7 <form action="/login?next={{url_escape(next)}}" method="post">
5 Password: <input type="password" name="password" id="focus">
8 Password: <input type="password" name="password" id="focus">
6 <input type="submit" value="Sign in" id="signin">
9 <input type="submit" value="Sign in" id="signin">
7 </form>
10 </form>
11
12 {% end %}
13
8 {% end %}
14 {% end %}
9
15
10 {% block script %}
16 {% block script %}
@@ -1,11 +1,19 b''
1 {% extends layout.html %}
1 {% extends layout.html %}
2
2
3 {% block content_panel %}
3 {% block content_panel %}
4 {% if current_user and current_user != 'anonymous' %}
4 <ul>
5 Proceed to the <a href="/">front page</a>.
5 {% if read_only or not login_available %}
6 {% else %}
6
7 Proceed to the <a href="/login">login page</a>.
7 Proceed to the <a href="/">list of notebooks</a>.</li>
8 {% end %}
8
9 {% else %}
10
11 Proceed to the <a href="/login">login page</a>.</li>
12
13 {% end %}
14
15 </ul>
16
9 {% end %}
17 {% end %}
10
18
11 {% block script %}
19 {% block script %}
@@ -52,9 +52,9 b''
52 <span id="login_widget">
52 <span id="login_widget">
53 {% comment This is a temporary workaround to hide the logout button %}
53 {% comment This is a temporary workaround to hide the logout button %}
54 {% comment when appropriate until notebook.html is templated %}
54 {% comment when appropriate until notebook.html is templated %}
55 {% if current_user and current_user != 'anonymous' %}
55 {% if logged_in %}
56 <button id="logout">Logout</button>
56 <button id="logout">Logout</button>
57 {% elif read_only is None %}
57 {% elif not logged_in and login_available %}
58 <button id="login">Login</button>
58 <button id="login">Login</button>
59 {% end %}
59 {% end %}
60 </span>
60 </span>
@@ -19,17 +19,19 b' data-base-kernel-url={{base_kernel_url}}'
19 {% end %}
19 {% end %}
20
20
21 {% block content_panel %}
21 {% block content_panel %}
22 {% if logged_in or not read_only %}
23
22 <div id="content_toolbar">
24 <div id="content_toolbar">
23 <span id="drag_info" class="hidden">Drag files onto the list to import
25 <span id="drag_info">Drag files onto the list to import
24 notebooks.</span>
26 notebooks.</span>
25
27
26 {% if read_only == False %}
28 <span id="notebooks_buttons">
27 <span id="notebooks_buttons">
29 <button id="new_notebook">New Notebook</button>
28 <button id="new_notebook" class="hidden">New Notebook</button>
30 </span>
29 </span>
30 {% end %}
31
32 </div>
31 </div>
32
33 {% end %}
34
33 <div id="notebook_list">
35 <div id="notebook_list">
34 <div id="project_name"><h2>{{project}}</h2></div>
36 <div id="project_name"><h2>{{project}}</h2></div>
35 </div>
37 </div>
General Comments 0
You need to be logged in to leave comments. Login now