// ==UserScript==
// @name Duolingo Pro BETA
// @namespace Violentmonkey Scripts
// @match https://*.duolingo.com/*
// @grant GM_log
// @version 2.0BETA4
// @author anonymoushackerIV
// @description Duolingo Auto Solver Tool - WORKING AUGUST 2023
// @license MIT
// @downloadURL none
// ==/UserScript==
let solvingIntervalId;
let isAutoMode = false;
const debug = false;
let isSendFeedbackButtonPressed = false;
let autoSolverBoxRepeatAmount = 0;
autoSolverBoxRepeatAmount = Number(sessionStorage.getItem('autoSolverBoxRepeatAmount'));
let ProBlockBannerOneVisible = true;
if (JSON.parse(localStorage.getItem('ProBlockBannerOneVisible')) === null) {
ProBlockBannerOneVisible = true;
} else {
ProBlockBannerOneVisible = JSON.parse(localStorage.getItem('ProBlockBannerOneVisible'));
}
let autoSolverBoxPracticeOnlyMode;
let autoSolverBoxRepeatLessonMode;
if (JSON.parse(sessionStorage.getItem('autoSolverBoxPracticeOnlyMode')) === null) {
autoSolverBoxPracticeOnlyMode = true;
} else {
autoSolverBoxPracticeOnlyMode = JSON.parse(sessionStorage.getItem('autoSolverBoxPracticeOnlyMode'));
}
if (JSON.parse(sessionStorage.getItem('autoSolverBoxRepeatLessonMode')) === null) {
autoSolverBoxRepeatLessonMode = false;
} else {
autoSolverBoxRepeatLessonMode = JSON.parse(sessionStorage.getItem('autoSolverBoxRepeatLessonMode'));
}
let wasAutoSolverBoxRepeatStartButtonPressed = false;
if (JSON.parse(sessionStorage.getItem('wasAutoSolverBoxRepeatStartButtonPressed')) === null) {
wasAutoSolverBoxRepeatStartButtonPressed = false;
} else {
wasAutoSolverBoxRepeatStartButtonPressed = JSON.parse(sessionStorage.getItem('wasAutoSolverBoxRepeatStartButtonPressed'));
}
// Whats New Variables Start
let wasWhatsNewInTwoPointZeroBetaThreeFinished = false;
if (JSON.parse(localStorage.getItem('wasWhatsNewInTwoPointZeroBetaThreeFinished')) === null) {
wasWhatsNewInTwoPointZeroBetaThreeFinished = false;
} else {
wasWhatsNewInTwoPointZeroBetaThreeFinished = JSON.parse(localStorage.getItem('wasWhatsNewInTwoPointZeroBetaThreeFinished'));
}
let wasWhatsNewInTwoPointZeroBetaFourFinished = false;
if (JSON.parse(localStorage.getItem('wasWhatsNewInTwoPointZeroBetaFourFinished')) === null) {
wasWhatsNewInTwoPointZeroBetaFourFinished = false;
} else {
wasWhatsNewInTwoPointZeroBetaFourFinished = JSON.parse(localStorage.getItem('wasWhatsNewInTwoPointZeroBetaFourFinished'));
}
let whatsNewInBetaStage = 1;
// Whats New Variables End
let wasDuolingoProSettingsButtonOnePressed = false;
// Duolingo Pro Settings Variables Start
let AutoSolverSettingsShowAutoSolverBox = true;
if (JSON.parse(localStorage.getItem('AutoSolverSettingsShowAutoSolverBox')) === null) {
AutoSolverSettingsShowAutoSolverBox = true; // default
} else if (JSON.parse(localStorage.getItem('AutoSolverSettingsShowAutoSolverBox')) === false) {
AutoSolverSettingsShowAutoSolverBox = JSON.parse(localStorage.getItem('AutoSolverSettingsShowAutoSolverBox'));
AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox = false;
localStorage.setItem('AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox', AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox);
} else {
AutoSolverSettingsShowAutoSolverBox = JSON.parse(localStorage.getItem('AutoSolverSettingsShowAutoSolverBox'));
}
let AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox = false;
if (JSON.parse(localStorage.getItem('AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox')) === null) {
AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox = false; // default
} else {
AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox = JSON.parse(localStorage.getItem('AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox'));
}
let AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox = true;
if (JSON.parse(localStorage.getItem('AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox')) === null) {
AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox = true; // default
} else {
AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox = JSON.parse(localStorage.getItem('AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox'));
}
let AutoSolverSettingsLowPerformanceMode = false;
if (JSON.parse(localStorage.getItem('AutoSolverSettingsLowPerformanceMode')) === null) {
AutoSolverSettingsLowPerformanceMode = false; // default
} else {
AutoSolverSettingsLowPerformanceMode = JSON.parse(localStorage.getItem('AutoSolverSettingsLowPerformanceMode'));
}
let DuolingoProSettingsProBlockMode = true;
if (JSON.parse(localStorage.getItem('DuolingoProSettingsProBlockMode')) === null) {
DuolingoProSettingsProBlockMode = true; // default
} else {
DuolingoProSettingsProBlockMode = JSON.parse(localStorage.getItem('DuolingoProSettingsProBlockMode'));
if (!DuolingoProSettingsProBlockMode) {
ProBlockBannerOneVisible = true;
localStorage.setItem('ProBlockBannerOneVisible', ProBlockBannerOneVisible);
}
}
// Duolingo Pro Settings Variables End
function addButtons() {
if (window.location.pathname === '/learn') {
let button = document.querySelector('a[data-test="global-practice"]');
if (button) {
return;
}
}
const solveAllButton = document.getElementById("solveAllButton");
if (solveAllButton !== null) {
return;
}
const original = document.querySelectorAll('[data-test="player-next"]')[0];
if (original === undefined) {
const startButton = document.querySelector('[data-test="start-button"]');
console.log(`Wrapper line: ${startButton}`);
if (startButton === null) {
return;
}
const wrapper = startButton.parentNode;
const solveAllButton = document.createElement('a');
solveAllButton.className = startButton.className;
solveAllButton.id = "solveAllButton";
solveAllButton.innerText = "COMPLETE SKILL";
solveAllButton.removeAttribute('href');
solveAllButton.addEventListener('click', () => {
solving();
setInterval(() => {
const startButton = document.querySelector('[data-test="start-button"]');
if (startButton && startButton.innerText.startsWith("START")) {
startButton.click();
}
}, 1000);
startButton.click();
});
wrapper.appendChild(solveAllButton);
} else {
const wrapper = document.getElementsByClassName('_10vOG')[0];
wrapper.style.display = "flex";
//
const solveCopy = document.createElement('button');
const presssolveCopy1 = () => {
solveCopy.style.borderBottom = '0px';
solveCopy.style.marginBottom = '4px';
solveCopy.style.top = '4px';
};
// Function to revert the border-bottom when the button is released
const releasesolveCopy1 = () => {
solveCopy.style.borderBottom = '4px solid #2b70c9';
solveCopy.style.marginBottom = '0px';
solveCopy.style.top = '0px';
};
// Add event listeners for mousedown, mouseup, and mouseleave
solveCopy.addEventListener('mousedown', presssolveCopy1);
solveCopy.addEventListener('mouseup', releasesolveCopy1);
solveCopy.addEventListener('mouseleave', releasesolveCopy1);
const pauseCopy = document.createElement('button');
const presspauseCopy2 = () => {
pauseCopy.style.borderBottom = '0px';
pauseCopy.style.marginBottom = '4px';
pauseCopy.style.top = '4px';
};
// Function to revert the border-bottom when the button is released
const releasepauseCopy2 = () => {
pauseCopy.style.borderBottom = '4px solid #ff9600';
pauseCopy.style.marginBottom = '0px';
pauseCopy.style.top = '0px';
};
// Add event listeners for mousedown, mouseup, and mouseleave
pauseCopy.addEventListener('mousedown', presspauseCopy2);
pauseCopy.addEventListener('mouseup', releasepauseCopy2);
pauseCopy.addEventListener('mouseleave', releasepauseCopy2);
solveCopy.id = 'solveAllButton';
solveCopy.innerHTML = solvingIntervalId ? 'PAUSE SOLVE' : 'SOLVE ALL';
solveCopy.disabled = false;
pauseCopy.innerHTML = 'SOLVE';
const solveCopyStyle = `
position: relative;
min-width: 150px;
font-size: 17px;
border: none;
border-bottom: 4px solid #2b70c9;
border-radius: 16px;
padding: 13px 16px;
transform: translateZ(0);
transition: filter .0s;
font-weight: 700;
letter-spacing: .8px;
background: #1cb0f6;
color: rgb(var(--color-snow));
margin-left: 20px;
cursor: pointer;
`;
const pauseCopyStyle = `
position: relative;
min-width: 100px;
font-size: 17px;
border: none;
border-bottom: 4px solid #ff9600;
border-radius: 16px;
padding: 13px 16px;
transform: translateZ(0);
transition: filter .0s;
font-weight: 700;
letter-spacing: .8px;
background: #ffc800;
color: rgb(var(--color-snow));
margin-left: 20px;
cursor: pointer;
`;
solveCopy.style.cssText = solveCopyStyle;
pauseCopy.style.cssText = pauseCopyStyle;
[solveCopy, pauseCopy].forEach(button => {
button.addEventListener("mousemove", () => {
button.style.filter = "brightness(1.1)";
});
});
[solveCopy, pauseCopy].forEach(button => {
button.addEventListener("mouseleave", () => {
button.style.filter = "none";
});
});
original.parentElement.appendChild(pauseCopy);
original.parentElement.appendChild(solveCopy);
solveCopy.addEventListener('click', solving);
pauseCopy.addEventListener('click', solve);
//solving();
}
}
setInterval(addButtons, 100);
const htmlContent = `
Stories are not supported yet
Chests now open automatically
How many lessons would you like to AutoSolve?
`;
const cssContent = `
.boxFirst {
display: inline-flex;
flex-direction: column;
align-items: flex-end;
gap: 8px;
position: fixed; /* Fix the position to the bottom-right corner */
bottom: 24px;
right: 24px;
z-index: 2;
}
.SendFeedbackButtonAndSettingsButtonBox {
display: flex;
align-items: center;
gap: 8px;
align-self: stretch;
}
.DuolingoProSettingsButtonOne {
position: relative;
display: flex;
height: 48px;
width: calc(100% - 0px);
padding: 16px 9px 16px 16px;
justify-content: center;
align-items: center;
gap: 8px;
border-radius: 8px;
border: 2px solid rgba(0, 0, 0, 0.20);
border-bottom: 4px solid rgba(0, 0, 0, 0.20);
background: #007AFF;
cursor: pointer;
transition: .1s;
width: auto;
}
.DuolingoProSettingsButtonOne:hover {
filter: brightness(0.95);
}
.DuolingoProSettingsButtonOne:active {
border-bottom: 2px solid rgba(0, 0, 0, 0.20);
height: 46px;
margin-top: 2px;
filter: brightness(0.9);
}
.DuolingoProSettingsButtonOneTextOne {
font-size: 16px;
font-weight: 700;
text-align: center;
line-height: normal;
color: #fff;
margin: 0px;
user-select: none; // chrome and Opera
-moz-user-select: none; // Firefox
-webkit-text-select: none; // IOS Safari
-webkit-user-select: none; // Safari
}
.SendFeedbackButtonOne {
position: relative;
display: flex;
height: 48px;
width: calc(100% - 0px);
padding: 16px 16px 16px 16px;
justify-content: center;
align-items: center;
gap: 8px;
border-radius: 8px;
border: 2px solid rgba(0, 0, 0, 0.20);
border-bottom: 4px solid rgba(0, 0, 0, 0.20);
background: #007AFF;
cursor: pointer;
transition: .1s;
width: auto;
}
.SendFeedbackButtonOne:hover {
filter: brightness(0.95);
}
.SendFeedbackButtonOne:active {
height: 46px;
margin-top: 2px;
border-bottom: 2px solid rgba(0, 0, 0, 0.20);
filter: brightness(0.9);
}
.SendFeedbackButtonTextOne {
font-size: 16px;
font-weight: 700;
text-align: center;
line-height: normal;
color: #fff;
margin: 0px;
user-select: none; // chrome and Opera
-moz-user-select: none; // Firefox
-webkit-text-select: none; // IOS Safari
-webkit-user-select: none; // Safari
}
.SendFeedbackButtonNewTagOne {
display: flex;
padding: 4px;
flex-direction: column;
justify-content: center;
align-items: center;
border-radius: 4px;
background: #FF2D55;
border: 2px solid rgba(0, 0, 0, 0.20);
}
.SendFeedbackButtonNewTagOneTextOne {
color: #FFF;
font-style: normal;
font-weight: 700;
line-height: normal;
margin-top: 0px;
margin-bottom: 0px;
font-size: 12px;
user-select: none; // chrome and Opera
-moz-user-select: none; // Firefox
-webkit-text-select: none; // IOS Safari
-webkit-user-select: none; // Safari
}
.SeeRoadmapButton {
position: relative;
display: flex;
height: 48px;
width: calc(100% - 0px);
padding: 16px 9px 16px 16px;
justify-content: center;
align-items: center;
gap: 8px;
border-radius: 8px;
border: 2px solid rgba(0, 0, 0, 0.20);
border-bottom: 4px solid rgba(0, 0, 0, 0.20);
background: #007AFF;
cursor: pointer;
transition: .1s;
width: auto;
}
.SeeRoadmapButton:hover {
filter: brightness(0.95);
}
.SeeRoadmapButton:active {
border-bottom: 2px solid rgba(0, 0, 0, 0.20);
height: 46px;
margin-top: 2px;
filter: brightness(0.9);
}
.SeeRoadmapButtonTextOne {
font-size: 16px;
font-weight: 700;
text-align: center;
line-height: normal;
color: #fff;
margin: 0px;
user-select: none; // chrome and Opera
-moz-user-select: none; // Firefox
-webkit-text-select: none; // IOS Safari
-webkit-user-select: none; // Safari
}
.AutoSolverBoxBackground {
display: flex;
padding: 16px;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 8px;
border-radius: 16px;
border: 2px solid rgb(var(--color-swan));
background: rgb(var(--color-snow));
width: 300px;
}
.AutoSolverBoxLayers {
display: flex;
width: 100%;
flex-direction: column;
align-items: flex-start;
gap: 8px;
}
.AutoSolverBoxAlertSectionOne {
display: flex;
width: 100%;
flex-direction: column;
align-items: flex-start;
gap: 16px;
padding-bottom: 8px;
}
.AutoSolverBoxAlertOneBox {
display: flex;
align-items: center;
gap: 8px;
height: 20px;
cursor: default;
}
.AutoSolverBoxAlertOneBoxIconOne {
width: 20px;
height: 18px;
fill: #FF2D55;
}
.AutoSolverBoxAlertOneBoxTextOne {
color: #FF4B4B;
font-weight: 700;
font-size: 16px;
margin-bottom: 0px;
}
.AutoSolverBoxAlertTwoBox {
display: inline-flex;
align-items: center;
gap: 8px;
height: 20px;
cursor: default;
}
.AutoSolverBoxAlertTwoBoxIconOne {
width: 20px !important;
height: 20px !important;
fill: #FF9500;
}
.AutoSolverBoxAlertTwoBoxTextOne {
color: #FF9500;
font-weight: 700;
font-size: 16px;
margin-bottom: 0px;
}
.AutoSolverBoxSectionThreeBox {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 8px;
height: 100%;
width: 100%;
}
.AutoSolverBoxTitleSectionOne {
display: flex;
justify-content: space-between;
align-items: center;
align-self: stretch;
padding-bottom: 8px;
padding: 0px;
}
.AutoSolverBoxTitleSectionOneTextOne {
color: rgb(var(--color-eel));
font-style: normal;
font-weight: 700;
font-size: 24px;
margin: 0px;
cursor: default;
}
.AutoSolverBoxTitleSectionOneBETATagOne {
display: flex;
height: 36px;
padding-right: 8px;
padding-left: 8px;
flex-direction: column;
justify-content: center;
align-items: center;
border-radius: 8px;
background: #FF2D55;
border: 2px solid rgba(0, 0, 0, 0.20);
}
.AutoSolverBoxTitleSectionOneBETATagOneTextOne {
color: #FFF;
font-style: normal;
font-weight: 700;
line-height: normal;
margin-top: 0px;
margin-bottom: 0px;
font-size: 16px;
cursor: default;
}
.AutoSolverBoxTitleSectionTwoTextOne {
color: rgb(var(--color-eel), 0.8);
height: 44px;
font-weight: 700;
font-size: 16px;
margin: 0px;
margin-top: -2px;
cursor: default;
}
.AutoSolverBoxSectionThreeBoxSectionOne {
height: 100%;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
gap: 8px
}
.AutoSolverBoxRepeatNumberDownButton {
position: relative;
display: flex;
width: 48px;
height: 48px;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 8px;
flex-shrink: 0;
border-radius: 8px;
border: 2px solid rgba(0, 0, 0, 0.20);
border-bottom: 4px solid rgba(0, 0, 0, 0.20);
background: #007AFF;
cursor: pointer;
transition: .1s;
color: #FFF;
text-align: center;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
}
.AutoSolverBoxRepeatNumberDownButton:hover {
filter: brightness(0.95);
}
.AutoSolverBoxRepeatNumberDownButton:active {
margin-top: 2px;
height: 46px;
border-bottom: 2px solid rgba(0, 0, 0, 0.20);
filter: brightness(0.9);
}
.AutoSolverBoxRepeatNumberDisplay {
position: relative;
text-align: center;
display: inline-flex;
height: 48px;
width: 100%;
padding: 16px;
justify-content: center;
align-items: center;
gap: 8px;
font-size: 16px;
font-weight: 700;
border-radius: 8px;
border: 2px solid rgb(var(--color-eel), 0.2);
background: rgb(var(--color-swan), 0.8);
cursor: default;
color: rgb(var(--color-eel));
text-align: center;
}
.AutoSolverBoxRepeatNumberUpButton {
position: relative;
display: flex;
width: 48px;
height: 48px;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 8px;
flex-shrink: 0;
border-radius: 8px;
border: 2px solid rgba(0, 0, 0, 0.20);
border-bottom: 4px solid rgba(0, 0, 0, 0.20);
background: #007AFF;
cursor: pointer;
transition: .1s;
color: #FFF;
text-align: center;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
}
.AutoSolverBoxRepeatNumberUpButton:hover {
filter: brightness(0.95);
}
.AutoSolverBoxRepeatNumberUpButton:active {
margin-top: 2px;
height: 46px;
border-bottom: 2px solid rgba(0, 0, 0, 0.20);
filter: brightness(0.9);
}
.AutoSolverBoxSectionThreeBoxSectionTwo {
height: 100%;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
gap: 8px;
}
.AutoSolverBoxSectionThreeBoxSectionTwoTextOne {
position: relative;
text-align: center;
display: inline-flex;
height: 48px;
width: 100%;
justify-content: left;
align-items: center;
gap: 8px;
font-size: 16px;
font-weight: 700;
border-radius: 8px;
cursor: default;
color: rgb(var(--color-eel));
text-align: left;
}
.AutoSolverBoxSectionThreeBoxSectionTwoButton {
position: relative;
display: flex;
width: 64px;
height: 48px;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 8px;
flex-shrink: 0;
border-radius: 8px;
border: 2px solid rgba(0, 0, 0, 0.20);
border-bottom: 4px solid rgba(0, 0, 0, 0.20);
background: #007AFF;
cursor: pointer;
transition: .1s;
color: #FFF;
text-align: center;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
}
.AutoSolverBoxSectionThreeBoxSectionTwoButton:hover {
filter: brightness(0.95);
}
.AutoSolverBoxSectionThreeBoxSectionTwoButton:active {
height: 46px;
margin-top: 2px;
border-bottom: 2px solid rgba(0, 0, 0, 0.20);
filter: brightness(0.9);
}
.AutoSolverBoxRepeatStartButton {
position: relative;
display: flex;
height: 48px;
width: 100%;
justify-content: center;
align-items: center;
gap: 8px;
align-self: stretch;
font-size: 16px;
border-radius: 8px;
border: 2px solid rgba(0, 0, 0, 0.20);
border-bottom: 4px solid rgba(0, 0, 0, 0.20);
background: #007AFF;
font-weight: 700;
color: #FFF;
text-align: center;
cursor: pointer;
transition: .1s;
}
.AutoSolverBoxRepeatStartButton:hover {
filter: brightness(0.95);
}
.AutoSolverBoxRepeatStartButton:active {
height: 46px;
margin-top: 2px;
border-bottom: 2px solid rgba(0, 0, 0, 0.20);
filter: brightness(0.9);
}
`;
let injectedContainer = null;
let injectedStyleElement = null;
function injectContent() {
if (window.location.pathname === '/learn') {
// Inject the content if it's not already injected
if (!injectedContainer) {
// Creating a container for the overlay
injectedContainer = document.createElement('div');
injectedContainer.innerHTML = htmlContent;
document.body.appendChild(injectedContainer);
// Creating a style tag for CSS
injectedStyleElement = document.createElement('style');
injectedStyleElement.type = 'text/css';
injectedStyleElement.innerHTML = cssContent;
document.head.appendChild(injectedStyleElement);
initializeDuolingoProSystemButtons();
let AutoSolverBoxSectionThreeBoxSectionTwoIDOneForHiding = document.querySelector('#AutoSolverBoxSectionThreeBoxSectionTwoIDOne');
let AutoSolverBoxSectionThreeBoxSectionTwoIDTwoForHiding = document.querySelector('#AutoSolverBoxSectionThreeBoxSectionTwoIDTwo');
if (!AutoSolverSettingsShowAutoSolverBox) {
let AutoSolverBoxBackgroundForHiding = document.querySelector('.AutoSolverBoxBackground');
AutoSolverBoxBackgroundForHiding.remove();
} else if (AutoSolverSettingsShowAutoSolverBox) {
initializeAutoSolverBoxButtonInteractiveness();
something();
if (!AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox) {
AutoSolverBoxSectionThreeBoxSectionTwoIDOneForHiding.remove();
}
if (!AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox) {
AutoSolverBoxSectionThreeBoxSectionTwoIDTwoForHiding.remove();
}
} else {
console.log('error 5');
}
}
} else {
// Remove the content if it was previously injected
if (injectedContainer) {
document.body.removeChild(injectedContainer);
document.head.removeChild(injectedStyleElement);
injectedContainer = null;
injectedStyleElement = null;
}
}
}
function initializeDuolingoProSystemButtons() {
//console.log('yeah yeah yeah');
const DuolingoProSettingsButtonOne = document.querySelector('.DuolingoProSettingsButtonOne');
DuolingoProSettingsButtonOne.addEventListener('click', () => {
wasDuolingoProSettingsButtonOnePressed = true;
console.log('wasDuolingoProSettingsButtonOnePressed' + wasDuolingoProSettingsButtonOnePressed);
});
const SendFeedbackButton = document.querySelector('.SendFeedbackButtonOne');
SendFeedbackButton.addEventListener('click', () => {
isSendFeedbackButtonPressed = true;
console.log('isSendFeedbackButtonPressed' + isSendFeedbackButtonPressed);
});
}
function openChestThingyFunction() {
try {
const openChestThingy = document.querySelector("button[aria-label='Open chest']");
openChestThingy.click();
} catch (error) {
}
}
let isAutoSolverBoxRepeatStartButtonEnabled = false;
function something() {
const AutoSolverBoxRepeatStartButton = document.querySelector('.AutoSolverBoxRepeatStartButton');
function disableHover() {
AutoSolverBoxRepeatStartButton.style.filter = '';
AutoSolverBoxRepeatStartButton.style.height = '';
AutoSolverBoxRepeatStartButton.style.marginTop = '';
AutoSolverBoxRepeatStartButton.style.borderBottom = '';
}
function enableHover() {
AutoSolverBoxRepeatStartButton.style.filter = 'brightness(1.0)';
AutoSolverBoxRepeatStartButton.style.height = '46px';
AutoSolverBoxRepeatStartButton.style.marginTop = '2px';
AutoSolverBoxRepeatStartButton.style.borderBottom = '2px solid rgba(0, 0, 0, 0.20)';
}
if (autoSolverBoxRepeatAmount > 0) {
AutoSolverBoxRepeatStartButton.style.opacity = '100%';
AutoSolverBoxRepeatStartButton.style.cursor = 'pointer';
isAutoSolverBoxRepeatStartButtonEnabled = true;
console.log(autoSolverBoxRepeatAmount);
} else if (autoSolverBoxRepeatAmount === 0) {
AutoSolverBoxRepeatStartButton.style.opacity = '0.5';
AutoSolverBoxRepeatStartButton.style.cursor = 'not-allowed';
isAutoSolverBoxRepeatStartButtonEnabled = false;
} else {
AutoSolverBoxRepeatStartButton.style.opacity = '0.5';
AutoSolverBoxRepeatStartButton.style.cursor = 'not-allowed';
isAutoSolverBoxRepeatStartButtonEnabled = false;
}
if (isAutoSolverBoxRepeatStartButtonEnabled) {
disableHover();
} else {
enableHover();
}
}
function initializeAutoSolverBoxButtonInteractiveness() {
const AutoSolverBoxRepeatNumberDisplay = document.querySelector('.AutoSolverBoxRepeatNumberDisplay');
const AutoSolverBoxRepeatNumberDownButton = document.querySelector('.AutoSolverBoxRepeatNumberDownButton');
const AutoSolverBoxRepeatNumberUpButton = document.querySelector('.AutoSolverBoxRepeatNumberUpButton');
const AutoSolverBoxRepeatStartButton = document.querySelector('.AutoSolverBoxRepeatStartButton');
AutoSolverBoxRepeatNumberDisplay.textContent = autoSolverBoxRepeatAmount;
something();
AutoSolverBoxRepeatNumberDownButton.addEventListener('click', () => {
autoSolverBoxRepeatAmount--;
if (autoSolverBoxRepeatAmount < 0) {
autoSolverBoxRepeatAmount = 0;
}
AutoSolverBoxRepeatNumberDisplay.textContent = autoSolverBoxRepeatAmount;
sessionStorage.setItem('autoSolverBoxRepeatAmount', autoSolverBoxRepeatAmount);
something();
});
AutoSolverBoxRepeatNumberUpButton.addEventListener('click', () => {
autoSolverBoxRepeatAmount++;
AutoSolverBoxRepeatNumberDisplay.textContent = autoSolverBoxRepeatAmount;
sessionStorage.setItem('autoSolverBoxRepeatAmount', autoSolverBoxRepeatAmount);
something();
});
if (wasAutoSolverBoxRepeatStartButtonPressed === true) {
AutoSolverBoxRepeatStartButton.textContent = 'STOP';
}
if (autoSolverBoxRepeatAmount === 0) {
wasAutoSolverBoxRepeatStartButtonPressed = false;
sessionStorage.setItem('wasAutoSolverBoxRepeatStartButtonPressed', wasAutoSolverBoxRepeatStartButtonPressed);
AutoSolverBoxRepeatStartButton.textContent = 'START';
}
if (wasAutoSolverBoxRepeatStartButtonPressed === true) {
AutoSolverBoxRepeatStartButton.textContent = 'STOP';
AutoSolverBoxRepeatStartButtonActions();
}
function AutoSolverBoxRepeatStartButtonActions() {
if (autoSolverBoxRepeatAmount > 0) {
sessionStorage.setItem('autoSolverBoxRepeatAmount', autoSolverBoxRepeatAmount);
openChestThingyFunction();
setTimeout(function() {
if (wasAutoSolverBoxRepeatStartButtonPressed === true && autoSolverBoxRepeatAmount > 0) {
autoSolverBoxRepeatAmount--;
sessionStorage.setItem('autoSolverBoxRepeatAmount', autoSolverBoxRepeatAmount);
if (autoSolverBoxPracticeOnlyMode) {
window.location.href = "https://duolingo.com/practice";
} else if (autoSolverBoxRepeatLessonMode) {
window.location.href = "https://duolingo.com/lesson/unit/1/level/1";
} else {
window.location.href = "https://duolingo.com/lesson";
}
} else {
console.log('cancelled');
}
}, 4000);
}
}
AutoSolverBoxRepeatStartButton.addEventListener('click', () => {
if (autoSolverBoxRepeatAmount > 0) {
AutoSolverBoxRepeatStartButton.textContent = AutoSolverBoxRepeatStartButton.textContent === 'START' ? 'STOP' : 'START';
wasAutoSolverBoxRepeatStartButtonPressed = !wasAutoSolverBoxRepeatStartButtonPressed;
sessionStorage.setItem('wasAutoSolverBoxRepeatStartButtonPressed', wasAutoSolverBoxRepeatStartButtonPressed);
}
console.log(wasAutoSolverBoxRepeatStartButtonPressed);
AutoSolverBoxRepeatStartButtonActions();
});
try {
const AutoSolverBoxSectionThreeBoxSectionTwoButtonIDOneElement = document.querySelector('#AutoSolverBoxSectionThreeBoxSectionTwoButtonIDOne');
const AutoSolverBoxSectionThreeBoxSectionTwoButtonIDTwoElement = document.querySelector('#AutoSolverBoxSectionThreeBoxSectionTwoButtonIDTwo');
AutoSolverBoxSectionThreeBoxSectionTwoButtonIDOneElement.addEventListener('mouseup', () => {
if (autoSolverBoxPracticeOnlyMode) {
autoSolverBoxPracticeOnlyMode = !autoSolverBoxPracticeOnlyMode;
sessionStorage.setItem('autoSolverBoxPracticeOnlyMode', autoSolverBoxPracticeOnlyMode);
updateAutoSolverToggles(AutoSolverBoxSectionThreeBoxSectionTwoButtonIDOneElement, autoSolverBoxPracticeOnlyMode);
} else {
autoSolverBoxPracticeOnlyMode = !autoSolverBoxPracticeOnlyMode;
autoSolverBoxRepeatLessonMode = !autoSolverBoxPracticeOnlyMode;
sessionStorage.setItem('autoSolverBoxPracticeOnlyMode', autoSolverBoxPracticeOnlyMode);
sessionStorage.setItem('autoSolverBoxRepeatLessonMode', autoSolverBoxRepeatLessonMode);
updateAutoSolverToggles(AutoSolverBoxSectionThreeBoxSectionTwoButtonIDOneElement, autoSolverBoxPracticeOnlyMode, AutoSolverBoxSectionThreeBoxSectionTwoButtonIDTwoElement, autoSolverBoxRepeatLessonMode);
}
});
AutoSolverBoxSectionThreeBoxSectionTwoButtonIDTwoElement.addEventListener('mouseup', () => {
if (autoSolverBoxRepeatLessonMode) {
autoSolverBoxRepeatLessonMode = !autoSolverBoxRepeatLessonMode;
sessionStorage.setItem('autoSolverBoxRepeatLessonMode', autoSolverBoxRepeatLessonMode);
updateAutoSolverToggles(AutoSolverBoxSectionThreeBoxSectionTwoButtonIDTwoElement, autoSolverBoxRepeatLessonMode);
} else {
autoSolverBoxRepeatLessonMode = !autoSolverBoxRepeatLessonMode;
autoSolverBoxPracticeOnlyMode = !autoSolverBoxRepeatLessonMode;
sessionStorage.setItem('autoSolverBoxPracticeOnlyMode', autoSolverBoxPracticeOnlyMode);
sessionStorage.setItem('autoSolverBoxRepeatLessonMode', autoSolverBoxRepeatLessonMode);
updateAutoSolverToggles(AutoSolverBoxSectionThreeBoxSectionTwoButtonIDTwoElement, autoSolverBoxRepeatLessonMode, AutoSolverBoxSectionThreeBoxSectionTwoButtonIDOneElement, autoSolverBoxPracticeOnlyMode);
}
});
AutoSolverBoxSectionThreeBoxSectionTwoButtonIDOneElement.addEventListener('mousedown', () => {
if (!autoSolverBoxPracticeOnlyMode) {
AutoSolverBoxSectionThreeBoxSectionTwoButtonIDOneElement.style.border = '2px solid rgb(var(--color-swan))';
AutoSolverBoxSectionThreeBoxSectionTwoButtonIDOneElement.style.borderBottom = '2px solid rgb(var(--color-swan))';
} else {
AutoSolverBoxSectionThreeBoxSectionTwoButtonIDOneElement.style.border = '2px solid rgba(0, 0, 0, 0.20)';
AutoSolverBoxSectionThreeBoxSectionTwoButtonIDOneElement.style.borderBottom = '2px solid rgba(0, 0, 0, 0.20)';
}
});
AutoSolverBoxSectionThreeBoxSectionTwoButtonIDTwoElement.addEventListener('mousedown', () => {
if (!autoSolverBoxRepeatLessonMode) {
AutoSolverBoxSectionThreeBoxSectionTwoButtonIDTwoElement.style.border = '2px solid rgb(var(--color-swan))';
AutoSolverBoxSectionThreeBoxSectionTwoButtonIDTwoElement.style.borderBottom = '2px solid rgb(var(--color-swan))';
} else {
AutoSolverBoxSectionThreeBoxSectionTwoButtonIDTwoElement.style.border = '2px solid rgba(0, 0, 0, 0.20)';
AutoSolverBoxSectionThreeBoxSectionTwoButtonIDTwoElement.style.borderBottom = '2px solid rgba(0, 0, 0, 0.20)';
}
});
addEventListener('mouseup', () => {
updateAutoSolverToggles(AutoSolverBoxSectionThreeBoxSectionTwoButtonIDOneElement, autoSolverBoxPracticeOnlyMode);
updateAutoSolverToggles(AutoSolverBoxSectionThreeBoxSectionTwoButtonIDTwoElement, autoSolverBoxRepeatLessonMode);
});
updateAutoSolverToggles(AutoSolverBoxSectionThreeBoxSectionTwoButtonIDOneElement, autoSolverBoxPracticeOnlyMode);
updateAutoSolverToggles(AutoSolverBoxSectionThreeBoxSectionTwoButtonIDTwoElement, autoSolverBoxRepeatLessonMode);
} catch(error) {
}
function updateAutoSolverToggles(element, value, oppsiteElement, oppositeValue) {
try {
element.textContent = value ? "ON" : "OFF";
oppsiteElement.textContent = value ? "OFF" : "ON";
} catch(error) {
}
try {
if (value) {
element.style.background = '#007AFF';
element.style.border = '2px solid rgba(0, 0, 0, 0.20)';
element.style.borderBottom = '4px solid rgba(0, 0, 0, 0.20)';
oppsiteElement.style.background = 'rgb(var(--color-snow))';
oppsiteElement.style.border = '2px solid rgb(var(--color-swan))';
oppsiteElement.style.borderBottom = '4px solid rgb(var(--color-swan))';
} else {
element.style.background = 'rgb(var(--color-snow))';
element.style.border = '2px solid rgb(var(--color-swan))';
element.style.borderBottom = '4px solid rgb(var(--color-swan))';
oppsiteElement.style.background = '#007AFF';
oppsiteElement.style.border = '2px solid rgba(0, 0, 0, 0.20)';
oppsiteElement.style.borderBottom = '4px solid rgba(0, 0, 0, 0.20)';
}
} catch(error) {
}
}
console.log('initializeAutoSolverBoxButtonInteractiveness ran');
}
setInterval(injectContent, 100);
function checkURLForAutoSolverBox() {
if (window.location.pathname === '/lesson' || window.location.pathname.includes('/unit') || window.location.pathname === '/practice') {
setTimeout(function() {
if (wasAutoSolverBoxRepeatStartButtonPressed === true) {
isAutoMode = true;
solvingIntervalId = setInterval(solve, 500);
} else {
console.log('error 2');
}
}, 1000);
} else {
}
}
checkURLForAutoSolverBox();
injectContent();
let DuolingoSiderbarPaddingThingFunctionRepeatTimes = 20;
function DuolingoHomeSiderbarAddPaddingFunction() {
if (window.location.pathname === '/learn') {
try {
const DuolingoSiderbarPaddingThing = document.querySelector('.Fc0NK');
if (AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox === true && AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox === true) {
DuolingoSiderbarPaddingThing.style.paddingBottom = '582px'; // or 574px if an 8px gap preferred
} else if (AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox === true || AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox === true) {
DuolingoSiderbarPaddingThing.style.paddingBottom = '526px'; // or 518px if an 8px gap preferred
} else {
DuolingoSiderbarPaddingThing.style.paddingBottom = '470px'; // or 462px if an 8px gap preferred
}
} catch(error) {
}
}
}
setInterval(DuolingoHomeSiderbarAddPaddingFunction, 100);
function DuolingoRemoveLearnAds() {
// if (window.location.pathname === '/learn' || window.location.pathname === '/shop') {
try {
const DuolingoRemoveLearnAdsElementOne = document.querySelector('._3bfsh');
DuolingoRemoveLearnAdsElementOne.remove();
} catch(error) {
}
// }
}
const RemovedByDuolingoProOneHTML = `
Ads Blocked by Duolingo Pro
HIDE
These ads were removed with ProBlock by Duolingo Pro.
`;
const RemovedByDuolingoProOneCSS = `
.BlockedByDuolingoProBoxBackground {
display: flex;
width: 100%;
padding: 16px;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 4px;
flex-shrink: 0;
border-radius: 16px;
border: 2px solid rgb(var(--color-swan));
background: rgb(var(--color-snow));
}
.BlockedByDuolingoProBoxSectionOne {
display: flex;
justify-content: space-between;
align-items: center;
align-self: stretch;
}
.BlockedByDuolingoProBoxSectionOneTextOne {
color: rgb(var(--color-eel));
font-size: 18px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
cursor: default;
}
.BlockedByDuolingoProBoxSectionOneTextTwo {
color: var(--web-ui_button-color,rgb(var(--color-macaw)));
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
cursor: pointer;
transition: .1s;
user-select: none; // chrome and Opera
-moz-user-select: none; // Firefox
-webkit-text-select: none; // IOS Safari
-webkit-user-select: none; // Safari
}
.BlockedByDuolingoProBoxSectionOneTextTwo:hover {
filter: brightness(1.1);
}
.BlockedByDuolingoProBoxSectionOneTextTwo:active {
filter: brightness(1.2);
}
.BlockedByDuolingoProBoxSectionTwoTextOne {
align-self: stretch;
color: rgb(var(--color-hare));
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
cursor: default;
}
`;
let injectedRemovedByDuolingoProOneElement = null;
let injectedRemovedByDuolingoProOneStyle = null;
function iforgot() {
try {
let targetDiv = document.querySelector('.Fc0NK');
if (targetDiv) {
if (ProBlockBannerOneVisible) {
if (!injectedRemovedByDuolingoProOneElement) {
injectedRemovedByDuolingoProOneStyle = document.createElement('style');
injectedRemovedByDuolingoProOneStyle.type = 'text/css';
injectedRemovedByDuolingoProOneStyle.innerHTML = RemovedByDuolingoProOneCSS;
document.head.appendChild(injectedRemovedByDuolingoProOneStyle);
injectedRemovedByDuolingoProOneElement = document.createElement('div');
injectedRemovedByDuolingoProOneElement.innerHTML = RemovedByDuolingoProOneHTML;
targetDiv.appendChild(injectedRemovedByDuolingoProOneElement);
} else {
let BlockedByDuolingoProBoxSectionOneTextTwoElement = document.querySelector('.BlockedByDuolingoProBoxSectionOneTextTwo');
let BlockedByDuolingoProBoxBackgroundElement = document.querySelector('.BlockedByDuolingoProBoxBackground');
BlockedByDuolingoProBoxSectionOneTextTwoElement.addEventListener('click', () => {
ProBlockBannerOneVisible = false;
localStorage.setItem("ProBlockBannerOneVisible", ProBlockBannerOneVisible);
BlockedByDuolingoProBoxBackgroundElement.remove();
});
}
}
} else {
console.error("Target div with class 'Fc0NK' not found.");
}
} catch(error) {
}
}
if (DuolingoProSettingsProBlockMode) {
setInterval(iforgot, 100);
setInterval(DuolingoRemoveLearnAds, 100);
}
function theconsoleOne() {
console.log(autoSolverBoxPracticeOnlyMode);
console.log(autoSolverBoxRepeatLessonMode);
}
//setInterval(theconsoleOne, 1000);
const SendFeedbackBoxHTML = `
Submit Feedback for Duolingo Pro
`;
const SendFeedbackBoxCSS = `
.SendFeebackBoxShadow {
position: fixed;
display: flex;
width: 100%;
height: 100vh;
justify-content: center;
align-items: center;
flex-shrink: 0;
background: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(8px);
z-index: 2;
top: 0px;
bottom: 0px;
right: 0px;
left: 0px;
}
.SendFeebackBoxBackground {
display: flex;
padding: 16px;
justify-content: center;
align-items: center;
gap: 16px;
border-radius: 16px;
border: 2px solid rgb(var(--color-swan));
background: rgb(var(--color-snow));
width: 500px;
}
.SendFeebackBoxLayers {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 8px;
width: 100%;
}
form {
width: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 8px;
}
.SendFeebackBoxSectionOne {
display: flex;
justify-content: space-between;
align-items: center;
gap: 16px;
width: 100%;
height: 38px;
}
.SendFeebackBoxSectionOneTextOne {
color: rgb(var(--color-eel));
font-size: 24px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin-top: 0px;
margin-bottom: 0px;
height: 32px;
cursor: default;
}
.SendFeebackBoxSectionOneCancelBoxBackground {
display: flex;
width: 34px;
height: 36px;
flex-shrink: 0;
flex-direction: column;
justify-content: center;
align-items: center;
background: rgb(var(--color-snow));
border-radius: 8px;
border: 2px solid rgb(var(--color-eel), 0.2);
border-bottom: 4px solid rgb(var(--color-eel), 0.2);
cursor: pointer;
transition: .1s;
}
.SendFeebackBoxSectionOneCancelBoxBackground:hover {
filter: brightness(0.95);
}
.SendFeebackBoxSectionOneCancelBoxBackground:active {
height: 34px;
border-bottom: 2px solid rgb(var(--color-eel), 0.2);
margin-top: 2px;
filter: brightness(0.9);
}
.SendFeebackBoxSectionOneCancelBoxIconOne {
display: flex;
width: 12px;
height: 12px;
flex-direction: column;
justify-content: center;
flex-shrink: 0;
fill: rgb(var(--color-eel), 0.4);
}
.SendFeebackBoxSectionTwo {
display: flex;
width: 100%;
height: 150px;
resize: vertical;
padding: 8px;
box-sizing: border-box;
justify-content: center;
align-items: center;
border-radius: 8px;
border: 2px solid rgb(var(--color-eel), 0.2);
background: rgb(var(--color-swan), 0.4);
color: rgb(var(--color-swan));
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
}
.SendFeebackBoxSectionTwo::placeholder {
font-weight: 700;
}
.SendFeebackBoxSectionTwo:focus {
border: 2px solid #007AFF;
background: rgb(var(--color-swan), 0.4);
color: rgb(var(--color-eel));
}
.SendFeebackBoxSectionThree {
display: flex;
width: 100%;
flex-direction: column;
justify-content: center;
color: rgb(var(--color-eel));
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
cursor: default;
margin-top: 0px;
margin-bottom: 0px;
height: 32px;
}
.SendFeebackBoxSectionFour {
display: flex;
width: 100%;
justify-content: center;
align-items: center;
align-self: stretch;
gap: 8px;
}
.SendFeebackBoxSectionFourButtonOneBackground {
display: flex;
height: 54px;
align-items: center;
flex: 1 0 0;
border-radius: 8px;
border: 2px solid rgb(var(--color-swan));
border-bottom: 4px solid rgb(var(--color-swan));
background: rgb(var(--color-snow));
cursor: pointer;
transition: .1s;
}
.SendFeebackBoxSectionFourButtonOneBackground:hover {
filter: brightness(0.95);
}
.SendFeebackBoxSectionFourButtonOneBackground:active {
height: 52px;
border-bottom: 2px solid rgb(var(--color-swan));
filter: brightness(0.9);
margin-top: 2px;
}
.SendFeebackBoxSectionFourButtonOneIconOneBox {
display: flex;
width: 48px;
height: 48px;
justify-content: center;
align-items: center;
}
.SendFeebackBoxSectionFourButtonOneIconOne {
appearance: none;
width: 20px;
height: 20px;
flex-shrink: 0;
margin-right: 16px;
margin-left: 16px;
border-radius: 20px;
border: 4px solid rgb(var(--color-swan), 0.4);
background: rgb(var(--color-swan), 0.2);
opacity: 100% !important;
cursor: pointer;
/* Default style for the label when not checked */
+label {
color: rgb(var(--color-swan));
}
}
/* Styling when the radio button is checked */
.SendFeebackBoxSectionFourButtonOneIconOne:checked {
background: #FF2D55;
/* Change the label's color when the input is checked */
+label {
color: #FF2D55;
}
}
.SendFeebackBoxSectionFourButtonOneBackground label {
width: 100%;
height: 100%;
align-items: center;
display: flex;
font-style: normal;
font-weight: 700;
line-height: normal;
font-size: 16px;
cursor: pointer;
user-select: none; // chrome and Opera
-moz-user-select: none; // Firefox
-webkit-text-select: none; // IOS Safari
-webkit-user-select: none; // Safari
}
.SendFeebackBoxSectionFourButtonOneTextOne {
flex: 1 0 0;
color: #FF2D55;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
user-select: none; // chrome and Opera
-moz-user-select: none; // Firefox
-webkit-text-select: none; // IOS Safari
-webkit-user-select: none; // Safari
}
.SendFeebackBoxSectionFourButtonOneIconTwoBox {
display: flex;
width: 48px;
height: 48px;
justify-content: center;
align-items: center;
}
.SendFeebackBoxSectionFourButtonOneIconTwo {
display: flex;
width: 16px;
height: 16px;
flex-direction: column;
justify-content: center;
align-items: center;
color: rgba(255, 45, 85, 0.00);
text-align: center;
font-size: 15px;
font-style: normal;
font-weight: 700;
line-height: normal;
fill: #FF2D55;
}
.SendFeebackBoxSectionFourButtonTwoBackground {
display: flex;
height: 54px;
align-items: center;
flex: 1 0 0;
border-radius: 8px;
border: 2px solid rgb(var(--color-swan));
border-bottom: 4px solid rgb(var(--color-swan));
background: rgb(var(--color-snow));
cursor: pointer;
transition: .1s;
}
.SendFeebackBoxSectionFourButtonTwoBackground:hover {
filter: brightness(0.95);
}
.SendFeebackBoxSectionFourButtonTwoBackground:active {
height: 52px;
border-bottom: 2px solid rgb(var(--color-swan));
filter: brightness(0.9);
margin-top: 2px;
}
.SendFeebackBoxSectionFourButtonTwoIconOneBox {
display: flex;
width: 48px;
height: 48px;
justify-content: center;
align-items: center;
}
.SendFeebackBoxSectionFourButtonTwoIconOne {
appearance: none;
width: 20px;
height: 20px;
flex-shrink: 0;
margin-right: 16px;
margin-left: 16px;
border-radius: 20px;
border: 4px solid rgb(var(--color-swan), 0.4);
background: rgb(var(--color-swan), 0.2);
opacity: 100% !important;
cursor: pointer;
/* Default style for the label when not checked */
+label {
color: rgb(var(--color-swan));
}
}
/* Styling when the radio button is checked */
.SendFeebackBoxSectionFourButtonTwoIconOne:checked {
background: #007AFF;
/* Change the label's color when the input is checked */
+label {
color: #007AFF;
}
}
.SendFeebackBoxSectionFourButtonTwoBackground label {
width: 100%;
height: 100%;
align-items: center;
display: flex;
font-style: normal;
font-weight: 700;
line-height: normal;
font-size: 16px;
cursor: pointer;
user-select: none; // chrome and Opera
-moz-user-select: none; // Firefox
-webkit-text-select: none; // IOS Safari
-webkit-user-select: none; // Safari
}
.SendFeebackBoxSectionFourButtonTwoTextOne {
flex: 1 0 0;
color: #007AFF;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
user-select: none; // chrome and Opera
-moz-user-select: none; // Firefox
-webkit-text-select: none; // IOS Safari
-webkit-user-select: none; // Safari
}
.SendFeebackBoxSectionFourButtonTwoIconTwoBox {
display: flex;
width: 48px;
height: 48px;
justify-content: center;
align-items: center;
}
.SendFeebackBoxSectionFourButtonTwoIconTwo {
display: flex;
width: 16px;
height: 16px;
flex-direction: column;
justify-content: center;
align-items: center;
color: rgba(255, 45, 85, 0.00);
text-align: center;
line-height: normal;
fill: #007AFF;
}
.SendFeebackBoxSectionFive {
display: flex;
flex-direction: column;
justify-content: center;
align-self: stretch;
color: rgb(var(--color-eel));
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
cursor: default;
margin-top: 0px;
margin-bottom: 0px;
height: 32px;
}
.SendFeebackBoxSectionSix {
display: flex;
height: 54px;
align-items: center;
align-self: stretch;
flex: 1 0 0;
border-radius: 8px;
border: 2px solid rgb(var(--color-swan));
border-bottom: 4px solid rgb(var(--color-swan));
background: rgb(var(--color-snow));
cursor: pointer;
transition: .1s;
}
.SendFeebackBoxSectionSix:hover {
filter: brightness(0.95);
}
.SendFeebackBoxSectionSix:active {
height: 52px;
border-bottom: 2px solid rgb(var(--color-swan));
filter: brightness(0.9);
margin-top: 2px;
}
.SendFeebackBoxSectionSixIconOneBox {
display: flex;
width: 48px;
height: 48px;
justify-content: center;
align-items: center;
}
.SendFeebackBoxSectionSixIconOne {
width: 20px;
height: 20px;
flex-shrink: 0;
border-radius: 20px;
border: 4px solid rgb(var(--color-swan), 0.4);
background: #34C759;
}
.SendFeebackBoxSectionSixTextOne {
flex: 1 0 0;
color: #34C759;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
user-select: none; // chrome and Opera
-moz-user-select: none; // Firefox
-webkit-text-select: none; // IOS Safari
-webkit-user-select: none; // Safari
}
.SendFeebackBoxSectionSixIconTwoBox {
display: flex;
width: 48px;
height: 48px;
justify-content: center;
align-items: center;
}
.SendFeebackBoxSectionSixIconTwoBoxCaption {
position: absolute;
transform: translate(435px, -35px);
display: inline-flex;
padding: 8px;
justify-content: center;
align-items: center;
border-radius: 8px;
border: 2px solid #E5E5E5;
background: #FFF;
opacity: 0;
}
.SendFeebackBoxSectionSixIconTwoBox:hover+.SendFeebackBoxSectionSixIconTwoBoxCaption {
position: absolute;
transform: translate(435px, -35px);
display: inline-flex;
padding: 8px;
justify-content: center;
align-items: center;
border-radius: 8px;
border: 2px solid #E5E5E5;
background: #FFF;
filter: none !important;
transition-delay: 2s;
transition: 0.5s;
opacity: 1;
}
.SendFeebackBoxSectionSixIconTwoBoxCaptionTextOne {
color: rgba(0, 0, 0, 0.90);
font-size: 12px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin-top: 0px;
margin-bottom: 0px;
}
.SendFeebackBoxSectionSixIconTwo {
display: flex;
width: 16px;
height: 16px;
flex-direction: column;
justify-content: center;
align-items: center;
color: rgba(255, 45, 85, 0.00);
text-align: center;
line-height: normal;
}
.SendFeebackBoxSectionSeven {
// height: 48px;
height: 56px;
align-self: stretch;
border-radius: 8px;
position: relative;
cursor: not-allowed !important;
}
.SendFeebackBoxSectionSevenBoxOne {
flex-shrink: 0;
display: flex;
gap: 32px;
align-items: center;
height: 54px;
/* set the height */
overflow: hidden;
/* clip any overflowing content */
border-radius: 8px;
pointer-events: none;
}
.SendFeebackBoxSectionSevenBoxOneBoxOne {
width: 16px;
height: 100px;
transform: rotate(45deg);
flex-shrink: 0;
background: rgb(var(--color-eel), 0.1);
}
.SendFeebackBoxSectionSevenBoxTwo {
display: flex;
height: 54px;
align-items: center;
align-self: stretch;
flex: 1 0 0;
position: absolute;
width: 100%;
border-radius: 8px;
border: 2px solid rgb(var(--color-swan));
border-bottom: 4px solid rgb(var(--color-swan));
background: rgb(var(--color-snow));
// cursor: pointer;
transition: .1s;
}
.SendFeebackBoxSectionSevenBoxTwo:hover {
filter: brightness(0.95);
}
.SendFeebackBoxSectionSevenBoxTwo:active {
border-bottom: 4px solid rgb(var(--color-swan));
filter: brightness(0.95);
}
.SendFeebackBoxSectionSevenBoxTwoIconOneBox {
display: flex;
width: 48px;
height: 48px;
justify-content: center;
align-items: center;
}
.SendFeebackBoxSectionSevenBoxTwoIconOne {
width: 20px;
height: 20px;
flex-shrink: 0;
border-radius: 20px;
border: 4px solid rgb(var(--color-swan), 0.4);
background: rgb(var(--color-swan), 0.2);
}
.SendFeebackBoxSectionSevenBoxTwoTextOne {
flex: 1 0 0;
color: rgb(var(--color-swan));
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin-top: 0px;
margin-bottom: 0px;
user-select: none; // chrome and Opera
-moz-user-select: none; // Firefox
-webkit-text-select: none; // IOS Safari
-webkit-user-select: none; // Safari
}
.SendFeebackBoxSectionSevenBoxTwoIconTwoBox {
display: flex;
width: 48px;
height: 48px;
justify-content: center;
align-items: center;
}
.SendFeebackBoxSectionSevenBoxTwoIconTwo {
display: flex;
width: 16px;
height: 16px;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
line-height: normal;
fill: rgb(var(--color-swan));
}
.SendFeedbackBoxSectionEight {
display: flex;
justify-content: center;
align-items: center;
gap: 8px;
align-self: stretch;
}
.SendFeebackBoxSectionEightSendButton {
display: flex;
height: 54px;
width: 100%;
justify-content: center;
align-items: center;
gap: 10px;
align-self: stretch;
border-radius: 8px;
border: 2px solid #0062CC;
border-bottom: 4px solid #0062CC;
background: #007AFF;
color: #FFF;
text-align: center;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
cursor: pointer;
transition: .1s;
padding: 0px;
}
.SendFeebackBoxSectionEightSendButton:hover {
filter: brightness(0.95);
}
.SendFeebackBoxSectionEightSendButton:active {
height: 52px;
border-bottom: 2px solid #0062CC;
margin-top: 2px;
filter: brightness(0.9);
}
.SendFeebackBoxSectionEightEmailButton {
display: flex;
height: 54px;
width: 100%;
justify-content: center;
align-items: center;
gap: 10px;
align-self: stretch;
border-radius: 8px;
border: 2px solid rgb(var(--color-swan));
border-bottom: 4px solid rgb(var(--color-swan));
background: rgb(var(--color-snow));
color: rgb(var(--color-eel));
text-align: center;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
cursor: pointer;
transition: .1s;
text-decoration: none;
}
.SendFeebackBoxSectionEightEmailButton:hover {
filter: brightness(0.95);
}
.SendFeebackBoxSectionEightEmailButton:active {
height: 52px;
border-bottom: 2px solid rgb(var(--color-swan));
margin-top: 2px;
filter: brightness(0.9);
}
.SendFeebackBoxSectionEightTextOne {
display: flex;
flex-direction: column;
justify-content: center;
flex: 1 0 0;
align-self: stretch;
color: #FFF;
text-align: center;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
user-select: none; // chrome and Opera
-moz-user-select: none; // Firefox
-webkit-text-select: none; // IOS Safari
-webkit-user-select: none; // Safari
}
`;
let randomValue;
function setRandomValue() {
if (Boolean(localStorage.getItem("RandomValue")) === false) {
randomValue = Math.floor(Math.random() * 1000000); // Generates a random number between 0 and 999999
localStorage.setItem("RandomValue", String(randomValue));
console.log("Generated ID: ", randomValue); // This is to show you the generated ID, you can remove it later
} else {
randomValue = localStorage.getItem("RandomValue");
}
}
setRandomValue();
let injectedSendFeedBackBoxElement = null;
let injectedSendFeedBackBoxStyle = null;
function injectSendFeedBackBox() {
//console.log('injectSendFeedBackBox called');
if (isSendFeedbackButtonPressed === true) {
// Inject the content if it's not already injected
if (!injectedSendFeedBackBoxElement) {
// Creating a container for the overlay
injectedSendFeedBackBoxElement = document.createElement('div');
injectedSendFeedBackBoxElement.innerHTML = SendFeedbackBoxHTML;
document.body.appendChild(injectedSendFeedBackBoxElement);
// Creating a style tag for CSS
injectedSendFeedBackBoxStyle = document.createElement('style');
injectedSendFeedBackBoxStyle.type = 'text/css';
injectedSendFeedBackBoxStyle.innerHTML = SendFeedbackBoxCSS;
document.head.appendChild(injectedSendFeedBackBoxStyle);
document.getElementById('SendFeebackBoxSectionSixIconTwoBoxID').value = randomValue;
const SendFeedbackCloseButton = document.querySelector('.SendFeebackBoxSectionOneCancelBoxBackground');
SendFeedbackCloseButton.addEventListener('click', () => {
isSendFeedbackButtonPressed = false;
});
}
} else {
// Remove the content if it was previously injected
if (injectedSendFeedBackBoxElement) {
document.body.removeChild(injectedSendFeedBackBoxElement);
document.head.removeChild(injectedSendFeedBackBoxStyle);
injectedSendFeedBackBoxElement = null;
injectedSendFeedBackBoxStyle = null;
}
}
}
setInterval(injectSendFeedBackBox, 100);
const WhatsNewBoxHTML = `
Brand New Backend
The backend for AutoSolver has been completely rewritten, providing more stability.
`;
const WhatsNewBoxCSS = `
.WhatsNewBoxOneShadow {
position: fixed;
display: flex;
width: 100%;
height: 100vh;
justify-content: center;
align-items: center;
flex-shrink: 0;
background: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(8px);
z-index: 2;
top: 0px;
bottom: 0px;
right: 0px;
left: 0px;
}
.WhatsNewBoxOneBackground {
display: flex;
padding: 16px;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 8px;
border-radius: 16px;
border: 2px solid rgba(0, 0, 0, 0.10);
background: #FFF;
width: 400px;
}
.WhatsNewBoxOneSectionOne {
display: flex;
justify-content: space-between;
align-items: center;
align-self: stretch;
}
.WhatsNewBoxOneSectionOneTextOne {
color: #000;
font-size: 24px;
font-style: normal;
font-weight: 700;
line-height: normal;
cursor: default;
margin: 0px;
}
.WhatsNewBoxOneSectionOneBoxOne {
display: flex;
padding: 8px;
flex-direction: column;
justify-content: center;
align-items: center;
border-radius: 8px;
border: 2px solid rgba(0, 0, 0, 0.20);
background: #FF2D55;
}
.WhatsNewBoxOneSectionOneBoxOneTextOne {
color: #FFF;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
cursor: default;
margin: 0px;
}
.WhatsNewBoxOneSectionTwo {
display: flex;
height: 300px;
flex-direction: column;
justify-content: center;
align-items: center;
align-self: stretch;
padding: 0px;
border-radius: 8px;
border: 2px solid rgba(0, 0, 0, 0.20);
background: rgba(0, 0, 0, 0.05);
}
.WhatsNewBoxOneSectionTwoImageOne {
width: 100%;
border-radius: 8px;
}
.WhatsNewBoxOneSectionThree {
display: flex;
padding-bottom: 0px;
flex-direction: column;
align-items: flex-start;
gap: 4px;
align-self: stretch;
margin-top: 4px;
margin-bottom: 8px;
}
.WhatsNewBoxOneSectionThreeTextOne {
align-self: stretch;
color: #000;
font-size: 20px;
font-style: normal;
font-weight: 700;
line-height: normal;
cursor: default;
margin: 0px;
}
.WhatsNewBoxOneSectionThreeTextTwo {
align-self: stretch;
color: rgba(0, 0, 0, 0.50);
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
cursor: default;
margin: 0px;
}
.WhatsNewBoxOneSectionFour {
display: flex;
height: 48px;
justify-content: center;
align-items: center;
gap: 8px;
align-self: stretch;
border-radius: 8px;
border: 2px solid rgba(0, 0, 0, 0.20);
border-bottom: 4px solid rgba(0, 0, 0, 0.20);
background: #007AFF;
cursor: pointer;
transition: .1s;
}
.WhatsNewBoxOneSectionFour:hover {
filter: brightness(0.95);
}
.WhatsNewBoxOneSectionFour:active {
filter: brightness(0.9);
margin-top: 2px;
height: 46px;
border-bottom: 2px solid rgba(0, 0, 0, 0.20);
filter: brightness(0.9);
}
.WhatsNewBoxOneSectionFourTextOne {
color: #FFF;
text-align: center;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
user-select: none; // chrome and Opera
-moz-user-select: none; // Firefox
-webkit-text-select: none; // IOS Safari
-webkit-user-select: none; // Safari
}
`;
let injectedWhatsNewBoxElement = null;
let injectedWhatsNewBoxStyle = null;
function injectWhatsNewBox() {
//console.log('injectWhatsNewBox called');
if (wasWhatsNewInTwoPointZeroBetaFourFinished === false) {
if (window.location.pathname === '/learn') {
// Inject the content if it's not already injected
if (!injectedWhatsNewBoxElement) {
// Creating a container for the overlay
injectedWhatsNewBoxElement = document.createElement('div');
injectedWhatsNewBoxElement.innerHTML = WhatsNewBoxHTML;
document.body.appendChild(injectedWhatsNewBoxElement);
// Creating a style tag for CSS
injectedWhatsNewBoxStyle = document.createElement('style');
injectedWhatsNewBoxStyle.type = 'text/css';
injectedWhatsNewBoxStyle.innerHTML = WhatsNewBoxCSS;
document.head.appendChild(injectedWhatsNewBoxStyle);
const WhatsNewBoxOneSectionFour = document.querySelector('.WhatsNewBoxOneSectionFour');
WhatsNewBoxOneSectionFour.addEventListener('click', () => {
whatsNewInBetaStage++;
console.log('something');
modifyWhatsNewBox();
});
}
}
} else {
// Remove the content if it was previously injected
if (injectedWhatsNewBoxElement) {
document.body.removeChild(injectedWhatsNewBoxElement);
document.head.removeChild(injectedWhatsNewBoxStyle);
injectedWhatsNewBoxElement = null;
injectedWhatsNewBoxStyle = null;
}
}
}
setInterval(injectWhatsNewBox, 100);
function modifyWhatsNewBox() {
const WhatsNewBoxOneSectionThreeTextOne = document.querySelector('.WhatsNewBoxOneSectionThreeTextOne');
const WhatsNewBoxOneSectionThreeTextTwo = document.querySelector('.WhatsNewBoxOneSectionThreeTextTwo');
const WhatsNewBoxOneSectionFourTextOne = document.querySelector('.WhatsNewBoxOneSectionFourTextOne');
const WhatsNewBoxOneSectionTwoImageOneURL = document.querySelector('img.WhatsNewBoxOneSectionTwoImageOne');
if (whatsNewInBetaStage === 1) {
WhatsNewBoxOneSectionThreeTextOne.textContent = 'Brand New Backend';
WhatsNewBoxOneSectionThreeTextTwo.textContent = 'The backend for AutoSolver has been completely rewritten, providing more stability and less bugs.';
WhatsNewBoxOneSectionTwoImageOneURL.src = 'https://ucd1db5c4e73c4c7f209ab2bc85b.previews.dropboxusercontent.com/p/thumb/ACCe8h9y4h1UNBAU1UlndX5k24MICjpmxe3W93jGp_1EXU3Se-cOjlUSbpYIFOzCPutM-Z5CDnfWz-IXsI2XD-VvRNQWgECryzkK0JV2XkiAi_SK1Deqp7chTw3QH0In6KTkM3y81kR6BLkt0Bu_JDOMmM9NENHhz5O4r9C29VJTl-JCk36IdFag478yrE1hjHR80e-WwTG1iFBVuzw85T7OATM494N8cNhArmWdQpETB0heC211o_FDM1N3TwZIeCdoDxzfYeJ9lbjO2WTjWL8kh8WzOwOUAAB9KTklsWW3fnDaxNxBb_i6OgilSW3Hk9vhgMRqWS3BMBotDut78jo_MIEbT0pyglxkxcntvFp1QQ7pP1ShCvxoGfEz0I6SNZY/p.png';
WhatsNewBoxOneSectionFourTextOne.textContent = 'NEXT';
} else if (whatsNewInBetaStage === 2) {
WhatsNewBoxOneSectionThreeTextOne.textContent = 'Issues & Roadmap Page';
WhatsNewBoxOneSectionThreeTextTwo.textContent = 'The issues & roadmap page provides a better visual of what issues currently exist, when they’re scheduled to be fixed and what features are coming soon.';
WhatsNewBoxOneSectionTwoImageOneURL.src = 'https://uc90160f745f3752f71524667274.previews.dropboxusercontent.com/p/thumb/ACCmEC-SnXMwPmW2a6GwnyF1LMYdYprGiQrYxqr-EtQn8jUn28TsBDlfsSOkC1pXbaHaHQ8i2qgwvdC6_H6y7Pc9o1VMngmdU0oN-h07j8pbkZDb2GrpGGGEfV94q9Ugx5t1_YV2OAPe-zBLYvcDi96cpJZjMsWm2ueuX2G2ws99yKB9cY7PliT6S2PBhbbElQ62IWVsrk9YJ6znWhV4LqPSVTrUJipfeTXPGv3HSvSMP8x8m6yU5KwFSS59EN9y-Um_1dA43IYO2mlLedAmvzeds6bY4WF05-PsdPt1jb6Ocel4RN8924cW6Dj0EPYPatJDxKUldVP--GKnkA6JesWKw2Gsc_Rz9ozvlDgJzjj_wHlimRvQxg7DQv4KEJjneJQ/p.png';
WhatsNewBoxOneSectionFourTextOne.textContent = 'NEXT';
} else if (whatsNewInBetaStage === 3) {
WhatsNewBoxOneSectionThreeTextOne.textContent = 'Settings Tab for Duolingo Pro';
WhatsNewBoxOneSectionThreeTextTwo.textContent = 'With the new settings tab, you can now enable new features or disable them to your need.';
WhatsNewBoxOneSectionTwoImageOneURL.src = 'https://ucbf21263cf752de14615915bb35.previews.dropboxusercontent.com/p/thumb/ACAhcmNugXfUoCCrdt05vkUZRXlNvP18ebAT05JzBQPigg93dKK1SedwLCNyPrLaj-DjZrVXNjof95b8beT7Oo05rAH5hDCy3YsVBEGiuWtPRWpiU1S2VjGsNHBU_F9vmQnOGmeSOKf7dIvFCe8Dr6qo14ou5akgW2x4EAwnj_9SYEJKsU5TfbJAYx86jheGKc6QTOnPPsmNaXSPqatyTAU6irBvnvcof-yvQPkdzI2Fxp8N9Jts1A9jtYsBF-GYjcR_km-QTEitWoYYb4iuOIMpr1a8IxCeCkmmTKo7uCbAgJwVKw9liseMO3LIgp8VPvO-WebLJT5LKp5P0fSLoMoeCYNvEBawlBMd8JqPIPCB6OwEe8BDg055_ktWaDCtUwA/p.png';
WhatsNewBoxOneSectionFourTextOne.textContent = 'NEXT';
} else if (whatsNewInBetaStage === 4) {
WhatsNewBoxOneSectionThreeTextOne.textContent = 'ProBlock by Duolingo Pro';
WhatsNewBoxOneSectionThreeTextTwo.textContent = 'ProBlock removes ads that pop-up on the main Duolingo tabs like Learn, Practice, and Shop.';
WhatsNewBoxOneSectionTwoImageOneURL.src = 'https://uc5284a914f464b52ad6589b570c.previews.dropboxusercontent.com/p/thumb/ACDgoCZqCvxS2sMcxkyao6VuomY6Yt6T4qa-z_tcdPAi2FmOaJA4CNTZuU9PBAwn1uFY4-eban1oVVad1hrNhbLjzSLc_FLESQzA6UPk7Dx5mbb4vHTDol5bE_k6PfDJgqYaBwSyFKHbiBUZ0zW9UkbR21jVQFyragHGcstjhH7fJSpgHCCJ0DRqvwb_nFwY0ConZffQJPmLznzIk9R9fKXK_fdOc6ef1hIp_bff6KdsEct0CteOqi4hnfLCXI8msabgp74krGnw7zTCBtGytwYvJJP09vH4M7HqAImTPS9qlOdBK9K6nri-kqhMd57BP2ejYFrGHFgyGgHHa13K69cGBak30c1Vw85Ufre5E4N5Jk2aa1bA9aJmcxJLsOVHT8c/p.png';
WhatsNewBoxOneSectionFourTextOne.textContent = 'NEXT';
} else if (whatsNewInBetaStage === 5) {
WhatsNewBoxOneSectionThreeTextOne.textContent = 'Auto-Repeat Lessons';
WhatsNewBoxOneSectionThreeTextTwo.textContent = 'Auto-Repeat Lesson Mode enables AutoSolver to only do a set lesson and repeat it. This mode improves chances of AutoSolver not getting stuck. We recommend using this mode with the Spanish/French/German course from English IF your main goal is to gain the most XP autonomously.';
WhatsNewBoxOneSectionTwoImageOneURL.src = 'https://ucec314e51219db17fffc734f86e.previews.dropboxusercontent.com/p/thumb/ACCljs1SNsEtBKy7bOztecK0By26sZtv4RS5cIkVE4SKDncJ1jOhGgTE2fkaDMFMEcHtm-ibOri7sRiZXoiNnBkxauxn1GcerHhNz10uprDaos4fjU4duuE4CJ5m1SGO4iFH0HpOxopLKC2tUKXzoz2nkEIii7Nf6FITg0vdcj5SJtOhrf9tSdu02IlH-Uzz6FYsGt5r0TGl8vR8mnxVQut1W7sQ6qGrNr1injLL6novqs6v0ZadQv8nqPt2hgH07mDPNMSJABKCjhbC1RxhMWB1rKl7nh7SILZtlgCAyoz5yBF2oGpkOv6tUM54FiWuteC-A_0kLHUHKuCtoQrnBoQdabZ8ghvpdU2PWOscWjxDeV8_I6lNYYi6VhWjxLS_ut4/p.png';
WhatsNewBoxOneSectionFourTextOne.textContent = 'CLOSE';
} else {
wasWhatsNewInTwoPointZeroBetaFourFinished = true;
localStorage.setItem('wasWhatsNewInTwoPointZeroBetaFourFinished', wasWhatsNewInTwoPointZeroBetaFourFinished);
}
}
const DuolingoProSettingsBoxHTML = `
RECOMMENDED
Show AutoSolver Box
AutoSolver Box makes it easier to binge solve questions automatically.
Show Practice Only Mode for AutoSolver Box
NOTE: THIS MODE CURRENTY DOESN'T WORK. KEEP OFF UNLESS YOU WANT TO TRY IT OUT. Practice Mode enables AutoSolver to only do practices and repeat them.
RECOMMENDED
Show Repeat Lesson Mode for AutoSolver Box
Repeat Lesson Mode enables AutoSolver to only do a set lesson and repeat it. This mode improves chances of AutoSolver NOT getting stuck on an unsupported question type. We recommend using this mode with the Spanish/French/German course from English IF your main goal is to gain the most XP autonomously.
Low Performance Mode
In low performance mode, Duolingo Pro works slower while using slightly less power. NOTE: This mode doesn't do anything *yet*.
RECOMMENDED
ProBlock Ads by Duolingo Pro
ProBlock removes ads that pop-up on the main Duolingo tabs like Learn, Practice, and Shop.
`;
const DuolingoProSettingsBoxCSS = `
.DuolingoProSettingsBoxShadow {
position: fixed;
display: flex;
width: 100%;
height: 100vh;
justify-content: center;
align-items: center;
flex-shrink: 0;
background: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(8px);
z-index: 2;
top: 0px;
bottom: 0px;
right: 0px;
left: 0px;
}
.DuolingoProSettingsBoxBackground {
display: flex;
width: 500px;
padding: 16px;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 8px;
flex-shrink: 0;
border-radius: 16px;
border: 2px solid rgb(var(--color-swan));
background: rgb(var(--color-snow));
}
.DuolingoProSettingsBoxLayers {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 8px;
align-self: stretch;
}
.DuolingoProSettingsBoxSectionOne {
display: flex;
height: 36px;
justify-content: space-between;
align-items: center;
align-self: stretch;
}
.DuolingoProSettingsBoxSectionOneTextOne {
color: rgb(var(--color-eel));
font-size: 24px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
cursor: default;
}
.DuolingoProSettingsBoxSectionOneBoxOne {
display: flex;
width: 98px;
height: 36px;
flex-direction: column;
justify-content: center;
align-items: center;
border-radius: 8px;
border: 2px solid rgba(0, 0, 0, 0.20);
background: #FF2D55;
}
.DuolingoProSettingsBoxSectionOneBoxOneTextOne {
color: #FFF;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
cursor: default;
}
.DuolingoProSettingsBoxSectionTwo {
display: flex;
padding-bottom: 8px;
flex-direction: column;
align-items: flex-start;
gap: 16px;
align-self: stretch;
}
.DuolingoProSettingsBoxSectionTwoBoxOne {
display: flex;
align-items: center;
gap: 16px;
align-self: stretch;
}
.DuolingoProSettingsBoxSectionTwoBoxOneBoxOne {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 4px;
flex: 1 0 0;
}
.DuolingoProSettingsBoxSectionTwoBoxOneBoxOneTextOne {
align-self: stretch;
color: rgb(var(--color-eel));
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
cursor: default;
}
.DuolingoProSettingsBoxSectionTwoBoxOneBoxOneTextTwo {
align-self: stretch;
color: rgb(var(--color-hare));
font-size: 14px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
cursor: default;
}
.DuolingoProSettingsBoxSectionTwoBoxOneBoxOneTextThree {
align-self: stretch;
color: #007AFF;
font-size: 14px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
cursor: default;
}
.DuolingoProSettingsBoxToggleTypeOne {
display: flex;
width: 98px;
height: 48px;
justify-content: center;
align-items: center;
gap: 8px;
border-radius: 8px;
border: 2px solid rgba(0, 0, 0, 0.20);
border-bottom: 4px solid rgba(0, 0, 0, 0.20);
background: #007AFF;
cursor: pointer;
transition: .1s;
}
.DuolingoProSettingsBoxToggleTypeOne:hover {
filter: brightness(0.95);
}
.DuolingoProSettingsBoxToggleTypeOne:active {
filter: brightness(0.9);
margin-top: 2px;
height: 46px;
border-bottom: 2px solid rgba(0, 0, 0, 0.20);
}
.DuolingoProSettingsBoxToggleTypeOneTextOne {
color: #FFF;
text-align: center;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
user-select: none; // chrome and Opera
-moz-user-select: none; // Firefox
-webkit-text-select: none; // IOS Safari
-webkit-user-select: none; // Safari
}
.DuolingoProSettingsBoxSectionThree {
display: flex;
align-items: flex-start;
gap: 8px;
align-self: stretch;
}
.DuolingoProSettingsBoxCancelButton {
display: flex;
width: 98px;
height: 54px;
justify-content: center;
align-items: center;
gap: 8px;
border-radius: 8px;
border: 2px solid rgb(var(--color-swan));
border-bottom: 4px solid rgb(var(--color-swan));
background: rgb(var(--color-snow));
cursor: pointer;
transition: .1s;
}
.DuolingoProSettingsBoxCancelButton:hover {
filter: brightness(0.95);
}
.DuolingoProSettingsBoxCancelButton:active {
filter: brightness(0.9);
margin-top: 2px;
height: 52px;
border-bottom: 2px solid rgb(var(--color-swan));
}
.DuolingoProSettingsBoxCancelButtonTextOne {
color: rgb(var(--color-eel));
text-align: center;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
user-select: none; // chrome and Opera
-moz-user-select: none; // Firefox
-webkit-text-select: none; // IOS Safari
-webkit-user-select: none; // Safari
}
.DuolingoProSettingsBoxSaveButton {
display: flex;
height: 54px;
padding: 0px 16px;
justify-content: center;
align-items: center;
gap: 8px;
flex: 1 0 0;
border-radius: 8px;
border: 2px solid rgba(0, 0, 0, 0.20);
border-bottom: 4px solid rgba(0, 0, 0, 0.20);
background: #007AFF;
cursor: pointer;
transition: .1s;
}
.DuolingoProSettingsBoxSaveButton:hover {
filter: brightness(0.95);
}
.DuolingoProSettingsBoxSaveButton:active {
filter: brightness(0.9);
margin-top: 2px;
height: 52px;
border-bottom: 2px solid rgba(0, 0, 0, 0.20);
}
.DuolingoProSettingsBoxSaveButtonTextOne {
color: #FFF;
text-align: center;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
user-select: none; // chrome and Opera
-moz-user-select: none; // Firefox
-webkit-text-select: none; // IOS Safari
-webkit-user-select: none; // Safari
}
`;
let injectedDuolingoProSettingsBoxElement = null;
let injectedDuolingoProSettingsBoxStyle = null;
function injectDuolingoProSettingsBox() {
//console.log('injectDuolingoProSettingsBox called');
if (wasDuolingoProSettingsButtonOnePressed === true) {
// Inject the content if it's not already injected
if (!injectedDuolingoProSettingsBoxElement) {
// Creating a container for the overlay
injectedDuolingoProSettingsBoxElement = document.createElement('div');
injectedDuolingoProSettingsBoxElement.innerHTML = DuolingoProSettingsBoxHTML;
document.body.appendChild(injectedDuolingoProSettingsBoxElement);
// Creating a style tag for CSS
injectedDuolingoProSettingsBoxStyle = document.createElement('style');
injectedDuolingoProSettingsBoxStyle.type = 'text/css';
injectedDuolingoProSettingsBoxStyle.innerHTML = DuolingoProSettingsBoxCSS;
document.head.appendChild(injectedDuolingoProSettingsBoxStyle);
const DuolingoProSettingsBoxCancelButton = document.querySelector('.DuolingoProSettingsBoxCancelButton');
DuolingoProSettingsBoxCancelButton.addEventListener('click', () => {
wasDuolingoProSettingsButtonOnePressed = false;
AutoSolverSettingsShowAutoSolverBox = JSON.parse(localStorage.getItem('AutoSolverSettingsShowAutoSolverBox'));
AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox = JSON.parse(localStorage.getItem('AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox'));
AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox = JSON.parse(localStorage.getItem('AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox'));
AutoSolverSettingsLowPerformanceMode = JSON.parse(localStorage.getItem('AutoSolverSettingsLowPerformanceMode'));
});
const DuolingoProSettingsBoxSaveButton = document.querySelector('.DuolingoProSettingsBoxSaveButton');
DuolingoProSettingsBoxSaveButton.addEventListener('click', () => {
localStorage.setItem('AutoSolverSettingsShowAutoSolverBox', AutoSolverSettingsShowAutoSolverBox);
localStorage.setItem('AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox', AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox);
localStorage.setItem('AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox', AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox);
localStorage.setItem('AutoSolverSettingsLowPerformanceMode', AutoSolverSettingsLowPerformanceMode);
localStorage.setItem('DuolingoProSettingsProBlockMode', DuolingoProSettingsProBlockMode);
if (!AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox) {
autoSolverBoxPracticeOnlyMode = false;
sessionStorage.setItem('autoSolverBoxPracticeOnlyMode', autoSolverBoxPracticeOnlyMode);
}
if (!AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox) {
autoSolverBoxPracticeOnlyMode = false;
sessionStorage.setItem('autoSolverBoxRepeatLessonMode', autoSolverBoxRepeatLessonMode);
}
console.log('Settings saved');
let DuolingoProSettingsBoxSaveButtonTextElement = DuolingoProSettingsBoxSaveButton.querySelector('.DuolingoProSettingsBoxSaveButtonTextOne');
DuolingoProSettingsBoxSaveButtonTextElement.textContent = 'SAVED';
setTimeout(function() {
//wasDuolingoProSettingsButtonOnePressed = false;
location.reload();
}, 600);
});
const DuolingoProSettingsBoxToggleOneIDElement = document.querySelector('#DuolingoProSettingsBoxToggleOneID');
DuolingoProSettingsBoxToggleOneIDElement.addEventListener('mousedown', () => {
if (!AutoSolverSettingsShowAutoSolverBox) {
DuolingoProSettingsBoxToggleOneIDElement.style.border = '2px solid rgb(var(--color-swan))';
DuolingoProSettingsBoxToggleOneIDElement.style.borderBottom = '2px solid rgb(var(--color-swan))';
} else {
DuolingoProSettingsBoxToggleOneIDElement.style.border = '2px solid rgba(0, 0, 0, 0.20)';
DuolingoProSettingsBoxToggleOneIDElement.style.borderBottom = '2px solid rgba(0, 0, 0, 0.20)';
}
});
DuolingoProSettingsBoxToggleOneIDElement.addEventListener('mouseup', () => {
AutoSolverSettingsShowAutoSolverBox = !AutoSolverSettingsShowAutoSolverBox; // Toggle the variable
updateDuolingoProSettingsToggle(DuolingoProSettingsBoxToggleOneIDElement, AutoSolverSettingsShowAutoSolverBox);
});
const DuolingoProSettingsBoxToggleTwoIDElement = document.querySelector('#DuolingoProSettingsBoxToggleTwoID');
DuolingoProSettingsBoxToggleTwoIDElement.addEventListener('mousedown', () => {
if (!AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox) {
DuolingoProSettingsBoxToggleTwoIDElement.style.border = '2px solid rgb(var(--color-swan))';
DuolingoProSettingsBoxToggleTwoIDElement.style.borderBottom = '2px solid rgb(var(--color-swan))';
} else {
DuolingoProSettingsBoxToggleTwoIDElement.style.border = '2px solid rgba(0, 0, 0, 0.20)';
DuolingoProSettingsBoxToggleTwoIDElement.style.borderBottom = '2px solid rgba(0, 0, 0, 0.20)';
}
});
DuolingoProSettingsBoxToggleTwoIDElement.addEventListener('mouseup', () => {
AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox = !AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox; // Toggle the variable
updateDuolingoProSettingsToggle(DuolingoProSettingsBoxToggleTwoIDElement, AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox);
});
const DuolingoProSettingsBoxToggleThreeIDElement = document.querySelector('#DuolingoProSettingsBoxToggleThreeID');
DuolingoProSettingsBoxToggleThreeIDElement.addEventListener('mousedown', () => {
if (!AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox) {
DuolingoProSettingsBoxToggleThreeIDElement.style.border = '2px solid rgb(var(--color-swan))';
DuolingoProSettingsBoxToggleThreeIDElement.style.borderBottom = '2px solid rgb(var(--color-swan))';
} else {
DuolingoProSettingsBoxToggleThreeIDElement.style.border = '2px solid rgba(0, 0, 0, 0.20)';
DuolingoProSettingsBoxToggleThreeIDElement.style.borderBottom = '2px solid rgba(0, 0, 0, 0.20)';
}
});
DuolingoProSettingsBoxToggleThreeIDElement.addEventListener('mouseup', () => {
AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox = !AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox; // Toggle the variable
updateDuolingoProSettingsToggle(DuolingoProSettingsBoxToggleThreeIDElement, AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox);
});
const DuolingoProSettingsBoxToggleFourIDElement = document.querySelector('#DuolingoProSettingsBoxToggleFourID');
DuolingoProSettingsBoxToggleFourIDElement.addEventListener('mousedown', () => {
if (!AutoSolverSettingsLowPerformanceMode) {
DuolingoProSettingsBoxToggleFourIDElement.style.border = '2px solid rgb(var(--color-swan))';
DuolingoProSettingsBoxToggleFourIDElement.style.borderBottom = '2px solid rgb(var(--color-swan))';
} else {
DuolingoProSettingsBoxToggleFourIDElement.style.border = '2px solid rgba(0, 0, 0, 0.20)';
DuolingoProSettingsBoxToggleFourIDElement.style.borderBottom = '2px solid rgba(0, 0, 0, 0.20)';
}
});
DuolingoProSettingsBoxToggleFourIDElement.addEventListener('mouseup', () => {
AutoSolverSettingsLowPerformanceMode = !AutoSolverSettingsLowPerformanceMode; // Toggle the variable
updateDuolingoProSettingsToggle(DuolingoProSettingsBoxToggleFourIDElement, AutoSolverSettingsLowPerformanceMode);
});
const DuolingoProSettingsBoxToggleFiveIDElement = document.querySelector('#DuolingoProSettingsBoxToggleFiveID');
DuolingoProSettingsBoxToggleFiveIDElement.addEventListener('mousedown', () => {
if (!DuolingoProSettingsProBlockMode) {
DuolingoProSettingsBoxToggleFiveIDElement.style.border = '2px solid rgb(var(--color-swan))';
DuolingoProSettingsBoxToggleFiveIDElement.style.borderBottom = '2px solid rgb(var(--color-swan))';
} else {
DuolingoProSettingsBoxToggleFiveIDElement.style.border = '2px solid rgba(0, 0, 0, 0.20)';
DuolingoProSettingsBoxToggleFiveIDElement.style.borderBottom = '2px solid rgba(0, 0, 0, 0.20)';
}
});
DuolingoProSettingsBoxToggleFiveIDElement.addEventListener('mouseup', () => {
DuolingoProSettingsProBlockMode = !DuolingoProSettingsProBlockMode; // Toggle the variable
updateDuolingoProSettingsToggle(DuolingoProSettingsBoxToggleFiveIDElement, DuolingoProSettingsProBlockMode);
});
addEventListener('mouseup', () => {
updateDuolingoProSettingsToggle(DuolingoProSettingsBoxToggleOneIDElement, AutoSolverSettingsShowAutoSolverBox);
updateDuolingoProSettingsToggle(DuolingoProSettingsBoxToggleTwoIDElement, AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox);
updateDuolingoProSettingsToggle(DuolingoProSettingsBoxToggleThreeIDElement, AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox);
updateDuolingoProSettingsToggle(DuolingoProSettingsBoxToggleFourIDElement, AutoSolverSettingsLowPerformanceMode);
updateDuolingoProSettingsToggle(DuolingoProSettingsBoxToggleFiveIDElement, DuolingoProSettingsProBlockMode);
});
updateDuolingoProSettingsToggle(DuolingoProSettingsBoxToggleOneIDElement, AutoSolverSettingsShowAutoSolverBox);
updateDuolingoProSettingsToggle(DuolingoProSettingsBoxToggleTwoIDElement, AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox);
updateDuolingoProSettingsToggle(DuolingoProSettingsBoxToggleThreeIDElement, AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox);
updateDuolingoProSettingsToggle(DuolingoProSettingsBoxToggleFourIDElement, AutoSolverSettingsLowPerformanceMode);
updateDuolingoProSettingsToggle(DuolingoProSettingsBoxToggleFiveIDElement, DuolingoProSettingsProBlockMode);
}
} else {
// Remove the content if it was previously injected
if (injectedDuolingoProSettingsBoxElement) {
document.body.removeChild(injectedDuolingoProSettingsBoxElement);
document.head.removeChild(injectedDuolingoProSettingsBoxStyle);
injectedDuolingoProSettingsBoxElement = null;
injectedDuolingoProSettingsBoxStyle = null;
}
}
}
setInterval(injectDuolingoProSettingsBox, 100);
function updateDuolingoProSettingsToggle(element, value) {
let textElement = element.querySelector('.DuolingoProSettingsBoxToggleTypeOneTextOne');
if (element.id === 'DuolingoProSettingsBoxToggleThreeID') {
textElement.textContent = value ? "LESSON 1" : "OFF";
} else {
textElement.textContent = value ? "ON" : "OFF";
}
if (value) {
element.style.background = '#007AFF';
element.style.border = '2px solid rgba(0, 0, 0, 0.20)';
element.style.borderBottom = '4px solid rgba(0, 0, 0, 0.20)';
} else {
element.style.background = 'rgb(var(--color-snow))';
element.style.border = '2px solid rgb(var(--color-swan))';
element.style.borderBottom = '4px solid rgb(var(--color-swan))';
}
}
function solving() {
if (solvingIntervalId) {
clearInterval(solvingIntervalId);
solvingIntervalId = undefined;
document.getElementById("solveAllButton").innerText = "SOLVE ALL";
isAutoMode = false;
} else {
document.getElementById("solveAllButton").innerText = "PAUSE SOLVE";
isAutoMode = true;
solvingIntervalId = setInterval(solve, 500);
}
}
function solve() {
const selAgain = document.querySelectorAll('[data-test="player-practice-again"]');
const practiceAgain = document.querySelector('[data-test="player-practice-again"]');
if (selAgain.length === 1 && isAutoMode) {
// Make sure it's the `practice again` button
//if (selAgain[0].innerHTML.toLowerCase() === 'practice again') {
// Click the `practice again` button
selAgain[0].click();
// Terminate
return;
//}
}
if (practiceAgain !== null && isAutoMode) {
if (!AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox) {
practiceAgain.click();
return;
}
}
try {
window.sol = findReact(document.getElementsByClassName('_3FiYg')[0]).props.currentChallenge;
} catch {
let next = document.querySelector('[data-test="player-next"]');
if (next) {
next.click();
}
return;
}
if (!window.sol) {
return;
}
let nextButton = document.querySelector('[data-test="player-next"]');
if (!nextButton) {
return;
}
if (document.querySelectorAll('[data-test*="challenge-speak"]').length > 0) {
if (debug) {
document.getElementById("solveAllButton").innerText = 'Challenge Speak';
}
const buttonSkip = document.querySelector('button[data-test="player-skip"]');
if (buttonSkip) {
buttonSkip.click();
}
} else if (window.sol.type === 'listenMatch') {
// listen match question
if (debug) {
document.getElementById("solveAllButton").innerText = 'Listen Match';
}
const buttonSkip = document.querySelector('button[data-test="player-skip"]');
if (buttonSkip) {
buttonSkip.click();
}
} else if (document.querySelectorAll('[data-test="challenge-choice"]').length > 0) {
// choice challenge
if (debug) {
document.getElementById("solveAllButton").innerText = 'Challenge Choice';
}
// text input (if one exists)
if (document.querySelectorAll('[data-test="challenge-text-input"]').length > 0) {
if (debug) {
document.getElementById("solveAllButton").innerText = 'Challenge Choice with Text Input';
}
let elm = document.querySelectorAll('[data-test="challenge-text-input"]')[0];
let nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, "value").set;
nativeInputValueSetter.call(elm, window.sol.correctSolutions ? window.sol.correctSolutions[0].split(/(?<=^\S+)\s/)[1] : (window.sol.displayTokens ? window.sol.displayTokens.find(t => t.isBlank).text : window.sol.prompt));
let inputEvent = new Event('input', {
bubbles: true
});
elm.dispatchEvent(inputEvent);
}
// choice
if (window.sol.correctTokens !== undefined) {
correctTokensRun();
nextButton.click()
} else if (window.sol.correctIndex !== undefined) {
document.querySelectorAll('[data-test="challenge-choice"]')[window.sol.correctIndex].click();
nextButton.click();
} else if (window.sol.correctSolutions !== undefined) {
var xpath = `//div[@data-test="challenge-choice" and ./div[@data-test="challenge-judge-text"]/text()="${window.sol.correctSolutions[0].split(/(?<=^\S+)\s/)[0]}"]`;
document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.click();
nextButton.click();
}
} else if (document.querySelectorAll('[data-test$="challenge-tap-token"]').length > 0) {
// match correct pairs challenge
if (window.sol.pairs !== undefined) {
if (debug) {
document.getElementById("solveAllButton").innerText = 'Pairs';
}
let nl = document.querySelectorAll('[data-test$="challenge-tap-token"]');
if (document.querySelectorAll('[data-test="challenge-tap-token-text"]').length
=== nl.length) {
window.sol.pairs?.forEach((pair) => {
for (let i = 0; i < nl.length; i++) {
const nlInnerText = nl[i].querySelector('[data-test="challenge-tap-token-text"]').innerText.toLowerCase().trim();
try {
if (
(
nlInnerText === pair.transliteration.toLowerCase().trim() ||
nlInnerText === pair.character.toLowerCase().trim()
)
&& !nl[i].disabled
) {
nl[i].click()
}
} catch (TypeError) {
if (
(
nlInnerText === pair.learningToken.toLowerCase().trim() ||
nlInnerText === pair.fromToken.toLowerCase().trim()
)
&& !nl[i].disabled
) {
nl[i].click()
}
}
}
})
}
} else if (window.sol.correctTokens !== undefined) {
if (debug) {
document.getElementById("solveAllButton").innerText = 'Token Run';
}
correctTokensRun();
nextButton.click()
} else if (window.sol.correctIndices !== undefined) {
if (debug) {
document.getElementById("solveAllButton").innerText = 'Indices Run';
}
correctIndicesRun();
}
} else if (document.querySelectorAll('[data-test="challenge-tap-token-text"]').length > 0) {
if (debug) {
document.getElementById("solveAllButton").innerText = 'Challenge Tap Token Text';
}
// fill the gap challenge
correctIndicesRun();
} else if (document.querySelectorAll('[data-test="challenge-text-input"]').length > 0) {
if (debug) {
document.getElementById("solveAllButton").innerText = 'Challenge Text Input';
}
let elm = document.querySelectorAll('[data-test="challenge-text-input"]')[0];
let nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, "value").set;
nativeInputValueSetter.call(elm, window.sol.correctSolutions ? window.sol.correctSolutions[0] : (window.sol.displayTokens ? window.sol.displayTokens.find(t => t.isBlank).text : window.sol.prompt));
let inputEvent = new Event('input', {
bubbles: true
});
elm.dispatchEvent(inputEvent);
} else if (document.querySelectorAll('[data-test*="challenge-partialReverseTranslate"]').length > 0) {
if (debug) {
document.getElementById("solveAllButton").innerText = 'Partial Reverse';
}
let elm = document.querySelector('[data-test*="challenge-partialReverseTranslate"]')?.querySelector("span[contenteditable]");
let nativeInputNodeTextSetter = Object.getOwnPropertyDescriptor(Node.prototype, "textContent").set
nativeInputNodeTextSetter.call(elm, window.sol?.displayTokens?.filter(t => t.isBlank)?.map(t => t.text)?.join()?.replaceAll(',', ''));
let inputEvent = new Event('input', {
bubbles: true
});
elm.dispatchEvent(inputEvent);
} else if (document.querySelectorAll('textarea[data-test="challenge-translate-input"]').length > 0) {
if (debug) {
document.getElementById("solveAllButton").innerText = 'Challenge Translate Input';
}
const elm = document.querySelector('textarea[data-test="challenge-translate-input"]');
const nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, "value").set;
nativeInputValueSetter.call(elm, window.sol.correctSolutions ? window.sol.correctSolutions[0] : window.sol.prompt);
let inputEvent = new Event('input', {
bubbles: true
});
elm.dispatchEvent(inputEvent);
}
nextButton.click()
}
function correctTokensRun() {
const all_tokens = document.querySelectorAll('[data-test$="challenge-tap-token"]');
const correct_tokens = window.sol.correctTokens;
const clicked_tokens = [];
correct_tokens.forEach(correct_token => {
const matching_elements = Array.from(all_tokens).filter(element => element.textContent.trim() === correct_token.trim());
if (matching_elements.length > 0) {
const match_index = clicked_tokens.filter(token => token.textContent.trim() === correct_token.trim()).length;
if (match_index < matching_elements.length) {
matching_elements[match_index].click();
clicked_tokens.push(matching_elements[match_index]);
} else {
clicked_tokens.push(matching_elements[0]);
}
}
});
}
function correctIndicesRun() {
if (window.sol.correctIndices) {
window.sol.correctIndices?.forEach(index => {
document.querySelectorAll('div[data-test="word-bank"] [data-test="challenge-tap-token-text"]')[index].click();
});
// nextButton.click();
}
}
function findSubReact(dom, traverseUp = 0) {
const key = Object.keys(dom).find(key => key.startsWith("__reactProps$"));
return dom.parentElement[key].children.props;
}
function findReact(dom, traverseUp = 0) {
let reactProps = Object.keys(dom.parentElement).find((key) => key.startsWith("__reactProps$"));
while (traverseUp-- > 0 && dom.parentElement) {
dom = dom.parentElement;
reactProps = Object.keys(dom.parentElement).find((key) => key.startsWith("__reactProps$"));
}
if(dom?.parentElement?.[reactProps]?.children[0] == null){
return dom?.parentElement?.[reactProps]?.children[1]?._owner?.stateNode;
} else {
return dom?.parentElement?.[reactProps]?.children[0]?._owner?.stateNode;
}
//return dom?.parentElement?.[reactProps]?.children[0]?._owner?.stateNode;
}
window.findReact = findReact;
window.ss = solving;