@using System.Text.RegularExpressions @using Microsoft.AspNetCore.Components.Rendering @using Microsoft.Extensions.DependencyInjection @namespace Oqtane.Modules.Controls @inherits ModuleControlBase @inject IServiceProvider ServiceProvider @inject ISettingService SettingService @inject IStringLocalizer Localizer
@_textEditorComponent
@code { private string _textEditorProvider; private RenderFragment _textEditorComponent; private ITextEditor _textEditor; [Parameter] public string Content { get; set; } [Parameter] public bool ReadOnly { get; set; } = false; [Parameter] public string Placeholder { get; set; } [Parameter] public string Provider { get; set; } [Parameter(CaptureUnmatchedValues = true)] public Dictionary AdditionalAttributes { get; set; } = new Dictionary(); protected override async Task OnInitializedAsync() { _textEditorProvider = await GetTextEditorType(); } protected override void OnParametersSet() { _textEditorComponent = (builder) => { CreateTextEditor(builder); }; } protected override async Task OnAfterRenderAsync(bool firstRender) { if(_textEditor != null) { _textEditor.Initialize(Content); } await base.OnAfterRenderAsync(firstRender); } public async Task GetHtml() { return await _textEditor.GetContent(); } private void CreateTextEditor(RenderTreeBuilder builder) { if(!string.IsNullOrEmpty(_textEditorProvider)) { var editorType = Type.GetType(_textEditorProvider); if (editorType != null) { builder.OpenComponent(0, editorType); var attributes = new Dictionary { { "Placeholder", Placeholder }, { "ReadOnly", ReadOnly } }; if (AdditionalAttributes != null) { foreach(var key in AdditionalAttributes.Keys) { if(!attributes.ContainsKey(key)) { attributes.Add(key, AdditionalAttributes[key]); } else { attributes[key] = AdditionalAttributes[key]; } } } var index = 1; foreach(var name in attributes.Keys) { if (editorType.GetProperty(name) != null) { builder.AddAttribute(index++, name, attributes[name]); } } builder.AddComponentReferenceCapture(index, (c) => { _textEditor = (ITextEditor)c; }); builder.CloseComponent(); } } } private async Task GetTextEditorType() { const string EditorSettingName = "TextEditorProvider"; if(!string.IsNullOrEmpty(Provider)) { var provider = ServiceProvider.GetServices().FirstOrDefault(i => i.Name.Equals(Provider, StringComparison.OrdinalIgnoreCase)); if(provider != null) { return provider.EditorType; } } var settings = await SettingService.GetSiteSettingsAsync(PageState.Site.SiteId); return SettingService.GetSetting(settings, EditorSettingName, Constants.DefaultTextEditorProvider); } }