Files
BeWoPlaner/BeWoPlanerMobil/Views/Shared/_Layout.cshtml

869 lines
35 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@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
-->
<link href="@Url.Content("~/node_modules/jquery-ui/dist/themes/base/jquery-ui.min.css")" rel="stylesheet" type="text/css" />
@Html.DevExpress().GetStyleSheets(
ASPxWebClientUIControl.ColorSchemeLight,
new StyleSheet { ExtensionSuite = ExtensionSuite.NavigationAndLayout, Theme = "Default" },
new StyleSheet { ExtensionSuite = ExtensionSuite.Report },
new StyleSheet { ExtensionType = ExtensionType.WebDocumentViewer }
)
<script type="text/javascript" src="@Url.Content("~/node_modules/jquery/dist/jquery.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/node_modules/jquery-ui/dist/jquery-ui.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/node_modules/jquery-validation/dist/jquery.validate.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/node_modules/knockout/build/output/knockout-latest.js")"></script>
@Html.DevExpress().GetScripts(
new Script { ExtensionSuite = ExtensionSuite.NavigationAndLayout },
new Script { ExtensionSuite = ExtensionSuite.Icons },
new Script { ExtensionType = ExtensionType.WebDocumentViewer }
)
<script type="text/javascript" src="@Url.Content("~/node_modules/bootstrap/dist/js/bootstrap.bundle.min.js")"></script>
@*<link rel="stylesheet" href="@Url.Content("~/Content/style.css")" />*@
<link rel="stylesheet" href="~/Content/style.css" />
<link rel="stylesheet" href="@Url.Content("~/Content/tempusdominus-bootstrap-4.min.css")" />
<script src="@Url.Content("~/Scripts/ownSoft-Scripts/utils/dateUtils.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/moment.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/locale/de.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/tempusdominus-boostrap-4.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/ownSoft-Scripts/mobileUtils.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/ownSoft-Scripts/group-booking.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/ownSoft-Scripts/view-scripts/main.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/ownSoft-Scripts/signature.js")" type="text/javascript"></script>
<link rel="stylesheet" href="@Url.Content("~/node_modules/bootstrap4-fullscreen-modal/dist/bootstrap4-modal-fullscreen.min.css")" />
<script src="@Url.Content("~/Scripts/ownSoft-Scripts/support-concept-statistics.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/ownSoft-Scripts/view-scripts/customer.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/ownSoft-Scripts/view-scripts/scheduler.js")" type="text/javascript"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/ownSoft-Scripts/view-scripts/report.js")"></script>
<script src="@Url.Content("~/node_modules/signature_pad/dist/signature_pad.umd.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/ownSoft-Scripts/utils/trimCanvas.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/ownSoft-Scripts/utils/resources-list-utils.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/ownSoft-Scripts/utils/list-utils.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/ownSoft-Scripts/utils/service-record-time-calc.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/ownSoft-Scripts/utils/js-helper.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/ownSoft-Scripts/utils/logging.js")" type="text/javascript"></script>
@*<script src="@Url.Content("~/Scripts/ownSoft-Scripts/utils/password-security.js")" type="text/javascript"></script>*@
<script type="text/javascript">
class PasswordSecurity {
numbers = "0123456789";
lowercaseLetters = "abcdefghijklmnopqrstuvwxyz";
uppercaseLetters = "ABDEFGHIJKLMNOPQRSTUVWXYZ";
lowercaseUmlauts = "äöüß";
uppercaseUmlauts = "ÄÖÜ";
specialChars1 = "\\\"\'µ@@€!";
specialChars2 = "&/()=?+*";
specialChars3 = ",.-;:_><|";
specialChars4 = "§$%'{[]}´";
specialChars5 = "`^°~²³";
isPartial = false;
partialPassword = "";
passwordLengthDifference = 0;
score = 0;
previousValue = 0;
schalter = false;
previousValues = [];
passwordLabelId = "";
constructor(pwLabelId) {
this.passwordLabelId = pwLabelId;
}
validatePassword(password) {
if (false === isUndefinedOrNull(password) && password.length > 0) {
var sx = "";
var passwordStrength = -1;
for (var i = 0; i < password.length; i++) {
sx += password[i];
if (sx.length < this.partialPassword.length) {
this.isPartial = true;
this.passwordLengthDifference = this.partialPassword.length - sx.length;
}
if (this.partialPassword !== sx) {
this.partialPassword = sx;
}
passwordStrength = this.calculatePasswordStrength(sx);
}
this.displayPasswordStrength(passwordStrength);
return;
}
this.score = 0;
this.previousValue = 0;
this.displayPasswordStrength(-1);
}
getIntegerFromArray(arr, index) {
if (arr === undefined || arr === null || arr.length < index) {
return 0;
}
var intValue = $.parseInt(arr[index], 10);
return $.isNumeric(intValue) ? intValue : 0;
}
getLastValue() {
if (this.previousValues === undefined || this.previousValues === null || this.previousValues.length === 0) {
return 0;
}
return this.previousValues[this.previousValues.length - 1];
}
calculatePasswordStrength(passwordToValidate) {
var passwordStrength = 0;
this.previousValue = 0;
if (this.isPartial === true) {
if (this.passwordLengthDifference === 1) {
this.score -= this.getLastValue();
this.previousValues.pop();
} else {
for (var i = 0; i < this.passwordLengthDifference; i++) {
this.score -= this.getLastValue();
this.previousValues.pop();
}
}
this.isPartial = false;
} else {
var passwordLength = passwordToValidate.length;
if (passwordLength >= 6 && passwordLength < 9) {
this.score += 1;
this.previousValue = 1;
this.schalter = true;
}
if (passwordLength >= 9 && passwordLength < 12) {
this.score += 2;
this.previousValue = 2;
this.schalter = true;
}
if (passwordLength >= 12 && passwordLength < 18) {
this.score += 3;
this.previousValue = 3;
this.schalter = true;
}
if (passwordLength >= 18) {
this.score += 4;
this.previousValue = 4;
this.schalter = true;
}
var passwordAsArray = Array.from(passwordToValidate);
// Zahlen
var containsNumbers = false;
for (var i = 0; i < passwordAsArray.length; i++) {
if (this.numbers.includes(passwordAsArray[i])) {
containsNumbers = true;
break;
}
}
// Kleinbuchstaben
var containsLowercaseLetters = false;
for (var i = 0; i < passwordAsArray.length; i++) {
if (this.lowercaseLetters.includes(passwordAsArray[i])) {
containsLowercaseLetters = true;
break;
}
}
// Großbuchstaben
var containsUppercaseLetters = false;
for (var i = 0; i < passwordAsArray.length; i++) {
if (this.uppercaseLetters.includes(passwordAsArray[i])) {
containsUppercaseLetters = true;
break;
}
}
// Kleinumlaute
var containsLowercaseUmlauts = false;
for (var i = 0; i < passwordAsArray.length; i++) {
if (this.lowercaseUmlauts.includes(passwordAsArray[i])) {
containsLowercaseUmlauts = true;
break;
}
}
// Großumlaute
var containsUppercaseUmlauts = false;
for (var i = 0; i < passwordAsArray.length; i++) {
if (this.uppercaseUmlauts.includes(passwordAsArray[i])) {
containsUppercaseUmlauts = true;
break;
}
}
// Sonderzeichen 1
var containsSpecialCharacters1 = false;
for (var i = 0; i < passwordAsArray.length; i++) {
if (this.specialChars1.includes(passwordAsArray[i])) {
containsSpecialCharacters1 = true;
break;
}
}
var containsSpecialCharacters2 = false;
for (var i = 0; i < passwordAsArray.length; i++) {
if (this.specialChars2.includes(passwordAsArray[i])) {
containsSpecialCharacters2 = true;
break;
}
}
var containsSpecialCharacters3 = false;
for (var i = 0; i < passwordAsArray.length; i++) {
if (this.specialChars3.includes(passwordAsArray[i])) {
containsSpecialCharacters3 = true;
break;
}
}
var containsSpecialCharacters4 = false;
for (var i = 0; i < passwordAsArray.length; i++) {
if (this.specialChars4.includes(passwordAsArray[i])) {
containsSpecialCharacters4 = true;
break;
}
}
var containsSpecialCharacters5 = false;
for (var i = 0; i < passwordAsArray.length; i++) {
if (this.specialChars5.includes(passwordAsArray[i])) {
containsSpecialCharacters5 = true;
break;
}
}
if (containsNumbers === true) {
this.addScoreValue(3);
}
if (containsLowercaseLetters === true) {
this.addScoreValue(2);
}
if (containsUppercaseLetters === true) {
this.addScoreValue(3);
}
if (containsLowercaseUmlauts === true) {
this.addScoreValue(2);
}
if (containsUppercaseUmlauts === true) {
this.addScoreValue(2);
}
if (containsSpecialCharacters1 === true) {
this.addScoreValue(4);
}
if (containsSpecialCharacters2 === true) {
this.addScoreValue(4);
}
if (containsSpecialCharacters3 === true) {
this.addScoreValue(4);
}
if (containsSpecialCharacters4 === true) {
this.addScoreValue(4);
}
if (containsSpecialCharacters5 === true) {
this.addScoreValue(4);
}
this.previousValues.push(this.previousValue);
}
if (this.score <= 15) {
passwordStrength = 0;
}
if (this.score > 15 && this.score <= 55) {
passwordStrength = 1;
}
if (this.score > 55 && this.score <= 115) {
passwordStrength = 2;
}
if (this.score > 115 && this.score <= 155) {
passwordStrength = 3;
}
if (this.score > 155) {
passwordStrength = 4;
}
return passwordStrength;
}
addScoreValue(defaultValue) {
if (defaultValue === undefined || defaultValue === null || false === $.isNumeric(defaultValue)) {
return;
}
this.score += defaultValue;
if (this.schalter === true) {
this.previousValue += defaultValue;
} else {
this.previousValue = defaultValue;
}
}
displayPasswordStrength(passwordStrength) {
var passwordLabel = $("#" + this.passwordLabelId);
if (passwordStrength === undefined || !$.isNumeric(passwordStrength) || !passwordLabel.length) {
return;
}
passwordLabel.removeClass("text-success text-danger text-warning");
switch (passwordStrength) {
case -1:
passwordLabel.addClass("d-none");
passwordLabel.html("");
break;
case 0:
passwordLabel.removeClass("d-none");
passwordLabel.html("Passwortstärke: Sehr schwach");
passwordLabel.addClass("text-danger");
break;
case 1:
passwordLabel.removeClass("d-none");
passwordLabel.html("Passwortstärke: Schwach");
passwordLabel.addClass("text-danger");
break;
case 2:
passwordLabel.removeClass("d-none");
passwordLabel.html("Passwortstärke: Mittel");
passwordLabel.addClass("text-warning");
break;
case 3:
passwordLabel.removeClass("d-none");
passwordLabel.html("Passwortstärke: Stark");
passwordLabel.addClass("text-success");
break;
case 4:
passwordLabel.removeClass("d-none");
passwordLabel.html("Passwortstärke: Sehr stark");
passwordLabel.addClass("text-success");
break;
}
}
}
</script>
<script type="text/javascript">
window.addEventListener("error", (event) => {
hideSpinner();
var textToShow = "Message: " + event.message + "\r\n" +
"File name: " + event.filename + "\r\n" +
"Line: " + event.lineno + "\r\n" +
"Column: " + event.colno + "\r\n" +
"Stack: " + event.error.stack;
configureErrorPopup(textToShow);
});
function showChangePasswordPopup() {
$("#password-changing-popup").modal("show");
calcChPwPrepend();
}
function copyErrorToClipboard() {
var element = document.querySelector("#fehlerdetail-textarea");
element.select();
element.setSelectionRange(0, 99999);
document.execCommand("copy");
}
function showErrorPopup(error, htmlMessage) {
hideSpinner();
var textToShow = "name: " + error.name + ";\r\nmessage: " + error.message + ";\r\nstack: " + error.stack;
configureErrorPopup(textToShow, htmlMessage);
}
function showErrorMessagePopup(text, htmlMessage) {
hideSpinner();
configureErrorPopup(text, htmlMessage);
}
function configureErrorPopup(textToShow, htmlMessage) {
try {
$("#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();
}
} catch (error) {
console.logError(error);
}
}
$(document).ready(function() {
try {
@if(Html.IsInDebugMode())
{
<text>
logColorfulMessage(`Browser JavaScript engine: ${navigator.userAgent}`, "#59FF00");
</text>
}
$("textarea").each(function () {
var id = this.getAttribute("id");
// Die textarea des Fehlerpopups soll scrollbar sein!
if (id === "fehlerdetail-textarea") {
return;
}
//this.setAttribute("style", "height:" + (this.scrollHeight) + "px;overflow-y:hidden;");
this.setAttribute("style", "height:"+(this.scrollHeight) + "px;overflow-y:scroll;");
}).on("input", function () {
this.style.height = 0;
this.style.height = (this.scrollHeight) + "px";
});
var timeoutInMilliseconds = parseInt("@AbstractBaseController.TimeoutLimit", 10) * 60 * 1000;
var timeOfLogin = "@AbstractModel.TimeOfLastAction";
if(timeOfLogin.length > 0) {
var countDownDate = new Date().getTime() + timeoutInMilliseconds;
var interval = setInterval(function() {
var now = new Date().getTime();
var distance = countDownDate - now;
if (distance <= 0) {
clearInterval(interval);
$("#countdown").html("00:00");
$("#logout-form").submit();
return;
}
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var 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;
}
$("#countdown").html("Abmeldung in " + m + ":" + s + '<span class="fas fa-unlock-alt pl-1"></span>');
}, 1000);
}
calcPrependWidth();
} catch (error) {
showErrorPopup(error);
}
});
$(window).resize(function() {
logSize();
calcPrependWidth();
});
previousWidth = "";
function logSize() {
var width = $(document).width();
var val = widthToBootstrapVal(width);
if(previousWidth !== val) {
console.log("%c" + val, "font-size: 16px; font-weight: bold; color: #00F2FF;");
}
previousWidth = val;
}
function widthToBootstrapVal(width) {
try {
/*
Extra small <576px
Small ≥576px
Medium ≥768px
Large ≥992px
Extra large ≥1200px
*/
var 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;
} catch(error) {
showErrorPopup(error);
}
}
function countdownClick() {
$("#countdown-tooltip").tooltip('show');
setTimeout(function() {
$("#countdown-tooltip").tooltip('hide');
}, 1500);
}
var initialVonWidth = 0;
function calcPrependWidth() {
try {
// Prepend-Elemente
if(initialVonWidth === 0 && $.isNumeric(getMaxWidth("sm-prepend-input-group-text"))) {
initialVonWidth = getMaxWidth("sm-prepend-input-group-text");
}
var smallPrependInputGroupTextWidth = getMaxWidth("sm-prepend-input-group-text");
var documentWidth = $(document).width();
$(".prepend-input-group-text").width(getMaxWidth("prepend-input-group-text"));
if(documentWidth < 768 && $.isNumeric(smallPrependInputGroupTextWidth)) {
$(".sm-prepend-input-group-text").width(getMaxWidth("prepend-input-group-text"));
} else if($.isNumeric(smallPrependInputGroupTextWidth)) {
$(".sm-prepend-input-group-text").width(initialVonWidth);
}
} catch(error) {
showErrorPopup(error);
}
}
function getMaxWidth(elementClassName) {
try {
return Math.max.apply(Math, $('.' + elementClassName).map(function () { return $(this).width(); }).get());
} catch (error) {
showErrorPopup(error);
}
}
function getMaxElementHeight(elementClassName) {
try {
return Math.max.apply(Math, $('.' + elementClassName).map(function () { return $(this).height(); }).get());
} catch (error) {
showErrorPopup(error);
}
}
</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">
@Model.LoggedInEmplyeeFirstNameLastName
</a>
<span class="d-inline-block" data-toggle="tooltip" title="Zeit bis zur automatischen Abmeldung" id="countdown-tooltip">
<span class="navbar-text" id="countdown" onclick="countdownClick()"></span>
</span>
<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-hand-middle-finger"></i>
Scheduler
</button>
</li>
}
}*@
@if(AbstractModel.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(AbstractModel.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(AbstractModel.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(AbstractModel.HasRightToViewReports && AbstractModel.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>
@if(Html.IsInDebugMode())
{
<script type="text/javascript">
function showDownlink() {
try {
showMessagePopupWithHtml("Downlink", `Der Downlink betr&auml;gt laut Browser ${navigator.connection.downlink} mbps`);
} catch (error) {
showErrorPopup(error);
}
}
</script>
<li class="nav-item">
<button class="btn btn-link text-light no-underline" onclick="showDownlink()">
<i class="fas fa-tachometer-alt"></i>
Downlink anzeigen
</button>
</li>
}
<li class="nav-item">
@using(Html.BeginForm("Logout", "Main", FormMethod.Post))
{
<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">
<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" id="popupTitle"></h5>
<button class="close" type="button" data-dismiss="modal" aria-label="close" id="message-popup-esc-btn">
<span aria-hidden="true">&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" tabindex="-1" role="dialog" id="error-message-popup">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title text-danger">Es ist ein Fehler aufgetreten</h5>
<button class="close" type="button" data-dismiss="modal" aria-label="close">
<span aria-hidden="true">&times;</span>
</button>
</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>
<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-left" type="button" onclick="copyErrorToClipboard()">Text kopieren</button>
<button class="btn btn-primary float-right" type="button" data-dismiss="modal">OK</button>
</div>
</div>
</div>
</div>
</div>
@if(!(TempData["ErrorMessage"] is null))
{
<div class="container-fluid mt-3">
<div class="row d-flex justify-content-center">
<div class="col-md-3 col-lg-4">
<div class="alert alert-danger" role="alert">
@TempData["ErrorMessage"]
</div>
</div>
</div>
</div>
}
@RenderBody()
</body>
</html>