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

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

		<title>reveal.js - Test Iframe Backgrounds</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" style="display: none;">

			<div class="slides">

				<section data-background-iframe="https://revealjs.com">1</section>
				<section data-background-iframe="https://revealjs.com">2</section>
				<section data-background-iframe="https://revealjs.com" data-preload>3</section>
				<section data-background-iframe="https://revealjs.com">4</section>
				<section data-background-iframe="https://revealjs.com">5</section>
				<section data-background-iframe="https://revealjs.com">6</section>

			</div>

		</div>

		<script src="../dist/reveal.js"></script>
		<script>

			Reveal.initialize({ viewDistance: 3 }).then( () => {

				function getIframe( index ) {
					return document.querySelectorAll( '.slide-background' )[index].querySelector( 'iframe' );
				}

				QUnit.module( 'Iframe' );

				QUnit.test( 'Using default settings', function( assert ) {

					Reveal.slide(0);
					assert.strictEqual( getIframe(1).hasAttribute( 'src' ), false, 'not preloaded when within viewDistance' );

					Reveal.slide(1);
					assert.strictEqual( getIframe(1).hasAttribute( 'src' ), true, 'loaded when slide becomes visible' );

					Reveal.slide(0);
					assert.strictEqual( getIframe(1).hasAttribute( 'src' ), false, 'unloaded when slide becomes invisible' );

				});

				QUnit.test( 'Using data-preload', function( assert ) {

					Reveal.slide(1);
					assert.strictEqual( getIframe(2).hasAttribute( 'src' ), true, 'preloaded within viewDistance' );
					assert.strictEqual( getIframe(1).hasAttribute( 'src' ), true, 'loaded when slide becomes visible' );

					Reveal.slide(0);
					assert.strictEqual( getIframe(3).hasAttribute( 'src' ), false, 'unloads outside of viewDistance' );

				});

				QUnit.test( 'Using preloadIframes: true', function( assert ) {

					Reveal.configure({ preloadIframes: true });

					Reveal.slide(1);
					assert.strictEqual( getIframe(0).hasAttribute( 'src' ), true, 'preloaded within viewDistance' );
					assert.strictEqual( getIframe(1).hasAttribute( 'src' ), true, 'preloaded within viewDistance' );
					assert.strictEqual( getIframe(2).hasAttribute( 'src' ), true, 'preloaded within viewDistance' );

				});

				QUnit.test( 'Using preloadIframes: false', function( assert ) {

					Reveal.configure({ preloadIframes: false });

					Reveal.slide(0);
					assert.strictEqual( getIframe(1).hasAttribute( 'src' ), false, 'not preloaded within viewDistance' );
					assert.strictEqual( getIframe(2).hasAttribute( 'src' ), false, 'not preloaded within viewDistance' );

					Reveal.slide(1);
					assert.strictEqual( getIframe(1).hasAttribute( 'src' ), true, 'loaded when slide becomes visible' );


				});

			} );
		</script>

	</body>
</html>
