318 lines
10 KiB
JavaScript
Executable File
318 lines
10 KiB
JavaScript
Executable File
// Linux BenchTools - Settings Logic
|
|
|
|
const { copyToClipboard, showToast, escapeHtml } = window.BenchUtils;
|
|
|
|
let tokenVisible = false;
|
|
let API_TOKEN = 'LOADING...';
|
|
|
|
// Load backend config (API token, etc.)
|
|
async function loadBackendConfig() {
|
|
try {
|
|
const backendApiUrl = window.BenchConfig?.backendApiUrl || `${window.location.protocol}//${window.location.hostname}:8007/api`;
|
|
const response = await fetch(`${backendApiUrl}/config`);
|
|
if (response.ok) {
|
|
const config = await response.json();
|
|
API_TOKEN = config.api_token;
|
|
document.getElementById('apiToken').value = API_TOKEN;
|
|
generateBenchCommand();
|
|
}
|
|
} catch (error) {
|
|
console.error('Failed to load backend config:', error);
|
|
API_TOKEN = 'ERROR_LOADING_TOKEN';
|
|
}
|
|
}
|
|
|
|
// Initialize settings page
|
|
document.addEventListener('DOMContentLoaded', async () => {
|
|
loadDisplayPreferences();
|
|
loadSettings();
|
|
loadTheme();
|
|
loadIconPack();
|
|
await loadBackendConfig();
|
|
});
|
|
|
|
// Load display preferences
|
|
function loadDisplayPreferences() {
|
|
const memoryUnit = localStorage.getItem('displayPref_memoryUnit') || 'GB';
|
|
const storageUnit = localStorage.getItem('displayPref_storageUnit') || 'GB';
|
|
const cacheUnit = localStorage.getItem('displayPref_cacheUnit') || 'KB';
|
|
const temperatureUnit = localStorage.getItem('displayPref_temperatureUnit') || 'C';
|
|
const sectionIconSize = localStorage.getItem('displayPref_sectionIconSize') || '32';
|
|
const buttonIconSize = localStorage.getItem('displayPref_buttonIconSize') || '24';
|
|
const searchEngine = localStorage.getItem('searchEngine') || 'google';
|
|
|
|
document.getElementById('memoryUnit').value = memoryUnit;
|
|
document.getElementById('storageUnit').value = storageUnit;
|
|
document.getElementById('cacheUnit').value = cacheUnit;
|
|
document.getElementById('temperatureUnit').value = temperatureUnit;
|
|
document.getElementById('sectionIconSize').value = sectionIconSize;
|
|
document.getElementById('buttonIconSize').value = buttonIconSize;
|
|
document.getElementById('searchEngine').value = searchEngine;
|
|
|
|
// Apply icon sizes
|
|
applyIconSizes(sectionIconSize, buttonIconSize);
|
|
}
|
|
|
|
// Apply icon sizes dynamically
|
|
function applyIconSizes(sectionIconSize, buttonIconSize) {
|
|
document.documentElement.style.setProperty('--section-icon-size', `${sectionIconSize}px`);
|
|
document.documentElement.style.setProperty('--button-icon-size', `${buttonIconSize}px`);
|
|
}
|
|
|
|
// Save display preferences
|
|
function saveDisplayPreferences() {
|
|
const memoryUnit = document.getElementById('memoryUnit').value;
|
|
const storageUnit = document.getElementById('storageUnit').value;
|
|
const cacheUnit = document.getElementById('cacheUnit').value;
|
|
const temperatureUnit = document.getElementById('temperatureUnit').value;
|
|
const sectionIconSize = document.getElementById('sectionIconSize').value;
|
|
const buttonIconSize = document.getElementById('buttonIconSize').value;
|
|
const searchEngine = document.getElementById('searchEngine').value;
|
|
|
|
localStorage.setItem('displayPref_memoryUnit', memoryUnit);
|
|
localStorage.setItem('displayPref_storageUnit', storageUnit);
|
|
localStorage.setItem('displayPref_cacheUnit', cacheUnit);
|
|
localStorage.setItem('displayPref_temperatureUnit', temperatureUnit);
|
|
localStorage.setItem('displayPref_sectionIconSize', sectionIconSize);
|
|
localStorage.setItem('displayPref_buttonIconSize', buttonIconSize);
|
|
localStorage.setItem('searchEngine', searchEngine);
|
|
|
|
// Apply icon sizes immediately
|
|
applyIconSizes(sectionIconSize, buttonIconSize);
|
|
|
|
showToast('Préférences enregistrées ! Rechargez la page pour voir les changements.', 'success');
|
|
}
|
|
|
|
// Reset display preferences to defaults
|
|
function resetDisplayPreferences() {
|
|
localStorage.removeItem('displayPref_memoryUnit');
|
|
localStorage.removeItem('displayPref_storageUnit');
|
|
localStorage.removeItem('displayPref_cacheUnit');
|
|
localStorage.removeItem('displayPref_temperatureUnit');
|
|
localStorage.removeItem('displayPref_sectionIconSize');
|
|
localStorage.removeItem('displayPref_buttonIconSize');
|
|
|
|
// Reset form to defaults
|
|
document.getElementById('memoryUnit').value = 'GB';
|
|
document.getElementById('storageUnit').value = 'GB';
|
|
document.getElementById('cacheUnit').value = 'KB';
|
|
document.getElementById('temperatureUnit').value = 'C';
|
|
document.getElementById('sectionIconSize').value = '32';
|
|
document.getElementById('buttonIconSize').value = '24';
|
|
|
|
// Apply default icon sizes
|
|
applyIconSizes('32', '24');
|
|
|
|
showToast('Préférences réinitialisées aux valeurs par défaut', 'success');
|
|
}
|
|
|
|
// Load settings
|
|
function loadSettings() {
|
|
// In a real scenario, these would be fetched from backend or localStorage
|
|
const savedBackendUrl = localStorage.getItem('backendUrl') || getDefaultBackendUrl();
|
|
const savedIperfServer = localStorage.getItem('iperfServer') || '';
|
|
const savedBenchMode = localStorage.getItem('benchMode') || '';
|
|
|
|
document.getElementById('backendUrl').value = savedBackendUrl;
|
|
document.getElementById('iperfServer').value = savedIperfServer;
|
|
document.getElementById('benchMode').value = savedBenchMode;
|
|
|
|
// API token will be loaded asynchronously from backend
|
|
|
|
// Add event listeners for auto-generation
|
|
document.getElementById('backendUrl').addEventListener('input', () => {
|
|
saveAndRegenerate();
|
|
});
|
|
|
|
document.getElementById('iperfServer').addEventListener('input', () => {
|
|
saveAndRegenerate();
|
|
});
|
|
|
|
document.getElementById('benchMode').addEventListener('change', () => {
|
|
saveAndRegenerate();
|
|
});
|
|
}
|
|
|
|
// Get default backend URL
|
|
function getDefaultBackendUrl() {
|
|
const protocol = window.location.protocol;
|
|
const hostname = window.location.hostname;
|
|
return `${protocol}//${hostname}:8007`;
|
|
}
|
|
|
|
// Save settings and regenerate command
|
|
function saveAndRegenerate() {
|
|
const backendUrl = document.getElementById('backendUrl').value.trim();
|
|
const iperfServer = document.getElementById('iperfServer').value.trim();
|
|
const benchMode = document.getElementById('benchMode').value;
|
|
|
|
localStorage.setItem('backendUrl', backendUrl);
|
|
localStorage.setItem('iperfServer', iperfServer);
|
|
localStorage.setItem('benchMode', benchMode);
|
|
|
|
generateBenchCommand();
|
|
}
|
|
|
|
// Generate bench command
|
|
function generateBenchCommand() {
|
|
const backendUrl = document.getElementById('backendUrl').value.trim();
|
|
const iperfServer = document.getElementById('iperfServer').value.trim();
|
|
const benchMode = document.getElementById('benchMode').value;
|
|
|
|
if (!backendUrl) {
|
|
document.getElementById('generatedCommand').textContent = 'Veuillez configurer l\'URL du backend';
|
|
return;
|
|
}
|
|
|
|
// Construct script URL (assuming script is served from same host as frontend)
|
|
const scriptUrl = `${backendUrl.replace(':8007', ':8087')}/scripts/bench.sh`;
|
|
|
|
// Build command parts
|
|
let command = `curl -s ${scriptUrl} | sudo bash -s -- \\
|
|
--server ${backendUrl} \\
|
|
--token "${API_TOKEN}"`;
|
|
|
|
if (iperfServer) {
|
|
command += ` \\\n --iperf-server ${iperfServer}`;
|
|
}
|
|
|
|
if (benchMode) {
|
|
command += ` \\\n ${benchMode}`;
|
|
}
|
|
|
|
document.getElementById('generatedCommand').textContent = command;
|
|
showToast('Commande générée', 'success');
|
|
}
|
|
|
|
// Copy generated command
|
|
async function copyGeneratedCommand() {
|
|
const command = document.getElementById('generatedCommand').textContent;
|
|
|
|
if (command === 'Veuillez configurer l\'URL du backend') {
|
|
showToast('Veuillez d\'abord configurer l\'URL du backend', 'error');
|
|
return;
|
|
}
|
|
|
|
const success = await copyToClipboard(command);
|
|
|
|
if (success) {
|
|
showToast('Commande copiée dans le presse-papier !', 'success');
|
|
} else {
|
|
showToast('Erreur lors de la copie', 'error');
|
|
}
|
|
}
|
|
|
|
// Toggle token visibility
|
|
function toggleTokenVisibility() {
|
|
const tokenInput = document.getElementById('apiToken');
|
|
tokenVisible = !tokenVisible;
|
|
|
|
if (tokenVisible) {
|
|
tokenInput.type = 'text';
|
|
} else {
|
|
tokenInput.type = 'password';
|
|
}
|
|
}
|
|
|
|
// Copy token
|
|
async function copyToken() {
|
|
const token = document.getElementById('apiToken').value;
|
|
|
|
if (!token || token === 'Chargement...') {
|
|
showToast('Token non disponible', 'error');
|
|
return;
|
|
}
|
|
|
|
const success = await copyToClipboard(token);
|
|
|
|
if (success) {
|
|
showToast('Token copié dans le presse-papier !', 'success');
|
|
} else {
|
|
showToast('Erreur lors de la copie', 'error');
|
|
}
|
|
}
|
|
|
|
// ==========================================
|
|
// THEME MANAGEMENT
|
|
// ==========================================
|
|
|
|
function loadTheme() {
|
|
const currentTheme = window.ThemeManager ? window.ThemeManager.getCurrentTheme() : 'monokai-dark';
|
|
const select = document.getElementById('themeSelect');
|
|
if (select) {
|
|
select.value = currentTheme;
|
|
}
|
|
}
|
|
|
|
function saveTheme() {
|
|
const select = document.getElementById('themeSelect');
|
|
if (!select) return;
|
|
|
|
const theme = select.value;
|
|
|
|
if (window.ThemeManager) {
|
|
window.ThemeManager.applyTheme(theme);
|
|
showToast(`Thème "${theme}" appliqué avec succès`, 'success');
|
|
} else {
|
|
console.error('ThemeManager not available');
|
|
showToast('Erreur: ThemeManager non disponible', 'error');
|
|
}
|
|
}
|
|
|
|
// ==========================================
|
|
// ICON PACK MANAGEMENT
|
|
// ==========================================
|
|
|
|
function loadIconPack() {
|
|
const currentPack = window.IconManager ? window.IconManager.getCurrentPack() : 'fontawesome-regular';
|
|
const select = document.getElementById('iconPackSelect');
|
|
if (select) {
|
|
select.value = currentPack;
|
|
}
|
|
|
|
// Initialize icon preview
|
|
if (window.IconManager) {
|
|
const preview = document.getElementById('iconPreview');
|
|
if (preview) {
|
|
window.IconManager.inlineSvgIcons(preview);
|
|
}
|
|
}
|
|
}
|
|
|
|
function saveIconPack() {
|
|
const select = document.getElementById('iconPackSelect');
|
|
if (!select) return;
|
|
|
|
const pack = select.value;
|
|
|
|
if (window.IconManager) {
|
|
const success = window.IconManager.applyPack(pack);
|
|
if (success) {
|
|
showToast(`Pack d'icônes "${pack}" appliqué avec succès`, 'success');
|
|
|
|
// Refresh preview
|
|
const preview = document.getElementById('iconPreview');
|
|
if (preview) {
|
|
setTimeout(() => {
|
|
window.IconManager.inlineSvgIcons(preview);
|
|
}, 100);
|
|
}
|
|
} else {
|
|
showToast('Erreur lors de l\'application du pack d\'icônes', 'error');
|
|
}
|
|
} else {
|
|
console.error('IconManager not available');
|
|
showToast('Erreur: IconManager non disponible', 'error');
|
|
}
|
|
}
|
|
|
|
// Make functions available globally
|
|
window.generateBenchCommand = generateBenchCommand;
|
|
window.copyGeneratedCommand = copyGeneratedCommand;
|
|
window.toggleTokenVisibility = toggleTokenVisibility;
|
|
window.copyToken = copyToken;
|
|
window.saveDisplayPreferences = saveDisplayPreferences;
|
|
window.resetDisplayPreferences = resetDisplayPreferences;
|
|
window.saveTheme = saveTheme;
|
|
window.saveIconPack = saveIconPack;
|