mirror of
https://github.com/kremalicious/umami.git
synced 2025-02-14 21:10:34 +01:00
Use beacon api for links. Closes #446.
This commit is contained in:
parent
a71377eca0
commit
de50109b3e
@ -58,20 +58,24 @@ import { removeTrailingSlash } from '../lib/url';
|
|||||||
req.send(JSON.stringify(data));
|
req.send(JSON.stringify(data));
|
||||||
};
|
};
|
||||||
|
|
||||||
const collect = (type, params, uuid) => {
|
const getPayload = () => ({
|
||||||
if (disableTracking()) return;
|
website,
|
||||||
|
|
||||||
const payload = {
|
|
||||||
website: uuid,
|
|
||||||
hostname,
|
hostname,
|
||||||
screen,
|
screen,
|
||||||
language,
|
language,
|
||||||
cache: useCache && sessionStorage.getItem(cacheKey),
|
cache: useCache && sessionStorage.getItem(cacheKey),
|
||||||
|
url: currentUrl,
|
||||||
|
});
|
||||||
|
|
||||||
|
const assign = (a, b) => {
|
||||||
|
Object.keys(b).forEach(key => {
|
||||||
|
a[key] = b[key];
|
||||||
|
});
|
||||||
|
return a;
|
||||||
};
|
};
|
||||||
|
|
||||||
Object.keys(params).forEach(key => {
|
const collect = (type, payload) => {
|
||||||
payload[key] = params[key];
|
if (disableTracking()) return;
|
||||||
});
|
|
||||||
|
|
||||||
post(
|
post(
|
||||||
`${root}/api/collect`,
|
`${root}/api/collect`,
|
||||||
@ -86,28 +90,46 @@ import { removeTrailingSlash } from '../lib/url';
|
|||||||
const trackView = (url = currentUrl, referrer = currentRef, uuid = website) => {
|
const trackView = (url = currentUrl, referrer = currentRef, uuid = website) => {
|
||||||
collect(
|
collect(
|
||||||
'pageview',
|
'pageview',
|
||||||
{
|
assign(getPayload(), {
|
||||||
|
website: uuid,
|
||||||
url,
|
url,
|
||||||
referrer,
|
referrer,
|
||||||
},
|
}),
|
||||||
uuid,
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const trackEvent = (event_value, event_type = 'custom', url = currentUrl, uuid = website) => {
|
const trackEvent = (event_value, event_type = 'custom', url = currentUrl, uuid = website) => {
|
||||||
collect(
|
collect(
|
||||||
'event',
|
'event',
|
||||||
{
|
assign(getPayload(), {
|
||||||
|
website: uuid,
|
||||||
|
url,
|
||||||
event_type,
|
event_type,
|
||||||
event_value,
|
event_value,
|
||||||
url,
|
}),
|
||||||
},
|
|
||||||
uuid,
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Handle events */
|
/* Handle events */
|
||||||
|
|
||||||
|
const sendEvent = (value, type) => {
|
||||||
|
const payload = getPayload();
|
||||||
|
payload.event_type = type;
|
||||||
|
payload.event_value = value;
|
||||||
|
|
||||||
|
const blob = new Blob(
|
||||||
|
[
|
||||||
|
JSON.stringify({
|
||||||
|
type: 'event',
|
||||||
|
payload,
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
{ type: 'application/json' },
|
||||||
|
);
|
||||||
|
|
||||||
|
navigator.sendBeacon(`${root}/api/collect`, blob);
|
||||||
|
};
|
||||||
|
|
||||||
const addEvents = node => {
|
const addEvents = node => {
|
||||||
const elements = node.querySelectorAll(eventSelect);
|
const elements = node.querySelectorAll(eventSelect);
|
||||||
Array.prototype.forEach.call(elements, addEvent);
|
Array.prototype.forEach.call(elements, addEvent);
|
||||||
@ -120,7 +142,13 @@ import { removeTrailingSlash } from '../lib/url';
|
|||||||
const [, type, value] = className.split('--');
|
const [, type, value] = className.split('--');
|
||||||
const listener = listeners[className]
|
const listener = listeners[className]
|
||||||
? listeners[className]
|
? listeners[className]
|
||||||
: (listeners[className] = () => trackEvent(value, type));
|
: (listeners[className] = () => {
|
||||||
|
if (element.tagName === 'A') {
|
||||||
|
sendEvent(value, type);
|
||||||
|
} else {
|
||||||
|
trackEvent(value, type);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
element.addEventListener(type, listener, true);
|
element.addEventListener(type, listener, true);
|
||||||
});
|
});
|
||||||
@ -178,7 +206,9 @@ import { removeTrailingSlash } from '../lib/url';
|
|||||||
observer.observe(document, { childList: true, subtree: true });
|
observer.observe(document, { childList: true, subtree: true });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
document.addEventListener('readystatechange', update, true);
|
document.addEventListener('readystatechange', update, true);
|
||||||
|
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
})(window);
|
})(window);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user