CI / lint (push) Failing after 9s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Successful in 13s
Desktop Build / build-windows (push) Has been cancelled
Desktop Build / build-linux (push) Has been cancelled
- index.html: <div class="version-badge"> dans header-right - app.js: fetch /api/health → affiche version dans le badge - style.css: .version-badge discret (10px, mono, muted) - Tag: v2.0.0-dev créé → git describe retourne v2.0.0-dev
119 lines
3.8 KiB
JavaScript
119 lines
3.8 KiB
JavaScript
/* ObsiGate — Module orchestrator (ES modules).
|
|
Replaces the monolithic frontend/app.js IIFE.
|
|
All code lives in frontend/js/*.js modules. */
|
|
|
|
import * as UI from './ui.js';
|
|
import * as Utils from './utils.js';
|
|
import { initI18n, t } from './i18n.js';
|
|
|
|
// Wire up AI toolbar toast (avoids circular import in utils.js)
|
|
window._obsigateShowToast = UI.showToast;
|
|
import * as Sidebar from './sidebar.js';
|
|
import * as Auth from './auth.js';
|
|
import * as Viewer from './viewer.js';
|
|
import * as Sync from './sync.js';
|
|
import { initGraphView } from './graph.js';
|
|
import * as Legacy from './legacy.js';
|
|
import { initCommandPalette } from './palette.js';
|
|
import { initMobileToolbar } from './mobile-toolbar.js';
|
|
import { initDragDrop } from './dragdrop.js';
|
|
import { initMermaid, setupFocusMode } from './mermaid-viewer.js';
|
|
import PaneManager from './pane-manager.js';
|
|
|
|
// =========================================================================
|
|
// Initialization — mirrors the original app.js init() ordering
|
|
// =========================================================================
|
|
async function init() {
|
|
// 1. Init i18n FIRST — loads fallback (FR) + selected locale
|
|
// Server language check may fail (no auth yet), falls to localStorage
|
|
// LocalStorage has correct language if user set it previously
|
|
await initI18n();
|
|
|
|
// 2. Init auth — now t() works inside showApp()/renderUserMenu()
|
|
const authOk = await Auth.AuthManager.initAuth();
|
|
|
|
UI.initTheme();
|
|
UI.initHeaderMenu();
|
|
UI.initCustomDropdowns();
|
|
|
|
document.getElementById("theme-toggle").addEventListener("click", UI.toggleTheme);
|
|
document.getElementById("header-logo").addEventListener("click", Legacy.goHome);
|
|
const refreshBtn = document.getElementById("header-refresh-btn");
|
|
if (refreshBtn) refreshBtn.addEventListener("click", Legacy.goHome);
|
|
|
|
Legacy.initSearch();
|
|
UI.initSidebarToggle();
|
|
UI.initMobile();
|
|
Sidebar.initVaultContext();
|
|
Legacy.initSidebarTabs();
|
|
Legacy.initHelpModal();
|
|
Legacy.initConfigModal();
|
|
Legacy.initAboutModal();
|
|
Sidebar.initSidebarFilter();
|
|
UI.initSidebarResize();
|
|
Utils.initEditor();
|
|
Auth.initLoginForm();
|
|
Legacy.initRecentTab();
|
|
|
|
UI.RightSidebarManager.init();
|
|
UI.FindInPageManager.init();
|
|
UI.ContextMenuManager.init();
|
|
UI.TabManager.init();
|
|
PaneManager.init();
|
|
initCommandPalette();
|
|
initMobileToolbar();
|
|
|
|
if (authOk) {
|
|
Legacy.initSyncStatus();
|
|
|
|
try {
|
|
await Promise.all([Legacy.loadVaultSettings(), Sidebar.loadVaults(), Sidebar.loadTags()]);
|
|
|
|
initDragDrop();
|
|
|
|
Legacy.DashboardRecentWidget.init();
|
|
|
|
const urlParams = new URLSearchParams(window.location.search);
|
|
if (urlParams.get("popup") === "true") {
|
|
document.body.classList.add("popup-mode");
|
|
}
|
|
|
|
if (window.location.hash && window.location.hash.startsWith("#file=")) {
|
|
const hashVal = window.location.hash.substring(6);
|
|
const sepIndex = hashVal.indexOf(":");
|
|
if (sepIndex > -1) {
|
|
const vault = decodeURIComponent(hashVal.substring(0, sepIndex));
|
|
const path = decodeURIComponent(hashVal.substring(sepIndex + 1));
|
|
Viewer.openFile(vault, path);
|
|
}
|
|
} else if (urlParams.get("popup") !== "true") {
|
|
Legacy.showWelcome();
|
|
}
|
|
} catch (err) {
|
|
console.error("Failed to initialize ObsiGate:", err);
|
|
UI.showToast(t("error.initialization"), "error");
|
|
}
|
|
}
|
|
|
|
initGraphView();
|
|
initMermaid();
|
|
setupFocusMode();
|
|
Utils.safeCreateIcons();
|
|
}
|
|
|
|
document.addEventListener("DOMContentLoaded", () => {
|
|
init();
|
|
Sync.init();
|
|
// Show version in header
|
|
fetch('/api/health')
|
|
.then(r => r.json())
|
|
.then(d => {
|
|
const badge = document.getElementById('version-badge');
|
|
if (badge && d.version) {
|
|
badge.textContent = d.version;
|
|
badge.style.display = 'inline-block';
|
|
}
|
|
})
|
|
.catch(() => {});
|
|
});
|