enable/disable addon by keys
This commit is contained in:
		
							parent
							
								
									59f7ef205d
								
							
						
					
					
						commit
						dc6d93c1da
					
				
					 4 changed files with 27 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -4,9 +4,16 @@ import * as scrolls from 'content/scrolls';
 | 
			
		|||
import * as navigates from 'content/navigates';
 | 
			
		||||
import * as urls from 'content/urls';
 | 
			
		||||
import * as consoleFrames from 'content/console-frames';
 | 
			
		||||
import * as addonActions from './addon';
 | 
			
		||||
 | 
			
		||||
const exec = (operation) => {
 | 
			
		||||
  switch (operation.type) {
 | 
			
		||||
  case operations.ADDON_ENABLE:
 | 
			
		||||
    return addonActions.enable();
 | 
			
		||||
  case operations.ADDON_DISABLE:
 | 
			
		||||
    return addonActions.disable();
 | 
			
		||||
  case operations.ADDON_TOGGLE_ENABLED:
 | 
			
		||||
    return addonActions.toggleEnabled();
 | 
			
		||||
  case operations.SCROLL_VERTICALLY:
 | 
			
		||||
    return scrolls.scrollVertically(window, operation.count);
 | 
			
		||||
  case operations.SCROLL_HORIZONALLY:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
import * as inputActions from 'content/actions/input';
 | 
			
		||||
import * as operationActions from 'content/actions/operation';
 | 
			
		||||
import operations from 'shared/operations';
 | 
			
		||||
 | 
			
		||||
export default class KeymapperComponent {
 | 
			
		||||
  constructor(store) {
 | 
			
		||||
| 
						 | 
				
			
			@ -10,12 +11,23 @@ export default class KeymapperComponent {
 | 
			
		|||
  }
 | 
			
		||||
 | 
			
		||||
  key(key) {
 | 
			
		||||
    let enabled = this.store.getState().addon.enabled;
 | 
			
		||||
 | 
			
		||||
    this.store.dispatch(inputActions.keyPress(key));
 | 
			
		||||
 | 
			
		||||
    let input = this.store.getState().input;
 | 
			
		||||
    let matched = Object.keys(input.keymaps).filter((keyStr) => {
 | 
			
		||||
      return keyStr.startsWith(input.keys);
 | 
			
		||||
    });
 | 
			
		||||
    if (!enabled) {
 | 
			
		||||
      // available keymaps are only ADDON_ENABLE and ADDON_TOGGLE_ENABLED if
 | 
			
		||||
      // the addon disabled
 | 
			
		||||
      matched = matched.filter((keys) => {
 | 
			
		||||
        let type = input.keymaps[keys].type;
 | 
			
		||||
        return type === operations.ADDON_ENABLE ||
 | 
			
		||||
          type === operations.ADDON_TOGGLE_ENABLED;
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
    if (matched.length === 0) {
 | 
			
		||||
      this.store.dispatch(inputActions.clearKeys());
 | 
			
		||||
      return false;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,14 +1,17 @@
 | 
			
		|||
import addonReducer from './addon';
 | 
			
		||||
import inputReducer from './input';
 | 
			
		||||
import followReducer from './follow';
 | 
			
		||||
 | 
			
		||||
// Make setting reducer instead of re-use
 | 
			
		||||
const defaultState = {
 | 
			
		||||
  addon: addonReducer(undefined, {}),
 | 
			
		||||
  input: inputReducer(undefined, {}),
 | 
			
		||||
  follow: followReducer(undefined, {}),
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default function reducer(state = defaultState, action = {}) {
 | 
			
		||||
  return Object.assign({}, state, {
 | 
			
		||||
    addon: addonReducer(state.addon, action),
 | 
			
		||||
    input: inputReducer(state.input, action),
 | 
			
		||||
    follow: followReducer(state.follow, action),
 | 
			
		||||
  });
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,9 @@
 | 
			
		|||
export default {
 | 
			
		||||
  // Addons
 | 
			
		||||
  ADDON_ENABLE: 'addon.enable',
 | 
			
		||||
  ADDON_DISABLE: 'addon.disable',
 | 
			
		||||
  ADDON_TOGGLE_ENABLED: 'addon.toggle.enabled',
 | 
			
		||||
 | 
			
		||||
  // Command
 | 
			
		||||
  COMMAND_SHOW: 'command.show',
 | 
			
		||||
  COMMAND_SHOW_OPEN: 'command.show.open',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue