mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-04-13 09:12:08 -04:00
notifications: handle URL encoding in markdown2html
This commit is contained in:
@@ -32,8 +32,15 @@ function markdownToHtml(text) {
|
|||||||
return `\x00INLINECODE${inlineIndex++}\x00`;
|
return `\x00INLINECODE${inlineIndex++}\x00`;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Now process everything else
|
// Extract plain URLs before escaping so & in query strings is preserved
|
||||||
// Escape HTML entities (but not in code blocks)
|
const urls = [];
|
||||||
|
let urlIndex = 0;
|
||||||
|
html = html.replace(/(^|[\s])((?:https?|file):\/\/[^\s]+)/gm, (match, prefix, url) => {
|
||||||
|
urls.push(url);
|
||||||
|
return prefix + `\x00URL${urlIndex++}\x00`;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Escape HTML entities (but not in code blocks or URLs)
|
||||||
html = html.replace(/&/g, '&')
|
html = html.replace(/&/g, '&')
|
||||||
.replace(/</g, '<')
|
.replace(/</g, '<')
|
||||||
.replace(/>/g, '>');
|
.replace(/>/g, '>');
|
||||||
@@ -64,8 +71,12 @@ function markdownToHtml(text) {
|
|||||||
return '<ul>' + match + '</ul>';
|
return '<ul>' + match + '</ul>';
|
||||||
});
|
});
|
||||||
|
|
||||||
// Detect plain URLs and wrap them in anchor tags (but not inside existing <a> or markdown links)
|
// Restore extracted URLs as anchor tags (preserves raw & in href)
|
||||||
html = html.replace(/(^|[^"'>])((https?|file):\/\/[^\s<]+)/g, '$1<a href="$2">$2</a>');
|
html = html.replace(/\x00URL(\d+)\x00/g, (_, index) => {
|
||||||
|
const url = urls[parseInt(index)];
|
||||||
|
const display = url.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
||||||
|
return `<a href="${url}">${display}</a>`;
|
||||||
|
});
|
||||||
|
|
||||||
// Restore code blocks and inline code BEFORE line break processing
|
// Restore code blocks and inline code BEFORE line break processing
|
||||||
html = html.replace(/\x00CODEBLOCK(\d+)\x00/g, (match, index) => {
|
html = html.replace(/\x00CODEBLOCK(\d+)\x00/g, (match, index) => {
|
||||||
|
|||||||
@@ -980,6 +980,13 @@ Singleton {
|
|||||||
return "";
|
return "";
|
||||||
if (/<\/?[a-z][\s\S]*>/i.test(body))
|
if (/<\/?[a-z][\s\S]*>/i.test(body))
|
||||||
return body;
|
return body;
|
||||||
|
|
||||||
|
// Decode percent-encoded URLs (e.g. https%3A%2F%2F → https://)
|
||||||
|
body = body.replace(/\bhttps?%3A%2F%2F[^\s]+/gi, match => {
|
||||||
|
try { return decodeURIComponent(match); }
|
||||||
|
catch (e) { return match; }
|
||||||
|
});
|
||||||
|
|
||||||
if (/&(#\d+|#x[0-9a-fA-F]+|[a-zA-Z][a-zA-Z0-9]+);/.test(body)) {
|
if (/&(#\d+|#x[0-9a-fA-F]+|[a-zA-Z][a-zA-Z0-9]+);/.test(body)) {
|
||||||
const decoded = _decodeEntities(body);
|
const decoded = _decodeEntities(body);
|
||||||
if (/<\/?[a-z][\s\S]*>/i.test(decoded))
|
if (/<\/?[a-z][\s\S]*>/i.test(decoded))
|
||||||
|
|||||||
Reference in New Issue
Block a user