UNPKG

hswidget

Version:
43 lines 3.52 kB
import m from "mithril"; import { Log } from 'hsutil'; const log = new Log('Router'); export class Router { constructor(viewComponent, routePattern, defaults) { this.routePattern = routePattern; this.defaults = defaults; this.lastAttrs = {}; this.setParts({}); setTimeout(() => this.route(viewComponent, routePattern)); } setRoute(attrs) { attrs = this.setParts(attrs); m.route.set(this.routePattern, attrs); } redraw() { m.redraw(); } setParts(attrs) { Object.entries(this.defaults).map(([attr, def]) => { if (attrs[attr] === undefined) { attrs[attr] = this.lastAttrs[attr]; } this.lastAttrs[attr] = attrs[attr] || this.lastAttrs[attr] || def; }); return this.lastAttrs; } getParts() { return this.lastAttrs; } route(viewComponent, routePattern) { const parts = routePattern.split(':'); const routes = {}; let path = ''; for (const part of parts) { path += (path === '' ? '' : ':') + part; routes[path] = viewComponent; log.info(`added route '${path}'`); } m.route(document.body, '/', routes); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N1cHBvcnQvUm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWtCQSxPQUFPLENBQUMsTUFBaUIsU0FBUyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBVyxRQUFRLENBQUM7QUFBRSxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQVlsRSxNQUFNLE9BQU8sTUFBTTtJQVNmLFlBQVksYUFBMEIsRUFBWSxZQUFtQixFQUFZLFFBQVU7UUFBekMsaUJBQVksR0FBWixZQUFZLENBQU87UUFBWSxhQUFRLEdBQVIsUUFBUSxDQUFFO1FBUnBGLGNBQVMsR0FBTSxFQUFFLENBQUM7UUFTckIsSUFBSSxDQUFDLFFBQVEsQ0FBSSxFQUFFLENBQUMsQ0FBQztRQUNyQixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBTU0sUUFBUSxDQUFDLEtBQU87UUFDbkIsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0sTUFBTTtRQUNULENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFPTSxRQUFRLENBQUMsS0FBTztRQUNuQixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQyxHQUFHLENBQWUsRUFBRSxFQUFFO1lBQzNELElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFHLFNBQVMsRUFBOEI7Z0JBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7YUFBRTtZQUNoRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQztRQUN0RSxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRU0sUUFBUTtRQUNYLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRU8sS0FBSyxDQUFDLGFBQTBCLEVBQUUsWUFBbUI7UUFDekQsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2QsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7WUFDdEIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFHLEVBQUUsQ0FBQSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDckMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQztZQUM3QixHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLEdBQUcsQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUN2QyxDQUFDO0NBQ0oifQ==