// ==UserScript==
// @name Quizlet Show Hidden Flashcards
// @namespace QuizletHack
// @version 19
// @description Show the hidden flashcards in Quizlet without logging in.
// @author hacker09
// @match *://quizlet.com/*
// @icon https://assets.quizlet.com/a/j/dist/i/favicon.6e263725c926227.ico
// @run-at document-end
// @grant none
// ==/UserScript==
(async function() {
'use strict';
var TimesExecuted = 0; //Creates a new variable
const DisableReading = true; //If true the Reading function will be disabled
const RemoveNeedlessThings = true; //If true the Needless Things will be removed
async function hack() //Creates a new hack function
{ //Starts the new hack function
//Show all hidden elements and disable the reading function
document.querySelectorAll("div.SetPageTerm").forEach(function(FlashCards, i) { //For each FlashCard
FlashCards.className = "SetPageTerm has-definitionText is-showing"; //Change the FlashCard element class name so that the card is shown
document.querySelector(".b1sa2ccx") !== null ? document.querySelectorAll(".b1sa2ccx").forEach(BlurFlashCards => BlurFlashCards.className = BlurFlashCards.className.replace('b1sa2ccx', '')) : ''; //Finishes the foreach loop
FlashCards.insertAdjacentHTML("afterbegin", `<span id='span' style="position: absolute;left: -22px;">${i + 1}</span>`); //Add a number for each item
if (DisableReading === true) //If the DisableReading const is true
{ //Starts the if condition
FlashCards.innerHTML = FlashCards.innerHTML; //Remove the audio of the FlashCard element
} //Finishes the if condition
}); //Finishes the foreach loop
} //Finishes the hack function
window.onscroll = async function() { //Creates a new function to run when the page is scrolled
TimesExecuted += 1; //Sum the number of times that the page is scrolled
if (TimesExecuted === 1) { //On the first time that the page is scrolled
await hack(); //Calls the hack function
setTimeout(function() { //Starts the settimeout function
if (document.querySelector("#Executed") === null) //If the element wasn't added in the page yet
{ //Starts the if condition
document.querySelector("div.SetPageTerm").insertAdjacentHTML('beforebegin', '<h1 style="cursor: pointer; margin-block: revert;" id="Executed">Showing ' + document.querySelectorAll("div.SetPageTerm.has-definitionText.is-showing").length + ' Terms (Re-Run)</h1>'); //Show the number of shown terms
async function Rerun() { //Starts the onclick function
document.querySelector("h1#Executed").remove(); //Removes the old number
document.querySelectorAll("#span").forEach(span => span.remove()); //Remove current span elements
await hack(); // Calls the hack function
document.querySelector("div.SetPageTerm").insertAdjacentHTML('beforebegin', '<h1 style="cursor: pointer; margin-block: revert;" id="Executed">Showing ' + document.querySelectorAll("div.SetPageTerm.has-definitionText.is-showing").length + ' Terms (Re-Run)</h1>'); //Show the new number of shown terms
}; //Finishes the onclick function
document.querySelector("h1#Executed").onclick = async function() {
await Rerun()
}; //Rerun when the show terms text is clicked
document.querySelector(".l1bjsch9 > button") === null ? '' : document.querySelector(".l1bjsch9 > button").click();
setTimeout(async function() {
await Rerun();
}, 1600); //If the See More btn exists click on it and Rerun
scrollTo(0, 0); //Scroll to top
} //Finishes the if condition
}, 1000); //Finishes the settimeout function
if (RemoveNeedlessThings === true) //If the RemoveNeedlessThings const is true
{ //Starts the if condition
document.head.insertAdjacentHTML('beforeend', '<style>.SetPageStickyHeader.hgmlhdt, .SetPageTermsStickyBanner.SetPageTermsStickyBanner--hasAdz, .SetPageWall.SetPageWall--normal, .TopNavigationWrapper, .SetPage-setDetailsInfoWrapper, footer, .SetPage-setIntro, .wugyavo, .SetPage-setLinksWrapper, .SetPage-setIntroWrapper, .SetPageEmbeddedAd-wrapper, .SetPageTerms-embeddedDesktopAdz, .SetPageStudyModesBanner-body, .ReactModalPortal, .bb8jmnf, #UniversalUpsellTarget > div, .hideBelow--m, .h1nkdy1n, .d1d5k0iq {display: none !important;}</style>'); //Hide the top menu, the stick footer banner, the Sign Up Box and the white overlay above this box, the top navigation menu, the user name that created the quiz, the needlessly big footer, the big flashcards box, the 2 stick footer banner, the related questions below all the cards, title of the cards set, big flash cards box and study/play columns below the big flash cars box, ads in between card rows, more ads, want to learn this set quickly? question box below all card rows, "save time with an expert" message, "turn messy notes into" " message, "Automatically turn messy notes into Magic Notes" message, "Students also viewed" message
} //Finishes the if condition
} //Finishes the if condition
}; //Finishes the onscroll event listener
})();