diff options
Diffstat (limited to 'ext/js/display/display.js')
-rw-r--r-- | ext/js/display/display.js | 48 |
1 files changed, 29 insertions, 19 deletions
diff --git a/ext/js/display/display.js b/ext/js/display/display.js index c7a2775d..4114cc45 100644 --- a/ext/js/display/display.js +++ b/ext/js/display/display.js @@ -32,7 +32,6 @@ import {ScrollElement} from '../dom/scroll-element.js'; import {TextSourceGenerator} from '../dom/text-source-generator.js'; import {HotkeyHelpController} from '../input/hotkey-help-controller.js'; import {TextScanner} from '../language/text-scanner.js'; -import {yomitan} from '../yomitan.js'; import {DisplayContentManager} from './display-content-manager.js'; import {DisplayGenerator} from './display-generator.js'; import {DisplayHistory} from './display-history.js'; @@ -46,14 +45,17 @@ import {QueryParser} from './query-parser.js'; */ export class Display extends EventDispatcher { /** + * @param {import('../application.js').Application} application * @param {number|undefined} tabId * @param {number|undefined} frameId * @param {import('display').DisplayPageType} pageType * @param {import('../dom/document-focus-controller.js').DocumentFocusController} documentFocusController * @param {import('../input/hotkey-handler.js').HotkeyHandler} hotkeyHandler */ - constructor(tabId, frameId, pageType, documentFocusController, hotkeyHandler) { + constructor(application, tabId, frameId, pageType, documentFocusController, hotkeyHandler) { super(); + /** @type {import('../application.js').Application} */ + this._application = application; /** @type {number|undefined} */ this._tabId = tabId; /** @type {number|undefined} */ @@ -131,6 +133,7 @@ export class Display extends EventDispatcher { this._textSourceGenerator = new TextSourceGenerator(); /** @type {QueryParser} */ this._queryParser = new QueryParser({ + api: application.api, getSearchContext: this._getSearchContext.bind(this), textSourceGenerator: this._textSourceGenerator }); @@ -163,7 +166,7 @@ export class Display extends EventDispatcher { /** @type {boolean} */ this._childrenSupported = true; /** @type {?FrameEndpoint} */ - this._frameEndpoint = (pageType === 'popup' ? new FrameEndpoint() : null); + this._frameEndpoint = (pageType === 'popup' ? new FrameEndpoint(this._application.api) : null); /** @type {?import('environment').Browser} */ this._browser = null; /** @type {?HTMLTextAreaElement} */ @@ -224,6 +227,11 @@ export class Display extends EventDispatcher { /* eslint-enable no-multi-spaces */ } + /** @type {import('../application.js').Application} */ + get application() { + return this._application; + } + /** @type {DisplayGenerator} */ get displayGenerator() { return this._displayGenerator; @@ -307,7 +315,7 @@ export class Display extends EventDispatcher { // State setup const {documentElement} = document; - const {browser} = await yomitan.api.getEnvironmentInfo(); + const {browser} = await this._application.api.getEnvironmentInfo(); this._browser = browser; if (documentElement !== null) { @@ -315,8 +323,8 @@ export class Display extends EventDispatcher { } // Prepare - await this._hotkeyHelpController.prepare(); - await this._displayGenerator.prepare(); + await this._hotkeyHelpController.prepare(this._application.api); + await this._displayGenerator.prepare(this._application.api); this._queryParser.prepare(); this._history.prepare(); this._optionToggleHotkeyHandler.prepare(); @@ -325,8 +333,8 @@ export class Display extends EventDispatcher { this._history.on('stateChanged', this._onStateChanged.bind(this)); this._queryParser.on('searched', this._onQueryParserSearch.bind(this)); this._progressIndicatorVisible.on('change', this._onProgressIndicatorVisibleChanged.bind(this)); - yomitan.on('extensionUnloaded', this._onExtensionUnloaded.bind(this)); - yomitan.crossFrame.registerHandlers([ + this._application.on('extensionUnloaded', this._onExtensionUnloaded.bind(this)); + this._application.crossFrame.registerHandlers([ ['displayPopupMessage1', this._onDisplayPopupMessage1.bind(this)], ['displayPopupMessage2', this._onDisplayPopupMessage2.bind(this)] ]); @@ -384,7 +392,7 @@ export class Display extends EventDispatcher { * @param {Error} error */ onError(error) { - if (yomitan.webExtension.unloaded) { return; } + if (this._application.webExtension.unloaded) { return; } log.error(error); } @@ -412,7 +420,7 @@ export class Display extends EventDispatcher { /** */ async updateOptions() { - const options = await yomitan.api.optionsGet(this.getOptionsContext()); + const options = await this._application.api.optionsGet(this.getOptionsContext()); const {scanning: scanningOptions, sentenceParsing: sentenceParsingOptions} = options; this._options = options; @@ -586,7 +594,7 @@ export class Display extends EventDispatcher { if (typeof this._contentOriginTabId !== 'number' || typeof this._contentOriginFrameId !== 'number') { throw new Error('No content origin is assigned'); } - return await yomitan.crossFrame.invokeTab(this._contentOriginTabId, this._contentOriginFrameId, action, params); + return await this._application.crossFrame.invokeTab(this._contentOriginTabId, this._contentOriginFrameId, action, params); } /** @@ -599,7 +607,7 @@ export class Display extends EventDispatcher { if (this._parentFrameId === null || this._parentFrameId === this._frameId) { throw new Error('Invalid parent frame'); } - return await yomitan.crossFrame.invoke(this._parentFrameId, action, params); + return await this._application.crossFrame.invoke(this._parentFrameId, action, params); } /** @@ -721,7 +729,7 @@ export class Display extends EventDispatcher { /** @type {import('display').WindowApiHandler<'displayExtensionUnloaded'>} */ _onMessageExtensionUnloaded() { - yomitan.webExtension.triggerUnloaded(); + this._application.webExtension.triggerUnloaded(); } // Private @@ -900,7 +908,7 @@ export class Display extends EventDispatcher { const element = /** @type {Element} */ (e.currentTarget); let query = element.textContent; if (query === null) { query = ''; } - const dictionaryEntries = await yomitan.api.kanjiFind(query, optionsContext); + const dictionaryEntries = await this._application.api.kanjiFind(query, optionsContext); /** @type {import('display').ContentDetails} */ const details = { focus: false, @@ -1136,7 +1144,7 @@ export class Display extends EventDispatcher { */ async _findDictionaryEntries(isKanji, source, wildcardsEnabled, optionsContext) { if (isKanji) { - const dictionaryEntries = await yomitan.api.kanjiFind(source, optionsContext); + const dictionaryEntries = await this._application.api.kanjiFind(source, optionsContext); return dictionaryEntries; } else { /** @type {import('api').FindTermsDetails} */ @@ -1155,7 +1163,7 @@ export class Display extends EventDispatcher { } } - const {dictionaryEntries} = await yomitan.api.termsFind(source, findDetails, optionsContext); + const {dictionaryEntries} = await this._application.api.termsFind(source, findDetails, optionsContext); return dictionaryEntries; } } @@ -1640,7 +1648,7 @@ export class Display extends EventDispatcher { /** */ _closePopups() { - yomitan.triggerClosePopups(); + this._application.triggerClosePopups(); } /** @@ -1711,11 +1719,12 @@ export class Display extends EventDispatcher { import('../app/frontend.js') ]); - const popupFactory = new PopupFactory(this._frameId); + const popupFactory = new PopupFactory(this._application, this._frameId); popupFactory.prepare(); /** @type {import('frontend').ConstructorDetails} */ const setupNestedPopupsOptions = { + application: this._application, useProxyPopup, parentPopupId, parentFrameId, @@ -1828,6 +1837,7 @@ export class Display extends EventDispatcher { if (this._contentTextScanner === null) { this._contentTextScanner = new TextScanner({ + api: this._application.api, node: window, getSearchContext: this._getSearchContext.bind(this), searchTerms: true, @@ -1888,7 +1898,7 @@ export class Display extends EventDispatcher { * @param {import('text-scanner').SearchedEventDetails} details */ _onContentTextScannerSearched({type, dictionaryEntries, sentence, textSource, optionsContext, error}) { - if (error !== null && !yomitan.webExtension.unloaded) { + if (error !== null && !this._application.webExtension.unloaded) { log.error(error); } |