diff --git a/steam-janitor.user.js b/steam-janitor.user.js index 0602f20..4b4a11a 100644 --- a/steam-janitor.user.js +++ b/steam-janitor.user.js @@ -2,12 +2,15 @@ // @name Steam Janitor // @namespace jetsparrow-steam-janitor // @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/* // @run-at document-end -// @version 0.0.3 +// @version 0.0.4 // @grant GM_setValue // @grant GM_getValue +// @grant GM_xmlhttpRequest +// @grant GM_download +// @connect ggntw.com // @downloadURL https://jetsparrow.github.io/steam-janitor/steam-janitor.user.js // ==/UserScript== @@ -42,6 +45,7 @@ const onVisible = (element, callback) => { observer.observe(element); }; + const selector = { PAGING_INFO: ".workshopBrowsePagingWithBG", ITEM_CONTAINER: ".workshopBrowseItems .workshopItemPreviewHolder", @@ -67,7 +71,7 @@ const cssClass = { hideButton: "janitorHideButton", showButton: "janitorShowButton", filterToggle: "janitorFilterToggle", - hideButton: "janitorhideButton" + downloadButton: "janitorDownloadButton" }; const resource = { @@ -77,19 +81,29 @@ const resource = { btnHideHover:"https://jetsparrow.github.io/steam-janitor/res/janitor_hide_hover.png", btnUnhide:"https://jetsparrow.github.io/steam-janitor/res/janitor_unhide.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 = ` +.${cssClass.filterToggle} * { vertical-align: middle; } + .${cssClass.hiddenFiltered} {display:none !important; } .${cssClass.hiddenUnfiltered} img {opacity: 0.25;} + .${cssClass.hideButton} {width:25px; height:25px;} .${cssClass.hiddenUnfiltered} .${cssClass.hideButton}:hover {background-image:url("${resource.btnUnhideHover}")} .${cssClass.hiddenUnfiltered} .${cssClass.hideButton} {background-image:url("${resource.btnUnhide}")} .${cssClass.unhidden} .${cssClass.hideButton}:hover {background-image:url("${resource.btnHideHover}")} .${cssClass.unhidden} .${cssClass.hideButton} {background-image:url("${resource.btnHide}")} -.${cssClass.filterToggle} * { vertical-align: middle; } -.workshopItem .${cssClass.hideButton} { visibility: hidden; position: absolute; top: 4px; right: 6px; } +.workshopItem .${cssClass.hideButton} { visibility: hidden; } .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 = { @@ -101,12 +115,16 @@ const defaultModData = () => { d.hide = false; return d; } + const loadModData = (modId) => { var j = GM_getValue("modid:" + modId, ""); return j == "" ? defaultModData() : JSON.parse(j); } + const saveModData = (modId, data) => GM_setValue("modid:" + modId, JSON.stringify(data)); + +// Update classes on mod container when model changes const updateHiddenClass = (doc, modId, filterOn) => { var container = doc.getElementById(modId)?.parentElement?.parentElement; if (!container) return; @@ -120,6 +138,7 @@ const updateHiddenClass = (doc, modId, filterOn) => { else container.classList.add(cssClass.hiddenUnfiltered); } +// When pressing the hide/unhide button on mod container const toggleHidden = (doc, modId) => { var d = loadModData(modId); d.hide = !d.hide; @@ -128,15 +147,53 @@ const toggleHidden = (doc, modId) => { updateHiddenClass(doc, modId, filterOn); } -const addHideButtons = (doc, container, id) => { - const controls = htmlToElement(doc, `