86 lines
2.4 KiB
TypeScript
86 lines
2.4 KiB
TypeScript
import App from "./components/App.svelte"
|
|
import { location } from "./store"
|
|
|
|
const publishLocation = (_p?: string) => {
|
|
let _s: string
|
|
let _h: string
|
|
if (_p) {
|
|
const parts = _p.split("#")
|
|
_p = parts.shift()
|
|
_h = parts.join()
|
|
if (_h) _h = "#" + _h
|
|
|
|
const parts2 = _p.split("?")
|
|
_p = parts2.shift()
|
|
_s = parts2.join()
|
|
if (_s) _s = "?" + _s
|
|
}
|
|
|
|
const newLocation = {
|
|
path:
|
|
_p || (typeof window !== "undefined" && window.location?.pathname),
|
|
search: _p
|
|
? _s
|
|
: typeof window !== "undefined" && window.location?.search,
|
|
hash: _p ? _h : typeof window !== "undefined" && window.location?.hash,
|
|
push: !!_p,
|
|
pop: !_p,
|
|
categoryPath: "",
|
|
}
|
|
newLocation.categoryPath = newLocation.path.replace(/\/[^_\/]+_[^\/]+$/, "")
|
|
location.set(newLocation)
|
|
}
|
|
|
|
if (typeof history !== "undefined") {
|
|
if (typeof Proxy !== "undefined") {
|
|
// modern browser
|
|
const historyApply = (target, thisArg, argumentsList) => {
|
|
publishLocation(
|
|
argumentsList && argumentsList.length >= 2 && argumentsList[2]
|
|
)
|
|
Reflect.apply(target, thisArg, argumentsList)
|
|
}
|
|
|
|
history.pushState = new Proxy(history.pushState, {
|
|
apply: historyApply,
|
|
})
|
|
|
|
history.replaceState = new Proxy(history.replaceState, {
|
|
apply: historyApply,
|
|
})
|
|
} else {
|
|
// ie11
|
|
const pushStateFn = history.pushState
|
|
const replaceStateFn = history.replaceState
|
|
|
|
history.pushState = function (data: any, title: string, url?: string) {
|
|
publishLocation(url)
|
|
return pushStateFn.apply(history, arguments)
|
|
}
|
|
history.replaceState = function (
|
|
data: any,
|
|
title: string,
|
|
url?: string
|
|
) {
|
|
publishLocation(url)
|
|
return replaceStateFn.apply(history, arguments)
|
|
}
|
|
}
|
|
} // else ssr -> no history handling
|
|
|
|
typeof window !== "undefined" &&
|
|
window.addEventListener("popstate", (event) => {
|
|
publishLocation()
|
|
})
|
|
|
|
let appContainer = document?.getElementById("appContainer")
|
|
|
|
const hydrate = true //import.meta?.env?.MODE !== "development"
|
|
console.log("Features: ", { hydrate })
|
|
const app = new App({
|
|
target: appContainer,
|
|
props: {},
|
|
hydrate,
|
|
})
|
|
|
|
export default app |