filestash/public/index.frontoffice.html
2025-09-01 11:51:53 +10:00

119 lines
5.4 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<base href="{{ .base }}">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="application-name" content="Filestash">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
<title></title>
<link rel="icon" href="{{ .favicon }}">
<script>{{ if eq .license "agpl" }}{{ template "loader-cat" }}{{ else }}{{ template "loader-basic" }}{{ end }}</script>
</head>
<body>
<div id="app">
<component-bootscreen></component-bootscreen>
</div>
<template id="head">
<link rel="stylesheet" href="custom.css">
<link rel="stylesheet" href="./assets/{{ .version }}/css/designsystem.css">
</template>
<template id="body">
<script type="module" src="./assets/{{ .version }}/components/loader.js"></script>
<script type="module">
import main from "./assets/{{ .version }}/lib/skeleton/index.js";
import routes from "./assets/{{ .version }}/boot/router_frontoffice.js";
main(document.getElementById("app"), routes, {
spinner: `<component-loader></component-loader>`,
beforeStart: import("{{ .base }}assets/{{ .version }}/boot/ctrl_boot_frontoffice.js"),
});
</script>
<component-modal></component-modal>
<script type="module" src="./assets/{{ .version }}/components/modal.js" defer></script>
<component-notification></component-notification>
<script type="module" src="./assets/{{ .version }}/components/notification.js" defer></script>
</template>
<script type="module">
function liftoff() {
document.head.appendChild(document.querySelector("template#head").content);
document.body.appendChild(document.querySelector("template#body").content);
}
async function ignitionSequence() {
if (!("serviceWorker" in navigator)) return
try {
window.bundler = (function () {
let modules = [];
return {
register: (path, code) => modules[path] = code,
state: () => modules,
};
})();
const [register] = await Promise.all([
navigator.serviceWorker.register("sw.js").then((register) => new Promise((resolve) => {
register.active ?
resolve(register) :
navigator.serviceWorker.addEventListener("controllerchange", () => {
resolve(register);
});
})),
new Promise((resolve, reject) => {
const $script = document.createElement("script");
$script.type = "module";
$script.src = "./assets/bundle.js?version={{ slice .version 0 7 }}::{{ .hash }}";
document.head.appendChild($script);
$script.onload = resolve;
$script.onerror = reject;
}),
]);
register.active.postMessage({
"type": "preload",
"payload": bundler.state(),
"version": "{{ slice .version 0 7 }}::{{ .hash }}",
});
await new Promise((resolve, reject) => navigator.serviceWorker.addEventListener("message", (event) => {
if (event.data && event.data.type === "preload") {
if (event.data.status !== "ok") console.log(`turboload failure data=${JSON.stringify(event.data)}`);
resolve();
}
}));
} catch (err) { console.error(err); }
}
//
//
//
//
// /\
// / \
// || / \
// || /______\
// ||| |
// | | |
// | | |
// |__|________|
// |___________|
// | | |
// |__| || |\
// ||| || | \
// /||| || | \
// /_|||...||...|___\
// |||::::::::|
// || \::::::/
// || ||__||
// || ||
// || \\_______________
// _______________||______`---------------
// |
// | |
await ignitionSequence() // |
// |
liftoff() // |
// | |
// |_____________________________________________|
</script>
<noscript><div style="text-align:center;font-family:monospace;margin-top:5%;font-size:15px;"><h2>Error: Javascript is off</h2></div></noscript>
</body>
</html>