diff options
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/bg/js/backend.js | 87 | 
1 files changed, 60 insertions, 27 deletions
| diff --git a/ext/bg/js/backend.js b/ext/bg/js/backend.js index 3229e278..b731fc6c 100644 --- a/ext/bg/js/backend.js +++ b/ext/bg/js/backend.js @@ -206,7 +206,7 @@ class Backend {              const options = this.getOptions({current: true});              if (options.general.showGuide) { -                chrome.tabs.create({url: chrome.runtime.getURL('/bg/welcome.html')}); +                this._openWelcomeGuidePage();              }              this._clipboardMonitor.on('change', this._onClipboardTextChange.bind(this)); @@ -782,41 +782,21 @@ class Backend {                  } catch (e) {                      // NOP                  } -                chrome.tabs.create({url}); +                await this._createTab(url);                  return;              case 'newTab': -                chrome.tabs.create({url}); +                await this._createTab(url);                  return;          }      } -    _onCommandHelp() { -        const url = chrome.runtime.getURL('/bg/info.html'); -        chrome.tabs.create({url}); +    async _onCommandHelp() { +        await this._openInfoPage();      } -    _onCommandOptions(params) { -        const {useSettingsV2} = this._options.global; +    async _onCommandOptions(params) {          const {mode='existingOrNewTab'} = params || {}; -        if (mode === 'existingOrNewTab') { -            if (useSettingsV2) { -                (async () => { -                    const url = chrome.runtime.getURL('/bg/settings2.html'); -                    const tab = await this._findTab(1000, (url2) => url2.startsWith(url)); -                    if (tab !== null) { -                        await this._focusTab(tab); -                    } else { -                        chrome.tabs.create({url}); -                    } -                })(); -                return; -            } -            chrome.runtime.openOptionsPage(); -        } else if (mode === 'newTab') { -            const manifest = chrome.runtime.getManifest(); -            const url = chrome.runtime.getURL(useSettingsV2 ? '/bg/settings2.html' : manifest.options_ui.page); -            chrome.tabs.create({url}); -        } +        await this._openSettingsPage(mode);      }      async _onCommandToggle() { @@ -1735,4 +1715,57 @@ class Backend {          }          return enabledDictionaryMap;      } + +    async _openWelcomeGuidePage() { +        await this._createTab(chrome.runtime.getURL('/bg/welcome.html')); +    } + +    async _openInfoPage() { +        await this._createTab(chrome.runtime.getURL('/bg/info.html')); +    } + +    async _openSettingsPage(mode) { +        const {useSettingsV2} = this._options.global; +        const manifest = chrome.runtime.getManifest(); +        const url = chrome.runtime.getURL(useSettingsV2 ? '/bg/settings2.html' : manifest.options_ui.page); +        switch (mode) { +            case 'existingOrNewTab': +                if (useSettingsV2) { +                    const tab = await this._findTab(1000, (url2) => url2.startsWith(url)); +                    if (tab !== null) { +                        await this._focusTab(tab); +                    } else { +                        await this._createTab(url); +                    } +                } else { +                    await new Promise((resolve, reject) => { +                        chrome.runtime.openOptionsPage(() => { +                            const e = chrome.runtime.lastError; +                            if (e) { +                                reject(new Error(e.message)); +                            } else { +                                resolve(); +                            } +                        }); +                    }); +                } +                break; +            case 'newTab': +                await this._createTab(url); +                break; +        } +    } + +    _createTab(url) { +        return new Promise((resolve, reject) => { +            chrome.tabs.create({url}, (tab) => { +                const e = chrome.runtime.lastError; +                if (e) { +                    reject(new Error(e.message)); +                } else { +                    resolve(tab); +                } +            }); +        }); +    }  } |