hswidget
Version:
Helpful Scripts UI widgets
43 lines • 3.52 kB
JavaScript
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==