aboutsummaryrefslogtreecommitdiff
path: root/src/actions
diff options
context:
space:
mode:
authorShin'ya Ueoka <ueokande@i-beam.org>2017-09-14 22:04:42 +0900
committerShin'ya Ueoka <ueokande@i-beam.org>2017-09-16 21:08:18 +0900
commit83cb277ba2af2bc2f87ace1d97fa582a7043bcd5 (patch)
tree1ff5eb02fc6b7b12d0a1e825ba1fdb889a1e095b /src/actions
parent6127fdc285bc430b48259bd6e90b69623b4e76cc (diff)
consome as store/reducers
Diffstat (limited to 'src/actions')
-rw-r--r--src/actions/background.js11
-rw-r--r--src/actions/command.js81
-rw-r--r--src/actions/index.js12
-rw-r--r--src/actions/operation.js12
4 files changed, 77 insertions, 39 deletions
diff --git a/src/actions/background.js b/src/actions/background.js
deleted file mode 100644
index 40b901b..0000000
--- a/src/actions/background.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import actions from '../actions';
-
-export function requestCompletions(line) {
- let command = line.split(' ', 1)[0];
- let keywords = line.replace(command + ' ', '');
- return {
- type: actions.BACKGROUND_REQUEST_COMPLETIONS,
- command,
- keywords
- };
-}
diff --git a/src/actions/command.js b/src/actions/command.js
index c983278..03f1e83 100644
--- a/src/actions/command.js
+++ b/src/actions/command.js
@@ -1,4 +1,5 @@
-import actions from '../actions';
+import * as tabs from '../background/tabs';
+import * as consoleActions from './console';
const normalizeUrl = (string) => {
try {
@@ -8,28 +9,76 @@ const normalizeUrl = (string) => {
}
}
-export function exec(line) {
- let name = line.split(' ')[0];
- let remaining = line.replace(name + ' ', '');
+const openCommand = (url) => {
+ return browser.tabs.query({ active: true, currentWindow: true }).then((tabs) => {
+ if (tabs.length > 0) {
+ return browser.tabs.update(tabs[0].id, { url: url });
+ }
+ });
+}
+const tabopenCommand = (url) => {
+ return browser.tabs.create({ url: url });
+}
+
+const bufferCommand = (keywords) => {
+ return browser.tabs.query({ active: true, currentWindow: true }).then((tabss) => {
+ if (tabss.length > 0) {
+ if (isNaN(keywords)) {
+ return tabs.selectByKeyword(tabss[0], keywords);
+ } else {
+ let index = parseInt(keywords, 10) - 1;
+ return tabs.selectAt(index);
+ }
+ }
+ });
+}
+
+const doCommand = (name, remaining) => {
switch (name) {
case 'open':
// TODO use search engined and pass keywords to them
- return {
- type: actions.COMMAND_OPEN_URL,
- url: normalizeUrl(remaining)
- };
+ return openCommand(normalizeUrl(remaining));
case 'tabopen':
- return {
- type: actions.COMMAND_TABOPEN_URL,
- url: normalizeUrl(remaining)
- };
+ return tabopenCommand(normalizeUrl(remaining));
case 'b':
case 'buffer':
- return {
- type: actions.COMMAND_BUFFER,
- keywords: remaining
- };
+ return bufferCommand(remaining);
}
throw new Error(name + ' command is not defined');
}
+
+const getCompletions = (command, keywords) => {
+ switch (command) {
+ case 'buffer':
+ return tabs.getCompletions(keywords).then((tabs) => {
+ let items = tabs.map((tab) => {
+ return {
+ caption: tab.title,
+ content: tab.title,
+ url: tab.url,
+ icon: tab.favIconUrl
+ }
+ });
+ return [{
+ name: "Buffers",
+ items: items
+ }];
+ });
+ }
+ return Promise.resolve([]);
+};
+
+export function exec(line) {
+ let name = line.split(' ')[0];
+ let remaining = line.replace(name + ' ', '');
+ return doCommand(name, remaining).then(() => {
+ return consoleActions.hide();
+ });
+}
+
+export function complete(line) {
+ let command = line.split(' ', 1)[0];
+ let keywords = line.replace(command + ' ', '');
+ return getCompletions(command, keywords).then(consoleActions.setCompletions);
+}
diff --git a/src/actions/index.js b/src/actions/index.js
index 754b7f0..977b3c2 100644
--- a/src/actions/index.js
+++ b/src/actions/index.js
@@ -5,19 +5,7 @@ export default {
CONSOLE_SHOW_ERROR: 'vimvixen.console.show.error',
CONSOLE_HIDE: 'vimvixen.console.hide',
- // Background commands
- BACKGROUND_REQUEST_COMPLETIONS: 'vimvixen.background.request.completions',
-
- // content commands
- CMD_OPEN: 'cmd.open',
- CMD_TABS_OPEN: 'cmd.tabs.open',
- CMD_BUFFER: 'cmd.buffer',
-
// User input
INPUT_KEY_PRESS: 'input.key,press',
INPUT_CLEAR_KEYS: 'input.clear.keys',
-
- COMMAND_OPEN_URL: 'command.open.url',
- COMMAND_TABOPEN_URL: 'command.tabopen.url',
- COMMAND_BUFFER: 'command.buffer',
};
diff --git a/src/actions/operation.js b/src/actions/operation.js
index 8ca0f4b..2009818 100644
--- a/src/actions/operation.js
+++ b/src/actions/operation.js
@@ -1,4 +1,5 @@
import operations from '../operations';
+import * as consoleActions from './console';
import * as tabs from '../background/tabs';
import * as zooms from '../background/zooms';
@@ -20,6 +21,17 @@ export function exec(operation, tab) {
return zooms.zoomOut();
case operations.ZOOM_NEUTRAL:
return zooms.neutral();
+ case operations.COMMAND_OPEN:
+ return consoleActions.showCommand('');
+ case operations.COMMAND_TABS_OPEN:
+ if (operations.alter) {
+ // alter url
+ return consoleActions.showCommand('open ' + tab.url);
+ } else {
+ return consoleActions.showCommand('open ');
+ }
+ case operations.COMMAND_BUFFER:
+ return consoleActions.showCommand('buffer ');
default:
return browser.tabs.sendMessage(tab.id, {
type: 'require.content.operation',