/// <summary> /// Parses the rendered html string of a module, when in edit mode. It adds attributes used for hovering and interacting /// with a module in siteviewer mode. It also adds a css class. /// </summary> private string ParseModuleForEditing(string moduleHtml, IEntityVersionPageModuleRenderDetails moduleViewModel) { string entityType = moduleViewModel is CustomEntityVersionPageModuleRenderDetails ? "custom-entity" : "page"; var attrs = new Dictionary <string, string>(); attrs.Add("class", "cofoundry-sv__module"); attrs.Add("data-cms-" + entityType + "-section-module", string.Empty); if (moduleViewModel != null) { attrs.Add("data-cms-version-module-id", moduleViewModel.EntityVersionPageModuleId.ToString()); attrs.Add("data-cms-page-module-type-id", moduleViewModel.ModuleType.PageModuleTypeId.ToString()); attrs.Add("data-cms-page-module-title", moduleViewModel.ModuleType.Name.ToString()); } var editModuleHtml = new HtmlDocument(); editModuleHtml.LoadHtml(moduleHtml.Trim()); var nodes = editModuleHtml.DocumentNode.ChildNodes; if (nodes.Count == 1) { var node = nodes.Single(); if (node.NodeType == HtmlNodeType.Element) { return(node .MergeAttributes(attrs) .OuterHtml); } } var wrap = new HtmlDocument(); var wrapper = wrap.CreateElement("div"); wrapper.InnerHtml = moduleHtml; wrapper.MergeAttributes(attrs); return(wrapper.OuterHtml); }
private string GetViewPath(IEntityVersionPageModuleRenderDetails moduleViewModel) { string viewPath; string fileName = moduleViewModel.ModuleType.FileName; if (moduleViewModel.Template == null) { viewPath = _pageModuleTypeViewFileLocator.GetPathByFileName(fileName); } else { viewPath = _pageModuleTypeViewFileLocator.GetTemplatePathByTemplateFileName(fileName, moduleViewModel.Template.FileName); } if (viewPath == null) { return(null); } return("~" + viewPath); }
private IPageModuleDisplayModel GetModuleDisplayData(IEditablePageViewModel pageViewModel, IEntityVersionPageModuleRenderDetails moduleViewModel) { var displayData = moduleViewModel.DisplayModel as IPageModuleWithParentPageData; if (displayData != null) { displayData.ParentPage = pageViewModel; } return(moduleViewModel.DisplayModel); }
/// <summary> /// Renders a page module by finding the template and applying the specified model to it /// </summary> /// <param name="controllerContext">ControllerContext is required so we can render the razor view</param> /// <param name="pageViewModel">The view model for the page being rendered</param> /// <param name="moduleViewModel">The view model for the module being rendered</param> /// <returns>The rednered module html</returns> public string RenderModule(ControllerContext controllerContext, IEditablePageViewModel pageViewModel, IEntityVersionPageModuleRenderDetails moduleViewModel) { var displayData = GetModuleDisplayData(pageViewModel, moduleViewModel); string viewPath = GetViewPath(moduleViewModel); var viewRenderer = new RazorViewRenderer(controllerContext); string html = viewRenderer.RenderPartialView(viewPath, displayData); if (pageViewModel.IsPageEditMode) { html = ParseModuleForEditing(html, moduleViewModel); } return(html); }