grafana-html-decode

grafana html decode

当前为 2025-02-12 提交的版本,查看 最新版本

// ==UserScript==
// @name         grafana-html-decode
// @namespace    http://tampermonkey.net/
// @version      0.9
// @description  grafana html decode
// @author       chong
// @include      *://*.otr-devops.cn.svc.corpintra.net/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// @license MIT
// ==/UserScript==
(function() {
    'use strict';

    // HTML解码函数
    function decodeHTML(html) {
        var txt = document.createElement('textarea');
        txt.innerHTML = html;
        return txt.value;
    }

    // 解码指定元素的内容
    function decodeHTMLForElements(elements) {
        elements.forEach(element => {
            element.innerHTML = decodeHTML(element.innerHTML);
        });
    }

    // 主解码逻辑
    function decodeAll() {

        // 解码所有具有特定类名的元素
        const messageElements = document.querySelectorAll('.css-uev0p3-logs-row__message');
        decodeHTMLForElements(messageElements);

        // 解码所有表格单元格内容
        const tableCells = document.querySelectorAll('.css-xdnfhu-logs-row-details-table');
        decodeHTMLForElements(tableCells);

        console.log('解码完成!');
    }

    // 动态添加解码按钮
    function addDecodeButton() {
    // 选择所有符合条件的 <button> 元素
    const targetButtons = document.querySelectorAll('button.show-on-hover.css-pi41z0-toolbar-button-panel-menu[title="Menu"][data-testid*="Panel menu Logs"]');

    targetButtons.forEach((targetButton) => {
        // 检查是否已经添加过按钮
        if (!targetButton.nextElementSibling || !targetButton.nextElementSibling.classList.contains('custom-decode-button')) {
            // 创建新的按钮
            const decodeButton = document.createElement('button');
            decodeButton.className = 'custom-decode-button css-pi41z0-toolbar-button-panel-menu';
            decodeButton.innerText = 'Decode';
            decodeButton.title = 'Decode HTML entities';
            decodeButton.onclick = decodeAll;

            // 设置按钮样式,使其位于目标按钮的右边
            decodeButton.style.marginLeft = '10px'; // 添加一些左边距

            // 将按钮插入到目标按钮的右边
            targetButton.parentNode.insertBefore(decodeButton, targetButton);
        }
    });
    }

    // 延迟1000毫秒后执行addDecodeButton函数
    setTimeout(addDecodeButton, 1000);

})();