Skip to content

Commit

Permalink
reveal.js writer: better handling of options.
Browse files Browse the repository at this point in the history
Previously it was impossible to specify false values for
options that default to true; setting the option to false
just caused the portion of the template setting the option
to be omitted.

Now we prepopulate all the variables with their default
values, including them unconditionally and allowing them
to be overridden.
  • Loading branch information
jgm committed Jun 21, 2021
1 parent a39313e commit 14b2eb2
Show file tree
Hide file tree
Showing 2 changed files with 120 additions and 128 deletions.
198 changes: 70 additions & 128 deletions data/templates/default.revealjs
Original file line number Diff line number Diff line change
Expand Up @@ -90,256 +90,198 @@ $endif$
// Full list of configuration options available at:
// https://revealjs.com/config/
Reveal.initialize({
$if(center)$
// Determines whether slide content should be vertically centered
center: $center$,
$endif$
$if(controls)$
// Display controls in the bottom right corner
controls: $controls$,
$endif$
$if(controlsTutorial)$

// Help the user learn the controls by providing hints, for example by
// bouncing the down arrow when they first encounter a vertical slide
controlsTutorial: $controlsTutorial$,
$endif$
$if(controlsLayout)$

// Determines where controls appear, "edges" or "bottom-right"
controlsLayout: '$controlsLayout$',
$endif$
$if(controlsBackArrows)$

// Visibility rule for backwards navigation arrows; "faded", "hidden"
// or "visible"
controlsBackArrows: '$controlsBackArrows$',
$endif$
$if(progress)$

// Display a presentation progress bar
progress: $progress$,
$endif$
$if(slideNumber)$

// Display the page number of the current slide
slideNumber: $slideNumber$,
$endif$
$if(showSlideNumber)$

// 'all', 'print', or 'speaker'
showSlideNumber: '$showSlideNumber$',
$endif$

// Add the current slide number to the URL hash so that reloading the
// page/copying the URL will return you to the same slide
hash: $if(hash)$$hash$$else$true$endif$,
$if(hashOneBasedIndex)$
hash: $hash$,

// Start with 1 for the hash rather than 0
hashOneBasedIndex: $hashOneBasedIndex$,
$endif$
$if(history)$

// Flags if we should monitor the hash and change slides accordingly
respondToHashChanges: $respondToHashChanges$,

// Push each slide change to the browser history
history: $history$,
$endif$
$if(keyboard)$

// Enable keyboard shortcuts for navigation
keyboard: $keyboard$,
$endif$
$if(overview)$

// Enable the slide overview mode
overview: $overview$,
$endif$
$if(center)$

// Disables the default reveal.js slide layout (scaling and centering)
// so that you can use custom CSS layout
disableLayout: false,

// Vertical centering of slides
center: $center$,
$endif$
$if(touch)$

// Enables touch navigation on devices with touch input
touch: $touch$,
$endif$
$if(loop)$

// Loop the presentation
loop: $loop$,
$endif$
$if(rtl)$

// Change the presentation direction to be RTL
rtl: $rtl$,
$endif$
$if(navigationMode)$

// see https://revealjs.com/vertical-slides/#navigation-mode
navigationMode: '$navigationMode$',
$endif$
$if(shuffle)$

// Randomizes the order of slides each time the presentation loads
shuffle: $shuffle$,
$endif$
$if(fragments)$

// Turns fragments on and off globally
fragments: $fragments$,
$endif$
$if(fragmentInURL)$

// Flags whether to include the current fragment in the URL,
// so that reloading brings you to the same fragment position
fragmentInURL: $fragmentInURL$,
$endif$
$if(embedded)$

// Flags if the presentation is running in an embedded mode,
// i.e. contained within a limited portion of the screen
embedded: $embedded$,
$endif$
$if(help)$

// Flags if we should show a help overlay when the questionmark
// key is pressed
help: $help$,
$endif$
$if(pause)$
// Flags if it should be possible to pause the presentation (blackout)
pause: $pause$,
$endif$
$if(showNotes)$

// Flags if it should be possible to pause the presentation (blackout)
pause: $pause$,

// Flags if speaker notes should be visible to all viewers
showNotes: $showNotes$,
$endif$
$if(autoPlayMedia)$
// Global override for autoplaying embedded media (video/audio/iframe)
// - null: Media will only autoplay if data-autoplay is present
// - true: All media will autoplay, regardless of individual setting
// - false: No media will autoplay, regardless of individual setting

// Global override for autoplaying embedded media (null/true/false)
autoPlayMedia: $autoPlayMedia$,
$endif$
$if(preloadIframes)$
// Global override for preloading lazy-loaded iframes
// - null: Iframes with data-src AND data-preload will be loaded when within
// the viewDistance, iframes with only data-src will be loaded when visible
// - true: All iframes with data-src will be loaded when within the viewDistance
// - false: All iframes with data-src will be loaded only when visible

// Global override for preloading lazy-loaded iframes (null/true/false)
preloadIframes: $preloadIframes$,
$endif$
$if(autoSlide)$

// Number of milliseconds between automatically proceeding to the
// next slide, disabled when set to 0, this value can be overwritten
// by using a data-autoslide attribute on your slides
autoSlide: $autoSlide$,
$endif$
$if(autoSlideStoppable)$

// Stop auto-sliding after user input
autoSlideStoppable: $autoSlideStoppable$,
$endif$
$if(autoSlideMethod)$

// Use this method for navigation when auto-sliding
autoSlideMethod: $autoSlideMethod$,
$endif$
$if(defaultTiming)$

// Specify the average time in seconds that you think you will spend
// presenting each slide. This is used to show a pacing timer in the
// speaker view
defaultTiming: $defaultTiming$,
$endif$
$if(totalTime)$
// Specify the total time in seconds that is available to
// present. If this is set to a nonzero value, the pacing
// timer will work out the time available for each slide,
// instead of using the defaultTiming value
totalTime: $totalTime$,
$endif$
$if(minimumTimePerSlide)$
// Specify the minimum amount of time you want to allot to
// each slide, if using the totalTime calculation method. If
// the automated time allocation causes slide pacing to fall
// below this threshold, then you will see an alert in the
// speaker notes window
minimumTimePerSlide: $minimumTimePerSlide$,
$endif$
$if(mouseWheel)$

// Enable slide navigation via mouse wheel
mouseWheel: $mouseWheel$,
$endif$
$if(rollingLinks)$
// Apply a 3D roll to links on hover
rollingLinks: $rollingLinks$,
$endif$
$if(hideInactiveCursor)$

// The display mode that will be used to show slides
display: '$display$',

// Hide cursor if inactive
hideInactiveCursor: $hideInactiveCursor$,
$endif$
$if(hideCursorTime)$

// Time before the cursor is hidden (in ms)
hideCursorTime: $hideCursorTime$,
$endif$
$if(hideAddressBar)$
// Hides the address bar on mobile devices
hideAddressBar: $hideAddressBar$,
$endif$
$if(previewLinks)$

// Opens links in an iframe preview overlay
previewLinks: $previewLinks$,
$endif$
$if(transition)$
// Transition style
transition: '$transition$', // none/fade/slide/convex/concave/zoom
$endif$
$if(transitionSpeed)$
// Transition speed
transitionSpeed: '$transitionSpeed$', // default/fast/slow
$endif$
$if(backgroundTransition)$

// Transition style (none/fade/slide/convex/concave/zoom)
transition: '$transition$',

// Transition speed (default/fast/slow)
transitionSpeed: '$transitionSpeed$',

// Transition style for full page slide backgrounds
backgroundTransition: '$backgroundTransition$', // none/fade/slide/convex/concave/zoom
$endif$
$if(viewDistance)$
// (none/fade/slide/convex/concave/zoom)
backgroundTransition: '$backgroundTransition$',

// Number of slides away from the current that are visible
viewDistance: $viewDistance$,
$endif$
$if(mobileViewDistance)$

// Number of slides away from the current that are visible on mobile
// devices. It is advisable to set this to a lower number than
// viewDistance in order to save resources.
mobileViewDistance: $mobileViewDistance$,
$endif$
$if(parallaxBackgroundImage)$

// Parallax background image
parallaxBackgroundImage: '$parallaxBackgroundImage$', // e.g. "'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'"
$else$
$if(background-image)$

// Parallax background image
parallaxBackgroundImage: '$background-image$', // e.g. "'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'"
$endif$
$endif$
$if(parallaxBackgroundSize)$

// Parallax background size
parallaxBackgroundSize: '$parallaxBackgroundSize$', // CSS syntax, e.g. "2100px 900px"
$endif$
$if(parallaxBackgroundHorizontal)$

// Amount to move parallax background (horizontal and vertical) on slide change
// Number, e.g. 100
parallaxBackgroundHorizontal: $parallaxBackgroundHorizontal$,
$endif$
$if(parallaxBackgroundVertical)$

parallaxBackgroundVertical: $parallaxBackgroundVertical$,
$endif$
$if(width)$

// The "normal" size of the presentation, aspect ratio will be preserved
// when the presentation is scaled to fit different resolutions. Can be
// specified using percentage units.
width: $width$,
$endif$
$if(height)$

height: $height$,
$endif$
$if(margin)$

// Factor of the display size that should remain empty around the content
margin: $margin$,
$endif$
$if(minScale)$

// Bounds for smallest/largest possible scale to apply to content
minScale: $minScale$,
$endif$
$if(maxScale)$

maxScale: $maxScale$,
$endif$
$if(zoomKey)$
// Modifier key used to click-zoom to part of the slide
zoomKey: '$zoomKey$',
$endif$
$if(display)$
// The display mode that will be used to show slides
display: '$display$',
$endif$
$if(mathjax)$

math: {
mathjax: '$mathjaxurl$',
config: 'TeX-AMS_HTML-full',
Expand Down
50 changes: 50 additions & 0 deletions src/Text/Pandoc/Writers/HTML.hs
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,10 @@ pandocToHtml opts (Pandoc meta blocks) = do
| otherwise -> mempty
Nothing -> mempty
let mCss :: Maybe [Text] = lookupContext "css" metadata
let true :: Text
true = "true"
let false :: Text
false = "false"
let context = (if stHighlighting st
then case writerHighlightStyle opts of
Just sty -> defField "highlighting-css"
Expand Down Expand Up @@ -344,6 +348,52 @@ pandocToHtml opts (Pandoc meta blocks) = do
PlainMath -> defField "displaymath-css" True
WebTeX _ -> defField "displaymath-css" True
_ -> id) .
(if slideVariant == RevealJsSlides
then -- set boolean options explicitly, since
-- template can't distinguish False/undefined
defField "controls" true .
defField "controlsTutorial" true .
defField "controlsLayout" ("bottom-right" :: Text) .
defField "controlsBackArrows" ("faded" :: Text) .
defField "progress" true .
defField "slideNumber" false .
defField "showSlideNumber" ("all" :: Text) .
defField "hashOneBasedIndex" false .
defField "hash" false .
defField "respondToHashChanges" true .
defField "history" false .
defField "keyboard" true .
defField "overview" true .
defField "disableLayout" false .
defField "center" true .
defField "touch" true .
defField "loop" false .
defField "rtl" false .
defField "navigationMode" ("default" :: Text) .
defField "shuffle" false .
defField "fragments" true .
defField "fragmentInURL" true .
defField "embedded" false .
defField "help" true .
defField "pause" true .
defField "showNotes" false .
defField "autoPlayMedia" ("null" :: Text) .
defField "preloadIframes" ("null" :: Text) .
defField "autoSlide" ("0" :: Text) .
defField "autoSlideStoppable" true .
defField "autoSlideMethod" ("null" :: Text) .
defField "defaultTiming" ("null" :: Text) .
defField "mouseWheel" false .
defField "display" ("block" :: Text) .
defField "hideInactiveCursor" true .
defField "hideCursorTime" ("5000" :: Text) .
defField "previewLinks" false .
defField "transition" ("slide" :: Text) .
defField "transitionSpeed" ("default" :: Text) .
defField "backgroundTransition" ("fade" :: Text) .
defField "viewDistance" ("3" :: Text) .
defField "mobileViewDistance" ("2" :: Text)
else id) .
defField "document-css" (isNothing mCss && slideVariant == NoSlides) .
defField "quotes" (stQuotes st) .
-- for backwards compatibility we populate toc
Expand Down

0 comments on commit 14b2eb2

Please sign in to comment.