From b69cc04856fd21d325193d56e212e4dbf07cb762 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Wed, 11 Jul 2018 21:01:22 +0900 Subject: [PATCH 1/8] Use combineReducers --- src/background/reducers/index.js | 23 +++++++--------------- src/content/reducers/index.js | 33 +++++++++----------------------- 2 files changed, 16 insertions(+), 40 deletions(-) diff --git a/src/background/reducers/index.js b/src/background/reducers/index.js index 78f855c..465f927 100644 --- a/src/background/reducers/index.js +++ b/src/background/reducers/index.js @@ -1,17 +1,8 @@ -import settingReducer from './setting'; -import findReducer from './find'; -import tabReducer from './tab'; +import { combineReducers } from 'redux'; +import setting from './setting'; +import find from './find'; +import tab from './tab'; -// Make setting reducer instead of re-use -const defaultState = { - setting: settingReducer(undefined, {}), - find: findReducer(undefined, {}), - tab: tabReducer(undefined, {}), -}; - -export default function reducer(state = defaultState, action = {}) { - return { ...state, - setting: settingReducer(state.setting, action), - find: findReducer(state.find, action), - tab: tabReducer(state.tab, action), }; -} +export default combineReducers({ + setting, find, tab, +}); diff --git a/src/content/reducers/index.js b/src/content/reducers/index.js index c3a474e..6e6a147 100644 --- a/src/content/reducers/index.js +++ b/src/content/reducers/index.js @@ -1,25 +1,10 @@ -import addonReducer from './addon'; -import findReducer from './find'; -import settingReducer from './setting'; -import inputReducer from './input'; -import followControllerReducer from './follow-controller'; +import { combineReducers } from 'redux'; +import addon from './addon'; +import find from './find'; +import setting from './setting'; +import input from './input'; +import followController from './follow-controller'; -// Make setting reducer instead of re-use -const defaultState = { - addon: addonReducer(undefined, {}), - find: findReducer(undefined, {}), - setting: settingReducer(undefined, {}), - input: inputReducer(undefined, {}), - followController: followControllerReducer(undefined, {}), -}; - -export default function reducer(state = defaultState, action = {}) { - return { - ...state, - addon: addonReducer(state.addon, action), - find: findReducer(state.find, action), - setting: settingReducer(state.setting, action), - input: inputReducer(state.input, action), - followController: followControllerReducer(state.followController, action), - }; -} +export default combineReducers({ + addon, find, setting, input, followController, +}); From 067da88d06fbffca323ecdbaf8b1011f88225219 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Wed, 11 Jul 2018 21:01:48 +0900 Subject: [PATCH 2/8] Move versions to background --- src/background/index.js | 2 +- src/{ => background}/shared/versions/index.js | 2 +- src/{ => background}/shared/versions/release-notes.js | 0 src/{ => background}/shared/versions/storage.js | 0 test/{ => background}/shared/versions/index.test.js | 4 ++-- test/{ => background}/shared/versions/storage.test.js | 2 +- 6 files changed, 5 insertions(+), 5 deletions(-) rename src/{ => background}/shared/versions/index.js (95%) rename src/{ => background}/shared/versions/release-notes.js (100%) rename src/{ => background}/shared/versions/storage.js (100%) rename test/{ => background}/shared/versions/index.test.js (91%) rename test/{ => background}/shared/versions/storage.test.js (92%) diff --git a/src/background/index.js b/src/background/index.js index 8c4eafc..1e4c078 100644 --- a/src/background/index.js +++ b/src/background/index.js @@ -6,7 +6,7 @@ import IndicatorComponent from 'background/components/indicator'; import reducers from 'background/reducers'; import { createStore, applyMiddleware } from 'redux'; import promise from 'redux-promise'; -import * as versions from 'shared/versions'; +import * as versions from './shared/versions'; const store = createStore( reducers, diff --git a/src/shared/versions/index.js b/src/background/shared/versions/index.js similarity index 95% rename from src/shared/versions/index.js rename to src/background/shared/versions/index.js index ba3d183..aa09c92 100644 --- a/src/shared/versions/index.js +++ b/src/background/shared/versions/index.js @@ -1,6 +1,6 @@ import * as storage from './storage'; import * as releaseNotes from './release-notes'; -import manifest from '../../../manifest.json'; +import manifest from '../../../../manifest.json'; const NOTIFICATION_ID = 'vimvixen-update'; diff --git a/src/shared/versions/release-notes.js b/src/background/shared/versions/release-notes.js similarity index 100% rename from src/shared/versions/release-notes.js rename to src/background/shared/versions/release-notes.js diff --git a/src/shared/versions/storage.js b/src/background/shared/versions/storage.js similarity index 100% rename from src/shared/versions/storage.js rename to src/background/shared/versions/storage.js diff --git a/test/shared/versions/index.test.js b/test/background/shared/versions/index.test.js similarity index 91% rename from test/shared/versions/index.test.js rename to test/background/shared/versions/index.test.js index d90f04c..d65dd9a 100644 --- a/test/shared/versions/index.test.js +++ b/test/background/shared/versions/index.test.js @@ -1,5 +1,5 @@ -import * as versions from 'shared/versions'; -import manifest from '../../../manifest.json'; +import * as versions from 'background/shared/versions'; +import manifest from '../../../../manifest.json'; describe("shared/versions/storage", () => { describe('#checkUpdated', () => { diff --git a/test/shared/versions/storage.test.js b/test/background/shared/versions/storage.test.js similarity index 92% rename from test/shared/versions/storage.test.js rename to test/background/shared/versions/storage.test.js index f541abf..f452516 100644 --- a/test/shared/versions/storage.test.js +++ b/test/background/shared/versions/storage.test.js @@ -1,4 +1,4 @@ -import * as storage from 'shared/versions/storage'; +import * as storage from 'background/shared/versions/storage'; describe("shared/versions/storage", () => { describe('#load', () => { From a28f6f916d77baf87e3c023abbd6494e009a8d12 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Wed, 11 Jul 2018 21:32:28 +0900 Subject: [PATCH 3/8] Complete console commands --- src/background/shared/completions/index.js | 41 +++++++++++++--------- src/shared/commands/docs.js | 11 ++++++ 2 files changed, 36 insertions(+), 16 deletions(-) create mode 100644 src/shared/commands/docs.js diff --git a/src/background/shared/completions/index.js b/src/background/shared/completions/index.js index d5875fe..22713e7 100644 --- a/src/background/shared/completions/index.js +++ b/src/background/shared/completions/index.js @@ -1,7 +1,19 @@ +import commandDocs from 'shared/commands/docs'; import * as tabs from './tabs'; import * as histories from './histories'; import * as bookmarks from './bookmarks'; +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)) @@ -74,20 +86,21 @@ const getBufferCompletions = async(command, keywords, excludePinned) => { ]; }; -const getCompletions = (line, settings) => { - let typedWords = line.trim().split(/ +/); - let typing = ''; - if (!line.endsWith(' ')) { - typing = typedWords.pop(); - } - - if (typedWords.length === 0) { - return Promise.resolve([]); +const complete = (line, settings) => { + let trimmed = line.trimStart(); + let words = trimmed.split(/ +/); + let name = words[0]; + if (words.length === 1) { + return Promise.resolve([ + { + name: 'Console Command', + items: completeCommands(name), + } + ]); } - let name = typedWords.shift(); - let keywords = typedWords.concat(typing).join(' '); + let keywords = trimmed.slice(name.length).trimStart(); - switch (name) { + switch (words[0]) { case 'o': case 'open': case 't': @@ -112,8 +125,4 @@ const getCompletions = (line, settings) => { return Promise.resolve([]); }; -const complete = (line, settings) => { - return getCompletions(line, settings); -}; - export { complete }; diff --git a/src/shared/commands/docs.js b/src/shared/commands/docs.js new file mode 100644 index 0000000..c73eb71 --- /dev/null +++ b/src/shared/commands/docs.js @@ -0,0 +1,11 @@ +export default { + set: 'Set a value of the property', + open: 'Open a URL or search by keywords in current tab', + tabopen: 'Open a URL or search by keywords in new tab', + winopen: 'Open a URL or search by keywords in new window', + buffer: 'Sekect tabs by matched keywords', + bdelete: 'Close a certain tab matched by keywords', + bdeletes: 'Close all tabs matched by keywords', + quit: 'Close the current tab', + quitall: 'Close all tabs', +}; From 1e39fed6183bf3b10f48eb52868bb5ab3fe3134f Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Wed, 11 Jul 2018 21:58:41 +0900 Subject: [PATCH 4/8] Complete set commands --- src/background/shared/completions/index.js | 37 ++++++++++++++++++++++ src/shared/settings/properties.js | 8 ++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/background/shared/completions/index.js b/src/background/shared/completions/index.js index 22713e7..d630f33 100644 --- a/src/background/shared/completions/index.js +++ b/src/background/shared/completions/index.js @@ -2,6 +2,7 @@ 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); @@ -86,6 +87,40 @@ const getBufferCompletions = async(command, keywords, excludePinned) => { ]; }; +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], + } + ]; + }).flat(); + return Promise.resolve([ + { + name: 'Properties', + items, + } + ]); +}; + const complete = (line, settings) => { let trimmed = line.trimStart(); let words = trimmed.split(/ +/); @@ -121,6 +156,8 @@ const complete = (line, settings) => { case 'bdelete': case 'bdeletes': return getBufferCompletions(name, keywords, true); + case 'set': + return getSetCompletions(name, keywords); } return Promise.resolve([]); }; diff --git a/src/shared/settings/properties.js b/src/shared/settings/properties.js index 4bda8d6..b392cbb 100644 --- a/src/shared/settings/properties.js +++ b/src/shared/settings/properties.js @@ -15,4 +15,10 @@ const defaults = { adjacenttab: true, }; -export { types, defaults }; +const docs = { + hintchars: 'Hint characters on follow mode', + smoothscroll: 'smooth scroll', + adjacenttab: 'open adjacent tabs', +}; + +export { types, defaults, docs }; From f555e1348c8e383983487a79f797fe06540862f4 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Fri, 13 Jul 2018 21:49:34 +0900 Subject: [PATCH 5/8] Fix command and property completions --- src/background/shared/completions/index.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/background/shared/completions/index.js b/src/background/shared/completions/index.js index d630f33..4fd37fd 100644 --- a/src/background/shared/completions/index.js +++ b/src/background/shared/completions/index.js @@ -113,6 +113,9 @@ const getSetCompletions = (command, keywords) => { } ]; }).flat(); + if (items.length === 0) { + return Promise.resolve([]); + } return Promise.resolve([ { name: 'Properties', @@ -126,6 +129,10 @@ const complete = (line, settings) => { 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', From 8db779388f260631286332aec6cb6a448a29d791 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Fri, 13 Jul 2018 21:59:23 +0900 Subject: [PATCH 6/8] Fix error on no completion items --- src/console/reducers/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/console/reducers/index.js b/src/console/reducers/index.js index 71b0776..043689c 100644 --- a/src/console/reducers/index.js +++ b/src/console/reducers/index.js @@ -11,6 +11,9 @@ const defaultState = { }; const nextSelection = (state) => { + if (state.completions.length === 0) { + return [-1, -1]; + }; if (state.groupSelection < 0) { return [0, 0]; } From ccc6a31ddeab78660305d9088e8260156b251779 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Fri, 13 Jul 2018 22:09:04 +0900 Subject: [PATCH 7/8] fix --- src/background/shared/completions/index.js | 2 +- src/console/reducers/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/background/shared/completions/index.js b/src/background/shared/completions/index.js index 4fd37fd..d0d00ef 100644 --- a/src/background/shared/completions/index.js +++ b/src/background/shared/completions/index.js @@ -130,7 +130,7 @@ const complete = (line, settings) => { let name = words[0]; if (words.length === 1) { let items = completeCommands(name); - if (items.length === 0) { + if (items.length === 0) { return Promise.resolve([]); } return Promise.resolve([ diff --git a/src/console/reducers/index.js b/src/console/reducers/index.js index 043689c..7dcad17 100644 --- a/src/console/reducers/index.js +++ b/src/console/reducers/index.js @@ -13,7 +13,7 @@ const defaultState = { const nextSelection = (state) => { if (state.completions.length === 0) { return [-1, -1]; - }; + } if (state.groupSelection < 0) { return [0, 0]; } From 803e6ea7af60107182356b5fda8e3c2ddfacaefa Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Fri, 13 Jul 2018 22:14:19 +0900 Subject: [PATCH 8/8] Replace flat with reduce-concat --- src/background/shared/completions/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/background/shared/completions/index.js b/src/background/shared/completions/index.js index d0d00ef..9ca13f7 100644 --- a/src/background/shared/completions/index.js +++ b/src/background/shared/completions/index.js @@ -112,7 +112,8 @@ const getSetCompletions = (command, keywords) => { url: 'Set ' + properties.docs[key], } ]; - }).flat(); + }); + items = items.reduce((acc, val) => acc.concat(val), []); if (items.length === 0) { return Promise.resolve([]); }