Add page permalink
This commit is contained in:
parent
c358169ec6
commit
0298432501
37
web-frontend/src/lib/url.js
Normal file
37
web-frontend/src/lib/url.js
Normal 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();
|
Loading…
Reference in New Issue
Block a user