From 7b44b652473b487e2d00a5b705a7f78ee66dec65 Mon Sep 17 00:00:00 2001
From: Shin'ya Ueoka <ueokande@i-beam.org>
Date: Thu, 23 Nov 2017 21:22:42 +0900
Subject: Add search form

---
 .../components/form/search-engine-form.jsx         | 69 ++++++++++++++++++++++
 1 file changed, 69 insertions(+)
 create mode 100644 src/settings/components/form/search-engine-form.jsx

(limited to 'src/settings/components/form/search-engine-form.jsx')

diff --git a/src/settings/components/form/search-engine-form.jsx b/src/settings/components/form/search-engine-form.jsx
new file mode 100644
index 0000000..77da304
--- /dev/null
+++ b/src/settings/components/form/search-engine-form.jsx
@@ -0,0 +1,69 @@
+import { h, Component } from 'preact';
+import './search-engine-form.scss';
+
+class SearchEngineForm extends Component {
+
+  render() {
+    let value = this.props.value;
+    if (!value) {
+      value = { default: '', engines: []};
+    }
+    let {
+      default: defaultEngine,
+      engines
+    } = value;
+
+    return <div className='form-search-engine-form'>
+      <div className='form-search-engine-form-header'>
+        <div className='column-name'>Name</div>
+        <div className='column-url'>URL</div>
+        <div className='column-option'>Default</div>
+      </div>
+      {
+        engines.map((engine, index) => {
+          return <div key={index} className='form-search-engine-form-row'>
+            <input data-index={index} type='text' name='name'
+              className='column-name' value={engine[0]}
+              onChange={this.bindValue.bind(this)} />
+            <input data-index={index} type='text' name='url'
+              placeholder='http://example.com/?q={}'
+              className='column-url' value={engine[1]}
+              onChange={this.bindValue.bind(this)} />
+            <div className='column-option'>
+              <input data-index={index} type='radio' name='default'
+                checked={defaultEngine === engine[0]}
+                onChange={this.bindValue.bind(this)} />
+              <input data-index={index} type='button' name='delete'
+                value='&#x2716;'
+                onClick={this.bindValue.bind(this)} />
+            </div>
+          </div>;
+        })
+      }
+    </div>;
+  }
+
+  bindValue(e) {
+    if (!this.props.onChange) {
+      return;
+    }
+
+    let name = e.target.name;
+    let index = e.target.getAttribute('data-index');
+    let next = Object.assign({}, this.props.value);
+
+    if (name === 'name') {
+      next.engines[index][0] = e.target.value;
+    } else if (name === 'url') {
+      next.engines[index][1] = e.target.value;
+    } else if (name === 'default') {
+      next.default = this.props.value.engines[index][0];
+    } else if (name === 'delete') {
+      next.engines.splice(index, 1);
+    }
+
+    this.props.onChange(next);
+  }
+}
+
+export default SearchEngineForm;
-- 
cgit v1.2.3

