Last active
January 17, 2020 19:15
-
-
Save Kein/9fd38b55590989b7b71090797b8e5d43 to your computer and use it in GitHub Desktop.
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 Wishlist Bulk Remover | |
// @version 0.1 | |
// @description Removes wishlist items in bulk | |
// @author Kein | |
// @match *://store.steampowered.com/wishlist/profiles/* | |
// @match *://store.steampowered.com/wishlist/id/* | |
// @grant none | |
// @run-at document-end | |
// ==/UserScript== | |
(function() { | |
'use strict'; | |
if (!g_bCanEdit) | |
return; | |
const appIDs = []; | |
const x = "<input type='checkbox' class='bulk_checkbox' name='slct_item' style='position: relative; left: calc(50% - 4px); top: 5px;'>"; | |
const btn = "<div id='bulk_delete' class='filter_tab dropdown settings_tab'> <img src='data:image/svg+xml;base64, PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNjEyIj48c3R5bGU+LmF7ZmlsbDojZmZmO308L3N0eWxlPjxwYXRoIGQ9Ik01MTAuOCA4NS45Yy0yOS4zLTE0LjktNTguNC0xNi4zLTU5LjYtMTYuNCAtMC4yIDAtMC41IDAtMC43IDBINDA0LjJjMC0wLjEgMC0wLjMgMC0wLjQgMC0yNi44LTEyLjgtNDguMS0zNS45LTU5LjkgLTE2LjEtOC4yLTMxLjktOS4xLTMzLjYtOS4yQzMzNC40IDAgMzM0LjIgMCAzMzMuOSAwaC01NS44Yy0wLjIgMC0wLjUgMC0wLjcgMCAtMS43IDAuMS0xNy41IDEtMzMuNiA5LjJDMjIwLjYgMjEgMjA3LjggNDIuMyAyMDcuOCA2OS4xYzAgMC4xIDAgMC4zIDAgMC40aC00Ni4zYy0wLjIgMC0wLjUgMC0wLjcgMCAtMS4yIDAuMS0zMC4zIDEuNC01OS42IDE2LjQgLTI4LjIgMTQuNC02MS45IDQ0LjEtNjEuOSAxMDMuNSAwIDkuNiA3LjggMTcuNCAxNy40IDE3LjRoMTUuMmw2Ny4xIDM5MC44YzEuNCA4LjMgOC43IDE0LjQgMTcuMSAxNC40aDI5OS45YzguNCAwIDE1LjctNi4xIDE3LjEtMTQuNGw2Ny4xLTM5MC44aDE1LjJjOS42IDAgMTcuNC03LjggMTcuNC0xNy4zQzU3Mi43IDEzMCA1MzkuMSAxMDAuMyA1MTAuOCA4NS45ek03NS40IDE3Mi4xYzQuMi0yNC41IDE3LjgtNDIuOSA0MC43LTU0LjggMjEuMy0xMS4xIDQzLjMtMTIuOSA0NS45LTEzLjFoMjg4YzIuNiAwLjIgMjQuMSAxLjkgNDUgMTIuNiAyMy40IDExLjkgMzcuMyAzMC41IDQxLjYgNTUuM0w3NS40IDE3Mi4xIDc1LjQgMTcyLjF6TTI0Mi41IDY5LjFjMC0xMy42IDUuMi0yMi43IDE2LjItMjguNiA4LjktNC44IDE4LjQtNS43IDE5LjktNS44aDU0LjdjMS43IDAuMSAxMS4xIDEuMSAxOS45IDUuOCAxMS4xIDUuOSAxNi4yIDE1IDE2LjIgMjguNiAwIDAuMSAwIDAuMyAwIDAuNEgyNDIuNUMyNDIuNSA2OS40IDI0Mi41IDY5LjMgMjQyLjUgNjkuMXpNNDQxLjMgNTc3LjNIMTcwLjdsLTYzLjYtMzcwLjVoMzk3LjhMNDQxLjMgNTc3LjN6IiBjbGFzcz0iYSIvPjxwYXRoIGQ9Ik0zMDYgNTE5LjZjOS42IDAgMTcuNC03LjggMTcuNC0xNy4zVjI1Ny45YzAtOS42LTcuOC0xNy4zLTE3LjMtMTcuMyAtOS42IDAtMTcuMyA3LjgtMTcuMyAxNy40VjUwMi4yQzI4OC43IDUxMS44IDI5Ni40IDUxOS42IDMwNiA1MTkuNnoiIGNsYXNzPSJhIi8+PHBhdGggZD0iTTIwMy44IDUwMy44YzAuOCA5IDguNCAxNS44IDE3LjMgMTUuOCAwLjUgMCAxIDAgMS42LTAuMSA5LjUtMC44IDE2LjYtOS4zIDE1LjctMTguOGwtMjEuNy0yNDQuM2MtMC44LTkuNS05LjMtMTYuNi0xOC44LTE1LjcgLTkuNSAwLjgtMTYuNiA5LjMtMTUuNyAxOC44TDIwMy44IDUwMy44eiIgY2xhc3M9ImEiLz48cGF0aCBkPSJNMzg5LjQgNTE5LjVjMC41IDAgMSAwLjEgMS42IDAuMSA4LjkgMCAxNi41LTYuOCAxNy4zLTE1LjhsMjEuNy0yNDQuM2MwLjgtOS41LTYuMi0xOC0xNS43LTE4LjggLTkuNS0wLjktMTggNi4yLTE4LjggMTUuN2wtMjEuNyAyNDQuM0MzNzIuOCA1MTAuMiAzNzkuOSA1MTguNyAzODkuNCA1MTkuNXoiIGNsYXNzPSJhIi8+PC9zdmc+'></div>"; | |
let hbeat = setInterval(firstPass, 200, document.getElementById("throbber")); | |
const wl = document.querySelector('#wishlist_ctn'); | |
const s = document.querySelector(".search"); | |
// Functions | |
function firstPass(t) | |
{ | |
if (t == null || t == undefined) | |
{ | |
resetTimer(hbeat); | |
} | |
else if (t.style.display.length >= 3 && g_Wishlist.rgElements != null) | |
{ | |
resetTimer(hbeat); | |
let k = Object.keys(g_Wishlist.rgElements); | |
for (let i = 0; i < k.length; i++) | |
{ | |
let n = g_Wishlist.rgElements[k[i]][0]; | |
if (n.querySelector(".bulk_checkbox") == null) | |
n.firstElementChild.firstElementChild.innerHTML += x; | |
} | |
mainPass(); | |
} | |
} | |
function mainPass() | |
{ | |
if (wl) | |
{ | |
s.innerHTML = btn + s.innerHTML; | |
s.querySelector("#bulk_delete").addEventListener("click", clF, false); | |
wl.addEventListener("click", CheckEvent, false); | |
var observer = new MutationObserver(function(mutations) { | |
mutations.forEach(function(mutation) { | |
if (mutation.type === 'childList' && mutation.target.id === 'wishlist_ctn' && mutation.addedNodes.length > 0) { | |
setTimeout(addCheckBox(mutation.addedNodes), 0); | |
} | |
}); | |
}); | |
observer.observe(wl, { childList: true }); | |
} | |
} | |
function resetTimer(obj) { | |
clearInterval(obj); | |
obj = hbeat = null; | |
} | |
function clF() { | |
let me = event.target; | |
if (me.id === "bulk_delete" || me.parentElement.id === "bulk_delete") { | |
if (appIDs.length < 1) | |
ShowAlertDialog("Wishlist Bulk remover", "Does not look like you have any games marked", "OK"); | |
else { | |
ShowConfirmDialog("Confirm mass removal", "Remove '%1$s' selected entries from your wishlist?".replace(/%1\$s/,V_EscapeHTML(appIDs.length))).done(function(){ | |
let counter = appIDs.length; | |
let dlg = ShowBlockingWaitDialog('Removal in process', 'Entries left: #' + counter); | |
for (let i = 0; i < appIDs.length; i++) { | |
const nAppId = appIDs[i]; | |
$J.ajax({ | |
type: "POST", | |
url: g_strWishlistBaseURL + 'remove/', | |
data: {'appid':nAppId, sessionid: g_sessionID}, | |
error: function (xhr, ajaxOptions, thrownError) { | |
console.log('Received error from SteamAPI for appID ' + nAppId + ': ' + thrownError + '|' + xhr.status); | |
}, | |
complete: function (xhr, ajaxOptions, thrownError) { | |
dlg.Dismiss(); | |
if (counter > 0) { | |
dlg = ShowBlockingWaitDialog('Removal in process', 'Entries left: #' + --counter); | |
if (counter <= 0) | |
setTimeout(dlg.Dismiss(), 3000); | |
} | |
}.bind(dlg).bind(counter) | |
}); | |
delete g_rgAppInfo[nAppId]; | |
} | |
appIDs.clear(); | |
$J('#wishlist_ctn').removeClass ('sorting'); | |
g_Wishlist.rgAllApps = Object.keys(g_rgAppInfo); | |
g_Wishlist.Update(true); | |
}); | |
} | |
} | |
} | |
function addCheckBox(nodes) { | |
if (nodes != null && nodes != undefined) { | |
for (let i = 0; i < nodes.length; i++) { | |
let u = nodes[i].querySelector(".bulk_checkbox"); | |
if (u == null || u == undefined) { | |
nodes[i].firstElementChild.firstElementChild.innerHTML += x; | |
} | |
} | |
} | |
} | |
function CheckEvent() { | |
let me = event.target; | |
if (me.name === "slct_item") { | |
let id = me.closest('.wishlist_row').dataset.appId; | |
let has = appIDs.includes(id); | |
if (me.checked && !has) | |
appIDs.push(id); | |
else if (!me.checked && has) | |
appIDs.splice(appIDs.indexOf(id), 1); | |
} | |
} | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment