<!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" .}}
  <form method="POST" id="form" role="form">
    <input type="text" class="hidden" name="{{.CSRFParam}}" value="{{.CSRFToken}}"/>
  <script>
    function changeBtn(id, newHTML) {
    document.getElementById(id).innerHTML = "<font color='gray'>"+newHTML+"</font>";
    }
    var f = document.forms['form'];
  </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}} {{if eq .Replicas 0}}[Suspended]{{end}}</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>Version</span><br/>
            {{.Version}}
          </p>
          <p class="blessing-caveats">
            <span>Address</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>
          {{if eq .Instance.Replicas 0 }}
          <div class="btn" id="resumeBtn{{$index}}">
            <a href="#" class="button-passive" onclick="changeBtn('resumeBtn{{$index}}', 'Resuming (takes a few seconds) ...'); f.action='{{.ResumeURL}}'; f.submit(); return false">Resume</a>
          </div>
          {{else}}
          <div class="btn" id="suspendBtn{{$index}}">
            <a href="#" class="button-passive" onclick="changeBtn('suspendBtn{{$index}}', 'Suspending (takes a few seconds) ...'); f.action='{{.SuspendURL}}'; f.submit(); return false">Suspend</a>
          </div>
          {{end}}
          <div class="btn btn-warning" id="resetBtn{{$index}}">
            <a href="#" class="button-passive" onclick="changeBtn('resetBtn{{$index}}', 'Resetting (takes ~20 seconds) ...'); f.action='{{.ResetURL}}'; f.submit(); return false">Reset</a>
          </div>
          <div class="btn btn-warning" id="destroyBtn{{$index}}">
            <a href="#" class="button-passive" onclick="changeBtn('destroyBtn{{$index}}', 'Destroying (takes ~10 seconds) ...'); f.action='{{.DestroyURL}}'; f.submit(); return false">Destroy</a>
          </div>
        </div>
      </div>
    {{else}}
      None found.
    {{end}}
    <div id="createBtn"><a href="#" class="button-passive" onclick="changeBtn('createBtn', 'Creating (takes ~25 seconds) ...'); f.action='{{.CreateURL}}'; f.submit(); return false">Create New</a></div>
    {{with .Message -}}
    <div id="message">
      {{.}}
    </div>
    {{end}}
  </div>
  </form>
  <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>
