f95zone tweaks

f95zone exclude tags and min like filter

Fra 20.04.2021. Se den seneste versjonen.

// ==UserScript==
// @name         f95zone tweaks
// @namespace    f95zone tweaks
// @version      0.4.3
// @description  f95zone exclude tags and min like filter
// @author       3xd_tango
// @match        https://f95zone.to/latest/
// @require      https://cdn.jsdelivr.net/combine/npm/@violentmonkey/dom@1,npm/@violentmonkey/[email protected]
// @grant        GM_addStyle
// ==/UserScript==

let dislikes = ['female protagonist','text based','mind control'];
let likes = [['incest','#ff0000'],['harem','#0011ff']];
let like_limit = 200;//<-----------------------likes limit

(function() {
    'use strict';
    var css = ''
    // for (var i = 0; i < dislikes.length; i++) {
    //     css += `div[data-tags*='${dislikes[i]}']${i < dislikes.length -1 ? ',': ''}`
    // }
    css += `.customTags{border-radius:2px;box-shadow:0 0 0 0 transparent,0 1px 1px 0 rgba(0,0,0,.15),0 1px 2px 0 rgba(0,0,0,.15);display:inline-block;font-size:.8em;line-height:1.8em;margin:4px 4px 0 0;padding:0 6px;text-shadow:1px 1px 2px rgba(0,0,0,.75)}`
    document.body.append(VM.createElement("style", null, css));

    function init() {
        const element = document.querySelectorAll('.resource-tile')
        if (element[0]) {
            checki: for (var i = 0; i < element.length; i++) {
                if (element[i].style.display == 'none') {
                    continue
                }
                var node = document.createElement("DIV");
                const dataTags = element[i].dataset.tags.split(',')
                const isFP = checkTags(element[i],dataTags)
                node.style.padding = '.5rem 0'
                const element_likes = element[i].childNodes[0].childNodes[1].childNodes[1].childNodes[1].childNodes[1].innerHTML;
                var element_new_tag = element[i].childNodes[0].childNodes[1].childNodes[1];
                var isDisplay = false
                for (var j = likes.length - 1; j >= 0; j--) {
                    if (dataTags.includes(likes[j][0])) {
                        var node1 = document.createElement("SPAN");
                        node1.classList.add('customTags');
                        node1.style.backgroundColor = likes[j][1]
                        element[i].style.boxShadow = `0px 0px 10px 1px ${likes[j][1]}`
                        node1.appendChild(document.createTextNode(likes[j][0]))
                        node.appendChild(node1)
                        isDisplay = true
                    }
                }
                if (isFP) {
                    element[i].style.setProperty("display", "block", "important")
                    element[i].style.setProperty("height", "unset", "important")
                    element[i].style.setProperty("margin", "unset", "important")
                }else {
                    element[i].style.setProperty("display", "none", "important")
                    element[i].style.setProperty("height", "0px", "important")
                    element[i].style.setProperty("margin", "0px", "important")
                }
                if (element_likes <= like_limit) {
                    if (isDisplay == false) {
                        element[i].style.setProperty("display", "none", "important")
                        element[i].style.setProperty("height", "0px", "important")
                        element[i].style.setProperty("margin", "0px", "important")
                    }
                }
                if (element[i].style.display != 'none') {
                    element_new_tag.appendChild(node)
                }
            }
        }
        else {
            setTimeout(init, 100);
        }
    }
    init();
    // var value = VM.getTextValues(document.querySelectorAll('#first_name2'))
    // console.log(value)
    history.onpushstate = function(state) {
        setTimeout(init, 200);
    };
    (function(history) {
        var pushState = history.pushState;
        history.pushState = function(state) {
            if (typeof history.onpushstate == "function") {
                history.onpushstate({
                    state: state
                });
            }
            return pushState.apply(history, arguments);
        };
    })(window.history);
})();

function checkTags(element, dataTags) {
    let tagProt = ['female protagonist', 'male protagonist', 'futa/trans protagonist'];
    const tagProtNames = dislikes.filter(e => e.includes('protagonist'));
    let b = [];
    let c = 0;
    dataTags.forEach((e, index) => {
        if (tagProtNames.length >= 1) {
            if (tagProtNames.includes(e)) {
                b.push(e)
                return
            }
        }
        if (dislikes.includes(e)) {
            c += 1
            return
        }
    })
    if (c > 0) {
        return false
    }
    if (b.length > 0) {
        b.forEach(e => {
            tagProt = tagProt.filter(r => r != e)
        })
        for (var i = tagProt.length - 1; i >= 0; i--) {
            if (dataTags.includes(tagProt[i])) {
                return true
            }
        }
    }
    return true
}