Forked from ezific/PucaTrade-Sort-by-PPM.user.js
Last active
November 20, 2015 05:06
-
-
Save coandco/f081823f0079d0347d73 to your computer and use it in GitHub Desktop.
PucaTrade Sort By Member's Wanted Value
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name PucaTrade Sort By Member's Wanted Value | |
// @author DACrosby, LLC | |
// @namespace http://dacrosby.com/ | |
// @version 1.4 | |
// @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* | |
// @match https://pucatrade.com/trades* | |
// @match https://*.pucatrade.com/trades* | |
// @grant none | |
// @downloadURL https://gist.github.com/coandco/f081823f0079d0347d73/raw/ccf905d2de8ab790e2ef0536ddcb3e2e41a47be5/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 | |
numPos = ppmPos + 1, | |
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") ); | |
if (table.find("th").eq(numPos).text() != "Cards Wanted") | |
table.find("th").eq(numPos).before( $("<th />").text("Cards Wanted").prop("title","Cards Wanted By Member") ); | |
$(document).ajaxSuccess(function(e,x,s) { | |
done = x.responseText.indexOf("no available trades") != -1; | |
if(done) { | |
$('.headerbar span').text($('.hSendCard').text()+" - Table Loaded"); | |
var wait = setInterval( function(){ | |
var opacity = table.find('tbody').css('opacity'); | |
if (opacity == '1') { | |
clearInterval(wait); | |
addPPM(); | |
} | |
}, 200); | |
$(document).unbind("ajaxSuccess"); | |
$(document).ajaxSuccess(function() { | |
var wait = setInterval( function(){ | |
var opacity = table.find('tbody').css('opacity'); | |
if (opacity == '1') { | |
clearInterval(wait); | |
addPPM(); | |
} | |
}, 200); | |
}); | |
} else { | |
$('table.infinite tbody').infinitescroll("retrieve"); | |
} | |
}); | |
$('table.infinite tbody').infinitescroll("retrieve"); | |
// 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')); | |
sortTablePPM(table,$(this).data('dir')); | |
}); | |
// Numcard sorting | |
table.find("th").eq(numPos).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')); | |
sortTableNumcard(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, | |
memPoints, | |
PPM; | |
if ( typeof ppmArr[ thisMember ] === 'undefined' || !ppmArr[ thisMember ] ) | |
ppmArr[ thisMember ] = []; | |
if ( typeof ppmArr[ thisMember ].ppm === 'undefined' || !ppmArr[ thisMember ].ppm ) | |
ppmArr[ thisMember ].ppm = 0; | |
if ( typeof ppmArr[ thisMember ].numcrd === 'undefined' || !ppmArr[ thisMember ].numcrd ) | |
ppmArr[ thisMember ].numcrd = 0; | |
if (thisMember === "BLANK") { | |
ppmArr[ thisMember ].isLocal = true; | |
ppmArr[ thisMember ].memPts = 0; | |
$(this).remove(); | |
return; | |
} | |
isLocal = getRowData($(this),'isLocal'), | |
memPoints = getRowData($(this), 'memPts'), | |
PPM = getRowData($(this), 'cardVal'); | |
ppmArr[ thisMember ].ppm += PPM; | |
ppmArr[ thisMember ].numcrd += 1; | |
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"), | |
numTitle = $(this).find("td").eq(numPos).prop("title"), | |
thisMember = getRowData($(this), 'memName'), | |
PPM = ppmArr[ thisMember ].ppm, | |
numcrd = ppmArr[ thisMember ].numcrd, | |
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") ); | |
else | |
$(this).find("td").eq(ppmPos).text(PPM).prop("title",thisMember +" wants cards worth "+ PPM +" points"); | |
if ( typeof numTitle === 'undefined' || !numTitle.length ) | |
$(this).find("td").eq(numPos).before( $("<td />").text(numcrd).prop("title",thisMember +" wants "+numcrd+"of your cards") ); | |
else | |
$(this).find("td").eq(numPos).text(numcrd).prop("title",thisMember +" wants "+numcrd+"of your cards"); | |
$(this).find("td").eq(ppmPos).css("background-color", bgColor); | |
}); | |
} | |
// Fn handle sorting on PPM | |
function sortTablePPM(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() ). | |
mPointsA = getRowMemPoints($(a)), | |
mPointsB = getRowMemPoints($(b)); | |
if (valA - valB == 0) { | |
if (asc) | |
return mPointsA - mPointsB; | |
else | |
return mPointsB - mPointsA; | |
} | |
if (asc) | |
return valA - valB; | |
else | |
return valB - valA; | |
}).appendTo(tbody); | |
} | |
// Fn handle sorting on Numcard | |
function sortTableNumcard(table, order) { | |
var asc = order === 'asc', | |
tbody = table.find('tbody'); | |
tbody.find('tr').sort(function(a, b) { | |
var valA = parseInt( $(a).children('td:eq('+numPos+')').text() ), | |
valB = parseInt( $(b).children('td:eq('+numPos+')').text() ), | |
mPointsA = getRowMemPoints($(a)), | |
mPointsB = getRowMemPoints($(b)); | |
if (valA - valB == 0) { | |
if (asc) | |
return mPointsA - mPointsB; | |
else | |
return mPointsB - mPointsA; | |
} | |
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"); | |
if (typeof memname == 'undefined') | |
return ''; | |
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