您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
System to color-code calendar events by wildcard, hide useless header/footer and mark special events
// ==UserScript== // @name RWTH Online Colorcoded Calendar // @namespace https://github.com/Seneral/ // @version 2.1 // @description System to color-code calendar events by wildcard, hide useless header/footer and mark special events // @author Seneral // @icon https://www.seneral.dev/img/Icon/favicon.ico // @match https://online.rwth-aachen.de/RWTHonline/* // @grant none // @noframes // ==/UserScript== (function() { 'use strict'; var showOnlyCalendar = true; var markUnmodifiedEvents = true; // "col" : color applied to matching events // "opc" : opacity of WHOLE event // "in" : included in description // "ex" : excluded from description // "name" : included in name // "days" : List of days included - "1,2,4,5" for all but Wednesday, none for all days // "border" : Border size in pixel, default 0 // All colors from the settings / css are valid - red, blue, green, yellow, aquamarine, etc. var colorMap = [ // Einsicht and Klausuren (with borders since they are still special events) { "opc": 1.0, "col" : "yellow", "in" : "Einsicht", "border" : "3" }, { "opc": 1.0, "col" : "yellow", "in" : "einsicht", "border" : "3" }, { "opc": 1.0, "col" : "bold-red", "in" : "Klausur", "border" : "3" }, { "opc": 1.0, "col" : "bold-red", "in" : "Prüfung", "border" : "3" }, /* -- OVERRIDE -- */ // Einzelne Events die vom Default abweichen - e.g: //{ "opc": 1.0, "col" : "red", "in" : "Abhaltung; Übung;", "name" : "Formale Systeme, Automaten, Prozesse", "days" : "4" }, // FoSAP Lecture Thursday //{ "opc": 1.0, "col" : "red", "in" : "Abhaltung; Vorlesung;", "name" : "Formale Systeme, Automaten, Prozesse", "days" : "1" }, // FoSAP Lecture Monday //{ "opc": 1.0, "col" : "orange", "in" : "Abhaltung; Vorlesung;", "name" : "Formale Systeme, Automaten, Prozesse", "days" : "3" }, // FoSAP Global Wednesday /* -- DEFAULT -- */ { "opc": 1.0, "col" : "olive", "in" : "Abhaltung; Proseminar" }, { "opc": 1.0, "col" : "red", "in" : "Abhaltung; Vorlesung" }, { "opc": 1.0, "col" : "orange", "in" : "Abhaltung; Übung" }, { "opc": 0.8, "col" : "wheat", "in" : "Abhaltung; Tutorium" }, { "opc": 1.0, "col" : "blue", "in" : "Abhaltung; Praktikum" }, { "opc": 0.8, "col" : "yellow", "in" : "Abhaltung; Sprachkurs" }, ] function handleEventColor(event){ var weekContainer = event.parentNode.parentNode.parentNode.parentNode; var dayContainer = event.parentNode.parentNode.parentNode; var dayOfWeek = Array.prototype.slice.call(weekContainer.children).indexOf(dayContainer); // 1 Mon var colorBar = event.children[0]; var colorBox = event.children[1]; var name = event.children[1].children[0].children[2].innerText; var desc = event.children[1].children[1].children[0].innerText; var color = undefined; var opacity = 1; var border = 0; for (var i = 0; i < colorMap.length; i++) { var rules = colorMap[i]; var inc = !rules.in || desc.includes (rules.in); var exc = !rules.ex || !desc.includes (rules.ex); var nm = !rules.name || name.includes (rules.name); var day = !rules.days || rules.days.includes (dayOfWeek.toString()); if (inc && exc && nm && day) { color = rules.col; opacity = rules.opc; if (rules.border) border = rules.border; break; } } if (color) { event.style.opacity = opacity; colorBox.className = colorBox.className.replace(/\b(cocal\-skin\-)([a-zA-Z-]+)\b/g, "") + "cocal-skin-" + color; if (border > 0) { event.style.border = border + "px solid black"; event.style.boxSizing = "border-box"; event.style.MozBoxSizing = "border-box"; } } else if (markUnmodifiedEvents) { event.style.border = "3px solid black"; event.style.boxSizing = "border-box"; event.style.MozBoxSizing = "border-box"; } } function updateCalendar(){ if(!window.location.href.includes ("wbKalender.wbPerson")) return; if (showOnlyCalendar) { // Only execute when not yet successful once var header = document.getElementsByTagName("ca-header"); var footer = document.getElementsByTagName("ca-footer"); if (header.length != 0 && footer.length != 0) { header[0].style.display = "none"; footer[0].style.display = "none"; } } var calendarFrame = document.getElementById("idIframe"); if (!calendarFrame) return; var events = calendarFrame.contentWindow.document.body.querySelectorAll("[id^='idTermin_']"); for(var i=0 ; i < events.length ; i++) { handleEventColor(events[i]); } } // Execute every seconds in case new content has been added to the page setInterval(updateCalendar, 200); })();