diff --git a/app/src/card/makeCard.ts b/app/src/card/makeCard.ts
index 9ec3f8d41..6f0fe73f1 100644
--- a/app/src/card/makeCard.ts
+++ b/app/src/card/makeCard.ts
@@ -4,17 +4,10 @@ import {Dialog} from "../dialog";
import {isMobile} from "../util/functions";
import {hideMessage, showMessage} from "../dialog/message";
import {confirmDialog} from "../dialog/confirmDialog";
-import {Protyle} from "../protyle";
-import {getIconByType} from "../editor/getIcon";
-import {unicode2Emoji} from "../emoji";
-import {Constants} from "../constants";
-import {onGet} from "../protyle/util/onGet";
-import {addLoading} from "../protyle/ui/initUI";
-import {escapeHtml} from "../util/escape";
-import {getDisplayName, getNotebookName} from "../util/pathName";
import {hideElements} from "../protyle/ui/hideElements";
+import {viewCards} from "./viewCards";
-const genCardItem = (item: ICard) => {
+export const genCardItem = (item: ICard) => {
return `
@@ -177,187 +170,5 @@ export const makeCard = (nodeElement: Element[]) => {
});
};
-const viewCards = (deckID: string, title: string, sourceElement: HTMLElement) => {
- let pageIndex = 1;
- let edit:Protyle;
- fetchPost("/api/riff/getRiffCards", {deckID, page: pageIndex}, (response) => {
- const dialog = new Dialog({
- title,
- content: `
-
-
-
-
-
-
-
-
${pageIndex}/${response.data.pageCount || 1}
-
-
-
-
-
- ${renderViewItem(response.data.blocks)}
-
-
-
${window.siyuan.languages.emptyContent}
-
-
`,
- width: isMobile() ? "90vw" : "80vw",
- height: "80vh",
- destroyCallback() {
- if (edit) {
- edit.destroy();
- }
- }
- });
- if (response.data.blocks.length === 0) {
- return;
- }
- edit = new Protyle(dialog.element.querySelector("#cardPreview") as HTMLElement, {
- blockId: "",
- render: {
- gutter: true,
- breadcrumbDocName: true
- },
- });
- getArticle(edit, dialog.element.querySelector(".b3-list-item--focus")?.getAttribute("data-id"));
- const previousElement = dialog.element.querySelector('[data-type="previous"]');
- const nextElement = dialog.element.querySelector('[data-type="next"]');
- const listElement = dialog.element.querySelector(".b3-list--background");
- if (response.data.pageCount > 1) {
- nextElement.removeAttribute("disabled");
- }
- dialog.element.style.zIndex = "200";
- dialog.element.addEventListener("click", (event) => {
- let target = event.target as HTMLElement;
- while (target && !dialog.element.isSameNode(target)) {
- const type = target.getAttribute("data-type");
- if (type === "previous") {
- if (pageIndex <= 1) {
- return;
- }
- pageIndex--;
- if (pageIndex <= 1) {
- previousElement.setAttribute("disabled", "disabled");
- }
- fetchPost("/api/riff/getRiffCards", {deckID, page: pageIndex}, (cardsResponse) => {
- if (pageIndex === cardsResponse.data.pageCount) {
- nextElement.setAttribute("disabled", "disabled");
- } else if (cardsResponse.data.pageCount > 1) {
- nextElement.removeAttribute("disabled");
- }
- nextElement.nextElementSibling.nextElementSibling.textContent = `${pageIndex}/${cardsResponse.data.pageCount || 1}`;
- listElement.innerHTML = renderViewItem(cardsResponse.data.blocks);
- getArticle(edit, dialog.element.querySelector(".b3-list-item--focus")?.getAttribute("data-id"));
- });
- event.stopPropagation();
- event.preventDefault();
- break;
- } else if (type === "next") {
- if (pageIndex >= response.data.pageCount) {
- return;
- }
- pageIndex++;
- previousElement.removeAttribute("disabled");
- fetchPost("/api/riff/getRiffCards", {deckID, page: pageIndex}, (cardsResponse) => {
- if (pageIndex === cardsResponse.data.pageCount) {
- nextElement.setAttribute("disabled", "disabled");
- } else if (cardsResponse.data.pageCount > 1) {
- nextElement.removeAttribute("disabled");
- }
- nextElement.nextElementSibling.nextElementSibling.textContent = `${pageIndex}/${cardsResponse.data.pageCount || 1}`;
- listElement.innerHTML = renderViewItem(cardsResponse.data.blocks);
- getArticle(edit, dialog.element.querySelector(".b3-list-item--focus")?.getAttribute("data-id"));
- });
- event.stopPropagation();
- event.preventDefault();
- break;
- } else if (type === "card-item") {
- getArticle(edit, target.getAttribute("data-id"));
- listElement.querySelector(".b3-list-item--focus")?.classList.remove("b3-list-item--focus");
- target.classList.add("b3-list-item--focus");
- event.stopPropagation();
- event.preventDefault();
- break;
- } else if (type === "remove") {
- fetchPost("/api/riff/removeRiffCards", {
- deckID,
- blockIDs: [target.getAttribute("data-id")]
- }, (removeResponse) => {
- let nextElment = target.parentElement.nextElementSibling;
- if (!nextElment) {
- nextElment = target.parentElement.previousElementSibling;
- }
- if (!nextElment && target.parentElement.parentElement.childElementCount > 1) {
- nextElment = target.parentElement.parentElement.firstElementChild;
- }
- if (!nextElment) {
- getArticle(edit, "");
- } else {
- getArticle(edit, nextElment.getAttribute("data-id"));
- listElement.querySelector(".b3-list-item--focus")?.classList.remove("b3-list-item--focus");
- nextElment.classList.add("b3-list-item--focus");
- }
- target.parentElement.remove();
- sourceElement.outerHTML = genCardItem(removeResponse.data);
- });
- event.stopPropagation();
- event.preventDefault();
- break;
- }
- target = target.parentElement;
- }
- });
- });
-};
-const getArticle = (edit: Protyle, id: string) => {
- if (!id) {
- edit.protyle.element.classList.add("fn__none");
- edit.protyle.element.nextElementSibling.classList.remove("fn__none");
- return;
- }
- edit.protyle.element.classList.remove("fn__none");
- edit.protyle.element.nextElementSibling.classList.add("fn__none");
- edit.protyle.scroll.lastScrollTop = 0;
- addLoading(edit.protyle);
- fetchPost("/api/filetree/getDoc", {
- id,
- mode: 0,
- size: Constants.SIZE_GET_MAX,
- }, getResponse => {
- onGet(getResponse, edit.protyle, [Constants.CB_GET_ALL, Constants.CB_GET_HTML]);
- });
-};
-const renderViewItem = (blocks: IBlock[]) => {
- let listHTML = "";
- let isFirst = true;
- blocks.forEach((item: IBlock) => {
- if (item.type) {
- const hPath = escapeHtml(getNotebookName(item.box)) + getDisplayName(item.hPath, false);
- listHTML += `
-
-${unicode2Emoji(item.ial.icon, false, "b3-list-item__graphic", true)}
-${item.content}
-
-
-
-${hPath}
-
`;
- isFirst = false;
- } else {
- listHTML += `
-${item.content}
-
-
-
-
`;
- }
- });
- if (blocks.length === 0) {
- listHTML = `
${window.siyuan.languages.emptyContent}
`;
- }
- return listHTML;
-};
diff --git a/app/src/card/openCard.ts b/app/src/card/openCard.ts
index 8994c83e4..cacbd1547 100644
--- a/app/src/card/openCard.ts
+++ b/app/src/card/openCard.ts
@@ -4,7 +4,8 @@ import {isMobile} from "../util/functions";
import {Protyle} from "../protyle";
import {Constants} from "../constants";
import {onGet} from "../protyle/util/onGet";
-import {hasClosestByClassName} from "../protyle/util/hasClosest";
+import {hasClosestByAttribute, hasClosestByClassName} from "../protyle/util/hasClosest";
+import {viewCards} from "./viewCards";
export const openCard = () => {
const exit = window.siyuan.dialogs.find(item => {
@@ -33,7 +34,12 @@ export const openCard = () => {
content: `
-
${countHTML}
+
+
+
+
+
+
${countHTML}
@@ -65,7 +71,7 @@ export const openCard = () => {
`,
- width: isMobile() ? "96vw" : "50vw",
+ width: isMobile() ? "96vw" : "768px",
height: "70vh",
});
dialog.element.querySelector("input").focus();
@@ -123,6 +129,13 @@ export const openCard = () => {
});
});
dialog.element.addEventListener("click", (event) => {
+ const viewElement = hasClosestByAttribute(event.target as HTMLElement, "data-type", "view");
+ if (viewElement) {
+ viewCards(selectElement.value, selectElement.options[selectElement.selectedIndex].text);
+ event.preventDefault();
+ event.stopPropagation();
+ return;
+ }
let type = "";
if (typeof event.detail === "string") {
if (event.detail === "a") {
diff --git a/app/src/card/viewCards.ts b/app/src/card/viewCards.ts
new file mode 100644
index 000000000..f5e155093
--- /dev/null
+++ b/app/src/card/viewCards.ts
@@ -0,0 +1,201 @@
+import {Protyle} from "../protyle";
+import {fetchPost} from "../util/fetch";
+import {Dialog} from "../dialog";
+import {isMobile} from "../util/functions";
+import {escapeHtml} from "../util/escape";
+import {getDisplayName, getNotebookName} from "../util/pathName";
+import {getIconByType} from "../editor/getIcon";
+import {unicode2Emoji} from "../emoji";
+import {addLoading} from "../protyle/ui/initUI";
+import {Constants} from "../constants";
+import {onGet} from "../protyle/util/onGet";
+import {genCardItem} from "./makeCard";
+
+export const viewCards = (deckID: string, title: string, sourceElement?: HTMLElement) => {
+ let pageIndex = 1;
+ let edit:Protyle;
+ fetchPost("/api/riff/getRiffCards", {deckID, page: pageIndex}, (response) => {
+ const dialog = new Dialog({
+ title,
+ content: `