<!DOCTYPE html>
<!--

Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the License for the
specific language governing permissions and limitations under the License.

-->
<html lang="en">
  <head>
    <title>Status</title>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    <link rel="stylesheet" href="style/layout.css?0.9.0" type="text/css">
    <script src="script/json2.js"></script>
    <script src="script/jquery.js?1.3.1"></script>
    <script src="script/jquery.cookies.js?0.9.0"></script>
    <script src="script/jquery.couch.js?0.9.0"></script>
    <script src="script/futon.js?0.9.0"></script>
  </head>
  <body><div id="wrap">
    <h1>
      <a href="index.html">Overview</a>
      <strong>Status</strong>
    </h1>
    <div id="content">
      <div id="interval">
        <label>Poll interval:
          <input type="range" min="1" max="30" value="5" size="3">
          <span class="secs">5</span> second(s)
        </label>
      </div>
      <table id="status" class="listing" cellspacing="0">
        <caption>Active Tasks</caption>
        <thead><tr>
          <th>Type</th>
          <th>Object</th>
          <th>PID</th>
          <th>Status</th>
        </tr></thead>
        <tbody class="content"></tbody>
      </table>

    </div>
  </div></body>
  <script>
    var refreshTimeout = null;

    function refresh() {
      $.couch.activeTasks({
        success: function(tasks) {
          clearTimeout(refreshTimeout);
          $("#status tbody.content").empty();
          if (!tasks.length) {
            $("<tr class='none'><th colspan='4'>No tasks running</th></tr>")
              .appendTo("#status tbody.content");
          } else {
            $.each(tasks, function(idx, task) {
              $("<tr><th></th><td class='object'></td><td class='pid'></td><td class='status'></td></tr>")
                .find("th").text(task.type).end()
                .find("td.object").text(task.task).end()
                .find("td.pid").text(task.pid).end()
                .find("td.status").text(task.status).end()
                .appendTo("#status tbody.content");
            });
          }
          refreshTimeout = setTimeout(refresh,
            parseInt($("#interval input").val(), 10) * 1000);
        }
      });
    }

    function updateInterval(value) {
      if (isNaN(value)) {
        value = 5;
        $("#interval input").val(value);
      }
      $("#interval .secs").text(value);
      refresh();
      $.cookies.set("pollinterval", value);
    }

    $(function() {
      var slider = $("#interval input");
      slider.val(parseInt($.cookies.get("pollinterval", "5")) || 5);
      if (slider[0].type == "range") {
        slider.bind("input", function() {
          updateInterval(this.value);
        });
        $("#interval .secs").text($("#interval input").val());
      } else {
        slider.bind("change", function() {
          updateInterval(this.value);
        });
        $("#interval .secs").hide();
      }
      refresh();
    });
  </script>
</html>
