src/content

This commit is contained in:
Shin'ya Ueoka 2019-05-06 22:17:01 +09:00
parent a0882bbceb
commit b002d70070
19 changed files with 119 additions and 80 deletions

6
src/content/Mark.ts Normal file
View file

@ -0,0 +1,6 @@
export default interface Mark {
x: number;
y: number;
// eslint-disable-next-line semi
}

View file

@ -9,6 +9,20 @@ import * as messages from '../../shared/messages';
import * as actions from './index';
import * as consoleFrames from '../console-frames';
interface MyWindow extends Window {
find(
aString: string,
aCaseSensitive?: boolean,
aBackwards?: boolean,
aWrapAround?: boolean,
aWholeWord?: boolean,
aSearchInFrames?: boolean,
aShowDialog?: boolean): boolean;
}
// eslint-disable-next-line no-var, vars-on-top, init-declarations
declare var window: MyWindow;
const find = (str: string, backwards: boolean): boolean => {
let caseSensitive = false;
let wrapScan = true;
@ -18,7 +32,7 @@ const find = (str: string, backwards: boolean): boolean => {
// because of same origin policy
// eslint-disable-next-line no-extra-parens
let found = (<any>window).find(str, caseSensitive, backwards, wrapScan);
let found = window.find(str, caseSensitive, backwards, wrapScan);
if (found) {
return found;
}
@ -28,7 +42,7 @@ const find = (str: string, backwards: boolean): boolean => {
}
// eslint-disable-next-line no-extra-parens
return (<any>window).find(str, caseSensitive, backwards, wrapScan);
return window.find(str, caseSensitive, backwards, wrapScan);
};
// eslint-disable-next-line max-statements

View file

@ -1,5 +1,6 @@
import Redux from 'redux';
import Settings from '../../shared/Settings';
import * as keyUtils from '../../shared/utils/keys';
// Enable/disable
export const ADDON_SET_ENABLED = 'addon.set.enabled';
@ -51,7 +52,7 @@ export interface SettingSetAction extends Redux.Action {
export interface InputKeyPressAction extends Redux.Action {
type: typeof INPUT_KEY_PRESS;
key: string;
key: keyUtils.Key;
}
export interface InputClearKeysAction extends Redux.Action {

View file

@ -1,6 +1,7 @@
import * as actions from './index';
import * as keyUtils from '../../shared/utils/keys';
const keyPress = (key: string): actions.InputAction => {
const keyPress = (key: keyUtils.Key): actions.InputAction => {
return {
type: actions.INPUT_KEY_PRESS,
key,

View file

@ -18,7 +18,7 @@ export default class Common {
constructor(win: Window, store: any) {
const input = new InputComponent(win.document.body);
const follow = new FollowComponent(win);
const mark = new MarkComponent(win.document.body, store);
const mark = new MarkComponent(store);
const keymapper = new KeymapperComponent(store);
input.onKey((key: keys.Key) => follow.key(key));

View file

@ -1,27 +1,30 @@
import * as markActions from '../../actions/mark';
import * as scrolls from '../..//scrolls';
import * as consoleFrames from '../..//console-frames';
import * as keyUtils from '../../../shared/utils/keys';
import Mark from '../../Mark';
const cancelKey = (key): boolean => {
return key.key === 'Esc' || key.key === '[' && key.ctrlKey;
const cancelKey = (key: keyUtils.Key): boolean => {
return key.key === 'Esc' || key.key === '[' && Boolean(key.ctrlKey);
};
const globalKey = (key) => {
const globalKey = (key: string): boolean => {
return (/^[A-Z0-9]$/).test(key);
};
export default class MarkComponent {
constructor(body, store) {
this.body = body;
private store: any;
constructor(store: any) {
this.store = store;
}
// eslint-disable-next-line max-statements
key(key) {
let { mark: markStage, setting } = this.store.getState();
key(key: keyUtils.Key) {
let { mark: markState, setting } = this.store.getState();
let smoothscroll = setting.properties.smoothscroll;
if (!markStage.setMode && !markStage.jumpMode) {
if (!markState.setMode && !markState.jumpMode) {
return false;
}
@ -32,26 +35,30 @@ export default class MarkComponent {
if (key.ctrlKey || key.metaKey || key.altKey) {
consoleFrames.postError('Unknown mark');
} else if (globalKey(key.key) && markStage.setMode) {
} else if (globalKey(key.key) && markState.setMode) {
this.doSetGlobal(key);
} else if (globalKey(key.key) && markStage.jumpMode) {
} else if (globalKey(key.key) && markState.jumpMode) {
this.doJumpGlobal(key);
} else if (markStage.setMode) {
} else if (markState.setMode) {
this.doSet(key);
} else if (markStage.jumpMode) {
this.doJump(markStage.marks, key, smoothscroll);
} else if (markState.jumpMode) {
this.doJump(markState.marks, key, smoothscroll);
}
this.store.dispatch(markActions.cancel());
return true;
}
doSet(key) {
doSet(key: keyUtils.Key) {
let { x, y } = scrolls.getScroll();
this.store.dispatch(markActions.setLocal(key.key, x, y));
}
doJump(marks, key, smoothscroll) {
doJump(
marks: { [key: string]: Mark },
key: keyUtils.Key,
smoothscroll: boolean,
) {
if (!marks[key.key]) {
consoleFrames.postError('Mark is not set');
return;
@ -61,12 +68,12 @@ export default class MarkComponent {
scrolls.scrollTo(x, y, smoothscroll);
}
doSetGlobal(key) {
doSetGlobal(key: keyUtils.Key) {
let { x, y } = scrolls.getScroll();
this.store.dispatch(markActions.setGlobal(key.key, x, y));
}
doJumpGlobal(key) {
doJumpGlobal(key: keyUtils.Key) {
this.store.dispatch(markActions.jumpGlobal(key.key));
}
}

View file

@ -12,5 +12,5 @@ if (window.self === window.top) {
}
let style = window.document.createElement('style');
style.textContent = consoleFrameStyle.default;
style.textContent = consoleFrameStyle;
window.document.head.appendChild(style);

View file

@ -1,7 +1,8 @@
import * as actions from '../actions';
import * as keyUtils from '../../shared/utils/keys';
export interface State {
keys: string[];
keys: keyUtils.Key[],
}
const defaultState: State = {

View file

@ -1,10 +1,6 @@
import Mark from '../Mark';
import * as actions from '../actions';
interface Mark {
x: number;
y: number;
}
export interface State {
setMode: boolean;
jumpMode: boolean;

View file

@ -1,4 +1,4 @@
exports.default = `
export default `
.vimvixen-console-frame {
margin: 0;
padding: 0;