From f27d21908a2b402e3274288d4411a48160f38e4c Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sat, 25 Nov 2017 18:03:15 +0900 Subject: [PATCH] load settiongs from form --- src/settings/actions/setting.js | 12 +++++- src/settings/components/form/keymaps-form.jsx | 38 +++++++++---------- .../default.js} | 38 +++++++++---------- src/shared/settings/values.js | 35 +++++++++++++++++ 4 files changed, 83 insertions(+), 40 deletions(-) rename src/shared/{default-settings.js => settings/default.js} (81%) create mode 100644 src/shared/settings/values.js diff --git a/src/settings/actions/setting.js b/src/settings/actions/setting.js index fa158a3..1d4ef34 100644 --- a/src/settings/actions/setting.js +++ b/src/settings/actions/setting.js @@ -1,6 +1,7 @@ import actions from 'settings/actions'; import messages from 'shared/messages'; -import DefaultSettings from 'shared/default-settings'; +import DefaultSettings from 'shared/settings/default'; +import * as settingsValues from 'shared/settings/values'; const load = () => { return browser.storage.local.get('settings').then(({ settings }) => { @@ -24,12 +25,19 @@ const save = (settings) => { }; const set = (settings) => { + let value = JSON.parse(DefaultSettings.json); + if (settings.source === 'json') { + value = settingsValues.fromJson(settings.json); + } else if (settings.source === 'form') { + value = settingsValues.fromForm(settings.form); + } + return { type: actions.SETTING_SET_SETTINGS, source: settings.source, json: settings.json, form: settings.form, - value: JSON.parse(settings.json), + value, }; }; diff --git a/src/settings/components/form/keymaps-form.jsx b/src/settings/components/form/keymaps-form.jsx index a112979..a827e4e 100644 --- a/src/settings/components/form/keymaps-form.jsx +++ b/src/settings/components/form/keymaps-form.jsx @@ -4,29 +4,29 @@ import Input from '../ui/input'; const KeyMapFields = [ [ - ['scroll.vertically?{count:-1}', 'Scroll down'], - ['scroll.vertically?{count:1}', 'Scroll up'], - ['scroll.horizonally?{count:-1}', 'Scroll left'], - ['scroll.horizonally?{count:1}', 'Scroll right'], + ['scroll.vertically?{"count":1}', 'Scroll down'], + ['scroll.vertically?{"count":-1}', 'Scroll up'], + ['scroll.horizonally?{"count":-1}', 'Scroll left'], + ['scroll.horizonally?{"count":1}', 'Scroll right'], ['scroll.home', 'Scroll leftmost'], ['scroll.end', 'Scroll last'], - ['scroll.pages?{count:-0.5}', 'Scroll up by half of screen'], - ['scroll.pages?{count:0.5}', 'Scroll up by half of screen'], - ['scroll.pages?{count:-1}', 'Scroll up by a screen'], - ['scroll.pages?{count:1}', 'Scroll up by a screen'], + ['scroll.pages?{"count":-0.5}', 'Scroll up by half of screen'], + ['scroll.pages?{"count":0.5}', 'Scroll up by half of screen'], + ['scroll.pages?{"count":-1}', 'Scroll up by a screen'], + ['scroll.pages?{"count":1}', 'Scroll up by a screen'], ], [ ['tabs.close', 'Close a tab'], ['tabs.reopen', 'Reopen closed tab'], - ['tabs.next?{count:1}', 'Select next Tab'], - ['tabs.prev?{count:1}', 'Select prev Tab'], + ['tabs.next?{"count":1}', 'Select next Tab'], + ['tabs.prev?{"count":1}', 'Select prev Tab'], ['tabs.first', 'Select first tab'], ['tabs.last', 'Select last tab'], - ['tabs.reload?{cache:true}', 'Reload current tab'], + ['tabs.reload?{"cache":true}', 'Reload current tab'], ['tabs.pin.toggle', 'Toggle pinned state'], ['tabs.duplicate', 'Dupplicate a tab'], ], [ - ['follow.start?{newTab:false}', 'Follow a link'], - ['follow.start?{newTab:true}', 'Follow a link in new tab'], + ['follow.start?{"newTab":false}', 'Follow a link'], + ['follow.start?{"newTab":true}', 'Follow a link in new tab'], ['navigate.histories.prev', 'Go back in histories'], ['navigate.histories.next', 'Go forward in histories'], ['navigate.link.next', 'Open next link'], @@ -39,12 +39,12 @@ const KeyMapFields = [ ['find.prev', 'Find previous word'], ], [ ['command.show', 'Open console'], - ['command.show.open?{alter:false}', 'Open URL'], - ['command.show.open?{alter:true}', 'Alter URL'], - ['command.show.tabopen?{alter:false}', 'Open URL in new Tab'], - ['command.show.tabopen?{alter:true}', 'Alter URL in new Tab'], - ['command.show.winopen?{alter:false}', 'Open URL in new window'], - ['command.show.winopen?{alter:true}', 'Alter URL in new window'], + ['command.show.open?{"alter":false}', 'Open URL'], + ['command.show.open?{"alter":true}', 'Alter URL'], + ['command.show.tabopen?{"alter":false}', 'Open URL in new Tab'], + ['command.show.tabopen?{"alter":true}', 'Alter URL in new Tab'], + ['command.show.winopen?{"alter":false}', 'Open URL in new window'], + ['command.show.winopen?{"alter":true}', 'Alter URL in new window'], ['command.show.buffer', 'Open buffer command'], ], [ ['addon.toggle.enabled', 'Enable or disable'], diff --git a/src/shared/default-settings.js b/src/shared/settings/default.js similarity index 81% rename from src/shared/default-settings.js rename to src/shared/settings/default.js index 218390b..fc259b8 100644 --- a/src/shared/default-settings.js +++ b/src/shared/settings/default.js @@ -66,29 +66,29 @@ export default { 'form': { 'keymaps': { - 'scroll.vertically?{count:-1}': 'j', - 'scroll.vertically?{count:1}': 'k', - 'scroll.horizonally?{count:-1}': 'h', - 'scroll.horizonally?{count:1}': 'l', + 'scroll.vertically?{"count":1}': 'j', + 'scroll.vertically?{"count":-1}': 'k', + 'scroll.horizonally?{"count":-1}': 'h', + 'scroll.horizonally?{"count":1}': 'l', 'scroll.home': '0', 'scroll.end': '$', - 'scroll.pages?{count:-0.5}': '', - 'scroll.pages?{count:0.5}': '', - 'scroll.pages?{count:-1}': '', - 'scroll.pages?{count:1}': '', + 'scroll.pages?{"count":-0.5}': '', + 'scroll.pages?{"count":0.5}': '', + 'scroll.pages?{"count":-1}': '', + 'scroll.pages?{"count":1}': '', 'tabs.close': 'd', 'tabs.reopen': 'u', - 'tabs.next?{count:1}': 'J', - 'tabs.prev?{count:1}': 'K', + 'tabs.next?{"count":1}': 'J', + 'tabs.prev?{"count":1}': 'K', 'tabs.first': 'g0', 'tabs.last': 'g$', - 'tabs.reload?{cache:true}': 'r', + 'tabs.reload?{"cache":true}': 'r', 'tabs.pin.toggle': 'zp', 'tabs.duplicate': 'zd', - 'follow.start?{newTab:false}': 'f', - 'follow.start?{newTab:true}': 'F', + 'follow.start?{"newTab":false}': 'f', + 'follow.start?{"newTab":true}': 'F', 'navigate.histories.prev': 'H', 'navigate.histories.next': 'L', 'navigate.link.next': ']]', @@ -101,12 +101,12 @@ export default { 'find.prev': 'N', 'command.show': ':', - 'command.show.open?{alter:false}': 'o', - 'command.show.open?{alter:true}': 'O', - 'command.show.tabopen?{alter:false}': 't', - 'command.show.tabopen?{alter:true}': 'T', - 'command.show.winopen?{alter:false}': 'w', - 'command.show.winopen?{alter:true}': 'W', + 'command.show.open?{"alter":false}': 'o', + 'command.show.open?{"alter":true}': 'O', + 'command.show.tabopen?{"alter":false}': 't', + 'command.show.tabopen?{"alter":true}': 'T', + 'command.show.winopen?{"alter":false}': 'w', + 'command.show.winopen?{"alter":true}': 'W', 'command.show.buffer': 'b', 'addon.toggle.enabled': '', diff --git a/src/shared/settings/values.js b/src/shared/settings/values.js new file mode 100644 index 0000000..d86cfdc --- /dev/null +++ b/src/shared/settings/values.js @@ -0,0 +1,35 @@ +const operationFromName = (name) => { + let [type, argStr] = name.split('?'); + let args = {}; + if (argStr) { + args = JSON.parse(argStr); + } + return Object.assign({ type }, args); +}; + +const fromJson = (json) => { + return JSON.parse(json); +}; + +const fromForm = (form) => { + let keymaps = {}; + for (let name of Object.keys(form.keymaps)) { + let keys = form.keymaps[name]; + keymaps[keys] = operationFromName(name); + } + + let engines = {}; + for (let { name, url } of form.search.engines) { + engines[name] = url; + } + let search = { + default: form.search.default, + engines, + }; + + let blacklist = form.blacklist; + + return { keymaps, search, blacklist }; +}; + +export { fromJson, fromForm };