Last active
November 20, 2015 04:43
-
-
Save ezific/6a6cc1e50d6003cabb33 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.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