Commit Graph

772 Commits

Author SHA1 Message Date
Fernando Perez
160ff3145c Match the max tooltip and bottom area sizes in the notebook.
This prevents the tooltip from going below the bottom of the page,
which makes it inaccessible by any mechanism and thus useless.
2011-11-27 19:49:00 -08:00
Fernando Perez
e1feef907a Merge pull request #1036 from stefanv/javascript_cleanup
Clean up javascript based on js2-mode feedback.
2011-11-27 15:29:48 -08:00
Stefan van der Walt
6ffc2ffd4b Clean up javascript based on js2-mode feedback. 2011-11-27 15:23:40 -08:00
Fernando Perez
58b2fd5eca Merge pull request #1052 from fperez/pylab-fix
Fix bug in pylab support introduced in #648, and refactor the pylab/gui support to eliminate a lot of code duplication we had in a number of places. 

Now all duplicate code is gone, and the only real difference is how gui event loops are integrated, which is reduced to a single static method that each relevant class grabs from its specific machinery.
2011-11-27 00:52:12 -08:00
Fernando Perez
983b3a7bc8 Fix inline backend logic and avoid tests if mpl not available. 2011-11-27 00:28:26 -08:00
Bussonnier Matthias
ea32220f8f fix firefox (windows) break line on empty prompt number 2011-11-25 15:07:34 -08:00
Thomas Kluyver
9ab78ba545 Merge branch 'flush' 2011-11-24 22:00:25 +00:00
Thomas Kluyver
6ae0797040 Notebook: don't change cell when selecting code using shift+up/down.
Closes gh-787; closes gh-1038 (rebased to prevent recursive merge).
2011-11-24 13:34:04 -08:00
Fernando Perez
4bd904c7ee Merge pull request #987 from Carreau/notebook-tooltip
Add function call tooltips to html notebook.  

On open parens, if the user either pauses a bit or hits <tab>, a tooltip appears, with buttons to expand it further (and automatic scroll bars), open the help in the full pager and close.
2011-11-24 11:30:38 -08:00
Matthias BUSSONNIER
52d8a125dd fix 2 typos 2011-11-24 19:49:03 +01:00
Matthias BUSSONNIER
c2070df52d handle empty docstring 2011-11-24 19:46:55 +01:00
Matthias BUSSONNIER
7650f444ea tooltip height in % 2011-11-24 19:42:26 +01:00
Matthias BUSSONNIER
bc5aeebd11 handle null objectname on tooltip 2011-11-24 19:36:20 +01:00
Matthias BUSSONNIER
e380aba1e0 Change tooltip button to use jquery css 2011-11-24 07:57:42 +01:00
Matthias BUSSONNIER
73f252676f show tooltip if completer 'fail' afer n attempt
if completer get only one match back and the user press tab n time,
	it fallbacks on showing a tooltip

	n=2 , hard coded for know, and completer verbose on the command line
2011-11-24 07:57:42 +01:00
Matthias BUSSONNIER
7285968e18 improve tooltip
put "close" and "more..." button in upper right corner,
	rename "more..." to "open in pager", add expand button.

	tooltip don't have scroll bar an are 'small' until pressing "Expand"
	they then change their height and add scrollbars.
	Horizontal scrollbar behaviour seem to depend on the browser
	>>> plot(<tab> and then click on "expand" :
	Firefox : no horizontal scrollbar (wrap line ?)
	Chrome  : horizontal scrollbar

	beware that don't limitting tooltip height or width through css will sometime give
	tooltip that are too heigh and will overflow below the bottom of the screen

	animation are broken with max-height and/or min-height
2011-11-24 07:57:42 +01:00
Matthias BUSSONNIER
aa24495b5b add 'more...' and 'close' button to the pager
'more...' button execute 'foo?' **On the behalf of the current cell**
	which increase it's prompt number to the curent value, and give focus back
2011-11-24 07:57:41 +01:00
Matthias BUSSONNIER
01a0c126d4 Replace trigering tooltip for cross platform indep
For opening bracket '(' keyCode/keydown is not sufficient because it depends
	on keyboard layout so rely on charcode/keypress ...
2011-11-24 07:57:41 +01:00
Matthias BUSSONNIER
558c4cab8e fix timebeforetooltip span and css 2011-11-24 07:57:41 +01:00
Matthias BUSSONNIER
7600221d1c smart kwarg completion
change order of completion element so that the ones ending with '='
	will be at the beginning of the list. When you complete inside a
	fonction call, you then have kwargs first add configuration in the left
	pannel
2011-11-24 07:57:41 +01:00
Matthias BUSSONNIER
2637d3c0e4 Make the time before activating a tooltip configurable
add a section in the left pannel of the notebook to make the time before
	triggering a tooltip when pressign "(" configurable.  Negative values will
	disable the tooltip (comparaison at each keypress for now, but can be
	improved) The syle of the <input> field should be a little improve, why not
	a slider with jquerry
2011-11-24 07:57:41 +01:00
Matthias BUSSONNIER
6c86474bdb Improve tooltip tringgering,make it configurable
As until now, when pressing tab and a white space was preceding the cursor
	The completion was triggerd with the whole namespace in it. Now if a
	whitespace or an opening bracket is just befor the cursor it will try to
	display a tooltip. The logic to find what object_info_request is send have
	been sightly changed to try to match the expression just before the last
	unmached openig bracket before the cursor (without considering what is
	after the cursor).

	example (_|_ represent the cursor):
	>>> his_|_<tab> # completion
	>>> hist(_|_<tab> # tooltip on hist
	>>> hist(rand(20),bins=range(_|_ <tab> #tooltip on range
	>>> hist(rand(20),bins=range(10), _|_ <tab> # tooltip on hist (whitespace before cursor)
	>>> hist(rand(20),bins=range(10),_|_ <tab> # completion

	as we dont care of what is after the cursor:

	>>> hist(rand(5000), bins=50, _|_orientaion='horizontal') # and tab, equivalent to
	>>> hist(rand(5000), bins=50, _|_<tab> # onte the space again
	>>> hist(_|_rand(5000), bins=50, orientaion='horizontal') # and tab, equivalent to
	>>> hist(_|_

	the 4 give tooltip on hist

	note that you can get tooltip on things that aren't function by appending a
	'(' like

	>>> matplotlib(<tab>

	Which is kinda weird... so we might want to bound another shortcut for
	tooltip, but which matches without bracket...

	additionnaly I have added a "Config" pannel in the left pannel with a checkbox
	bind to wether or not activate this functionnality

	Note, (rebase and edited commit, might not work perfetly xwithout the following ones)
2011-11-24 07:57:41 +01:00
Matthias BUSSONNIER
45db8cce13 tooltip on <tab> 2011-11-24 07:57:41 +01:00
Matthias BUSSONNIER
3053ec9f9b Add Tootip to notebook.
When user press '(' and nothing for 1200ms, 'object_info_request' sent to
	the kernel. Then tooltip with 'definition' and beggining of 'docstring'
	 shown to the user if non empty response.

	Unlike Completion <select> , <div> is not focusable so event handled in main
	cell event handeling function

	Add some CSS3 that most browser with websocket should support.
2011-11-24 07:57:41 +01:00
Matthias BUSSONNIER
38cd955d8d update copyright to 2011/20xx-2011
Closes #1033 (rebased to prevent recursive merge). Closes #2.

	459  *.py files in :
	 39  empty files
	176  files without copyright
	 36  have copyright but don't cite the dev team
	208  have copyright and cite the dev team
	-----------------------------------------
	  0  not up to date (cite dev team but not right year)

	  FYI, list of files that don't have copyright (and are not empty..)

 [
 'IPython/config/profile/cluster/ipython_config.py',
 'IPython/config/profile/math/ipython_config.py',
 'IPython/config/profile/pylab/ipython_config.py',
 'IPython/config/profile/pysh/ipython_config.py',
 'IPython/config/profile/python3/ipython_config.py',
 'IPython/config/profile/sympy/ipython_config.py',
 'IPython/core/shadowns.py',
 'IPython/core/tests/refbug.py',
 'IPython/core/tests/simpleerr.py',
 'IPython/core/tests/tclass.py',
 'IPython/core/tests/test_application.py',
 'IPython/core/tests/test_autocall.py',
 'IPython/core/tests/test_completer.py',
 'IPython/core/tests/test_fakemodule.py',
 'IPython/core/tests/test_formatters.py',
 'IPython/core/tests/test_handlers.py',
 'IPython/core/tests/test_history.py',
 'IPython/core/tests/test_imports.py',
 'IPython/core/tests/test_iplib.py',
 'IPython/core/tests/test_logger.py',
 'IPython/core/tests/test_magic.py',
 'IPython/core/tests/test_plugin.py',
 'IPython/core/tests/test_prefilter.py',
 'IPython/core/tests/test_profile.py',
 'IPython/core/tests/test_run.py',
 'IPython/core/tests/test_splitinput.py',
 'IPython/deathrow/astyle.py',
 'IPython/deathrow/dtutils.py',
 'IPython/deathrow/Gnuplot2.py',
 'IPython/deathrow/GnuplotInteractive.py',
 'IPython/deathrow/GnuplotRuntime.py',
 'IPython/deathrow/gui/wx/ipshell_nonblocking.py',
 'IPython/deathrow/gui/wx/ipython_history.py',
 'IPython/deathrow/gui/wx/thread_ex.py',
 'IPython/deathrow/ibrowse.py',
 'IPython/deathrow/igrid.py',
 'IPython/deathrow/ipipe.py',
 'IPython/deathrow/ipy_defaults.py',
 'IPython/deathrow/ipy_kitcfg.py',
 'IPython/deathrow/ipy_legacy.py',
 'IPython/deathrow/ipy_p4.py',
 'IPython/deathrow/ipy_profile_none.py',
 'IPython/deathrow/ipy_profile_numpy.py',
 'IPython/deathrow/ipy_profile_scipy.py',
 'IPython/deathrow/ipy_profile_sh.py',
 'IPython/deathrow/ipy_traits_completer.py',
 'IPython/deathrow/ipy_vimserver.py',
 'IPython/deathrow/numeric_formats.py',
 'IPython/deathrow/oldfrontend/process/__init__.py',
 'IPython/deathrow/oldfrontend/wx/ipythonx.py',
 'IPython/deathrow/scitedirector.py',
 'IPython/deathrow/tests/test_prefilter.py',
 'IPython/deathrow/twshell.py',
 'IPython/extensions/__init__.py',
 'IPython/extensions/autoreload.py',
 'IPython/extensions/storemagic.py',
 'IPython/extensions/tests/test_autoreload.py',
 'IPython/external/__init__.py',
 'IPython/external/argparse/__init__.py',
 'IPython/external/decorator/__init__.py',
 'IPython/external/decorators/__init__.py',
 'IPython/external/decorators/_decorators.py',
 'IPython/external/decorators/_numpy_testing_noseclasses.py',
 'IPython/external/decorators/_numpy_testing_utils.py',
 'IPython/external/guid/__init__.py',
 'IPython/external/Itpl/__init__.py',
 'IPython/external/mglob/__init__.py',
 'IPython/external/mglob/_mglob.py',
 'IPython/external/path/__init__.py',
 'IPython/external/path/_path.py',
 'IPython/external/pexpect/__init__.py',
 'IPython/external/pyparsing/__init__.py',
 'IPython/external/qt.py',
 'IPython/external/qt_for_kernel.py',
 'IPython/external/simplegeneric/__init__.py',
 'IPython/external/simplegeneric/_simplegeneric.py',
 'IPython/frontend/html/notebook/__init__.py',
 'IPython/frontend/html/notebook/tests/test_kernelsession.py',
 'IPython/frontend/qt/base_frontend_mixin.py',
 'IPython/frontend/qt/console/ansi_code_processor.py',
 'IPython/frontend/qt/console/bracket_matcher.py',
 'IPython/frontend/qt/console/call_tip_widget.py',
 'IPython/frontend/qt/console/completion_lexer.py',
 'IPython/frontend/qt/console/completion_widget.py',
 'IPython/frontend/qt/console/console_widget.py',
 'IPython/frontend/qt/console/history_console_widget.py',
 'IPython/frontend/qt/console/ipython_widget.py',
 'IPython/frontend/qt/console/kill_ring.py',
 'IPython/frontend/qt/console/mainwindow.py',
 'IPython/frontend/qt/console/pygments_highlighter.py',
 'IPython/frontend/qt/console/qtconsoleapp.py',
 'IPython/frontend/qt/console/rich_ipython_widget.py',
 'IPython/frontend/qt/console/styles.py',
 'IPython/frontend/qt/console/tests/test_ansi_code_processor.py',
 'IPython/frontend/qt/console/tests/test_completion_lexer.py',
 'IPython/frontend/qt/console/tests/test_kill_ring.py',
 'IPython/frontend/qt/kernelmanager.py',
 'IPython/frontend/qt/rich_text.py',
 'IPython/frontend/qt/svg.py',
 'IPython/frontend/qt/util.py',
 'IPython/kernel/__init__.py',
 'IPython/lib/clipboard.py',
 'IPython/lib/display.py',
 'IPython/lib/irunner.py',
 'IPython/lib/security.py',
 'IPython/lib/tests/test_imports.py',
 'IPython/lib/tests/test_irunner.py',
 'IPython/lib/tests/test_irunner_pylab_magic.py',
 'IPython/lib/tests/test_security.py',
 'IPython/nbformat/v1/tests/nbexamples.py',
 'IPython/nbformat/v1/tests/test_json.py',
 'IPython/nbformat/v1/tests/test_nbbase.py',
 'IPython/nbformat/v2/tests/nbexamples.py',
 'IPython/nbformat/v2/tests/test_json.py',
 'IPython/nbformat/v2/tests/test_nbbase.py',
 'IPython/nbformat/v2/tests/test_nbpy.py',
 'IPython/quarantine/clearcmd.py',
 'IPython/quarantine/envpersist.py',
 'IPython/quarantine/ext_rescapture.py',
 'IPython/quarantine/ipy_app_completers.py',
 'IPython/quarantine/ipy_completers.py',
 'IPython/quarantine/ipy_editors.py',
 'IPython/quarantine/ipy_exportdb.py',
 'IPython/quarantine/ipy_extutil.py',
 'IPython/quarantine/ipy_fsops.py',
 'IPython/quarantine/ipy_gnuglobal.py',
 'IPython/quarantine/ipy_jot.py',
 'IPython/quarantine/ipy_lookfor.py',
 'IPython/quarantine/ipy_profile_doctest.py',
 'IPython/quarantine/ipy_pydb.py',
 'IPython/quarantine/ipy_rehashdir.py',
 'IPython/quarantine/ipy_render.py',
 'IPython/quarantine/ipy_server.py',
 'IPython/quarantine/ipy_signals.py',
 'IPython/quarantine/ipy_synchronize_with.py',
 'IPython/quarantine/ipy_system_conf.py',
 'IPython/quarantine/ipy_which.py',
 'IPython/quarantine/ipy_winpdb.py',
 'IPython/quarantine/ipy_workdir.py',
 'IPython/quarantine/jobctrl.py',
 'IPython/quarantine/ledit.py',
 'IPython/quarantine/win32clip.py',
 'IPython/testing/mkdoctests.py',
 'IPython/testing/plugin/dtexample.py',
 'IPython/testing/plugin/ipdoctest.py',
 'IPython/testing/plugin/iptest.py',
 'IPython/testing/plugin/setup.py',
 'IPython/testing/plugin/show_refs.py',
 'IPython/testing/plugin/simple.py',
 'IPython/testing/plugin/simplevars.py',
 'IPython/testing/plugin/test_ipdoctest.py',
 'IPython/testing/plugin/test_refs.py',
 'IPython/testing/skipdoctest.py',
 'IPython/testing/tests/test_decorators.py',
 'IPython/utils/autoattr.py',
 'IPython/utils/nested_context.py',
 'IPython/utils/pickleshare.py',
 'IPython/utils/py3compat.py',
 'IPython/utils/PyColorize.py',
 'IPython/utils/rlineimpl.py',
 'IPython/utils/strdispatch.py',
 'IPython/utils/tempdir.py',
 'IPython/utils/tests/test_imports.py',
 'IPython/utils/tests/test_wildcard.py',
 'IPython/utils/upgradedir.py',
 'IPython/zmq/completer.py',
 'IPython/zmq/displayhook.py',
 'IPython/zmq/entry_point.py',
 'IPython/zmq/frontend.py',
 'IPython/zmq/iostream.py',
 'IPython/zmq/ipkernel.py',
 'IPython/zmq/log.py',
 'IPython/zmq/parentpoller.py',
 'IPython/zmq/pykernel.py',
 'IPython/zmq/pylab/backend_inline.py',
 'IPython/zmq/zmqshell.py'
 ]
2011-11-23 18:02:27 -08:00
Matthias BUSSONNIER
645183e51d Intercept <esc> avoid closing websocket on Firefox
Closes #1031; closes #1032 (rebased and fixed tiny typo)
2011-11-23 17:58:21 -08:00
Fernando Perez
899630a5f9 Merge pull request #1030 from minrk/pyzmq
Use pyzmq tools when available instead of duplicating functionality.

ZMQStream is the right object to use for event-driven handling of messages, but instead we had a duplication of half of it in KernelManager.

Also use the pyzmq install() function for using the pyzmq eventloop with tornado, instead of copying its contents into notebookapp.
2011-11-22 20:52:27 -08:00
MinRK
8e2758c0ce don't assume ioloop.install is defined (pyzmq < 2.1.7) 2011-11-22 19:50:19 -08:00
MinRK
d94d6dbffa use pyzmq tools where appropriate
ZMQStream is the right object to use for event-driven handling of messages, but instead we chose to rewrite half of it in KernelManager.

This removes most of the duplicate code, in favor of using ZMQStream.

also use the pyzmq install() function for using pyzmq with tornado, instead of manually pasting its contents in notebook app.
2011-11-22 15:18:18 -08:00
MinRK
e54c05dd21 explicitly ignore iopub messages not associated with a cell in the notebook
An error would previously be raised whenever iopub traffic arrived that
did not originate with the notebook (e.g. pylab welcome, or qtconsole output).

This error was not in a block that would actually cause problems, so actual
functionality was not affected.
2011-11-21 11:20:58 -08:00
Fernando Perez
1e9cee6f10 Merge branch 'logout_button' of https://github.com/stefanv/ipython into stefanv-logout_button
Add a logout button to authenticated notebooks.  This has no impact on
regular (non-authenticated) notebooks.
2011-11-20 15:10:48 -08:00
Stefan van der Walt
9488b364fc Hide logout button on unauthenticated notebook. 2011-11-20 00:16:45 -08:00
MinRK
70de13a394 add Integer traitlet
Most int traits are now Integers

Integer differs from Long only in that small `long`s are cast to `int`, rather than
all `int`s being cast to `long`:

    Integer(4L) => 4
    Long(4) => 4L

closes gh-942, closes gh-996.

Rebased to avoid recursive merge for just one commit.
2011-11-19 22:17:54 -08:00
Fernando Perez
2a9ae4ee37 Fix failing doctests and post correct example of passwd() usage. 2011-11-18 20:20:57 -08:00
Fernando Perez
b4b1ad3dd5 Merge pull request #1011 from stefanv/salted_password
Add hashing of passwords to notebook configuration.  

From now on, we do NOT support plain text passwords in the notebook configuration file, only hashed ones.

To create a properly hashed password, you can use `IPython.lib.security.passwd()`.

Written with Mateusz Paprocki (@mattpap at github).
2011-11-18 18:49:25 -08:00
Stefan van der Walt
d031f2b359 Only show logout button if logged in. 2011-11-18 17:18:41 -08:00
Stefan van der Walt
0a41777a8d Add info, error and warning message boxes. 2011-11-18 17:12:52 -08:00
Stefan van der Walt
3b6c151b72 Add logout button. 2011-11-18 16:59:48 -08:00
Stefan van der Walt
c4b7ee1a75 Use template inheritance. 2011-11-18 13:17:36 -08:00
Stefan van der Walt
15520ba820 Notify user about invalid password. 2011-11-18 12:04:17 -08:00
Stefan van der Walt
b2972a7e98 Integrate hashed passwords into the notebook. 2011-11-18 10:53:09 -08:00
Pablo Winant
f2f715beb6 Latexify formulas contained in html text.
closes gh-994
2011-11-14 20:02:24 -08:00
Fernando Perez
1bb4c726c3 Merge pull request #955 from minrk/websocket
Websocket fixes:

1. alert client on failed and lost web socket connections

A long message is given if the connection fails within 1s, which assumes the connection did not succeed. Otherwise, it is a short 'connection closed unexpectedly'.

This also means that clients are notified on server termination (for better or worse).

2. remove superfluous ws-hostname parameter from notebook

This made the notebook server artificially and unnecessarily brittle against tunneling and explicit hostname resolution.  Now, the ws_url is defined based on the Origin of the request for the url, so it always matches the http[s] url.  This means that it will follow the same tunnel, and the hostname will be already resolved.  Resolving the hostname twice makes no sense at all unless the websockets are going to a different server than the http requests.

Implemented as a property, so it should still be easy to change for future cases where it might behave differently (e.g. websockets on a different host, or at a non-root url).
2011-11-10 19:31:27 -08:00
MinRK
a4b6d6bb9f don't use Origin header to determine ws_url 2011-11-10 19:01:44 -08:00
Fernando Perez
3ce05b61d7 Merge pull request #981 from minrk/nblines
Split likely multiline text when writing JSON notebooks, and reduce indentation in the JSON file to 1 space per level.

These changes are aimed at making the notebook files more friendly to use in version-control environments.  With multiline blocks split as lines, diffs will be much more readable (version control systems think in terms of lines as their atomic unit).  And reducing the amount of indentation will also make code blocks easier to read without unnecessary scrolling.
2011-11-10 15:21:27 -08:00
MinRK
7519ff3b41 split likely multiline strings when writing to/from JSON 2011-11-09 12:10:03 -08:00
Fernando Perez
8d739fb5a2 Fix CSS so word wrapping stays within output box. 2011-10-31 22:57:54 -07:00
Fernando Perez
a852c75dd7 Word-wrap output correctly in the notebook; prevents excessive scrolling.
Firefox seems to not honor it correctly, but Webkit browsers (Chrome,
rekonq, Safari) do.
2011-10-31 21:39:17 -07:00
MinRK
487d110557 use jQuery dialog instead of alert() 2011-10-31 19:07:25 -07:00
MinRK
b73d616279 alert client on failed and lost web socket connections
A long message is given if the connection fails within 1s.  Otherwise, it is a short 'connection closed unexpectedly'.

This also means that clients are notified on server termination.
2011-10-30 22:57:51 -07:00