UNPKG

galhui

Version:

UI library using galho framework

100 lines 8.83 kB
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1CLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3hELE9BQU8sRUFBK0IsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQU8sQ0FBQyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRGLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUksRUFBRSxLQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDckYsTUFBTSxVQUFVLElBQUksQ0FBQyxHQUFHLFNBQWM7SUFDcEMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0IsTUFBTSxDQUFDLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hELE9BQU8sR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQy9CLENBQUM7QUFNRCxJQUFJLElBQWUsRUFBRSxPQUFlLENBQUM7QUFDckMsTUFBTSxDQUFDLElBQUksV0FBZ0IsQ0FBQztBQUM1QixNQUFNLE1BQU0sR0FBVyxFQUFFLENBQUM7QUFHMUIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFpQixFQUFFLE9BQWU7SUFDcEQsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ1YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQzs7UUFDbkIsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHO1lBQ3BCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUNELE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBMEI7SUFDNUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7UUFBQyxDQUFDO0lBRWxDLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSTtRQUNoQixDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDYixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBQ0QsTUFBTSxVQUFVLElBQUksQ0FBQyxHQUFHLEtBQThCO0lBQ3BELElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLENB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