rep defect 42,questioinnaire defect 67, enf defect 16

This commit is contained in:
2025-01-21 16:04:52 +00:00
parent 89c7525ce9
commit 32a3542f79
5 changed files with 87 additions and 6 deletions
+64
View File
@@ -550,3 +550,67 @@ export const getDocumentTypeFromFilename = (filename) => {
return doctypeCode;
};
export const updateLinks = (jsonObject) => {
const wrapPlainUrlsInAnchorTags = (htmlString) => {
return htmlString
.replace(
/(?<=^|>|\s)(?=\S)(?:https?:\/\/)?(?:www\.)?[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(?:\/[^\s]*)?(?=\s|<|$)/g,
(match) => {
// If the match is already wrapped in <a> tag, return it as is
if (match.includes('<a href="') || match.includes("<a ")) {
return match;
}
// Check if the URL starts with http:// or https://, else prepend http://
const url =
match.startsWith("http://") ||
match.startsWith("https://")
? match
: "https://" + match;
// Return the URL wrapped in <a> tag
return `<a href="${url}" rel="noopener noreferrer" target="_blank">${match}</a>`;
}
)
.replace(
/<a [^>]*><a [^>]*>(.*?)<\/a><\/a>/g,
(match, innerContent) => {
return `<a href="${innerContent}" rel="noopener noreferrer" target="_blank">${innerContent}</a>`;
}
);
};
// Helper function to ensure that any href attributes in <a> tags have https/http
const ensureHttpsInLinks = (inputString) => {
// Match <a> tags with href attributes and check if they lack a scheme (http:// or https://)
return inputString.replace(
/<a [^>]*href=["']([^"']*)["'][^>]*>/g,
(match, url) => {
// If the URL doesn't already have a scheme (http:// or https://), add https://
if (!/^https?:\/\//.test(url)) {
const newUrl = `https://${url}`;
return match.replace(url, newUrl);
}
return match; // Return the unchanged anchor tag if it already has a scheme
}
);
};
// Iterate through all properties of the JSON object
Object.keys(jsonObject).forEach((key) => {
const value = jsonObject[key];
// If the value is a string and contains plain URLs that are not wrapped
if (typeof value === "string") {
// Step 1: Wrap plain URLs in anchor tags if not already wrapped
let updatedValue = wrapPlainUrlsInAnchorTags(value);
// Step 2: Ensure that hrefs in anchor tags have https:// or http://
updatedValue = ensureHttpsInLinks(updatedValue);
// Assign the updated value back to the key
jsonObject[key] = updatedValue;
}
});
return jsonObject;
};