From c913dcdec775094daa9a64fa40034b3122320660 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Mon, 9 Oct 2017 15:30:05 +0900 Subject: parse json in settings --- src/settings/actions/setting.js | 12 +++++++----- src/settings/components/setting.js | 3 ++- src/settings/reducers/setting.js | 10 ++++++---- 3 files changed, 15 insertions(+), 10 deletions(-) (limited to 'src/settings') diff --git a/src/settings/actions/setting.js b/src/settings/actions/setting.js index 697bcf0..3525f0a 100644 --- a/src/settings/actions/setting.js +++ b/src/settings/actions/setting.js @@ -4,8 +4,9 @@ import DefaultSettings from 'shared/default-settings'; const load = () => { return browser.storage.local.get('settings').then((value) => { - if (value.settings) { - return set(value.settings); + let settings = value.settings; + if (settings) { + return set(settings); } return set(DefaultSettings); }, console.error); @@ -13,7 +14,7 @@ const load = () => { const save = (settings) => { return browser.storage.local.set({ - settings + settings, }).then(() => { return browser.runtime.sendMessage({ type: messages.SETTINGS_RELOAD @@ -24,8 +25,9 @@ const save = (settings) => { const set = (settings) => { return { type: actions.SETTING_SET_SETTINGS, - settings, + json: settings.json, + value: JSON.parse(settings.json), }; }; -export { load, save, set }; +export { load, save }; diff --git a/src/settings/components/setting.js b/src/settings/components/setting.js index 14482a3..cf1538f 100644 --- a/src/settings/components/setting.js +++ b/src/settings/components/setting.js @@ -35,11 +35,12 @@ export default class SettingComponent { } update() { - let { settings } = this.store.getState(); + 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; + } } diff --git a/src/settings/reducers/setting.js b/src/settings/reducers/setting.js index f7d9242..7f32f72 100644 --- a/src/settings/reducers/setting.js +++ b/src/settings/reducers/setting.js @@ -1,15 +1,17 @@ import actions from 'settings/actions'; const defaultState = { - settings: {} + json: '', + value: {} }; export default function reducer(state = defaultState, action = {}) { switch (action.type) { case actions.SETTING_SET_SETTINGS: - return Object.assign({}, state, { - settings: action.settings, - }); + return { + json: action.json, + value: action.value, + }; default: return state; } -- cgit v1.2.3 From 6669f6b6ef2a3268dfeca87dbccc2ac8ef2fa30d Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Mon, 9 Oct 2017 13:42:16 +0900 Subject: use react in settings --- src/settings/components/index.jsx | 78 ++++++++++++++++++++++++++++++++++++++ src/settings/components/setting.js | 46 ---------------------- src/settings/components/site.scss | 8 ++++ src/settings/index.html | 10 +---- src/settings/index.js | 15 -------- src/settings/index.jsx | 18 +++++++++ src/settings/site.scss | 8 ---- 7 files changed, 105 insertions(+), 78 deletions(-) create mode 100644 src/settings/components/index.jsx delete mode 100644 src/settings/components/setting.js create mode 100644 src/settings/components/site.scss delete mode 100644 src/settings/index.js create mode 100644 src/settings/index.jsx delete mode 100644 src/settings/site.scss (limited to 'src/settings') diff --git a/src/settings/components/index.jsx b/src/settings/components/index.jsx new file mode 100644 index 0000000..e57b09d --- /dev/null +++ b/src/settings/components/index.jsx @@ -0,0 +1,78 @@ +import './site.scss'; +import React from 'react'; +import PropTypes from 'prop-types'; +import * as settingActions from 'settings/actions/setting'; +import { validate } from 'shared/validators/setting'; + +class SettingsComponent extends React.Component { + constructor(props, context) { + super(props, context); + + this.state = { + settings: { + json: '', + } + }; + this.context.store.subscribe(this.stateChanged.bind(this)); + } + + componentDidMount() { + this.context.store.dispatch(settingActions.load()); + } + + stateChanged() { + let settings = this.context.store.getState(); + this.setState({ settings }); + } + + render() { + return ( +
+

Configure Vim-Vixen

+ +
+ + - - -
+
diff --git a/src/settings/index.js b/src/settings/index.js deleted file mode 100644 index c8d6cc4..0000000 --- a/src/settings/index.js +++ /dev/null @@ -1,15 +0,0 @@ -import './site.scss'; -import SettingComponent from 'settings/components/setting'; -import settingReducer from 'settings/reducers/setting'; -import { createStore } from 'shared/store'; - -const store = createStore(settingReducer); -let settingComponent = null; - -store.subscribe(() => { - settingComponent.update(); -}); - -document.addEventListener('DOMContentLoaded', () => { - settingComponent = new SettingComponent(document.body, store); -}); diff --git a/src/settings/index.jsx b/src/settings/index.jsx new file mode 100644 index 0000000..7516fb7 --- /dev/null +++ b/src/settings/index.jsx @@ -0,0 +1,18 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import SettingsComponent from './components'; +import reducer from 'settings/reducers/setting'; +import Provider from 'shared/store/provider'; +import { createStore } from 'shared/store'; + +const store = createStore(reducer); + +document.addEventListener('DOMContentLoaded', () => { + let wrapper = document.getElementById('vimvixen-settings'); + ReactDOM.render( + + + , + wrapper + ); +}); diff --git a/src/settings/site.scss b/src/settings/site.scss deleted file mode 100644 index 5707c8a..0000000 --- a/src/settings/site.scss +++ /dev/null @@ -1,8 +0,0 @@ -.vimvixen-settings-form { - textarea[name=plain-json] { - font-family: monospace; - width: 100%; - min-height: 64ex; - resize: vertical; - } -} -- cgit v1.2.3 From 805d1395fc869235f079438b5b4884a521c0230e Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Mon, 9 Oct 2017 17:03:52 +0900 Subject: save settings on the fly --- src/settings/actions/setting.js | 6 ++-- src/settings/components/index.jsx | 61 ++++++++++++++++++++++++--------------- src/settings/components/site.scss | 2 +- src/settings/reducers/setting.js | 2 ++ src/shared/default-settings.js | 1 + 5 files changed, 45 insertions(+), 27 deletions(-) (limited to 'src/settings') diff --git a/src/settings/actions/setting.js b/src/settings/actions/setting.js index 3525f0a..c1b27c8 100644 --- a/src/settings/actions/setting.js +++ b/src/settings/actions/setting.js @@ -3,8 +3,7 @@ import messages from 'shared/messages'; import DefaultSettings from 'shared/default-settings'; const load = () => { - return browser.storage.local.get('settings').then((value) => { - let settings = value.settings; + return browser.storage.local.get('settings').then(({ settings }) => { if (settings) { return set(settings); } @@ -18,6 +17,8 @@ const save = (settings) => { }).then(() => { return browser.runtime.sendMessage({ type: messages.SETTINGS_RELOAD + }).then(() => { + return set(settings); }); }); }; @@ -25,6 +26,7 @@ const save = (settings) => { const set = (settings) => { return { type: actions.SETTING_SET_SETTINGS, + source: settings.source, json: settings.json, value: JSON.parse(settings.json), }; diff --git a/src/settings/components/index.jsx b/src/settings/components/index.jsx index e57b09d..4418942 100644 --- a/src/settings/components/index.jsx +++ b/src/settings/components/index.jsx @@ -2,7 +2,7 @@ import './site.scss'; import React from 'react'; import PropTypes from 'prop-types'; import * as settingActions from 'settings/actions/setting'; -import { validate } from 'shared/validators/setting'; +import * as validator from 'shared/validators/setting'; class SettingsComponent extends React.Component { constructor(props, context) { @@ -22,39 +22,42 @@ class SettingsComponent extends React.Component { stateChanged() { let settings = this.context.store.getState(); - this.setState({ settings }); + this.setState({ + settings: { + source: settings.source, + json: settings.json, + } + }); } render() { return (

Configure Vim-Vixen

+
- - -