diff options
Diffstat (limited to 'src/background/shared/completions')
-rw-r--r-- | src/background/shared/completions/bookmarks.js | 14 | ||||
-rw-r--r-- | src/background/shared/completions/histories.js | 82 | ||||
-rw-r--r-- | src/background/shared/completions/index.js | 173 | ||||
-rw-r--r-- | src/background/shared/completions/tabs.js | 8 |
4 files changed, 0 insertions, 277 deletions
diff --git a/src/background/shared/completions/bookmarks.js b/src/background/shared/completions/bookmarks.js deleted file mode 100644 index bd753af..0000000 --- a/src/background/shared/completions/bookmarks.js +++ /dev/null @@ -1,14 +0,0 @@ -const getCompletions = async(keywords) => { - let items = await browser.bookmarks.search({ query: keywords }); - return items.filter((item) => { - let url = undefined; - try { - url = new URL(item.url); - } catch (e) { - return false; - } - return item.type === 'bookmark' && url.protocol !== 'place:'; - }).slice(0, 10); -}; - -export { getCompletions }; diff --git a/src/background/shared/completions/histories.js b/src/background/shared/completions/histories.js deleted file mode 100644 index 2d35401..0000000 --- a/src/background/shared/completions/histories.js +++ /dev/null @@ -1,82 +0,0 @@ -const filterHttp = (items) => { - const httpsHosts = items - .filter(item => item[1].protocol === 'https:') - .map(item => item[1].host); - const httpsHostSet = new Set(httpsHosts); - return items.filter( - item => !(item[1].protocol === 'http:' && httpsHostSet.has(item[1].host)) - ); -}; - -const filterEmptyTitle = (items) => { - return items.filter(item => item[0].title && item[0].title !== ''); -}; - -const filterClosedPath = (items) => { - const allSimplePaths = items - .filter(item => item[1].hash === '' && item[1].search === '') - .map(item => item[1].origin + item[1].pathname); - const allSimplePathSet = new Set(allSimplePaths); - return items.filter( - item => !(item[1].hash === '' && item[1].search === '' && - (/\/$/).test(item[1].pathname) && - allSimplePathSet.has( - (item[1].origin + item[1].pathname).replace(/\/$/, '') - ) - ) - ); -}; - -const reduceByPathname = (items, min) => { - let hash = {}; - for (let item of items) { - let pathname = item[1].origin + item[1].pathname; - if (!hash[pathname]) { - hash[pathname] = item; - } else if (hash[pathname][1].href.length > item[1].href.length) { - hash[pathname] = item; - } - } - let filtered = Object.values(hash); - if (filtered.length < min) { - return items; - } - return filtered; -}; - -const reduceByOrigin = (items, min) => { - let hash = {}; - for (let item of items) { - let origin = item[1].origin; - if (!hash[origin]) { - hash[origin] = item; - } else if (hash[origin][1].href.length > item[1].href.length) { - hash[origin] = item; - } - } - let filtered = Object.values(hash); - if (filtered.length < min) { - return items; - } - return filtered; -}; - -const getCompletions = async(keyword) => { - let historyItems = await browser.history.search({ - text: keyword, - startTime: 0, - }); - return [historyItems.map(item => [item, new URL(item.url)])] - .map(filterEmptyTitle) - .map(filterHttp) - .map(filterClosedPath) - .map(items => reduceByPathname(items, 10)) - .map(items => reduceByOrigin(items, 10)) - .map(items => items - .sort((x, y) => x[0].visitCount < y[0].visitCount) - .slice(0, 10) - .map(item => item[0]) - )[0]; -}; - -export { getCompletions }; diff --git a/src/background/shared/completions/index.js b/src/background/shared/completions/index.js deleted file mode 100644 index 9ca13f7..0000000 --- a/src/background/shared/completions/index.js +++ /dev/null @@ -1,173 +0,0 @@ -import commandDocs from 'shared/commands/docs'; -import * as tabs from './tabs'; -import * as histories from './histories'; -import * as bookmarks from './bookmarks'; -import * as properties from 'shared/settings/properties'; - -const completeCommands = (typing) => { - let keys = Object.keys(commandDocs); - return keys - .filter(name => name.startsWith(typing)) - .map(name => ({ - caption: name, - content: name, - url: commandDocs[name], - })); -}; - -const getSearchCompletions = (command, keywords, searchConfig) => { - let engineNames = Object.keys(searchConfig.engines); - let engineItems = engineNames.filter(name => name.startsWith(keywords)) - .map(name => ({ - caption: name, - content: command + ' ' + name - })); - return Promise.resolve(engineItems); -}; - -const getHistoryCompletions = async(command, keywords) => { - let items = await histories.getCompletions(keywords); - return items.map((page) => { - return { - caption: page.title, - content: command + ' ' + page.url, - url: page.url - }; - }); -}; - -const getBookmarksCompletions = async(command, keywords) => { - let items = await bookmarks.getCompletions(keywords); - return items.map(item => ({ - caption: item.title, - content: command + ' ' + item.url, - url: item.url, - })); -}; - -const getOpenCompletions = async(command, keywords, searchConfig) => { - let engineItems = await getSearchCompletions(command, keywords, searchConfig); - let historyItems = await getHistoryCompletions(command, keywords); - let bookmarkItems = await getBookmarksCompletions(command, keywords); - let completions = []; - if (engineItems.length > 0) { - completions.push({ - name: 'Search Engines', - items: engineItems - }); - } - if (historyItems.length > 0) { - completions.push({ - name: 'History', - items: historyItems - }); - } - if (bookmarkItems.length > 0) { - completions.push({ - name: 'Bookmarks', - items: bookmarkItems - }); - } - return completions; -}; - -const getBufferCompletions = async(command, keywords, excludePinned) => { - let items = await tabs.getCompletions(keywords, excludePinned); - items = items.map(tab => ({ - caption: tab.title, - content: command + ' ' + tab.title, - url: tab.url, - icon: tab.favIconUrl - })); - return [ - { - name: 'Buffers', - items: items - } - ]; -}; - -const getSetCompletions = (command, keywords) => { - let keys = Object.keys(properties.docs).filter( - name => name.startsWith(keywords) - ); - let items = keys.map((key) => { - if (properties.types[key] === 'boolean') { - return [ - { - caption: key, - content: command + ' ' + key, - url: 'Enable ' + properties.docs[key], - }, { - caption: 'no' + key, - content: command + ' no' + key, - url: 'Disable ' + properties.docs[key], - } - ]; - } - return [ - { - caption: key, - content: command + ' ' + key, - url: 'Set ' + properties.docs[key], - } - ]; - }); - items = items.reduce((acc, val) => acc.concat(val), []); - if (items.length === 0) { - return Promise.resolve([]); - } - return Promise.resolve([ - { - name: 'Properties', - items, - } - ]); -}; - -const complete = (line, settings) => { - let trimmed = line.trimStart(); - let words = trimmed.split(/ +/); - let name = words[0]; - if (words.length === 1) { - let items = completeCommands(name); - if (items.length === 0) { - return Promise.resolve([]); - } - return Promise.resolve([ - { - name: 'Console Command', - items: completeCommands(name), - } - ]); - } - let keywords = trimmed.slice(name.length).trimStart(); - - switch (words[0]) { - case 'o': - case 'open': - case 't': - case 'tabopen': - case 'w': - case 'winopen': - return getOpenCompletions(name, keywords, settings.search); - case 'b': - case 'buffer': - return getBufferCompletions(name, keywords, false); - case 'bd!': - case 'bdel!': - case 'bdelete!': - case 'bdeletes!': - return getBufferCompletions(name, keywords, false); - case 'bd': - case 'bdel': - case 'bdelete': - case 'bdeletes': - return getBufferCompletions(name, keywords, true); - case 'set': - return getSetCompletions(name, keywords); - } - return Promise.resolve([]); -}; - -export { complete }; diff --git a/src/background/shared/completions/tabs.js b/src/background/shared/completions/tabs.js deleted file mode 100644 index bdb2741..0000000 --- a/src/background/shared/completions/tabs.js +++ /dev/null @@ -1,8 +0,0 @@ -import * as tabs from '../tabs'; - -const getCompletions = (keyword, excludePinned) => { - return tabs.queryByKeyword(keyword, excludePinned); -}; - - -export { getCompletions }; |