revealhelp.py
62 lines
| 2.6 KiB
| text/x-python
|
PythonLexer
MinRK
|
r18580 | """Module that pre-processes the notebook for export via Reveal.""" | ||
Jonathan Frederic
|
r10674 | |||
MinRK
|
r18580 | # Copyright (c) IPython Development Team. | ||
# Distributed under the terms of the Modified BSD License. | ||||
Jonathan Frederic
|
r10674 | |||
Paul Ivanov
|
r12219 | from .base import Preprocessor | ||
Thomas Kluyver
|
r13397 | from IPython.utils.traitlets import Unicode | ||
damianavila
|
r11181 | |||
Jonathan Frederic
|
r10674 | |||
Paul Ivanov
|
r12219 | class RevealHelpPreprocessor(Preprocessor): | ||
Jonathan Frederic
|
r10437 | |||
MinRK
|
r12443 | url_prefix = Unicode('reveal.js', config=True, | ||
MinRK
|
r12439 | help="""The URL prefix for reveal.js. | ||
This can be a a relative URL for a local copy of reveal.js, | ||||
or point to a CDN. | ||||
MinRK
|
r12443 | For speaker notes to work, a local reveal.js prefix must be used. | ||
MinRK
|
r12439 | """ | ||
) | ||||
damianavila
|
r11179 | |||
Paul Ivanov
|
r12219 | def preprocess(self, nb, resources): | ||
Jonathan Frederic
|
r10674 | """ | ||
Paul Ivanov
|
r12219 | Called once to 'preprocess' contents of the notebook. | ||
damianavila
|
r11183 | |||
Jonathan Frederic
|
r10674 | Parameters | ||
---------- | ||||
nb : NotebookNode | ||||
Notebook being converted | ||||
resources : dictionary | ||||
Additional resources used in the conversion process. Allows | ||||
Paul Ivanov
|
r12219 | preprocessors to pass variables into the Jinja engine. | ||
Jonathan Frederic
|
r10674 | """ | ||
damianavila
|
r11183 | |||
MinRK
|
r18580 | for index, cell in enumerate(nb.cells): | ||
#Make sure the cell has slideshow metadata. | ||||
cell.metadata.slide_type = cell.get('metadata', {}).get('slideshow', {}).get('slide_type', '-') | ||||
# Get the slide type. If type is start, subslide, or slide, | ||||
# end the last subslide/slide. | ||||
if cell.metadata.slide_type in ['slide']: | ||||
nb.cells[index - 1].metadata.slide_helper = 'slide_end' | ||||
if cell.metadata.slide_type in ['subslide']: | ||||
nb.cells[index - 1].metadata.slide_helper = 'subslide_end' | ||||
# Prevent the rendering of "do nothing" cells before fragments | ||||
# Group fragments passing frag_number to the data-fragment-index | ||||
if cell.metadata.slide_type in ['fragment']: | ||||
nb.cells[index].metadata.frag_number = index | ||||
i = 1 | ||||
while i < len(nb.cells) - index: | ||||
nb.cells[index + i].metadata.frag_helper = 'fragment_end' | ||||
nb.cells[index + i].metadata.frag_number = index | ||||
i += 1 | ||||
# Restart the slide_helper when the cell status is changed | ||||
# to other types. | ||||
if cell.metadata.slide_type in ['-', 'skip', 'notes', 'fragment']: | ||||
nb.cells[index - 1].metadata.slide_helper = '-' | ||||
damianavila
|
r11183 | |||
Jonathan Frederic
|
r12143 | if not isinstance(resources['reveal'], dict): | ||
damianavila
|
r11184 | resources['reveal'] = {} | ||
damianavila
|
r11183 | resources['reveal']['url_prefix'] = self.url_prefix | ||
Jonathan Frederic
|
r10674 | return nb, resources | ||