UNPKG

46.6 kBPlain TextView Raw
1{"code":"function defineName$__(cls,name){\n\tObject.defineProperty(cls,\"name\",{value:name,configurable:true});\n};;\nfunction extend$__(target,ext){\n\t// @ts-ignore\n\tconst descriptors = Object.getOwnPropertyDescriptors(ext);\n\tdelete descriptors.constructor;\n\tif(target.extend__ instanceof Function){\n\t\ttarget.extend__(descriptors,ext);\n\t} else {\n\t\t// @ts-ignore\n\t\tObject.defineProperties(target,descriptors);\n\t}\n\treturn target;\n};;\nfunction inheritClass$__(cls){\n\tObject.getPrototypeOf(cls.prototype).constructor?.inherited?.(cls);\n};\nconst $__initor__$ = Symbol.for('#__initor__'), $__inited__$ = Symbol.for('#__inited__'), $__hooks__$ = Symbol.for('#__hooks__'), $enter$ = Symbol.for('#enter'), $resolved$ = Symbol.for('#resolved'), $leave$ = Symbol.for('#leave'), $afterVisitRouted$ = Symbol.for('#afterVisitRouted'), $afterVisitRouteTo$ = Symbol.for('#afterVisitRouteTo'), $router$ = Symbol.for('#router'), $doc$ = Symbol.for('#doc'), $version$ = Symbol.for('#version'), $routes$ = Symbol.for('#routes'), $origin$ = Symbol.for('#origin'), $request$ = Symbol.for('#request'), $hash$ = Symbol.for('#hash'), $routeTo$ = Symbol.for('#routeTo'), $path$ = Symbol.for('#path'), $match$ = Symbol.for('#match'), $options$ = Symbol.for('#options'), $cache$ = Symbol.for('#cache'), $unmatched$ = Symbol.for('#unmatched'), $active$ = Symbol.for('#active'), $resolvedPath$ = Symbol.for('#resolvedPath'), $dataKey$ = Symbol.for('#dataKey'), $activeKey$ = Symbol.for('#activeKey'), $urlKey$ = Symbol.for('#urlKey'), $dataMap$ = Symbol.for('#dataMap'), $href$ = Symbol.for('#href'), $route$ = Symbol.for('#route'), $context$ = Symbol.for('#context'), $afterVisit$ = Symbol.for('#afterVisit'), $routeHandler$ = Symbol.for('#routeHandler'), $parentNode$ = Symbol.for('#parentNode'), $visitContext$ = Symbol.for('#visitContext'), $$visitContext$ = Symbol.for('##visitContext'), $attachToParent$ = Symbol.for('#attachToParent'), $detachFromParent$ = Symbol.for('#detachFromParent');\nvar $1 = Symbol();\n\n/*body*/\nlet routerInstance = null;\n\nimport {EventEmitter} from '../../../vendor/events';\nimport {Node,Element,Document} from '../dom/core';\nimport {Location} from './location';\nimport {History} from './history';\nimport {Request} from './request';\nimport {RootRoute} from './route';\nimport {commit,scheduler} from '../scheduler';\nimport {proxy} from '../utils';\nimport {Queue} from '../queue';\n\nclass ΩDocument {\n\t\n\tget router(){\n\t\t\n\t\treturn this[$router$] ||= new Router(this);\n\t}\n\tstatic {\n\t\tdefineName$__(this,'Document');}\n};\nextend$__(Document.prototype,ΩDocument.prototype);\n;\n\nexport function use_router(){\n\t\n\tglobalThis.imba.use_router = true;\n\treturn true;\n};\n\nexport const router = proxy(function() {\n\t\n\treturn globalThis.document.router;\n});\n\nexport class Router extends EventEmitter {\n\t\n\t\n\t// support redirects\n\tconstructor(doc,o = {}){\n\t\t\n\t\tsuper();\n\t\tthis[$doc$] = doc;\n\t\tthis[$version$] = 0;\n\t\tthis[$routes$] = {};\n\t\t\n\t\tthis.aliases = {};\n\t\tthis.redirects = {};\n\t\tthis.rules = {};\n\t\tthis.matchers = {};\n\t\tthis.options = o;\n\t\tthis.busy = [];\n\t\tthis.queue = new Queue;\n\t\tthis.root = new RootRoute(this);\n\t\tthis.location = new Location(o.url || doc.location.href,this);\n\t\tthis.history = new History(this);\n\t\tthis.mode = o.mode || 'history';\n\t\t\n\t\tif (false) {};\n\t\t\n\t\tthis.setup();\n\t\tthis;\n\t\tthis[$__initor__$]===$1 && (this[$__hooks__$]&&this[$__hooks__$].inited(this),this[$__inited__$] && this[$__inited__$]());\n\t}\n\t\n\tget origin(){\n\t\t\n\t\treturn this[$origin$] ||= this[$doc$].location.origin;\n\t}\n\t\n\tget query(){\n\t\t\n\t\treturn this.location.query;\n\t}\n\t\n\tinit(){\n\t\t\n\t\tthis.refresh({mode: 'replace'});\n\t\treturn this;\n\t}\n\t\n\talias(from,to){\n\t\t\n\t\tthis.aliases[from] = to;\n\t\tthis.location.reparse();\n\t\treturn this;\n\t}\n\t\n\ttouch(){\n\t\t\n\t\treturn this[$version$]++;\n\t}\n\t\n\toption(key,value){\n\t\t\n\t\tif (value == undefined) {\n\t\t\t\n\t\t\treturn this.options[key];\n\t\t} else {\n\t\t\t\n\t\t\tthis.options[key] = value;\n\t\t};\n\t\treturn this;\n\t}\n\t\n\tget realpath(){\n\t\t\n\t\tif (false) {} else {\n\t\t\t\n\t\t\treturn this.location.path;\n\t\t};\n\t}\n\t\n\tget state(){\n\t\t\n\t\treturn this.history.state;\n\t}\n\t\n\tget states(){\n\t\t\n\t\treturn this.history.currentStates;\n\t}\n\t\n\tset state(value){\n\t\t\n\t\tif (false) {};\n\t\treturn;\n\t}\n\t\n\tget ctx(){\n\t\t\n\t\treturn this[$request$];\n\t}\n\t\n\tpushState(state,title,url){\n\t\t\n\t\treturn this.history.pushState(state,title || null,String(url));\n\t}\n\t\n\treplaceState(state,title,url){\n\t\t\n\t\treturn this.history.replaceState(state,title || null,String(url));\n\t}\n\t\n\t// called whenever the location might have changed for some reason\n\trefresh(params = {}){\n\t\t\n\t\tif (this.refreshing) { return };\n\t\tthis.refreshing = true;\n\t\t\n\t\tlet original = this.location;\n\t\tlet loc = Location.parse(params.location || this.realpath,this);\n\t\tlet mode = params.mode;\n\t\tlet prev = this[$request$];\n\t\t\n\t\t// we need to compare with the previously stored location\n\t\t// also see if state is different?\n\t\tif (!(loc.equals(original)) || !(prev) || params.state) {\n\t\t\t\n\t\t\tlet req = new Request(this,loc,original,params);\n\t\t\tthis[$request$] = req;\n\t\t\t// include the state as well?\n\t\t\tthis.emit('beforechange',req);\n\t\t\t\n\t\t\tif (req.aborted) {\n\t\t\t\t\n\t\t\t\tlet res = !(req.forceAbort) && globalThis.window.confirm(\"Are you sure you want to leave? You might have unsaved changes\");\n\t\t\t\t\n\t\t\t\tif (res) {\n\t\t\t\t\t\n\t\t\t\t\treq.aborted = false;\n\t\t\t\t} else if (mode == 'pop') {\n\t\t\t\t\t\n\t\t\t\t\tthis.pushState(this.state,null,String(original));\n\t\t\t\t} else if (mode == 'replace') { // mode != 'push' # !params:push\n\t\t\t\t\t\n\t\t\t\t\tthis.replaceState(this.state,null,String(original));\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t// if we're not popping - should happen before we are changing\n\t\t\t};\n\t\t\t\n\t\t\tif (!(req.aborted)) {\n\t\t\t\t\n\t\t\t\tthis.location = req.location;\n\t\t\t\t\n\t\t\t\tif (mode == 'push') {\n\t\t\t\t\t\n\t\t\t\t\tthis.pushState(req.state,null,String(this.location));\n\t\t\t\t} else if (mode == 'replace') {\n\t\t\t\t\t\n\t\t\t\t\tthis.replaceState(req.state,null,String(this.location));\n\t\t\t\t} else if (mode == 'pop') {\n\t\t\t\t\t\n\t\t\t\t\tthis.history.index = params.index;\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tthis.emit('change',req);\n\t\t\t\tthis.touch();\n\t\t\t\tcommit();\n\t\t\t};\n\t\t};\n\t\t\n\t\tif (false) {};\n\t\t\n\t\tthis.refreshing = false;\n\t\treturn this;\n\t}\n\t\n\tonpopstate(e){\n\t\t\n\t\tlet from = this.history.index;\n\t\tlet to = from;\n\t\t\n\t\tlet params = {\n\t\t\tpop: true,\n\t\t\tindex: 0,\n\t\t\tfrom: from,\n\t\t\tmode: 'pop'\n\t\t};\n\t\ttry {\n\t\t\t\n\t\t\tif (typeof e.state == 'string') {\n\t\t\t\t\n\t\t\t\tlet [id,step] = e.state.split('|');\n\t\t\t\tto = params.index = parseInt(step);\n\t\t\t\t\n\t\t\t\tif (to < from) {\n\t\t\t\t\t\n\t\t\t\t\tparams.revert = this.history.slice(to + 1,from + 1).reverse();\n\t\t\t\t} else if (to > from) {\n\t\t\t\t\t\n\t\t\t\t\tparams.apply = this.history.slice(from + 1,to + 1);\n\t\t\t\t};\n\t\t\t};\n\t\t} catch (e) { };\n\t\t\n\t\tthis.refresh(params);\n\t\treturn this;\n\t}\n\t\n\tonbeforeunload(e){\n\t\t\n\t\tlet req = new Request(this,null,this.location,{mode: 'unload'});\n\t\tthis.emit('beforechange',req);\n\t\tif (req.aborted) { return true };\n\t\treturn;\n\t}\n\t\n\tonhashchange(e){\n\t\t\n\t\tthis.emit('hashchange',this[$hash$] = this[$doc$].location.hash);\n\t\treturn commit();\n\t}\n\t\n\tsetup(){\n\t\t\n\t\tif (false) {};\n\t\treturn this;\n\t}\n\t\n\tonclick(e){\n\t\t\n\t\tif (e.metaKey || e.altKey) { return };\n\t\t\n\t\tlet a = null;\n\t\tlet r = null;\n\t\tlet t = e.target;\n\t\t\n\t\twhile (t && (!(a) || !(r))){\n\t\t\t\n\t\t\tif (!(a) && t.nodeName == 'A') { a = t };\n\t\t\tif (!(r) && t[$routeTo$]) { r = t };\n\t\t\tt = t.parentNode;\n\t\t};\n\t\t\n\t\tif (a && r != a && (!(r) || r.contains(a))) {\n\t\t\t\n\t\t\t\n\t\t\tlet href = a.getAttribute('href');\n\t\t\tif (href && !(href.match(/\\:\\/\\//)) && (!(a.getAttribute('target')) || a.getAttribute('target') == '_self') && !(a.classList.contains('external'))) {\n\t\t\t\t\n\t\t\t\ta.addEventListener('click',this.onclicklink.bind(this),{once: true});\n\t\t\t};\n\t\t};\n\t\treturn true;\n\t}\n\t\n\tonclicklink(e){\n\t\t\n\t\tlet a = e.currentTarget || e.target;\n\t\t\n\t\tif (a[$routeTo$]) {\n\t\t\t\n\t\t\ta[$routeTo$].resolve();\n\t\t};\n\t\t\n\t\tlet href = a.getAttribute('href');\n\t\tlet url = new URL(a.href);\n\t\tlet target = url.href.slice(url.origin.length);\n\t\tlet currpath = this.realpath.split('#')[0];\n\t\tlet newpath = target.split('#')[0];\n\t\t\n\t\t// console.log 'clicklink',target,url,currpath,newpath\n\t\t// checking if we are only changing the hash here\n\t\tif (currpath == newpath) {\n\t\t\t\n\t\t\tglobalThis.document.location.hash = url.hash;\n\t\t} else if (a[$routeTo$]) {\n\t\t\t\n\t\t\ta[$routeTo$].go();\n\t\t} else {\n\t\t\t\n\t\t\tthis.go(target);\n\t\t};\n\t\t\n\t\te.stopPropagation();\n\t\treturn e.preventDefault();\n\t}\n\t\n\tget url(){\n\t\t\n\t\treturn this.location.url;\n\t}\n\t\n\tget path(){\n\t\t\n\t\tlet path = this.location.path;\n\t\treturn this.aliases[path] || path;\n\t}\n\t\n\tget pathname(){\n\t\t\n\t\treturn this.location.pathname;\n\t}\n\t\n\tserializeParams(params){\n\t\tvar $2;\n\t\t\n\t\tif (params instanceof Object) {\n\t\t\t\n\t\t\t$2 = [];\n\t\t\tfor (let $3 = 0, $4 = Object.keys(params), $5 = $4.length, key, val; $3 < $5; $3++){\n\t\t\t\tkey = $4[$3];val = params[key];\n\t\t\t\t$2.push([key,globalThis.encodeURI(val)].join(\"=\"));\n\t\t\t};\n\t\t\tlet value = $2;\n\t\t\treturn value.join(\"&\");\n\t\t};\n\t\treturn params || '';\n\t}\n\t\n\tget hash(){\n\t\t\n\t\treturn this[$hash$];\n\t}\n\t\n\tset hash(value){\n\t\t\n\t\tif (false) {};\n\t}\n\t\n\tmatch(pattern){\n\t\t\n\t\treturn this.route(pattern).match(this.path);\n\t}\n\t\n\troute(pattern){\n\t\t\n\t\treturn this.root.route(pattern);\n\t}\n\t\n\tgo(url,state = null){\n\t\t\n\t\tif (typeof url == 'object' && state === null) {\n\t\t\t\n\t\t\tstate = url;\n\t\t\turl = this.path;\n\t\t};\n\t\t\n\t\tif (typeof url == 'number') {\n\t\t\t\n\t\t\t// now go\n\t\t\tglobalThis.history.go(url);\n\t\t\treturn this;\n\t\t};\n\t\t\n\t\tlet loc = this.location.clone().update(url);\n\t\t\n\t\tlet action = this.history.buildState(state,loc.path,true);\n\t\tthis.refresh({push: true,mode: 'push',location: loc,state: action,apply: [action]});\n\t\treturn this;\n\t}\n\t\n\treplace(url,state = null){\n\t\t\n\t\tif (typeof url == 'object' && state === null) {\n\t\t\t\n\t\t\tstate = url;\n\t\t\turl = this.path;\n\t\t};\n\t\t\n\t\tlet loc = this.location.clone().update(url);\n\t\tlet action = this.history.buildState(state,loc.path,false);\n\t\treturn this.refresh({replace: true,mode: 'replace',location: loc,state: action,apply: [action]});\n\t}\n\tstatic {\n\t\tthis.prototype[$__initor__$] = $1;defineName$__(this,'Router');inheritClass$__(this);}\n};\n\nexport class ElementRoute {\n\t\n\tconstructor(node,path,parent,options = {}){\n\t\t\n\t\tthis.parent = parent;\n\t\tthis.node = node;\n\t\tthis[$path$] = path;\n\t\tthis[$match$] = null;\n\t\tthis[$options$] = options;\n\t\tthis[$cache$] = {};\n\t\tthis[$unmatched$] = {};\n\t\tthis[$active$] = null;\n\t\tthis[$resolvedPath$] = null;\n\t\tthis[$dataKey$] = Symbol();\n\t\tthis[$activeKey$] = Symbol();\n\t\tthis[$urlKey$] = Symbol();\n\t}\n\t\n\tget router(){\n\t\t\n\t\treturn this.node.ownerDocument.router;\n\t}\n\t\n\tget route(){\n\t\t\n\t\tlet pr = this.parent ? this.parent.route : this.router;\n\t\treturn pr.route(this[$path$]);\n\t}\n\t\n\tget match(){\n\t\t\n\t\treturn this[$match$];\n\t}\n\t\n\tget params(){\n\t\t\n\t\treturn this[$match$] || this[$unmatched$];\n\t}\n\t\n\tget state(){\n\t\t\n\t\tlet map = this[$dataMap$] ||= new Map;\n\t\tlet pars = this.params;\n\t\tlet data = this[$dataMap$].get(pars);\n\t\tdata || this[$dataMap$].set(pars,data = {});\n\t\treturn data;\n\t}\n\t\n\tset state(value){\n\t\t\n\t\t(this[$dataMap$] ||= new Map).set(this.params,value);\n\t}\n\t\n\tset path(value){\n\t\t\n\t\tif ((this[$path$] != value) ? ((this[$path$] = value,true)) : false) {\n\t\t\t\n\t\t\t// TODO only update router if we know that we have subroutes\n\t\t\tthis.router.touch();\n\t\t};\n\t}\n\t\n\tget path(){\n\t\t\n\t\treturn this[$path$];\n\t}\n\t\n\tget isActive(){\n\t\t\n\t\treturn !(!this[$active$]);\n\t}\n\t\n\tget activeΦ(){\n\t\t\n\t\treturn !(!this[$active$]);\n\t}\n\t\n\tresolve(){\n\t\t\n\t\t// early return if routing clearly has not changed since\n\t\t// previous resolve\n\t\tlet v = this.router[$version$];\n\t\tif (!((this[$version$] != v) ? ((this[$version$] = v,true)) : false)) { return };\n\t\t\n\t\tlet r = this.route;\n\t\tlet o = this[$options$];\n\t\tlet url = this.router.path;\n\t\tlet match = r.match(url);\n\t\tlet shown = this[$active$];\n\t\tlet last = this[$match$];\n\t\tlet changed = match != last;\n\t\tlet prevUrl = match && match[this[$urlKey$]];\n\t\t\n\t\tif (match) {\n\t\t\t\n\t\t\tthis[$active$] = true;\n\t\t\tthis[$match$] = match;\n\t\t\tmatch[this[$urlKey$]] = url;\n\t\t};\n\t\t\n\t\tif (match) {\n\t\t\t\n\t\t\tif (changed || (prevUrl != url) || !(shown)) {\n\t\t\t\t\n\t\t\t\tthis[$resolved$](match,last,prevUrl);\n\t\t\t};\n\t\t};\n\t\t\n\t\tif (!(shown) && match) {\n\t\t\t\n\t\t\tthis[$enter$]();\n\t\t};\n\t\t\n\t\tif (!(match) && (shown || shown === null)) {\n\t\t\t\n\t\t\tthis[$active$] = false;\n\t\t\tthis[$leave$]();\n\t\t};\n\t\t\n\t\treturn this[$match$];\n\t}\n\t\n\t[$enter$](){\n\t\t\n\t\tthis.node.flags.remove('not-routed');\n\t\tthis.node.flags.add('routed');\n\t\treturn this.node?.routeDidEnter?.(this);\n\t}\n\t\n\t[$resolved$](match,prev,prevUrl = ''){\n\t\t\n\t\treturn this.node?.routeDidResolve?.(this,match,prev,prevUrl);\n\t}\n\t\n\t[$leave$](){\n\t\t\n\t\t// replace flag?\n\t\tthis.node.flags.add('not-routed');\n\t\tthis.node.flags.remove('routed');\n\t\treturn this.node?.routeDidLeave?.(this);\n\t}\n\tstatic {\n\t\tdefineName$__(this,'ElementRoute');}\n};\n\nexport class ElementRouteTo extends ElementRoute {\n\t\n\t\n\t[$enter$](){\n\t\t\n\t\treturn this;\n\t}\n\t\n\t[$resolved$](){\n\t\t\n\t\treturn this;\n\t}\n\t\n\t[$leave$](){\n\t\t\n\t\treturn this;\n\t}\n\t\n\tresolve(){\n\t\t\n\t\tlet v = this.router[$version$];\n\t\tif (!((this[$version$] != v) ? ((this[$version$] = v,true)) : false)) { return };\n\t\t\n\t\tlet o = this[$options$];\n\t\tlet r = this.route;\n\t\tlet url = this.router.path;\n\t\tlet href = this.route.resolve(url);\n\t\tlet match = this.route.match(url);\n\t\t\n\t\tif (match) {\n\t\t\t\n\t\t\tthis[$match$] = match;\n\t\t\tthis[$match$][this[$urlKey$]] = url;\n\t\t};\n\t\t\n\t\tif (o.sticky && this[$match$]) {\n\t\t\t\n\t\t\thref = this[$match$][this[$urlKey$]];\n\t\t};\n\t\t\n\t\tif ((this[$href$] != href) ? ((this[$href$] = href,true)) : false) {\n\t\t\t\n\t\t\tif (this.node.nodeName == 'A') { this.node.setAttribute('href',href) };\n\t\t};\n\t\t\n\t\tthis.node.flags.toggle('active',!(!(match)));\n\t\treturn;\n\t}\n\t\n\tget url(){\n\t\t\n\t\tthis.resolve();\n\t\treturn globalThis.location.origin + this[$href$];\n\t}\n\t\n\tgo(){\n\t\t\n\t\tthis.resolve();\n\t\t\n\t\tif (this[$options$] && this[$options$].replace) {\n\t\t\t\n\t\t\treturn this.router.replace(this[$href$]);\n\t\t} else {\n\t\t\t\n\t\t\treturn this.router.go(this[$href$]);\n\t\t};\n\t}\n\tstatic {\n\t\tdefineName$__(this,'ElementRouteTo');inheritClass$__(this);}\n};\n\nclass ΩNode {\n\t\n\tget router(){\n\t\t\n\t\treturn this.ownerDocument.router;\n\t}\n\tstatic {\n\t\tdefineName$__(this,'Node');}\n};\nextend$__(Node.prototype,ΩNode.prototype);\n;\n\nclass ΩElement {\n\t\n\tset route(value){\n\t\t\n\t\tif (this[$route$]) {\n\t\t\t\n\t\t\tthis[$route$].path = value;\n\t\t\treturn;\n\t\t};\n\t\t\n\t\tlet par = (value[0] != '/') ? this[$context$].route : null;\n\t\tthis[$route$] = new ElementRoute(this,value,par,this.route__);\n\t\t\n\t\t// TODO Use hook / event api instead\n\t\tthis[$afterVisit$] = this[$afterVisitRouted$];\n\t}\n\t\n\tget route(){\n\t\t\n\t\treturn this[$route$];\n\t}\n\t\n\tset routeΞto(value){\n\t\tvar self = this;\n\t\t\n\t\tif (this[$routeTo$]) {\n\t\t\t\n\t\t\tthis[$routeTo$].path = value;\n\t\t\treturn;\n\t\t};\n\t\t\n\t\tlet par = (value[0] != '/') ? this[$context$].route : null;\n\t\tthis[$route$] = this[$routeTo$] = new ElementRouteTo(this,value,par,this.routeTo__);\n\t\tthis[$afterVisit$] = this[$afterVisitRouteTo$];\n\t\t\n\t\t// really? shouldnt this be handled by the main router click listener instead?\n\t\tthis.onclick = function(e) {\n\t\t\t\n\t\t\tif (!(e.altKey) && !(e.metaKey) && !(e[$routeHandler$])) {\n\t\t\t\t\n\t\t\t\te.preventDefault();\n\t\t\t\te[$routeHandler$] = self[$routeTo$];\n\t\t\t\treturn self[$routeTo$].go();\n\t\t\t};\n\t\t};\n\t}\n\t\n\t[$afterVisitRouted$](){\n\t\t\n\t\tif (this[$route$]) {\n\t\t\t\n\t\t\tlet up = this[$parentNode$];\n\t\t\tlet ctx = up && up[$visitContext$];\n\t\t\tif (ctx && ctx.matchedRoute && ctx.matchedRoute != this[$route$]) {\n\t\t\t\t\n\t\t\t\tif ((this[$route$][$active$] != false) ? ((this[$route$][$active$] = false,true)) : false) {\n\t\t\t\t\t\n\t\t\t\t\tthis[$route$][$leave$]();\n\t\t\t\t\tthis[$route$][$version$] = -1;\n\t\t\t\t};\n\t\t\t\treturn;\n\t\t\t};\n\t\t\t\n\t\t\tthis[$route$].resolve();\n\t\t\t\n\t\t\tif (this[$route$].activeΦ) {\n\t\t\t\t\n\t\t\t\tctx.matchedRoute = this[$route$];\n\t\t\t} else {\n\t\t\t\t\n\t\t\t\treturn;\n\t\t\t};\n\t\t};\n\t\t\n\t\tif (this.visit) { this.visit() };\n\t\tif (this[$$visitContext$]) { return this[$$visitContext$] = null };\n\t}\n\t\n\t[$afterVisitRouteTo$](){\n\t\t\n\t\tif (this[$routeTo$]) {\n\t\t\t\n\t\t\tthis[$routeTo$].resolve();\n\t\t};\n\t\t\n\t\tif (this.visit) { return this.visit() };\n\t}\n\t\n\trouteDidEnter(route){\n\t\t\n\t\treturn this[$attachToParent$]();\n\t}\n\t\n\trouteDidLeave(route){\n\t\t\n\t\treturn this[$detachFromParent$]();\n\t}\n\t\n\trouteDidResolve(route,match,prev){\n\t\tvar self = this;\n\t\t\n\t\tif ((this.routed instanceof Function) && (match != prev)) {\n\t\t\t\n\t\t\tthis.router.queue.add(async function() {\n\t\t\t\t\n\t\t\t\tself.suspend();\n\t\t\t\tlet res = await self.routed(match,route.state,prev);\n\t\t\t\treturn self.unsuspend();\n\t\t\t});\n\t\t};\n\t\treturn;\n\t}\n\tstatic {\n\t\tdefineName$__(this,'Element');}\n};\nextend$__(Element.prototype,ΩElement.prototype);\n;\n","map":{"version":3,"file":"index.js","sourceRoot":"","sources":["/Users/abdellah/workspace/scrimba/imba/packages/imba/src/imba/router/index.imba"],"sourcesContent":["let routerInstance = null\n\nimport {EventEmitter} from '../../../vendor/events'\nimport {Node,Element,Document} from '../dom/core'\nimport {Location} from './location'\nimport {History} from './history'\nimport {Request} from './request'\nimport {RootRoute} from './route'\nimport {commit,scheduler} from '../scheduler'\nimport {proxy} from '../utils'\nimport {Queue} from '../queue'\n\nextend class Document\n\tget router\n\t\t#router ||= new Router(self)\n\nexport def use_router\n\tglobal.imba.use_router = yes\n\tyes\n\nexport const router = proxy do\n\tglobal.document.router\n\nexport class Router < EventEmitter\n\n\t# support redirects\n\tdef constructor doc, o = {}\n\t\tsuper()\n\t\t#doc = doc\n\t\t#version = 0\n\t\t#routes = {}\n\n\t\taliases = {}\n\t\tredirects = {}\n\t\trules = {}\n\t\tmatchers = {}\n\t\toptions = o\n\t\tbusy = []\n\t\tqueue = new Queue\n\t\troot = new RootRoute(self)\n\t\tlocation = new Location(o.url or doc.location.href,self)\n\t\thistory = new History(self)\n\t\tmode = o.mode or 'history'\n\n\t\tif $web$\n\t\t\tqueue.on 'busy' do\n\t\t\t\tglobal.document.flags.incr('_routing_')\n\n\t\t\tqueue.on 'idle' do\n\t\t\t\tglobal.document.flags.decr('_routing_')\n\t\t\t\tcommit!\n\n\t\tself.setup!\n\t\tself\n\n\tget origin\n\t\t#origin ||= #doc.location.origin\n\n\tget query\n\t\tlocation.query\n\n\tdef init\n\t\trefresh(mode: 'replace')\n\t\tself\n\n\tdef alias from, to\n\t\taliases[from] = to\n\t\tlocation.reparse!\n\t\tself\n\n\tdef touch\n\t\t#version++\n\n\tdef option key, value\n\t\tif value == undefined\n\t\t\treturn options[key]\n\t\telse\n\t\t\toptions[key] = value\n\t\treturn self\n\n\tget realpath\n\t\tif $web$\n\t\t\tlet loc = #doc.location\n\t\t\treturn loc.href.slice(loc.origin.length)\n\t\telse\n\t\t\treturn location.path\n\n\tget state\n\t\thistory.state\n\n\tget states\n\t\thistory.currentStates\n\n\tset state value\n\t\tif $web$\n\t\t\tstate.data = value\n\t\t\tstate.save!\n\t\treturn\n\n\tget ctx\n\t\t#request\n\n\tdef pushState state, title, url\n\t\thistory.pushState(state,title or null,String(url))\n\n\tdef replaceState state, title, url\n\t\thistory.replaceState(state,title or null,String(url))\n\n\t# called whenever the location might have changed for some reason\n\tdef refresh params = {}\n\t\treturn if refreshing\n\t\trefreshing = yes\n\n\t\tlet original = location\n\t\tlet loc = Location.parse(params.location or realpath,self)\n\t\tlet mode = params.mode\n\t\tlet prev = #request\n\n\t\t# we need to compare with the previously stored location\n\t\t# also see if state is different?\n\t\tif !loc.equals(original) or !prev or params.state\n\t\t\tlet req = new Request(self,loc,original,params)\n\t\t\t#request = req\n\t\t\t# include the state as well?\n\t\t\tself.emit('beforechange',req)\n\n\t\t\tif req.aborted\n\t\t\t\tlet res = !req.forceAbort && global.window.confirm(\"Are you sure you want to leave? You might have unsaved changes\")\n\n\t\t\t\tif res\n\t\t\t\t\treq.aborted = no\n\t\t\t\t# if we don't confirm, push the previous state again\n\t\t\t\telif mode == 'pop'\n\t\t\t\t\tself.pushState(self.state,null,String(original))\n\t\t\t\telif mode == 'replace' # mode != 'push' # !params:push\n\t\t\t\t\tself.replaceState(self.state,null,String(original))\n\n\t\t\t\t# if we're not popping - should happen before we are changing\n\n\t\t\tunless req.aborted\n\t\t\t\tlocation = req.location\n\n\t\t\t\tif mode == 'push'\n\t\t\t\t\tself.pushState(req.state,null,String(location))\n\t\t\t\telif mode == 'replace'\n\t\t\t\t\tself.replaceState(req.state,null,String(location))\n\t\t\t\telif mode == 'pop'\n\t\t\t\t\tself.history.index = params.index\n\n\t\t\t\tself.emit('change',req)\n\t\t\t\ttouch!\n\t\t\t\tcommit!\n\n\t\tif $web$\n\t\t\tscheduler.add do\n\t\t\t\tlet hash = #doc.location.hash\n\t\t\t\tif hash != #hash\n\t\t\t\t\tself.emit('hashchange',#hash = hash)\n\n\t\trefreshing = no\n\t\tself\n\n\tdef onpopstate e\n\t\tlet from = history.index\n\t\tlet to = from\n\n\t\tlet params = {\n\t\t\tpop: yes\n\t\t\tindex: 0\n\t\t\tfrom: from\n\t\t\tmode: 'pop'\n\t\t}\n\t\ttry\n\t\t\tif typeof e.state == 'string'\n\t\t\t\tlet [id,step] = e.state.split('|')\n\t\t\t\tto = params.index = parseInt(step)\n\n\t\t\t\tif to < from\n\t\t\t\t\tparams.revert = history.slice(to + 1,from + 1).reverse!\n\t\t\t\telif to > from\n\t\t\t\t\tparams.apply = history.slice(from + 1,to + 1)\n\n\t\tself.refresh(params)\n\t\tself\n\n\tdef onbeforeunload e\n\t\tlet req = new Request(self,null,location,{mode: 'unload'})\n\t\tself.emit('beforechange',req)\n\t\treturn true if req.aborted\n\t\treturn\n\n\tdef onhashchange e\n\t\temit('hashchange',#hash = #doc.location.hash)\n\t\tcommit!\n\n\tdef setup\n\t\tif $web$\n\t\t\tonclick = onclick.bind(self)\n\t\t\tonhashchange = onhashchange.bind(self)\n\t\t\tlet win = global.window\n\t\t\t#hash = #doc.location.hash\n\t\t\tlocation = Location.parse(realpath,self)\n\n\t\t\twin.onpopstate = self.onpopstate.bind(self) # do |e| onpopstate(e)\n\t\t\twin.onbeforeunload = self.onbeforeunload.bind(self)\n\n\t\t\twin.addEventListener('hashchange',onhashchange)\n\t\t\twin.addEventListener('click',onclick,capture: yes)\n\t\t\twin.document.documentElement.emit('routerinit',self)\n\t\t\trefresh\n\t\tself\n\n\tdef onclick e\n\t\treturn if e.metaKey or e.altKey\n\n\t\tlet a = null\n\t\tlet r = null\n\t\tlet t = e.target\n\n\t\twhile t and (!a or !r)\n\t\t\ta = t if !a and t.nodeName == 'A'\n\t\t\tr = t if !r and t.#routeTo\n\t\t\tt = t.parentNode\n\n\t\tif a and r != a and (!r or r.contains(a))\n\n\t\t\tlet href = a.getAttribute('href')\n\t\t\tif href && !href.match(/\\:\\/\\//) and (!a.getAttribute('target') or a.getAttribute('target') == '_self') and !a.classList.contains('external')\n\t\t\t\ta.addEventListener('click',onclicklink.bind(self),once: true)\n\t\tyes\n\n\tdef onclicklink e\n\t\tlet a = e.currentTarget or e.target\n\n\t\tif a.#routeTo\n\t\t\ta.#routeTo.resolve!\n\n\t\tlet href = a.getAttribute('href')\n\t\tlet url = new URL(a.href)\n\t\tlet target = url.href.slice(url.origin.length)\n\t\tlet currpath = realpath.split('#')[0]\n\t\tlet newpath = target.split('#')[0]\n\n\t\t# console.log 'clicklink',target,url,currpath,newpath\n\t\t# checking if we are only changing the hash here\n\t\tif currpath == newpath\n\t\t\tglobal.document.location.hash = url.hash\n\t\telif a.#routeTo\n\t\t\ta.#routeTo.go!\n\t\telse\n\t\t\tself.go(target)\n\n\t\te.stopPropagation()\n\t\te.preventDefault()\n\n\tget url\n\t\treturn location.url\n\n\tget path\n\t\tlet path = location.path\n\t\treturn aliases[path] or path\n\n\tget pathname\n\t\tlocation.pathname\n\n\tdef serializeParams params\n\t\tif params isa Object\n\t\t\tlet value = for own key,val of params\n\t\t\t\t\t[key,global.encodeURI(val)].join(\"=\")\n\t\t\treturn value.join(\"&\")\n\t\treturn params or ''\n\n\tget hash\n\t\t#hash\n\n\tset hash value\n\t\tif $web$\n\t\t\thistory.replaceState(state,null,'#' + self.serializeParams(value))\n\n\tdef match pattern\n\t\troute(pattern).match(path)\n\n\tdef route pattern\n\t\troot.route(pattern)\n\n\tdef go url, state = null\n\t\tif typeof url == 'object' and state === null\n\t\t\tstate = url\n\t\t\turl = path\n\n\t\tif typeof url == 'number'\n\t\t\t# now go\n\t\t\tglobal.history.go(url)\n\t\t\treturn self\n\n\t\tlet loc = location.clone().update(url)\n\n\t\tlet action = history.buildState(state,loc.path,yes)\n\t\tself.refresh(push: yes, mode: 'push', location: loc, state: action, apply: [action])\n\t\tself\n\n\tdef replace url, state = null\n\t\tif typeof url == 'object' and state === null\n\t\t\tstate = url\n\t\t\turl = path\n\n\t\tlet loc = location.clone().update(url)\n\t\tlet action = history.buildState(state,loc.path,no)\n\t\tself.refresh(replace: yes, mode: 'replace', location: loc, state: action, apply: [action])\n\nexport class ElementRoute\n\tdef constructor node, path, parent, options = {}\n\t\tself.parent = parent\n\t\tnode = node\n\t\t#path = path\n\t\t#match = null\n\t\t#options = options\n\t\t#cache = {}\n\t\t#unmatched = {}\n\t\t#active = null\n\t\t#resolvedPath = null\n\t\t#dataKey = Symbol!\n\t\t#activeKey = Symbol!\n\t\t#urlKey = Symbol!\n\n\tget router\n\t\tnode.ownerDocument.router\n\n\tget route\n\t\tlet pr = parent ? parent.route : self.router\n\t\tpr.route(#path)\n\n\tget match\n\t\t#match\n\n\tget params\n\t\t(#match or #unmatched)\n\n\tget state\n\t\tlet map = #dataMap ||= new Map\n\t\tlet pars = params\n\t\tlet data = #dataMap.get(pars)\n\t\tdata || #dataMap.set(pars,data = {})\n\t\treturn data\n\n\tset state value\n\t\t(#dataMap ||= new Map).set(params,value)\n\n\tset path value\n\t\tif #path =? value\n\t\t\t# TODO only update router if we know that we have subroutes\n\t\t\tself.router.touch!\n\n\tget path\n\t\t#path\n\n\tget isActive\n\t\t!!#active\n\n\tget active?\n\t\t!!#active\n\n\tdef resolve\n\t\t# early return if routing clearly has not changed since\n\t\t# previous resolve\n\t\tlet v = self.router.#version\n\t\treturn unless #version =? v\n\n\t\tlet r = route\n\t\tlet o = #options\n\t\tlet url = self.router.path\n\t\tlet match = r.match(url)\n\t\tlet shown = #active\n\t\tlet last = #match\n\t\tlet changed = match != last\n\t\tlet prevUrl = match and match[#urlKey]\n\n\t\tif match\n\t\t\t#active = true\n\t\t\t#match = match\n\t\t\tmatch[#urlKey] = url\n\n\t\tif match\n\t\t\tif changed or (prevUrl != url) or !shown\n\t\t\t\t#resolved(match,last,prevUrl)\n\n\t\tif !shown and match\n\t\t\t#enter!\n\n\t\tif !match and (shown or shown === null)\n\t\t\t#active = false\n\t\t\t#leave!\n\n\t\treturn #match\n\n\tdef #enter\n\t\tnode.flags.remove('not-routed')\n\t\tnode.flags.add('routed')\n\t\tnode..routeDidEnter(self)\n\n\tdef #resolved match,prev,prevUrl = ''\n\t\tnode..routeDidResolve(self,match,prev,prevUrl)\n\n\tdef #leave\n\t\t# replace flag?\n\t\tnode.flags.add('not-routed')\n\t\tnode.flags.remove('routed')\n\t\tnode..routeDidLeave(self)\n\nexport class ElementRouteTo < ElementRoute\n\n\tdef #enter\n\t\tself\n\n\tdef #resolved\n\t\tself\n\n\tdef #leave\n\t\tself\n\n\tdef resolve\n\t\tlet v = self.router.#version\n\t\treturn unless #version =? v\n\n\t\tlet o = #options\n\t\tlet r = route\n\t\tlet url = self.router.path\n\t\tlet href = route.resolve(url)\n\t\tlet match = route.match(url)\n\n\t\tif match\n\t\t\t#match = match\n\t\t\t#match[#urlKey] = url\n\n\t\tif o.sticky and #match\n\t\t\thref = #match[#urlKey]\n\n\t\tif #href =? href\n\t\t\tnode.setAttribute('href',href) if node.nodeName == 'A'\n\n\t\tnode.flags.toggle('active',!!match)\n\t\treturn\n\n\tget url\n\t\tresolve!\n\t\tglobal.location.origin + #href\n\n\tdef go\n\t\tresolve!\n\n\t\tif #options and #options.replace\n\t\t\tself.router.replace(#href)\n\t\telse\n\t\t\tself.router.go(#href)\n\nextend class Node\n\tget router\n\t\townerDocument.router\n\nextend class Element\n\tset route value\n\t\tif #route\n\t\t\t#route.path = value\n\t\t\treturn\n\n\t\tlet par = value[0] != '/' ? #context.route : null\n\t\t#route = new ElementRoute(self,value,par,route__)\n\n\t\t# TODO Use hook / event api instead\n\t\tself.#afterVisit = self.#afterVisitRouted\n\n\tget route\n\t\t#route\n\n\tset route-to value\n\t\tif #routeTo\n\t\t\t#routeTo.path = value\n\t\t\treturn\n\n\t\tlet par = value[0] != '/' ? #context.route : null\n\t\t#route = #routeTo = new ElementRouteTo(self,value,par,routeTo__)\n\t\tself.#afterVisit = self.#afterVisitRouteTo\n\n\t\t# really? shouldnt this be handled by the main router click listener instead?\n\t\tself.onclick = do(e)\n\t\t\tif !e.altKey and !e.metaKey and !e.#routeHandler\n\t\t\t\te.preventDefault!\n\t\t\t\te.#routeHandler = #routeTo\n\t\t\t\t#routeTo.go!\n\n\tdef #afterVisitRouted\n\t\tif #route\n\t\t\tlet up = #parentNode\n\t\t\tlet ctx = up and up.#visitContext\n\t\t\tif ctx and ctx.matchedRoute and ctx.matchedRoute != #route\n\t\t\t\tif #route.#active =? no\n\t\t\t\t\t#route.#leave!\n\t\t\t\t\t#route.#version = -1\n\t\t\t\treturn\n\n\t\t\t#route.resolve!\n\n\t\t\tif #route.active?\n\t\t\t\tctx.matchedRoute = #route\n\t\t\telse\n\t\t\t\treturn\n\n\t\tvisit! if visit\n\t\t##visitContext = null if ##visitContext\n\n\tdef #afterVisitRouteTo\n\t\tif #routeTo\n\t\t\t#routeTo.resolve!\n\n\t\tvisit! if visit\n\n\tdef routeDidEnter route\n\t\t#attachToParent!\n\n\tdef routeDidLeave route\n\t\t#detachFromParent!\n\n\tdef routeDidResolve route, match, prev\n\t\tif self.routed isa Function and (match != prev)\n\t\t\tself.router.queue.add do\n\t\t\t\tsuspend!\n\t\t\t\tlet res = await self.routed(match,route.state,prev)\n\t\t\t\tunsuspend!\n\t\treturn"],"names":[],"mappings":"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"},"dependencies":[],"meta":{"vite":{"lang":"js"}}}
\No newline at end of file