remove default form settings

jh-changes
Shin'ya Ueoka 7 years ago
parent 6821372fc7
commit e1060f9bb2
  1. 4
      src/settings/components/form/keymaps-form.jsx
  2. 15
      src/settings/components/index.jsx
  3. 68
      src/shared/settings/default.js
  4. 14
      src/shared/settings/values.js
  5. 4
      test/shared/settings/values.test.js

@ -58,6 +58,8 @@ const KeyMapFields = [
] ]
]; ];
const AllowdOps = [].concat(...KeyMapFields.map(group => group.map(e => e[0])));
class KeymapsForm extends Component { class KeymapsForm extends Component {
render() { render() {
@ -99,4 +101,6 @@ class KeymapsForm extends Component {
} }
} }
KeymapsForm.AllowdOps = AllowdOps;
export default KeymapsForm; export default KeymapsForm;

@ -123,6 +123,18 @@ class SettingsComponent extends Component {
} }
} }
validateValue(e) {
let next = Object.assign({}, this.state);
next.errors.json = '';
try {
this.validate(e.target);
} catch (err) {
next.errors.json = err.message;
}
next.settings[e.target.name] = e.target.value;
}
bindForm(name, value) { bindForm(name, value) {
let next = Object.assign({}, this.state, { let next = Object.assign({}, this.state, {
settings: Object.assign({}, this.state.settings, { settings: Object.assign({}, this.state.settings, {
@ -164,7 +176,8 @@ class SettingsComponent extends Component {
return; return;
} }
next.settings.form = next.settings.form =
settingsValues.formFromJson(this.state.settings.json); settingsValues.formFromJson(
this.state.settings.json, KeymapsForm.AllowdOps);
} }
next.settings.source = to; next.settings.source = to;

@ -61,72 +61,4 @@ 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.home': '0',
'scroll.end': '$',
'scroll.top': 'gg',
'scroll.bottom': 'G',
'scroll.pages?{"count":-0.5}': '<C-U>',
'scroll.pages?{"count":0.5}': '<C-D>',
'scroll.pages?{"count":-1}': '<C-B>',
'scroll.pages?{"count":1}': '<C-F>',
'tabs.close': 'd',
'tabs.reopen': 'u',
'tabs.next?{"count":1}': 'J',
'tabs.prev?{"count":1}': 'K',
'tabs.first': 'g0',
'tabs.last': 'g$',
'tabs.reload?{"cache":false}': 'r',
'tabs.reload?{"cache":true}': 'R',
'tabs.pin.toggle': 'zp',
'tabs.duplicate': 'zd',
'follow.start?{"newTab":false}': 'f',
'follow.start?{"newTab":true}': 'F',
'navigate.history.prev': 'H',
'navigate.history.next': 'L',
'navigate.link.next': ']]',
'navigate.link.prev': '[[',
'navigate.parent': 'gu',
'navigate.root': 'gU',
'find.start': '/',
'find.next': 'n',
'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.buffer': 'b',
'addon.toggle.enabled': '<S-Esc>',
'urls.yank': 'y',
'zoom.in': 'zi',
'zoom.out': 'zo',
'zoom.neutral': 'zz',
},
'search': {
'default': 'google',
'engines': [
['google', 'https,//google.com/search?q={}'],
['yahoo', 'https,//search.yahoo.com/search?p={}'],
['bing', 'https,//www.bing.com/search?q={}'],
['duckduckgo', 'https,//duckduckgo.com/?q={}'],
['twitter', 'https,//twitter.com/search?q={}'],
['wikipedia', 'https,//en.wikipedia.org/w/index.php?search={}'],
]
},
'blacklist': [],
}
}; };

@ -1,5 +1,3 @@
import DefaultSettings from './default';
const operationFromFormName = (name) => { const operationFromFormName = (name) => {
let [type, argStr] = name.split('?'); let [type, argStr] = name.split('?');
let args = {}; let args = {};
@ -55,16 +53,16 @@ const jsonFromValue = (value) => {
return JSON.stringify(value, undefined, 2); return JSON.stringify(value, undefined, 2);
}; };
const formFromValue = (value) => { const formFromValue = (value, allowedOps) => {
let keymaps = undefined; let keymaps = undefined;
if (value.keymaps) { if (value.keymaps) {
let allowedOps = new Set(Object.keys(DefaultSettings.form.keymaps)); let allowedSet = new Set(allowedOps);
keymaps = {}; keymaps = {};
for (let keys of Object.keys(value.keymaps)) { for (let keys of Object.keys(value.keymaps)) {
let op = operationToFormName(value.keymaps[keys]); let op = operationToFormName(value.keymaps[keys]);
if (allowedOps.has(op)) { if (allowedSet.has(op)) {
keymaps[op] = keys; keymaps[op] = keys;
} }
} }
@ -89,9 +87,9 @@ const jsonFromForm = (form) => {
return jsonFromValue(valueFromForm(form)); return jsonFromValue(valueFromForm(form));
}; };
const formFromJson = (json) => { const formFromJson = (json, allowedOps) => {
let value = valueFromJson(json); let value = valueFromJson(json);
return formFromValue(value); return formFromValue(value, allowedOps);
}; };
export { export {

@ -98,9 +98,11 @@ describe("settings values", () => {
search: { default: 'google', engines: { google: 'https://google.com/search?q={}' }}, search: { default: 'google', engines: { google: 'https://google.com/search?q={}' }},
blacklist: [ '*.slack.com'] blacklist: [ '*.slack.com']
}; };
let form = values.formFromValue(value); let allowed = ['scroll.vertically?{"count":1}', 'scroll.home' ];
let form = values.formFromValue(value, allowed);
expect(form.keymaps).to.have.property('scroll.vertically?{"count":1}', 'j'); expect(form.keymaps).to.have.property('scroll.vertically?{"count":1}', 'j');
expect(form.keymaps).to.not.have.property('scroll.vertically?{"count":100}');
expect(form.keymaps).to.have.property('scroll.home', '0'); expect(form.keymaps).to.have.property('scroll.home', '0');
expect(Object.keys(form.keymaps)).to.have.lengthOf(2); expect(Object.keys(form.keymaps)).to.have.lengthOf(2);
expect(form.search).to.have.property('default', 'google'); expect(form.search).to.have.property('default', 'google');