65 lines
2.3 KiB
Plaintext
65 lines
2.3 KiB
Plaintext
- let { serverURL, 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 = () => {
|
|
umami.track(props => ({ ...props, url: window.location.pathname, title: GLOBAL_CONFIG_SITE.title }))
|
|
}
|
|
|
|
const loadUmamiJS = () => {
|
|
btf.getScript('!{baseURL}/script.js', {
|
|
'data-website-id': '!{website_id}',
|
|
'data-auto-track': 'false',
|
|
...option
|
|
}).then(runTrack)
|
|
}
|
|
|
|
const getData = async (isPost) => {
|
|
const now = Date.now()
|
|
const keyUrl = isPost ? `&url=${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
|
|
})
|
|
return await res.json()
|
|
}
|
|
|
|
const insertData = async () => {
|
|
try {
|
|
if (GLOBAL_CONFIG_SITE.isPost && config.page_pv) {
|
|
const pagePV = document.getElementById('umamiPV')
|
|
if (pagePV) {
|
|
const data = await getData(true)
|
|
pagePV.textContent = data.pageviews.value
|
|
}
|
|
} else {
|
|
const data = (config.site_uv || config.site_pv) && await getData()
|
|
if (config.site_uv) {
|
|
const siteUV = document.getElementById('umami-site-uv')
|
|
if (siteUV) siteUV.textContent = data.visitors.value
|
|
}
|
|
if (config.site_pv) {
|
|
const sitePV = document.getElementById('umami-site-pv')
|
|
if (sitePV) sitePV.textContent = data.pageviews.value
|
|
}
|
|
}
|
|
} catch (e) {
|
|
console.error('Failed to load Umami Analytics:', e)
|
|
}
|
|
}
|
|
|
|
btf.addGlobalFn('pjaxComplete', runTrack, 'umami_analytics_run_track')
|
|
btf.addGlobalFn('pjaxComplete', insertData, 'umami_analytics_insert')
|
|
|
|
loadUmamiJS()
|
|
insertData()
|
|
})() |