asciidoctor-revealjs 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.adoc +46 -0
  3. data/HACKING.adoc +250 -0
  4. data/LICENSE.adoc +22 -0
  5. data/README.adoc +671 -0
  6. data/asciidoctor-revealjs.gemspec +32 -0
  7. data/bin/asciidoctor-revealjs +20 -0
  8. data/lib/asciidoctor-revealjs.rb +2 -0
  9. data/lib/asciidoctor-revealjs/converter.rb +36 -0
  10. data/lib/asciidoctor-revealjs/version.rb +5 -0
  11. data/templates/jade/admonition.jade +17 -0
  12. data/templates/jade/audio.jade +6 -0
  13. data/templates/jade/colist.jade +22 -0
  14. data/templates/jade/dlist.jade +60 -0
  15. data/templates/jade/document.jade +103 -0
  16. data/templates/jade/embedded.jade +11 -0
  17. data/templates/jade/example.jade +4 -0
  18. data/templates/jade/floating_title.jade +2 -0
  19. data/templates/jade/image.jade +12 -0
  20. data/templates/jade/inline_anchor.jade +9 -0
  21. data/templates/jade/inline_break.jade +2 -0
  22. data/templates/jade/inline_button.jade +1 -0
  23. data/templates/jade/inline_callout.jade +9 -0
  24. data/templates/jade/inline_image.jade +24 -0
  25. data/templates/jade/inline_indexterm.jade +2 -0
  26. data/templates/jade/inline_kbd.jade +9 -0
  27. data/templates/jade/inline_quoted.jade +26 -0
  28. data/templates/jade/listing.jade +29 -0
  29. data/templates/jade/literal.jade +5 -0
  30. data/templates/jade/olist.jade +9 -0
  31. data/templates/jade/page_break.jade +1 -0
  32. data/templates/jade/paragraph.jade +7 -0
  33. data/templates/jade/pass.jade +1 -0
  34. data/templates/jade/quote.jade +11 -0
  35. data/templates/jade/ruler.jade +1 -0
  36. data/templates/jade/section.jade +15 -0
  37. data/templates/jade/sidebar.jade +5 -0
  38. data/templates/jade/table.jade +45 -0
  39. data/templates/jade/thematic_break.jade +1 -0
  40. data/templates/jade/ulist.jade +25 -0
  41. data/templates/jade/verse.jade +14 -0
  42. data/templates/jade/video.jade +30 -0
  43. data/templates/slim/block_admonition.html.slim +18 -0
  44. data/templates/slim/block_audio.html.slim +6 -0
  45. data/templates/slim/block_colist.html.slim +20 -0
  46. data/templates/slim/block_dlist.html.slim +53 -0
  47. data/templates/slim/block_example.html.slim +4 -0
  48. data/templates/slim/block_floating_title.html.slim +1 -0
  49. data/templates/slim/block_image.html.slim +21 -0
  50. data/templates/slim/block_listing.html.slim +33 -0
  51. data/templates/slim/block_literal.html.slim +4 -0
  52. data/templates/slim/block_olist.html.slim +9 -0
  53. data/templates/slim/block_open.html.slim +15 -0
  54. data/templates/slim/block_page_break.html.slim +1 -0
  55. data/templates/slim/block_paragraph.html.slim +7 -0
  56. data/templates/slim/block_pass.html.slim +1 -0
  57. data/templates/slim/block_preamble.html.slim +2 -0
  58. data/templates/slim/block_quote.html.slim +14 -0
  59. data/templates/slim/block_ruler.html.slim +1 -0
  60. data/templates/slim/block_sidebar.html.slim +5 -0
  61. data/templates/slim/block_stem.html.slim +10 -0
  62. data/templates/slim/block_table.html.slim +45 -0
  63. data/templates/slim/block_thematic_break.html.slim +1 -0
  64. data/templates/slim/block_toc.html.slim +12 -0
  65. data/templates/slim/block_ulist.html.slim +25 -0
  66. data/templates/slim/block_verse.html.slim +14 -0
  67. data/templates/slim/block_video.html.slim +40 -0
  68. data/templates/slim/document.html.slim +184 -0
  69. data/templates/slim/embedded.html.slim +9 -0
  70. data/templates/slim/helpers.rb +34 -0
  71. data/templates/slim/inline_anchor.html.slim +11 -0
  72. data/templates/slim/inline_break.html.slim +2 -0
  73. data/templates/slim/inline_button.html.slim +1 -0
  74. data/templates/slim/inline_callout.html.slim +7 -0
  75. data/templates/slim/inline_footnote.html.slim +6 -0
  76. data/templates/slim/inline_image.html.slim +24 -0
  77. data/templates/slim/inline_indexterm.html.slim +2 -0
  78. data/templates/slim/inline_kbd.html.slim +8 -0
  79. data/templates/slim/inline_menu.html.slim +15 -0
  80. data/templates/slim/inline_quoted.html.slim +22 -0
  81. data/templates/slim/section.html.slim +89 -0
  82. data/templates/slim/section.html.slim.orig +97 -0
  83. metadata +186 -0
@@ -0,0 +1,14 @@
1
+ .quoteblock id=@id class=role
2
+ - if title?
3
+ .title=title
4
+ blockquote=content
5
+ - attribution = (attr? :attribution) ? (attr :attribution) : nil
6
+ - citetitle = (attr? :citetitle) ? (attr :citetitle) : nil
7
+ - if attribution || citetitle
8
+ .attribution
9
+ - if citetitle
10
+ cite=citetitle
11
+ - if attribution
12
+ - if citetitle
13
+ br
14
+ | — #{attribution}
@@ -0,0 +1,5 @@
1
+ .sidebarblock id=@id class=role
2
+ .content
3
+ - if title?
4
+ .title=title
5
+ =content
@@ -0,0 +1,10 @@
1
+ - open, close = Asciidoctor::BLOCK_MATH_DELIMITERS[@style.to_sym]
2
+ - equation = content.strip
3
+ - if (@subs.nil? || @subs.empty?) && !(attr? 'subs')
4
+ - equation = sub_specialcharacters equation
5
+ - unless (equation.start_with? open) && (equation.end_with? close)
6
+ - equation = %(#{open}#{equation}#{close})
7
+ .stemblock id=@id class=role
8
+ - if title?
9
+ .title=title
10
+ .content=equation
@@ -0,0 +1,45 @@
1
+ table(id=@id class=['tableblock',"frame-#{attr :frame, 'all'}","grid-#{attr :grid, 'all'}",role]
2
+ style=[("width:#{attr :tablepcwidth}%" unless option? 'autowidth'),("float:#{attr :float}" if attr? :float)].compact.join('; '))
3
+ - if title?
4
+ caption.title=captioned_title
5
+ - unless (attr :rowcount).zero?
6
+ colgroup
7
+ - if option? 'autowidth'
8
+ - @columns.each do
9
+ col
10
+ - else
11
+ - @columns.each do |col|
12
+ col style="width:#{col.attr :colpcwidth}%"
13
+ - [:head, :foot, :body].select {|tblsec| !@rows[tblsec].empty? }.each do |tblsec|
14
+ *{:tag=>"t#{tblsec}"}
15
+ - @rows[tblsec].each do |row|
16
+ tr
17
+ - row.each do |cell|
18
+ / store reference of content in advance to resolve attribute assignments in cells
19
+ - if tblsec == :head
20
+ - cell_content = cell.text
21
+ - else
22
+ - case cell.style
23
+ - when :verse, :literal
24
+ - cell_content = cell.text
25
+ - else
26
+ - cell_content = cell.content
27
+ *{:tag=>(tblsec == :head ? 'th' : 'td'), :class=>['tableblock',"halign-#{cell.attr :halign}","valign-#{cell.attr :valign}"],
28
+ :colspan=>cell.colspan, :rowspan=>cell.rowspan,
29
+ :style=>((@document.attr? :cellbgcolor) ? %(background-color:#{@document.attr :cellbgcolor};) : nil)}
30
+ - if tblsec == :head
31
+ =cell_content
32
+ - else
33
+ - case cell.style
34
+ - when :asciidoc
35
+ div=cell_content
36
+ - when :verse
37
+ .verse=cell_content
38
+ - when :literal
39
+ .literal: pre=cell_content
40
+ - when :header
41
+ - cell_content.each do |text|
42
+ p.tableblock.header=text
43
+ - else
44
+ - cell_content.each do |text|
45
+ p.tableblock=text
@@ -0,0 +1,12 @@
1
+ - if @document.attr? :toc
2
+ - toc_id = @id
3
+ - toc_role = (attr 'role', (@document.attr 'toc-class', 'toc'))
4
+ - toc_title_id = nil
5
+ - toc_title = title? ? title : (@document.attr 'toc-title')
6
+ - toc_levels = (attr? :levels) ? (attr :levels).to_i : (@document.attr :toclevels, 2).to_i
7
+ - if !toc_id && (@document.embedded? || !(@document.attr? 'toc-placement'))
8
+ - toc_id = 'toc'
9
+ - toc_title_id = 'toctitle'
10
+ div id=toc_id class=toc_role
11
+ .title id=toc_title_id =toc_title
12
+ =Asciidoctor::HTML5::DocumentTemplate.outline(@document, toc_levels)
@@ -0,0 +1,25 @@
1
+ - if (checklist = (option? :checklist) ? 'checklist' : nil)
2
+ - if option? :interactive
3
+ - marker_checked = '<input type="checkbox" data-item-complete="1" checked>'
4
+ - marker_unchecked = '<input type="checkbox" data-item-complete="0">'
5
+ - else
6
+ - if @document.attr? :icons, 'font'
7
+ - marker_checked = '<i class="icon-check"></i>'
8
+ - marker_unchecked = '<i class="icon-check-empty"></i>'
9
+ - else
10
+ / could use &#9745 (checked ballot) and &#9744 (ballot) w/o font instead
11
+ - marker_checked = '<input type="checkbox" data-item-complete="1" checked disabled>'
12
+ - marker_unchecked = '<input type="checkbox" data-item-complete="0" disabled>'
13
+ .ulist id=@id class=[checklist,@style,role]
14
+ - if title?
15
+ .title=title
16
+ ul class=(checklist || @style)
17
+ - items.each do |item|
18
+ li class=('fragment' if (option? :step) || (has_role? 'step'))
19
+ p
20
+ - if checklist && (item.attr? :checkbox)
21
+ =%(#{(item.attr? :checked) ? marker_checked : marker_unchecked}#{item.text})
22
+ - else
23
+ =item.text
24
+ - if item.blocks?
25
+ =item.content
@@ -0,0 +1,14 @@
1
+ .verseblock id=@id class=role
2
+ - if title?
3
+ .title=title
4
+ pre.content=content
5
+ - attribution = (attr? :attribution) ? (attr :attribution) : nil
6
+ - citetitle = (attr? :citetitle) ? (attr :citetitle) : nil
7
+ - if attribution || citetitle
8
+ .attribution
9
+ - if citetitle
10
+ cite=citetitle
11
+ - if attribution
12
+ - if citetitle
13
+ br
14
+ | &#8212; #{attribution}
@@ -0,0 +1,40 @@
1
+ / in a slide-deck context we assume video should take as much place as possible
2
+ / unless already specified
3
+ - no_stretch = ((attr? :width) || (attr? :height))
4
+ - width = (attr? :width) ? (attr :width) : "100%"
5
+ - height = (attr? :height) ? (attr :height) : "100%"
6
+ / we apply revealjs stretch class to the videoblock take all the place we can
7
+ .videoblock id=@id class=[@style,role,(no_stretch ? nil : "stretch")]
8
+ - if title?
9
+ .title=captioned_title
10
+ - case attr :poster
11
+ - when 'vimeo'
12
+ - unless (asset_uri_scheme = (attr :asset_uri_scheme, 'https')).empty?
13
+ - asset_uri_scheme = %(#{asset_uri_scheme}:)
14
+ - start_anchor = (attr? :start) ? "#at=#{attr :start}" : nil
15
+ - delimiter = '?'
16
+ - loop_param = (option? 'loop') ? "#{delimiter}loop=1" : nil
17
+ - src = %(#{asset_uri_scheme}//player.vimeo.com/video/#{attr :target}#{start_anchor}#{loop_param})
18
+ iframe(width=(width) height=(height) src=src frameborder=0
19
+ webkitAllowFullScreen=true mozallowfullscreen=true allowFullScreen=true
20
+ data-autoplay=(option? 'autoplay'))
21
+ / data-autoplay is not supported on vimeo videos
22
+ / upstream: https://github.com/hakimel/reveal.js/issues/388
23
+ - when 'youtube'
24
+ - unless (asset_uri_scheme = (attr :asset_uri_scheme, 'https')).empty?
25
+ - asset_uri_scheme = %(#{asset_uri_scheme}:)
26
+ - params = ['rel=0']
27
+ - params << "start=#{attr :start}" if attr? :start
28
+ - params << "end=#{attr :end}" if attr? :end
29
+ - params << "loop=1" if option? 'loop'
30
+ - params << "controls=0" if option? 'nocontrols'
31
+ - src = %(#{asset_uri_scheme}//www.youtube.com/embed/#{attr :target}?#{params * '&amp;'})
32
+ iframe(width=(width) height=(height) src=src
33
+ frameborder=0 allowfullscreen=!(option? 'nofullscreen')
34
+ data-autoplay=(option? 'autoplay'))
35
+ - else
36
+ video(src=media_uri(attr :target) width=(width) height=(height)
37
+ poster=((attr :poster) ? media_uri(attr :poster) : nil)
38
+ data-autoplay=(option? 'autoplay') controls=!(option? 'nocontrols')
39
+ loop=(option? 'loop'))
40
+ |Your browser does not support the video tag.
@@ -0,0 +1,184 @@
1
+ doctype 5
2
+ html lang=(attr :lang, 'en' unless attr? :nolang)
3
+ head
4
+ meta charset="utf-8"
5
+ - revealjsdir = (attr :revealjsdir, 'reveal.js')
6
+ - unless (asset_uri_scheme = (attr 'asset-uri-scheme', 'https')).empty?
7
+ - asset_uri_scheme = %(#{asset_uri_scheme}:)
8
+ - cdn_base = %(#{asset_uri_scheme}//cdnjs.cloudflare.com/ajax/libs)
9
+ - [:description, :keywords, :author, :copyright].each do |key|
10
+ - if attr? key
11
+ meta name=key content=(attr key)
12
+ title=(doctitle sanitize: true, use_fallback: true)
13
+ meta content="yes" name="apple-mobile-web-app-capable"
14
+ meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"
15
+ meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui" name="viewport"
16
+ link href="#{revealjsdir}/css/reveal.css" rel="stylesheet"
17
+ / Default theme required even when using custom theme
18
+ - if attr? :revealjs_customtheme
19
+ link rel='stylesheet' href=(attr :revealjs_customtheme) id='theme'
20
+ - else
21
+ link rel='stylesheet' href='#{revealjsdir}/css/theme/#{attr 'revealjs_theme', 'black'}.css' id='theme'
22
+ - if attr? :icons, 'font'
23
+ - if attr? 'iconfont-remote'
24
+ link rel='stylesheet' href=(attr 'iconfont-cdn', %(#{cdn_base}/font-awesome/4.3.0/css/font-awesome.min.css))
25
+ - else
26
+ link rel='stylesheet' href=(normalize_web_path %(#{attr 'iconfont-name', 'font-awesome'}.css), (attr 'stylesdir', ''), false)
27
+ - if attr? :stem
28
+ - eqnums_val = (attr 'eqnums', 'none')
29
+ - eqnums_val = 'AMS' if eqnums_val == ''
30
+ - eqnums_opt = %( equationNumbers: { autoNumber: "#{eqnums_val}" } )
31
+ script type='text/x-mathjax-config'
32
+ | MathJax.Hub.Config({
33
+ tex2jax: {
34
+ inlineMath: [#{Asciidoctor::INLINE_MATH_DELIMITERS[:latexmath].to_s}],
35
+ displayMath: [#{Asciidoctor::BLOCK_MATH_DELIMITERS[:latexmath].to_s}],
36
+ ignoreClass: "nostem|nolatexmath"
37
+ },
38
+ asciimath2jax: {
39
+ delimiters: [#{Asciidoctor::BLOCK_MATH_DELIMITERS[:asciimath].to_s}],
40
+ ignoreClass: "nostem|noasciimath"
41
+ },
42
+ TeX: {#{eqnums_opt}}
43
+ });
44
+ script src='#{cdn_base}/mathjax/2.4.0/MathJax.js?config=TeX-MML-AM_HTMLorMML'
45
+ - case attr 'source-highlighter'
46
+ - when 'coderay'
47
+ - if (attr 'coderay-css', 'class') == 'class'
48
+ - if @safe >= Asciidoctor::SafeMode::SECURE || (attr? :linkcss)
49
+ link rel='stylesheet' href=normalize_web_path('asciidoctor-coderay.css', (attr :stylesdir, ''))
50
+ - else
51
+ style=Asciidoctor::Stylesheets.instance.coderay_stylesheet_data
52
+ - when 'pygments'
53
+ - if (attr 'pygments-css', 'class') == 'class'
54
+ - if @safe >= Asciidoctor::SafeMode::SECURE || (attr? :linkcss)
55
+ link rel='stylesheet' href=normalize_web_path('asciidoctor-pygments.css', (attr :stylesdir, ''))
56
+ - else
57
+ style=Asciidoctor::Stylesheets.instance.pygments_stylesheet_data(attr 'pygments-style')
58
+ / For syntax highlighting
59
+ - if attr? 'highlightjs-theme'
60
+ link href=(attr 'highlightjs-theme') rel="stylesheet"
61
+ - else
62
+ link href="#{revealjsdir}/lib/css/zenburn.css" rel="stylesheet"
63
+ / If the query includes 'print-pdf', use the PDF print sheet
64
+ javascript:
65
+ document.write( '<link rel="stylesheet" href="#{revealjsdir}/css/print/' + ( window.location.search.match( /print-pdf/gi ) ? 'pdf' : 'paper' ) + '.css" type="text/css" media="print">' );
66
+ - unless (docinfo_content = docinfo :header, '.html').empty?
67
+ =docinfo_content
68
+ - if attr? :customcss
69
+ link rel='stylesheet' href=((customcss = attr :customcss).empty? ? 'asciidoctor-revealjs.css' : customcss)
70
+ body
71
+ .reveal
72
+ / Any section element inside of this container is displayed as a slide
73
+ .slides
74
+ - unless notitle || !has_header?
75
+ - bg_image = (attr? 'title-slide-background-image') ? (image_uri(attr 'title-slide-background-image')) : nil
76
+ - bg_video = (attr? 'title-slide-background-video') ? (media_uri(attr 'title-slide-background-video')) : nil
77
+ section.title(class = role
78
+ data-transition=(attr 'title-slide-transition')
79
+ data-transition-speed=(attr 'title-slide-transition-speed')
80
+ data-background=(attr 'title-slide-background')
81
+ data-background-size=(attr 'title-slide-background-size')
82
+ data-background-image=bg_image
83
+ data-background-video=bg_video
84
+ data-background-video-loop=(attr 'title-slide-background-video-loop')
85
+ data-background-video-muted=(attr 'title-slide-background-video-muted')
86
+ data-background-iframe=(attr 'title-slide-background-iframe')
87
+ data-background-color=(attr 'title-slide-background-color')
88
+ data-background-repeat=(attr 'title-slide-background-repeat')
89
+ data-background-position=(attr 'title-slide-background-position')
90
+ data-background-transition=(attr 'title-slide-background-transition'))
91
+ - if (_title_obj = doctitle partition: true, use_fallback: true).subtitle?
92
+ h1=slice_text _title_obj.title, (_slice = header.option? :slice)
93
+ h2=slice_text _title_obj.subtitle, _slice
94
+ - else
95
+ h1=@header.title
96
+ - preamble = @document.find_by context: :preamble
97
+ - unless preamble.nil? or preamble.length == 0
98
+ div.preamble=preamble.pop.content
99
+ - unless author.nil?
100
+ p.author: small=author
101
+ =content
102
+ script src="#{revealjsdir}/lib/js/head.min.js"
103
+ script src="#{revealjsdir}/js/reveal.js"
104
+ javascript:
105
+ // See https://github.com/hakimel/reveal.js#configuration for a full list of configuration options
106
+ Reveal.initialize({
107
+ // Display controls in the bottom right corner
108
+ controls: #{attr 'revealjs_controls', 'true'},
109
+ // Display a presentation progress bar
110
+ progress: #{attr 'revealjs_progress', 'true'},
111
+ // Display the page number of the current slide
112
+ slideNumber: #{attr 'revealjs_slidenumber', 'false'},
113
+ // Push each slide change to the browser history
114
+ history: #{attr 'revealjs_history', 'false'},
115
+ // Enable keyboard shortcuts for navigation
116
+ keyboard: #{attr 'revealjs_keyboard', 'true'},
117
+ // Enable the slide overview mode
118
+ overview: #{attr 'revealjs_overview', 'true'},
119
+ // Vertical centering of slides
120
+ center: #{attr 'revealjs_center', 'true'},
121
+ // Enables touch navigation on devices with touch input
122
+ touch: #{attr 'revealjs_touch', 'true'},
123
+ // Loop the presentation
124
+ loop: #{attr 'revealjs_loop', 'false'},
125
+ // Change the presentation direction to be RTL
126
+ rtl: #{attr 'revealjs_rtl', 'false'},
127
+ // Turns fragments on and off globally
128
+ fragments: #{attr 'revealjs_fragments', 'true'},
129
+ // Flags if the presentation is running in an embedded mode,
130
+ // i.e. contained within a limited portion of the screen
131
+ embedded: #{attr 'revealjs_embedded', 'false'},
132
+ // Number of milliseconds between automatically proceeding to the
133
+ // next slide, disabled when set to 0, this value can be overwritten
134
+ // by using a data-autoslide attribute on your slides
135
+ autoSlide: #{attr 'revealjs_autoslide', 0},
136
+ // Stop auto-sliding after user input
137
+ autoSlideStoppable: #{attr 'revealjs_autoslidestoppable', 'true'},
138
+ // Enable slide navigation via mouse wheel
139
+ mouseWheel: #{attr 'revealjs_mousewheel', 'false'},
140
+ // Hides the address bar on mobile devices
141
+ hideAddressBar: #{attr 'revealjs_hideaddressbar', 'true'},
142
+ // Opens links in an iframe preview overlay
143
+ previewLinks: #{attr 'revealjs_previewlinks', 'false'},
144
+ // Theme (e.g., beige, black, league, night, serif, simple, sky, solarized, white)
145
+ // NOTE setting the theme in the config no longer works in reveal.js 3.x
146
+ //theme: Reveal.getQueryHash().theme || '#{attr 'revealjs_theme', 'black'}',
147
+ // Transition style (e.g., none, fade, slide, convex, concave, zoom)
148
+ transition: Reveal.getQueryHash().transition || '#{attr 'revealjs_transition', 'slide'}',
149
+ // Transition speed (e.g., default, fast, slow)
150
+ transitionSpeed: '#{attr 'revealjs_transitionspeed', 'default'}',
151
+ // Transition style for full page slide backgrounds (e.g., none, fade, slide, convex, concave, zoom)
152
+ backgroundTransition: '#{attr 'revealjs_backgroundtransition', 'fade'}',
153
+ // Number of slides away from the current that are visible
154
+ viewDistance: #{attr 'revealjs_viewdistance', 3},
155
+ // Parallax background image (e.g., "'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'")
156
+ parallaxBackgroundImage: '#{attr 'revealjs_parallaxbackgroundimage', ''}',
157
+ // Parallax background size in CSS syntax (e.g., "2100px 900px")
158
+ parallaxBackgroundSize: '#{attr 'revealjs_parallaxbackgroundsize', ''}',
159
+
160
+ // The "normal" size of the presentation, aspect ratio will be preserved
161
+ // when the presentation is scaled to fit different resolutions. Can be
162
+ // specified using percentage units.
163
+ width: #{attr 'revealjs_width', 960},
164
+ height: #{attr 'revealjs_height', 700},
165
+
166
+ // Factor of the display size that should remain empty around the content
167
+ margin: #{attr 'revealjs_margin', 0.1},
168
+
169
+ // Bounds for smallest/largest possible scale to apply to content
170
+ minScale: #{attr 'revealjs_minscale', 0.2},
171
+ maxScale: #{attr 'revealjs_maxscale', 1.5},
172
+
173
+ // Optional libraries used to extend on reveal.js
174
+ dependencies: [
175
+ { src: '#{revealjsdir}/lib/js/classList.js', condition: function() { return !document.body.classList; } },
176
+ { src: '#{revealjsdir}/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
177
+ { src: '#{revealjsdir}/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
178
+ #{(attr? 'source-highlighter', 'highlightjs') ? "{ src: '#{revealjsdir}/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }," : nil}
179
+ { src: '#{revealjsdir}/plugin/zoom-js/zoom.js', async: true, condition: function() { return !!document.body.classList; } },
180
+ { src: '#{revealjsdir}/plugin/notes/notes.js', async: true, condition: function() { return !!document.body.classList; } }
181
+ ]
182
+ });
183
+ - unless (docinfo_content = (docinfo :footer, '.html')).empty?
184
+ =docinfo_content
@@ -0,0 +1,9 @@
1
+ - unless notitle || !has_header?
2
+ h1 id=@id =@header.title
3
+ =content
4
+ - unless !footnotes? || attr?(:nofootnotes)
5
+ #footnotes
6
+ hr
7
+ - footnotes.each do |fn|
8
+ .footnote id='_footnote_#{fn.index}'
9
+ <a href="#_footnoteref_#{fn.index}">#{fn.index}</a>. #{fn.text}
@@ -0,0 +1,34 @@
1
+ # This helper file borrows from the Bespoke converter
2
+ # https://github.com/asciidoctor/asciidoctor-bespoke
3
+ require 'asciidoctor'
4
+ require 'json'
5
+
6
+ if Gem::Version.new(Asciidoctor::VERSION) <= Gem::Version.new('1.5.3')
7
+ fail 'asciidoctor: FAILED: reveal.js backend needs Asciidoctor >=1.5.4!'
8
+ end
9
+
10
+ unless defined? Slim::Include
11
+ fail 'asciidoctor: FAILED: reveal.js backend needs Slim >= 2.1.0!'
12
+ end
13
+
14
+ # This module gets mixed in to every node (the context of the template) at the
15
+ # time the node is being converted. The properties and methods in this module
16
+ # effectively become direct members of the template.
17
+ module Slim::Helpers
18
+
19
+ EOL = %(\n)
20
+ SliceHintRx = / +/
21
+
22
+ def slice_text str, active = nil
23
+ if (active || (active.nil? && (option? :slice))) && (str.include? ' ')
24
+ (str.split SliceHintRx).map {|line| %(<span class="line">#{line}</span>) }.join EOL
25
+ else
26
+ str
27
+ end
28
+ end
29
+
30
+ end
31
+
32
+ # More custom functions can be added in another namespace if required
33
+ #module Helpers
34
+ #end
@@ -0,0 +1,11 @@
1
+ - case @type
2
+ - when :xref
3
+ - refid = (attr :refid) || @target
4
+ a href=@target =(@text || @document.references[:ids].fetch(refid, "[#{refid}]")).tr_s("\n", ' ')
5
+ - when :ref
6
+ a id=@target
7
+ - when :bibref
8
+ a id=@target
9
+ |[#{@target}]
10
+ - else
11
+ a href=@target class=role target=(attr :window) =@text
@@ -0,0 +1,2 @@
1
+ =@text
2
+ br
@@ -0,0 +1 @@
1
+ b.button=@text
@@ -0,0 +1,7 @@
1
+ - if @document.attr? :icons, 'font'
2
+ i.conum data-value=@text
3
+ b="(#{@text})"
4
+ - elsif @document.attr? :icons
5
+ img src=icon_uri("callouts/#{@text}") alt=@text
6
+ - else
7
+ b="(#{@text})"
@@ -0,0 +1,6 @@
1
+ - if @type == :xref
2
+ span.footnoteref
3
+ | [<a class="footnote" href="#_footnote_#{attr :index}" title="View footnote.">#{attr :index}</a>]
4
+ - else
5
+ span.footnote id=("_footnote_#{@id}" if @id)
6
+ | [<a id="_footnoteref_#{attr :index}" class="footnote" href="#_footnote_#{attr :index}" title="View footnote.">#{attr :index}</a>]