Still need tests.
And as discussed a long time ago, the concept of toggling scrolling and
Collapsed is **not** the right one, it leads to inconsistencies.
The cell output has 3 states:
- expanded
- scrolled
- collapsed
And the menu action should decide which one of the 3 user want.
Otherwise you get into inconsistencies like what is the difference
between collapsed & scrolled /vs/ collapsed & not scrolled.
Partially addresses #800 and #801 (I think)
In log.py, we're attempting to log the request headers when a
500-series error occurs, but tornado.httputil.HTTPHeaders isn't a dict -
it inherits from collections.MutableMapping. So it fails during
JSON serialization. The fix is to convert it to a dict first.
Unfortunately, the HTTPHeaders class doesn't expose any methods
to access the underlying dictionary (`request.headers._dict`) directly,
so we recreate it using the public API.
It use the notion of Head/Anchor moving the selection normally move both
the head and the anchor. It is possible to mot move the anchor, for
example by pressing Shift.
Everything in between the head and the anchor (head and anchor included)
is in a "soft-selection" marked with the 'jupyter-soft-selection' class
in CSS.
This then remove completely the notion of marked cell, and thus disallow
discontinuous selection.
Unlike previous implementation the used a thick left border, this use
background gradient with 2 stops at the same position to archived the
same visual effect without the gap in between left border in between
contiguous cells.
For compatibility with previous versions, a few choices have been made.
An extra multi-selected class is added to the body when multiple
cells are selected. This allow to toggle the background to a soft blue
indicating selection. And the Head of the selection is still called the
"selected" cell.
The on_focus event have been reworked as a
click-let-click-release-outside of codemirror was putting the notebook
in undefined state with multiple selected cells, and the head in edit
mode.
Finally Travis now test on edge group, to get faster, which can be
removed in a few weeks as the all infrastructure of Travis will move on
Google Cloud.
If we're going to explicitly list 3.3, we should also be listing 3.4 and
3.5. But really we're compatible with any fairly recent Python 3
version, and will probably be compatible with future versions, so I
think it's best to just use the overall Python 3 classifier.
rather than initializing in main and starting in background, which seemed to cause occasional issues.
Also fix checking for dead notebook, which is no longer a subprocess.