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, `