<!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>