From 15954af6519d155b5ca64a30fb4996b67b263685 Mon Sep 17 00:00:00 2001 From: paulmart-n Date: Wed, 13 Dec 2023 18:52:59 +0100 Subject: [PATCH] Plan + Tests --- calendar_generation.py | 25 +- genstarts.py | 40 ++ requirements.txt | 2 + routing.py | 10 +- static/cal.css | 581 ++++++++++++++++++--- static/cal.css.map | 2 +- static/cal.scss | 532 +++++++++++++++---- templates/plan-anon.html | 64 +-- templates/{plan.html => plan-general.html} | 20 +- templates/plan-user.html | 13 + templates/testpages.html | 16 + testpages.py | 97 ++++ 12 files changed, 1166 insertions(+), 236 deletions(-) create mode 100644 genstarts.py rename templates/{plan.html => plan-general.html} (76%) create mode 100644 templates/plan-user.html create mode 100644 templates/testpages.html create mode 100644 testpages.py diff --git a/calendar_generation.py b/calendar_generation.py index bf1029e..dc639c5 100644 --- a/calendar_generation.py +++ b/calendar_generation.py @@ -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): diff --git a/genstarts.py b/genstarts.py new file mode 100644 index 0000000..951a9d8 --- /dev/null +++ b/genstarts.py @@ -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() diff --git a/requirements.txt b/requirements.txt index 2e58c0c..289d27b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,3 +9,5 @@ Requests talisman Werkzeug lxml +bs4 +pytz diff --git a/routing.py b/routing.py index fd54ebb..26fc63d 100644 --- a/routing.py +++ b/routing.py @@ -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/") @@ -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")) diff --git a/static/cal.css b/static/cal.css index d2e6ada..8d975f3 100644 --- a/static/cal.css +++ b/static/cal.css @@ -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 */ diff --git a/static/cal.css.map b/static/cal.css.map index f8f44b1..fe18de1 100644 --- a/static/cal.css.map +++ b/static/cal.css.map @@ -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"} \ No newline at end of file +{"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"} \ No newline at end of file diff --git a/static/cal.scss b/static/cal.scss index ae9bebb..4a5187f 100644 --- a/static/cal.scss +++ b/static/cal.scss @@ -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; -} \ No newline at end of file + + diff --git a/templates/plan-anon.html b/templates/plan-anon.html index 1a945db..d694304 100644 --- a/templates/plan-anon.html +++ b/templates/plan-anon.html @@ -1,59 +1,7 @@ - - - - - Vorlesungsplan - - - -
-
-
-
08
-
09
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
-
- {% for e in range (eventdays|length) %} -
-
-

{{ eventdays[e]["day"] }}

-

{{ eventdays[e]["long"] }}

-
- -
-
-
- {% for i in events %} - {% if i["weekday"] == e %} -
-

{{ i["name"] }}

-

{{ i["room"] }}

-

{{ i["start"] }} - {{ i["end"] }} ({{ i["dur"] }}h)

-
- {% endif %} - {% endfor %} -
-
- {% endfor %} -
-
- - +{% extends "plan-general.html"%} +{% block startcontent %} +

Vorlesungsplan {{ kurs }}

+{% endblock %} +{% block endcontent %} Einloggen, um alle Features zu nutzen! - - \ No newline at end of file +{% endblock %} \ No newline at end of file diff --git a/templates/plan.html b/templates/plan-general.html similarity index 76% rename from templates/plan.html rename to templates/plan-general.html index c296c74..5b1581c 100644 --- a/templates/plan.html +++ b/templates/plan-general.html @@ -6,6 +6,15 @@ +
+ {% block startcontent %} + {% endblock %} +
+
+ 🢐 + {{ mon }} + 🢒 +
@@ -22,7 +31,7 @@
18
19
-
+
{% for e in range (eventdays|length) %}
@@ -30,9 +39,9 @@

{{ eventdays[e]["long"] }}

@@ -41,6 +50,7 @@ {% for i in events %} {% if i["weekday"] == e %}
+ {% block event %} {% endblock %}

{{ i["name"] }}

{{ i["room"] }}

{{ i["start"] }} - {{ i["end"] }} ({{ i["dur"] }}h)

@@ -52,7 +62,7 @@ {% endfor %}
-
-
+ {% block endcontent %} + {% endblock %} \ No newline at end of file diff --git a/templates/plan-user.html b/templates/plan-user.html new file mode 100644 index 0000000..943efd3 --- /dev/null +++ b/templates/plan-user.html @@ -0,0 +1,13 @@ +{% extends "plan-general.html" %} +{% block startcontent %} +

{{ name }}s Vorlesungsplan

+{% endblock %} +{% block event %} +
+ + +
+{% endblock %} +{% block endcontent %} + +{% endblock %} \ No newline at end of file diff --git a/templates/testpages.html b/templates/testpages.html new file mode 100644 index 0000000..f7bc70b --- /dev/null +++ b/templates/testpages.html @@ -0,0 +1,16 @@ + + + + + Test Pages + + + kurs
+ login
+ noten
+ plan-anon
+ plan-user
+ rapla
+ semester
+ + \ No newline at end of file diff --git a/testpages.py b/testpages.py new file mode 100644 index 0000000..5516e1a --- /dev/null +++ b/testpages.py @@ -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/") +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)