WYSIWYG: Added filtering of page pointer elements

For #4474
This commit is contained in:
Dan Brown 2023-09-01 13:50:55 +01:00
parent c6d0e690f9
commit 4e6b74f2a1
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
2 changed files with 43 additions and 18 deletions

View File

@ -4,6 +4,7 @@ import {scrollToQueryString} from './scrolling';
import {listenForDragAndPaste} from './drop-paste-handling';
import {getPrimaryToolbar, registerAdditionalToolbars} from './toolbars';
import {registerCustomIcons} from './icons';
import {setupFilters} from './filters';
import {getPlugin as getCodeeditorPlugin} from './plugin-codeeditor';
import {getPlugin as getDrawioPlugin} from './plugin-drawio';
@ -147,23 +148,6 @@ 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', nodes => {
for (const node of nodes) {
if (node.parent && node.parent.name === 'code') {
const newline = window.tinymce.html.Node.create('#text');
newline.value = '\n';
node.replace(newline);
}
}
});
}
/**
* @param {WysiwygConfigOptions} options
* @return {function(Editor)}
@ -189,7 +173,7 @@ function getSetupCallback(options) {
});
editor.on('PreInit', () => {
setupBrFilter(editor);
setupFilters(editor);
});
// Custom handler hook

View File

@ -0,0 +1,41 @@
/**
* 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', nodes => {
for (const node of nodes) {
if (node.parent && node.parent.name === 'code') {
const newline = window.tinymce.html.Node.create('#text');
newline.value = '\n';
node.replace(newline);
}
}
});
}
/**
* Remove accidentally added pointer elements that are within the content.
* These could have accidentally been added via getting caught in range
* selection within page content.
* @param {Editor} editor
*/
function setupPointerFilter(editor) {
editor.parser.addNodeFilter('div', nodes => {
for (const node of nodes) {
if (node.attr('id') === 'pointer' || node.attr('class').includes('pointer')) {
node.remove();
}
}
});
}
/**
* Setup global default filters for the given editor instance.
* @param {Editor} editor
*/
export function setupFilters(editor) {
setupBrFilter(editor);
setupPointerFilter(editor);
}