aboutsummaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
Diffstat (limited to 'ext')
-rw-r--r--ext/bg/js/backend.js12
-rw-r--r--ext/bg/js/search.js13
-rw-r--r--ext/mixed/js/core.js8
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