poe.trade blacklist for Firefox

blacklist users on poe.trade for Firefox

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         poe.trade blacklist for Firefox
// @namespace    http://porath.org/
// @version      0.17b
// @description  blacklist users on poe.trade for Firefox
// @author       arc + Kalos
// @match        http://poe.trade/search/*
// @match        http://currency.poe.trade/search*
// @require      http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_listValues
// @grant        GM_deleteValue
// ==/UserScript==
/* jshint -W097 */
'use strict';

/*
****************************************************************
Notification are broken ATM
****************************************************************
// 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();
});

// Test

$(document).on('click', '.sortable', function (e) {
    e.preventDefault();
    
    setTimeout(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');
    },1000);
});

// 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();