- let { serverURL, script_name, website_id, option, UV_PV } = theme.umami_analytics - const isServerURL = !!serverURL - const baseURL = serverURL ? serverURL.replace(/\/$/, '') : 'https://cloud.umami.is' - const apiUrl = serverURL ? serverURL.replace(/\/$/, '') + '/api' : 'https://api.umami.is/v1' script. (() => { const option = !{JSON.stringify(option)} const config = !{JSON.stringify(UV_PV)} const runTrack = () => { if (typeof umami !== 'undefined' && typeof umami.track === 'function') { umami.track(props => ({ ...props, url: window.location.pathname, title: GLOBAL_CONFIG_SITE.title })) } else { console.warn('Umami Analytics: umami.track is not available') } } const loadUmamiJS = () => { btf.getScript('!{baseURL}/!{script_name}', { 'data-website-id': '!{website_id}', 'data-auto-track': 'false', ...option }).then(() => { runTrack() }).catch(error => { console.error('Umami Analytics: Error loading script', error) }) } const getData = async (isPost) => { try { const now = Date.now() const keyUrl = isPost ? `&url=${window.location.pathname}&path=${window.location.pathname}` : '' const headerList = { 'Accept': 'application/json' } if (!{isServerURL}) { headerList['Authorization'] = `Bearer ${config.token}` } else { headerList['x-umami-api-key'] = config.token } const res = await fetch(`!{apiUrl}/websites/!{website_id}/stats?startAt=0000000000&endAt=${now}${keyUrl}`, { method: "GET", headers: headerList }) if (!res.ok) { throw new Error(`HTTP error! status: ${res.status}`) } return await res.json() } catch (error) { console.error('Umami Analytics: Failed to fetch data', error) throw error } } const insertData = async () => { try { if (GLOBAL_CONFIG_SITE.pageType === 'post' && config.page_pv) { const pagePV = document.getElementById('umamiPV') if (pagePV) { const data = await getData(true) if (data && data.pageviews) { pagePV.textContent = typeof data.pageviews.value !== 'undefined' ? data.pageviews.value : data.pageviews } else { console.warn('Umami Analytics: Invalid page view data received') } } } if (config.site_uv || config.site_pv) { const data = await getData(false) if (config.site_uv) { const siteUV = document.getElementById('umami-site-uv') if (siteUV && data && data.visitors) { siteUV.textContent = typeof data.visitors.value !== 'undefined' ? data.visitors.value : data.visitors } else if (siteUV) { console.warn('Umami Analytics: Invalid site UV data received') } } if (config.site_pv) { const sitePV = document.getElementById('umami-site-pv') if (sitePV && data && data.pageviews) { sitePV.textContent = typeof data.pageviews.value !== 'undefined' ? data.pageviews.value : data.pageviews } else if (sitePV) { console.warn('Umami Analytics: Invalid site PV data received') } } } } catch (error) { console.error('Umami Analytics: Failed to insert data', error) } } btf.addGlobalFn('pjaxComplete', runTrack, 'umami_analytics_run_track') btf.addGlobalFn('pjaxComplete', insertData, 'umami_analytics_insert') loadUmamiJS() if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', insertData) } else { setTimeout(insertData, 100) } })()