protected override DriverResult Editor(TinyMceSiteSettingsPart part, IUpdateModel updater, dynamic shapeHelper) { part.DefaultInitScript = _tinyMceEnhancementService.GetDefaultInitScript(); part.FrontendDefaultInitScript = _tinyMceEnhancementService.GetFrontendDefaultInitScript(); return(ContentShape("Parts_TinyMceSiteSettings_Edit", () => { if (updater != null) { updater.TryUpdateModel(part, Prefix, null, null); } return shapeHelper.EditorTemplate(TemplateName: templateName, Model: part, Prefix: Prefix); }).OnGroup("TinyMce")); }
private void FrontendDisplayed(ShapeDisplayedContext context, TinyMceSiteSettingsPart settings) { var htmlOrig = context.ChildContent.ToHtmlString(); var plugins = _tinyMceEnhancementService.GetFrontendCorePluginsList(); var externalPlugins = ""; var scriptList = new List <string>(); // There are two different AdditionalPlugins fields: // - AdditionalPlugins are used for backoffice plugins // - FrontendAdditionalPlugins are used for frontend content edit (in this case, plugins needing admin panel access authorization need to be disabled) var additionalPlugins = settings.FrontendAdditionalPlugins; if (!string.IsNullOrWhiteSpace(additionalPlugins)) { // external plugins example: // external_plugins: { // 'testing': 'http://www.testing.com/plugin.min.js', // 'maths': 'http://www.maths.com/plugin.min.js' // } var namesList = additionalPlugins.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); var pluginList = new List <string>(); var serverRelativeUrlBase = string.IsNullOrWhiteSpace(HttpContext.Current.Request.ApplicationPath) ? "" : "/" + HttpContext.Current.Request.ApplicationPath.TrimStart('/'); foreach (var item in namesList) { if (item.Contains('/')) { //scriptList.Add($"<script src=\"{serverRelativeUrlBase}/Modules/Laser.Orchard.StartupConfig/Scripts/tinymceplugins/{item}\" type=\"text/javascript\"></script>"); var pluginName = item.Split('/')[0]; pluginList.Add($"'{pluginName}': '{serverRelativeUrlBase}/Modules/Laser.Orchard.StartupConfig/Scripts/tinymceplugins/{item}'"); } else { pluginList.Add($"'{item}': '{serverRelativeUrlBase}/Modules/Laser.Orchard.StartupConfig/Scripts/tinymceplugins/{item}/plugin.min.js'"); } } externalPlugins = @", external_plugins: { " + string.Join(",\r\n", pluginList) + @" }"; } var init = ""; // There are two different InitScript fields: // - InitScript is used for backoffice plugins // - FrontendInitScript is used for frontend content edit (in this case, plugins needing admin panel access authorization need to be disabled) var initScript = settings.FrontendInitScript; if (string.IsNullOrWhiteSpace(initScript)) { init = _tinyMceEnhancementService.GetFrontendDefaultInitScript(); } else { init = initScript + @", plugins: [""" + plugins + @"""]"; } var additionalScripts = new StringBuilder(); foreach (var script in scriptList) { additionalScripts.AppendLine(script); } var html = @"<script type=""text/javascript""> $(function() { tinyMCE.init({ " + init + externalPlugins + @", " + Constants.FrontendDefaultSetup + @" }); }); </script> " + additionalScripts.ToString() + htmlOrig; context.ChildContent = new HtmlString(html); }