🏠

Greasy Fork is available in English.

cleanLeetcode

clean Leetcode


安装此脚本?
提问、发表评价,或者 举报这个脚本
// ==UserScript==
// @name         cleanLeetcode
// @namespace    mailto: [email protected]
// @version      0.1.0
// @description  clean Leetcode
// @author       fish-404
// @run-at       document-end
// @icon         https://www.google.com/s2/favicons?sz=64&domain=
// @match        https://leetcode.cn/problemset/*
// @license      MIT
// @grant        none
// ==/UserScript==
(function() {
'use strict';
cleanLeetCode();
myMutation();
})();
function cleanLeetCode() {
hideNav();
hideFooter();
hideRightBlock();
hideRightCornerIcon();
stickyTopBottom();
widenMain();
hideTags();
}
function hideElement(element) {
element.style.display = "none";
}
function hideSelf(selfSelector) {
hideElement(document.querySelector(selfSelector));
}
function hideParent(childSelector) {
hideElement(document.querySelector(childSelector).parentElement);
}
function hideGroup(groupSelector) {
document.querySelectorAll(groupSelector).forEach((e) => {
hideElement(e);
});
}
function hideNav() {
hideSelf("nav");
}
function hideFooter() {
hideSelf("footer");
}
function hideRightBlock() {
hideSelf("#__next div.grid div.col-span-4:nth-child(2)");
}
function hideRightCornerIcon() {
hideParent("a[aria-label='feedback']");
}
function hideCol() {
hideGroup("div.mx-2:nth-child(6)");
hideGroup("div.mx-2:nth-child(3)");
}
function stickyTopBottom() {
let wrapper = document.querySelector('div.grid').firstChild.lastChild;
wrapper.firstChild.setAttribute('style', 'position: sticky; top: 0; background: black; padding: 5px;');
wrapper.lastChild.setAttribute('style', 'position: sticky; bottom: 0; background: black; padding: 5px;');
}
function widenMain() {
document.querySelector('div.grid').removeAttribute('class');
}
function hideTags() {
hideGroup("div.z-base div.relative.flex");
}
function myMutation() {
let problemsNode, observer;
const config = {
subtree: true
, childList: true
};
problemsNode = document.querySelector("div[role='table']");
observer = new MutationObserver(hidePlusProblemsWithoutTag);
observer.observe(problemsNode, config);
}
function hidePlusProblemsWithoutTag(mutationList, observer) {
let preTargetRow;
mutationList.forEach((mutation) => {
let target;
if (mutation.addedNodes.length > 0) {
target = mutation.addedNodes[0];
}
else {
target = mutation.target;
}
let curTargetRow = target.closest("div[role='row']");
if (curTargetRow !== null && curTargetRow !== preTargetRow) {
preTargetRow = curTargetRow;
let searchPlus = curTargetRow.querySelector("svg.text-brand-orange");
changeElementDisplay(curTargetRow, searchPlus === null);
hideCol();
}
});
}
function changeElementDisplay(element, displayOrNot) {
const SHOW = "flex", HIDE = "none";
element.style.display = displayOrNot ? SHOW : HIDE;
}