<!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 }).then(() => {
        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 becoems 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>