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"));
 }
예제 #2
0
        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);
        }