TXTbonk

Bonk!

当前为 2023-03-12 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         TXTbonk
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  Bonk!
// @author       tharglet
// @license      MIT
// @match        https://myfigurecollection.net/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=myfigurecollection.net
// @grant        GM_addStyle
// @grant        GM_setValue
// @grant        GM_getValue
// ==/UserScript==
//Polyfill for GM_addStyle for Greasemonkey...
if(typeof GM_addStyle == 'undefined') {
    GM_addStyle = (aCss) => {
        'use strict';
        let head = document.getElementsByTagName('head')[0];
        if (head) {
            let style = document.createElement('style');
            style.setAttribute('type', 'text/css');
            style.textContent = aCss;
            head.appendChild(style);
            return style;
        }
        return null;
    };
}

GM_addStyle(`
.bonk_menu {
  position: relative;
  display: inline-block;
  cursor: pointer;
}

.bonk_menu-body {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
  padding: 12px 16px;
  z-index: 1;
}

.bonk_alert {
  padding: 20px;
  font-size: 50px;
  background:#f7f7f7;
  border: 2px black solid;
  color: green;
  position:fixed;
  left:25%;
  top:40%;
}
`);

(function() {
    'use strict';
    // The default graphic
    let bonkGraphic = 'data:image/png;base64,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'
    // Array of {itemId: {toBonk: bool, date: Date}}
    let bonkables = JSON.parse(GM_getValue('txtbonk', '{}'));
    //Stores the alert timeout
    let alertDivTimeout;
    let ONE_WEEK_AGO = new Date(Date.now() - 604800000);

    // Main "bonk" action to change the image of a .TXT icon
    let bonk = (imgTag) => {
        imgTag.setAttribute('src', bonkGraphic);
    };

    // Saves if a NSFW+ item should be "bonked" or not to the cache array
    let saveBonkable = (itemId, toBonk) => {
        bonkables[itemId] = {toBonk: toBonk, date: (new Date()).toString()}
        GM_setValue("txtbonk", JSON.stringify(bonkables));
    };

    // Fetches the item page for a NSFW+ item and see if it should be "bonked"
    // The result is stored in the bonkables array so that items do not have to be constantly checked
    let fetchIfBonkable = (itemId, imgTag) => {
        fetch(`/item/${itemId}`).then((response) => {
                    return response.text();
                }).then((html) => {
                    var parser = new DOMParser();
                    var doc = parser.parseFromString(html, 'text/html');
                    var img = doc.querySelector('.item-picture');
                    if(!img) {
                        saveBonkable(itemId, true);
                        bonk(imgTag);
                    } else {
                        saveBonkable(itemId, false);
                    }
                }).catch(function (err) {
                    console.warn('Something went wrong.', err);
                });
    };

    // Function that scans the page for bonkable thumbnails
    let scanForBonkables = (icons, cacheReset) => {
        for(let icon of icons) {
            let imgTag = icon.getElementsByTagName('img')[0];
            if(imgTag.getAttribute('alt').startsWith('[NSFW+]')) {
                let metaTag = icon.getElementsByTagName('meta')[0];
                let itemId = metaTag.getAttribute('content').substring(2);
                let bonkable = bonkables[itemId];
                if(bonkable) {
                    if(new Date(bonkable.date) < ONE_WEEK_AGO || cacheReset) {
                        fetchIfBonkable(itemId, imgTag);
                    } else if(bonkable.toBonk) {
                        bonk(imgTag);
                    }
                } else {
                    fetchIfBonkable(itemId, imgTag);
                }
            }
        };
    }

    // Toggle menu display on click
    let clickBonkMenu = () => {
        let bonkMenu = document.querySelector('.bonk_menu-body');
        if(bonkMenu.style.display === 'block') {
            bonkMenu.style.display = 'none';
        } else {
            bonkMenu.style.display = 'block';
        }
    }

    // Hides the alert div
    let hideAlertDiv = () => {
        let alertDiv = document.querySelector('.bonk_alert');
        alertDiv.style.display = 'none';
        if(alertDivTimeout) {
            window.clearTimeout(alertDivTimeout);
        }
    }

    // Shows the alert div with given message
    let showAlertDiv = (message) => {
        if(alertDivTimeout) {
            window.clearTimeout(alertDivTimeout);
        }
        let alertDiv = document.querySelector('.bonk_alert');
        alertDiv.innerText = message;
        alertDiv.style.display = 'block';
        alertDivTimeout = window.setTimeout(hideAlertDiv, 5000);
    }

    // Scans page again for bonkables
    let resetCache = () => {
        scanForBonkables(icons, true);
        showAlertDiv('Refreshed');
    }

    // Sets up the alert div for displaying messages
    let setupAlertDiv = () => {
        let alertDiv = document.createElement('div');
        alertDiv.classList.add('bonk_alert');
        alertDiv.style.display = 'none';
        alertDiv.addEventListener('click', hideAlertDiv, false);
        let innerText = document.createTextNode('bonk');
        alertDiv.appendChild(innerText);
        let body = document.querySelector('body');
        body.appendChild(alertDiv);
    }

    // Sets up the bonkable menu
    let setupMenu = () => {
        let pageMenuDesktop = document.querySelector('.h1-meta-actions.desktop');
        if(!pageMenuDesktop) {
            pageMenuDesktop = document.querySelector('.h1-meta-actions');
        }
        let pageMenuMobile = document.querySelector('.h1-meta-actions.mobile');

        let menuContainer = document.createElement('a');
        menuContainer.classList.add('bonk_menu', 'action');
        menuContainer.addEventListener('click', clickBonkMenu, false);
        let innerSpanIcon = document.createElement('span');
        innerSpanIcon.classList.add('icon', 'icon-sliders');
        let innerText = document.createTextNode('Bonk!');
        menuContainer.appendChild(innerSpanIcon);
        menuContainer.appendChild(innerText);
        pageMenuDesktop.appendChild(menuContainer);

        let menuBody = document.createElement('div');
        menuBody.classList.add('bonk_menu-body');
        let menuItemsUl = document.createElement('ul');
        let resetCacheLi = document.createElement('li');
        let resetCacheText = document.createTextNode('Reset cache & and reload for this page');
        resetCacheLi.appendChild(resetCacheText);
        resetCacheLi.addEventListener('click', resetCache, false);
        menuItemsUl.appendChild(resetCacheLi);

        menuBody.appendChild(menuItemsUl);
        menuContainer.appendChild(menuBody);

        if(pageMenuMobile) {
            //Setup mobile menu
        }

    }

    // Bonk initialisation
    let icons = document.getElementsByClassName('item-icon');
    if(icons) {
        setupMenu();
        setupAlertDiv();
        scanForBonkables(icons, false);
    }
})();