T2SCHOLA Efficient Layout

コースを横並びにします.

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         T2SCHOLA Efficient Layout
// @namespace    https://t2schola.titech.ac.jp/
// @version      0.1
// @description  コースを横並びにします.
// @author       hayatroid
// @match        https://t2schola.titech.ac.jp/my/courses.php
// @license      MIT
// ==/UserScript==


const finishedQuarters = ["2023 / 1", "2023 / 2", "2023 / 3"]


const makeMoreEfficient = () => {
    // コースを横並びにする
    const container = document.querySelector("ul.edw-course-list-container");
    container.style.display = "grid";
    container.style.gridTemplateColumns = "repeat(auto-fit, minmax(120px, 1fr))";

    container.querySelectorAll("li.edw-course-list").forEach((courseList) => {
        // 左の余白を消す
        courseList.querySelectorAll(".edw-course-img-wrapper").forEach(e => e.remove());

        // "AAA.A000-00[20XX]" を消す
        courseList.querySelectorAll(".edw-card-design-hd > div > div.text-muted").forEach(e => e.remove());

        // "X out of X activities completed" を消す
        courseList.querySelectorAll(".edw-card-design-ft > div > span.small-info-regular").forEach(e => e.remove());

        // "X% Course Completed" を消す
        courseList.querySelectorAll(".edw-card-design-ft > div > div.progress-text").forEach(e => e.remove());

        // コース名を省略する
        const courseName = courseList.querySelector(".edw-card-design-hd > div > a.coursename")
        const courseNameAbbr = courseName.textContent.replace("コース名", "").replace(/\s\/\s.*/, "").replace(/【.*】/, "");
        courseName.textContent = courseNameAbbr;

        // コース名のスタイルを調整する
        courseName.style.fontSize = ".8rem";
        courseName.style.lineHeight = "1.5";
        courseName.style.padding = "8px 0";

        // 終了したクオーターのコースを薄くする
        const courseQuarter = courseList.querySelector(".edw-card-design-hd span.categoryname").textContent.trim();
        if (finishedQuarters.includes(courseQuarter)) {
            courseList.style.filter = "grayscale(1)";
            courseList.style.opacity = ".3";
        }
    });
};


(() => {
    // ".container-fluid" の変更を検知したら,"makeMoreEfficient" を呼び出す
    const observer = new MutationObserver(() => {
        if (document.querySelector("ul.edw-course-list-container") === null) return;
        makeMoreEfficient();
    });
    const container = document.querySelector(".container-fluid");
    observer.observe(container, {
        childList: true,
        subtree: true,
    });
})();