first commit

This commit is contained in:
schmieders
2022-12-10 12:25:13 +01:00
commit 06cedbd790
36 changed files with 3550 additions and 0 deletions
+414
View File
@@ -0,0 +1,414 @@
/***********/
/* GENERAL */
/***********/
:root {
/* Override Bootstrap colors */
--bs-primary: #e2001a;
--bs-secondary: #5c6971;
/* Other colors */
--primary-hover: #fe1530;
--secondary-hover: #222;
--light-grey: #f1f3f3;
--darker-grey: #d4dada;
}
body {
background-color: #eee;
}
a {
color: var(--secondary-hover);
text-decoration-color: var(--bs-primary);
}
a:hover {
color: var(--primary-hover);
}
/*************/
/* BOOTSTRAP */
/*************/
/* Colors*/
.bg-primary {
background-color: var(--bs-primary) !important;
}
.bg-secondary {
background-color: var(--bs-secondary) !important;
}
/* Buttons */
.btn-primary {
--bs-btn-color: #fff;
--bs-btn-bg: var(--bs-primary);
--bs-btn-border-color: var(--bs-primary);
--bs-btn-hover-color: #fff;
--bs-btn-hover-bg: var(--primary-hover);
--bs-btn-hover-border-color: var(--primary-hover);
--bs-btn-focus-shadow-rgb: 49, 132, 253;
--bs-btn-active-color: #fff;
--bs-btn-active-bg: var(--bs-primary);
--bs-btn-active-border-color: var(--bs-primary);
--bs-btn-active-shadow: inset 0 3px 5px #00000020;
}
.btn-secondary {
--bs-btn-color: #fff;
--bs-btn-bg: var(--bs-secondary);
--bs-btn-border-color: var(--bs-secondary);
--bs-btn-hover-color: #fff;
--bs-btn-hover-bg: var(--secondary-hover);
--bs-btn-hover-border-color: var(--secondary-hover);
--bs-btn-focus-shadow-rgb: 130, 138, 145;
--bs-btn-active-color: #fff;
--bs-btn-active-bg: var(--bs-secondary);
--bs-btn-active-border-color: var(--bs-secondary);
--bs-btn-active-shadow: inset 0 3px 5px #00000020;
}
.btn-primary:focus,
.btn-secondary:focus {
box-shadow: 0 0 0 0.25rem #5c69714a;
}
.form-control:focus,
.form-select:focus,
.btn-close:focus {
color: #212529;
background-color: #fff;
border-color: #5c6971;
outline: 0;
box-shadow: 0 0 0 0.25rem #5c69714a;
}
/* Navbar */
.navbar-dark {
--bs-navbar-color: #fffc;
--bs-navbar-hover-color: #fffe;
--bs-navbar-active-color: #fff;
}
.dropdown-item.active,
.dropdown-item:active {
background-color: var(--bs-primary) !important;
}
/* Modals */
.modal-body form {
padding: 10px 20px;
}
/**********/
/* HEADER */
/**********/
header nav {
font-weight: 500;
}
.dash-item {
display: flex;
align-items: center;
vertical-align: middle;
}
/***********/
/* CONTENT */
/***********/
h5 {
font-size: 18px;
}
/* Main Page */
.section-title {
margin-bottom: 15px;
}
.content-section:first-of-type {
padding-top: 62px;
}
.content-section {
padding-top: 70px;
}
/* Management */
main.content {
margin-top: 62px;
margin-bottom: 66px;
padding: 20px;
min-height: calc(100vh - 194px);
}
/* Tables */
.table-heading {
margin: 20px 0;
display: flex;
align-items: center;
}
.content table tbody td,
.content table tbody th {
vertical-align: middle;
}
.content table thead th.text-center {
width: 78px;
}
/* Custom Buttons */
.add-button {
margin-left: auto;
background-color: var(--bs-secondary);
border-radius: 100%;
color: white;
height: 32px;
width: 32px;
display: flex;
align-items: center;
text-align: center;
justify-content: center;
}
.add-button:hover {
background-color: var(--secondary-hover);
}
.action-row {
justify-content: center;
display: flex;
gap: 10px;
}
.action-button {
border: none;
border-radius: 100%;
height: 34px;
width: 34px;
display: flex;
align-items: center;
text-align: center;
justify-content: center;
}
.action-button.edit {
color: white;
background-color: var(--bs-secondary);
}
.action-button.edit:not(.placeholder):hover {
background-color: var(--secondary-hover);
}
.action-button.delete {
color: white;
background-color: var(--bs-primary);
}
.action-button.delete:hover {
background-color: var(--bs-secondary);
}
/* Media Queries */
@media (min-width: 992px) {
.container,
.content > section {
padding-left: 80px;
padding-right: 80px;
}
}
@media (max-width: 992px) {
aside {
display: none;
}
}
/* SIDEBAR */
.sidebar {
-webkit-box-shadow: 5px 0 5px rgba(196, 194, 196, 0.72);
-moz-box-shadow: 5px 0 5px rgba(196, 194, 196, 0.72);
box-shadow: 5px 0 5px rgba(196, 194, 196, 0.72);
position: absolute;
top: 62px;
left: 0;
width: 80px;
background-color: white;
min-height: calc(100vh - 62px - 66px);
}
.sidebar li {
border-bottom: 1px solid #c5c5c5;
}
.sidebar li a {
display: block;
height: 65px;
width: 80px;
text-align: center;
}
.sidebar .nav-link {
color: var(--bs-secondary);
}
.sidebar .nav-link:not(.active):hover {
color: var(--secondary-hover);
}
.sidebar .nav-link.active {
color: var(--bs-primary);
}
.sidebar .nav-link svg {
vertical-align: -1.4em;
}
/* Carousel */
.carousel-item {
height: calc(100vh - 62px);
}
.carousel-item > img {
position: absolute;
object-fit: cover;
top: 0;
left: 0;
min-width: 100%;
min-height: 100%;
}
.carousel-caption {
text-align: left;
max-width: 400px;
z-index: 10;
color: white;
background-color: #00000090;
padding: 20px;
}
/* Custom Cards */
.name {
color: var(--bs-primary);
}
.work {
font-weight: bold;
font-size: 15px;
}
.work a {
text-decoration: none;
}
.about {
font-size: 13px;
}
.box {
-webkit-box-shadow: 13px 12px 5px -10px rgba(196, 194, 196, 0.72);
-moz-box-shadow: 13px 12px 5px -10px rgba(196, 194, 196, 0.72);
box-shadow: 13px 12px 5px -10px rgba(196, 194, 196, 0.72);
min-height: 300px;
}
/*************/
/* DASHBOARD */
/*************/
.dash-select {
border: none;
background-color: transparent;
font-size: 24px;
}
.dashboard .row.full,
.dashboard .section {
min-height: calc(100vh - 330px);
}
.dashboard .row.gap {
gap: 10px;
justify-content: center;
}
.dashboard .person {
vertical-align: middle;
margin: auto 0;
}
.dashboard .details svg {
color: var(--bs-primary)
}
#lecturerOther {
font-size: 16px;
text-overflow: ellipsis;
max-height: 580px;
}
.dashboard .details {
padding: 20px;
font-size: 18px;
vertical-align: middle;
}
.dashboard .row .card-cust {
height: 100%;
width: 100%;
}
/* Lecture List */
.lectureList {
list-style-type: none;
padding-left: 0;
overflow-y: scroll;
max-height: 580px;
}
.lectureList li {
padding: 10px;
}
.lectureList li:not(:last-of-type) {
border-bottom: 0.5px solid var(--darker-grey);
}
.lectureList li:nth-child(even) {
background-color: var(--light-grey);
}
.lectureList li:hover {
background-color: var(--darker-grey);
}
.lectureList .lecture {
font-size: 16px;
vertical-align: middle;
}
/* Misc */
.error {
display: none;
color: red;
padding: 0 20px;
}
.error.show {
display: block;
}
/**********/
/* FOOTER */
/**********/
footer {
bottom: 0;
text-align: center;
font-weight: 600;
color: var(--light-grey);
background-color: var(--bs-secondary);
padding: 20px 0;
margin-top: 20px;
border-top: 2px solid var(--bs-primary);
z-index: 2;
width: 100%;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

+4
View File
@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="#e2001a" viewBox="0 0 640 512">
<!--! Font Awesome Pro 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. -->
<path d="M320 32c-8.1 0-16.1 1.4-23.7 4.1L15.8 137.4C6.3 140.9 0 149.9 0 160s6.3 19.1 15.8 22.6l57.9 20.9C57.3 229.3 48 259.8 48 291.9v28.1c0 28.4-10.8 57.7-22.3 80.8c-6.5 13-13.9 25.8-22.5 37.6C0 442.7-.9 448.3 .9 453.4s6 8.9 11.2 10.2l64 16c4.2 1.1 8.7 .3 12.4-2s6.3-6.1 7.1-10.4c8.6-42.8 4.3-81.2-2.1-108.7C90.3 344.3 86 329.8 80 316.5V291.9c0-30.2 10.2-58.7 27.9-81.5c12.9-15.5 29.6-28 49.2-35.7l157-61.7c8.2-3.2 17.5 .8 20.7 9s-.8 17.5-9 20.7l-157 61.7c-12.4 4.9-23.3 12.4-32.2 21.6l159.6 57.6c7.6 2.7 15.6 4.1 23.7 4.1s16.1-1.4 23.7-4.1L624.2 182.6c9.5-3.4 15.8-12.5 15.8-22.6s-6.3-19.1-15.8-22.6L343.7 36.1C336.1 33.4 328.1 32 320 32zM128 408c0 35.3 86 72 192 72s192-36.7 192-72L496.7 262.6 354.5 314c-11.1 4-22.8 6-34.5 6s-23.5-2-34.5-6L143.3 262.6 128 408z" />
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

@@ -0,0 +1,42 @@
let logicHandler = new LogicHandler()
window.addEventListener('load', function () {
let dropdown = this.document.getElementById("dropdown")
logicHandler.getItems("lecturers").forEach(lecturer => {
dropdown.innerHTML += `<li><a class="dropdown-item" onclick="selectLecturer('${lecturer.id}')">${lecturer.firstName} ${lecturer.lastName}</a></li>`
})
})
function selectLecturer(id) {
let lecturer = logicHandler.getItem("lecturers", id)
document.getElementById("dropdown-button").innerText = `${lecturer.firstName} ${lecturer.lastName}`
document.getElementById("lecturerName").innerText = `${lecturer.firstName} ${lecturer.lastName}`
document.getElementById("lecturerTitle").innerText = "Prof. Dr."
document.getElementById("lecturerMail").innerHTML = `<a href="mailto:${lecturer.email}">${lecturer.email}</a>`
document.getElementById("lecturerProgram").innerText = logicHandler.getItem("studyPrograms", lecturer.studyProgram).name
document.getElementById("lecturerOther").innerText = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
let btn = document.getElementById("lecturerEditButton")
btn.classList.remove("disabled", "placeholder")
btn.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" class="bi bi-pencil" viewBox = "0 0 16 16" ><path d="M12.146.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1 0 .708l-10 10a.5.5 0 0 1-.168.11l-5 2a.5.5 0 0 1-.65-.65l2-5a.5.5 0 0 1 .11-.168l10-10zM11.207 2.5 13.5 4.793 14.793 3.5 12.5 1.207 11.207 2.5zm1.586 3L10.5 3.207 4 9.707V10h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.293l6.5-6.5zm-9.761 5.175-.106.106-1.528 3.821 3.821-1.528.106-.106A.5.5 0 0 1 5 12.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.468-.325z" /></svg>`
btn.onclick = () => window.location.href = window.location.href.replace("dashboard", "lecturers") + `?id=${id}`
let html = ""
let lectures = logicHandler.getItems("lectures")
lectures.forEach(lecture => {
lecture.lectureDates.forEach(lectureDate => {
let date = logicHandler.getItem("lectureDates", lectureDate)
if (lecture.lecturers.includes(id)) {
html = html + `
<li class="lecture">${lecture.lectureName} - ${logicHandler.getItem("studyClasses", lecture.studyClass).name} (${logicHandler.formatDateTime(date.startDate)} - ${logicHandler.formatDateTime(date.endDate)})</li>
`
}
})
})
document.querySelector(".lectureList").innerHTML = html
document.getElementsByClassName("sidebar")[0].style.minHeight = `${document.body.offsetHeight - 66}px`
}
+149
View File
@@ -0,0 +1,149 @@
function loadDummyData() {
window.localStorage.setItem("studyPrograms", JSON.stringify([
{
id: 0,
name: "Informatik",
short: "TIF"
},
{
id: 1,
name: "Wirtschaftsinformatik",
short: "WIF"
},
{
id: 2,
name: "Betriebswirtschaftslehre",
short: "BWL"
},
]))
window.localStorage.setItem("lectureDates", JSON.stringify([
{
id: 0,
startDate: "2022-01-01T00:00",
endDate: "2022-01-01T23:59"
},
{
id: 1,
startDate: "2022-02-02T00:00",
endDate: "2022-02-02T23:59"
},
{
id: 2,
startDate: "2022-03-03T00:00",
endDate: "2022-03-03T23:59"
},
]))
window.localStorage.setItem("semesters", JSON.stringify([
{
id: 0,
name: "1. Semester",
startDate: 0,
endDate: 2,
number: 1,
studyProgram: 1
}, {
id: 1,
name: "2. Semester",
startDate: 1,
endDate: 2,
number: 2,
studyProgram: 2
}, {
id: 2,
name: "3. Semester",
startDate: 0,
endDate: 1,
number: 3,
studyProgram: 0
},
]))
window.localStorage.setItem("studyClasses", JSON.stringify([
{
id: 0,
name: "TIF22A",
startDate: 0,
endDate: 0,
semester: 0,
studyProgram: 0
}, {
id: 1,
name: "WIF21B",
startDate: 1,
endDate: 1,
semester: 1,
studyProgram: 1
}, {
id: 2,
name: "BWL20A",
startDate: 2,
endDate: 2,
semester: 2,
studyProgram: 2
},
]))
window.localStorage.setItem("lecturers", JSON.stringify([
{
id: 0,
firstName: "Max",
lastName: "Mustermann",
email: "max.mustermann@uniplanner.de",
studyProgram: 0
}, {
id: 1,
firstName: "Erika",
lastName: "Musterfrau",
email: "erika.musterfrau@uniplanner.de",
studyProgram: 1
}, {
id: 2,
firstName: "Max",
lastName: "Musterfrau",
email: "max.musterfrau@uniplanner.de",
studyProgram: 2
},
]))
window.localStorage.setItem("lectures", JSON.stringify([
{
id: 0,
lectureName: "Technische Informatik",
moduleName: "Digitaltechnik I",
duration: 48,
lectureDates: ["0", "2"],
lecturers: ["0"],
studyClass: 0
}, {
id: 1,
lectureName: "Mathematik I",
moduleName: "Analysis",
duration: 50,
lectureDates: ["1", "2"],
lecturers: ["1", "2"],
studyClass: 1
}, {
id: 2,
lectureName: "Betriebswirtschaftslehre",
moduleName: "Projektmanagement",
duration: 35,
lectureDates: ["0", "2"],
lecturers: ["0", "1", "2"],
studyClass: 2
},
]))
window.localStorage.setItem("currentIds", JSON.stringify({
lectureDate: 3,
lecturer: 3,
lecture: 3,
semester: 3,
studyClass: 3,
studyProgram: 3
}))
}
@@ -0,0 +1,35 @@
let logicHandler = new LogicHandler()
let modalHandler = new LectureDateModalHandler()
function renderLectureDateModal(id) {
id = typeof id == "undefined" ? "Create" : id
let lectureDate = id == "Create" ? getEmptyLectureDate() : logicHandler.getItem("lectureDates", id)
document.body.append(modalHandler.getLectureDateModal(lectureDate))
document.body.append(modalHandler.getLectureDateModalButton(id))
let htmlButton = document.getElementById("modalButton" + id)
htmlButton.click()
htmlButton.remove()
}
function cancelLectureDateModal(id) {
document.getElementById("lectureDateModal" + id).remove()
}
function saveLectureDate(id) {
logicHandler.saveItem("lectureDate", id)
}
function removeLectureDate(id) {
logicHandler.removeItem("lectureDates", id)
document.getElementById("row" + id).remove()
}
function getEmptyLectureDate() {
return {
id: "Create",
startDate: "",
endDate: ""
}
}
@@ -0,0 +1,49 @@
class LectureDateModalHandler {
getLectureDateModal(lectureDate) {
let heading = lectureDate.id == "Create" ? "Neuen Termin erstellen" : `Termin #${lectureDate.id} bearbeiten`
let modal = `
<div class="modal modal-lg fade" id="lectureDateModal${lectureDate.id}" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="lectureDateModalLabel${lectureDate.id}" aria-hidden="true">
<div class="modal-dialog modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="lectureDateModalLabel${lectureDate.id}">${heading}</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Abbrechen" onclick="cancelLectureDateModal('${lectureDate.id}')"></button>
</div>
<div class="modal-body">
<p class="error"><i class="bi bi-exclamation-circle"></i> Bitte alle Felder ausfüllen.</p>
<form id="lectureDateForm${lectureDate.id}">
<div class="mb-3">
<label for="startDateInput" class="form-label">Startdatum</label>
<input type="datetime-local" class="form-control modalInput" id="startDateInput" name="startDate" value="${lectureDate.startDate}" >
</div>
<div class="mb-3">
<label for="endDateInput" class="form-label">Enddatum</label>
<input type="datetime-local" class="form-control modalInput" id="endDateInput" name="endDate" value="${lectureDate.endDate}" >
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-bs-dismiss="modal" onclick="cancelLectureDateModal('${lectureDate.id}')">Abbrechen</button>
<button type="button" class="btn btn-secondary" onclick="saveLectureDate('${lectureDate.id}')">Speichern</button>
</div>
</div>
</div>
</div>
`
let htmlModal = document.createElement("div")
htmlModal.innerHTML = modal
return htmlModal
}
getLectureDateModalButton(id) {
let button = `
<button type="button" data-bs-toggle="modal" data-bs-target="#lectureDateModal${id}" id="modalButton${id}" style="display: none;"></button>
`
let htmlButton = document.createElement("div")
htmlButton.innerHTML = button
return htmlButton
}
}
@@ -0,0 +1,43 @@
window.addEventListener("load", function () {
var logicHandler = new LogicHandler()
let lectureDates = logicHandler.getItems("lectureDates")
if (lectureDates != null) {
lectureDates.forEach(lectureDate => {
let content = `
<th scope="row">${lectureDate.id}</th>
<td>${logicHandler.formatDateTime(lectureDate.startDate)}</td>
<td>${logicHandler.formatDateTime(lectureDate.endDate)}</td>
<td>
<div class="action-row">
<button class="action-button edit" onclick="renderLectureDateModal(${lectureDate.id})">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
class="bi bi-pencil" viewBox="0 0 16 16">
<path
d="M12.146.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1 0 .708l-10 10a.5.5 0 0 1-.168.11l-5 2a.5.5 0 0 1-.65-.65l2-5a.5.5 0 0 1 .11-.168l10-10zM11.207 2.5 13.5 4.793 14.793 3.5 12.5 1.207 11.207 2.5zm1.586 3L10.5 3.207 4 9.707V10h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.293l6.5-6.5zm-9.761 5.175-.106.106-1.528 3.821 3.821-1.528.106-.106A.5.5 0 0 1 5 12.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.468-.325z" />
</svg>
</button>
<button class="action-button delete" onclick="removeLectureDate(${lectureDate.id})">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
class="bi bi-trash" viewBox="0 0 16 16">
<path
d="M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0V6z" />
<path fill-rule="evenodd"
d="M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1v1zM4.118 4 4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4H4.118zM2.5 3V2h11v1h-11z" />
</svg>
</button>
</div>
</td>
`
let row = document.createElement("tr")
row.id = "row" + lectureDate.id
row.innerHTML = content
document.getElementById("lectureDateTable").appendChild(row)
document.getElementsByClassName("sidebar")[0].style.minHeight = `${document.body.offsetHeight - 66}px`
})
}
})
@@ -0,0 +1,46 @@
let logicHandler = new LogicHandler()
let modalHandler = new LecturerModalHandler()
window.addEventListener('load', function () {
if (this.window.location.search.includes("id=")) {
renderLecturerModal(window.location.search.replace("?id=", ""))
}
})
function renderLecturerModal(id) {
id = typeof id == "undefined" ? "Create" : id
let lecturer = id == "Create" ? getEmptyLecturer() : logicHandler.getItem("lecturers", id)
let studyProgramList = logicHandler.getAsDataList("studyPrograms", "name", [lecturer.studyProgram])
document.body.append(modalHandler.getLecturerModal(lecturer, studyProgramList))
document.body.append(modalHandler.getLecturerModalButton(id))
let htmlButton = document.getElementById("lecturerButton" + id)
htmlButton.click()
htmlButton.remove()
}
function cancelLecturerModal(id) {
document.getElementById("lecturerModal" + id).remove()
window.location.href = window.location.href.replace(window.location.search, "")
}
function saveLecturer(id) {
logicHandler.saveItem("lecturer", id)
}
function removeLecturer(id) {
logicHandler.removeItem("lecturers", id)
document.getElementById("row" + id).remove()
}
function getEmptyLecturer() {
return {
id: "Create",
firstName: "",
lastName: "",
email: "",
studyProgram: ""
}
}
@@ -0,0 +1,60 @@
class LecturerModalHandler {
getLecturerModal(lecturer, studyProgramList) {
let heading = lecturer.id == "Create" ? "Neuen Dozent erstellen" : `Dozent #${lecturer.id} bearbeiten`
let modal = `
<div class="modal modal-lg fade" id="lecturerModal${lecturer.id}" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="lecturerModalLabel${lecturer.id}" aria-hidden="true">
<div class="modal-dialog modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="lecturerModalLabel${lecturer.id}">${heading}</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Abbrechen" onclick="cancelLecturerModal('${lecturer.id}')"></button>
</div>
<div class="modal-body">
<p class="error"><i class="bi bi-exclamation-circle"></i> Bitte alle Felder ausfüllen.</p>
<form id="lecturerForm${lecturer.id}">
<div class="mb-3">
<label for="firstNameInput" class="form-label">Vorname</label>
<input type="text" class="form-control modalInput" id="firstNameInput" name="firstName" value="${lecturer.firstName}" >
</div>
<div class="mb-3">
<label for="lastNameInput" class="form-label">Nachname</label>
<input type="text" class="form-control modalInput" id="lastNameInput" name="lastName" value="${lecturer.lastName}" >
</div>
<div class="mb-3">
<label for="emailInput" class="form-label">Email</label>
<input type="email" class="form-control modalInput" id="emailInput" name="email" value="${lecturer.email}" >
</div>
<div class="mb-3">
<label for="studyProgramInput" class="form-label">Studiengang</label>
<select class="form-select modalInput" id="studyProgramInput" name="studyProgram" >
<option selected disabled hidden>Bitte wählen</option>
${studyProgramList}
</select>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-bs-dismiss="modal" onclick="cancelLecturerModal('${lecturer.id}')">Abbrechen</button>
<button type="button" class="btn btn-secondary" onclick="saveLecturer('${lecturer.id}')">Speichern</button>
</div>
</div>
</div>
</div>
`
let htmlModal = document.createElement("div")
htmlModal.innerHTML = modal
return htmlModal
}
getLecturerModalButton(id) {
let button = `
<button type="button" data-bs-toggle="modal" data-bs-target="#lecturerModal${id}" id="lecturerButton${id}" style="display: none;"></button>
`
let htmlButton = document.createElement("div")
htmlButton.innerHTML = button
return htmlButton
}
}
@@ -0,0 +1,48 @@
window.addEventListener("load", function () {
let logicHandler = new LogicHandler()
let lecturers = logicHandler.getItems("lecturers")
if (lecturers != null) {
lecturers.forEach(lecturer => {
let studyProgram = logicHandler.getItem("studyPrograms", lecturer.studyProgram)
studyProgram = typeof studyProgram == "undefined" ? "" : studyProgram.name
let content = `
<th scope="row">${lecturer.id}</th>
<td>${lecturer.firstName}</td>
<td>${lecturer.lastName}</td>
<td>${lecturer.email}</td>
<td>${studyProgram}</td>
<td>
<div class="action-row">
<button class="action-button edit" onclick="renderLecturerModal(${lecturer.id})">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
class="bi bi-pencil" viewBox="0 0 16 16">
<path
d="M12.146.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1 0 .708l-10 10a.5.5 0 0 1-.168.11l-5 2a.5.5 0 0 1-.65-.65l2-5a.5.5 0 0 1 .11-.168l10-10zM11.207 2.5 13.5 4.793 14.793 3.5 12.5 1.207 11.207 2.5zm1.586 3L10.5 3.207 4 9.707V10h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.293l6.5-6.5zm-9.761 5.175-.106.106-1.528 3.821 3.821-1.528.106-.106A.5.5 0 0 1 5 12.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.468-.325z" />
</svg>
</button>
<button class="action-button delete" onclick="removeLecturer(${lecturer.id})">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
class="bi bi-trash" viewBox="0 0 16 16">
<path
d="M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0V6z" />
<path fill-rule="evenodd"
d="M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1v1zM4.118 4 4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4H4.118zM2.5 3V2h11v1h-11z" />
</svg>
</button>
</div>
</td>
`
let row = document.createElement("tr")
row.id = "row" + lecturer.id
row.innerHTML = content
document.getElementById("lecturersTable").appendChild(row)
document.getElementsByClassName("sidebar")[0].style.minHeight = `${document.body.offsetHeight - 66}px`
})
}
})
+43
View File
@@ -0,0 +1,43 @@
let logicHandler = new LogicHandler()
let modalHandler = new LectureModalHandler()
function renderLectureModal(id) {
id = typeof id == "undefined" ? "Create" : id
let lecture = id == "Create" ? getEmptyLecture() : logicHandler.getItem("lectures", id)
let lectureDateList = logicHandler.getAsDataListWithRange("lectureDates", "startDate", "endDate", lecture.lectureDates)
let lecturerList = logicHandler.getAsDataList("lecturers", "lastName", lecture.lecturers)
let studyClassList = logicHandler.getAsDataList("studyClasses", "name", [lecture.studyClass])
document.body.append(modalHandler.getLectureModal(lecture, lectureDateList, lecturerList, studyClassList))
document.body.append(modalHandler.getLectureModalButton(id))
let htmlButton = document.getElementById("lectureButton" + id)
htmlButton.click()
htmlButton.remove()
}
function cancelLectureModal(id) {
document.getElementById("lectureModal" + id).remove()
}
function saveLecture(id) {
logicHandler.saveItem("lecture", id)
}
function removeLecture(id) {
logicHandler.removeItem("lectures", id)
document.getElementById("row" + id).remove()
}
function getEmptyLecture() {
return {
id: "Create",
lectureName: "",
moduleName: "",
duration: "",
lectureDates: [],
lecturers: [],
studyClass: ""
}
}
+72
View File
@@ -0,0 +1,72 @@
class LectureModalHandler {
getLectureModal(lecture, lectureDateList, lecturerList, studyClassList) {
let heading = lecture.id == "Create" ? "Neue Vorlesung erstellen" : `Vorlesung #${lecture.id} bearbeiten`
let modal = `
<div class="modal modal-lg fade" id="lectureModal${lecture.id}" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="lectureModalLabel${lecture.id}" aria-hidden="true">
<div class="modal-dialog modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="lectureModalLabel${lecture.id}">${heading}</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Abbrechen" onclick="cancelLectureModal('${lecture.id}')"></button>
</div>
<div class="modal-body">
<p class="error"><i class="bi bi-exclamation-circle"></i> Bitte alle Felder ausfüllen.</p>
<form id="lectureForm${lecture.id}">
<div class="mb-3">
<label for="lectureNameInput" class="form-label">Vorlesungs-Name</label>
<input type="text" class="form-control modalInput" id="lectureNameInput" name="lectureName" value="${lecture.lectureName}" >
</div>
<div class="mb-3">
<label for="moduleNameInput" class="form-label">Modul-Name</label>
<input type="text" class="form-control modalInput" id="moduleNameInput" name="moduleName" value="${lecture.moduleName}" >
</div>
<div class="mb-3">
<label for="durationInput" class="form-label">Dauer</label>
<input type="number" min="0" class="form-control modalInput" id="durationInput" name="duration" value="${lecture.duration}" >
</div>
<div class="mb-3">
<label for="lectureDatesInput" class="form-label">Termine</label>
<select class="form-select modalInput" id="lectureDatesInput" name="lectureDates" multiple >
${lectureDateList}
</select>
</div>
<div class="mb-3">
<label for="lecturersInput" class="form-label">Dozenten</label>
<select class="form-select modalInput" id="lecturersInput" name="lecturers" multiple >
${lecturerList}
</select>
</div>
<div class="mb-3">
<label for="studyClassInput" class="form-label">Jahrgang</label>
<select class="form-select modalInput" id="studyClassInput" name="studyClass" >
<option selected disabled hidden>Bitte wählen</option>
${studyClassList}
</select>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-bs-dismiss="modal" onclick="cancelLectureModal('${lecture.id}')">Abbrechen</button>
<button type="button" class="btn btn-secondary" onclick="saveLecture('${lecture.id}')">Speichern</button>
</div>
</div>
</div>
</div>
`
let htmlModal = document.createElement("div")
htmlModal.innerHTML = modal
return htmlModal
}
getLectureModalButton(id) {
let button = `
<button type="button" data-bs-toggle="modal" data-bs-target="#lectureModal${id}" id="lectureButton${id}" style="display: none;"></button>
`
let htmlButton = document.createElement("div")
htmlButton.innerHTML = button
return htmlButton
}
}
+55
View File
@@ -0,0 +1,55 @@
window.addEventListener("load", function () {
let logicHandler = new LogicHandler()
let lectures = logicHandler.getItems("lectures")
if (lectures != null) {
lectures.forEach(lecture => {
let lecturers = logicHandler.getItems("lecturers").filter(lecturer => { return lecture.lecturers.indexOf(lecturer.id.toString()) > -1 })
lecturers.forEach((lecturer, idx) => lecturers[idx] = " " + lecturer.lastName)
let lectureDates = logicHandler.getItems("lectureDates").filter(lectureDate => { return lecture.lectureDates.indexOf(lectureDate.id.toString()) > -1 })
lectureDates.forEach((lectureDate, idx) => lectureDates[idx] = ` ${logicHandler.formatDateTime(lectureDate.startDate)} - ${logicHandler.formatDateTime(lectureDate.endDate)}`)
let studyClass = logicHandler.getItem("studyClasses", lecture.studyClass)
studyClass = typeof studyClass == "undefined" ? "" : studyClass.name
let content = `
<th scope="row">${lecture.id}</th>
<td>${lecture.lectureName}</td>
<td>${lecture.moduleName}</td>
<td>${lecture.duration}</td>
<td>${lectureDates}</td>
<td>${lecturers}</td>
<td>${studyClass}</td>
<td>
<div class="action-row">
<button class="action-button edit" onclick="renderLectureModal(${lecture.id})">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
class="bi bi-pencil" viewBox="0 0 16 16">
<path
d="M12.146.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1 0 .708l-10 10a.5.5 0 0 1-.168.11l-5 2a.5.5 0 0 1-.65-.65l2-5a.5.5 0 0 1 .11-.168l10-10zM11.207 2.5 13.5 4.793 14.793 3.5 12.5 1.207 11.207 2.5zm1.586 3L10.5 3.207 4 9.707V10h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.293l6.5-6.5zm-9.761 5.175-.106.106-1.528 3.821 3.821-1.528.106-.106A.5.5 0 0 1 5 12.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.468-.325z" />
</svg>
</button>
<button class="action-button delete" onclick="removeLecture(${lecture.id})">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
class="bi bi-trash" viewBox="0 0 16 16">
<path
d="M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0V6z" />
<path fill-rule="evenodd"
d="M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1v1zM4.118 4 4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4H4.118zM2.5 3V2h11v1h-11z" />
</svg>
</button>
</div>
</td>
`
let row = document.createElement("tr")
row.id = "row" + lecture.id
row.innerHTML = content
document.getElementById("lecturesTable").appendChild(row)
document.getElementsByClassName("sidebar")[0].style.minHeight = `${document.body.offsetHeight - 66}px`
})
}
})
+152
View File
@@ -0,0 +1,152 @@
class LogicHandler {
getItems(type) {
let items = JSON.parse(window.localStorage.getItem(type))
return items == null ? [] : items
}
getItem(type, id) {
let item = JSON.parse(window.localStorage.getItem(type))
return item == null ? {} : item.filter(item => {
return item.id == id
})[0]
}
addItem(type, item) {
let items = this.getItems(type)
items[items.length] = item
window.localStorage.setItem(type, JSON.stringify(items))
}
updateItem(type, data) {
let items = this.getItems(type)
items.forEach((item, idx) => {
if (item.id == data.id)
items[idx] = data
})
window.localStorage.setItem(type, JSON.stringify(items))
}
removeItem(type, id) {
let items = this.getItems(type).filter(item => {
return item.id != id
})
window.localStorage.setItem(type, JSON.stringify(items))
}
saveItem(type, id, multiple = "s") {
let json = this.getFormData(type + "Form" + id)
if (!json) {
document.getElementById(type + "Modal" + id).querySelector("p.error").classList.add("show")
return
}
json.id = id == "Create" ? this.getId(type) : id
if (id == "Create")
this.addItem(type + multiple, json)
else
this.updateItem(type + multiple, json)
window.location.href = window.location.href.replace(window.location.search, "")
}
getId(type) {
var values = JSON.parse(window.localStorage.getItem("currentIds"))
if (values == null)
values = {}
if (values[type] == null)
values[type] = 0
let id = values[type]
values[type] = parseInt(values[type]) + 1
window.localStorage.setItem("currentIds", JSON.stringify(values))
return id
}
getAsDataList(type, field, selected) {
let datalist = ""
Array.from(this.getItems(type)).forEach(item => {
if (selected.length > 0 && selected.filter(select => { return parseInt(select) == item['id'] }).length > 0)
datalist += `<option value="${item['id']}" selected>${item[field]}</option>`
else
datalist += `<option value="${item['id']}">${item[field]}</option>`
})
return datalist
}
getAsDataListWithRange(type, rangeStart, rangeEnd, selected) {
let datalist = ""
Array.from(this.getItems(type)).forEach(item => {
if (selected.length > 0 && selected.filter(select => { return parseInt(select) == item['id'] }).length > 0)
datalist += `<option value="${item['id']}" selected>${this.formatDateTime(item[rangeStart])} - ${this.formatDateTime(item[rangeEnd])}</option>`
else
datalist += `<option value="${item['id']}">${this.formatDateTime(item[rangeStart])} - ${this.formatDateTime(item[rangeEnd])}</option>`
})
return datalist
}
getAsDateList(type, field, selected) {
let datalist = ""
Array.from(this.getItems(type)).forEach(item => {
if (selected.length > 0 && selected.filter(select => { return parseInt(select) == item['id'] }).length > 0)
datalist += `<option value="${item['id']}" selected>${this.formatDateTimeToDate(item[field])}</option>`
else
datalist += `<option value="${item['id']}">${this.formatDateTimeToDate(item[field])}</option>`
})
return datalist
}
getFormData(form) {
let fields = Array.from(document.getElementById(form).querySelectorAll(".modalInput"))
let json = {}
let valid = true
fields.forEach(element => {
if (typeof element.options != "undefined") {
let values = []
Array.from(element.options).forEach(option => {
if (option.selected && !option.disabled)
values.push(option.value)
})
if (values.length == 0)
valid = false
json[element.name] = values
} else {
if (element.value.trim().length == 0)
valid = false
json[element.name] = element.value
}
})
if (!valid)
return false
return json
}
formatDateTime(dateTime) {
let split = dateTime.split("T")
let dateSplit = split[0].split("-")
return dateSplit[2] + "." + dateSplit[1] + "." + dateSplit[0] + " " + split[1]
}
formatDateTimeToDate(dateTime) {
let split = dateTime.split("T")
let dateSplit = split[0].split("-")
return dateSplit[2] + "." + dateSplit[1] + "." + dateSplit[0]
}
}
window.addEventListener('load', function () {
document.getElementsByClassName("sidebar")[0].style.minHeight = `${document.body.offsetHeight - 66}px`
})
window.addEventListener('resize', function () {
document.getElementsByClassName("sidebar")[0].style.minHeight = `${document.body.offsetHeight - 66}px`
})
@@ -0,0 +1,43 @@
let logicHandler = new LogicHandler()
let modalHandler = new SemesterModalHandler()
function renderSemesterModal(id) {
id = typeof id == "undefined" ? "Create" : id
let semester = id == "Create" ? getEmptySemester() : logicHandler.getItem("semesters", id)
let startDateList = logicHandler.getAsDateList("lectureDates", "startDate", [semester.startDate])
let endDateList = logicHandler.getAsDateList("lectureDates", "endDate", [semester.endDate])
let studyProgramList = logicHandler.getAsDataList("studyPrograms", "name", [semester.studyProgram])
document.body.append(modalHandler.getSemesterModal(semester, startDateList, endDateList, studyProgramList))
document.body.append(modalHandler.getSemesterModalButton(id))
let htmlButton = document.getElementById("modalButton" + id)
htmlButton.click()
htmlButton.remove()
}
function cancelSemesterModal(id) {
document.getElementById("semesterModal" + id).remove()
}
function saveSemester(id) {
logicHandler.saveItem("semester", id)
}
function removeSemester(id) {
logicHandler.removeItem("semesters", id)
document.getElementById("row" + id).remove()
}
function getEmptySemester() {
return {
id: "Create",
name: "",
startDate: "",
endDate: "",
number: "",
studyProgram: ""
}
}
@@ -0,0 +1,68 @@
class SemesterModalHandler {
getSemesterModal(semester, startDateList, endDateList, studyProgramList) {
let heading = semester.id == "Create" ? "Neues Semester erstellen" : `Semester #${semester.id} bearbeiten`
let modal = `
<div class="modal modal-lg fade" id="semesterModal${semester.id}" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="semesterModalLabel${semester.id}" aria-hidden="true">
<div class="modal-dialog modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="semesterModalLabel${semester.id}">${heading}</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Abbrechen" onclick="cancelSemesterModal('${semester.id}')"></button>
</div>
<div class="modal-body">
<p class="error"><i class="bi bi-exclamation-circle"></i> Bitte alle Felder ausfüllen.</p>
<form id="semesterForm${semester.id}">
<div class="mb-3">
<label for="semesterNameInput" class="form-label">Semester-Name</label>
<input type="text" class="form-control modalInput" id="semesterNameInput" name="name" value="${semester.name}" >
</div>
<div class="mb-3">
<label for="startDateInput" class="form-label">Startdatum</label>
<select class="form-select modalInput" id="startDateInput" name="startDate">
<option selected hidden disabled>Bitte wählen</option>
${startDateList}
</select>
</div>
<div class="mb-3">
<label for="endDateInput" class="form-label">Enddatum</label>
<select class="form-select modalInput" id="endDateInput" name="endDate">
<option selected hidden disabled>Bitte wählen</option>
${endDateList}
</select>
</div>
<div class="mb-3">
<label for="semesterNumberInput" class="form-label">Semester (Nummer)</label>
<input type="number" min="0" class="form-control modalInput" id="semesterNumberInput" name="number" value="${semester.number}" >
</div>
<div class="mb-3">
<label for="studyProgramInput" class="form-label">Studiengang</label>
<select class="form-select modalInput" id="studyProgramInput" name="studyProgram" >
<option selected disabled hidden>Bitte wählen</option>
${studyProgramList}
</select>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-bs-dismiss="modal" onclick="cancelSemesterModal('${semester.id}')">Abbrechen</button>
<button type="button" class="btn btn-secondary" onclick="saveSemester('${semester.id}')">Speichern</button>
</div>
</div>
</div>
</div>
`
let htmlModal = document.createElement("div")
htmlModal.innerHTML = modal
return htmlModal
}
getSemesterModalButton(id) {
let button = `
<button type="button" data-bs-toggle="modal" data-bs-target="#semesterModal${id}" id="modalButton${id}" style="display: none;"></button>
`
let htmlButton = document.createElement("div")
htmlButton.innerHTML = button
return htmlButton
}
}
@@ -0,0 +1,49 @@
window.addEventListener("load", function () {
var logicHandler = new LogicHandler()
let semesters = logicHandler.getItems("semesters")
if (semesters != null) {
semesters.forEach(semester => {
let studyProgram = logicHandler.getItem("studyPrograms", semester.studyProgram)
studyProgram = typeof studyProgram == "undefined" ? "" : studyProgram.name
let content = `
<th scope="row">${semester.id}</th>
<td>${semester.name}</td>
<td>${logicHandler.formatDateTimeToDate(logicHandler.getItem("lectureDates", semester.startDate).startDate)}</td>
<td>${logicHandler.formatDateTimeToDate(logicHandler.getItem("lectureDates", semester.endDate).endDate)}</td>
<td>${semester.number}</td>
<td>${studyProgram}</td>
<td>
<div class="action-row">
<button class="action-button edit" onclick="renderSemesterModal(${semester.id})">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
class="bi bi-pencil" viewBox="0 0 16 16">
<path
d="M12.146.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1 0 .708l-10 10a.5.5 0 0 1-.168.11l-5 2a.5.5 0 0 1-.65-.65l2-5a.5.5 0 0 1 .11-.168l10-10zM11.207 2.5 13.5 4.793 14.793 3.5 12.5 1.207 11.207 2.5zm1.586 3L10.5 3.207 4 9.707V10h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.293l6.5-6.5zm-9.761 5.175-.106.106-1.528 3.821 3.821-1.528.106-.106A.5.5 0 0 1 5 12.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.468-.325z" />
</svg>
</button>
<button class="action-button delete" onclick="removeSemester(${semester.id})">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
class="bi bi-trash" viewBox="0 0 16 16">
<path
d="M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0V6z" />
<path fill-rule="evenodd"
d="M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1v1zM4.118 4 4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4H4.118zM2.5 3V2h11v1h-11z" />
</svg>
</button>
</div>
</td>
`
let row = document.createElement("tr")
row.id = "row" + semester.id
row.innerHTML = content
document.getElementById("semestersTable").appendChild(row)
document.getElementsByClassName("sidebar")[0].style.minHeight = `${document.body.offsetHeight - 66}px`
})
}
})
@@ -0,0 +1,43 @@
let logicHandler = new LogicHandler()
let modalHandler = new StudyClassModalHandler()
function renderStudyClassModal(id) {
id = typeof id == "undefined" ? "Create" : id
let studyClass = id == "Create" ? getEmptyStudyClass() : logicHandler.getItem("studyClasses", id)
let startDateList = logicHandler.getAsDateList("lectureDates", "startDate", [studyClass.startDate])
let endDateList = logicHandler.getAsDateList("lectureDates", "endDate", [studyClass.endDate])
let semesterList = logicHandler.getAsDataList("semesters", "name", [studyClass.semester])
let studyProgramList = logicHandler.getAsDataList("studyPrograms", "name", [studyClass.studyProgram])
document.body.append(modalHandler.getStudyClassModal(studyClass, semesterList, startDateList, endDateList, studyProgramList))
document.body.append(modalHandler.getStudyClassModalButton(id))
let htmlButton = document.getElementById("studyClassButton" + id)
htmlButton.click()
htmlButton.remove()
}
function cancelStudyClassModal(id) {
document.getElementById("studyClassModal" + id).remove()
}
function saveStudyClass(id) {
logicHandler.saveItem("studyClass", id, "es")
}
function removeStudyClass(id) {
logicHandler.removeItem("studyClasses", id)
document.getElementById("row" + id).remove()
}
function getEmptyStudyClass() {
return {
id: "Create",
name: "",
startDate: "",
endDate: "",
semester: "",
studyProgram: ""
}
}
@@ -0,0 +1,73 @@
class StudyClassModalHandler {
getStudyClassModal(studyClass, semesterList, startDateList, endDateList, studyProgramList) {
let heading = studyClass.id == "Create" ? "Neuen Jahrgang erstellen" : `Jahrgang #${studyClass.id} bearbeiten`
let modal = `
<div class="modal modal-lg fade" id="studyClassModal${studyClass.id}" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="lecturerModalLabel${studyClass.id}" aria-hidden="true">
<div class="modal-dialog modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="studyClassModalLabel${studyClass.id}">${heading}</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Abbrechen" onclick="cancelStudyClassModal('${studyClass.id}')"></button>
</div>
<div class="modal-body">
<p class="error"><i class="bi bi-exclamation-circle"></i> Bitte alle Felder ausfüllen.</p>
<form id="studyClassForm${studyClass.id}">
<div class="mb-3">
<label for="studyClassNameInput" class="form-label">Name</label>
<input type="text" class="form-control modalInput" id="studyClassNameInput" name="name" value="${studyClass.name}" >
</div>
<div class="mb-3">
<label for="startDateInput" class="form-label">Startdatum</label>
<select class="form-select modalInput" id="startDateInput" name="startDate" >
<option selected disabled hidden>Bitte wählen</option>
${startDateList}
</select>
</div>
<div class="mb-3">
<label for="endDateInput" class="form-label">Enddatum</label>
<select class="form-select modalInput" id="endDateInput" name="endDate" >
<option selected disabled hidden>Bitte wählen</option>
${endDateList}
</select>
</div>
<div class="mb-3">
<label for="semesterInput" class="form-label">Semester</label>
<select class="form-select modalInput" id="semesterInput" name="semester">
<option selected disabled hidden>Bitte wählen</option>
${semesterList}
</select>
</div>
<div class="mb-3">
<label for="studyProgramInput" class="form-label">Studiengang</label>
<select class="form-select modalInput" id="studyProgramInput" name="studyProgram" >
<option selected disabled hidden>Bitte wählen</option>
${studyProgramList}
</select>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-bs-dismiss="modal" onclick="cancelStudyClassModal('${studyClass.id}')">Abbrechen</button>
<button type="button" class="btn btn-secondary" onclick="saveStudyClass('${studyClass.id}')">Speichern</button>
</div>
</div>
</div>
</div>
`
let htmlModal = document.createElement("div")
htmlModal.innerHTML = modal
return htmlModal
}
getStudyClassModalButton(id) {
let button = `
<button type="button" data-bs-toggle="modal" data-bs-target="#studyClassModal${id}" id="studyClassButton${id}" style="display: none;"></button>
`
let htmlButton = document.createElement("div")
htmlButton.innerHTML = button
return htmlButton
}
}
@@ -0,0 +1,49 @@
window.addEventListener("load", function () {
let logicHandler = new LogicHandler()
let studyClasses = logicHandler.getItems("studyClasses")
if (studyClasses != null) {
studyClasses.forEach(studyClass => {
let studyProgram = logicHandler.getItem("studyPrograms", studyClass.studyProgram)
studyProgram = typeof studyProgram == "undefined" ? "" : studyProgram.name
let content = `
<th scope="row">${studyClass.id}</th>
<td>${studyClass.name}</td>
<td>${logicHandler.formatDateTimeToDate(logicHandler.getItem("lectureDates", studyClass.startDate).startDate)}</td>
<td>${logicHandler.formatDateTimeToDate(logicHandler.getItem("lectureDates", studyClass.endDate).endDate)}</td>
<td>${logicHandler.getItem("semesters", studyClass.semester).name}</td>
<td>${studyProgram}</td>
<td>
<div class="action-row">
<button class="action-button edit" onclick="renderStudyClassModal(${studyClass.id})">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
class="bi bi-pencil" viewBox="0 0 16 16">
<path
d="M12.146.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1 0 .708l-10 10a.5.5 0 0 1-.168.11l-5 2a.5.5 0 0 1-.65-.65l2-5a.5.5 0 0 1 .11-.168l10-10zM11.207 2.5 13.5 4.793 14.793 3.5 12.5 1.207 11.207 2.5zm1.586 3L10.5 3.207 4 9.707V10h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.293l6.5-6.5zm-9.761 5.175-.106.106-1.528 3.821 3.821-1.528.106-.106A.5.5 0 0 1 5 12.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.468-.325z" />
</svg>
</button>
<button class="action-button delete" onclick="removeStudyClass(${studyClass.id})">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
class="bi bi-trash" viewBox="0 0 16 16">
<path
d="M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0V6z" />
<path fill-rule="evenodd"
d="M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1v1zM4.118 4 4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4H4.118zM2.5 3V2h11v1h-11z" />
</svg>
</button>
</div>
</td>
`
let row = document.createElement("tr")
row.id = "row" + studyClass.id
row.innerHTML = content
document.getElementById("studyClassTable").appendChild(row)
document.getElementsByClassName("sidebar")[0].style.minHeight = `${document.body.offsetHeight - 66}px`
})
}
})
@@ -0,0 +1,35 @@
let logicHandler = new LogicHandler()
let modalHandler = new StudyProgramModalHandler()
function renderStudyProgramModal(id) {
id = typeof id == "undefined" ? "Create" : id
let studyProgram = id == "Create" ? getEmptyStudyProgram() : logicHandler.getItem("studyPrograms", id)
document.body.append(modalHandler.getStudyProgramModal(studyProgram))
document.body.append(modalHandler.getStudyProgramModalButton(id))
let htmlButton = document.getElementById("modalButton" + id)
htmlButton.click()
htmlButton.remove()
}
function cancelStudyProgramModal(id) {
document.getElementById("studyProgramModal" + id).remove()
}
function saveStudyProgram(id) {
logicHandler.saveItem("studyProgram", id)
}
function removeStudyProgram(id) {
logicHandler.removeItem("studyPrograms", id)
document.getElementById("row" + id).remove()
}
function getEmptyStudyProgram() {
return {
id: "Create",
name: "",
short: ""
}
}
@@ -0,0 +1,49 @@
class StudyProgramModalHandler {
getStudyProgramModal(studyProgram) {
let heading = studyProgram.id == "Create" ? "Neuen Studiengang erstellen" : `Studiengang #${studyProgram.id} bearbeiten`
let modal = `
<div class="modal modal-lg fade" id="studyProgramModal${studyProgram.id}" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="studyProgramModalLabel${studyProgram.id}" aria-hidden="true">
<div class="modal-dialog modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="studyProgramModalLabel${studyProgram.id}">${heading}</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Abbrechen" onclick="cancelStudyProgramModal('${studyProgram.id}')"></button>
</div>
<div class="modal-body">
<p class="error"><i class="bi bi-exclamation-circle"></i> Bitte alle Felder ausfüllen.</p>
<form id="studyProgramForm${studyProgram.id}">
<div class="mb-3">
<label for="nameInput" class="form-label">Name</label>
<input type="text" class="form-control modalInput" id="nameInput" name="name" value="${studyProgram.name}" >
</div>
<div class="mb-3">
<label for="shortInput" class="form-label">Kürzel</label>
<input type="text" class="form-control modalInput" id="shortInput" name="short" value="${studyProgram.short}" >
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-bs-dismiss="modal" onclick="cancelStudyProgramModal('${studyProgram.id}')">Abbrechen</button>
<button type="button" class="btn btn-secondary" onclick="saveStudyProgram('${studyProgram.id}')">Speichern</button>
</div>
</div>
</div>
</div>
`
let htmlModal = document.createElement("div")
htmlModal.innerHTML = modal
return htmlModal
}
getStudyProgramModalButton(id) {
let button = `
<button type="button" data-bs-toggle="modal" data-bs-target="#studyProgramModal${id}" id="modalButton${id}" style="display: none;"></button>
`
let htmlButton = document.createElement("div")
htmlButton.innerHTML = button
return htmlButton
}
}
@@ -0,0 +1,43 @@
window.addEventListener("load", function () {
let logicHandler = new LogicHandler()
let studyPrograms = logicHandler.getItems("studyPrograms")
if (studyPrograms != null) {
studyPrograms.forEach(studyProgram => {
let content = `
<th scope="row">${studyProgram.id}</th>
<td>${studyProgram.name}</td>
<td>${studyProgram.short}</td>
<td>
<div class="action-row">
<button class="action-button edit" onclick="renderStudyProgramModal(${studyProgram.id})">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
class="bi bi-pencil" viewBox="0 0 16 16">
<path
d="M12.146.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1 0 .708l-10 10a.5.5 0 0 1-.168.11l-5 2a.5.5 0 0 1-.65-.65l2-5a.5.5 0 0 1 .11-.168l10-10zM11.207 2.5 13.5 4.793 14.793 3.5 12.5 1.207 11.207 2.5zm1.586 3L10.5 3.207 4 9.707V10h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.293l6.5-6.5zm-9.761 5.175-.106.106-1.528 3.821 3.821-1.528.106-.106A.5.5 0 0 1 5 12.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.468-.325z" />
</svg>
</button>
<button class="action-button delete" onclick="removeStudyProgram(${studyProgram.id})">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
class="bi bi-trash" viewBox="0 0 16 16">
<path
d="M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0V6z" />
<path fill-rule="evenodd"
d="M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1v1zM4.118 4 4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4H4.118zM2.5 3V2h11v1h-11z" />
</svg>
</button>
</div>
</td>
`
let row = document.createElement("tr")
row.id = "row" + studyProgram.id
row.innerHTML = content
document.getElementById("studyProgramTable").appendChild(row)
document.getElementsByClassName("sidebar")[0].style.minHeight = `${document.body.offsetHeight - 66}px`
})
}
})
+279
View File
@@ -0,0 +1,279 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="author" content="Ali Fistik, Jonas Braus, Simon Schmieder">
<meta name="description" content="FrontEnd des UniPlanners">
<title>UniPlanner</title>
<link rel="icon" href="../assets/img/favicon.svg">
<!-- Styles -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.2/font/bootstrap-icons.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="../assets/css/styles.css">
</head>
<body>
<header>
<nav class="navbar navbar-dark bg-primary navbar-expand-lg fixed-top">
<div class="container">
<a class="navbar-brand" href="../index.html#home">
<img class="navlogo" src="../assets/img/uniplanner.png" height="36">
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse navbar-dark" id="navbarNav">
<ul class="navbar-nav ms-auto nav-item-custom">
<li class="nav-item">
<a class="nav-link" href="../index.html">Home</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="" role="button" data-bs-toggle="dropdown">Verwaltung</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="../lectures/index.html">Vorlesungen</a></li>
<li><a class="dropdown-item" href="../semesters/index.html">Semester</a></li>
<li><a class="dropdown-item" href="../lecturers/index.html">Dozenten</a></li>
<li><a class="dropdown-item" href="../lectureDates/index.html">Termine</a></li>
<li><a class="dropdown-item" href="../studyClasses/index.html">Jahrgänge</a></li>
<li><a class="dropdown-item" href="../studyProgram/index.html">Studiengänge</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="../index.html#ueber-uns">Über uns</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../index.html#funktionen">Funktionen</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../index.html#impressum">Impressum</a>
</li>
<li class="nav-item dash-item">
<a class="nav-link active" href="../dashboard/index.html">
Dashboard
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M8 2a.5.5 0 0 1 .5.5V4a.5.5 0 0 1-1 0V2.5A.5.5 0 0 1 8 2zM3.732 3.732a.5.5 0 0 1 .707 0l.915.914a.5.5 0 1 1-.708.708l-.914-.915a.5.5 0 0 1 0-.707zM2 8a.5.5 0 0 1 .5-.5h1.586a.5.5 0 0 1 0 1H2.5A.5.5 0 0 1 2 8zm9.5 0a.5.5 0 0 1 .5-.5h1.5a.5.5 0 0 1 0 1H12a.5.5 0 0 1-.5-.5zm.754-4.246a.389.389 0 0 0-.527-.02L7.547 7.31A.91.91 0 1 0 8.85 8.569l3.434-4.297a.389.389 0 0 0-.029-.518z" />
<path fill-rule="evenodd"
d="M6.664 15.889A8 8 0 1 1 9.336.11a8 8 0 0 1-2.672 15.78zm-4.665-4.283A11.945 11.945 0 0 1 8 10c2.186 0 4.236.585 6.001 1.606a7 7 0 1 0-12.002 0z" />
</svg>
</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<main class="content container">
<aside class="sidebar" id="sidebar">
<ul class="nav navbar-dark">
<li class="nav-item">
<a href="../lectures/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Vorlesungen">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M6 1h6v7a.5.5 0 0 1-.757.429L9 7.083 6.757 8.43A.5.5 0 0 1 6 8V1z" />
<path
d="M3 0h10a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2v-1h1v1a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v1H1V2a2 2 0 0 1 2-2z" />
<path
d="M1 5v-.5a.5.5 0 0 1 1 0V5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0V8h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0v.5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../semesters/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Semester">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M11 2a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v12h.5a.5.5 0 0 1 0 1H.5a.5.5 0 0 1 0-1H1v-3a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v3h1V7a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v7h1V2zm1 12h2V2h-2v12zm-3 0V7H7v7h2zm-5 0v-3H2v3h2z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../lecturers/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Dozenten">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path d="M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1H3Zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../lectureDates/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Termine">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M14 0H2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM1 3.857C1 3.384 1.448 3 2 3h12c.552 0 1 .384 1 .857v10.286c0 .473-.448.857-1 .857H2c-.552 0-1-.384-1-.857V3.857z" />
<path
d="M6.5 7a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../studyClasses/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Jahrgänge">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M.5 0a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-1 0V.5A.5.5 0 0 1 .5 0zM2 1.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-4a.5.5 0 0 1-.5-.5v-1zm2 4a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-7a.5.5 0 0 1-.5-.5v-1zm2 4a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-6a.5.5 0 0 1-.5-.5v-1zm2 4a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-7a.5.5 0 0 1-.5-.5v-1z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../studyProgram/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Studiengänge">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M4 2.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1ZM4 5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1ZM7.5 5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Zm2.5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1ZM4.5 8a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Zm2.5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Z" />
<path
d="M2 1a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V1Zm11 0H3v14h3v-2.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5V15h3V1Z" />
</svg>
</a>
</li>
</ul>
</aside>
<section class="dashboard">
<h1 class="mb-5">
Dashboard
<div class="btn-group">
<button class="dash-select btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown"
aria-expanded="false" id="dropdown-button">
Dozent wählen
</button>
<ul class="dropdown-menu" id="dropdown"></ul>
</div>
</h1>
<div class="row full">
<div class="col-lg-6 col-md-12 mb-4">
<div class="card-cust bg-white p-4 rounded box">
<h3>Vorlesungstermine</h3>
<ul class="lectureList">
<li>
<p class="card-text placeholder-glow">
<span class="placeholder col-4"></span>
</p>
</li>
<li>
<p class="card-text placeholder-glow">
<span class="placeholder col-7"></span>
</p>
</li>
<li>
<p class="card-text placeholder-glow">
<span class="placeholder col-11"></span>
</p>
</li>
<li>
<p class="card-text placeholder-glow">
<span class="placeholder col-5"></span>
</p>
</li>
<li>
<p class="card-text placeholder-glow">
<span class="placeholder col-6"></span>
</p>
</li>
</ul>
</div>
</div>
<div class="col-lg-6 col-md-12 mb-4">
<div class="card-cust bg-white p-4 rounded box">
<div class="row">
<div class="col-xxl-3 col-xl-4 col-lg-5 col-md-3 mb-4">
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" fill="#e2001a"
class="bi bi-person-circle" viewBox="0 0 16 16">
<path d="M11 6a3 3 0 1 1-6 0 3 3 0 0 1 6 0z" />
<path fill-rule="evenodd"
d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm8-7a7 7 0 0 0-5.468 11.37C3.242 11.226 4.805 10 8 10s4.757 1.225 5.468 2.37A7 7 0 0 0 8 1z" />
</svg>
</div>
<div class="col-xxl-7 col-xl-6 col-lg-5 col-md-6 person">
<h4 class="card-text placeholder-glow" id="lecturerName">
<span class="placeholder col-6"></span>
</h4>
<p class="card-text placeholder-glow" id="lecturerTitle">
<span class="placeholder col-4"></span>
</p>
</div>
<div class="col-2">
<button class="action-button edit placeholder disabled" id="lecturerEditButton"></button>
</div>
</div>
<div class="details">
<div class="mb-4">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
class="bi bi-envelope-fill" viewBox="0 0 16 16">
<path
d="M.05 3.555A2 2 0 0 1 2 2h12a2 2 0 0 1 1.95 1.555L8 8.414.05 3.555ZM0 4.697v7.104l5.803-3.558L0 4.697ZM6.761 8.83l-6.57 4.027A2 2 0 0 0 2 14h12a2 2 0 0 0 1.808-1.144l-6.57-4.027L8 9.586l-1.239-.757Zm3.436-.586L16 11.801V4.697l-5.803 3.546Z" />
</svg>
<span class="card-text placeholder-glow" id="lecturerMail">
<span class="placeholder col-7"></span>
</span>
</div>
<div class="mb-4">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M4 2.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1ZM4 5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1ZM7.5 5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Zm2.5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1ZM4.5 8a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Zm2.5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Z" />
<path
d="M2 1a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V1Zm11 0H3v14h3v-2.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5V15h3V1Z" />
</svg>
<span class="card-text placeholder-glow" id="lecturerProgram">
<span class="placeholder col-9"></span>
</span>
</div>
<div class="mb-4">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
class="bi bi-person-vcard" viewBox="0 0 16 16">
<path
d="M5 8a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm4-2.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 0 1h-4a.5.5 0 0 1-.5-.5ZM9 8a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 0 1h-4A.5.5 0 0 1 9 8Zm1 2.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5Z" />
<path
d="M2 2a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H2ZM1 4a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H8.96c.026-.163.04-.33.04-.5C9 10.567 7.21 9 5 9c-2.086 0-3.8 1.398-3.984 3.181A1.006 1.006 0 0 1 1 12V4Z" />
</svg>
Weiteres
<p class="card-text placeholder-glow mt-2" id="lecturerOther">
<span class="placeholder col-4"></span>
<span class="placeholder col-6"></span>
<span class="placeholder col-7"></span>
<span class="placeholder col-2"></span>
<span class="placeholder col-9"></span>
<span class="placeholder col-3"></span>
<span class="placeholder col-4"></span>
<span class="placeholder col-2"></span>
<span class="placeholder col-7"></span>
</p>
</div>
</div>
</div>
</div>
</div>
</section>
</main>
<footer>
Copyright &copy; 2022 Ali Fistik, Jonas Braus, Simon Schmieder
</footer>
<!-- Scripts -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3"
crossorigin="anonymous"></script>
<script src="../assets/js/logicHandler.js"></script>
<script src="../assets/js/dashboard/dashboardLogicHandler.js"></script>
<script src="../assets/js/dummyDataHandler.js"></script>
</body>
</html>
+332
View File
@@ -0,0 +1,332 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="author" content="Ali Fistik, Jonas Braus, Simon Schmieder">
<meta name="description" content="FrontEnd des UniPlanners">
<title>UniPlanner</title>
<link rel="icon" href="assets/img/favicon.svg">
<!-- Styles -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.2/font/bootstrap-icons.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="assets/css/styles.css">
</head>
<body>
<header>
<nav class="navbar navbar-dark bg-primary navbar-expand-lg fixed-top">
<div class="container">
<a class="navbar-brand" href="#start">
<img class="navlogo" src="assets/img/uniplanner.png" height="36">
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse navbar-dark" id="navbarNav">
<ul class="navbar-nav ms-auto nav-item-custom">
<li class="nav-item">
<a class="nav-link active" href="#start">Home</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="" role="button"
data-bs-toggle="dropdown">Verwaltung</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="./lectures/index.html">Vorlesungen</a></li>
<li><a class="dropdown-item" href="./semesters/index.html">Semester</a></li>
<li><a class="dropdown-item" href="./lecturers/index.html">Dozenten</a></li>
<li><a class="dropdown-item" href="./lectureDates/index.html">Termine</a></li>
<li><a class="dropdown-item" href="./studyClasses/index.html">Jahrgänge</a></li>
<li><a class="dropdown-item" href="./studyProgram/index.html">Studiengänge</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="#ueber-uns">Über uns</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#funktionen">Funktionen</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#impressum">Impressum</a>
</li>
<li class="nav-item dash-item">
<a class="nav-link" href="./dashboard/index.html">
Dashboard
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M8 2a.5.5 0 0 1 .5.5V4a.5.5 0 0 1-1 0V2.5A.5.5 0 0 1 8 2zM3.732 3.732a.5.5 0 0 1 .707 0l.915.914a.5.5 0 1 1-.708.708l-.914-.915a.5.5 0 0 1 0-.707zM2 8a.5.5 0 0 1 .5-.5h1.586a.5.5 0 0 1 0 1H2.5A.5.5 0 0 1 2 8zm9.5 0a.5.5 0 0 1 .5-.5h1.5a.5.5 0 0 1 0 1H12a.5.5 0 0 1-.5-.5zm.754-4.246a.389.389 0 0 0-.527-.02L7.547 7.31A.91.91 0 1 0 8.85 8.569l3.434-4.297a.389.389 0 0 0-.029-.518z" />
<path fill-rule="evenodd"
d="M6.664 15.889A8 8 0 1 1 9.336.11a8 8 0 0 1-2.672 15.78zm-4.665-4.283A11.945 11.945 0 0 1 8 10c2.186 0 4.236.585 6.001 1.606a7 7 0 1 0-12.002 0z" />
</svg>
</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<main>
<section class="content-section" id="start">
<div id="carousel" class="carousel slide" data-bs-ride="carousel">
<div class="carousel-indicators">
<button type="button" data-bs-target="#carousel" data-bs-slide-to="0" class="active"
aria-current="true" aria-label="Slide 1"></button>
<button type="button" data-bs-target="#carousel" data-bs-slide-to="1" aria-label="Slide 2"></button>
<button type="button" data-bs-target="#carousel" data-bs-slide-to="2" aria-label="Slide 3"></button>
</div>
<div class="carousel-inner">
<div class="carousel-item active">
<img src="https://images.pexels.com/photos/1122865/pexels-photo-1122865.jpeg"
class="d-block w-100" alt="Ein Student">
<div class="carousel-caption">
<h3>Struktur</h3>
<p>Als Student ist es wichtig den Überblick über seinen Alltag zu behalten.<br />
Wann hat man welche Vorlesung?<br />
Wie kontaktiert man seine Dozenten?<br />
Der Uniplanner hilft seinen Benutzern genau in diesen Bereichen.<br />
Mit ihm ist es einfacher denn je, seinen Tag in der Universität ordentlich zu planen und
umzusetzen.
</p>
</div>
</div>
<div class="carousel-item">
<img src="https://images.pexels.com/photos/1409215/pexels-photo-1409215.jpeg"
class="d-block w-100" alt="Ein Student">
<div class="carousel-caption">
<h3>Alles in einem Tool</h3>
<p>Mit dem Uniplanner können Studenten nicht nur ihre Vorlesungen strukturieren.
Auch das verwalten von Kontaktdaten der Dozenten sowie eine Kursübergreifende
Terminplanung ist durch unsere Systeme einfacher denn je.<br />
Mit dem Uniplanner behält die gesamte Universität den Plan im Griff.</p>
</div>
</div>
<div class="carousel-item">
<img src="https://images.pexels.com/photos/3184454/pexels-photo-3184454.jpeg"
class="d-block w-100" alt="Ein Klassenraum">
<div class="carousel-caption">
<h3>Digitalisierung</h3>
<p>Der digitale Uniplanner bietet den Studenten neue Möglichkeiten für ihren Alltag.<br />
Anders als herkömmliche Stundenpläne ist der Uniplanner jederzeit im Internet abrufbar
und durch seine verschiedensten Funktionalitäten wie dem Bearbeiten, Löschen und
Hinzufügen von Vorlesungen wird es Studenten ermöglicht jegliche Fehler sofort zu
beheben.
</p>
</div>
</div>
</div>
<button class="carousel-control-prev" type="button" data-bs-target="#carousel" data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="visually-hidden">Previous</span>
</button>
<button class="carousel-control-next" type="button" data-bs-target="#carousel" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</button>
</div>
</section>
<section id="ueber-uns" class="content-section">
<div class="container">
<div class="section-title">
<h2>Über uns</h2>
</div>
<div class="text-center">
</div>
<div class="row" id="team">
<div class="col-12 col-lg-4 mb-4">
<div class="bg-white p-4 text-center rounded box">
<img class="img-responsive rounded-circle" src="./assets/img/AliFistik.jpg" width="90">
<h5 class="mt-3 name">Ali Fistik</h5>
<span class="work d-block">Dualer Student</span>
<span class="work d-block px-4">
<a href="https://www.linkedin.com/in/ali-fistik-186181252/" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#0a66c2"
viewBox="0 0 16 16">
<path
d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854V1.146zm4.943 12.248V6.169H2.542v7.225h2.401zm-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248-.822 0-1.359.54-1.359 1.248 0 .694.521 1.248 1.327 1.248h.016zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016a5.54 5.54 0 0 1 .016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225h2.4z" />
</svg>
</a>
<a href="mailto:ali.fistik@uniplanner.de">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="gray"
viewBox="0 0 16 16">
<path
d="M.05 3.555A2 2 0 0 1 2 2h12a2 2 0 0 1 1.95 1.555L8 8.414.05 3.555ZM0 4.697v7.104l5.803-3.558L0 4.697ZM6.761 8.83l-6.57 4.027A2 2 0 0 0 2 14h12a2 2 0 0 0 1.808-1.144l-6.57-4.027L8 9.586l-1.239-.757Zm3.436-.586L16 11.801V4.697l-5.803 3.546Z" />
</svg>
</a>
</span>
<div class="mt-4 about px-4">
Persistence. Perfection. Prioritize your passion.
</div>
</div>
</div>
<div class="col-12 col-lg-4 mb-4">
<div class="bg-white p-4 text-center rounded box">
<img class="img-responsive rounded-circle" src="./assets/img/JonasBraus.jpg" width="90">
<h5 class="mt-3 name px-4">Jonas Braus</h5>
<span class="work d-block">Dualer Student</span>
<span class="work d-block px-4">
<a href="https://www.linkedin.com/in/jonas-braus-b99259252/" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#0a66c2"
viewBox="0 0 16 16">
<path
d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854V1.146zm4.943 12.248V6.169H2.542v7.225h2.401zm-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248-.822 0-1.359.54-1.359 1.248 0 .694.521 1.248 1.327 1.248h.016zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016a5.54 5.54 0 0 1 .016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225h2.4z" />
</svg>
</a>
<a href="mailto:jonas.braus@uniplanner.de">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="gray"
viewBox="0 0 16 16">
<path
d="M.05 3.555A2 2 0 0 1 2 2h12a2 2 0 0 1 1.95 1.555L8 8.414.05 3.555ZM0 4.697v7.104l5.803-3.558L0 4.697ZM6.761 8.83l-6.57 4.027A2 2 0 0 0 2 14h12a2 2 0 0 0 1.808-1.144l-6.57-4.027L8 9.586l-1.239-.757Zm3.436-.586L16 11.801V4.697l-5.803 3.546Z" />
</svg>
</a>
</span>
<div class="mt-4 about px-4">
Price is what you pay. Value is what you get.
</div>
</div>
</div>
<div class="col-12 col-lg-4 mb-4">
<div class="bg-white p-4 text-center rounded box">
<img class="img-responsive rounded-circle" src="./assets/img/SimonSchmieder.jpg" width="90">
<h5 class="mt-3 name px-4">Simon Schmieder</h5>
<span class="work d-block">Dualer Student</span>
<span class="work d-block px-4">
<a href="https://www.linkedin.com/in/simon-schmieder/" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#0a66c2"
viewBox="0 0 16 16">
<path
d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854V1.146zm4.943 12.248V6.169H2.542v7.225h2.401zm-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248-.822 0-1.359.54-1.359 1.248 0 .694.521 1.248 1.327 1.248h.016zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016a5.54 5.54 0 0 1 .016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225h2.4z" />
</svg>
</a>
<a href="mailto:simon.schmieder@uniplanner.de">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="gray"
viewBox="0 0 16 16">
<path
d="M.05 3.555A2 2 0 0 1 2 2h12a2 2 0 0 1 1.95 1.555L8 8.414.05 3.555ZM0 4.697v7.104l5.803-3.558L0 4.697ZM6.761 8.83l-6.57 4.027A2 2 0 0 0 2 14h12a2 2 0 0 0 1.808-1.144l-6.57-4.027L8 9.586l-1.239-.757Zm3.436-.586L16 11.801V4.697l-5.803 3.546Z" />
</svg>
</a>
</span>
<div class="mt-4 about px-4">
Best way to predict your future is to create IT.
</div>
</div>
</div>
</div>
</div>
</section>
<section id="funktionen" class="content-section">
<div class="container">
<div class="section-title">
<h2>Funktionen</h2>
</div>
<div>
<p class="mb-3">
Herzlich Willkommen auf uniplanner.de <br>
UniPlanner ist <strong>DEIN</strong> Online-Tool für die Planung sämtlicher studienrelevanten
Themen!
</p>
<h5>Wie funktionierts? </h5>
<p>
Mit UniPlanner kannst du kostenlos Einträge für Vorlesungen, Semester, Dozenten und Weiteres
anlegen. Womit du am Besten anfängst
erfährst du in diesem kurzen Guide.
</p>
<ul>
<li>
Über das Dropdownmenü "Verwaltung", gelangst du zu den jeweiligen Seiten für die
Datenerfassung
</li>
<li>
Zu Beginn kannst du einen <a href="./studyProgram/index.html" target="_blank">
Studiengang</a>, sowie einen oder mehrere <a href="./lectureDates/index.html"
target="_blank">Termine</a>, bestehend aus einem
Start- und Enddatum, so wie der jeweiligen Uhrzeit, anlegen
</li>
<li>
Hast du das getan, ist es dir bereits möglich <a href="./semesters/index.html"
target="_blank">Semester</a> und <a href="./lecturers/index.html"
target="_blank">Dozenten</a> mit allen erforderlichen
Daten einzutragen
</li>
<li>
Navigiere nun in den Bereich <a href="./studyClasses/index.html"
target="_blank">Jahrgänge</a> und trage die jeweiligen Daten ein
</li>
<li>
Du hast nun alle nötigen Daten um Einträge zu <a href="./lectures/index.html"
target="_blank">Vorlesungen</a> zu erstellen
</li>
<li>
Nachdem alle Daten ins System eingetragen wurden kannst du über das <a
href="./dashboard/index.html" target="_blank">Dashboard</a> einen Dozenten
auswählen, um dir seine Kontaktdaten, Vorlesungen und einige weiteren Daten anzusehen
</li>
</ul>
</div>
</div>
</section>
<section id="impressum" class="content-section">
<div class="container">
<div>
<div class='impressum'>
<h2>Impressum</h2>
<p>Angaben gemäß § 5 TMG</p>
<p>Simon Schmieder <br>
Musterstraße 1<br>
79576 Weil am Rhein <br>
</p>
<p><strong>Vertreten durch: </strong><br>
Ali Fistik, Jonas Braus<br>
</p>
<p><strong>Kontakt:</strong> <br>
Telefon: 01234-789456<br>
Fax: 1234-56789<br>
E-Mail: <a href='mailto:kontakt@uniplanner.de'>kontakt@uniplanner.de</a></br></p>
<p><strong>Umsatzsteuer-ID: </strong> <br>
Umsatzsteuer-Identifikationsnummer gemäß §27a Umsatzsteuergesetz: 0123456789<br><br>
<strong>Wirtschafts-ID: </strong><br>
0123456789<br>
</p>
<p><strong>Aufsichtsbehörde:</strong><br>
Bezirksgericht Freiburg im Breisgau<br></p>
<br />
<p style="font-size: 10px; opacity: 0.5;">
Website Impressum erstellt durch <a
href="https://www.impressum-generator.de">impressum-generator.de</a> von der <a
href="https://www.kanzlei-hasselbach.de/" rel="nofollow">Kanzlei Hasselbach</a>
</p>
</div>
</div>
</div>
</section>
</main>
<footer>
Copyright &copy; 2022 Ali Fistik, Jonas Braus, Simon Schmieder
</footer>
<!-- Scripts -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3"
crossorigin="anonymous"></script>
<script src="./assets/js/dummyDataHandler.js"></script>
</body>
</html>
+195
View File
@@ -0,0 +1,195 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="author" content="Ali Fistik, Jonas Braus, Simon Schmieder">
<meta name="description" content="FrontEnd des UniPlanners">
<title>UniPlanner</title>
<link rel="icon" href="../assets/img/favicon.svg">
<!-- Styles -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.2/font/bootstrap-icons.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="../assets/css/styles.css">
</head>
<body>
<header>
<nav class="navbar navbar-dark bg-primary navbar-expand-lg fixed-top">
<div class="container">
<a class="navbar-brand" href="../index.html#home">
<img class="navlogo" src="../assets/img/uniplanner.png" height="36">
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse navbar-dark" id="navbarNav">
<ul class="navbar-nav ms-auto nav-item-custom">
<li class="nav-item">
<a class="nav-link" href="../index.html">Home</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active" href="" role="button"
data-bs-toggle="dropdown">Verwaltung</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="../lectures/index.html">Vorlesungen</a></li>
<li><a class="dropdown-item" href="../semesters/index.html">Semester</a></li>
<li><a class="dropdown-item" href="../lecturers/index.html">Dozenten</a></li>
<li><a class="dropdown-item active" href="../lectureDates/index.html">Termine</a></li>
<li><a class="dropdown-item" href="../studyClasses/index.html">Jahrgänge</a></li>
<li><a class="dropdown-item" href="../studyProgram/index.html">Studiengänge</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="../index.html#ueber-uns">Über uns</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../index.html#funktionen">Funktionen</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../index.html#impressum">Impressum</a>
</li>
<li class="nav-item dash-item">
<a class="nav-link" href="../dashboard/index.html">
Dashboard
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M8 2a.5.5 0 0 1 .5.5V4a.5.5 0 0 1-1 0V2.5A.5.5 0 0 1 8 2zM3.732 3.732a.5.5 0 0 1 .707 0l.915.914a.5.5 0 1 1-.708.708l-.914-.915a.5.5 0 0 1 0-.707zM2 8a.5.5 0 0 1 .5-.5h1.586a.5.5 0 0 1 0 1H2.5A.5.5 0 0 1 2 8zm9.5 0a.5.5 0 0 1 .5-.5h1.5a.5.5 0 0 1 0 1H12a.5.5 0 0 1-.5-.5zm.754-4.246a.389.389 0 0 0-.527-.02L7.547 7.31A.91.91 0 1 0 8.85 8.569l3.434-4.297a.389.389 0 0 0-.029-.518z" />
<path fill-rule="evenodd"
d="M6.664 15.889A8 8 0 1 1 9.336.11a8 8 0 0 1-2.672 15.78zm-4.665-4.283A11.945 11.945 0 0 1 8 10c2.186 0 4.236.585 6.001 1.606a7 7 0 1 0-12.002 0z" />
</svg>
</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<main class="content container">
<aside class="sidebar">
<ul class="nav navbar-dark">
<li class="nav-item">
<a href="../lectures/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Vorlesungen">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M6 1h6v7a.5.5 0 0 1-.757.429L9 7.083 6.757 8.43A.5.5 0 0 1 6 8V1z" />
<path
d="M3 0h10a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2v-1h1v1a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v1H1V2a2 2 0 0 1 2-2z" />
<path
d="M1 5v-.5a.5.5 0 0 1 1 0V5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0V8h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0v.5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../semesters/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Semester">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M11 2a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v12h.5a.5.5 0 0 1 0 1H.5a.5.5 0 0 1 0-1H1v-3a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v3h1V7a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v7h1V2zm1 12h2V2h-2v12zm-3 0V7H7v7h2zm-5 0v-3H2v3h2z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../lecturers/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Dozenten">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path d="M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1H3Zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../lectureDates/index.html" class="nav-link active" data-bs-toggle="tooltip"
data-bs-placement="right" data-bs-title="Termine">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M14 0H2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM1 3.857C1 3.384 1.448 3 2 3h12c.552 0 1 .384 1 .857v10.286c0 .473-.448.857-1 .857H2c-.552 0-1-.384-1-.857V3.857z" />
<path
d="M6.5 7a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../studyClasses/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Jahrgänge">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M.5 0a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-1 0V.5A.5.5 0 0 1 .5 0zM2 1.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-4a.5.5 0 0 1-.5-.5v-1zm2 4a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-7a.5.5 0 0 1-.5-.5v-1zm2 4a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-6a.5.5 0 0 1-.5-.5v-1zm2 4a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-7a.5.5 0 0 1-.5-.5v-1z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../studyProgram/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Studiengänge">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M4 2.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1ZM4 5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1ZM7.5 5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Zm2.5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1ZM4.5 8a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Zm2.5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Z" />
<path
d="M2 1a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V1Zm11 0H3v14h3v-2.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5V15h3V1Z" />
</svg>
</a>
</li>
</ul>
</aside>
<section>
<h1 class="table-heading">
Vorlesungstermine
<span class="add-button" onclick="renderLectureDateModal()">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" class="bi bi-plus"
viewBox="0 0 16 16">
<path
d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z" />
</svg>
</span>
</h1>
<div class="table-responsive">
<table class="table table-striped table-hover">
<thead>
<tr>
<th scope="col" id="id">#</th>
<th scope="col" id="startDate">Startdatum</th>
<th scope="col" id="endDate">Enddatum</th>
<th scope="col" class="text-center"></th>
</tr>
</thead>
<tbody id="lectureDateTable"></tbody>
</table>
</div>
</section>
</main>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3"
crossorigin="anonymous"></script>
<script>
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
</script>
<footer>
Copyright &copy; 2022 Ali Fistik, Jonas Braus, Simon Schmieder
</footer>
<script src="../assets/js/logicHandler.js"></script>
<script src="../assets/js/lectureDates/lectureDateModalHandler.js"></script>
<script src="../assets/js/lectureDates/lectureDateLogicHandler.js"></script>
<script src="../assets/js/lectureDates/lectureDateTableHandler.js"></script>
<script src="../assets/js/dummyDataHandler.js"></script>
</body>
</html>
+197
View File
@@ -0,0 +1,197 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="author" content="Ali Fistik, Jonas Braus, Simon Schmieder">
<meta name="description" content="FrontEnd des UniPlanners">
<title>UniPlanner</title>
<link rel="icon" href="../assets/img/favicon.svg">
<!-- Styles -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.2/font/bootstrap-icons.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="../assets/css/styles.css">
</head>
<body>
<header>
<nav class="navbar navbar-dark bg-primary navbar-expand-lg fixed-top">
<div class="container">
<a class="navbar-brand" href="../index.html#home">
<img class="navlogo" src="../assets/img/uniplanner.png" height="36">
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse navbar-dark" id="navbarNav">
<ul class="navbar-nav ms-auto nav-item-custom">
<li class="nav-item">
<a class="nav-link" href="../index.html">Home</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active" href="" role="button"
data-bs-toggle="dropdown">Verwaltung</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="../lectures/index.html">Vorlesungen</a></li>
<li><a class="dropdown-item" href="../semesters/index.html">Semester</a></li>
<li><a class="dropdown-item active" href="../lecturers/index.html">Dozenten</a></li>
<li><a class="dropdown-item" href="../lectureDates/index.html">Termine</a></li>
<li><a class="dropdown-item" href="../studyClasses/index.html">Jahrgänge</a></li>
<li><a class="dropdown-item" href="../studyProgram/index.html">Studiengänge</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="../index.html#ueber-uns">Über uns</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../index.html#funktionen">Funktionen</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../index.html#impressum">Impressum</a>
</li>
<li class="nav-item dash-item">
<a class="nav-link" href="../dashboard/index.html">
Dashboard
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M8 2a.5.5 0 0 1 .5.5V4a.5.5 0 0 1-1 0V2.5A.5.5 0 0 1 8 2zM3.732 3.732a.5.5 0 0 1 .707 0l.915.914a.5.5 0 1 1-.708.708l-.914-.915a.5.5 0 0 1 0-.707zM2 8a.5.5 0 0 1 .5-.5h1.586a.5.5 0 0 1 0 1H2.5A.5.5 0 0 1 2 8zm9.5 0a.5.5 0 0 1 .5-.5h1.5a.5.5 0 0 1 0 1H12a.5.5 0 0 1-.5-.5zm.754-4.246a.389.389 0 0 0-.527-.02L7.547 7.31A.91.91 0 1 0 8.85 8.569l3.434-4.297a.389.389 0 0 0-.029-.518z" />
<path fill-rule="evenodd"
d="M6.664 15.889A8 8 0 1 1 9.336.11a8 8 0 0 1-2.672 15.78zm-4.665-4.283A11.945 11.945 0 0 1 8 10c2.186 0 4.236.585 6.001 1.606a7 7 0 1 0-12.002 0z" />
</svg>
</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<main class="content container">
<aside class="sidebar">
<ul class="nav navbar-dark">
<li class="nav-item">
<a href="../lectures/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Vorlesungen">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M6 1h6v7a.5.5 0 0 1-.757.429L9 7.083 6.757 8.43A.5.5 0 0 1 6 8V1z" />
<path
d="M3 0h10a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2v-1h1v1a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v1H1V2a2 2 0 0 1 2-2z" />
<path
d="M1 5v-.5a.5.5 0 0 1 1 0V5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0V8h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0v.5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../semesters/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Semester">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M11 2a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v12h.5a.5.5 0 0 1 0 1H.5a.5.5 0 0 1 0-1H1v-3a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v3h1V7a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v7h1V2zm1 12h2V2h-2v12zm-3 0V7H7v7h2zm-5 0v-3H2v3h2z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../lecturers/index.html" class="nav-link active" data-bs-toggle="tooltip"
data-bs-placement="right" data-bs-title="Dozenten">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path d="M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1H3Zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../lectureDates/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Termine">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M14 0H2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM1 3.857C1 3.384 1.448 3 2 3h12c.552 0 1 .384 1 .857v10.286c0 .473-.448.857-1 .857H2c-.552 0-1-.384-1-.857V3.857z" />
<path
d="M6.5 7a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../studyClasses/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Jahrgänge">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M.5 0a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-1 0V.5A.5.5 0 0 1 .5 0zM2 1.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-4a.5.5 0 0 1-.5-.5v-1zm2 4a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-7a.5.5 0 0 1-.5-.5v-1zm2 4a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-6a.5.5 0 0 1-.5-.5v-1zm2 4a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-7a.5.5 0 0 1-.5-.5v-1z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../studyProgram/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Studiengänge">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M4 2.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1ZM4 5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1ZM7.5 5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Zm2.5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1ZM4.5 8a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Zm2.5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Z" />
<path
d="M2 1a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V1Zm11 0H3v14h3v-2.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5V15h3V1Z" />
</svg>
</a>
</li>
</ul>
</aside>
<section>
<h1 class="table-heading">
Dozenten
<span class="add-button" onclick="renderLecturerModal()">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" class="bi bi-plus"
viewBox="0 0 16 16">
<path
d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z" />
</svg>
</span>
</h1>
<div class="table-responsive">
<table class="table table-striped table-hover">
<thead>
<tr>
<th scope="col" id="id">#</th>
<th scope="col" id="lecturerFirstName">Vorname</th>
<th scope="col" id="lecturerLastName">Nachname</th>
<th scope="col" id="lecturerEmail">Email</th>
<th scope="col" id="studyProgram">Studiengang</th>
<th scope="col" class="text-center"></th>
</tr>
</thead>
<tbody id="lecturersTable"></tbody>
</table>
</div>
</section>
</main>
<footer>
Copyright &copy; 2022 Ali Fistik, Jonas Braus, Simon Schmieder
</footer>
<!-- Scripts -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3"
crossorigin="anonymous"></script>
<script>
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
</script>
<script src="../assets/js/logicHandler.js"></script>
<script src="../assets/js/lecturers/lecturerModalHandler.js"></script>
<script src="../assets/js/lecturers/lecturerLogicHandler.js"></script>
<script src="../assets/js/lecturers/lecturerTableHandler.js"></script>
<script src="../assets/js/dummyDataHandler.js"></script>
</body>
</html>
+201
View File
@@ -0,0 +1,201 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="author" content="Ali Fistik, Jonas Braus, Simon Schmieder">
<meta name="description" content="FrontEnd des UniPlanners">
<title>UniPlanner</title>
<link rel="icon" href="../assets/img/favicon.svg">
<!-- Styles -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.2/font/bootstrap-icons.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="../assets/css/styles.css">
</head>
<body>
<header>
<nav class="navbar navbar-dark bg-primary navbar-expand-lg fixed-top">
<div class="container">
<a class="navbar-brand" href="../index.html#home">
<img class="navlogo" src="../assets/img/uniplanner.png" height="36">
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse navbar-dark" id="navbarNav">
<ul class="navbar-nav ms-auto nav-item-custom">
<li class="nav-item">
<a class="nav-link" href="../index.html">Home</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active" href="" role="button"
data-bs-toggle="dropdown">Verwaltung</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item active" href="../lectures/index.html">Vorlesungen</a></li>
<li><a class="dropdown-item" href="../semesters/index.html">Semester</a>
</li>
<li><a class="dropdown-item" href="../lecturers/index.html">Dozenten</a>
</li>
<li><a class="dropdown-item" href="../lectureDates/index.html">Termine</a></li>
<li><a class="dropdown-item" href="../studyClasses/index.html">Jahrgänge</a></li>
<li><a class="dropdown-item" href="../studyProgram/index.html">Studiengänge</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="../index.html#ueber-uns">Über uns</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../index.html#funktionen">Funktionen</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../index.html#impressum">Impressum</a>
</li>
<li class="nav-item dash-item">
<a class="nav-link" href="../dashboard/index.html">
Dashboard
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M8 2a.5.5 0 0 1 .5.5V4a.5.5 0 0 1-1 0V2.5A.5.5 0 0 1 8 2zM3.732 3.732a.5.5 0 0 1 .707 0l.915.914a.5.5 0 1 1-.708.708l-.914-.915a.5.5 0 0 1 0-.707zM2 8a.5.5 0 0 1 .5-.5h1.586a.5.5 0 0 1 0 1H2.5A.5.5 0 0 1 2 8zm9.5 0a.5.5 0 0 1 .5-.5h1.5a.5.5 0 0 1 0 1H12a.5.5 0 0 1-.5-.5zm.754-4.246a.389.389 0 0 0-.527-.02L7.547 7.31A.91.91 0 1 0 8.85 8.569l3.434-4.297a.389.389 0 0 0-.029-.518z" />
<path fill-rule="evenodd"
d="M6.664 15.889A8 8 0 1 1 9.336.11a8 8 0 0 1-2.672 15.78zm-4.665-4.283A11.945 11.945 0 0 1 8 10c2.186 0 4.236.585 6.001 1.606a7 7 0 1 0-12.002 0z" />
</svg>
</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<main class="content container">
<aside class="sidebar">
<ul class="nav navbar-dark">
<li class="nav-item">
<a href="../lectures/index.html" class="nav-link active" data-bs-toggle="tooltip"
data-bs-placement="right" data-bs-title="Vorlesungen">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M6 1h6v7a.5.5 0 0 1-.757.429L9 7.083 6.757 8.43A.5.5 0 0 1 6 8V1z" />
<path
d="M3 0h10a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2v-1h1v1a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v1H1V2a2 2 0 0 1 2-2z" />
<path
d="M1 5v-.5a.5.5 0 0 1 1 0V5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0V8h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0v.5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../semesters/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Semester">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M11 2a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v12h.5a.5.5 0 0 1 0 1H.5a.5.5 0 0 1 0-1H1v-3a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v3h1V7a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v7h1V2zm1 12h2V2h-2v12zm-3 0V7H7v7h2zm-5 0v-3H2v3h2z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../lecturers/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Dozenten">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path d="M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1H3Zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../lectureDates/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Termine">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M14 0H2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM1 3.857C1 3.384 1.448 3 2 3h12c.552 0 1 .384 1 .857v10.286c0 .473-.448.857-1 .857H2c-.552 0-1-.384-1-.857V3.857z" />
<path
d="M6.5 7a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../studyClasses/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Jahrgänge">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M.5 0a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-1 0V.5A.5.5 0 0 1 .5 0zM2 1.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-4a.5.5 0 0 1-.5-.5v-1zm2 4a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-7a.5.5 0 0 1-.5-.5v-1zm2 4a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-6a.5.5 0 0 1-.5-.5v-1zm2 4a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-7a.5.5 0 0 1-.5-.5v-1z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../studyProgram/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Studiengänge">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M4 2.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1ZM4 5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1ZM7.5 5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Zm2.5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1ZM4.5 8a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Zm2.5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Z" />
<path
d="M2 1a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V1Zm11 0H3v14h3v-2.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5V15h3V1Z" />
</svg>
</a>
</li>
</ul>
</aside>
<section>
<h1 class="table-heading">
Vorlesungen
<span class="add-button" onclick="renderLectureModal()">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" class="bi bi-plus"
viewBox="0 0 16 16">
<path
d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z" />
</svg>
</span>
</h1>
<div class="table-responsive">
<table class="table table-striped table-hover">
<thead>
<tr>
<th scope="col" id="id">#</th>
<th scope="col" id="lectureName">Name</th>
<th scope="col" class="responsive-column" id="moduleName">Modul</th>
<th scope="col" class="responsive-column" id="duration">Dauer</th>
<th scope="col" class="responsive-column" id="lectureDates">Termine</th>
<th scope="col" class="responsive-column" id="lecturers">Dozenten</th>
<th scope="col" id="studyClass">Jahrgang</th>
<th scope="col" class="text-center"></th>
</tr>
</thead>
<tbody id="lecturesTable"></tbody>
</table>
</div>
</section>
</main>
<footer>
Copyright &copy; 2022 Ali Fistik, Jonas Braus, Simon Schmieder
</footer>
<!-- Scripts -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3"
crossorigin="anonymous"></script>
<script>
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
</script>
<script src="../assets/js/logicHandler.js"></script>
<script src="../assets/js/lectures/lectureModalHandler.js"></script>
<script src="../assets/js/lectures/lectureLogicHandler.js"></script>
<script src="../assets/js/lectures/lectureTableHandler.js"></script>
<script src="../assets/js/dummyDataHandler.js"></script>
</body>
</html>
+94
View File
@@ -0,0 +1,94 @@
# UniPlanner
## Inhaltsverzeichnis
1. Projektbeschreibung
2. Projektarchitektur
1. Technologien
2. Anforderungen
3. Farbschema
4. Anleitung zum starten
## Projektbeschreibung
Der UniPlanner ist eine WebAnwendung, mit der
- Vorlesungen
- Semester
- Dozenten
- Termine
- Jahrgänge
- Studiengänge
verwaltet werden können.
Die Webseite ist dabei aufgeteilt in eine statische Hauptseite und einen Verwaltungsbereich mit Dashboard.
Die Hauptseite mit Carousel enthält einige Informationen über uns und die Anwendung sowie ein Impressum.
Im Verwaltungsbereich befinden sich Unterseiten, die per Dropdown oder per Sidebar erreicht werden können.
Auf jeder dieser Unterseiten kann ein "Datentyp" verwaltet werden (Einsehen, Erstellen, Editieren und Löschen).
Die einzelnen Datentypen verweisen dabei teilweise auf andere Datentypen, wodurch eine Reihenfolge der Eingaben vorgegeben ist.
Um Elemente zu erstellen müssen stets alle Felder ausgefüllt werden.
Über das Dashboard können mithilfe eines Dropdown-Menüs Dozenten einzeln gewählt und angezeigt werden. Hierbei werden Vorlesungen mit Jahrgang und dem ersten Vorlesungstermin angezeigt, außerdem sind einige Informationen über den Dozenten einsehbar.
## Projektarchitektur
Das Projekt ist in 2 Teile zu unterteilen.
Im Hauptordner befinden sich die einzelnen HTML Dateien, die über eine Ordnerstruktur den Webseitenaufbau abbilden.
Im Assets-Ordner befinden sich alle JavaScript und CSS Dateien, welche in den einzelnen HTML Dateien importiert werden.
### Technologien
#### HTML
HTML ist eine Markdownsprache, mit der die Struktur von Webseiten beschrieben werden kann.
Wir haben unsere Webseite mit HTML5 aufgebaut und in Bereiche wie <code>header</code>, <code>main</code> und <code>footer</code> aufgeteilt.
#### CSS
CSS ist eine Sprache, mit der HTML Elemente gestyled werden können.
In der Datei assets/styles.css befinden sich alle unsere Styledefinitionen (Bootstrap ausgenommen).
Wir haben CSS3 verwendet, um eigene Styles zu definieren und bestehende HTML sowie Bootstrap Styles zu überschreiben.
#### JavaScript
JavaScript (JS) ist eine Scriptsprache, mit der Webseiten interaktiv aufgebaut werden können.
Wir haben auf unserer Webseite JavaScript verwendet, um Daten im Lokalen Speicher des Browsers abzulegen, HTML Code für Popups und Tabellen zu generieren und styles von HTML Elementen anzupassen (...).
Unsere JS Dateien verweisen dabei nicht aufeinander, können jedoch Elemente aus anderen Dateien verwenden, da wir sie in einer speziellen Reihenfolge in den HTML Code importiert haben. Die Hauptkomponente stellt hierbei der LogicHandler (assets/logicHandler.js) dar, welcher sich mit der Speicher und Ladelogik sowie einigen weiteren oft verwendeten Operationen befasst.
Für jeden Datentyp haben wir außerdem einen TableHandler und einen ModalHandler erstellt, welche sich um das generieren von Tabellen und Modals (Popups) mit den jeweiligen Werten kümmern. Diese beiden Handler haben wir dann über einen Datentyp spezifischen LogicHandler mit der Hauptlogik verknüpft.
Das Dashboard hat ebenfalls einen gesonderten LogicHandler, welcher sich mit der Ladelogik der Dozenten in der Dashboard Ansicht befasst.
### Anforderungen
Für unser Projekt wird eine stabile Internetanbindung benötigt, da wir Bootstrap v5.2 per URL (CDN) importiert haben.
Bootstrap ist eine Bibliothek, die Styles, Icons und JavaScript in eine Webseite einbinden kann, um das erstellen von vorgefertigten Komponenten zu ermöglichen.
Im Rahmen unserer Projektarbeit haben wir manche der Standardwerte von Bootstrap überschrieben.
## Farbschema
Als Farben haben wir uns für ein kräftiges Rot in Kombination mit einem Grauton entschieden.
In der Farbtheorie wird Rot oft mit Wut und Agressionen, jedoch auch mit Liebe und Harmonie verbunden. Da wir diese Kombination aus Gefühlen als eine recht passende Beschreibung eines Studiums angesehen haben, haben wir die Farbe #e2001a als Primärfarbe gewählt.
Da die Kombination aus Rot und Grau aus unserer Sicht professionell wirkt und außerdem die Farbkombination der DHBW wiederspiegelt haben wir als Sekundäre Farbe #5c6971 gewählt.
Als Hintergrundfarbe haben wir zudem nicht ein klares Weiß gewählt, sondern einen sehr hellen grauton.
Durch diese Entscheidung konnten wir einzelne Komponenten der Webseite besser hervorheben und unsere Augen schonen.
## Anleitung zum starten
Um unsere Webseite zu testen kann die Datei index.html im Hauptverzeichnis im Browser geöffnert werden.
Unsere Webseite ist alternativ auch über [uniplanner.de](https://uniplanner.de) erreichbar <small>(Stand 12.12.2022)</small>
Auf der Webseite befindet sich im Bereich Funktionen folgende Kurzanleitung, die veranschaulicht, in welcher Reihenfolge das erstellen von Daten möglich ist.
- Über das Dropdownmenü "Verwaltung", gelangen Sie zu den jeweiligen Seiten für die Datenerfassung
- Zu Beginn können Sie einen Studiengang, sowie einen oder mehrere Termine, bestehend aus einem Start- und Enddatum, so wie der jeweiligen Uhrzeit, anlegen
- Haben Sie das getan, ist es Ihnen bereits möglich Semester und Dozenten mit allen erforderlichen Daten einzutragen
- Navigieren Sie nun in den Bereich Jahrgänge und tragen Sie die jeweiligen Daten ein
- Nun haben Sie alle nötigen Daten um Einträge zu Vorlesungen zu erstellen
- Nachdem Sie alle Daten ins System eingetragen haben, können Sie über das Dashboard einen Dozenten auswählen, um dessen Kontaktdaten, Vorlesungen und einige weiteren Daten anzusehen
Knöpfe zum erstellen von Daten sind immer durch ein <code>+</code>-Symbol erkennbar
Knöpfe zum editieren von Daten sind immer durch ein Stift-Symbol erkennbar
Knöpfe zum löschen von Daten sind immer durch ein Mülleimer-Symbol erkennbar
Um die manuelle Datenerstellung zu überspringen und die Webseite mit Testdaten zu füllen, kann jedoch auch in der Konsole der JS Befehl <code>loadDummyData()</code> ausgeführt werden.
+197
View File
@@ -0,0 +1,197 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="author" content="Ali Fistik, Jonas Braus, Simon Schmieder">
<meta name="description" content="FrontEnd des UniPlanners">
<title>UniPlanner</title>
<link rel="icon" href="../assets/img/favicon.svg">
<!-- Styles -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.2/font/bootstrap-icons.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="../assets/css/styles.css">
</head>
<body>
<header>
<nav class="navbar navbar-dark bg-primary navbar-expand-lg fixed-top">
<div class="container">
<a class="navbar-brand" href="../index.html#home">
<img class="navlogo" src="../assets/img/uniplanner.png" height="36">
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse navbar-dark" id="navbarNav">
<ul class="navbar-nav ms-auto nav-item-custom">
<li class="nav-item">
<a class="nav-link" href="../index.html">Home</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active" href="" role="button"
data-bs-toggle="dropdown">Verwaltung</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="../lectures/index.html">Vorlesungen</a></li>
<li><a class="dropdown-item active" href="../semesters/index.html">Semester</a></li>
<li><a class="dropdown-item" href="../lecturers/index.html">Dozenten</a></li>
<li><a class="dropdown-item" href="../lectureDates/index.html">Termine</a></li>
<li><a class="dropdown-item" href="../studyClasses/index.html">Jahrgänge</a></li>
<li><a class="dropdown-item" href="../studyProgram/index.html">Studiengänge</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="../index.html#ueber-uns">Über uns</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../index.html#funktionen">Funktionen</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../index.html#impressum">Impressum</a>
</li>
<li class="nav-item dash-item">
<a class="nav-link" href="../dashboard/index.html">
Dashboard
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M8 2a.5.5 0 0 1 .5.5V4a.5.5 0 0 1-1 0V2.5A.5.5 0 0 1 8 2zM3.732 3.732a.5.5 0 0 1 .707 0l.915.914a.5.5 0 1 1-.708.708l-.914-.915a.5.5 0 0 1 0-.707zM2 8a.5.5 0 0 1 .5-.5h1.586a.5.5 0 0 1 0 1H2.5A.5.5 0 0 1 2 8zm9.5 0a.5.5 0 0 1 .5-.5h1.5a.5.5 0 0 1 0 1H12a.5.5 0 0 1-.5-.5zm.754-4.246a.389.389 0 0 0-.527-.02L7.547 7.31A.91.91 0 1 0 8.85 8.569l3.434-4.297a.389.389 0 0 0-.029-.518z" />
<path fill-rule="evenodd"
d="M6.664 15.889A8 8 0 1 1 9.336.11a8 8 0 0 1-2.672 15.78zm-4.665-4.283A11.945 11.945 0 0 1 8 10c2.186 0 4.236.585 6.001 1.606a7 7 0 1 0-12.002 0z" />
</svg>
</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<main class="content container">
<aside class="sidebar">
<ul class="nav navbar-dark">
<li class="nav-item">
<a href="../lectures/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Vorlesungen">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M6 1h6v7a.5.5 0 0 1-.757.429L9 7.083 6.757 8.43A.5.5 0 0 1 6 8V1z" />
<path
d="M3 0h10a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2v-1h1v1a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v1H1V2a2 2 0 0 1 2-2z" />
<path
d="M1 5v-.5a.5.5 0 0 1 1 0V5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0V8h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0v.5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../semesters/index.html" class="nav-link active" data-bs-toggle="tooltip"
data-bs-placement="right" data-bs-title="Semester">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M11 2a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v12h.5a.5.5 0 0 1 0 1H.5a.5.5 0 0 1 0-1H1v-3a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v3h1V7a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v7h1V2zm1 12h2V2h-2v12zm-3 0V7H7v7h2zm-5 0v-3H2v3h2z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../lecturers/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Dozenten">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path d="M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1H3Zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../lectureDates/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Termine">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M14 0H2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM1 3.857C1 3.384 1.448 3 2 3h12c.552 0 1 .384 1 .857v10.286c0 .473-.448.857-1 .857H2c-.552 0-1-.384-1-.857V3.857z" />
<path
d="M6.5 7a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../studyClasses/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Jahrgänge">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M.5 0a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-1 0V.5A.5.5 0 0 1 .5 0zM2 1.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-4a.5.5 0 0 1-.5-.5v-1zm2 4a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-7a.5.5 0 0 1-.5-.5v-1zm2 4a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-6a.5.5 0 0 1-.5-.5v-1zm2 4a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-7a.5.5 0 0 1-.5-.5v-1z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../studyProgram/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Studiengänge">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M4 2.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1ZM4 5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1ZM7.5 5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Zm2.5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1ZM4.5 8a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Zm2.5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Z" />
<path
d="M2 1a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V1Zm11 0H3v14h3v-2.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5V15h3V1Z" />
</svg>
</a>
</li>
</ul>
</aside>
<section>
<h1 class="table-heading">
Semester
<span class="add-button" onclick="renderSemesterModal()">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" class="bi bi-plus"
viewBox="0 0 16 16">
<path
d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z" />
</svg>
</span>
</h1>
<div class="table-responsive">
<table class="table table-striped table-hover">
<thead>
<tr>
<th scope=" col" id="id">#</th>
<th scope="col" id="semesterName">Name</th>
<th scope="col" id="semesterStartDate">Start</th>
<th scope="col" id="semesterEndDate">Ende</th>
<th scope="col" id="semesterNumber">Nummer</th>
<th scope="col" id="semesterStudyProgram">Studiengang</th>
<th scope="col" class="text-center"></th>
</tr>
</thead>
<tbody id="semestersTable"></tbody>
</table>
</div>
</section>
</main>
<footer>
Copyright &copy; 2022 Ali Fistik, Jonas Braus, Simon Schmieder
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3"
crossorigin="anonymous"></script>
<script>
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
</script>
<script src="../assets/js/logicHandler.js"></script>
<script src="../assets/js/semesters/semesterModalHandler.js"></script>
<script src="../assets/js/semesters/semesterLogicHandler.js"></script>
<script src="../assets/js/semesters/semesterTableHandler.js"></script>
<script src="../assets/js/dummyDataHandler.js"></script>
</body>
</html>
+197
View File
@@ -0,0 +1,197 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="author" content="Ali Fistik, Jonas Braus, Simon Schmieder">
<meta name="description" content="FrontEnd des UniPlanners">
<title>UniPlanner</title>
<link rel="icon" href="../assets/img/favicon.svg">
<!-- Styles -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.2/font/bootstrap-icons.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="../assets/css/styles.css">
</head>
<body>
<header>
<nav class="navbar navbar-dark bg-primary navbar-expand-lg fixed-top">
<div class="container">
<a class="navbar-brand" href="../index.html#home">
<img class="navlogo" src="../assets/img/uniplanner.png" height="36">
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse navbar-dark" id="navbarNav">
<ul class="navbar-nav ms-auto nav-item-custom">
<li class="nav-item">
<a class="nav-link" href="../index.html">Home</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active" href="" role="button"
data-bs-toggle="dropdown">Verwaltung</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="../lectures/index.html">Vorlesungen</a></li>
<li><a class="dropdown-item" href="../semesters/index.html">Semester</a></li>
<li><a class="dropdown-item" href="../lecturers/index.html">Dozenten</a></li>
<li><a class="dropdown-item" href="../lectureDates/index.html">Termine</a></li>
<li><a class="dropdown-item active" href="../studyClasses/index.html">Jahrgänge</a></li>
<li><a class="dropdown-item" href="../studyProgram/index.html">Studiengänge</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="../index.html#ueber-uns">Über uns</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../index.html#funktionen">Funktionen</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../index.html#impressum">Impressum</a>
</li>
<li class="nav-item dash-item">
<a class="nav-link" href="../dashboard/index.html">
Dashboard
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M8 2a.5.5 0 0 1 .5.5V4a.5.5 0 0 1-1 0V2.5A.5.5 0 0 1 8 2zM3.732 3.732a.5.5 0 0 1 .707 0l.915.914a.5.5 0 1 1-.708.708l-.914-.915a.5.5 0 0 1 0-.707zM2 8a.5.5 0 0 1 .5-.5h1.586a.5.5 0 0 1 0 1H2.5A.5.5 0 0 1 2 8zm9.5 0a.5.5 0 0 1 .5-.5h1.5a.5.5 0 0 1 0 1H12a.5.5 0 0 1-.5-.5zm.754-4.246a.389.389 0 0 0-.527-.02L7.547 7.31A.91.91 0 1 0 8.85 8.569l3.434-4.297a.389.389 0 0 0-.029-.518z" />
<path fill-rule="evenodd"
d="M6.664 15.889A8 8 0 1 1 9.336.11a8 8 0 0 1-2.672 15.78zm-4.665-4.283A11.945 11.945 0 0 1 8 10c2.186 0 4.236.585 6.001 1.606a7 7 0 1 0-12.002 0z" />
</svg>
</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<main class="content container">
<aside class="sidebar">
<ul class="nav navbar-dark">
<li class="nav-item">
<a href="../lectures/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Vorlesungen">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M6 1h6v7a.5.5 0 0 1-.757.429L9 7.083 6.757 8.43A.5.5 0 0 1 6 8V1z" />
<path
d="M3 0h10a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2v-1h1v1a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v1H1V2a2 2 0 0 1 2-2z" />
<path
d="M1 5v-.5a.5.5 0 0 1 1 0V5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0V8h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0v.5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../semesters/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Semester">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M11 2a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v12h.5a.5.5 0 0 1 0 1H.5a.5.5 0 0 1 0-1H1v-3a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v3h1V7a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v7h1V2zm1 12h2V2h-2v12zm-3 0V7H7v7h2zm-5 0v-3H2v3h2z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../lecturers/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Dozenten">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path d="M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1H3Zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../lectureDates/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Termine">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M14 0H2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM1 3.857C1 3.384 1.448 3 2 3h12c.552 0 1 .384 1 .857v10.286c0 .473-.448.857-1 .857H2c-.552 0-1-.384-1-.857V3.857z" />
<path
d="M6.5 7a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../studyClasses/index.html" class="nav-link active" data-bs-toggle="tooltip"
data-bs-placement="right" data-bs-title="Jahrgänge">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M.5 0a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-1 0V.5A.5.5 0 0 1 .5 0zM2 1.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-4a.5.5 0 0 1-.5-.5v-1zm2 4a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-7a.5.5 0 0 1-.5-.5v-1zm2 4a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-6a.5.5 0 0 1-.5-.5v-1zm2 4a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-7a.5.5 0 0 1-.5-.5v-1z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../studyProgram/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Studiengänge">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M4 2.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1ZM4 5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1ZM7.5 5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Zm2.5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1ZM4.5 8a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Zm2.5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Z" />
<path
d="M2 1a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V1Zm11 0H3v14h3v-2.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5V15h3V1Z" />
</svg>
</a>
</li>
</ul>
</aside>
<section>
<h1 class="table-heading">
Jahrgänge
<span class="add-button" onclick="renderStudyClassModal()">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" class="bi bi-plus"
viewBox="0 0 16 16">
<path
d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z" />
</svg>
</span>
</h1>
<div class="table-responsive">
<table class="table table-striped table-hover">
<thead>
<tr>
<th scope=" col" id="id">#</th>
<th scope="col" id="studyClassName">Name</th>
<th scope="col" id="studyClassStartDate">Start</th>
<th scope="col" id="studyClassEndDate">Ende</th>
<th scope="col" id="semester">Semester</th>
<th scope="col" id="studyProgram">Studiengang</th>
<th scope="col" class="text-center"></th>
</tr>
</thead>
<tbody id="studyClassTable"></tbody>
</table>
</div>
</section>
</main>
<footer>
Copyright &copy; 2022 Ali Fistik, Jonas Braus, Simon Schmieder
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3"
crossorigin="anonymous"></script>
<script>
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
</script>
<script src="../assets/js/logicHandler.js"></script>
<script src="../assets/js/studyClasses/studyClassModalHandler.js"></script>
<script src="../assets/js/studyClasses/studyClassLogicHandler.js"></script>
<script src="../assets/js/studyClasses/studyClassTableHandler.js"></script>
<script src="../assets/js/dummyDataHandler.js"></script>
</body>
</html>
+194
View File
@@ -0,0 +1,194 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="author" content="Ali Fistik, Jonas Braus, Simon Schmieder">
<meta name="description" content="FrontEnd des UniPlanners">
<title>UniPlanner</title>
<link rel="icon" href="../assets/img/favicon.svg">
<!-- Styles -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.2/font/bootstrap-icons.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="../assets/css/styles.css">
</head>
<body>
<header>
<nav class="navbar navbar-dark bg-primary navbar-expand-lg fixed-top">
<div class="container">
<a class="navbar-brand" href="../index.html#home">
<img class="navlogo" src="../assets/img/uniplanner.png" height="36">
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse navbar-dark" id="navbarNav">
<ul class="navbar-nav ms-auto nav-item-custom">
<li class="nav-item">
<a class="nav-link" href="../index.html">Home</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active" href="" role="button"
data-bs-toggle="dropdown">Verwaltung</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="../lectures/index.html">Vorlesungen</a></li>
<li><a class="dropdown-item" href="../semesters/index.html">Semester</a></li>
<li><a class="dropdown-item" href="../lecturers/index.html">Dozenten</a></li>
<li><a class="dropdown-item" href="../lectureDates/index.html">Termine</a></li>
<li><a class="dropdown-item" href="../studyClasses/index.html">Jahrgänge</a></li>
<li><a class="dropdown-item active" href="../studyProgram/index.html">Studiengänge</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="../index.html#ueber-uns">Über uns</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../index.html#funktionen">Funktionen</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../index.html#impressum">Impressum</a>
</li>
<li class="nav-item dash-item">
<a class="nav-link" href="../dashboard/index.html">
Dashboard
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M8 2a.5.5 0 0 1 .5.5V4a.5.5 0 0 1-1 0V2.5A.5.5 0 0 1 8 2zM3.732 3.732a.5.5 0 0 1 .707 0l.915.914a.5.5 0 1 1-.708.708l-.914-.915a.5.5 0 0 1 0-.707zM2 8a.5.5 0 0 1 .5-.5h1.586a.5.5 0 0 1 0 1H2.5A.5.5 0 0 1 2 8zm9.5 0a.5.5 0 0 1 .5-.5h1.5a.5.5 0 0 1 0 1H12a.5.5 0 0 1-.5-.5zm.754-4.246a.389.389 0 0 0-.527-.02L7.547 7.31A.91.91 0 1 0 8.85 8.569l3.434-4.297a.389.389 0 0 0-.029-.518z" />
<path fill-rule="evenodd"
d="M6.664 15.889A8 8 0 1 1 9.336.11a8 8 0 0 1-2.672 15.78zm-4.665-4.283A11.945 11.945 0 0 1 8 10c2.186 0 4.236.585 6.001 1.606a7 7 0 1 0-12.002 0z" />
</svg>
</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<main class="content container">
<aside class="sidebar">
<ul class="nav navbar-dark">
<li class="nav-item">
<a href="../lectures/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Vorlesungen">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M6 1h6v7a.5.5 0 0 1-.757.429L9 7.083 6.757 8.43A.5.5 0 0 1 6 8V1z" />
<path
d="M3 0h10a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2v-1h1v1a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v1H1V2a2 2 0 0 1 2-2z" />
<path
d="M1 5v-.5a.5.5 0 0 1 1 0V5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0V8h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0v.5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../semesters/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Semester">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M11 2a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v12h.5a.5.5 0 0 1 0 1H.5a.5.5 0 0 1 0-1H1v-3a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v3h1V7a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v7h1V2zm1 12h2V2h-2v12zm-3 0V7H7v7h2zm-5 0v-3H2v3h2z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../lecturers/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Dozenten">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path d="M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1H3Zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../lectureDates/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Termine">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M14 0H2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM1 3.857C1 3.384 1.448 3 2 3h12c.552 0 1 .384 1 .857v10.286c0 .473-.448.857-1 .857H2c-.552 0-1-.384-1-.857V3.857z" />
<path
d="M6.5 7a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../studyClasses/index.html" class="nav-link" data-bs-toggle="tooltip" data-bs-placement="right"
data-bs-title="Jahrgänge">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M.5 0a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-1 0V.5A.5.5 0 0 1 .5 0zM2 1.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-4a.5.5 0 0 1-.5-.5v-1zm2 4a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-7a.5.5 0 0 1-.5-.5v-1zm2 4a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-6a.5.5 0 0 1-.5-.5v-1zm2 4a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-7a.5.5 0 0 1-.5-.5v-1z" />
</svg>
</a>
</li>
<li class="nav-item">
<a href="../studyProgram/index.html" class="nav-link active" data-bs-toggle="tooltip"
data-bs-placement="right" data-bs-title="Studiengänge">
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor"
viewBox="0 0 16 16">
<path
d="M4 2.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1ZM4 5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1ZM7.5 5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Zm2.5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1ZM4.5 8a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Zm2.5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Z" />
<path
d="M2 1a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V1Zm11 0H3v14h3v-2.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5V15h3V1Z" />
</svg>
</a>
</li>
</ul>
</aside>
<section>
<h1 class="table-heading">
Studiengang
<span class="add-button" onclick="renderStudyProgramModal()">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" class="bi bi-plus"
viewBox="0 0 16 16">
<path
d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z" />
</svg>
</span>
</h1>
<div class="table-responsive">
<table class="table table-striped table-hover">
<thead>
<tr>
<th scope=" col" id="id">#</th>
<th scope="col" id="studyProgramName">Name</th>
<th scope="col" id="studyProgramShort">Kürzel</th>
<th scope="col" class="text-center"></th>
</tr>
</thead>
<tbody id="studyProgramTable"></tbody>
</table>
</div>
</section>
</main>
<footer>
Copyright &copy; 2022 Ali Fistik, Jonas Braus, Simon Schmieder
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3"
crossorigin="anonymous"></script>
<script>
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
</script>
<script src="../assets/js/logicHandler.js"></script>
<script src="../assets/js/studyProgram/studyProgramModalHandler.js"></script>
<script src="../assets/js/studyProgram/studyProgramLogicHandler.js"></script>
<script src="../assets/js/studyProgram/studyProgramTableHandler.js"></script>
<script src="../assets/js/dummyDataHandler.js"></script>
</body>
</html>