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");
+}