mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-08-01 19:18:28 -04:00
196c421b75
commit 051b7576f7ed31bbfbc58620e2eadfee41dbbac3 Author: purian23 <purian23@gmail.com> Date: Sun Feb 15 16:38:45 2026 -0500 Height for realz commit 7784488a61a3a66e03ea2b387ca1e9da2f5e02fd Author: purian23 <purian23@gmail.com> Date: Sun Feb 15 16:34:09 2026 -0500 Fix height and truncate text/URLs commit 31b328d428b6cb1266aeb890eef052f003379a32 Author: bbedward <bbedward@gmail.com> Date: Sun Feb 15 16:25:57 2026 -0500 notifications: handle URL encoding in markdown2html commit dbb04f74a2ab52751f48bd851e74a79a3549c68a Author: bbedward <bbedward@gmail.com> Date: Sun Feb 15 16:10:20 2026 -0500 notifications: more comprehensive decoder commit b29c7192c2b27d8b3e01a08dbad7656029abf673 Author: bbedward <bbedward@gmail.com> Date: Sun Feb 15 15:51:37 2026 -0500 notifications: html unescape commit 8a48fa11ecfffa6588807a736c897d247167b3cc Author: purian23 <purian23@gmail.com> Date: Sun Feb 15 15:04:33 2026 -0500 Add expressive curve on init toast commit ee124f5e04f39435b7c8cbaabc82f89a689a3847 Author: purian23 <purian23@gmail.com> Date: Sun Feb 15 15:02:16 2026 -0500 Expressive curves on swipe & btn height commit 0fce90463567be6b01c4a316bc489baffdaa4602 Author: purian23 <purian23@gmail.com> Date: Sun Feb 15 13:40:02 2026 -0500 Provide bottom button clearance commit 00d3829999492ab1b698a0d6c3079e53f510f725 Author: bbedward <bbedward@gmail.com> Date: Sun Feb 15 13:24:31 2026 -0500 notifications: cleanup popup display logic commit fd05768059db8abda8a33ae8f47caf962c6aefaa Author: purian23 <purian23@gmail.com> Date: Sun Feb 15 01:00:55 2026 -0500 Add Privacy Mode - Smoother notification expansions - Shadow & Privacy Toggles commit 0dba11d845871eeaa969571e6bede56f984655c7 Author: purian23 <purian23@gmail.com> Date: Sat Feb 14 22:48:46 2026 -0500 Further M3 enhancements commit 949c216964b87c1ae265854ef1886b5b4990fd0d Author: purian23 <purian23@gmail.com> Date: Sat Feb 14 19:59:38 2026 -0500 Right-Click to set Rules on Notifications directly commit 62bc25782cc1dcc5f71e3c3718d7eefbcc88029e Author: bbedward <bbedward@gmail.com> Date: Fri Feb 13 21:44:27 2026 -0500 notifications: fix compact spacing, reveal header bar, add bottom center position, pointing hand cursor fix commit ed495d4396b52df2b44eb96bbfd3dea1565f8458 Author: purian23 <purian23@gmail.com> Date: Fri Feb 13 20:25:40 2026 -0500 Tighten init toast commit ebe38322a03956b864171a4fdf6986c97befbd34 Author: purian23 <purian23@gmail.com> Date: Fri Feb 13 20:09:59 2026 -0500 Update more m3 baselines & spacing commit b1735bb7013a7c96917597e83d7f5433e528a735 Author: purian23 <purian23@gmail.com> Date: Fri Feb 13 14:10:05 2026 -0500 Expand rules on-Click commit 9f13546b4d9df991da91ed0f3eedccd32747530e Author: purian23 <purian23@gmail.com> Date: Fri Feb 13 12:59:29 2026 -0500 Add Notification Rules - Additional right-click ops - Allow for 3rd boy line on init notification popup commit be133b73c7c0781cde74258da2a455d14bc9feea Author: purian23 <purian23@gmail.com> Date: Fri Feb 13 10:10:03 2026 -0500 Truncate long title in groups commit 4fc275bead670d5485a7cfb0402e38057efe6443 Author: bbedward <bbedward@gmail.com> Date: Thu Feb 12 23:27:34 2026 -0500 notification: expand/collapse animation adjustment commit 00e6172a6888cd08781c2b321ded2d3c359dbf18 Author: purian23 <purian23@gmail.com> Date: Thu Feb 12 22:50:11 2026 -0500 Fix global warnings commit 0772f6deb7aa19bad3ee88a769e7b75d36d7f775 Author: purian23 <purian23@gmail.com> Date: Thu Feb 12 22:46:40 2026 -0500 Tweak expansion duration commit 0ffeed3ff0b25d54eca00166a3f77db6c4dc4c49 Author: purian23 <purian23@gmail.com> Date: Thu Feb 12 22:16:16 2026 -0500 notifications: Update Material 3 baselines - New right-click to mute option - New independent Notification Animation settings
118 lines
4.4 KiB
JavaScript
118 lines
4.4 KiB
JavaScript
.pragma library
|
|
// This exists only because I haven't been able to get linkColor to work with MarkdownText
|
|
// May not be necessary if that's possible tbh.
|
|
function markdownToHtml(text) {
|
|
if (!text) return "";
|
|
|
|
// Store code blocks and inline code to protect them from further processing
|
|
const codeBlocks = [];
|
|
const inlineCode = [];
|
|
let blockIndex = 0;
|
|
let inlineIndex = 0;
|
|
|
|
// First, extract and replace code blocks with placeholders
|
|
let html = text.replace(/```([\s\S]*?)```/g, (match, code) => {
|
|
// Trim leading and trailing blank lines only
|
|
const trimmedCode = code.replace(/^\n+|\n+$/g, '');
|
|
// Escape HTML entities in code
|
|
const escapedCode = trimmedCode.replace(/&/g, '&')
|
|
.replace(/</g, '<')
|
|
.replace(/>/g, '>');
|
|
codeBlocks.push(`<pre><code>${escapedCode}</code></pre>`);
|
|
return `\x00CODEBLOCK${blockIndex++}\x00`;
|
|
});
|
|
|
|
// Extract and replace inline code
|
|
html = html.replace(/`([^`]+)`/g, (match, code) => {
|
|
// Escape HTML entities in code
|
|
const escapedCode = code.replace(/&/g, '&')
|
|
.replace(/</g, '<')
|
|
.replace(/>/g, '>');
|
|
inlineCode.push(`<code>${escapedCode}</code>`);
|
|
return `\x00INLINECODE${inlineIndex++}\x00`;
|
|
});
|
|
|
|
// Extract plain URLs before escaping so & in query strings is preserved
|
|
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, '&')
|
|
.replace(/</g, '<')
|
|
.replace(/>/g, '>');
|
|
|
|
// Headers
|
|
html = html.replace(/^### (.*?)$/gm, '<h3>$1</h3>');
|
|
html = html.replace(/^## (.*?)$/gm, '<h2>$1</h2>');
|
|
html = html.replace(/^# (.*?)$/gm, '<h1>$1</h1>');
|
|
|
|
// Bold and italic (order matters!)
|
|
html = html.replace(/\*\*\*(.*?)\*\*\*/g, '<b><i>$1</i></b>');
|
|
html = html.replace(/\*\*(.*?)\*\*/g, '<b>$1</b>');
|
|
html = html.replace(/\*(.*?)\*/g, '<i>$1</i>');
|
|
html = html.replace(/___(.*?)___/g, '<b><i>$1</i></b>');
|
|
html = html.replace(/__(.*?)__/g, '<b>$1</b>');
|
|
html = html.replace(/_(.*?)_/g, '<i>$1</i>');
|
|
|
|
// Links
|
|
html = html.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2">$1</a>');
|
|
|
|
// Lists
|
|
html = html.replace(/^\* (.*?)$/gm, '<li>$1</li>');
|
|
html = html.replace(/^- (.*?)$/gm, '<li>$1</li>');
|
|
html = html.replace(/^\d+\. (.*?)$/gm, '<li>$1</li>');
|
|
|
|
// Wrap consecutive list items in ul/ol tags
|
|
html = html.replace(/(<li>[\s\S]*?<\/li>\s*)+/g, function(match) {
|
|
return '<ul>' + match + '</ul>';
|
|
});
|
|
|
|
// Restore extracted URLs as anchor tags (preserves raw & in href)
|
|
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
|
|
html = html.replace(/\x00CODEBLOCK(\d+)\x00/g, (match, index) => {
|
|
return codeBlocks[parseInt(index)];
|
|
});
|
|
|
|
html = html.replace(/\x00INLINECODE(\d+)\x00/g, (match, index) => {
|
|
return inlineCode[parseInt(index)];
|
|
});
|
|
|
|
// Line breaks (after code blocks are restored)
|
|
html = html.replace(/\n\n/g, '</p><p>');
|
|
html = html.replace(/\n/g, '<br/>');
|
|
|
|
// Wrap in paragraph tags if not already wrapped
|
|
if (!html.startsWith('<')) {
|
|
html = '<p>' + html + '</p>';
|
|
}
|
|
|
|
// Clean up the final HTML
|
|
// Remove <br/> tags immediately before block elements
|
|
html = html.replace(/<br\/>\s*<pre>/g, '<pre>');
|
|
html = html.replace(/<br\/>\s*<ul>/g, '<ul>');
|
|
html = html.replace(/<br\/>\s*<h[1-6]>/g, '<h$1>');
|
|
|
|
// Remove empty paragraphs
|
|
html = html.replace(/<p>\s*<\/p>/g, '');
|
|
html = html.replace(/<p>\s*<br\/>\s*<\/p>/g, '');
|
|
|
|
// Remove excessive line breaks
|
|
html = html.replace(/(<br\/>){3,}/g, '<br/><br/>'); // Max 2 consecutive line breaks
|
|
html = html.replace(/(<\/p>)\s*(<p>)/g, '$1$2'); // Remove whitespace between paragraphs
|
|
|
|
// Remove leading/trailing whitespace
|
|
html = html.trim();
|
|
|
|
return html;
|
|
}
|