Fix #4358: RichTextEditor Provider Abstraction.

This commit is contained in:
Ben
2024-07-01 17:11:26 +08:00
parent 1eafed755d
commit e00c261777
21 changed files with 726 additions and 342 deletions

View File

@ -50,6 +50,8 @@ namespace Oqtane.Modules
public virtual List<Resource> Resources { get; set; }
public virtual List<string> ResourcesRegistrationTypes { get; }
public virtual string RenderMode { get { return RenderModes.Interactive; } } // interactive by default
public virtual bool? Prerender { get { return null; } } // allows the Site Prerender property to be overridden
@ -71,6 +73,21 @@ namespace Oqtane.Modules
// base lifecycle method for handling JSInterop script registration
public virtual async Task<List<Resource>> GetResources(IServiceProvider serviceProvider, Page page)
{
var resources = Resources ?? new List<Resource>();
if(ResourcesRegistrationTypes != null)
{
foreach(var type in ResourcesRegistrationTypes)
{
resources.AddRange(await LoadResourcesFromType(serviceProvider, page, type));
}
}
return resources;
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
@ -482,6 +499,25 @@ namespace Oqtane.Modules
}
}
private async Task<List<Resource>> LoadResourcesFromType(IServiceProvider serviceProvider, Page page, string typeName)
{
try
{
var type = Type.GetType(typeName, false, true);
if (type != null && type.GetInterfaces().Contains(typeof(IModuleControl)))
{
var control = Activator.CreateInstance(type) as IModuleControl;
return await control?.GetResources(serviceProvider, page);
}
}
catch(Exception ex)
{
//await Log(null, LogLevel.Error, string.Empty, ex, "Load Resources From Type {Type} Failed. {Message}", typeName, ex.Message);
}
return null;
}
[Obsolete("ContentUrl(int fileId) is deprecated. Use FileUrl(int fileId) instead.", false)]
public string ContentUrl(int fileid)
{