From f27c285373d033647518b36956d71108858a5274 Mon Sep 17 00:00:00 2001 From: Vanessa Date: Wed, 12 Apr 2023 09:26:19 +0800 Subject: [PATCH] :art: https://github.com/siyuan-note/siyuan/issues/7943 --- app/src/assets/scss/business/_card.scss | 1 + app/src/card/openCard.ts | 89 ++++++++++++++++++------- 2 files changed, 66 insertions(+), 24 deletions(-) diff --git a/app/src/assets/scss/business/_card.scss b/app/src/assets/scss/business/_card.scss index 15b58e13a..012834f23 100644 --- a/app/src/assets/scss/business/_card.scss +++ b/app/src/assets/scss/business/_card.scss @@ -23,6 +23,7 @@ text-align: center; background-color: var(--b3-theme-background); font-size: 16px; + align-items: center; & > div { font-size: 64px; diff --git a/app/src/card/openCard.ts b/app/src/card/openCard.ts index 05f67da91..9ba1db614 100644 --- a/app/src/card/openCard.ts +++ b/app/src/card/openCard.ts @@ -30,8 +30,8 @@ export const openCard = () => { }); }; -export const openCardByData = (cardsData: ICard[], html = "") => { - let blocks = cardsData; +export const openCardByData = (cardsData: { cards: ICard[], unreviewedCount: number }, html = "") => { + let blocks = cardsData.cards; let index = 0; if (blocks.length > 0) { html += `
@@ -136,21 +136,8 @@ export const openCardByData = (cardsData: ICard[], html = "") => { const actionElements = dialog.element.querySelectorAll(".card__action"); const selectElement = dialog.element.querySelector("select"); dialog.element.addEventListener("click", (event) => { - const fullscreenElement = hasClosestByAttribute(event.target as HTMLElement, "data-type", "fullscreen"); - if (fullscreenElement) { - fullscreen(dialog.element.querySelector(".card__main"), - dialog.element.querySelector('[data-type="fullscreen"]')); - event.stopPropagation(); - event.preventDefault(); - return; - } - const closeElement = hasClosestByAttribute(event.target as HTMLElement, "data-type", "close"); - if (closeElement) { - dialog.destroy(); - event.stopPropagation(); - event.preventDefault(); - return; - } + const target = event.target as HTMLElement; + const titleElement = countElement.previousElementSibling; let type = ""; if (typeof event.detail === "string") { if (event.detail === "1" || event.detail === "j") { @@ -168,9 +155,47 @@ export const openCardByData = (cardsData: ICard[], html = "") => { } else if (event.detail === "0") { type = "-3"; } + } else { + const fullscreenElement = hasClosestByAttribute(target, "data-type", "fullscreen"); + if (fullscreenElement) { + fullscreen(dialog.element.querySelector(".card__main"), + dialog.element.querySelector('[data-type="fullscreen"]')); + event.stopPropagation(); + event.preventDefault(); + return; + } + const closeElement = hasClosestByAttribute(target, "data-type", "close"); + if (closeElement) { + dialog.destroy(); + event.stopPropagation(); + event.preventDefault(); + return; + } + const newroundElement = hasClosestByAttribute(target, "data-type", "newround"); + if (newroundElement) { + fetchPost(selectElement ? "/api/riff/getRiffDueCards" : + (titleElement.getAttribute("data-id") ? "/api/riff/getTreeRiffDueCards" : "/api/riff/getNotebookRiffDueCards"), { + rootID: titleElement.getAttribute("data-id"), + deckID: selectElement?.value, + notebook: titleElement.getAttribute("data-notebookid"), + }, (treeCards) => { + index = 0; + blocks = treeCards.data.cards; + nextCard({ + countElement, + editor, + actionElements, + index, + blocks + }); + }) + event.stopPropagation(); + event.preventDefault(); + return; + } } if (!type) { - const buttonElement = hasClosestByClassName(event.target as HTMLElement, "b3-button"); + const buttonElement = hasClosestByClassName(target, "b3-button"); if (buttonElement) { type = buttonElement.getAttribute("data-type"); } @@ -227,7 +252,6 @@ export const openCardByData = (cardsData: ICard[], html = "") => { /// #endif index++; if (index > blocks.length - 1) { - const titleElement = countElement.previousElementSibling; fetchPost(selectElement ? "/api/riff/getRiffDueCards" : (titleElement.getAttribute("data-id") ? "/api/riff/getTreeRiffDueCards" : "/api/riff/getNotebookRiffDueCards"), { rootID: titleElement.getAttribute("data-id"), @@ -236,9 +260,13 @@ export const openCardByData = (cardsData: ICard[], html = "") => { reviewedCards: blocks }, (treeCards) => { index = 0; - blocks = treeCards.data; - if (treeCards.data.length === 0) { - allDone(countElement, editor, actionElements); + blocks = treeCards.data.cards; + if (blocks.length === 0) { + if (treeCards.data.unreviewedCount > 0) { + newRound(countElement, editor, actionElements); + } else { + allDone(countElement, editor, actionElements); + } } else { nextCard({ countElement, @@ -266,7 +294,7 @@ export const openCardByData = (cardsData: ICard[], html = "") => { } selectElement.addEventListener("change", () => { fetchPost("/api/riff/getRiffDueCards", {deckID: selectElement.value}, (cardsChangeResponse) => { - blocks = cardsChangeResponse.data; + blocks = cardsChangeResponse.data.blocks; index = 0; if (blocks.length > 0) { nextCard({ @@ -319,7 +347,20 @@ const nextCard = (options: { const allDone = (countElement: Element, editor: Protyle, actionElements: NodeListOf) => { countElement.classList.add("fn__none"); editor.protyle.element.classList.add("fn__none"); - editor.protyle.element.nextElementSibling.classList.remove("fn__none"); + const emptyElement = editor.protyle.element.nextElementSibling + emptyElement.innerHTML = `
🔮
${window.siyuan.languages.noDueCard}` + emptyElement.classList.remove("fn__none"); actionElements[0].classList.add("fn__none"); actionElements[1].classList.add("fn__none"); }; + +const newRound = (countElement: Element, editor: Protyle, actionElements: NodeListOf) => { + countElement.classList.add("fn__none"); + editor.protyle.element.classList.add("fn__none"); + const emptyElement = editor.protyle.element.nextElementSibling; + emptyElement.innerHTML = `
🆕
+`; + emptyElement.classList.remove("fn__none"); + actionElements[0].classList.add("fn__none"); + actionElements[1].classList.add("fn__none"); +}