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 |