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

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

		<title>reveal.js - Test Iframes</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="deck1">
			<div class="reveal" style="display: none;">
				<div class="slides">
					<section>1.1</section>
					<section data-state="deck1slide2">1.2</section>
					<section>1.3</section>
				</div>
			</div>
		</div>

		<div class="deck2">
			<div class="reveal" style="display: none;">
				<div class="slides">
					<section>2.1</section>
					<section>2.2</section>
					<section>2.3</section>
				</div>
			</div>
		</div>

		<script type="module">

			import Reveal from '../dist/reveal.esm.js';
			import Zoom from '../plugin/zoom/zoom.esm.js';

			QUnit.config.testTimeout = 30000;
			QUnit.module( 'Multiple reveal.js instances' );

			let r1 = new Reveal( document.querySelector( '.deck1 .reveal' ), {
				embedded: true,
				keyboard: true,
				plugins: [ Zoom ]
			} );
			r1.initialize();

			let r2 = new Reveal( document.querySelector( '.deck2 .reveal' ), {
				embedded: true,
				keyboard: false
			} );
			r2.initialize();

			QUnit.test( 'Can make independent changes', function( assert ) {

				r1.slide(1);
				r2.slide(2);
				assert.strictEqual( r1.getCurrentSlide().textContent, '1.2' );
				assert.strictEqual( r2.getCurrentSlide().textContent, '2.3' );

				r2.toggleOverview( true );
				assert.strictEqual( r1.isOverview(), false );
				assert.strictEqual( r2.isOverview(), true );
				r2.toggleOverview( false );

				assert.strictEqual( r1.getConfig().keyboard, true );
				assert.strictEqual( r2.getConfig().keyboard, false );

			});

			QUnit.test( 'Can register plugins independently', function( assert ) {

				assert.ok( r1.hasPlugin( 'zoom' ) );
				assert.notOk( r2.hasPlugin( 'zoom' ) );

			});

			QUnit.test( 'Slide state is set at the viewport level', function( assert ) {

				r1.slide(1);

				assert.ok( r1.getViewportElement().classList.contains( r1.getCurrentSlide().getAttribute( 'data-state' ) ) );

				r1.slide(2);

				assert.ok( !r1.getViewportElement().classList.contains( r1.getCurrentSlide().getAttribute( 'data-state' ) ), 'unset' );

			});

		</script>
		<script>
			QUnit.test( 'Reveal does not leak to window', function( assert ) {
				assert.strictEqual( window.Reveal, undefined );
			});
		</script>

	</body>
</html>
