NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Duolingo Course Progress // @namespace https://github.com/kane77/userscripts // @include https://www.duolingo.com/* // @version 1.5 // @grant GM_getValue // ==/UserScript== function inject(f) { //Inject the script into the document var script; script = document.createElement('script'); script.type = 'text/javascript'; script.setAttribute('name', 'lesson_stats'); script.textContent = '(' + f.toString() + ')(jQuery)'; document.head.appendChild(script); } inject(f); function f($) { function duolingoStats() { try { var langData = window.duo.user.attributes.language_data[window.duo.user.attributes.learning_language]; var totalSkills = langData.skills.models.length; var doneSkills = 0; var totalActivities = 0; var doneActivities = 0; for (var i = 0; i < langData.skills.models.length; i++) { var skill = langData.skills.models[i]; totalActivities += skill.attributes.num_lessons; doneActivities += skill.attributes.num_lessons - skill.attributes.missing_lessons; if (skill.attributes.missing_lessons == 0) { doneSkills += 1; } } if (langData.bonus_skills) { totalSkills += langData.bonus_skills.length; for (var i = 0; i < langData.bonus_skills.models.length; i++) { var skill = langData.bonus_skills.models[i]; totalActivities += skill.attributes.num_lessons; doneActivities += skill.attributes.num_lessons - skill.attributes.missing_lessons; if (skill.attributes.missing_lessons == 0) { doneSkills += 1; } } } var lessonPercent = Math.round(doneActivities / totalActivities * 100); var skillPercent = Math.round(doneSkills / totalSkills * 100); var stats = $('<ul class="sidebar-stats lesson-progress"><li title="' + skillPercent + '%"><span class="icon icon-words-small">S</span><strong><span id="skill">' + doneSkills + '/' + totalSkills + '</span></strong> Skills</li><li title="' + lessonPercent + '%"><span class="icon icon-words-small">L</span><strong><span id="skill">' + doneActivities + '/' + totalActivities + '</span></strong> Lessons</li></ul>'); if ($('#app').hasClass('home') && !$('.lesson-progress').length) { $('.strengthen-skills-container').before(stats); } } catch (ex) { console.log(ex); } } $(document).ready(function () { duolingoStats(); }); $(document).ajaxComplete(function () { duolingoStats(); }); }