add support for native popup windows

This commit is contained in:
siikamiika 2020-01-25 17:54:07 +02:00
parent d5708de4ee
commit ddc7c71e4f
2 changed files with 41 additions and 17 deletions

View File

@ -33,6 +33,7 @@ class Backend {
this.isPreparedPromise = new Promise((resolve) => (this.isPreparedResolve = resolve)); this.isPreparedPromise = new Promise((resolve) => (this.isPreparedResolve = resolve));
this.clipboardPasteTarget = document.querySelector('#clipboard-paste-target'); this.clipboardPasteTarget = document.querySelector('#clipboard-paste-target');
this.popupWindow = null;
this.apiForwarder = new BackendApiForwarder(); this.apiForwarder = new BackendApiForwarder();
} }
@ -565,23 +566,46 @@ class Backend {
// Command handlers // Command handlers
async _onCommandSearch(params) { async _onCommandSearch(params) {
const url = chrome.runtime.getURL('/bg/search.html'); const {mode, query} = params || {};
if (!(params && params.newTab)) {
try { const optionsContext = {depth: 0};
const tab = await Backend._findTab(1000, (url2) => ( const options = await this.getOptions(optionsContext);
url2 !== null && const {popupWidth, popupHeight} = options.general;
url2.startsWith(url) &&
(url2.length === url.length || url2[url.length] === '?' || url2[url.length] === '#') const baseUrl = chrome.runtime.getURL('/bg/search.html');
)); const queryString = (query && query.length > 0) ? `?query=${encodeURIComponent(query)}` : '';
if (tab !== null) { const url = baseUrl + queryString;
await Backend._focusTab(tab);
return; switch (mode) {
case 'sameTab':
try {
const tab = await Backend._findTab(1000, (url2) => (
url2 !== null &&
url2.startsWith(url) &&
(url2.length === url.length || url2[url.length] === '?' || url2[url.length] === '#')
));
if (tab !== null) {
await Backend._focusTab(tab);
return;
}
} catch (e) {
// NOP
} }
} catch (e) { chrome.tabs.create({url});
// NOP return;
} case 'newTab':
chrome.tabs.create({url});
return;
case 'popup':
if (this.popupWindow !== null) {
chrome.windows.remove(this.popupWindow.id);
}
chrome.windows.create(
{url, width: popupWidth, height: popupHeight, type: 'popup'},
(popupWindow) => { this.popupWindow = popupWindow; }
);
return;
} }
chrome.tabs.create({url});
} }
_onCommandHelp() { _onCommandHelp() {

View File

@ -30,12 +30,12 @@ function setupButtonEvents(selector, command, url) {
for (const node of nodes) { for (const node of nodes) {
node.addEventListener('click', (e) => { node.addEventListener('click', (e) => {
if (e.button !== 0) { return; } if (e.button !== 0) { return; }
apiCommandExec(command, {newTab: e.ctrlKey}); apiCommandExec(command, {mode: e.ctrlKey ? 'newTab' : 'sameTab'});
e.preventDefault(); e.preventDefault();
}, false); }, false);
node.addEventListener('auxclick', (e) => { node.addEventListener('auxclick', (e) => {
if (e.button !== 1) { return; } if (e.button !== 1) { return; }
apiCommandExec(command, {newTab: true}); apiCommandExec(command, {mode: 'newTab'});
e.preventDefault(); e.preventDefault();
}, false); }, false);