View difference between Paste ID: wA3QQkCj and J9hpaGT4
SHOW: | | - or go back to the newest paste.
1
// ==UserScript==
2
// @name         Symbolab Pro
3
// @namespace    http://tampermonkey.net/
4-
// @version      0.1
4+
// @version      1.4.6
5-
// @description  Symbolab pro for free
5+
// @description  Symbolab Pro for free - unlock full steps and verify solutions
6-
// @author       J. Lawrence
6+
// @author       Jonah Lawrence - Dev Pro Tips
7
// @match        https://www.symbolab.com/
8-
// @include      https://*symbolab.com/*
8+
// @include      *://*symbolab.com/*
9
// @grant        none
10
// @license      MIT
11
// ==/UserScript==
12
 
13-
    'use strict';
13+
// jshint esversion: 6
14
 
15-
    var code = `window.onload = function(){
15+
16-
        /* set subscription params */
16+
    "use strict";
17-
        if (typeof(SYSTEPS) != 'undefined') { SYSTEPS.subscribed = true };
17+
 
18-
        if (typeof(SOLUTIONS) != 'undefined') { SOLUTIONS.subscribed = true };
18+
    const VERSION = "1.4.6";
19-
        if (typeof(SYMBOLAB) != 'undefined') { SYMBOLAB.params.subscribed = true };
19+
 
20-
        isUserLoggedIn = function() { return true; }
20+
    console.log(`"Symbolab Pro" v${VERSION} loaded.`);
21
 
22-
        /* remove popup when verify solution box is clicked */
22+
    // hide steps until full solution is loaded
23-
        if ($("#click-capture")) {
23+
    document.head.insertAdjacentHTML("beforeend", `<style id='hide_solution'>.solution_div { display: none; }</style>`);
24-
            $("#click-capture").addClass("click-capture-subscribed");
24+
 
25
    window.addEventListener("load", function () {
26-
    }`;
26+
        // prevent subscribe popups from appearing
27
        window.showSubscription = () => null;
28-
    document.documentElement.setAttribute('onreset', code);
28+
29-
    document.documentElement.dispatchEvent(new CustomEvent('reset'));
29+
        // prevent paywall from appearing when verify button is clicked
30-
    document.documentElement.removeAttribute('onreset');
30+
        createUpgradeTooltip = () => null;
31-
})();
31+
32
        // only run script if on a page with a solution
33
        if (typeof SYMBOLAB !== "undefined" && SYMBOLAB?.params?.query) {
34
            // initialize constants
35
            const url = location.href;
36
            const langMatch = url.match("//([a-z]{2}).symbolab");
37
            const lang = langMatch ? langMatch[1] : "en";
38
            const query = htmlDecode(SYMBOLAB.params.query);
39
40
            // reinitialize SymbolabSteps with subscribed set to true
41
            SYSTEPS = new SymbolabSteps(lang, "true", null, url);
42
43
            // reinitialize Solutions with subscribed set to true
44
            SOLUTIONS = new Solutions("", "step-by-step", query, "", 0, "", lang, "true");
45
            SOLUTIONS.init();
46
47
            console.log(`"Symbolab Pro" full step-by-step solutions initialized.`);
48
        }
49
50
        // if not signed in, create a warning next to the sign in link to tell the user they must log in
51
        if (!isUserLoggedIn()) {
52
            console.warn(`"Symbolab Pro" only works when signed in. You can create an account for free.`);
53
            const joinEl = document.getElementById("join");
54
            const warning = document.createElement("div");
55
            warning.id = "sign_in_warning";
56
            const warningStyles = {
57
                position: "fixed",
58
                top: "48px",
59
                right: "0px",
60
                width: "260px",
61
                height: "200px",
62
                backgroundColor: "rgb(255, 255, 255)",
63
                zIndex: "9999",
64
                padding: "1em",
65
                fontSize: "150%",
66
                lineHeight: "1.5em",
67
                border: "2px solid red",
68
            };
69
            Object.assign(warning.style, warningStyles);
70
            warning.innerHTML = `<p>Viewing step-by-step solutions for free is only possible when logged in.</p>
71
                <p style="font-size: 90%">Sign in or create a free account to continue.</p>
72
                <a href="https://greasyfork.org/en/scripts/407459-symbolab-pro" onclick="return false;" style="font-size: 75%">'Symbolab Pro' script v${VERSION}</a>`;
73
            // close button
74
            const closeButton = document.createElement("button");
75
            closeButton.innerHTML = "&times;";
76
            const closeStyles = {
77
                position: "absolute",
78
                top: "0px",
79
                right: "0px",
80
                fontSize: "150%",
81
                fontWeight: "bold",
82
                cursor: "pointer",
83
                background: "none",
84
                border: "none",
85
            };
86
            Object.assign(closeButton.style, closeStyles);
87
            closeButton.addEventListener("click", () => {
88
                warning.style.display = "none";
89
            });
90
            warning.appendChild(closeButton);
91
            if (joinEl) {
92
                joinEl.appendChild(warning);
93
            }
94
            // flash warning when show steps button is clicked since the content is locked
95
            document.body.addEventListener(
96
                "click",
97
                (e) =>
98
                    $(e.target).closest(".solution_title_container")[0] &&
99
                    $("#sign_in_warning").fadeOut(100).fadeIn(100).fadeOut(100).fadeIn(100)
100
            );
101
        }
102
103
        // show solution
104
        document.getElementById("hide_solution").remove();
105
    });
106
})();
107