haikuwebkit/Websites/perf.webkit.org/public/cycler.html

86 lines
2.2 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="3600">
<style>
html, body, iframe { margin: 0; padding: 0; border: none; width: 100%; height: 100%; }
</style>
</head>
<body>
<script>
const urls = [];
const CycleSeconds = 30;
const request = new XMLHttpRequest();
request.open('GET', '/data/manifest.json', true);
request.send(null);
request.onreadystatechange = function () {
if (request.readyState != XMLHttpRequest.DONE)
return;
if (request.status !== 200) {
alert('Failed with status: ' + request.status);
return;
}
const manifest = JSON.parse(request.responseText);
const dashboards = [];
for (const dashboardName in manifest.dashboards)
dashboards.push(dashboardName);
for (const dashboardName of dashboards)
urls.push('/v3/#/dashboard/' + dashboardName);
loadURLAt(0);
}
let oldIframe = null;
function loadURLAt(i)
{
const newIframe = document.createElement('iframe');
document.body.appendChild(newIframe);
newIframe.src = urls[i];
newIframe.onload = () => {
scrollUpIfNeeded(oldIframe).then(() => {
showNewFrame(i, newIframe);
setTimeout(() => scrollDownIfNeeded(newIframe), CycleSeconds * 1000 / 2);
});
}
}
function showNewFrame(i, iframe)
{
if (oldIframe)
document.body.removeChild(oldIframe);
oldIframe = iframe;
i = (i + 1) % urls.length;
setTimeout(loadURLAt.bind(window, i), CycleSeconds * 1000);
}
function scrollUpIfNeeded(iframe)
{
const diff = iframe ? iframe.scrollDiff : 0;
if (!diff)
return Promise.resolve();
for (let i = 0; i < 500; i++)
setTimeout(() => iframe.contentWindow.scrollTo(0, oldIframe.scrollDiff / 500 * (500 - i)), i);
return new Promise((resolve) => setTimeout(resolve, 800));
}
function scrollDownIfNeeded(iframe)
{
const viewportHeight = iframe.contentWindow.innerHeight;
const contentHeight = iframe.contentDocument.body.offsetHeight;
if (viewportHeight >= contentHeight)
return;
const diff = contentHeight - viewportHeight;
for (let i = 0; i < 500; i++)
setTimeout(() => iframe.contentWindow.scrollTo(0, diff / 500 * i), i);
iframe.scrollDiff = diff;
}
</script>
</body>
</html>