{"version":3,"sources":["config/config.js","components/route.js","components/view.js","components/link.js"],"names":["dmx","config","mapping","Component","initialData","params","isExact","isMatch","loading","path","url","tag","attributes","type","String","default","exact","Boolean","events","show","Event","hide","error","unauthorized","forbidden","notfound","render","node","this","template","document","createElement","innerHTML","$node","$parse","keys","re","pathToRegexp","props","end","xhr","XMLHttpRequest","addEventListener","onload","bind","onabort","onerror","ontimeout","update","window","location","pathname","base","querySelector","route","content","replace","match","exec","set","reduce","key","index","name","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","setRequestHeader","active","href","internal","BaseComponent","prototype","call","navigate","routeLink","setAttribute","isActive","split","ctrlKey","button","preventDefault","getAttribute","hash","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.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.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 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 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.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.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 },\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 this.url = location.pathname;\r\n\r\n this.$parse();\r\n },\r\n\r\n update: function(props) {\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 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 },\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 // 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 == 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 (url[0] == '.' && url[1] == '/') {\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 (route && route.content) {\r\n var path = route.content;\r\n\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 }\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 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 var url = window.location.href;\r\n return this.$node.href == url || this.$node.href == url.split(\"?\")[0].split(\"#\")[0];\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 (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 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"]}