<!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>
      QUnit.config.testTimeout = 30000;

      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>