In one of our project we had to add custom element and custom attributes in TinyMCE for angular directive. However, TinyMCE was stripping off the non-registered element and attributes during the validation
Fortunately, EPiServer provides easy way to Add and Extend TinyMCE element and attributes.
First of all we need to define below class
Then, we need to define this EmptyHandler other wise js will throw error
Then, we need to update the web.config location settings
Then, we will update the episerver.config file to allow TinyMCE merge of custom element.
After all of the above steps TinyMCE will not strip off the custom elements and attibutes.
Fortunately, EPiServer provides easy way to Add and Extend TinyMCE element and attributes.
First of all we need to define below class
namespace EPiServer7App.EPiServerCore.Core.TinyMce
{
[TinyMCEPluginNonVisual(PlugInName = "TinyMceExtendedValidElements", AlwaysEnabled = true, EditorInitConfigurationOptions = "{ custom_elements : 'uib-accordion,uib-accordion-group', extended_valid_elements: 'uib-accordion[close-others],uib-accordion-group[heading]' }")]
public class TinyMceExtendedValidElements
{
}
}
Then, we need to define this EmptyHandler other wise js will throw error
using System.Web;
namespace EPiServer7App.EPiServerCore.Core.TinyMce
{
public class EmptyFileHandler : IHttpHandler
{
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
}
}
}
Then, we need to update the web.config location settings
<location path="util/editor/tinymce/plugins">
<system.webServer>
<handlers>
<add name="TinyMceExtendedValidElements" path="/util/editor/tinymce/plugins/TinyMceExtendedValidElements/editor_plugin.js" verb="GET" type="EPiServer7App.EPiServerCore.Core.TinyMce.EmptyFileHandler, EPiServer7App.EPiServerCore, Version=1.0.0.0, Culture=neutral" />
</handlers>
</system.webServer>
</location>
Then, we will update the episerver.config file to allow TinyMCE merge of custom element.
<episerver xmlns="http://EPiServer.Configuration.EPiServerSection">
<applicationSettings globalErrorHandling="Off" disableVersionDeletion="false" httpCacheVaryByCustom="path" httpCacheVaryByParams="id,epslanguage" httpCacheability="Public" uiEditorCssPaths="~/Static/css/editor.css" urlRebaseKind="ToRootRelative" pageUseBrowserLanguagePreferences="false" uiShowGlobalizationUserInterface="true" subscriptionHandler="EPiServer.Personalization.SubscriptionMail,EPiServer" uiMaxVersions="20" pageValidateTemplate="false" uiUrl="~/manage/CMS/" utilUrl="~/util/" pageFolderVirtualPathProvider="SitePageFiles" />
<workflowSettings>
<workflowHost type="EPiServer.WorkflowFoundation.AspNetWorkflowManager,EPiServer.WorkflowFoundation" />
<externalServices>
<externalService type="EPiServer.WorkflowFoundation.Workflows.ApprovalService,EPiServer.WorkflowFoundation" />
<externalService type="EPiServer.WorkflowFoundation.Workflows.ReadyForTranslationService,EPiServer.WorkflowFoundation" />
<externalService type="EPiServer.WorkflowFoundation.Workflows.RequestForFeedbackService,EPiServer.WorkflowFoundation" />
</externalServices>
</workflowSettings>
<tinyMCE mergedConfigurationProperties="valid_elements, extended_valid_elements, invalid_elements, valid_child_elements" />
</episerver>
After all of the above steps TinyMCE will not strip off the custom elements and attibutes.