Version static app assets for CDN releases
This commit is contained in:
+2
-2
@@ -4,7 +4,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<title>Account — Roast Planner</title>
|
||||
<link rel="stylesheet" href="/app.css?v=20260730-5ef8274" />
|
||||
<link rel="stylesheet" href="/app.css?v=20260730-release2" />
|
||||
<link rel="icon" href="/icon.svg" type="image/svg+xml" />
|
||||
<meta name="theme-color" content="#A8481A" />
|
||||
</head>
|
||||
@@ -254,6 +254,6 @@
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
<script type="module" src="/js/account.js"></script>
|
||||
<script type="module" src="/js/account.js?v=20260730-release2"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<title>Admin — Roast Planner</title>
|
||||
<link rel="stylesheet" href="/app.css?v=20260730-5ef8274" />
|
||||
<link rel="stylesheet" href="/app.css?v=20260730-release2" />
|
||||
<link rel="icon" href="/icon.svg" type="image/svg+xml" />
|
||||
<meta name="theme-color" content="#A8481A" />
|
||||
</head>
|
||||
@@ -197,6 +197,6 @@
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
<script type="module" src="/js/admin.js"></script>
|
||||
<script type="module" src="/js/admin.js?v=20260730-release2"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<title>Cupping — Roast Planner</title>
|
||||
<link rel="stylesheet" href="/app.css?v=20260730-5ef8274" />
|
||||
<link rel="stylesheet" href="/app.css?v=20260730-release2" />
|
||||
<link rel="icon" href="/icon.svg" type="image/svg+xml" />
|
||||
<meta name="theme-color" content="#A8481A" />
|
||||
</head>
|
||||
@@ -260,6 +260,6 @@
|
||||
document.getElementById("cupping-session-view").classList.remove("hidden");
|
||||
}
|
||||
</script>
|
||||
<script type="module" src="/js/cupping.js"></script>
|
||||
<script type="module" src="/js/cupping.js?v=20260730-release2"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<title>Reset your password — Roast Planner</title>
|
||||
<link rel="stylesheet" href="/app.css?v=20260730-5ef8274" />
|
||||
<link rel="stylesheet" href="/app.css?v=20260730-release2" />
|
||||
<link rel="icon" href="/icon.svg" type="image/svg+xml" />
|
||||
<meta name="theme-color" content="#A8481A" />
|
||||
</head>
|
||||
@@ -38,6 +38,6 @@
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
<script type="module" src="/js/forgot.js"></script>
|
||||
<script type="module" src="/js/forgot.js?v=20260730-release2"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+2
-2
@@ -11,7 +11,7 @@
|
||||
<link rel="icon" href="/icon.svg" type="image/svg+xml" />
|
||||
<link rel="apple-touch-icon" href="/icon.svg" />
|
||||
<link rel="stylesheet" href="/worksheet.css" media="print" />
|
||||
<link rel="stylesheet" href="/app.css?v=20260730-5ef8274" />
|
||||
<link rel="stylesheet" href="/app.css?v=20260730-release2" />
|
||||
</head>
|
||||
<body>
|
||||
<div class="app-shell">
|
||||
@@ -2492,6 +2492,6 @@
|
||||
|
||||
<datalist id="cultivar-list"></datalist>
|
||||
|
||||
<script type="module" src="/js/main.js"></script>
|
||||
<script type="module" src="/js/main.js?v=20260730-release2"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<title>Inventory — Roast Planner</title>
|
||||
<link rel="stylesheet" href="/app.css?v=20260730-5ef8274" />
|
||||
<link rel="stylesheet" href="/app.css?v=20260730-release2" />
|
||||
<link rel="icon" href="/icon.svg" type="image/svg+xml" />
|
||||
<meta name="theme-color" content="#A8481A" />
|
||||
</head>
|
||||
@@ -217,6 +217,6 @@
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
<script type="module" src="/js/inventory.js"></script>
|
||||
<script type="module" src="/js/inventory.js?v=20260730-release2"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { api, protectedFetch } from "./api.js";
|
||||
import { initSideNav, loadNavUser } from "./nav.js";
|
||||
import { showToast } from "./toast.js";
|
||||
import { api, protectedFetch } from "./api.js?v=20260730-release2";
|
||||
import { initSideNav, loadNavUser } from "./nav.js?v=20260730-release2";
|
||||
import { showToast } from "./toast.js?v=20260730-release2";
|
||||
|
||||
function fmtDate(value) {
|
||||
return value ? new Date(value).toLocaleString() : "—";
|
||||
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
import { api, protectedFetch } from "./api.js";
|
||||
import { initSideNav, loadNavUser } from "./nav.js";
|
||||
import { showToast } from "./toast.js";
|
||||
import { api, protectedFetch } from "./api.js?v=20260730-release2";
|
||||
import { initSideNav, loadNavUser } from "./nav.js?v=20260730-release2";
|
||||
import { showToast } from "./toast.js?v=20260730-release2";
|
||||
|
||||
let currentUsers = [];
|
||||
let planFilterUserId = null;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { api, protectedFetch } from "./api.js";
|
||||
import { initSideNav, loadNavUser } from "./nav.js";
|
||||
import { showToast } from "./toast.js";
|
||||
import { wireWhyPanels } from "./why-panels.js";
|
||||
import { api, protectedFetch } from "./api.js?v=20260730-release2";
|
||||
import { initSideNav, loadNavUser } from "./nav.js?v=20260730-release2";
|
||||
import { showToast } from "./toast.js?v=20260730-release2";
|
||||
import { wireWhyPanels } from "./why-panels.js?v=20260730-release2";
|
||||
import {
|
||||
SCORE_ATTRS,
|
||||
SCORE_LABELS,
|
||||
@@ -11,7 +11,7 @@ import {
|
||||
MAX_FLAVOR_TAGS,
|
||||
MAX_CUP_COUNT,
|
||||
computeTotalScore,
|
||||
} from "/shared/cupping.js";
|
||||
} from "/shared/cupping.js?v=20260730-release2";
|
||||
|
||||
const sessionId = new URLSearchParams(location.search).get("session");
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { api, protectedFetch } from "./api.js";
|
||||
import { initSideNav, loadNavUser } from "./nav.js";
|
||||
import { showToast } from "./toast.js";
|
||||
import { api, protectedFetch } from "./api.js?v=20260730-release2";
|
||||
import { initSideNav, loadNavUser } from "./nav.js?v=20260730-release2";
|
||||
import { showToast } from "./toast.js?v=20260730-release2";
|
||||
|
||||
let lots = [];
|
||||
let showArchived = false;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { api, protectedFetch } from "./api.js";
|
||||
import { showToast } from "./toast.js";
|
||||
import { api, protectedFetch } from "./api.js?v=20260730-release2";
|
||||
import { showToast } from "./toast.js?v=20260730-release2";
|
||||
|
||||
let lots = [];
|
||||
|
||||
|
||||
+13
-13
@@ -1,19 +1,19 @@
|
||||
import { FIELD_IDS, blankPlan } from "/shared/fields.js";
|
||||
import { computeLedger } from "/shared/ledger.js";
|
||||
import { FIELD_IDS, blankPlan } from "/shared/fields.js?v=20260730-release2";
|
||||
import { computeLedger } from "/shared/ledger.js?v=20260730-release2";
|
||||
import {
|
||||
formatDuration,
|
||||
formatSigned,
|
||||
parseRangeMidpoint,
|
||||
} from "/shared/time.js";
|
||||
import { CULTIVARS, findCultivar } from "/shared/reference-data.js";
|
||||
import { buildPlanCurve, pointsToPathD, tToX, tempToY } from "/shared/curve.js";
|
||||
import { initPrefillPanel } from "./prefill-ui.js";
|
||||
import { initAlogPanel } from "./alog-ui.js";
|
||||
import { initPrint } from "./print.js";
|
||||
import { initLotPicker } from "./lot-picker.js";
|
||||
import { protectedFetch, csrfToken } from "./api.js";
|
||||
import { initSideNav } from "./nav.js";
|
||||
import { wireWhyPanels } from "./why-panels.js";
|
||||
} from "/shared/time.js?v=20260730-release2";
|
||||
import { CULTIVARS, findCultivar } from "/shared/reference-data.js?v=20260730-release2";
|
||||
import { buildPlanCurve, pointsToPathD, tToX, tempToY } from "/shared/curve.js?v=20260730-release2";
|
||||
import { initPrefillPanel } from "./prefill-ui.js?v=20260730-release2";
|
||||
import { initAlogPanel } from "./alog-ui.js?v=20260730-release2";
|
||||
import { initPrint } from "./print.js?v=20260730-release2";
|
||||
import { initLotPicker } from "./lot-picker.js?v=20260730-release2";
|
||||
import { protectedFetch, csrfToken } from "./api.js?v=20260730-release2";
|
||||
import { initSideNav } from "./nav.js?v=20260730-release2";
|
||||
import { wireWhyPanels } from "./why-panels.js?v=20260730-release2";
|
||||
|
||||
const FIELD_ID_SET = new Set(FIELD_IDS);
|
||||
const STORAGE_PREFIX = "roastPlannerPlan.v2";
|
||||
@@ -903,7 +903,7 @@ function wirePwa() {
|
||||
const hadController = !!navigator.serviceWorker.controller;
|
||||
window.addEventListener("load", () => {
|
||||
navigator.serviceWorker
|
||||
.register("/sw.js")
|
||||
.register("/sw.js?v=20260730-release2")
|
||||
.then((registration) => {
|
||||
const showUpdate = () =>
|
||||
document.getElementById("btn-refresh").classList.remove("hidden");
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@
|
||||
name="description"
|
||||
content="A structured worksheet that computes first crack, development, and drop from your bean — then keeps the plan next to what actually happened."
|
||||
/>
|
||||
<link rel="stylesheet" href="/app.css?v=20260730-5ef8274" />
|
||||
<link rel="stylesheet" href="/app.css?v=20260730-release2" />
|
||||
<link rel="icon" href="/icon.svg" type="image/svg+xml" />
|
||||
<meta name="theme-color" content="#2A1D16" />
|
||||
</head>
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<title>Log in — Roast Planner</title>
|
||||
<link rel="stylesheet" href="/app.css?v=20260730-5ef8274" />
|
||||
<link rel="stylesheet" href="/app.css?v=20260730-release2" />
|
||||
<link rel="icon" href="/icon.svg" type="image/svg+xml" />
|
||||
<meta name="theme-color" content="#A8481A" />
|
||||
</head>
|
||||
@@ -44,6 +44,6 @@
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
<script type="module" src="/js/login.js"></script>
|
||||
<script type="module" src="/js/login.js?v=20260730-release2"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<title>Set a new password — Roast Planner</title>
|
||||
<link rel="stylesheet" href="/app.css?v=20260730-5ef8274" />
|
||||
<link rel="stylesheet" href="/app.css?v=20260730-release2" />
|
||||
<link rel="icon" href="/icon.svg" type="image/svg+xml" />
|
||||
<meta name="theme-color" content="#A8481A" />
|
||||
</head>
|
||||
@@ -46,6 +46,6 @@
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
<script type="module" src="/js/reset.js"></script>
|
||||
<script type="module" src="/js/reset.js?v=20260730-release2"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<title>Administrator setup — Roast Planner</title>
|
||||
<link rel="stylesheet" href="/app.css?v=20260730-5ef8274" />
|
||||
<link rel="stylesheet" href="/app.css?v=20260730-release2" />
|
||||
<link rel="icon" href="/icon.svg" type="image/svg+xml" />
|
||||
<meta name="theme-color" content="#A8481A" />
|
||||
</head>
|
||||
@@ -58,6 +58,6 @@
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
<script type="module" src="/js/setup.js"></script>
|
||||
<script type="module" src="/js/setup.js?v=20260730-release2"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<title>Create an account — Roast Planner</title>
|
||||
<link rel="stylesheet" href="/app.css?v=20260730-5ef8274" />
|
||||
<link rel="stylesheet" href="/app.css?v=20260730-release2" />
|
||||
<link rel="icon" href="/icon.svg" type="image/svg+xml" />
|
||||
<meta name="theme-color" content="#A8481A" />
|
||||
</head>
|
||||
@@ -55,6 +55,6 @@
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
<script type="module" src="/js/signup.js"></script>
|
||||
<script type="module" src="/js/signup.js?v=20260730-release2"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+20
-20
@@ -1,4 +1,4 @@
|
||||
const CACHE_NAME = "roast-planner-static-v7";
|
||||
const CACHE_NAME = "roast-planner-static-v8";
|
||||
// Only /app is precached as a navigable page: it is a data-free authenticated shell (draft
|
||||
// data lives only in account-scoped local storage, and logout clears that namespace), so it is
|
||||
// the one page that is both safe and useful to relaunch offline. The marketing page, auth
|
||||
@@ -7,25 +7,25 @@ const CACHE_NAME = "roast-planner-static-v7";
|
||||
// stale content.
|
||||
const APP_SHELL = [
|
||||
"/app",
|
||||
"/app.css?v=20260730-5ef8274",
|
||||
"/worksheet.css",
|
||||
"/manifest.webmanifest",
|
||||
"/icon.svg",
|
||||
"/js/main.js",
|
||||
"/js/api.js",
|
||||
"/js/nav.js",
|
||||
"/js/toast.js",
|
||||
"/js/why-panels.js",
|
||||
"/js/lot-picker.js",
|
||||
"/js/prefill-ui.js",
|
||||
"/js/alog-ui.js",
|
||||
"/js/print.js",
|
||||
"/shared/fields.js",
|
||||
"/shared/ledger.js",
|
||||
"/shared/time.js",
|
||||
"/shared/reference-data.js",
|
||||
"/shared/curve.js",
|
||||
"/shared/cupping.js",
|
||||
"/app.css?v=20260730-release2",
|
||||
"/worksheet.css?v=20260730-release2",
|
||||
"/manifest.webmanifest?v=20260730-release2",
|
||||
"/icon.svg?v=20260730-release2",
|
||||
"/js/main.js?v=20260730-release2",
|
||||
"/js/api.js?v=20260730-release2",
|
||||
"/js/nav.js?v=20260730-release2",
|
||||
"/js/toast.js?v=20260730-release2",
|
||||
"/js/why-panels.js?v=20260730-release2",
|
||||
"/js/lot-picker.js?v=20260730-release2",
|
||||
"/js/prefill-ui.js?v=20260730-release2",
|
||||
"/js/alog-ui.js?v=20260730-release2",
|
||||
"/js/print.js?v=20260730-release2",
|
||||
"/shared/fields.js?v=20260730-release2",
|
||||
"/shared/ledger.js?v=20260730-release2",
|
||||
"/shared/time.js?v=20260730-release2",
|
||||
"/shared/reference-data.js?v=20260730-release2",
|
||||
"/shared/curve.js?v=20260730-release2",
|
||||
"/shared/cupping.js?v=20260730-release2",
|
||||
];
|
||||
|
||||
self.addEventListener("install", (event) => {
|
||||
|
||||
Reference in New Issue
Block a user