poe.trade blacklist

blacklist users on poe.trade

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         poe.trade blacklist
// @namespace    http://porath.org/
// @version      0.15
// @description  blacklist users on poe.trade
// @author       arc
// @match        http://poe.trade/search/*
// @match        http://currency.poe.trade/search*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_listValues
// @grant        GM_deleteValue
// ==/UserScript==
/* jshint -W097 */
'use strict';

// user settings - change the url contents of this variable to any mp3 to change the notification sound, or comment out lines 18-21 if you want the original sound

var notification = 'http://porath.org/a/mynotification2.mp3';

$('#live-audio > source').attr('src', notification);
$('#live-audio').load();

// replace the notification checkboxes with my own so i can take control of the notifications

$('#live-notify-sound').prop('id', 'live-notify-sound-blacklist');
$('#live-notify-sound-blacklist').prop('onclick', null).off('click');
$('#live-notify-browser').prop('id', 'live-notify-browser-blacklist');
$('#live-notify-browser-blacklist').prop('onclick', null).off('click');

$('#live-notification-settings > a').prop('onclick', null).off('click');

var audioNotify = GM_getValue('audioNotify') || false;
var browserNotify = GM_getValue('browserNotify') || false;

if (audioNotify) {
    $('#live-notify-sound-blacklist').prop('checked', true);
}

if (browserNotify) {
    $('#live-notify-browser-blacklist').prop('checked', true);
}

$('#live-notification-settings > a').on('click', function () {
    live_notify_blacklist();
});

$('#live-notify-sound-blacklist').on('click', function () {
    if ($(this).prop('checked')) {
        GM_setValue('audioNotify', true);
    }
    else {
        GM_setValue('audioNotify', false);
    }
});

$('#live-notify-browser-blacklist').on('click', function () {
    if ($(this).prop('checked')) {
        GM_setValue('browserNotify', true);
    }
    else {
        GM_setValue('browserNotify', false);
    }
});

function live_notify_blacklist() {
    if ($('#live-notify-sound-blacklist').is(':checked')) {
        $("#live-audio").trigger("play");
    }
    if ($('#live-notify-browser-blacklist').is(':checked')) {
        if (!("Notification" in window))
            return;
        Notification.requestPermission(function(result) {
            if (result === 'denied' || result == 'default') {
                return;
            }
            new Notification("A new item matching your search is available.");
        });
    }
}

// add a checkbox to toggle the visibility of blacklisted items

var blacklistVisibilityCheckbox = $('<input />').attr('type', 'checkbox').attr('name', 'blacklist-visibility').attr('id', 'blacklist-visibility');
var blacklistVisibilitySpan = $('<span />').addClass('right').css('margin-right', '0.5em').text('Hide BL items: ').append(blacklistVisibilityCheckbox);
$('.protip').append(blacklistVisibilitySpan);

var blacklistVisibility = GM_getValue('blacklistVisibility') || false;

if (blacklistVisibility) {
    $('#blacklist-visibility').prop('checked', true);
}

$('#blacklist-visibility').on('click', function () {
    if ($(this).prop('checked')) {
        GM_setValue('blacklistVisibility', true);
    }
    else {
        GM_setValue('blacklistVisibility', false);
    }
    
    toggleVisibility();
});

// create an element to show that an item has been hidden

var hiddenDiv = $('<div />').addClass('alert-box').css('margin-bottom', '0px').text('Blacklisted item hidden');
var hiddenTd = $('<td />').attr('colspan', '16').append(hiddenDiv);
var hiddenTr = $('<tr />').addClass('hidden-row').append(hiddenTd);

// add links to each item to blacklist the user

var blacklistLink = $('<a />').addClass('blacklistLink').text('Blacklist');
var blacklistLi = $('<li />').append(blacklistLink);

var blacklistLabel = $('<span />').addClass('alert').addClass('label').addClass('blacklistLabel').text('blacklisted');

function addBlacklistLink() {
    if ($('.whisper-btn').length > 0) {
        $('.whisper-btn').closest('.proplist').each( function () {
            if ($(this).find('.blacklistLink').length == 0) {
                $(this).append(blacklistLi.clone());
                $(this).closest('.item').append(hiddenTr.clone());
            }
        });
    }
    else {
        $('.displayoffer-bottom').find('.right').each( function () {
            if ($(this).find('.blacklistLink').length == 0) {
                $(this).append(blacklistLink.clone());
                $('.blacklistLink').css('margin-left', '5px');
                $(this).closest('.item').append(hiddenTr.clone());
            }
        });
    }
    
    toggleVisibility();
}

addBlacklistLink();

// add link to clear the blacklist

var blClearLink = $('<a />').addClass('blacklistClearLink').text('Clear');
var blClearSpan = $('<span />').addClass('right').css('margin-right', '0.5em').text('Blacklist: ').append(blClearLink);
$('.protip').append(blClearSpan);

// if it exists, retrieve the existing blacklist

var blacklisted = GM_getValue('blacklisted') || '';
var blacklistArray = [];

if (blacklisted.length > 0) {
    blacklistArray = blacklisted.split(';');
}

// listener for clicking the blacklist link - adds seller to blacklist, adds blacklist labels to any items from seller

$(document).on('click', '.blacklistLink', function (e) {
    e.preventDefault();
    
    if ($('.item').length > 0) {
        var item = $(e.target).closest('.item');

        blacklistArray.push(item.data('seller'));
    }
    else {
        var item = $(e.target).closest('.displayoffer');

        blacklistArray.push(item.data('username'));
    }
    
    blacklisted = blacklistArray.join(';');
    
    addBlacklistLabel();
    
    GM_setValue('blacklisted', blacklisted);
});

// obviously, clicking clear removes all blacklisted sellers from the blacklist

$('.blacklistClearLink').on('click', function (e) {
    e.preventDefault();
    
    clearList();
});

// run these functions when the live search updates

$(document).on('ajaxSuccess', function () {
    addBlacklistLabel();
    addBlacklistLink();
    toggleVisibility();
    
    var items = $('.item').not('.old');
    
    if (items.length > 0 && items.find('.blacklistLabel').length == 0) {
        live_notify_blacklist();
    }
    
    $('.item').not('.old').addClass('old');
});

function addBlacklistLabel () {
    if ($('.whisper-btn').length > 0) {
        $('.whisper-btn').closest('.proplist').each( function () {
            var elem = $(this);
            var item = elem.closest('.item');

            if ($.inArray(item.data('seller'), blacklistArray) > -1 && item.find('.blacklistLabel').length < 1) {
                elem.prepend(blacklistLabel.clone());
                item.addClass('blacklisted');
            }
        });
    }
    else {
        $('.displayoffer-bottom').each( function () {
            var elem = $(this);
            var item = elem.closest('.displayoffer');

            if ($.inArray(item.data('username'), blacklistArray) > -1 && item.find('.blacklistLabel').length < 1) {
                elem.prepend(blacklistLabel.clone());
                item.addClass('blacklisted');
            }
        });
    }
    
    toggleVisibility();
}

function toggleVisibility () {
    $('.item > .hidden-row').hide();
    
    if ($('#blacklist-visibility').is(':checked')) {
        $('.blacklisted > .first-line').hide();
        $('.blacklisted > .bottom-row').hide();
        $('.blacklisted > .hidden-row').show();
    }
    else {
        $('.item > .first-line').show();
        $('.item > .bottom-row').show();
        $('.item > .hidden-row').hide();
    }
}

function clearList () {
    var keys = GM_listValues();
    
    for (var i=0, key=null; key=keys[i]; i++) {
        GM_deleteValue(key);
    }
    
    blacklistArray = [];
    $('.blacklistLabel').remove();
}

addBlacklistLabel();