Skip to content

Instantly share code, notes, and snippets.

@Maximilian-L
Last active February 25, 2016 17:46
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save Maximilian-L/97c481b4ed4eb1e5f718 to your computer and use it in GitHub Desktop.
Save Maximilian-L/97c481b4ed4eb1e5f718 to your computer and use it in GitHub Desktop.
Allows you to add Steam Commuity Market items to a wishlist tab to keep track of items that you might want to purchase at a later point of time.
// ==UserScript==
// @name Steam Community Market Wishlist
// @description Allows you to add Steam Commuity Market items to a wishlist tab to keep track of items that you might want to purchase at a later point of time.
// @match *steamcommunity.com/market*
// @grant none
// ==/UserScript==
//Adjust the following variable's value to your currency's code (see list below)
var marketCurrency = 3; // 1 = $; 2 = £; 3 = €; 5 = pуб; 7 = R$; 8 = ¥; 9 = kr; 10 = Rp; 11 = RM; 12 = P; 13 = S$; 14 = ฿; 17 = TL; 19 = Mex$; 20 = CDN$; 22 = NZ$
//Adjust the following variable's value to your currency's sign (see list above)
var currencySign = '€';
//Adjust the following variable's value to change the speed of animations.
var animationSpeed = 600; //Animation speed in ms. Setting this to zero will disable animations. (Default: 600)
$J(document).ready(function(){
if($J(location).attr('href') == 'http://steamcommunity.com/market/' || $J(location).attr('href') == 'https://steamcommunity.com/market/' || $J(location).attr('href') == 'http://steamcommunity.com/market' || $J(location).attr('href') == 'https://steamcommunity.com/market' || $J(location).attr('href') == 'http://steamcommunity.com/market/#myhistory' || $J(location).attr('href') == 'https://steamcommunity.com/market/#myhistory'){
var itemId = 0;
if(localStorage.getItem('marketWishlist') !== null){
jQuery.each(jQuery.parseJSON(localStorage.getItem('marketWishlist')), function(){
itemId++;
});
}
bFirstCheck = true;
bIsClickFromListings = true;
$J('.market_tab_well_tabs:first').append('<a id="wishlistButton" class="market_tab_well_tab market_tab_well_tab_inactive">' +
'<span class="market_tab_well_tab_left"></span>' +
'<span class="market_tab_well_tab_contents">Wishlisted Items<span id="entryCounter_tab" class="my_market_header_count"> (' + itemId + ')</span></span>' +
'<span class="market_tab_well_tab_right"></span>' +
'<span class="market_tab_well_tab_preload"></span>' +
'</a>');
$J('#wishlistButton').on('click', function(){showWishlist();});
$J('#tabMyMarketHistory')
.off()
.on('click', function(){showHistory();});
}else if($J(location).attr('href').indexOf('steamcommunity.com/market/listings/') > -1){
var alreadyWishlisted = false;
var marketWishlistJson = jQuery.parseJSON(localStorage.getItem('marketWishlist'));
var itemURL = $J(location).attr('href');
try{
jQuery.each(jQuery.parseJSON(localStorage.getItem('marketWishlist')), function(){
if (itemURL.indexOf($(this).itemURL) != -1){
alreadyWishlisted = true;
return false;
}
});
}catch(e){}
if(alreadyWishlisted === false){
$J('#largeiteminfo_item_name').after('<button id="addToWishlistBtn" class="btn_green_white_innerfade btn_medium market_commodity_buy_button">+ Add To Wishlist</button>');
$J('#addToWishlistBtn').on('click', function(){addItemToWishlist();});
}else{
$J('#largeiteminfo_item_name').after('<button id="removeFromWishlistBtn" class="btn_green_white_innerfade btn_medium market_commodity_buy_button">- Remove From Wishlist</button>');
$J('#removeFromWishlistBtn').on('click', function(){removeItemFromWishlist();});
}
}
if($J(location).attr('href').indexOf('#myhistory') > -1){
$J('#wishlistButton')
.off('click')
.on('click', function(){$J('#tabMyMarketHistory').removeClass('market_tab_well_tab_active');$J('#tabMyMarketHistory').addClass('market_tab_well_tab_inactive'); showWishlist();});
}
animationSpeedBackup = animationSpeed;
animationSpeed = 0;
$J('#' + localStorage.getItem('marketWishlistLastPage')).click();
animationSpeed = animationSpeedBackup;
});
function showWishlist(){
if(bFirstCheck === false){
showWishlist_noLoad();
}else{
$J('#myListings').after('<div id="wishlistedItemsContent">' +
'<br/>' +
'<h3 class="my_market_header">' +
'<span class="my_market_header_active">&emsp;Item Wishlist</span><span class="my_market_header_count" id="itemWishlistCounter">&nbsp;&nbsp;(0)</span>' +
'</h3>' +
'<div id="wishlistBox" class="market_listing_table_message" style="margin: 1em;"></div>' +
'</div>');
$J('#wishlistBox').before('<div class="search_controls" align="right" style="margin-top: -2em; margin-right: 1em;">' +
'<div class="gray_bevel for_text_input" style="margin-left: 1em;"><input size="20" placeholder="Maximum price" value="" id="filterSettings"></div>' +
'&nbsp;<button class="btn_green_white_innerfade btn_medium" id="doFilterBtn"><span>Filter</span></button>' +
'</form></div>');
$J('#doFilterBtn').on('click', function(){filterListings();});
var itemId = 0;
try{
jQuery.each(jQuery.parseJSON(localStorage.getItem('marketWishlist')), function(){
itemId++;
var itemPrice = "Fetching...";
var itemName = $(this).itemName;
var itemURL = $(this).itemURL;
var imgUrl = $(this).imgUrl;
var gameName = $(this).gameName;
$J('#wishlistBox').append('<a class="market_listing_row_link" href="' + itemURL + '" id="resultlink_' + itemId + '">' +
'<div class="market_listing_row market_recent_listing_row market_listing_searchresult wishlistItemContainer" id="' + itemId + '">' +
'<img id="result_' + itemId + '_image" src="' + imgUrl + '" style="border-color: #D2D2D2;" class="market_listing_item_img" alt="">' +
'<div class="market_listing_right_cell priceDiv">' +
'<span class="market_table_value">' +
'Starting at:<br>' +
'<span style="color:white" id="itemPriceSpan_' + itemId + '">' + itemPrice + '</span>' +
'</span>' +
'</div> ' +
'<div class="market_listing_item_name_block">' +
'<span class="market_listing_item_name" style="color: #D2D2D2;" id="itemName' + itemId +'" >' + itemName + '</span>' +
'<br>' +
'<span class="market_listing_game_name">' + gameName + '</span>' +
'</div>' +
'<a id="removeEntry' + itemId + '" class="item_market_action_button removeEntryButton">' +
'<span class="item_market_action_button_contents">Remove</span>' +
'</a>' +
'</div>' +
'</a>');
$J('#removeEntry' + itemId).click(function(){removeEntry($J(this).parent().attr("id"));});
var jsonUrl = 'http://steamcommunity.com/market/priceoverview/?currency=' + marketCurrency + '&appid=' + itemURL.split('/')[5] + '&market_hash_name=' + itemURL.split('/')[6];
getItemPrice(jsonUrl, itemId);
});
}catch(e){}
if(itemId === 0){
$J('#wishlistBox').text('You don\'t currently have any items wishlisted.');
}else{
$J('#wishlistBox').prepend('<div class="market_listing_table_header">' +
'<span class="market_listing_right_cell market_listing_my_price market_sortable_column" id="priceTable">&emsp;&emsp;PRICE<span class="market_sort_arrow" id="sortTypeIndicator" style=""></span></span>' +
'<span><span class="market_listing_header_namespacer"></span>NAME</span>' +
'</div>');
$J('#itemWishlistCounter').html('&nbsp;&nbsp;(' + itemId + ')&emsp;<button id="clearWishlist">Clear All</button>');
$J('#priceTable').on('click', function(){sortListings();});
$J('#clearWishlist').on('click', function(){clearWishlist();});
$J('button').css('color', 'black');
}
$J('.priceDiv').css({'position' : 'relative', 'width' : '90px', 'padding-top' : '1.75em', 'font-size' : '85.7%'});
$J('#wishlistedItemsContent')
.hide()
.slideDown(animationSpeed);
$J('#sideBar').slideUp(animationSpeed);
$J('#sellListings').slideUp(animationSpeed);
$J('#tabContentsMyMarketHistory').slideUp(animationSpeed);
$J('#tabContentsMyListings').slideUp(animationSpeed);
$J('#myListings').slideUp(animationSpeed);
$J('img[src="http://steamcommunity-a.akamaihd.net/public/images/login/throbber.gif"]').remove();
$J('#wishlistButton')
.off('click')
.removeClass('market_tab_well_tab_inactive')
.addClass('market_tab_well_tab_active');
$J('#tabMyListings')
.off('click')
.on('click', function(){
$J('#wishlistedItemsContent').slideUp(animationSpeed, function(){
showListings();
});
})
.removeClass('market_tab_well_tab_active')
.addClass('market_tab_well_tab_inactive');
$J('#tabMyMarketHistory')
.off('click')
.on('click', function(){showHistory();})
.removeClass('market_tab_well_tab_active')
.addClass('market_tab_well_tab_inactive');
bFirstCheck = false;
bIsClickFromListings = false;
}
}
function addItemToWishlist(){
var imgSrc = $J('#mypurchase_0_image').attr('src');
if(imgSrc === undefined){
imgSrc = $J('.market_listing_item_img:first').attr('src');
}
var newdata = {};
var itemURL;
var name = $J('h1.hover_item_name').text();
var imgSource = imgSrc;
var gameName = $J('#largeiteminfo_game_name').text();
if ($J(location).attr('href').indexOf('filter') <= -1){
itemURL = $J(location).attr('href');
}else{
itemURL = $J(location).attr('href').split('?filter=')[0];
}
if (localStorage.getItem('marketWishlist') !== null){
var oldJson = JSON.parse(localStorage.getItem('marketWishlist'));
newdata[name] = {"itemName" : name, "imgUrl" : imgSource, "itemURL" : itemURL, "gameName" : gameName};
localStorage.setItem('marketWishlist', JSON.stringify($J.extend(true, oldJson, newdata)));
}else{
newdata[name] = {"itemName" : name, "imgUrl" : imgSource, "itemURL" : itemURL, "gameName" : gameName};
localStorage.setItem('marketWishlist', JSON.stringify(newdata));
}
$J('#addToWishlistBtn').remove();
$J('#largeiteminfo_item_name').after('<button id="removeFromWishlistBtn" class="btn_green_white_innerfade btn_medium market_commodity_buy_button">- Remove From Wishlist</button>');
$J('#removeFromWishlistBtn').on('click', function(){removeItemFromWishlist();});
}
function clearWishlist(){
ShowConfirmDialog('Clear All Listings', 'Are you sure that you want to delete all items from your wishlist?\nThis action cannot be undone!').done(function(){
localStorage.removeItem('marketWishlist');
$J('#itemWishlistCounter').html('&nbsp;&nbsp;(0)&emsp;<button id="clearWishlist">Clear All</button>');
$J('#clearWishlist').on('click', function(){clearWishlist();});
$J('#wishlistBox').slideUp(animationSpeed, function(){
$J('#wishlistBox')
.text('You don\'t currently have any items wishlisted.')
.slideDown(animationSpeed);
$J('#clearWishlist').slideUp(animationSpeed);
});
$J('#entryCounter_tab').html(' (0)');
});
}
function removeItemFromWishlist(){
var name = $J('h1.hover_item_name').text();
var wishlistJson = jQuery.parseJSON(localStorage.getItem('marketWishlist'));
delete wishlistJson[name];
localStorage.setItem('marketWishlist', JSON.stringify(wishlistJson));
$J('#removeFromWishlistBtn').remove();
$J('#largeiteminfo_item_name').after('<button id="addToWishlistBtn" class="btn_green_white_innerfade btn_medium market_commodity_buy_button">+ Add To Wishlist</button>');
$J('#addToWishlistBtn').on('click', function(){addItemToWishlist();});
}
function getItemPrice(url, itemId){
$J.getJSON(url, function(data) {
if(data.lowest_price !== undefined){
$J('#itemPriceSpan_' + itemId).html(data.lowest_price);
}else{
$J('#itemPriceSpan_' + itemId).html("No listings");
}
});
}
function removeEntry(itemId){
var itemName = $J('#itemName' + itemId).text();
var wishlistJson = jQuery.parseJSON(localStorage.getItem('marketWishlist'));
delete wishlistJson[itemName];
localStorage.setItem('marketWishlist', JSON.stringify(wishlistJson));
$J('#' + itemId).slideUp(animationSpeed, function(){
updateCounter();
});
}
function updateCounter(){
var itemId = 0;
jQuery.each(jQuery.parseJSON(localStorage.getItem('marketWishlist')), function(){
itemId++;
});
if(itemId === 0){
$J('#wishlistBox').slideUp(animationSpeed, function(){
$J('#wishlistBox')
.text('You don\'t currently have any items wishlisted.')
.slideDown(animationSpeed);
$J('#clearWishlist').slideUp(animationSpeed, function(){
$J('#itemWishlistCounter').html('&nbsp;&nbsp;(0)');
$J('#entryCounter_tab').html(' (0)');
});
});
}else{
$J('#itemWishlistCounter').html('&nbsp;&nbsp;(' + itemId + ')&emsp;<button id="clearWishlist">Clear All</button>');
$J('#entryCounter_tab').html(' (' + itemId + ')');
$J('#clearWishlist').on('click', function(){clearWishlist();});
$J('button').css('color', 'black');
}
}
function showWishlist_noLoad(){
$J('#sideBar').slideUp(animationSpeed);
$J('#sellListings').slideUp(animationSpeed);
$J('#tabContentsMyListings').slideUp(animationSpeed);
$J('#myListings').slideUp(animationSpeed);
$J('#tabContentsMyMarketHistory').slideUp(animationSpeed);
$J('#wishlistedItemsContent').slideDown(animationSpeed);
$J('#wishlistButton')
.off('click')
.removeClass('market_tab_well_tab_inactive')
.addClass('market_tab_well_tab_active');
$J('#tabMyListings')
.off('click')
.on('click', function(){
$J('#wishlistedItemsContent').slideUp(animationSpeed, function(){
showListings();
});
})
.removeClass('market_tab_well_tab_active')
.addClass('market_tab_well_tab_inactive');
$J('#tabMyMarketHistory')
.off('click')
.on('click', function(){showHistory();})
.removeClass('market_tab_well_tab_active')
.addClass('market_tab_well_tab_inactive');
bIsClickFromListings = false;
}
function showHistory(){
if(bIsClickFromListings === true){
$J('#tabContentsMyListings').show();
$J('#tabContentsMyMarketHistory').hide();
$J('#tabContentsMyListings').slideUp(animationSpeed, function(){
$J('#tabContentsMyMarketHistory').slideDown(animationSpeed);
});
}else{
$J('#wishlistedItemsContent').slideUp(animationSpeed, function(){
$J("#myListings").show();
$J("#tabContentsMyListings").hide();
$J('#tabContentsMyMarketHistory').hide();
$J('#tabContentsMyMarketHistory').slideDown(animationSpeed);
$J('#sellListings').slideDown(animationSpeed);
$J('#sideBar').slideDown(animationSpeed);
});
}
$J('#tabMyMarketHistory')
.off('click')
.removeClass('market_tab_well_tab_inactive')
.addClass('market_tab_well_tab_active');
$J('#tabMyListings')
.off()
.on('click', function(){
$J('#tabContentsMyListings').hide();
$J('#tabContentsMyMarketHistory').show();
$J('#tabContentsMyMarketHistory').slideUp(animationSpeed, function(){
showListings();
});
})
.removeClass('market_tab_well_tab_active')
.addClass('market_tab_well_tab_inactive');
$J('#wishlistButton')
.off('click')
.on('click', function(){showWishlist();})
.removeClass('market_tab_well_tab_active')
.addClass('market_tab_well_tab_inactive');
}
function showListings(){
$J('#myListings').slideDown(animationSpeed);
$J('#sideBar').slideDown(animationSpeed);
$J('#tabContentsMyListings').slideDown(animationSpeed);
$J('#sellListings').slideDown(animationSpeed);
$J('#tabMyListings')
.off('click')
.removeClass('market_tab_well_tab_inactive')
.addClass('market_tab_well_tab_active');
$J('#wishlistButton')
.off('click')
.on('click', function(){showWishlist();})
.removeClass('market_tab_well_tab_active')
.addClass('market_tab_well_tab_inactive');
$J('#tabMyMarketHistory')
.off('click')
.on('click', function(){showHistory();})
.removeClass('market_tab_well_tab_active')
.addClass('market_tab_well_tab_inactive');
bIsClickFromListings = true;
}
$J(window).unload(function(){
localStorage.setItem('marketWishlistLastPage', $J('.market_tab_well_tab_active').attr('id'));
});
function sortListings(){
if ($J('#sortTypeIndicator').text() != '▲' && $J('#sortTypeIndicator').text() != '▼'){
$J('#sortTypeIndicator').text('▲');
sortLowToHigh();
}
else if($J('#sortTypeIndicator').text() == '▲'){
$J('#sortTypeIndicator').text('▼');
sortHighToLow();
}
else if($J('#sortTypeIndicator').text() == '▼'){
$J('#sortTypeIndicator').text('▲');
sortLowToHigh();
}
}
function sortLowToHigh(){
ShowDialog('Feature not yet available', 'The ability to sort items by their price will be added soon!');
}
function sortHighToLow(){
ShowDialog('Feature not yet available', 'The ability to sort items by their price will be added soon!');
}
function sortNumber(num1, num2){
return num1 - num2;
}
function filterListings(){
if ($J('#filterSettings').val() !== ''){
var maxPrice = parseFloat($J('#filterSettings').val().replace(',', '.').replace(currencySign, ''));
}else{
$J('.wishlistItemContainer').each(function(index){
$J('#' + (index + 1)).show();
});
return;
}
$J('.wishlistItemContainer').each(function(index){
$J('#' + (index + 1)).hide();
if(parseFloat($J(this).find('#itemPriceSpan_' + (index + 1)).text()) !== '' && parseFloat($J(this).find('#itemPriceSpan_' + (index + 1)).text().replace(',', '.').replace(currencySign, '')) <= parseFloat(maxPrice)){
$J('#' + (index + 1)).show();
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment