/** * DOCLOUD - Custom JavaScript * - Botón CTA "Acceso ICSManager" * - Toggle modo oscuro/claro * - Integración Zammad */ (function() { 'use strict'; document.addEventListener('DOMContentLoaded', initCustomFeatures); function initCustomFeatures() { setDefaultDarkMode(); fixLogoLink(); addThemeToggle(); addLoginButton(); // Cargar Zammad de forma diferida if ('requestIdleCallback' in window) { requestIdleCallback(loadZammadForm); } else { setTimeout(loadZammadForm, 2000); } } /** * Establece modo oscuro por defecto */ function setDefaultDarkMode() { var savedTheme = localStorage.getItem('docloud-theme'); if (!savedTheme) { document.documentElement.setAttribute('data-theme', 'dark'); localStorage.setItem('docloud-theme', 'dark'); } else { document.documentElement.setAttribute('data-theme', savedTheme); } } /** * Asegura que el logo siempre enlace al home */ function fixLogoLink() { var logoLink = document.querySelector('.logo-link'); if (logoLink) { logoLink.href = '/'; } } /** * Añade el toggle de modo claro/oscuro */ function addThemeToggle() { var header = document.querySelector('.sidebar-header'); if (!header) return; var toggleBtn = document.createElement('button'); toggleBtn.className = 'theme-toggle-btn'; toggleBtn.setAttribute('aria-label', 'Cambiar tema'); toggleBtn.setAttribute('title', 'Alto contraste'); updateToggleIcon(toggleBtn); toggleBtn.addEventListener('click', function() { var currentTheme = document.documentElement.getAttribute('data-theme'); var newTheme = currentTheme === 'dark' ? 'light' : 'dark'; document.documentElement.setAttribute('data-theme', newTheme); localStorage.setItem('docloud-theme', newTheme); updateToggleIcon(toggleBtn); }); // Crear contenedor para los botones del header var btnContainer = document.createElement('div'); btnContainer.style.cssText = 'display:flex;align-items:center;gap:12px;'; btnContainer.appendChild(toggleBtn); header.appendChild(btnContainer); return btnContainer; } /** * Actualiza el icono del toggle según el tema */ function updateToggleIcon(btn) { var isDark = document.documentElement.getAttribute('data-theme') === 'dark'; btn.innerHTML = isDark ? '☀' : '☽'; btn.title = isDark ? 'Modo claro' : 'Modo oscuro'; } /** * Añade el botón CTA "Acceso ICSManager" */ function addLoginButton() { var btnContainer = document.querySelector('.sidebar-header > div:last-child'); if (!btnContainer) { var header = document.querySelector('.sidebar-header'); if (!header) return; btnContainer = document.createElement('div'); btnContainer.style.cssText = 'display:flex;align-items:center;gap:12px;'; header.appendChild(btnContainer); } var loginBtn = document.createElement('a'); loginBtn.href = 'https://icsmanager.docloud.es/ics1'; loginBtn.className = 'header-login-btn'; loginBtn.textContent = 'Acceso ICSManager'; loginBtn.setAttribute('rel', 'noopener'); loginBtn.setAttribute('title', 'Acceder al panel de gestión'); btnContainer.appendChild(loginBtn); } /** * Carga jQuery y Zammad Form */ function loadZammadForm() { var feedbackBtn = document.createElement('button'); feedbackBtn.id = 'zammad-feedback-form'; feedbackBtn.textContent = 'Contactar'; document.body.appendChild(feedbackBtn); if (typeof jQuery === 'undefined') { var jqueryScript = document.createElement('script'); jqueryScript.src = 'https://code.jquery.com/jquery-3.6.0.min.js'; jqueryScript.onload = loadZammadScript; document.head.appendChild(jqueryScript); } else { loadZammadScript(); } } /** * Carga el script de Zammad */ function loadZammadScript() { var zammadScript = document.createElement('script'); zammadScript.id = 'zammad_form_script'; zammadScript.src = 'https://soporte.tecnico.com.es/assets/form/form.js'; zammadScript.onload = initZammadForm; document.head.appendChild(zammadScript); } /** * Inicializa el formulario de Zammad */ function initZammadForm() { if (typeof jQuery !== 'undefined' && jQuery.fn.ZammadForm) { jQuery('#zammad-feedback-form').ZammadForm({ messageTitle: 'Contacto con Soporte Técnico', messageSubmit: 'Enviar', messageThankYou: 'Gracias por contactarnos (#%s). Responderemos a la brevedad.', modal: true }); } } })();