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
@@ -6,15 +6,34 @@ module Asciidoctor
|
|
6
6
|
class HighlightJsAdapter < Asciidoctor::SyntaxHighlighter::Base
|
7
7
|
register_for 'highlightjs', 'highlight.js'
|
8
8
|
|
9
|
+
HIGHLIGHT_JS_VERSION = '9.18.1'
|
10
|
+
|
9
11
|
def initialize *args
|
10
12
|
super
|
11
13
|
@name = @pre_class = 'highlightjs'
|
12
14
|
end
|
13
15
|
|
16
|
+
# Convert between highlight notation formats
|
17
|
+
# In addition to Asciidoctor's linenum converter leveraging core's resolve_lines_to_highlight,
|
18
|
+
# we also support reveal.js step-by-step highlights.
|
19
|
+
# The steps are split using the | character
|
20
|
+
# For example, this method makes "1..3|6,7" into "1,2,3|6,7"
|
21
|
+
def _convert_highlight_to_revealjs node
|
22
|
+
return node.attributes["highlight"].split("|").collect { |linenums|
|
23
|
+
node.resolve_lines_to_highlight(node.content, linenums).join(",")
|
24
|
+
}.join("|")
|
25
|
+
end
|
26
|
+
|
14
27
|
def format node, lang, opts
|
15
28
|
super node, lang, (opts.merge transform: proc { |_, code|
|
16
29
|
code['class'] = %(language-#{lang || 'none'} hljs)
|
17
30
|
code['data-noescape'] = true
|
31
|
+
|
32
|
+
if node.attributes.key?("highlight")
|
33
|
+
code['data-line-numbers'] = self._convert_highlight_to_revealjs(node)
|
34
|
+
elsif node.attributes.key?("linenums")
|
35
|
+
code['data-line-numbers'] = ''
|
36
|
+
end
|
18
37
|
})
|
19
38
|
end
|
20
39
|
|
@@ -31,10 +50,322 @@ module Asciidoctor
|
|
31
50
|
if doc.attr? 'highlightjs-theme'
|
32
51
|
theme_href = doc.attr 'highlightjs-theme'
|
33
52
|
else
|
34
|
-
theme_href = "#{revealjsdir}/lib/css/
|
53
|
+
theme_href = "#{revealjsdir}/lib/css/monokai.css"
|
35
54
|
end
|
36
|
-
|
55
|
+
base_url = doc.attr 'highlightjsdir', %(#{opts[:cdn_base_url]}/highlight.js/#{HIGHLIGHT_JS_VERSION})
|
56
|
+
%(<link rel="stylesheet" href="#{theme_href}"#{opts[:self_closing_tag_slash]}>
|
57
|
+
<script src="#{base_url}/highlight.min.js"></script>
|
58
|
+
#{(doc.attr? 'highlightjs-languages') ? ((doc.attr 'highlightjs-languages').split ',').map {|lang| %[<script src="#{base_url}/languages/#{lang.lstrip}.min.js"></script>\n] }.join : ''}
|
59
|
+
<script>
|
60
|
+
#{HIGHLIGHT_PLUGIN_SOURCE}
|
61
|
+
hljs.initHighlightingOnLoad();
|
62
|
+
</script>)
|
37
63
|
end
|
64
|
+
|
65
|
+
# this file was copied-pasted from https://raw.githubusercontent.com/hakimel/reveal.js/3.9.2/plugin/highlight/highlight.js
|
66
|
+
# please note that the bundled highlight.js code was removed so we can use the latest version from cdnjs.
|
67
|
+
HIGHLIGHT_PLUGIN_SOURCE = %q{
|
68
|
+
/* highlightjs-line-numbers.js 2.6.0 | (C) 2018 Yauheni Pakala | MIT License | github.com/wcoder/highlightjs-line-numbers.js */
|
69
|
+
/* Edited by Hakim for reveal.js; removed async timeout */
|
70
|
+
!function(n,e){"use strict";function t(){var n=e.createElement("style");n.type="text/css",n.innerHTML=g(".{0}{border-collapse:collapse}.{0} td{padding:0}.{1}:before{content:attr({2})}",[v,L,b]),e.getElementsByTagName("head")[0].appendChild(n)}function r(t){"interactive"===e.readyState||"complete"===e.readyState?i(t):n.addEventListener("DOMContentLoaded",function(){i(t)})}function i(t){try{var r=e.querySelectorAll("code.hljs,code.nohighlight");for(var i in r)r.hasOwnProperty(i)&&l(r[i],t)}catch(o){n.console.error("LineNumbers error: ",o)}}function l(n,e){"object"==typeof n&&f(function(){n.innerHTML=s(n,e)})}function o(n,e){if("string"==typeof n){var t=document.createElement("code");return t.innerHTML=n,s(t,e)}}function s(n,e){e=e||{singleLine:!1};var t=e.singleLine?0:1;return c(n),a(n.innerHTML,t)}function a(n,e){var t=u(n);if(""===t[t.length-1].trim()&&t.pop(),t.length>e){for(var r="",i=0,l=t.length;i<l;i++)r+=g('<tr><td class="{0}"><div class="{1} {2}" {3}="{5}"></div></td><td class="{4}"><div class="{1}">{6}</div></td></tr>',[j,m,L,b,p,i+1,t[i].length>0?t[i]:" "]);return g('<table class="{0}">{1}</table>',[v,r])}return n}function c(n){var e=n.childNodes;for(var t in e)if(e.hasOwnProperty(t)){var r=e[t];h(r.textContent)>0&&(r.childNodes.length>0?c(r):d(r.parentNode))}}function d(n){var e=n.className;if(/hljs-/.test(e)){for(var t=u(n.innerHTML),r=0,i="";r<t.length;r++){var l=t[r].length>0?t[r]:" ";i+=g('<span class="{0}">{1}</span>\n',[e,l])}n.innerHTML=i.trim()}}function u(n){return 0===n.length?[]:n.split(y)}function h(n){return(n.trim().match(y)||[]).length}function f(e){e()}function g(n,e){return n.replace(/\{(\d+)\}/g,function(n,t){return e[t]?e[t]:n})}var v="hljs-ln",m="hljs-ln-line",p="hljs-ln-code",j="hljs-ln-numbers",L="hljs-ln-n",b="data-line-number",y=/\r\n|\r|\n/g;n.hljs?(n.hljs.initLineNumbersOnLoad=r,n.hljs.lineNumbersBlock=l,n.hljs.lineNumbersValue=o,t()):n.console.error("highlight.js not detected!")}(window,document);
|
71
|
+
|
72
|
+
/**
|
73
|
+
* This reveal.js plugin is wrapper around the highlight.js
|
74
|
+
* syntax highlighting library.
|
75
|
+
*/
|
76
|
+
(function( root, factory ) {
|
77
|
+
if (typeof define === 'function' && define.amd) {
|
78
|
+
root.RevealHighlight = factory();
|
79
|
+
} else if( typeof exports === 'object' ) {
|
80
|
+
module.exports = factory();
|
81
|
+
} else {
|
82
|
+
// Browser globals (root is window)
|
83
|
+
root.RevealHighlight = factory();
|
84
|
+
}
|
85
|
+
}( this, function() {
|
86
|
+
|
87
|
+
// Function to perform a better "data-trim" on code snippets
|
88
|
+
// Will slice an indentation amount on each line of the snippet (amount based on the line having the lowest indentation length)
|
89
|
+
function betterTrim(snippetEl) {
|
90
|
+
// Helper functions
|
91
|
+
function trimLeft(val) {
|
92
|
+
// Adapted from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill
|
93
|
+
return val.replace(/^[\s\uFEFF\xA0]+/g, '');
|
94
|
+
}
|
95
|
+
function trimLineBreaks(input) {
|
96
|
+
var lines = input.split('\n');
|
97
|
+
|
98
|
+
// Trim line-breaks from the beginning
|
99
|
+
for (var i = 0; i < lines.length; i++) {
|
100
|
+
if (lines[i].trim() === '') {
|
101
|
+
lines.splice(i--, 1);
|
102
|
+
} else break;
|
103
|
+
}
|
104
|
+
|
105
|
+
// Trim line-breaks from the end
|
106
|
+
for (var i = lines.length-1; i >= 0; i--) {
|
107
|
+
if (lines[i].trim() === '') {
|
108
|
+
lines.splice(i, 1);
|
109
|
+
} else break;
|
110
|
+
}
|
111
|
+
|
112
|
+
return lines.join('\n');
|
113
|
+
}
|
114
|
+
|
115
|
+
// Main function for betterTrim()
|
116
|
+
return (function(snippetEl) {
|
117
|
+
var content = trimLineBreaks(snippetEl.innerHTML);
|
118
|
+
var lines = content.split('\n');
|
119
|
+
// Calculate the minimum amount to remove on each line start of the snippet (can be 0)
|
120
|
+
var pad = lines.reduce(function(acc, line) {
|
121
|
+
if (line.length > 0 && trimLeft(line).length > 0 && acc > line.length - trimLeft(line).length) {
|
122
|
+
return line.length - trimLeft(line).length;
|
123
|
+
}
|
124
|
+
return acc;
|
125
|
+
}, Number.POSITIVE_INFINITY);
|
126
|
+
// Slice each line with this amount
|
127
|
+
return lines.map(function(line, index) {
|
128
|
+
return line.slice(pad);
|
129
|
+
})
|
130
|
+
.join('\n');
|
131
|
+
})(snippetEl);
|
132
|
+
}
|
133
|
+
|
134
|
+
var RevealHighlight = {
|
135
|
+
|
136
|
+
HIGHLIGHT_STEP_DELIMITER: '|',
|
137
|
+
HIGHLIGHT_LINE_DELIMITER: ',',
|
138
|
+
HIGHLIGHT_LINE_RANGE_DELIMITER: '-',
|
139
|
+
|
140
|
+
init: function() {
|
141
|
+
|
142
|
+
// Read the plugin config options and provide fallbacks
|
143
|
+
var config = Reveal.getConfig().highlight || {};
|
144
|
+
config.highlightOnLoad = typeof config.highlightOnLoad === 'boolean' ? config.highlightOnLoad : true;
|
145
|
+
config.escapeHTML = typeof config.escapeHTML === 'boolean' ? config.escapeHTML : true;
|
146
|
+
|
147
|
+
[].slice.call( document.querySelectorAll( '.reveal pre code' ) ).forEach( function( block ) {
|
148
|
+
|
149
|
+
// Trim whitespace if the "data-trim" attribute is present
|
150
|
+
if( block.hasAttribute( 'data-trim' ) && typeof block.innerHTML.trim === 'function' ) {
|
151
|
+
block.innerHTML = betterTrim( block );
|
152
|
+
}
|
153
|
+
|
154
|
+
// Escape HTML tags unless the "data-noescape" attrbute is present
|
155
|
+
if( config.escapeHTML && !block.hasAttribute( 'data-noescape' )) {
|
156
|
+
block.innerHTML = block.innerHTML.replace( /</g,"<").replace(/>/g, '>' );
|
157
|
+
}
|
158
|
+
|
159
|
+
// Re-highlight when focus is lost (for contenteditable code)
|
160
|
+
block.addEventListener( 'focusout', function( event ) {
|
161
|
+
hljs.highlightBlock( event.currentTarget );
|
162
|
+
}, false );
|
163
|
+
|
164
|
+
if( config.highlightOnLoad ) {
|
165
|
+
RevealHighlight.highlightBlock( block );
|
166
|
+
}
|
167
|
+
} );
|
168
|
+
|
169
|
+
},
|
170
|
+
|
171
|
+
/**
|
172
|
+
* Highlights a code block. If the <code> node has the
|
173
|
+
* 'data-line-numbers' attribute we also generate slide
|
174
|
+
* numbers.
|
175
|
+
*
|
176
|
+
* If the block contains multiple line highlight steps,
|
177
|
+
* we clone the block and create a fragment for each step.
|
178
|
+
*/
|
179
|
+
highlightBlock: function( block ) {
|
180
|
+
|
181
|
+
hljs.highlightBlock( block );
|
182
|
+
|
183
|
+
// Don't generate line numbers for empty code blocks
|
184
|
+
if( block.innerHTML.trim().length === 0 ) return;
|
185
|
+
|
186
|
+
if( block.hasAttribute( 'data-line-numbers' ) ) {
|
187
|
+
hljs.lineNumbersBlock( block, { singleLine: true } );
|
188
|
+
|
189
|
+
// If there is at least one highlight step, generate
|
190
|
+
// fragments
|
191
|
+
var highlightSteps = RevealHighlight.deserializeHighlightSteps( block.getAttribute( 'data-line-numbers' ) );
|
192
|
+
if( highlightSteps.length > 1 ) {
|
193
|
+
|
194
|
+
// If the original code block has a fragment-index,
|
195
|
+
// each clone should follow in an incremental sequence
|
196
|
+
var fragmentIndex = parseInt( block.getAttribute( 'data-fragment-index' ), 10 );
|
197
|
+
if( typeof fragmentIndex !== 'number' || isNaN( fragmentIndex ) ) {
|
198
|
+
fragmentIndex = null;
|
199
|
+
}
|
200
|
+
|
201
|
+
// Generate fragments for all steps except the original block
|
202
|
+
highlightSteps.slice(1).forEach( function( highlight ) {
|
203
|
+
|
204
|
+
var fragmentBlock = block.cloneNode( true );
|
205
|
+
fragmentBlock.setAttribute( 'data-line-numbers', RevealHighlight.serializeHighlightSteps( [ highlight ] ) );
|
206
|
+
fragmentBlock.classList.add( 'fragment' );
|
207
|
+
block.parentNode.appendChild( fragmentBlock );
|
208
|
+
RevealHighlight.highlightLines( fragmentBlock );
|
209
|
+
|
210
|
+
if( typeof fragmentIndex === 'number' ) {
|
211
|
+
fragmentBlock.setAttribute( 'data-fragment-index', fragmentIndex );
|
212
|
+
fragmentIndex += 1;
|
213
|
+
}
|
214
|
+
else {
|
215
|
+
fragmentBlock.removeAttribute( 'data-fragment-index' );
|
216
|
+
}
|
217
|
+
|
218
|
+
} );
|
219
|
+
|
220
|
+
block.removeAttribute( 'data-fragment-index' )
|
221
|
+
block.setAttribute( 'data-line-numbers', RevealHighlight.serializeHighlightSteps( [ highlightSteps[0] ] ) );
|
222
|
+
|
223
|
+
}
|
224
|
+
|
225
|
+
RevealHighlight.highlightLines( block );
|
226
|
+
|
227
|
+
}
|
228
|
+
|
229
|
+
},
|
230
|
+
|
231
|
+
/**
|
232
|
+
* Visually emphasize specific lines within a code block.
|
233
|
+
* This only works on blocks with line numbering turned on.
|
234
|
+
*
|
235
|
+
* @param {HTMLElement} block a <code> block
|
236
|
+
* @param {String} [linesToHighlight] The lines that should be
|
237
|
+
* highlighted in this format:
|
238
|
+
* "1" = highlights line 1
|
239
|
+
* "2,5" = highlights lines 2 & 5
|
240
|
+
* "2,5-7" = highlights lines 2, 5, 6 & 7
|
241
|
+
*/
|
242
|
+
highlightLines: function( block, linesToHighlight ) {
|
243
|
+
|
244
|
+
var highlightSteps = RevealHighlight.deserializeHighlightSteps( linesToHighlight || block.getAttribute( 'data-line-numbers' ) );
|
245
|
+
|
246
|
+
if( highlightSteps.length ) {
|
247
|
+
|
248
|
+
highlightSteps[0].forEach( function( highlight ) {
|
249
|
+
|
250
|
+
var elementsToHighlight = [];
|
251
|
+
|
252
|
+
// Highlight a range
|
253
|
+
if( typeof highlight.end === 'number' ) {
|
254
|
+
elementsToHighlight = [].slice.call( block.querySelectorAll( 'table tr:nth-child(n+'+highlight.start+'):nth-child(-n+'+highlight.end+')' ) );
|
255
|
+
}
|
256
|
+
// Highlight a single line
|
257
|
+
else if( typeof highlight.start === 'number' ) {
|
258
|
+
elementsToHighlight = [].slice.call( block.querySelectorAll( 'table tr:nth-child('+highlight.start+')' ) );
|
259
|
+
}
|
260
|
+
|
261
|
+
if( elementsToHighlight.length ) {
|
262
|
+
elementsToHighlight.forEach( function( lineElement ) {
|
263
|
+
lineElement.classList.add( 'highlight-line' );
|
264
|
+
} );
|
265
|
+
|
266
|
+
block.classList.add( 'has-highlights' );
|
267
|
+
}
|
268
|
+
|
269
|
+
} );
|
270
|
+
|
271
|
+
}
|
272
|
+
|
273
|
+
},
|
274
|
+
|
275
|
+
/**
|
276
|
+
* Parses and formats a user-defined string of line
|
277
|
+
* numbers to highlight.
|
278
|
+
*
|
279
|
+
* @example
|
280
|
+
* RevealHighlight.deserializeHighlightSteps( '1,2|3,5-10' )
|
281
|
+
* // [
|
282
|
+
* // [ { start: 1 }, { start: 2 } ],
|
283
|
+
* // [ { start: 3 }, { start: 5, end: 10 } ]
|
284
|
+
* // ]
|
285
|
+
*/
|
286
|
+
deserializeHighlightSteps: function( highlightSteps ) {
|
287
|
+
|
288
|
+
// Remove whitespace
|
289
|
+
highlightSteps = highlightSteps.replace( /\s/g, '' );
|
290
|
+
|
291
|
+
// Divide up our line number groups
|
292
|
+
highlightSteps = highlightSteps.split( RevealHighlight.HIGHLIGHT_STEP_DELIMITER );
|
293
|
+
|
294
|
+
return highlightSteps.map( function( highlights ) {
|
295
|
+
|
296
|
+
return highlights.split( RevealHighlight.HIGHLIGHT_LINE_DELIMITER ).map( function( highlight ) {
|
297
|
+
|
298
|
+
// Parse valid line numbers
|
299
|
+
if( /^[\d-]+$/.test( highlight ) ) {
|
300
|
+
|
301
|
+
highlight = highlight.split( RevealHighlight.HIGHLIGHT_LINE_RANGE_DELIMITER );
|
302
|
+
|
303
|
+
var lineStart = parseInt( highlight[0], 10 ),
|
304
|
+
lineEnd = parseInt( highlight[1], 10 );
|
305
|
+
|
306
|
+
if( isNaN( lineEnd ) ) {
|
307
|
+
return {
|
308
|
+
start: lineStart
|
309
|
+
};
|
310
|
+
}
|
311
|
+
else {
|
312
|
+
return {
|
313
|
+
start: lineStart,
|
314
|
+
end: lineEnd
|
315
|
+
};
|
316
|
+
}
|
317
|
+
|
318
|
+
}
|
319
|
+
// If no line numbers are provided, no code will be highlighted
|
320
|
+
else {
|
321
|
+
|
322
|
+
return {};
|
323
|
+
|
324
|
+
}
|
325
|
+
|
326
|
+
} );
|
327
|
+
|
328
|
+
} );
|
329
|
+
|
330
|
+
},
|
331
|
+
|
332
|
+
/**
|
333
|
+
* Serializes parsed line number data into a string so
|
334
|
+
* that we can store it in the DOM.
|
335
|
+
*/
|
336
|
+
serializeHighlightSteps: function( highlightSteps ) {
|
337
|
+
|
338
|
+
return highlightSteps.map( function( highlights ) {
|
339
|
+
|
340
|
+
return highlights.map( function( highlight ) {
|
341
|
+
|
342
|
+
// Line range
|
343
|
+
if( typeof highlight.end === 'number' ) {
|
344
|
+
return highlight.start + RevealHighlight.HIGHLIGHT_LINE_RANGE_DELIMITER + highlight.end;
|
345
|
+
}
|
346
|
+
// Single line
|
347
|
+
else if( typeof highlight.start === 'number' ) {
|
348
|
+
return highlight.start;
|
349
|
+
}
|
350
|
+
// All lines
|
351
|
+
else {
|
352
|
+
return '';
|
353
|
+
}
|
354
|
+
|
355
|
+
} ).join( RevealHighlight.HIGHLIGHT_LINE_DELIMITER );
|
356
|
+
|
357
|
+
} ).join( RevealHighlight.HIGHLIGHT_STEP_DELIMITER );
|
358
|
+
|
359
|
+
}
|
360
|
+
|
361
|
+
}
|
362
|
+
|
363
|
+
Reveal.registerPlugin( 'highlight', RevealHighlight );
|
364
|
+
|
365
|
+
return RevealHighlight;
|
366
|
+
|
367
|
+
}));
|
368
|
+
}
|
38
369
|
end
|
39
370
|
end
|
40
371
|
end
|
@@ -0,0 +1,141 @@
|
|
1
|
+
.reveal div.right{float:right}
|
2
|
+
|
3
|
+
/* listing block */
|
4
|
+
.reveal .listingblock.stretch>.content{height: 100%}
|
5
|
+
.reveal .listingblock.stretch>.content>pre{height: 100%}
|
6
|
+
.reveal .listingblock.stretch>.content>pre>code{height:100%;max-height:100%}
|
7
|
+
|
8
|
+
/* tables */
|
9
|
+
table{border-collapse:collapse;border-spacing:0}
|
10
|
+
table{margin-bottom:1.25em;border:solid 1px #dedede}
|
11
|
+
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;text-align:left}
|
12
|
+
table tr th,table tr td{padding:.5625em .625em;font-size:inherit}
|
13
|
+
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
|
14
|
+
td.tableblock>.content{margin-bottom:1.25em}
|
15
|
+
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
|
16
|
+
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
|
17
|
+
table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0}
|
18
|
+
table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}
|
19
|
+
table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}
|
20
|
+
table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px}
|
21
|
+
table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0}
|
22
|
+
table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}
|
23
|
+
table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}
|
24
|
+
table.frame-all{border-width:1px}
|
25
|
+
table.frame-sides{border-width:0 1px}
|
26
|
+
table.frame-topbot,table.frame-ends{border-width:1px 0}
|
27
|
+
.reveal table th.halign-left,.reveal table td.halign-left{text-align:left}
|
28
|
+
.reveal table th.halign-right,.reveal table td.halign-right{text-align:right}
|
29
|
+
.reveal table th.halign-center,.reveal table td.halign-center{text-align:center}
|
30
|
+
.reveal table th.valign-top,.reveal table td.valign-top{vertical-align:top}
|
31
|
+
.reveal table th.valign-bottom,.reveal table td.valign-bottom{vertical-align:bottom}
|
32
|
+
.reveal table th.valign-middle,.reveal table td.valign-middle{vertical-align:middle}
|
33
|
+
table thead th,table tfoot th{font-weight:bold}
|
34
|
+
tbody tr th{display:table-cell;line-height:1.6}
|
35
|
+
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{font-weight:bold}
|
36
|
+
thead{display:table-header-group}
|
37
|
+
|
38
|
+
.reveal table.grid-none th,.reveal table.grid-none td{border-bottom:0!important}
|
39
|
+
|
40
|
+
/* kbd macro */
|
41
|
+
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
|
42
|
+
.keyseq kbd:first-child{margin-left:0}
|
43
|
+
.keyseq kbd:last-child{margin-right:0}
|
44
|
+
|
45
|
+
/* callouts */
|
46
|
+
.conum[data-value] {display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:50%;border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
|
47
|
+
.conum[data-value] *{color:#fff!important}
|
48
|
+
.conum[data-value]+b{display:none}
|
49
|
+
.conum[data-value]:after{content:attr(data-value)}
|
50
|
+
pre .conum[data-value]{position:relative;top:-.125em}
|
51
|
+
b.conum *{color:inherit!important}
|
52
|
+
.conum:not([data-value]):empty{display:none}
|
53
|
+
/* Callout list */
|
54
|
+
.hdlist>table,.colist>table{border:0;background:none}
|
55
|
+
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
|
56
|
+
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
|
57
|
+
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
|
58
|
+
/* Disabled from Asciidoctor CSS because it caused callout list to go under the
|
59
|
+
* source listing when .stretch is applied (see #335)
|
60
|
+
* .literalblock+.colist,.listingblock+.colist{margin-top:-.5em} */
|
61
|
+
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
|
62
|
+
.colist td:not([class]):first-child img{max-width:none}
|
63
|
+
.colist td:not([class]):last-child{padding:.25em 0}
|
64
|
+
|
65
|
+
/* Override Asciidoctor CSS that causes issues with reveal.js features */
|
66
|
+
.reveal .hljs table{border: 0}
|
67
|
+
/* Callout list rows would have a bottom border with some reveal.js themes (see #335) */
|
68
|
+
.reveal .colist>table th, .reveal .colist>table td {border-bottom:0}
|
69
|
+
/* Fixes line height with Highlight.js source listing when linenums enabled (see #331) */
|
70
|
+
.reveal .hljs table thead tr th, .reveal .hljs table tfoot tr th, .reveal .hljs table tbody tr td, .reveal .hljs table tr td, .reveal .hljs table tfoot tr td{line-height:inherit}
|
71
|
+
|
72
|
+
/* Columns layout */
|
73
|
+
.columns .slide-content {
|
74
|
+
display: flex;
|
75
|
+
}
|
76
|
+
|
77
|
+
.columns.wrap .slide-content {
|
78
|
+
flex-wrap: wrap;
|
79
|
+
}
|
80
|
+
|
81
|
+
.columns.is-vcentered .slide-content {
|
82
|
+
align-items: center;
|
83
|
+
}
|
84
|
+
|
85
|
+
.columns .slide-content > .column {
|
86
|
+
display: block;
|
87
|
+
flex-basis: 0;
|
88
|
+
flex-grow: 1;
|
89
|
+
flex-shrink: 1;
|
90
|
+
padding: .75rem;
|
91
|
+
}
|
92
|
+
|
93
|
+
.columns .slide-content > .column.is-full {
|
94
|
+
flex: none;
|
95
|
+
width: 100%;
|
96
|
+
}
|
97
|
+
|
98
|
+
.columns .slide-content > .column.is-four-fifths {
|
99
|
+
flex: none;
|
100
|
+
width: 80%;
|
101
|
+
}
|
102
|
+
|
103
|
+
.columns .slide-content > .column.is-three-quarters {
|
104
|
+
flex: none;
|
105
|
+
width: 75%;
|
106
|
+
}
|
107
|
+
|
108
|
+
.columns .slide-content > .column.is-two-thirds {
|
109
|
+
flex: none;
|
110
|
+
width: 66.6666%;
|
111
|
+
}
|
112
|
+
|
113
|
+
.columns .slide-content > .column.is-three-fifths {
|
114
|
+
flex: none;
|
115
|
+
width: 60%;
|
116
|
+
}
|
117
|
+
|
118
|
+
.columns .slide-content > .column.is-half {
|
119
|
+
flex: none;
|
120
|
+
width: 50%;
|
121
|
+
}
|
122
|
+
|
123
|
+
.columns .slide-content > .column.is-two-fifths {
|
124
|
+
flex: none;
|
125
|
+
width: 40%;
|
126
|
+
}
|
127
|
+
|
128
|
+
.columns .slide-content > .column.is-one-third {
|
129
|
+
flex: none;
|
130
|
+
width: 33.3333%;
|
131
|
+
}
|
132
|
+
|
133
|
+
.columns .slide-content > .column.is-one-quarter {
|
134
|
+
flex: none;
|
135
|
+
width: 25%;
|
136
|
+
}
|
137
|
+
|
138
|
+
.columns .slide-content > .column.is-one-fifth {
|
139
|
+
flex: none;
|
140
|
+
width: 20%;
|
141
|
+
}
|