diff --git a/index.html b/index.html index 3ba29d1..34e4d55 100644 --- a/index.html +++ b/index.html @@ -121,7 +121,7 @@ m: ['m/mail/u/1', 'm/mail/u/2'], o: ['o/discover/sets/new-for-you', 'o/discover/sets/weekly'], p: ['p/beema.finance'], - r: ['r/r/startpages', 'r/r/onebag', 'r/r/fujix', 'r/r/superstonk'], + r: ['r/r/startpages', 'r/r/unixporn', 'r/r/onebag', 'r/r/fujix'], s: ['s/collection/tracks', 's/playlist/37i9dQZEVXcXr3r4FYT3J7'], u: ['u/explore', 'u/backgrounds'], y: ['y/feed/trending'], @@ -844,7 +844,7 @@ } getSuggestions(parsedQuery) { - const { query } = parsedQuery; + const { lower, query } = parsedQuery; if (this._isTooShort(query)) return Promise.resolve([]); return new Promise((resolve) => { @@ -853,7 +853,7 @@ this._addSearchPrefix( res .map((i) => i.phrase) - .filter((s) => s.toLowerCase() !== query.toLowerCase()) + .filter((s) => s.toLowerCase() !== lower) .slice(0, this._limit), parsedQuery ) @@ -872,67 +872,49 @@ this._storeName = 'history'; } - static clearHistory() { - localStorage.clear(); - } - - addItem({ isPath, query }) { - if (isPath || query.length < this._minChars) return; + addItem({ isPath, lower }) { + if (isPath || this._isTooShort(lower)) return; let exists; const history = this._getHistory().map(([item, count]) => { - const match = item.toLowerCase() === query.toLowerCase(); + const match = item === lower; if (match) exists = true; return [item, match ? count + 1 : count]; }); - if (!exists) history.push([query, 1]); - - const sorted = history - .sort((current, next) => current[1] - next[1]) - .reverse(); - - this._setHistory(sorted); + if (!exists) history.push([lower, 1]); + this._setHistory(history.sort((a, b) => b[1] - a[1])); } getSuggestions(parsedQuery) { - const { query } = parsedQuery; - if (this._isTooShort(query)) return Promise.resolve([]); + const { lower } = parsedQuery; + if (this._isTooShort(lower)) return Promise.resolve([]); return new Promise((resolve) => resolve( this._addSearchPrefix( this._getHistory() - .map(([item]) => item) - .filter( - (item) => - query && - item.toLowerCase() !== query.toLowerCase() && - item.toLowerCase().includes(query.toLowerCase()) - ) - .slice(0, this._limit), + .filter(([item]) => item !== lower && item.includes(lower)) + .slice(0, this._limit) + .map(([item]) => item), parsedQuery ) ) ); } - _fetch() { - return JSON.parse(localStorage.getItem(this._storeName)) || []; - } - _getHistory() { - this._history = this._history || this._fetch(); - return this._history; - } + this._history = + this._history || + JSON.parse(localStorage.getItem(this._storeName)) || + []; - _save(history) { - localStorage.setItem(this._storeName, JSON.stringify(history)); + return this._history; } _setHistory(history) { this._history = history; - this._save(history); + localStorage.setItem(this._storeName, JSON.stringify(history)); } } @@ -1136,6 +1118,7 @@ const res = []; res.raw = query.trim(); res.query = res.raw; + res.lower = res.raw.toLowerCase(); res.split = null; if (this._urlRegex.test(query)) {