Added wysiwyg filter to handle <br> tags within code blocks

This filters out <br> elements within code blocks and replaces them with
newlines. The editor started using <br>'s more harshley after some
configuration changes upon upgrading tinymce, in which we standardised
on forced br tags to avoid empty elements.

For #3327
This commit is contained in:
Dan Brown 2022-03-23 15:11:14 +00:00
parent d23b24b8db
commit dd7463259a
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9

View File

@ -114,6 +114,23 @@ function fetchCustomHeadContent() {
return headContentLines.slice(startLineIndex + 1, endLineIndex).join('\n');
}
/**
* Setup a serializer filter for <br> tags to ensure they're not rendered
* within code blocks and that we use newlines there instead.
* @param {Editor} editor
*/
function setupBrFilter(editor) {
editor.serializer.addNodeFilter('br', function(nodes) {
for (const node of nodes) {
if (node.parent && node.parent.name === 'code') {
const newline = new tinymce.html.Node.create('#text');
newline.value = '\n';
node.replace(newline);
}
}
});
}
/**
* @param {WysiwygConfigOptions} options
* @return {function(Editor)}
@ -131,6 +148,10 @@ function getSetupCallback(options) {
window.editor = editor;
});
editor.on('PreInit', () => {
setupBrFilter(editor);
});
function editorChange() {
const content = editor.getContent();
if (options.darkMode) {