AceEditor.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using Microsoft.AspNetCore.Components;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Runtime.CompilerServices;
  5. using System.Threading.Tasks;
  6. namespace BlazorAceEditor
  7. {
  8. public partial class AceEditor : IAsyncDisposable
  9. {
  10. [Inject] private AceEditorJsInterop JsInterop { get; set; }
  11. /// <summary>
  12. /// 附加属性
  13. /// </summary>
  14. [Parameter(CaptureUnmatchedValues = true)]
  15. public Dictionary<string, object> Attributes { get; set; }
  16. [Parameter] public EventCallback<AceEditor> OnChanged { get; set; }
  17. [Parameter] public EventCallback<AceEditor> OnLoad { get; set; }
  18. public string ElementId { get; } = $"BlazorAceEditor_{Guid.NewGuid():N}";
  19. protected override async Task OnInitializedAsync()
  20. {
  21. await base.OnInitializedAsync();
  22. }
  23. protected override async Task OnAfterRenderAsync(bool firstRender)
  24. {
  25. await base.OnAfterRenderAsync(firstRender);
  26. if (firstRender)
  27. {
  28. AceEditorJsCallbackManager.AddEventHandler(ElementId, "onChange", new Func<Task>(() => OnChanged.InvokeAsync(this)));
  29. AceEditorJsCallbackManager.AddEventHandler(ElementId, "onLoad", new Func<Task>(() => OnLoad.InvokeAsync(this)));
  30. await CreateEditor();
  31. }
  32. }
  33. public async ValueTask DisposeAsync()
  34. {
  35. AceEditorJsCallbackManager.DisposeObject(ElementId);
  36. await DestroyEditor();
  37. }
  38. //glues base
  39. private Task InvokeVoid([CallerMemberName] string methodName = null) => JsInterop.InvokeVoid(ElementId, methodName);
  40. private Task InvokeVoidP1(object arg0, [CallerMemberName] string methodName = null) => JsInterop.InvokeVoidP1(ElementId, arg0, methodName);
  41. private ValueTask<T> Invoke<T>([CallerMemberName] string methodName = null) => JsInterop.Invoke<T>(ElementId, methodName);
  42. //glues
  43. private Task CreateEditor() => InvokeVoid();
  44. private Task DestroyEditor() => InvokeVoid();
  45. public Task SetTheme(string themeName) => InvokeVoidP1(themeName);
  46. public Task SetLang(string langName) => InvokeVoidP1(langName);
  47. public Task SetInfinityMaxLines() => InvokeVoid();
  48. public Task SetMaxLines(int maxLines) => InvokeVoidP1(maxLines);
  49. public Task SetMinLines(int minLines) => InvokeVoidP1(minLines);
  50. public ValueTask<string> GetValue() => Invoke<string>();
  51. public Task SetValue(string value) => InvokeVoidP1(value);
  52. public Task SetFontSize(int value) => InvokeVoidP1(value);
  53. public Task ClearSelection() => InvokeVoid();
  54. }
  55. }