From 218389ae06a251a7b130e12535bb1c39eafcc04d Mon Sep 17 00:00:00 2001 From: Eveldee Date: Fri, 16 May 2025 22:16:11 +0200 Subject: [PATCH] Add translator web ui --- PoyoLang.Test/Program.cs | 2 +- PoyoLang.Translator.Web/Components/App.razor | 21 +++ .../Components/Layout/MainLayout.razor | 101 ++++++++++++ .../Components/Pages/Counter.razor | 19 +++ .../Components/Pages/Error.razor | 38 +++++ .../Components/Pages/Home.razor | 145 ++++++++++++++++++ .../Components/Routes.razor | 6 + .../Components/_Imports.razor | 12 ++ .../PoyoLang.Translator.Web.csproj | 20 +++ PoyoLang.Translator.Web/Program.cs | 34 ++++ .../Properties/launchSettings.json | 23 +++ .../appsettings.Development.json | 8 + PoyoLang.Translator.Web/appsettings.json | 9 ++ PoyoLang.Translator.Web/wwwroot/favicon.ico | Bin 0 -> 16958 bytes PoyoLang.Translator.Web/wwwroot/favicon.png | Bin 0 -> 2558 bytes .../wwwroot/favicon_x512.png | Bin 0 -> 17964 bytes PoyoLang.sln | 6 + docker-publish.sh | 12 ++ 18 files changed, 455 insertions(+), 1 deletion(-) create mode 100644 PoyoLang.Translator.Web/Components/App.razor create mode 100644 PoyoLang.Translator.Web/Components/Layout/MainLayout.razor create mode 100644 PoyoLang.Translator.Web/Components/Pages/Counter.razor create mode 100644 PoyoLang.Translator.Web/Components/Pages/Error.razor create mode 100644 PoyoLang.Translator.Web/Components/Pages/Home.razor create mode 100644 PoyoLang.Translator.Web/Components/Routes.razor create mode 100644 PoyoLang.Translator.Web/Components/_Imports.razor create mode 100644 PoyoLang.Translator.Web/PoyoLang.Translator.Web.csproj create mode 100644 PoyoLang.Translator.Web/Program.cs create mode 100644 PoyoLang.Translator.Web/Properties/launchSettings.json create mode 100644 PoyoLang.Translator.Web/appsettings.Development.json create mode 100644 PoyoLang.Translator.Web/appsettings.json create mode 100644 PoyoLang.Translator.Web/wwwroot/favicon.ico create mode 100644 PoyoLang.Translator.Web/wwwroot/favicon.png create mode 100644 PoyoLang.Translator.Web/wwwroot/favicon_x512.png create mode 100644 docker-publish.sh diff --git a/PoyoLang.Test/Program.cs b/PoyoLang.Test/Program.cs index c041419..68c9f1a 100644 --- a/PoyoLang.Test/Program.cs +++ b/PoyoLang.Test/Program.cs @@ -22,4 +22,4 @@ Console.WriteLine(); var original = translator.TranslateFromPoyo(translated); Console.WriteLine("Translated back from Poyo:"); -Console.WriteLine(original); \ No newline at end of file +Console.WriteLine(original); diff --git a/PoyoLang.Translator.Web/Components/App.razor b/PoyoLang.Translator.Web/Components/App.razor new file mode 100644 index 0000000..1b1df12 --- /dev/null +++ b/PoyoLang.Translator.Web/Components/App.razor @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/PoyoLang.Translator.Web/Components/Layout/MainLayout.razor b/PoyoLang.Translator.Web/Components/Layout/MainLayout.razor new file mode 100644 index 0000000..75d05d3 --- /dev/null +++ b/PoyoLang.Translator.Web/Components/Layout/MainLayout.razor @@ -0,0 +1,101 @@ +@inherits LayoutComponentBase + + + + + + + + PoyoLang + + + + + + + @Body + + + + + +
+ An unhandled error has occurred. + Reload + 🗙 +
+ +@code { + private bool _drawerOpen = true; + private bool _isDarkMode = true; + private MudTheme? _theme = null; + + protected override void OnInitialized() + { + base.OnInitialized(); + + _theme = new() + { + PaletteLight = _lightPalette, + PaletteDark = _darkPalette, + LayoutProperties = new LayoutProperties() + }; + } + + private void DrawerToggle() + { + _drawerOpen = !_drawerOpen; + } + + private void DarkModeToggle() + { + _isDarkMode = !_isDarkMode; + } + + private readonly PaletteLight _lightPalette = new() + { + Black = "#110e2d", + AppbarText = "#424242", + AppbarBackground = "rgba(255,255,255,0.8)", + DrawerBackground = "#ffffff", + GrayLight = "#e8e8e8", + GrayLighter = "#f9f9f9", + }; + + private readonly PaletteDark _darkPalette = new() + { + Primary = "#7e6fff", + Surface = "#1e1e2d", + Background = "#1a1a27", + BackgroundGray = "#151521", + AppbarText = "#92929f", + AppbarBackground = "rgba(26,26,39,0.8)", + DrawerBackground = "#1a1a27", + ActionDefault = "#74718e", + ActionDisabled = "#9999994d", + ActionDisabledBackground = "#605f6d4d", + TextPrimary = "#b2b0bf", + TextSecondary = "#92929f", + TextDisabled = "#ffffff33", + DrawerIcon = "#92929f", + DrawerText = "#92929f", + GrayLight = "#2a2833", + GrayLighter = "#1e1e2d", + Info = "#4a86ff", + Success = "#3dcb6c", + Warning = "#ffb545", + Error = "#ff3f5f", + LinesDefault = "#33323e", + TableLines = "#33323e", + Divider = "#292838", + OverlayLight = "#1e1e2d80", + }; + + public string DarkLightModeButtonIcon => _isDarkMode switch + { + true => Icons.Material.Rounded.AutoMode, + false => Icons.Material.Outlined.DarkMode, + }; + +} \ No newline at end of file diff --git a/PoyoLang.Translator.Web/Components/Pages/Counter.razor b/PoyoLang.Translator.Web/Components/Pages/Counter.razor new file mode 100644 index 0000000..9a1cf03 --- /dev/null +++ b/PoyoLang.Translator.Web/Components/Pages/Counter.razor @@ -0,0 +1,19 @@ +@page "/counter" + +Counter + +Counter + +Current count: @currentCount + +Click me + +@code { + private int currentCount = 0; + + private void IncrementCount() + { + currentCount++; + } + +} \ No newline at end of file diff --git a/PoyoLang.Translator.Web/Components/Pages/Error.razor b/PoyoLang.Translator.Web/Components/Pages/Error.razor new file mode 100644 index 0000000..30c1b33 --- /dev/null +++ b/PoyoLang.Translator.Web/Components/Pages/Error.razor @@ -0,0 +1,38 @@ +@page "/Error" +@using System.Diagnostics + +Error + +

Error.

+

An error occurred while processing your request.

+ +@if (ShowRequestId) +{ +

+ Request ID: @RequestId +

+} + +

Development Mode

+

+ Swapping to Development environment will display more detailed information about the error that occurred. +

+

+ The Development environment shouldn't be enabled for deployed applications. + It can result in displaying sensitive information from exceptions to end users. + For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development + and restarting the app. +

+ +@code{ + + [CascadingParameter] + private HttpContext? HttpContext { get; set; } + + private string? RequestId { get; set; } + private bool ShowRequestId => !string.IsNullOrEmpty(RequestId); + + protected override void OnInitialized() => + RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier; + +} \ No newline at end of file diff --git a/PoyoLang.Translator.Web/Components/Pages/Home.razor b/PoyoLang.Translator.Web/Components/Pages/Home.razor new file mode 100644 index 0000000..7bf6287 --- /dev/null +++ b/PoyoLang.Translator.Web/Components/Pages/Home.razor @@ -0,0 +1,145 @@ +@page "/" +@using PoyoLang.Translator +@inject PoyoLangTranslator Translator +@inject IJSRuntime JsRuntime +@inject ISnackbar Snackbar + +Home + +PoyoLang Translator +Using this website you can freely translate from and to the Poyo language. + This language only use variations of the word "poyo" (320 of them!) to write sentences using the latin alphabet. + If you want more information about how this language works and how it is possible to translate to and from it, + check out the source code of this whole project. + + + + + + +@* Wide screen display *@ + + + + + + + + + + + + + + + + + + + + + + + + + + +@* Mobile display *@ + + + + + + + + + + + + + + + + + + + + + + + + + + +@code { + + private const string EnglishSourceLanguage = "English"; + private const string PoyoSourceLanguage = "PoyoLang"; + + private string _sourceText = ""; + private string _translatedText = ""; + private string _sourceLanguage = EnglishSourceLanguage; + + protected override void OnInitialized() + { + Snackbar.Configuration.PositionClass = Defaults.Classes.Position.BottomCenter; + } + + private void SourceLanguageUpdated() + { + UpdateTranslatedText(); + } + + private void SwapArrowClicked() + { + _sourceLanguage = _sourceLanguage switch + { + PoyoSourceLanguage => EnglishSourceLanguage, + _ => PoyoSourceLanguage + }; + + SwapLanguages(); + } + + private void SwapLanguages() + { + _sourceText = _translatedText; + + UpdateTranslatedText(); + } + + private void UpdateTranslatedText() + { + string result; + + if (_sourceLanguage is PoyoSourceLanguage) + { + result = Translator.TranslateFromPoyo(_sourceText); + } + else + { + result = Translator.TranslateToPoyo(_sourceText); + } + + _translatedText = result; + } + + private async Task CopyResultClicked() + { + await JsRuntime.InvokeVoidAsync("navigator.clipboard.writeText", _translatedText); + + Snackbar.Add("Translation result copied to clipboard!", Severity.Info); + } + + private void ClearButtonClicked() + { + _sourceText = string.Empty; + } + +} \ No newline at end of file diff --git a/PoyoLang.Translator.Web/Components/Routes.razor b/PoyoLang.Translator.Web/Components/Routes.razor new file mode 100644 index 0000000..ae94e9e --- /dev/null +++ b/PoyoLang.Translator.Web/Components/Routes.razor @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/PoyoLang.Translator.Web/Components/_Imports.razor b/PoyoLang.Translator.Web/Components/_Imports.razor new file mode 100644 index 0000000..92a62ee --- /dev/null +++ b/PoyoLang.Translator.Web/Components/_Imports.razor @@ -0,0 +1,12 @@ +@using System.Net.Http +@using System.Net.Http.Json +@using Microsoft.AspNetCore.Components.Forms +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.AspNetCore.Components.Web +@using static Microsoft.AspNetCore.Components.Web.RenderMode +@using Microsoft.AspNetCore.Components.Web.Virtualization +@using Microsoft.JSInterop +@using MudBlazor +@using MudBlazor.Services +@using PoyoLang.Translator.Web +@using PoyoLang.Translator.Web.Components \ No newline at end of file diff --git a/PoyoLang.Translator.Web/PoyoLang.Translator.Web.csproj b/PoyoLang.Translator.Web/PoyoLang.Translator.Web.csproj new file mode 100644 index 0000000..c001c64 --- /dev/null +++ b/PoyoLang.Translator.Web/PoyoLang.Translator.Web.csproj @@ -0,0 +1,20 @@ + + + + net9.0 + enable + enable + PoyoLang.Translator.Web + 0.1.0 + + + + + + + + + + + + \ No newline at end of file diff --git a/PoyoLang.Translator.Web/Program.cs b/PoyoLang.Translator.Web/Program.cs new file mode 100644 index 0000000..76586c9 --- /dev/null +++ b/PoyoLang.Translator.Web/Program.cs @@ -0,0 +1,34 @@ +using MudBlazor.Services; +using PoyoLang.Translator; +using PoyoLang.Translator.Web.Components; + +var builder = WebApplication.CreateBuilder(args); + +// Add MudBlazor services +builder.Services.AddMudServices(); + +// Add services to the container. +builder.Services.AddRazorComponents() + .AddInteractiveServerComponents(); + +builder.Services.AddSingleton(); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (!app.Environment.IsDevelopment()) +{ + app.UseExceptionHandler("/Error", createScopeForErrors: true); + // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. + app.UseHsts(); +} + +app.UseHttpsRedirection(); + +app.UseAntiforgery(); + +app.MapStaticAssets(); +app.MapRazorComponents() + .AddInteractiveServerRenderMode(); + +app.Run(); \ No newline at end of file diff --git a/PoyoLang.Translator.Web/Properties/launchSettings.json b/PoyoLang.Translator.Web/Properties/launchSettings.json new file mode 100644 index 0000000..a738dbf --- /dev/null +++ b/PoyoLang.Translator.Web/Properties/launchSettings.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:5083", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:7137;http://localhost:5083", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } + } diff --git a/PoyoLang.Translator.Web/appsettings.Development.json b/PoyoLang.Translator.Web/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/PoyoLang.Translator.Web/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/PoyoLang.Translator.Web/appsettings.json b/PoyoLang.Translator.Web/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/PoyoLang.Translator.Web/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/PoyoLang.Translator.Web/wwwroot/favicon.ico b/PoyoLang.Translator.Web/wwwroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8ec8bd6305614b5244b5865b9b99cfc055cf64f7 GIT binary patch literal 16958 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 UwNd@~yxM;c;_)^7`-T1bFTzcLH~;_u literal 0 HcmV?d00001 diff --git a/PoyoLang.Translator.Web/wwwroot/favicon.png b/PoyoLang.Translator.Web/wwwroot/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..df40e9041927d51446d8ab5c840c4020b8841547 GIT binary patch literal 2558 zcmVD3MQ&Zb| zX{Tn|$uBXYC@U@tC>N7pCTUZX%tTFRG$v^}HjScf8ixg$s9XgE7FaF|yDYc80ZDZ7 z^gQqNocEmfvMludAv^Q^0bz&ze811-oEMh>z>;sWT>k)W%k>Z7wp{-JZj1dwc_rhK zyktBaOvFY36`vj<3PEgYSkm<55KK=D!qmh7OpOO&5*6)-iLpKyAM1tjNC2X!a1V@) zb`y0$WaJ)%M>-)K>V(nZ4x)A#8M><}G}tO>c%U^nJkXN2WRYIB2FUOcNW{Z3d~8HA zAT|}!;U^JZHb8?n8bIKq;cm%*h-yFx4d}2jpaq6d!NoDbfdM3W1zt~oL`i?hJpHH& z->at|R@2uF7!8Tw+gJmFsOI4R-GD?a^eq*fho{pYFr?pSDF2=`%fC%6f6aiwU^Cd` zEU*Ej&lLkkD0sT`hqTg{(^pELN`LR(y_%%*A2F7HyH)?|2K2jN0KQmwC3&mCXGmX# z-?L{AmHs`8^jQOx@^{Ywoc7$rXW$KkFUn4S+5kR%yYg?<%HKT$ro{03_U#jjE_qsL zfJnP{@8+bXKcJ^S(BI^a0nD@~15ZtUA>hpnpwrh3=yS_}Ngf`{-YI;#=^G6|_(77s zYX<1xhJi;WJ~#Bn0*0NhAA0ECudBVv7@+rln`!z%*9@4@_dGl8Mf;vT@r?=KaqzwW z-Z>4vqP#?z{Ja5l`oZ2tcMM=AecJH!)YsQuWksoGz~z5j5Wu%`>APouNy$%0C9lIb z)c>35`+EO1_Qa;S^c!UZ0(aaoU_zL>;f$}8{mr`T%#^RMtziy4nErG7|DYLAd*c%YzKw!!(e}QU zexMQhTr*(IDs>%R?RiXIHQ-3WA?CD)iL3D5;~p7aSo(VU{Yv_MJ-6L4fCjgN$DXhE z*DzIZ{@j}q{H2R$ncmma7ni=C{v9d(Ue^q;1LsyhZn`j~#8`<6=vh`{O8nMtot z`|C9y36HtguKrzzH|cw0=_7og%OwM3Xd0YP-3X8UPEUJU`^mq*ci|nlT;C77{xS#K zsvf|$%KPvH(bkHu;BlhI%28iJ?#VCV(Gy?5qh((}4ytqxwh(PDnU%E3Hw!;3o`H=- zk9bp(HXKJKVSP~&vWpUseJla%P@Xts6~?4;2%ivPgLBO;8g>1(SQ>U4e+LIfT}!O1H|BL>K$$M+@MpzFI{{`8hDuc ze#MBVPDC_#J^lM!`bGn`7!4>E8ITkh5QlYzLIZ-f2IxI527mQ553cU{yDffZ+P5{= zLQ!#<0?xy01}N~70c!eXbF2YAG+>4`KuzDd0bp-{pwv+Xhx3Ktbn48bEoIH!1zk8Bk;}Kq-IDfFslP2FTF#)7y68!3K4@x>CE`sNl@1 zQw}<6&(q02uD~E`QwszW>(?`hT7V@Q0ul*bqvUHo{iFn+ z?Xf6-=LRU?gFLtjzr892n@VP2>&ZCOHg>WlufaEJSKC~5%~9Y^;EO+)Vc=C2T}txh z?=h5rVT|j4M+S(Xhm~@d;b&lTDcQ%q8Q9=WLT=eK+_>Grlstmd$6Fd&17~`khey?Q zCWQw0JCdg9TlK$F1A@lC)uH^&_uxmBDH)!m|44BP)_ch>Es8@<$rOBct6fi>g2&5^ z223Sx2mg!eSq3@~Vomtz%WV2i%HNRz1UiofN7XjngC{GJQrTnj2)}{AXA}6WW8@cj zreU*p96tU0u2k~!txmq!;F=Ud8+JVnk9y-;iUI!FE9}>=Up1z0U;d5^kWFaG8yaW{ z;&8(r-+D3u8+|Dmyf`T(ufk^$__c*ou%=)FHhLoPpN3ZLO53a4>T;;{CW!_Yz~j!R z6aTOwDGk04Zt5-3Gn|0+$I?sRu>oeURnNCT_HnuF8TccUmT%^OOZj6i4WIuvHtiSR zO-gI;z`N{Bc;TFb^l1YMrZO|&`+Kj$ia#|GaJlT)9+lx&A0D@Svm(%V+fuD(Cl zuqzLHpZ^Ko zKl3uX@^+kJw?X+w&ePA>fMvhF0?T%NBI&!o`WHO(y9QYP!l)#x_dWB<90ROE)8Kf- z#Y+x7{QMmW23{R{we1OJ7>eN63g9y~;5*NL4BtlW{1}!hTDGsj)_}Kfd`zAA7-e%Ls6Q2CS(GEZu;m&yq?YCRn}id>z1B#DpC$ z&2iAQ=rxy)F4e^y!Dnm$0Xd5>^A(!#lb2>$aAm@8JuyFcRXINE(nt8!nHsPlCVWOr zI5n$GcKw+imOBlEy^XzYCVCyB3NOT2ctiRKzxvQb<_65$1ivmc;m40`oH@M^Eq+W_^;>X>Qi zBmAm`G{DjX3vjgpo+j67=_wA;`!`t-obnvFVAWyS8;7A8yktQB_`({%m|z3V!l&e0 z9MNN?@>3q|iBD8M-DR1iPAjK4CjC79-pyWf_(d^5GQm$wa0vgD0>ADURpLt8#>7Pz z8{t96qU>q-l?S7XV}JvL;I01>_{tOq%tMNg=RZ(stnK!mn`407sBc!3C*1gmfZKBY1Gp{MKY-i%AH5Qy U#(-LZjQ{`u07*qoM6N<$f-f-t5dZ)H literal 0 HcmV?d00001 diff --git a/PoyoLang.Translator.Web/wwwroot/favicon_x512.png b/PoyoLang.Translator.Web/wwwroot/favicon_x512.png new file mode 100644 index 0000000000000000000000000000000000000000..b96f71a15a88c3871b1b8b38622d9cf29545cdc4 GIT binary patch literal 17964 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[^<]+" PoyoLang.Translator.Web/PoyoLang.Translator.Web.csproj) + +dotnet.exe publish PoyoLang.Translator.Web \ + -c Release \ + -r linux-x64 \ + -p:PublishProfile=DefaultContainer \ + -p:InvariantGlobalization=true \ + -p:ContainerFamily=alpine \ + -p:ContainerRegistry=git.ilysix.fr \ + -p:ContainerRepository=Eveldee/PoyoLang \ + -p:ContainerImageTags="\"$version;latest\"" \ No newline at end of file