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.)
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.
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