Better URL regex

This commit is contained in:
foxster-mp4
2023-04-29 16:26:13 -07:00
parent 04d974784b
commit 09c95032fa
3 changed files with 21 additions and 35 deletions

View File

@@ -91,16 +91,7 @@ fetch(sourceURL)
previewScreenshots.insertAdjacentHTML("beforeend", `<img src="${url}" alt="">`); previewScreenshots.insertAdjacentHTML("beforeend", `<img src="${url}" alt="">`);
}); });
let localizedDescription = app.localizedDescription; previewDescription.innerHTML = formatString(app.localizedDescription);
const perviewDescriptionURLs = [...new Set(localizedDescription.match(urlRegex))]; // Creating set from array to remove duplicates
perviewDescriptionURLs.forEach(url => {
localizedDescription = localizedDescription.replaceAll(url, `<a href="${url}">${url}</a>`)
});
previewDescription.innerHTML = localizedDescription.replaceAll("\n", "<br>");
const more = ` const more = `
<a id="more" onclick="revealTruncatedText(this);"> <a id="more" onclick="revealTruncatedText(this);">
@@ -139,20 +130,13 @@ fetch(sourceURL)
const units = ["B", "KB", "MB", "GB"]; const units = ["B", "KB", "MB", "GB"];
var appSize = app.size, c = 0; var appSize = app.size, c = 0;
while (appSize > 1024) { while (appSize > 1024) {
appSize = parseFloat(appSize/1024).toFixed(1); appSize = parseFloat(appSize / 1024).toFixed(1);
c++; c++;
} }
versionSize.textContent = `${appSize} ${units[c]}`; versionSize.textContent = `${appSize} ${units[c]}`;
// Version description // Version description
var appVersionDescription = app.versionDescription; versionDescription.innerHTML = formatString(app.versionDescription);
const urls = [...new Set(appVersionDescription.match(urlRegex))]; // Creating set from array to remove duplicates
urls.forEach(url =>
appVersionDescription = appVersionDescription.replaceAll(url, `<a href="${url}">${url}</a>`)
);
versionDescription.innerHTML = appVersionDescription.replaceAll("\n", "<br>");
if (versionDescription.scrollHeight > versionDescription.clientHeight) if (versionDescription.scrollHeight > versionDescription.clientHeight)
versionDescription.insertAdjacentHTML("beforeend", more); versionDescription.insertAdjacentHTML("beforeend", more);

View File

@@ -14,11 +14,11 @@ fetch(sourceURL)
// If b < a // If b < a
return (new Date(b.versionDate)).valueOf() - (new Date(a.versionDate)).valueOf(); return (new Date(b.versionDate)).valueOf() - (new Date(a.versionDate)).valueOf();
}); });
if (json.news && json.news.length >= 1) { if (json.news && json.news.length >= 1) {
// Sort news in decending order (latest first) // Sort news in decending order (latest first)
json.news.sort((a, b) => (new Date(b.date)).valueOf() - (new Date(a.date)).valueOf()); json.news.sort((a, b) => (new Date(b.date)).valueOf() - (new Date(a.date)).valueOf());
// News // News
if (json.news.length == 1) { if (json.news.length == 1) {
document.getElementById("news-items").insertAdjacentHTML("beforeend", newsItemHTML(json.news[0], json.apps, true)); document.getElementById("news-items").insertAdjacentHTML("beforeend", newsItemHTML(json.news[0], json.apps, true));
@@ -27,7 +27,7 @@ fetch(sourceURL)
for (let i = 0; i < 5 && i < json.news.length; i++) { for (let i = 0; i < 5 && i < json.news.length; i++) {
document.getElementById("news-items").insertAdjacentHTML("beforeend", newsItemHTML(json.news[i], json.apps, true)); document.getElementById("news-items").insertAdjacentHTML("beforeend", newsItemHTML(json.news[i], json.apps, true));
} }
} }
} else { } else {
document.getElementById("news").remove(); document.getElementById("news").remove();
} }
@@ -36,7 +36,7 @@ fetch(sourceURL)
let count = 1; let count = 1;
json.apps.forEach(app => { json.apps.forEach(app => {
// Max: 3 featured apps if not specified // Max: 3 featured apps if not specified
if (count > 3) return; if (count > 3) return;
// Ignore beta apps // Ignore beta apps
if (app.beta) return; if (app.beta) return;
@@ -49,24 +49,16 @@ fetch(sourceURL)
count++; count++;
}); });
var description = json.description; var description = formatString(json.description);
if (description) { if (description) {
const urls = [...new Set(description.match(urlRegex))]; // Creating set from array to remove duplicates
urls.forEach(url =>
description = description.replaceAll(url, `<a href="${url}">${url}</a>`)
);
document.getElementById("about").insertAdjacentHTML("beforeend", ` document.getElementById("about").insertAdjacentHTML("beforeend", `
<div class="item"> <div class="item">
<p>${description.replaceAll("\n", "<br>")}</p> <p>${description}</p>
</div> </div>
`); `);
} else { } else {
document.getElementById("about").remove(); document.getElementById("about").remove();
} }
waitForAllImagesToLoad(); waitForAllImagesToLoad();
}); });

View File

@@ -7,8 +7,18 @@ if (!urlSearchParams.has('source') || !sourceURL) {
window.location.replace("index.html"); window.location.replace("index.html");
} }
// https://stackoverflow.com/a/31760088 const urlRegex = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; // https://stackoverflow.com/a/8943487
const urlRegex = /(https?:\/\/[^ ]*)/g; // "g": global flag; without this, match() returns only the first matching result function formatString(string) {
if (!string) return undefined;
// URLs
const urlArray = string.match(urlRegex);
const urlSet = [...new Set(urlArray)]; // Converting to set to remove duplicates
urlSet.forEach(url => string = string.replaceAll(url, `<a href="${url}">${url}</a>`));
// New lines
return string.replaceAll("\n", "<br>");
}
// If source is not a URL // If source is not a URL
if (!sourceURL.match(urlRegex)) { if (!sourceURL.match(urlRegex)) {