load settiongs from form
This commit is contained in:
		
							parent
							
								
									5070006193
								
							
						
					
					
						commit
						f27d21908a
					
				
					 4 changed files with 83 additions and 40 deletions
				
			
		| 
						 | 
					@ -1,6 +1,7 @@
 | 
				
			||||||
import actions from 'settings/actions';
 | 
					import actions from 'settings/actions';
 | 
				
			||||||
import messages from 'shared/messages';
 | 
					import messages from 'shared/messages';
 | 
				
			||||||
import DefaultSettings from 'shared/default-settings';
 | 
					import DefaultSettings from 'shared/settings/default';
 | 
				
			||||||
 | 
					import * as settingsValues from 'shared/settings/values';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const load = () => {
 | 
					const load = () => {
 | 
				
			||||||
  return browser.storage.local.get('settings').then(({ settings }) => {
 | 
					  return browser.storage.local.get('settings').then(({ settings }) => {
 | 
				
			||||||
| 
						 | 
					@ -24,12 +25,19 @@ const save = (settings) => {
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const set = (settings) => {
 | 
					const set = (settings) => {
 | 
				
			||||||
 | 
					  let value = JSON.parse(DefaultSettings.json);
 | 
				
			||||||
 | 
					  if (settings.source === 'json') {
 | 
				
			||||||
 | 
					    value = settingsValues.fromJson(settings.json);
 | 
				
			||||||
 | 
					  } else if (settings.source === 'form') {
 | 
				
			||||||
 | 
					    value = settingsValues.fromForm(settings.form);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return {
 | 
					  return {
 | 
				
			||||||
    type: actions.SETTING_SET_SETTINGS,
 | 
					    type: actions.SETTING_SET_SETTINGS,
 | 
				
			||||||
    source: settings.source,
 | 
					    source: settings.source,
 | 
				
			||||||
    json: settings.json,
 | 
					    json: settings.json,
 | 
				
			||||||
    form: settings.form,
 | 
					    form: settings.form,
 | 
				
			||||||
    value: JSON.parse(settings.json),
 | 
					    value,
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,29 +4,29 @@ import Input from '../ui/input';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const KeyMapFields = [
 | 
					const KeyMapFields = [
 | 
				
			||||||
  [
 | 
					  [
 | 
				
			||||||
    ['scroll.vertically?{count:-1}', 'Scroll down'],
 | 
					    ['scroll.vertically?{"count":1}', 'Scroll down'],
 | 
				
			||||||
    ['scroll.vertically?{count:1}', 'Scroll up'],
 | 
					    ['scroll.vertically?{"count":-1}', 'Scroll up'],
 | 
				
			||||||
    ['scroll.horizonally?{count:-1}', 'Scroll left'],
 | 
					    ['scroll.horizonally?{"count":-1}', 'Scroll left'],
 | 
				
			||||||
    ['scroll.horizonally?{count:1}', 'Scroll right'],
 | 
					    ['scroll.horizonally?{"count":1}', 'Scroll right'],
 | 
				
			||||||
    ['scroll.home', 'Scroll leftmost'],
 | 
					    ['scroll.home', 'Scroll leftmost'],
 | 
				
			||||||
    ['scroll.end', 'Scroll last'],
 | 
					    ['scroll.end', 'Scroll last'],
 | 
				
			||||||
    ['scroll.pages?{count:-0.5}', 'Scroll up by half of screen'],
 | 
					    ['scroll.pages?{"count":-0.5}', 'Scroll up by half of screen'],
 | 
				
			||||||
    ['scroll.pages?{count:0.5}', 'Scroll up by half of screen'],
 | 
					    ['scroll.pages?{"count":0.5}', 'Scroll up by half of screen'],
 | 
				
			||||||
    ['scroll.pages?{count:-1}', 'Scroll up by a screen'],
 | 
					    ['scroll.pages?{"count":-1}', 'Scroll up by a screen'],
 | 
				
			||||||
    ['scroll.pages?{count:1}', 'Scroll up by a screen'],
 | 
					    ['scroll.pages?{"count":1}', 'Scroll up by a screen'],
 | 
				
			||||||
  ], [
 | 
					  ], [
 | 
				
			||||||
    ['tabs.close', 'Close a tab'],
 | 
					    ['tabs.close', 'Close a tab'],
 | 
				
			||||||
    ['tabs.reopen', 'Reopen closed tab'],
 | 
					    ['tabs.reopen', 'Reopen closed tab'],
 | 
				
			||||||
    ['tabs.next?{count:1}', 'Select next Tab'],
 | 
					    ['tabs.next?{"count":1}', 'Select next Tab'],
 | 
				
			||||||
    ['tabs.prev?{count:1}', 'Select prev Tab'],
 | 
					    ['tabs.prev?{"count":1}', 'Select prev Tab'],
 | 
				
			||||||
    ['tabs.first', 'Select first tab'],
 | 
					    ['tabs.first', 'Select first tab'],
 | 
				
			||||||
    ['tabs.last', 'Select last tab'],
 | 
					    ['tabs.last', 'Select last tab'],
 | 
				
			||||||
    ['tabs.reload?{cache:true}', 'Reload current tab'],
 | 
					    ['tabs.reload?{"cache":true}', 'Reload current tab'],
 | 
				
			||||||
    ['tabs.pin.toggle', 'Toggle pinned state'],
 | 
					    ['tabs.pin.toggle', 'Toggle pinned state'],
 | 
				
			||||||
    ['tabs.duplicate', 'Dupplicate a tab'],
 | 
					    ['tabs.duplicate', 'Dupplicate a tab'],
 | 
				
			||||||
  ], [
 | 
					  ], [
 | 
				
			||||||
    ['follow.start?{newTab:false}', 'Follow a link'],
 | 
					    ['follow.start?{"newTab":false}', 'Follow a link'],
 | 
				
			||||||
    ['follow.start?{newTab:true}', 'Follow a link in new tab'],
 | 
					    ['follow.start?{"newTab":true}', 'Follow a link in new tab'],
 | 
				
			||||||
    ['navigate.histories.prev', 'Go back in histories'],
 | 
					    ['navigate.histories.prev', 'Go back in histories'],
 | 
				
			||||||
    ['navigate.histories.next', 'Go forward in histories'],
 | 
					    ['navigate.histories.next', 'Go forward in histories'],
 | 
				
			||||||
    ['navigate.link.next', 'Open next link'],
 | 
					    ['navigate.link.next', 'Open next link'],
 | 
				
			||||||
| 
						 | 
					@ -39,12 +39,12 @@ const KeyMapFields = [
 | 
				
			||||||
    ['find.prev', 'Find previous word'],
 | 
					    ['find.prev', 'Find previous word'],
 | 
				
			||||||
  ], [
 | 
					  ], [
 | 
				
			||||||
    ['command.show', 'Open console'],
 | 
					    ['command.show', 'Open console'],
 | 
				
			||||||
    ['command.show.open?{alter:false}', 'Open URL'],
 | 
					    ['command.show.open?{"alter":false}', 'Open URL'],
 | 
				
			||||||
    ['command.show.open?{alter:true}', 'Alter URL'],
 | 
					    ['command.show.open?{"alter":true}', 'Alter URL'],
 | 
				
			||||||
    ['command.show.tabopen?{alter:false}', 'Open URL in new Tab'],
 | 
					    ['command.show.tabopen?{"alter":false}', 'Open URL in new Tab'],
 | 
				
			||||||
    ['command.show.tabopen?{alter:true}', 'Alter 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":false}', 'Open URL in new window'],
 | 
				
			||||||
    ['command.show.winopen?{alter:true}', 'Alter URL in new window'],
 | 
					    ['command.show.winopen?{"alter":true}', 'Alter URL in new window'],
 | 
				
			||||||
    ['command.show.buffer', 'Open buffer command'],
 | 
					    ['command.show.buffer', 'Open buffer command'],
 | 
				
			||||||
  ], [
 | 
					  ], [
 | 
				
			||||||
    ['addon.toggle.enabled', 'Enable or disable'],
 | 
					    ['addon.toggle.enabled', 'Enable or disable'],
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -66,29 +66,29 @@ export default {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  'form': {
 | 
					  'form': {
 | 
				
			||||||
    'keymaps': {
 | 
					    'keymaps': {
 | 
				
			||||||
      'scroll.vertically?{count:-1}': 'j',
 | 
					      'scroll.vertically?{"count":1}': 'j',
 | 
				
			||||||
      'scroll.vertically?{count:1}': 'k',
 | 
					      'scroll.vertically?{"count":-1}': 'k',
 | 
				
			||||||
      'scroll.horizonally?{count:-1}': 'h',
 | 
					      'scroll.horizonally?{"count":-1}': 'h',
 | 
				
			||||||
      'scroll.horizonally?{count:1}': 'l',
 | 
					      'scroll.horizonally?{"count":1}': 'l',
 | 
				
			||||||
      'scroll.home': '0',
 | 
					      'scroll.home': '0',
 | 
				
			||||||
      'scroll.end': '$',
 | 
					      'scroll.end': '$',
 | 
				
			||||||
      'scroll.pages?{count:-0.5}': '<C-U>',
 | 
					      'scroll.pages?{"count":-0.5}': '<C-U>',
 | 
				
			||||||
      'scroll.pages?{count:0.5}': '<C-D>',
 | 
					      'scroll.pages?{"count":0.5}': '<C-D>',
 | 
				
			||||||
      'scroll.pages?{count:-1}': '<C-B>',
 | 
					      'scroll.pages?{"count":-1}': '<C-B>',
 | 
				
			||||||
      'scroll.pages?{count:1}': '<C-F>',
 | 
					      'scroll.pages?{"count":1}': '<C-F>',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      'tabs.close': 'd',
 | 
					      'tabs.close': 'd',
 | 
				
			||||||
      'tabs.reopen': 'u',
 | 
					      'tabs.reopen': 'u',
 | 
				
			||||||
      'tabs.next?{count:1}': 'J',
 | 
					      'tabs.next?{"count":1}': 'J',
 | 
				
			||||||
      'tabs.prev?{count:1}': 'K',
 | 
					      'tabs.prev?{"count":1}': 'K',
 | 
				
			||||||
      'tabs.first': 'g0',
 | 
					      'tabs.first': 'g0',
 | 
				
			||||||
      'tabs.last': 'g$',
 | 
					      'tabs.last': 'g$',
 | 
				
			||||||
      'tabs.reload?{cache:true}': 'r',
 | 
					      'tabs.reload?{"cache":true}': 'r',
 | 
				
			||||||
      'tabs.pin.toggle': 'zp',
 | 
					      'tabs.pin.toggle': 'zp',
 | 
				
			||||||
      'tabs.duplicate': 'zd',
 | 
					      'tabs.duplicate': 'zd',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      'follow.start?{newTab:false}': 'f',
 | 
					      'follow.start?{"newTab":false}': 'f',
 | 
				
			||||||
      'follow.start?{newTab:true}': 'F',
 | 
					      'follow.start?{"newTab":true}': 'F',
 | 
				
			||||||
      'navigate.histories.prev': 'H',
 | 
					      'navigate.histories.prev': 'H',
 | 
				
			||||||
      'navigate.histories.next': 'L',
 | 
					      'navigate.histories.next': 'L',
 | 
				
			||||||
      'navigate.link.next': ']]',
 | 
					      'navigate.link.next': ']]',
 | 
				
			||||||
| 
						 | 
					@ -101,12 +101,12 @@ export default {
 | 
				
			||||||
      'find.prev': 'N',
 | 
					      'find.prev': 'N',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      'command.show': ':',
 | 
					      'command.show': ':',
 | 
				
			||||||
      'command.show.open?{alter:false}': 'o',
 | 
					      'command.show.open?{"alter":false}': 'o',
 | 
				
			||||||
      'command.show.open?{alter:true}': 'O',
 | 
					      'command.show.open?{"alter":true}': 'O',
 | 
				
			||||||
      'command.show.tabopen?{alter:false}': 't',
 | 
					      'command.show.tabopen?{"alter":false}': 't',
 | 
				
			||||||
      'command.show.tabopen?{alter:true}': 'T',
 | 
					      'command.show.tabopen?{"alter":true}': 'T',
 | 
				
			||||||
      'command.show.winopen?{alter:false}': 'w',
 | 
					      'command.show.winopen?{"alter":false}': 'w',
 | 
				
			||||||
      'command.show.winopen?{alter:true}': 'W',
 | 
					      'command.show.winopen?{"alter":true}': 'W',
 | 
				
			||||||
      'command.show.buffer': 'b',
 | 
					      'command.show.buffer': 'b',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      'addon.toggle.enabled': '<S-Esc>',
 | 
					      'addon.toggle.enabled': '<S-Esc>',
 | 
				
			||||||
							
								
								
									
										35
									
								
								src/shared/settings/values.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								src/shared/settings/values.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,35 @@
 | 
				
			||||||
 | 
					const operationFromName = (name) => {
 | 
				
			||||||
 | 
					  let [type, argStr] = name.split('?');
 | 
				
			||||||
 | 
					  let args = {};
 | 
				
			||||||
 | 
					  if (argStr) {
 | 
				
			||||||
 | 
					    args = JSON.parse(argStr);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return Object.assign({ type }, args);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const fromJson = (json) => {
 | 
				
			||||||
 | 
					  return JSON.parse(json);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const fromForm = (form) => {
 | 
				
			||||||
 | 
					  let keymaps = {};
 | 
				
			||||||
 | 
					  for (let name of Object.keys(form.keymaps)) {
 | 
				
			||||||
 | 
					    let keys = form.keymaps[name];
 | 
				
			||||||
 | 
					    keymaps[keys] = operationFromName(name);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  let engines = {};
 | 
				
			||||||
 | 
					  for (let { name, url } of form.search.engines) {
 | 
				
			||||||
 | 
					    engines[name] = url;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  let search = {
 | 
				
			||||||
 | 
					    default: form.search.default,
 | 
				
			||||||
 | 
					    engines,
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  let blacklist = form.blacklist;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return { keymaps, search, blacklist };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export { fromJson, fromForm };
 | 
				
			||||||
		Reference in a new issue