ElementContext.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using Microsoft.AspNetCore.Components;
  2. using Microsoft.AspNetCore.Components.Rendering;
  3. using System;
  4. using System.Diagnostics.CodeAnalysis;
  5. namespace FastReport.Web.Blazor.Export
  6. {
  7. internal sealed class ElementContext : IRenderContext
  8. {
  9. private readonly IRenderContext _context;
  10. private int deepLevel = 0;
  11. public ElementContext(RenderTreeBuilder builder)
  12. : this(new RenderContext(builder))
  13. {
  14. }
  15. public ElementContext(IRenderContext context)
  16. {
  17. _context = context;
  18. }
  19. public ElementContext(IRenderContext context, string elementName)
  20. : this(context)
  21. {
  22. OpenElement(elementName);
  23. }
  24. public void OpenElement(string elementName)
  25. {
  26. _context.OpenElement(elementName);
  27. deepLevel++;
  28. }
  29. public bool IsClosed => deepLevel == 0;
  30. public void CloseElement()
  31. {
  32. _context.CloseElement();
  33. deepLevel--;
  34. }
  35. public void Dispose()
  36. {
  37. while (deepLevel > 0)
  38. CloseElement();
  39. }
  40. public void AddMarkupContent(string? markupContent) => _context.AddMarkupContent(markupContent);
  41. public void AddContent(string? textContent) => _context.AddContent(textContent);
  42. public void AddContent(RenderFragment? fragment) => _context.AddContent(fragment);
  43. public void AddContent<TValue>(RenderFragment<TValue>? fragment, TValue value) => _context.AddContent(fragment, value);
  44. public void AddContent(MarkupString markupContent) => _context.AddContent(markupContent);
  45. public void AddAttribute(string name, bool value) => _context.AddAttribute(name, value);
  46. public void AddAttribute(string name, string? value) => _context.AddAttribute(name, value);
  47. public void AddAttribute(string name, MulticastDelegate? value) => _context.AddAttribute(name, value);
  48. public void AddAttribute(string name, object? value) => _context.AddAttribute(name, value);
  49. public void OpenComponent<[DynamicallyAccessedMembers(LinkerFlags.All)] TComponent>() where TComponent : notnull, IComponent
  50. => _context.OpenComponent<TComponent>();
  51. public void CloseComponent() => _context.CloseComponent();
  52. public void AddOnClick(OnClickEventArgs click) => _context.AddOnClick(click);
  53. }
  54. }