mirror of
https://github.com/LBPUnion/ProjectLighthouse.git
synced 2025-08-27 04:38:03 +00:00
Merge main into crowdin
This commit is contained in:
commit
d96cc5786b
335 changed files with 5039 additions and 3021 deletions
|
@ -0,0 +1,210 @@
|
|||
@using LBPUnion.ProjectLighthouse.Configuration
|
||||
@using LBPUnion.ProjectLighthouse.Extensions
|
||||
@using LBPUnion.ProjectLighthouse.Helpers
|
||||
@using LBPUnion.ProjectLighthouse.Localization.StringLists
|
||||
@using LBPUnion.ProjectLighthouse.Types
|
||||
@model LBPUnion.ProjectLighthouse.Servers.Website.Pages.Layouts.BaseLayout
|
||||
|
||||
@{
|
||||
if (Model!.User == null)
|
||||
{
|
||||
Model.NavigationItemsRight.Add(new PageNavigationItem(BaseLayoutStrings.HeaderLoginRegister, "/login", "sign in"));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ServerConfiguration.Instance.Authentication.UseExternalAuth)
|
||||
{
|
||||
Model.NavigationItems.Add(new PageNavigationItem(BaseLayoutStrings.HeaderAuthentication, "/authentication", "key"));
|
||||
}
|
||||
Model.NavigationItemsRight.Add(new PageNavigationItem(BaseLayoutStrings.HeaderProfile, "/user/" + Model.User.UserId, "user alternate"));
|
||||
|
||||
@if (Model.User.IsAdmin)
|
||||
{
|
||||
Model.NavigationItemsRight.Add(new PageNavigationItem(BaseLayoutStrings.HeaderAdminPanel, "/admin", "cogs"));
|
||||
}
|
||||
Model.NavigationItemsRight.Add(new PageNavigationItem(BaseLayoutStrings.HeaderLogout, "/logout", "user alternate slash")); // should always be last
|
||||
}
|
||||
|
||||
Model.IsMobile = Model.Request.IsMobile();
|
||||
}
|
||||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
@if (Model.Title == string.Empty)
|
||||
{
|
||||
<title>@ServerConfiguration.Instance.Customization.ServerName</title>
|
||||
}
|
||||
else
|
||||
{
|
||||
<title>@ServerConfiguration.Instance.Customization.ServerName - @Model.Title</title>
|
||||
}
|
||||
<link rel="stylesheet" type="text/css" href="~/css/styles.css">
|
||||
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/fomantic-ui@2.8.8/dist/semantic.min.css">
|
||||
|
||||
@* Favicon *@
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
||||
<link rel="manifest" href="/site.webmanifest">
|
||||
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#008cff">
|
||||
<meta name="msapplication-TileColor" content="#008cff">
|
||||
|
||||
@* Embed Stuff *@
|
||||
<meta name="theme-color" data-react-helmet="true" content="#008cff">
|
||||
<meta content="@ServerConfiguration.Instance.Customization.ServerName - @Model.Title" property="og:title">
|
||||
@if (!string.IsNullOrEmpty(Model.Description))
|
||||
{
|
||||
<meta content="@Model.Description" property="og:description">
|
||||
}
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
@* Google Analytics *@
|
||||
@if (ServerConfiguration.Instance.GoogleAnalytics.AnalyticsEnabled)
|
||||
{
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=@ServerConfiguration.Instance.GoogleAnalytics.Id"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', '@ServerConfiguration.Instance.GoogleAnalytics.Id');
|
||||
</script>
|
||||
}
|
||||
</head>
|
||||
<body>
|
||||
<div class="pageContainer">
|
||||
<header class="lighthouse-header">
|
||||
<div class="ui attached menu">
|
||||
<div class="ui container">
|
||||
@{
|
||||
string mobileIconStyle = Model.IsMobile ? "margin-right: 0;" : "";
|
||||
}
|
||||
@foreach (PageNavigationItem navigationItem in Model!.NavigationItems)
|
||||
{
|
||||
<a class="item" href="@navigationItem.Url">
|
||||
@if (navigationItem.Icon != null)
|
||||
{
|
||||
<i class="@navigationItem.Icon icon" style="@mobileIconStyle"></i>
|
||||
}
|
||||
|
||||
@if (!Model.IsMobile)
|
||||
{
|
||||
@Model.Translate(navigationItem.Name)
|
||||
}
|
||||
</a>
|
||||
}
|
||||
<div class="right menu">
|
||||
@foreach (PageNavigationItem navigationItem in Model!.NavigationItemsRight)
|
||||
{
|
||||
<a class="item" href="@navigationItem.Url">
|
||||
@if (navigationItem.Icon != null)
|
||||
{
|
||||
<i class="@navigationItem.Icon icon" style="@mobileIconStyle"></i>
|
||||
}
|
||||
|
||||
@if (!Model.IsMobile)
|
||||
{
|
||||
@Model.Translate(navigationItem.Name)
|
||||
}
|
||||
</a>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<noscript>
|
||||
<div class="ui bottom attached yellow message small">
|
||||
<div class="ui container">
|
||||
<div style="display: flex; align-items: center; font-size: 1.2rem;">
|
||||
<i class="warning icon"></i>
|
||||
<span style="font-size: 1.2rem;">JavaScript not enabled</span>
|
||||
</div>
|
||||
<p>
|
||||
While we intend to have as little JavaScript as possible, we can not
|
||||
guarantee everything will work without it. We recommend that you whitelist JavaScript for Project Lighthouse.
|
||||
It's not <i>too</i> bloated, we promise.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</noscript>
|
||||
@if (!ServerStatics.IsDebug && VersionHelper.IsDirty)
|
||||
{
|
||||
<div class="ui bottom attached red message large">
|
||||
<div class="ui container">
|
||||
<i class="warning icon"></i>
|
||||
<span style="font-size: 1.2rem;">Potential License Violation</span>
|
||||
<p>This instance is a public-facing instance that has been modified without the changes published. You may be in violation of the <a href="https://github.com/LBPUnion/project-lighthouse/blob/main/LICENSE">GNU Affero General Public License v3.0</a>.</p>
|
||||
<p>If you believe this is an error, please create an issue with the output of <code>git status</code> ran from the root of the server source code in the description on our <a href="https://github.com/LBPUnion/project-lighthouse/issues">issue tracker</a>.</p>
|
||||
<p>If not, please publish the source code somewhere accessible to your users.</p>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</header>
|
||||
<div class="main">
|
||||
<div class="ui container">
|
||||
<br>
|
||||
@if (Model.ShowTitleInPage)
|
||||
{
|
||||
<h1>@Model.Title</h1>
|
||||
}
|
||||
@RenderBody()
|
||||
<div style="height: 50px;"></div> @* makes it look nicer *@
|
||||
</div>
|
||||
</div>
|
||||
<footer>
|
||||
<div class="ui black attached inverted segment">
|
||||
<div class="ui container">
|
||||
|
||||
<p>Page generated by @VersionHelper.FullVersion.</p>
|
||||
@if (VersionHelper.IsDirty)
|
||||
{
|
||||
<p>This page was generated using a modified version of Project Lighthouse. Please make sure you are properly disclosing the source code to any users who may be using this instance.</p>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
@if (ServerStatics.IsDebug)
|
||||
{
|
||||
<div class="ui red attached inverted segment">
|
||||
<div class="ui container">
|
||||
<button type="button" class="ui inverted button collapsible">
|
||||
<b>Show/Hide Debug Info</b>
|
||||
</button>
|
||||
|
||||
<div style="display:none" id="lighthouse-debug-info">
|
||||
<br>
|
||||
<p>Model.IsMobile: @Model.IsMobile</p>
|
||||
<p>Model.Title: @Model.Title</p>
|
||||
<p>Model.Description: @Model.Description</p>
|
||||
<p>Model.User.UserId: @(Model.User?.UserId.ToString() ?? "(not logged in)")</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const collapsible = document.getElementsByClassName("collapsible");
|
||||
|
||||
for (let i = 0; i < collapsible.length; i++)
|
||||
{
|
||||
collapsible[i].addEventListener("click", function()
|
||||
{
|
||||
this.classList.toggle("active");
|
||||
const content = this.nextElementSibling;
|
||||
if (content.style.display === "block")
|
||||
{
|
||||
content.style.display = "none";
|
||||
}
|
||||
else
|
||||
{
|
||||
content.style.display = "block";
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
}
|
||||
</footer>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,63 @@
|
|||
#nullable enable
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using LBPUnion.ProjectLighthouse.Localization;
|
||||
using LBPUnion.ProjectLighthouse.Localization.StringLists;
|
||||
using LBPUnion.ProjectLighthouse.PlayerData.Profiles;
|
||||
using LBPUnion.ProjectLighthouse.Types;
|
||||
using Microsoft.AspNetCore.Localization;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
|
||||
namespace LBPUnion.ProjectLighthouse.Servers.Website.Pages.Layouts;
|
||||
|
||||
public class BaseLayout : PageModel
|
||||
{
|
||||
public readonly Database Database;
|
||||
|
||||
public readonly List<PageNavigationItem> NavigationItems = new();
|
||||
|
||||
public readonly List<PageNavigationItem> NavigationItemsRight = new();
|
||||
public string Description = string.Empty;
|
||||
|
||||
public bool IsMobile;
|
||||
|
||||
public bool ShowTitleInPage = true;
|
||||
|
||||
public string Title = string.Empty;
|
||||
|
||||
private User? user;
|
||||
public BaseLayout(Database database)
|
||||
{
|
||||
this.Database = database;
|
||||
|
||||
this.NavigationItems.Add(new PageNavigationItem(BaseLayoutStrings.HeaderHome, "/", "home"));
|
||||
this.NavigationItems.Add(new PageNavigationItem(BaseLayoutStrings.HeaderUsers, "/users/0", "user friends"));
|
||||
this.NavigationItems.Add(new PageNavigationItem(BaseLayoutStrings.HeaderPhotos, "/photos/0", "camera"));
|
||||
this.NavigationItems.Add(new PageNavigationItem(BaseLayoutStrings.HeaderSlots, "/slots/0", "certificate"));
|
||||
}
|
||||
|
||||
public new User? User {
|
||||
get {
|
||||
if (this.user != null) return this.user;
|
||||
|
||||
return this.user = this.Database.UserFromWebRequest(this.Request);
|
||||
}
|
||||
set => this.user = value;
|
||||
}
|
||||
|
||||
public string Translate(TranslatableString translatableString)
|
||||
{
|
||||
string lang;
|
||||
IRequestCultureFeature? requestCulture = Request.HttpContext.Features.Get<IRequestCultureFeature>();
|
||||
|
||||
if (requestCulture == null) lang = LocalizationManager.DefaultLang;
|
||||
else
|
||||
{
|
||||
lang = requestCulture.RequestCulture.UICulture.Name;
|
||||
}
|
||||
|
||||
Console.WriteLine(lang);
|
||||
|
||||
return translatableString.Translate(lang);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue