Greasy Fork

Greasy Fork is available in English.

课程分数占比查看(中南林)

点击蓝色成绩即可进入查看,恢复隐藏的成绩链接并隐藏原始不可点击的成绩

当前为 2025-07-12 提交的版本,查看 最新版本

// ==UserScript==
// @name         课程分数占比查看(中南林)
// @license GNU GPLv3
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  点击蓝色成绩即可进入查看,恢复隐藏的成绩链接并隐藏原始不可点击的成绩
// @match        http://jwgl.webvpn.csuft.edu.cn/jsxsd/kscj/*
// @run-at       document-end
// ==/UserScript==

(function() {
    'use strict';

    // 主处理函数
    const processPage = () => {
        // 1. 恢复注释中的成绩链接
        const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_COMMENT, null, false);
        const toRemove = [];
        let node;

        while ((node = walker.nextNode())) {
            let content = node.nodeValue.trim();
            if (content.startsWith('<td') && content.endsWith('</td>')) {
                content = content.replace(/&amp;/g, '&');

                const range = document.createRange();
                range.setStartAfter(node);
                const frag = range.createContextualFragment(content);

                node.parentNode.insertBefore(frag, node);
                toRemove.push(node);
            }
        }

        toRemove.forEach(n => n.remove());

        // 2. 隐藏原始不可点击的成绩
        const dataTable = document.getElementById('dataList');
        if (!dataTable) return;

        const rows = dataTable.rows;
        for (let i = 0; i < rows.length; i++) {
            const cells = rows[i].cells;
            if (cells.length > 5) {
                // 隐藏第六列(不可点击的成绩)
                cells[5].style.display = 'none';

                // 调整第五列(可点击的成绩)的样式
                const scoreLink = cells[4].querySelector('a');
                if (scoreLink) {
                    scoreLink.style.display = 'inline-block';
                    scoreLink.style.verticalAlign = 'middle';
                    scoreLink.style.lineHeight = 'normal';
                }
            }
        }
    };

    // 初始执行
    processPage();

    // 监听动态变化
    const observer = new MutationObserver(mutations => {
        let needsUpdate = false;
        mutations.forEach(mutation => {
            if (mutation.addedNodes.length) needsUpdate = true;
        });
        if (needsUpdate) processPage();
    });

    observer.observe(document.body, {
        childList: true,
        subtree: true,
        attributes: false,
        characterData: false
    });
})();