BlockSleuth

PDF or SVG export function for any charts

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name         BlockSleuth
// @namespace    http://tampermonkey.net/
// @version      2024-08-23
// @description  PDF or SVG export function for any charts
// @author       Greater Empire
// @match        https://metasleuth.io/result*
// @icon         https://assets.blocksec.com/image/1691494672404-2.png
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    let GRAPH_AREA = "index_graphContainer__*", GRAPH_AREA_ID = "graphId", DOWNL_VIDEO_BTN_HTML_CLASS_STR = `hishtnikDownlVidBtn`, DOWNL_PHOTO_BTN_HTML_CLASS_STR = `hishtnikDownlPhotoBtn`, DOWNL_THUMB_BTN_HTML_CLASS_STR = `hishtnikDownlThumbBtn`, OPEN_THUMB_BTN_HTML_CLASS_STR = `hishtnikOpenThumbBtn`;
    let POST_MEDIA_ELEMS_CSS_SELECTOR_STR = `video, div[role="button"] img[style="object-fit: cover;"]`, POST_OP_USERNAME_CSS_SELECTOR_STR = `.UE9AK .Jv7Aj.mArmR.MqpiF`;
    let STYLE_HTML_STR =
        `<style>
            .CzVzU > div, ._aatp > div {padding: 5px !important;}
            .CzVzU > div, ._aatp > div, button[aria-label="Go Back"], button[aria-label="Next"] {background: #951111 !important; border: 2px solid #979085 !important;}
        </style`;

    let SAVED_VIDEO_DOWNL_LINKS_OBJ = {}, MAX_SAVED_VIDEO_LINKS_INT = 100;


    function captureHtml() {
        const parentElement = document.getElementById('graphId');
        if (parentElement) {


            const precloneel = parentElement.firstElementChild;

            const firstChild = precloneel.cloneNode(true);

            // Do something with the first child element
            //console.log(firstChild);
            // Create a rectangle for the background
            const background = document.createElementNS("http://www.w3.org/2000/svg", "rect");
            background.setAttribute("x", "0");
            background.setAttribute("y", "0");
            background.setAttribute("width", "100%");
            background.setAttribute("height", "100%");
            background.setAttribute("fill", "black");

            // Append the background rectangle to the SVG
            firstChild.insertBefore(background, firstChild.firstChild);

            return firstChild.outerHTML;
        } else {
            console.error('Element with id "graphId" not found');
            return null;
        }
    }
    function download_internal(svgContent){

        // Create a Blob from the SVG content
        const blob = new Blob([svgContent], { type: 'image/svg+xml' });

        // Create a link element
        const link = document.createElement('a');
        link.href = URL.createObjectURL(blob);
        link.download = 'jectout.svg';

        // Append link to the body
        document.body.appendChild(link);

        // Programmatically click the link to trigger the download
        link.click();

        // Remove the link after downloading
        document.body.removeChild(link);
    }
    function init(){

        const container = document.querySelector('[class*="index_controlLeft"]');
        if (!container) {
            console.error('Element with id "graphId" not found');
            return;
        }

        // Create the div element
        const div = document.createElement('button');
        div.className = 'ant-btn ant-btn-default index_btn__bYgq7 index_fl__UYWQB';
        div.textContent = 'Export SVG';

        // Create the inner <i> element
        const icon = document.createElement('i');
        icon.className = 'icon-rect iconfont';
        icon.textContent = 'Export SVG';

        // Append the <i> element to the div
        //div.appendChild(icon);

        // Set the onclick function
        div.onclick = function(){
            const htmlCode = captureHtml();
            if (htmlCode) {
                console.log(htmlCode);

                download_internal(htmlCode);
            }

        };



        container.appendChild(div);
        console.log("plugin for block Sleuth is. online");


    }


    init();



})();