rep defect 42,questioinnaire defect 67, enf defect 16
This commit is contained in:
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user