more ui tweaks:

- make index scrollable
- don't show 'current archive' until successfully loaded
- begin embed view for wr-replay
- cleanup pageutils
This commit is contained in:
Ilya Kreymer
2020-05-05 23:17:43 -07:00
parent 9241294191
commit 62f08f6dd9
4 changed files with 129 additions and 106 deletions
+1 -84
View File
@@ -1,4 +1,3 @@
async function digestMessage(message, hashtype) {
const msgUint8 = new TextEncoder().encode(message); // encode as (utf-8) Uint8Array
const hashBuffer = await crypto.subtle.digest(hashtype, msgUint8); // hash the message
@@ -7,88 +6,6 @@ async function digestMessage(message, hashtype) {
return hashHex;
}
function waitForReady() {
return new Promise((resolve) => {
window.addEventListener("load", () => {
resolve();
});
if (document.readyState === 'complete') {
resolve();
}
});
}
function initSW(relUrl = 'sw.js?replayPrefix=wabac&stats=true', path) {
const loc = window.location;
console.log(`Register SW: ${relUrl}`);
if (!navigator.serviceWorker) {
let msg = null;
if (loc.protocol === "http:") {
msg = 'Service workers only supported when loading via https://, but this site loaded from: ' + loc.origin;
} else {
msg = 'Sorry, Service workers are not supported in this browser'
}
return Promise.reject(msg);
}
// Register SW in current path scope (if not '/' use curr directory)
if (!path) {
path = loc.origin + loc.pathname;
} else {
path = new URL(path, window.location.href).href;
}
if (!path.endsWith("/")) {
path = path.slice(0, path.lastIndexOf("/") + 1);
}
let url = new URL(relUrl, path);
if (navigator.serviceWorker.controller && navigator.serviceWorker.controller.scriptURL === url) {
return Promise.resolve(false);
}
let done = false;
let resolve, reject;
const pr = new Promise((res, rej) => {
resolve = (e) => { done = true; res(e); };
reject = (e) => { done = true; rej(e); };
});
window.fetch(url, { "mode": "cors" }).then(resp => {
if (!resp.url.startsWith(path)) {
reject("Service Worker in wrong scope!")
}
return resp.url;
}).then((swUrl) => {
navigator.serviceWorker.addEventListener('error', e => reject(null));
setTimeout(() => {
if (!done) {
reject('Service Worker is not available');
}
}, 30000);
return navigator.serviceWorker.register(swUrl, { scope: path });
}).then((registration) => {
console.log('Service worker registration succeeded:', registration);
if (navigator.serviceWorker.controller) {
resolve(true);
}
navigator.serviceWorker.addEventListener('controllerchange', e => resolve(true));
}).catch((error) => {
console.log('Service worker registration failed:', error);
reject(error);
});
return pr;
}
function tsToDate(ts) {
if (!ts) {
return "";
@@ -115,4 +32,4 @@ function getTS(iso) {
export { initSW, waitForReady, digestMessage, tsToDate, getTS };
export { digestMessage, tsToDate, getTS };