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_KEY_PRESS: 'follow.controller.key.press',
|
||||
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 findReducer from './find';
|
||||
import settingReducer from './setting';
|
||||
import inputReducer from './input';
|
||||
import followControllerReducer from './follow-controller';
|
||||
|
@ -6,6 +7,7 @@ import followControllerReducer from './follow-controller';
|
|||
// Make setting reducer instead of re-use
|
||||
const defaultState = {
|
||||
addon: addonReducer(undefined, {}),
|
||||
find: findReducer(undefined, {}),
|
||||
setting: settingReducer(undefined, {}),
|
||||
input: inputReducer(undefined, {}),
|
||||
followController: followControllerReducer(undefined, {}),
|
||||
|
@ -14,6 +16,7 @@ const defaultState = {
|
|||
export default function reducer(state = defaultState, action = {}) {
|
||||
return Object.assign({}, state, {
|
||||
addon: addonReducer(state.addon, action),
|
||||
find: findReducer(state.find, action),
|
||||
setting: settingReducer(state.setting, action),
|
||||
input: inputReducer(state.input, 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