<!doctype html>
<html lang="en">

	<head>
		<meta charset="utf-8">

		<title>reveal.js - Test Markdown</title>

		<link rel="stylesheet" href="../dist/reveal.css">
		<link rel="stylesheet" href="../node_modules/qunit/qunit/qunit.css">
		<script src="../node_modules/qunit/qunit/qunit.js"></script>
	</head>

	<body style="overflow: auto;">

		<div id="qunit"></div>
		<div id="qunit-fixture"></div>

		<div class="reveal deck1" style="display: none;">
			<div class="slides">
				<section data-markdown data-separator="^\n---\n$" data-separator-vertical="^\n--\n$">
					<script type="text/template">
						## Slide 1.1

						--

						## Slide 1.2

						---

						## Slide 2
					</script>
				</section>
			</div>
		</div>

		<div class="reveal deck2" style="display: none;">
			<div class="slides">
				<section data-markdown="simple.md" data-separator="^\r?\n\r?\n\r?\n" data-separator-vertical="^\r?\n\r?\n"></section>
			</div>
		</div>

		<div class="reveal deck3" style="display: none;">
			<div class="slides">
				<section 	data-markdown data-separator="^\n\n\n"
									data-separator-vertical="^\n\n"
									data-separator-notes="^Note:"
									data-attributes="--\s(.*?)$"
									data-charset="utf-8">
					<script type="text/template">
						# Test attributes in Markdown
						## Slide 1



						## Slide 2
						<!-- -- id="slide2" data-transition="zoom" data-background="#A0C66B" -->


						## Slide 2.1
						<!-- -- data-background="#ff0000" data-transition="fade" -->


						## Slide 2.2
						[Link to Slide2](#/slide2)



						## Slide 3
						<!-- -- data-transition="zoom" data-background="#C6916B" -->



						## Slide 4
					</script>
				</section>

				<section 	data-markdown data-separator="^\n\n\n"
									data-separator-vertical="^\n\n"
									data-separator-notes="^Note:"
									data-charset="utf-8">
					<script type="text/template">
						# Test attributes in Markdown with default separator
						## Slide 1 Def



						## Slide 2 Def
						<!-- .slide: id="slide2def" data-transition="concave" data-background="#A7C66B" -->


						## Slide 2.1 Def
						<!-- .slide: data-background="#f70000" data-transition="page" -->


						## Slide 2.2 Def
						[Link to Slide2](#/slide2def)



						## Slide 3 Def
						<!-- .slide: data-transition="concave" data-background="#C7916B" -->



						## Slide 4
					</script>
				</section>

				<section data-markdown>
					<script type="text/template">
						<!-- .slide: data-background="#ff0000" -->
						## Hello world
					</script>
				</section>

				<section data-markdown>
					<script type="text/template">
						## Hello world
						<!-- .slide: data-background="#ff0000" -->
					</script>
				</section>

				<section data-markdown>
					<script type="text/template">
						## Hello world

						Test
						<!-- .slide: data-background="#ff0000" -->

						More Test
					</script>
				</section>
			</div>
		</div>

		<div class="reveal deck4" style="display: none;">
			<div class="slides">
				<section data-markdown>
					<script type="text/template">
						## Testing Markdown Options

						This "slide" should contain 'smart' quotes.
					</script>
				</section>
			</div>
		</div>

		<div class="reveal deck5" style="display: none;">
			<div class="slides">
				<section data-markdown data-separator="^\n---\n$" data-separator-vertical="^\n--\n$" data-element-attributes="{_\s*?([^}]+?)}">>
					<script type="text/template">
						## Slide 1.1
						<!-- {_class="fragment fade-out" data-fragment-index="1"} -->

						--

						## Slide 1.2
						<!-- {_class="fragment shrink"} -->

						Paragraph 1
						<!-- {_class="fragment grow"} -->

						Paragraph 2
						<!-- {_class="fragment grow"} -->

						- list item 1 <!-- {_class="fragment grow"} -->
						- list item 2 <!-- {_class="fragment grow"} -->
						- list item 3 <!-- {_class="fragment grow"} -->


						---

						## Slide 2


						Paragraph 1.2  
						multi-line <!-- {_class="fragment highlight-red"} -->

						Paragraph 2.2 <!-- {_class="fragment highlight-red"} -->

						Paragraph 2.3 <!-- {_class="fragment highlight-red"} -->

						Paragraph 2.4 <!-- {_class="fragment highlight-red"} -->

						- list item 1 <!-- {_class="fragment highlight-green"} -->
						- list item 2<!-- {_class="fragment highlight-green"} -->
						- list item 3<!-- {_class="fragment highlight-green"} -->
						- list item 4
						<!-- {_class="fragment highlight-green"} -->
						- list item 5<!-- {_class="fragment highlight-green"} -->

						Test

						![Example Picture](examples/assets/image2.png) <!-- {_class="reveal stretch"} -->

					</script>
				</section>



				<section 	data-markdown data-separator="^\n\n\n"
									data-separator-vertical="^\n\n"
									data-separator-notes="^Note:"
									data-charset="utf-8">
					<script type="text/template">
						# Test attributes in Markdown with default separator
						## Slide 1 Def <!-- .element: class="fragment highlight-red" data-fragment-index="1" -->


						## Slide 2 Def
						<!-- .element: class="fragment highlight-red" -->

					</script>
				</section>

				<section data-markdown>
				  <script type="text/template">
					## Hello world
					A paragraph
					<!-- .element: class="fragment highlight-blue" -->
				  </script>
				</section>

				<section data-markdown>
				  <script type="text/template">
					## Hello world

					Multiple  
					Line
					<!-- .element: class="fragment highlight-blue" -->
				  </script>
				</section>

				<section data-markdown>
				  <script type="text/template">
					## Hello world

					Test<!-- .element: class="fragment highlight-blue" -->

					More Test
				  </script>
				</section>
			</div>
		</div>

		<div class="reveal deck6" style="display: block;">
			<div class="slides">
				<section data-markdown class="defaults">
					<script type="text/template">
						```
						code
						```
					</script>
				</section>
				<section data-markdown class="with-language">
					<script type="text/template">
						```javascript
						code
						```
					</script>
				</section>
				<section data-markdown class="with-line-numbers">
					<script type="text/template">
						```[]
						code
						```
					</script>
				</section>
				<section data-markdown class="with-line-highlights">
					<script type="text/template">
						```[1,2,3]
						code
						```
					</script>
				</section>
				<section data-markdown class="with-offset">
					<script type="text/template">
						```[123:]
						code
						```
					</script>
				</section>
				<section data-markdown class="with-line-highlights-and-lanugage">
					<script type="text/template">
						```javascript [1,2,3]
						code
						```
					</script>
				</section>
				<section data-markdown class="with-line-highlights-offset-and-lanugage">
					<script type="text/template">
						```javascript [456: 3,4,5]
						code
						```
					</script>
				</section>
				<section data-markdown class="with-line-offset-and-lanugage">
					<script type="text/template">
						```javascript [756:]
						code
						```
					</script>
				</section>
				<section data-markdown class="with-code-in-fragment">
					<script type="text/template">
					```js
					foo.bar();
					```

					<!-- .element: class="fragment" -->
					</script>
				</section>
			</div>
		</div>

		<script type="module">
			import Reveal from '../dist/reveal.esm.js'
			import Markdown from '../plugin/markdown/markdown.esm.js'
			import Highlight from '../plugin/highlight/highlight.esm.js'

			QUnit.config.testTimeout = 30000;

			let deck1 = new Reveal( document.querySelector( '.deck1' ), { plugins: [ Markdown ] })
			deck1.addEventListener( 'ready', function() {

				QUnit.module( 'Inline' );

				QUnit.test( 'Vertical separator', function( assert ) {
					assert.strictEqual( deck1.getRevealElement().querySelectorAll( '.reveal .slides>section>section' ).length, 2, 'found two slides' );
				});

				QUnit.test( 'Horizontal separator', function( assert ) {
					assert.strictEqual( deck1.getRevealElement().querySelectorAll( '.reveal .slides>section' ).length, 2, 'found two slides' );
				});

			} );

			let deck2 = new Reveal( document.querySelector( '.deck2' ), { plugins: [ Markdown ] })
			deck2.addEventListener( 'ready', function() {

				QUnit.module( 'External' );

				QUnit.test( 'Vertical separator', function( assert ) {
					assert.strictEqual( deck2.getRevealElement().querySelectorAll( '.reveal .slides>section>section' ).length, 2, 'found two slides' );
				});

				QUnit.test( 'Horizontal separator', function( assert ) {
					assert.strictEqual( deck2.getRevealElement().querySelectorAll( '.reveal .slides>section' ).length, 2, 'found two slides' );
				});

			} );

			let deck3 = new Reveal( document.querySelector( '.deck3' ), { plugins: [ Markdown ] })
			deck3.addEventListener( 'ready', function() {

				QUnit.module( 'Slide Attributes' );

				QUnit.test( 'Id on slide', function( assert ) {
					assert.strictEqual( deck3.getRevealElement().querySelectorAll( '.reveal .slides>section>section#slide2' ).length, 1, 'found one slide with id slide2' );
					assert.strictEqual( deck3.getRevealElement().querySelectorAll( '.reveal .slides>section>section a[href="#/slide2"]' ).length, 1, 'found one slide with a link to slide2' );
				});

				QUnit.test( 'data-background attributes', function( assert ) {
					assert.strictEqual( deck3.getRevealElement().querySelectorAll( '.reveal .slides>section>section[data-background="#A0C66B"]' ).length, 1, 'found one vertical slide with data-background="#A0C66B"' );
					assert.strictEqual( deck3.getRevealElement().querySelectorAll( '.reveal .slides>section>section[data-background="#ff0000"]' ).length, 1, 'found one vertical slide with data-background="#ff0000"' );
					assert.strictEqual( deck3.getRevealElement().querySelectorAll( '.reveal .slides>section[data-background="#C6916B"]' ).length, 1, 'found one slide with data-background="#C6916B"' );
				});

				QUnit.test( 'data-transition attributes', function( assert ) {
					assert.strictEqual( deck3.getRevealElement().querySelectorAll( '.reveal .slides>section>section[data-transition="zoom"]' ).length, 1, 'found one vertical slide with data-transition="zoom"' );
					assert.strictEqual( deck3.getRevealElement().querySelectorAll( '.reveal .slides>section>section[data-transition="fade"]' ).length, 1, 'found one vertical slide with data-transition="fade"' );
					assert.strictEqual( deck3.getRevealElement().querySelectorAll( '.reveal .slides section [data-transition="zoom"]' ).length, 1, 'found one slide with data-transition="zoom"' );
				});

				QUnit.test( 'data-background attributes with default separator', function( assert ) {
					assert.strictEqual( deck3.getRevealElement().querySelectorAll( '.reveal .slides>section>section[data-background="#A7C66B"]' ).length, 1, 'found one vertical slide with data-background="#A0C66B"' );
					assert.strictEqual( deck3.getRevealElement().querySelectorAll( '.reveal .slides>section>section[data-background="#f70000"]' ).length, 1, 'found one vertical slide with data-background="#ff0000"' );
					assert.strictEqual( deck3.getRevealElement().querySelectorAll( '.reveal .slides>section[data-background="#C7916B"]' ).length, 1, 'found one slide with data-background="#C6916B"' );
				});

				QUnit.test( 'data-transition attributes with default separator', function( assert ) {
					assert.strictEqual( deck3.getRevealElement().querySelectorAll( '.reveal .slides>section>section[data-transition="concave"]' ).length, 1, 'found one vertical slide with data-transition="zoom"' );
					assert.strictEqual( deck3.getRevealElement().querySelectorAll( '.reveal .slides>section>section[data-transition="page"]' ).length, 1, 'found one vertical slide with data-transition="fade"' );
					assert.strictEqual( deck3.getRevealElement().querySelectorAll( '.reveal .slides section [data-transition="concave"]' ).length, 1, 'found one slide with data-transition="zoom"' );
				});

				QUnit.test( 'data-transition attributes with inline content', function( assert ) {
					assert.strictEqual( deck3.getRevealElement().querySelectorAll( '.reveal .slides>section[data-background="#ff0000"]' ).length, 3, 'found three horizontal slides with data-background="#ff0000"' );
				});

			} );

			let deck4 = new Reveal( document.querySelector( '.deck4' ), {
				markdown: {
					smartypants: true
				},
				plugins: [ Markdown ]
			})
			deck4.addEventListener( 'ready', function() {

				QUnit.module( 'Options' );

				QUnit.test( 'Options are set', function( assert ) {
					assert.strictEqual( deck4.getPlugin( 'markdown' ).marked.defaults.smartypants, true );
				});

				QUnit.test( 'Smart quotes are activated', function( assert ) {
					var text = deck4.getRevealElement().querySelector( '.reveal .slides>section>p' ).textContent;

					assert.strictEqual( /['"]/.test( text ), false );
					assert.strictEqual( /[“”‘’]/.test( text ), true );
				});

			} );

			let deck5 = new Reveal( document.querySelector( '.deck5' ), { plugins: [ Markdown ] })
			deck5.addEventListener( 'ready', function() {

				QUnit.module( 'Element Attributes' );

				QUnit.test( 'Vertical separator', function( assert ) {
					assert.strictEqual( deck5.getRevealElement().querySelectorAll( '.reveal .slides>section>section' ).length, 4, 'found four slides' );
				});

				QUnit.test( 'Attributes on element header in vertical slides', function( assert ) {
					assert.strictEqual( deck5.getRevealElement().querySelectorAll( '.reveal .slides section>section h2.fragment.fade-out' ).length, 1, 'found one vertical slide with class fragment.fade-out on header' );
					assert.strictEqual( deck5.getRevealElement().querySelectorAll( '.reveal .slides section>section h2.fragment.shrink' ).length, 1, 'found one vertical slide with class fragment.shrink on header' );
				});

				QUnit.test( 'Attributes on element paragraphs in vertical slides', function( assert ) {
					assert.strictEqual( deck5.getRevealElement().querySelectorAll( '.reveal .slides section>section p.fragment.grow' ).length, 2, 'found a vertical slide with two paragraphs with class fragment.grow' );
				});

				QUnit.test( 'Attributes on element list items in vertical slides', function( assert ) {
					assert.strictEqual( deck5.getRevealElement().querySelectorAll( '.reveal .slides section>section li.fragment.grow' ).length, 3, 'found a vertical slide with three list items with class fragment.grow' );
				});

				QUnit.test( 'Attributes on element paragraphs in horizontal slides', function( assert ) {
					assert.strictEqual( deck5.getRevealElement().querySelectorAll( '.reveal .slides section p.fragment.highlight-red' ).length, 4, 'found a horizontal slide with four paragraphs with class fragment.grow' );
				});

				QUnit.test( 'Attributes on element list items in horizontal slides', function( assert ) {
					assert.strictEqual( deck5.getRevealElement().querySelectorAll( '.reveal .slides section li.fragment.highlight-green' ).length, 5, 'found a horizontal slide with five list items with class fragment.roll-in' );
				});

				QUnit.test( 'Attributes on element image in horizontal slides', function( assert ) {
					assert.strictEqual( deck5.getRevealElement().querySelectorAll( '.reveal .slides section img.reveal.stretch' ).length, 1, 'found a horizontal slide with stretched image, class img.reveal.stretch' );
				});

				QUnit.test( 'Attributes on elements in vertical slides with default element attribute separator', function( assert ) {
					assert.strictEqual( deck5.getRevealElement().querySelectorAll( '.reveal .slides section h2.fragment.highlight-red' ).length, 2, 'found two h2 titles with fragment highlight-red in vertical slides with default element attribute separator' );
				});

				QUnit.test( 'Attributes on elements in single slides with default element attribute separator', function( assert ) {
					assert.strictEqual( deck5.getRevealElement().querySelectorAll( '.reveal .slides section p.fragment.highlight-blue' ).length, 3, 'found three elements with fragment highlight-blue in single slide with default element attribute separator' );
				});

			} );

			let deck6 = new Reveal( document.querySelector( '.deck6' ), {
				plugins: [ Markdown, Highlight ]
			})
			deck6.addEventListener( 'ready', function() {

				QUnit.module( 'Code Blocks' );

				QUnit.test( 'Defaults to no line numbers', function( assert ) {
					assert.strictEqual( deck6.getRevealElement().querySelectorAll( '.defaults .hljs:not([data-line-numbers])' ).length, 1 );
				});

				QUnit.test( 'Can set language', function( assert ) {
					assert.strictEqual( deck6.getRevealElement().querySelectorAll( '.with-language .hljs.javascript:not([data-line-numbers])' ).length, 1 );
				});

				QUnit.test( '```[] enables line numbers', function( assert ) {
					assert.strictEqual( deck6.getRevealElement().querySelectorAll( '.with-line-numbers .hljs[data-line-numbers=""]' ).length, 1 );
				});

				QUnit.test( '```[1,2,3] enables line highlights', function( assert ) {
					assert.strictEqual( deck6.getRevealElement().querySelectorAll( '.with-line-highlights .hljs[data-line-numbers="1,2,3"]' ).length, 1 );
				});

				QUnit.test( '```[234: ] line offset only', function( assert ) {
					assert.strictEqual( deck6.getRevealElement().querySelectorAll( '.with-offset .hljs[data-ln-start-from="123"]' ).length, 1 );
				});

				QUnit.test( '```javascript [1,2,3] enables line highlights and sets language', function( assert ) {
					assert.strictEqual( deck6.getRevealElement().querySelectorAll( '.with-line-highlights-and-lanugage .hljs.javascript[data-line-numbers="1,2,3"]' ).length, 1 );
				});

				QUnit.test( '```javascript [123: 3,4,5] add line offset and enables line highlights and sets language', function( assert ) {
					assert.strictEqual( deck6.getRevealElement().querySelectorAll( '.with-line-highlights-offset-and-lanugage .hljs.javascript[data-line-numbers="3,4,5"]' ).length, 1 );
					assert.strictEqual( deck6.getRevealElement().querySelectorAll( '.with-line-highlights-offset-and-lanugage .hljs.javascript[data-ln-start-from="456"]' ).length, 1 );
				});

				QUnit.test( '```javascript [756:] add line offset and sets no line highlights and sets language', function( assert ) {
					assert.strictEqual( deck6.getRevealElement().querySelectorAll( '.with-line-offset-and-lanugage .hljs.javascript[data-ln-start-from="756"]' ).length, 1 );
				});
				
				QUnit.test( '```block should allow custom fragment', function( assert ) {
					assert.strictEqual( deck6.getRevealElement().querySelectorAll( '.with-code-in-fragment pre.fragment' ).length, 1 );
				});

			} );

			deck1.initialize();
			deck2.initialize();
			deck3.initialize();
			deck4.initialize();
			deck5.initialize();
			deck6.initialize();
		</script>

	</body>
</html>
