Shop Wizard Beta Refresh

You'll never want to use it without the script after this

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да инсталирате разширение, като например Tampermonkey .

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name         Shop Wizard Beta Refresh
// @namespace    neopets
// @version      2020.01.16
// @description  You'll never want to use it without the script after this
// @author       Rippy
// @match        http://www.neopets.com/shops/wizard.phtml*
// @grant        none
// ==/UserScript==

/******************************************************************
 * Adapted from Rippy's script. Main changes:
 *
 * - You can now use the Shop Wizard when you're on a Faerie Quest.
 *
 * - Nicer styling
 *
 * - Original search form now remains on page upon a search.
 *    Useful for starting a new search immediately.
 *
 * - Auto toggle to "Identical to my phrase"
 *
 * - Minor fix for compatibility with diceroll's Search Helper.
 ******************************************************************/

// On regular SW, there is no server-side check for whether or not you're on a Faerie Quest.
if (!$(".wizard-faeriequest__2020").length) {
    // Hide the original form
    $("#shopWizardFormResults").hide();
}

// Replace it with our own
$("#pageDesc").html(`
<div id="userscriptSWResult" class="wizard-results__2020">
    <div class="wizard__2020">
        <div class="wizard-header">
            <div class="wizard-char wizard-char-img"></div>
            <h2>What are you looking for?</h2>
        </div>
        <div class="wizard-body">
            <div class="wizard-char-container">
                <div class="wizard-char wizard-char-img"></div>
            </div>

            <div>
                <input type="hidden" name="type" value="process_wizard">
                <input type="hidden" name="feedset" id="feedset" value="0">
                <div class="wizard-search">
                    <input type="text" id="shopwizard" value="" size="50" maxlength="60">
                    <button class="wizard-button-search button-default__2020 button-green__2020" id="submit_wizard">
                        <div class="button-search-white"></div>
                    </button>
                </div>
                <div class="wizard-filters">
                    <select id="criteria">
                        <option value="containing">Containing my phrase
                        </option>
                        <option value="exact">Identical to
                        </option>
                    </select>
                    <select name="wizard-area" id="wizard-area">
                        <option value="shop">In Shops</option>
                        <option value="gallery">In Galleries</option>
                    </select>
                </div>
                <div class="wizard-price">
                    <p class="wizard-price-text">Price:</p>
                    <input type="text" id="min_price" size="6" maxlength="6" value="0" placeholder="Min">
                    <div class="wizard-dash"></div>
                    <input type="text" id="max_price" size="6" maxlength="6" value="999999" placeholder="Max">
                </div>
            </div>
        </div>
    </div>
</div>
<div id="divRefresh" style="display:none;"><br><button id="refreshresults" style="margin: auto;" type="button" class="button-default__2020 button-green__2020 btn-single__2020 wizard-button__2020">Refresh Results</button></div>
<div id="bypassResults" class="wizard-results__2020"></div>
<br>
`);

// Initialise values, and search string if any
$("#criteria").val("exact");
if (location.search) {
    $("#shopwizard").val(
        (qs => {
            qs = qs.split("+").join(" ");
            let params = {}, tokens, re = /[?&]?([^=]+)=([^&]*)/g;
            while (tokens = re.exec(qs)) {
                params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
            }
            return params;
        })(location.search)["string"]
    );
}
$("h1:contains('Shop Wizard')").html("Cheat Shop Wizard").parent().after(`<br><div style="font-size: 11pt; font-family: MuseoSansRounded500, Arial, sans-serif; width: 90%; margin: 5px auto; text-align: center;">Userscript is active! You can now refresh search results after a search.<br><br>Also, this wizard doesn't give a shit about "Ancient laws of magic" and<br>allows you to use him during a quest anyway. Fuck the faerie queen!<br><br>This userscript was originally written by <b>Rippy</b> of the r/neopets discord server.</div>`);

// Handlers
$("#shopwizard").on("keydown", function (e) {
    // Submit on pressing enter
    if (e.which === 13) {
        $("#submit_wizard").click();
    }
});

let resultsMaxHeight = 0;
$("#submit_wizard, #refreshresults").on("click", function () {

    $("#divRefresh").show();

    toggleButton($("#refreshresults"), "disable");
    toggleButton($("#submit_wizard"), "disable");

    $.ajax({
        type : "POST",
        url : "/np-templates/ajax/wizard.php",
        dataType : "html",
        data : {
            "type" : "process_wizard",
            "feedset" : 0,
            "shopwizard" : $("#shopwizard").val(),
            "table" : $("#wizard-area option:selected").val(),
            "criteria" : $("#criteria option:selected").val(),
            "min_price" : $("#min_price").val(),
            "max_price" : $("#max_price").val()
        },
        success : function (response) {
            $("#bypassResults").html(response);
            toggleButton($("#refreshresults"), "enable");
            toggleButton($("#submit_wizard"), "enable");

            // Retain max height of the search results so the window doesn't shift
            let height = parseFloat($("#bypassResults").css("height"));
            if (height > resultsMaxHeight) {
                resultsMaxHeight = height;
            }
            $("#bypassResults").css({"height" : resultsMaxHeight});

            // scroll to results (comment out if annoying)
            $("html, body").animate({
                scrollTop : $("#divRefresh").offset().top - 70
            }, 200);
        },
        error : function () {
            alert("Error");
            toggleButton($("#refreshresults"), "enable");
            toggleButton($("#submit_wizard"), "enable");
        }
    });
});

function toggleButton(selector, mode) {
    let thisClass = $(selector).attr("class");
    if (mode === 1 || mode === "enable") {
        $(selector).attr("class", thisClass.replace(/red/g, "green"));
        $(selector).prop("disabled", false);
    } else if (mode === 0 || mode === "disable") {
        $(selector).attr("class", thisClass.replace(/green/g, "red"));
        $(selector).prop("disabled", true);
    }
}