<!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>