diff --git a/frontend/app.js b/frontend/app.js index 0debb32..da47a57 100644 --- a/frontend/app.js +++ b/frontend/app.js @@ -542,7 +542,7 @@ li.appendChild(metaEl); li.addEventListener("click", () => { this.hide(); - openFile(item.vault, item.path); + TabManager.openPreview(item.vault, item.path); }); this._titlesList.appendChild(li); }); @@ -2642,10 +2642,15 @@ attachTreeItemLongPress(fileItem, () => ({ vault: vaultName, path: item.path, type: "file", isReadonly: false })); fileItem.addEventListener("click", () => { scrollTreeItemIntoView(fileItem, false); - openFile(vaultName, item.path); + TabManager.openPreview(vaultName, item.path); closeMobileSidebar(); }); + fileItem.addEventListener("dblclick", (e) => { + e.preventDefault(); + TabManager.openPersistent(vaultName, item.path); + }); + fileItem.addEventListener("contextmenu", (e) => { e.preventDefault(); const isReadonly = false; @@ -2797,7 +2802,7 @@ if (entry.type === "directory") { await focusPathInSidebar(entry.vault, entry.path, { alignToTop: true, expandTarget: true }); } else { - await openFile(entry.vault, entry.path); + await TabManager.openPreview(entry.vault, entry.path); await focusPathInSidebar(entry.vault, getParentDirectoryPath(entry.path), { alignToTop: true, expandTarget: true }); syncActiveFileTreeItem(entry.vault, entry.path); } @@ -5657,26 +5662,16 @@ `; - // Wire dashboard tab switching - document.querySelectorAll(".dashboard-tab").forEach(tab => { - tab.addEventListener("click", function() { - document.querySelectorAll(".dashboard-tab").forEach(t => t.classList.remove("active")); - document.querySelectorAll(".dashboard-panel").forEach(p => p.classList.remove("active")); - this.classList.add("active"); - const panel = document.getElementById("dashboard-panel-" + this.dataset.tab); - if (panel) panel.classList.add("active"); - }); - }); - - // Re-initialize widgets + // Re-initialize widgets and dashboard tabs if (typeof DashboardRecentWidget !== "undefined") { DashboardRecentWidget.init(); } + initDashboardTabs(); safeCreateIcons(); } else if (home) { - // Dashboard already exists, just show it + // Dashboard already exists, show it with default tab home.style.display = ""; - // Activate default tab + // Reset tabs to default document.querySelectorAll(".dashboard-tab").forEach(t => t.classList.remove("active")); document.querySelectorAll(".dashboard-panel").forEach(p => p.classList.remove("active")); const defaultTab = document.querySelector('.dashboard-tab[data-tab="stats"]'); @@ -7506,8 +7501,25 @@ document.addEventListener("DOMContentLoaded", () => { init(); registerServiceWorker(); + initDashboardTabs(); }); + // ── Dashboard tab switching (runs on page load and after rebuild) ── + function initDashboardTabs() { + document.querySelectorAll(".dashboard-tab").forEach(tab => { + // Remove existing listeners by cloning + const newTab = tab.cloneNode(true); + tab.parentNode.replaceChild(newTab, tab); + newTab.addEventListener("click", function() { + document.querySelectorAll(".dashboard-tab").forEach(t => t.classList.remove("active")); + document.querySelectorAll(".dashboard-panel").forEach(p => p.classList.remove("active")); + this.classList.add("active"); + const panel = document.getElementById("dashboard-panel-" + this.dataset.tab); + if (panel) panel.classList.add("active"); + }); + }); + } + // --------------------------------------------------------------------------- // Tab Manager — Multi-file tab support // --------------------------------------------------------------------------- diff --git a/frontend/index.html b/frontend/index.html index eeba77f..4f9bcdf 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -4,7 +4,7 @@ ObsiGate - + @@ -12,18 +12,18 @@ - + - + - + - + @@ -36,7 +36,7 @@ } } - + @@ -358,27 +358,29 @@
- -
-
-
- -

Statistiques

-
-
+ +
+ + + +
+ + +
Chargement...
+
- -
-
-
- -

Bookmarks

-
-
+ +
@@ -387,47 +389,23 @@
-
-
- - -