// ==UserScript== // @name LeetCode Unsolved (non-locked) Problem Numbers // @description:en Show Number of Solved/Unsolved/Total Non-locked Problems on Leetcode // @namespace https://greasyfork.org/en/users/114838-groundzyy // @version 0.2 // @author groundzyy // @match https://leetcode.com/problemset/* // @description Show Number of Solved/Unsolved/Total Non-locked Problems on Leetcode // @downloadURL https://update.greasyfork.icu/scripts/28676/LeetCode%20Unsolved%20%28non-locked%29%20Problem%20Numbers.user.js // @updateURL https://update.greasyfork.icu/scripts/28676/LeetCode%20Unsolved%20%28non-locked%29%20Problem%20Numbers.meta.js // ==/UserScript== (function() { 'use strict'; observeDomChange(); })(); function observeDomChange() { var MutationObserver = window.MutationObserver; var myObserver = new MutationObserver (mutationHandler); var obsConfig = { childList: true, attributes: true, subtree: true, attributeFilter: ['list-group'] }; myObserver.observe(document, obsConfig); function mutationHandler (mutationRecords) { var locked = "div > i.fa-lock"; var num_locked = $(locked).length; $(locked).parent().parent().parent().hide(); if ($('#welcome strong').length == 1) { info = $('#welcome strong').text(); num_finished = Number(info.split('/')[0]); num_questions = Number(info.split('/')[1]); num_unlocked = num_questions - num_locked; $('#welcome').append(' (Locked: ' + num_locked + ')
You have solved: ' + num_finished + "/" + num_unlocked + ' (' + (num_unlocked - num_finished) + ') remain'); } } }