// ==UserScript== // @name Steam Hotkeys // @namespace http://tampermonkey.net/ // @version 0.1.1 // @description Add hotkeys to navigate the Steam Discovery Queue // @author Lex // @match http://store.steampowered.com/* // @require https://code.jquery.com/jquery-3.2.1.min.js // @require https://greasyfork.org/scripts/5392-waitforkeyelements/code/WaitForKeyElements.js?version=115012 // @grant GM_setValue // @grant GM_getValue // @downloadURL none // ==/UserScript== (function($, undefined) { 'use strict'; // ASCII number or "a" letter var Hotkeys = new Map([ ["KEY_ADD_TO_WISHLIST", "w"], ["KEY_NOT_INTERESTED", "s"], ["KEY_NEXT_QUEUE", "d"], ["KEY_NEXT_QUEUE2", "n"], ]); var ONE_CLICK_ADVANCE = true; var HOTKEYS_ENABLED = true; function loadSettings() { ONE_CLICK_ADVANCE = GM_getValue("ONE_CLICK_ADVANCE", ONE_CLICK_ADVANCE); HOTKEYS_ENABLED = GM_getValue("HOTKEYS_ENABLED", HOTKEYS_ENABLED); } function saveSettings() { GM_setValue("ONE_CLICK_ADVANCE", ONE_CLICK_ADVANCE); GM_setValue("HOTKEYS_ENABLED", HOTKEYS_ENABLED); } // Returns true if currently browsing a queue function inQueue() { return Boolean(document.querySelector("div.next_in_queue_content")); } function clickNextQueue() { document.querySelectorAll("div.btn_next_in_queue, #refresh_queue_btn, .queue_actions_ctn a[href='http://store.steampowered.com/explore/']")[0].click(); } function doc_keyUp(e) { if (!HOTKEYS_ENABLED) return; if (document.activeElement.tagName === 'TEXTAREA' || document.activeElement.tagName === 'TEXT') return; switch (e.keyCode) { case Hotkeys.get("KEY_ADD_TO_WISHLIST"): let rm = document.querySelector("#add_to_wishlist_area_success:not([style*='none'])"); let add = document.querySelector("#add_to_wishlist_area:not([style*='none']) a"); (rm || add).click(); if (ONE_CLICK_ADVANCE && inQueue()) { let keyElement; if (rm !== null) keyElement = "#add_to_wishlist_area:not([style*='none']) a"; else if (add !== null) keyElement = "#add_to_wishlist_area_success:not([style*='none'])"; waitForKeyElements(keyElement, clickNextQueue, true); } break; case Hotkeys.get("KEY_NOT_INTERESTED"): document.querySelector("div.queue_btn_ignore div:not([style*='none'])").click(); if (ONE_CLICK_ADVANCE && inQueue()) { waitForKeyElements("div.queue_btn_active:not([style*='none'])", clickNextQueue, true); } break; case Hotkeys.get("KEY_NEXT_QUEUE2"): case Hotkeys.get("KEY_NEXT_QUEUE"): if (inQueue() || document.querySelector("#refresh_queue_btn") !== null) clickNextQueue(); break; default: break; } } // Adds settings to the Customize your queue dialog box function addHotkeySettings() { var enableChecked = HOTKEYS_ENABLED ? `checked="checked"` : ``; var autoAdvance = ONE_CLICK_ADVANCE ? `checked="checked"` : ``; var HotKeysSettings = `