From 22a33a81bd8846c1d97d5c70c5aadc35520785e8 Mon Sep 17 00:00:00 2001 From: Maxim Baz Date: Tue, 19 Mar 2019 21:48:56 +0100 Subject: [PATCH] Support launching url in a new tab (#46) --- src/background.js | 22 ++++++++++++++-------- src/popup/interface.js | 4 +++- src/popup/popup.js | 3 +++ src/popup/searchinterface.js | 8 ++++++++ 4 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/background.js b/src/background.js index 132af4d..be82e3d 100644 --- a/src/background.js +++ b/src/background.js @@ -408,6 +408,7 @@ async function handleMessage(settings, message, sendResponse) { break; case "launch": + case "launchInNewTab": try { var url = message.login.fields.url || message.login.domain; if (!url) { @@ -416,20 +417,25 @@ async function handleMessage(settings, message, sendResponse) { if (!url.match(/:\/\//)) { url = "http://" + url; } - if (authListeners[settings.tab.id]) { - chrome.tabs.onUpdated.removeListener(authListeners[settings.tab.id]); - delete authListeners[settings.tab.id]; + + const tab = + message.action === "launch" + ? await chrome.tabs.update(settings.tab.id, { url: url }) + : await chrome.tabs.create({ url: url }); + + if (authListeners[tab.id]) { + chrome.tabs.onUpdated.removeListener(authListeners[tab.id]); + delete authListeners[tab.id]; } - authListeners[settings.tab.id] = handleModalAuth.bind({ + authListeners[tab.id] = handleModalAuth.bind({ url: url, login: message.login }); chrome.webRequest.onAuthRequired.addListener( - authListeners[settings.tab.id], - { urls: ["*://*/*"], tabId: settings.tab.id }, + authListeners[tab.id], + { urls: ["*://*/*"], tabId: tab.id }, ["blocking"] ); - chrome.tabs.update(settings.tab.id, { url: url }); sendResponse({ status: "ok" }); } catch (e) { sendResponse({ @@ -525,7 +531,7 @@ async function parseFields(settings, login) { lines.forEach(function(line) { // split key / value var parts = line - .split(":") + .split(/:(.*)?/, 2) .map(value => value.trim()) .filter(value => value.length); if (parts.length != 2) { diff --git a/src/popup/interface.js b/src/popup/interface.js index 4d2cc01..d1f1d9e 100644 --- a/src/popup/interface.js +++ b/src/popup/interface.js @@ -355,7 +355,9 @@ function keyHandler(e) { } break; case "KeyG": - this.doAction("launch"); + if (e.ctrlKey) { + this.doAction(e.shiftKey ? "launchInNewTab" : "launch"); + } break; } } diff --git a/src/popup/popup.js b/src/popup/popup.js index 653d3c7..5664c91 100644 --- a/src/popup/popup.js +++ b/src/popup/popup.js @@ -130,6 +130,9 @@ async function withLogin(action) { case "launch": handleError("Launching URL...", "notice"); break; + case "launchInNewTab": + handleError("Launching URL in a new tab...", "notice"); + break; case "copyPassword": handleError("Copying password to clipboard...", "notice"); break; diff --git a/src/popup/searchinterface.js b/src/popup/searchinterface.js index 4cd6412..41a2b48 100644 --- a/src/popup/searchinterface.js +++ b/src/popup/searchinterface.js @@ -105,6 +105,14 @@ function view(ctl, params) { ); } break; + case "KeyG": + if (e.ctrlKey && e.target.selectionStart == e.target.selectionEnd) { + e.preventDefault(); + self.popup.results[0].doAction( + e.shiftKey ? "launchInNewTab" : "launch" + ); + } + break; } } })