{"version":3,"sources":["components/browser.js"],"names":["dmx","Component","initialData","online","navigator","onLine","userAgent","language","cookieEnabled","referrer","document","location","hash","host","hostname","href","origin","pathname","port","protocol","search","pathparts","slice","split","scrollX","offset","direction","position","scrollY","viewport","width","height","device","pixelRatio","orientation","hidden","visibility","visibilityState","methods","goto","url","internal","title","routing","router","startsWith","parent","this","routes","path","join","replace","route","querySelector","content","base","match","pathToRegexp","end","exec","getBase","history","pushState","window","dispatchEvent","Event","assign","reload","back","forward","scrollTo","x","y","scrollXTo","left","behavior","scrollYTo","top","scrollBy","scrollXBy","scrollYBy","alert","message","print","writeTextToClipboard","text","clipboard","writeText","events","scroll","resize","offline","popstate","pushstate","replacestate","visibilitychange","orientationchange","init","node","_loadHandler","bind","_sizeHandler","throttle","_onlineHandler","_locationHandler","_visibilityHandler","_languageHandler","_orientationHandler","addEventListener","nextTick","_updateSize","destroy","removeEventListener","doc","_documentSize","innerWidth","innerHeight","data","set","length","Math","max","screenY","screen","devicePixelRatio","_orientation","_updateLocation","body","scrollWidth","documentElement","offsetWidth","clientWidth","scrollHeight","offsetHeight","clientHeight","matchMedia","matches","event","type"],"mappings":"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","file":"dmxBrowser.js","sourcesContent":["dmx.Component('browser', {\r\n\r\n initialData: {\r\n online: navigator.onLine,\r\n userAgent: navigator.userAgent,\r\n language: navigator.language,\r\n cookieEnabled: navigator.cookieEnabled,\r\n referrer: document.referrer,\r\n\r\n location: {\r\n hash: location.hash,\r\n host: location.host,\r\n hostname: location.hostname,\r\n href: location.href,\r\n origin: location.origin,\r\n pathname: location.pathname,\r\n port: location.port,\r\n protocol: location.protocol,\r\n search: location.search,\r\n pathparts: location.pathname.slice(1).split('/'),\r\n },\r\n\r\n scrollX: {\r\n offset: 0,\r\n direction: 0,\r\n position: 0,\r\n },\r\n\r\n scrollY: {\r\n offset: 0,\r\n direction: 0,\r\n position: 0,\r\n },\r\n\r\n viewport: {\r\n width: 0,\r\n height: 0,\r\n },\r\n\r\n device: {\r\n width: 0,\r\n height: 0,\r\n pixelRatio: 1,\r\n orientation: 'landscape',\r\n },\r\n\r\n document: {\r\n width: 0,\r\n height: 0,\r\n hidden: document.hidden,\r\n visibility: document.visibilityState,\r\n },\r\n },\r\n\r\n methods: {\r\n goto (url, internal, title) {\r\n if (internal) {\r\n if (dmx.routing && dmx.routing.router == 'hash') {\r\n url = '#!' + url;\r\n }\r\n\r\n if (url.startsWith('./')) {\r\n let parent = this.parent;\r\n \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 let route = document.querySelector('meta[name=\"ac:route\"]');\r\n if (route && route.content) {\r\n let path = route.content;\r\n let base = document.querySelector('meta[name=\"ac:base\"]');\r\n if (base && base.content) {\r\n path = base.content.replace(/\\/$/, '') + path;\r\n }\r\n let match = dmx.pathToRegexp(path, [], { end: false }).exec(location.pathname);\r\n if (match) {\r\n url = url.replace('./', match[0].replace(/(\\/+)?$/, '/'));\r\n }\r\n } else {\r\n url = dmx.routing.join(dmx.routing.getBase(), url);\r\n }\r\n }\r\n \r\n history.pushState({ title: title || document.title }, '', url);\r\n if (title) document.title = title;\r\n window.dispatchEvent(new Event('pushstate'));\r\n } else {\r\n location.assign(url);\r\n }\r\n },\r\n\r\n reload () {\r\n location.reload();\r\n },\r\n\r\n back () {\r\n history.back();\r\n },\r\n\r\n forward () {\r\n history.forward();\r\n },\r\n\r\n scrollTo (x, y) {\r\n window.scrollTo(x, y);\r\n },\r\n\r\n scrollXTo (left, behavior) {\r\n window.scrollTo({ left, behavior });\r\n },\r\n\r\n scrollYTo (top, behavior) {\r\n window.scrollTo({ top, behavior });\r\n },\r\n\r\n scrollBy (x, y) {\r\n window.scrollBy(x, y);\r\n },\r\n\r\n scrollXBy (left, behavior) {\r\n window.scrollBy({ left, behavior });\r\n },\r\n\r\n scrollYBy (top, behavior) {\r\n window.scrollBy({ top, behavior });\r\n },\r\n\r\n alert (message) {\r\n window.alert(message);\r\n },\r\n\r\n print () {\r\n window.print();\r\n },\r\n\r\n writeTextToClipboard (text) {\r\n return navigator.clipboard.writeText(text);\r\n },\r\n },\r\n\r\n events: {\r\n scroll: Event,\r\n resize: Event,\r\n online: Event,\r\n offline: Event,\r\n popstate: Event,\r\n pushstate: Event,\r\n replacestate: Event,\r\n visibilitychange: Event,\r\n orientationchange: Event,\r\n },\r\n\r\n init (node) {\r\n this._loadHandler = this._loadHandler.bind(this);\r\n this._sizeHandler = dmx.throttle(this._sizeHandler.bind(this));\r\n this._onlineHandler = this._onlineHandler.bind(this);\r\n this._locationHandler = this._locationHandler.bind(this);\r\n this._visibilityHandler = this._visibilityHandler.bind(this);\r\n this._languageHandler = this._languageHandler.bind(this);\r\n this._orientationHandler = this._orientationHandler.bind(this);\r\n\r\n window.addEventListener('load', this._loadHandler);\r\n window.addEventListener('scroll', this._sizeHandler);\r\n window.addEventListener('resize', this._sizeHandler);\r\n window.addEventListener('online', this._onlineHandler);\r\n window.addEventListener('offline', this._onlineHandler);\r\n window.addEventListener('popstate', this._locationHandler);\r\n window.addEventListener('pushstate', this._locationHandler);\r\n window.addEventListener('replacestate', this._locationHandler);\r\n window.addEventListener('hashchange', this._locationHandler);\r\n window.addEventListener('languagechange', this._languageHandler);\r\n window.addEventListener('deviceorientation', this._orientationHandler);\r\n document.addEventListener('visibilitychange', this._visibilityHandler);\r\n\r\n dmx.nextTick(() => this._updateSize());\r\n },\r\n\r\n destroy () {\r\n window.removeEventListener('load', this._loadHandler);\r\n window.removeEventListener('scroll', this._sizeHandler);\r\n window.removeEventListener('resize', this._sizeHandler);\r\n window.removeEventListener('online', this._onlineHandler);\r\n window.removeEventListener('offline', this._onlineHandler);\r\n window.removeEventListener('popstate', this._locationHandler);\r\n window.removeEventListener('pushstate', this._locationHandler);\r\n window.removeEventListener('replacestate', this._locationHandler);\r\n window.removeEventListener('hashchange', this._locationHandler);\r\n window.removeEventListener('languagechange', this._languageHandler);\r\n window.removeEventListener('deviceorientation', this._orientationHandler);\r\n document.removeEventListener('visibilitychange', this._visibilityHandler);\r\n },\r\n\r\n _updateSize () {\r\n const doc = this._documentSize();\r\n const width = doc.width - window.innerWidth;\r\n const height = doc.height - window.innerHeight;\r\n\r\n let direction = { x: this.data.scrollX.direction, y: this.data.scrollY.direction };\r\n\r\n if (this.data.scrollX.offset < window.scrollX) {\r\n direction.x = 1;\r\n } else if (this.data.scrollX.offset > window.scrollX) {\r\n direction.x = -1;\r\n }\r\n\r\n if (this.data.scrollY.offset < window.scrollY) {\r\n direction.x = 1;\r\n } else if (this.data.scrollY.offset > window.scrollY) {\r\n direction.x = -1;\r\n }\r\n\r\n this.set({\r\n scrollX: {\r\n offset: window.scrollX,\r\n length: Math.max(0, width),\r\n direction: direction.x,\r\n position: window.scrollX > 0 ? window.scrollX / width : 0,\r\n },\r\n scrollY: {\r\n offset: window.scrollY,\r\n length: Math.max(0, height),\r\n direction: direction.x,\r\n position: window.scrollY > 0 ? window.scrollY / height : 0,\r\n },\r\n viewport: {\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n scrollX: window.scrollX,\r\n scrollY: window.screenY,\r\n },\r\n device: {\r\n width: window.screen.width,\r\n height: window.screen.height,\r\n pixelRatio: window.devicePixelRatio,\r\n orientation: this._orientation(),\r\n },\r\n document: {\r\n width: doc.width,\r\n height: doc.height,\r\n hidden: document.hidden,\r\n visibility: document.visibilityState,\r\n }\r\n });\r\n },\r\n\r\n _updateLocation () {\r\n this.set('location', {\r\n hash: location.hash,\r\n host: location.host,\r\n hostname: location.hostname,\r\n href: location.href,\r\n origin: location.origin,\r\n pathname: location.pathname,\r\n port: location.port,\r\n protocol: location.protocol,\r\n search: location.search,\r\n pathparts: location.pathname.slice(1).split('/')\r\n });\r\n },\r\n \r\n _documentSize () {\r\n return {\r\n width: Math.max(\r\n document.body.scrollWidth, document.documentElement.scrollWidth,\r\n document.body.offsetWidth, document.documentElement.offsetWidth,\r\n document.body.clientWidth, document.documentElement.clientWidth\r\n ),\r\n height: Math.max(\r\n document.body.scrollHeight, document.documentElement.scrollHeight,\r\n document.body.offsetHeight, document.documentElement.offsetHeight,\r\n document.body.clientHeight, document.documentElement.clientHeight\r\n ),\r\n };\r\n },\r\n\r\n _orientation () {\r\n return window.matchMedia('(orientation: portrait)').matches ? 'portrait' : 'landscape';\r\n },\r\n\r\n _loadHandler (event) {\r\n this._updateSize();\r\n },\r\n\r\n _sizeHandler (event) {\r\n this._updateSize();\r\n this.dispatchEvent(event.type);\r\n },\r\n\r\n _onlineHandler (event) {\r\n this.set('online', event.type === 'online');\r\n this.dispatchEvent(event.type);\r\n },\r\n\r\n _locationHandler (event) {\r\n this._updateLocation();\r\n this.dispatchEvent(event.type);\r\n },\r\n\r\n _languageHandler (event) {\r\n this.set('language', navigator.language);\r\n },\r\n\r\n _orientationHandler (event) {\r\n this._updateSize();\r\n this.dispatchEvent('orientationchange');\r\n },\r\n\r\n _visibilityHandler (event) {\r\n const doc = this._documentSize();\r\n\r\n this.set('document', {\r\n width: doc.width,\r\n height: doc.height,\r\n hidden: document.hidden,\r\n visibility: document.visibilityState,\r\n });\r\n\r\n this.dispatchEvent(event.type);\r\n },\r\n\r\n});\r\n"]}