Skip to content

Commit 53a7e46

Browse files
authored
Merge pull request #236 from DHBern/235-fassungskommentar-hash-behaviour-in-url
feat: open fasskomm from url, remove hash param on close
2 parents 92d9cca + 06385ed commit 53a7e46

1 file changed

Lines changed: 35 additions & 4 deletions

File tree

src/routes/fassungen/[thirties=thirties]/+page.svelte

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@
99
import { Switch } from '@skeletonlabs/skeleton-svelte';
1010
import { page } from '$app/state';
1111
import { onMount, tick, untrack } from 'svelte';
12-
import { goto } from '$app/navigation';
12+
import { goto, replaceState } from '$app/navigation';
1313
import ApparatPopover from './ApparatPopover.svelte';
1414
import handleFromSigil from '$lib/functions/handleFromSigil';
15+
import { browser } from '$app/environment';
1516
1617
/** @type {{data: import('./$types').PageData}} */
1718
let { data } = $props();
@@ -227,6 +228,7 @@
227228
tick().then(() => {
228229
addApparatTriggerListeners();
229230
addFasskommTriggerListeners();
231+
openFasskommFromHash();
230232
});
231233
return Promise.resolve();
232234
};
@@ -285,6 +287,14 @@
285287
FasskommStore.id = '';
286288
FasskommStore.commentary = '';
287289
};
290+
const openFasskommFromHash = () => {
291+
const id = page.url.hash;
292+
if (!id) return;
293+
const el = document.querySelector(`a.fasskommanchor[href="${CSS.escape(id)}"]`);
294+
if (el instanceof HTMLAnchorElement && el.href) {
295+
el.click();
296+
}
297+
};
288298
289299
// Triggers
290300
const addFasskommTriggerListeners = () => {
@@ -298,12 +308,22 @@
298308
el.removeEventListener('click', onClickFasskommTrigger);
299309
});
300310
};
301-
const onClickFasskommTrigger = (/** @type { Event } */ ev) => {
302-
if (ev.target instanceof HTMLElement) {
303-
fillFasskommStore(ev.target, false);
311+
312+
const onClickFasskommTrigger = (ev) => {
313+
const a = ev.target instanceof HTMLAnchorElement ? ev.target : ev.target?.closest?.('a');
314+
if (!a) return;
315+
316+
ev.preventDefault();
317+
const href = a.getAttribute('href');
318+
319+
if (browser && href) {
320+
const next = new URL(href, page.url);
321+
replaceState(next.href, {});
304322
}
323+
fillFasskommStore(a, false);
305324
};
306325
326+
307327
// --------------------------------------
308328
// Apparate
309329
// --------------------------------------
@@ -409,6 +429,17 @@
409429
synchro = false;
410430
}
411431
});
432+
433+
let wasFasskommOpen = false;
434+
$effect(() => {
435+
if (typeof window === 'undefined') return;
436+
const isOpen = !!FasskommStore.elTrigger;
437+
if (wasFasskommOpen && !isOpen && window.location.hash.startsWith('#fasskomm-')) {
438+
replaceState(`${page.url.pathname}${page.url.search}`, {});
439+
}
440+
wasFasskommOpen = isOpen;
441+
});
442+
412443
let gotoThirties = $state(Number(data.thirties));
413444
</script>
414445

0 commit comments

Comments
 (0)