some updates to page loading performance and general performance.

added a ServiceWorker which caches stuff
This commit is contained in:
2025-10-12 17:36:11 +02:00
parent a7847f6bff
commit ccabb5395c
9 changed files with 483 additions and 100 deletions

View File

@@ -1,47 +1,67 @@
<!DOCTYPE html>
<html lang="en">
<html lang="en" style="height:100%;margin:0;">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Auto Index</title>
<script src="../../js/shared/theme.js"></script>
<link rel="icon" type="image/x-icon" href="../../css/favicon/favicon.ico">
<link rel="stylesheet" href="../../css/indexer.css">
<!-- Preload + async load -->
<link rel="preload" as="style" href="/css/indexer.css" onload="this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="/css/indexer.css"></noscript>
<link rel="icon" href="/css/favicon/favicon.ico" type="image/x-icon">
<!-- Defer theme toggle -->
<script src="/js/shared/theme.js" defer></script>
<script>
console.log("javascript is enabled! good!");
document.write('<h1 id="nojs" style="display: flex; align-items: center; cursor: pointer;" onclick="toggleDarkMode();"><img src="../../css/icons/folder.webp" alt="Folder icon" />Index of PyPost</h1>');
document.addEventListener("DOMContentLoaded", () => {
// Create heading dynamically
const h = document.createElement("h1");
h.id = "nojs";
h.innerHTML = '<img src="/css/icons/folder.webp" width="40" height="40" alt="📁" loading="lazy" style="margin-right:8px;">Index of PyPost';
h.onclick = toggleDarkMode;
document.body.prepend(h);
console.log("JavaScript enabled — index enhanced!");
});
</script>
<!-- Register service worker -->
<script>
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/js/post/sw.js').catch(console.error);
}
</script>
</head>
<body>
<main style="flex:1;">
<noscript>
<div style="display: inline-flex; align-items: center; flex-wrap: wrap;">
<img src="../../css/icons/script.webp" width="45" height="45" alt="Script icon" style="margin-right: 8px;" />
<h1 id="nojs" style="margin: 0;">Please enable Javascript!</h1>
</div>
<p>
<i><strong>If you might be wondering, what does the Script do?</strong></i><br/>
<ul id="nonenormalul">
<li>It strips the .HTML ending from each file you see in the list below</li>
<li>It isn't necessary, but visually tweaks the page.</li>
<li>It enables the "Back" Function for Headers</li>
<li>It enables Searching and Sorting of the Page-Display</li>
<li>It is essential for downloading Markdown-Source</li>
</ul>
<noscript>
<div style="display:inline-flex;align-items:center;flex-wrap:wrap;">
<img src="/css/icons/script.webp" width="45" height="45" alt="Script icon" style="margin-right:8px;">
<h1 style="margin:0;">Please enable JavaScript!</h1>
</div>
<p>
<i><strong>If you might be wondering, what does the Script do?</strong></i><br>
<ul>
<li>Strips the .HTML ending from filenames</li>
<li>Enables search, sorting, and back navigation</li>
<li>Allows Markdown source downloads</li>
</ul>
</p>
</noscript>
<p id="available" style="display:flex;align-items:center;gap:8px;">
<img src="/css/icons/available.webp" width="40" height="40" alt="Available" loading="lazy">
<span>Available pages:</span>
</p>
</noscript>
<p id="available">
<img src="../../css/icons/available.webp" width="40" height="40" alt="Available icon" />
Available pages:
</p>
<!-- CONTENT -->
<!-- CONTENT -->
<!-- load scripts needed for indexer -->
<script src="../../js/normal.js"></script>
<script src="../../js/search.js" defer></script>
<script src="../../js/ulorder.js" defer></script>
<!-- Core scripts: async load -->
<script src="/js/normal.js" defer></script>
<script src="/js/search.js" defer></script>
<script src="/js/ulorder.js" defer></script>
</body>
</html>

View File

@@ -1,77 +1,82 @@
<!doctype html>
<html lang="en" style="height:100%; margin:0;">
<html lang="en" style="height:100%;margin:0;">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ title }}</title>
<link rel="stylesheet" href="../css/main.css">
<link rel="icon" type="image/x-icon" href="../css/favicon/favicon.ico">
<script src="../js/post/download.js" defer></script>
<!-- Prism.js CSS theme -->
<!--<link rel="preload" href="https://cdn.jsdelivr.net/npm/prismjs/themes/prism.min.css" rel="stylesheet" />-->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>{{ title }}</title>
<!-- Prism.js core + languages -->
<!--
<script rel="preload" src="https://cdn.jsdelivr.net/npm/prismjs/prism.min.js"></script>
<script rel="preload" src="https://cdn.jsdelivr.net/npm/prismjs/components/prism-python.min.js"></script>
<script rel="preload" src="https://cdn.jsdelivr.net/npm/prismjs/components/prism-javascript.min.js"></script>
-->
<!-- Load main stylesheet asynchronously -->
<link rel="preload" as="style" href="/css/main.css" onload="this.rel='stylesheet'">
<link rel="preload" as="style" href="/css/prism.css" onload="this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="/css/main.css"></noscript>
<!-- MathJAX for LaTeX Support -->
<!--
<script rel="preload" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js" id="MathJax-script"></script>
-->
<link rel="icon" type="image/x-icon" href="/css/favicon/favicon.ico">
<!-- Locally fetch the CDN -->
<link rel="stylesheet" href="/package/css/prism.min.css" />
<script rel="preload" src="/package/js/prism.min.js"></script>
<script rel="preload" src="/package/js/prism-python.min.js"></script>
<script rel="preload" async defer src="/package/js/mathjax.js"></script>
<!-- Local JS -->
<script src="/js/shared/theme.js"></script>
<script src="/js/post/download.js" defer></script>
<!-- remove if causing issues -->
<script src="../js/post/lazyimg.js"></script>
<script src="../js/shared/theme.js"></script>
<style>
a { text-decoration: none; color: #0066cc; }
</style>
<!-- Prism (code highlighting) -->
<script src="/js/post/prism.js" defer></script>
<!-- Dynamic MathJax loader -->
<script>
document.addEventListener('DOMContentLoaded', () => {
const hasMath = /\$\$(.|[\r\n])*?\$\$|\$(?!\$)(.*?)\$/.test(document.body.innerHTML);
if (hasMath) {
const mj = document.createElement('script');
mj.src = '/package/js/mathjax.js';
mj.defer = true;
document.head.appendChild(mj);
}
});
</script>
<!-- Service worker registration -->
<script>
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/js/post/sw.js').catch(console.error);
}
</script>
</head>
<body style="display:flex; flex-direction:column; min-height:100%; margin:0;">
<main class="container" style="flex:1;">
<h1 onclick="window.location.href=window.location.origin" style="cursor:pointer; display:flex; align-items:center; gap:8px; font-size:1.5em; margin:0;">
<img loading="lazy" src="../css/icons/back.webp" width="32" height="32" alt="⬅" style="display:block;" />
{{ title }} <noscript>(Enable JavaScript!)</noscript>
</h1>
<img loading="lazy" src="../css/icons/written.webp" width="32" height="32" alt="📄" loading="lazy" style="vertical-align: middle;padding-left:40px;cursor:pointer;" onclick="toggleDarkMode();" />
<div class="meta" style="display: inline;cursor:pointer;" onclick="toggleDarkMode();">
Written @{{ now }}
</div>
<hr style="margin:10px 0;" />
<div class="html-content">
{{ html_body | safe }}
</div>
<body>
<main class="container">
<h1 onclick="window.location.href=window.location.origin" style="cursor:pointer;display:flex;align-items:center;gap:8px;font-size:1.5em;margin:0;">
<img src="/css/icons/back.webp" width="32" height="32" alt="⬅" loading="lazy">
{{ title }} <noscript>(Enable JavaScript!)</noscript>
</h1>
<img src="/css/icons/written.webp" width="32" height="32" alt="📄" loading="lazy" style="vertical-align:middle;padding-left:40px;cursor:pointer;" onclick="toggleDarkMode();" />
<div class="meta" style="display:inline;cursor:pointer;" onclick="toggleDarkMode();">
Written @{{ now }}
</div>
<hr style="margin:10px 0;">
<div class="html-content">
{{ html_body | safe }}
</div>
</main>
<footer style="margin-top:auto; width:100%;">
<hr style="margin:10px 0;" />
<img src="../css/icons/date.webp" width="16" height="16" alt="date" loading="lazy" style="vertical-align: middle;" />
{{ timestamp }}<br/>
<footer style="margin-top:auto;width:100%;">
<hr style="margin:10px 0;">
<img src="/css/icons/date.webp" width="16" height="16" alt="date" loading="lazy">
{{ timestamp }}<br>
<img src="../css/icons/magnifier.webp" width="16" height="16" alt="Hash1" loading="lazy" style="display:inline; vertical-align:middle;" />
Hash 1 (<b>UTF-8</b>)<i>:{{ hash1 }}</i><br />
<img src="/css/icons/magnifier.webp" width="16" height="16" alt="Hash1" loading="lazy">
Hash 1 (<b>UTF-8</b>)<i>:{{ hash1 }}</i><br>
<img src="../css/icons/magnifier.webp" width="16" height="16" alt="Hash2" loading="lazy" style="display:inline; vertical-align:middle;" />
Hash 2 (<b>Windows-1252</b>)<i>:{{ hash2 }}</i><br />
<img src="/css/icons/magnifier.webp" width="16" height="16" alt="Hash2" loading="lazy">
Hash 2 (<b>Windows-1252</b>)<i>:{{ hash2 }}</i><br>
<span style="display: inline-flex; align-items: center; gap: 8px;">
<img src="../css/icons/save.webp" width="16" height="16" alt="Save" loading="lazy" />
<a id="download-md">Download as Markdown <noscript>Enable JavaScript for downloads</noscript></a>
<span style="border-left: 1px solid #888; height: 16px;"></span> <!-- Vertical separator -->
<span style="display:inline-flex;align-items:center;gap:8px;">
<img src="/css/icons/save.webp" width="16" height="16" alt="Save" loading="lazy">
<a id="download-md">Download as Markdown</a>
<img src="../css/icons/script.webp" width="16" height="16" alt="Script" loading="lazy" />
<a id="download-html">Download as HTML <noscript>Enable JavaScript for downloads</noscript></a>
</span>
<span style="border-left:1px solid #888;height:16px;"></span>
<img src="/css/icons/script.webp" width="16" height="16" alt="Script" loading="lazy">
<a id="download-html">Download as HTML</a>
</span>
</footer>
</body>
</html>