diff options
author | Shin'ya Ueoka <ueokande@i-beam.org> | 2019-04-30 13:05:06 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-30 13:05:06 +0900 |
commit | 457d954e08923b4accd28a919c72d0b61db1bb98 (patch) | |
tree | 9d198f7c7d37893621d4e2a27749070a435854cd /src/settings/components/form | |
parent | 3d9a251ce293885cda57cd3eebd111f6181132f0 (diff) | |
parent | 037ee5fd40af0117a1eb8d362b4ae97429499f16 (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.jsx | 51 | ||||
-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.jsx | 118 |
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; |