asciidoctor-revealjs 3.0.0 → 4.1.0.rc3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.adoc +1 -1
  3. data/README.adoc +390 -63
  4. data/Rakefile +30 -7
  5. data/asciidoctor-revealjs.gemspec +6 -4
  6. data/bin/asciidoctor-revealjs +7 -0
  7. data/examples/a11y-dark.css +99 -0
  8. data/examples/autoslide.adoc +22 -0
  9. data/examples/custom-layout.adoc +10 -0
  10. data/examples/customcss.adoc +1 -1
  11. data/examples/data-attributes.adoc +245 -0
  12. data/examples/docinfo-footer-revealjs.html +10 -0
  13. data/examples/docinfo-revealjs.html +7 -0
  14. data/examples/font-awesome-specific-version.adoc +11 -0
  15. data/examples/font-awesome.adoc +23 -4
  16. data/examples/font-awesome.css +3 -0
  17. data/examples/footnotes.adoc +46 -0
  18. data/examples/fragments.adoc +44 -0
  19. data/examples/fragments.css +18 -0
  20. data/examples/grid-layout-3x2.adoc +50 -0
  21. data/examples/grid-layout-docinfo-revealjs.html +11 -0
  22. data/examples/grid-layout.adoc +194 -0
  23. data/examples/history-hash.adoc +19 -0
  24. data/examples/history-regression-tests.adoc +0 -5
  25. data/examples/history.adoc +4 -4
  26. data/examples/images/asciidoctor-logo.svg +102 -0
  27. data/examples/images/cute-cat-1.jpg +0 -0
  28. data/examples/images/cute-cat-2.jpg +0 -0
  29. data/examples/images/cute-cat-3.jpg +0 -0
  30. data/examples/images/flock-of-seagulls_daniel-simion.mp3 +0 -0
  31. data/examples/issue-grid-layout-images.adoc +25 -0
  32. data/examples/level-sectnums.adoc +24 -0
  33. data/examples/links-preview.adoc +32 -0
  34. data/examples/links.adoc +39 -0
  35. data/examples/mathjax-cdn.adoc +21 -0
  36. data/examples/mathjax.adoc +20 -0
  37. data/examples/release-4.0.adoc +192 -0
  38. data/examples/release-4.0.css +23 -0
  39. data/examples/release-4.1.adoc +133 -0
  40. data/examples/release-4.1.css +50 -0
  41. data/examples/revealjs-custom-theme.adoc +10 -0
  42. data/examples/source-coderay.adoc +15 -0
  43. data/examples/source-emphasis.adoc +128 -0
  44. data/examples/source-highlightjs-html.adoc +1 -1
  45. data/examples/source-highlightjs-languages.adoc +27 -0
  46. data/examples/source-highlightjs.adoc +85 -2
  47. data/examples/source-pygments.adoc +12 -0
  48. data/examples/source-rouge-docinfo.html +8 -0
  49. data/examples/source-rouge.adoc +18 -0
  50. data/examples/steps.adoc +87 -0
  51. data/examples/text-alignments.adoc +44 -0
  52. data/examples/video.adoc +30 -8
  53. data/examples/with-docinfo-shared.adoc +13 -0
  54. data/lib/asciidoctor-revealjs/converter.rb +1053 -769
  55. data/lib/asciidoctor-revealjs/highlightjs.rb +333 -2
  56. data/lib/asciidoctor-revealjs/version.rb +1 -1
  57. data/templates/admonition.html.slim +1 -1
  58. data/templates/asciidoctor-compatibility.css +390 -0
  59. data/templates/audio.html.slim +1 -1
  60. data/templates/colist.html.slim +1 -1
  61. data/templates/dlist.html.slim +3 -3
  62. data/templates/document.html.slim +76 -59
  63. data/templates/example.html.slim +1 -1
  64. data/templates/helpers.rb +170 -5
  65. data/templates/image.html.slim +3 -3
  66. data/templates/inline_anchor.html.slim +6 -4
  67. data/templates/inline_button.html.slim +2 -1
  68. data/templates/inline_footnote.html.slim +11 -4
  69. data/templates/inline_image.html.slim +5 -8
  70. data/templates/inline_kbd.html.slim +3 -2
  71. data/templates/inline_menu.html.slim +4 -3
  72. data/templates/inline_quoted.html.slim +13 -21
  73. data/templates/listing.html.slim +15 -10
  74. data/templates/literal.html.slim +1 -1
  75. data/templates/olist.html.slim +2 -2
  76. data/templates/open.html.slim +3 -3
  77. data/templates/paragraph.html.slim +1 -1
  78. data/templates/quote.html.slim +1 -1
  79. data/templates/section.html.slim +51 -43
  80. data/templates/sidebar.html.slim +1 -1
  81. data/templates/stem.html.slim +1 -1
  82. data/templates/stretch_nested_elements.js.slim +65 -0
  83. data/templates/table.html.slim +3 -2
  84. data/templates/title_slide.html.slim +28 -0
  85. data/templates/ulist.html.slim +3 -3
  86. data/templates/verse.html.slim +1 -1
  87. data/templates/video.html.slim +14 -8
  88. metadata +81 -18
  89. data/CHANGELOG.adoc +0 -425
  90. data/HACKING.adoc +0 -386
  91. data/examples/revealjs-features.adoc +0 -23
  92. data/templates/asciidoctor_revealjs.css.slim +0 -59
data/Rakefile CHANGED
@@ -4,11 +4,13 @@ require 'asciidoctor'
4
4
  require 'asciidoctor/doctest'
5
5
  require 'colorize'
6
6
  require 'tilt'
7
+ require 'rake/testtask'
7
8
 
8
9
  CONVERTER_FILE = 'lib/asciidoctor-revealjs/converter.rb'
9
10
  JS_FILE = 'build/asciidoctor-reveal.js'
10
11
  DIST_FILE = 'dist/main.js'
11
12
  TEMPLATES_DIR = 'templates'
13
+ PUBLIC_DIR = 'public'
12
14
 
13
15
  file CONVERTER_FILE => FileList["#{TEMPLATES_DIR}/*"] do
14
16
  build_converter :fast
@@ -17,8 +19,7 @@ end
17
19
  namespace :build do
18
20
  desc 'Compile Slim templates and generate converter.rb'
19
21
  task :converter => 'clean' do
20
- # NOTE: using mode :fast by default due to a bug in ruby-beautify under Ruby 2.5
21
- # https://github.com/erniebrodeur/ruby-beautify/issues/45
22
+ # NOTE: use :pretty if you want to debug the generated code
22
23
  build_converter :fast
23
24
  end
24
25
 
@@ -40,7 +41,8 @@ namespace :build do
40
41
  mkdir_p [File.dirname(JS_FILE), File.dirname(DIST_FILE)]
41
42
  File.open(JS_FILE, 'w') do |file|
42
43
  template = File.read('src/asciidoctor-revealjs.tmpl.js')
43
- file << template.sub('//OPAL-GENERATED-CODE//', builder.to_s)
44
+ template['//OPAL-GENERATED-CODE//'] = builder.to_s
45
+ file << template
44
46
  end
45
47
  File.binwrite "#{JS_FILE}.map", builder.source_map
46
48
 
@@ -52,6 +54,7 @@ task :build => 'build:converter'
52
54
 
53
55
  task :clean do
54
56
  rm_rf CONVERTER_FILE
57
+ rm_rf PUBLIC_DIR
55
58
  end
56
59
 
57
60
  def build_converter(mode = :pretty)
@@ -76,6 +79,7 @@ def build_converter(mode = :pretty)
76
79
  basebackend: 'html',
77
80
  outfilesuffix: '.html',
78
81
  filetype: 'html',
82
+ supports_templates: true
79
83
  },
80
84
  delegate_backend: 'html5',
81
85
  engine_opts: {
@@ -94,6 +98,11 @@ DocTest::RakeTasks.new do |t|
94
98
  t.converter_opts = { backend_name: 'revealjs' }
95
99
  end
96
100
 
101
+ Rake::TestTask.new(:test) do |t|
102
+ t.test_files = FileList['test/asciidoctor-revealjs/*_test.rb']
103
+ t.warning = false
104
+ end
105
+
97
106
  task 'prepare-converter' do
98
107
  # Run as an external process to ensure that it will not affect tests
99
108
  # environment with extra loaded modules (especially slim).
@@ -105,7 +114,7 @@ end
105
114
  namespace :examples do
106
115
  desc 'Converts all the test slides into fully working examples that you can look in a browser'
107
116
  # converted slides will be put in examples/ directory
108
- task :convert do
117
+ task :convert => 'build:converter' do
109
118
  require 'slim-htag'
110
119
  require_relative 'lib/asciidoctor-revealjs'
111
120
  Dir.glob('examples/*.adoc') do |_file|
@@ -113,8 +122,7 @@ namespace :examples do
113
122
  out = Asciidoctor.convert_file _file,
114
123
  :safe => 'safe',
115
124
  :backend => 'revealjs',
116
- :base_dir => 'examples',
117
- :template_dir => 'templates'
125
+ :base_dir => 'examples'
118
126
  if out.instance_of? Asciidoctor::Document
119
127
  puts "✔️".green
120
128
  else
@@ -130,9 +138,24 @@ namespace :examples do
130
138
  `ruby -run -e httpd . -p 5000 -b 127.0.0.1`
131
139
  end
132
140
  end
141
+
142
+ task :publish do
143
+ FileUtils.rm_rf PUBLIC_DIR
144
+ Dir.mkdir PUBLIC_DIR
145
+ Dir.mkdir "#{PUBLIC_DIR}/reveal.js"
146
+ FileUtils.cp 'src/index.html', "#{PUBLIC_DIR}/index.html"
147
+ FileUtils.cp_r 'node_modules/reveal.js/', "#{PUBLIC_DIR}"
148
+ FileUtils.cp_r 'examples/images/', "#{PUBLIC_DIR}"
149
+ FileUtils.cp 'examples/release-4.0.html', "#{PUBLIC_DIR}/release-4.0.html"
150
+ FileUtils.cp 'examples/release-4.0.css', "#{PUBLIC_DIR}/release-4.0.css"
151
+ FileUtils.cp 'examples/release-4.1.html', "#{PUBLIC_DIR}/release-4.1.html"
152
+ FileUtils.cp 'examples/release-4.1.css', "#{PUBLIC_DIR}/release-4.1.css"
153
+ FileUtils.cp 'examples/a11y-dark.css', "#{PUBLIC_DIR}/a11y-dark.css"
154
+ end
133
155
  end
134
156
 
157
+ task 'test' => 'doctest'
135
158
  task 'doctest:test' => 'prepare-converter'
136
159
  task 'doctest:generate' => 'prepare-converter'
137
160
  # When no task specified, run test.
138
- task :default => :doctest
161
+ task :default => :test
@@ -34,15 +34,17 @@ Gem::Specification.new do |s|
34
34
  s.add_runtime_dependency 'thread_safe', '~> 0.3.5'
35
35
  s.add_runtime_dependency 'concurrent-ruby', '~> 1.0'
36
36
 
37
- s.add_development_dependency 'rake', '~> 10.4.2'
38
- s.add_development_dependency 'asciidoctor-doctest', '= 2.0.0.beta.5'
39
- s.add_development_dependency 'pry', '~> 0.10.4'
37
+ s.add_development_dependency 'rake', '~> 13.0.0'
38
+ s.add_development_dependency 'asciidoctor-doctest', '= 2.0.0.beta.7'
39
+ s.add_development_dependency 'minitest', '~> 5.14'
40
40
  if RUBY_ENGINE != 'jruby'
41
+ s.add_development_dependency 'pry', '~> 0.12.0'
42
+ s.add_development_dependency 'irb'
41
43
  s.add_development_dependency 'pry-byebug'
42
44
  s.add_development_dependency 'pygments.rb'
43
45
  end
44
46
  s.add_development_dependency 'colorize'
45
- s.add_development_dependency 'asciidoctor-templates-compiler', '~> 0.4.2'
47
+ s.add_development_dependency 'asciidoctor-templates-compiler', '~> 0.6.0'
46
48
  s.add_development_dependency 'slim', '~> 3.0.6'
47
49
  s.add_development_dependency 'slim-htag', '~> 0.1.0'
48
50
  s.add_development_dependency 'rouge'
@@ -9,6 +9,13 @@ require 'asciidoctor/cli'
9
9
 
10
10
  options = Asciidoctor::Cli::Options.new backend: 'revealjs'
11
11
 
12
+ # FIXME (from asciidoctor-pdf) provide an API in Asciidoctor for sub-components to print version information
13
+ unless ARGV != ['-v'] && (ARGV & ['-V', '--version']).empty?
14
+ $stdout.write %(Asciidoctor reveal.js #{Asciidoctor::Revealjs::VERSION} using )
15
+ options.print_version
16
+ exit 0
17
+ end
18
+
12
19
  # FIXME (from bespoke) This is a really bizarre API. Please make me simpler.
13
20
  if Integer === (result = options.parse! ARGV)
14
21
  exit result
@@ -0,0 +1,99 @@
1
+ /* a11y-dark theme */
2
+ /* Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css */
3
+ /* @author: ericwbailey */
4
+
5
+ /* Comment */
6
+ .hljs-comment,
7
+ .hljs-quote {
8
+ color: #d4d0ab;
9
+ }
10
+
11
+ /* Red */
12
+ .hljs-variable,
13
+ .hljs-template-variable,
14
+ .hljs-tag,
15
+ .hljs-name,
16
+ .hljs-selector-id,
17
+ .hljs-selector-class,
18
+ .hljs-regexp,
19
+ .hljs-deletion {
20
+ color: #ffa07a;
21
+ }
22
+
23
+ /* Orange */
24
+ .hljs-number,
25
+ .hljs-built_in,
26
+ .hljs-builtin-name,
27
+ .hljs-literal,
28
+ .hljs-type,
29
+ .hljs-params,
30
+ .hljs-meta,
31
+ .hljs-link {
32
+ color: #f5ab35;
33
+ }
34
+
35
+ /* Yellow */
36
+ .hljs-attribute {
37
+ color: #ffd700;
38
+ }
39
+
40
+ /* Green */
41
+ .hljs-string,
42
+ .hljs-symbol,
43
+ .hljs-bullet,
44
+ .hljs-addition {
45
+ color: #abe338;
46
+ }
47
+
48
+ /* Blue */
49
+ .hljs-title,
50
+ .hljs-section {
51
+ color: #32aaee;
52
+ }
53
+
54
+ /* Purple */
55
+ .hljs-keyword,
56
+ .hljs-selector-tag {
57
+ color: #dcc6e0;
58
+ }
59
+
60
+ .hljs {
61
+ display: block;
62
+ overflow-x: auto;
63
+ background: #2b2b2b;
64
+ color: #f8f8f2;
65
+ padding: 0.5em;
66
+ }
67
+
68
+ .hljs-emphasis {
69
+ font-style: italic;
70
+ }
71
+
72
+ .hljs-strong {
73
+ font-weight: bold;
74
+ }
75
+
76
+ @media screen and (-ms-high-contrast: active) {
77
+ .hljs-addition,
78
+ .hljs-attribute,
79
+ .hljs-built_in,
80
+ .hljs-builtin-name,
81
+ .hljs-bullet,
82
+ .hljs-comment,
83
+ .hljs-link,
84
+ .hljs-literal,
85
+ .hljs-meta,
86
+ .hljs-number,
87
+ .hljs-params,
88
+ .hljs-string,
89
+ .hljs-symbol,
90
+ .hljs-type,
91
+ .hljs-quote {
92
+ color: highlight;
93
+ }
94
+
95
+ .hljs-keyword,
96
+ .hljs-selector-tag {
97
+ font-weight: bold;
98
+ }
99
+ }
@@ -0,0 +1,22 @@
1
+ = Autoslide!
2
+ // automatically proceed to the next slide after 5 seconds
3
+ :revealjs_autoSlide: 5000
4
+
5
+ == Slide 0
6
+
7
+ I can do it in 5 seconds!
8
+
9
+ // on this slide we need 10 seconds
10
+ [autoslide=10000]
11
+ == Slide 1
12
+
13
+ All things considered, let's try again in 10 seconds.
14
+
15
+ [autoslide=1000]
16
+ == Slide 2
17
+
18
+ Don't blink or you'll miss me :)
19
+
20
+ == Slide 3
21
+
22
+ (:
@@ -0,0 +1,10 @@
1
+ // .custom-layout
2
+ // The three different ways to hide slide titles
3
+ // :include: //body/script | //div[@class="slides"]
4
+ // :header_footer:
5
+ = Custom Layout
6
+ :revealjs_disablelayout: true
7
+
8
+ == Layout Disabled!
9
+
10
+ Hello 👋
@@ -1,6 +1,6 @@
1
1
  // .customcss
2
2
  // Use of the customcss attribute to load external CSS
3
- // :include: //body/script | //div[@class="slides"]
3
+ // :include: //head//link[@rel="stylesheet"]
4
4
  // :header_footer:
5
5
  = Custom CSS
6
6
  Author
@@ -0,0 +1,245 @@
1
+ // :include: //div[@class="slides"]
2
+ // :header_footer:
3
+ = Data attributes
4
+ :stem:
5
+ :icons: font
6
+ :source-highlighter: highlight.js
7
+ :revealjs_hash: true
8
+ :experimental:
9
+
10
+ == Reference
11
+
12
+ https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes
13
+
14
+ // .paragraphs
15
+ == Paragraphs
16
+
17
+ [.fragment.highlight-blue,data-fragment-index=0]
18
+ blue
19
+
20
+ [.fragment,data-fragment-index=1]
21
+ white
22
+
23
+ [.fragment.highlight-red,data-fragment-index=0]
24
+ red
25
+
26
+ // .inline-images
27
+ == Inline images
28
+ :imagesdir: images
29
+
30
+ image:cute-cat-1.jpg[cute-cat-laying,role="fragment fade-in",data-fragment-index=3]
31
+ image:cute-cat-2.jpg[cute-cat-yawning,role="fragment fade-in",data-fragment-index=1]
32
+ image:cute-cat-3.jpg[cute-cat-melting,role="fragment fade-in",data-fragment-index=2]
33
+
34
+ == Admonitions
35
+
36
+ [TIP,role="fragment fade-in",data-fragment-index=3]
37
+ ====
38
+ Pro tip...
39
+ ====
40
+
41
+ [WARNING,role="fragment fade-in",data-fragment-index=1]
42
+ ====
43
+ Watch out for...
44
+ ====
45
+
46
+ [IMPORTANT,role="fragment fade-in",data-fragment-index=2]
47
+ ====
48
+ Don't forget...
49
+ ====
50
+
51
+ == Callout numbers
52
+
53
+ [source,js]
54
+ ----
55
+ console.log('Hello'); // <1>
56
+
57
+ console.log('Bonjour'); // <2>
58
+
59
+ console.log('Bye'); // <3>
60
+ ----
61
+ [role="fragment fade-in",data-state="explanation"]
62
+ <1> Display `Hello`
63
+ <2> Display `Bonjour`
64
+ <3> Display `Bye`
65
+
66
+ == FAQ
67
+
68
+ [qanda,data-count="3"]
69
+ What's the deal with this converter?::
70
+ This is the official reveal.js converter for Asciidoctor.
71
+ Is it safe to put my credit card number into this presentation?::
72
+ Probably not.
73
+ I need all the Powerpoint features::
74
+ No you don’t.
75
+
76
+ [[horizontal-list]]
77
+ == Horizontal list
78
+
79
+ [horizontal,data-style="horizontal"]
80
+ Hard drive:: Permanent storage for operating system and/or user files.
81
+ RAM:: Temporarily stores information the CPU uses during operation.
82
+
83
+ == Description list
84
+
85
+ [.operating-systems,data-id="1234"]
86
+ Operating Systems::
87
+ * Linux
88
+ * macOS
89
+ * Windows
90
+
91
+ == Example
92
+
93
+ [#lorem.ipsum,data-style="lorem ipsum"]
94
+ ====
95
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
96
+ incididunt ut labore et dolore magna aliqua.
97
+ ====
98
+
99
+ [[images]]
100
+ == Images
101
+
102
+ :imagesdir: images
103
+
104
+ image::cute-cat-1.jpg[cute-cat-laying,height="100px",role="fragment fade-in",data-fragment-index=3]
105
+
106
+ image::cute-cat-2.jpg[cute-cat-yawning,height="100px",role="fragment fade-in",data-fragment-index=1]
107
+
108
+ image::cute-cat-3.jpg[cute-cat-melting,height="100px",role="fragment fade-in",data-fragment-index=2]
109
+
110
+ == Inline links
111
+
112
+ Learn how to use xref:images[images,role=fragment,data-fragment-index=1],
113
+ xref:horizontal-list[horizontal lists,role=fragment,data-fragment-index=2]
114
+ and link:https://duckduckgo.com/[duckduckgo.com,role=fragment,data-fragment-index=3].
115
+
116
+ == Source blocks
117
+
118
+ [source,javascript,role=fragment,data-fragment-index=2,data-lang-family=interpreted]
119
+ ----
120
+ console.log('Hello world')
121
+ ----
122
+
123
+ [source,kotlin,role=fragment,data-fragment-index=1,data-lang-family=compiled]
124
+ ----
125
+ println("Hello world")
126
+ ----
127
+
128
+ == Literal
129
+
130
+ Open a terminal and type:
131
+
132
+ [data-program-type=bash,data-program-version=1.2.3]
133
+ ./forgotten-realms.sh
134
+
135
+ [data-output-type=error,data-prompt=y/n]
136
+ ....
137
+ error: The requested operation returned error: 1954 Forbidden search for defensive operations manual
138
+ absolutely fatal: operation initiation lost in the dodecahedron of doom
139
+ would you like to die again? y/n
140
+ ....
141
+
142
+ == Atom podium
143
+
144
+ [role=fragment,data-fragment-index=2,data-medal=gold]
145
+ . Protons
146
+
147
+ [start=2,role=fragment,data-fragment-index=1,data-medal=silver]
148
+ . Electrons
149
+
150
+ [start=3,role=fragment,data-fragment-index=0,data-medal=bronze]
151
+ . Neutrons
152
+
153
+ [.columns.wrap]
154
+ == Colors
155
+
156
+ [.column.fragment,data-fragment-index=1]
157
+ --
158
+ image::data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Ccircle fill='blue' cx='50' cy='50' r='50'/%3E%3C/svg%3E[width=40%]
159
+
160
+ image::data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Ccircle fill='yellow' cx='50' cy='50' r='50'/%3E%3C/svg%3E[width=40%]
161
+ --
162
+
163
+ [.column.fragment.fade-in-out,data-fragment-index=0]
164
+ --
165
+ image::data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Ccircle fill='green' cx='50' cy='50' r='50'/%3E%3C/svg%3E[width=40%]
166
+ --
167
+
168
+ == Abstract
169
+
170
+ [abstract,data-block-type=abstract]
171
+ .Abstract
172
+ Documentation is a distillation of many long, squiggly adventures.
173
+
174
+ == Quote
175
+
176
+ [data-context=civil-rights,data-event=speech,data-date=28/08/1963]
177
+ > I have a dream that my four little children will one day live in a nation where they will not be judged by the color of their skin, but by the content of their character. I have a dream today!
178
+ > -- Martin Luther King Jr. delivering the speech at the 1963 Washington D.C. Civil Rights March.
179
+
180
+ == Math!
181
+
182
+ [stem,data-algebra-concept=square-root]
183
+ ++++
184
+ \sqrt{37} = \sqrt{\frac{73^2-1}{12^2}} \approx \frac{73}{12} (1 - \frac{1}{2\cdot73^2})
185
+ ++++
186
+
187
+ == Tables
188
+
189
+ [cols="1,1",options=header,role=fragment,data-fragment-index=1]
190
+ .App
191
+ |===
192
+ |Name
193
+ |Category
194
+
195
+ |Firefox
196
+ |Browser
197
+ |===
198
+
199
+ [%header,format=csv,role=fragment,data-fragment-index=0]
200
+ .Music
201
+ |===
202
+ Artist,Track,Genre
203
+ The Lumineers,Ho Hey,Folk Rock
204
+ |===
205
+
206
+ == TODO
207
+
208
+ [%interactive,data-state=in-progress]
209
+ - [ ] Dig
210
+ - [x] Plant
211
+ - [ ] Hose
212
+
213
+ == Seagulls
214
+
215
+ // Title: Flock Seagulls
216
+ // License: Attribution CC 3.0
217
+ // Recorded by Daniel Simion
218
+ audio::flock-of-seagulls_daniel-simion.mp3[options="autoplay,loop",data-license="cc-3.0"]
219
+
220
+ == Verse
221
+
222
+ [verse, Carl Sandburg, two lines from the poem Fog, data-verse-type=poem]
223
+ The fog comes
224
+ on little cat feet.
225
+
226
+ == Video
227
+
228
+ video::kZH9JtPBq7k[youtube,start=34,data-video-id=kZH9JtPBq7k]
229
+
230
+ == Inline quoted
231
+
232
+ I can't believe it, we *won*!
233
+
234
+ Type the word [.userinput]#asciidoc# into the search bar.
235
+
236
+ Word with an [#bookmark-a]#explicit# id.
237
+
238
+ Let's put some [#bookmark-b.concept.word]_emphasis_.
239
+
240
+ == Sidebar
241
+
242
+ [data-visiblity=visible,data-position=left]
243
+ ****
244
+ Sidebars are used to visually separate auxiliary bits of content that supplement the main text.
245
+ ****