From 84fea3ba354b448b868c2694e510c033eba03b55 Mon Sep 17 00:00:00 2001 From: Nils Maier Date: Thu, 12 Sep 2019 14:43:22 +0200 Subject: [PATCH] Allow to open Manager in a popup Closes #47 --- _locales/en/messages.json | 4 ++++ data/prefs.json | 1 + lib/windowutils.ts | 29 ++++++++++++++++++++++++++--- windows/prefs.html | 1 + windows/prefs.ts | 1 + 5 files changed, 33 insertions(+), 3 deletions(-) diff --git a/_locales/en/messages.json b/_locales/en/messages.json index c7d1503..22b80b3 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -585,6 +585,10 @@ "description": "Preferences/General; group text", "message": "Manager" }, + "pref_manager_in_popup": { + "description": "checkbox text", + "message": "Open manager in a new popup window" + }, "pref_manager_tooltip": { "description": "Preferences/General", "message": "Show tooltips in Manager tabs" diff --git a/data/prefs.json b/data/prefs.json index 4fa81fd..bebe9e0 100644 --- a/data/prefs.json +++ b/data/prefs.json @@ -1,5 +1,6 @@ { "button-type": "popup", + "manager-in-popup": false, "concurrent": 4, "queue-notification": true, "finish-notification": true, diff --git a/lib/windowutils.ts b/lib/windowutils.ts index 3237159..e43ed8f 100644 --- a/lib/windowutils.ts +++ b/lib/windowutils.ts @@ -2,8 +2,9 @@ // License: MIT import { windows, tabs, runtime } from "../lib/browser"; -import {getManager} from "./manager/man"; +import { getManager } from "./manager/man"; import DEFAULT_ICONS from "../data/icons.json"; +import { Prefs } from "./prefs"; const DONATE_URL = "https://www.downthemall.org/howto/donate/"; const MANAGER_URL = "/windows/manager.html"; @@ -93,11 +94,33 @@ export async function openManager(focus = true) { catch (ex) { console.error(ex.toString(), ex); } + const url = runtime.getURL(MANAGER_URL); + const openInPopup = await Prefs.get("manager-in-popup"); + if (openInPopup) { + const etabs = await tabs.query({ + url + }); + if (etabs.length) { + if (!focus) { + return; + } + const tab = etabs.pop(); + await tabs.update(tab.id, {active: true}); + await windows.update(tab.windowId, {focused: true}); + return; + } + const windowOptions = { + url, + type: "popup", + }; + await windows.create(windowOptions); + return; + } if (focus) { - await openInTabOrFocus(await runtime.getURL(MANAGER_URL), false); + await openInTabOrFocus(runtime.getURL(MANAGER_URL), false); } else { - await maybeOpenInTab(await runtime.getURL(MANAGER_URL), false); + await maybeOpenInTab(runtime.getURL(MANAGER_URL), false); } } diff --git a/windows/prefs.html b/windows/prefs.html index db1228b..5cddaa0 100644 --- a/windows/prefs.html +++ b/windows/prefs.html @@ -51,6 +51,7 @@
+ diff --git a/windows/prefs.ts b/windows/prefs.ts index f9eca55..7958c65 100644 --- a/windows/prefs.ts +++ b/windows/prefs.ts @@ -554,6 +554,7 @@ addEventListener("DOMContentLoaded", async () => { await localize(document.documentElement); // General + new BoolPref("pref-manager-in-popup", "manager-in-popup"); new BoolPref("pref-queue-notification", "queue-notification"); new BoolPref("pref-finish-notification", "finish-notification"); new BoolPref("pref-sounds", "sounds");