您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds buttons to easily accept and return all daily gifts.
// ==UserScript== // @name 🐭️ MouseHunt - Better Gifts / Gift Buttons // @description Adds buttons to easily accept and return all daily gifts. // @version 2.1.0 // @license MIT // @author bradp // @namespace bradp // @match https://www.mousehuntgame.com/* // @icon https://i.mouse.rip/mh-improved/icon-64.png // @run-at document-end // @grant none // @require https://cdn.jsdelivr.net/npm/[email protected] // ==/UserScript== var mhui = (() => { var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var __async = (__this, __arguments, generator) => { return new Promise((resolve, reject) => { var fulfilled = (value) => { try { step(generator.next(value)); } catch (e) { reject(e); } }; var rejected = (value) => { try { step(generator.throw(value)); } catch (e) { reject(e); } }; var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); step((generator = generator.apply(__this, __arguments)).next()); }); }; // src/modules/better-gifts/index.js var better_gifts_exports = {}; __export(better_gifts_exports, { default: () => better_gifts_default }); // src/utils/event-registry.js var eventsAdded = {}; var onEvent = (event, callback, remove = false) => { if (!eventRegistry) { return; } const id = `${event}-${remove.toString()}-${callback.toString()}`; if (eventsAdded[id]) { return; } eventsAdded[id] = true; eventRegistry.addEventListener(event, callback, null, remove); }; // src/utils/styles.js var addModuleStyles = (styles, identifier = "mh-improved-styles", replace = false) => { const existingStyles = document.querySelector(`#${identifier}`); styles = Array.isArray(styles) ? styles.join("\n") : styles; if (existingStyles) { if (replace) { existingStyles.innerHTML = styles; } else { existingStyles.innerHTML += styles; } return existingStyles; } const style = document.createElement("style"); style.id = identifier; style.innerHTML = styles; document.head.append(style); return style; }; var addStyles = (styles, module = false, identifier = "mh-improved-styles") => { if (!module) { throw new Error("Module ID is required for adding module styles.", module); } const key = `${identifier}-${module}`; let stylesEl = addModuleStyles(styles, key, true); onEvent(`mh-improved-settings-changed-${module}`, (enabled) => { if (enabled) { stylesEl = addModuleStyles(styles, key, true); } else if (stylesEl) { stylesEl.remove(); } }); }; // src/utils/settings.js var getSettingDirect = (key = null, defaultValue = null, identifier = "mousehunt-improved-settings") => { const settings = JSON.parse(localStorage.getItem(identifier)) || {}; if (!key) { return settings; } if (!key.includes(".")) { if (settings[key] === void 0) { return defaultValue; } return settings[key]; } const groupAndKey = getGroupAndKey(key); if (!groupAndKey.group) { if (settings[groupAndKey.key] === void 0) { return defaultValue; } return settings[groupAndKey.key]; } const groupSettings = settings[groupAndKey.group] || {}; if (groupSettings[groupAndKey.key] === void 0) { return defaultValue; } return groupSettings[groupAndKey.key]; }; var getGroupAndKey = (key) => { const split = key.split("."); if (split.length === 1) { return { group: null, key: split[0] }; } if (split[0] === "location-huds-enabled") { return { group: "location-huds-enabled", key: split[1] }; } return { group: `${split[0]}-settings`, key: split[1] }; }; var getSetting = (key, defaultValue = false) => { return getSettingDirect(key, defaultValue, "mousehunt-improved-settings"); }; // src/utils/elements.js var makeElement = (tag, classes = "", text = "", appendTo = null) => { const element = document.createElement(tag); if (Array.isArray(classes)) { classes = classes.join(" "); } if (classes && classes.length) { element.className = classes; } element.innerHTML = text; if (appendTo) { appendTo.append(element); return appendTo; } return element; }; // src/utils/events.js var requestCallbacks = {}; var onRequestHolder = null; var onRequest = (url = null, callback = null, skipSuccess = false, ignore = []) => { url = "*" === url ? "*" : `managers/ajax/${url}`; if (ignore.includes(url)) { return; } if (!callback) { return; } if (!requestCallbacks[url]) { requestCallbacks[url] = []; } requestCallbacks[url].push({ callback, skipSuccess }); if (onRequestHolder) { return; } const req = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function() { this.addEventListener("load", function() { if (this.responseText) { let response = {}; try { response = JSON.parse(this.responseText); } catch (e) { return; } Object.keys(requestCallbacks).forEach((key) => { if ("*" === key || this.responseURL.includes(key)) { requestCallbacks[key].forEach((item) => { if (item.callback && typeof item.callback === "function" && (item.skipSuccess || (response == null ? void 0 : response.success))) { item.callback(response); } }); } }); } }); Reflect.apply(req, this, arguments); }; onRequestHolder = true; }; var getDialogMapping = () => { return { treasureMapPopup: "map", itemViewPopup: "item", mouseViewPopup: "mouse", largerImage: "image", convertibleOpenViewPopup: "convertible", adventureBookPopup: "adventureBook", marketplaceViewPopup: "marketplace", giftSelectorViewPopup: "gifts", supportPageContactUsForm: "support", MHCheckout: "premiumShop" }; }; var onDialogShow = (overlay = null, callback = null, once = false) => { const identifier = callback.toString().replaceAll(/[^\w-]/gi, ""); eventRegistry.addEventListener("js_dialog_show", () => { if (!activejsDialog) { return; } const tokens = activejsDialog.getAllTokens(); if (!tokens || !tokens["{*content*}"] || !tokens["{*content*}"].value || tokens["{*content*}"].value === "" || tokens["{*content*}"].value.includes('data-item-type=""') || // Item view. tokens["{*content*}"].value.includes('data-mouse-id=""')) { return; } const atts = activejsDialog.getAttributes(); let dialogType = atts.className.replace("jsDialogFixed", "").replace("wide", "").replace("default", "").replaceAll(" ", " ").replaceAll(" ", ".").trim(); if (dialogType.endsWith(".")) { dialogType = dialogType.slice(0, -1); } if ((!overlay || "all" === overlay) && "function" === typeof callback) { return callback(); } const dialogMapping = getDialogMapping(); if ("function" === typeof callback && (overlay === dialogType || overlay === dialogMapping[dialogType])) { return callback(); } }, null, once, 0, identifier); }; var onDeactivation = (module, callback) => { onEvent("mh-improved-settings-changed", ({ key, value }) => { if (key === module && !value) { callback(); } }); }; // src/utils/messages.js hadAddedErrorStyles = false; // src/utils/templates.js var replaceInTemplate = (templateId, replacements) => { let templateContent = hg.utils.TemplateUtil.getTemplate(templateId); replacements.forEach((replacement) => { templateContent = templateContent.replace(replacement[0], replacement[1]); }); hg.utils.TemplateUtil.addTemplate(templateId, templateContent); }; // src/modules/better-gifts/settings/index.js var settings_default = () => __async(void 0, null, function* () { const orderOptions = [ { name: "Newest to Oldest", value: "default" }, { name: "Oldest to Newest", value: "reverse" } ]; const skipBadGiftOptions = [ { name: "Skip all non-GOTD gifts", value: "skip" }, { name: "Don't skip any gifts", value: "no-skip" }, { name: "Skip Mozzarella Cheese only", value: "mozzarella" }, { name: "Skip Stale Cheese only", value: "stale" }, { name: "Skip Radioactive Sludge only", value: "sludge" }, { name: "Skip Mozz. Cheese & Stale Cheese", value: "mozzarella-stale" }, { name: "Skip Mozz. Cheese & Radioactive Sludge", value: "mozzarella-sludge" }, { name: "Skip Stale Cheese & Radioactive Sludge", value: "stale-sludge" } ]; return [ { id: "better-gifts.send-order", title: "Order to accept/send", default: [orderOptions[0]], description: "", settings: { type: "multi-select", number: 1, options: orderOptions } }, { id: "better-gifts.ignore-bad-gifts", title: "Ignore gifts", default: [skipBadGiftOptions[0]], description: "", settings: { type: "multi-select", number: 1, options: skipBadGiftOptions } } ]; }); // src/modules/better-gifts/styles.css var styles_default = '.giftSelectorView-giftContainer .giftSelectorView-gift.gift_of_the_day{width:20%}#bulk-gifting-gift-buttons{position:relative;display:flex;justify-content:flex-end;margin-bottom:10px}#bulk-gifting-gift-buttons .mh-gift-button{padding:0 15px;font-weight:400}#bulk-gifting-gift-buttons .mh-gift-buttons-accept{margin-right:5px}#bulk-gifting-gift-buttons .mh-gift-buttons-paid-gifts{margin-right:10px}.giftSelectorView-inbox-giftContainer{height:auto;min-height:300px;max-height:75vh}.giftSelectorView-inbox-giftRow.complete{height:25px;padding-top:5px;padding-left:15px;border:none;box-shadow:none}.giftSelectorView-inbox-giftRow.complete .giftSelectorView-inbox-gift-thumb{display:inline}.giftSelectorView-inbox-giftRow.complete .itemImage{display:inline-block;width:25px;height:25px}.giftSelectorView-inbox-giftRow.complete .giftSelectorView-inbox-gift-details{width:90%}.mh-gift-buttons-send-random,.mh-gift-buttons-send-faves{margin-top:-2px;margin-left:10px}.giftSelectorView-gift.sendable.gift.gift_of_the_day{flex:1}.giftSelectorView-gift .giftSelectorView-gift-padding{min-width:75px;border:1px solid #dcdcdc;box-shadow:none}.giftSelectorView-gift.gift_of_the_day .giftSelectorView-gift-padding{background-color:#a5e3ff}.giftSelectorView-scroller.giftSelectorView-giftContainer{display:flex;flex-wrap:wrap;justify-content:space-around}.giftSelectorView-gift.gift_of_the_day:hover .giftSelectorView-gift-padding{background-color:#0090ff}body #overlayPopup .giftSelectorView-scroller.giftSelectorView-giftContainer{min-height:unset}.giftSelectorView-friend.complete .giftSelectorView-friend-padding:before{bottom:9px;left:10px;z-index:1;filter:drop-shadow(0 0 3px #b9ff5d) drop-shadow(1px 1px 4px #b9ff5d) drop-shadow(-1px -1px 3px #b9ff5d)}.mh-gift-buttons-clone-wrapper{scrollbar-color:#938f83 #e9e1c6;max-height:calc(75vh - 175px);overflow-y:auto}.mh-gift-buttons-clone-wrapper .giftSelectorView-gift-description{display:flex;flex-direction:column-reverse;align-items:stretch}.mh-gift-buttons-clone-wrapper .giftSelectorView-gift-padding{min-width:unset;padding:0 2px;margin:0;border:none}.mh-gift-buttons-clone-wrapper .giftSelectorView-gift-name{height:unset}.mh-gift-buttons-clone-wrapper .giftSelectorView-gift-name span{padding:5px}.mh-gift-buttons-clone-wrapper .giftSelectorView-content-leftBar-highlightBlock{padding:5px;margin:0 5px 0 10px;background-color:transparent}.mh-gift-buttons-clone-wrapper .giftSelectorView-friendRow-returnCost{bottom:3px}.giftSelectorView-content-leftBar>.giftSelectorView-content-leftBar-highlightBlock:before{position:absolute;inset:0;z-index:1;content:"";border-radius:10px 0 0 10px;box-shadow:0 4px 4px -3px #000}.giftSelectorView-content-leftBar>.giftSelectorView-content-leftBar-highlightBlock{position:relative}.giftSelectorView-friend.complete .giftSelectorView-friend-padding:after,.mh-gift-buttons-clone-wrapper .giftSelectorView-gift.gift_of_the_day .giftSelectorView-gift-padding:after{display:none}.mh-gift-buttons-clone-wrapper .giftSelectorView-gift.gift_of_the_day .giftSelectorView-gift-padding{color:#000;background-color:#fff}.mh-gift-buttons-clone-wrapper .giftSelectorView-gift.gift_of_the_day:hover .giftSelectorView-gift-padding{background-color:#a5e3ff}.giftSelectorView-friend-group-title{padding:3px;font-size:11px}.giftSelectorView-friend-padding,.giftSelectorView-confirmPopup-block-actionItem .giftSelectorView-friend:hover .giftSelectorView-friend-padding{border-radius:0}.giftSelectorView-friend .giftSelectorView-friend-padding{height:35px}.mh-gift-buttons-clone-wrapper .giftSelectorView-gift .itemImage{width:50px;height:50px}.giftSelectorView-gift .itemImage{width:100%;height:80px}.giftSelectorView-friend-name{display:flex;flex-flow:column;align-items:flex-start;justify-content:flex-start;width:unset;height:unset;padding:0 3px;line-height:1.1}.giftSelectorView-friend-name span{display:block}#bulk-gifting-gift-buttons.mh-gift-buttons-send-popup{margin-bottom:0}.giftSelectorView-tabContentContainer .giftSelectorView-tabContent.active .giftSelectorView-actionContainer{display:flex;align-items:center;justify-content:flex-end}#bulk-gifting-gift-buttons.mh-gift-buttons-send-popup button{padding:6px;font-size:12px}a.mousehuntActionButton.giftSelectorView-action-confirm span{display:block;width:auto;min-width:80px}.giftSelectorView-friendRow-returnImage:hover{margin-top:-10px;margin-right:10px;margin-left:0;border:none}.giftSelectorView-claimableGift{min-height:100px}.giftSelectorView-claimableGift.accordion_disabled:after,.giftSelectorView-claimableGift.expanded:after{box-shadow:none}.giftSelectorView-claimableGift.accordion_disabled,.giftSelectorView-claimableGift.expanded{padding:5px;margin-bottom:11px;border:1px solid #ccc;border-radius:3px}.giftSelectorView-claimableGift-title-itemName{font-size:13px}.giftSelectorView-content-subtitle{border-bottom:none}.giftSelectorView-inboxGiftOfTheDay{padding:5px 0;border-color:#d1d0cf}.giftSelectorView-inbox-giftRow.paidgift{background-color:#fff08c;border:none}.giftSelectorView-inbox-gift-details .giftSelectorView-inbox-gift-sent{padding-top:3px}.giftSelectorView-inbox-giftRow{display:flex;align-items:center;justify-content:space-between;min-height:40px}.giftSelectorView-inbox-gift-details{flex:1;width:auto;margin:0 0 0 10px}.giftSelectorView-inbox-giftRow.paidgift .giftSelectorView-inbox-gift-actions{padding-bottom:0}.giftSelectorView-inboxGiftOfTheDay-label{margin-right:5px}.giftSelectorView-inboxGiftOfTheDay-gift{font-size:12px}.giftSelectorView-inboxGiftOfTheDay-gift abbr{text-decoration:none;vertical-align:middle}.paidgift a.giftSelectorView-friendRow-action.return{text-indent:-70px}.giftSelectorView-friendRow-returnQuantity{width:30px}.giftSelectorView-gift.paidgift .giftSelectorView-gift-padding{box-shadow:0 0 1px #000 inset}.giftSelectorView-tabContent.hasSidebar .giftSelectorView-content-rightBar{border-bottom-left-radius:10px}.giftSelectorView-friendRow-sender{position:relative}.giftSelectorView-friendRow:hover{padding-bottom:5px;margin-bottom:7px;border-top-left-radius:0;border-bottom-left-radius:0;outline:1px solid #dfdfdf;box-shadow:none}.giftSelectorView-friend-image{top:-7px;left:-7px;width:33px;height:33px;border:1px solid #bdbdbd}.giftSelectorView-friend-image.paidgift{top:-11px;width:31px;height:31px}#giftSelectorView-inbox{border:1px solid #d1d0cf;box-shadow:0 3px 6px -3px #000}.giftSelectorView-inbox-footer-viewMore a{position:relative;font-weight:400;line-height:24px;text-shadow:0 0 1px #fff;background:none;border:none;border-radius:3px;box-shadow:none}.giftSelectorView-inbox-footer-viewMore{position:absolute;right:10px;width:135px;padding:0;font-size:12px;font-weight:700;line-height:30px;color:#000!important;text-align:center;background:#b3edff;border:1px solid #50549c;border-radius:5px;box-shadow:1px 1px 1px #eee}.giftSelectorView-inbox-footer-viewMore:hover{background-color:#b3f4ff;border-color:#000;box-shadow:0 0 5px #fff inset,1px 1px 1px #fff}.giftSelectorView-inbox-footer-viewMore:before{position:absolute;inset:40% 0 0;content:"";background:#b2e2ff;border-radius:5px;box-shadow:0 0 10px #7bf inset}.giftSelectorView-inbox-footer-viewMore:before:hover{background-color:#a5e2ff;box-shadow:0 0 10px #f0f4f7 inset}.giftSelectorView-inbox-footer{padding-bottom:18px}.giftSelectorView-inbox-giftContainer .mousehuntActionButton.return.disabled,.giftSelectorView-inbox-giftContainer .mousehuntActionButton.claim.disabled{opacity:.5}.giftSelectorView-inbox-giftContainer .mousehuntActionButton.return.disabled:hover,.giftSelectorView-inbox-giftContainer .mousehuntActionButton.claim.disabled:hover{opacity:1}.giftSelectorView-friendRow-action.ignore{outline:1px solid #ededed;box-shadow:none}.giftSelectorView-friendRow-action.ignore:hover{background-color:#eee;outline-color:#c6c6c6}.giftSelectorView-friendRow-action.claim,.giftSelectorView-friendRow-action.return{box-sizing:border-box;outline:1px solid #e7e7e7}.giftSelectorView-friendRow-action.claim:hover,.giftSelectorView-friendRow-action.return:hover{box-shadow:0 0 1px #000 inset,0 -1px 1px #fff inset}.giftSelectorView-friendRow.new .giftSelectorView-friend-image:after{top:-4px;left:-4px;border-radius:4px;box-shadow:none}.mh-dark-mode #giftSelectorView-inbox,.mh-dark-mode .giftSelectorView-inboxGiftOfTheDay{border-color:#424242}.mh-dark-mode .pageFrameView #mousehuntContainer.PageCamp .campPage-trap-statsContainer:hover{background-color:#494949}.complete .giftSelectorView-inbox-gift-details{margin-right:150px;margin-left:0}\n'; // src/modules/better-gifts/index.js var getIgnoredGifts = () => { const ignored = getSetting("better-gifts.ignore-bad-gifts-0", "skip"); const skipOptions = { skip: ["mozzarella_cheese", "stale_cheese", "stale_cheese_craft_item"], "no-skip": [], mozzarella: ["mozzarella_cheese"], stale: ["stale_cheese_craft_item"], sludge: ["radioactive_sludge"], "mozzarella-stale": ["mozzarella_cheese", "stale_cheese_craft_item"], "mozzarella-sludge": ["mozzarella_cheese", "radioactive_sludge"], "stale-sludge": ["stale_cheese_craft_item", "radioactive_sludge"] }; return skipOptions[ignored] || skipOptions.skip; }; var claimGifts = (send = false, retries = 0) => __async(void 0, null, function* () { hg.views.GiftSelectorView.show(); const isLoaded = document.querySelector(".giftSelectorView-tabContent.active .giftSelectorView-friendRow"); if (!isLoaded) { if (retries <= 10) { setTimeout(() => { claimGifts(send, retries + 1); }, 250); } return; } let gifts = hg.views.GiftSelectorView.getClaimableGiftsSortedByTime(); if (getSetting("better-gifts.send-order-0", "default") === "reverse") { gifts.reverse(); } const ignoredGifts = getIgnoredGifts(); let sendLimit = hg.views.GiftSelectorView.getNumSendableActionsRemaining(); let claimLimit = hg.views.GiftSelectorView.getNumClaimableActionsRemaining(); gifts = gifts.filter((gift) => { if (gift.channel !== "gift") { return false; } if (ignoredGifts.includes(gift.item_type)) { return false; } return true; }); for (const gift of gifts) { let verb = send ? "return" : "claim"; if (send && sendLimit > 0 && gift.is_returnable) { verb = "return"; } const giftEl = document.querySelector(`.giftSelectorView-friendRow[data-gift-id="${gift.gift_id}"] .giftSelectorView-friendRow-action.${verb}`); if (!giftEl) { continue; } const event = { target: giftEl }; if (send && "return" === verb && sendLimit > 0) { hg.views.GiftSelectorView.selectReturnableGift(event, giftEl); sendLimit--; claimLimit--; } else if (!send && "claim" === verb && claimLimit > 0) { hg.views.GiftSelectorView.selectClaimableGift(giftEl); claimLimit--; } } setTimeout(() => { const confirm = document.querySelector(".mousehuntActionButton.giftSelectorView-action-confirm.small"); if (confirm) { setTimeout(() => { hg.views.GiftSelectorView.submitConfirm(confirm); }, 250); } }, 500); }); var makeAcceptButton = (buttonContainer, isTiny = false) => { const acceptButton = makeElement("button", ["mh-gift-button", "mh-gift-buttons-accept", "mousehuntActionButton"]); makeElement("span", "mousehuntActionButton-text", "Accept All", acceptButton); if (isTiny) { acceptButton.classList.add("tiny"); } const acceptLimit = document.querySelector(".giftSelectorView-numClaimActionsRemaining"); if (acceptLimit && acceptLimit.innerText === "0") { acceptButton.classList.add("disabled"); } else { acceptButton.addEventListener("click", () => { claimGifts(); }); } buttonContainer.append(acceptButton); }; var makeReturnButton = (buttonContainer, isTiny = false) => { const returnWrapper = makeElement("div", "mh-gift-buttons-return-wrapper"); const returnButton = makeElement("button", ["mh-gift-button", "mh-gift-buttons-return", "mousehuntActionButton"]); makeElement("span", "mousehuntActionButton-text", "Accept & Return All", returnButton); if (isTiny) { returnButton.classList.add("tiny"); } const returnLimit = document.querySelector(".giftSelectorView-numSendActionsRemaining"); if (returnLimit && returnLimit.innerText === "0") { returnButton.classList.add("disabled"); } else { returnButton.addEventListener("click", () => { claimGifts(true); }); } returnWrapper.append(returnButton); buttonContainer.append(returnWrapper); }; var fixTypo = () => { replaceInTemplate("ViewGiftSelector", [ [ "You can send 1 free gifts", "You can send 1 free gift" ], [ "<b>1</b> free gifts", "<b>1</b> free gift" ] ]); }; var lineBreakGiftFooter = () => { replaceInTemplate("GiftSelectorView", [ [ "more free gifts today. You can", 'more free gifts today. <p class="mh-ui-footer-gifts-second-line">You can' ], [ 'class="giftSelectorView-inboxHeader-closeButton" onclick="hg.views.GiftSelectorView.hideInbox(); return false;">Close</a>', 'class="giftSelectorView-inboxHeader-closeButton" onclick="hg.views.GiftSelectorView.hideInbox(); return false;">\u2715</a>' ] ]); }; var getButtons = (className = false, isTiny = false) => { const buttonContainer = document.createElement("div"); buttonContainer.id = "bulk-gifting-gift-buttons"; if (className) { buttonContainer.classList.add(className); } makeAcceptButton(buttonContainer, isTiny); makeReturnButton(buttonContainer, isTiny); return buttonContainer; }; var makeButtons = () => { if (document.querySelector("#bulk-gifting-gift-buttons")) { return; } const buttonContainer = document.createElement("div"); buttonContainer.id = "bulk-gifting-gift-buttons"; makeAcceptButton(buttonContainer); makeReturnButton(buttonContainer); const giftFooter = document.querySelector(".giftSelectorView-inbox-footer"); if (giftFooter && giftFooter.firstChild) { giftFooter.insertBefore(buttonContainer, giftFooter.firstChild); } }; var getLimit = () => { const limitEl = document.querySelector(".giftSelectorView-tabContent.active .giftSelectorView-actionLimit.giftSelectorView-numSendActionsRemaining"); limit = limitEl ? Number.parseInt(limitEl.innerText, 10) : 0; return limit; }; var pickFriends = (friends, useRandom = true) => { const selected = []; let sent = 0; if (useRandom) { const bound = friends.length > 35 ? 35 : friends.length; const firstRandom = Math.floor(Math.random() * bound); selected.push(firstRandom); sent++; } let limit2 = getLimit(); while (sent < limit2) { if (selected.length >= friends.length) { break; } if (useRandom) { const random = Math.floor(Math.random() * friends.length); if (selected.includes(random)) { continue; } selected.push(random); } else { selected.push(sent); } sent++; limit2 = getLimit(); } selected.forEach((index) => { friends[index].click(); }); if (getLimit() < 1) { const buttons = document.querySelectorAll(".mh-gift-buttons"); buttons.forEach((button) => { button.classList.add("disabled"); }); } }; var addSendButton = (className, text, selector, buttonContainer) => { const existing = document.querySelector(`.mh-gift-buttons-send-${className}`); if (existing) { existing.remove(); } const sendButton = makeElement("button", ["mousehuntActionButton", "tiny", "mh-gift-buttons", `mh-gift-buttons-send-${className}`]); makeElement("span", "mousehuntActionButton-text", text, sendButton); const limit2 = getLimit(); if (limit2 && limit2 < 1) { sendButton.classList.add("disabled"); } sendButton.addEventListener("click", () => { const friends = document.querySelectorAll(selector); if (!friends.length) { return; } if ("faves" === className) { pickFriends(friends, false); } else { pickFriends(friends); } }); buttonContainer.append(sendButton); }; var addRandomSendButton = () => { const _selectGift2 = hg.views.GiftSelectorView.selectGift; hg.views.GiftSelectorView.selectGift = (gift) => { _selectGift2(gift); const title = document.querySelector(".giftSelectorView-tabContent.active .selectFriends .giftSelectorView-content-title"); if (!title) { return false; } addSendButton("random", "Select Random Friends", ".giftSelectorView-tabContent.active .giftSelectorView-friend:not(.disabled, .selected)", title); addSendButton("faves", "Select Frequent Gifters", ".giftSelectorView-tabContent.active .giftSelectorView-friend-group.favorite .giftSelectorView-friend:not(.disabled, .selected)", title); }; }; var _showTab; var _selectGift; var _updateGiftMultiplierQuantity; var addGiftSwitcher = () => { if (_showTab || _selectGift || _updateGiftMultiplierQuantity) { return; } _showTab = hg.views.GiftSelectorView.showTab; _selectGift = hg.views.GiftSelectorView.selectGift; _updateGiftMultiplierQuantity = hg.views.GiftSelectorView.updateGiftMultiplierQuantity; hg.views.GiftSelectorView.showTab = (tabType, viewState, preserveVariables, preserveActions) => { _showTab(tabType, viewState, preserveVariables, preserveActions); hg.views.GiftSelectorView.updateGiftMultiplierQuantity = (input) => { if (input && input.hasAttribute("maxlength")) { input.removeAttribute("maxlength"); } return _updateGiftMultiplierQuantity(input); }; hg.views.GiftSelectorView.selectGift = (gift) => { _selectGift(gift); const giftContainer = document.querySelector(".giftSelectorView-tabContent.active.selectFriends .giftSelectorView-content-leftBar"); if (!giftContainer) { return false; } const existing = document.querySelector(".mh-gift-buttons-clone-wrapper"); if (existing) { existing.remove(); } const giftType = tabType === "send_free_gifts" ? "gift" : "paidgift"; const gifts = document.querySelectorAll(`.active .selectGift .giftSelectorView-scroller.giftSelectorView-giftContainer .giftSelectorView-gift.sendable.${giftType}`); if (!gifts.length) { return; } const cloneWrapper = makeElement("div", "mh-gift-buttons-clone-wrapper"); gifts.forEach((toClone) => { const clone = toClone.cloneNode(true); const giftWrap = makeElement("div", "giftSelectorView-content-leftBar-highlightBlock"); giftWrap.append(clone); giftWrap.addEventListener("click", () => { const prevSelected = document.querySelectorAll(".mh-gift-buttons-clone-selected"); prevSelected.forEach((el) => { el.classList.remove("mh-gift-buttons-clone-selected"); }); giftWrap.classList.add("mh-gift-buttons-clone-selected"); }); cloneWrapper.append(giftWrap); }); giftContainer.append(cloneWrapper); }; }; }; var addButtonsToDropdown = () => { const buttonLink = document.querySelector("#hgbar_freegifts"); if (!buttonLink) { return; } buttonLink.addEventListener("click", () => { makeButtons(); }); }; var addButtonsToPopup = () => { const actionRow = document.querySelector(".giftSelectorView-tabContentContainer .giftSelectorView-tabContent.active .giftSelectorView-actionContainer"); if (!actionRow) { return; } const existing = document.querySelector(".mh-gift-buttons-send-popup"); if (existing) { existing.remove(); } const buttons = getButtons("mh-gift-buttons-send-popup", true); actionRow.insertBefore(buttons, actionRow.firstChild); }; var main = () => { onRequest("users/socialGift.php", makeButtons); addButtonsToDropdown(); onDialogShow("giftSelectorViewPopup", addButtonsToPopup); addRandomSendButton(); addGiftSwitcher(); fixTypo(); lineBreakGiftFooter(); }; var init = () => __async(void 0, null, function* () { addStyles(styles_default, "better-gifts"); main(); onDeactivation("better-gifts", () => { const buttons = document.querySelectorAll(".mh-gift-buttons"); buttons.forEach((button) => { button.remove(); }); }); }); var better_gifts_default = { id: "better-gifts", name: "Better Gifts", type: "better", default: true, description: "Quickly accept and return all your gifts as well as picking random friends to send to.", load: init, settings: settings_default }; return __toCommonJS(better_gifts_exports); })(); mhImprovedVersion = "0.0.0-userscript;" mhImprovedPlatform = "userscript"; mhui.default.load(); migrateUserscript('Better Gifts / Gift Buttons', 'https://greasyfork.org/en/scripts/449489-mousehunt-gift-buttons');