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
@@ -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`
})
}
})