mirror of
https://github.com/ankitects/anki.git
synced 2025-09-21 15:32:23 -04:00
Use defaults_for_adding()
This commit is contained in:
parent
9d1ecc3ed9
commit
829da5a84a
7 changed files with 72 additions and 7 deletions
|
@ -427,7 +427,7 @@ require("anki/ui").loaded.then(() => require("anki/NoteEditor").instances[0].too
|
|||
gui_hooks.editor_did_load_note(self)
|
||||
|
||||
assert self.mw.pm.profile is not None
|
||||
js = f"loadNote({json.dumps(self.nid)}, {mid}, {json.dumps(focus_to)}, {json.dumps(original_note_id)});"
|
||||
js = f"loadNote({json.dumps(self.nid)}, {mid}, {json.dumps(focus_to)}, {json.dumps(original_note_id)}, {json.dumps(self.mw.reviewer.card.id if self.mw.reviewer.card else None)});"
|
||||
self.web.evalWithCallback(
|
||||
f'require("anki/ui").loaded.then(() => {{ {js} }})', oncallback
|
||||
)
|
||||
|
|
|
@ -973,6 +973,7 @@ exposed_backend_list = [
|
|||
"get_note",
|
||||
"new_note",
|
||||
"note_fields_check",
|
||||
"defaults_for_adding",
|
||||
# NotetypesService
|
||||
"get_notetype",
|
||||
"get_notetype_names",
|
||||
|
|
|
@ -15,6 +15,11 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|||
}
|
||||
let { selectedDeck = $bindable(null), onChange }: Props = $props();
|
||||
let decks: DeckNameId[] = $state([]);
|
||||
let itemChooser: ItemChooser<DeckNameId> | null = $state(null);
|
||||
|
||||
export function select(notetypeId: bigint) {
|
||||
itemChooser?.select(notetypeId);
|
||||
}
|
||||
|
||||
$effect(() => {
|
||||
getDeckNames({ skipEmptyDefault: true, includeFiltered: false }).then(
|
||||
|
@ -26,6 +31,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|||
</script>
|
||||
|
||||
<ItemChooser
|
||||
bind:this={itemChooser}
|
||||
title={tr.qtMiscChooseDeck()}
|
||||
bind:selectedItem={selectedDeck}
|
||||
{onChange}
|
||||
|
|
|
@ -53,6 +53,11 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|||
modal?.show();
|
||||
}
|
||||
|
||||
export function select(itemId: bigint) {
|
||||
const item = items.find((item) => item.id === itemId);
|
||||
selectedItem = item ? item : null;
|
||||
}
|
||||
|
||||
$effect(() => {
|
||||
if (!selectedItem && items.length > 0) {
|
||||
selectedItem = items[0];
|
||||
|
|
|
@ -16,6 +16,11 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|||
}
|
||||
let { selectedNotetype = $bindable(null), onChange }: Props = $props();
|
||||
let notetypes: NotetypeNameId[] = $state([]);
|
||||
let itemChooser: ItemChooser<NotetypeNameId> | null = $state(null);
|
||||
|
||||
export function select(notetypeId: bigint) {
|
||||
itemChooser?.select(notetypeId);
|
||||
}
|
||||
|
||||
$effect(() => {
|
||||
getNotetypeNames({}).then((response) => {
|
||||
|
@ -25,6 +30,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|||
</script>
|
||||
|
||||
<ItemChooser
|
||||
bind:this={itemChooser}
|
||||
title={tr.qtMiscChooseNoteType()}
|
||||
bind:selectedItem={selectedNotetype}
|
||||
{onChange}
|
||||
|
|
|
@ -297,11 +297,16 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|||
clearCodeMirrorHistory();
|
||||
}
|
||||
|
||||
let reviewerCard: Card | null = null;
|
||||
|
||||
export let notetypeChooser: NotetypeChooser;
|
||||
export let selectedNotetype: NotetypeNameId | null = null;
|
||||
export let deckChooser: DeckChooser;
|
||||
export let selectedDeck: DeckNameId | null = null;
|
||||
|
||||
function onNotetypeChange(notetype: NotetypeNameId) {
|
||||
loadNote(0n, notetype.id, 0, null);
|
||||
loadNote(0n, notetype.id, 0, null, null);
|
||||
// TODO default_deck_for_notetype
|
||||
}
|
||||
|
||||
let notetypeMeta: NotetypeIdAndModTime;
|
||||
|
@ -700,6 +705,8 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|||
htmlToTextLine,
|
||||
askUser,
|
||||
showMessageBox,
|
||||
getCard,
|
||||
defaultsForAdding,
|
||||
} from "@generated/backend";
|
||||
import { wrapInternal } from "@tslib/wrap";
|
||||
import { getProfileConfig, getMeta, setMeta, getColConfig } from "@tslib/profile";
|
||||
|
@ -729,6 +736,9 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|||
import { MessageBoxType } from "@generated/anki/frontend_pb";
|
||||
import type Modal from "$lib/components/Modal.svelte";
|
||||
import EditorChoosers from "./editor-toolbar/EditorChoosers.svelte";
|
||||
import type { Card } from "@generated/anki/cards_pb";
|
||||
import NotetypeChooser from "$lib/components/NotetypeChooser.svelte";
|
||||
import DeckChooser from "$lib/components/DeckChooser.svelte";
|
||||
|
||||
$: isIOImageLoaded = false;
|
||||
$: ioImageLoadedStore.set(isIOImageLoaded);
|
||||
|
@ -932,6 +942,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|||
notetypeId: bigint,
|
||||
focusTo: number,
|
||||
originalNoteId: bigint | null,
|
||||
reviewerCardId: bigint | null,
|
||||
) {
|
||||
const notetype = await getNotetype({
|
||||
ntid: notetypeId,
|
||||
|
@ -961,6 +972,17 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|||
note!.fields = originalNote.fields;
|
||||
note!.tags = originalNote.tags;
|
||||
}
|
||||
let homeDeckId = 0n;
|
||||
if (reviewerCardId) {
|
||||
reviewerCard = await getCard({ cid: reviewerCardId });
|
||||
homeDeckId = reviewerCard.originalDeckId || reviewerCard.deckId;
|
||||
}
|
||||
const chooserDefaults = await defaultsForAdding({
|
||||
homeDeckOfCurrentReviewCard: homeDeckId,
|
||||
});
|
||||
notetypeChooser.select(chooserDefaults.notetypeId);
|
||||
deckChooser.select(chooserDefaults.deckId);
|
||||
|
||||
const fieldValues = (
|
||||
await Promise.all(
|
||||
note!.fields.map((field) => encodeIriPaths({ val: field })),
|
||||
|
@ -1040,9 +1062,16 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|||
notetypeId: bigint,
|
||||
focusTo: number,
|
||||
originalNoteId: bigint | null,
|
||||
reviewerCardId: bigint | null,
|
||||
) {
|
||||
loadDebouncer.schedule(async () => {
|
||||
await loadNoteInner(nid, notetypeId, focusTo, originalNoteId);
|
||||
await loadNoteInner(
|
||||
nid,
|
||||
notetypeId,
|
||||
focusTo,
|
||||
originalNoteId,
|
||||
reviewerCardId,
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -1205,7 +1234,13 @@ components and functionality for general note editing.
|
|||
on:drop={checkNonLegacy(handlePickerDrop)}
|
||||
>
|
||||
{#if mode === "add" && !isLegacy}
|
||||
<EditorChoosers bind:selectedNotetype bind:selectedDeck {onNotetypeChange} />
|
||||
<EditorChoosers
|
||||
bind:notetypeChooser
|
||||
bind:deckChooser
|
||||
bind:selectedNotetype
|
||||
bind:selectedDeck
|
||||
{onNotetypeChange}
|
||||
/>
|
||||
{/if}
|
||||
|
||||
<EditorToolbar {size} {wrap} api={toolbar}>
|
||||
|
|
|
@ -12,13 +12,17 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|||
|
||||
interface Props {
|
||||
selectedNotetype: NotetypeNameId | null;
|
||||
selectedDeck: DeckNameId | null;
|
||||
selectedDeck?: DeckNameId | null;
|
||||
notetypeChooser?: NotetypeChooser;
|
||||
deckChooser?: DeckChooser;
|
||||
onNotetypeChange?: (notetype: NotetypeNameId) => void;
|
||||
onDeckChange?: (deck: DeckNameId) => void;
|
||||
}
|
||||
let {
|
||||
selectedNotetype = $bindable(null),
|
||||
selectedDeck = $bindable(null),
|
||||
notetypeChooser = $bindable(),
|
||||
deckChooser = $bindable(),
|
||||
onNotetypeChange,
|
||||
onDeckChange,
|
||||
}: Props = $props();
|
||||
|
@ -27,11 +31,19 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|||
<div class="top-bar">
|
||||
<p>{tr.notetypesType()}</p>
|
||||
<div class="notetype-chooser">
|
||||
<NotetypeChooser bind:selectedNotetype onChange={onNotetypeChange} />
|
||||
<NotetypeChooser
|
||||
bind:this={notetypeChooser}
|
||||
bind:selectedNotetype
|
||||
onChange={onNotetypeChange}
|
||||
/>
|
||||
</div>
|
||||
<p>{tr.decksDeck()}</p>
|
||||
<div class="deck-chooser">
|
||||
<DeckChooser bind:selectedDeck onChange={onDeckChange} />
|
||||
<DeckChooser
|
||||
bind:this={deckChooser}
|
||||
bind:selectedDeck
|
||||
onChange={onDeckChange}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
Loading…
Reference in a new issue