mirror of
https://github.com/zen-browser/desktop.git
synced 2025-07-07 20:39:59 +02:00
Started working on workspaces
This commit is contained in:
parent
c76492571b
commit
c63cfebd4f
6 changed files with 81 additions and 50 deletions
19
docs/workspaces.md
Normal file
19
docs/workspaces.md
Normal file
|
@ -0,0 +1,19 @@
|
|||
|
||||
# Workspaces Layout
|
||||
|
||||
```
|
||||
{
|
||||
"workspaces": [
|
||||
{
|
||||
"uuid": "uuid1",
|
||||
"name": "workspace1",
|
||||
"icon": "icon1",
|
||||
"default": true
|
||||
},
|
||||
...
|
||||
]
|
||||
}
|
||||
```
|
||||
To save the tabs and identity them, they will contain a `zen-workspace-uuid` attribute with the workspace uuid.
|
||||
|
||||
We will make use of firefox's builtin session restore feature to save the tabs and windows after the user closes the browser.
|
|
@ -8,5 +8,11 @@ var gZenUIManager = {
|
|||
}
|
||||
let tab = window.gBrowser.addTrustedTab(url, options);
|
||||
window.gBrowser.selectedTab = tab;
|
||||
}
|
||||
},
|
||||
|
||||
generateUuidv4() {
|
||||
return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, c =>
|
||||
(+c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> +c / 4).toString(16)
|
||||
);
|
||||
},
|
||||
};
|
||||
|
|
|
@ -25,20 +25,30 @@ var ZenWorkspaces = {
|
|||
}
|
||||
},
|
||||
|
||||
async saveWorkspace(workspaceData, windowID) {
|
||||
async saveWorkspace(workspaceData) {
|
||||
let json = await IOUtils.readJSON(this._storeFile);
|
||||
json[windowID] = workspaceData;
|
||||
if (!json.workspaces) {
|
||||
json.workspaces = [];
|
||||
}
|
||||
json.workspaces.push(workspaceData);
|
||||
console.log("Saving workspace", workspaceData);
|
||||
await IOUtils.writeJSON(this._storeFile, json);
|
||||
},
|
||||
|
||||
async loadWorkspace(windowID) {
|
||||
let json = await IOUtils.readJSON(this._storeFile);
|
||||
return json[windowID];
|
||||
if (!json.workspaces) {
|
||||
return [];
|
||||
}
|
||||
return json.workspaces.filter(workspace => workspace.uuid === windowID);
|
||||
},
|
||||
|
||||
async removeWorkspace(windowID) {
|
||||
let json = await IOUtils.readJSON(this._storeFile);
|
||||
delete json[windowID];
|
||||
if (!json.workspaces) {
|
||||
return;
|
||||
}
|
||||
json.workspaces = json.workspaces.filter(workspace => workspace.uuid !== windowID);
|
||||
await IOUtils.writeJSON(this._storeFile, json);
|
||||
},
|
||||
|
||||
|
@ -47,27 +57,33 @@ var ZenWorkspaces = {
|
|||
return json;
|
||||
},
|
||||
|
||||
async getWorkspace(windowID) {
|
||||
let json = await IOUtils.readJSON(this._storeFile);
|
||||
return json[windowID];
|
||||
},
|
||||
// Workspaces dialog UI management
|
||||
|
||||
|
||||
|
||||
// Workspaces management
|
||||
|
||||
_createWorkspaceData(windowID) {
|
||||
let window = Services.wm.getOuterWindowWithId(windowID);
|
||||
let tabs = Array.from(window.gBrowser.tabs).map(tab => ({
|
||||
url: tab.linkedBrowser.currentURI.spec,
|
||||
title: tab.label,
|
||||
}));
|
||||
return {
|
||||
tabs,
|
||||
};
|
||||
_prepareNewWorkspace(window) {
|
||||
for (let tab of window.gBrowser.tabs) {
|
||||
tab.addAttribute("zen-workspace-id", window.uuid);
|
||||
}
|
||||
window.document.documentElement.setAttribute("zen-workspace-id", window.uuid);
|
||||
},
|
||||
|
||||
async saveCurrentWorkspace(windowID) {
|
||||
let workspaceData = this._createWorkspaceData(windowID);
|
||||
await this.saveWorkspace(workspaceData, windowID);
|
||||
_createWorkspaceData() {
|
||||
let window = {
|
||||
uuid: gZenUIManager.generateUuidv4(),
|
||||
default: false,
|
||||
icon: "",
|
||||
name: `New Workspace`,
|
||||
};
|
||||
this._prepareNewWorkspace(window);
|
||||
return window;
|
||||
},
|
||||
|
||||
async createAndSaveWorkspace() {
|
||||
let workspaceData = this._createWorkspaceData();
|
||||
await this.saveWorkspace(workspaceData);
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
diff --git a/browser/base/content/appmenu-viewcache.inc.xhtml b/browser/base/content/appmenu-viewcache.inc.xhtml
|
||||
index 07b1765f18236835363fb74c898d3a690659cc9b..7b58cbb5de147ed29fbc48c0093c731fe5cca90b 100644
|
||||
--- a/browser/base/content/appmenu-viewcache.inc.xhtml
|
||||
+++ b/browser/base/content/appmenu-viewcache.inc.xhtml
|
||||
@@ -765,5 +765,6 @@
|
||||
</vbox>
|
||||
</panelview>
|
||||
|
||||
+#include zen-panels-ui.inc.xhtml
|
||||
#include ../../components/reportbrokensite/content/reportBrokenSitePanel.inc.xhtml
|
||||
</html:template>
|
|
@ -1,18 +0,0 @@
|
|||
<panelview id="PanelUI-zen-profiles" position="bottomleft topleft" mainview="true" side="right">
|
||||
<vbox>
|
||||
<html:div id="PanelUI-zen-profiles-header">
|
||||
<html:div id="PanelUI-zen-profiles-user-picture"></html:div>
|
||||
</html:div>
|
||||
<vbox id="PanelUI-zen-profiles-current-info">
|
||||
<label id="PanelUI-zen-profiles-current-name"></label>
|
||||
<p id="PanelUI-zen-profiles-current-profile-current" data-l10n-id="zen-panel-ui-current-profile-text"></p>
|
||||
</vbox>
|
||||
<hbox id="PanelUI-zen-profiles-actions">
|
||||
<toolbarbutton id="PanelUI-zen-profiles-managePrfs" oncommand="switchToTabHavingURI('about:profiles', true);" data-l10n-id="appmenu-manage-profiles" class="subviewbutton"></toolbarbutton>
|
||||
<toolbarbutton id="PanelUI-zen-profiles-privateWin" command="Tools:PrivateBrowsing" data-l10n-id="appmenuitem-new-private-window" class="subviewbutton"></toolbarbutton>
|
||||
<toolbarbutton id="PanelUI-zen-profiles-newProfile" oncommand="ZenProfileDialogUI.createProfileWizard();" data-l10n-id="appmenu-create-profile" class="subviewbutton"></toolbarbutton>
|
||||
</hbox>
|
||||
<vbox id="PanelUI-zen-profiles-list">
|
||||
</vbox>
|
||||
</vbox>
|
||||
</panelview>
|
|
@ -56,3 +56,22 @@
|
|||
</panelmultiview>
|
||||
</panel>
|
||||
</html:template>
|
||||
|
||||
<panelview id="PanelUI-zen-profiles" position="bottomleft topleft" mainview="true" side="right">
|
||||
<vbox>
|
||||
<html:div id="PanelUI-zen-profiles-header">
|
||||
<html:div id="PanelUI-zen-profiles-user-picture"></html:div>
|
||||
</html:div>
|
||||
<vbox id="PanelUI-zen-profiles-current-info">
|
||||
<label id="PanelUI-zen-profiles-current-name"></label>
|
||||
<p id="PanelUI-zen-profiles-current-profile-current" data-l10n-id="zen-panel-ui-current-profile-text"></p>
|
||||
</vbox>
|
||||
<hbox id="PanelUI-zen-profiles-actions">
|
||||
<toolbarbutton id="PanelUI-zen-profiles-managePrfs" oncommand="switchToTabHavingURI('about:profiles', true);" data-l10n-id="appmenu-manage-profiles" class="subviewbutton"></toolbarbutton>
|
||||
<toolbarbutton id="PanelUI-zen-profiles-privateWin" command="Tools:PrivateBrowsing" data-l10n-id="appmenuitem-new-private-window" class="subviewbutton"></toolbarbutton>
|
||||
<toolbarbutton id="PanelUI-zen-profiles-newProfile" oncommand="ZenProfileDialogUI.createProfileWizard();" data-l10n-id="appmenu-create-profile" class="subviewbutton"></toolbarbutton>
|
||||
</hbox>
|
||||
<vbox id="PanelUI-zen-profiles-list">
|
||||
</vbox>
|
||||
</vbox>
|
||||
</panelview>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue