Skip to content
Snippets Groups Projects
Select Git revision
  • renovate/configure
  • main default protected
  • placed_paid
3 results

setup.py

Blame
  • assess_userscript.js 8.49 KiB
    // ==UserScript==
    // @name         assess_userscript
    // @description  Adds a calendar view to Assess
    // @namespace    http://tampermonkey.net/
    // @version      0.1
    // @match https://sys-sideshow.cs.tu-dortmund.de/ASSESS/*
    // ==/UserScript==
    
    
    const timetable = `
    <table class="calendar">
    <thead class="days-week">
    <tr>
    <th></th>
    <th style="width:70px">Mo</th>
    <th style="width:70px">Di</th>
    <th style="width:70px">Mi</th>
    <th style="width:70px">Do</th>
    <th style="width:70px">Fr</th>
    </tr>
    </thead>
    <tbody>
    <tr style="height:4px;"><td>8:00</td><td id="mo_800"></td><td id="di_800"></td><td id="mi_800"></td><td id="do_800"></td><td id="fr_800"></td></tr>
    <tr style="height:4px;"><td>8:15</td><td id="mo_815"></td><td id="di_815"></td><td id="mi_815"></td><td id="do_815"></td><td id="fr_815"></td></tr>
    <tr style="height:4px;"><td>8:30</td><td id="mo_830"></td><td id="di_830"></td><td id="mi_830"></td><td id="do_830"></td><td id="fr_830"></td></tr>
    <tr style="height:4px;"><td>8:45</td><td id="mo_845"></td><td id="di_845"></td><td id="mi_845"></td><td id="do_845"></td><td id="fr_845"></td></tr>
    <tr style="height:4px;"><td>9:00</td><td id="mo_900"></td><td id="di_900"></td><td id="mi_900"></td><td id="do_900"></td><td id="fr_900"></td></tr>
    <tr style="height:4px;"><td>9:15</td><td id="mo_915"></td><td id="di_915"></td><td id="mi_915"></td><td id="do_915"></td><td id="fr_915"></td></tr>
    <tr style="height:4px;"><td>9:30</td><td id="mo_930"></td><td id="di_930"></td><td id="mi_930"></td><td id="do_930"></td><td id="fr_930"></td></tr>
    <tr style="height:4px;"><td>9:45</td><td id="mo_945"></td><td id="di_945"></td><td id="mi_945"></td><td id="do_945"></td><td id="fr_945"></td></tr>
    <tr style="height:4px;"><td>10:00</td><td id="mo_1000"></td><td id="di_1000"></td><td id="mi_1000"></td><td id="do_1000"></td><td id="fr_1000"></td></tr>
    <tr style="height:4px;"><td>10:15</td><td id="mo_1015"></td><td id="di_1015"></td><td id="mi_1015"></td><td id="do_1015"></td><td id="fr_1015"></td></tr>
    <tr style="height:4px;"><td>10:30</td><td id="mo_1030"></td><td id="di_1030"></td><td id="mi_1030"></td><td id="do_1030"></td><td id="fr_1030"></td></tr>
    <tr style="height:4px;"><td>10:45</td><td id="mo_1045"></td><td id="di_1045"></td><td id="mi_1045"></td><td id="do_1045"></td><td id="fr_1045"></td></tr>
    <tr style="height:4px;"><td>11:00</td><td id="mo_1100"></td><td id="di_1100"></td><td id="mi_1100"></td><td id="do_1100"></td><td id="fr_1100"></td></tr>
    <tr style="height:4px;"><td>11:15</td><td id="mo_1115"></td><td id="di_1115"></td><td id="mi_1115"></td><td id="do_1115"></td><td id="fr_1115"></td></tr>
    <tr style="height:4px;"><td>11:30</td><td id="mo_1130"></td><td id="di_1130"></td><td id="mi_1130"></td><td id="do_1130"></td><td id="fr_1130"></td></tr>
    <tr style="height:4px;"><td>11:45</td><td id="mo_1145"></td><td id="di_1145"></td><td id="mi_1145"></td><td id="do_1145"></td><td id="fr_1145"></td></tr>
    <tr style="height:4px;"><td>12:00</td><td id="mo_1200"></td><td id="di_1200"></td><td id="mi_1200"></td><td id="do_1200"></td><td id="fr_1200"></td></tr>
    <tr style="height:4px;"><td>12:15</td><td id="mo_1215"></td><td id="di_1215"></td><td id="mi_1215"></td><td id="do_1215"></td><td id="fr_1215"></td></tr>
    <tr style="height:4px;"><td>12:30</td><td id="mo_1230"></td><td id="di_1230"></td><td id="mi_1230"></td><td id="do_1230"></td><td id="fr_1230"></td></tr>
    <tr style="height:4px;"><td>12:45</td><td id="mo_1245"></td><td id="di_1245"></td><td id="mi_1245"></td><td id="do_1245"></td><td id="fr_1245"></td></tr>
    <tr style="height:4px;"><td>13:00</td><td id="mo_1300"></td><td id="di_1300"></td><td id="mi_1300"></td><td id="do_1300"></td><td id="fr_1300"></td></tr>
    <tr style="height:4px;"><td>13:15</td><td id="mo_1315"></td><td id="di_1315"></td><td id="mi_1315"></td><td id="do_1315"></td><td id="fr_1315"></td></tr>
    <tr style="height:4px;"><td>13:30</td><td id="mo_1330"></td><td id="di_1330"></td><td id="mi_1330"></td><td id="do_1330"></td><td id="fr_1330"></td></tr>
    <tr style="height:4px;"><td>13:45</td><td id="mo_1345"></td><td id="di_1345"></td><td id="mi_1345"></td><td id="do_1345"></td><td id="fr_1345"></td></tr>
    <tr style="height:4px;"><td>14:00</td><td id="mo_1400"></td><td id="di_1400"></td><td id="mi_1400"></td><td id="do_1400"></td><td id="fr_1400"></td></tr>
    <tr style="height:4px;"><td>14:15</td><td id="mo_1415"></td><td id="di_1415"></td><td id="mi_1415"></td><td id="do_1415"></td><td id="fr_1415"></td></tr>
    <tr style="height:4px;"><td>14:30</td><td id="mo_1430"></td><td id="di_1430"></td><td id="mi_1430"></td><td id="do_1430"></td><td id="fr_1430"></td></tr>
    <tr style="height:4px;"><td>14:45</td><td id="mo_1445"></td><td id="di_1445"></td><td id="mi_1445"></td><td id="do_1445"></td><td id="fr_1445"></td></tr>
    <tr style="height:4px;"><td>15:00</td><td id="mo_1500"></td><td id="di_1500"></td><td id="mi_1500"></td><td id="do_1500"></td><td id="fr_1500"></td></tr>
    <tr style="height:4px;"><td>15:15</td><td id="mo_1515"></td><td id="di_1515"></td><td id="mi_1515"></td><td id="do_1515"></td><td id="fr_1515"></td></tr>
    <tr style="height:4px;"><td>15:30</td><td id="mo_1530"></td><td id="di_1530"></td><td id="mi_1530"></td><td id="do_1530"></td><td id="fr_1530"></td></tr>
    <tr style="height:4px;"><td>15:45</td><td id="mo_1545"></td><td id="di_1545"></td><td id="mi_1545"></td><td id="do_1545"></td><td id="fr_1545"></td></tr>
    <tr style="height:4px;"><td>16:00</td><td id="mo_1600"></td><td id="di_1600"></td><td id="mi_1600"></td><td id="do_1600"></td><td id="fr_1600"></td></tr>
    <tr style="height:4px;"><td>16:15</td><td id="mo_1615"></td><td id="di_1615"></td><td id="mi_1615"></td><td id="do_1615"></td><td id="fr_1615"></td></tr>
    <tr style="height:4px;"><td>16:30</td><td id="mo_1630"></td><td id="di_1630"></td><td id="mi_1630"></td><td id="do_1630"></td><td id="fr_1630"></td></tr>
    <tr style="height:4px;"><td>16:45</td><td id="mo_1645"></td><td id="di_1645"></td><td id="mi_1645"></td><td id="do_1645"></td><td id="fr_1645"></td></tr>
    <tr style="height:4px;"><td>17:00</td><td id="mo_1700"></td><td id="di_1700"></td><td id="mi_1700"></td><td id="do_1700"></td><td id="fr_1700"></td></tr>
    <tr style="height:4px;"><td>17:15</td><td id="mo_1715"></td><td id="di_1715"></td><td id="mi_1715"></td><td id="do_1715"></td><td id="fr_1715"></td></tr>
    <tr style="height:4px;"><td>17:30</td><td id="mo_1730"></td><td id="di_1730"></td><td id="mi_1730"></td><td id="do_1730"></td><td id="fr_1730"></td></tr>
    <tr style="height:4px;"><td>17:45</td><td id="mo_1745"></td><td id="di_1745"></td><td id="mi_1745"></td><td id="do_1745"></td><td id="fr_1745"></td></tr>
    </tbody>
    </table>
    `;
    
    function timeSlotDiff(s, e) {
        return ((e%100)/15 + 4*((e-(e%100))/100)) - ((s%100)/15 + 4*((s-(s%100))/100))
    }
    
    function run()
    {
        const prioTable = document.getElementsByTagName('table')[0];
        const prioTableBody = prioTable.getElementsByTagName('tbody')[0];
    
        if (!prioTableBody.innerText.includes("# Plätze")) {
            // no parsable table
            return;
        }
    
        const flexWrapper = document.createElement("div");
        flexWrapper.style = "display: flex; flex-wrap: wrap;";
        prioTable.parentElement.insertBefore(flexWrapper, prioTable)
        flexWrapper.appendChild(prioTable);
        prioTable.insertAdjacentHTML('afterend', timetable);
    
        const tableRows = prioTableBody.getElementsByTagName('tr');
        const timeslots = []
    
    
        for (let i = 1; i+1 < tableRows.length; i++) {
            let row = tableRows[i].getElementsByTagName('td');
    
            // get time info
            let timeStr = row[0].textContent;
            const startNum = parseInt(timeStr.substr(6,2)+ timeStr.substr(9,2))
            const endNum = parseInt(timeStr.substr(14,2)+ timeStr.substr(17,2))
            const slotLen = timeSlotDiff(startNum, endNum)
            const slotStartId = timeStr.substr(1,2).toLowerCase()+'_'+ startNum
            const isFull = tableRows[i].innerText.includes("VOLL")
    
            // get prio info
            const rankText = row[row.length-1]?.getElementsByTagName('div')?.[0]?.getElementsByTagName('div')?.[2]?.textContent ?? ""
    
            try {
                // enter into timetable
                const slotElem = document.getElementById(slotStartId)
                slotElem.setAttribute("rowspan", slotLen)
                slotElem.innerHTML = rankText + '<br>' + row[row.length-3].textContent
    
                if (isFull) {
                    slotElem.setAttribute("style","background-color: #FFCCCC;")
                } else {
                    slotElem.setAttribute("style","background-color: #726a6a;")
                }
    
                console.log(slotStartId + ' -> '+slotLen)
            } catch (e) {console.error(e)}
        }
    
    
    }
    
    (function() {
        'use strict';
        run()
    })();