123 lines
No EOL
5.5 KiB
HTML
123 lines
No EOL
5.5 KiB
HTML
<html>
|
|
<script nonce="{script_nonce}">
|
|
window.benchmark_key = "{benchmark_key}";
|
|
|
|
function setState(elem, text) {
|
|
var formatted = text
|
|
var parts = text.match(/\* Running (.*?)(\n|$)/g)
|
|
if (parts) {
|
|
for (var i=0; i < parts.length; i++) {
|
|
part = parts[i];
|
|
var details = part.match(/\* Running (.*?) (\.+|$)(.*)/);
|
|
if (details) {
|
|
var title = details[1]
|
|
var progress = details[2]
|
|
var result = details[3]
|
|
|
|
result_parts = result.match(/(.*) Done in ([0-9\.]+)s = (.*?) \(([0-9\.]+)x\)/)
|
|
var percent = Math.min(100, progress.length * 10)
|
|
if (result_parts) percent = 100
|
|
var style = "background-image: linear-gradient(90deg, #FFF " + percent + "%, #FFF 0%, #d9d5de 0%);"
|
|
var part_formatted = "<div class='test' style='" + style + "'>"
|
|
part_formatted += "<span class='title'>" + title + "</span><span class='percent percent-" + percent + "'>" + percent + "%</span> "
|
|
if (result_parts) {
|
|
var result_extra = result_parts[1]
|
|
var taken = result_parts[2]
|
|
var multipler_title = result_parts[3]
|
|
var multipler = result_parts[4]
|
|
part_formatted += "<div class='result result-" + multipler_title.replace(/[^A-Za-z]/g, "") + "'>"
|
|
part_formatted += " <span class='taken'>" + taken + "s</span>"
|
|
part_formatted += " <span class='multipler'>" + multipler + "x</span>"
|
|
part_formatted += " <span class='multipler-title'>" + multipler_title + "</span>"
|
|
part_formatted += "</div>"
|
|
} else {
|
|
part_formatted += "<div class='result'>" + result + "</div>"
|
|
}
|
|
part_formatted += "</div>"
|
|
formatted = formatted.replace(part, part_formatted);
|
|
}
|
|
}
|
|
}
|
|
formatted = formatted.replace(/(\! Error:.*)/, "<div class='test error'>$1</div>");
|
|
formatted = formatted.replace(/(\== Result ==[^]*)/, "<div class='test summary'>$1</div>");
|
|
var is_bottom = document.body.scrollTop + document.body.clientHeight >= document.body.scrollHeight - 5;
|
|
elem.innerHTML = formatted.trim();
|
|
if (is_bottom)
|
|
document.body.scrollTop = document.body.scrollHeight;
|
|
}
|
|
|
|
function stream(url, elem) {
|
|
document.getElementById("h1").innerText = "Benchmark: Starting..."
|
|
var xhr = new XMLHttpRequest();
|
|
xhr.open('GET', url, true);
|
|
xhr.setRequestHeader('Accept', 'text/html');
|
|
xhr.send(null);
|
|
xhr.onreadystatechange = function(state) {
|
|
document.getElementById("h1").innerText = "Benchmark: Running..."
|
|
setState(elem, xhr.responseText);
|
|
if (xhr.readyState == 4) {
|
|
document.getElementById("h1").innerText = "Benchmark: Done."
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
<body>
|
|
<style>
|
|
body {
|
|
background-color: #3c3546;
|
|
background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23cfcfcf' fill-opacity='0.09'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");}
|
|
h1 {
|
|
font-family: monospace; color: white; font-weight: normal; text-transform: uppercase;
|
|
max-width: 690px; margin: 30px auto; margin-bottom: 10px;
|
|
}
|
|
#out {
|
|
white-space: pre-line; background-color: #ffffff1a; padding: 20px; font-family: Consolas, monospace;
|
|
font-size: 11px; width: 90%; margin: auto; max-width: 650px; box-shadow: 0px 10px 30px -10px #5c5c5c6b;
|
|
}
|
|
.test { padding: 12px; box-shadow: 0px 5px 13px -5px #5c5c5c6b; margin-bottom: -2px; background-color: white; border: 1px solid #dbdbdb; }
|
|
.test .percent { float: right; }
|
|
.test .percent-100 { display: none; }
|
|
.test .result { float: right; }
|
|
.test .title { max-width: calc(100% - 150px); display: inline-block; }
|
|
.test .multipler-title { display: inline-block; width: 50px; text-align: right; }
|
|
.test:last-child { margin-bottom: 15px; border-color: #c1c1c1; }
|
|
|
|
.test .result-Sloooow { color: red; }
|
|
.test .result-Ehh { color: #ad1457; }
|
|
.test .result-Goodish { color: #ef6c00; }
|
|
.test .result-Ok { color: #00cf03; }
|
|
.test .result-Fine { color: #00bcd4; }
|
|
.test .result-Fast { color: #4b78ff; }
|
|
.test .result-WOW { color: #9c27b0; }
|
|
.test .result-Insane { color: #d603f4; }
|
|
|
|
.test.summary { margin-top: 20px; text-transform: uppercase; border-left: 10px solid #00ff63; border-color: #00ff63; }
|
|
.test.error { background-color: #ff2259; color: white; border-color: red; }
|
|
|
|
#start { text-align: center }
|
|
.button {
|
|
background-color: white; padding: 10px 20px; display: inline-block; border-radius: 5px;
|
|
text-decoration: none; color: #673AB7; text-transform: uppercase; margin-bottom: 11px; border-bottom: 2px solid #c1bff8;
|
|
}
|
|
.button:hover { border-bottom-color: #673AB7; }
|
|
.button:active { transform: translateY(1px) }
|
|
small { text-transform: uppercase; opacity: 0.7; color: white; letter-spacing: 1px; }
|
|
</style>
|
|
|
|
<h1 id="h1">Benchmark</h1>
|
|
<div id="out">
|
|
<div id="start">
|
|
<a href="#Start" class="button" id="start_button">Start benchmark</a>
|
|
<small>(It will take around 20 sec)</small>
|
|
</div>
|
|
</div>
|
|
|
|
<script nonce="{script_nonce}">
|
|
function start() {
|
|
stream("/BenchmarkResult?benchmark_key={benchmark_key}&filter={filter}", document.getElementById("out"));
|
|
return false;
|
|
}
|
|
document.getElementById("start_button").onclick = start
|
|
</script>
|
|
</body>
|
|
</html> |