_Layout.cshtml
7,535 bytes
| 1 | @using Microsoft.AspNetCore.Identity |
|---|---|
| 2 | @using App.Domain.Identity |
| 3 | @using WebApp.Areas.Admin.Models |
| 4 | @inject SignInManager<AppUser> _signInManager |
| 5 | @{ |
| 6 | var pageTitle = (Model as ITitledViewModel)?.Title; |
| 7 | if (string.IsNullOrWhiteSpace(pageTitle)) pageTitle = "Admin"; |
| 8 | var ctx = ViewContext.RouteData.Values; |
| 9 | var currentController = (ctx["controller"] as string ?? "").ToLowerInvariant(); |
| 10 | bool IsActive(string name) => currentController == name.ToLowerInvariant(); |
| 11 | } |
| 12 | |
| 13 | <!DOCTYPE html> |
| 14 | <html lang="@Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName"> |
| 15 | <head> |
| 16 | <meta charset="utf-8" /> |
| 17 | <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
| 18 | <meta name="theme-color" content="#e8604c" /> |
| 19 | <title>@pageTitle - SplitApp Admin</title> |
| 20 | |
| 21 | <link rel="preconnect" href="https://fonts.googleapis.com" /> |
| 22 | <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> |
| 23 | <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet" /> |
| 24 | |
| 25 | <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" /> |
| 26 | <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" /> |
| 27 | <link rel="stylesheet" href="~/css/site.css" asp-append-version="true" /> |
| 28 | <link rel="stylesheet" href="~/css/splitapp-design.css" asp-append-version="true" /> |
| 29 | <link rel="stylesheet" href="~/css/admin.css" asp-append-version="true" /> |
| 30 | </head> |
| 31 | <body class="admin-body"> |
| 32 | <div id="sa-toast-container" class="sa-toast-container"></div> |
| 33 | <div id="sa-tempdata-messages" style="display:none" |
| 34 | data-success="@TempData["Success"]" |
| 35 | data-error="@TempData["Error"]" |
| 36 | data-warning="@TempData["Warning"]"></div> |
| 37 | |
| 38 | <div class="admin-shell"> |
| 39 | <aside class="admin-sidebar"> |
| 40 | <div class="admin-sidebar-brand"> |
| 41 | <i class="bi bi-airplane-fill"></i> |
| 42 | <span>SplitApp</span> |
| 43 | <small class="admin-sidebar-brand-sub">Admin</small> |
| 44 | </div> |
| 45 | <nav class="admin-sidebar-nav"> |
| 46 | <a class="admin-nav-link @(IsActive("Dashboard") ? "active" : "")" asp-area="Admin" asp-controller="Dashboard" asp-action="Index"> |
| 47 | <i class="bi bi-speedometer2"></i><span>@Localizer["Dashboard"]</span> |
| 48 | </a> |
| 49 | <div class="admin-nav-section">@Localizer["Core"]</div> |
| 50 | <a class="admin-nav-link @(IsActive("Trips") ? "active" : "")" asp-area="Admin" asp-controller="Trips" asp-action="Index"> |
| 51 | <i class="bi bi-suitcase-lg"></i><span>@Localizer["Trips"]</span> |
| 52 | </a> |
| 53 | <a class="admin-nav-link @(IsActive("Expenses") ? "active" : "")" asp-area="Admin" asp-controller="Expenses" asp-action="Index"> |
| 54 | <i class="bi bi-cash-coin"></i><span>@Localizer["Expenses"]</span> |
| 55 | </a> |
| 56 | <a class="admin-nav-link @(IsActive("BudgetCategories") ? "active" : "")" asp-area="Admin" asp-controller="BudgetCategories" asp-action="Index"> |
| 57 | <i class="bi bi-tags"></i><span>@Localizer["Budget Categories"]</span> |
| 58 | </a> |
| 59 | <a class="admin-nav-link @(IsActive("Currencies") ? "active" : "")" asp-area="Admin" asp-controller="Currencies" asp-action="Index"> |
| 60 | <i class="bi bi-currency-exchange"></i><span>@Localizer["Currencies"]</span> |
| 61 | </a> |
| 62 | <div class="admin-nav-section">@Localizer["Activity"]</div> |
| 63 | <a class="admin-nav-link @(IsActive("Polls") ? "active" : "")" asp-area="Admin" asp-controller="Polls" asp-action="Index"> |
| 64 | <i class="bi bi-bar-chart"></i><span>@Localizer["Polls"]</span> |
| 65 | </a> |
| 66 | <a class="admin-nav-link @(IsActive("Wishlist") ? "active" : "")" asp-area="Admin" asp-controller="Wishlist" asp-action="Index"> |
| 67 | <i class="bi bi-stars"></i><span>@Localizer["Wishlist"]</span> |
| 68 | </a> |
| 69 | <a class="admin-nav-link @(IsActive("Invitations") ? "active" : "")" asp-area="Admin" asp-controller="Invitations" asp-action="Index"> |
| 70 | <i class="bi bi-envelope"></i><span>@Localizer["Invitations"]</span> |
| 71 | </a> |
| 72 | <div class="admin-nav-section">@Localizer["Settlements"]</div> |
| 73 | <a class="admin-nav-link @(IsActive("SettlementPlans") ? "active" : "")" asp-area="Admin" asp-controller="SettlementPlans" asp-action="Index"> |
| 74 | <i class="bi bi-diagram-3"></i><span>@Localizer["Settlement Plans"]</span> |
| 75 | </a> |
| 76 | <a class="admin-nav-link @(IsActive("SettlementPayments") ? "active" : "")" asp-area="Admin" asp-controller="SettlementPayments" asp-action="Index"> |
| 77 | <i class="bi bi-credit-card-2-front"></i><span>@Localizer["Settlement Payments"]</span> |
| 78 | </a> |
| 79 | <a class="admin-nav-link @(IsActive("SplitPresets") ? "active" : "")" asp-area="Admin" asp-controller="SplitPresets" asp-action="Index"> |
| 80 | <i class="bi bi-pie-chart"></i><span>@Localizer["Split Presets"]</span> |
| 81 | </a> |
| 82 | <a class="admin-nav-link @(IsActive("TripParticipants") ? "active" : "")" asp-area="Admin" asp-controller="TripParticipants" asp-action="Index"> |
| 83 | <i class="bi bi-people"></i><span>@Localizer["Trip Participants"]</span> |
| 84 | </a> |
| 85 | <div class="admin-nav-section">@Localizer["System"]</div> |
| 86 | <a class="admin-nav-link @(IsActive("Users") ? "active" : "")" asp-area="Admin" asp-controller="Users" asp-action="Index"> |
| 87 | <i class="bi bi-person-gear"></i><span>@Localizer["Users"]</span> |
| 88 | </a> |
| 89 | </nav> |
| 90 | <div class="admin-sidebar-footer"> |
| 91 | <a asp-area="" asp-controller="Home" asp-action="Index" class="admin-back-link"> |
| 92 | <i class="bi bi-arrow-left"></i>@Localizer["Back to site"] |
| 93 | </a> |
| 94 | </div> |
| 95 | </aside> |
| 96 | |
| 97 | <div class="admin-main"> |
| 98 | <header class="admin-topbar"> |
| 99 | <button class="admin-topbar-toggle d-md-none" type="button" onclick="document.body.classList.toggle('admin-sidebar-open')" aria-label="Toggle sidebar"> |
| 100 | <i class="bi bi-list"></i> |
| 101 | </button> |
| 102 | <div class="admin-topbar-title"> |
| 103 | <i class="bi bi-shield-lock"></i> @pageTitle |
| 104 | </div> |
| 105 | <div class="admin-topbar-actions"> |
| 106 | <partial name="_LanguageSelection" /> |
| 107 | <partial name="_LoginPartial" /> |
| 108 | </div> |
| 109 | </header> |
| 110 | |
| 111 | <main role="main" class="admin-content sa-animate-fade-in"> |
| 112 | @RenderBody() |
| 113 | </main> |
| 114 | |
| 115 | <footer class="admin-footer"> |
| 116 | <span><i class="bi bi-airplane-fill me-1"></i> SplitApp Admin © 2026 TalTech</span> |
| 117 | <span>@Thread.CurrentThread.CurrentUICulture.Name</span> |
| 118 | </footer> |
| 119 | </div> |
| 120 | </div> |
| 121 | |
| 122 | <script src="~/lib/jquery/dist/jquery.min.js"></script> |
| 123 | <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script> |
| 124 | <script src="~/js/splitapp.js" asp-append-version="true"></script> |
| 125 | <script src="~/js/site.js" asp-append-version="true"></script> |
| 126 | @await RenderSectionAsync("Scripts", required: false) |
| 127 | </body> |
| 128 | </html> |
| 129 | |