Save before opening Fields/Cards

This commit is contained in:
Abdo 2025-10-18 03:55:03 +03:00
parent 71dfb6350d
commit bdbafb1f6e
3 changed files with 23 additions and 5 deletions

View file

@ -24,6 +24,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
toolbar: EditorToolbarAPI; toolbar: EditorToolbarAPI;
state: Writable<EditorState>; state: Writable<EditorState>;
lastIOImagePath: Writable<string | null>; lastIOImagePath: Writable<string | null>;
saveNow: () => Promise<void>;
} }
interface LoadNoteArgs { interface LoadNoteArgs {
@ -1343,6 +1344,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
fields, fields,
state: editorState, state: editorState,
lastIOImagePath, lastIOImagePath,
saveNow,
}; };
setContextProperty(api); setContextProperty(api);
@ -1394,7 +1396,7 @@ components and functionality for general note editing.
/> />
{/if} {/if}
<EditorToolbar {size} {wrap} {isLegacy} api={toolbar}> <EditorToolbar noteEditor={api} {size} {wrap} {isLegacy} api={toolbar}>
<svelte:fragment slot="notetypeButtons"> <svelte:fragment slot="notetypeButtons">
{#if mode === "browser"} {#if mode === "browser"}
<ButtonGroupItem> <ButtonGroupItem>

View file

@ -63,10 +63,12 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import RichTextClozeButtons from "./RichTextClozeButtons.svelte"; import RichTextClozeButtons from "./RichTextClozeButtons.svelte";
import TemplateButtons from "./TemplateButtons.svelte"; import TemplateButtons from "./TemplateButtons.svelte";
import type { InlineButtonsAPI } from "./InlineButtons.svelte"; import type { InlineButtonsAPI } from "./InlineButtons.svelte";
import type { NoteEditorAPI } from "../NoteEditor.svelte";
export let isLegacy = false; export let isLegacy = false;
export let size: number; export let size: number;
export let wrap: boolean; export let wrap: boolean;
export let noteEditor: NoteEditorAPI;
const toolbar = {} as DefaultSlotInterface; const toolbar = {} as DefaultSlotInterface;
const notetypeButtons = {} as DefaultSlotInterface; const notetypeButtons = {} as DefaultSlotInterface;
@ -100,7 +102,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
<ButtonToolbar {size} {wrap}> <ButtonToolbar {size} {wrap}>
<DynamicallySlottable slotHost={Item} api={toolbar}> <DynamicallySlottable slotHost={Item} api={toolbar}>
<Item id="notetype"> <Item id="notetype">
<NotetypeButtons api={notetypeButtons}> <NotetypeButtons {noteEditor} api={notetypeButtons}>
<slot name="notetypeButtons" /> <slot name="notetypeButtons" />
</NotetypeButtons> </NotetypeButtons>
</Item> </Item>

View file

@ -16,8 +16,10 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import DynamicallySlottable from "$lib/components/DynamicallySlottable.svelte"; import DynamicallySlottable from "$lib/components/DynamicallySlottable.svelte";
import LabelButton from "$lib/components/LabelButton.svelte"; import LabelButton from "$lib/components/LabelButton.svelte";
import Shortcut from "$lib/components/Shortcut.svelte"; import Shortcut from "$lib/components/Shortcut.svelte";
import type { NoteEditorAPI } from "../NoteEditor.svelte";
export let api = {}; export let api = {};
export let noteEditor: NoteEditorAPI;
const keyCombination = "Control+L"; const keyCombination = "Control+L";
</script> </script>
@ -33,7 +35,10 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
<ButtonGroupItem> <ButtonGroupItem>
<LabelButton <LabelButton
tooltip={tr.editingCustomizeFields()} tooltip={tr.editingCustomizeFields()}
on:click={() => bridgeCommand("fields")} on:click={async () => {
await noteEditor.saveNow();
bridgeCommand("fields");
}}
> >
{tr.editingFields()}... {tr.editingFields()}...
</LabelButton> </LabelButton>
@ -44,11 +49,20 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
tooltip="{tr.editingCustomizeCardTemplates()} ({getPlatformString( tooltip="{tr.editingCustomizeCardTemplates()} ({getPlatformString(
keyCombination, keyCombination,
)})" )})"
on:click={() => bridgeCommand("cards")} on:click={async () => {
await noteEditor.saveNow();
bridgeCommand("cards");
}}
> >
{tr.editingCards()}... {tr.editingCards()}...
</LabelButton> </LabelButton>
<Shortcut {keyCombination} on:action={() => bridgeCommand("cards")} /> <Shortcut
{keyCombination}
on:action={async () => {
await noteEditor.saveNow();
bridgeCommand("cards");
}}
/>
</ButtonGroupItem> </ButtonGroupItem>
<slot /> <slot />