Added sidebar panels!

This commit is contained in:
Mauro Balades
2024-04-27 00:01:46 +02:00
parent 3c52bbbba6
commit a0b69db350
5 changed files with 117 additions and 21 deletions

View File

@@ -1,12 +1,22 @@
var ZenSidebarManager = {
export var gZenBrowserManagerSidebar = {
_sidebarElement: null,
_currentPanel: null,
DEFAULT_MOBILE_USER_AGENT: "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36 Edg/114.0.1823.79",
init() {
this.update();
},
get sidebarData() {
let services = Services.prefs.getStringPref("zen.sidebar.data");
if (services === "") {
return {};
}
return JSON.parse(services);
},
update() {
this._updateWebPanels();
},
@@ -19,11 +29,7 @@ var ZenSidebarManager = {
return;
}
let services = Services.prefs.getStringPref("zen.sidebar.data");
if (services === "") {
return;
}
let data = JSON.parse(services);
let data = this.sidebarData;
if (!data.data || !data.index) {
return;
}
@@ -51,6 +57,8 @@ var ZenSidebarManager = {
_closeSidebarPanel() {
let sidebar = document.getElementById("zen-sidebar-web-panel");
sidebar.setAttribute("hidden", "true");
this._currentPanel = null;
this._updateButtons();
},
_handleClick(event) {
@@ -74,31 +82,100 @@ var ZenSidebarManager = {
}
},
_hideAllWebPanels() {
let sidebar = this._openAndGetWebPanelWrapper();
for (let browser of sidebar.querySelectorAll("browser[zen-sidebar-id]")) {
browser.setAttribute("hidden", "true");
}
},
_updateWebPanel() {
let sidebar = this._openAndGetWebPanelWrapper();
this._hideAllWebPanels();
let existantWebview = sidebar.querySelector(`browser[zen-sidebar-id="${this._currentPanel}"]`);
if (existantWebview) {
existantWebview.removeAttribute("hidden");
return;
}
let data = this._getWebPanelData(this._currentPanel);
let browser = this._createWebPanelBrowser(data);
let browserContainers = document.getElementById("zen-sidebar-web-panel-browser-containers");
browserContainers.appendChild(browser.linkedBrowser);
if (data.ua) {
browser.linkedBrowser.browsingContext.customUserAgent = this.DEFAULT_MOBILE_USER_AGENT;
}
},
_getWebPanelData(id) {
let data = this.sidebarData;
let panel = data.data[id];
if (!panel || !panel.url) {
return {};
}
return {
id: id,
...panel,
};
},
_createWebPanelBrowser(data) {
let tab = gBrowser.addTab(data.url, {
triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
});
tab.linkedBrowser.setAttribute("disablefullscreen", "true");
tab.linkedBrowser.setAttribute("src", data.url);
tab.linkedBrowser.setAttribute("zen-sidebar-id", data.id);
tab.linkedBrowser.setAttribute("type", "content");
tab.linkedBrowser.setAttribute("flex", "1");
tab.linkedBrowser.setAttribute("disableglobalhistory", "true");
tab.linkedBrowser.setAttribute("autoscroll", "false");
tab.linkedBrowser.setAttribute("remote", "true");
tab.linkedBrowser.setAttribute("autocompletepopup", "PopupAutoComplete");
tab.linkedBrowser.setAttribute("messagemanagergroup", "browsers");
tab.linkedBrowser.setAttribute("message", "true");
tab.setAttribute("hidden", "true");
return tab;
},
_getWebPanelIcon(url) {
return `url(page-icon:${url})`;
},
reload() {
_getCurrentBrowser() {
let sidebar = document.getElementById("zen-sidebar-web-panel");
return sidebar.querySelector(`browser[zen-sidebar-id="${this._currentPanel}"]`);
},
reload() {
let browser = this._getCurrentBrowser();
if (browser) {
browser.reload();
}
},
forward() {
let browser = this._getCurrentBrowser();
if (browser) {
browser.goForward();
}
},
back() {
let browser = this._getCurrentBrowser();
if (browser) {
browser.goBack();
}
},
home() {
let browser = this._getCurrentBrowser();
if (browser) {
browser.gotoIndex();
}
},
close() {
this._hideAllWebPanels();
this._closeSidebarPanel();
},
@@ -110,4 +187,4 @@ var ZenSidebarManager = {
},
};
ZenSidebarManager.init();
gZenBrowserManagerSidebar.init();