Skip to content
Snippets Groups Projects
Select Git revision
  • master
  • renovate/django-split-settings-1.x
  • renovate/djangorestframework-3.x
  • main
  • 520-improve-trackmanager
  • 520-fix-scheduling
  • 520-akowner
  • 520-status
  • 520-message-resolved
  • 520-improve-scheduling-2
  • renovate/django-bootstrap5-24.x
  • 520-improve-submission
  • 520-improve-scheduling
  • 520-improve-wall
  • 520-fix-event-wizard-datepicker
  • 520-upgrades
  • renovate/tzdata-2023.x
  • renovate/django-5.x
  • renovate/fontawesomefree-6.x
  • renovate/sphinx-rtd-theme-2.x
  • renovate/sphinxcontrib-apidoc-0.x
21 results

apps.py

Blame
  • Forked from KIF / AKPlanning
    Source project has a limited visibility.
    • Benjamin Hättasch's avatar
      aca81a1f
      Introduce custom admin · aca81a1f
      Benjamin Hättasch authored
      This is the base for custom admin views (with admin design and permission checking)
      Replace default admin site with custom admin site in AKModel
      Use custom admin index template & apply first basic change
      Introduce custom admin base template (including bootstrap loading)
      Introduce Mixin for AdminViews
      aca81a1f
      History
      Introduce custom admin
      Benjamin Hättasch authored
      This is the base for custom admin views (with admin design and permission checking)
      Replace default admin site with custom admin site in AKModel
      Use custom admin index template & apply first basic change
      Introduce custom admin base template (including bootstrap loading)
      Introduce Mixin for AdminViews
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    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()
    })();