Added moonlight resources. Optimised moonlight legacy html rendering

This commit is contained in:
Marcel Baumgartner
2023-02-15 21:25:51 +01:00
parent 8c67273d40
commit 764ff894af
117 changed files with 82725 additions and 1207 deletions

View 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>

View 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);
}
}

View 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>

View 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();
}
}
}

View 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);
}
}
}

View 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");
}
}