closes#3391
For users who need to hide the scrollbars while zooming text in the meantime, you can add the following to your custom.css:
```css
.CodeMirror-scroll, .CodeMirror-wrap .CodeMirror-scroll {
overflow: scroll;
}
.CodeMirror-vscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-hscrollbar {
visibility: hidden;
}
```
switch default ws_url logic to js side
In some cases (proxies, #3305), the request object doesn't have the right information about the originating information. This changes the default behavior, so that ws_url is generally empty by default, which the javascript takes to mean 'the same as http'. This is simpler and should be more resilient than trying a guess on server-side.
also replaces unused websocket_host with websocket_url
Rather than specifying only the hostname, it makes much more sense to specify the whole protocol,host,port in a single go.
Use different treshold for (auto)scroll in output
Use different treshold for (auto)scroll in output
Allow, in particular to switch to scolling for longer input (or disable
it) by still keeping the possibility to manually toggle the output to
scroll.
cf jsdoc,
OutputArea.auto_scroll_threshold
and
OutputArea.minimum_scroll_threshold
OutputArea.auto_scroll_threshold < 0 will prevent auto_scroll from ever happening.
used in comparison check for notebook name change.
Unless the filenames are normalized, unchanged names may result in false positives for a name change (e.g. OS X uses NFD on the filesystem, so u'\xfc' roundtripped to the filesystem will be u'u\u0308'), which can result in the first save of a notebook after open performing the following actions:
save the recently opened notebook
old_name != new_name, so name change detected
delete old_name (which is actually new_name), which ultimately deletes the just-saved notebook
In master, this has a symptom of the first checkpoint failing because the first save actually deleted the file, and you can't checkpoint a notebook that doesn't exist.
closes#3360
In some cases (proxies, #3305), the request object doesn't have the right information about the originating information. This changes the default behavior, so that `ws_url` is generally empty by default, which the javascript takes to mean 'the same as http'. This is simpler and should be more resilient than trying a guess on server-side.
instead of random.
The random cookie name meant that every time you restarted the notebook it would get a new key in the cookie for the same host, resulting in an ever-growing cookie full of obsolete data.
used in comparison check for notebook name change.
Unless the filenames are normalized,
unchanged names may result in false positives for a name change
(e.g. OS X uses NFD on the filesystem,
so u'\xfc' roundtripped to the filesystem will be u'u\u0308'),
which can result in the first save of a notebook after open performing the following actions:
1. save the recently opened notebook
2. `old_name != new_name`, so name change detected
3. delete old_name (which is actually new_name), which ultimately deletes the just-saved notebook
In master, this has a symptom of the first checkpoint failing because the first save actually deleted the file, and you can't checkpoint a notebook that doesn't exist.
closes#3360
always draw scrollbar margin, so that inappropriate scrollbars never overlap the last line.
To compensate for the extra space, the margin between the scrollbar and the last line is shrunk significantly.
Organize the JS and less files by component, in the `static` directory of the notebook.
This PR does the client side re-org that parallels the server side work in #3321. There are now subdirectories in `static/` for each part of the client; roughly speaking there is one subdir for each page, web service or component.
autosave interval is tuned based on the duration of saves.
Autosave will never happen more frequently than every 30 seconds,
and if saves take more than 3 seconds, autosave will fire every 10x the duration of the save (i.e. if save takes 6 seconds, it will be every 60 seconds, etc.)
CM3 introduced a number of changes to how various paddings are set.
Because of how we change the line-height we had to set these back
to the CM2 values. What a pain!
This commit adds the right versions of:
* Bootstrap
* Jquery
* less.js
* CodeMirror
We should always use bower to manage these packages in the
future. BUT, we are not yet using this version of jquery as
we still rely on an older crazy-branch version of jquery.ui.
move settings to the tornado settings dict,
rather than a mixture of tornado settings and application references,
and application.ipython_app references.
removes any reference to application / ipython_app attributes in the handlers,
in favor of the tornado settings dict.
These were a massive pain for anyone who might want to re-use our handlers.
Simple less classes
Simplify class handeling in js/css
Instead of setting several class (e.g: `cell vbox`) per dom element, use less to embed the definition of `vbox` into `cell`.
This should allow :
- more easy theming.
- responsive css on nbviewer
There are many other places where this can be done.
CM configurable Take 2
Change the way configurability works.
Config dict should be passed down to the parent class where it will be
merged with the default value and propagate to this only in the base
class.
This allow to both alter the configuration on a per instance basis, or
globaly by tempering with the class instance.
This also get rid of IPython global in some cases.
--
Still not **perfect** but I think this is the limit of my js knowledge, there is a minimal amount of code of 4 line to propagate the configuration :
```
var options = {foo:bar}; // default options can be class parameter
var overwrite_options ={boo:baz}; // came from args, or not
options = this.mergeopt(CodeCell, options, overwrite options);
IPython.Cell.apply(this,[options]);
```
generally not necessary, but sometimes the kernel connection can be dirty.
We have only seen this by starting a qtconsole via %qtconsole,
then killing the kernel, at which point the original notebook's connection
(at the zmq level) is never restored to the new kernel at the same endpoint.
It's weird, and probably a zmq bug, but a simple reconnect seems to solve it.
- MultiKernelManager no longer has IOLoop affiliations
- move connect_[channel] method to base KernelManager
- connect_[channel] wraps in ZMQStream in IOLoopKM subclass
- add KernelRestarter base class
- use decorators to minimize code in wrapped KM methods
ansispan function adapted from mmalecki/ansispan
The easiest way to see how slow the old way was is to create a very large traceback (e.g. max recursion), which bring everything to a screeching halt (even future page loads, if the output is saved). Now a max recursion error draws in a second or two.
closes#3198
and move the friendly version checks to notebookapp.py
DEFAULT_STATIC_FILES_PATH is now accessible without pyzmq/tornado/jinja being importable.
If someone tries to use old pyzmq or tornado directly with handlers,
the version check won't happen, but that's probably the right thing to do anyway.
Notebook support for a reverse proxy which handles SSL
Added a "trust_xheaders" config option to NotebookApp to enable the passing of the xheaders flag to tornado.HTTPServer. This is necessary so tornado can generate the correct wss:// scheme
fix `gaierror: [Errno -9] Address family for hostname not supported`
error from unassociated interfaces.
related to facebook/tornado#593 - but the fix was only applied to 3.0
I've verified that this fix works for tornado 2.1, 2.4, 2.4.1, and the behavior it fixes does not trigger on tornado 3.0
closes#3045
Change the way configurability works.
Config dict should be passed down to the parent class where it will be
merged with the default value and propagate to this only in the base
class.
This allow to both alter the configuration on a per instance basis, or
globaly by tempering with the class instance.
This also get rid of IPython global in some cases.
related to facebook/tornado#593
I've verified that this fix works for tornado 2.1, 2.4, 2.4.1, and the
behavior it fixes does not trigger on tornado 3.0
Strip useless ANSI escape codes in notebook
ANSI color escape codes get handled specially by the notebook, but other kinds of codes just get printed out. Strip these codes out of the notebook output.
closes#2385