diff options
| author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2021-02-14 23:10:01 -0500 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-14 23:10:01 -0500 | 
| commit | 450912c1098b0ec4c0ec29b7aec8b47143cfd6fc (patch) | |
| tree | 6aae6ab69e037915faf7681991952113ad6d6094 /ext/js/pages/settings/modal-controller.js | |
| parent | d6332d2bc723f9aa60f2c886564bef49a6b91b84 (diff) | |
Move js/settings (#1397)
* Move js/settings to js/pages/settings
* Fix script ordering
Diffstat (limited to 'ext/js/pages/settings/modal-controller.js')
| -rw-r--r-- | ext/js/pages/settings/modal-controller.js | 60 | 
1 files changed, 60 insertions, 0 deletions
diff --git a/ext/js/pages/settings/modal-controller.js b/ext/js/pages/settings/modal-controller.js new file mode 100644 index 00000000..fe4f911b --- /dev/null +++ b/ext/js/pages/settings/modal-controller.js @@ -0,0 +1,60 @@ +/* + * 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 + * Modal + */ + +class ModalController { +    constructor() { +        this._modals = []; +        this._modalMap = new Map(); +    } + +    prepare() { +        const idSuffix = '-modal'; +        for (const node of document.querySelectorAll('.modal')) { +            let {id} = node; +            if (typeof id !== 'string') { continue; } + +            if (id.endsWith(idSuffix)) { +                id = id.substring(0, id.length - idSuffix.length); +            } + +            const modal = new Modal(node); +            modal.prepare(); +            this._modalMap.set(id, modal); +            this._modalMap.set(node, modal); +            this._modals.push(modal); +        } +    } + +    getModal(nameOrNode) { +        const modal = this._modalMap.get(nameOrNode); +        return (typeof modal !== 'undefined' ? modal : null); +    } + +    getTopVisibleModal() { +        for (let i = this._modals.length - 1; i >= 0; --i) { +            const modal = this._modals[i]; +            if (modal.isVisible()) { +                return modal; +            } +        } +        return null; +    } +}  |