From 424ed9c1df221e3dc7093b832918bc8906011c49 Mon Sep 17 00:00:00 2001 From: kingbri Date: Sat, 10 Jun 2023 14:09:29 -0400 Subject: [PATCH] Formatting: Ignore chat separators with markdown Some chat separators (or dinkuses) cause markdown to be rendered on the chat window. Examples include "###" -> h3 and "---" -> metadata. This can look jarring to the end user as it can interrupt a pleasant chat experience. Therefore, it makes sense to ignore these lines with div tags that indicate to Showdown that this string doesn't need markdown. Signed-off-by: kingbri --- public/script.js | 9 +++++++++ public/scripts/power-user.js | 1 + public/scripts/showdown-dinkus.js | 19 +++++++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 public/scripts/showdown-dinkus.js diff --git a/public/script.js b/public/script.js index a296f309f..f8147a4e8 100644 --- a/public/script.js +++ b/public/script.js @@ -148,6 +148,7 @@ import { } from "./scripts/secrets.js"; import { EventEmitter } from './scripts/eventemitter.js'; import { context_settings, loadContextTemplatesFromSettings } from "./scripts/context-template.js"; +import { dinkusExtension } from "./scripts/showdown-dinkus.js"; //exporting functions and vars for mods export { @@ -533,6 +534,14 @@ function reloadMarkdownProcessor(render_formulas = false) { }); } + // Inject the dinkus extension after creating the converter + // Maybe move this into power_user init? + setTimeout(() => { + if (power_user) { + converter.addExtension(dinkusExtension(), 'dinkus'); + } + }, 1) + return converter; } diff --git a/public/scripts/power-user.js b/public/scripts/power-user.js index 376136782..e6a377398 100644 --- a/public/scripts/power-user.js +++ b/public/scripts/power-user.js @@ -933,6 +933,7 @@ $(document).ready(() => { $("#custom_chat_separator").on('input', function () { power_user.custom_chat_separator = $(this).val(); saveSettingsDebounced(); + reloadMarkdownProcessor(power_user.render_formulas); }); $("#multigen").change(function () { diff --git a/public/scripts/showdown-dinkus.js b/public/scripts/showdown-dinkus.js new file mode 100644 index 000000000..597e40965 --- /dev/null +++ b/public/scripts/showdown-dinkus.js @@ -0,0 +1,19 @@ +import { power_user } from './power-user.js'; + +// Showdown extension to make chat separators (dinkuses) ignore markdown formatting +export const dinkusExtension = () => { + if (!power_user) { + console.log("Showdown-dinkus extension: power_user wasn't found! Returning."); + return [] + } + + // Create an escaped sequence so the regex can work with any character + const savedDinkus = power_user.custom_chat_separator + const escapedDinkus = savedDinkus.split('').map((e) => `\\${e}`).join(''); + const replaceRegex = new RegExp(`^(${escapedDinkus})\n`, "gm") + return [{ + type: "lang", + regex: replaceRegex, + replace: (match) => match.replace(replaceRegex, `
${savedDinkus}
`).trim() + }]; +} \ No newline at end of file