diff --git a/app/src/card/openCard.ts b/app/src/card/openCard.ts index d30f1b8f9..21e5be9a4 100644 --- a/app/src/card/openCard.ts +++ b/app/src/card/openCard.ts @@ -1,39 +1,112 @@ import {Dialog} from "../dialog"; import {fetchPost} from "../util/fetch"; import {isMobile} from "../util/functions"; +import {Protyle} from "../protyle"; +import {Constants} from "../constants"; +import {disabledProtyle, onGet} from "../protyle/util/onGet"; export const openCard = () => { let decksHTML = ''; fetchPost("/api/riff/getRiffDecks", {}, (response) => { - response.data.forEach((deck:{id:string, name:string}) => { + response.data.forEach((deck: { id: string, name: string }) => { decksHTML += ``; }) - fetchPost("/api/riff/getRiffDueCards", {deckID:""}, (cardsResponse) => { + fetchPost("/api/riff/getRiffDueCards", {deckID: ""}, (cardsResponse) => { + let blocks = cardsResponse.data; + let countHTML = '' + let index = 0 + if (blocks.length > 0) { + countHTML = `1/${blocks.length}` + } else { + countHTML = window.siyuan.languages.noDueCard + } const dialog = new Dialog({ title: window.siyuan.languages.riffCard, - content:`
+ content: `
- + -
${cardsResponse.data}
+
+ ${countHTML} +
- + - + - + - +
`, width: isMobile() ? "80vw" : "50vw", height: "70vh", }) + const editor = new Protyle(dialog.element.querySelector("[data-type='render']") as HTMLElement, { + blockId: "", + action: [Constants.CB_GET_HISTORY], + render: { + background: false, + title: false, + gutter: false, + breadcrumb: false, + breadcrumbDocName: false, + breadcrumbContext: false, + }, + typewriterMode: false + }); + disabledProtyle(editor.protyle); + fetchPost("/api/riff/renderRiffCard", {id: blocks[index]}, (response) => { + onGet(response, editor.protyle, [Constants.CB_GET_HISTORY, Constants.CB_GET_HTML]); + }); dialog.element.setAttribute("data-key", window.siyuan.config.keymap.general.riffCard.custom) - dialog.element.querySelector("select").addEventListener("change", (event) => { - + const countElement = dialog.element.querySelector('[data-type="count"]') + const selectElement = dialog.element.querySelector("select") + selectElement.addEventListener("change", (event) => { + fetchPost("/api/riff/getRiffDueCards", {deckID: selectElement.value}, (cardsChangeResponse) => { + blocks = cardsChangeResponse.data; + index = 0 + let countHTML = '' + if (blocks.length > 0) { + countHTML = `1/${blocks.length}` + } else { + countHTML = window.siyuan.languages.noDueCard + } + countElement.innerHTML = countHTML; + fetchPost("/api/riff/renderRiffCard", {id: blocks[index]}, (response) => { + onGet(response, editor.protyle, [Constants.CB_GET_HISTORY, Constants.CB_GET_HTML]); + }); + }) + }) + dialog.element.addEventListener("click", (event) => { + let target = event.target as HTMLElement; + while (target && !target.isSameNode(dialog.element)) { + const type = target.getAttribute("data-type"); + if (["0", "1", "2", "3"].includes(type)) { + fetchPost("/api/riff/reviewRiffCard", { + deckID: selectElement.value, + blockID: blocks[index], + rating: parseInt(type) + }, (response) => { + index++ + if (index > blocks.length - 1) { + countElement.innerHTML = window.siyuan.languages.noDueCard + editor.protyle.element.classList.add("fn__none") + return; + } + countElement.firstElementChild.innerHTML = index.toString() + fetchPost("/api/riff/renderRiffCard", {id: blocks[index]}, (response) => { + onGet(response, editor.protyle, [Constants.CB_GET_HISTORY, Constants.CB_GET_HTML]); + }); + }) + event.preventDefault(); + event.stopPropagation(); + break; + } + target = target.parentElement; + } }) }) })