Add page permalink

This commit is contained in:
Austen Adler 2023-04-30 15:28:20 -04:00
parent c358169ec6
commit 0298432501

View File

@ -0,0 +1,37 @@
// From: https://svelte.dev/repl/5abaac000b164aa1aacc6051d5c4f584?version=3.49.0
import { derived, writable } from 'svelte/store';
export function createUrlStore(ssrUrl) {
// Ideally a bundler constant so that it's tree-shakable
if (typeof window === 'undefined') {
const { subscribe } = writable(ssrUrl);
return { subscribe };
}
const href = writable(window.location.href);
const originalPushState = history.pushState;
const originalReplaceState = history.replaceState;
const updateHref = () => href.set(window.location.href);
history.pushState = function () {
originalPushState.apply(this, arguments);
updateHref();
};
history.replaceState = function () {
originalReplaceState.apply(this, arguments);
updateHref();
};
window.addEventListener('popstate', updateHref);
window.addEventListener('hashchange', updateHref);
return {
subscribe: derived(href, ($href) => new URL($href)).subscribe
};
}
// If you're using in a pure SPA, you can return a store directly and share it everywhere
export default createUrlStore();