// ==UserScript== // @name Duolingo - autoStart next Lesson // @description Automatically starts next lesson when Duolingo loads. // @version 1.1 // @namespace minirock // @match https://www.duolingo.com/* // @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js // @downloadURL none // ==/UserScript== // function next_lesson_scroll() { // let lessons = document.querySelectorAll("div[class='QmbDT']"); // for (let i = 0; i < lessons.length; ++i) { // var lesson = lessons[i].querySelector("div[data-test='level-crown']"); // if (lesson === null) { // var last_finished = i; // break; // } // } // // go to next unfinished lesson // lessons[last_finished].querySelector("div[class='_2albn']").click(); // } function next_lesson_start() { let lessons = document.querySelectorAll("div[class='QmbDT']"); if (lessons.length === 0) return; for (let i = 0; i < lessons.length; ++i) { var lesson = lessons[i].querySelector("div[data-test='level-crown']"); if (lesson === null) { var last_finished = i; break; } } // go to next unfinished lesson lessons[last_finished].querySelector("div[class='_2albn']").click(); var status = Array.prototype.filter.call(lessons[last_finished].querySelectorAll("div[class='_2yvEQ']"), function (element) { return RegExp('^0% Complete').test(element.textContent); }); // status > 0 == lesson : tips if (status.length !== 0) { console.log('TIPS'); lessons[last_finished].querySelectorAll("button")[1].click() } else { console.log('LESSON'); lessons[last_finished].querySelector("button[data-test='start-button']").click(); } } function next_lesson_start_from_tips() { let tips = document.querySelector("div[class='_2LApJ']"); if (tips !== null) { tips.querySelectorAll("button")[0].click(); } } $(document).ready(function () { next_lesson_start(); }); let keyEventListener = function (event) { if (event.keyCode === 13) { next_lesson_start_from_tips(); next_lesson_start(); } } document.addEventListener("keyup", keyEventListener); // start automatically next lesson after 3s (function () { var rs = history.replaceState; history.replaceState = function () { rs.apply(history, arguments); // preserve normal functionality setTimeout(next_lesson_start, 3000); }; }());