analytics/assets/js/dashboard/util/url.js
hq1 b606fc1809
Fix long URLs in outbound breakdown (#3183)
* Truncate breakdown URLs

* Update seeds with Outbound Links

* Update changelog

Fixes https://github.com/plausible/analytics/issues/3158
2023-07-24 12:37:20 +02:00

70 lines
1.7 KiB
JavaScript

export function apiPath(site, path = '') {
return `/api/stats/${encodeURIComponent(site.domain)}${path}`
}
export function siteBasePath(site, path = '') {
return `/${encodeURIComponent(site.domain)}${path}`
}
export function sitePath(site, path = '') {
return siteBasePath(site, path) + window.location.search
}
export function setQuery(key, value) {
const query = new URLSearchParams(window.location.search)
query.set(key, value)
return `${window.location.pathname}?${query.toString()}`
}
export function externalLinkForPage(domain, page) {
const domainURL = new URL(`https://${domain}`)
return `https://${domainURL.host}${page}`
}
export function isValidHttpUrl(string) {
let url;
try {
url = new URL(string);
} catch (_) {
return false;
}
return url.protocol === "http:" || url.protocol === "https:";
}
export function trimURL(url, maxLength) {
if (url.length <= maxLength) {
return url;
}
if (isValidHttpUrl(url)) {
const [protocol, restURL] = url.split('://');
const parts = restURL.split('/');
const host = parts.shift();
if (host.length > maxLength - 5) {
return `${protocol}://${host.substr(0, maxLength - 5)}...${restURL.slice(-maxLength + 5)}`;
}
let remainingLength = maxLength - host.length - 5;
let trimmedURL = `${protocol}://${host}`;
for (const part of parts) {
if (part.length <= remainingLength) {
trimmedURL += '/' + part;
remainingLength -= part.length + 1;
} else {
const startTrim = Math.floor((remainingLength - 3) / 2);
const endTrim = Math.ceil((remainingLength - 3) / 2);
trimmedURL += `/${part.substr(0, startTrim)}...${part.slice(-endTrim)}`;
break;
}
}
return trimmedURL;
}
return url
}