Merge pull request #794 from lonerOrz/feat/custombutton

feat: Tooltip supports rich text parsing
This commit is contained in:
Lemmy
2025-11-18 18:49:52 -05:00
committed by GitHub
3 changed files with 29 additions and 4 deletions
+23 -3
View File
@@ -159,7 +159,7 @@ Item {
const parsed = JSON.parse(lineToParse);
const text = parsed.text || "";
const icon = parsed.icon || "";
const tooltip = parsed.tooltip || "";
let tooltip = parsed.tooltip || "";
if (checkCollapse(text)) {
_dynamicText = "";
@@ -170,7 +170,8 @@ Item {
_dynamicText = text;
_dynamicIcon = icon;
_dynamicTooltip = tooltip;
_dynamicTooltip = toHtml(tooltip);
return;
} catch (e) {
Logger.w("CustomButton", `Failed to parse JSON. Content: "${lineToParse}"`);
@@ -186,7 +187,7 @@ Item {
_dynamicText = contentStr;
_dynamicIcon = "";
_dynamicTooltip = "";
_dynamicTooltip = toHtml(contentStr);
}
function checkCollapse(text) {
@@ -245,6 +246,25 @@ Item {
}
}
function toHtml(str) {
const htmlRegex = /<\/?[a-zA-Z][\s\S]*>/;
if (htmlRegex.test(str)) {
return str;
}
const escaped = str
.replace(/&/g, "&amp;")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;")
.replace(/"/g, "&quot;")
.replace(/'/g, "&#39;");
const withBreaks = escaped.replace(/\r\n|\r|\n/g, "<br/>");
return withBreaks;
}
function runTextCommand() {
if (!textCommand || textCommand.length === 0)
return;