aboutsummaryrefslogtreecommitdiff
path: root/src/settings/components/setting.js
diff options
context:
space:
mode:
authorShin'ya Ueoka <ueokande@i-beam.org>2017-10-08 14:44:21 +0900
committerShin'ya Ueoka <ueokande@i-beam.org>2017-10-08 14:44:21 +0900
commit58123210ab4cdd4a1f2b4720a0abbd88908baa06 (patch)
treeb841120a6347313e34ba4a5ddbfd599e08aa6f16 /src/settings/components/setting.js
parent541449b1fced9eea15f415b023206b10724f5315 (diff)
separate settings
Diffstat (limited to 'src/settings/components/setting.js')
-rw-r--r--src/settings/components/setting.js45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/settings/components/setting.js b/src/settings/components/setting.js
new file mode 100644
index 0000000..14482a3
--- /dev/null
+++ b/src/settings/components/setting.js
@@ -0,0 +1,45 @@
+import * as settingActions from 'settings/actions/setting';
+import { validate } from 'shared/validators/setting';
+
+export default class SettingComponent {
+ constructor(wrapper, store) {
+ this.wrapper = wrapper;
+ this.store = store;
+
+ let doc = wrapper.ownerDocument;
+ let form = doc.getElementById('vimvixen-settings-form');
+ form.addEventListener('submit', this.onSubmit.bind(this));
+
+ let plainJson = form.elements['plain-json'];
+ plainJson.addEventListener('input', this.onPlainJsonChanged.bind(this));
+
+ store.dispatch(settingActions.load());
+ }
+
+ onSubmit(e) {
+ let settings = {
+ json: e.target.elements['plain-json'].value,
+ };
+ this.store.dispatch(settingActions.save(settings));
+ e.preventDefault();
+ }
+
+ onPlainJsonChanged(e) {
+ try {
+ let settings = JSON.parse(e.target.value);
+ validate(settings);
+ e.target.setCustomValidity('');
+ } catch (err) {
+ e.target.setCustomValidity(err.message);
+ }
+ }
+
+ update() {
+ let { settings } = this.store.getState();
+
+ let doc = this.wrapper.ownerDocument;
+ let form = doc.getElementById('vimvixen-settings-form');
+ let plainJsonInput = form.elements['plain-json'];
+ plainJsonInput.value = settings.json;
+ }
+}