mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 14:02:21 -04:00
Create the hook will_show_web to control html5 media elements with Javascript (#2340)
* Replaced ankimedia object directly call by addon specific hook # Conflicts: # qt/aqt/browser/previewer.py # qt/aqt/clayout.py # qt/aqt/reviewer.py * Replaced ankimedia.js by addon specific hook # Conflicts: # qt/aqt/browser/previewer.py # qt/aqt/clayout.py # qt/aqt/main.py * Create specific location name for each hook to reuse control * Created the card_review_webview_did_init hook * Extended the hook card_will_show to replace will_show_web The new hook card_will_show_state takes three new arguments * Created the hook audio_did_pause_or_unpause to replace will_show_web The new hook is called when audio toggle pause is called * Created the hook audio_will_replay to replace will_show_web The new hook is called when the audio is replayed by the user. * Created the hook previewer_will_redraw_after_show_both_sides_toggled to replace will_show_web. The new hook fully replaces the last uses of will_show_web. * Replaced card_will_show_state hook with reviewer_did_init and equivalents. Instead of receiving the required state, it access it by caching the object values with hooks as reviewer_did_init.
This commit is contained in:
parent
ad74a01491
commit
d9f1e22648
5 changed files with 55 additions and 0 deletions
|
@ -83,6 +83,8 @@ class Previewer(QDialog):
|
|||
self.bbox = QDialogButtonBox()
|
||||
self.bbox.setLayoutDirection(Qt.LayoutDirection.LeftToRight)
|
||||
|
||||
gui_hooks.card_review_webview_did_init(self._web, AnkiWebViewKind.PREVIEWER)
|
||||
|
||||
self._replay = self.bbox.addButton(
|
||||
tr.actions_replay_audio(), QDialogButtonBox.ButtonRole.ActionRole
|
||||
)
|
||||
|
@ -110,6 +112,8 @@ class Previewer(QDialog):
|
|||
self._on_close()
|
||||
|
||||
def _on_replay_audio(self) -> None:
|
||||
gui_hooks.audio_will_replay(self._web, self.card(), self._state == "question")
|
||||
|
||||
if self._state == "question":
|
||||
replay_audio(self.card(), True)
|
||||
elif self._state == "answer":
|
||||
|
@ -240,6 +244,10 @@ class Previewer(QDialog):
|
|||
def _on_show_both_sides(self, toggle: bool) -> None:
|
||||
self._show_both_sides = toggle
|
||||
self.mw.col.set_config_bool(Config.Bool.PREVIEW_BOTH_SIDES, toggle)
|
||||
gui_hooks.previewer_will_redraw_after_show_both_sides_toggled(
|
||||
self._web, self.card(), self._state == "question", toggle
|
||||
)
|
||||
|
||||
if self._state == "answer" and not toggle:
|
||||
self._state = "question"
|
||||
self.render_card()
|
||||
|
|
|
@ -359,6 +359,10 @@ class CardLayout(QDialog):
|
|||
self.preview_web.eval("_blockDefaultDragDropBehavior();")
|
||||
self.preview_web.set_bridge_command(self._on_bridge_cmd, self)
|
||||
|
||||
gui_hooks.card_review_webview_did_init(
|
||||
self.preview_web, AnkiWebViewKind.CARD_LAYOUT
|
||||
)
|
||||
|
||||
if self._isCloze():
|
||||
nums = list(self.note.cloze_numbers_in_fields())
|
||||
if self.ord + 1 not in nums:
|
||||
|
|
|
@ -248,6 +248,8 @@ class AnkiQt(QMainWindow):
|
|||
def finish_ui_setup(self) -> None:
|
||||
"Actions that are deferred until after add-on loading."
|
||||
self.toolbar.draw()
|
||||
# add-ons are only available here after setupAddons
|
||||
gui_hooks.reviewer_did_init(self.reviewer)
|
||||
|
||||
def setupProfileAfterWebviewsLoaded(self) -> None:
|
||||
for w in (self.web, self.bottomWeb):
|
||||
|
@ -901,6 +903,8 @@ title="{}" {}>{}</button>""".format(
|
|||
for webview in self.web, self.bottomWeb:
|
||||
webview.force_load_hack()
|
||||
|
||||
gui_hooks.card_review_webview_did_init(self.web, AnkiWebViewKind.MAIN)
|
||||
|
||||
def closeAllWindows(self, onsuccess: Callable) -> None:
|
||||
aqt.dialogs.closeAll(onsuccess)
|
||||
|
||||
|
|
|
@ -291,6 +291,7 @@ class Reviewer:
|
|||
replay_audio(self.card, True)
|
||||
elif self.state == "answer":
|
||||
replay_audio(self.card, False)
|
||||
gui_hooks.audio_will_replay(self.web, self.card, self.state == "question")
|
||||
|
||||
# Initializing the webview
|
||||
##########################################################################
|
||||
|
@ -505,6 +506,7 @@ class Reviewer:
|
|||
|
||||
def on_pause_audio(self) -> None:
|
||||
av_player.toggle_pause()
|
||||
gui_hooks.audio_did_pause_or_unpause(self.web)
|
||||
|
||||
seek_secs = 5
|
||||
|
||||
|
|
|
@ -215,6 +215,11 @@ hooks = [
|
|||
name="reviewer_will_bury_card",
|
||||
args=["id: int"],
|
||||
),
|
||||
Hook(
|
||||
name="audio_did_pause_or_unpause",
|
||||
args=["webview: aqt.webview.AnkiWebView"],
|
||||
doc="""Called when the audio is paused or unpaused.""",
|
||||
),
|
||||
# Debug
|
||||
###################
|
||||
Hook(
|
||||
|
@ -238,8 +243,21 @@ hooks = [
|
|||
doc="""Allow to change the display of the card layout. After most values are
|
||||
set and before the window is actually shown.""",
|
||||
),
|
||||
# Reviewer
|
||||
###################
|
||||
Hook(
|
||||
name="reviewer_did_init",
|
||||
args=["reviewer: aqt.reviewer.Reviewer"],
|
||||
doc="""Called after the reviewer is initialized.""",
|
||||
),
|
||||
# Multiple windows
|
||||
###################
|
||||
# reviewer and previewer
|
||||
Hook(
|
||||
name="audio_will_replay",
|
||||
args=["webview: aqt.webview.AnkiWebView", "card: Card", "is_front_side: bool"],
|
||||
doc="""Called when the user uses the 'replay audio' action, but not when they click on a play button.""",
|
||||
),
|
||||
# reviewer, clayout and browser
|
||||
Hook(
|
||||
name="card_will_show",
|
||||
|
@ -248,6 +266,15 @@ hooks = [
|
|||
legacy_hook="prepareQA",
|
||||
doc="Can modify card text before review/preview.",
|
||||
),
|
||||
# reviewer, main and clayout
|
||||
Hook(
|
||||
name="card_review_webview_did_init",
|
||||
args=[
|
||||
"webview: aqt.webview.AnkiWebView",
|
||||
"kind: aqt.webview.AnkiWebViewKind",
|
||||
],
|
||||
doc="Called when initializing the webview for the review screen, the card layout screen, and the preview screen.",
|
||||
),
|
||||
# Deck browser
|
||||
###################
|
||||
Hook(
|
||||
|
@ -527,6 +554,16 @@ hooks = [
|
|||
args=["previewer: aqt.browser.previewer.Previewer"],
|
||||
doc="""Called after the previewer is initialized.""",
|
||||
),
|
||||
Hook(
|
||||
name="previewer_will_redraw_after_show_both_sides_toggled",
|
||||
args=[
|
||||
"webview: aqt.webview.AnkiWebView",
|
||||
"card: Card",
|
||||
"is_front_side: bool",
|
||||
"show_both_sides: bool",
|
||||
],
|
||||
doc="""Called when the checkbox <show both sides> is toggled by the user.""",
|
||||
),
|
||||
# Main window states
|
||||
###################
|
||||
# these refer to things like deckbrowser, overview and reviewer state,
|
||||
|
|
Loading…
Reference in a new issue