fixes for #4134 - Rich Text Editor

This commit is contained in:
sbwalker 2024-04-15 08:54:23 -04:00
parent bc978a91e3
commit 9d8b1fd99b
2 changed files with 32 additions and 15 deletions

View File

@ -90,11 +90,11 @@
</div> </div>
@if (ReadOnly) @if (ReadOnly)
{ {
<textarea id="rawhtmleditor" class="form-control" placeholder="@Placeholder" @bind="@_rawhtml" rows="10" readonly></textarea> <textarea id="@_rawhtmlid" class="form-control" placeholder="@Placeholder" @bind="@_rawhtml" rows="10" readonly></textarea>
} }
else else
{ {
<textarea id="rawhtmleditor" class="form-control" placeholder="@Placeholder" @bind="@_rawhtml" rows="10"></textarea> <textarea id="@_rawhtmlid" class="form-control" placeholder="@Placeholder" @bind="@_rawhtml" rows="10"></textarea>
} }
</TabPanel> </TabPanel>
} }
@ -104,17 +104,23 @@
@code { @code {
private bool _initialized = false; private bool _initialized = false;
private RichTextEditorInterop interop;
private FileManager _fileManager;
private string _activetab = "Rich";
private ElementReference _editorElement; private ElementReference _editorElement;
private ElementReference _toolBar; private ElementReference _toolBar;
private bool _richfilemanager = false; private bool _richfilemanager = false;
private FileManager _fileManager;
private string _richhtml = string.Empty; private string _richhtml = string.Empty;
private string _originalrichhtml = string.Empty; private string _originalrichhtml = string.Empty;
private bool _rawfilemanager = false; private bool _rawfilemanager = false;
private string _rawhtmlid = "RawHtmlEditor_" + Guid.NewGuid().ToString("N");
private string _rawhtml = string.Empty; private string _rawhtml = string.Empty;
private string _originalrawhtml = string.Empty; private string _originalrawhtml = string.Empty;
private string _message = string.Empty; private string _message = string.Empty;
private string _activetab = "Rich";
private bool _contentchanged = false; private bool _contentchanged = false;
[Parameter] [Parameter]
@ -124,7 +130,7 @@
public bool ReadOnly { get; set; } = false; public bool ReadOnly { get; set; } = false;
[Parameter] [Parameter]
public string Placeholder { get; set; } = "Enter Your Content..."; public string Placeholder { get; set; }
[Parameter] [Parameter]
public bool AllowFileManagement { get; set; } = true; public bool AllowFileManagement { get; set; } = true;
@ -152,13 +158,22 @@
new Resource { ResourceType = ResourceType.Script, Bundle = "Quill", Url = "js/quill-interop.js", Location = ResourceLocation.Body } new Resource { ResourceType = ResourceType.Script, Bundle = "Quill", Url = "js/quill-interop.js", Location = ResourceLocation.Body }
}; };
protected override void OnInitialized()
{
interop = new RichTextEditorInterop(JSRuntime);
if (string.IsNullOrEmpty(Placeholder))
{
Placeholder = Localizer["Placeholder"];
}
}
protected override void OnParametersSet() protected override void OnParametersSet()
{ {
_richhtml = Content; _richhtml = Content;
_rawhtml = Content; _rawhtml = Content;
_originalrawhtml = _rawhtml; // preserve for comparison later _originalrawhtml = _rawhtml; // preserve for comparison later
_originalrichhtml = ""; _originalrichhtml = "";
_contentchanged = true; _contentchanged = true; // identifies when Content parameter has changed
if (!AllowRichText) if (!AllowRichText)
{ {
@ -172,8 +187,6 @@
if (AllowRichText) if (AllowRichText)
{ {
var interop = new RichTextEditorInterop(JSRuntime);
if (firstRender) if (firstRender)
{ {
await interop.CreateEditor( await interop.CreateEditor(
@ -186,7 +199,7 @@
await interop.LoadEditorContent(_editorElement, _richhtml); await interop.LoadEditorContent(_editorElement, _richhtml);
// preserve a copy of the rich text content (Quill sanitizes content so we need to retrieve it from the editor as it may have changed) // preserve a copy of the content (Quill sanitizes content so we need to retrieve it from the editor as it may have been modified)
_originalrichhtml = await interop.GetHtml(_editorElement); _originalrichhtml = await interop.GetHtml(_editorElement);
_initialized = true; _initialized = true;
@ -197,21 +210,24 @@
{ {
if (_contentchanged) if (_contentchanged)
{ {
// reload if content passed to component has changed // reload editor if Content passed to component has changed
await interop.LoadEditorContent(_editorElement, _richhtml); await interop.LoadEditorContent(_editorElement, _richhtml);
_originalrichhtml = await interop.GetHtml(_editorElement); _originalrichhtml = await interop.GetHtml(_editorElement);
} }
else else
{ {
// preserve changed content on re-render event
var richhtml = await interop.GetHtml(_editorElement); var richhtml = await interop.GetHtml(_editorElement);
if (richhtml != _richhtml) if (richhtml != _richhtml)
{ {
await interop.LoadEditorContent(_editorElement, richhtml); _richhtml = richhtml;
await interop.LoadEditorContent(_editorElement, _richhtml);
} }
} }
_contentchanged = false;
} }
} }
_contentchanged = false;
} }
} }
@ -242,7 +258,6 @@
if (AllowRichText) if (AllowRichText)
{ {
var interop = new RichTextEditorInterop(JSRuntime);
richhtml = await interop.GetHtml(_editorElement); richhtml = await interop.GetHtml(_editorElement);
} }
@ -271,7 +286,6 @@
var file = _fileManager.GetFile(); var file = _fileManager.GetFile();
if (file != null) if (file != null)
{ {
var interop = new RichTextEditorInterop(JSRuntime);
await interop.InsertImage(_editorElement, file.Url, ((!string.IsNullOrEmpty(file.Description)) ? file.Description : file.Name)); await interop.InsertImage(_editorElement, file.Url, ((!string.IsNullOrEmpty(file.Description)) ? file.Description : file.Name));
_richhtml = await interop.GetHtml(_editorElement); _richhtml = await interop.GetHtml(_editorElement);
_richfilemanager = false; _richfilemanager = false;
@ -297,7 +311,7 @@
if (file != null) if (file != null)
{ {
var interop = new Interop(JSRuntime); var interop = new Interop(JSRuntime);
int pos = await interop.GetCaretPosition("rawhtmleditor"); int pos = await interop.GetCaretPosition(_rawhtmlid);
var image = "<img src=\"" + file.Url + "\" alt=\"" + ((!string.IsNullOrEmpty(file.Description)) ? file.Description : file.Name) + "\" class=\"img-fluid\">"; var image = "<img src=\"" + file.Url + "\" alt=\"" + ((!string.IsNullOrEmpty(file.Description)) ? file.Description : file.Name) + "\" class=\"img-fluid\">";
_rawhtml = _rawhtml.Substring(0, pos) + image + _rawhtml.Substring(pos); _rawhtml = _rawhtml.Substring(0, pos) + image + _rawhtml.Substring(pos);
_rawfilemanager = false; _rawfilemanager = false;

View File

@ -126,4 +126,7 @@
<data name="Message.Require.Image" xml:space="preserve"> <data name="Message.Require.Image" xml:space="preserve">
<value>You Must Select An Image To Insert</value> <value>You Must Select An Image To Insert</value>
</data> </data>
<data name="Placeholder" xml:space="preserve">
<value>Enter Your Content...</value>
</data>
</root> </root>