# ipython/ipython

### Subversion checkout URL

You can clone with
or
.

Merged
merged 7 commits into from
+120 −32

### 3 participants

• Display a login button when viewing the notebook in read-only mode.
• On the login page, focus on the password field by default.
• Correctly style login / logout buttons.
Owner

The login button should not appear in 'default' mode, where it does exactly nothing. Do you know why your PR disables the hidden logic that was there before?

Owner

Also, what should happen in the case where read-only mode is the only one available (no password is set)? In your case, you can enter any password, and login just redirects you to the front page. This suggests that login was successful, but it obviously wasn't, as the login button remains (and login is impossible).

I should think that at the very least, trying to login should always fail, and ideally the login button should be disabled in this case as well.

@minrk The current logic is already broken; it never shows a login button in read-only mode. The problem is that we only make a distinction between read-only vs. non-read-only modes, whereas there is a third case: read-only but with the option to log in. So maybe we can give the read-only property some more states. I'll have a look at how to best accomplish this.

OK, I see we do have three states in there: None, True and False. I'll check for these separately.

Owner

I think the existence of a non-empty password is the thing that tells you whether login is possible.

Yes, but we don't want to do that logic inside of the templates, if possible.

@minrk This is the basic idea I had in mind. There are different ways to implement it (e.g., have read_only return a string instead of True, False, None), but this seems to work for now.

Owner

There is actually one more case to handle: no password set, and not read-only. This is by far the most common case, and should not draw any login/logout buttons.

Owner

@stefanv, this PR needs a rebase as it's now conflicting. Do you think you'll have time to finish it up before we cut the 0.12 RC? That basically means finish it today...

Owner

ok!

 stefanv Display login button in read-only mode. 09bb9bd stefanv Redirect to front page upon read-only logout. 8463841 stefanv On the login page, focus on the password field. c7b2a07 stefanv Improve three-state read-only logic. 5b10f05 stefanv Split read-only logic into three functions: read_only, logged_in, and… … login_available. Move display logic from javascript into templates. bd48758

@fperez @minrk This change should make the logic a lot clearer. There are three states that need to be monitored, each now associated with a method:

• Is the current user logged in? (method: logged_in)

I also removed display logic from the javascript, and moved it to the template. Finally, the password field now receives automatic focus.

Owner

Awesome, much cleaner than it was before, and I've tried every combination of being logged in / out having password defined / undefined, and readonly, and it seems to always behave how I expect.

The only thing that didn't seem perfect was the fact that login/logout buttons are still drawn on the login page. If that's an easy fix, go for it, otherwise I'm +1 on merging right now.

That's a trivial fix. Give me one second.

 stefanv Hide top login/logout buttons on login/logout pages. 8326cad

@minrk That should do it.

 stefanv Correctly set read_only meta name for use in javascript. Note that th… …is has a different meaning than in the Python code: not whether the read-only flag was specified upon launch, but whether the notebook is in read-only mode and input should be disabled. 5fd0e96
merged commit 2bfc449 into ipython:master
referenced this pull request from a commit
 Commit has since been removed from the repository and is no longer available.
Commits on Dec 14, 2011
1. stefanv authored
2. stefanv authored
3. stefanv authored
4. stefanv authored
5. stefanv authored
… login_available. Move display logic from javascript into templates.
6. stefanv authored
7. stefanv authored
…is has a different meaning than in the Python code: not whether the read-only flag was specified upon launch, but whether the notebook is in read-only mode and input should be disabled.
53 IPython/frontend/html/notebook/handlers.py
 @@ -22,12 +22,16 @@ var IPython = (function (IPython) { LoginWidget.prototype.style = function () { this.element.find('button#logout').button(); + this.element.find('button#login').button(); }; LoginWidget.prototype.bind_events = function () { var that = this; this.element.find("button#logout").click(function () { window.location = "/logout"; }); + this.element.find("button#login").click(function () { + window.location = "/login"; + }); }; // Set module variables
11 IPython/frontend/html/notebook/static/js/projectdashboardmain.js
 @@ -28,18 +28,9 @@ $(document).ready(function () {$('div#right_panel').addClass('box-flex'); IPython.read_only = $('meta[name=read_only]').attr("content") == 'True'; - IPython.notebook_list = new IPython.NotebookList('div#notebook_list'); IPython.login_widget = new IPython.LoginWidget('span#login_widget'); - - if (IPython.read_only){ - // unhide login button if it's relevant -$('span#login_widget').removeClass('hidden'); - $('#drag_info').remove(); - } else { -$('#new_notebook').removeClass('hidden'); - \$('#drag_info').removeClass('hidden'); - } + IPython.notebook_list.load_list(); // These have display: none in the css file and are made visible here to prevent FLOUC.
18 IPython/frontend/html/notebook/templates/layout.html
 @@ -22,11 +22,19 @@
 @@ -1,8 +1,26 @@ {% extends layout.html %} {% block content_panel %} + + {% if login_available %} +
- Password: + Password: + + {% end %} + +{% end %} + +{% block login_widget %} +{% end %} + +{% block script %} + {% end %}
25 IPython/frontend/html/notebook/templates/logout.html
 @@ -1,5 +1,28 @@ {% extends layout.html %} {% block content_panel %} -Proceed to the login page. +
+ {% if read_only or not login_available %} + + Proceed to the list of notebooks. + + {% else %} + + Proceed to the login page. + + {% end %} + +
+ +{% end %} + +{% block login_widget %} +{% end %} + +{% block script %} + {% end %}
10 IPython/frontend/html/notebook/templates/notebook.html
 @@ -29,8 +29,10 @@ - - + + {% comment In the notebook, the read-only flag is used to determine %} + {% comment whether to hide the side panels and switch off input %} + @@ -52,8 +54,10 @@ {% comment This is a temporary workaround to hide the logout button %} {% comment when appropriate until notebook.html is templated %} - {% if current_user and current_user != 'anonymous' %} + {% if logged_in %} + {% elif not logged_in and login_available %} + {% end %}
11 IPython/frontend/html/notebook/templates/projectdashboard.html
 @@ -19,12 +19,19 @@ {% end %} {% block content_panel %} + {% if logged_in or not read_only %} +
- + Drag files onto the list to import + notebooks. + - +
+ + {% end %} +

{{project}}

Something went wrong with that request. Please try again.