diff options
Diffstat (limited to 'ext')
-rw-r--r-- | ext/bg/js/backend.js | 12 | ||||
-rw-r--r-- | ext/bg/js/search.js | 13 | ||||
-rw-r--r-- | ext/mixed/js/core.js | 8 |
3 files changed, 18 insertions, 15 deletions
diff --git a/ext/bg/js/backend.js b/ext/bg/js/backend.js index 9eb1d9ca..9565a8d9 100644 --- a/ext/bg/js/backend.js +++ b/ext/bg/js/backend.js @@ -608,14 +608,16 @@ class Backend { const queryString = new URLSearchParams(queryParams).toString(); const url = `${baseUrl}?${queryString}`; + const isTabMatch = (url2) => { + if (url2 === null || !url2.startsWith(baseUrl)) { return false; } + const {baseUrl: baseUrl2, queryParams: queryParams2} = parseUrl(url2); + return baseUrl2 === baseUrl && (queryParams2.mode === mode || (!queryParams2.mode && mode === 'existingOrNewTab')); + }; + switch (mode) { case 'existingOrNewTab': try { - const tab = await Backend._findTab(1000, (url2) => ( - url2 !== null && - url2.startsWith(baseUrl) && - (url2.length === baseUrl.length || url2[baseUrl.length] === '?' || url2[baseUrl.length] === '#') - )); + const tab = await Backend._findTab(1000, isTabMatch); if (tab !== null) { await Backend._focusTab(tab); if (queryParams.query) { diff --git a/ext/bg/js/search.js b/ext/bg/js/search.js index 1baee904..b6a1e66a 100644 --- a/ext/bg/js/search.js +++ b/ext/bg/js/search.js @@ -49,7 +49,7 @@ class DisplaySearch extends Display { try { await this.initialize(); - const {query='', mode=''} = DisplaySearch.parseQueryStringFromLocation(window.location.href); + const {queryParams: {query='', mode=''}} = parseUrl(window.location.href); if (this.search !== null) { this.search.addEventListener('click', (e) => this.onSearch(e), false); @@ -66,7 +66,7 @@ class DisplaySearch extends Display { this.wanakanaEnable.checked = false; } this.wanakanaEnable.addEventListener('change', (e) => { - const {query=''} = DisplaySearch.parseQueryStringFromLocation(window.location.href); + const {queryParams: {query=''}} = parseUrl(window.location.href); if (e.target.checked) { window.wanakana.bind(this.query); apiOptionsSet({general: {enableWanakana: true}}, this.getOptionsContext()); @@ -157,7 +157,7 @@ class DisplaySearch extends Display { } onPopState() { - const {query='', mode=''} = DisplaySearch.parseQueryStringFromLocation(window.location.href); + const {queryParams: {query='', mode=''}} = parseUrl(window.location.href); document.documentElement.dataset.searchMode = mode; this.setQuery(query); this.onSearchQueryUpdated(this.query.value, false); @@ -323,13 +323,6 @@ class DisplaySearch extends Display { document.title = `${text} - Yomichan Search`; } } - - static parseQueryStringFromLocation(url) { - const parsedUrl = new URL(url); - const parsedSearch = new URLSearchParams(parsedUrl.search); - return Array.from(parsedSearch.entries()) - .reduce((a, [k, v]) => Object.assign({}, a, {[k]: v}), {}); - } } DisplaySearch.onKeyDownIgnoreKeys = { diff --git a/ext/mixed/js/core.js b/ext/mixed/js/core.js index 0142d594..ca9e98e5 100644 --- a/ext/mixed/js/core.js +++ b/ext/mixed/js/core.js @@ -128,6 +128,14 @@ function stringReverse(string) { return string.split('').reverse().join('').replace(/([\uDC00-\uDFFF])([\uD800-\uDBFF])/g, '$2$1'); } +function parseUrl(url) { + const parsedUrl = new URL(url); + const baseUrl = `${parsedUrl.origin}${parsedUrl.pathname}`; + const queryParams = Array.from(parsedUrl.searchParams.entries()) + .reduce((a, [k, v]) => Object.assign({}, a, {[k]: v}), {}); + return {baseUrl, queryParams}; +} + /* * Async utilities |