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(); } } }
protected override void BuildRenderTree(RenderTreeBuilder builder) { builder.OpenElement("div"); builder.AddAttribute("hg-binary-display"); if (_data.IsEmpty) { builder.AddAttribute("hg-none"); builder.AddMultipleAttributes(AdditionalAttributes); builder.AddContent("Empty"); builder.CloseElement(); } else { builder.AddMultipleAttributes(AdditionalAttributes); builder.OpenElement("div"); switch (_encoding) { case BinaryDisplayEncoding.Text: builder.AddAttribute($"hg-binary-type-text"); builder.AddContent(Encoding.Default.GetString(_data.Span)); break; case BinaryDisplayEncoding.Hex: builder.AddAttribute($"hg-binary-type-hex"); builder.AddContent(Hex.FromBytes(_data)); break; case BinaryDisplayEncoding.Base64: builder.AddAttribute($"hg-binary-type-base64"); builder.AddContent(Convert.ToBase64String(_data.Span)); break; case BinaryDisplayEncoding.Bytes: builder.AddAttribute($"hg-binary-type-bytes"); builder.AddMarkupContent($"<div>{string.Join("</div> <div>", GetWords(_data.ToArray()))}</div>"); break; } builder.CloseElement(); builder.OpenElement("div"); builder.AddAttribute("class", "show-as"); builder.OpenElement("div"); builder.AddMarkupContent("<span>Show As</span>"); builder.OpenElement("label"); builder.OpenElement("input"); builder.AddAttribute("type", "radio"); builder.AddAttribute("value", BinaryDisplayEncoding.Text); builder.AddAttribute("checked", _encoding == BinaryDisplayEncoding.Text); builder.AddAttribute("onchange", EventCallback.Factory.Create <ChangeEventArgs>(this, () => _encoding = BinaryDisplayEncoding.Text)); builder.CloseElement(); builder.AddContent("Text"); builder.CloseElement(); builder.OpenElement("label"); builder.OpenElement("input"); builder.AddAttribute("type", "radio"); builder.AddAttribute("value", BinaryDisplayEncoding.Hex); builder.AddAttribute("checked", _encoding == BinaryDisplayEncoding.Hex); builder.AddAttribute("onchange", EventCallback.Factory.Create <ChangeEventArgs>(this, () => _encoding = BinaryDisplayEncoding.Hex)); builder.CloseElement(); builder.AddContent("Hex"); builder.CloseElement(); builder.OpenElement("label"); builder.OpenElement("input"); builder.AddAttribute("type", "radio"); builder.AddAttribute("value", BinaryDisplayEncoding.Base64); builder.AddAttribute("checked", _encoding == BinaryDisplayEncoding.Base64); builder.AddAttribute("onchange", EventCallback.Factory.Create <ChangeEventArgs>(this, () => _encoding = BinaryDisplayEncoding.Base64)); builder.CloseElement(); builder.AddContent("Base 64"); builder.CloseElement(); builder.OpenElement("label"); builder.OpenElement("input"); builder.AddAttribute("type", "radio"); builder.AddAttribute("value", BinaryDisplayEncoding.Bytes); builder.AddAttribute("checked", _encoding == BinaryDisplayEncoding.Bytes); builder.AddAttribute("onchange", EventCallback.Factory.Create <ChangeEventArgs>(this, () => _encoding = BinaryDisplayEncoding.Bytes)); builder.CloseElement(); builder.AddContent("Bytes"); builder.CloseElement(); builder.CloseElement(); if (!string.IsNullOrWhiteSpace(Filename)) { builder.OpenElement("a"); builder.AddAttribute("download", Filename); builder.AddAttribute("href", $"data:application/octet-stream;base64,{Convert.ToBase64String(_data.Span)}"); builder.AddContent("download"); builder.CloseElement(); } if (ClipboardService?.Enabled == true) { builder.OpenElement("button"); builder.AddAttribute("type", "button"); builder.AddAttribute("onclick", EventCallback.Factory.Create <MouseEventArgs>(this, CopyDataToClipboard)); builder.AddContent("Copy"); builder.CloseElement(); } builder.CloseElement(); builder.CloseElement(); } }