diff --git a/WotBlitzStatisticsPro.Blazor/Model/ElementDimensions.cs b/WotBlitzStatisticsPro.Blazor/Model/ElementDimensions.cs new file mode 100644 index 0000000..d626ee2 --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Model/ElementDimensions.cs @@ -0,0 +1,8 @@ +namespace WotBlitzStatisticsPro.Blazor.Model +{ + public class ElementDimensions + { + public int Width { get; set; } + public int Height { get; set; } + } +} diff --git a/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTree.razor b/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTree.razor index ff79a7d..8743b04 100644 --- a/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTree.razor +++ b/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTree.razor @@ -30,7 +30,7 @@ - + @TanksList.ToArray()[i].Tier.RomanNumber() @@ -40,9 +40,51 @@ @TanksList.ToArray()[i].Name - - + + @if(i == 0 || i == 2) + { + + + + + + + @(TanksList.ToArray()[i].WinRate.ToString("N0"))% + + + + + + @TanksList.ToArray()[i].AvgDamage.ToString("N0") + + + + + @TanksList.ToArray()[i].Battles.ToString("N0") + + + + + @TanksList.ToArray()[i].LastBattleTime.ToString("d") + + + } + @if(i == 1) + { + + + + + 203.5 K + + + + + 8 500 K + + + } } diff --git a/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTreeBase.cs b/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTreeBase.cs index 995781f..3c3b23f 100644 --- a/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTreeBase.cs +++ b/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTreeBase.cs @@ -3,8 +3,10 @@ using Microsoft.AspNetCore.Components; using Microsoft.Extensions.Localization; using System; using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using WotBlitzStatisticsPro.Blazor.GraphQl; +using WotBlitzStatisticsPro.Blazor.Model; using WotBlitzStatisticsPro.Blazor.Services; namespace WotBlitzStatisticsPro.Blazor.Pages @@ -23,11 +25,17 @@ namespace WotBlitzStatisticsPro.Blazor.Pages [Inject] public IMediaQueriesService MediaQueriesService { get; set; } + [Inject] + public ISvgHelper SvgHelper { get; set; } + public int FrameHeigth { get; set; } public int CardWidth { get; } = 200; public int CardHeigth { get; } = 120; + //[Obsolete("Just temporary. In the future, add this into tankTree DTO")] + //public ElementDimensions[] BattlesTextSize { get; set; } + public string FrameStyle { get @@ -43,8 +51,22 @@ namespace WotBlitzStatisticsPro.Blazor.Pages //FrameWidth = Convert.ToInt32(((decimal)screenWidth) * 0.94m); FrameHeigth = screenHeight - 390; + // TODO: This is temporary + //var dd = new List(); + //var tt = TanksList.ToArray(); + //for (int i = 0; i < 3; i++) + //{ + // var d = await SvgHelper.CalculateTextBlockSizeAsync(tt[i].Battles.ToString("N0"), "Segoe UI", 12); + // dd.Add(d); + //} + //BattlesTextSize = dd.ToArray(); + //--- + } - + public int GetTextWidth(string text, string fontFace, int fontSize) + { + return SvgHelper.CalculateTextBlockSize(text, fontFace, fontSize).Width; + } } } diff --git a/WotBlitzStatisticsPro.Blazor/Program.cs b/WotBlitzStatisticsPro.Blazor/Program.cs index 9c940d1..472ac37 100644 --- a/WotBlitzStatisticsPro.Blazor/Program.cs +++ b/WotBlitzStatisticsPro.Blazor/Program.cs @@ -33,6 +33,7 @@ namespace WotBlitzStatisticsPro.Blazor builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); + builder.Services.AddScoped(); builder.Services.AddMediatR(typeof(Program)); diff --git a/WotBlitzStatisticsPro.Blazor/Services/ISvgHelper.cs b/WotBlitzStatisticsPro.Blazor/Services/ISvgHelper.cs new file mode 100644 index 0000000..47f127f --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Services/ISvgHelper.cs @@ -0,0 +1,10 @@ +using System.Threading.Tasks; +using WotBlitzStatisticsPro.Blazor.Model; + +namespace WotBlitzStatisticsPro.Blazor.Services +{ + public interface ISvgHelper + { + ElementDimensions CalculateTextBlockSize(string text, string fontFace, int fontSize); + } +} diff --git a/WotBlitzStatisticsPro.Blazor/Services/SvgHelper.cs b/WotBlitzStatisticsPro.Blazor/Services/SvgHelper.cs new file mode 100644 index 0000000..639a1c2 --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Services/SvgHelper.cs @@ -0,0 +1,28 @@ +using Microsoft.JSInterop; +using System.Threading.Tasks; +using WotBlitzStatisticsPro.Blazor.Model; +using System.Text.Json; + +namespace WotBlitzStatisticsPro.Blazor.Services +{ + public class SvgHelper : ISvgHelper + { + private readonly IJSRuntime _jsRuntime; + + public SvgHelper(IJSRuntime jsRuntime) + { + _jsRuntime = jsRuntime; + } + + public ElementDimensions CalculateTextBlockSize(string text, string fontFace, int fontSize) + { + var jsInProcess = (IJSInProcessRuntime)_jsRuntime; + return jsInProcess.Invoke("svgHelper.CalculateTextBlockDimensions", new + { + Text = text, + Font = fontFace, + Size = fontSize + }); + } + } +} diff --git a/WotBlitzStatisticsPro.Blazor/wwwroot/icons/encyclopedia.vehicle.credits.scale-200.png b/WotBlitzStatisticsPro.Blazor/wwwroot/icons/encyclopedia.vehicle.credits.scale-200.png new file mode 100644 index 0000000..87f4bb2 Binary files /dev/null and b/WotBlitzStatisticsPro.Blazor/wwwroot/icons/encyclopedia.vehicle.credits.scale-200.png differ diff --git a/WotBlitzStatisticsPro.Blazor/wwwroot/index.html b/WotBlitzStatisticsPro.Blazor/wwwroot/index.html index d70d6e4..4bb8474 100644 --- a/WotBlitzStatisticsPro.Blazor/wwwroot/index.html +++ b/WotBlitzStatisticsPro.Blazor/wwwroot/index.html @@ -27,6 +27,7 @@ + diff --git a/WotBlitzStatisticsPro.Blazor/wwwroot/svg-helper.js b/WotBlitzStatisticsPro.Blazor/wwwroot/svg-helper.js new file mode 100644 index 0000000..70f13e0 --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/wwwroot/svg-helper.js @@ -0,0 +1,23 @@ +var svgHelper = svgHelper || {}; + +svgHelper.CalculateTextBlockDimensions = function (textParams) { + const svg = ` + + + ${textParams.Text} + + `; + const el = document.createElement("div"); + el.innerHTML = svg; + document.body.appendChild(el); + const svgText = el.querySelector('text').getBBox(); + el.remove(); + const result = { Height: Math.round(svgText.height), Width: Math.round(svgText.width) }; + return result; +}; \ No newline at end of file