<!doctype html>
<html>
<head>
  <title>Vanadium {{title .ServerName}} Allocator</title>
  {{template "head" .}}
</head>
<!-- NOTE: we 'borrow' a lot of the styling of identityd, hence the
security-related terminology in the style elements, like identity and
blessing. -->
<body class="identityprovider-layout allocatord">
  {{template "header" .}}
  <script>
    function changeBtn(id, newHTML) {
      document.getElementById(id).innerHTML = "<font color='gray'>"+newHTML+"</font>";
    }
  </script>
  <div class="main">
    <h1 class="page-head">Create and Manage Instances of {{title .ServerName}}</h1>
    <div class="blessings-list">
      <div class="blessings-header">
        <h1>Your instances</h1>
      </div>
    {{range $index, $element := .Instances}}
      <div class="blessings-item">
        <div class="blessing-details">
          {{with .Instance}}
          <h3>{{.Handle}}</h3>
          <p class="blessing-caveats">
            <span>Creation Time</span><br/>
            <span class="unixtime" data-unixtime={{.CreationTime.Unix}}>{{.CreationTime.String}}</span>
          </p>
          <p class="blessing-caveats">
            <span>Mount Name</span><br/>
            {{.MountName}}
          </p>
          <p class="blessing-caveats">
            <span>Blessing Patterns</span><br/>
            {{range .BlessingNames}}
              {{.}}<br/>
            {{end}}
          </p>
          {{end}}
        </div>
        <div class="btns-col">
          <div class="btn">
            <a href="{{.DashboardURL}}" class="button-passive" target="_blank">Dashboard</a>
          </div>
          <div class="btn">
            <a href="{{.DebugURL}}" class="button-passive" target="_blank">Debug</a>
          </div>
          <div class="btn btn-destroy" id="destroyBtn{{$index}}">
            <a href="{{.DestroyURL}}" class="button-passive" onclick="changeBtn('destroyBtn{{$index}}', 'Destroying (takes a few seconds) ...')">Destroy</a>
          </div>
        </div>
      </div>
    {{else}}
      None found.
    {{end}}
    <div id="createBtn"><a href="{{.CreateURL}}" class="button-passive" onclick="changeBtn('createBtn', 'Creating (takes a few seconds) ...')">Create New</a></div>
    {{with .Message -}}
    <div id="message">
      {{.}}
    </div>
    {{end}}
    </font>
  </div>
  <script src="{{.AssetsPrefix}}/identity/moment.js"></script>
  <script src="{{.AssetsPrefix}}/identity/jquery.js"></script>
  <script>
  function setTimeText(elem) {
    var timestamp = elem.data("unixtime");
    var m = moment(timestamp*1000.0);
    var style = elem.data("style");
    if (style === "absolute") {
      elem.html("<a href='#' onclick='return false;'>" + m.format("MMM DD, YYYY h:mm:ss a") + "</a>");
      elem.data("style", "fromNow");
    } else {
      elem.html("<a href='#' onclick='return false;'>" + m.fromNow() + "</a>");
      elem.data("style", "absolute");
    }
  }

  $(document).ready(function() {
    $(".unixtime").each(function() {
      // clicking the timestamp should toggle the display format.
      $(this).click(function() { setTimeText($(this)); });
      setTimeText($(this));
    });
  });
  </script>
</body>
</html>
