diff options
| author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2021-02-13 23:20:22 -0500 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-13 23:20:22 -0500 | 
| commit | 43d1457ebfe23196348649c245dfb942a0f00a1a (patch) | |
| tree | 73163416c2f10817df9a7677c059e36565d0a588 /ext/js/settings/nested-popups-controller.js | |
| parent | 7a74c3c31ece7788e82c46f22cb4327ffe08307a (diff) | |
Move bg/js/settings(2) (#1385)
* Move bg/js/settings/ to js/settings/
* Move bg/js/settings2/ to js/settings/
Diffstat (limited to 'ext/js/settings/nested-popups-controller.js')
| -rw-r--r-- | ext/js/settings/nested-popups-controller.js | 71 | 
1 files changed, 71 insertions, 0 deletions
diff --git a/ext/js/settings/nested-popups-controller.js b/ext/js/settings/nested-popups-controller.js new file mode 100644 index 00000000..1ebc7389 --- /dev/null +++ b/ext/js/settings/nested-popups-controller.js @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2020-2021  Yomichan Authors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <https://www.gnu.org/licenses/>. + */ + +/* global + * DOMDataBinder + */ + +class NestedPopupsController { +    constructor(settingsController) { +        this._settingsController = settingsController; +        this._popupNestingMaxDepth = 0; +    } + +    async prepare() { +        this._nestedPopupsEnabled = document.querySelector('#nested-popups-enabled'); +        this._nestedPopupsCount = document.querySelector('#nested-popups-count'); +        this._nestedPopupsEnabledMoreOptions = document.querySelector('#nested-popups-enabled-more-options'); + +        const options = await this._settingsController.getOptions(); + +        this._nestedPopupsEnabled.addEventListener('change', this._onNestedPopupsEnabledChange.bind(this), false); +        this._nestedPopupsCount.addEventListener('change', this._onNestedPopupsCountChange.bind(this), false); +        this._settingsController.on('optionsChanged', this._onOptionsChanged.bind(this)); +        this._onOptionsChanged({options}); +    } + +    // Private + +    _onOptionsChanged({options}) { +        this._updatePopupNestingMaxDepth(options.scanning.popupNestingMaxDepth); +    } + +    _onNestedPopupsEnabledChange(e) { +        const value = e.currentTarget.checked; +        if (value && this._popupNestingMaxDepth > 0) { return; } +        this._setPopupNestingMaxDepth(value ? 1 : 0); +    } + +    _onNestedPopupsCountChange(e) { +        const node = e.currentTarget; +        const value = Math.max(1, DOMDataBinder.convertToNumber(node.value, node)); +        this._setPopupNestingMaxDepth(value); +    } + +    _updatePopupNestingMaxDepth(value) { +        const enabled = (value > 0); +        this._popupNestingMaxDepth = value; +        this._nestedPopupsEnabled.checked = enabled; +        this._nestedPopupsCount.value = `${value}`; +        this._nestedPopupsEnabledMoreOptions.hidden = !enabled; +    } + +    async _setPopupNestingMaxDepth(value) { +        this._updatePopupNestingMaxDepth(value); +        await this._settingsController.setProfileSetting('scanning.popupNestingMaxDepth', value); +    } +}  |