parent
cda2ae5568
commit
6bade1fe81
@ -0,0 +1,44 @@
|
||||
const googleAnalytics = require("./google-analytics");
|
||||
const umamiAnalytics = require("./umami-analytics");
|
||||
const plausibleAnalytics = require("./plausible-analytics");
|
||||
|
||||
/**
|
||||
* Returns a string that represents the javascript that is required to insert the selected Analytics' script
|
||||
* into a webpage.
|
||||
* @param {typeof import("../model/status_page").StatusPage} statusPage Status page populate HTML with
|
||||
* @returns {string} HTML script tags to inject into page
|
||||
*/
|
||||
function getAnalyticsScript(statusPage) {
|
||||
switch (statusPage.analyticsType) {
|
||||
case "google":
|
||||
return googleAnalytics.getGoogleAnalyticsScript(statusPage.analyticsId);
|
||||
case "umami":
|
||||
return umamiAnalytics.getUmamiAnalyticsScript(statusPage.analyticsDomainUrl, statusPage.analyticsId);
|
||||
case "plausible":
|
||||
return plausibleAnalytics.getPlausibleAnalyticsScript(statusPage.analyticsDomainUrl, statusPage.analyticsId);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function that checks wether the selected analytics has been configured properly
|
||||
* @param {typeof import("../model/status_page").StatusPage} statusPage Status page populate HTML with
|
||||
* @returns {boolean} Boolean defining if the analytics config is valid
|
||||
*/
|
||||
function isValidAnalyticsConfig(statusPage) {
|
||||
switch (statusPage.analyticsType) {
|
||||
case "google":
|
||||
return statusPage.analyticsId != null;
|
||||
case "umami":
|
||||
case "plausible":
|
||||
return statusPage.analyticsId != null && statusPage.analyticsDomainUrl != null;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getAnalyticsScript,
|
||||
isValidAnalyticsConfig
|
||||
};
|
||||
@ -0,0 +1,36 @@
|
||||
const jsesc = require("jsesc");
|
||||
const { escape } = require("html-escaper");
|
||||
|
||||
/**
|
||||
* Returns a string that represents the javascript that is required to insert the Plausible Analytics script
|
||||
* into a webpage.
|
||||
* @param {string} plausibleDomainUrl Domain name with tld to use with the Plausible Analytics script.
|
||||
* @param {string} domainsToMonitor Domains to track seperated by a ',' to add Plausible Analytics script.
|
||||
* @returns {string} HTML script tags to inject into page
|
||||
*/
|
||||
function getPlausibleAnalyticsScript(plausibleDomainUrl, domainsToMonitor) {
|
||||
let escapedDomainUrlJS = jsesc(plausibleDomainUrl, { isScriptContext: true });
|
||||
let escapedWebsiteIdJS = jsesc(domainsToMonitor, { isScriptContext: true });
|
||||
|
||||
if (escapedDomainUrlJS) {
|
||||
escapedDomainUrlJS = escapedDomainUrlJS.trim();
|
||||
}
|
||||
|
||||
if (escapedWebsiteIdJS) {
|
||||
escapedWebsiteIdJS = escapedWebsiteIdJS.trim();
|
||||
}
|
||||
|
||||
// Escape the domain url for use in an HTML attribute.
|
||||
let escapedDomainUrlHTMLAttribute = escape(escapedDomainUrlJS);
|
||||
|
||||
// Escape the website id for use in an HTML attribute.
|
||||
let escapedWebsiteIdHTMLAttribute = escape(escapedWebsiteIdJS);
|
||||
|
||||
return `
|
||||
<script defer src="https://${escapedDomainUrlHTMLAttribute}/js/script.js" data-domain="${escapedWebsiteIdHTMLAttribute}"></script>
|
||||
`;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getPlausibleAnalyticsScript
|
||||
};
|
||||
Loading…
Reference in new issue