mirror of
https://github.com/zen-browser/desktop.git
synced 2026-02-08 04:47:13 +00:00
worked on split views
This commit is contained in:
@@ -1,18 +1,22 @@
|
||||
|
||||
var gZenViewSplitter = {
|
||||
/**
|
||||
* [
|
||||
* [
|
||||
* tab1,
|
||||
* tab2,
|
||||
* tab3,
|
||||
* ]
|
||||
* [
|
||||
* {
|
||||
* view: <element>,
|
||||
* tabs: [
|
||||
* tab1,
|
||||
* tab2,
|
||||
* tab3,
|
||||
* ]
|
||||
* }
|
||||
* ]
|
||||
*/
|
||||
_data: [],
|
||||
currentView: -1,
|
||||
|
||||
init() {
|
||||
return; // TODO: Fix this please
|
||||
return;
|
||||
window.addEventListener("TabClose", this);
|
||||
window.addEventListener("TabChange", this);
|
||||
},
|
||||
@@ -28,15 +32,22 @@ var gZenViewSplitter = {
|
||||
}
|
||||
},
|
||||
|
||||
get tabBrowserPanel() {
|
||||
if (!this._tabBrowserPanel) {
|
||||
this._tabBrowserPanel = document.getElementById("tabbrowser-tabpanels");
|
||||
}
|
||||
return this._tabBrowserPanel;
|
||||
},
|
||||
|
||||
onTabClose(event) {
|
||||
const tab = event.target;
|
||||
let index = -2;
|
||||
while (index !== -1) {
|
||||
index = this._data.findIndex((group) => group.includes(tabId));
|
||||
index = this._data.findIndex((group) => group.tabs.includes(tab));
|
||||
if (index !== -1) {
|
||||
this._data[index].splice(this._data[index].indexOf(tabId), 1);
|
||||
if (this._data[index].length < 2) {
|
||||
this._data.splice(index, 1);
|
||||
this._data[index].tabs.splice(this._data[index].tabs.indexOf(tab), 1);
|
||||
if (this._data[index].tabs.length < 2) {
|
||||
this._data.tabs.splice(index, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -52,23 +63,53 @@ var gZenViewSplitter = {
|
||||
if (tabs.length < 2) {
|
||||
return;
|
||||
}
|
||||
this._data.push(tabs);
|
||||
let gridElement = document.createElement("div");
|
||||
gridElement.classList.add("zen-deck");
|
||||
tabs.forEach((tab) => {
|
||||
let container = tab.linkedBrowser.closest(".browserContainer");
|
||||
gridElement.appendChild(container);
|
||||
});
|
||||
this.tabBrowserPanel.appendChild(gridElement);
|
||||
this._data.push({
|
||||
tabs,
|
||||
element: gridElement,
|
||||
});
|
||||
this._showSplitView(tabs[0]);
|
||||
},
|
||||
|
||||
_showSplitView(tab) {
|
||||
const splitData = this._data.find((group) => group.includes(tab));
|
||||
if (this.currentView !== -1) {
|
||||
this._data[this.currentView].element.classList.remove("deck-selected");
|
||||
for (const tab of this._data[this.currentView].tabs) {
|
||||
tab._zenSplitted = false;
|
||||
let container = tab.linkedBrowser.closest(".browserSidebarContainer");
|
||||
console.assert(container, "No container found for tab");
|
||||
container.classList.remove("deck-selected");
|
||||
container.removeAttribute("zen-split");
|
||||
}
|
||||
}
|
||||
const splitData = this._data.find((group) => group.tabs.includes(tab));
|
||||
console.log(splitData)
|
||||
if (!splitData) {
|
||||
return;
|
||||
}
|
||||
for (const tab of splitData) {
|
||||
this.currentView = this._data.indexOf(splitData);
|
||||
splitData.element.classList.add("deck-selected");
|
||||
for (const tab of splitData.tabs) {
|
||||
tab._zenSplitted = true;
|
||||
let container = tab.linkedBrowser.closest(".browserSidebarContainer");
|
||||
console.assert(container, "No container found for tab");
|
||||
container.classList.add("deck-selected");
|
||||
container.setAttribute("zen-split", "true");
|
||||
}
|
||||
if (splitData.tabs.length < 2) {
|
||||
let tab = splitData.tabs[0];
|
||||
tab._zenSplitted = false;
|
||||
let container = tab.linkedBrowser.closest(".browserSidebarContainer");
|
||||
console.assert(container, "No container found for tab");
|
||||
this.tabBrowserPanel.appendChild(container);
|
||||
splitData.element.remove();
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
|
||||
@import url("zen-panel-ui.css");
|
||||
@import url("zen-icons/icons.css");
|
||||
@import url("zen-decks.css");
|
||||
|
||||
:root {
|
||||
--toolbarbutton-border-radius: 6px !important;
|
||||
|
||||
14
src/browser/themes/shared/zen-decks.css
Normal file
14
src/browser/themes/shared/zen-decks.css
Normal file
@@ -0,0 +1,14 @@
|
||||
|
||||
/** Zen Decks - ONLY USED FOR SPLIT VIEWS, DO NOT USE THIS CLASS FOR ANY OTHER PURPOSE **/
|
||||
|
||||
.zen-deck {
|
||||
display: grid;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.zen-deck:not(.deck-selected) {
|
||||
z-index: -1;
|
||||
visibility: hidden;
|
||||
}
|
||||
@@ -3,5 +3,6 @@
|
||||
skin/classic/browser/zen-panel-ui.css (../shared/zen-panel-ui.css)
|
||||
skin/classic/browser/zen-sidebar-panels.css (../shared/zen-sidebar-panels.css)
|
||||
skin/classic/browser/preferences/zen-preferences.css (../shared/preferences/zen-preferences.css)
|
||||
skin/classic/browser/zen-decks.css (../shared/zen-decks.css)
|
||||
|
||||
#include zen-icons/jar.inc.mn
|
||||
Reference in New Issue
Block a user