mirror of
https://github.com/oqtane/oqtane.framework.git
synced 2025-05-29 00:03:04 +00:00
modifications to JSInterop in RichTextEditor
This commit is contained in:
parent
d8fca5de20
commit
c089b90659
@ -117,8 +117,9 @@
|
|||||||
{
|
{
|
||||||
if (firstRender)
|
if (firstRender)
|
||||||
{
|
{
|
||||||
await RichTextEditorInterop.CreateEditor(
|
var interop = new RichTextEditorInterop(JsRuntime);
|
||||||
JsRuntime,
|
|
||||||
|
await interop.CreateEditor(
|
||||||
_editorElement,
|
_editorElement,
|
||||||
_toolBar,
|
_toolBar,
|
||||||
ReadOnly,
|
ReadOnly,
|
||||||
@ -126,14 +127,10 @@
|
|||||||
Theme,
|
Theme,
|
||||||
DebugLevel);
|
DebugLevel);
|
||||||
|
|
||||||
await RichTextEditorInterop.LoadEditorContent(
|
await interop.LoadEditorContent(_editorElement, Content);
|
||||||
JsRuntime,
|
|
||||||
_editorElement, Content);
|
|
||||||
|
|
||||||
// preserve a copy of the rich text content ( Quill sanitizes content so we need to retrieve it from the editor )
|
// preserve a copy of the rich text content ( Quill sanitizes content so we need to retrieve it from the editor )
|
||||||
_original = await RichTextEditorInterop.GetHtml(
|
_original = await interop.GetHtml(_editorElement);
|
||||||
JsRuntime,
|
|
||||||
_editorElement);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -146,25 +143,22 @@
|
|||||||
|
|
||||||
public async Task RefreshRichText()
|
public async Task RefreshRichText()
|
||||||
{
|
{
|
||||||
await RichTextEditorInterop.LoadEditorContent(
|
var interop = new RichTextEditorInterop(JsRuntime);
|
||||||
JsRuntime,
|
await interop.LoadEditorContent(_editorElement, _content);
|
||||||
_editorElement, _content);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task RefreshRawHtml()
|
public async Task RefreshRawHtml()
|
||||||
{
|
{
|
||||||
_content = await RichTextEditorInterop.GetHtml(
|
var interop = new RichTextEditorInterop(JsRuntime);
|
||||||
JsRuntime,
|
_content = await interop.GetHtml(_editorElement);
|
||||||
_editorElement);
|
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<string> GetHtml()
|
public async Task<string> GetHtml()
|
||||||
{
|
{
|
||||||
// get rich text content
|
// get rich text content
|
||||||
string content = await RichTextEditorInterop.GetHtml(
|
var interop = new RichTextEditorInterop(JsRuntime);
|
||||||
JsRuntime,
|
string content = await interop.GetHtml(_editorElement);
|
||||||
_editorElement);
|
|
||||||
|
|
||||||
if (_original != content)
|
if (_original != content)
|
||||||
{
|
{
|
||||||
@ -185,9 +179,8 @@
|
|||||||
var fileid = _fileManager.GetFileId();
|
var fileid = _fileManager.GetFileId();
|
||||||
if (fileid != -1)
|
if (fileid != -1)
|
||||||
{
|
{
|
||||||
await RichTextEditorInterop.InsertImage(
|
var interop = new RichTextEditorInterop(JsRuntime);
|
||||||
JsRuntime,
|
await interop.InsertImage(_editorElement, ContentUrl(fileid));
|
||||||
_editorElement, ContentUrl(fileid));
|
|
||||||
_filemanagervisible = false;
|
_filemanagervisible = false;
|
||||||
_message = string.Empty;
|
_message = string.Empty;
|
||||||
}
|
}
|
||||||
@ -207,22 +200,19 @@
|
|||||||
// other rich text editor methods which can be used by developers
|
// other rich text editor methods which can be used by developers
|
||||||
public async Task<string> GetText()
|
public async Task<string> GetText()
|
||||||
{
|
{
|
||||||
return await RichTextEditorInterop.GetText(
|
var interop = new RichTextEditorInterop(JsRuntime);
|
||||||
JsRuntime,
|
return await interop.GetText(_editorElement);
|
||||||
_editorElement);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<string> GetContent()
|
public async Task<string> GetContent()
|
||||||
{
|
{
|
||||||
return await RichTextEditorInterop.GetContent(
|
var interop = new RichTextEditorInterop(JsRuntime);
|
||||||
JsRuntime,
|
return await interop.GetContent(_editorElement);
|
||||||
_editorElement);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task EnableEditor(bool mode)
|
public async Task EnableEditor(bool mode)
|
||||||
{
|
{
|
||||||
await RichTextEditorInterop.EnableEditor(
|
var interop = new RichTextEditorInterop(JsRuntime);
|
||||||
JsRuntime,
|
await interop.EnableEditor(_editorElement, mode);
|
||||||
_editorElement, mode);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,10 +4,16 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace Oqtane.Modules.Controls
|
namespace Oqtane.Modules.Controls
|
||||||
{
|
{
|
||||||
public static class RichTextEditorInterop
|
public class RichTextEditorInterop
|
||||||
{
|
{
|
||||||
internal static ValueTask<object> CreateEditor(
|
private readonly IJSRuntime _jsRuntime;
|
||||||
IJSRuntime jsRuntime,
|
|
||||||
|
public RichTextEditorInterop(IJSRuntime jsRuntime)
|
||||||
|
{
|
||||||
|
_jsRuntime = jsRuntime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task CreateEditor(
|
||||||
ElementReference quillElement,
|
ElementReference quillElement,
|
||||||
ElementReference toolbar,
|
ElementReference toolbar,
|
||||||
bool readOnly,
|
bool readOnly,
|
||||||
@ -15,66 +21,104 @@ namespace Oqtane.Modules.Controls
|
|||||||
string theme,
|
string theme,
|
||||||
string debugLevel)
|
string debugLevel)
|
||||||
{
|
{
|
||||||
return jsRuntime.InvokeAsync<object>(
|
try
|
||||||
|
{
|
||||||
|
_jsRuntime.InvokeAsync<object>(
|
||||||
"interop.createQuill",
|
"interop.createQuill",
|
||||||
quillElement, toolbar, readOnly,
|
quillElement, toolbar, readOnly,
|
||||||
placeholder, theme, debugLevel);
|
placeholder, theme, debugLevel);
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static ValueTask<string> GetText(
|
public ValueTask<string> GetText(ElementReference quillElement)
|
||||||
IJSRuntime jsRuntime,
|
|
||||||
ElementReference quillElement)
|
|
||||||
{
|
{
|
||||||
return jsRuntime.InvokeAsync<string>(
|
try
|
||||||
|
{
|
||||||
|
return _jsRuntime.InvokeAsync<string>(
|
||||||
"interop.getQuillText",
|
"interop.getQuillText",
|
||||||
quillElement);
|
quillElement);
|
||||||
}
|
}
|
||||||
|
catch
|
||||||
internal static ValueTask<string> GetHtml(
|
|
||||||
IJSRuntime jsRuntime,
|
|
||||||
ElementReference quillElement)
|
|
||||||
{
|
{
|
||||||
return jsRuntime.InvokeAsync<string>(
|
return new ValueTask<string>(Task.FromResult(string.Empty));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ValueTask<string> GetHtml(ElementReference quillElement)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return _jsRuntime.InvokeAsync<string>(
|
||||||
"interop.getQuillHTML",
|
"interop.getQuillHTML",
|
||||||
quillElement);
|
quillElement);
|
||||||
}
|
}
|
||||||
|
catch
|
||||||
internal static ValueTask<string> GetContent(
|
|
||||||
IJSRuntime jsRuntime,
|
|
||||||
ElementReference quillElement)
|
|
||||||
{
|
{
|
||||||
return jsRuntime.InvokeAsync<string>(
|
return new ValueTask<string>(Task.FromResult(string.Empty));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ValueTask<string> GetContent(ElementReference quillElement)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return _jsRuntime.InvokeAsync<string>(
|
||||||
"interop.getQuillContent",
|
"interop.getQuillContent",
|
||||||
quillElement);
|
quillElement);
|
||||||
}
|
}
|
||||||
|
catch
|
||||||
internal static ValueTask<object> LoadEditorContent(
|
|
||||||
IJSRuntime jsRuntime,
|
|
||||||
ElementReference quillElement,
|
|
||||||
string content)
|
|
||||||
{
|
{
|
||||||
return jsRuntime.InvokeAsync<object>(
|
return new ValueTask<string>(Task.FromResult(string.Empty));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task LoadEditorContent(ElementReference quillElement, string content)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_jsRuntime.InvokeAsync<object>(
|
||||||
"interop.loadQuillContent",
|
"interop.loadQuillContent",
|
||||||
quillElement, content);
|
quillElement, content);
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static ValueTask<object> EnableEditor(
|
public Task EnableEditor(ElementReference quillElement, bool mode)
|
||||||
IJSRuntime jsRuntime,
|
|
||||||
ElementReference quillElement,
|
|
||||||
bool mode)
|
|
||||||
{
|
{
|
||||||
return jsRuntime.InvokeAsync<object>(
|
try
|
||||||
|
{
|
||||||
|
_jsRuntime.InvokeAsync<object>(
|
||||||
"interop.enableQuillEditor", quillElement, mode);
|
"interop.enableQuillEditor", quillElement, mode);
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static ValueTask<object> InsertImage(
|
public Task InsertImage(ElementReference quillElement, string imageUrl)
|
||||||
IJSRuntime jsRuntime,
|
|
||||||
ElementReference quillElement,
|
|
||||||
string imageUrl)
|
|
||||||
{
|
{
|
||||||
return jsRuntime.InvokeAsync<object>(
|
try
|
||||||
|
{
|
||||||
|
_jsRuntime.InvokeAsync<object>(
|
||||||
"interop.insertQuillImage",
|
"interop.insertQuillImage",
|
||||||
quillElement, imageUrl);
|
quillElement, imageUrl);
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.JSInterop;
|
||||||
using Microsoft.JSInterop;
|
|
||||||
using System;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace Oqtane.UI
|
namespace Oqtane.UI
|
||||||
@ -18,7 +16,7 @@ namespace Oqtane.UI
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_jsRuntime.InvokeAsync<string>(
|
_jsRuntime.InvokeAsync<object>(
|
||||||
"interop.setCookie",
|
"interop.setCookie",
|
||||||
name, value, days);
|
name, value, days);
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
@ -47,7 +45,7 @@ namespace Oqtane.UI
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_jsRuntime.InvokeAsync<string>(
|
_jsRuntime.InvokeAsync<object>(
|
||||||
"interop.updateTitle",
|
"interop.updateTitle",
|
||||||
title);
|
title);
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
@ -62,7 +60,7 @@ namespace Oqtane.UI
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_jsRuntime.InvokeAsync<string>(
|
_jsRuntime.InvokeAsync<object>(
|
||||||
"interop.includeMeta",
|
"interop.includeMeta",
|
||||||
id, attribute, name, content);
|
id, attribute, name, content);
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
@ -77,7 +75,7 @@ namespace Oqtane.UI
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_jsRuntime.InvokeAsync<string>(
|
_jsRuntime.InvokeAsync<object>(
|
||||||
"interop.includeLink",
|
"interop.includeLink",
|
||||||
id, rel, url, type, integrity, crossorigin);
|
id, rel, url, type, integrity, crossorigin);
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
@ -92,7 +90,7 @@ namespace Oqtane.UI
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_jsRuntime.InvokeAsync<string>(
|
_jsRuntime.InvokeAsync<object>(
|
||||||
"interop.includeScript",
|
"interop.includeScript",
|
||||||
id, src, content, location, integrity, crossorigin);
|
id, src, content, location, integrity, crossorigin);
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
@ -107,7 +105,7 @@ namespace Oqtane.UI
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_jsRuntime.InvokeAsync<string>(
|
_jsRuntime.InvokeAsync<object>(
|
||||||
"interop.includeLink",
|
"interop.includeLink",
|
||||||
id, "stylesheet", url, "text/css");
|
id, "stylesheet", url, "text/css");
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
@ -122,7 +120,7 @@ namespace Oqtane.UI
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_jsRuntime.InvokeAsync<string>(
|
_jsRuntime.InvokeAsync<object>(
|
||||||
"interop.removeElementsById",
|
"interop.removeElementsById",
|
||||||
prefix, first, last);
|
prefix, first, last);
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
@ -152,7 +150,7 @@ namespace Oqtane.UI
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_jsRuntime.InvokeAsync<string>(
|
_jsRuntime.InvokeAsync<object>(
|
||||||
"interop.submitForm",
|
"interop.submitForm",
|
||||||
path, fields);
|
path, fields);
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
@ -181,7 +179,7 @@ namespace Oqtane.UI
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_jsRuntime.InvokeAsync<string>(
|
_jsRuntime.InvokeAsync<object>(
|
||||||
"interop.uploadFiles",
|
"interop.uploadFiles",
|
||||||
posturl, folder, id);
|
posturl, folder, id);
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
/* Module Custom Styles */
|
@ -0,0 +1 @@
|
|||||||
|
/* Module Script */
|
@ -0,0 +1 @@
|
|||||||
|
This is the location where static resources such as images, style sheets, or scripts for this module will be located. Static assets can be organized in subfolders. When the module package is deployed the assets will be extracted under the web root in a folder that matches the module namespace.
|
Loading…
x
Reference in New Issue
Block a user