aboutsummaryrefslogtreecommitdiff
path: root/src/settings/components/form
diff options
context:
space:
mode:
authorShin'ya Ueoka <ueokande@i-beam.org>2019-04-30 13:05:06 +0900
committerGitHub <noreply@github.com>2019-04-30 13:05:06 +0900
commit457d954e08923b4accd28a919c72d0b61db1bb98 (patch)
tree9d198f7c7d37893621d4e2a27749070a435854cd /src/settings/components/form
parent3d9a251ce293885cda57cd3eebd111f6181132f0 (diff)
parent037ee5fd40af0117a1eb8d362b4ae97429499f16 (diff)
Merge pull request #576 from ueokande/move-to-react
Move to React
Diffstat (limited to 'src/settings/components/form')
-rw-r--r--src/settings/components/form/BlacklistForm.jsx (renamed from src/settings/components/form/blacklist-form.jsx)47
-rw-r--r--src/settings/components/form/BlacklistForm.scss (renamed from src/settings/components/form/blacklist-form.scss)0
-rw-r--r--src/settings/components/form/KeymapsForm.jsx51
-rw-r--r--src/settings/components/form/KeymapsForm.scss (renamed from src/settings/components/form/keymaps-form.scss)0
-rw-r--r--src/settings/components/form/PropertiesForm.jsx (renamed from src/settings/components/form/properties-form.jsx)25
-rw-r--r--src/settings/components/form/PropertiesForm.scss (renamed from src/settings/components/form/properties-form.scss)0
-rw-r--r--src/settings/components/form/SearchForm.jsx (renamed from src/settings/components/form/search-form.jsx)44
-rw-r--r--src/settings/components/form/SearchForm.scss (renamed from src/settings/components/form/search-form.scss)0
-rw-r--r--src/settings/components/form/keymaps-form.jsx118
9 files changed, 124 insertions, 161 deletions
diff --git a/src/settings/components/form/blacklist-form.jsx b/src/settings/components/form/BlacklistForm.jsx
index 7ae9652..c470758 100644
--- a/src/settings/components/form/blacklist-form.jsx
+++ b/src/settings/components/form/BlacklistForm.jsx
@@ -1,38 +1,34 @@
-import './blacklist-form.scss';
-import AddButton from '../ui/add-button';
-import DeleteButton from '../ui/delete-button';
-import { h, Component } from 'preact';
+import './BlacklistForm.scss';
+import AddButton from '../ui/AddButton';
+import DeleteButton from '../ui/DeleteButton';
+import React from 'react';
+import PropTypes from 'prop-types';
-class BlacklistForm extends Component {
+class BlacklistForm extends React.Component {
render() {
- let value = this.props.value;
- if (!value) {
- value = [];
- }
-
return <div className='form-blacklist-form'>
{
- value.map((url, index) => {
+ this.props.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)} />
+ onChange={this.bindValue.bind(this)}
+ onBlur={this.props.onBlur}
+ />
<DeleteButton data-index={index} name='delete'
- onClick={this.bindValue.bind(this)} />
+ onClick={this.bindValue.bind(this)}
+ onBlur={this.props.onBlur}
+ />
</div>;
})
}
- <AddButton name='add' style='float:right'
+ <AddButton name='add' style={{ float: 'right' }}
onClick={this.bindValue.bind(this)} />
</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 ? this.props.value.slice() : [];
@@ -46,7 +42,22 @@ class BlacklistForm extends Component {
}
this.props.onChange(next);
+ if (name === 'delete') {
+ this.props.onBlur();
+ }
}
}
+BlacklistForm.propTypes = {
+ value: PropTypes.arrayOf(PropTypes.string),
+ onChange: PropTypes.func,
+ onBlur: PropTypes.func,
+};
+
+BlacklistForm.defaultProps = {
+ value: [],
+ onChange: () => {},
+ onBlur: () => {},
+};
+
export default BlacklistForm;
diff --git a/src/settings/components/form/blacklist-form.scss b/src/settings/components/form/BlacklistForm.scss
index a230d0d..a230d0d 100644
--- a/src/settings/components/form/blacklist-form.scss
+++ b/src/settings/components/form/BlacklistForm.scss
diff --git a/src/settings/components/form/KeymapsForm.jsx b/src/settings/components/form/KeymapsForm.jsx
new file mode 100644
index 0000000..01acf61
--- /dev/null
+++ b/src/settings/components/form/KeymapsForm.jsx
@@ -0,0 +1,51 @@
+import './KeymapsForm.scss';
+import React from 'react';
+import PropTypes from 'prop-types';
+import Input from '../ui/Input';
+import keymaps from '../../keymaps';
+
+class KeymapsForm extends React.Component {
+
+ render() {
+ return <div className='form-keymaps-form'>
+ {
+ keymaps.fields.map((group, index) => {
+ return <div key={index} className='form-keymaps-form-field-group'>
+ {
+ group.map((field) => {
+ let name = field[0];
+ let label = field[1];
+ let value = this.props.value[name] || '';
+ return <Input
+ type='text' id={name} name={name} key={name}
+ label={label} value={value}
+ onChange={this.bindValue.bind(this)}
+ onBlur={this.props.onBlur}
+ />;
+ })
+ }
+ </div>;
+ })
+ }
+ </div>;
+ }
+
+ bindValue(e) {
+ let next = { ...this.props.value };
+ next[e.target.name] = e.target.value;
+
+ this.props.onChange(next);
+ }
+}
+
+KeymapsForm.propTypes = {
+ value: PropTypes.objectOf(PropTypes.string),
+ onChange: PropTypes.func,
+};
+
+KeymapsForm.defaultProps = {
+ value: {},
+ onChange: () => {},
+};
+
+export default KeymapsForm;
diff --git a/src/settings/components/form/keymaps-form.scss b/src/settings/components/form/KeymapsForm.scss
index 1a4e5cd..1a4e5cd 100644
--- a/src/settings/components/form/keymaps-form.scss
+++ b/src/settings/components/form/KeymapsForm.scss
diff --git a/src/settings/components/form/properties-form.jsx b/src/settings/components/form/PropertiesForm.jsx
index ceb79d7..979fdd8 100644
--- a/src/settings/components/form/properties-form.jsx
+++ b/src/settings/components/form/PropertiesForm.jsx
@@ -1,14 +1,12 @@
-import './properties-form.scss';
-import { h, Component } from 'preact';
+import './PropertiesForm.scss';
+import React from 'react';
+import PropTypes from 'prop-types';
-class PropertiesForm extends Component {
+class PropertiesForm extends React.Component {
render() {
let types = this.props.types;
let value = this.props.value;
- if (!value) {
- value = {};
- }
return <div className='form-properties-form'>
{
@@ -29,6 +27,7 @@ class PropertiesForm extends Component {
className='column-input'
value={value[name] ? value[name] : ''}
onChange={this.bindValue.bind(this)}
+ onBlur={this.props.onBlur}
checked={value[name]}
/>
</label>
@@ -39,10 +38,6 @@ class PropertiesForm extends Component {
}
bindValue(e) {
- if (!this.props.onChange) {
- return;
- }
-
let name = e.target.name;
let next = { ...this.props.value };
if (e.target.type.toLowerCase() === 'checkbox') {
@@ -57,4 +52,14 @@ class PropertiesForm extends Component {
}
}
+PropertiesForm.propTypes = {
+ value: PropTypes.objectOf(PropTypes.any),
+ onChange: PropTypes.func,
+};
+
+PropertiesForm.defaultProps = {
+ value: {},
+ onChange: () => {},
+};
+
export default PropertiesForm;
diff --git a/src/settings/components/form/properties-form.scss b/src/settings/components/form/PropertiesForm.scss
index 7c9e167..7c9e167 100644
--- a/src/settings/components/form/properties-form.scss
+++ b/src/settings/components/form/PropertiesForm.scss
diff --git a/src/settings/components/form/search-form.jsx b/src/settings/components/form/SearchForm.jsx
index 2d5f01b..6b0bd01 100644
--- a/src/settings/components/form/search-form.jsx
+++ b/src/settings/components/form/SearchForm.jsx
@@ -1,15 +1,13 @@
-import './search-form.scss';
-import { h, Component } from 'preact';
-import AddButton from '../ui/add-button';
-import DeleteButton from '../ui/delete-button';
+import './SearchForm.scss';
+import React from 'react';
+import PropTypes from 'prop-types';
+import AddButton from '../ui/AddButton';
+import DeleteButton from '../ui/DeleteButton';
-class SearchForm extends Component {
+class SearchForm extends React.Component {
render() {
let value = this.props.value;
- if (!value) {
- value = { default: '', engines: []};
- }
if (!value.engines) {
value.engines = [];
}
@@ -25,11 +23,15 @@ class SearchForm extends Component {
return <div key={index} className='form-search-form-row'>
<input data-index={index} type='text' name='name'
className='column-name' value={engine[0]}
- onChange={this.bindValue.bind(this)} />
+ onChange={this.bindValue.bind(this)}
+ onBlur={this.props.onBlur}
+ />
<input data-index={index} type='text' name='url'
placeholder='http://example.com/?q={}'
className='column-url' value={engine[1]}
- onChange={this.bindValue.bind(this)} />
+ onChange={this.bindValue.bind(this)}
+ onBlur={this.props.onBlur}
+ />
<div className='column-option'>
<input data-index={index} type='radio' name='default'
checked={value.default === engine[0]}
@@ -40,16 +42,12 @@ class SearchForm extends Component {
</div>;
})
}
- <AddButton name='add' style='float:right'
+ <AddButton name='add' style={{ float: 'right' }}
onClick={this.bindValue.bind(this)} />
</div>;
}
bindValue(e) {
- if (!this.props.onChange) {
- return;
- }
-
let value = this.props.value;
let name = e.target.name;
let index = e.target.getAttribute('data-index');
@@ -72,7 +70,23 @@ class SearchForm extends Component {
}
this.props.onChange(next);
+ if (name === 'delete' || name === 'default') {
+ this.props.onBlur();
+ }
}
}
+SearchForm.propTypes = {
+ value: PropTypes.shape({
+ default: PropTypes.string,
+ engines: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string)),
+ }),
+ onChange: PropTypes.func,
+};
+
+SearchForm.defaultProps = {
+ value: { default: '', engines: []},
+ onChange: () => {},
+};
+
export default SearchForm;
diff --git a/src/settings/components/form/search-form.scss b/src/settings/components/form/SearchForm.scss
index 26b2f44..26b2f44 100644
--- a/src/settings/components/form/search-form.scss
+++ b/src/settings/components/form/SearchForm.scss
diff --git a/src/settings/components/form/keymaps-form.jsx b/src/settings/components/form/keymaps-form.jsx
deleted file mode 100644
index ca51c96..0000000
--- a/src/settings/components/form/keymaps-form.jsx
+++ /dev/null
@@ -1,118 +0,0 @@
-import './keymaps-form.scss';
-import { h, Component } from 'preact';
-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.home', 'Scroll to leftmost'],
- ['scroll.end', 'Scroll to rightmost'],
- ['scroll.top', 'Scroll to top'],
- ['scroll.bottom', 'Scroll to bottom'],
- ['scroll.pages?{"count":-0.5}', 'Scroll up by half of screen'],
- ['scroll.pages?{"count":0.5}', 'Scroll down by half of screen'],
- ['scroll.pages?{"count":-1}', 'Scroll up by a screen'],
- ['scroll.pages?{"count":1}', 'Scroll down by a screen'],
- ], [
- ['mark.set.prefix', 'Set mark at current position'],
- ['mark.jump.prefix', 'Jump to the mark'],
- ], [
- ['tabs.close', 'Close a tab'],
- ['tabs.close.right', 'Close tabs to the right'],
- ['tabs.reopen', 'Reopen closed 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":false}', 'Reload current tab'],
- ['tabs.reload?{"cache":true}', 'Reload with no caches'],
- ['tabs.pin.toggle', 'Toggle pinned state'],
- ['tabs.duplicate', 'Duplicate a tab'],
- ], [
- ['follow.start?{"newTab":false}', 'Follow a link'],
- ['follow.start?{"newTab":true}', 'Follow a link in new tab'],
- ['navigate.history.prev', 'Go back in histories'],
- ['navigate.history.next', 'Go forward in histories'],
- ['navigate.link.next', 'Open next link'],
- ['navigate.link.prev', 'Open previous link'],
- ['navigate.parent', 'Go to parent directory'],
- ['navigate.root', 'Go to root directory'],
- ['page.source', 'Open page source'],
- ['page.home', 'Open start page to current tab'],
- ['page.home?{"newTab":true}', 'Open start page in new tab'],
- ['focus.input', 'Focus input'],
- ], [
- ['find.start', 'Start find mode'],
- ['find.next', 'Find next word'],
- ['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.buffer', 'Open buffer command'],
- ['command.show.addbookmark?{"alter":true}', 'Open addbookmark command'],
- ], [
- ['addon.toggle.enabled', 'Enable or disable'],
- ['urls.yank', 'Copy current URL'],
- ['urls.paste?{"newTab":false}', 'Open clipboard\'s URL in current tab'],
- ['urls.paste?{"newTab":true}', 'Open clipboard\'s URL in new tab'],
- ['zoom.in', 'Zoom-in'],
- ['zoom.out', 'Zoom-out'],
- ['zoom.neutral', 'Reset zoom level'],
- ['page.source', 'Open a page source'],
- ]
-];
-
-const AllowdOps = [].concat(...KeyMapFields.map(group => group.map(e => e[0])));
-
-class KeymapsForm extends Component {
-
- render() {
- let values = this.props.value;
- if (!values) {
- values = {};
- }
- return <div className='form-keymaps-form'>
- {
- KeyMapFields.map((group, index) => {
- return <div key={index} className='form-keymaps-form-field-group'>
- {
- group.map((field) => {
- let name = field[0];
- let label = field[1];
- let value = values[name];
- return <Input
- type='text' id={name} name={name} key={name}
- label={label} value={value}
- onChange={this.bindValue.bind(this)}
- />;
- })
- }
- </div>;
- })
- }
- </div>;
- }
-
- bindValue(e) {
- if (!this.props.onChange) {
- return;
- }
-
- let next = { ...this.props.value };
- next[e.target.name] = e.target.value;
-
- this.props.onChange(next);
- }
-}
-
-KeymapsForm.AllowdOps = AllowdOps;
-
-export default KeymapsForm;