FxP Block Everyone

Blocks every cunt

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         FxP Block Everyone
// @namespace    http://tampermonkey.net/
// @version      1.0.2
// @description  Blocks every cunt
// @author       A Trap
// @match        https://www.fxp.co.il/profile.php?do=ignorelist*
// @match        https://www.fxp.co.il/showthread.php*
// @match        https://www.fxp.co.il/forumdisplay.php*
// ==/UserScript==

(function() {

    // String constants
    const strings = {
        header_add: 'חסימה מלאה - הוסף משתמשים לרשימה',
        label_add: 'שם משתמש: ',
        button_add: 'הוסף',
        success_add: 'המשתמש נוסף לרשימה בהצלחה',
        failed_add: 'המשתמש הזה כבר קיים ברשימה',
        header_rm: 'חסימה מלאה - הסר משתמשים מהרשימה',
        label_rm: 'שם משתמש: ',
        header2_rm: 'רשימת משתמשים',
        button_rm: 'הסר',
        success_rm: 'המשתמש הוסר מהרשימה בהצלחה',
        failed_rm: 'המשתמש הזה לא קיים ברשימה'
    }

    // Parse local storage
    let getData = function() {
        try {
            return JSON.parse(localStorage.fxpblock);
        } catch (ex) {
            localStorage.fxpblock = "[]";
            return [];
        }
    }

    // Check if a user exists in the list
    let findUser = function(user) {
        return getData().findIndex(u => {
            return u.toLowerCase() === user.toLowerCase();
        }) != -1;
    }

    // Adds a user to the list
    let pushData = function(user) {
        let temp = getData();
        temp.push(user);
        localStorage.fxpblock = JSON.stringify(temp);
    }

    // Removes a user from the list
    let removeUser = function(user) {
        if (!findUser(user)) {
            return false;
        }
        localStorage.fxpblock = JSON.stringify(getData().filter(u => {
            return u.toLowerCase() !== user.toLowerCase();
        }));
        return true;
    }

    // Creates forms for adding & deleting users
    let addForms = function() {

        let vanilla_add_user = document.querySelector('#ignorelist_add_form');
        let container_node = document.createElement('div');
        let new_add_user_html = `<h2 class="blockhead">${strings.header_add}</h2><form id="new_add_user_form"><div class="blockbody formcontrols settings_form_border"><div class="section"><div class="blockrow"><label for="new_add_user_txt">${strings.label_add}</label><div class="popupmenu nomouseover noclick nohovermenu popupcustom rightcol"><div><input type="text" class="primary textbox popupctrl" id="new_add_user_txt" name="username" autocomplete="off"></div></div></div></div></div></form><div class="blockfoot actionbuttons settings_form_border"><div class="group"><input type="submit" class="button" value="${strings.button_add}" form="new_add_user_form"></div></div>`;

        let remove_user_html = `<h2 class="blockhead">${strings.header_rm}</h2><form id="remove_user_form"><div class="blockbody formcontrols settings_form_border"><div class="section"><div class="blockrow"><label for="new_add_user_txt">${strings.label_rm}</label><div class="popupmenu nomouseover noclick nohovermenu popupcustom rightcol"><div><input type="text" class="primary textbox popupctrl" id="new_add_user_txt" name="username" autocomplete="off"></div></div></div></div><h3 class="blocksubhead">${strings.header2_rm}</h3><div class="section"><div class="blockrow"><span id="user_list">${getData().join(', ')}</span></div></div></div></form><div class="blockfoot actionbuttons settings_form_border"><div class="group"><input type="submit" class="button" value="${strings.button_rm}" form="remove_user_form"></div></div>`;

        container_node.innerHTML = new_add_user_html + remove_user_html;
        vanilla_add_user.parentNode.insertBefore(container_node, vanilla_add_user.nextSibling);

        let user_list_node = container_node.querySelector('#user_list');

        // Handles adding users on form submit
        container_node.querySelector('#new_add_user_form').addEventListener('submit', e => {
            e.preventDefault();
            let username = e.target.querySelector('input[name=username]').value;

            if (findUser(username)) {
                alert(strings.failed_add);
            } else {
                pushData(username);
                user_list_node.innerText = getData().join(', ');
                e.target.reset();
                alert(strings.success_add);
            }
        });

        // Handles removing users on form submit
        container_node.querySelector('#remove_user_form').addEventListener('submit', e => {
            e.preventDefault();
            let username = e.target.querySelector('input[name=username]').value;

            if (removeUser(username)) {
                user_list_node.innerText = getData().join(', ');
                e.target.reset();
                alert(strings.success_rm);
            } else {
                alert(strings.failed_rm);
            }
        });

    }

    // Deletes elements regarding a blocked user given the list element & where to look for the username
    let cleanBlockedUser = function(listSelector, usernameSelector) {
        document.querySelectorAll(listSelector).forEach(el => {
            if (getData().includes(el.querySelector(usernameSelector).textContent)) {
                el.remove();
            }
        });
    }

    // Runs the correct actions depending on the current location
    if (location.pathname.includes('profile')) {
        addForms();
    } else if (location.pathname.includes('forumdisplay')) {
        cleanBlockedUser('.threads .threadbit', '.author .username');
    } else if (location.pathname.includes('showthread')) {
        cleanBlockedUser('.posts .postbit', '.username_container .username');
    }

})();