mirror of
https://github.com/Jetsparrow/steam-janitor.git
synced 2026-01-21 06:06:09 +03:00
Version 0.0.4
- added download button via ggntw.com
This commit is contained in:
parent
036cf4df77
commit
3c3a7c8180
@ -2,12 +2,15 @@
|
|||||||
// @name Steam Janitor
|
// @name Steam Janitor
|
||||||
// @namespace jetsparrow-steam-janitor
|
// @namespace jetsparrow-steam-janitor
|
||||||
// @author Jetsparrow
|
// @author Jetsparrow
|
||||||
// @description Hide unwanted user content in browse view, endless scrolling
|
// @description Hide unwanted user content in browse view, endless scrolling, downloads
|
||||||
// @match *://*.steamcommunity.com/workshop/browse/*
|
// @match *://*.steamcommunity.com/workshop/browse/*
|
||||||
// @run-at document-end
|
// @run-at document-end
|
||||||
// @version 0.0.3
|
// @version 0.0.4
|
||||||
// @grant GM_setValue
|
// @grant GM_setValue
|
||||||
// @grant GM_getValue
|
// @grant GM_getValue
|
||||||
|
// @grant GM_xmlhttpRequest
|
||||||
|
// @grant GM_download
|
||||||
|
// @connect ggntw.com
|
||||||
// @downloadURL https://jetsparrow.github.io/steam-janitor/steam-janitor.user.js
|
// @downloadURL https://jetsparrow.github.io/steam-janitor/steam-janitor.user.js
|
||||||
// ==/UserScript==
|
// ==/UserScript==
|
||||||
|
|
||||||
@ -42,6 +45,7 @@ const onVisible = (element, callback) => {
|
|||||||
|
|
||||||
observer.observe(element);
|
observer.observe(element);
|
||||||
};
|
};
|
||||||
|
|
||||||
const selector = {
|
const selector = {
|
||||||
PAGING_INFO: ".workshopBrowsePagingWithBG",
|
PAGING_INFO: ".workshopBrowsePagingWithBG",
|
||||||
ITEM_CONTAINER: ".workshopBrowseItems .workshopItemPreviewHolder",
|
ITEM_CONTAINER: ".workshopBrowseItems .workshopItemPreviewHolder",
|
||||||
@ -67,7 +71,7 @@ const cssClass = {
|
|||||||
hideButton: "janitorHideButton",
|
hideButton: "janitorHideButton",
|
||||||
showButton: "janitorShowButton",
|
showButton: "janitorShowButton",
|
||||||
filterToggle: "janitorFilterToggle",
|
filterToggle: "janitorFilterToggle",
|
||||||
hideButton: "janitorhideButton"
|
downloadButton: "janitorDownloadButton"
|
||||||
};
|
};
|
||||||
|
|
||||||
const resource = {
|
const resource = {
|
||||||
@ -77,19 +81,29 @@ const resource = {
|
|||||||
btnHideHover:"https://jetsparrow.github.io/steam-janitor/res/janitor_hide_hover.png",
|
btnHideHover:"https://jetsparrow.github.io/steam-janitor/res/janitor_hide_hover.png",
|
||||||
btnUnhide:"https://jetsparrow.github.io/steam-janitor/res/janitor_unhide.png",
|
btnUnhide:"https://jetsparrow.github.io/steam-janitor/res/janitor_unhide.png",
|
||||||
btnUnhideHover:"https://jetsparrow.github.io/steam-janitor/res/janitor_unhide_hover.png",
|
btnUnhideHover:"https://jetsparrow.github.io/steam-janitor/res/janitor_unhide_hover.png",
|
||||||
|
btnDownload:"https://jetsparrow.github.io/steam-janitor/res/janitor_download.png",
|
||||||
|
btnDownloadHover:"https://jetsparrow.github.io/steam-janitor/res/janitor_download_hover.png",
|
||||||
};
|
};
|
||||||
|
|
||||||
const janitorCss = `
|
const janitorCss = `
|
||||||
|
.${cssClass.filterToggle} * { vertical-align: middle; }
|
||||||
|
|
||||||
.${cssClass.hiddenFiltered} {display:none !important; }
|
.${cssClass.hiddenFiltered} {display:none !important; }
|
||||||
.${cssClass.hiddenUnfiltered} img {opacity: 0.25;}
|
.${cssClass.hiddenUnfiltered} img {opacity: 0.25;}
|
||||||
|
|
||||||
.${cssClass.hideButton} {width:25px; height:25px;}
|
.${cssClass.hideButton} {width:25px; height:25px;}
|
||||||
.${cssClass.hiddenUnfiltered} .${cssClass.hideButton}:hover {background-image:url("${resource.btnUnhideHover}")}
|
.${cssClass.hiddenUnfiltered} .${cssClass.hideButton}:hover {background-image:url("${resource.btnUnhideHover}")}
|
||||||
.${cssClass.hiddenUnfiltered} .${cssClass.hideButton} {background-image:url("${resource.btnUnhide}")}
|
.${cssClass.hiddenUnfiltered} .${cssClass.hideButton} {background-image:url("${resource.btnUnhide}")}
|
||||||
.${cssClass.unhidden} .${cssClass.hideButton}:hover {background-image:url("${resource.btnHideHover}")}
|
.${cssClass.unhidden} .${cssClass.hideButton}:hover {background-image:url("${resource.btnHideHover}")}
|
||||||
.${cssClass.unhidden} .${cssClass.hideButton} {background-image:url("${resource.btnHide}")}
|
.${cssClass.unhidden} .${cssClass.hideButton} {background-image:url("${resource.btnHide}")}
|
||||||
.${cssClass.filterToggle} * { vertical-align: middle; }
|
.workshopItem .${cssClass.hideButton} { visibility: hidden; }
|
||||||
.workshopItem .${cssClass.hideButton} { visibility: hidden; position: absolute; top: 4px; right: 6px; }
|
|
||||||
.workshopItem:hover .${cssClass.hideButton} { visibility: visible; position: absolute; top: 4px; right: 6px;}
|
.workshopItem:hover .${cssClass.hideButton} { visibility: visible; position: absolute; top: 4px; right: 6px;}
|
||||||
|
|
||||||
|
.${cssClass.downloadButton} {width:25px; height:25px;}
|
||||||
|
.${cssClass.downloadButton}:hover {background-image:url("${resource.btnDownloadHover}")}
|
||||||
|
.${cssClass.downloadButton} {background-image:url("${resource.btnDownload}")}
|
||||||
|
.workshopItem .${cssClass.downloadButton} { visibility: hidden; }
|
||||||
|
.workshopItem:hover .${cssClass.downloadButton} { visibility: visible; position: absolute; top: 4px; right: 35px;}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const setting = {
|
const setting = {
|
||||||
@ -101,12 +115,16 @@ const defaultModData = () => {
|
|||||||
d.hide = false;
|
d.hide = false;
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
const loadModData = (modId) => {
|
const loadModData = (modId) => {
|
||||||
var j = GM_getValue("modid:" + modId, "");
|
var j = GM_getValue("modid:" + modId, "");
|
||||||
return j == "" ? defaultModData() : JSON.parse(j);
|
return j == "" ? defaultModData() : JSON.parse(j);
|
||||||
}
|
}
|
||||||
|
|
||||||
const saveModData = (modId, data) => GM_setValue("modid:" + modId, JSON.stringify(data));
|
const saveModData = (modId, data) => GM_setValue("modid:" + modId, JSON.stringify(data));
|
||||||
|
|
||||||
|
|
||||||
|
// Update classes on mod container when model changes
|
||||||
const updateHiddenClass = (doc, modId, filterOn) => {
|
const updateHiddenClass = (doc, modId, filterOn) => {
|
||||||
var container = doc.getElementById(modId)?.parentElement?.parentElement;
|
var container = doc.getElementById(modId)?.parentElement?.parentElement;
|
||||||
if (!container) return;
|
if (!container) return;
|
||||||
@ -120,6 +138,7 @@ const updateHiddenClass = (doc, modId, filterOn) => {
|
|||||||
else container.classList.add(cssClass.hiddenUnfiltered);
|
else container.classList.add(cssClass.hiddenUnfiltered);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// When pressing the hide/unhide button on mod container
|
||||||
const toggleHidden = (doc, modId) => {
|
const toggleHidden = (doc, modId) => {
|
||||||
var d = loadModData(modId);
|
var d = loadModData(modId);
|
||||||
d.hide = !d.hide;
|
d.hide = !d.hide;
|
||||||
@ -128,15 +147,53 @@ const toggleHidden = (doc, modId) => {
|
|||||||
updateHiddenClass(doc, modId, filterOn);
|
updateHiddenClass(doc, modId, filterOn);
|
||||||
}
|
}
|
||||||
|
|
||||||
const addHideButtons = (doc, container, id) => {
|
// When pressing the download button on mod container
|
||||||
const controls = htmlToElement(doc, `<div class="${cssClass.hideButton}"> </>`);
|
const downloadMod = (doc, modId) => {
|
||||||
controls.onclick = (e) => {
|
const id = modId.replace("sharedfile_", "");
|
||||||
|
GM_xmlhttpRequest(
|
||||||
|
{
|
||||||
|
url:"https://api.ggntw.com/steam.request",
|
||||||
|
method: "POST",
|
||||||
|
data: JSON.stringify(
|
||||||
|
{
|
||||||
|
url:"https://steamcommunity.com/sharedfiles/filedetails/?id=" + id
|
||||||
|
}),
|
||||||
|
headers:
|
||||||
|
{
|
||||||
|
"Content-type": "application/json; charset=UTF-8"
|
||||||
|
},
|
||||||
|
onload: function(response)
|
||||||
|
{
|
||||||
|
if (response.status>299) {
|
||||||
|
throw new Error(`HTTP error! Status: ${response.status}`);
|
||||||
|
}
|
||||||
|
const res = JSON.parse(response.responseText);
|
||||||
|
console.log(res);
|
||||||
|
const name = res.url.substring(res.url.lastIndexOf('/') + 1);
|
||||||
|
GM_download(res.url, name);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Add hide butons to mod container
|
||||||
|
const addJanitorButtons = (doc, container, id) => {
|
||||||
|
const hideButton = htmlToElement(doc, `<div class="${cssClass.hideButton}"> </>`);
|
||||||
|
hideButton.onclick = (e) => {
|
||||||
e.cancelBubble = true;
|
e.cancelBubble = true;
|
||||||
toggleHidden(document, id);
|
toggleHidden(document, id);
|
||||||
};
|
};
|
||||||
container.append(controls);
|
container.append(hideButton);
|
||||||
|
|
||||||
|
const downloadButton = htmlToElement(doc, `<div class="${cssClass.downloadButton}"> </>`);
|
||||||
|
downloadButton.onclick = (e) => {
|
||||||
|
e.cancelBubble = true;
|
||||||
|
downloadMod(document, id);
|
||||||
|
};
|
||||||
|
container.append(downloadButton);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update all loaded mod containers, update their visibility and add janitor buttons if necessary
|
||||||
const processContainers = (doc) => {
|
const processContainers = (doc) => {
|
||||||
const filterOn = GM_getValue(setting.filterEnabled);
|
const filterOn = GM_getValue(setting.filterEnabled);
|
||||||
for (var el of doc.querySelectorAll(selector.ITEM_CONTAINER)){
|
for (var el of doc.querySelectorAll(selector.ITEM_CONTAINER)){
|
||||||
@ -146,7 +203,7 @@ const processContainers = (doc) => {
|
|||||||
|
|
||||||
if (container.janitorButtonsAdded) continue;
|
if (container.janitorButtonsAdded) continue;
|
||||||
container.janitorButtonsAdded = true;
|
container.janitorButtonsAdded = true;
|
||||||
addHideButtons(doc, container, id);
|
addJanitorButtons(doc, container, id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -181,6 +238,7 @@ const loadNextPage = (url) => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// When the global filter toggle is pressed
|
||||||
function toggleFilter(checkbox) {
|
function toggleFilter(checkbox) {
|
||||||
GM_setValue(setting.filterEnabled, checkbox.checked);
|
GM_setValue(setting.filterEnabled, checkbox.checked);
|
||||||
const doc = checkbox.ownerDocument;
|
const doc = checkbox.ownerDocument;
|
||||||
@ -189,6 +247,7 @@ function toggleFilter(checkbox) {
|
|||||||
processContainers(doc);
|
processContainers(doc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// main
|
||||||
(() => {
|
(() => {
|
||||||
const load = () => {
|
const load = () => {
|
||||||
addGlobalStyle(document, janitorCss);
|
addGlobalStyle(document, janitorCss);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user