LeetCode自动修正null和None

自动根据选择的编程语言修正测试用例的null文本,python自动修改为None,go和swift自动修改为nil,可自行修改代码自定义

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         LeetCode自动修正null和None
// @namespace    http://tampermonkey.net/
// @version      2024-04-11
// @description  自动根据选择的编程语言修正测试用例的null文本,python自动修改为None,go和swift自动修改为nil,可自行修改代码自定义
// @author       Ozymandias
// @license      MIT
// @match        https://leetcode.cn/problems/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=leetcode.cn
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Your code here...
    function waitForElement(id, callback) {
        const intervalId = setInterval(() => {
            const targetElements = document.querySelectorAll(id)
            if (targetElements.length >0) {
                 targetElements.forEach((targetElement)=>{
                     const targetButton=targetElement.querySelectorAll('button.rounded');
                     if (targetButton!=null){
                         if(targetButton[0]!=null){
                             const textContent = targetButton[0].textContent
                             if(textContent!=null){
                                 const buttonText = textContent.trim().toLowerCase(); // 获取并转换为小写,去除前后空格
                                 if (buttonText!=null &&buttonText!=""){
                                     clearInterval(intervalId);
                                     //console.info("当前使用语言:"+buttonText)
                                     callback(buttonText);
                                 }
                             }
                         }
                     }
                 })
            } else {
                console.log("等待按钮组件加载完成中");
            }
        }, 2000); // 延迟时间,以毫秒为单位
    }
    function replaceNullStringsInElfjSElements() {
        waitForElement('[id^="headlessui-popover-button-:r"]', element => {
            const buttonText =element.trim().toLowerCase(); // 获取并转换为小写,去除前后空格
            const targetElements = document.querySelectorAll('.elfjS pre'); // 选择目标元素
            targetElements.forEach((element) => {
                const currentText = element.textContent || element.innerText; // 获取元素文本内容,兼容不同属性
                if (currentText) {
                    //console.log("currentText:"+currentText)
                    var replacedText=null
                    switch (buttonText){
                        case "python":
                        case "python3":
                            replacedText = currentText.replace(/null/g, 'None'); // 使用正则表达式替换null字符串
                            break
                        case "ruby":
                        case "swift":
                        case "go":
                        case "elixir":
                            replacedText = currentText.replace(/null/g, 'nil'); // 使用正则表达式替换null字符串
                            break
                            //case "erlang":
                            //replacedText = currentText.replace(/null/g, 'undefined'); // 使用正则表达式替换null字符串
                            //break
                        case "racket":
                            replacedText = currentText.replace(/null/g, '#false'); // 使用正则表达式替换null字符串
                            break
                        default:
                            replacedText = currentText
                            break

                    }
                    //console.log("replacedText:"+replacedText)

                    if (element.textContent !== undefined) {
                        element.textContent = replacedText;
                    } else if (element.innerText !== undefined) {
                        element.innerText = replacedText;
                    }
                }

            });
        });


    }


    const targetNode = document.querySelectorAll('html')[0]; // 替换为您的组件容器节点
    const observerOptions = {
        childList: true, // 监听子节点的添加或删除
        subtree: true, // 递归监听目标节点及其所有后代节点
        //attributes: true, //目标节点的属性变化
    };
    const callback = (mutationsList) => {
        for (const mutation of mutationsList) {
            if (mutation.type === 'childList') {
                // console.log('组件重新渲染');
                // 在这里执行您希望在组件重新渲染时运行的函数
                replaceNullStringsInElfjSElements()
            }
        }
    };

    const observer = new MutationObserver(callback);
    observer.observe(targetNode, observerOptions);

    // 当不再需要观察时,记得停止观察并释放资源
    // observer.disconnect();


})();