Cookies cannot be saved on a per-port basis, so a cookie "username" is
shared across all running IPython notebooks with the same hostname.
Using a unique cookie name prevents this collision.
This allows a user to start multiple IPython notebooks and be logged into
each.
Introduce Notification Area
This allow several notification widget to be next one to the other in the notification area.
The Api allow also to register a callback if the user click on the notification. and allows sticky and non sticky notification.
I have created a base class for all notebook managers. Our
existing, file-based store, is now in filenbmanager.py. I have
also created a new Azure Blob based backed notebook manager.
The behavior is the following:
* If you press UP while on the first row, you go to the beginning of the line.
* If you press UP again (or were already at the beginning of the line), you
go to the previous cell.
* If you press DOWN while on the last row, you go to the end of the line.
* If you press DOWN again (or were already at the end of the line), you go
to the next cell.
This applies to `CodeCell`s and `RawCell`s.
add FileFindHandler for Notebook static files
* The static file handler now uses a search path, instead of a single dir.
This allows easier customization of available js/css,
and provides a place for extra files to go for extending the notebook.
* An empty custom.js / custom.css are added to the templates for trivial
custom user styling/scripting.
The search only happens once, and the result is cached after the first.
* A few methods are pulled from tornado 2.2-dev verbatim to have tornado 2.1 compatibility.
* mathjax is now installed by default in profile.
win32 iptest: Use subprocess.Popen() instead of os.system().
The call to `os.system` in `iptest` prevents us from easily setting `$IPYTHONDIR` to a temporary directory. In theory we should be able to use `subprocess.Popen` instead of `os.system` in Windows. This would unify the code structure and make it easy to pass in a different environment.
Note that Python < 2.7 does not have `os.kill`. I've attempted to work around this by using `ctypes` to kill any living processes.
python 2 and 3 compatibility without 2to3
apply some fixes :
- apply (deactivated in setup.py now)
- repr (deactivated in setup.py now)
- print (only in modules with print >>)
- raise (partially)
don't touch deathrow and quarantine.
Base of allowing a full toolbar construction in js without altering the
html template, and use it to construct our toolbar as example.
still need some work to be totally decoupled.
There's nothing there we should be running python tests on, and
occasionally python files may appear there that cause problems to nose
(e.g. mathjax ships a non-py3 valid conf.py that breaks py3 testing).
brutally replace all `exeption <type>, <name>:` by
`exception <type> as <name> :`
`exception <type>, <type> :` should not be present anywhere in the code
anymore, or should be present with explicit tuple as
`exception (<type>, <type>)`
this improve the current css of the print page and add css to the
classical notebook with print as target to get a better print view ant
the ability to directly print a notebook without going through the print
view
Fix spurious appearance of the #fontarea when fonts don't have any problem; also remove loud dialog when problematic font is detected and simply adjust baseline. Users will have a slightly offset baseline for bold/italic highlights, but without any functional problems.
Fixes#2005.
Clean BG processes created by %%script on kernel exit
* uses less forceful shutdown of kernels in the notebook, allowing atexit machinery to fire
* enables daemon BackgroundJobs
* cleanup %%script --bg subprocesses at shutdown
minor notebook startup/notebook-dir adjustments
* change inaccurate / distressing "Overwriting profile..." log message
* `ipython notebook path` results in setting notebook-dir if it's a dir,
rather than unconditionally setting file-to-run
* file-to-run overrides no-browser
* kernels start in the notebook dir, rather than the Server's cwd
* notebook dir is validated, and created if it doesn't exist (only if parent exists, like ~all other such things)
closes#1985closes#1980
second attempt at scrolled long output
Some amount of CSS tweaking will probably want to be done before 0.13 final,
but this is good enough for beta.
closes#1553
Cell/Worksheet metadata
* metadata dicts are attached to cells and worksheets
* restores collapsed flag to the nbformat - this change happened in the refactor, and was undocumented, and possibly accidental. But we should either document it or fix it, and this includes a fix.
* adds a new field, `nbformat_minor`, used to denote minor bumps of the notebook format that expose new capabilities but don't prevent loading by older clients.
* Add a warning in Javascript if loading a multiworksheet notebook (which will exist in the future) as current JS code will only save the first.
closes#1915
fix for #1678, undo no longer clears cells
With these changes, Ctrl-Z inside of codemirror cells will only undo up to the text that was in the cell when it was loaded from JSON.
closes#1678
I found another bug where switching the cell type causes the loss of all
undo history for that cell. With this commit, switching the cell type
simply resets the history
Remove remaining references to deprecated XREP/XREQ names.
There was only one actual use of the deprecated constants in code, but numerous mentions in docstrings, etc.
These names have been removed from the next libzmq release, and will presumably be removed from pyzmq someday.
only one line of actual code is changed.
these names have been removed from the next libzmq release,
and will presumably be removed from pyzmq someday.
Increase duration of save messages and write permanent 'failed' message to the save status area on failed save.
Not a pop-up as described in #1461, but significantly more prominent, and most importantly permanent when saving fails, at least until the next successful save.
Closes#1461.
Add %%octave, %octave, %octave_pull and %octave_push magics to facilitate interaction with Octave via oct2py. This is similar in spirit to the R magic extension.
New `%%capture` cell magic captures stdout/err while running a cell.
Uses `capture_output()` context manager, moved to utils.io from IPython.parallel testing utilities, where it originated.
The caputre objects can be printed as a string, case in which they display the captured stdout, which is also available as `.stdout`. The captured stderr, if any, is in a `.stderr` attribute. A `.show()` method can be called to quickly print both, with stderr being correctly printed to the sys.stderr stream (so the notebook displays it with red highlighting).
closes#1863
Fix 1px margin bouncing of selected menu item.
This fixes the margin of the active menu item to zero, so now the text doesn't shift around, even if you use larger fonts.
To reproduce the original error, zoom your notebook (ctrl-mousewheel, or ctrl-+ in most browsers) and try the menu.
Fix vertical offset due to bold/italics, and bad browser fonts.
Adds a dialog warning users when a problematic monospaced font is detected, so they can change their configuration.
There was a bug in NotebookManager.save_notebook_object.
Here is how to reproduce:
0. Make sure you don't have Untitled0.
1. Open new notebook Untitled0.
2. Rename it to something else.
3. Copy Untitled0.ipynb to the notebook dir from somewhere.
(Do not use notebook UI.)
4. New copied Untitled0 cannot be opened.
The renamed notebook is opened when tried.
Indeed, accessing to http://localhost:XXXX/notebooks shows
duplicated notebook_id.
The problem was that NotebookManager.rev_mapping keeps old notebook
name after renaming.
Make : invalid in filenames in the Notebook JS code.
This only prevents : in the filenames on the JavaScript side of things. Handling this on the server side will be a separate issue that is related to other open issue. I will update those to reflect this.
closes#1781
Rmagic extension to use R (the statistical package) seamlessly from IPython.
The rmagic extension allows R inline code as well as cell level magics. An example notebook is provided in docs/examples/notebooks/rmagic_extension.ipynb to demonstrate its usage.
Main points:
1) Allows capture of plots to R via inline png plots (like --pylab inline)
2) Allows capture of R's stdout() connection to the notebook
3) Allows simple push/pull for array data to/from R (via rpy2) with copy only on push to R -- this seems necessary.
When kernel is died and restarted, or restarted while it is in the
busy state, message "(Busy)" on the window title is not updated. This
problem is fixed by updating document title when restarting.
it seem that show and hide methods fron tooltip where collinding with
jquery, sometime blocking the notebook.
Move from css fadeIn/Out to jQuery fade In/Out, and replace
addRemoveClass by fadeIn/fadeOut
For security reasons, the kernel should not be started until
after the notebook content is completely loaded and on the page.
This prevents people from creating notebooks that run nasty code
on the users machine at load time.
In order to implement this, we had to create a CodeCell.set_kernel
method that allows the kernel attribute of a CodeCell to be set
at a later time. This also fixes some error messages we were
seeing related to the kernel's channels not being setup properly
when a send was attempted.
Use notification to quicky remind use of the tooltip
Use javascript in notebook to make a live demo in
01_notebook_introduction
tooltip docstring is remplaceid for the first use by a live tutorial
I had removed the choice for the user to not restart a dead kernel
but we are using that elsewhere. Eventually we may not give them
a choice, but for now we will use that model.
* Kernel doesn't depend on Notebook or CodeCell.
* CodeCell doesn't depend on Notebook, only Kernel.
* All of the kernel management logic has been moved out of the
Notebook into the Kernel.
* Public methods of the Kernel (execute, complete, etc) take
a callbacks object that registers the callbacks for that msg.
(rebased, cherrypicked, by Bussonnier Matthias <bussonniermatthias@gmail.com>)
(and tabs removed)
Conflicts:
IPython/frontend/html/notebook/static/js/codecell.js
IPython/frontend/html/notebook/static/js/completer.js
IPython/frontend/html/notebook/static/js/tooltip.js
consecutives tab pressing with tooltip does :
- fisrt : show it
- second : expand it
- third : make it sticky for 10s (typing wont dismiss it)
- forth : send the content into the Pager
Completion source based on context is smarter and use codemirror token
mecanisme to propose completions, instead of just plitting text at
whitespace and before dots.
more feature like
-completion based on 2 sources :
* introspection in kernel
* context of current cell (complete with matching words)
* each source has its color in the completer
Warn on nonexistent exclusions in iptest. This will help us avoid common and often baffling errors from simple typos, as well as keeping the exclusions list updated as the code evolves.
Dashboard improvement
see #1658#1676
Allow to shutdown the kernels from the dashboard,
autorefresh dashboard,
add a native upload method, especially for https/chrome/linux that prevent drag and drop
Cython related magic functions: offers the new cell magics %%cython_inline, %%cython_pyximport and %%cython to make it very easy to put cython-accelerated code in a cell and have it loaded interactively.
ENH: Open a notebook from the command line
open notebook files from the command line, just
like ipython can open (run) python files. For example:
ipython notebook foo.ipynb
closes#945
This commit lets you open notebook files from the command line, just
like ipython can open (run) python files. For example:
ipython notebook foo.ipynb
Fixes#945.
Resizing to small collapse the pager keeping the size to at least 20%
height
(trying to) resize a collapsed pager to more than 10% "expand" it.
Pager can remember it size when toggling by clicking.
clear In[] prompt numbers on "Clear All Output"
For more version-control-friendly `.ipynb` files, this strips the `In[]` prompt numbers when doing a "Clear all output". This reduces the amount of noise in commit-to-commit diffs that would otherwise show the (highly variable) prompt number changes.
* 2.1.7 (earliest dep) will simply not work, so skip it
* 2.1.9-10 log the interrupts, so add a short delay to ensure the log
messages don't come after the prompt.
rename plaintext cell -> raw cell
Raw cells should be *untransformed* when writing various output formats, as the point of them is to let users pass through IPython to their rendered document format (rst, latex, etc.). This is different from what is the logical meaning of 'plaintext', which would suggest that the contents should be preserved as unformatted plaintext (e.g. in a `<pre>` tag, or literal block).
In the UI, these cells will be displayed as 'Raw Text'.
WARNING: any existing v3 notebooks which use plaintext cells, when read in by versions after this merge, will silently rename those cells to 'raw'. But if such a notebook is uploaded into a pre-merge IPython, cells labeled as 'raw' will simply *not be displayed*.
small changes in response to pyflakes pass
Only significant change: removes incomplete kernelstarter file, which shouldn't have been in the repo at all.
closes#1499
clear_output improvements, which allow things like progress bars and other simple animations to work well in the notebook.
* `clear_output()` clears the line, even in terminal IPython, the QtConsole and plain Python as well, by printing `\r` to streams.
* `clear_output()` avoids the flicker in the notebook by adding a delay, and firing immediately upon the next actual display message.
* `display_javascript` hides its `output_area` element, so using display to run a bunch of javascript doesn't result in ever-growing vertical space.
This reduces flicker during common loops like:
for step in stuff:
clear_output()
print something
the timeout is flushed *immediately* on any subsequent output.
ensures that config loading matches what would happen in ipcluster.
The only change needed in IPClusterStart itself was moving the on_stop registration from init_launchers to start_controller, where it should have been anyway.
* Created new base page html/css/js.
* Everything inherits from the page template.
* Universal header border.
* Notebook list borders are set to 1px all around.
* No border around notebook area.
* Border cleanup of toolbar/menubar.
* Lots of code reorg to get ready for further refactoring.
This exposes ipcluster's over the web. The current implementation
uses IPClusterLauncher to run ipcluster in a separate process.
Here is the URL scheme we are using:
GET /clusters => list available clusters
GET /cluster/profile => list info for cluster with profile
POST /cluster/profile/start => start a cluster
POST /cluster/profile/stop => stop a cluster
Amazon CloudFront (MathJax's CDN) supports HTTPS, but their SSL certificate only applies to *.cloudfront.net urls. This retrieves the cloudfront host at runtime, and loads MathJax from there via HTTPS.
adds new `NotebookApp.browser` configurable and corresponding `--browser` alias for specifying which browser should be launched with the notebook landing page.
Safari still uses draft76, and Tornado 2.2.0 release disables the
access from the draft version by default for security reasons.
This simply sets the tornado flag to True, so we can continue
to support Safari until it upgrades to the RFC 6455 implementation.
Python < 2.6.5 doesn't accept unicode keys in f(**kwargs), and
base_project_url will always be unicode, which will in turn
make the patterns unicode, and ultimately result in unicode
keys in kwargs to handler._execute(**kwargs) in tornado.
This enforces that base_project_url be ascii in that situation.
Note that the URLs these patterns check against are escaped,
and thus guaranteed to be ASCII: 'héllo' is really 'h%C3%A9llo'.
If you actually use u'héllo' in your regex, it will not match the URLs
you think it should.
1. Users are warned when an older nbformat notebook is converted.
2. The notebook notifies the user when a notebook that is too new
is attempted to load.
To test these things, create a simple notebook. Then change its
nbformat field by hand to 2 (to test 1) and then 4 (to test 2).
Pressing TAB to get the tooltip "range(TAB" was inserting a TAB.
To get rid of this we are now telling CodeMirror to ignore it
and also stopping the event from bubbling up the DOM.
* Refactored the save widget so that the notebook doesn't depend
on it. Now the notebook emits events and the save widget
observes those events.
* Created a new event system for all IPython events (events.js).
We should start to use this to allow our classes to be loosely
coupled.
* Created a new notification widget that should be used for all
notifications. Uses new event system.
* Removed the kernel status widget.
* All kernel status message use new event/notification system.
* The print notebook view works again.
* json separator is not ',' to avoid adding extra space at EOL.
* vs used throughout nbformat.current.
* Cell collapse is properly loaded from notebook.
Make Control-S (or Cmd-S on Apple) save the actual notebook instead of bringing up the useless 'save as html' dialog. This doesn't disable the C-m-s keybinding, simply adds the far more familiar and common C-s.
We are adding a thin horizontal toolbar below the menubar. This
commit adds the basic UI elements. Still need to hook up the actions
and make this hidable.
The notebook js transforms ANSI-escaped text to HTML. The transformed HTML was previously persisted to ipynb files, rather than the true output. This has been fixed, and notebooks with ANSI-colored output will need to be re-run for colored output (tracebacks) to be displayed correctly after this change.
Updating CodeMirror to the latest dev master.
We had found a bug in CodeMirror that was forcing us to call refresh/focus/refresh on Firefox. This bug was fixed upstream. This PR pull in the latest CM with the bug fix and removes the extra refresh calls. All known CM bugs should be fixed, yeh!
Removing Ace edit capability.
We have fixed some of the problems with CodeMirror and feel that
the differences between Ace and CodeMirror are not great enough
to justify having both. We may reintroduce a full-window edit
mode using CodeMirror, but that will come separately.
We have fixed some of the problems with CodeMirror and feel that
the differences between Ace and CodeMirror are not great enough
to justify having both. We may reintroduce a full-window edit
mode using CodeMirror, but that will come separately.
somwhere in renaming `selected_cell` to `get_selected_cell` one
occurence has been forgoten in `codecell.js` this was mainly visible by
the fact that the 'show pager' button of the tooltip was non fonctionnal
anymore.
This updates CodeMirror and refactors a good bit of the notebook code related to it.
* Updated CodeMirror to the latest stable release.
* Fix numerous bugs related to the CM update.
* Refactored the Cell API and the notebook's cell handling methods.
* Generalized split/merge to work with all cell types.
* Generalized "Edit in Ace" to work with all cell types.
* Loading optimizations: pager starts out hidden, faster loads.
* Shading added to Markdown and HTML cells when they are being edited.
* This branch will require solid usability testing on Safari, FF and Chrome before merging.
* Fixed a number of CM related bugs.
* Merge/split works for all cell types.
* Notebook.select won't select an already selected cell.
* Bugs in markdown cell editing fixed.
* border-box-sizing used for Markdown cells to get correct css boxes.
* Shading/border added to Markdown cell editor.
* Cell insertion code completely rewritten. We now have two methods
rather than 9: insert_cell_above, insert_cell_below.
* Renaming methods to be more consistent.
* Creating new methods to provide a uniform API.
* Minor bug fixes.
* Added placeholder to the base Cell class.
* Removed the \u0000 char at the beginning of the TextCell
placeholder that was there for a CodeMirror bug workaround.
* Other refactoring of Cell related Notebook methods.
* Added set_text/get_text in favor of get_code/set_code and
get_source/set_source.
* Added methods to the base class (get_text, set_text, refresh,
edit, render, toJSON, fromJSON).
When enabling paste, I was adding the click callback multiple
times causing paste to overwrite multiple cells. I also found
a bug that was doing paste above instead of paste below.
* QuickHelp button has been removed in favor of a Help menu item.
* Keyboard shortcuts are now in the menus.
* Numerous fixes to subtle aspects of the wijmenu implementation.
* edit text cells on double-click instead of single-click
* render text cells on unselect instead of focusout.
Only renders when selecting another cell, and prevents rendering when
switching applications/windows/tabs.
Single-click to edit gets in the way of using interactive elements (e.g. non-flash videos),
and select/copy of the rendered HTML. Switching to double-click makes the edit action more intentional.
adds AuthenticatedFileHandler, which extends StaticFileHandler with
a simple authentication check before providing access to files local
to the notebook dir.
Heartbeats start immediately, causing false heart failures on slow systems that can take a while to start kernel subprocesses.
Also adds a 'flush' to the heartbeat callback (just like in IPython.parallel), to protect against server load being detected as heart failures.
Kernels would not linger, but the KernelManagers are not garbage-collected on shutdown.
This means that connection files for kernels still running at notebook shutdown would not be removed.
Also disable the unnecessary (and actively unhelpful) SIGINT handler inherited from the original
copy/paste from the qt app.
Change Notebook logo to IP[y]:Notebook
Make it clickable to return to the dashboard
Thanks to @MinRK for the css.
closes#607
png logo is 48px high (2x display), for balance of
browser display / zoomed appearance.
settings for tornado web application can now be specified via the
NotebookApp.webapp_settings configurable. This principally allows
users/admins to serve custom templates, css, and javascript, without
having to modify IPython's shipped sources.
closes#1135
Following @fperez advice, change the completer apparence to avoid user confusion.
- Append what the user type in the completer in code-miror, (Almost) as if
codemirror still have focus
- distinguish between "fixed" completion part, which was sent to the kernel
(now written in bold) and filtering one,handled only in JS,that the user
can errase without dismissing the completer
I changed the action of <Space> to dismiss the completer with what have
already been typed and inserting a space instead of "picking" the currently
hilighted option
<Escape> will still dissmiss the completer and remove everything the user as
typed since the completer invocation
Note that while the completer is shown, code-mirror does not show any
blinking cursor
- dissmiss the completer, append what alredy type, **Plus** one caracter in
some cases
List of special caracter that are handle are in a given list `()[]./\-+`
for the moment. usefull for exaple when typing :
>>> np.s<tab>in(
and not having to type '(' twice.
they are handle separately has the [a-zA-Z] ones because otherwise they
will screw up the regexp, and are opt-in to avoid bugs with invisible
caracters send because some browser have 'keypress' event for meta keys
close#1080
Note to this commit :
list of test for the completer across browser with --pylab=inline flag
#test direct one completion
plt.an<tab> -> plt.annotate
#test filter,tab, only one completion
plt.a<tab>n<tab> -> plt.annotate
# test partial common beggining
# test dismmised if user erase
plt.a<tab>nn<backspace><backspace>u<tab> -> completer to `aut`
........................................<tab><tab><tab> -> nothing should append
.......................................................<backspace><backspace<backspace> -> completer cancelled
#test dismiss if no more completion
plt.s<tab>c -> completer 3 choices
...........u -> dismissed whith what user have typed. `plt.scu`
# test dismiss in no completion, special symbol
# opt-in list of caracters +-/\()[].
np<tab>.s -> a 'dot' sould dismiss the completer and be appended
.........<tab>in( -> np.sin(
np.s<tab>in[ -> np.sin[
allow the notebook to run without MathJax
adds --no-mathjax flag for disabling mathjax, and moves the mathjax URL decision to the server from the browser.
closes#1071
prototype functions were actually called which should not happen, and
resulted in objects and their attributes being passed to their own methods
as arguments.
* use jQuery syntax to construct dialog
* server determines where MathJax comes from via mathjax_url configurable (default local/CDN priority unchanged)
* add `--no-mathjax` flag for disabling mathjax in the notebook server
* A jQuery dialog with our 'no mathjax' message will appear if mathjax is unavailable, but the notebook will be fully functional after dismissal.
* Various calls to MathJax.Hub.typeset moved to Cell.typeset, which checks for MathJax existence and is a no-op without it.
closes#1071