Vanessa 2022-12-17 18:53:54 +08:00
parent 41c9db0069
commit b03f51a369
2 changed files with 105 additions and 10 deletions

View File

@ -1,21 +1,100 @@
import {fetchPost} from "../util/fetch"; import {fetchPost} from "../util/fetch";
import {Dialog} from "../dialog"; import {Dialog} from "../dialog";
import {Protyle} from "../protyle";
import {Constants} from "../constants";
import {disabledProtyle, onGet} from "../protyle/util/onGet";
import {hasClosestByClassName} from "../protyle/util/hasClosest";
import {escapeHtml} from "../util/escape";
const genItem = (data: [], type: "add" | "update" | "remove") => { const genItem = (data: [], data2?: { title: string, fileID: string }[]) => {
if (!data || data.length === 0) { if (!data || data.length === 0) {
return `<li style="padding-left: 44px;" class="b3-list--empty">${window.siyuan.languages.emptyContent}</li>` return `<li style="padding-left: 44px;" class="b3-list--empty">${window.siyuan.languages.emptyContent}</li>`
} }
let html = ""; let html = "";
data.forEach((item: { id: string, path: string }) => { data.forEach((item: { title: string, fileID: string }, index) => {
html += `<li style="padding-left: 44px;" class="b3-list-item" data-id="${item.id}"><span class="b3-list-item__text">${item.path}</span></li>`; let id2 = "";
if (data2) {
id2 = `data-id2="${data2[index].fileID}"`;
}
html += `<li style="padding-left: 44px;" class="b3-list-item" ${id2} data-id="${item.fileID}">
<span class="b3-list-item__text">${escapeHtml(item.title)}</span>
</li>`;
}) })
return html; return html;
} }
let leftEditor: Protyle;
let rightEditor: Protyle;
const renderCompare = (element: HTMLElement) => { const renderCompare = (element: HTMLElement) => {
fetchPost("/api/repo/openRepoSnapshotDoc", {id: element.getAttribute("data-id")}, (response) => { const listElement = hasClosestByClassName(element, "b3-dialog__diff")
if (!listElement) {
return;
}
const leftElement = listElement.nextElementSibling.firstElementChild;
const rightElement = listElement.nextElementSibling.lastElementChild;
if (!leftEditor) {
leftEditor = new Protyle(leftElement.lastElementChild as HTMLElement, {
blockId: "",
action: [Constants.CB_GET_HISTORY],
render: {
background: false,
title: false,
gutter: false,
breadcrumb: false,
breadcrumbDocName: false,
breadcrumbContext: false,
},
typewriterMode: false,
after(editor) {
disabledProtyle(editor.protyle);
}
});
rightEditor = new Protyle(rightElement.lastElementChild as HTMLElement, {
blockId: "",
action: [Constants.CB_GET_HISTORY],
render: {
background: false,
title: false,
gutter: false,
breadcrumb: false,
breadcrumbDocName: false,
breadcrumbContext: false,
},
typewriterMode: false,
after(editor) {
disabledProtyle(editor.protyle);
}
});
}
fetchPost("/api/repo/openRepoSnapshotDoc", {id: element.getAttribute("data-id")}, (response) => {
if (response.data.isLargeDoc) {
(leftElement.firstElementChild as HTMLTextAreaElement).value = response.data.content;
leftElement.firstElementChild.classList.remove("fn__none");
leftElement.lastElementChild.classList.add("fn__none");
} else {
leftElement.firstElementChild.classList.add("fn__none");
leftElement.lastElementChild.classList.remove("fn__none");
onGet(response, leftEditor.protyle, [Constants.CB_GET_HISTORY, Constants.CB_GET_HTML]);
}
}) })
const id2 = element.getAttribute("data-id2")
if (id2) {
rightElement.classList.remove("fn__none");
fetchPost("/api/repo/openRepoSnapshotDoc", {id: id2}, (response) => {
if (response.data.isLargeDoc) {
(rightElement.firstElementChild as HTMLTextAreaElement).value = response.data.content;
rightElement.firstElementChild.classList.remove("fn__none");
rightElement.lastElementChild.classList.add("fn__none");
} else {
rightElement.firstElementChild.classList.add("fn__none");
rightElement.lastElementChild.classList.remove("fn__none");
onGet(response, rightEditor.protyle, [Constants.CB_GET_HISTORY, Constants.CB_GET_HTML]);
}
})
} else {
rightElement.classList.add("fn__none");
}
} }
export const showDiff = (ids: string) => { export const showDiff = (ids: string) => {
@ -33,18 +112,18 @@ export const showDiff = (ids: string) => {
<span class="b3-list-item__toggle b3-list-item__toggle--hl"> <span class="b3-list-item__toggle b3-list-item__toggle--hl">
<svg class="b3-list-item__arrow"><use xlink:href="#iconRight"></use></svg> <svg class="b3-list-item__arrow"><use xlink:href="#iconRight"></use></svg>
</span> </span>
<span style="padding-left: 4px" class="b3-list-item__text">${window.siyuan.languages.addAttr}</span> <span style="padding-left: 4px" class="b3-list-item__text">${window.siyuan.languages.update}</span>
</li> </li>
<ul class="fn__none">${genItem(response.data.adds, "add")}</ul> <ul class="fn__none">${genItem(response.data.updatesRight, response.data.updatesLeft)}</ul>
</ul> </ul>
<ul class="b3-list b3-list--background"> <ul class="b3-list b3-list--background">
<li class="b3-list-item"> <li class="b3-list-item">
<span class="b3-list-item__toggle b3-list-item__toggle--hl"> <span class="b3-list-item__toggle b3-list-item__toggle--hl">
<svg class="b3-list-item__arrow"><use xlink:href="#iconRight"></use></svg> <svg class="b3-list-item__arrow"><use xlink:href="#iconRight"></use></svg>
</span> </span>
<span style="padding-left: 4px" class="b3-list-item__text">${window.siyuan.languages.update}</span> <span style="padding-left: 4px" class="b3-list-item__text">${window.siyuan.languages.addAttr}</span>
</li> </li>
<ul class="fn__none">${genItem(response.data.updates, "add")}</ul> <ul class="fn__none">${genItem(response.data.addsLeft)}</ul>
</ul> </ul>
<ul class="b3-list b3-list--background"> <ul class="b3-list b3-list--background">
<li class="b3-list-item"> <li class="b3-list-item">
@ -53,13 +132,26 @@ export const showDiff = (ids: string) => {
</span> </span>
<span style="padding-left: 4px" class="b3-list-item__text">${window.siyuan.languages.remove}</span> <span style="padding-left: 4px" class="b3-list-item__text">${window.siyuan.languages.remove}</span>
</li> </li>
<ul class="fn__none">${genItem(response.data.removes, "add")}</ul> <ul class="fn__none">${genItem(response.data.removesRight)}</ul>
</ul> </ul>
</div> </div>
<div class="fn__flex-1"></div> <div class="fn__flex-1 fn__flex">
<div class="fn__flex-1">
<textarea class="history__text fn__none"></textarea>
<div style="min-height: 100%;"></div>
</div>
<div class="fn__none fn__flex-1" style="border-left: 1px solid var(--b3-border-color);">
<textarea class="history__text fn__none"></textarea>
<div style="min-height: 100%;"></div>
</div>
</div>
</div>`, </div>`,
width: "80vw", width: "80vw",
height: "80vh", height: "80vh",
destroyCallback() {
leftEditor.destroy();
rightEditor.destroy();
}
}); });
dialog.element.addEventListener("click", (event) => { dialog.element.addEventListener("click", (event) => {
let target = event.target as HTMLElement; let target = event.target as HTMLElement;

View File

@ -296,6 +296,9 @@ export const openHistory = () => {
</div>`, </div>`,
width: "80vw", width: "80vw",
height: "80vh", height: "80vh",
destroyCallback() {
historyEditor.destroy();
}
}); });
const firstPanelElement = dialog.element.querySelector("#historyContainer [data-type=doc]") as HTMLElement; const firstPanelElement = dialog.element.querySelector("#historyContainer [data-type=doc]") as HTMLElement;