mirror of
https://github.com/streetwriters/notesnook.git
synced 2026-02-24 04:00:59 +01:00
feat: add improved dom filtering logic
This commit is contained in:
24
packages/tinymce-plugins/contenthandler/filters.js
Normal file
24
packages/tinymce-plugins/contenthandler/filters.js
Normal file
@@ -0,0 +1,24 @@
|
||||
const ATTRIBUTE_DELETE_FILTERS = [
|
||||
"[data-mce-selected]",
|
||||
"[data-mce-src]",
|
||||
"[data-mce-style]",
|
||||
"[data-mce-type]",
|
||||
];
|
||||
const ELEMENT_DELETE_FILTERS = ["[data-mce-bogus]", "[data-mce-bookmark]"];
|
||||
const ELEMENT_MODIFY_FILTERS = ["img[src]"];
|
||||
|
||||
export const QUERY = [
|
||||
...ATTRIBUTE_DELETE_FILTERS,
|
||||
...ELEMENT_DELETE_FILTERS,
|
||||
...ELEMENT_MODIFY_FILTERS,
|
||||
].join(",");
|
||||
|
||||
export const ATTRIBUTES = {
|
||||
strip: [
|
||||
"data-mce-selected",
|
||||
"data-mce-src",
|
||||
"data-mce-style",
|
||||
"data-mce-type",
|
||||
],
|
||||
elementDelete: ["data-mce-bogus", "data-mce-bookmark"],
|
||||
};
|
||||
@@ -1,4 +1,5 @@
|
||||
const { addPluginToPluginManager } = require("../utils");
|
||||
const { QUERY, ATTRIBUTES } = require("./filters");
|
||||
|
||||
function register(editor) {
|
||||
/**
|
||||
@@ -10,9 +11,7 @@ function register(editor) {
|
||||
editor.getHTML = async function () {
|
||||
const html = editor.getBody().innerHTML;
|
||||
const document = new DOMParser().parseFromString(html, "text/html");
|
||||
const elements = document.querySelectorAll(
|
||||
"img[src],[data-mce-bogus],[data-mce-selected]"
|
||||
);
|
||||
const elements = document.querySelectorAll(QUERY);
|
||||
for (let element of elements) {
|
||||
switch (element.nodeName) {
|
||||
case "IMG": {
|
||||
@@ -28,9 +27,12 @@ function register(editor) {
|
||||
image.src = datauri;
|
||||
}
|
||||
default: {
|
||||
if (element.hasAttribute("data-mce-bogus")) element.remove();
|
||||
else if (element.hasAttribute("data-mce-selected")) {
|
||||
element.removeAttribute("data-mce-selected");
|
||||
for (let attr of element.attributes) {
|
||||
if (ATTRIBUTES.strip.indexOf(attr.name) > -1)
|
||||
element.removeAttribute(attr.name);
|
||||
else if (ATTRIBUTES.elementDelete.indexOf(attr.name) > -1) {
|
||||
element.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user