Karolis' playground schedule / master src / lib / navigatorHistory.ts
master

Tree @master (Download .tar.gz)

navigatorHistory.ts @masterraw · history · blame

// eslint-disable-next-line import/no-extraneous-dependencies
import { createHashHistory } from "history";
import { createHistory, type HistorySource } from "svelte-navigator";

function createHashSource(): HistorySource {
	const history = createHashHistory();
	let listeners = [];

	history.listen(location => {
		if (history.action === "POP") {
			listeners.forEach(listener => listener(location));
		}
	});
	return {
		get location():Location {
			return history.location;
		},

		addEventListener(name, handler) {
			if (name !== "popstate") return;
			listeners.push(handler);
		},
		removeEventListener(name, handler) {
			if (name !== "popstate") return;
			listeners = listeners.filter(fn => fn !== handler);
		},
		history: {
			get state():object {
				return history.location.state as object;
			},
			pushState(state, title, uri) {
				history.push(uri, state);
			},
			replaceState(state, title, uri) {
				history.replace(uri, state);
			},
			go(to) {
				history.go(to);
			},
		},
	};
}

export default () => createHistory(createHashSource());