blacklist form
This commit is contained in:
parent
bbad1c6c6a
commit
df10208ed5
4 changed files with 75 additions and 13 deletions
47
src/settings/components/form/blacklist-form.jsx
Normal file
47
src/settings/components/form/blacklist-form.jsx
Normal file
|
@ -0,0 +1,47 @@
|
|||
import './blacklist-form.scss';
|
||||
import DeleteButton from '../ui/delete-button';
|
||||
import { h, Component } from 'preact';
|
||||
|
||||
class BlacklistForm extends Component {
|
||||
|
||||
render() {
|
||||
let value = this.props.value;
|
||||
if (!value) {
|
||||
value = [];
|
||||
}
|
||||
|
||||
return <div className='form-blacklist-form'>
|
||||
{
|
||||
value.map((url, index) => {
|
||||
return <div key={index} className='form-blacklist-form-row'>
|
||||
<input data-index={index} type='text' name='url'
|
||||
className='column-url' value={url}
|
||||
onChange={this.bindValue.bind(this)} />
|
||||
<DeleteButton data-index={index} name='delete'
|
||||
onClick={this.bindValue.bind(this)} />
|
||||
</div>;
|
||||
})
|
||||
}
|
||||
</div>;
|
||||
}
|
||||
|
||||
bindValue(e) {
|
||||
if (!this.props.onChange) {
|
||||
return;
|
||||
}
|
||||
|
||||
let name = e.target.name;
|
||||
let index = e.target.getAttribute('data-index');
|
||||
let next = this.props.value.slice();
|
||||
|
||||
if (name === 'url') {
|
||||
next[index] = e.target.value;
|
||||
} else if (name === 'delete') {
|
||||
next.splice(index, 1);
|
||||
}
|
||||
|
||||
this.props.onChange(next);
|
||||
}
|
||||
}
|
||||
|
||||
export default BlacklistForm;
|
9
src/settings/components/form/blacklist-form.scss
Normal file
9
src/settings/components/form/blacklist-form.scss
Normal file
|
@ -0,0 +1,9 @@
|
|||
.form-blacklist-form {
|
||||
&-row {
|
||||
display: flex;
|
||||
|
||||
.column-url {
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -3,6 +3,7 @@ import { h, Component } from 'preact';
|
|||
import Input from './ui/input';
|
||||
import SearchEngineForm from './form/search-engine-form';
|
||||
import KeymapsForm from './form/keymaps-form';
|
||||
import BlacklistForm from './form/blacklist-form';
|
||||
import * as settingActions from 'settings/actions/setting';
|
||||
import * as validator from 'shared/validators/setting';
|
||||
|
||||
|
@ -42,14 +43,21 @@ class SettingsComponent extends Component {
|
|||
<legend>Keybindings</legend>
|
||||
<KeymapsForm
|
||||
value={this.state.settings.form.keymaps}
|
||||
onChange={this.bindKeymapsForm.bind(this)}
|
||||
onChange={value => this.bindForm('keymaps', value)}
|
||||
/>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>Search Engines</legend>
|
||||
<SearchEngineForm
|
||||
value={this.state.settings.form.search}
|
||||
onChange={this.bindSearchForm.bind(this)}
|
||||
onChange={value => this.bindForm('search', value)}
|
||||
/>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>Blacklist</legend>
|
||||
<BlacklistForm
|
||||
value={this.state.settings.form.blacklist}
|
||||
onChange={value => this.bindForm('blacklist', value)}
|
||||
/>
|
||||
</fieldset>
|
||||
</div>;
|
||||
|
@ -110,16 +118,13 @@ class SettingsComponent extends Component {
|
|||
}
|
||||
}
|
||||
|
||||
bindSearchForm(value) {
|
||||
let next = Object.assign({}, this.state);
|
||||
next.settings.form.search = value;
|
||||
this.setState(next);
|
||||
this.context.store.dispatch(settingActions.save(next.settings));
|
||||
}
|
||||
|
||||
bindKeymapsForm(value) {
|
||||
let next = Object.assign({}, this.state);
|
||||
next.settings.form.keymaps = value;
|
||||
bindForm(name, value) {
|
||||
let next = Object.assign({}, this.state, {
|
||||
settings: Object.assign({}, this.state.settings, {
|
||||
form: Object.assign({}, this.state.settings.form)
|
||||
})
|
||||
});
|
||||
next.settings.form[name] = value;
|
||||
this.setState(next);
|
||||
this.context.store.dispatch(settingActions.save(next.settings));
|
||||
}
|
||||
|
|
|
@ -125,6 +125,7 @@ export default {
|
|||
['twitter', 'https,//twitter.com/search?q={}'],
|
||||
['wikipedia', 'https,//en.wikipedia.org/w/index.php?search={}'],
|
||||
]
|
||||
}
|
||||
},
|
||||
'blacklist': [],
|
||||
}
|
||||
};
|
||||
|
|
Reference in a new issue