fix: URL persistence in export + cache-busting v4.8.0
Some checks failed
Build & Push Docker / build (push) Has been cancelled

- getDocument() now explicitly lists all block fields including url
- loadDocument() initializes url/series_id for backward compat with older JSONs
- Cache-busting query params (?v=4.8) on all static assets
- PDF generator uses block.url directly (proper model field)
- Added 7 new URL tests (model, API, PDF link annotations)
- Version bumped to 4.8.0
This commit is contained in:
Martin Sukany
2026-03-14 19:51:05 +01:00
parent 0a694ce63a
commit 04fe5590b0
7 changed files with 121 additions and 10 deletions

View File

@@ -7,13 +7,13 @@
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/static/css/app.css">
<link rel="stylesheet" href="/static/css/app.css?v=4.8">
</head>
<body>
<header class="header">
<div class="header-left">
<h1 class="header-title">Scénář Creator</h1>
<span class="header-version">v4.7</span>
<span class="header-version">v4.8</span>
</div>
<div class="header-actions">
<label class="btn btn-secondary btn-sm" id="importJsonBtn">
@@ -249,10 +249,10 @@
<div class="toast hidden" id="toast"></div>
<script src="https://cdn.jsdelivr.net/npm/interactjs@1.10.27/dist/interact.min.js"></script>
<script src="/static/js/api.js"></script>
<script src="/static/js/canvas.js"></script>
<script src="/static/js/export.js"></script>
<script src="/static/js/app.js"></script>
<script src="/static/js/api.js?v=4.8"></script>
<script src="/static/js/canvas.js?v=4.8"></script>
<script src="/static/js/export.js?v=4.8"></script>
<script src="/static/js/app.js?v=4.8"></script>
<script>
document.addEventListener('DOMContentLoaded', () => App.init());
</script>

View File

@@ -84,7 +84,18 @@ const App = {
date: this.state.event.date_from, // backward compat
},
program_types: this.state.program_types.map(pt => ({ ...pt })),
blocks: this.state.blocks.map(b => ({ ...b }))
blocks: this.state.blocks.map(b => ({
id: b.id,
date: b.date,
start: b.start,
end: b.end,
title: b.title,
type_id: b.type_id,
responsible: b.responsible || null,
notes: b.notes || null,
url: b.url || null,
series_id: b.series_id || null,
}))
};
},
@@ -104,7 +115,9 @@ const App = {
this.state.program_types = (doc.program_types || []).map(pt => ({ ...pt }));
this.state.blocks = (doc.blocks || []).map(b => ({
...b,
id: b.id || this.uid()
id: b.id || this.uid(),
url: b.url || null, // backward compat: older JSONs lack this
series_id: b.series_id || null,
}));
this.syncEventToUI();
this.renderTypes();