Added moonlight resources. Optimised moonlight legacy html rendering
This commit is contained in:
38
Moonlight/Shared/Components/Partials/Footer.razor
Normal file
38
Moonlight/Shared/Components/Partials/Footer.razor
Normal file
@@ -0,0 +1,38 @@
|
||||
@using Moonlight.App.Services
|
||||
|
||||
@inject TranslationService TranslationService
|
||||
@inject ConfigService ConfigService
|
||||
|
||||
@{
|
||||
var marketingConfig = ConfigService
|
||||
.GetSection("Moonlight")
|
||||
.GetSection("Marketing");
|
||||
}
|
||||
|
||||
<div id="kt_app_footer" class="app-footer">
|
||||
<div class="app-container container-fluid d-flex flex-column flex-md-row flex-center flex-md-stack py-3">
|
||||
<div class="text-dark order-2 order-md-1">
|
||||
<span class="text-muted fw-semibold me-1">2022 - @DateTime.Now.Year©</span>
|
||||
<a href="@(marketingConfig.GetValue<string>("Website"))" target="_blank" class="text-gray-800 text-hover-primary">
|
||||
@(marketingConfig.GetValue<string>("BrandName"))
|
||||
</a>
|
||||
</div>
|
||||
<ul class="menu menu-gray-600 menu-hover-primary fw-semibold order-1">
|
||||
<li class="menu-item">
|
||||
<a href="@(marketingConfig.GetValue<string>("About"))" target="_blank" class="menu-link px-2">
|
||||
@(TranslationService.Translate("Footer.AboutUs"))
|
||||
</a>
|
||||
</li>
|
||||
<li class="menu-item">
|
||||
<a href="@(marketingConfig.GetValue<string>("Imprint"))" target="_blank" class="menu-link px-2">
|
||||
@(TranslationService.Translate("Footer.Imprint"))
|
||||
</a>
|
||||
</li>
|
||||
<li class="menu-item">
|
||||
<a href="@(marketingConfig.GetValue<string>("Privacy"))" target="_blank" class="menu-link px-2">
|
||||
@(TranslationService.Translate("Footer.Privacy"))
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
90
Moonlight/Shared/Components/Partials/Navbar.razor
Normal file
90
Moonlight/Shared/Components/Partials/Navbar.razor
Normal file
@@ -0,0 +1,90 @@
|
||||
@using Moonlight.App.Helpers
|
||||
@using Moonlight.App.Repositories
|
||||
@using Moonlight.App.Services
|
||||
@using Moonlight.App.Services.Sessions
|
||||
@using Moonlight.App.Database.Entities
|
||||
@using Task = System.Threading.Tasks.Task
|
||||
|
||||
@inject IdentityService IdentityService
|
||||
@inject NavigationManager NavigationManager
|
||||
@inject CookieService CookieService
|
||||
@inject TranslationService TranslationService
|
||||
|
||||
<div class="app-navbar flex-shrink-0">
|
||||
<div class="app-navbar-item ms-1 ms-lg-3">
|
||||
<ThemeSwitcher
|
||||
ToggleBtnClass="btn btn-icon btn-custom btn-icon-muted btn-active-light btn-active-color-primary w-35px h-35px w-md-40px h-md-40px"
|
||||
ToggleBtnIconClass="svg-icon svg-icon-2">
|
||||
</ThemeSwitcher>
|
||||
</div>
|
||||
|
||||
@if (User != null)
|
||||
{
|
||||
<div class="app-navbar-item ms-1 ms-lg-3">
|
||||
<div class="btn btn-icon btn-custom btn-icon-muted btn-active-light btn-active-color-primary w-35px h-35px w-md-40px h-md-40px position-relative" id="support_ticket_toggle">
|
||||
<span class="svg-icon svg-icon-1">
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path opacity="0.3" d="M20 3H4C2.89543 3 2 3.89543 2 5V16C2 17.1046 2.89543 18 4 18H4.5C5.05228 18 5.5 18.4477 5.5 19V21.5052C5.5 22.1441 6.21212 22.5253 6.74376 22.1708L11.4885 19.0077C12.4741 18.3506 13.6321 18 14.8167 18H20C21.1046 18 22 17.1046 22 16V5C22 3.89543 21.1046 3 20 3Z" fill="currentColor"></path>
|
||||
<rect x="6" y="12" width="7" height="2" rx="1" fill="currentColor"></rect>
|
||||
<rect x="6" y="7" width="12" height="2" rx="1" fill="currentColor"></rect>
|
||||
</svg>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="app-navbar-item ms-1 ms-lg-3" id="kt_header_user_menu_toggle">
|
||||
<div class="cursor-pointer symbol symbol-35px symbol-md-40px" data-kt-menu-trigger="click" data-kt-menu-attach="parent" data-kt-menu-placement="bottom-end">
|
||||
<img alt="Avatar" src="/api/moonlight/avatar/@(User.Id)"/>
|
||||
</div>
|
||||
|
||||
<div class="menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-800 menu-state-bg menu-state-primary fw-semibold py-4 fs-6 w-275px" data-kt-menu="true">
|
||||
<div class="menu-item px-3">
|
||||
<div class="menu-content d-flex align-items-center px-3">
|
||||
<div class="symbol symbol-50px me-5">
|
||||
<img alt="Avatar" src="/api/moonlight/avatar/@(User.Id)"/>
|
||||
</div>
|
||||
<div class="d-flex flex-column">
|
||||
<div class="fw-bold d-flex align-items-center fs-5">
|
||||
@(User.FirstName) @(User.LastName)
|
||||
|
||||
@if (User.Admin)
|
||||
{
|
||||
<span class="badge badge-light-success fw-bold fs-8 px-2 py-1 ms-2">Admin</span>
|
||||
}
|
||||
</div>
|
||||
<a class="fw-semibold text-muted text-hover-primary fs-7">@(User.Email)</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="separator my-2"></div>
|
||||
<div class="menu-item px-5 my-1">
|
||||
<a href="/settings" class="menu-link px-5">@TranslationService.Translate("Navbar.Account.Settings")</a>
|
||||
</div>
|
||||
<div class="menu-item px-5">
|
||||
<a @onclick="Logout" class="menu-link px-5">@TranslationService.Translate("Navbar.Logout")</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
@code
|
||||
{
|
||||
private User? User;
|
||||
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
{
|
||||
if (firstRender)
|
||||
{
|
||||
User = await IdentityService.Get();
|
||||
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
}
|
||||
|
||||
private async void Logout()
|
||||
{
|
||||
await CookieService.SetValue("token", "", 1);
|
||||
NavigationManager.NavigateTo(NavigationManager.Uri, true);
|
||||
}
|
||||
}
|
||||
29
Moonlight/Shared/Components/Partials/PageHeader.razor
Normal file
29
Moonlight/Shared/Components/Partials/PageHeader.razor
Normal file
@@ -0,0 +1,29 @@
|
||||
@using Moonlight.App.Services
|
||||
|
||||
@inject ConfigService ConfigService
|
||||
|
||||
@{
|
||||
var moonlightConfig = ConfigService.GetSection("Moonlight");
|
||||
}
|
||||
|
||||
<div id="kt_app_header" class="app-header">
|
||||
<div class="app-container container-fluid d-flex align-items-stretch justify-content-between">
|
||||
<div class="d-flex align-items-center d-lg-none ms-n2 me-2" title="Show sidebar menu">
|
||||
<div class="btn btn-icon btn-active-color-primary w-35px h-35px" id="kt_app_sidebar_mobile_toggle">
|
||||
<i class="bx bx-menu bx-md"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex align-items-center flex-grow-1 flex-lg-grow-0">
|
||||
<a href="/" class="d-lg-none">
|
||||
<img alt="Logo" src="@(moonlightConfig.GetValue<string>("AppUrl"))/api/moonlight/resources/images/logo.svg" class="h-30px"/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="d-flex align-items-stretch justify-content-between flex-lg-grow-1" id="kt_app_header_wrapper">
|
||||
<div class="app-header-menu app-header-mobile-drawer align-items-stretch" data-kt-drawer="true" data-kt-drawer-name="app-header-menu" data-kt-drawer-activate="{default: true, lg: false}" data-kt-drawer-overlay="true" data-kt-drawer-width="225px" data-kt-drawer-direction="end" data-kt-drawer-toggle="#kt_app_header_menu_toggle" data-kt-swapper="true" data-kt-swapper-mode="{default: 'append', lg: 'prepend'}" data-kt-swapper-parent="{default: '#kt_app_body', lg: '#kt_app_header_wrapper'}">
|
||||
<div class="menu menu-rounded menu-column menu-lg-row my-5 my-lg-0 align-items-stretch fw-semibold px-2 px-lg-0" id="kt_app_header_menu" data-kt-menu="true">
|
||||
</div>
|
||||
</div>
|
||||
<Navbar></Navbar>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
63
Moonlight/Shared/Components/Partials/Sidebar.razor
Normal file
63
Moonlight/Shared/Components/Partials/Sidebar.razor
Normal file
@@ -0,0 +1,63 @@
|
||||
@using Moonlight.App.Services.Sessions
|
||||
@using Moonlight.App.Database.Entities
|
||||
@using Moonlight.App.Services
|
||||
|
||||
@inject IdentityService IdentityService
|
||||
@inject TranslationService TranslationService
|
||||
@inject ConfigService ConfigService
|
||||
@inject IJSRuntime JsRuntime
|
||||
|
||||
@{
|
||||
var moonlightConfig = ConfigService
|
||||
.GetSection("Moonlight");
|
||||
}
|
||||
|
||||
<div id="kt_app_sidebar" class="app-sidebar flex-column" data-kt-drawer="true" data-kt-drawer-name="app-sidebar" data-kt-drawer-activate="{default: true, lg: false}" data-kt-drawer-overlay="true" data-kt-drawer-width="225px" data-kt-drawer-direction="start" data-kt-drawer-toggle="#kt_app_sidebar_mobile_toggle">
|
||||
<div class="app-sidebar-logo px-6" id="kt_app_sidebar_logo">
|
||||
<a href="@(User != null ? "/" : "/login")">
|
||||
@if (sidebar == "dark-sidebar")
|
||||
{
|
||||
<img alt="Logo" src="@(moonlightConfig.GetValue<string>("AppUrl"))/api/moonlight/resources/images/logofull.png" class="h-45px app-sidebar-logo-default"/>
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sidebar == "light-sidebar")
|
||||
{
|
||||
<img alt="Logo" src="@(moonlightConfig.GetValue<string>("AppUrl"))/api/moonlight/resources/images/logo.svg" class="theme-light-show h-20px app-sidebar-logo-default"/>
|
||||
<img alt="Logo" src="@(moonlightConfig.GetValue<string>("AppUrl"))/api/moonlight/resources/images/logo.svg" class="theme-dark-show h-20px app-sidebar-logo-default"/>
|
||||
}
|
||||
}
|
||||
<img alt="Logo" src="@(moonlightConfig.GetValue<string>("AppUrl"))/api/moonlight/resources/images/logo.svg" class="h-20px app-sidebar-logo-minimize"/>
|
||||
</a>
|
||||
|
||||
<div id="kt_app_sidebar_toggle" class="app-sidebar-toggle btn btn-icon btn-shadow btn-sm btn-color-muted btn-active-color-primary body-bg h-30px w-30px position-absolute top-50 start-100 translate-middle rotate" data-kt-toggle="true" data-kt-toggle-state="active" data-kt-toggle-target="body" data-kt-toggle-name="app-sidebar-minimize">
|
||||
<i class="bx bx-chevrons-left bx-md"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<SidebarMenu></SidebarMenu>
|
||||
|
||||
<div class="app-sidebar-footer flex-column-auto pt-2 pb-6 px-6" id="kt_app_sidebar_footer">
|
||||
<a id="support_ticket_toggle_sidebar"
|
||||
class="btn btn-flex flex-center btn-custom btn-primary overflow-hidden text-nowrap px-0 h-40px w-100 btn-label">
|
||||
@(TranslationService.Translate("Sidebar.Footer.OpenSupport"))
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@code
|
||||
{
|
||||
private string sidebar;
|
||||
|
||||
private User? User;
|
||||
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
{
|
||||
if (firstRender)
|
||||
{
|
||||
User = await IdentityService.Get();
|
||||
sidebar = await JsRuntime.InvokeAsync<string>("document.body.getAttribute", "data-kt-app-layout");
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
266
Moonlight/Shared/Components/Partials/SidebarMenu.razor
Normal file
266
Moonlight/Shared/Components/Partials/SidebarMenu.razor
Normal file
@@ -0,0 +1,266 @@
|
||||
@using Moonlight.App.Services
|
||||
@using Moonlight.App.Services.Sessions
|
||||
@using Moonlight.App.Database.Entities
|
||||
|
||||
@inject TranslationService TranslationService
|
||||
@inject IdentityService IdentityService
|
||||
|
||||
<div class="app-sidebar-menu overflow-hidden flex-column-fluid">
|
||||
<div id="kt_app_sidebar_menu_wrapper" class="app-sidebar-wrapper hover-scroll-overlay-y my-5" data-kt-scroll="true" data-kt-scroll-activate="true" data-kt-scroll-height="auto" data-kt-scroll-dependencies="#kt_app_sidebar_logo, #kt_app_sidebar_footer" data-kt-scroll-wrappers="#kt_app_sidebar_menu" data-kt-scroll-offset="5px" data-kt-scroll-save-state="true">
|
||||
<div class="menu menu-column menu-rounded menu-sub-indention px-3" id="#kt_app_sidebar_menu" data-kt-menu="true" data-kt-menu-expand="false">
|
||||
@if (User == null)
|
||||
{
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/login">
|
||||
<span class="menu-icon">
|
||||
<i class="bx bxs-log-in"></i>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Login")</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/register">
|
||||
<span class="menu-icon">
|
||||
<i class="bx bx-user-plus"></i>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Register")</span>
|
||||
</a>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/">
|
||||
<span class="menu-icon">
|
||||
<i class="bx bx-layer"></i>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Dashboard")</span>
|
||||
</a>
|
||||
</div>
|
||||
<div data-kt-menu-trigger="click" class="menu-item menu-accordion">
|
||||
<span class="menu-link">
|
||||
<span class="menu-icon">
|
||||
<i class="bx bx-cart-alt"></i>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Order")</span>
|
||||
<span class="menu-arrow"></span>
|
||||
</span>
|
||||
<div class="menu-sub menu-sub-accordion">
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/store/website">
|
||||
<span class="menu-bullet">
|
||||
<span class="bullet bullet-dot"></span>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Website")</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/store/database">
|
||||
<span class="menu-bullet">
|
||||
<span class="bullet bullet-dot"></span>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Database")</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/store/domain">
|
||||
<span class="menu-bullet">
|
||||
<span class="bullet bullet-dot"></span>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Domain")</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/servers">
|
||||
<span class="menu-icon">
|
||||
<i class="bx bx-server"></i>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Servers")</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/websites">
|
||||
<span class="menu-icon">
|
||||
<i class="bx bx-globe"></i>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Websites")</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/databases">
|
||||
<span class="menu-icon">
|
||||
<i class="bx bx-data"></i>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Databases")</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/domains">
|
||||
<span class="menu-icon">
|
||||
<i class="bx bx-purchase-tag"></i>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Domains")</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/changelog">
|
||||
<span class="menu-icon">
|
||||
<i class="bx bx-notepad"></i>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Changelog")</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
if (User.Admin)
|
||||
{
|
||||
<div class="menu-item pt-5">
|
||||
<div class="menu-content">
|
||||
<span class="menu-heading fw-bold text-uppercase fs-7">@TranslationService.Translate("Sidebar.Menu.Admin")</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/admin">
|
||||
<span class="menu-icon">
|
||||
<i class="bx bx-layer"></i>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Dashboard")</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/admin/general">
|
||||
<span class="menu-icon">
|
||||
<i class="bx bx-chip"></i>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.System")</span>
|
||||
</a>
|
||||
</div>
|
||||
<div data-kt-menu-trigger="click" class="menu-item menu-accordion">
|
||||
<span class="menu-link">
|
||||
<span class="menu-icon">
|
||||
<i class="bx bx-server"></i>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Servers")</span>
|
||||
<span class="menu-arrow"></span>
|
||||
</span>
|
||||
<div class="menu-sub menu-sub-accordion">
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/admin/servers">
|
||||
<span class="menu-bullet">
|
||||
<span class="bullet bullet-dot"></span>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Overview")</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/admin/servers/manager">
|
||||
<span class="menu-bullet">
|
||||
<span class="bullet bullet-dot"></span>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Manager")</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/admin/servers/cleanup">
|
||||
<span class="menu-bullet">
|
||||
<span class="bullet bullet-dot"></span>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Cleanup")</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/admin/nodes">
|
||||
<span class="menu-bullet">
|
||||
<span class="bullet bullet-dot"></span>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Nodes")</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/admin/images">
|
||||
<span class="menu-bullet">
|
||||
<span class="bullet bullet-dot"></span>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Images")</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div data-kt-menu-trigger="click" class="menu-item menu-accordion">
|
||||
<span class="menu-link">
|
||||
<span class="menu-icon">
|
||||
<i class="bx bx-cube"></i>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.AaPanel")</span>
|
||||
<span class="menu-arrow"></span>
|
||||
</span>
|
||||
<div class="menu-sub menu-sub-accordion">
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/admin/aapanel/">
|
||||
<span class="menu-bullet">
|
||||
<span class="bullet bullet-dot"></span>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Overview")</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/admin/aapanel/databases">
|
||||
<span class="menu-bullet">
|
||||
<span class="bullet bullet-dot"></span>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Databases")</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/admin/users">
|
||||
<span class="menu-icon">
|
||||
<i class="bx bx-user"></i>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Users")</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/admin/support">
|
||||
<span class="menu-icon">
|
||||
<i class="bx bx-support"></i>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Support")</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="menu-item">
|
||||
<a class="menu-link" href="/admin/statistics">
|
||||
<span class="menu-icon">
|
||||
<i class="bx bx-objects-vertical-bottom"></i>
|
||||
</span>
|
||||
<span class="menu-title">@TranslationService.Translate("Sidebar.Menu.Statistics")</span>
|
||||
</a>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@code
|
||||
{
|
||||
private User? User;
|
||||
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
{
|
||||
if (firstRender)
|
||||
{
|
||||
User = await IdentityService.Get();
|
||||
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
}
|
||||
}
|
||||
52
Moonlight/Shared/Components/Partials/ThemeSwitcher.razor
Normal file
52
Moonlight/Shared/Components/Partials/ThemeSwitcher.razor
Normal file
@@ -0,0 +1,52 @@
|
||||
@inject IJSRuntime JsRuntime
|
||||
|
||||
<a href="#" class="@ToggleBtnClass" data-kt-menu-trigger="@Trigger" data-kt-menu-attach="parent" data-kt-menu-placement="@MenuPlacement">
|
||||
<i class="theme-light-show bx bx-sun"></i>
|
||||
<i class="theme-dark-show bx bx-moon" ></i>
|
||||
</a>
|
||||
|
||||
<div class="menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-title-gray-700 menu-icon-muted menu-active-bg menu-state-primary fw-semibold py-4 fs-base w-175px" data-kt-menu="true" data-kt-element="theme-mode-menu">
|
||||
<div class="menu-item px-3 my-0">
|
||||
<a href="#" class="menu-link px-3 py-2" data-kt-element="mode" data-kt-value="light" @onclick="TriggerFlashbang">
|
||||
<span class="menu-icon" data-kt-element="icon">
|
||||
<i class="bx bx-sun"></i>
|
||||
</span>
|
||||
<span class="menu-title">Lightmode</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="menu-item px-3 my-0">
|
||||
<a href="#" class="menu-link px-3 py-2" data-kt-element="mode" data-kt-value="dark">
|
||||
<span class="menu-icon" data-kt-element="icon">
|
||||
<i class="bx bx-moon"></i>
|
||||
</span>
|
||||
<span class="menu-title">Darkmode</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="menu-item px-3 my-0">
|
||||
<a href="#" class="menu-link px-3 py-2" data-kt-element="mode" data-kt-value="system">
|
||||
<span class="menu-icon" data-kt-element="icon">
|
||||
<i class="bx bx-cog"></i>
|
||||
</span>
|
||||
<span class="menu-title">System</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@code {
|
||||
[Parameter]
|
||||
public string ToggleBtnClass { get; set; } = "";
|
||||
|
||||
[Parameter]
|
||||
public string MenuPlacement { get; set; } = "bottom-end";
|
||||
|
||||
[Parameter]
|
||||
public string ToggleBtnIconClass { get; set; } = "svg-icon svg-icon-2";
|
||||
|
||||
[Parameter]
|
||||
public string Trigger { get; set; } = "{default:'click'}";
|
||||
|
||||
private async void TriggerFlashbang()
|
||||
{
|
||||
await JsRuntime.InvokeVoidAsync("flashbang");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user