<!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="reveal" style="display: none;">

			<div class="slides">

				<section>1</section>
				<section>2</section>
				<section>
					<iframe class="default-iframe" data-src="#"></iframe>
					<iframe class="preload-iframe" data-src="#" data-preload></iframe>
				</section>

			</div>

		</div>

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

			QUnit.config.testTimeout = 30000;

			Reveal.initialize({ viewDistance: 2 });

			var defaultIframe = document.querySelector( '.default-iframe' ),
				preloadIframe = document.querySelector( '.preload-iframe' );

			QUnit.module( 'Iframe' );

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

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

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

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

			});

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

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

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

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

			});

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

				Reveal.configure({ preloadIframes: true });

				Reveal.slide(1);
				assert.strictEqual( defaultIframe.hasAttribute( 'src' ), true, 'preloaded within viewDistance' );
				assert.strictEqual( preloadIframe.hasAttribute( 'src' ), true, 'preloaded within viewDistance' );

				Reveal.slide(2);
				assert.strictEqual( defaultIframe.hasAttribute( 'src' ), true, 'loaded when slide becomes visible' );
				assert.strictEqual( preloadIframe.hasAttribute( 'src' ), true, 'loaded when slide becomes visible' );

			});

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

				Reveal.configure({ preloadIframes: false });

				Reveal.slide(0);
				assert.strictEqual( defaultIframe.hasAttribute( 'src' ), false, 'not preloaded within viewDistance' );
				assert.strictEqual( preloadIframe.hasAttribute( 'src' ), false, 'not preloaded within viewDistance' );

				Reveal.slide(2);
				assert.strictEqual( defaultIframe.hasAttribute( 'src' ), true, 'loaded when slide becomes visible' );
				assert.strictEqual( preloadIframe.hasAttribute( 'src' ), true, 'loaded when slide becomes visible' );

			});
		</script>

	</body>
</html>
