protected override void BuildRenderTree(RenderTreeBuilder builder) { if (builder != null) { int seq = 0; if (Data.IsEmpty) { builder.OpenElement(seq++, "div"); builder.AddMultipleAttributes(seq++, AdditionalAttributes); builder.AddAttribute(seq++, "class", $"{GetBaseClassAttributes()} empty"); builder.AddContent(seq++, "Empty"); builder.CloseElement(); } else { builder.OpenElement(seq++, "div"); builder.AddMultipleAttributes(seq++, AdditionalAttributes); builder.AddAttribute(seq++, "class", GetBaseClassAttributes()); builder.OpenElement(seq++, "div"); builder.AddAttribute(seq++, "class", $"content {_encoding.ToString().ToLowerInvariant()}"); switch (_encoding) { case BinaryDisplayEncoding.Text: builder.AddContent(seq++, Encoding.Default.GetString(_data.Span)); break; case BinaryDisplayEncoding.Hex: builder.AddContent(seq++, Hex.FromBytes(_data)); break; case BinaryDisplayEncoding.Base64: builder.AddContent(seq++, Convert.ToBase64String(_data.Span)); break; case BinaryDisplayEncoding.Bytes: builder.AddMarkupContent(seq++, $"<div>{string.Join("</div> <div>", GetWords(_data.ToArray()))}</div>"); break; } builder.CloseElement(); builder.OpenElement(seq++, "div"); builder.AddAttribute(seq++, "class", "show-as"); builder.OpenElement(seq++, "div"); builder.AddMarkupContent(seq++, "<span>Show As </span>"); builder.OpenElement(seq++, "input"); builder.AddAttribute(seq++, "type", "radio"); builder.AddAttribute(seq++, "id", "encodeAsText"); builder.AddAttribute(seq++, "name", "displayEncoding"); builder.AddAttribute(seq++, "value", BinaryDisplayEncoding.Text); builder.AddAttribute(seq++, "checked", _encoding == BinaryDisplayEncoding.Text); builder.AddAttribute(seq++, "onchange", EventCallback.Factory.Create <ChangeEventArgs>(this, () => _encoding = BinaryDisplayEncoding.Text)); builder.CloseElement(); builder.AddMarkupContent(seq++, "<label for=\"encodeAsText\">Text</label>"); builder.OpenElement(seq++, "input"); builder.AddAttribute(seq++, "type", "radio"); builder.AddAttribute(seq++, "id", "encodeAsHex"); builder.AddAttribute(seq++, "name", "displayEncoding"); builder.AddAttribute(seq++, "value", BinaryDisplayEncoding.Hex); builder.AddAttribute(seq++, "checked", _encoding == BinaryDisplayEncoding.Hex); builder.AddAttribute(seq++, "onchange", EventCallback.Factory.Create <ChangeEventArgs>(this, () => _encoding = BinaryDisplayEncoding.Hex)); builder.CloseElement(); builder.AddMarkupContent(seq++, "<label for=\"encodeAsHex\">Hex</label>"); builder.OpenElement(seq++, "input"); builder.AddAttribute(seq++, "type", "radio"); builder.AddAttribute(seq++, "id", "encodeAsBase64"); builder.AddAttribute(seq++, "name", "displayEncoding"); builder.AddAttribute(seq++, "value", BinaryDisplayEncoding.Base64); builder.AddAttribute(seq++, "checked", _encoding == BinaryDisplayEncoding.Base64); builder.AddAttribute(seq++, "onchange", EventCallback.Factory.Create <ChangeEventArgs>(this, () => _encoding = BinaryDisplayEncoding.Base64)); builder.CloseElement(); builder.AddMarkupContent(seq++, "<label for=\"encodeAsBase64\">Base 64</label>"); builder.OpenElement(seq++, "input"); builder.AddAttribute(seq++, "type", "radio"); builder.AddAttribute(seq++, "id", "encodeAsBytes"); builder.AddAttribute(seq++, "name", "displayEncoding"); builder.AddAttribute(seq++, "value", BinaryDisplayEncoding.Bytes); builder.AddAttribute(seq++, "checked", _encoding == BinaryDisplayEncoding.Bytes); builder.AddAttribute(seq++, "onchange", EventCallback.Factory.Create <ChangeEventArgs>(this, () => _encoding = BinaryDisplayEncoding.Bytes)); builder.CloseElement(); builder.AddMarkupContent(seq++, "<label for=\"encodeAsBytes\">Bytes</label>"); builder.CloseElement(); if (!string.IsNullOrWhiteSpace(Filename)) { builder.OpenElement(seq++, "a"); builder.AddAttribute(seq++, "download", Filename); builder.AddAttribute(seq++, "href", $"data:application/octet-stream;base64,{Convert.ToBase64String(_data.Span)}"); builder.AddContent(seq++, "download"); builder.CloseElement(); } if (ClipboardService.Enabled) { builder.OpenElement(seq++, "button"); builder.AddAttribute(seq++, "type", "button"); builder.AddAttribute(seq++, "onclick", EventCallback.Factory.Create <MouseEventArgs>(this, CopyDataToClipboard)); builder.AddContent(seq++, "Copy"); builder.CloseElement(); } builder.CloseElement(); builder.CloseElement(); } } }