コード例 #1
0
        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();
                }
            }
        }