Html程序  |  149行  |  4.09 KB

<!DOCTYPE html>
<!-- much of this is stolen from omahaproxy.appspot.com/viewer -->
<html>
  <head>
    <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
    <title>NaCl SDK Manifest Viewer</title>
  </head>
  <style type="text/css" media="screen">
    body {
      font-family: monospace;
      font-size: 10pt;
    }

    table {
      border-collapse: collapse;
      border-color: rgb(100, 100, 100);
      border-style: solid;
      border-width: 1px 0px 1px 0px;
    }

    table td {
      padding: 3px;
      border-color: rgb(100, 100, 100);
      border-style: solid;
      border-width: 0px 1px 0px 1px;
    }

    thead {
      background-color: lightblue;
      font-weight: bold;
      border-style: solid;
      border-color: rgb(100, 100, 100);
      border-width: 0px 0px 2px 0px;
      text-align: center;
    }

    tbody tr:nth-child(odd) {
      background-color: rgb(230, 230, 230);
    }

    tbody tr:hover {
      background-color: orange;
    }

    td a {
      padding: 3px;
    }
  </style>
  <body>
    <h1>NaCl SDK Manifest Viewer</h1>
    <table>
      <thead id="columns">
      </thead>
      <tbody id="rows">
      </tbody>
    </table>
    <h2>Most recent upload log:</h2>
    <pre id="log">
    </pre>
    <script type="application/javascript">
      function loadText(url, callback) {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', url, true);
        xhr.onreadystatechange = function (e) {
          if (xhr.readyState == 4) {
            if (xhr.status == 200) {
              callback(xhr.responseText);
            } else {
              alert("Failed to load: error " + xhr.status);
            }
          }
        }
        xhr.send(null);
      }

      function loadJson(url, callback) {
        loadText(url, function (text) {
          callback(JSON.parse(text));
        });
      }

      function removeAllChildren(elm) {
        while (elm.childNodes.length) {
          elm.removeChild(elm.firstChild);
        }
      }

      function display(data) {
        data = data.bundles;

        var columnsElm = document.getElementById('columns');
        var rowsElm = document.getElementById('rows');
        removeAllChildren(columnsElm);
        removeAllChildren(rowsElm);

        // Create the column headers.
        var tr = document.createElement('tr');
        var columns = [
          'name', 'version', 'revision', 'win', 'mac', 'linux', 'all'
        ];
        for (var i = 0; i < columns.length; ++i) {
          var td = document.createElement('td');
          var text = document.createTextNode(columns[i]);
          td.appendChild(text);
          tr.appendChild(td);
        }
        columnsElm.appendChild(tr);

        var platforms = ['win', 'mac', 'linux', 'all'];

        for (var i = 0; i < data.length; ++i) {
          var tr = document.createElement('tr');
          for (var j = 0; j < columns.length; ++j) {
            var td = document.createElement('td');
            var node;
            if (platforms.indexOf(columns[j]) != -1) {
              var archives = data[i].archives;
              for (var k = 0; k < archives.length; ++k) {
                if (columns[j] == archives[k].host_os) {
                  var url = archives[k].url;
                  var lastSlash = url.lastIndexOf('/');
                  var nextDot = url.indexOf('.', lastSlash);
                  name = url.substr(lastSlash + 1, nextDot - lastSlash - 1);
                  node = document.createElement('a');
                  node.setAttribute('href', url);
                  node.appendChild(document.createTextNode(name));
                  td.appendChild(node);
                }
              }
            } else {
              node = document.createTextNode(data[i][columns[j]]);
              td.appendChild(node);
            }
            tr.appendChild(td);
          }
          rowsElm.appendChild(tr);
        }
      }

      function displayLog(text) {
        document.getElementById('log').textContent = text;
      }

      loadJson('naclsdk_manifest2.json', display);
      loadText('naclsdk_manifest2.json.log', displayLog);
    </script>
  </body>
</html>