{"version":3,"sources":["config/routing.js","core/routing.js","components/route.js","components/view.js","components/link.js"],"names":["dmx","config","mapping","routing","router","base","routes","getRoutes","this","filter","route","app","name","getBase","document","querySelector","getAttribute","getUrlInfo","url","URL","window","location","hash","slice","origin","path","pathname","query","search","match","parent","replace","i","length","end","keys","pathToRegexp","join","exec","decodeURI","params","reduce","key","index","path1","path2","Component","initialData","isExact","isMatch","loading","tag","attributes","type","String","default","exact","Boolean","events","show","Event","hide","error","unauthorized","forbidden","notfound","render","node","detached","template","createElement","innerHTML","$node","$parse","re","props","xhr","XMLHttpRequest","addEventListener","onload","bind","onabort","onerror","ontimeout","update","content","set","loaded","data","children","splice","forEach","child","$destroy","abort","open","send","parentNode","appendChild","evalScripts","dispatchEvent","removeChild","scripts","querySelectorAll","array","script","newScript","src","replaceChild","event","status","responseText","bindings","grecaptcha","load","includes","setRequestHeader","console","warn","arguments","e","assign","active","href","internal","BaseComponent","prototype","call","navigate","routeLink","startsWith","setAttribute","isActive","ctrlKey","button","preventDefault","history","pushState","title","requestUpdate","pushStateEvent","createEvent","initEvent"],"mappings":"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","file":"../dmxRouting/dmxRouting.js","sourcesContent":["dmx.config.mapping['a'] = 'link';\r\n","dmx.routing = {\r\n router: 'hybrid', // hybrid (combined server/client routing), path or hash\r\n\r\n base: '', // todo: use when router is path (when page is in a subfolder)\r\n\r\n routes: [],\r\n\r\n getRoutes: function() {\r\n return this.routes.filter(function(route) {\r\n return !route.app || route.app == dmx.app.name;\r\n });\r\n },\r\n \r\n getBase: function() {\r\n if (this.base) {\r\n return this.base;\r\n } else {\r\n var base = document.querySelector('base[href]');\r\n if (base) return base.getAttribute('href');\r\n }\r\n\r\n return '';\r\n },\r\n\r\n getUrlInfo: function() {\r\n var url = this.router == 'hash' ? new URL(window.location.hash.slice(2), window.location.origin) : window.location;\r\n\r\n return {\r\n path: url.pathname || '/',\r\n query: url.search.slice(1),\r\n hash: url.hash.slice(1)\r\n };\r\n },\r\n\r\n match: function(path, routes, parent) {\r\n path = path || this.getUrlInfo().path;\r\n routes = routes || this.getRoutes();\r\n \r\n var base = dmx.routing.getBase();\r\n if (base) {\r\n path = path.replace(base, '').replace(/^\\/?/, '/');\r\n }\r\n\r\n for (var i = 0; i < routes.length; i++) {\r\n if (routes[i].routes) {\r\n routes[i].end = false;\r\n }\r\n\r\n var keys = [];\r\n var re = dmx.pathToRegexp(dmx.routing.join(parent && parent.path ? parent.path : '/', routes[i].path), keys, routes[i]);\r\n var match = re.exec(decodeURI(path));\r\n\r\n if (match) {\r\n return {\r\n path: match[0],\r\n params: keys.reduce(function(params, key, index) {\r\n params[key.name] = match[index + 1];\r\n return params;\r\n }, {}),\r\n url: routes[i].url,\r\n routes: routes[i].routes || []\r\n };\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n\r\n join: function(path1, path2) {\r\n return path1.replace(/\\/$/, '') + '/' + path2.replace(/^\\//, '');\r\n }\r\n};","dmx.Component('route', {\r\n\r\n initialData: {\r\n params: {}, // Key/value pairs parsed from the URL corresponding to the dynamic segments of the path\r\n isExact: false,\r\n isMatch: false,\r\n loading: false, // for ajax loading\r\n path: '', // The path pattern used to match. Useful for building nested Routes\r\n url: '' // The matched portion of the URL. Useful for building nested Links\r\n },\r\n\r\n tag: 'div',\r\n\r\n attributes: {\r\n path: {\r\n type: String,\r\n default: '*'\r\n },\r\n\r\n exact: {\r\n type: Boolean,\r\n default: false\r\n },\r\n\r\n url: {\r\n type: String,\r\n default: null\r\n }\r\n },\r\n\r\n events: {\r\n show: Event,\r\n hide: Event,\r\n error: Event, // ajax load error\r\n unauthorized: Event,\r\n forbidden: Event,\r\n notfound: Event // ajax page not found\r\n },\r\n\r\n render: function(node) {\r\n //dmx.BaseComponent.prototype.render.call(this, node);\r\n\r\n this.detached = [];\r\n this.template = document.createElement('div');\r\n this.template.innerHTML = this.$node.innerHTML;\r\n this.$node.innerHTML = '';\r\n this.$parse(this.template);\r\n\r\n this.keys = [];\r\n this.re = dmx.pathToRegexp(this.props.path, this.keys, {\r\n end: this.props.exact\r\n });\r\n\r\n this.xhr = new XMLHttpRequest();\r\n this.xhr.addEventListener('load', this.onload.bind(this));\r\n this.xhr.addEventListener('abort', this.onabort.bind(this));\r\n this.xhr.addEventListener('error', this.onerror.bind(this));\r\n this.xhr.addEventListener('timeout', this.ontimeout.bind(this));\r\n\r\n this.update();\r\n },\r\n\r\n update: function() {\r\n var path = window.location.pathname;\r\n\r\n if (dmx.routing.router != 'hybrid') {\r\n path = dmx.routing.getUrlInfo().path;\r\n } else {\r\n var base = document.querySelector('meta[name=\"ac:base\"]');\r\n var route = document.querySelector('meta[name=\"ac:route\"]');\r\n\r\n if (base && base.content) {\r\n path = path.replace(base.content.replace(/\\/$/, ''), '');\r\n }\r\n\r\n if (route && route.content) {\r\n path = path.replace(dmx.pathToRegexp(route.content, [], { end: false }), '').replace(/^(\\/+)?/, '/');\r\n }\r\n }\r\n\r\n var match = this.re.exec(path);\r\n\r\n this.set('path', this.props.path);\r\n this.set('isExact', !!this.props.exact);\r\n this.set('isMatch', !!match);\r\n\r\n if (match) {\r\n this.set('url', match[0]);\r\n this.set('params', this.keys.reduce(function(params, key, index) {\r\n params[key.name] = match[index + 1];\r\n return params;\r\n }, {}));\r\n\r\n if (this.props.url && this.props.url == this.loaded && this.data.loading) {\r\n // Url is loading\r\n return;\r\n }\r\n\r\n if (this.props.url && this.props.url != this.loaded) {\r\n // correctly destroy old content first\r\n this.$node.innerHTML = '';\r\n this.children.splice(0).forEach(function(child) {\r\n child.$destroy();\r\n });\r\n\r\n this.set('loading', true);\r\n\r\n this.loaded = this.props.url;\r\n\r\n this.xhr.abort();\r\n\r\n this.xhr.open('GET', this.props.url);\r\n //this.xhr.setRequestHeader('accept', 'text/fragment+html');\r\n this.xhr.send();\r\n } else if (!this.template.parentNode) {\r\n this.$node.appendChild(this.template);\r\n //this.children = this.detached;\r\n //this.detached = [];\r\n this.evalScripts(this.$node);\r\n this.dispatchEvent('show');\r\n }\r\n } else {\r\n this.xhr.abort();\r\n this.set('url', '');\r\n this.set('params', {});\r\n if (this.template.parentNode) {\r\n this.$node.removeChild(this.template);\r\n //this.detached = this.children;\r\n //this.children = [];\r\n this.dispatchEvent('hide');\r\n }\r\n }\r\n },\r\n\r\n evalScripts: function(node) {\r\n var scripts = node.querySelectorAll('script[type=\"text/javascript\"],script:not([type])');\r\n\r\n dmx.array(scripts).forEach(function(script) {\r\n var newScript = document.createElement('script');\r\n newScript.type = 'text/javascript';\r\n if (script.src) newScript.src = script.src;\r\n if (script.innerHTML) newScript.innerHTML = script.innerHTML;\r\n script.parentNode.replaceChild(newScript, script);\r\n });\r\n },\r\n\r\n onload: function(event) {\r\n this.set('loading', false);\r\n if (this.xhr.status == 200 || this.xhr.status == 0) {\r\n this.template.innerHTML = this.xhr.responseText;\r\n this.bindings = [];\r\n\r\n this.$parse(this.template);\r\n\r\n this.$node.appendChild(this.template);\r\n\r\n this.evalScripts(this.$node);\r\n\r\n if (window.grecaptcha) {\r\n dmx.array(this.$node.querySelectorAll('.g-recaptcha')).forEach(function(node) {\r\n grecaptcha.render(node);\r\n });\r\n }\r\n\r\n this.dispatchEvent('show');\r\n } else {\r\n if (this.xhr.status == 401) {\r\n this.dispatchEvent('unauthorized');\r\n } else if (this.xhr.status == 403) {\r\n this.dispatchEvent('forbidden');\r\n } else if (this.xhr.status == 404) {\r\n this.dispatchEvent('notfound');\r\n } else {\r\n this.dispatchEvent('error');\r\n }\r\n }\r\n },\r\n\r\n onabort: function(event) {\r\n this.set('loading', false);\r\n //this.dispatchEvent('error');\r\n },\r\n\r\n onerror: function(event) {\r\n this.set('loading', false);\r\n this.dispatchEvent('error');\r\n },\r\n\r\n ontimeout: function(event) {\r\n this.set('loading', false);\r\n this.dispatchEvent('error');\r\n }\r\n\r\n});\r\n","dmx.Component('view', {\r\n\r\n initialData: {\r\n loading: false,\r\n params: null\r\n },\r\n\r\n tag: 'div',\r\n\r\n events: {\r\n load: Event,\r\n error: Event,\r\n unauthorized: Event,\r\n forbidden: Event,\r\n notfound: Event\r\n },\r\n\r\n render: function(node) {\r\n this.xhr = new XMLHttpRequest();\r\n this.xhr.addEventListener('load', this.onload.bind(this));\r\n this.xhr.addEventListener('abort', this.onabort.bind(this));\r\n this.xhr.addEventListener('error', this.onerror.bind(this));\r\n this.xhr.addEventListener('timeout', this.ontimeout.bind(this));\r\n\r\n if (dmx.routing.router == 'hybrid') {\r\n this.url = location.pathname;\r\n }\r\n\r\n this.$parse();\r\n },\r\n\r\n update: function(props) {\r\n if (dmx.routing.router == 'hybrid') {\r\n var url = location.pathname;\r\n\r\n if (this.url == url && this.data.loading) {\r\n // Url is loading\r\n return;\r\n }\r\n\r\n if (this.url != url) {\r\n this.set('loading', true);\r\n\r\n this.url = url;\r\n\r\n url += (url.includes('?') ? '&' : '?') + 'fragment=true';\r\n\r\n this.xhr.abort();\r\n this.xhr.open('GET', url);\r\n this.xhr.setRequestHeader('accept', 'text/fragment+html');\r\n this.xhr.send();\r\n }\r\n } else {\r\n var path = dmx.routing.getUrlInfo().path;\r\n var routes = dmx.routing.getRoutes();\r\n var parent = this.parent;\r\n \r\n while (parent) {\r\n if (parent.routes) {\r\n routes = parent.routes;\r\n break;\r\n }\r\n\r\n parent = parent.parent;\r\n }\r\n\r\n var route = dmx.routing.match(path, routes, parent);\r\n\r\n if (route) {\r\n this.path = route.path;\r\n this.routes = route.routes;\r\n\r\n this.set('params', route.params);\r\n\r\n if (this.url != route.url) {\r\n this.children.splice(0).forEach(function(child) {\r\n child.$destroy();\r\n });\r\n \r\n this.bindings = [];\r\n this.$node.innerHTML = '';\r\n\r\n this.set('loading', true);\r\n \r\n this.url = route.url;\r\n \r\n this.xhr.abort();\r\n this.xhr.open('GET', route.url);\r\n // lets add the fragment header just in case for node\r\n this.xhr.setRequestHeader('accept', 'text/fragment+html');\r\n this.xhr.send();\r\n }\r\n } else {\r\n console.warn('Route for ' + path + ' not found');\r\n }\r\n }\r\n },\r\n\r\n evalScripts: function(node) {\r\n try {\r\n var scripts = node.querySelectorAll('script[type=\"text/javascript\"],script:not([type])');\r\n\r\n dmx.array(scripts).forEach(function(script) {\r\n try {\r\n var newScript = document.createElement('script');\r\n newScript.type = 'text/javascript';\r\n if (script.src) newScript.src = script.src;\r\n if (script.innerHTML) newScript.innerHTML = script.innerHTML;\r\n script.onerror = function() {\r\n console.error('ERROR', arguments);\r\n }\r\n script.parentNode.replaceChild(newScript, script);\r\n } catch (e) {\r\n console.error('Error executing script ' + script.src, e);\r\n }\r\n });\r\n } catch (e) {\r\n console.error('An error occurred while trying to execute scripts', e);\r\n }\r\n },\r\n\r\n onload: function(event) {\r\n this.set('loading', false);\r\n if (this.xhr.status == 200 || this.xhr.status == 0) {\r\n // correctly destroy old children first\r\n this.children.splice(0).forEach(function(child) {\r\n child.$destroy();\r\n });\r\n \r\n this.bindings = [];\r\n this.$node.innerHTML = this.xhr.responseText;\r\n \r\n this.$parse(this.$node);\r\n\r\n this.evalScripts(this.$node);\r\n\r\n if (window.grecaptcha) {\r\n dmx.array(this.$node.querySelectorAll('.g-recaptcha')).forEach(function(node) {\r\n grecaptcha.render(node);\r\n });\r\n }\r\n\r\n this.dispatchEvent('load');\r\n } else {\r\n if (this.xhr.status == 222) {\r\n location.assign(this.xhr.responseText);\r\n } else if (this.xhr.status == 401) {\r\n this.dispatchEvent('unauthorized');\r\n } else if (this.xhr.status == 403) {\r\n this.dispatchEvent('forbidden');\r\n } else if (this.xhr.status == 404) {\r\n this.dispatchEvent('notfound');\r\n } else {\r\n this.dispatchEvent('error');\r\n }\r\n }\r\n },\r\n\r\n onabort: function(event) {\r\n this.set('loading', false);\r\n },\r\n\r\n onerror: function(event) {\r\n this.set('loading', false);\r\n this.dispatchEvent('error');\r\n },\r\n\r\n ontimeout: function(event) {\r\n this.set('loading', false);\r\n this.dispatchEvent('error');\r\n }\r\n\r\n});","dmx.Component('link', {\r\n\r\n initialData: {\r\n active: false\r\n },\r\n\r\n tag: 'a',\r\n\r\n attributes: {\r\n href: {\r\n type: String,\r\n default: ''\r\n },\r\n\r\n internal: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n\r\n render: function(node) {\r\n dmx.BaseComponent.prototype.render.call(this, node);\r\n this.$node.addEventListener('click', this.navigate.bind(this));\r\n this.routeLink = false;\r\n this.update({});\r\n },\r\n\r\n update: function(props) {\r\n if (props.href != this.props.href) {\r\n var url = this.props.href;\r\n\r\n if (dmx.routing.router != 'hybrid') {\r\n if ((url.startsWith('/') && !url.startsWith('//')) || url.startsWith('#')) {\r\n this.routeLink = true;\r\n }\r\n\r\n if (url.startsWith('./')) {\r\n var parent = this.parent;\r\n \r\n while (parent) {\r\n if (parent.routes && parent.path) {\r\n url = url.replace('./', parent.path);\r\n break;\r\n }\r\n\r\n parent = parent.parent;\r\n }\r\n\r\n url = url.replace('./', '/');\r\n this.routeLink = true;\r\n }\r\n\r\n if (url.startsWith('~/')) {\r\n url = url.replace('~/', '/');\r\n this.routeLink = true;\r\n }\r\n\r\n if (dmx.routing.router == 'path' && !url.startsWith('#')) {\r\n url = dmx.routing.join(dmx.routing.getBase(), url);\r\n }\r\n } else {\r\n if (url[0] == '.' && url[1] == '/') {\r\n var parent = this.parent;\r\n while (parent) {\r\n if (parent.routes && parent.path) {\r\n url = dmx.routing.join('./', url.replace('./', parent.path));\r\n break;\r\n }\r\n\r\n parent = parent.parent;\r\n }\r\n\r\n var route = document.querySelector('meta[name=\"ac:route\"]');\r\n if (route && route.content) {\r\n var path = route.content;\r\n \r\n var base = document.querySelector('meta[name=\"ac:base\"]');\r\n if (base && base.content) {\r\n path = base.content.replace(/\\/$/, '') + path;\r\n }\r\n\r\n var match = dmx.pathToRegexp(path, [], { end: false }).exec(location.pathname);\r\n\r\n if (match) {\r\n this.$node.setAttribute('href', url.replace('./', match[0].replace(/(\\/+)?$/, '/')));\r\n this.routeLink = true;\r\n return;\r\n }\r\n } else {\r\n this.$node.setAttribute('href', dmx.routing.join(dmx.routing.getBase(), url));\r\n this.routeLink = true;\r\n return;\r\n }\r\n }\r\n\r\n if (url[0] == '~' && url[1] == '/') {\r\n var route = document.querySelector('meta[name=\"ac:route\"]');\r\n if (route && route.content) {\r\n var path = route.content;\r\n \r\n var base = document.querySelector('meta[name=\"ac:base\"]');\r\n if (base && base.content) {\r\n path = base.content.replace(/\\/$/, '') + path;\r\n }\r\n\r\n var match = dmx.pathToRegexp(path, [], { end: false }).exec(location.pathname);\r\n\r\n if (match) {\r\n this.$node.setAttribute('href', url.replace('~/', match[0].replace(/(\\/+)?$/, '/')));\r\n this.routeLink = true;\r\n return;\r\n }\r\n } else {\r\n this.$node.setAttribute('href', dmx.routing.join(dmx.routing.getBase(), url.slice(1)));\r\n this.routeLink = true;\r\n return;\r\n }\r\n }\r\n\r\n if (url[0] == '#') {\r\n this.routeLink = true;\r\n } else {\r\n this.routeLink = false;\r\n }\r\n }\r\n\r\n this.$node.setAttribute('href', url);\r\n }\r\n\r\n this.set('active', this.isActive());\r\n },\r\n\r\n isActive: function() {\r\n try {\r\n var url = dmx.routing.getUrlInfo();\r\n var href = new URL(this.$node.href);\r\n return href.pathname == url.path;\r\n } catch (e) {\r\n return false;\r\n }\r\n },\r\n\r\n navigate: function(event) {\r\n if ((this.routeLink || this.props.internal) && !event.ctrlKey && event.button == 0) {\r\n event.preventDefault();\r\n\r\n var url = this.$node.getAttribute('href');\r\n\r\n if (dmx.routing.router != 'hybrid') {\r\n window.history.pushState({ title: this.$node.title || document.title }, '', dmx.routing.router == 'hash' ? '#!' + url : url);\r\n } else {\r\n if (url[0] == '#') {\r\n window.location.hash = url;\r\n return;\r\n }\r\n\r\n window.history.pushState({ title: this.$node.title || document.title }, '', url);\r\n if (this.$node.title) document.title = this.$node.title;\r\n }\r\n\r\n dmx.requestUpdate();\r\n\r\n var pushStateEvent = document.createEvent('Event');\r\n pushStateEvent.initEvent('pushstate', false, false);\r\n window.dispatchEvent(pushStateEvent);\r\n }\r\n }\r\n\r\n});\r\n"]}