{"version":3,"file":"362.5f57fdfa8bb39bc0acae.js","mappings":"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","sources":["webpack://web-ui/./assets/src/js/lib/umami.js"],"sourcesContent":["export function init(window, config) {\n const {\n screen: { width, height },\n navigator: { language },\n location,\n localStorage,\n document,\n history,\n } = window;\n const { hostname, href } = location;\n let { referrer } = document;\n\n if (config.referrer) {\n referrer = config.referrer;\n }\n\n const _data = 'data-';\n const website = config.website_id;\n const hostUrl = config.host_url;\n const tag = config.tag;\n const autoTrack = config.auto_track !== false;\n const excludeSearch = config.exclude_search === true;\n const domain = config.domains || '';\n const domains = domain.split(',').map(n => n.trim());\n const host = hostUrl;\n const endpoint = `${host.replace(/\\/$/, '')}/api/send`;\n const screen = `${width}x${height}`;\n const eventRegex = /data-umami-event-([\\w-_]+)/;\n const eventNameAttribute = _data + 'umami-event';\n const delayDuration = 300;\n\n /* Helper functions */\n\n const encode = str => {\n if (!str) {\n return undefined;\n }\n\n try {\n const result = decodeURI(str);\n\n if (result !== str) {\n return result;\n }\n } catch (e) {\n return str;\n }\n\n return encodeURI(str);\n };\n\n const parseURL = url => {\n try {\n const { pathname, search } = new URL(url);\n url = pathname + search;\n } catch (e) {\n /* empty */\n }\n return excludeSearch ? url.split('?')[0] : url;\n };\n\n const getPayload = () => ({\n website,\n hostname,\n screen,\n language,\n title: encode(title),\n url: encode(currentUrl),\n referrer: encode(currentRef),\n tag: tag ? tag : undefined,\n });\n\n /* Event handlers */\n\n const handlePush = (state, title, url) => {\n if (!url) return;\n\n currentRef = currentUrl;\n currentUrl = parseURL(url.toString());\n\n if (currentUrl !== currentRef) {\n setTimeout(track, delayDuration);\n }\n };\n\n const handlePathChanges = () => {\n const hook = (_this, method, callback) => {\n const orig = _this[method];\n\n return (...args) => {\n callback.apply(null, args);\n\n return orig.apply(_this, args);\n };\n };\n\n history.pushState = hook(history, 'pushState', handlePush);\n history.replaceState = hook(history, 'replaceState', handlePush);\n };\n\n const handleTitleChanges = () => {\n const observer = new MutationObserver(([entry]) => {\n title = entry && entry.target ? entry.target.text : undefined;\n });\n\n const node = document.querySelector('head > title');\n\n if (node) {\n observer.observe(node, {\n subtree: true,\n characterData: true,\n childList: true,\n });\n }\n };\n\n const handleClicks = () => {\n document.addEventListener(\n 'click',\n async e => {\n const isSpecialTag = tagName => ['BUTTON', 'A'].includes(tagName);\n\n const trackElement = async el => {\n const attr = el.getAttribute.bind(el);\n const eventName = attr(eventNameAttribute);\n\n if (eventName) {\n const eventData = {};\n\n el.getAttributeNames().forEach(name => {\n const match = name.match(eventRegex);\n\n if (match) {\n eventData[match[1]] = attr(name);\n }\n });\n\n return track(eventName, eventData);\n }\n };\n\n const findParentTag = (rootElem, maxSearchDepth) => {\n let currentElement = rootElem;\n for (let i = 0; i < maxSearchDepth; i++) {\n if (isSpecialTag(currentElement.tagName)) {\n return currentElement;\n }\n currentElement = currentElement.parentElement;\n if (!currentElement) {\n return null;\n }\n }\n };\n\n const el = e.target;\n const parentElement = isSpecialTag(el.tagName) ? el : findParentTag(el, 10);\n\n if (parentElement) {\n const { href, target } = parentElement;\n const eventName = parentElement.getAttribute(eventNameAttribute);\n\n if (eventName) {\n if (parentElement.tagName === 'A') {\n const external =\n target === '_blank' ||\n e.ctrlKey ||\n e.shiftKey ||\n e.metaKey ||\n (e.button && e.button === 1);\n\n if (eventName && href) {\n if (!external) {\n e.preventDefault();\n }\n return trackElement(parentElement).then(() => {\n if (!external) location.href = href;\n });\n }\n } else if (parentElement.tagName === 'BUTTON') {\n return trackElement(parentElement);\n }\n }\n } else {\n return trackElement(el);\n }\n },\n true,\n );\n };\n\n /* Tracking functions */\n\n const trackingDisabled = () =>\n !website ||\n (localStorage && localStorage.getItem('umami.disabled')) ||\n (domain && !domains.includes(hostname));\n\n const send = async (payload, type = 'event') => {\n if (trackingDisabled()) return;\n\n const headers = {\n 'Content-Type': 'application/json',\n };\n\n if (typeof cache !== 'undefined') {\n headers['x-umami-cache'] = cache;\n }\n\n try {\n const res = await fetch(endpoint, {\n method: 'POST',\n body: JSON.stringify({ type, payload }),\n headers,\n });\n const text = await res.text();\n\n return (cache = text);\n } catch (e) {\n /* empty */\n }\n };\n\n const init = () => {\n if (!initialized) {\n track();\n handlePathChanges();\n handleTitleChanges();\n handleClicks();\n initialized = true;\n }\n };\n\n const track = (obj, data) => {\n if (typeof obj === 'string') {\n return send({\n ...getPayload(),\n name: obj,\n data: typeof data === 'object' ? data : undefined,\n });\n } else if (typeof obj === 'object') {\n return send(obj);\n } else if (typeof obj === 'function') {\n return send(obj(getPayload()));\n }\n return send(getPayload());\n };\n\n const identify = data => send({ ...getPayload(), data }, 'identify');\n\n /* Start */\n\n if (!window.umami) {\n window.umami = {\n track,\n identify,\n };\n }\n\n let currentUrl = parseURL(href);\n let currentRef = referrer !== hostname ? referrer : '';\n let title = document.title;\n let cache;\n let initialized;\n\n if (autoTrack && !trackingDisabled()) {\n if (document.readyState === 'complete') {\n init();\n } else {\n document.addEventListener('readystatechange', init, true);\n }\n }\n return window.umami;\n}"],"names":["init","window","config","screen","width","height","navigator","language","location","localStorage","document","history","hostname","href","referrer","website","website_id","hostUrl","host_url","tag","autoTrack","auto_track","excludeSearch","exclude_search","domain","domains","split","map","n","trim","endpoint","replace","eventRegex","eventNameAttribute","_data","encode","str","result","decodeURI","e","encodeURI","parseURL","url","pathname","search","URL","getPayload","title","currentUrl","currentRef","undefined","handlePush","state","toString","setTimeout","track","trackingDisabled","getItem","includes","send","async","payload","type","arguments","length","headers","cache","res","fetch","method","body","JSON","stringify","text","initialized","handlePathChanges","hook","_this","callback","orig","_len","args","Array","_key","apply","pushState","replaceState","handleTitleChanges","observer","MutationObserver","_ref","entry","target","node","querySelector","observe","subtree","characterData","childList","addEventListener","isSpecialTag","tagName","trackElement","attr","el","getAttribute","bind","eventName","eventData","getAttributeNames","forEach","name","match","parentElement","findParentTag","rootElem","maxSearchDepth","currentElement","i","external","ctrlKey","shiftKey","metaKey","button","preventDefault","then","obj","data","identify","umami","readyState"],"sourceRoot":""}