From 477332696bffa1f52c35ebc5a4cd1dbac7c6b9ef Mon Sep 17 00:00:00 2001 From: Thomas Kluyver Date: Tue, 7 Feb 2017 15:37:09 +0000 Subject: [PATCH 1/2] Work on changelog for 5.0 We seem to have missed the extension that defines Github issue & PR links until now. --- .../_static/images/cell-tags-toolbar.png | Bin 0 -> 9386 bytes .../source/_static/images/shortcut-editor.png | Bin 0 -> 10039 bytes .../_static/images/table-style-change.png | Bin 0 -> 24936 bytes .../_static/images/table-style-change.xcf | Bin 0 -> 62923 bytes docs/source/changelog.rst | 94 +++++++---- docs/source/conf.py | 6 + docs/sphinxext/github.py | 157 ++++++++++++++++++ 7 files changed, 229 insertions(+), 28 deletions(-) create mode 100644 docs/source/_static/images/cell-tags-toolbar.png create mode 100644 docs/source/_static/images/shortcut-editor.png create mode 100644 docs/source/_static/images/table-style-change.png create mode 100644 docs/source/_static/images/table-style-change.xcf create mode 100644 docs/sphinxext/github.py diff --git a/docs/source/_static/images/cell-tags-toolbar.png b/docs/source/_static/images/cell-tags-toolbar.png new file mode 100644 index 0000000000000000000000000000000000000000..5058ef8727219baeb51abe4ad1c53ebf6d5d3753 GIT binary patch literal 9386 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 literal 0 HcmV?d00001 diff --git a/docs/source/_static/images/table-style-change.xcf b/docs/source/_static/images/table-style-change.xcf new file mode 100644 index 0000000000000000000000000000000000000000..dd34ce2652e0af5bd11680d82fc770d682cfb817 GIT binary patch literal 62923 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 literal 0 HcmV?d00001 diff --git a/docs/source/changelog.rst b/docs/source/changelog.rst index 0b6277dd5..56e2ad061 100644 --- a/docs/source/changelog.rst +++ b/docs/source/changelog.rst @@ -24,52 +24,90 @@ Upgrade to version 9+ of pip before upgrading ``notebook`` is strongly recommend .. _release-5.0.0: Notebook version 5.0 -==================== +-------------------- -This is the first major release of the Notebook Application and Server after -the version 4.0 created by the "Big Split" of IPython into IPython and Jupyter. +This is the first major release of the Jupyter Notebook since version 4.0 was +created by the "Big Split" of IPython and Jupyter. We encourage users to start trying JupyterLab in preparation for a future transition. -The Notebook Web Application and Server have seen more than 200 pull requests -merged since the 4.x series. This only covers a small subset of the new -features available on this new version; bugfixes are omitted. +We have merged more than 200 pull requests since the 4.x series. Some of the +major user-facing changes are described here. -- Dashboard/tree can now be ordered by ``last-modified`` and ``name``, - (:ghpull:`943`) +Cell tags +********* -- Keyboard shortcuts for command mode are now editable from within the UI, see - the ``Help > Edit Keyboard Shortcuts`` Menu item and follow instructions. - (:ghpull:`1347`) +There is a new cell toolbar for adding *cell tags* (:ghpull:`2048`): +.. image:: /_static/images/cell-tags-toolbar.png -- Markdown cells now supports attachments. Simply drag and drop an image from +Cell tags are a lightweight way to customise the behaviour of tools working with +notebooks; we're working on building support for them into tools like `nbconvert +`__ and `nbval +`__. + +The UI for editing cell tags is basic for now; we hope to improve it in future +releases. + +Table style +*********** + +The default styling for tables in the notebook has been updated (:ghpull:`1776`): + +.. image:: /_static/images/table-style-change.png + +Customise keyboard shortcuts +**************************** + +You can now edit keyboard shortcuts for command mode within the UI +(:ghpull:`1347`): + +.. image:: /_static/images/shortcut-editor.png + +See the ``Help > Edit Keyboard Shortcuts`` menu item and follow the instructions. + +Other additions +*************** + +- You can copy and paste cells between notebooks, using :kbd:`Ctrl-C` and + :kbd:`Ctrl-V` (:kbd:`Cmd-C` and :kbd:`Cmd-V` on Mac). + +- It's easier to configure a password for the notebook with the new + ``jupyter notebook password`` command (:ghpull:`2007`). + +- The file list can now be ordered by *last modified* or by *name* + (:ghpull:`943`). + +- Markdown cells now support attachments. Simply drag and drop an image from your desktop to a markdown cell to add it. Unlike relative links that you - enter manually, attachments are embedded in the notebook itself. A - non-referenced attachment will be automatically scrubbed from the notebook on - save. :ghpull:`621` + enter manually, attachments are embedded in the notebook itself. An + unreferenced attachment will be automatically scrubbed from the notebook on + save (:ghpull:`621`). +- Undoing cell deletion now supports undeleting multiple cells. Cells may not be + in the same order as before their deletion, depending on the actions you did + on the meantime, but this should should help reduce the impact of + accidentally deleting code. -- Undoing cell deletion now supports undeleting multiple cells. Cell may not be - in the same order as before their deletion depending on the actions you did - on the meantime, but this should should help minimize the impact of - accidental code deletion. +- The file browser now has *Edit* and *View* buttons. -- Dashboard now has ``edit`` and ``view`` buttons. +- The file browser now supports moving multiple files at once + (:ghpull:`1088`). -- The Dashboard/Tree view now supports moving multiple files at once. - :ghpull:`1088` +- The Notebook will refuse to run as root unless the ``--allow-root`` flag is + given (:ghpull:`1115`). -- Notebook refuses to run as root user (unless forced to) :ghpull:`1115` +- Keyboard shortcuts are now declarative (:ghpull:`1234`). -- Keyboard shortcuts are now declarative (:ghpull:`1234`) +- Toggling line numbers can now affect all cells (:ghpull:`1312`). -- Toggling line numbers can now affect all cells (:ghpull:`1312`) +- Add more visible *Trusted* and *Untrusted* notifications (:ghpull:`1658`). -- Add more visible ``Trusted`` and ``Untrusted`` notifications :ghpull:`1658` +- The tab icon in the browser now changes to indicate when the kernel is busy + (:ghpull:`1837`). -We remind readers that upgrading ``notebook`` only affect part of the user +Remember that upgrading ``notebook`` only affects the user interface. Upgrading kernels and libraries may also provide new features, better stability and integration with the notebook interface. @@ -161,7 +199,7 @@ Bug fixes: Other improvements: -- Allow JSON output data with mime type "application/*+json" +- Allow JSON output data with mime type ``application/*+json`` - Allow kernelspecs to have spaces in them for backward compat - Allow websocket connections from scripts - Allow :code:`None` for post_save_hook diff --git a/docs/source/conf.py b/docs/source/conf.py index f190444f5..c82a2344b 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -30,6 +30,8 @@ for item in sys.path: # add repo root to sys.path # here = root/docs/source here = os.path.abspath(os.path.dirname(__file__)) +sphinxext = os.path.join(os.path.dirname(here), 'sphinxext') +sys.path.insert(0, sphinxext) repo_root = os.path.dirname(os.path.dirname(here)) sys.path.insert(0, repo_root) @@ -70,6 +72,7 @@ extensions = [ 'sphinx.ext.mathjax', 'IPython.sphinxext.ipython_console_highlighting', 'nbsphinx', + 'github', ] # Add any paths that contain templates here, relative to this directory. @@ -91,6 +94,9 @@ project = 'Jupyter Notebook' copyright = '2015, Jupyter Team, https://jupyter.org' author = 'The Jupyter Team' +# ghissue config +github_project_url = "https://github.com/jupyter/notebook" + # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. diff --git a/docs/sphinxext/github.py b/docs/sphinxext/github.py new file mode 100644 index 000000000..8f0ffc0d9 --- /dev/null +++ b/docs/sphinxext/github.py @@ -0,0 +1,157 @@ +"""Define text roles for GitHub + +* ghissue - Issue +* ghpull - Pull Request +* ghuser - User + +Adapted from bitbucket example here: +https://bitbucket.org/birkenfeld/sphinx-contrib/src/tip/bitbucket/sphinxcontrib/bitbucket.py + +Authors +------- + +* Doug Hellmann +* Min RK +""" +# +# Original Copyright (c) 2010 Doug Hellmann. All rights reserved. +# + +from docutils import nodes, utils +from docutils.parsers.rst.roles import set_classes + +def make_link_node(rawtext, app, type, slug, options): + """Create a link to a github resource. + + :param rawtext: Text being replaced with link node. + :param app: Sphinx application context + :param type: Link type (issues, changeset, etc.) + :param slug: ID of the thing to link to + :param options: Options dictionary passed to role func. + """ + + try: + base = app.config.github_project_url + if not base: + raise AttributeError + if not base.endswith('/'): + base += '/' + except AttributeError as err: + raise ValueError('github_project_url configuration value is not set (%s)' % str(err)) + + ref = base + type + '/' + slug + '/' + set_classes(options) + prefix = "#" + if type == 'pull': + prefix = "PR " + prefix + node = nodes.reference(rawtext, prefix + utils.unescape(slug), refuri=ref, + **options) + return node + +def ghissue_role(name, rawtext, text, lineno, inliner, options={}, content=[]): + """Link to a GitHub issue. + + Returns 2 part tuple containing list of nodes to insert into the + document and a list of system messages. Both are allowed to be + empty. + + :param name: The role name used in the document. + :param rawtext: The entire markup snippet, with role. + :param text: The text marked with the role. + :param lineno: The line number where rawtext appears in the input. + :param inliner: The inliner instance that called us. + :param options: Directive options for customization. + :param content: The directive content for customization. + """ + + try: + issue_num = int(text) + if issue_num <= 0: + raise ValueError + except ValueError: + msg = inliner.reporter.error( + 'GitHub issue number must be a number greater than or equal to 1; ' + '"%s" is invalid.' % text, line=lineno) + prb = inliner.problematic(rawtext, rawtext, msg) + return [prb], [msg] + app = inliner.document.settings.env.app + #app.info('issue %r' % text) + if 'pull' in name.lower(): + category = 'pull' + elif 'issue' in name.lower(): + category = 'issues' + else: + msg = inliner.reporter.error( + 'GitHub roles include "ghpull" and "ghissue", ' + '"%s" is invalid.' % name, line=lineno) + prb = inliner.problematic(rawtext, rawtext, msg) + return [prb], [msg] + node = make_link_node(rawtext, app, category, str(issue_num), options) + return [node], [] + +def ghuser_role(name, rawtext, text, lineno, inliner, options={}, content=[]): + """Link to a GitHub user. + + Returns 2 part tuple containing list of nodes to insert into the + document and a list of system messages. Both are allowed to be + empty. + + :param name: The role name used in the document. + :param rawtext: The entire markup snippet, with role. + :param text: The text marked with the role. + :param lineno: The line number where rawtext appears in the input. + :param inliner: The inliner instance that called us. + :param options: Directive options for customization. + :param content: The directive content for customization. + """ + app = inliner.document.settings.env.app + #app.info('user link %r' % text) + ref = 'https://www.github.com/' + text + node = nodes.reference(rawtext, text, refuri=ref, **options) + return [node], [] + +def ghcommit_role(name, rawtext, text, lineno, inliner, options={}, content=[]): + """Link to a GitHub commit. + + Returns 2 part tuple containing list of nodes to insert into the + document and a list of system messages. Both are allowed to be + empty. + + :param name: The role name used in the document. + :param rawtext: The entire markup snippet, with role. + :param text: The text marked with the role. + :param lineno: The line number where rawtext appears in the input. + :param inliner: The inliner instance that called us. + :param options: Directive options for customization. + :param content: The directive content for customization. + """ + app = inliner.document.settings.env.app + #app.info('user link %r' % text) + try: + base = app.config.github_project_url + if not base: + raise AttributeError + if not base.endswith('/'): + base += '/' + except AttributeError as err: + raise ValueError('github_project_url configuration value is not set (%s)' % str(err)) + + ref = base + text + node = nodes.reference(rawtext, text[:6], refuri=ref, **options) + return [node], [] + + +def setup(app): + """Install the plugin. + + :param app: Sphinx application context. + """ + app.info('Initializing GitHub plugin') + app.add_role('ghissue', ghissue_role) + app.add_role('ghpull', ghissue_role) + app.add_role('ghuser', ghuser_role) + app.add_role('ghcommit', ghcommit_role) + app.add_config_value('github_project_url', None, 'env') + + metadata = {'parallel_read_safe': True, 'parallel_write_safe': True} + return metadata From d51fa4bec72743fbe1c975726bd6fcc64bb526f9 Mon Sep 17 00:00:00 2001 From: Thomas Kluyver Date: Tue, 7 Feb 2017 15:43:56 +0000 Subject: [PATCH 2/2] Centre images --- docs/source/changelog.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/source/changelog.rst b/docs/source/changelog.rst index 56e2ad061..99637d7e1 100644 --- a/docs/source/changelog.rst +++ b/docs/source/changelog.rst @@ -41,6 +41,7 @@ Cell tags There is a new cell toolbar for adding *cell tags* (:ghpull:`2048`): .. image:: /_static/images/cell-tags-toolbar.png + :align: center Cell tags are a lightweight way to customise the behaviour of tools working with notebooks; we're working on building support for them into tools like `nbconvert @@ -56,6 +57,7 @@ Table style The default styling for tables in the notebook has been updated (:ghpull:`1776`): .. image:: /_static/images/table-style-change.png + :align: center Customise keyboard shortcuts **************************** @@ -64,6 +66,7 @@ You can now edit keyboard shortcuts for command mode within the UI (:ghpull:`1347`): .. image:: /_static/images/shortcut-editor.png + :align: center See the ``Help > Edit Keyboard Shortcuts`` menu item and follow the instructions.