kibana-html-decode

kibana html decode

// ==UserScript==
// @name         kibana-html-decode
// @namespace    http://tampermonkey.net/
// @version      1.0.1
// @description  kibana html decode
// @author       You
// @include      https://*monitor-*/*
// @include      https://kibana*/*
// @include      http://kibana*/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

     const filter = (list, filterFunction) => {
         const results = [];
         list.forEach(item=>{
             if(filterFunction(item)){
                 results.push(item);
             }
         })
         return results;
     }

     const decodeHTML = function (html) {
         var txt = document.createElement('textarea');
         txt.innerHTML = html;
         return txt.value;
     };

    const decodeHTMLForElements = (elements)=>{
        elements.forEach(element=>{
            element.innerHTML = decodeHTML(element.innerHTML);
        });
    }

    const decode = () => {
       const messageElements = filter(document.querySelectorAll("dt"), (item)=> item.innerText.includes("message"))
                                .map((item)=>{
                                    return item.nextElementSibling;
                                });
        decodeHTMLForElements(filter(messageElements, (item)=>item!==null));

        const messageDetailElements = document.querySelectorAll("[data-test-subj=tableDocViewRow-message-value]");
        decodeHTMLForElements(messageDetailElements);

        const tableHeader=document.querySelectorAll("[data-test-subj=docTableHeader]>th");
        let i=0;
        for(let j = 0; j < tableHeader.length; j++) {
            if (tableHeader[j].querySelector("[data-test-subj=docTableHeader-message]")){
                i=j;
            }
        }
        
        const tableRow=document.querySelectorAll("[data-test-subj=docTableRow]");
        tableRow.forEach(item=>{
            //decodeHTMLForElements(item.querySelectorAll("td")[i].querySelectorAll("[ng-non-bindable]"));
            decodeHTMLForElements(item.querySelectorAll("td")[i].querySelectorAll("[class=truncate-by-height]"));
        })
    }

    const handler = setInterval(()=>{
      const querySubmitButton = document.querySelector("[data-test-subj=querySubmitButton]");
      if(!querySubmitButton){
          return;
      }
      //clearInterval(handler);
      if (querySubmitButton.parentElement.querySelector("#decode")){
         return;
      }

      const decodeButton = document.querySelector("[data-test-subj=querySubmitButton]").cloneNode();
      decodeButton.id = "decode";
      decodeButton.innerText = "Decode";
      decodeButton.onclick = decode;
      querySubmitButton.parentElement.appendChild(decodeButton);

    }, 1000);

})();