diff options
| author | StefanVukovic99 <stefanvukovic44@gmail.com> | 2024-02-18 14:00:04 +0100 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-18 13:00:04 +0000 | 
| commit | c2e3f60e51529f05284fea5f5bc1afcd1674f5ca (patch) | |
| tree | 61b0b35a73c41f4ab552bbbe056748a204562745 | |
| parent | 7e9f7e2616973418cc50f7706bd8f644cb9d5559 (diff) | |
switch preview popup's example text based on language (#700)
* Copy functions from JapaneseUtil
* Remove JapaneseUtil
* Update usages of JapaneseUtil functions
* part1
* frotend done?
* fix tests
* offscreen and type complications
* add tests
* start fixing tests
* keep fixing tests
* fix tests
* Copy functions from JapaneseUtil
* Remove JapaneseUtil
* Update usages of JapaneseUtil functions
* delete pt
* renames
* add tests
* kebab-case filenames
* lint
* minor fixes
* merge
* fixes
* fix part of comments
* fix more comments
* delete unused types
* comment
* comment
* do backend
* other files
* move fetch utils to own file
* remove extra line
* add extra line
* remove unnecessary export
* simplify folder structure
* remove redundant async
* fix param type in api
* fix language index
* undo changes to cssStyleApplier
* undo changes to utilities.js
* undo changes to utilities.js
* simplify language util
* lint
* undo phantom changes to anki integration
* require textTransformations options
* explicit locale in localeCompare
* punctuate notes
* prefer early exit
* rename LanguageOptionsObjectMap
* rename to textPreprocessor
* tuple with names instead of boolean array
* safe data setting
* optional chaining
* simplify LanguageOptions
* encapsulate languages
* delete language util
* nullable language in text preprocessors controller
* rename transform to process
* remove settings
* make translation advanced again
* remove unused getTextTransformations api call
* comments
* change language types
* RIP flags
* comments
* fix tests
* lint
* Text preprocessor type changes (#10)
* Add types
* Update types
* Simplify type check
* Refactor typing and structuring of language definitions
* lint
* update translator benchmark
* undo markdown changes
* undo markdown changes
* undo markdown changes
* more merge
* use example text
* comments
* comments
---------
Co-authored-by: toasted-nutbread <toasted-nutbread@users.noreply.github.com>
Co-authored-by: Darius Jahandarie <djahandarie@gmail.com>
| -rw-r--r-- | ext/js/pages/settings/popup-preview-controller.js | 22 | ||||
| -rw-r--r-- | ext/js/pages/settings/popup-preview-frame.js | 50 | ||||
| -rw-r--r-- | ext/popup-preview.html | 4 | 
3 files changed, 66 insertions, 10 deletions
| diff --git a/ext/js/pages/settings/popup-preview-controller.js b/ext/js/pages/settings/popup-preview-controller.js index 5194410c..bd335460 100644 --- a/ext/js/pages/settings/popup-preview-controller.js +++ b/ext/js/pages/settings/popup-preview-controller.js @@ -47,6 +47,14 @@ export class PopupPreviewController {          this._customOuterCss.addEventListener('settingChanged', this._onCustomOuterCssChange.bind(this), false);          this._frame.addEventListener('load', this._onFrameLoad.bind(this), false);          this._settingsController.on('optionsContextChanged', this._onOptionsContextChange.bind(this)); +        this._settingsController.on('optionsChanged', this._onOptionsChanged.bind(this)); +        const languageSelect = querySelectorNotNull(document, '#language-select'); +        languageSelect.addEventListener( +            /** @type {string} */ ('settingChanged'), +            /** @type {EventListener} */ (this._onLanguageSelectChanged.bind(this)), +            false +        ); +          this._frame.src = '/popup-preview.html';      } @@ -79,6 +87,20 @@ export class PopupPreviewController {      }      /** +     * @param {import('settings-controller').EventArgument<'optionsChanged'>} details +     */ +    _onOptionsChanged({options}) { +        this._invoke('PopupPreviewFrame.optionsChanged', {options}); +    } + +    /** +     * @param {import('dom-data-binder').SettingChangedEvent} settingChangedEvent +     */ +    _onLanguageSelectChanged(settingChangedEvent) { +        this._invoke('PopupPreviewFrame.setLanguageExampleText', {language: settingChangedEvent.detail.value}); +    } + +    /**       * @param {string} action       * @param {import('core').SerializableObject} params       */ diff --git a/ext/js/pages/settings/popup-preview-frame.js b/ext/js/pages/settings/popup-preview-frame.js index 2898eaa2..d3e21641 100644 --- a/ext/js/pages/settings/popup-preview-frame.js +++ b/ext/js/pages/settings/popup-preview-frame.js @@ -52,24 +52,26 @@ export class PopupPreviewFrame {          this._exampleTextInput = querySelectorNotNull(document, '#example-text-input');          /** @type {string} */          this._targetOrigin = chrome.runtime.getURL('/').replace(/\/$/, ''); +        /** @type {import('language').LanguageSummary[]} */ +        this._languageSummaries = []; +        /** @type {boolean} */ +        this._wanakanaBound = false;          /* eslint-disable @stylistic/no-multi-spaces */          /** @type {Map<string, (params: import('core').SerializableObjectAny) => void>} */          this._windowMessageHandlers = new Map(/** @type {[key: string, handler: (params: import('core').SerializableObjectAny) => void][]} */ ([ -            ['PopupPreviewFrame.setText',              this._onSetText.bind(this)], -            ['PopupPreviewFrame.setCustomCss',         this._setCustomCss.bind(this)], -            ['PopupPreviewFrame.setCustomOuterCss',    this._setCustomOuterCss.bind(this)], -            ['PopupPreviewFrame.updateOptionsContext', this._updateOptionsContext.bind(this)] +            ['PopupPreviewFrame.setText',                this._onSetText.bind(this)], +            ['PopupPreviewFrame.setCustomCss',           this._setCustomCss.bind(this)], +            ['PopupPreviewFrame.setCustomOuterCss',      this._setCustomOuterCss.bind(this)], +            ['PopupPreviewFrame.updateOptionsContext',   this._updateOptionsContext.bind(this)], +            ['PopupPreviewFrame.optionsChanged',         this._onOptionsChanged.bind(this)], +            ['PopupPreviewFrame.setLanguageExampleText', this._setLanguageExampleText.bind(this)]          ]));          /* eslint-enable @stylistic/no-multi-spaces */      }      /** */      async prepare() { -        if (this._exampleTextInput !== null && typeof wanakana !== 'undefined') { -            wanakana.bind(this._exampleTextInput); -        } -          window.addEventListener('message', this._onMessage.bind(this), false);          // Setup events @@ -85,6 +87,10 @@ export class PopupPreviewFrame {          this._apiOptionsGetOld = this._application.api.optionsGet.bind(this._application.api);          this._application.api.optionsGet = this._apiOptionsGet.bind(this); +        this._languageSummaries = await this._application.api.getLanguageSummaries(); +        const options = await this._application.api.optionsGet({current: true}); +        this._onOptionsChanged({options, optionsContext: {current: true}}); +          // Overwrite frontend          this._frontend = new Frontend({              application: this._application, @@ -268,6 +274,34 @@ export class PopupPreviewFrame {          await this._updateSearch();      } +    /** +     * @param {import('settings-controller').EventArgument<'optionsChanged'>} details +     */ +    async _onOptionsChanged({options: {general: {language}}}) { +        this._setLanguageExampleText({language}); +    } + +    /** +     * @param {{language: string}} details +     */ +    _setLanguageExampleText({language}) { +        const activeLanguage = /** @type {import('language').LanguageSummary} */ (this._languageSummaries.find(({iso}) => iso === language)); + +        if (this._exampleTextInput !== null) { +            if (language === 'ja') { +                wanakana.bind(this._exampleTextInput); +                this._wanakanaBound = true; +            } else if (this._wanakanaBound) { +                wanakana.unbind(this._exampleTextInput); +                this._wanakanaBound = false; +            } +        } + +        this._exampleTextInput.lang = language; +        this._exampleTextInput.value = activeLanguage.exampleText; +        this._exampleTextInput.dispatchEvent(new Event('input')); +    } +      /** */      async _updateSearch() {          if (this._exampleText === null) { return; } diff --git a/ext/popup-preview.html b/ext/popup-preview.html index 15810242..0d410455 100644 --- a/ext/popup-preview.html +++ b/ext/popup-preview.html @@ -20,8 +20,8 @@      <div class="top-options">          <div class="top-options-left">              <div class="example-text-container"> -                <input type="text" class="example-text example-text-input" id="example-text-input" value="読め" lang="ja" hidden> -                <span class="example-text" id="example-text">読め</span> +                <input type="text" class="example-text example-text-input" id="example-text-input" hidden> +                <span class="example-text" id="example-text"></span>              </div>          </div>          <div class="top-options-right"> |