Skip to content

Instantly share code, notes, and snippets.

@ezific
Last active November 20, 2015 04:43
Show Gist options
  • Save ezific/6a6cc1e50d6003cabb33 to your computer and use it in GitHub Desktop.
Save ezific/6a6cc1e50d6003cabb33 to your computer and use it in GitHub Desktop.
PucaTrade Sort By Member's Wanted Value
// ==UserScript==
// @name PucaTrade Sort By Member's Wanted Value
// @author DACrosby, LLC
// @namespace http://dacrosby.com/
// @version 1.1
// @description Sort by member's that want the most value and can afford to have you send it to them.
// @match http*://pucatrade.com/trades*
// @match http*://*.pucatrade.com/trades*
// @grant none
// @downloadURL https://gist.github.com/dacrosby/6a6cc1e50d6003cabb33/raw/PucaTrade-Sort-by-PPM.user.js
// ==/UserScript==
(function( $ ) {
$(function() {
var ppmLowLocal = 100, // Lowest price worth considering to ship locally
ppmHighLocal = 250, // A ship-now price to ship locally
ppmLowGlobal = 200, // Lowest price worth considering to ship globally
ppmHighGlobal = 400, // A ship-now price to ship globally
ppmNoColor = "transparent", // Base color for non-shipable
ppmLowColor = "rgb(228, 239, 178)", // An OK color to ship to //Default: light yellow
ppmHighColor = "rgb(169, 221, 169)", // Ship Now color // Default: light grewen
localShip = new Array('United States'); // Array of Countries that are cheap to ship to (local rate). Anything not listed is considered global. Must match title attribute of Flag icon
// Generally Don't Change Below
var table = $(".card-table table.infinite"),
ppmPos = table.find("thead th").filter(function(){ return $(this).text() == "Member Pts"; }).index()+1, // Immediately after Member Pts column
ppmArr = [],
ppmStored = [],
ppmClicked = false,
inClicked = false;
if (table.find("th").eq(ppmPos).text() != "PPM")
table.find("th").eq(ppmPos).before( $("<th />").text("PPM").prop("title","Points Wanted Per Member") );
// Refresh PPM
addPPM();
$( document ).ajaxSuccess(function() {
var wait = setInterval( function(){
var opacity = table.find('tbody').css('opacity');
if (opacity == '1') {
clearInterval(wait);
addPPM();
}
}, 200);
});
// Store PPM when committing to send cards
table.find("tbody .sendCard .btn").click(function(e){
var thisRow = [],
row = $(this).parents("tr");
thisRow.id = getRowData(row, 'id');
thisRow.mem = getRowData(row, 'memName');
thisRow.cardVal = getRowData($(this), 'cardVal');
thisRow.confirmed = false;
ppmStored[ thisRow.mem ] = thisRow;
ppmClicked = thisRow.id;
var checkTimer = setInterval(function(){
if ( !inClicked && !$(".fancybox-wrap").length ){
clearInterval(checkTimer);
checkTimer = false;
for (var key in ppmStored) {
if (ppmStored.hasOwnProperty(key) && !ppmStored[key].confirmed)
delete ppmStored[key];
}
ppmClicked = false;
}
}, 1500);
});
$("body").on('click', '.fancybox-wrap .lightbox-body #confirm-trade-button', function(e){
inClicked = true;
if (ppmClicked) {
ppmStored[ ppmClicked ].confirmed = true;
console.log("confirmed: "+ppmClicked);
}
inClicked = false;
});
// PPM sorting
table.find("th").eq(ppmPos).click(function(e){
if ($(this).data('dir')=='desc') {
$(this).data('dir','asc');
} else {
$(this).data('dir','desc');
}
$('.infinite thead th').removeClass('sort');
$(this).addClass('sort').removeClass('asc').removeClass('desc').addClass($(this).data('dir'));
sortTable(table,$(this).data('dir'));
});
// Fn do PPM calcs, add PPM column to HTML table
function addPPM(){
ppmArr = [];
// Get total wanted-card value and other details per member.
table.find("tbody tr").each( function(){
var thisMember = getRowData($(this), 'memName'),
isLocal = getRowData($(this),'isLocal'),
memPoints = getRowData($(this), 'memPts'),
PPM = getRowData($(this), 'cardVal');
if ( typeof ppmArr[ thisMember ] === 'undefined' || !ppmArr[ thisMember ] )
ppmArr[ thisMember ] = [];
if ( typeof ppmArr[ thisMember ].ppm === 'undefined' || !ppmArr[ thisMember ].ppm )
ppmArr[ thisMember ].ppm = 0;
ppmArr[ thisMember ].ppm += PPM;
ppmArr[ thisMember ].isLocal = isLocal;
ppmArr[ thisMember ].memPts = memPoints;
});
// Add in committed cards
for (var key in ppmStored) {
if (ppmStored.hasOwnProperty(key) && ppmStored[key].confirmed) {
ppmArr[key].ppm += ppmStored[key].cardVal;
console.log("force adding "+key);
}
}
// Display total, add background color
table.find("tbody tr").each( function(){
var ppmTitle = $(this).find("td").eq(ppmPos).prop("title"),
thisMember = getRowData($(this), 'memName'),
PPM = ppmArr[ thisMember ].ppm,
memPts = ppmArr[ thisMember ].memPts,
isLocal = ppmArr[ thisMember ].isLocal,
bgColor = ppmNoColor,
curLowThreshold = isLocal ? ppmLowLocal : ppmLowGlobal,
curHighThreshold = isLocal ? ppmHighLocal : ppmHighGlobal;
if (PPM > curLowThreshold)
bgColor = ppmLowColor;
if (PPM > curHighThreshold)
bgColor = ppmHighColor;
// deal with wanting more cards than can afford
if (PPM > memPts)
bgColor = ppmNoColor;
if ( typeof ppmTitle === 'undefined' || !ppmTitle.length )
$(this).find("td").eq(ppmPos).before( $("<td />").text(PPM).prop("title",thisMember +" wants cards worth "+ PPM +" points") );
$(this).find("td").eq(ppmPos).css("background-color", bgColor);
});
}
// Fn handle sorting on PPM
function sortTable(table, order) {
var asc = order === 'asc',
tbody = table.find('tbody');
tbody.find('tr').sort(function(a, b) {
var valA = parseInt( $(a).children('td:eq('+ppmPos+')').text() ),
valB = parseInt( $(b).children('td:eq('+ppmPos+')').text() );
if (asc)
return valA - valB;
else
return valB - valA;
}).appendTo(tbody);
}
// Fns to get row data
function getRowData(tr, data){
var outS = '',
outA = [];
if (typeof data === 'undefined' || !data)
data = 'all';
data = data.toLowerCase();
switch (data){
case 'id':
outS = getRowID(tr);
break;
case 'islocal':
outS = rowIsLocal(tr);
break;
case 'memname':
outS = getRowMemName(tr);
break;
case 'mempts':
case 'mempoints':
outS = getRowMemPoints(tr);
break;
case 'cardname':
outS = getRowCardName(tr);
break;
case 'cardval':
outS = getRowCardVal(tr);
break;
default:
outA.isLocal = rowIsLocal(tr);
outA.memName = getRowMemName(tr);
outA.memPoints = getRowMemPoints(tr);
outA.cardName = getRowCardName(tr);
outA.cardVal = getRowCardVal(tr);
break;
}
return !outA.length ? outS : outA;
}
function rowIsLocal(tr){
if ( !tr.is("tr") ) return false;
return tr.find("i.flag").filter( function(){ return $.inArray($(this).prop("title"), localShip) > -1; } ).length > 0;
}
function getRowMemName(tr){
if ( !tr.is("tr") ) return "";
var memname = tr.find(".member a").filter( function(){ return $(this).prop("href").indexOf("profiles/show") > -1; }).prop("href");
return "id_"+memname.replace(/\D/g,''); // use ID from account link since usernames aren't unique
}
function getRowMemPoints(tr){
if ( !tr.is("tr") ) return false;
return parseInt( tr.find("td.points").text() );
}
function getRowCardVal(tr){
if ( !tr.is("tr") ) return false;
return parseInt( tr.find(".value").text() );
}
function getRowID(tr){
if ( !tr.is("tr") ) return "";
return tr.prop("id");
}
});
})(jQuery);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment