738 lines
32 KiB
Plaintext
738 lines
32 KiB
Plaintext
@using BeWoPlanerMobil.Controllers
|
|
@using BeWoPlanerMobil.Service
|
|
@using BeWoPlanerMobil.Util
|
|
|
|
<!DOCTYPE html>
|
|
<html lang="de">
|
|
<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/jquery.validate.unobtrusive.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")" />
|
|
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/dateUtils.js?v=1.4")"></script>
|
|
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/countdown.js?v=1.0")"></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/ownSoft-Scripts/mobileUtils.js?v=1.9")"></script>
|
|
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/view-scripts/main.js?v=2.8")"></script>
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/signature.js?v=1.5")"></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.5")"></script>
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/view-scripts/customer.js?v=1.5")"></script>
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/view-scripts/scheduler.js?v=1.4")"></script>
|
|
|
|
<script type="text/javascript" src="@Url.Content("~/Scripts/ownSoft-Scripts/view-scripts/report.js?v=1.4")"></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.4")"></script>
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/resources-list-utils.js?v=1.4")"></script>
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/list-utils.js?v=1.4")"></script>
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/service-record-time-calc.js?v=1.7")"></script>
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/js-helper.js?v=1.4")"></script>
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/logging.js?v=1.4")"></script>
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/MoKPasswordSecurity.js?v=1.4")"></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.4")"></script>
|
|
|
|
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/devextreme/dx.all.js?v=1.4")"></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")" />
|
|
|
|
@* CSS für den neuen Kalender-Tooltip *@
|
|
<style type="text/css">
|
|
.toolTipPanel {
|
|
box-shadow: 3px 3px 20px Gray;
|
|
background-color: White;
|
|
width: 300px;
|
|
}
|
|
|
|
.toolTipPanelHeader {
|
|
padding-right: 8px !important;
|
|
}
|
|
|
|
.toolTipPanel .dxrpHeader_Metropolis, .toolTipPanel .dxrpHeader_MetropolisBlue {
|
|
border-bottom: 1px solid rgba(192, 192, 192, 1);
|
|
}
|
|
|
|
.toolTipLablel {
|
|
color: Black;
|
|
font-family: Tahoma;
|
|
font-size: 10pt;
|
|
}
|
|
|
|
.dxrpHeader_BlackGlass .toolTipLablel, .dxrpHeader_RedWine .toolTipLablel {
|
|
color: White;
|
|
}
|
|
|
|
.toolTipCloseButton {
|
|
float: right;
|
|
}
|
|
|
|
.toolTipButton {
|
|
float: right;
|
|
margin: 5px 0px 6px 5px;
|
|
}
|
|
</style>
|
|
|
|
@Html.DevExpress().GetStyleSheets(
|
|
ASPxWebClientUIControl.ColorSchemeLight,
|
|
new StyleSheet { ExtensionSuite = ExtensionSuite.NavigationAndLayout, Theme = "Default" },
|
|
new StyleSheet { ExtensionSuite = ExtensionSuite.Report },
|
|
new StyleSheet { ExtensionType = ExtensionType.WebDocumentViewer },
|
|
new StyleSheet { ExtensionSuite = ExtensionSuite.Scheduler }
|
|
)
|
|
|
|
@Html.DevExpress().GetScripts(
|
|
new Script { ExtensionSuite = ExtensionSuite.NavigationAndLayout },
|
|
new Script { ExtensionSuite = ExtensionSuite.Icons },
|
|
new Script { ExtensionType = ExtensionType.WebDocumentViewer },
|
|
new Script { ExtensionType= ExtensionType.AppointmentRecurrenceForm},
|
|
new Script { ExtensionSuite = ExtensionSuite.Scheduler }
|
|
)
|
|
|
|
<style type="text/css">
|
|
input::-webkit-date-and-time-value {
|
|
text-align: left;
|
|
}
|
|
</style>
|
|
|
|
<script type="text/javascript">
|
|
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();
|
|
}
|
|
}
|
|
|
|
const countdown = new Countdown(parseInt("@AbstractBaseController.TimeoutLimit", 10) * 60,
|
|
(remainingSeconds) => {
|
|
const remainingMilliseconds = remainingSeconds * 1000;
|
|
|
|
const minutes = Math.floor((remainingMilliseconds % (1000 * 60 * 60)) / (1000 * 60));
|
|
const seconds = Math.floor((remainingMilliseconds % (1000 * 60)) / 1000);
|
|
|
|
var m = minutes.toString().padStart(2, "0");
|
|
var s = seconds.toString().padStart(2, "0");
|
|
|
|
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>`);
|
|
},
|
|
() => {
|
|
$("#countdown").html("00:00");
|
|
$("#logout-form").submit();
|
|
}
|
|
);
|
|
|
|
$(document).ready(function() {
|
|
countdown?.start();
|
|
|
|
$.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";
|
|
});
|
|
|
|
calcPrependWidth();
|
|
|
|
@{
|
|
var errorAlertMessage = TempData[TempDataConstants.ErrorAlertPopupMessage]?.ToString();
|
|
|
|
if(!string.IsNullOrWhiteSpace(errorAlertMessage))
|
|
{
|
|
<text>
|
|
$("#error-alert-popup").modal("show");
|
|
</text>
|
|
}
|
|
}
|
|
});
|
|
|
|
function toggleRestoreButton() {
|
|
const state = false;
|
|
|
|
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());
|
|
}
|
|
|
|
|
|
</script>
|
|
</head>
|
|
<body onclick="countdown?.reset();">
|
|
@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()"> </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="far fa-calendar-alt text-bewo-calendar"></i>
|
|
DX Kalender
|
|
</button>
|
|
</li>
|
|
}
|
|
|
|
<li class="nav-item">
|
|
<button class="btn btn-link text-light no-underline" type="button" onclick="printLocalStorage()">
|
|
<i class="fab fa-firefox-browser text-bewo-dev"></i>
|
|
Speicher auslesen
|
|
</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.IsAllowedToSeePersons)
|
|
{
|
|
using (Html.BeginForm("RedirectToPersons", "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-person"></i>
|
|
Personen
|
|
</button>
|
|
</li>
|
|
}
|
|
}
|
|
|
|
@if (Model.HasRightToViewOwnEmployee)
|
|
{
|
|
using (Html.BeginForm("RedirectToEmployees", "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-employee"></i>
|
|
Mitarbeiter
|
|
</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>
|
|
Über
|
|
</button>
|
|
</li>
|
|
|
|
@if (Model.HasRightToChangePassword)
|
|
{
|
|
<li class="nav-item">
|
|
<button class="btn btn-link text-light no-underline" onclick="showChangePasswordPopup()">
|
|
<i class="fas fa-lock text-danger"></i>
|
|
Passwort ä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>
|
|
<li class="nav-item">
|
|
<span class="logoff-countdown m-0 p-0">Version 3.32</span>
|
|
</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>×</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ß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üfen Sie Ihre Internetverbindung oder versuchen Sie es später erneut. Wir sind stets bemü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>×</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(Html.IsInDebugMode())
|
|
{
|
|
<div class="modal" tabindex="-1" role="dialog" id="dev-popup">
|
|
<div class="modal-dialog modal-xl" role="document">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title font-weight-bold">Dev-Infos</h5>
|
|
<button class="close" type="button" data-dismiss="modal">
|
|
<span>×</span>
|
|
</button>
|
|
</div>
|
|
<div class="modal-body" id="dev-popup-body">
|
|
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button class="btn btn-primary" type="button" data-dismiss="modal">Schließen</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>×</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>×</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>
|