galhui
Version:
UI library using galho framework
100 lines • 8.83 kB
JavaScript
import { g, getAll, isE } from "galho";
import { filter, isF, isS, z } from "galho/util.js";
export const hash = (s, value) => s.on("click", () => location.hash = value);
export function init(...routeRoot) {
root = routeRoot.map(r => r.e);
window.onhashchange = () => goTo(location.hash);
current = currentPath = null;
}
var root, current;
export var currentPath;
const routes = {};
export function add(key, handler) {
if (isS(key))
routes[key] = handler;
else
for (let k in key)
routes[k] = key[k];
}
export function set(t) {
let p = g(root[0]).parent, i = -1;
while (p.child(++i).e != root[0])
;
for (let e of root)
e.remove();
p.place(i, root = filter(t).map(v => isE(v) ? v.e : v));
}
export function push(...items) {
let t = filter(items.map(v => v && (isE(v) ? v.e : v)), v => v && !root.includes(v));
g(z(root)).after(t);
root.push(...t);
}
export function pop(...items) {
for (let e of items) {
let index = root.findIndex(t => t == e.e);
if (index != -1) {
root.splice(index, 1);
}
e.remove();
}
}
// _intercept: Intercept,
let e = [], defRoute;
export function intercept(v) {
e.push(v);
}
export function has(path) {
return path.split('/', 2)[0] in routes;
}
export function defaultRoute(value) { return value === void 0 ? defRoute : defRoute = value; }
export async function goTo(path) {
if (path[0] == '#')
path = path.slice(1);
has(path) || (console.warn(`path '${path}' not found.`), path = defRoute || "");
let sub = path.split('/'), key = sub.shift();
let canceled, o = { cancel() { canceled = true; }, sub, path };
for (let i of e) {
let t = i(key, o);
if (canceled)
return;
if (t)
key = (o.sub = sub = (o.path = t).split("/")).shift();
}
sub = sub.map(s => decodeURIComponent(s));
history.replaceState(null, null, "#" + o.path);
if (key != currentPath) {
current = null;
let route = routes[key];
if (!route)
throw 404;
let dt = isF(route) ? await route(...sub) : route;
if (dt && isF(dt[1])) {
current = dt[1];
dt = dt[0];
}
if (dt)
set(dt);
currentPath = key;
}
setTimeout(updateAnchors);
if (current) {
let _ = await current(...sub);
_ && set(_);
}
}
export function updateAnchors() {
getAll('a.on[href^="#"]').do(e => e.c("on", false));
getAll(`a[href="${location.hash}"]`).c("on");
}
export function hmr() {
let cp = currentPath;
currentPath = null;
try {
goTo(location.hash);
}
catch {
currentPath = cp;
console.warn("err parsing current path");
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1CLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3hELE9BQU8sRUFBK0IsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQU8sQ0FBQyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRGLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUksRUFBRSxLQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDckYsTUFBTSxVQUFVLElBQUksQ0FBQyxHQUFHLFNBQWM7SUFDcEMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0IsTUFBTSxDQUFDLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hELE9BQU8sR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQy9CLENBQUM7QUFNRCxJQUFJLElBQWUsRUFBRSxPQUFlLENBQUM7QUFDckMsTUFBTSxDQUFDLElBQUksV0FBZ0IsQ0FBQztBQUM1QixNQUFNLE1BQU0sR0FBVyxFQUFFLENBQUM7QUFHMUIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFpQixFQUFFLE9BQWU7SUFDcEQsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ1YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQzs7UUFDbkIsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHO1lBQ3BCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUNELE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBMEI7SUFDNUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7UUFBQyxDQUFDO0lBRWxDLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSTtRQUNoQixDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDYixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBQ0QsTUFBTSxVQUFVLElBQUksQ0FBQyxHQUFHLEtBQThCO0lBQ3BELElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLENBQUM7QUFDRCxNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQUcsS0FBVTtJQUMvQixLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRTtRQUNuQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRTtZQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCO1FBQ0QsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ1o7QUFDSCxDQUFDO0FBRUQsMEJBQTBCO0FBQzFCLElBQUksQ0FBQyxHQUFnQixFQUFFLEVBQUUsUUFBYSxDQUFDO0FBQ3ZDLE1BQU0sVUFBVSxTQUFTLENBQUMsQ0FBWTtJQUNwQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1osQ0FBQztBQUNELE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBUztJQUMzQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQztBQUN6QyxDQUFDO0FBQ0QsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFXLElBQUksT0FBTyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEcsTUFBTSxDQUFDLEtBQUssVUFBVSxJQUFJLENBQUMsSUFBWTtJQUNyQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHO1FBQ2hCLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXZCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLGNBQWMsQ0FBQyxFQUFFLElBQUksR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7SUFDaEYsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdDLElBQUksUUFBYyxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sS0FBSyxRQUFRLEdBQUcsSUFBSSxDQUFBLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNwRSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEIsSUFBSSxRQUFRO1lBQUUsT0FBTztRQUNyQixJQUFJLENBQUM7WUFDSCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7S0FDekQ7SUFDRCxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFL0MsSUFBSSxHQUFHLElBQUksV0FBVyxFQUFFO1FBQ3RCLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDZixJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUs7WUFDUixNQUFNLEdBQUcsQ0FBQztRQUNaLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ2xELElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNwQixPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFRLENBQUM7U0FDbkI7UUFDRCxJQUFJLEVBQUU7WUFDSixHQUFHLENBQUMsRUFBUyxDQUFDLENBQUM7UUFDakIsV0FBVyxHQUFHLEdBQUcsQ0FBQztLQUNuQjtJQUNELFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMxQixJQUFJLE9BQU8sRUFBRTtRQUNYLElBQUksQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNiO0FBQ0gsQ0FBQztBQUNELE1BQU0sVUFBVSxhQUFhO0lBQzNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEQsTUFBTSxDQUFDLFdBQVcsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFRCxNQUFNLFVBQVUsR0FBRztJQUNqQixJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUM7SUFDckIsV0FBVyxHQUFHLElBQUksQ0FBQztJQUNuQixJQUFJO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNyQjtJQUFDLE1BQU07UUFDTixXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztLQUMxQztBQUNILENBQUMifQ==