From afc771de9fd34a7b16a6bbf8bcdc85dd758d7836 Mon Sep 17 00:00:00 2001 From: siikamiika Date: Sat, 3 Aug 2019 15:06:28 +0300 Subject: [PATCH] inject doc functions as dependencies --- ext/bg/js/search.js | 2 ++ ext/fg/js/float.js | 37 ++----------------------------------- ext/mixed/js/display.js | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 35 deletions(-) diff --git a/ext/bg/js/search.js b/ext/bg/js/search.js index 40bf2019..f08f22da 100644 --- a/ext/bg/js/search.js +++ b/ext/bg/js/search.js @@ -25,6 +25,8 @@ class DisplaySearch extends Display { this.query = $('#query').on('input', this.onSearchInput.bind(this)); this.intro = $('#intro'); + this.dependencies = {...this.dependencies, ...{docRangeFromPoint, docSentenceExtract}}; + window.wanakana.bind(this.query.get(0)); } diff --git a/ext/fg/js/float.js b/ext/fg/js/float.js index 65ed89a1..090839a1 100644 --- a/ext/fg/js/float.js +++ b/ext/fg/js/float.js @@ -23,6 +23,8 @@ class DisplayFloat extends Display { this.autoPlayAudioTimer = null; this.styleNode = null; + this.dependencies = {...this.dependencies, ...{docRangeFromPoint, docSentenceExtract}}; + $(window).on('message', utilAsync(this.onMessage.bind(this))); } @@ -123,41 +125,6 @@ class DisplayFloat extends Display { parent.appendChild(this.styleNode); } } - - async onTermLookup(e) { - try { - e.preventDefault(); - - const clickedElement = $(e.target); - const textSource = docRangeFromPoint({x: e.clientX, y: e.clientY}); - textSource.setEndOffset(this.options.scanning.length); - - const {definitions, length} = await apiTermsFind(textSource.text()); - if (definitions.length === 0) { - return false; - } - - textSource.setEndOffset(length); - - const sentence = docSentenceExtract(textSource, this.options.anki.sentenceExt); - - const context = { - source: { - definitions: this.definitions, - index: Display.entryIndexFind(clickedElement) - } - }; - - if (this.context) { - context.sentence = sentence; - context.url = this.context.url; - } - - this.termsShow(definitions, this.options, context); - } catch (e) { - this.onError(e); - } - } } window.yomichan_display = new DisplayFloat(); diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js index dc6f5798..0067d457 100644 --- a/ext/mixed/js/display.js +++ b/ext/mixed/js/display.js @@ -28,6 +28,8 @@ class Display { this.index = 0; this.audioCache = {}; + this.dependencies = {}; + $(document).keydown(this.onKeyDown.bind(this)); $(document).on('wheel', this.onWheel.bind(this)); } @@ -69,6 +71,43 @@ class Display { } } + async onTermLookup(e) { + try { + e.preventDefault(); + + const {docRangeFromPoint, docSentenceExtract} = this.dependencies; + + const clickedElement = $(e.target); + const textSource = docRangeFromPoint({x: e.clientX, y: e.clientY}); + textSource.setEndOffset(this.options.scanning.length); + + const {definitions, length} = await apiTermsFind(textSource.text()); + if (definitions.length === 0) { + return false; + } + + textSource.setEndOffset(length); + + const sentence = docSentenceExtract(textSource, this.options.anki.sentenceExt); + + const context = { + source: { + definitions: this.definitions, + index: Display.entryIndexFind(clickedElement) + } + }; + + if (this.context) { + context.sentence = sentence; + context.url = this.context.url; + } + + this.termsShow(definitions, this.options, context); + } catch (e) { + this.onError(e); + } + } + onAudioPlay(e) { e.preventDefault(); const link = $(e.currentTarget);