Git Product home page Git Product logo

nbpresent's Introduction

nbpresent

Build Status (Lin64) Build Status (Win64) Coverage Status

remix your Jupyter Notebooks as interactive slideshows

Using

After installing (and potentially enabling) as appropriate for your environment, relaunch the Jupyter Notebook: in the main toolbar, you will get two new buttons that toggle the Authoring and Presenting modes.

User Documentation and Community

When Authoring, you can click on the (?) icon to see a number of in-Notebook guided tours that show all the features, as well as see links to community pages:

  • mailing list for general or long-term discussion and announcements
  • issues for technical issues, as well as feature requests
  • chat for quickly connecting with other users

Related Projects

Publishing

When you are happy with your presentation, you can download the standalone HTML file from the File -> Download as -> Presentation (.html) menu item.

Install

Note: installing directly off this repo won't work, as we don't ship the built JavaScript and CSS assets. See more about developing below.

pip

pip install nbpresent
jupyter nbextension install nbpresent --py --overwrite
jupyter nbextension enable nbpresent --py
jupyter serverextension enable nbpresent --py

conda

conda install -c conda-forge nbpresent

This will enable the nbpresent nbextension and serverextension automatically!

Export

HTML

Stock nbconvert doesn't store quite enough information, so you'll need to do something like this:

nbpresent -i notebooks/README.ipynb -o README.html

The resulting file can be hosted and viewed (but not edited!) on any site.

You can also pass in and get back streams:

cmd_that_generates_ipynb | nbpresent > README.html

PDF (Experimental)

If you have installed nbbrowserpdf, you can also export to pdf:

nbpresent -i notebooks/README.ipynb -f pdf -o README.pdf

Here's the whole doc:

!nbpresent --help
usage: nbpresent [-h] [-i IPYNB] [-o OUTFILE] [-f {html,pdf}]

Generate a static nbpresent presentation from a Jupyter Notebook

optional arguments:
  -h, --help            show this help message and exit
  -i IPYNB, --ipynb IPYNB
                        Input file (otherwise read from stdin)
  -o OUTFILE, --outfile OUTFILE
                        Output file (otherwise write to stdout)
  -f {html,pdf}, --out-format {html,pdf}
                        Output format

Develop

This assumes you have cloned this repository locally:

git clone https://github.com/Anaconda-Platform/nbpresent.git
cd nbpresent

Repo Architecture

The nbpresent nbextension is built from ./src into ./nbpresent/static/nbresent with:

  • less for style
  • es6 (via babel) for javascript
  • browserify for packaging

The nbpresent python module (server component) is stored in the /nbpresent folder

Getting Started

You'll need conda installed, either from Anaconda or miniconda. You can create a Python development environment named nbpresent from ./environment.yml.

conda create -n nbpresent python=YOUR_FAVORITE_PYTHON
conda update env
source activate nbpresent

We still use npm for a lot of dependencies, so then run:

npm install

Finally, you are ready to build the assets!

npm run build

Ensure development asset loading

To ensure that you always get the right assets, install the nbextension with the symlink options:

jupyter nbextension install nbpresent --overwrite --symlink --sys-prefix
jupyter nbextension enable nbpresent --sys-prefix
jupyter serverextension enable nbpresent --sys-prefix

See chore automation below for more good times.

Chore Automation

Task Command
Build all of the front end assets with sourcemaps for development npm run build
Rebuild on every save npm run watch
Rebuild all of the front end assets, and optimize it npm run dist
Run the CasperJS and nose tests npm run test
Check code style npm run lint
Build and upload the pypi test package npm run pkg:pypi
Build and upload the pypi release package npm run pkg:pypi:release
Build the ESDoc and Sphinx documentation npm run docs

Changelog

3.0.2

3.0.1

  • minor build changes

3.0.0

  • Update to notebook 4.2

2.0.0

  • Theme editor removed. Significant work required to stabilize to public release quality.
  • Adding some themes extracted from reveal.js

1.1.1

  • fixing enabling on windows with nb_config_manager 0.1.3
  • trimming down conda packages
  • more reproducible builds

1.1.0 (Unreleased)

  • fixing issue with slides without regions and some layouts crashing editor #58
  • adding JS extensibility of themes (partial #44)

1.0.0

  • Theme editor
  • Much more consistent UI
  • Mnay bug fixes and more testing

nbpresent's People

Contributors

bollwyvl avatar damianavila avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nbpresent's Issues

Move examples to separate repo, binderize

Each extra notebook with embedded stuff carries cost in package size, etc.

Further, since the development steps to go from repo to usable package are rather involved, there's no reason to make mybinder.org do that in their docker infrastructure if we're already automatically building packages.

Let's create an nbpresent-examples repo like bokeh-notebooks, with a binder (#27) using an environment.yml pointing at the built nbpresent to bring in third party libraries will lighten the base development environment considerably.

Tour de nbpresent: screenplay

Use bootstrap tour to walk through the key functionality of nbpresent.

Here's the notebook tour.

One approach would just be to start with the content/data screenplay, and build up a src/yml/tour.yml with the text and order of steps. I might have to do some work to get the selectors to all work, so it might be a sec before we start thinking about clicking buttons, etc: we can add the onShow later. At that point, we can basically do a self-building presentation.

There are some other UI things to think about as well, which might as well be discussed here:

  • does the tour show up unbidden the first time?
  • how do i hide it forever?
  • how do i get it back after hiding it forever?
  • do we want to integrate the functionality into the slides themselves: do baobab stuff on onShow

@tonyfast

add opacity for backgrounds, fonts

There will be times when someone wants to mix a busy background with a tint to make it into an interesting, but not distracting background.

Further, some font effects could be pretty nice if they had some alpha.

Create Binder

Binder is the best way to expose potential users to the full capability of nbpresent.

  • Remove existing Dockerfile
  • Create new Dockerfile FROM binder-base
  • Create index.ipynb
  • Put in some whizzy stuff

Package review comments

I just did a quick review of the package (not code level, but packaging), and noticed a few things:

Default content size

My largest, and perhaps the only stumbling stone with nbpresent so far is the scales of everything. Since the presentation css is the same (?) as in the notebook, most things are tiny in a slideshow.

It would be great if sizes were somehow possible to adjust. (Or am I missing something obvious, and the option is already there?)

Add URL router for deeplinking, start presenting, run-all

As a user, I want to be able to bookmark a particular slide in a presentation, and have it

  • start presenting
  • run all the cells?
  • immediately go to the slide I link

It should be possible to deep link to a particular slide, either:

  • explicitly: #slide/u-u-i-d
  • loosely: #slide/0
  • named: #slide/title-slide (most work, but probably the best, long-term)

Since many rich presentations may require execution (e.g. connect widgets), and should be run-allable, we'd need some way to specify this:

http://localhost:8888/notebooks/presentation.ipynb#!slide/title-slide

This would allow a user to:

  • link to a particular slide from another slide, creating a "table of contents" for a long presentation
  • share a link to a meaningful place

This should all work for the static HTML case, as well as the interactive case... so obviously run-all wouldn't matter.

delete behavior

The trash can icon is consistently used across the UI to delete things: Slides, regions, themes, colors, backgrounds.

However, it's pretty much an aw, crap moment when the delete occurs.

Two possible approaches:

  • have a consistent confirmation ui (i.e. a drawer, a modal (gah)) for confirming the delete
  • expose the history, and allow undelete: might have to do a better job of making sure that a delete is atomic so that bringing it right back is not going to leave weird pointers.

content import: themes, slides, cell parts

As a User, I want to reuse slides, cell content, backgorunds, themes, fonts from one or more other presentations

Many types of things should be importable:

  • slides
  • cell parts (crazy)
  • themes
    • palettes
    • fonts
    • backgrounds

Basically, it should be possible to either use an URL or a drag-dropped .ipynb to import all (or part of) that type of data into the appropriate place in the UI.

two types of import should be possible (and potentially not mutually exclusive):

  • link, where a url is maintained. could be relative, i.e. ./theme.ipynb
  • embed, where the full content is loaded

Once loaded, imported content should either be:

  • locked (used totally by reference)
  • copied (i.e. changeable, no longer updateable)
  • patched (i.e. import this slide layout, make region 2 50% smaller)

Discuss options for extension install on a per-user basis or per-conda-environment

My sense is that we want all extensions to be installed "globally" which will, in fact, mean "in the current conda environment". Ideally we'd like to be able to pass settings through so a user had an option of installing it on a "per user" basis, but then it will be installed outside of conda and will be in all Jupyter instances, which might be problematic.

conda recipe

I've started on a conda recipe.

I'd like it to do all of my npm scut work for me, but there appear to be some issues as it doesn't look like everything gets installed. Any thoughts, @damianavila?

Lacking static content

It seems some files are missing from v0.5 (or paths aren't updated in install.py):

>  python3 -m nbpresent.install

Traceback (most recent call last):
  File "/usr/lib/python3.4/runpy.py", line 170, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.4/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/usr/local/lib/python3.4/dist-packages/nbpresent/install.py", line 120, in <module>
    install(**parser.parse_args().__dict__)
  File "/usr/local/lib/python3.4/dist-packages/nbpresent/install.py", line 40, in install
    install_nbextension(directory, **kwargs)
  File "/usr/local/lib/python3.4/dist-packages/notebook/nbextensions.py", line 220, in install_nbextension
    _maybe_copy(src, full_dest, verbose)
  File "/usr/local/lib/python3.4/dist-packages/notebook/nbextensions.py", line 50, in _maybe_copy
    if _should_copy(src, dest, verbose):
  File "/usr/local/lib/python3.4/dist-packages/notebook/nbextensions.py", line 37, in _should_copy
    if os.stat(src).st_mtime - os.stat(dest).st_mtime > 1e-6:
FileNotFoundError: [Errno 2] No such file or directory: '/usr/local/lib/python3.4/dist-packages/nbpresent/static/nbpresent'

import existing (RISE) slideshow as nbpresent

User story

As a RISE user, I want to try out my existing slides as an nbpresent presentation.

Tasks

  • load //cell/*/metadata/slideshow into //metadata/nbpresent/slides/*
    • I don't think these need to be bidrectional at this point?
    • re-implement the cell->((sub)slide|fragment|note) stream mechanism
    • allow for "whole" cell part (js/css)
  • ui
    • opt-in for translation?
      • might as well be automatic (without saving), with a toast notification
    • notes
    • fragment build
    • up/down slides
    • navigator (blarg)
    • verify mathjax

most of the esoteric reveal functions were hard to get to short of direction use of the API (background, parallax, autoplay, themes), so such features can be deferred.

Undo functionality

A number of users have complained of not having undo.

Baobabjs supports undo, so it should be relatively easy to add undo, though redo is harder.

Some research is needed to determine the different user activities that would would be undoable steps, as the atomic changes are too small for a user to usefully use.

Themes

This is more of a placeholder/discussion than an actual issue.

Lessons Learned

revealjs themes are not customizable enough unless the user is a CSS/SCSS/HTML/JS ninja.

The nbpresent theming UX will need to be basically an in-browser design suite with access to fonts, colors and metrics all stored in metadata, scaling from "style all h1, h2, h3 with Lato" to "the font size should be increased until an optimal reading width of 45-75 characters is acheived for this block".

Theme Composability

"A Theme" is probably composed of a number of design rules (themelets? effects?) that apply to different regions. At the deck, slide or region level, the active rules can be enabled. disabled, tweaked or reordered.

Theme Reversability

When switching between notebook editing (i.e. working) and slide designing and presenting, the slide themes must not "leak" into the normal authoring experience. For css, this means we can't just dump the whole css, a la reveal.

Deck Theming

A presentation will have one or more base themes that all slides and regions inherit. Thus, you can set the "title font" and have all titles get that styling. Among the only things that would be only at the deck level would be, if desirable, the "remote" that lets you switch cells, etc. Moving this to, say, an SVG would be nice.

Slide Theming

Separate from the deck, each slide should be able to specify its own theme, defaulting to the deck theme. Among the things here would be backgrounds and gross transitions a la reveal/ppt.

Region Theming

The things that actually get colors, fonts, etc. These might also have per-state-change transitions.

Theme vs Layout

There will be an interplay between themes and layout: the size of a piece of text may drive how large it appears in the layout. This might have to wait until we have a layout solver (i.e. kiwijs) but there are probably some simple things that can be done. Typography should drive this interplay, which will be expensive to calculate, probably, but absolutely critical to actually building better presentations.

Shipped vs Standalone Theme

We will want to ship/maintain a very limited number of themes (like 2) so that there is something to look at. Beyond the "unthemed" default (inheriting the notebook theme), probably a "dark" theme, and a "boring" theme. While limited and boring, they will set the stage for additional themes, establishing the metadata conventions so that users don't have to rearchitect their content when they change their themes.

Standalone themes would (at first) probably by other python modules that we can discover, but eventually would be npm modules.

Cross-Theme Consistency

When switching between two themes (or selecting them to start with), there should be good correspondence. Doing this with good URIs, with useful descriptions will help.

theme names should be visible

The themes need to have visible names. Seeing the color palate and sizing is valuable, but secondary. I think name, colors, fonts are the important pieces for theme selection.

avoid using "colour" module in Importing%20revealjs%20themes.ipynb

The colour module doesn't appear to be part of the standard conda installation. Please consider rewriting the Importing%20revealjs%20themes.ipynb notebook not to use it. If you are only dealing with #abc and #aabbcc style RGB specs, you could just use a simple function like

c_re = re.compile('^#([A-Fa-f0-9]{3}|[A-Fa-f0-9]{6})$')

def repeat_chars(s,k):
    return ''.join(c*k for c in s)

def v2color(v):
    m = c_re.search(v)
    if not m:
        return None
    rgb = m.group(1)
    if len(rgb) == 3:
        rgb = repeat_chars(rgb,2)
    return tuple(int(rgb[k:k+2],16) for k in xrange(0,6,2))

Tour too fast.

The automatic play is too fast.

Also clicking on next/prev should leave on "Pause" if the user have pressed Pause.

builds are really big

I think some node_modules are slipping in. Probably don't need to ship the reference screenshots either... unless they are needed in the docs.

The next release needs to strip these out.

  • fix MANIFEST.in

add contraint-based layout

A constraint-based layout, a la kiwi.js, would be extremely powerful.

with it, one could do all the vertical aligning and stuff that people would expect from a layout program.

By letting the "natural" size of the cell part (as determined by typography) drive its position, it would be possible to do some very good reusable layouts that were more reactive to the content provided by the user.

release 0.4.2 on conda/pypi

This is the follow-on to #29. Since no new features were added and the public API didn't change, I think this should be 0.4.2, and not 0.5.0. Could be argued otherwise!

Slides do not reorder correctly

When I drag slides left and right to reorder them a few things happen
(1) The Your Slides window hangs
(2) The slides do reorder, but not in "Your Slides", even if the kernel is restarted. In fact, if I flip through the slides, the orange box jumps around in "Your Slides". This means I cannot change the order a second time!

Install fails using Conda anaconda-nb-extensions channels

OS: OSX
Py2.7

`โžœ ~ conda install -c anaconda-nb-extensions nbpresent
Fetching package metadata: ......
Solving package specifications: ................................................
Package plan for installation in environment /Users/scollis/anaconda:

The following NEW packages will be INSTALLED:

nbpresent: 1.0.0-py27_0

Proceed ([y]/n)? y

Linking packages ...
copying /Users/scollis/anaconda/lib/python2.7/site-packages/nbpresent-1.0.0-py2.7.egg/nbpresent/static/nbpresent -> /Users/scollis/anaconda/share/jupyter/nbextensions/nbpresent
Traceback (most recent call last):
File "/Users/scollis/anaconda/lib/python2.7/runpy.py", line 162, in _run_module_as_main
"main", fname, loader, pkg_name)
File "/Users/scollis/anaconda/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/Users/scollis/anaconda/lib/python2.7/site-packages/nbpresent-1.0.0-py2.7.egg/nbpresent/install.py", line 112, in
install(**parser.parse_args().dict)
File "/Users/scollis/anaconda/lib/python2.7/site-packages/nbpresent-1.0.0-py2.7.egg/nbpresent/install.py", line 39, in install
install_nbextension(directory, **kwargs)
File "/Users/scollis/anaconda/lib/python2.7/site-packages/notebook/nbextensions.py", line 220, in install_nbextension
_maybe_copy(src, full_dest, verbose)
File "/Users/scollis/anaconda/lib/python2.7/site-packages/notebook/nbextensions.py", line 53, in _maybe_copy
shutil.copy2(src, dest)
File "/Users/scollis/anaconda/lib/python2.7/shutil.py", line 130, in copy2
copyfile(src, dst)
File "/Users/scollis/anaconda/lib/python2.7/shutil.py", line 82, in copyfile
with open(src, 'rb') as fsrc:
IOError: [Errno 2] No such file or directory: u'/Users/scollis/anaconda/lib/python2.7/site-packages/nbpresent-1.0.0-py2.7.egg/nbpresent/static/nbpresent'
Error: Error: post-link failed for: nbpresent-1.0.0-py27_0 | 0%
โžœ`

Conda env:
` ~ conda update conda
Fetching package metadata: ....

All requested packages already installed.

packages in environment at /Users/scollis/anaconda:

conda 3.19.3 py27_0 `

Support key navigation and exit

When "viewing" an nbpresent notebook it would be nice if arrow keys could advance slides and ESC could return to notebook editor mode.

optional font embedding

Right now, the offline view is "broken" as it doesn't embed fontawesome, even though everything works fine. Nickle fix there would be to leave some CDN fallback in.

Further, all the webfont stuff is handled by webfontloader, which is good for sharing, but bad for archiving.

At the time of import, we probably have enough information in the browser to capture and base64 the font (preferably woff/2) and the font css, and embed it in metadata.

The exporter would then need to be able to embed that as data uris, but this is likely solveable.

As this would entail a fair amount of data, it would be best to make this an opt-in feature, potentially one that one only picks when choosing to export, i.e.

Download as...
  Presentation (.html)
  Archive Presentation (big) (.html)

Of course, the joke is always that the first image someone loads would be bigger than the biggest font, but still.

Suport offline (kernel-disconnected) HTML

Use nbconvert to generate a standalone HTML document with enough dependencies:

  • load from CDN
  • load from cannonical location (nbextensions)
  • customizable prefix
  • inline bundle

Caveats:

  • no widgets (thebe? tmpnb? binder?)

This will require:

  • jinja2 template
    • add metadata for each cell inside cell node?
    • or just data-nbpresent-id attribute (current approach)
  • Exporter
    • inlining (plugins?)

Present experiments pointing to problems with requirejs build: mismatched anonymous define.

maximized slide sorter view

At present, the slide sorter is pretty inflexible, just offering horizontal scrolling through the slides.

A direction forward would be a view that put all the slides on a grid (or something else, if we do subslides) which can be reordered in two dimensions.

Further, being able to "combine" slides should be possible: drag a slide "onto" a NSEW of another slide, and it would be split, adding the new content in.

This view would be particularly useful when content import is a thing.

add reorderable regions in slide editor

Regions just kind of end up in the order in which they arrive.

They should be reorderable, such that one could have some more control over, say, some widgets appearing over some output generated by them (i.e. bokeh).

Errors from the repo and also using the conda package...

$ python -m nbpresent.install --prefix="${CONDA_ENV_PATH}" --enable
copying /media/data/devel/continuum/notebook/nbpresent/nbpresent/static/nbpresent/nbpresent.standalone.min.js -> /home/damian/miniconda3/envs/nbpresent/share/jupyter/nbextensions/nbpresent/nbpresent.standalone.min.js
copying /media/data/devel/continuum/notebook/nbpresent/nbpresent/static/nbpresent/nbpresent.min.css -> /home/damian/miniconda3/envs/nbpresent/share/jupyter/nbextensions/nbpresent/nbpresent.min.css
copying /media/data/devel/continuum/notebook/nbpresent/nbpresent/static/nbpresent/nbpresent.min.js -> /home/damian/miniconda3/envs/nbpresent/share/jupyter/nbextensions/nbpresent/nbpresent.min.js
copying /media/data/devel/continuum/notebook/nbpresent/nbpresent/static/nbpresent/nbpresent.notebook.min.js -> /home/damian/miniconda3/envs/nbpresent/share/jupyter/nbextensions/nbpresent/nbpresent.notebook.min.js
copying /media/data/devel/continuum/notebook/nbpresent/nbpresent/static/nbpresent/nbpresent.deps.min.js -> /home/damian/miniconda3/envs/nbpresent/share/jupyter/nbextensions/nbpresent/nbpresent.deps.min.js
Enabling for /home/damian/miniconda3/envs/nbpresent/etc/jupyter
Enabling nbpresent server component...
(nbpresent)damian-S400CA :: /media/data/devel/continuum/notebook/nbpresent :: (master)
$ jupyter notebook
[W 17:35:01.865 NotebookApp] Unrecognized JSON config file version, assuming version 1
[W 17:35:01.868 NotebookApp] Unrecognized JSON config file version, assuming version 1
[I 17:35:02.340 NotebookApp] The port 8888 is already in use, trying another random port.
[W 17:35:02.431 NotebookApp] Error loading server extension nbpresent
    Traceback (most recent call last):
      File "/home/damian/miniconda3/envs/nbpresent/lib/python3.4/site-packages/notebook/notebookapp.py", line 991, in init_server_extensions
        mod = importlib.import_module(modulename)
      File "/home/damian/miniconda3/envs/nbpresent/lib/python3.4/importlib/__init__.py", line 109, in import_module
        return _bootstrap._gcd_import(name[level:], package, level)
      File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
      File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
      File "<frozen importlib._bootstrap>", line 2224, in _find_and_load_unlocked
    ImportError: No module named 'nbpresent'
[I 17:35:02.449 NotebookApp] Serving notebooks from local directory: /media/data/devel/continuum/notebook/nbpresent
[I 17:35:02.450 NotebookApp] 0 active kernels 
[I 17:35:02.450 NotebookApp] The IPython Notebook is running at: http://localhost:8889/
[I 17:35:02.450 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
Created new window in existing browser session.
[W 17:35:05.294 NotebookApp] 404 GET /clusters?_=1448570104770 (127.0.0.1) 16.59ms referer=http://localhost:8889/tree
[I 17:35:45.713 NotebookApp] Creating new notebook in 
[I 17:35:47.424 NotebookApp] Kernel started: ed8a9195-b0dc-48f9-bcd8-fb4deded1c39
[W 17:35:54.111 NotebookApp] 404 GET /static/components/backbone/backbone-min.map (127.0.0.1) 2.78ms referer=None
[I 17:36:06.322 NotebookApp] Kernel shutdown: ed8a9195-b0dc-48f9-bcd8-fb4deded1c39
[W 17:36:06.326 NotebookApp] delete /Untitled.ipynb

I have two error here:

  1. Unrecognized JSON config file version, assuming version 1
  2. ImportError: No module named 'nbpresent'

When I tried the conda package from anaconda.org/nbcio I am seeing 1 but not 2... but even with the conda package I can not see the extension...

Starting from the repo I followed the lines you sent in the email last week...

@bollwyvl

Copy slide

A commonly used element in presentations is revealing additional content on a slide. Right now the only way to do it is to fully copy a slide, and link a region which was previously empty to a new element.

While this is a universal approach, right now the amount of clicking required to copy a slide is 2 for copying the layout + 2 * number of linked regions for linking. Perhaps an easy solution would be to change "reuse slide as template" to "reuse slide". The logic here is that changing a link is as much work as making a new link, so it doesn't hurt if a newly created slide already has stuff pre-filled.

Executing a cell with no output needs a visual queue

Some cells "do stuff" without producing output. If "doing stuff" either has a non-negligible chance of silent failure; "run forever" risk; or "takes more than 3 seconds to complete" some kind of visual queue as to the state of the "executed" cell would be valuable. In a normal notebook view the "prompt" on the left side performs this duty: blank means un-executed, star means "executing" (though possibly stuck), and a number means "executed/done". I don't know exactly what the right answer here is, but an idea:

  • play button to indicate a cell can be executed (and clicking this will be the same as SHIFT-ENTER)
  • hour-glass in place of star to indicate "executing"
    • perhaps with a mouse-over effect of (X) or ([]) (X or Square button) which will cancel execution of that cell
  • green check-mark when cell completes successfully
  • red X if cell is aborted or fails

add reorderable backgrounds in theme editor

Right now, when you create a background, it will cover over all previous backgrounds (alpha channel included, but moot for colors).

By making them drag/droppable or with up down buttons, controlling this stack would be easy.

In the data layer, themes.theme.*.backgrounds is a list, so that could just be reordered with splices... or just a big set. Or, we could go to the more customary model and use a keyed tree and a linked list (again for the atomicity).

pdf output

This is the issue I should have made for #16.

Print-quality PDF output is really important to people being able to confidently use presentations they generate in the wild world of the notebook, as well as make handouts, etc. in critical environments like meetings and conferences, as well as read-ahead. The current Latex approach is pretty good at capturing a stream-based document, but without a serious retooling, most people will have limited success with beamer, etc.

Further, Notebook developers are always using the craziest things (WebGL, etc) to make really cool stuff. Given the HTML/JS/CSS environment becoming the de facto experience, the offline mode should mirror this as closely as possible.

The resulting PDF should:

  • high resolution
  • include all the fonts, etc. needed render the asset.
  • optionally include the original ipynb in a reconstitutable form
  • include widgets!
  • allow for multiple page sizes and orientations

Due to the inevitable requirement for a more-or-less real web browser, this will likely need to be hidden behind an install flag.

link region with layout to each output/widget of a cell

At present, we can show "all the outputs of a cell" or "all the widgets of a cell" in a region.

However, the DOM would support rejiggering each of the .output_areas or widget that might have been serially displayed. Now, we can't let people start talking about output[0] but we can talk about 0 or more outputs.

With this, one could do a masonry-style layout, a treemap, a carousel (arg) or other kind of user- or data-driven layout, such that:

[display(Image(img) for img in glob("*.png"))]

would create a nice space-filling packing of the outputs.

The PART would probably be output and widget (vs outputs and widgets) and would take some more precise selector work.

Further, one still wouldn't be able to put output and outputs from a single cell on a single slide, but that seems reasonable.

clicking on a theme multiple times keeps adding it

I don't totally understand the theme feature: it appears I can click on multiple themes and they all get added, and moreover I can click on the same theme multiple times and it appears to be added multiple times.

I can't see how to have more than one theme in effect for the entire presentation (and right now I'm not sure it is a good idea that we try to support more than one), so it seems like theme selection, for the time being, should be a matter of picking one theme only.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.