<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <title>Tobago Demo</title>
  <link href="/bootstrap.min.css" rel="stylesheet">
  <style>
    div.disabled {
      opacity: 0.3;
    }

    .na {
      text-align: center;
      vertical-align: middle;
    }
  </style>
  <script>

    document.addEventListener("DOMContentLoaded", function (event) {

      //
      // EDIT HERE (START)
      //

      var versions = [
        {
          major: "6",
          release: "",
          staging: "",
          snapshot: "6.6.1-SNAPSHOT",
          link: "6",
          archived: false,
          current: true
        },
        {
          major: "5",
          release: "",
          staging: "",
          snapshot: "5.14.1-SNAPSHOT",
          link: "5",
          archived: false,
          current: true
        },
        {
          major: "4",
          release: "",
          staging: "",
          snapshot: "4.7.0-SNAPSHOT",
          link: "4",
          archived: false,
          current: false
        },
/*        {
          major: "3",
          release: "",
          staging: "",
          snapshot: "",
          link: "3",
          archived: true
        },*/
        {
          major: "2",
          release: "",
          staging: "",
          snapshot: "2.6.0-SNAPSHOT",
          link: "2",
          archived: false,
          current: false
        },
/*        {
          major: "1.5",
          release: "",
          staging: "",
          snapshot: "",
          link: "1-5",
          archived: true

        },
        {
          major: "1.0",
          release: "",
          staging: "",
          snapshot: "",
          link: "1-0",
          archived: true
        }*/
      ];

      //
      // EDIT HERE (END)
      //

      var template = document.getElementById("template");

      for (var v = 0; v < versions.length; v++) {
        var version = versions[v];
        var clone = template.cloneNode(true);
        clone.removeAttribute("id");

        clone.classList.remove("d-none");
        template.parentNode.insertBefore(clone, template);

        clone.querySelector(".x-title").append(version.major);
//        clone.querySelector(".x-release-version").append(version.release);
//        clone.querySelector(".x-staging-version").prepend(version.staging + " ");
        clone.querySelector(".x-snapshot-version").append(version.snapshot);

/*
        if (version.release) {
          clone.querySelector(".x-release-off").classList.remove("d-md-flex");
        } else {
          clone.querySelector(".x-release-on").classList.add("d-none");
        }

        if (version.staging) {
          clone.querySelector(".x-staging-off").classList.remove("d-md-flex");
        } else {
          clone.querySelector(".x-staging-on").classList.add("d-none");
        }
*/

        if (version.snapshot) {
//          clone.querySelector(".x-snapshot-off").classList.remove("d-md-flex");
        } else {
          clone.querySelector(".x-snapshot-on").classList.add("d-none");
        }

        if (version.current) {
          clone.querySelector(".x-snapshot-link").classList.add("btn-success");
        } else {
          clone.querySelector(".x-snapshot-link").classList.add("btn-warning");
        }


//        clone.querySelector(".x-release-link").setAttribute("href", "/demo-" + version.link + "-release/");
//        clone.querySelector(".x-staging-link").setAttribute("href", "/demo-" + version.link + "-staging/");
        clone.querySelector(".x-snapshot-link").setAttribute("href", "/demo-" + version.link + "-snapshot/");

        if (version.archived) {
          let button = clone.querySelector(".btn-success");
          if (button) {
            const buttonClassList = button.classList;
            buttonClassList.remove("btn-success");
            buttonClassList.add("btn-secondary");
            clone.querySelector(".x-release-version").append(" (archived)");
          }
        }

      }

    });
  </script>
</head>
<body class="bd-home">

<!--
<header class="navbar navbar-dark flex-column flex-md-row bd-navbar bg-dark">
  <a class="navbar-brand" href="https://myfaces.apache.org/tobago/">Tobago</a>
</header>
-->
<main class="bd-masthead" id="content" role="main">

  <div class="container p-5">

    <div class="row">

      <div class="m-0 border border-white d-md-flex bg-light col-12">
        <h1>Demo Applications of Tobago</h1>
      </div>

      <noscript class="jumbotron masthead-followup row m-0 border border-white bg-warning">
      <h3>Please activate JavaScript, to use this page!</h3>
    </noscript>

    <!--
        <div class="jumbotron masthead-followup row m-0 border border-white d-md-flex d-none">
          <h1>Demo Applications of Tobago</h1>
        </div>

        <div class="jumbotron masthead-followup row m-0 border border-white d-md-none">
          <h2>Tobago Demo</h2>
        </div>
        <div class="masthead-followup row m-0 border border-white d-md-flex d-none">
          <div class="col-12 col-md-4 p-3 p-md-5 bg-success border border-white">
            <h3>Release</h3>
          </div>
          <div class="col-12 col-md-4 p-3 p-md-5 bg-warning border border-white">
            <h3>Staging</h3>
          </div>
          <div class="col-12 col-md-4 p-3 p-md-5 bg-danger border border-white">
            <h3>Snapshot</h3>
          </div>
        </div>
    -->
    <!-- template -->

    <!--
        <div id="template"
             class="masthead-followup row m-0 border border-white d-none">

          <div class="x-release-on col-12 col-md-4 p-3 p-md-5 bg-light border border-white">
            <h3 class="x-title">Tobago </h3>
            <h5 class="x-release-version"></h5>
            <p>Last released version.</p>
            <a class="x-release-link btn btn-success" href="/">Demo</a>
          </div>
          <div class="x-release-off col-12 col-md-4 p-3 p-md-5 bg-light border border-white disabled d-md-flex d-none">
            <h3 class="na">Not released yet.</h3>
          </div>
    -->

      <!--
            <div class="x-staging-on col-12 col-md-4 p-3 p-md-5 bg-light border border-white">
              <h3 class="x-title">Tobago </h3>
              <h5 class="x-staging-version">(not released yet)</h5>
              <p>Voting in progress.</p>
              <a class="x-staging-link btn btn-warning" href="/">Demo</a>
            </div>
            <div class="x-staging-off col-12 col-md-4 p-3 p-md-5 bg-light border border-white disabled d-md-flex d-none">
              <h3 class="na">Currently no voting active.</h3>
            </div>
            -->

      <div id="template" class="x-snapshot-on col-12 col-md-6 col-lg-4 p-3 p-md-5 bg-light border border-white d-none">
        <h3 class="x-title">Tobago </h3>
        <h5 class="x-snapshot-version"></h5>
        <p>Current development version. Work in progress.</p>
        <a class="x-snapshot-link btn btn-success" href="/">Demo</a>
      </div>
<!--
      <div class="x-snapshot-off col-12 col-md-4 p-3 p-md-5 bg-light border border-white disabled d-md-flex d-none">
        <h3 class="na">No active development.</h3>
      </div>
    </div>
-->

  </div>
  </div>
</main>

<div class="container">
<footer class="bd-footer text-muted">
  <div class="container-fluid p-3 p-md-5">
    <p>© 2005-2023 Apache Software Foundation, Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">
      Apache License, Version 2.0</a>.</p>
  </div>
</footer>
</div>

</body>
</html>
