diff --git a/app/src/card/makeCard.ts b/app/src/card/makeCard.ts new file mode 100644 index 000000000..6dfc8804f --- /dev/null +++ b/app/src/card/makeCard.ts @@ -0,0 +1,96 @@ +import {focusByRange, getEditorRange} from "../protyle/util/selection"; +import {fetchPost} from "../util/fetch"; +import {Dialog} from "../dialog"; +import {isMobile} from "../util/functions"; +import {hideMessage, showMessage} from "../dialog/message"; + +const genCardItem = (item: { id: string, name: string }) => { + return `
  • +${item.name} + + + + + + +
  • ` +} + +export const makeCard = (nodeElement: Element[]) => { + const range = getEditorRange(nodeElement[0]); + fetchPost("/api/riff/getRiffDecks", {}, (response) => { + let html = '' + const ids: string[] = [] + nodeElement.forEach(item => { + ids.push(item.getAttribute("data-node-id")) + }) + response.data.forEach((item: { id: string, name: string }) => { + html += genCardItem(item) + }) + const dialog = new Dialog({ + width: isMobile() ? "80vw" : "50vw", + height: "70vh", + title: window.siyuan.languages.riffCard, + content: `
    +
    + + + +
    +
    + +
    `, + destroyCallback() { + focusByRange(range); + } + }); + dialog.element.addEventListener("click", (event) => { + let target = event.target as HTMLElement; + while (target && !target.isSameNode(dialog.element)) { + const type = target.getAttribute("data-type"); + if (type === "create") { + let msgId = "" + const inputElement = dialog.element.querySelector(".b3-text-field") as HTMLInputElement; + if (inputElement.value) { + if (msgId) { + hideMessage(msgId); + } + fetchPost("/api/riff/createRiffDeck", {name: inputElement.value}, (response) => { + dialog.element.querySelector(".b3-list").insertAdjacentHTML("afterbegin", genCardItem(response.data)) + inputElement.value = ''; + }) + } else { + msgId = showMessage(window.siyuan.languages._kernel[142]) + } + event.stopPropagation(); + event.preventDefault(); + break; + } else if (type === "add") { + fetchPost("/api/riff/addRiffCards", { + deckID: target.parentElement.getAttribute("data-id"), + blockIDs: ids + }, () => { + showMessage(window.siyuan.languages.addDeck) + }) + event.stopPropagation(); + event.preventDefault(); + break; + } else if (type === "remove") { + fetchPost("/api/riff/removeRiffCards", { + deckID: target.parentElement.getAttribute("data-id"), + blockIDs: ids + }, () => { + showMessage(window.siyuan.languages.removeDeck) + }) + event.stopPropagation(); + event.preventDefault(); + break; + } + target = target.parentElement; + } + }) + }) +}; diff --git a/app/src/card/openCard.ts b/app/src/card/openCard.ts new file mode 100644 index 000000000..bb26491f9 --- /dev/null +++ b/app/src/card/openCard.ts @@ -0,0 +1,3 @@ +export const openCard = () => { + +}