Files
BeWoPlaner/BeWoPlanerMobil/Views/Shared/_Layout.cshtml
2025-07-25 18:37:07 +02:00

849 lines
34 KiB
Plaintext

@using BeWoPlanerMobil.Controllers
@using BeWoPlanerMobil.Models
@using BeWoPlanerMobil.Service
@using BeWoPlanerMobil.Util
<!DOCTYPE html>
<html>
<head>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=0" id="viewport" />
<title>@ViewBag.Title</title>
<script defer src="~/Content/fontawesome/all.min.js"></script>
@*
Einbindereihenfolge der Skripte für Bootstrap:
1. jQuery
2. Popper
3. Bootstrap
Oder
1. jQuery
2. Bootstrap-Bundle
*@
<script type="text/javascript" src="@Scripts.Url("~/Scripts/jquery/jquery-3.7.1.min.js")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/jquery/jquery.validate.min.js")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/jquery/jquery.unobtrusive-ajax.min.js")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/knockout-3.5.1.js")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/bootstrap/bootstrap.bundle.min.js")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/cldr/cldr.min.js")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/cldr/event.min.js")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/cldr/supplemental.min.js")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/globalize/globalize.min.js")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/globalize/number.min.js")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/globalize/currency.min.js")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/globalize/date.min.js")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/globalize/message.min.js")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/ace/ace.min.js")"></script>
<link type="text/css" rel="stylesheet" href="@Url.Content("~/Content/style.css")" />
<link type="text/css" rel="stylesheet" href="@Url.Content("~/Content/tempusdominus-bootstrap-4.min.css")" />
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/dateUtils.js?v=1.3")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/moment/moment.min.js")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/moment/locale/de.js")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/tempusdominus-boostrap-4.min.js")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/mobileUtils.js?v=1.3")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/view-scripts/main.js?v=1.5")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/signature.js?v=1.3")"></script>
<link type="text/css" rel="stylesheet" href="@Url.Content("~/Scripts/bootstrap/bootstrap4-modal-fullscreen.min.css")" />
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/support-concept-statistics.js?v=1.3")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/view-scripts/customer.js?v=1.3")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/view-scripts/scheduler.js?v=1.3")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/ownSoft-Scripts/view-scripts/report.js?v=1.3")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/signature-pad.min.js")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/trimCanvas.js?v=1.3")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/resources-list-utils.js?v=1.3")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/list-utils.js?v=1.3")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/service-record-time-calc.js?v=1.41")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/js-helper.js?v=1.3")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/logging.js?v=1.3")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/MoKPasswordSecurity.js?v=1.3")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/bs-custom-file-input.min.js")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/dropdown-search.js?v=1.3")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/devextreme/dx.all.js")"></script>
<link type="text/css" rel="stylesheet" href="@Url.Content("~/Content/dx.common.css")" />
<link type="text/css" rel="stylesheet" href="@Url.Content("~/Content/dx.light.css")" />
@Html.DevExpress().GetStyleSheets(
ASPxWebClientUIControl.ColorSchemeLight,
new StyleSheet { ExtensionSuite = ExtensionSuite.NavigationAndLayout, Theme = "Default" },
new StyleSheet { ExtensionSuite = ExtensionSuite.Report },
new StyleSheet { ExtensionType = ExtensionType.WebDocumentViewer }
)
@Html.DevExpress().GetScripts(
new Script { ExtensionSuite = ExtensionSuite.NavigationAndLayout },
new Script { ExtensionSuite = ExtensionSuite.Icons },
new Script { ExtensionType = ExtensionType.WebDocumentViewer }
)
<style type="text/css">
input::-webkit-date-and-time-value {
text-align: left;
}
</style>
<script type="text/javascript">
class LocalBeWoStorage {
id;
inputList;
constructor(id, inputList) {
this.id = id;
this.inputList = inputList;
}
clearInputList() {
if(this.inputList === null || this.inputList === undefined) {
this.inputList = [];
}
this.inputList.length = 0;
localStorage.setItem(this.id, JSON.stringify(this));
}
removeItemById(id) {
const newInputList = [];
for(let i = 0; i < this.inputList.length; i++) {
const input = this.inputList[i];
if(input.inputId !== id) {
newInputList.push(input);
}
}
this.inputList = newInputList;
localStorage.setItem(this.id, JSON.stringify(this));
}
removeItemByName(name) {
const newInputList = [];
for(let i = 0; i < this.inputList.length; i++) {
const input = this.inputList[i];
if(input.inputName !== name) {
newInputList.push(input);
}
}
this.inputList = newInputList;
localStorage.setItem(this.id, JSON.stringify(this));
}
addInputValue(inputId, inputName, inputType, inputValue, timeStamp) {
if(inputType === "radio") {
this.removeItemByName(inputName);
}
const obj = {
inputId: inputId,
inputName: inputName,
inputType: inputType,
inputValue: inputValue,
timeStamp: timeStamp
};
this.removeItemById(inputId);
this.inputList.push(obj);
localStorage.setItem(this.id, JSON.stringify(this));
}
getItemById(id) {
const item = this.inputList.find((element) => element.inputId === id);
logInfo3(`Element: ${id}; Wert: ${item.inputValue}; Typ: ${item.inputType}`);
return item;
}
getItemsByName(name) {
const result = [];
this.inputList.map((item) => {
if (item.inputName === name) {
result.push(item);
}
});
return result;
}
}
function saveCollapsibleState(id, url) {
const isShown = $(`#${id}`).hasClass("show");
$.get(url, { isOpen: isShown, identifier: id });
}
window.addEventListener("error", (event) => {
hideSpinner();
if(event.message === "Uncaught TypeError: this._contentReadyAction is not a function") {
logInfo("contentReadyAction-Fehler ist aufgetregen. Kann ignoriert werden.");
return;
}
if(event.message.includes("E0024 - DevExtreme bundle already included.")) {
logInfo("Fehler E0024. Kann ignoriert werden. Ist ein webKit-Bug.");
return;
}
if(event.message === "SyntaxError: Can't create duplicate variable: 'MoKPasswordSecurity'") {
logInfo("SyntaxError: Can't create duplicate variable: 'MoKPasswordSecurity'. Kann ignoriert werden. Ist ein webKit-Bug.");
return;
}
configureErrorPopup(`Message: ${event.message}\r\nFile name: ${event.filename}\r\nLine: ${event.lineno}\r\nColumn: ${event.colno}\r\nStack: ${event.error.stack}`);
});
function showChangePasswordPopup() {
$("#password-changing-popup").modal("show");
calcChPwPrepend();
}
var initialPwPrependWidth = 0;
function calcChPwPrepend() {
try {
if(initialPwPrependWidth <= 0 && $.isNumeric(getMaxWidth("pw-prepend"))) {
initialPwPrependWidth = getMaxWidth("pw-prepend");
}
if(initialPwPrependWidth <= 0) {
return;
}
$(".pw-prepend").width(getMaxWidth("pw-prepend"));
} catch(error) {
showErrorPopup(error);
}
}
function copyErrorToClipboard() {
const element = document.querySelector("#fehlerdetail-textarea");
element.select();
element.setSelectionRange(0, 99999);
document.execCommand("copy");
}
function showErrorPopup(error, htmlMessage) {
hideSpinner();
configureErrorPopup(`name: ${error.name};\r\nmessage: ${error.message};\r\nstack: ${error.stack}`, htmlMessage);
}
function showErrorMessagePopup(text, htmlMessage) {
hideSpinner();
configureErrorPopup(text, htmlMessage);
}
function configureErrorPopup(textToShow, htmlMessage) {
$("#fehlerdetail-textarea").text(textToShow);
$("#error-message-popup").modal("show");
if(htmlMessage !== undefined && htmlMessage !== null && (typeof htmlMessage === 'string' || htmlMessage instanceof String) && htmlMessage.length > 0) {
$("#html-error-container").html(htmlMessage);
} else {
$("#html-error-container").empty();
}
}
$(document).ready(function() {
$.each($("canvas"), function(index, canvasElement) {
updateCanvasSize($(canvasElement));
});
$("textarea").each(function () {
const id = this.getAttribute("id");
if(id === "fehlerdetail-textarea") {
return;
}
this.setAttribute("style", `height:${this.scrollHeight}px;overflow-y:scroll;`);
}).on("input", function () {
this.style.height = 0;
this.style.height = (this.scrollHeight) + "px";
});
const timeoutInMilliseconds = parseInt("@AbstractBaseController.TimeoutLimit", 10) * 60 * 1000;
const timeOfLogin = "@AbstractModel.TimeOfLastAction";
if(timeOfLogin.length > 0) {
var countDownDate = new Date().getTime() + timeoutInMilliseconds;
var interval = setInterval(function() {
const now = new Date().getTime();
const distance = countDownDate - now;
if (distance <= 0) {
clearInterval(interval);
$("#countdown").html("00:00");
$("#logout-form").submit();
return;
}
const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
const seconds = Math.floor((distance % (1000 * 60)) / 1000);
var m = minutes.toString();
var s = seconds.toString();
if(minutes < 10) {
m = `0${m}`;
}
if(seconds < 10) {
s = `0${s}`;
}
const timePart = minutes <= 5 ? ` class="text-danger"` : "";
$("#countdown").html(`<span${timePart}>Abmeldung in ${m}:${s}<span class="fas fa-unlock-alt pl-1"></span></span>`);
}, 1000);
}
calcPrependWidth();
@{
var errorAlertMessage = TempData[TempDataConstants.ErrorAlertPopupMessage]?.ToString();
if(!string.IsNullOrWhiteSpace(errorAlertMessage))
{
<text>
$("#error-alert-popup").modal("show");
</text>
}
}
});
function toggleRestoreButton() {
const state = !window.getRestoreButtonState();
if($(".bewo-restore-btn").length > 0) {
$(".bewo-restore-btn").each(function(index, item) {
$(this).prop("disabled", state);
});
}
}
$(window).resize(function () {
$.each($("canvas"), function(index, canvasElement) {
updateCanvasSize($(canvasElement));
});
logSize();
calcPrependWidth();
});
previousWidth = "";
function logSize() {
const width = $(document).width();
const val = widthToBootstrapVal(width);
if(previousWidth !== val) {
console.log(`%c${val}`, "font-size: 16px; font-weight: bold; color: #00F2FF;");
}
window.previousWidth = val;
$("#dev-size-span").text(val);
}
function widthToBootstrapVal(width) {
/*
Extra small <576px
Small ≥576px
Medium ≥768px
Large ≥992px
Extra large ≥1200px
*/
let result = "xs";
if(width < 567) {
result = "xs";
}
if(width >= 576) {
result = "sm";
}
if(width >= 768) {
result = "md";
}
if(width >= 992) {
result = "lg";
}
if(width >= 1200) {
result = "xl";
}
return result;
}
function countdownClick() {
$("#countdown-tooltip").tooltip('show');
setTimeout(function() {
$("#countdown-tooltip").tooltip('hide');
}, 1500);
}
var initialVonWidth = 0;
function calcPrependWidth() {
@* Prepend der Datetimepicker-Prepends, die kleiner sind als die anderen *@
if(initialVonWidth === 0 && $.isNumeric(getMaxWidth("sm-prepend-input-group-text"))) {
initialVonWidth = getMaxWidth("sm-prepend-input-group-text");
}
const smallPrependInputGroupTextWidth = getMaxWidth("sm-prepend-input-group-text");
const documentWidth = $(document).width();
const prependInputGroupTextWidth = getMaxWidth("prepend-input-group-text");
$(".prepend-input-group-text").width(prependInputGroupTextWidth);
if(documentWidth < 768 && $.isNumeric(smallPrependInputGroupTextWidth)) {
$(".sm-prepend-input-group-text").width(prependInputGroupTextWidth);
} else if($.isNumeric(smallPrependInputGroupTextWidth)) {
$(".sm-prepend-input-group-text").width(initialVonWidth);
}
}
function getMaxWidth(elementClassName) {
return Math.max.apply(Math, $(`.${elementClassName}`).map(function() { return $(this).width(); }).get());
}
function getMaxElementHeight(elementClassName) {
return Math.max.apply(Math, $(`.${elementClassName}`).map(function () { return $(this).height(); }).get());
}
@* Eingabenwiederherstellung *@
function getLocalStorageKey() {
return "@MobileSessionFacade.LocalStorageKey";
}
function getBeWoStorage() {
const localStorageKey = getLocalStorageKey();
const unparsedLocalStorageJson = localStorage.getItem(localStorageKey);
let beWoStorage = new LocalBeWoStorage(localStorageKey, []);
if(unparsedLocalStorageJson === null || unparsedLocalStorageJson === undefined || unparsedLocalStorageJson.length === 0) {
localStorage.setItem(localStorageKey, JSON.stringify(beWoStorage));
} else {
const parsedJson = JSON.parse(unparsedLocalStorageJson);
beWoStorage = new LocalBeWoStorage(localStorageKey, parsedJson.inputList);
}
return beWoStorage;
}
function clearLocalBeWoStorage() {
const beWoStorage = getBeWoStorage();
beWoStorage.clearInputList();
}
function getRestoreButtonState() {
const beWoStorage = getBeWoStorage();
return beWoStorage.inputList.length > 0;
}
window.addEventListener("load", function() {
$(".booking-form-container").find("textarea, select, input").on("change", function() {
const item = $(this);
const id = item.attr("id");
const type = item.prop("type");
const value = type === "checkbox" ? item.is(":checked").toString() : item.val();
if((value === null || value === undefined) || value.length === 0) {
logInfo2(`Element mit Id "${id}" hat ${(value !== null ? "einen leeren" : " keinen")} Wert.`);
return;
}
logInfo3(`${id}: ${value}`);
const name = item.prop("name");
const beWoStorage = getBeWoStorage();
beWoStorage.addInputValue(id, name, type, value, new Date());
// ToDo: Auch Hilfeplan- und Mitarbeiterauswahl berücksichtigen
// ToDo: 28.07.2025: Hilefplan einbauen und dabei dann ein Flag setzen in TempData und dann gegebenenfalls alle anderen Felder wiederherstellen
toggleRestoreButton();
});
});
function restoreField(id) {
const beWoStorage = getBeWoStorage();
const inputObj = beWoStorage.getItemById(id);
if(inputObj === undefined || inputObj === null) {
return;
}
$(`#${id}`).val(inputObj.inputValue);
$(`#${id}`).trigger("change");
}
function restoreAllFields() {
const beWoStorage = getBeWoStorage();
$.each(beWoStorage.inputList, (index, item) => {
if (item.inputType === "checkbox") {
$(`#${item.inputId}`).prop("checked", item.inputValue);
} else {
$(`#${item.inputId}`).val(item.inputValue);
}
$(`#${item.inputId}`).trigger("change");
});
}
@* /Eingabenwiederherstellung *@
</script>
</head>
<body>
@if(MobileSessionFacade.IsUserLoggedIn())
{
using(Html.BeginForm("LogOutAfterSessionTimeout", "Main", FormMethod.Post, new { id = "logout-form", css = "display:none;" }))
{
}
}
@if(Model != null)
{
<nav class="navbar navbar-expand-lg navbar-dark bg-dark sticky-top justify-content-end">
<div class="container-fluid">
<a href="#" class="navbar-brand m-0 p-0">
@Model.LoggedInEmplyeeFirstNameLastName
<p class="logoff-countdown-container m-0 p-0" data-toggle="tooltip" title="Zeit bis zur automatischen Abmeldung" id="countdown-tooltip">
<span class="logoff-countdown m-0 p-0" id="countdown" onclick="countdownClick()">&nbsp;</span>
</p>
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
@if(Html.IsInDebugMode())
{
using(Html.BeginForm("RedirectToDevExpressScheduler", "Main", FormMethod.Post))
{
<li class="nav-item">
<button class="btn btn-link text-light no-underline" onclick="showSpinner()">
<i class="fas fa-hammer" style="color: #FFD9C2;"></i>
DX Kalender
</button>
</li>
}
}
@if(Html.IsInDebugMode())
{
<li class="nav-item">
<button class="btn btn-link text-light no-underline" type="button" onclick="localStorage.clear(); logInfo2(`Der lokale Speicher wurde geleert`);">
<i class="fas fa-trash text-danger"></i>
Speicher leeren
</button>
</li>
using(Html.BeginForm("RedirectToDevTools", "Main", FormMethod.Post))
{
<li class="nav-item">
<button class="btn btn-link text-light no-underline" onclick="showSpinner()">
<i class="fas fa-bug text-success"></i>
DevTools
</button>
</li>
}
}
@if(Model.IsAllowedToSeeCustomers)
{
using(Html.BeginForm("RedirectToCustomer", "Main", FormMethod.Post))
{
<li class="nav-item">
<button class="btn btn-link text-light no-underline" onclick="showSpinner()">
<i class="fas fa-user text-bewo-customers"></i>
Klienten
</button>
</li>
}
}
@using(Html.BeginForm("RedirectToMain", "Main", FormMethod.Post))
{
<li class="nav-item">
<button class="btn btn-link text-light no-underline" onclick="showSpinner()">
<i class="fas fa-clock text-bewo-service-records"></i>
Zeiterfassung
</button>
</li>
}
@if(Model.IsAllowedToSeeScheduler)
{
using(Html.BeginForm("RedirectToScheduler", "Main", FormMethod.Post))
{
<li class="nav-item">
<button class="btn btn-link text-light no-underline" onclick="showSpinner()">
<i class="fas fa-calendar-alt text-bewo-calendar"></i>
Kalender
</button>
</li>
}
}
@if(Model.HasRightToViewQuittierungsbelege)
{
using(Html.BeginForm("RedirectToReportView", "Main", FormMethod.Post))
{
<li class="nav-item">
<button class="btn btn-link text-light no-underline" onclick="showSpinner()">
<i class="fas fa-chart-bar text-bewo-report">
</i>
Quittierungsbelege
</button>
</li>
}
}
@if(Model.HasRightToViewReports && Model.HasRightToViewMitarbeiterstundenkonto)
{
using(Html.BeginForm("RedirectToReportViewer", "Main", FormMethod.Post))
{
<li class="nav-item">
<button class="btn btn-link text-light no-underline" onclick="showSpinner()">
<i class="fas fa-chart-bar text-bewo-report"></i>
Auswertungen
</button>
</li>
}
}
<li class="nav-item">
<button class="btn btn-link text-light no-underline" onclick="showAboutPopup()">
<i class="fas fa-balance-scale text-primary"></i>
&Uuml;ber
</button>
</li>
<li class="nav-item">
<button class="btn btn-link text-light no-underline" onclick="showChangePasswordPopup()">
<i class="fas fa-lock text-danger"></i>
Passwort &auml;ndern
</button>
</li>
<li class="nav-item">
@using(Html.BeginForm("Logout", "Main", FormMethod.Post, new { id = "normal-logout-form" }))
{
<button class="btn btn-link text-light no-underline" onclick="showSpinner()">
<i class="fas fa-sign-out-alt text-primary"></i>
Abmelden
</button>
}
</li>
</ul>
</div>
</div>
</nav>
}
<div class="modal" role="dialog" tabindex="-1" id="mySpinner" data-backdrop="static">
<div class="modal-dialog modal-dialog-centered text-center" role="document">
<div class="modal-content bg-transparent border-0">
<div class="d-flex justify-content-center">
<div class="spinner-border text-primary" role="status" style="width: 5rem; height: 5rem;">
<span class="sr-only"></span>
</div>
</div>
<p id="loading-info-p" class="text-white mt-4">Lade ...</p>
</div>
</div>
</div>
<div class="modal" tabindex="-1" role="dialog" id="messagePopup">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title font-weight-bold" id="popupTitle"></h5>
<button class="close" type="button" data-dismiss="modal" id="message-popup-esc-btn">
<span>&times;</span>
</button>
</div>
<div class="modal-body" id="modal-body">
<p id="popupMessage"></p>
</div>
<div class="modal-footer">
<button class="btn btn-primary" type="button" data-dismiss="modal" id="message-popup-ok-btn">OK</button>
<button class="btn btn-secondary" type="button" data-dismiss="modal" id="message-popup-close-btn">Schlie&szlig;en</button>
</div>
</div>
</div>
</div>
<div class="modal" data-backdrop="static" tabindex="-1" role="dialog" id="error-message-popup">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header py-1">
<h5 class="modal-title text-danger font-weight-bold">Es ist ein Fehler aufgetreten</h5>
</div>
<div class="modal-body">
<p>
Es ist leider ein unbekannter Fehler aufgetreten. Pr&uuml;fen Sie Ihre Internetverbindung oder versuchen Sie es sp&auml;ter erneut. Wir sind stets bem&uuml;ht, das Programm zu verbessern, daher freuen wir uns auch, wenn Sie die Fehlerdetails unten in einer Mail an <a href="mailto:support@bewoplaner.de" id="error-popup-mailto">support@bewoplaner.de</a> senden.
</p>
<button class="btn btn-primary" type="button" onclick="copyErrorToClipboard()">Fehlerdetails kopieren</button>
<hr />
<div class="form-group">
<label for="fehlerdetail-textarea">Fehlerdetails:</label>
<textarea class="form-control font-italic text-monospace" style="height: 20em !important; max-height: 20em !important; scroll-behavior: auto !important;" id="fehlerdetail-textarea"></textarea>
<div id="html-error-container"></div>
</div>
</div>
<div class="modal-footer">
<div class="clearfix w-100">
<button class="btn btn-primary float-right" type="button" data-dismiss="modal">OK</button>
</div>
</div>
</div>
</div>
</div>
<div class="modal" tabindex="-1" role="dialog" id="error-alert-popup">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title font-weight-bold">Fehler</h5>
<button class="close" type="button" data-dismiss="modal">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-auto">
<span class="fas fa-exclamation-triangle fa-3x text-danger"></span>
</div>
<div class="col" id="error-alert-message">
@Html.Raw(TempData[TempDataConstants.ErrorAlertPopupMessage])
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-primary" type="button" data-dismiss="modal">OK</button>
</div>
</div>
</div>
</div>
@if(TempData[TempDataConstants.ErrorMessageKey] is string errorMessage)
{
<div class="modal d-block" tabindex="-1" role="dialog" id="general-error-popup">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title font-weight-bold">Info</h5>
<button class="close" type="button" data-dismiss="modal" onclick="$('#general-error-popup').removeClass('d-block');">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-auto">
<span class="fas fa-exclamation-triangle fa-3x text-danger"></span>
</div>
<div class="col" id="general-error-message">
@Html.Raw(errorMessage)
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-primary" type="button" data-dismiss="modal" onclick="$('#general-error-popup').removeClass('d-block');">OK</button>
</div>
</div>
</div>
</div>
}
@if(TempData[TempDataConstants.InfoMessageKey] is string infoMessage)
{
<div class="modal d-block" tabindex="-1" role="dialog" id="info-popup">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title font-weight-bold">Info</h5>
<button class="close" type="button" data-dismiss="modal" onclick="$('#info-popup').removeClass('d-block');">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-auto">
<span class="fas fa-exclamation-triangle fa-3x text-info"></span>
</div>
<div class="col" id="info-message">
@Html.Raw(infoMessage)
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-primary" type="button" data-dismiss="modal" onclick="$('#info-popup').removeClass('d-block');">OK</button>
</div>
</div>
</div>
</div>
}
@using(Html.BeginForm("ZombieLogout", "Main", FormMethod.Post, new { id = "second-logout-form", style = "display:none;" }))
{
}
@RenderBody()
</body>
</html>