diff --git a/package.json b/package.json index c28b5efaf..d453004f2 100644 --- a/package.json +++ b/package.json @@ -64,12 +64,14 @@ "@types/marked": "^4.0.1", "bootstrap": "=5.0.2", "bootstrap-icons": "^1.4.0", + "character-entities": "^2.0.2", "codemirror": "^5.63.1", "css-browser-selector": "^0.6.5", "d3": "^7.0.0", "eslint-plugin-import": "^2.25.4", "eslint-plugin-simple-import-sort": "^7.0.0", "eslint-plugin-svelte3": "^3.4.0", + "gemoji": "^7.1.0", "intl-pluralrules": "^1.2.2", "jquery": "^3.5.1", "jquery-ui-dist": "^1.12.1", diff --git a/qt/aqt/editor.py b/qt/aqt/editor.py index 7826d375f..89262ae21 100644 --- a/qt/aqt/editor.py +++ b/qt/aqt/editor.py @@ -551,6 +551,9 @@ require("anki/ui").loaded.then(() => require("anki/NoteEditor").instances[0].too sticky = [field["sticky"] for field in self.note.note_type()["flds"]] js += " setSticky(%s);" % json.dumps(sticky) + if os.getenv("ANKI_EDITOR_INSERT_SYMBOLS"): + js += " setInsertSymbolsEnabled();" + js = gui_hooks.editor_will_load_note(js, self.note, self) self.web.evalWithCallback( f'require("anki/ui").loaded.then(() => {{ {js} }})', oncallback diff --git a/qt/aqt/main.py b/qt/aqt/main.py index b770902c6..b02d010d3 100644 --- a/qt/aqt/main.py +++ b/qt/aqt/main.py @@ -678,7 +678,7 @@ class AnkiQt(QMainWindow): self.bottomWeb.show() gui_hooks.state_did_change(state, oldState) - def _deckBrowserState(self, oldState: str) -> None: + def _deckBrowserState(self, oldState: MainWindowState) -> None: self.deckBrowser.show() def _selectedDeck(self) -> DeckDict | None: @@ -688,15 +688,15 @@ class AnkiQt(QMainWindow): return None return self.col.decks.get(did) - def _overviewState(self, oldState: str) -> None: + def _overviewState(self, oldState: MainWindowState) -> None: if not self._selectedDeck(): return self.moveToState("deckBrowser") self.overview.show() - def _reviewState(self, oldState: str) -> None: + def _reviewState(self, oldState: MainWindowState) -> None: self.reviewer.show() - def _reviewCleanup(self, newState: str) -> None: + def _reviewCleanup(self, newState: MainWindowState) -> None: if newState != "resetRequired" and newState != "review": self.reviewer.cleanup() diff --git a/qt/tools/genhooks_gui.py b/qt/tools/genhooks_gui.py index e0300e732..0742bde3d 100644 --- a/qt/tools/genhooks_gui.py +++ b/qt/tools/genhooks_gui.py @@ -531,18 +531,27 @@ hooks = [ # these refer to things like deckbrowser, overview and reviewer state, Hook( name="state_will_change", - args=["new_state: str", "old_state: str"], + args=[ + "new_state: aqt.main.MainWindowState", + "old_state: aqt.main.MainWindowState", + ], legacy_hook="beforeStateChange", ), Hook( name="state_did_change", - args=["new_state: str", "old_state: str"], + args=[ + "new_state: aqt.main.MainWindowState", + "old_state: aqt.main.MainWindowState", + ], legacy_hook="afterStateChange", ), # different sig to original Hook( name="state_shortcuts_will_change", - args=["state: str", "shortcuts: list[tuple[str, Callable]]"], + args=[ + "state: aqt.main.MainWindowState", + "shortcuts: list[tuple[str, Callable]]", + ], ), # UI state/refreshing ################### diff --git a/ts/components/Badge.svelte b/ts/components/Badge.svelte index f68a665ba..d395bdbb7 100644 --- a/ts/components/Badge.svelte +++ b/ts/components/Badge.svelte @@ -3,10 +3,8 @@ Copyright: Ankitects Pty Ltd and contributors License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html -->