asciidoctor-revealjs 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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>]