public static async Task <string> RenderPageAsync(FrontContext context) { if (context.Page.Parameters.Count > 0) { context.RenderContext.DataContext.Push(context.Page.Parameters); } string result = string.Empty; List <IRenderTask> RenderPlan = null; var option = RenderOptionHelper.GetPageOption(context); if (option.RequireBindingInfo) { string html = DomService.ApplyKoobooId(context.Page.Body); RenderPlan = RenderEvaluator.Evaluate(html, option); var traceability = new ComponentTrace(context.Page.Id.ToString(), "page"); var bindingTask = new BindingRenderTask(traceability, new Dictionary <string, string> { { "scope", "true" } }); RenderPlan.Insert(0, bindingTask); RenderPlan.Add(bindingTask.BindingEndRenderTask); result = RenderHelper.Render(RenderPlan, context.RenderContext); result = DomService.EnsureDocType(result); } else { RenderPlan = Cache.RenderPlan.GetOrAddRenderPlan(context.SiteDb, context.Page.Id, () => RenderEvaluator.Evaluate(context.Page.Body, option)); result = RenderHelper.Render(RenderPlan, context.RenderContext); } if (context.Page.Type == Models.PageType.RichText) { //special for richtext editor. meta name = "viewport" content = "width=device-width, initial-scale=1" var header = new Models.HtmlHeader(); Dictionary <string, string> content = new Dictionary <string, string>(); content.Add("", "width=device-width, initial-scale=1"); header.Metas.Add(new Models.HtmlMeta() { name = "viewport", content = content }); result = HtmlHeadService.SetHeaderToHtml(result, header); } return(result); }
public static async Task <string> RenderMockPageAsync(FrontContext context) { if (context.Page.Parameters.Count > 0) { context.RenderContext.DataContext.Push(context.Page.Parameters); } string result = string.Empty; List <IRenderTask> RenderPlan = null; var option = RenderOptionHelper.GetPageOption(context); option.Evaluators = EvaluatorContainer.MockData; context.RenderContext.MockData = true; RenderPlan = RenderEvaluator.Evaluate(context.Page.Body, option); result = RenderHelper.Render(RenderPlan, context.RenderContext); return(result); }
public static List <IRenderTask> GetLayoutPlan(string NameOrId, RenderContext context) { var layout = context.WebSite.SiteDb().Layouts.GetByNameOrId(NameOrId); if (layout == null) { return(null); } List <IRenderTask> renderplans = null; EvaluatorOption options = RenderOptionHelper.GetLayoutOption(context, layout.Id); if (options.RequireBindingInfo) { string body = DomService.ApplyKoobooId(layout.Body); renderplans = RenderEvaluator.Evaluate(body, options); } else { renderplans = Cache.RenderPlan.GetOrAddRenderPlan(context.WebSite.SiteDb(), layout.Id, () => RenderEvaluator.Evaluate(layout.Body, options)); } return(renderplans); }
public static async Task <string> RenderPageAsync(FrontContext context) { if (context.Page.Parameters.Count > 0) { context.RenderContext.DataContext.Push(context.Page.Parameters); } string result = string.Empty; List <IRenderTask> RenderPlan = null; var option = RenderOptionHelper.GetPageOption(context); if (option.RequireBindingInfo) { string html = DomService.ApplyKoobooId(context.Page.Body); RenderPlan = RenderEvaluator.Evaluate(html, option); var traceability = new ComponentTrace(context.Page.Id.ToString(), "page"); var bindingTask = new BindingRenderTask(traceability, new Dictionary <string, string> { { "scope", "true" } }); RenderPlan.Insert(0, bindingTask); RenderPlan.Add(bindingTask.BindingEndRenderTask); result = RenderHelper.Render(RenderPlan, context.RenderContext); result = DomService.EnsureDocType(result); } else { RenderPlan = Cache.RenderPlan.GetOrAddRenderPlan(context.SiteDb, context.Page.Id, () => RenderEvaluator.Evaluate(context.Page.Body, option)); // check the cache. if (context.Page.EnableCache) { Dictionary <string, string> querystring = null; if (!string.IsNullOrWhiteSpace(context.Page.CacheQueryKeys)) { //querystring = RequestManager.GetQueryString(context.RenderContext.Request); querystring = GetParaValues(context.RenderContext, context.Page.CacheKeys); } if (context.Page.CacheByVersion) { result = PageCache.PageCache.GetByVersion(context.SiteDb.Id, context.Page.Id, context.Page.Version, querystring); } else { result = PageCache.PageCache.GetByMinutes(context.SiteDb.Id, context.Page.Id, context.Page.CacheMinutes, querystring, context.Page.Version); } if (string.IsNullOrEmpty(result)) { result = RenderHelper.Render(RenderPlan, context.RenderContext); Kooboo.Sites.Render.PageCache.PageCache.Set(context.SiteDb.Id, context.Page.Id, result, context.Page.Version, querystring); } // cache result may have replacement. } else { result = RenderHelper.Render(RenderPlan, context.RenderContext); } } if (context.Page.Type == Models.PageType.RichText) { //special for richtext editor. meta name = "viewport" content = "width=device-width, initial-scale=1" var header = new Models.HtmlHeader(); Dictionary <string, string> content = new Dictionary <string, string>(); content.Add("", "width=device-width, initial-scale=1"); header.Metas.Add(new Models.HtmlMeta() { name = "viewport", content = content }); result = HtmlHeadService.SetHeaderToHtml(result, header); } return(result); }
public string Render(RenderContext context) { var headerbinding = context.HeaderBindings; if (headerbinding == null) { return(this.HeaderHtml); } StringBuilder sb = new StringBuilder(); if (this.HeaderItems != null) { foreach (var item in this.HeaderItems) { if (item.isTitle) { string newcontent = null; var binding = headerbinding.Find(o => o.IsTitle); if (binding != null) { newcontent = GetBindingContent(binding, context); headerbinding.Remove(binding); } sb.Append(RenderTitle(item, newcontent)); } else if (item.NoRender) { sb.Append(item.OriginalHtml); } else if (item.IsMeta) { sb.Append(RenderHeaderMetaItem(item, headerbinding, context)); } else if (item.IsRenderTask) { if (item.renderTasks == null) { var option = RenderOptionHelper.GetHeaderOption(context); var plan = Kooboo.Sites.Render.RenderEvaluator.Evaluate(item.OriginalHtml, option); if (plan == null) { item.NoRender = true; sb.Append(item.OriginalHtml); } else { item.renderTasks = plan; var renderresult = Kooboo.Sites.Render.RenderHelper.Render(item.renderTasks, context); sb.Append(renderresult); } } else { var renderresult = Kooboo.Sites.Render.RenderHelper.Render(item.renderTasks, context); sb.Append(renderresult); } } } } foreach (var item in headerbinding) { sb.Append(RenderBindingItem(item, context)); } if (sb.Length > 0) { sb.Insert(0, this.HeaderStartTag); sb.Append("</head>"); } return(sb.ToString()); }