From f4af3f31efb41a1379868c6f128e7a03ee05fd2b Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Wed, 31 Mar 2021 18:53:08 -0400 Subject: Make secondary dictionary option controllers more consistent (#1577) --- .../secondary-search-dictionary-controller.js | 34 ++++++++++++++++------ 1 file changed, 25 insertions(+), 9 deletions(-) (limited to 'ext/js/pages/settings/secondary-search-dictionary-controller.js') diff --git a/ext/js/pages/settings/secondary-search-dictionary-controller.js b/ext/js/pages/settings/secondary-search-dictionary-controller.js index 2fb3de67..13e1dcf5 100644 --- a/ext/js/pages/settings/secondary-search-dictionary-controller.js +++ b/ext/js/pages/settings/secondary-search-dictionary-controller.js @@ -23,42 +23,58 @@ class SecondarySearchDictionaryController { constructor(settingsController) { this._settingsController = settingsController; this._getDictionaryInfoToken = null; - this._container = null; + this._dictionaryInfoMap = new Map(); this._eventListeners = new EventListenerCollection(); + this._container = null; } async prepare() { this._container = document.querySelector('#secondary-search-dictionary-list'); - yomichan.on('databaseUpdated', this._onDatabaseUpdated.bind(this)); - await this._onDatabaseUpdated(); + + yomichan.on('databaseUpdated', this._onDatabaseUpdated.bind(this)); + this._settingsController.on('optionsChanged', this._onOptionsChanged.bind(this)); } // Private async _onDatabaseUpdated() { - this._eventListeners.removeAllEventListeners(); - const token = {}; this._getDictionaryInfoToken = token; const dictionaries = await this._settingsController.getDictionaryInfo(); if (this._getDictionaryInfoToken !== token) { return; } this._getDictionaryInfoToken = null; + this._dictionaryInfoMap.clear(); + for (const entry of dictionaries) { + this._dictionaryInfoMap.set(entry.title, entry); + } + + const options = await this._settingsController.getOptions(); + this._onOptionsChanged({options}); + } + + _onOptionsChanged({options}) { + this._eventListeners.removeAllEventListeners(); + const fragment = document.createDocumentFragment(); - for (const {title, revision} of dictionaries) { + + for (const dictionary of Object.keys(options.dictionaries)) { + const dictionaryInfo = this._dictionaryInfoMap.get(dictionary); + if (typeof dictionaryInfo === 'undefined') { continue; } + const node = this._settingsController.instantiateTemplate('secondary-search-dictionary'); fragment.appendChild(node); const nameNode = node.querySelector('.dictionary-title'); - nameNode.textContent = title; + nameNode.textContent = dictionary; const versionNode = node.querySelector('.dictionary-version'); - versionNode.textContent = `rev.${revision}`; + versionNode.textContent = `rev.${dictionaryInfo.revision}`; const toggle = node.querySelector('.dictionary-allow-secondary-searches'); - toggle.dataset.setting = ObjectPropertyAccessor.getPathString(['dictionaries', title, 'allowSecondarySearches']); + toggle.dataset.setting = ObjectPropertyAccessor.getPathString(['dictionaries', dictionary, 'allowSecondarySearches']); this._eventListeners.addEventListener(toggle, 'settingChanged', this._onEnabledChanged.bind(this, node), false); } -- cgit v1.2.3