diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json index 55e69dd4c..6b0e828c3 100644 --- a/app/appearance/langs/en_US.json +++ b/app/appearance/langs/en_US.json @@ -1,4 +1,5 @@ { + "revisionCount": "Number of revisions", "flashcardNewCardLimit": "New Card Limit", "flashcardNewCardLimitTip": "If there are many new cards, you can set the number of new cards to review through this item", "flashcardReviewCardLimit": "Review Card Limit", diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json index 03207892d..158bee11f 100644 --- a/app/appearance/langs/es_ES.json +++ b/app/appearance/langs/es_ES.json @@ -1,4 +1,5 @@ { + "revisionCount": "Número de revisiones", "flashcardNewCardLimit": "Límite de tarjeta nueva", "flashcardNewCardLimitTip": "Si hay muchas tarjetas nuevas, puede establecer la cantidad de tarjetas nuevas para revisar a través de este elemento", "flashcardReviewCardLimit": "Revisar límite de tarjeta", diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json index 6f71bdb5e..f2a3813aa 100644 --- a/app/appearance/langs/fr_FR.json +++ b/app/appearance/langs/fr_FR.json @@ -1,4 +1,5 @@ { + "revisionCount": "Nombre de révisions", "flashcardNewCardLimit": "Nouvelle limite de carte", "flashcardNewCardLimitTip": "S'il y a beaucoup de nouvelles cartes, vous pouvez définir le nombre de nouvelles cartes à examiner via cet élément", "flashcardReviewCardLimit": "Revoir la limite de la carte", diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index 8e007069a..b1054f31e 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -1,4 +1,5 @@ { + "revisionCount": "複習次數", "flashcardNewCardLimit": "新卡上限", "flashcardNewCardLimitTip": "如果新卡較多,可以通過該項設置新卡複習的數量", "flashcardReviewCardLimit": "復習卡上限", diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index 62d9e1864..a926c62cd 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -1,4 +1,5 @@ { + "revisionCount": "复习次数", "flashcardNewCardLimit": "新卡上限", "flashcardNewCardLimitTip": "如果新卡较多,可以通过该项设置新卡复习的数量", "flashcardReviewCardLimit": "复习卡上限", diff --git a/app/src/assets/scss/base.scss b/app/src/assets/scss/base.scss index 526f23cf1..b09b00c42 100644 --- a/app/src/assets/scss/base.scss +++ b/app/src/assets/scss/base.scss @@ -362,10 +362,6 @@ html { opacity: .38; } - .block__icons .block__icon[disabled] { - opacity: 0; - } - &__close { min-height: auto; transition: var(--b3-transition); diff --git a/app/src/assets/scss/business/_block.scss b/app/src/assets/scss/business/_block.scss index f21df3eb1..da053ff6a 100644 --- a/app/src/assets/scss/business/_block.scss +++ b/app/src/assets/scss/business/_block.scss @@ -141,10 +141,14 @@ background-color: var(--b3-theme-surface); } - &:hover .block__icon { + &:hover .block__icon:not([disabled]) { opacity: 1; } + &:hover [disabled].block__icon { + opacity: .38; + } + .counter { background-color: var(--b3-theme-background); } @@ -169,13 +173,14 @@ background-color: var(--b3-list-icon-hover); } - &[disabled] { - opacity: 0.38; - cursor: not-allowed; - } &--show { opacity: 1; + + &.block__icon[disabled] { + opacity: 0.38; + cursor: not-allowed; + } } svg { diff --git a/app/src/card/makeCard.ts b/app/src/card/makeCard.ts index c75f8d577..bc2b15d7c 100644 --- a/app/src/card/makeCard.ts +++ b/app/src/card/makeCard.ts @@ -124,7 +124,7 @@ export const makeCard = (ids: string[]) => { event.preventDefault(); break; } else if (type === "view") { - viewCards(target.parentElement.getAttribute("data-id"), escapeHtml(target.parentElement.getAttribute("data-name")),"", (removeResponse) => { + viewCards(target.parentElement.getAttribute("data-id"), target.parentElement.getAttribute("data-name"), "", (removeResponse) => { target.parentElement.outerHTML = genCardItem(removeResponse.data); }); event.stopPropagation(); diff --git a/app/src/card/viewCards.ts b/app/src/card/viewCards.ts index 373ddf26d..0f2ae296c 100644 --- a/app/src/card/viewCards.ts +++ b/app/src/card/viewCards.ts @@ -2,7 +2,7 @@ import {Protyle} from "../protyle"; import {fetchPost} from "../util/fetch"; import {Dialog} from "../dialog"; import {isMobile} from "../util/functions"; -import {escapeHtml} from "../util/escape"; +import {escapeAttr, escapeHtml} from "../util/escape"; import {getDisplayName, getNotebookName} from "../util/pathName"; import {getIconByType} from "../editor/getIcon"; import {unicode2Emoji} from "../emoji"; @@ -19,8 +19,8 @@ export const viewCards = (deckID: string, title: string, deckType: "Tree" | "" | }, (response) => { const dialog = new Dialog({ content: `
-
- ${title} +
+ ${escapeHtml(title)}
@@ -28,10 +28,12 @@ export const viewCards = (deckID: string, title: string, deckType: "Tree" | "" | ${pageIndex}/${response.data.pageCount || 1} + + ${response.data.total}
    - ${renderViewItem(response.data.blocks)} + ${renderViewItem(response.data.blocks, title, deckType)}
${window.siyuan.languages.emptyContent}
@@ -85,7 +87,7 @@ export const viewCards = (deckID: string, title: string, deckType: "Tree" | "" | nextElement.removeAttribute("disabled"); } nextElement.nextElementSibling.nextElementSibling.textContent = `${pageIndex}/${cardsResponse.data.pageCount || 1}`; - listElement.innerHTML = renderViewItem(cardsResponse.data.blocks); + listElement.innerHTML = renderViewItem(cardsResponse.data.blocks, title, deckType); getArticle(edit, dialog.element.querySelector(".b3-list-item--focus")?.getAttribute("data-id")); }); event.stopPropagation(); @@ -104,7 +106,7 @@ export const viewCards = (deckID: string, title: string, deckType: "Tree" | "" | nextElement.removeAttribute("disabled"); } nextElement.nextElementSibling.nextElementSibling.textContent = `${pageIndex}/${cardsResponse.data.pageCount || 1}`; - listElement.innerHTML = renderViewItem(cardsResponse.data.blocks); + listElement.innerHTML = renderViewItem(cardsResponse.data.blocks, title, deckType); getArticle(edit, dialog.element.querySelector(".b3-list-item--focus")?.getAttribute("data-id")); }); event.stopPropagation(); @@ -154,20 +156,28 @@ export const viewCards = (deckID: string, title: string, deckType: "Tree" | "" | }; -const renderViewItem = (blocks: IBlock[]) => { +const renderViewItem = (blocks: IBlock[], title: string, deckType: string) => { let listHTML = ""; let isFirst = true; + const pathArray = title.split("/"); + pathArray.splice(0, 1); blocks.forEach((item: IBlock) => { if (item.type) { - const hPath = escapeHtml(getNotebookName(item.box)) + getDisplayName(item.hPath, false); + let hPath + if (deckType === "") { + hPath = getNotebookName(item.box) + getDisplayName(Lute.UnEscapeHTMLStr(item.hPath), false); + } else { + hPath = getDisplayName(Lute.UnEscapeHTMLStr(item.hPath), false).replace("/" + pathArray.join("/"), ""); + } listHTML += `
${unicode2Emoji(item.ial.icon, false, "b3-list-item__graphic", true)} -${item.content} +${item.content || Constants.ZWSP} -${hPath} +${escapeHtml(hPath)} +${item.riffCardReps}
`; isFirst = false; } else { diff --git a/app/src/menus/navigation.ts b/app/src/menus/navigation.ts index 19e704216..722f0df41 100644 --- a/app/src/menus/navigation.ts +++ b/app/src/menus/navigation.ts @@ -137,7 +137,7 @@ export const initNavigationMenu = (liElement: HTMLElement) => { iconHTML: Constants.ZWSP, label: window.siyuan.languages.mgmt, click: () => { - viewCards(notebookId, escapeHtml(name), "Notebook"); + viewCards(notebookId, name, "Notebook"); /// #if MOBILE closePanel(); /// #endif @@ -346,7 +346,7 @@ export const initFileMenu = (notebookId: string, pathString: string, liElement: iconHTML: Constants.ZWSP, label: window.siyuan.languages.mgmt, click: () => { - viewCards(id, name, "Tree"); + viewCards(id, pathPosix().join(getNotebookName(notebookId), name), "Tree"); /// #if MOBILE closePanel(); /// #endif diff --git a/app/src/protyle/header/Title.ts b/app/src/protyle/header/Title.ts index b10fb7544..b30f96d96 100644 --- a/app/src/protyle/header/Title.ts +++ b/app/src/protyle/header/Title.ts @@ -36,6 +36,7 @@ import {transferBlockRef} from "../../menus/block"; import {openCardByData} from "../../card/openCard"; import {makeCard, quickMakeCard} from "../../card/makeCard"; import {viewCards} from "../../card/viewCards"; +import {getNotebookName, pathPosix} from "../../util/pathName"; export class Title { public element: HTMLElement; @@ -379,7 +380,11 @@ export class Title { iconHTML: Constants.ZWSP, label: window.siyuan.languages.mgmt, click: () => { - viewCards(protyle.block.rootID, escapeHtml(this.editElement.textContent), "Tree"); + fetchPost("/api/filetree/getHPathByID", { + id: protyle.block.rootID + }, (response) => { + viewCards(protyle.block.rootID, pathPosix().join(getNotebookName(protyle.notebookId), (response.data)), "Tree"); + }); } }, { iconHTML: Constants.ZWSP, diff --git a/app/src/types/index.d.ts b/app/src/types/index.d.ts index 634d50f78..b38bcd01d 100644 --- a/app/src/types/index.d.ts +++ b/app/src/types/index.d.ts @@ -608,6 +608,7 @@ declare interface IBlockTree { } declare interface IBlock { + riffCardReps? :number // 闪卡复习次数 depth?: number, box?: string; path?: string;