asciidoctor-revealjs 3.1.0 → 4.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.
- checksums.yaml +4 -4
- data/CHANGELOG.adoc +86 -0
- data/HACKING.adoc +18 -11
- data/README.adoc +260 -27
- data/Rakefile +12 -4
- data/asciidoctor-revealjs.gemspec +4 -2
- data/examples/docinfo-footer-revealjs.html +10 -0
- data/examples/docinfo-revealjs.html +7 -0
- data/examples/font-awesome.adoc +2 -1
- data/examples/font-awesome.css +3 -0
- data/examples/fragments.adoc +32 -0
- data/examples/fragments.css +18 -0
- data/examples/grid-layout-docinfo-revealjs.html +11 -0
- data/examples/grid-layout.adoc +174 -0
- data/examples/history-hash.adoc +19 -0
- data/examples/history-regression-tests.adoc +0 -5
- data/examples/history.adoc +4 -4
- data/examples/images/asciidoctor-logo.svg +102 -0
- data/examples/level-sectnums.adoc +24 -0
- data/examples/links-preview.adoc +32 -0
- data/examples/links.adoc +39 -0
- data/examples/release-4.0.adoc +195 -0
- data/examples/release-4.0.css +23 -0
- data/examples/source-coderay.adoc +15 -0
- data/examples/source-emphasis.adoc +128 -0
- data/examples/source-highlightjs-html.adoc +1 -1
- data/examples/source-highlightjs-languages.adoc +27 -0
- data/examples/source-highlightjs.adoc +85 -2
- data/examples/source-pygments.adoc +12 -0
- data/examples/source-rouge-docinfo.html +8 -0
- data/examples/source-rouge.adoc +18 -0
- data/examples/video.adoc +12 -3
- data/examples/with-docinfo-shared.adoc +13 -0
- data/lib/asciidoctor-revealjs/converter.rb +312 -136
- data/lib/asciidoctor-revealjs/highlightjs.rb +333 -2
- data/lib/asciidoctor-revealjs/version.rb +1 -1
- data/templates/asciidoctor-compatibility.css +141 -0
- data/templates/document.html.slim +64 -53
- data/templates/helpers.rb +93 -1
- data/templates/image.html.slim +1 -1
- data/templates/inline_anchor.html.slim +2 -1
- data/templates/inline_image.html.slim +3 -3
- data/templates/listing.html.slim +1 -1
- data/templates/section.html.slim +34 -43
- data/templates/stretch_nested_elements.js.slim +65 -0
- data/templates/title_slide.html.slim +28 -0
- metadata +55 -8
- data/examples/revealjs-features.adoc +0 -23
- data/templates/asciidoctor_revealjs.css.slim +0 -59
@@ -2,6 +2,10 @@ doctype 5
|
|
2
2
|
html lang=(attr :lang, 'en' unless attr? :nolang)
|
3
3
|
head
|
4
4
|
meta charset="utf-8"
|
5
|
+
meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui"
|
6
|
+
|
7
|
+
title=(doctitle sanitize: true, use_fallback: true)
|
8
|
+
|
5
9
|
- if RUBY_ENGINE == 'opal' && JAVASCRIPT_PLATFORM == 'node'
|
6
10
|
- revealjsdir = (attr :revealjsdir, 'node_modules/reveal.js')
|
7
11
|
- else
|
@@ -13,17 +17,17 @@ html lang=(attr :lang, 'en' unless attr? :nolang)
|
|
13
17
|
- if attr? key
|
14
18
|
meta name=key content=(attr key)
|
15
19
|
- linkcss = (attr? 'linkcss')
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui" name="viewport"
|
20
|
-
link href="#{revealjsdir}/css/reveal.css" rel="stylesheet"
|
20
|
+
link rel="stylesheet" href="#{revealjsdir}/css/reset.css"
|
21
|
+
link rel="stylesheet" href="#{revealjsdir}/css/reveal.css"
|
22
|
+
|
21
23
|
/ Default theme required even when using custom theme
|
22
24
|
- if attr? :revealjs_customtheme
|
23
25
|
link rel='stylesheet' href=(attr :revealjs_customtheme) id='theme'
|
24
26
|
- else
|
25
27
|
link rel='stylesheet' href='#{revealjsdir}/css/theme/#{attr 'revealjs_theme', 'black'}.css' id='theme'
|
26
|
-
|
28
|
+
/! This CSS is generated by the Asciidoctor reveal.js converter to further integrate AsciiDoc's existing semantic with reveal.js
|
29
|
+
style type="text/css"
|
30
|
+
include asciidoctor-compatibility.css
|
27
31
|
- if attr? :icons, 'font'
|
28
32
|
/ iconfont-remote is implicitly set by Asciidoctor core. See https://github.com/asciidoctor/asciidoctor.org/issues/361
|
29
33
|
- if attr? 'iconfont-remote'
|
@@ -53,55 +57,33 @@ html lang=(attr :lang, 'en' unless attr? :nolang)
|
|
53
57
|
- syntax_hl = self.syntax_highlighter
|
54
58
|
- if syntax_hl && (syntax_hl.docinfo? :head)
|
55
59
|
=syntax_hl.docinfo :head, self, cdn_base_url: cdn_base, linkcss: linkcss, self_closing_tag_slash: '/'
|
56
|
-
|
60
|
+
|
61
|
+
/! Printing and PDF exports
|
57
62
|
javascript:
|
58
63
|
var link = document.createElement( 'link' );
|
59
64
|
link.rel = 'stylesheet';
|
60
65
|
link.type = 'text/css';
|
61
66
|
link.href = window.location.search.match( /print-pdf/gi ) ? "#{revealjsdir}/css/print/pdf.css" : "#{revealjsdir}/css/print/paper.css";
|
62
67
|
document.getElementsByTagName( 'head' )[0].appendChild( link );
|
63
|
-
|
64
|
-
<script src="#{revealjsdir}/lib/js/html5shiv.js"></script>
|
65
|
-
- unless (docinfo_content = docinfo :header, '.html').empty?
|
66
|
-
=docinfo_content
|
68
|
+
|
67
69
|
- if attr? :customcss
|
68
70
|
link rel='stylesheet' href=((customcss = attr :customcss).empty? ? 'asciidoctor-revealjs.css' : customcss)
|
71
|
+
- unless (_docinfo = docinfo :head, '-revealjs.html').empty?
|
72
|
+
=_docinfo
|
69
73
|
body
|
70
74
|
.reveal
|
71
75
|
/ Any section element inside of this container is displayed as a slide
|
72
76
|
.slides
|
73
|
-
- unless
|
74
|
-
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
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-opacity=(attr "background-opacity")
|
87
|
-
data-background-iframe=(attr 'title-slide-background-iframe')
|
88
|
-
data-background-color=(attr 'title-slide-background-color')
|
89
|
-
data-background-repeat=(attr 'title-slide-background-repeat')
|
90
|
-
data-background-position=(attr 'title-slide-background-position')
|
91
|
-
data-background-transition=(attr 'title-slide-background-transition'))
|
92
|
-
- if (_title_obj = doctitle partition: true, use_fallback: true).subtitle?
|
93
|
-
h1=slice_text _title_obj.title, (_slice = header.option? :slice)
|
94
|
-
h2=slice_text _title_obj.subtitle, _slice
|
95
|
-
- else
|
96
|
-
h1=@header.title
|
97
|
-
- preamble = @document.find_by context: :preamble
|
98
|
-
- unless preamble.nil? or preamble.length == 0
|
99
|
-
div.preamble=preamble.pop.content
|
100
|
-
- unless author.nil?
|
101
|
-
p.author: small=author
|
102
|
-
=content
|
103
|
-
script src="#{revealjsdir}/lib/js/head.min.js"
|
77
|
+
- unless noheader
|
78
|
+
- unless (_docinfo = docinfo :header, '-revealjs.html').empty?
|
79
|
+
= _docinfo
|
80
|
+
- if header?
|
81
|
+
include title_slide.html.slim
|
82
|
+
= content
|
83
|
+
- unless (_docinfo = docinfo :footer, '-revealjs.html').empty?
|
84
|
+
= _docinfo
|
104
85
|
script src="#{revealjsdir}/js/reveal.js"
|
86
|
+
/ Supports easy AsciiDoc syntax for background color
|
105
87
|
javascript:
|
106
88
|
Array.prototype.slice.call(document.querySelectorAll('.slides section')).forEach(function(slide) {
|
107
89
|
if (slide.getAttribute('data-background-color')) return;
|
@@ -112,9 +94,11 @@ html lang=(attr :lang, 'en' unless attr? :nolang)
|
|
112
94
|
slide.setAttribute('data-background-color', bgColor);
|
113
95
|
slide.style.backgroundColor = 'transparent';
|
114
96
|
}
|
115
|
-
})
|
97
|
+
});
|
116
98
|
|
117
|
-
//
|
99
|
+
// More info about config & dependencies:
|
100
|
+
// - https://github.com/hakimel/reveal.js#configuration
|
101
|
+
// - https://github.com/hakimel/reveal.js#dependencies
|
118
102
|
Reveal.initialize({
|
119
103
|
// Display presentation control arrows
|
120
104
|
controls: #{to_boolean(attr 'revealjs_controls', true)},
|
@@ -132,7 +116,10 @@ html lang=(attr :lang, 'en' unless attr? :nolang)
|
|
132
116
|
slideNumber: #{to_valid_slidenumber(attr 'revealjs_slidenumber', false)},
|
133
117
|
// Control which views the slide number displays on
|
134
118
|
showSlideNumber: '#{attr 'revealjs_showslidenumber', 'all'}',
|
135
|
-
//
|
119
|
+
// Add the current slide number to the URL hash so that reloading the
|
120
|
+
// page/copying the URL will return you to the same slide
|
121
|
+
hash: #{to_boolean(attr 'revealjs_hash', false)},
|
122
|
+
// Push each slide change to the browser history. Implies `hash: true`
|
136
123
|
history: #{to_boolean(attr 'revealjs_history', false)},
|
137
124
|
// Enable keyboard shortcuts for navigation
|
138
125
|
keyboard: #{to_boolean(attr 'revealjs_keyboard', true)},
|
@@ -146,6 +133,8 @@ html lang=(attr :lang, 'en' unless attr? :nolang)
|
|
146
133
|
loop: #{to_boolean(attr 'revealjs_loop', false)},
|
147
134
|
// Change the presentation direction to be RTL
|
148
135
|
rtl: #{to_boolean(attr 'revealjs_rtl', false)},
|
136
|
+
// See https://github.com/hakimel/reveal.js/#navigation-mode
|
137
|
+
navigationMode: '#{attr 'revealjs_navigationmode', 'default'}',
|
149
138
|
// Randomizes the order of slides each time the presentation loads
|
150
139
|
shuffle: #{to_boolean(attr 'revealjs_shuffle', false)},
|
151
140
|
// Turns fragments on and off globally
|
@@ -166,6 +155,12 @@ html lang=(attr :lang, 'en' unless attr? :nolang)
|
|
166
155
|
// - true: All media will autoplay, regardless of individual setting
|
167
156
|
// - false: No media will autoplay, regardless of individual setting
|
168
157
|
autoPlayMedia: #{attr 'revealjs_autoplaymedia', 'null'},
|
158
|
+
// Global override for preloading lazy-loaded iframes
|
159
|
+
// - null: Iframes with data-src AND data-preload will be loaded when within
|
160
|
+
// the viewDistance, iframes with only data-src will be loaded when visible
|
161
|
+
// - true: All iframes with data-src will be loaded when within the viewDistance
|
162
|
+
// - false: All iframes with data-src will be loaded only when visible
|
163
|
+
preloadIframes: #{attr 'revealjs_preloadiframes', 'null'},
|
169
164
|
// Number of milliseconds between automatically proceeding to the
|
170
165
|
// next slide, disabled when set to 0, this value can be overwritten
|
171
166
|
// by using a data-autoslide attribute on your slides
|
@@ -178,8 +173,23 @@ html lang=(attr :lang, 'en' unless attr? :nolang)
|
|
178
173
|
// presenting each slide. This is used to show a pacing timer in the
|
179
174
|
// speaker view
|
180
175
|
defaultTiming: #{attr 'revealjs_defaulttiming', 120},
|
176
|
+
// Specify the total time in seconds that is available to
|
177
|
+
// present. If this is set to a nonzero value, the pacing
|
178
|
+
// timer will work out the time available for each slide,
|
179
|
+
// instead of using the defaultTiming value
|
180
|
+
totalTime: #{attr 'revealjs_totaltime', 0},
|
181
|
+
// Specify the minimum amount of time you want to allot to
|
182
|
+
// each slide, if using the totalTime calculation method. If
|
183
|
+
// the automated time allocation causes slide pacing to fall
|
184
|
+
// below this threshold, then you will see an alert in the
|
185
|
+
// speaker notes window
|
186
|
+
minimumTimePerSlide: #{attr 'revealjs_minimumtimeperslide', 0},
|
181
187
|
// Enable slide navigation via mouse wheel
|
182
188
|
mouseWheel: #{to_boolean(attr 'revealjs_mousewheel', false)},
|
189
|
+
// Hide cursor if inactive
|
190
|
+
hideInactiveCursor: #{to_boolean(attr 'revealjs_hideinactivecursor', true)},
|
191
|
+
// Time before the cursor is hidden (in ms)
|
192
|
+
hideCursorTime: #{attr 'revealjs_hidecursortime', 5000},
|
183
193
|
// Hides the address bar on mobile devices
|
184
194
|
hideAddressBar: #{to_boolean(attr 'revealjs_hideaddressbar', true)},
|
185
195
|
// Opens links in an iframe preview overlay
|
@@ -194,6 +204,10 @@ html lang=(attr :lang, 'en' unless attr? :nolang)
|
|
194
204
|
backgroundTransition: '#{attr 'revealjs_backgroundtransition', 'fade'}',
|
195
205
|
// Number of slides away from the current that are visible
|
196
206
|
viewDistance: #{attr 'revealjs_viewdistance', 3},
|
207
|
+
// Number of slides away from the current that are visible on mobile
|
208
|
+
// devices. It is advisable to set this to a lower number than
|
209
|
+
// viewDistance in order to save resources.
|
210
|
+
mobileViewDistance: #{attr 'revealjs_mobileviewdistance', 3},
|
197
211
|
// Parallax background image (e.g., "'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'")
|
198
212
|
parallaxBackgroundImage: '#{attr 'revealjs_parallaxbackgroundimage', ''}',
|
199
213
|
// Parallax background size in CSS syntax (e.g., "2100px 900px")
|
@@ -227,19 +241,16 @@ html lang=(attr :lang, 'en' unless attr? :nolang)
|
|
227
241
|
|
228
242
|
// Optional libraries used to extend on reveal.js
|
229
243
|
dependencies: [
|
230
|
-
|
231
|
-
#{(document.attr? 'source-highlighter', 'highlightjs') ? "{ src: '#{revealjsdir}/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }," : nil}
|
232
|
-
#{(attr? 'revealjs_plugin_zoom', 'disabled') ? "" : "{ src: '#{revealjsdir}/plugin/zoom-js/zoom.js', async: true }," }
|
233
|
-
#{(attr? 'revealjs_plugin_notes', 'disabled') ? "" : "{ src: '#{revealjsdir}/plugin/notes/notes.js', async: true }," }
|
234
|
-
#{(attr? 'revealjs_plugin_marked', 'enabled') ? "{ src: '#{revealjsdir}/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }," : "" }
|
235
|
-
#{(attr? 'revealjs_plugin_markdown', 'enabled') ? "{ src: '#{revealjsdir}/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }," : "" }
|
236
|
-
#{(attr? 'revealjs_plugin_pdf', 'enabled') ? "{ src: '#{revealjsdir}/plugin/print-pdf/print-pdf.js', async: true }," : "" }
|
237
|
-
#{(attr? 'revealjs_plugins') ? File.read(attr('revealjs_plugins', '')) : ""}
|
244
|
+
#{revealjs_dependencies(document, self, revealjsdir)}
|
238
245
|
],
|
239
246
|
|
240
247
|
#{(attr? 'revealjs_plugins_configuration') ? File.read(attr('revealjs_plugins_configuration', '')) : ""}
|
241
248
|
|
242
249
|
});
|
250
|
+
/ Workaround the "Only direct descendants of a slide section can be stretched" limitation in reveal.js
|
251
|
+
/ https://github.com/hakimel/reveal.js/issues/2584
|
252
|
+
include stretch_nested_elements.js.slim
|
253
|
+
|
243
254
|
- if syntax_hl && (syntax_hl.docinfo? :footer)
|
244
255
|
=syntax_hl.docinfo :footer, self, cdn_base_url: cdn_base, linkcss: linkcss, self_closing_tag_slash: '/'
|
245
256
|
|
data/templates/helpers.rb
CHANGED
@@ -24,6 +24,23 @@ module Slim::Helpers
|
|
24
24
|
val && val != 'false' && val.to_s != '0' || false
|
25
25
|
end
|
26
26
|
|
27
|
+
# bool_data_attr
|
28
|
+
# If the AsciiDoc attribute doesn't exist, no HTML attribute is added
|
29
|
+
# If the AsciiDoc attribute exist and is a true value, HTML attribute is enabled (bool)
|
30
|
+
# If the AsciiDoc attribute exist and is a false value, HTML attribute is a false string
|
31
|
+
# Ex: a feature is enabled globally but can be disabled using a data- attribute on individual items
|
32
|
+
# :revealjs_previewlinks: True
|
33
|
+
# then link::example.com[Link text, preview=false]
|
34
|
+
# Here the template must have data-preview-link="false" not just no data-preview-link attribute
|
35
|
+
def bool_data_attr val
|
36
|
+
return false if !attr?(val)
|
37
|
+
if attr(val).downcase == 'false' || attr(val) == '0'
|
38
|
+
return 'false'
|
39
|
+
else
|
40
|
+
return true
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
27
44
|
# false needs to be verbatim everything else is a string.
|
28
45
|
# Calling side isn't responsible for quoting so we are doing it here
|
29
46
|
def to_valid_slidenumber val
|
@@ -101,6 +118,20 @@ module Slim::Helpers
|
|
101
118
|
end
|
102
119
|
end
|
103
120
|
|
121
|
+
def revealjs_dependencies(document, node, revealjsdir)
|
122
|
+
dependencies = []
|
123
|
+
dependencies << "{ src: '#{revealjsdir}/plugin/zoom-js/zoom.js', async: true }" unless (node.attr? 'revealjs_plugin_zoom', 'disabled')
|
124
|
+
dependencies << "{ src: '#{revealjsdir}/plugin/notes/notes.js', async: true }" unless (node.attr? 'revealjs_plugin_notes', 'disabled')
|
125
|
+
dependencies << "{ src: '#{revealjsdir}/plugin/markdown/marked.js', async: true }" if (node.attr? 'revealjs_plugin_marked', 'enabled')
|
126
|
+
dependencies << "{ src: '#{revealjsdir}/plugin/markdown/markdown.js', async: true }" if (node.attr? 'revealjs_plugin_markdown', 'enabled')
|
127
|
+
if (node.attr? 'revealjs_plugins') &&
|
128
|
+
!(revealjs_plugins_file = (node.attr 'revealjs_plugins', '').strip).empty? &&
|
129
|
+
!(revealjs_plugins_content = (File.read revealjs_plugins_file).strip).empty?
|
130
|
+
dependencies << revealjs_plugins_content
|
131
|
+
end
|
132
|
+
dependencies.join(",\n ")
|
133
|
+
end
|
134
|
+
|
104
135
|
|
105
136
|
# Between delimiters (--) is code taken from asciidoctor-bespoke 1.0.0.alpha.1
|
106
137
|
# Licensed under MIT, Copyright (C) 2015-2016 Dan Allen and the Asciidoctor Project
|
@@ -113,8 +144,69 @@ module Slim::Helpers
|
|
113
144
|
def resolve_content
|
114
145
|
@content_model == :simple ? %(<p>#{content}</p>) : content
|
115
146
|
end
|
116
|
-
#--
|
117
147
|
|
148
|
+
# Capture nested template content and register it with the specified key, to
|
149
|
+
# be executed at a later time.
|
150
|
+
#
|
151
|
+
# This method must be invoked using the control code directive (i.e., -). By
|
152
|
+
# using a control code directive, the block is set up to append the result
|
153
|
+
# directly to the output buffer. (Integrations often hide the distinction
|
154
|
+
# between a control code directive and an output directive in this context).
|
155
|
+
#
|
156
|
+
# key - The Symbol under which to save the template block.
|
157
|
+
# opts - A Hash of options to control processing (default: {}):
|
158
|
+
# * :append - A Boolean that indicates whether to append this block
|
159
|
+
# to others registered with this key (default: false).
|
160
|
+
# * :content - String content to be used if template content is not
|
161
|
+
# provided (optional).
|
162
|
+
# block - The template content (in Slim template syntax).
|
163
|
+
#
|
164
|
+
# Examples
|
165
|
+
#
|
166
|
+
# - content_for :body
|
167
|
+
# p content
|
168
|
+
# - content_for :body, append: true
|
169
|
+
# p more content
|
170
|
+
#
|
171
|
+
# Returns nothing.
|
172
|
+
def content_for key, opts = {}, &block
|
173
|
+
@content = {} unless defined? @content
|
174
|
+
(opts[:append] ? (@content[key] ||= []) : (@content[key] = [])) << (block_given? ? block : lambda { opts[:content] })
|
175
|
+
nil
|
176
|
+
end
|
177
|
+
|
178
|
+
# Checks whether deferred template content has been registered for the specified key.
|
179
|
+
#
|
180
|
+
# key - The Symbol under which to look for saved template blocks.
|
181
|
+
#
|
182
|
+
# Returns a Boolean indicating whether content has been registered for this key.
|
183
|
+
def content_for? key
|
184
|
+
(defined? @content) && (@content.key? key)
|
185
|
+
end
|
186
|
+
|
187
|
+
# Evaluates the deferred template content registered with the specified key.
|
188
|
+
#
|
189
|
+
# When the corresponding content_for method is invoked using a control code
|
190
|
+
# directive, the block is set up to append the result to the output buffer
|
191
|
+
# directly.
|
192
|
+
#
|
193
|
+
# key - The Symbol under which to look for template blocks to yield.
|
194
|
+
# opts - A Hash of options to control processing (default: {}):
|
195
|
+
# * :drain - A Boolean indicating whether to drain the key of blocks
|
196
|
+
# after calling them (default: true).
|
197
|
+
#
|
198
|
+
# Examples
|
199
|
+
#
|
200
|
+
# - yield_content :body
|
201
|
+
#
|
202
|
+
# Returns nothing (assuming the content has been captured in the context of control code).
|
203
|
+
def yield_content key, opts = {}
|
204
|
+
if (defined? @content) && (blks = (opts.fetch :drain, true) ? (@content.delete key) : @content[key])
|
205
|
+
blks.map {|b| b.call }.join
|
206
|
+
end
|
207
|
+
nil
|
208
|
+
end
|
209
|
+
#--
|
118
210
|
end
|
119
211
|
|
120
212
|
# More custom functions can be added in another namespace if required
|
data/templates/image.html.slim
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
.imageblock(id=@id class=roles
|
14
14
|
style=[("text-align: #{attr :align}" if attr? :align),("float: #{attr :float}" if attr? :float)].compact.join('; '))
|
15
15
|
- if attr? :link
|
16
|
-
a.image href=(attr :link)
|
16
|
+
a.image href=(attr :link) target=(attr :window) data-preview-link=(bool_data_attr :link_preview)
|
17
17
|
img src=image_uri(attr :target) alt=(attr :alt) width=(width) height=(height) style=((attr? :background) ? "background: #{attr :background}" : nil)
|
18
18
|
- else
|
19
19
|
img src=image_uri(attr :target) alt=(attr :alt) width=(width) height=(height) style=((attr? :background) ? "background: #{attr :background}" : nil)
|
@@ -5,20 +5,20 @@ span class=[@type,role] style=("float: #{attr :float}" if attr? :float)
|
|
5
5
|
- style_class << "fa-rotate-#{attr :rotate}" if attr? :rotate
|
6
6
|
- style_class << "fa-flip-#{attr :flip}" if attr? :flip
|
7
7
|
- if attr? :link
|
8
|
-
a.image href=(attr :link) target=(attr :window)
|
8
|
+
a.image href=(attr :link) target=(attr :window) data-preview-link=(bool_data_attr :link_preview)
|
9
9
|
i class=style_class title=(attr :title)
|
10
10
|
- else
|
11
11
|
i class=style_class title=(attr :title)
|
12
12
|
- elsif @type == 'icon' && !(@document.attr? :icons)
|
13
13
|
- if attr? :link
|
14
|
-
a.image href=(attr :link) target=(attr :window)
|
14
|
+
a.image href=(attr :link) target=(attr :window) data-preview-link=(bool_data_attr :link_preview)
|
15
15
|
|[#{attr :alt}]
|
16
16
|
- else
|
17
17
|
|[#{attr :alt}]
|
18
18
|
- else
|
19
19
|
- src = (@type == 'icon' ? (icon_uri @target) : (image_uri @target))
|
20
20
|
- if attr? :link
|
21
|
-
a.image href=(attr :link) target=(attr :window)
|
21
|
+
a.image href=(attr :link) target=(attr :window) data-preview-link=(bool_data_attr :link_preview)
|
22
22
|
img src=src alt=(attr :alt) width=(attr :width) height=(attr :height) title=(attr :title)
|
23
23
|
- else
|
24
24
|
img src=src alt=(attr :alt) width=(attr :width) height=(attr :height) title=(attr :title)
|
data/templates/listing.html.slim
CHANGED
data/templates/section.html.slim
CHANGED
@@ -33,32 +33,42 @@
|
|
33
33
|
- if attr? 'background-color'
|
34
34
|
- data_background_color = attr 'background-color'
|
35
35
|
|
36
|
+
- parent_section_with_vertical_slides = @level == 1 && !vertical_slides.empty?
|
37
|
+
|
38
|
+
- content_for :section
|
39
|
+
section(id=(titleless ? nil : id)
|
40
|
+
class=roles
|
41
|
+
data-transition=(attr 'transition')
|
42
|
+
data-transition-speed=(attr 'transition-speed')
|
43
|
+
data-background-color=data_background_color
|
44
|
+
data-background-image=data_background_image
|
45
|
+
data-background-size=(data_background_size || attr('background-size'))
|
46
|
+
data-background-repeat=(data_background_repeat || attr('background-repeat'))
|
47
|
+
data-background-transition=(data_background_transition || attr('background-transition'))
|
48
|
+
data-background-position=(data_background_position || attr('background-position'))
|
49
|
+
data-background-iframe=(attr "background-iframe")
|
50
|
+
data-background-video=(attr "background-video")
|
51
|
+
data-background-video-loop=((attr? 'background-video-loop') || (option? 'loop'))
|
52
|
+
data-background-video-muted=((attr? 'background-video-muted') || (option? 'muted'))
|
53
|
+
data-background-opacity=(attr "background-opacity")
|
54
|
+
data-state=(attr 'state'))
|
55
|
+
- unless hide_title
|
56
|
+
h2=section_title
|
57
|
+
- if parent_section_with_vertical_slides
|
58
|
+
- unless (_blocks = blocks - vertical_slides).empty?
|
59
|
+
div.slide-content
|
60
|
+
- _blocks.each do |block|
|
61
|
+
=block.convert
|
62
|
+
- else
|
63
|
+
- unless (_content = content.chomp).empty?
|
64
|
+
div.slide-content
|
65
|
+
=_content
|
66
|
+
|
36
67
|
/ RENDERING
|
37
68
|
/ render parent section of vertical slides set
|
38
|
-
- if
|
69
|
+
- if parent_section_with_vertical_slides
|
39
70
|
section
|
40
|
-
|
41
|
-
section(id=(titleless ? nil : id)
|
42
|
-
class=roles
|
43
|
-
data-transition=(attr 'transition')
|
44
|
-
data-transition-speed=(attr 'transition-speed')
|
45
|
-
data-background-color=data_background_color
|
46
|
-
data-background-image=data_background_image
|
47
|
-
data-background-size=(data_background_size || attr('background-size'))
|
48
|
-
data-background-repeat=(data_background_repeat || attr('background-repeat'))
|
49
|
-
data-background-transition=(data_background_transition || attr('background-transition'))
|
50
|
-
data-background-position=(data_background_position || attr('background-position'))
|
51
|
-
data-background-iframe=(attr "background-iframe")
|
52
|
-
data-background-video=(attr "background-video")
|
53
|
-
data-background-video-loop=((attr? 'background-video-loop') || (option? 'loop'))
|
54
|
-
data-background-video-muted=((attr? 'background-video-muted') || (option? 'muted'))
|
55
|
-
data-background-opacity=(attr "background-opacity")
|
56
|
-
data-state=(attr 'state'))
|
57
|
-
|
58
|
-
- unless hide_title
|
59
|
-
h2=title
|
60
|
-
- (blocks - vertical_slides).each do |block|
|
61
|
-
=block.convert
|
71
|
+
- yield_content :section
|
62
72
|
- vertical_slides.each do |subsection|
|
63
73
|
=subsection.convert
|
64
74
|
|
@@ -69,23 +79,4 @@
|
|
69
79
|
h level=(@level) =title
|
70
80
|
=content.chomp
|
71
81
|
- else
|
72
|
-
|
73
|
-
class=roles
|
74
|
-
data-transition=(attr 'transition')
|
75
|
-
data-transition-speed=(attr 'transition-speed')
|
76
|
-
data-background-color=data_background_color
|
77
|
-
data-background-image=data_background_image
|
78
|
-
data-background-size=(data_background_size || attr('background-size'))
|
79
|
-
data-background-repeat=(data_background_repeat || attr('background-repeat'))
|
80
|
-
data-background-transition=(data_background_transition || attr('background-transition'))
|
81
|
-
data-background-position=(data_background_position || attr('background-position'))
|
82
|
-
data-background-iframe=(attr "background-iframe")
|
83
|
-
data-background-video=(attr "background-video")
|
84
|
-
data-background-video-loop=((attr? 'background-video-loop') || (option? 'loop'))
|
85
|
-
data-background-video-muted=((attr? 'background-video-muted') || (option? 'muted'))
|
86
|
-
data-background-opacity=(attr "background-opacity")
|
87
|
-
data-state=(attr 'state'))
|
88
|
-
|
89
|
-
- unless hide_title
|
90
|
-
h2=title
|
91
|
-
=content.chomp
|
82
|
+
- yield_content :section
|