From 4a17668e9e5d1e75279409fd70765c34436bd9a4 Mon Sep 17 00:00:00 2001 From: Luigi D'Acunto Date: Wed, 17 Jun 2026 17:55:49 +0200 Subject: [PATCH] feat: aggiungi terzo pulsante copia hostname corto e refactor spacing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Terzo pulsante viola copia l'hostname senza dominio (prima parte prima del primo punto). I tre pulsanti sono ora in un wrapper flex con gap:2px e margin-right:4px verso il nome host, eliminando le irregolarità di spacing tra icone inline. bump version to 2.9.5 --- user_script/checkmk_swissknife.user.js | 79 +++++++++++++++++--------- 1 file changed, 53 insertions(+), 26 deletions(-) diff --git a/user_script/checkmk_swissknife.user.js b/user_script/checkmk_swissknife.user.js index 80ae85f..be536a4 100644 --- a/user_script/checkmk_swissknife.user.js +++ b/user_script/checkmk_swissknife.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name Checkmk SwissKnife // @namespace https://luigidacunto.com/ -// @version 2.9.4 +// @version 2.9.5 // @description Raccolta di miglioramenti all'interfaccia di Checkmk WATO. Ogni fix o enhancement viene aggiunto qui come feature indipendente. // @author Luigi D'Acunto // @homepageURL https://git.luigidacunto.com/tools/checkmk-swissknife @@ -819,52 +819,65 @@ if (!hostCells.length) return; injectStyles(doc, 'cmk-sk-inv-btn-styles', ` - .cmk-sk-inv-btn { + .cmk-sk-btn-group { display: inline-flex; align-items: center; - justify-content: center; - width: 16px; - height: 16px; - background: rgba(229,165,0,0.08); - color: #e5a500 !important; - border: 1px solid #e5a500; - border-radius: 3px; - text-decoration: none !important; - margin-right: 2px; + gap: 2px; + margin-right: 4px; vertical-align: middle; - cursor: pointer; - opacity: 0.8; - flex-shrink: 0; } - .cmk-sk-inv-btn:hover { opacity: 1; background: rgba(229,165,0,0.18) !important; } - .cmk-sk-copy-btn { + .cmk-sk-inv-btn, .cmk-sk-copy-btn, .cmk-sk-copy-short-btn { display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 16px; - background: rgba(90,180,214,0.08); - color: #5ab4d6 !important; - border: 1px solid #5ab4d6; border-radius: 3px; - margin-right: 5px; - vertical-align: middle; cursor: pointer; opacity: 0.8; flex-shrink: 0; padding: 0; + text-decoration: none !important; + } + .cmk-sk-inv-btn, .cmk-sk-inv-btn:visited { + background: rgba(229,165,0,0.08); + color: #e5a500 !important; + border: 1px solid #e5a500; + } + .cmk-sk-inv-btn:hover { opacity: 1; background: rgba(229,165,0,0.18) !important; } + .cmk-sk-copy-btn { + background: rgba(90,180,214,0.08); + color: #5ab4d6 !important; + border: 1px solid #5ab4d6; } .cmk-sk-copy-btn:hover { opacity: 1; background: rgba(90,180,214,0.18) !important; } - .cmk-sk-copy-btn.copied { border-color: #4caf50 !important; color: #4caf50 !important; background: rgba(76,175,80,0.12) !important; opacity: 1; } - .cmk-sk-inv-btn svg, .cmk-sk-copy-btn svg { display: block; } + .cmk-sk-copy-short-btn { + background: rgba(160,120,200,0.08); + color: #a078c8 !important; + border: 1px solid #a078c8; + } + .cmk-sk-copy-short-btn:hover { opacity: 1; background: rgba(160,120,200,0.18) !important; } + .cmk-sk-copy-btn.copied, .cmk-sk-copy-short-btn.copied { + border-color: #4caf50 !important; + color: #4caf50 !important; + background: rgba(76,175,80,0.12) !important; + opacity: 1; + } + .cmk-sk-btn-group svg { display: block; } `); + const CLIP_SVG = ''; + hostCells.forEach(td => { const link = td.querySelector('a[href*="view_name=hoststatus"]'); if (!link) return; const params = new URLSearchParams(link.getAttribute('href').split('?')[1] || ''); const hostname = params.get('host'); if (!hostname) return; + const shortname = hostname.split('.')[0]; + + const group = doc.createElement('span'); + group.className = 'cmk-sk-btn-group'; const btn = doc.createElement('a'); btn.className = 'cmk-sk-inv-btn'; @@ -878,7 +891,7 @@ copyBtn.className = 'cmk-sk-copy-btn'; copyBtn.type = 'button'; copyBtn.title = `Copia hostname: ${hostname}`; - copyBtn.innerHTML = ''; + copyBtn.innerHTML = CLIP_SVG; copyBtn.addEventListener('click', () => { navigator.clipboard.writeText(hostname).then(() => { copyBtn.classList.add('copied'); @@ -886,8 +899,22 @@ }); }); - td.prepend(copyBtn); - td.prepend(btn); + const copyShortBtn = doc.createElement('button'); + copyShortBtn.className = 'cmk-sk-copy-short-btn'; + copyShortBtn.type = 'button'; + copyShortBtn.title = `Copia hostname corto: ${shortname}`; + copyShortBtn.innerHTML = CLIP_SVG; + copyShortBtn.addEventListener('click', () => { + navigator.clipboard.writeText(shortname).then(() => { + copyShortBtn.classList.add('copied'); + setTimeout(() => copyShortBtn.classList.remove('copied'), 900); + }); + }); + + group.appendChild(btn); + group.appendChild(copyBtn); + group.appendChild(copyShortBtn); + td.prepend(group); }); doc.body.dataset.cmkInventoryBtns = '1';