A Razor UI component for rich text arrow results. It parses a string containing an arrow (→ or ->) into two text parts, displays them with a color and some styling, and implements IRichTextPanel for the rich text system.
@namespace Sandbox
@inherits Panel
@using Sandbox.UI
@implements IRichTextPanel
@attribute [RichTextPanel( @"([+-]?\d+(?:\.\d+)?[%ms]?)[ \t]*(?:→|->)[ \t]*([+-]?\d+(?:\.\d+)?[%ms]?)", UseCaptureGroup = false )]
<root class="richtext-arrow-result">
<label class="val val1" style="color: @(Color.Hex);">@Text1</label>
<label>→</label>
<label class="val val2" style="color: @(Color.Hex);">@Text2</label>
</root>
<style>
.val1
{
opacity: 0.2;
}
</style>
@code
{
public virtual Color Color => Color.Green;
public float? ImageSize { get; set; }
string Text1;
string Text2;
public void ParseRichText(string text)
{
// Log.Info( "Parsing arrow result: " + text );
var split = text.Split( "->");
if(split.Length == 1)
{
split = text.Split( "→" );
}
if(split.Length == 2)
{
Text1 = split[0];
Text2 = split[1];
if ( Text1.StartsWith( "[-]" ) || Text1.StartsWith( "[+]" ) )
{
Text1 = Text1[3..];
}
if ( Text2.EndsWith( "[/-]" ) || Text2.EndsWith( "[/+]" ) )
{
Text2 = Text2[..^4];
}
if(Text1.StartsWith("+") && !Text2.StartsWith("-") && !Text2.StartsWith("+"))
{
Text2 = "+" + Text2;
}
}
else
{
Text1 = text;
Text2 = "";
}
}
protected override int BuildHash()
{
return System.HashCode.Combine( Text1, Text2, Color );
}
}