- Create individual CSS files: monitoring.css, alerts.css, health.css, logs.css, metrics.css, resources.css - Create individual JS files: monitoring.js, alerts.js, health.js, logs.js, metrics.js, resources.js - Update HTML files to reference external CSS/JS files - Add CSS/JS files for other modules (analytics, chat, mail, meet, tasks, etc.) - Remove obsolete implementation plan files
120 lines
3.5 KiB
JavaScript
120 lines
3.5 KiB
JavaScript
/* Settings Module JavaScript */
|
|
|
|
(function() {
|
|
'use strict';
|
|
|
|
/**
|
|
* Initialize settings module
|
|
*/
|
|
function init() {
|
|
bindNavigation();
|
|
bindToggles();
|
|
bindThemeSelector();
|
|
bindAvatarUpload();
|
|
bindFormValidation();
|
|
}
|
|
|
|
/**
|
|
* Bind settings navigation
|
|
*/
|
|
function bindNavigation() {
|
|
document.querySelectorAll('.settings-nav-item').forEach(item => {
|
|
item.addEventListener('click', function(e) {
|
|
e.preventDefault();
|
|
document.querySelectorAll('.settings-nav-item').forEach(i => i.classList.remove('active'));
|
|
this.classList.add('active');
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Bind toggle switches
|
|
*/
|
|
function bindToggles() {
|
|
document.querySelectorAll('.toggle-switch input').forEach(toggle => {
|
|
toggle.addEventListener('change', function() {
|
|
const setting = this.dataset.setting;
|
|
const value = this.checked;
|
|
saveSetting(setting, value);
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Bind theme selector
|
|
*/
|
|
function bindThemeSelector() {
|
|
document.querySelectorAll('.theme-option input').forEach(option => {
|
|
option.addEventListener('change', function() {
|
|
const theme = this.value;
|
|
document.documentElement.setAttribute('data-theme', theme);
|
|
saveSetting('theme', theme);
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Bind avatar upload
|
|
*/
|
|
function bindAvatarUpload() {
|
|
const avatarInput = document.getElementById('avatar-input');
|
|
if (avatarInput) {
|
|
avatarInput.addEventListener('change', function(e) {
|
|
const file = e.target.files[0];
|
|
if (file) {
|
|
const reader = new FileReader();
|
|
reader.onload = function(e) {
|
|
const preview = document.querySelector('.avatar-preview img');
|
|
if (preview) {
|
|
preview.src = e.target.result;
|
|
}
|
|
};
|
|
reader.readAsDataURL(file);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Bind form validation
|
|
*/
|
|
function bindFormValidation() {
|
|
document.querySelectorAll('.settings-form').forEach(form => {
|
|
form.addEventListener('submit', function(e) {
|
|
const inputs = form.querySelectorAll('[required]');
|
|
let valid = true;
|
|
inputs.forEach(input => {
|
|
if (!input.value.trim()) {
|
|
valid = false;
|
|
input.classList.add('error');
|
|
} else {
|
|
input.classList.remove('error');
|
|
}
|
|
});
|
|
if (!valid) {
|
|
e.preventDefault();
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Save setting (via HTMX or fetch)
|
|
* @param {string} key - Setting key
|
|
* @param {any} value - Setting value
|
|
*/
|
|
function saveSetting(key, value) {
|
|
// This would be handled by HTMX in production
|
|
console.log('Saving setting:', key, value);
|
|
}
|
|
|
|
// Export for external use
|
|
window.SettingsModule = { init };
|
|
|
|
// Auto-initialize
|
|
if (document.readyState === 'loading') {
|
|
document.addEventListener('DOMContentLoaded', init);
|
|
} else {
|
|
init();
|
|
}
|
|
})();
|