From 5a7832b16d6e96a3fedd31fd1be78f4832a57ce7 Mon Sep 17 00:00:00 2001 From: Abdo Date: Thu, 3 Jul 2025 07:44:30 +0300 Subject: [PATCH] Rewrite empty check --- qt/aqt/addcards.py | 4 ++-- ts/routes/editor/NoteEditor.svelte | 26 ++++++++++++++++++++------ 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/qt/aqt/addcards.py b/qt/aqt/addcards.py index b4319d038..133bfb42b 100644 --- a/qt/aqt/addcards.py +++ b/qt/aqt/addcards.py @@ -253,8 +253,8 @@ class AddCards(QMainWindow): self._close_callback = onOk self.editor.web.eval("closeAddCards()") - def _close_if_user_wants_to_discard_changes(self, is_empty: bool) -> None: - if is_empty: + def _close_if_user_wants_to_discard_changes(self, prompt: bool) -> None: + if not prompt: self._close_callback() return diff --git a/ts/routes/editor/NoteEditor.svelte b/ts/routes/editor/NoteEditor.svelte index 7b9f42688..9ea23807a 100644 --- a/ts/routes/editor/NoteEditor.svelte +++ b/ts/routes/editor/NoteEditor.svelte @@ -370,18 +370,31 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html saveFieldNow(); } - // TODO this needs to accept a previousNote arg - async function fieldsAreBlank(): Promise { - const result = await noteFieldsCheck(note!); - if (result.state === NoteFieldsCheckResponse_State.EMPTY) { - return true; + // Used for detecting changed sticky fields on close + let lastAddedNote: Note | null = null; + + async function shouldPromptBeforeClosing(): Promise { + const brPattern = //gi; + for (let c = 0; c < note.fields.length; c++) { + const field = note.fields[c].replace(brPattern, "").trim(); + const notChangedValues = new Set(["", "
"]); + if (lastAddedNote && stickies[c]) { + const previousFieldValue = lastAddedNote.fields[c] + .replace(brPattern, "") + .trim(); + notChangedValues.add(previousFieldValue); + } + if (!notChangedValues.has(field)) { + return true; + } } + return false; } async function closeAddCards() { saveNow(); - await closeAddCardsBackend({ val: await fieldsAreBlank() }); + await closeAddCardsBackend({ val: await shouldPromptBeforeClosing() }); } export function saveOnPageHide() { @@ -443,6 +456,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html note: note!, deckId, }); + lastAddedNote = note; await loadNewNote(); }