| |
|
|
| let currentAccentColor = '#ffc107'; |
|
|
| function switchSettingsPanel(panelId, element) { |
| |
| document.querySelectorAll('.settings-section').forEach(p => p.classList.remove('active')); |
| |
| document.getElementById(panelId).classList.add('active'); |
| |
| |
| document.querySelectorAll('.settings-tab').forEach(t => t.classList.remove('active')); |
| element.classList.add('active'); |
| } |
|
|
| function setAccentColor(hexCode, element) { |
| currentAccentColor = hexCode; |
| |
| |
| document.querySelectorAll('.color-swatch').forEach(s => s.classList.remove('active')); |
| if(element) { |
| element.classList.add('active'); |
| } |
| |
| |
| document.getElementById('custom-accent-color').value = hexCode; |
| |
| previewSettings(); |
| } |
|
|
| function previewSettings() { |
| |
| document.documentElement.style.setProperty('--accent-main', currentAccentColor); |
| |
| document.documentElement.style.setProperty('--accent-glow', currentAccentColor + '40'); |
| |
| |
| const theme = document.getElementById('setting-theme-mode').value; |
| if (theme === 'light') { |
| document.documentElement.style.setProperty('--bg-base', '#f5f5f5'); |
| document.documentElement.style.setProperty('--bg-surface', '#ffffff'); |
| document.documentElement.style.setProperty('--text-primary', '#111111'); |
| document.documentElement.style.setProperty('--text-secondary', '#555555'); |
| document.documentElement.style.setProperty('--glass-border', '1px solid rgba(0,0,0,0.1)'); |
| document.documentElement.style.setProperty('--panel-bg', 'rgba(255,255,255,0.8)'); |
| } else { |
| |
| document.documentElement.style.setProperty('--bg-base', '#050505'); |
| document.documentElement.style.setProperty('--bg-surface', '#0a0a0a'); |
| document.documentElement.style.setProperty('--text-primary', '#ffffff'); |
| document.documentElement.style.setProperty('--text-secondary', '#a0a0a0'); |
| document.documentElement.style.setProperty('--glass-border', '1px solid rgba(255, 255, 255, 0.05)'); |
| document.documentElement.style.setProperty('--panel-bg', 'rgba(20, 20, 20, 0.6)'); |
| } |
|
|
| |
| const editorFont = document.getElementById('setting-editor-font').value; |
| const editorSize = document.getElementById('setting-editor-font-size').value; |
| document.documentElement.style.setProperty('--font-mono', editorFont); |
| |
| if (typeof editor !== 'undefined' && editor) { |
| editor.setOptions({ |
| fontFamily: editorFont, |
| fontSize: editorSize |
| }); |
| } |
|
|
| |
| const termSize = document.getElementById('setting-terminal-font-size').value; |
| const termOutput = document.getElementById('terminal-output'); |
| if (termOutput) { |
| termOutput.style.fontSize = termSize; |
| } |
| } |
|
|
| async function saveSettings() { |
| const btn = document.getElementById('save-settings-btn'); |
| btn.innerText = "Saving..."; |
| |
| const settingsData = { |
| theme: document.getElementById('setting-theme-mode').value, |
| accent: currentAccentColor, |
| editorFont: document.getElementById('setting-editor-font').value, |
| editorSize: document.getElementById('setting-editor-font-size').value, |
| termSize: document.getElementById('setting-terminal-font-size').value |
| }; |
|
|
| try { |
| const res = await fetch('/api/settings', { |
| method: 'POST', |
| headers: {'Content-Type': 'application/json'}, |
| body: JSON.stringify({token: currentToken, settings: settingsData}) |
| }); |
| |
| const data = await res.json(); |
| if(data.success) { |
| btn.innerText = "✓ Saved"; |
| setTimeout(() => btn.innerText = "Save Settings", 2000); |
| } else { |
| alert("Failed to save settings."); |
| btn.innerText = "Save Settings"; |
| } |
| } catch (e) { |
| alert("Network error."); |
| btn.innerText = "Save Settings"; |
| } |
| } |
|
|
| |
| async function loadSettings() { |
| if(!currentUser) return; |
| |
| |
| const usernameInput = document.getElementById('setting-username'); |
| const avatar = document.getElementById('profile-avatar'); |
| if(usernameInput) usernameInput.value = currentUser; |
| if(avatar) avatar.innerText = currentUser.charAt(0).toUpperCase(); |
|
|
| |
| |
| previewSettings(); |
| } |
|
|