mirror of
https://github.com/RaidMax/IW4M-Admin.git
synced 2025-06-10 23:31:13 -05:00
finish color code support (I think)
This commit is contained in:
@ -25,7 +25,7 @@ namespace WebfrontCore.Controllers
|
||||
|
||||
try
|
||||
{
|
||||
var privilegedClient = await Manager.GetClientService().Get(clientId);
|
||||
var privilegedClient = await Manager.GetClientService().GetClientForLogin(clientId);
|
||||
bool loginSuccess = false;
|
||||
#if DEBUG
|
||||
loginSuccess = clientId == 1;
|
||||
|
@ -52,6 +52,7 @@ namespace WebfrontCore.Controllers
|
||||
|
||||
ViewBag.Version = Manager.Version;
|
||||
ViewBag.IsFluid = false;
|
||||
ViewBag.EnableColorCodes = Manager.GetApplicationSettings().Configuration().EnableColorCodes;
|
||||
}
|
||||
|
||||
public override void OnActionExecuting(ActionExecutingContext context)
|
||||
@ -113,6 +114,7 @@ namespace WebfrontCore.Controllers
|
||||
ViewBag.Pages = Pages;
|
||||
ViewBag.Localization = Utilities.CurrentLocalization.LocalizationIndex;
|
||||
ViewBag.CustomBranding = Manager.GetApplicationSettings().Configuration().WebfrontCustomBranding ?? "IW4MAdmin";
|
||||
ViewBag.EnableColorCodes = Manager.GetApplicationSettings().Configuration().EnableColorCodes;
|
||||
|
||||
base.OnActionExecuting(context);
|
||||
}
|
||||
|
@ -90,12 +90,13 @@ namespace WebfrontCore.Controllers
|
||||
|
||||
clientDto.Meta.AddRange(Authorized ? meta : meta.Where(m => !m.Sensitive));
|
||||
|
||||
ViewBag.Title = clientDto.Name.Substring(clientDto.Name.Length - 1).ToLower()[0] == 's' ?
|
||||
clientDto.Name + "'" :
|
||||
clientDto.Name + "'s";
|
||||
string strippedName = clientDto.Name.StripColors();
|
||||
ViewBag.Title = strippedName.Substring(strippedName.Length - 1).ToLower()[0] == 's' ?
|
||||
strippedName + "'" :
|
||||
strippedName + "'s";
|
||||
ViewBag.Title += " " + Localization["WEBFRONT_CLIENT_PROFILE_TITLE"];
|
||||
ViewBag.Description = $"Client information for {clientDto.Name}";
|
||||
ViewBag.Keywords = $"IW4MAdmin, client, profile, {clientDto.Name}";
|
||||
ViewBag.Description = $"Client information for {strippedName}";
|
||||
ViewBag.Keywords = $"IW4MAdmin, client, profile, {strippedName}";
|
||||
|
||||
return View("Profile/Index", clientDto);
|
||||
}
|
||||
@ -130,7 +131,6 @@ namespace WebfrontCore.Controllers
|
||||
return View("Privileged/Index", adminsDict);
|
||||
}
|
||||
|
||||
|
||||
public async Task<IActionResult> FindAsync(string clientName)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(clientName))
|
||||
|
@ -16,16 +16,18 @@ namespace WebfrontCore.Controllers
|
||||
{
|
||||
if (fileName.EndsWith(".css"))
|
||||
{
|
||||
#if DEBUG
|
||||
string cssData = await System.IO.File.ReadAllTextAsync($"X:\\IW4MAdmin\\WebfrontCore\\wwwroot\\css\\{fileName}");
|
||||
cssData = await Manager.MiddlewareActionHandler.Execute(cssData, "custom_css_accent");
|
||||
return Content(cssData, "text/css");
|
||||
#endif
|
||||
if (!_fileCache.ContainsKey(fileName))
|
||||
{
|
||||
#if DEBUG
|
||||
string path = $"X:\\IW4MAdmin\\WebfrontCore\\wwwroot\\css\\{fileName}";
|
||||
#else
|
||||
|
||||
string path = $"wwwroot\\css\\{fileName}";
|
||||
#endif
|
||||
string cssData = await System.IO.File.ReadAllTextAsync(path);
|
||||
cssData = await Manager.MiddlewareActionHandler.Execute(cssData, "custom_css_accent");
|
||||
_fileCache.Add(fileName, cssData);
|
||||
string data = await System.IO.File.ReadAllTextAsync(path);
|
||||
data = await Manager.MiddlewareActionHandler.Execute(data, "custom_css_accent");
|
||||
_fileCache.Add(fileName, data);
|
||||
}
|
||||
|
||||
return Content(_fileCache[fileName], "text/css");
|
||||
|
41
WebfrontCore/TagHelpers/ColorCode.cs
Normal file
41
WebfrontCore/TagHelpers/ColorCode.cs
Normal file
@ -0,0 +1,41 @@
|
||||
using Microsoft.AspNetCore.Razor.TagHelpers;
|
||||
using SharedLibraryCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace WebfrontCore.TagHelpers
|
||||
{
|
||||
[HtmlTargetElement("color-code")]
|
||||
public class ColorCode : TagHelper
|
||||
{
|
||||
public string Value { get; set; }
|
||||
public bool Allow { get; set; } = false;
|
||||
|
||||
public override void Process(TagHelperContext context, TagHelperOutput output)
|
||||
{
|
||||
output.TagName = "ColorCode";
|
||||
output.TagMode = TagMode.StartTagAndEndTag;
|
||||
|
||||
if (Allow)
|
||||
{
|
||||
string updated = Value;
|
||||
|
||||
foreach (Match match in Regex.Matches(Value, @"\^([0-9]|\:)([^\^]*)"))
|
||||
{
|
||||
char colorCode = match.Groups[1].ToString().Last();
|
||||
updated = updated.Replace(match.Value, $"<span class='text-color-code-{(colorCode >= 48 && colorCode <= 57 ? colorCode.ToString() : ((int)colorCode).ToString())}'>{match.Groups[2].ToString()}</span>");
|
||||
}
|
||||
|
||||
output.PreContent.SetHtmlContent(updated);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
output.PreContent.SetHtmlContent(Value.StripColors());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -15,7 +15,11 @@
|
||||
@foreach (var client in Model)
|
||||
{
|
||||
<div class="row pt-2 pb-2 bg-dark">
|
||||
<div class="col-5">@Html.ActionLink(client.Name, "ProfileAsync", "Client", new { id = client.ClientId })</div>
|
||||
<div class="col-5">
|
||||
<a asp-controller="Client" asp-action="ProfileAsync" asp-route-id="@client.ClientId">
|
||||
<color-code value="@client.Name" allow="@ViewBag.EnableColorCodes"></color-code>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-4 level-color-@client.LevelInt">@client.Level</div>
|
||||
<div class="col-3 text-right">@client.LastConnectionText</div>
|
||||
</div>
|
||||
@ -32,7 +36,11 @@
|
||||
<div class="p-2">@loc["WEBFRONT_SEARCH_LAST_CONNECTED"]</div>
|
||||
</div>
|
||||
<div class="col-7 bg-dark border-bottom">
|
||||
<div class="p-2">@Html.ActionLink(client.Name, "ProfileAsync", "Client", new { id = client.ClientId },new { @class = "link-inverse" } )</div>
|
||||
<div class="p-2">
|
||||
<a asp-controller="Client" asp-action="ProfileAsync" asp-route-id="@client.ClientId" class="link-inverse">
|
||||
<color-code value="@client.Name" allow="@ViewBag.EnableColorCodes"></color-code>
|
||||
</a>
|
||||
</div>
|
||||
<div class="p-2 level-color-@client.LevelInt">@client.Level</div>
|
||||
<div class="p-2 text-white-50">@client.LastConnectionText</div>
|
||||
</div>
|
||||
|
@ -13,7 +13,10 @@
|
||||
<div class="col-12 bg-dark pt-2 pb-2">
|
||||
@foreach (var client in Model[key])
|
||||
{
|
||||
<span>@Html.ActionLink(client.Name, "profileasync", "client", new { id = client.ClientId }, new { @class = "" })</span><br />
|
||||
<a asp-controller="Client" asp-action="ProfileAsync" asp-route-id="@client.ClientId">
|
||||
<color-code value="@client.Name" allow="@ViewBag.EnableColorCodes"></color-code>
|
||||
</a>
|
||||
<br />
|
||||
}
|
||||
</div>
|
||||
}
|
||||
|
@ -25,7 +25,7 @@
|
||||
<!-- Name/Level Column -->
|
||||
<div class="d-block d-lg-inline-flex flex-column flex-fill text-center text-lg-left pb-3 pb-lg-0 pt-3 pt-lg-0 pl-3 pr-3">
|
||||
<div class="mt-n2 flex-fill d-block d-lg-inline-flex">
|
||||
<div id="profile_name" class="client-name h1 mb-0">@Model.Name</div>
|
||||
<div id="profile_name" class="client-name h1 mb-0"><color-code value="@Model.Name" allow="@ViewBag.EnableColorCodes"></color-code></div>
|
||||
@if (ViewBag.Authorized)
|
||||
{
|
||||
<div id="profile_aliases_btn" class="oi oi-caret-bottom h3 ml-0 ml-lg-2 mb-0 pt-lg-2 mt-lg-1"></div>
|
||||
@ -40,7 +40,7 @@
|
||||
}
|
||||
@foreach (string alias in Model.Aliases)
|
||||
{
|
||||
@alias<br />
|
||||
<color-code value="@alias" allow="@ViewBag.EnableColorCodes"></color-code><br />
|
||||
}
|
||||
|
||||
@foreach (string ip in Model.IPs)
|
||||
@ -89,7 +89,7 @@
|
||||
@foreach (var meta in metaColumn)
|
||||
{
|
||||
<div class="profile-meta-entry" title="@(string.IsNullOrEmpty(meta.Extra) ? meta.Key : meta.Extra)">
|
||||
<span class="profile-meta-value text-primary">@meta.Value</span>
|
||||
<span class="profile-meta-value text-primary"><color-code value="@meta.Value" allow="@ViewBag.EnableColorCodes"></color-code></span>
|
||||
<span class="profile-meta-title text-muted"> @meta.Key</span>
|
||||
</div>
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
<div class="row justify-content-center">
|
||||
<div id="console" class="col-md-8">
|
||||
@Html.DropDownList("Server", Model.Select(s => new SelectListItem() { Text = s.Name, Value = s.ID.ToString() }).ToList(), new { @class = "form-control bg-dark text-light", id = "console_server_select" })
|
||||
@Html.DropDownList("Server", Model.Select(s => new SelectListItem() { Text = SharedLibraryCore.Utilities.StripColors(s.Name), Value = s.ID.ToString() }).ToList(), new { @class = "form-control bg-dark text-light", id = "console_server_select" })
|
||||
<div id="console_command_response" class="bg-dark p-3">
|
||||
</div>
|
||||
<div class="form-row">
|
||||
|
@ -8,7 +8,9 @@
|
||||
<tr class="d-table-row d-lg-none bg-dark">
|
||||
<th scope="row" class="bg-primary">@loc["WEBFRONT_PENALTY_TEMPLATE_NAME"]</th>
|
||||
<td>
|
||||
@Html.ActionLink(Model.OffenderName, "ProfileAsync", "Client", new { id = Model.OffenderId }, new { @class = "link-inverse" })
|
||||
<a asp-controller="Client" asp-action="ProfileAsync" asp-route-id="@Model.OffenderId" class="link-inverse">
|
||||
<color-code value="@Model.OffenderName" allow="@ViewBag.EnableColorCodes"></color-code>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@ -22,14 +24,14 @@
|
||||
<tr class="d-table-row d-lg-none bg-dark">
|
||||
<th scope="row" class="bg-primary">@loc["WEBFRONT_PENALTY_TEMPLATE_OFFENSE"]</th>
|
||||
<td class="text-light">
|
||||
@($"{Model.Offense}{(ViewBag.Authorized ? Model.AdditionalPenaltyInformation : "")}")
|
||||
<color-code value="@($"{Model.Offense}{(ViewBag.Authorized ? Model.AdditionalPenaltyInformation : "")}")" allow="@ViewBag.EnableColorCodes"></color-code>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr class="d-table-row d-lg-none bg-dark">
|
||||
<th scope="row" class="bg-primary">@loc["WEBFRONT_PENALTY_TEMPLATE_ADMIN"]</th>
|
||||
<td>
|
||||
@Html.ActionLink(Model.PunisherName, "ProfileAsync", "Client", new { id = Model.PunisherId }, new { @class = "level-color-" + (int)Model.PunisherLevel })
|
||||
@Html.ActionLink(SharedLibraryCore.Utilities.StripColors(Model.PunisherName), "ProfileAsync", "Client", new { id = Model.PunisherId }, new { @class = "level-color-" + (int)Model.PunisherLevel })
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@ -51,16 +53,18 @@
|
||||
|
||||
<tr class="d-none d-lg-table-row">
|
||||
<td>
|
||||
@Html.ActionLink(Model.OffenderName, "ProfileAsync", "Client", new { id = Model.OffenderId }, new { @class = "link-inverse" })
|
||||
<a asp-controller="Client" asp-action="ProfileAsync" asp-route-id="@Model.OffenderId" class="link-inverse">
|
||||
<color-code value="@Model.OffenderName" allow="@ViewBag.EnableColorCodes"></color-code>
|
||||
</a>
|
||||
</td>
|
||||
<td class="penalties-color-@Model.PenaltyTypeText.ToLower()">
|
||||
@Model.PenaltyType
|
||||
</td>
|
||||
<td class="text-light w-50">
|
||||
@($"{Model.Offense}{(ViewBag.Authorized ? Model.AdditionalPenaltyInformation : "")}")
|
||||
<color-code value="@($"{Model.Offense}{(ViewBag.Authorized ? Model.AdditionalPenaltyInformation : "")}")" allow="@ViewBag.EnableColorCodes"></color-code>
|
||||
</td>
|
||||
<td>
|
||||
@Html.ActionLink(Model.PunisherName, "ProfileAsync", "Client", new { id = Model.PunisherId }, new { @class = "level-color-" + (int)Model.PunisherLevel })
|
||||
@Html.ActionLink(SharedLibraryCore.Utilities.StripColors(Model.PunisherName), "ProfileAsync", "Client", new { id = Model.PunisherId }, new { @class = "level-color-" + (int)Model.PunisherLevel })
|
||||
</td>
|
||||
<td class="text-right text-light">
|
||||
@{
|
||||
|
@ -41,7 +41,10 @@
|
||||
continue;
|
||||
}
|
||||
string levelColorClass = !ViewBag.Authorized ? "" : $"level-color-{Model.Players[i].LevelInt}";
|
||||
<span>@Html.ActionLink(Model.Players[i].Name, "ProfileAsync", "Client", new { id = Model.Players[i].ClientId }, new { @class = levelColorClass })</span><br />
|
||||
<a asp-controller="Client" asp-action="ProfileAsync" asp-route-id="@Model.Players[i].ClientId" class="@levelColorClass">
|
||||
<color-code value="@Model.Players[i].Name" allow="@ViewBag.EnableColorCodes"></color-code>
|
||||
</a>
|
||||
<br />
|
||||
}
|
||||
}
|
||||
</div>
|
||||
@ -54,7 +57,10 @@
|
||||
continue;
|
||||
}
|
||||
string levelColorClass = !ViewBag.Authorized ? "" : $"level-color-{Model.Players[i].LevelInt}";
|
||||
<span>@Html.ActionLink(Model.Players[i].Name, "ProfileAsync", "Client", new { id = Model.Players[i].ClientId }, new { @class = levelColorClass })</span><br />
|
||||
<a asp-controller="Client" asp-action="ProfileAsync" asp-route-id="@Model.Players[i].ClientId" class="@levelColorClass">
|
||||
<color-code value="@Model.Players[i].Name" allow="@ViewBag.EnableColorCodes"></color-code>
|
||||
</a>
|
||||
<br />
|
||||
}
|
||||
}
|
||||
</div>
|
||||
@ -86,7 +92,12 @@
|
||||
}
|
||||
if (Model.ChatHistory[i].Message != "CONNECTED" && Model.ChatHistory[i].Message != "DISCONNECTED")
|
||||
{
|
||||
<span class="text-light">@Model.ChatHistory[i].Name</span><span> — @Model.ChatHistory[i].Message.Substring(0, Math.Min(65, Model.ChatHistory[i].Message.Length)) </span><br />
|
||||
<span class="text-light">
|
||||
<color-code value="@Model.ChatHistory[i].Name" allow="@ViewBag.EnableColorCodes"></color-code>
|
||||
</span>
|
||||
<span> —
|
||||
<color-code value="@Model.ChatHistory[i].Message.Substring(0, Math.Min(40, Model.ChatHistory[i].Message.Length))" allow="@ViewBag.EnableColorCodes"></color-code>
|
||||
</span><br />
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,7 @@
|
||||
|
||||
<div class="row server-header pt-1 pb-1 bg-primary " id="server_header_@Model.ID">
|
||||
<div class="col-md-4 text-center text-md-left d-inline-flex justify-content-center justify-content-md-start">
|
||||
<span>@Model.Name</span>
|
||||
<color-code value="@Model.Name" allow="@ViewBag.EnableColorCodes"></color-code>
|
||||
<a href="@Model.ConnectProtocolUrl" class="ml-2 mr-2 align-self-center d-none d-md-flex server-join-button" title="@SharedLibraryCore.Utilities.CurrentLocalization.LocalizationIndex["WEBFRONT_HOME_JOIN_DESC"]">
|
||||
<span class="oi oi-play-circle mr-1 align-self-center"></span>
|
||||
<span class="server-header-ip-address" style="display:none;">@Model.IPAddress</span>
|
||||
|
@ -39,7 +39,9 @@
|
||||
{
|
||||
<div class="p-2 mb-3 border-bottom" style="background-color: #222;">
|
||||
<div class="d-flex flex-row">
|
||||
<a asp-controller="Client" asp-action="ProfileAsync" asp-route-id="@client.ClientId" class="h4 mr-auto">@client.Name</a>
|
||||
<a asp-controller="Client" asp-action="ProfileAsync" asp-route-id="@client.ClientId" class="h4 mr-auto">
|
||||
<color-code value="@client.Name" allow="@ViewBag.EnableColorCodes"></color-code>
|
||||
</a>
|
||||
<div class="client-location-flag align-self-center" data-ip="@client.IPAddress"></div>
|
||||
</div>
|
||||
<div class="d-flex flex-row">
|
||||
|
@ -51,18 +51,17 @@
|
||||
}
|
||||
|
||||
@switch (meta.Type)
|
||||
{
|
||||
|
||||
case SharedLibraryCore.Dtos.ProfileMeta.MetaType.ChatMessage:
|
||||
case SharedLibraryCore.Dtos.ProfileMeta.MetaType.QuickMessage:
|
||||
{
|
||||
case SharedLibraryCore.Dtos.ProfileMeta.MetaType.ChatMessage:
|
||||
case SharedLibraryCore.Dtos.ProfileMeta.MetaType.QuickMessage:
|
||||
<div class="profile-meta-entry loader-data-time" data-time="@meta.When">
|
||||
<span style="color:white;">></span>
|
||||
<span class="client-message text-muted @(meta.Type == SharedLibraryCore.Dtos.ProfileMeta.MetaType.QuickMessage ? "font-italic" : "")" data-serverid="@meta.Extra" data-when="@meta.When.ToFileTimeUtc()" title="@SharedLibraryCore.Utilities.CurrentLocalization.LocalizationIndex["WEBFRONT_PROFILE_MESSAGE_CONTEXT"]"> @meta.Value</span>
|
||||
<span class="client-message text-muted @(meta.Type == SharedLibraryCore.Dtos.ProfileMeta.MetaType.QuickMessage ? "font-italic" : "")" data-serverid="@meta.Extra" data-when="@meta.When.ToFileTimeUtc()" title="@SharedLibraryCore.Utilities.CurrentLocalization.LocalizationIndex["WEBFRONT_PROFILE_MESSAGE_CONTEXT"]"> <color-code value="@meta.Value" allow="@ViewBag.EnableColorCodes"></color-code></span>
|
||||
</div>
|
||||
break;
|
||||
case SharedLibraryCore.Dtos.ProfileMeta.MetaType.ReceivedPenalty:
|
||||
case SharedLibraryCore.Dtos.ProfileMeta.MetaType.Penalized:
|
||||
<div class="profile-meta-entry loader-data-time" data-time="@meta.When">@Html.Raw(formatPenalty(meta))</div>
|
||||
<div class="profile-meta-entry loader-data-time" data-time="@meta.When"><color-code value="@Html.Raw(formatPenalty(meta))" allow="@ViewBag.EnableColorCodes"></color-code></div>
|
||||
break;
|
||||
}
|
||||
}
|
@ -1,2 +1,3 @@
|
||||
@using WebfrontCore
|
||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||
@addTagHelper *, WebfrontCore
|
@ -264,3 +264,73 @@ form *, select {
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat
|
||||
}
|
||||
|
||||
.text-color-code-0 {
|
||||
color: $dark;
|
||||
}
|
||||
|
||||
.text-color-code-1 {
|
||||
color: $red;
|
||||
}
|
||||
|
||||
.text-color-code-2 {
|
||||
color: $green;
|
||||
}
|
||||
|
||||
.text-color-code-3 {
|
||||
color: $yellow;
|
||||
}
|
||||
|
||||
.text-color-code-4 {
|
||||
color: $blue;
|
||||
}
|
||||
|
||||
.text-color-code-5 {
|
||||
color: $teal;
|
||||
}
|
||||
|
||||
.text-color-code-5 {
|
||||
color: $purple;
|
||||
}
|
||||
|
||||
.text-color-code-7 {
|
||||
color: $white;
|
||||
}
|
||||
|
||||
.text-color-code-8, .text-color-code-9 {
|
||||
color: grey;
|
||||
}
|
||||
|
||||
.text-color-code-58 {
|
||||
animation: color-change 60s infinite;
|
||||
}
|
||||
|
||||
@keyframes color-change {
|
||||
0% {
|
||||
color: #ff0000;
|
||||
}
|
||||
|
||||
16.66% {
|
||||
color: #ffff00;
|
||||
}
|
||||
|
||||
33.33% {
|
||||
color: #00ff00;
|
||||
}
|
||||
|
||||
50% {
|
||||
color: #00ffff;
|
||||
}
|
||||
|
||||
66.66% {
|
||||
color: #0000ff;
|
||||
}
|
||||
|
||||
83.33% {
|
||||
color: #ff00ff;
|
||||
}
|
||||
|
||||
100% {
|
||||
color: #ff0000;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user