siyuan/app/src/protyle/toolbar/util.ts

60 lines
2 KiB
TypeScript
Raw Normal View History

import {fetchPost} from "../../util/fetch";
export const previewTemplate = (pathString: string, element: Element, parentId: string) => {
if (!pathString) {
2022-08-18 23:47:22 +08:00
element.innerHTML = "";
return;
}
fetchPost("/api/template/render", {
id: parentId,
path: pathString
}, (response) => {
element.innerHTML = `<div class="protyle-wysiwyg" style="padding: 8px">${response.data.content.replace(/contenteditable="true"/g, "")}</div>`;
2022-08-18 23:47:22 +08:00
});
};
const mergeElement = (a: Element, b: Element, after = true) => {
a.setAttribute("data-type", a.getAttribute("data-type").replace("search-mark", "").trim());
b.setAttribute("data-type", b.getAttribute("data-type").replace("search-mark", "").trim());
2023-03-07 15:06:50 +08:00
const attributes = a.attributes;
let isMatch = true;
for (let i = 0; i < attributes.length; i++) {
if (b.getAttribute(attributes[i].name) !== attributes[i].value) {
2023-03-07 15:06:50 +08:00
isMatch = false;
}
}
if (isMatch) {
if (after) {
2023-03-07 15:06:50 +08:00
a.innerHTML = a.innerHTML + b.innerHTML;
} else {
2023-03-07 15:06:50 +08:00
a.innerHTML = b.innerHTML + a.innerHTML;
}
b.remove();
}
return isMatch;
2023-03-07 15:06:50 +08:00
};
export const removeSearchMark = (element: HTMLElement) => {
let previousElement = element.previousSibling as HTMLElement;
while (previousElement && previousElement.nodeType !== 3) {
if (!mergeElement(element, previousElement, false)) {
break;
} else {
previousElement = element.previousSibling as HTMLElement;
}
}
let nextElement = element.nextSibling as HTMLElement;
while (nextElement && nextElement.nodeType !== 3) {
if (!mergeElement(element, nextElement)) {
break;
} else {
nextElement = element.nextSibling as HTMLElement;
}
}
if (element.getAttribute("data-type").includes("search-mark")) {
element.setAttribute("data-type", element.getAttribute("data-type").replace("search-mark", "").trim());
}
2023-03-07 15:06:50 +08:00
};