91 lines
3.5 KiB
JavaScript
91 lines
3.5 KiB
JavaScript
// ==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();
|
|
})(); |