A fork of https://github.com/ueokande/vim-vixen
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.0 KiB
91 lines
2.0 KiB
import * as scrolls from './scrolls'; |
|
import FooterLine from './footer-line'; |
|
import Follow from './follow'; |
|
import * as actions from '../shared/actions'; |
|
|
|
var footer = null; |
|
|
|
const createFooterLine = (initial = '') => { |
|
footer = new FooterLine(document, initial); |
|
footer.onPromptChange((e) => { |
|
let request = { |
|
type: 'event.cmd.suggest', |
|
text: e.target.value |
|
}; |
|
browser.runtime.sendMessage(request); |
|
}); |
|
footer.onEntered((e) => { |
|
let request = { |
|
type: 'event.cmd.enter', |
|
text: e.target.value |
|
}; |
|
browser.runtime.sendMessage(request); |
|
}); |
|
footer.focus(); |
|
} |
|
|
|
const invokeEvent = (action) => { |
|
if (typeof action === 'undefined' || action === null) { |
|
return; |
|
} |
|
|
|
switch (action[0]) { |
|
case actions.CMD_OPEN: |
|
createFooterLine(); |
|
break; |
|
case actions.CMD_TABS_OPEN: |
|
if (action[1] || false) { |
|
// alter url |
|
createFooterLine('open ' + window.location.href); |
|
} else { |
|
createFooterLine('open '); |
|
} |
|
break; |
|
case actions.SCROLL_UP: |
|
scrolls.scrollUp(window, action[1] || 1); |
|
break; |
|
case actions.SCROLL_DOWN: |
|
scrolls.scrollDown(window, action[1] || 1); |
|
break; |
|
case actions.SCROLL_TOP: |
|
scrolls.scrollTop(window, action[1]); |
|
break; |
|
case actions.SCROLL_BOTTOM: |
|
scrolls.scrollBottom(window, action[1]); |
|
break; |
|
case actions.FOLLOW_START: |
|
new Follow(window.document, action[1] || false); |
|
break; |
|
} |
|
} |
|
|
|
const isModifier = (code) => { |
|
return code === KeyboardEvent.DOM_VK_SHIFT || |
|
code === KeyboardEvent.DOM_VK_ALT || |
|
code === KeyboardEvent.DOM_VK_CONTROL || |
|
code === KeyboardEvent.DOM_VK_META; |
|
} |
|
|
|
window.addEventListener("keydown", (e) => { |
|
if (e.target instanceof HTMLInputElement) { |
|
return; |
|
} |
|
if (isModifier(e.keyCode)) { |
|
return; |
|
} |
|
|
|
let request = { |
|
type: 'event.keydown', |
|
code: e.keyCode, |
|
shift: e.shiftKey, |
|
alt: e.altKey, |
|
meta: e.metaKey, |
|
ctrl: e.ctrlKey, |
|
} |
|
|
|
browser.runtime.sendMessage(request) |
|
.then(invokeEvent, |
|
(err) => { |
|
console.log(`Vim Vixen: ${err}`); |
|
}); |
|
});
|
|
|