// ==UserScript== // @name Pulsante NRAP Convalida - Footer // @namespace http://tampermonkey.net/ // @version 1.0 // @description Inserisce il pulsante "Convalida" nell'header blu, allineato a destra // @author Gemini+Gatto. // @match *://www.ilportaledeltrasporto.it/nove/gestioneistanzanove/spa/* // @grant none // ==/UserScript== (function() { 'use strict'; function injectButtonInHeader() { // 1. Cerchiamo l'header blu (HeaderComponent) const header = document.querySelector('header.HeaderComponent'); // 2. Cerchiamo il pulsante originale nel footer per sapere se dobbiamo mostrare il nostro const allButtons = document.querySelectorAll('footer button, .FooterNavComponent button'); let originalBtn = null; for (let btn of allButtons) { if (btn.textContent.toLowerCase().includes('convalida')) { originalBtn = btn; break; } } const existingBtn = document.querySelector('#quick-convalida-header'); // Se non c'è il tasto originale nel footer, nascondiamo il nostro if (!originalBtn) { if (existingBtn) existingBtn.style.display = 'none'; return; } // 3. Se l'header esiste e il tasto non c'è ancora, lo creiamo if (header && !existingBtn) { // Rendiamo l'header "relative" per poter posizionare il tasto "absolute" dentro di esso header.style.position = 'relative'; const btn = document.createElement('button'); btn.id = 'quick-convalida-header'; btn.innerHTML = '✅ CONVALIDA DOCUMENTAZIONE'; // STILE: Posizionato a destra, dentro la zona blu btn.style.cssText = ` position: absolute; right: 56px; /* Distanza dal bordo destro */ top: 78%; /* Centratura verticale rispetto all'header */ transform: translateY(-50%); padding: 8px 20px; background-color: #28a745; /* Verde che stacca sul blu */ color: white; border: 1px solid #ffffff; border-radius: 4px; font-size: 14px; font-weight: bold; cursor: pointer; z-index: 9999; box-shadow: 0 2px 5px rgba(0,0,0,0.2); white-space: nowrap; `; // Azione al click btn.onclick = function(e) { e.preventDefault(); // Ricerchiamo il tasto originale "fresco" nel footer const target = Array.from(document.querySelectorAll('footer button')) .find(b => b.textContent.toLowerCase().includes('convalida')); if (target) { console.log("Tampermonkey: Clicco Convalida originale..."); target.click(); } else { alert("Pulsante originale non trovato nel footer!"); } }; header.appendChild(btn); } else if (existingBtn) { // Se esiste già, assicuriamoci che sia visibile existingBtn.style.display = 'block'; } } // Monitoraggio continuo per gestire i cambi pagina di React const observer = new MutationObserver(injectButtonInHeader); observer.observe(document.body, { childList: true, subtree: true }); setInterval(injectButtonInHeader, 1000); injectButtonInHeader(); })();