eyl327

Free Symbolab Pro Tampermonkey Script

Aug 16th, 2020 (edited)
91,871
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name         Symbolab Pro
  3. // @namespace    http://tampermonkey.net/
  4. // @version      1.4.6
  5. // @description  Symbolab Pro for free - unlock full steps and verify solutions
  6. // @author       Jonah Lawrence - Dev Pro Tips
  7. // @match        https://www.symbolab.com/
  8. // @include      *://*symbolab.com/*
  9. // @grant        none
  10. // @license      MIT
  11. // ==/UserScript==
  12.  
  13. // jshint esversion: 6
  14.  
  15. (function () {
  16.     "use strict";
  17.  
  18.     const VERSION = "1.4.6";
  19.  
  20.     console.log(`"Symbolab Pro" v${VERSION} loaded.`);
  21.  
  22.     // hide steps until full solution is loaded
  23.     document.head.insertAdjacentHTML("beforeend", `<style id='hide_solution'>.solution_div { display: none; }</style>`);
  24.  
  25.     window.addEventListener("load", function () {
  26.         // prevent subscribe popups from appearing
  27.         window.showSubscription = () => null;
  28.  
  29.         // prevent paywall from appearing when verify button is clicked
  30.         createUpgradeTooltip = () => null;
  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.  
Add Comment
Please, Sign In to add comment