add find action and reducer
This commit is contained in:
parent
be37c42d28
commit
e1c70769ea
6 changed files with 124 additions and 0 deletions
36
src/content/actions/find.js
Normal file
36
src/content/actions/find.js
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
//
|
||||||
|
// window.find(aString, aCaseSensitive, aBackwards, aWrapAround,
|
||||||
|
// aWholeWord, aSearchInFrames, aShowDialog);
|
||||||
|
//
|
||||||
|
// NOTE: window.find is not standard API
|
||||||
|
// https://developer.mozilla.org/en-US/docs/Web/API/Window/find
|
||||||
|
|
||||||
|
import actions from 'content/actions';
|
||||||
|
|
||||||
|
const show = () => {
|
||||||
|
return { type: actions.FIND_SHOW };
|
||||||
|
};
|
||||||
|
|
||||||
|
const hide = () => {
|
||||||
|
return { type: actions.FIND_HIDE };
|
||||||
|
};
|
||||||
|
|
||||||
|
const next = (keyword) => {
|
||||||
|
// TODO Error on no matched
|
||||||
|
window.find(keyword, false, false, true, false, true, false);
|
||||||
|
return {
|
||||||
|
type: actions.FIND_SET_KEYWORD,
|
||||||
|
keyword,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const prev = (keyword) => {
|
||||||
|
// TODO Error on no matched
|
||||||
|
window.find(keyword, false, true, true, false, true, false);
|
||||||
|
return {
|
||||||
|
type: actions.FIND_SET_KEYWORD,
|
||||||
|
keyword,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export { show, hide, next, prev };
|
|
@ -21,4 +21,9 @@ export default {
|
||||||
FOLLOW_CONTROLLER_DISABLE: 'follow.controller.disable',
|
FOLLOW_CONTROLLER_DISABLE: 'follow.controller.disable',
|
||||||
FOLLOW_CONTROLLER_KEY_PRESS: 'follow.controller.key.press',
|
FOLLOW_CONTROLLER_KEY_PRESS: 'follow.controller.key.press',
|
||||||
FOLLOW_CONTROLLER_BACKSPACE: 'follow.controller.backspace',
|
FOLLOW_CONTROLLER_BACKSPACE: 'follow.controller.backspace',
|
||||||
|
|
||||||
|
// Find
|
||||||
|
FIND_SHOW: 'find.show',
|
||||||
|
FIND_HIDE: 'find.hide',
|
||||||
|
FIND_SET_KEYWORD: 'find.set.keyword',
|
||||||
};
|
};
|
||||||
|
|
25
src/content/reducers/find.js
Normal file
25
src/content/reducers/find.js
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
import actions from 'content/actions';
|
||||||
|
|
||||||
|
const defaultState = {
|
||||||
|
enabled: false,
|
||||||
|
keyword: '',
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function reducer(state = defaultState, action = {}) {
|
||||||
|
switch (action.type) {
|
||||||
|
case actions.FIND_SHOW:
|
||||||
|
return Object.assign({}, state, {
|
||||||
|
enabled: true,
|
||||||
|
});
|
||||||
|
case actions.FIND_HIDE:
|
||||||
|
return Object.assign({}, state, {
|
||||||
|
enabled: false,
|
||||||
|
});
|
||||||
|
case actions.FIND_SET_KEYWORD:
|
||||||
|
return Object.assign({}, state, {
|
||||||
|
keyword: action.keyword,
|
||||||
|
});
|
||||||
|
default:
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
import addonReducer from './addon';
|
import addonReducer from './addon';
|
||||||
|
import findReducer from './find';
|
||||||
import settingReducer from './setting';
|
import settingReducer from './setting';
|
||||||
import inputReducer from './input';
|
import inputReducer from './input';
|
||||||
import followControllerReducer from './follow-controller';
|
import followControllerReducer from './follow-controller';
|
||||||
|
@ -6,6 +7,7 @@ import followControllerReducer from './follow-controller';
|
||||||
// Make setting reducer instead of re-use
|
// Make setting reducer instead of re-use
|
||||||
const defaultState = {
|
const defaultState = {
|
||||||
addon: addonReducer(undefined, {}),
|
addon: addonReducer(undefined, {}),
|
||||||
|
find: findReducer(undefined, {}),
|
||||||
setting: settingReducer(undefined, {}),
|
setting: settingReducer(undefined, {}),
|
||||||
input: inputReducer(undefined, {}),
|
input: inputReducer(undefined, {}),
|
||||||
followController: followControllerReducer(undefined, {}),
|
followController: followControllerReducer(undefined, {}),
|
||||||
|
@ -14,6 +16,7 @@ const defaultState = {
|
||||||
export default function reducer(state = defaultState, action = {}) {
|
export default function reducer(state = defaultState, action = {}) {
|
||||||
return Object.assign({}, state, {
|
return Object.assign({}, state, {
|
||||||
addon: addonReducer(state.addon, action),
|
addon: addonReducer(state.addon, action),
|
||||||
|
find: findReducer(state.find, action),
|
||||||
setting: settingReducer(state.setting, action),
|
setting: settingReducer(state.setting, action),
|
||||||
input: inputReducer(state.input, action),
|
input: inputReducer(state.input, action),
|
||||||
followController: followControllerReducer(state.followController, action),
|
followController: followControllerReducer(state.followController, action),
|
||||||
|
|
19
test/content/actions/find.test.js
Normal file
19
test/content/actions/find.test.js
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
import { expect } from "chai";
|
||||||
|
import actions from 'content/actions';
|
||||||
|
import * as findActions from 'content/actions/find';
|
||||||
|
|
||||||
|
describe("find actions", () => {
|
||||||
|
describe("show", () => {
|
||||||
|
it('create FIND_SHOW action', () => {
|
||||||
|
let action = findActions.show();
|
||||||
|
expect(action.type).to.equal(actions.FIND_SHOW);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("hide", () => {
|
||||||
|
it('create FIND_HIDE action', () => {
|
||||||
|
let action = findActions.hide();
|
||||||
|
expect(action.type).to.equal(actions.FIND_HIDE);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
36
test/content/reducers/find.test.js
Normal file
36
test/content/reducers/find.test.js
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
import { expect } from "chai";
|
||||||
|
import actions from 'content/actions';
|
||||||
|
import findReducer from 'content/reducers/find';
|
||||||
|
|
||||||
|
describe("find reducer", () => {
|
||||||
|
it('return the initial state', () => {
|
||||||
|
let state = findReducer(undefined, {});
|
||||||
|
expect(state).to.have.property('enabled', false);
|
||||||
|
expect(state).to.have.property('keyword', '');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('return next state for FIND_SHOW', () => {
|
||||||
|
let action = { type: actions.FIND_SHOW };
|
||||||
|
let prev = { enabled: false };
|
||||||
|
let state = findReducer(prev, action);
|
||||||
|
|
||||||
|
expect(state.enabled).is.equal(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('return next state for FIND_HIDE', () => {
|
||||||
|
let action = { type: actions.FIND_HIDE };
|
||||||
|
let prev = { enabled: true };
|
||||||
|
let state = findReducer(prev, action);
|
||||||
|
|
||||||
|
expect(state.enabled).is.equal(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('return next state for FIND_SET_KEYWORD', () => {
|
||||||
|
let action = { type: actions.FIND_SET_KEYWORD, keyword: 'my-search' };
|
||||||
|
let state = { enabled: true, keyword: '' };
|
||||||
|
|
||||||
|
state = findReducer(state, action);
|
||||||
|
|
||||||
|
expect(state.keyword).is.equal('my-search');
|
||||||
|
});
|
||||||
|
});
|
Reference in a new issue