private void AddWebPackConfig(FileInfo csprojFile, string pageName) { DirectoryInfo wwwroot = new DirectoryInfo(Path.Combine(csprojFile.Directory.FullName, "wwwroot")); DirectoryInfo projectParent = csprojFile.Directory; string appName = Path.GetFileNameWithoutExtension(csprojFile.Name); string wwwrootPath = wwwroot.FullName; if (!wwwrootPath.EndsWith(Path.DirectorySeparatorChar.ToString())) { wwwrootPath += Path.DirectorySeparatorChar.ToString(); } PageRenderModel pageRenderModel = new PageRenderModel { BaseNamespace = $"{appName}", PageName = pageName, WwwRoot = wwwrootPath }; HandlebarsDirectory handlebarsDirectory = GetHandlebarsDirectory(); string pageJsPath = Path.Combine(wwwroot.FullName, "bam.js", "pages", $"{pageName}.js"); string webPackConfigPath = Path.Combine(wwwroot.FullName, "bam.js", "configs", pageName, "webpack.config.js"); if (!File.Exists(pageJsPath)) { Message.PrintLine("Writing page JavaScript file {0}", ConsoleColor.Blue, pageJsPath); handlebarsDirectory.Render("Page.js", pageRenderModel).SafeWriteToFile(pageJsPath, true); } if (!File.Exists(webPackConfigPath)) { Message.PrintLine("Writing web pack config file {0}", ConsoleColor.DarkBlue, webPackConfigPath); handlebarsDirectory.Render("Webpack.config.js", pageRenderModel).SafeWriteToFile(webPackConfigPath, true); } }
private void AddPage(FileInfo csprojFile, string pageName) { DirectoryInfo projectParent = csprojFile.Directory; string appName = Path.GetFileNameWithoutExtension(csprojFile.Name); DirectoryInfo pagesDirectory = new DirectoryInfo(Path.Combine(projectParent.FullName, "Pages")); PageRenderModel pageRenderModel = new PageRenderModel { BaseNamespace = $"{appName}", PageName = pageName }; HandlebarsDirectory handlebarsDirectory = GetHandlebarsDirectory(); string csHtmlFilePath = Path.Combine(pagesDirectory.FullName, $"{pageName}.cshtml"); if (!File.Exists(csHtmlFilePath)) { EnsureDirectoryExists(csHtmlFilePath); string pageContent = handlebarsDirectory.Render("Page.cshtml", pageRenderModel); Message.PrintLine("Writing page file {0}", ConsoleColor.Cyan, csHtmlFilePath); pageContent.SafeWriteToFile(csHtmlFilePath, true); } string csHtmlcsFilePath = $"{csHtmlFilePath}.cs"; if (!File.Exists(csHtmlcsFilePath)) { EnsureDirectoryExists(csHtmlcsFilePath); string codeBehindContent = handlebarsDirectory.Render("Page.cshtml.cs", pageRenderModel); Message.PrintLine("Writing code behind file {0}", ConsoleColor.DarkCyan, csHtmlcsFilePath); codeBehindContent.SafeWriteToFile(csHtmlcsFilePath, true); } AddWebPackConfig(csprojFile, pageName); }
/// <summary> /// Render curly bracket /// </summary> /// <param name="parameters"></param> /// <returns></returns> public string Render(string[] parameters) { ParseParams(parameters); var page = _pageServices.GetById(PageId); if (page == null) { return(_localizedResourceServices.T("CurlyBracketsRendering:::PageContent:::Messages:::GetPageContentIdNotFounded:::Page id is invalid. Please check the data again.")); } var pageRenderModel = new PageRenderModel(page); var template = _templateServices.GetTemplateByName(Template) ?? _templateServices.GetTemplateByName(DefaultTemplate); return(_templateServices.Parse(template.Content, pageRenderModel, null, template.CacheName)); }
/// <summary> /// Render page content by friendly url /// </summary> /// <param name="url"></param> /// <returns></returns> public PageRenderModel RenderContent(string url) { var page = GetPage(url); if (page != null) { WorkContext.ActivePageId = page.Id; var model = new PageRenderModel(page); if (model.IsFileTemplate) { return(model); } var template = _pageTemplateServices.RenderPageTemplate(page.PageTemplateId, model); if (template.IndexOf(Configurations.RenderBody, StringComparison.Ordinal) > -1) { template = template.Replace(Configurations.RenderBody, "@Raw(Model.Content)"); } template = _templateServices.Parse(template, model, null, page.Title); model.Content = _curlyBracketServices.Render(template); return(model); } return(null); }
public string RenderPageTemplate(int?pageTemplateId, PageRenderModel model) { var pageTemplate = GetById(pageTemplateId); var config = _templateServices.GetConfig(); using (var templateService = new TemplateService(config)) { /* * Get default master template for all content * This template is used for including some scripts or html for all page contents and file contents */ var defaultTemplate = GetDefaultTemplate(); var template = defaultTemplate.Content; template = CurlyBracketParser.ParseProperties(template); template = CurlyBracketParser.ParseRenderBody(template); var layout = TemplateServices.GetTemplateCacheName(defaultTemplate.Name, defaultTemplate.Created, defaultTemplate.Updated); if (Razor.Resolve(layout) == null) { templateService.Compile(template, typeof(PageRenderModel), layout); } /* * Loop all the parent template to compile and render layout */ if (pageTemplate != null) { // Using hierarchy to load all parent templates var pageTemplates = _pageTemplateRepository.GetAll().Where(t => pageTemplate.Hierarchy.Contains(t.Hierarchy)) .OrderBy(t => t.Hierarchy) .Select(t => new { t.Content, t.Name, t.Updated, t.Created }); if (pageTemplates.Any()) { foreach (var item in pageTemplates) { //Convert curly bracket properties to razor syntax template = CurlyBracketParser.ParseProperties(item.Content); //Insert master page for child template and parsing template = InsertMasterPage(template, layout); template = FormatMaster(template); template = templateService.Parse(template, model, null, null); template = ReformatMaster(template); //This used for re-cache the template layout = TemplateServices.GetTemplateCacheName(item.Name, item.Created, item.Updated); //Convert {RenderBody} to @RenderBody() for next rendering template = CurlyBracketParser.ParseRenderBody(template); if (Razor.Resolve(layout) == null) { templateService.Compile(template, typeof(PageRenderModel), layout); } } } } return(template); } }