116 lines
4.4 KiB
TypeScript
116 lines
4.4 KiB
TypeScript
// file: kb_app/frontend/ts/main.ts
|
||
|
||
import * as bootstrap from "bootstrap";
|
||
import "simplebar";
|
||
import ResizeObserver from "resize-observer-polyfill";
|
||
import { invoke } from "@tauri-apps/api/core";
|
||
import { debug, takeoverConsole } from "@fltsci/tauri-plugin-tracing";
|
||
|
||
(window as Window & typeof globalThis & { bootstrap?: typeof bootstrap }).bootstrap = bootstrap;
|
||
(window as Window & typeof globalThis & { ResizeObserver?: typeof ResizeObserver }).ResizeObserver = ResizeObserver;
|
||
|
||
async function openDemoWsWindow(): Promise<void> {
|
||
try {
|
||
await invoke("open_demo_ws_window");
|
||
} catch (error) {
|
||
console.error("open_demo_ws_window failed:", error);
|
||
}
|
||
}
|
||
async function openDemoHttpWindow(): Promise<void> {
|
||
try {
|
||
await invoke("open_demo_http_window");
|
||
} catch (error) {
|
||
console.error("open_demo_http_window failed:", error);
|
||
}
|
||
}
|
||
|
||
async function openDemoWsManagerWindow(): Promise<void> {
|
||
try {
|
||
await invoke("open_demo_ws_manager_window");
|
||
} catch (error) {
|
||
console.error("open_demo_ws_manager_window failed:", error);
|
||
}
|
||
}
|
||
document.addEventListener("DOMContentLoaded", async () => {
|
||
void takeoverConsole();
|
||
const sidebarToggle = document.querySelector<HTMLButtonElement>('#sidebarToggle');
|
||
if (sidebarToggle) {
|
||
// restaurer l’état depuis localStorage
|
||
if (localStorage.getItem('sidebar-toggle') === 'true') {
|
||
document.body.classList.add('sidenav-toggled');
|
||
}
|
||
|
||
sidebarToggle.addEventListener('click', (event) => {
|
||
event.preventDefault();
|
||
document.body.classList.toggle('sidenav-toggled');
|
||
localStorage.setItem('sidebar-toggle', document.body.classList.contains('sidenav-toggled') ? 'true' : 'false');
|
||
});
|
||
}
|
||
|
||
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]');
|
||
Array.from(tooltipTriggerList).map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl));
|
||
const toastElList = document.querySelectorAll('.toast');
|
||
Array.from(toastElList).map(toastEl => new bootstrap.Toast(toastEl));
|
||
const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]');
|
||
Array.from(popoverTriggerList).map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl));
|
||
|
||
const gobackto = location.pathname + location.search;
|
||
|
||
document.querySelectorAll<HTMLAnchorElement>('a[data-setlang]').forEach((a) => {
|
||
const href = a.getAttribute("href");
|
||
if (!href) return; // pas de href => on ignore
|
||
|
||
const url = new URL(href, location.origin);
|
||
url.searchParams.set("gobackto", gobackto);
|
||
|
||
// conserve une URL relative (path + query)
|
||
a.setAttribute("href", url.pathname + "?" + url.searchParams.toString());
|
||
});
|
||
|
||
const openDemoWsButton = document.querySelector<HTMLButtonElement>("#openDemoWsButton");
|
||
const openDemoWsButtonSecondary = document.querySelector<HTMLButtonElement>("#openDemoWsButtonSecondary");
|
||
|
||
const openDemoHttpButton = document.querySelector<HTMLButtonElement>("#openDemoHttpButton");
|
||
const openDemoHttpButtonSecondary = document.querySelector<HTMLButtonElement>("#openDemoHttpButtonSecondary");
|
||
const openDemoWsManagerButton = document.querySelector<HTMLButtonElement>("#openDemoWsManagerButton");
|
||
const openDemoWsManagerButtonSecondary = document.querySelector<HTMLButtonElement>("#openDemoWsManagerButtonSecondary");
|
||
|
||
if (openDemoWsButton) {
|
||
openDemoWsButton.addEventListener("click", () => {
|
||
void openDemoWsWindow();
|
||
});
|
||
}
|
||
|
||
if (openDemoWsButtonSecondary) {
|
||
openDemoWsButtonSecondary.addEventListener("click", () => {
|
||
void openDemoWsWindow();
|
||
});
|
||
}
|
||
|
||
if (openDemoHttpButton) {
|
||
openDemoHttpButton.addEventListener("click", () => {
|
||
void openDemoHttpWindow();
|
||
});
|
||
}
|
||
|
||
if (openDemoHttpButtonSecondary) {
|
||
openDemoHttpButtonSecondary.addEventListener("click", () => {
|
||
void openDemoHttpWindow();
|
||
});
|
||
}
|
||
|
||
if (openDemoWsManagerButton) {
|
||
openDemoWsManagerButton.addEventListener("click", () => {
|
||
void openDemoWsManagerWindow();
|
||
});
|
||
}
|
||
|
||
if (openDemoWsManagerButtonSecondary) {
|
||
openDemoWsManagerButtonSecondary.addEventListener("click", () => {
|
||
void openDemoWsManagerWindow();
|
||
});
|
||
}
|
||
|
||
debug("window loaded");
|
||
|
||
}); |