@namespace Oqtane.Modules.Controls @inherits ModuleControlBase @inject IStringLocalizer Localizer
@if (AllowFileManagement) { @if (_filemanagervisible) {
}
   @if (_filemanagervisible) { @((MarkupString)"  ") }
}
@if (ToolbarContent != null) { @ToolbarContent } else { }
@if (ReadOnly) { } else { }
@code { private ElementReference _editorElement; private ElementReference _toolBar; private bool _filemanagervisible = false; private FileManager _fileManager; private string _rawhtml = string.Empty; private string _richhtml = string.Empty; private string _original = string.Empty; private string _message = string.Empty; [Parameter] public string Content { get; set; } [Parameter] public bool ReadOnly { get; set; } = false; [Parameter] public string Placeholder { get; set; } = "Enter Your Content..."; // parameters only applicable to rich text editor [Parameter] public RenderFragment ToolbarContent { get; set; } [Parameter] public string Theme { get; set; } = "snow"; [Parameter] public string DebugLevel { get; set; } = "info"; [Parameter] public bool AllowFileManagement { get; set; } = true; public override List Resources => new List() { new Resource { ResourceType = ResourceType.Script, Bundle = "Quill", Url = "js/quill.min.js" }, new Resource { ResourceType = ResourceType.Script, Bundle = "Quill", Url = "js/quill-blot-formatter.min.js" }, new Resource { ResourceType = ResourceType.Script, Bundle = "Quill", Url = "js/quill-interop.js" } }; protected override void OnParametersSet() { _rawhtml = Content; _richhtml = Content; _original = _rawhtml; // preserve original content for comparison } protected override async Task OnAfterRenderAsync(bool firstRender) { await base.OnAfterRenderAsync(firstRender); var interop = new RichTextEditorInterop(JSRuntime); if (firstRender) { await interop.CreateEditor( _editorElement, _toolBar, ReadOnly, Placeholder, Theme, DebugLevel); } await interop.LoadEditorContent(_editorElement, _richhtml); } public void CloseFileManager() { _filemanagervisible = false; _message = string.Empty; StateHasChanged(); } public void RefreshRichText() { _richhtml = _rawhtml; StateHasChanged(); } public async Task RefreshRawHtml() { var interop = new RichTextEditorInterop(JSRuntime); _rawhtml = await interop.GetHtml(_editorElement); StateHasChanged(); } public async Task GetHtml() { // return raw content if it has changed if (_original != _rawhtml) { return _rawhtml; } else { // otherwise return rich text content var interop = new RichTextEditorInterop(JSRuntime); return await interop.GetHtml(_editorElement); } } public async Task InsertImage() { _message = string.Empty; if (_filemanagervisible) { var file = _fileManager.GetFile(); if (file != null) { var interop = new RichTextEditorInterop(JSRuntime); await interop.InsertImage(_editorElement, file.Url, file.Name); _filemanagervisible = false; } else { _message = Localizer["Message.Require.Image"]; } } else { _filemanagervisible = true; } StateHasChanged(); } }