Exemplo n.º 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();
                }
            }
        }
Exemplo n.º 2
0
        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();
            }
        }