aboutsummaryrefslogtreecommitdiff
path: root/src/actions/command.js
diff options
context:
space:
mode:
authorShin'ya Ueoka <ueokande@i-beam.org>2017-09-16 23:32:19 +0900
committerShin'ya Ueoka <ueokande@i-beam.org>2017-09-16 23:32:19 +0900
commitc5529958d53146c8c6826673abe6431a19f1924d (patch)
tree4952c7ac1ded91d52fd6e424c229022b61b67aa3 /src/actions/command.js
parentb2cddcd69b4ae06770d66808624fc43f3dcbcb0e (diff)
parentae394e28c0cbc8710d4937238c97328afddbca0f (diff)
Merge branch 'more-redux'
Diffstat (limited to 'src/actions/command.js')
-rw-r--r--src/actions/command.js81
1 files changed, 65 insertions, 16 deletions
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);
+}