| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8" /> | |
| <title>Session Paused - Web Platform Test Runner</title> | |
| <link rel="stylesheet" href="css/bulma-0.7.5/bulma.min.css" /> | |
| <link rel="stylesheet" href="css/style.css" /> | |
| <link rel="stylesheet" href="css/main.css" /> | |
| <script src="lib/davidshimjs/qrcode.js"></script> | |
| <script src="lib/keycodes.js"></script> | |
| <script src="lib/wave-service.js"></script> | |
| </head> | |
| <body> | |
| <section class="section"> | |
| <div class="container site-header"> | |
| <img src="res/wavelogo_2016.jpg" alt="WAVE Logo" class="site-logo" /> | |
| <h1 class="title is-spaced">Session Paused</h1> | |
| </div> | |
| <div id="content"> | |
| <div id="qr-code"></div> | |
| <div id="button-wrapper"> | |
| <button | |
| id="start-button" | |
| class="button is-large is-success tabbable" | |
| > | |
| Continue | |
| </button> | |
| <button | |
| id="results-button" | |
| class="button is-large is-light tabbable" | |
| > | |
| View Result Page | |
| </button> | |
| </div> | |
| <div>(Alternatively to resume the test you can just press Return)</div> | |
| <div id="details-wrapper"> | |
| <h3 class="title is-5 is-spaced">Details</h3> | |
| <div class="detail"> | |
| <div>Token:</div> | |
| <div id="token"></div> | |
| </div> | |
| <div class="detail"> | |
| <div>User Agent:</div> | |
| <div id="user-agent"></div> | |
| </div> | |
| <div class="detail"> | |
| <div>Test Types:</div> | |
| <div id="test-types"></div> | |
| </div> | |
| <div class="detail"> | |
| <div>Total Test Files:</div> | |
| <div id="total-tests"></div> | |
| </div> | |
| <div class="detail"> | |
| <div>Reference Tokens:</div> | |
| <div id="reference-tokens"></div> | |
| </div> | |
| <div class="detail"> | |
| <div>Test Timeouts:</div> | |
| <div id="test-timeout"></div> | |
| </div> | |
| <div class="detail"> | |
| <div>Test Paths:</div> | |
| <div id="test-path"></div> | |
| </div> | |
| </div> | |
| </div> | |
| </section> | |
| <script> | |
| var HOSTNAME = location.hostname; | |
| var PORT = location.port; | |
| var PROTOCOL = location.protocol.replace(/:/, ""); | |
| var QUERY = location.search.replace(/\?/, ""); | |
| var match = QUERY.match(/token=([^&]+)/); | |
| var TOKEN = match ? match[1] : null; | |
| if (TOKEN) | |
| document.cookie = "resume_token=" + TOKEN + "; expires=Fri, 31 Dec 9999 23:59:59 GMT"; | |
| var selectedTabbable = -1; | |
| function displaySessionConfiguration(configuration) { | |
| var userAgent = document.getElementById("user-agent"); | |
| userAgent.innerText = configuration.userAgent; | |
| var testPath = document.getElementById("test-path"); | |
| for (var i = 0; i < configuration.tests.include.length; i++) { | |
| var path = configuration.tests.include[i]; | |
| testPath.innerText += path + "\n"; | |
| } | |
| var testTypes = document.getElementById("test-types"); | |
| testTypes.innerText = configuration.types.join(", "); | |
| var testTimeout = document.getElementById("test-timeout"); | |
| for (var timeout in configuration.timeouts) { | |
| testTimeout.innerText += | |
| timeout + ": " + configuration.timeouts[timeout] / 1000 + "s\n"; | |
| } | |
| var referenceTokens = document.getElementById("reference-tokens"); | |
| if (configuration.referenceTokens.length === 0) { | |
| referenceTokens.innerText = "none"; | |
| } else { | |
| for (var i = 0; i < configuration.referenceTokens.length; i++) { | |
| var token = configuration.referenceTokens[i]; | |
| referenceTokens.innerText += token + "\n"; | |
| } | |
| } | |
| } | |
| function displaySessionStatus(status) { | |
| var testTypes = document.getElementById("total-tests"); | |
| var count = 0; | |
| for (var api in status.testFilesCount) { | |
| count += status.testFilesCount[api]; | |
| } | |
| testTypes.innerText = count; | |
| } | |
| function continueTests() { | |
| WaveService.startSession(TOKEN, function() { | |
| WaveService.readNextTest(TOKEN, function(url) { | |
| location.href = url; | |
| }); | |
| }); | |
| } | |
| WaveService.addSessionEventListener(TOKEN, function(message) { | |
| if (message.type !== "status") return; | |
| if (message.data !== "running") return; | |
| WaveService.readNextTest(TOKEN, function(url) { | |
| location.href = url; | |
| }); | |
| }); | |
| var resultsUrl = | |
| "http://" + location.host + WEB_ROOT + "overview.html" + location.search; | |
| new QRCode(document.getElementById("qr-code"), resultsUrl); | |
| var resultsButton = document.getElementById("results-button"); | |
| resultsButton.onclick = function() { | |
| window.open(resultsUrl, "_blank"); | |
| }; | |
| var continueButton = document.getElementById("start-button"); | |
| continueButton.onclick = continueTests; | |
| function removeClass(element, className) { | |
| var elementClass = element.className; | |
| var index = elementClass.indexOf(className); | |
| if (index !== -1) { | |
| element.className = elementClass.replace(className, ""); | |
| } | |
| } | |
| function addClass(element, className) { | |
| element.className += " " + className; | |
| } | |
| function skipFocus(steps) { | |
| var tabbables = document.getElementsByClassName("tabbable"); | |
| if (selectedTabbable === -1) { | |
| selectedTabbable = 0; | |
| } else { | |
| removeClass(tabbables[selectedTabbable], "focused"); | |
| selectedTabbable += steps; | |
| } | |
| if (selectedTabbable >= tabbables.length) { | |
| selectedTabbable = 0; | |
| } | |
| if (selectedTabbable < 0) { | |
| selectedTabbable = tabbables.length - 1; | |
| } | |
| tabbables[selectedTabbable].focus(); | |
| addClass(tabbables[selectedTabbable], "focused"); | |
| } | |
| function focusNext() { | |
| skipFocus(1); | |
| } | |
| function focusPrevious() { | |
| skipFocus(-1); | |
| } | |
| document.onkeydown = function(event) { | |
| event = event || window.event; | |
| var charCode = | |
| typeof event.which === "number" ? event.which : event.keyCode; | |
| if (ACTION_KEYS.indexOf(charCode) !== -1) { | |
| event.preventDefault(); | |
| if (selectedTabbable === -1) { | |
| continueTests(); | |
| return; | |
| } | |
| var tabbables = document.getElementsByClassName("tabbable"); | |
| var element = tabbables[selectedTabbable]; | |
| if (element.type === "checkbox") { | |
| element.checked = !element.checked; | |
| } else { | |
| element.click(); | |
| } | |
| } | |
| if (PREV_KEYS.indexOf(charCode) !== -1) { | |
| focusPrevious(); | |
| } | |
| if (NEXT_KEYS.indexOf(charCode) !== -1) { | |
| focusNext(); | |
| } | |
| }; | |
| var match = location.search.match(/token=(.+)/); | |
| var token = match[1]; | |
| var tokenView = document.getElementById("token"); | |
| tokenView.innerText = token; | |
| WaveService.readSession(token, displaySessionConfiguration); | |
| WaveService.readSessionStatus(token, displaySessionStatus); | |
| </script> | |
| </body> | |
| </html> |