docloud.es/assets/custom.js

156 lines
4.5 KiB
JavaScript
Raw Permalink Normal View History

/**
* 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
});
}
}
})();