Plan + Tests

This commit is contained in:
2023-12-13 18:52:59 +01:00
parent ae8b0206fc
commit 15954af651
12 changed files with 1166 additions and 236 deletions

View File

@ -2,15 +2,18 @@ import icalendar
import datetime
import recurring_ical_events
from fetchMENSA import getMeals
import pytz
shortnames = ["mon", "tue", "wed", "thu", "fri", "sat"]
longnames = ["Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"]
months = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober",
"November", "Dezember"]
def getWeek(weekstart: datetime, file: str, showsat: bool):
"""
Liefert alle Events einer Woche zurück.
Wochenstart wird automatisch auf den Montag der Woche gelegt.
Liefert alle Events einer Woche zurück. \n
Wochenstart wird automatisch auf den Montag der Woche gelegt. \n
:param weekstart:
:param file:
:param showsat:
@ -20,16 +23,30 @@ def getWeek(weekstart: datetime, file: str, showsat: bool):
start_date = datetime.date.today()
else:
start_date = weekstart
nextw = start_date + datetime.timedelta(weeks=1)
prevw = start_date - datetime.timedelta(weeks=1)
start_date -= datetime.timedelta(days=start_date.weekday() % 7)
end_date = start_date + datetime.timedelta(days=7)
end_date = start_date + datetime.timedelta(days=6)
mon = months[start_date.month - 1]
if start_date.month != end_date.month:
if start_date.year != end_date.year:
mon += " " + str(start_date.year) + " | " + months[end_date.month - 1]
else:
mon += " | " + months[end_date.month-1]
mon += " " + str(end_date.year)
with open("calendars/" + file) as f:
calendar = icalendar.Calendar.from_ical(f.read())
events = recurring_ical_events.of(calendar).between(start_date, end_date)
eventl = []
for event in events:
estart = event["DTSTART"].dt
if str(estart.tzinfo) != "Europe/Berlin":
estart = estart.astimezone(pytz.timezone("Europe/Berlin"))
formstart = str(estart.hour) + ":" + str(estart.minute)
eend = event["DTEND"].dt
if str(eend.tzinfo) != "Europe/Berlin":
eend = eend.astimezone(pytz.timezone("Europe/Berlin"))
formend = str(eend.hour) + ":" + str(eend.minute)
forml = [formstart, formend]
for i in range(2):
@ -50,7 +67,7 @@ def getWeek(weekstart: datetime, file: str, showsat: bool):
"day": estart.day
}
eventl += [eventdict]
return eventl, daylist(start_date, showsat)
return eventl, daylist(start_date, showsat), prevw, nextw, mon
def daylist(weekstart: datetime, showsat: bool):

40
genstarts.py Normal file
View File

@ -0,0 +1,40 @@
from flask import url_for
css = ""
for se in ("start", "end"):
acht = 0
for i in range(0, 28):
if i % 4 == 0:
acht += 100
h = str(acht)
else:
h = str(acht + (i % 4 * 15))
if len(h) == 3:
h = "0" + h
css += "." + se + "-" + h + " {\n"
if se == "start":
css += "grid-row-" + se + ": " + "1" + "\n}\n"
else:
css += "grid-row-" + se + ": " + "4" + "\n}\n"
css += "\n\n\n"
for se in ("start", "end"):
acht = 700
for i in range(0, 45):
if i % 4 == 0:
acht += 100
h = str(acht)
else:
h = str(acht + (i % 4 * 15))
if len(h) == 3:
h = "0" + h
css += "." + se + "-" + h + " {\n"
css += "grid-row-" + se + ": " + str(i+1) + "\n}\n"
css += "\n\n\n"
f = open("static/cal.scss", "a")
f.write ("\n // Generated by genstarts.py\n\n")
f.write(css)
f.close()

View File

@ -9,3 +9,5 @@ Requests
talisman
Werkzeug
lxml
bs4
pytz

View File

@ -73,7 +73,8 @@ def displayRapla():
if not samstag:
samstag = False
events = getWeek(week, fetchRAPLA.getIcal(current_user.kurs), samstag)
return render_template("plan.html", events=events[0], eventdays=events[1])
return render_template("plan-user.html", events=events[0], eventdays=events[1],
name=current_user.name, prev=str(events[2])[:10], next=str(events[3])[:10], mon=events[4])
@app.route("/backendpoc/plan/<string:kurs>")
@ -94,13 +95,16 @@ def displayPlan(kurs):
return redirect(url_for("displayRapla"))
except AttributeError:
pass
plan = fetchRAPLA.getIcal(kurs.upper())
kurs = kurs.upper()
plan = fetchRAPLA.getIcal(kurs)
if plan:
samstag = request.args.get("samstag")
if not samstag:
samstag = False
events = getWeek(week, plan, samstag)
return render_template("plan-anon.html", events=events[0], eventdays=events[1])
print(events)
return render_template("plan-anon.html", events=events[0], eventdays=events[1], kurs=kurs,
prev=str(events[2])[:10], next=str(events[3])[:10], mon=events[4])
else:
return redirect(url_for("login"))

View File

@ -2,8 +2,10 @@
--numDays: 5;
--numHours: 13;
--numHalfHours: 23;
--numQuartHours: 45;
--timeHeight: 60px;
--halfTimeHeight: 30px;
--quartTimeHeight: 15px;
--calBgColor: #fff1f8;
--eventBorderColor: #f2d3d8;
--eventColor1: #ffd6d1;
@ -28,6 +30,63 @@ select {
text-align: center;
}
.userbuttons {
width: 90%;
position: absolute;
display: flex;
justify-content: end;
}
.changeweek {
font-size: 2.5em;
color: black;
text-decoration: none;
font-weight: 600;
}
.changeweek:hover {
color: transparent;
-webkit-text-fill-color: transparent;
-webkit-text-stroke: 2px black;
}
h2 {
font-weight: 300;
margin: 5px;
}
.headerblock {
display: flex;
justify-content: space-between;
padding-right: 20%;
padding-left: 20%;
}
.customheader {
display: flex;
justify-content: space-evenly;
}
button {
border-radius: 5px;
border-color: black;
border-style: solid;
background: transparent;
font-weight: 600;
width: 30px;
height: 30px;
margin: 2px;
line-height: 25px;
}
button:hover {
cursor: pointer;
}
.plusbutton {
font-size: 1.5em;
}
form {
margin-top: 5px;
}
@ -51,12 +110,13 @@ option {
.events {
display: grid;
grid-template-rows: repeat(var(--numHalfHours), var(--halfTimeHeight));
grid-template-rows: repeat(var(--numQuartHours), var(--quartTimeHeight));
border-radius: 5px;
background: var(--calBgColor);
}
.title {
width: 70%;
font-weight: 600;
margin-top: 0px;
margin-bottom: 0px;
@ -69,12 +129,17 @@ option {
margin-bottom: 0px;
}
.room {
width: 70%;
}
.event {
border: 1px solid var(--eventBorderColor);
border-radius: 5px;
padding: 0.5rem;
margin: 0 0.5rem;
background: white;
position: relative;
}
.space,
@ -86,22 +151,6 @@ body {
font-family: system-ui, sans-serif;
}
.corp-fi {
background: var(--eventColor1);
}
.ent-law {
background: var(--eventColor2);
}
.writing {
background: var(--eventColor3);
}
.securities {
background: var(--eventColor4);
}
.date {
margin-bottom: 1em;
gap: 1em;
@ -119,180 +168,588 @@ body {
font-weight: 100;
}
.start-0100 {
grid-row-start: 1;
}
.start-0115 {
grid-row-start: 1;
}
.start-0130 {
grid-row-start: 1;
}
.start-0145 {
grid-row-start: 1;
}
.start-0200 {
grid-row-start: 1;
}
.start-0215 {
grid-row-start: 1;
}
.start-0230 {
grid-row-start: 1;
}
.start-0245 {
grid-row-start: 1;
}
.start-0300 {
grid-row-start: 1;
}
.start-0315 {
grid-row-start: 1;
}
.start-0330 {
grid-row-start: 1;
}
.start-0345 {
grid-row-start: 1;
}
.start-0400 {
grid-row-start: 1;
}
.start-0415 {
grid-row-start: 1;
}
.start-0430 {
grid-row-start: 1;
}
.start-0445 {
grid-row-start: 1;
}
.start-0500 {
grid-row-start: 1;
}
.start-0515 {
grid-row-start: 1;
}
.start-0530 {
grid-row-start: 1;
}
.start-0545 {
grid-row-start: 1;
}
.start-0600 {
grid-row-start: 1;
}
.start-0615 {
grid-row-start: 1;
}
.start-0630 {
grid-row-start: 1;
}
.start-0645 {
grid-row-start: 1;
}
.start-0700 {
grid-row-start: 1;
}
.start-0715 {
grid-row-start: 1;
}
.start-0730 {
grid-row-start: 1;
}
.start-0745 {
grid-row-start: 1;
}
.end-0100 {
grid-row-end: 4;
}
.end-0115 {
grid-row-end: 4;
}
.end-0130 {
grid-row-end: 4;
}
.end-0145 {
grid-row-end: 4;
}
.end-0200 {
grid-row-end: 4;
}
.end-0215 {
grid-row-end: 4;
}
.end-0230 {
grid-row-end: 4;
}
.end-0245 {
grid-row-end: 4;
}
.end-0300 {
grid-row-end: 4;
}
.end-0315 {
grid-row-end: 4;
}
.end-0330 {
grid-row-end: 4;
}
.end-0345 {
grid-row-end: 4;
}
.end-0400 {
grid-row-end: 4;
}
.end-0415 {
grid-row-end: 4;
}
.end-0430 {
grid-row-end: 4;
}
.end-0445 {
grid-row-end: 4;
}
.end-0500 {
grid-row-end: 4;
}
.end-0515 {
grid-row-end: 4;
}
.end-0530 {
grid-row-end: 4;
}
.end-0545 {
grid-row-end: 4;
}
.end-0600 {
grid-row-end: 4;
}
.end-0615 {
grid-row-end: 4;
}
.end-0630 {
grid-row-end: 4;
}
.end-0645 {
grid-row-end: 4;
}
.end-0700 {
grid-row-end: 4;
}
.end-0715 {
grid-row-end: 4;
}
.end-0730 {
grid-row-end: 4;
}
.end-0745 {
grid-row-end: 4;
}
.start-0800 {
grid-row-start: 1;
}
.start-0815 {
grid-row-start: 2;
}
.start-0830 {
grid-row-start: 2;
}
.start-0900 {
grid-row-start: 3;
}
.start-0930 {
.start-0845 {
grid-row-start: 4;
}
.start-1000 {
.start-0900 {
grid-row-start: 5;
}
.start-1030 {
.start-0915 {
grid-row-start: 6;
}
.start-1100 {
.start-0930 {
grid-row-start: 7;
}
.start-1130 {
.start-0945 {
grid-row-start: 8;
}
.start-1200 {
.start-1000 {
grid-row-start: 9;
}
.start-1230 {
.start-1015 {
grid-row-start: 10;
}
.start-1300 {
.start-1030 {
grid-row-start: 11;
}
.start-1330 {
.start-1045 {
grid-row-start: 12;
}
.start-1400 {
.start-1100 {
grid-row-start: 13;
}
.start-1430 {
.start-1115 {
grid-row-start: 14;
}
.start-1500 {
.start-1130 {
grid-row-start: 15;
}
.start-1530 {
.start-1145 {
grid-row-start: 16;
}
.start-1600 {
.start-1200 {
grid-row-start: 17;
}
.start-1630 {
.start-1215 {
grid-row-start: 18;
}
.start-1700 {
.start-1230 {
grid-row-start: 19;
}
.start-1730 {
.start-1245 {
grid-row-start: 20;
}
.start-1800 {
.start-1300 {
grid-row-start: 21;
}
.start-1830 {
.start-1315 {
grid-row-start: 22;
}
.end-0830 {
.start-1330 {
grid-row-start: 23;
}
.start-1345 {
grid-row-start: 24;
}
.start-1400 {
grid-row-start: 25;
}
.start-1415 {
grid-row-start: 26;
}
.start-1430 {
grid-row-start: 27;
}
.start-1445 {
grid-row-start: 28;
}
.start-1500 {
grid-row-start: 29;
}
.start-1515 {
grid-row-start: 30;
}
.start-1530 {
grid-row-start: 31;
}
.start-1545 {
grid-row-start: 32;
}
.start-1600 {
grid-row-start: 33;
}
.start-1615 {
grid-row-start: 34;
}
.start-1630 {
grid-row-start: 35;
}
.start-1645 {
grid-row-start: 36;
}
.start-1700 {
grid-row-start: 37;
}
.start-1715 {
grid-row-start: 38;
}
.start-1730 {
grid-row-start: 39;
}
.start-1745 {
grid-row-start: 40;
}
.start-1800 {
grid-row-start: 41;
}
.start-1815 {
grid-row-start: 42;
}
.start-1830 {
grid-row-start: 43;
}
.start-1845 {
grid-row-start: 44;
}
.start-1900 {
grid-row-start: 45;
}
.end-0800 {
grid-row-end: 1;
}
.end-0815 {
grid-row-end: 2;
}
.end-0900 {
.end-0830 {
grid-row-end: 3;
}
.end-0930 {
.end-0845 {
grid-row-end: 4;
}
.end-1000 {
.end-0900 {
grid-row-end: 5;
}
.end-1030 {
.end-0915 {
grid-row-end: 6;
}
.end-1100 {
.end-0930 {
grid-row-end: 7;
}
.end-1130 {
.end-0945 {
grid-row-end: 8;
}
.end-1200 {
.end-1000 {
grid-row-end: 9;
}
.end-1230 {
.end-1015 {
grid-row-end: 10;
}
.end-1300 {
.end-1030 {
grid-row-end: 11;
}
.end-1330 {
.end-1045 {
grid-row-end: 12;
}
.end-1400 {
.end-1100 {
grid-row-end: 13;
}
.end-1430 {
.end-1115 {
grid-row-end: 14;
}
.end-1500 {
.end-1130 {
grid-row-end: 15;
}
.end-1530 {
.end-1145 {
grid-row-end: 16;
}
.end-1600 {
.end-1200 {
grid-row-end: 17;
}
.end-1630 {
.end-1215 {
grid-row-end: 18;
}
.end-1700 {
.end-1230 {
grid-row-end: 19;
}
.end-1730 {
.end-1245 {
grid-row-end: 20;
}
.end-1800 {
.end-1300 {
grid-row-end: 21;
}
.end-1830 {
.end-1315 {
grid-row-end: 22;
}
.end-1900 {
.end-1330 {
grid-row-end: 23;
}
.end-1345 {
grid-row-end: 24;
}
.end-1400 {
grid-row-end: 25;
}
.end-1415 {
grid-row-end: 26;
}
.end-1430 {
grid-row-end: 27;
}
.end-1445 {
grid-row-end: 28;
}
.end-1500 {
grid-row-end: 29;
}
.end-1515 {
grid-row-end: 30;
}
.end-1530 {
grid-row-end: 31;
}
.end-1545 {
grid-row-end: 32;
}
.end-1600 {
grid-row-end: 33;
}
.end-1615 {
grid-row-end: 34;
}
.end-1630 {
grid-row-end: 35;
}
.end-1645 {
grid-row-end: 36;
}
.end-1700 {
grid-row-end: 37;
}
.end-1715 {
grid-row-end: 38;
}
.end-1730 {
grid-row-end: 39;
}
.end-1745 {
grid-row-end: 40;
}
.end-1800 {
grid-row-end: 41;
}
.end-1815 {
grid-row-end: 42;
}
.end-1830 {
grid-row-end: 43;
}
.end-1845 {
grid-row-end: 44;
}
.end-1900 {
grid-row-end: 45;
}
/*# sourceMappingURL=cal.css.map */

View File

@ -1 +1 @@
{"version":3,"sourceRoot":"","sources":["cal.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAMF;EACE;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAMF;EACE;;;AAGF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAMF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE","file":"cal.css"}
{"version":3,"sourceRoot":"","sources":["cal.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAMF;EACE;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;;;AAKF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAQF;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAKA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAKA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAKA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA;;;AAEA;EACA","file":"cal.css"}

View File

@ -2,8 +2,10 @@
--numDays: 5;
--numHours: 13;
--numHalfHours: 23;
--numQuartHours: 45;
--timeHeight: 60px;
--halfTimeHeight: 30px;
--quartTimeHeight: 15px;
--calBgColor: #fff1f8;
--eventBorderColor: #f2d3d8;
--eventColor1: #ffd6d1;
@ -28,6 +30,63 @@ select {
text-align: center;
}
.userbuttons {
width: 90%;
position: absolute;
display: flex;
justify-content: end;
}
.changeweek {
font-size: 2.5em;
color: black;
text-decoration: none;
font-weight: 600;
}
.changeweek:hover {
color: transparent;
-webkit-text-fill-color: transparent;
-webkit-text-stroke: 2px black;
}
h2 {
font-weight: 300;
margin: 5px;
}
.headerblock {
display: flex;
justify-content: space-between;
padding-right: 20%;
padding-left: 20%;
}
.customheader {
display: flex;
justify-content: space-evenly;
}
button {
border-radius: 5px;
border-color: black;
border-style: solid;
background: transparent;
font-weight: 600;
width: 30px;
height: 30px;
margin: 2px;
line-height: 25px;
}
button:hover{
cursor: pointer;
}
.plusbutton {
font-size: 1.5em
}
form {
margin-top: 5px;
}
@ -50,7 +109,7 @@ option {
}
.events {
display: grid;
grid-template-rows: repeat(var(--numHalfHours), var(--halfTimeHeight));
grid-template-rows: repeat(var(--numQuartHours), var(--quartTimeHeight));
border-radius: 5px;
background: var(--calBgColor);
}
@ -59,6 +118,7 @@ option {
// Events
.title {
width: 70%;
font-weight: 600;
margin-top: 0px;
margin-bottom: 0px;
@ -71,12 +131,17 @@ option {
margin-bottom: 0px;
}
.room {
width: 70%;
}
.event {
border: 1px solid var(--eventBorderColor);
border-radius: 5px;
padding: 0.5rem;
margin: 0 0.5rem;
background: white;
position: relative;
}
.space,
@ -90,22 +155,6 @@ body {
font-family: system-ui, sans-serif;
}
.corp-fi {
background: var(--eventColor1);
}
.ent-law {
background: var(--eventColor2);
}
.writing {
background: var(--eventColor3);
}
.securities {
background: var(--eventColor4);
}
.date {
margin-bottom: 1em;
gap: 1em;
@ -123,181 +172,458 @@ body {
font-weight: 100;
}
// Place on Timeline
// STARTS
// Place on Timeline
// Generated by genstarts.py
.start-0100 {
grid-row-start: 1
}
.start-0115 {
grid-row-start: 1
}
.start-0130 {
grid-row-start: 1
}
.start-0145 {
grid-row-start: 1
}
.start-0200 {
grid-row-start: 1
}
.start-0215 {
grid-row-start: 1
}
.start-0230 {
grid-row-start: 1
}
.start-0245 {
grid-row-start: 1
}
.start-0300 {
grid-row-start: 1
}
.start-0315 {
grid-row-start: 1
}
.start-0330 {
grid-row-start: 1
}
.start-0345 {
grid-row-start: 1
}
.start-0400 {
grid-row-start: 1
}
.start-0415 {
grid-row-start: 1
}
.start-0430 {
grid-row-start: 1
}
.start-0445 {
grid-row-start: 1
}
.start-0500 {
grid-row-start: 1
}
.start-0515 {
grid-row-start: 1
}
.start-0530 {
grid-row-start: 1
}
.start-0545 {
grid-row-start: 1
}
.start-0600 {
grid-row-start: 1
}
.start-0615 {
grid-row-start: 1
}
.start-0630 {
grid-row-start: 1
}
.start-0645 {
grid-row-start: 1
}
.start-0700 {
grid-row-start: 1
}
.start-0715 {
grid-row-start: 1
}
.start-0730 {
grid-row-start: 2;
grid-row-start: 1
}
.start-0745 {
grid-row-start: 1
}
.end-0100 {
grid-row-end: 4
}
.end-0115 {
grid-row-end: 4
}
.end-0130 {
grid-row-end: 4
}
.end-0145 {
grid-row-end: 4
}
.end-0200 {
grid-row-end: 4
}
.end-0215 {
grid-row-end: 4
}
.end-0230 {
grid-row-end: 4
}
.end-0245 {
grid-row-end: 4
}
.end-0300 {
grid-row-end: 4
}
.end-0315 {
grid-row-end: 4
}
.end-0330 {
grid-row-end: 4
}
.end-0345 {
grid-row-end: 4
}
.end-0400 {
grid-row-end: 4
}
.end-0415 {
grid-row-end: 4
}
.end-0430 {
grid-row-end: 4
}
.end-0445 {
grid-row-end: 4
}
.end-0500 {
grid-row-end: 4
}
.end-0515 {
grid-row-end: 4
}
.end-0530 {
grid-row-end: 4
}
.end-0545 {
grid-row-end: 4
}
.end-0600 {
grid-row-end: 4
}
.end-0615 {
grid-row-end: 4
}
.end-0630 {
grid-row-end: 4
}
.end-0645 {
grid-row-end: 4
}
.end-0700 {
grid-row-end: 4
}
.end-0715 {
grid-row-end: 4
}
.end-0730 {
grid-row-end: 4
}
.end-0745 {
grid-row-end: 4
}
.start-0800 {
grid-row-start: 1
}
.start-0815 {
grid-row-start: 2
}
.start-0830 {
grid-row-start: 2;
grid-row-start: 3
}
.start-0845 {
grid-row-start: 4
}
.start-0900 {
grid-row-start: 3;
grid-row-start: 5
}
.start-0915 {
grid-row-start: 6
}
.start-0930 {
grid-row-start: 4;
grid-row-start: 7
}
.start-0945 {
grid-row-start: 8
}
.start-1000 {
grid-row-start: 5;
grid-row-start: 9
}
.start-1015 {
grid-row-start: 10
}
.start-1030 {
grid-row-start: 6;
grid-row-start: 11
}
.start-1045 {
grid-row-start: 12
}
.start-1100 {
grid-row-start: 7;
grid-row-start: 13
}
.start-1115 {
grid-row-start: 14
}
.start-1130 {
grid-row-start: 8;
grid-row-start: 15
}
.start-1145 {
grid-row-start: 16
}
.start-1200 {
grid-row-start: 9;
grid-row-start: 17
}
.start-1215 {
grid-row-start: 18
}
.start-1230 {
grid-row-start: 10;
grid-row-start: 19
}
.start-1245 {
grid-row-start: 20
}
.start-1300 {
grid-row-start: 11;
grid-row-start: 21
}
.start-1315 {
grid-row-start: 22
}
.start-1330 {
grid-row-start: 12;
grid-row-start: 23
}
.start-1345 {
grid-row-start: 24
}
.start-1400 {
grid-row-start: 13;
grid-row-start: 25
}
.start-1415 {
grid-row-start: 26
}
.start-1430 {
grid-row-start: 14;
grid-row-start: 27
}
.start-1445 {
grid-row-start: 28
}
.start-1500 {
grid-row-start: 15;
grid-row-start: 29
}
.start-1515 {
grid-row-start: 30
}
.start-1530 {
grid-row-start: 16;
grid-row-start: 31
}
.start-1545 {
grid-row-start: 32
}
.start-1600 {
grid-row-start: 17;
grid-row-start: 33
}
.start-1615 {
grid-row-start: 34
}
.start-1630 {
grid-row-start: 18;
grid-row-start: 35
}
.start-1645 {
grid-row-start: 36
}
.start-1700 {
grid-row-start: 19;
grid-row-start: 37
}
.start-1715 {
grid-row-start: 38
}
.start-1730 {
grid-row-start: 20;
grid-row-start: 39
}
.start-1745 {
grid-row-start: 40
}
.start-1800 {
grid-row-start: 21;
grid-row-start: 41
}
.start-1815 {
grid-row-start: 42
}
.start-1830 {
grid-row-start: 22;
grid-row-start: 43
}
.start-1845 {
grid-row-start: 44
}
.start-1900 {
grid-row-start: 45
}
// ENDS
.end-0800 {
grid-row-end: 1
}
.end-0815 {
grid-row-end: 2
}
.end-0830 {
grid-row-end: 2;
grid-row-end: 3
}
.end-0845 {
grid-row-end: 4
}
.end-0900 {
grid-row-end: 3;
grid-row-end: 5
}
.end-0915 {
grid-row-end: 6
}
.end-0930 {
grid-row-end: 4;
grid-row-end: 7
}
.end-0945 {
grid-row-end: 8
}
.end-1000 {
grid-row-end: 5;
grid-row-end: 9
}
.end-1015 {
grid-row-end: 10
}
.end-1030 {
grid-row-end: 6;
grid-row-end: 11
}
.end-1045 {
grid-row-end: 12
}
.end-1100 {
grid-row-end: 7;
grid-row-end: 13
}
.end-1115 {
grid-row-end: 14
}
.end-1130 {
grid-row-end: 8;
grid-row-end: 15
}
.end-1145 {
grid-row-end: 16
}
.end-1200 {
grid-row-end: 9;
grid-row-end: 17
}
.end-1215 {
grid-row-end: 18
}
.end-1230 {
grid-row-end: 10;
grid-row-end: 19
}
.end-1245 {
grid-row-end: 20
}
.end-1300 {
grid-row-end: 11;
grid-row-end: 21
}
.end-1315 {
grid-row-end: 22
}
.end-1330 {
grid-row-end: 12;
grid-row-end: 23
}
.end-1345 {
grid-row-end: 24
}
.end-1400 {
grid-row-end: 13;
grid-row-end: 25
}
.end-1415 {
grid-row-end: 26
}
.end-1430 {
grid-row-end: 14;
grid-row-end: 27
}
.end-1445 {
grid-row-end: 28
}
.end-1500 {
grid-row-end: 15;
grid-row-end: 29
}
.end-1515 {
grid-row-end: 30
}
.end-1530 {
grid-row-end: 16;
grid-row-end: 31
}
.end-1545 {
grid-row-end: 32
}
.end-1600 {
grid-row-end: 17;
grid-row-end: 33
}
.end-1615 {
grid-row-end: 34
}
.end-1630 {
grid-row-end: 18;
grid-row-end: 35
}
.end-1645 {
grid-row-end: 36
}
.end-1700 {
grid-row-end: 19;
grid-row-end: 37
}
.end-1715 {
grid-row-end: 38
}
.end-1730 {
grid-row-end: 20;
grid-row-end: 39
}
.end-1745 {
grid-row-end: 40
}
.end-1800 {
grid-row-end: 21;
grid-row-end: 41
}
.end-1815 {
grid-row-end: 42
}
.end-1830 {
grid-row-end: 22;
grid-row-end: 43
}
.end-1845 {
grid-row-end: 44
}
.end-1900 {
grid-row-end: 45
}
.end-1900 {
grid-row-end: 23;
}

View File

@ -1,59 +1,7 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Vorlesungsplan</title>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='cal.css') }}">
</head>
<body>
<div class="calendar">
<div class="timeline">
<div class="spacer"></div>
<div class="time-marker">08</div>
<div class="time-marker">09</div>
<div class="time-marker">10</div>
<div class="time-marker">11</div>
<div class="time-marker">12</div>
<div class="time-marker">13</div>
<div class="time-marker">14</div>
<div class="time-marker">15</div>
<div class="time-marker">16</div>
<div class="time-marker">17</div>
<div class="time-marker">18</div>
<div class="time-marker">19</div>
</div>
<div class="days">
{% for e in range (eventdays|length) %}
<div class="day {{ eventdays[e]["short"] }}">
<div class="date">
<p class="date-num">{{ eventdays[e]["day"] }}</p>
<p class="date-day">{{ eventdays[e]["long"] }}</p>
<form>
<select>
<option value="none" selected disabled> Mensa</option>
{% for n in eventdays [e]["mensa"] %}
<option class="mensa"> {{ n }}</option>
{% endfor %}
</select>
</form>
</div>
<div class="events">
{% for i in events %}
{% if i["weekday"] == e %}
<div class="event start-{{ i["start"][:2]+i["start"][3:] }} end-{{ i["end"][:2]+i["end"][3:]}}">
<p class="title">{{ i["name"] }}</p>
<p class="room">{{ i["room"] }}</p>
<p class="time">{{ i["start"] }} - {{ i["end"] }} ({{ i["dur"] }}h)</p>
</div>
{% endif %}
{% endfor %}
</div>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
{% extends "plan-general.html"%}
{% block startcontent %}
<h2>Vorlesungsplan {{ kurs }}</h2>
{% endblock %}
{% block endcontent %}
<a href={{ url_for("login") }}>Einloggen, um alle Features zu nutzen!</a>
</body>
</html>
{% endblock %}

View File

@ -6,6 +6,15 @@
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='cal.css') }}">
</head>
<body>
<div class="customheader">
{% block startcontent %}
{% endblock %}
</div>
<div class="headerblock">
<a href="?week={{prev}}" class="changeweek">🢐</a>
<a href="?today" class="changeweek">{{ mon }}</a>
<a href="?week={{next}}" class="changeweek">🢒</a>
</div>
<div class="calendar">
<div class="timeline">
<div class="spacer"></div>
@ -22,7 +31,7 @@
<div class="time-marker">18</div>
<div class="time-marker">19</div>
</div>
<div class="days">
<div class="days">
{% for e in range (eventdays|length) %}
<div class="day {{ eventdays[e]["short"] }}">
<div class="date">
@ -30,9 +39,9 @@
<p class="date-day">{{ eventdays[e]["long"] }}</p>
<form>
<select>
<option value="none" selected disabled hidden></option>
<option value="none" selected disabled> Mensa</option>
{% for n in eventdays [e]["mensa"] %}
<option disabled class="mensa"> {{ n }}</option>
<option class="mensa"> {{ n }}</option>
{% endfor %}
</select>
</form>
@ -41,6 +50,7 @@
{% for i in events %}
{% if i["weekday"] == e %}
<div class="event start-{{ i["start"][:2]+i["start"][3:] }} end-{{ i["end"][:2]+i["end"][3:]}}">
{% block event %} {% endblock %}
<p class="title">{{ i["name"] }}</p>
<p class="room">{{ i["room"] }}</p>
<p class="time">{{ i["start"] }} - {{ i["end"] }} ({{ i["dur"] }}h)</p>
@ -52,7 +62,7 @@
{% endfor %}
</div>
</div>
</div>
</div>
{% block endcontent %}
{% endblock %}
</body>
</html>

13
templates/plan-user.html Normal file
View File

@ -0,0 +1,13 @@
{% extends "plan-general.html" %}
{% block startcontent %}
<h2>{{ name }}s Vorlesungsplan</h2>
{% endblock %}
{% block event %}
<div class="userbuttons">
<button>👁</button>
<button class="plusbutton">+</button>
</div>
{% endblock %}
{% block endcontent %}
<!-- Button zum Hinzufügen von Kommentaren -->
{% endblock %}

16
templates/testpages.html Normal file
View File

@ -0,0 +1,16 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test Pages</title>
</head>
<body>
<a href={{ url_for("kurs") }} > kurs </a> <br>
<a href={{ url_for("login") }} > login </a><br>
<a href={{ url_for("displayNoten") }} > noten </a><br>
<a href={{ url_for("plananon", kurs="tinf22b3") }} > plan-anon </a><br>
<a href={{ url_for("planuser") }} > plan-user </a><br>
<a href={{ url_for("chooseRaplas") }} > rapla </a><br>
<a href={{ url_for("getSemester") }} > semester </a><br>
</body>
</html>

97
testpages.py Normal file
View File

@ -0,0 +1,97 @@
import datetime
import flask
from flask import render_template, Flask, url_for, redirect
app = Flask(__name__)
sampleweek = ([{'start': '08:30', 'end': '11:00', 'dur': '2:30', 'name': "Rechnerarchitekturen",
'room': "A266 Hörsaal", 'weekday': 0, 'day': 11},
{'start': '09:30', 'end': '12:00', 'dur': '2:30', 'name': "Netztechnik 1", 'room': "", 'weekday': 1,
'day': 12},
{'start': '08:30', 'end': '12:00', 'dur': '3:30', 'name': "Info3", 'room': "", 'weekday': 2,
'day': 13},
{'start': '08:30', 'end': '12:00', 'dur': '3:30', 'name': "Info3", 'room': "", 'weekday': 3,
'day': 14}, {'start': '11:00', 'end': '12:30', 'dur': '1:30', 'name': "Systemnahes Programmieren",
'room': "A266 Hörsaal", 'weekday': 0, 'day': 11},
{'start': '13:00', 'end': '16:15', 'dur': '3:15', 'name': "Java", 'room': "A266 Hörsaal",
'weekday': 3, 'day': 14}], [{'day': 11, 'short': 'mon', 'long': 'Montag', 'mensa': [
'Frikadelle Hausfrauen Art mit Kräutersoße und Risoleekartoffeln Kräutersoße',
'Veganes Gemüseschnitzel Risoleekartoffeln Kräutersoße', 'Kaiserschmarrn mit Rosinen und Apfelmus Vanillesoße']},
{'day': 12, 'short': 'tue', 'long': 'Dienstag', 'mensa': [
'Alaska Seelachsfilet in Backteig hausgemachter Kartoffelsalat Dip',
'Gemüsefrikadellen hausgemachter Kartoffelsalat Dip']},
{'day': 13, 'short': 'wed', 'long': 'Mittwoch', 'mensa': [
'Roter Curry - Gemüseeintopf mit Hähnchenstreifen und Baguettebrötchen',
'Roter Curry - Gemüseeintopf mit Sojastreifen und Baguettebrötchen',
'Gebratene Gnocchis mit Karotten und Schnittlauchsoße']},
{'day': 14, 'short': 'thu', 'long': 'Donnerstag', 'mensa': [
'Pasta mit Paprika, getrockneten Tomaten, Pinienkernen, Basilikum und Reibekäse',
'2010: Königsberger Klopse in Kapernsoße und Salzkartoffeln',
'Pasta mit Hackfleisch - Champignon - Soße, Reibekäse']},
{'day': 15, 'short': 'fri', 'long': 'Freitag', 'mensa': [
'Griechische Nudelpfanne mit Sojastreifen, Gemüse, Pinienkerne und Tomatensoße',
'Griechische Nudelpfanne mit Geflügel, Gemüse, Pinienkerne und Tomatensoße']}],
datetime.date(2023, 12, 6), datetime.date(2023, 12, 20), 'Dezember 2023')
@app.route("/")
def index():
return render_template('testpages.html')
@app.route("/kurs")
def kurs():
return render_template("kurs.html", detected=("TINF22B3", False))
@app.route("/login")
def login():
return render_template("login.html")
@app.route("/noten")
def displayNoten():
return render_template("noten.html", noten=[["Info", "nicht bestanden", 2000]],
semester=[["Sommersemester", "SoSe"]], sel="SoSe")
@app.route("/plan/<string:kurs>")
def plananon(kurs):
return render_template("plan-anon.html", events=sampleweek[0], eventdays=sampleweek[1], kurs=kurs,
prev=str(sampleweek[2])[:10], next=str(sampleweek[3])[:10], mon=sampleweek[4])
@app.route("/plan")
def planuser():
return render_template("plan-user.html", events=sampleweek[0], eventdays=sampleweek[1], kurs=kurs,
prev=str(sampleweek[2])[:10], next=str(sampleweek[3])[:10], mon=sampleweek[4], name="Studi")
@app.route("/rapla")
def chooseRaplas():
return render_template("rapla.html", raplas=[["TINF22B3"], ["TINF22B3"], ["TINF22B3"]])
@app.route("/semester")
def getSemester():
return render_template("semester.html", semester=[["Sommersemester 2023", "SoSeID"]])
@app.route("/setsemester", methods=["POST"])
def setSemester():
return redirect(url_for("index"))
@app.route("/getrapla", methods=["POST"])
def getRapla():
return redirect(url_for("index"))
@app.route("/login", methods=["POST"])
def login_post():
return redirect(url_for("index"))
if __name__ == "__main__":
app.run(host='0.0.0.0', port=2024, debug=True)