diff --git a/Modules/Bar/Widgets/CustomButton.qml b/Modules/Bar/Widgets/CustomButton.qml index 9cc000ba..c8b8c5e5 100644 --- a/Modules/Bar/Widgets/CustomButton.qml +++ b/Modules/Bar/Widgets/CustomButton.qml @@ -158,7 +158,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 = ""; @@ -169,7 +169,8 @@ Item { _dynamicText = text; _dynamicIcon = icon; - _dynamicTooltip = tooltip; + + _dynamicTooltip = toHtml(tooltip); return; } catch (e) { Logger.w("CustomButton", `Failed to parse JSON. Content: "${lineToParse}"`); @@ -185,7 +186,7 @@ Item { _dynamicText = contentStr; _dynamicIcon = ""; - _dynamicTooltip = ""; + _dynamicTooltip = toHtml(contentStr); } function checkCollapse(text) { @@ -244,6 +245,25 @@ Item { } } + function toHtml(str) { + const htmlRegex = /<\/?[a-zA-Z][\s\S]*>/; + + if (htmlRegex.test(str)) { + return str; + } + + const escaped = str + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); + + const withBreaks = escaped.replace(/\r\n|\r|\n/g, "
"); + + return withBreaks; + } + function runTextCommand() { if (!textCommand || textCommand.length === 0) return;