public EvaluatorResponse Evaluate(Node node, EvaluatorOption options) { if (node.nodeType != enumNodeType.COMMENT) { return(null); } /// NOTO: There are two place for evaluating comment command. if (Commands.CommandManager.IsCommand(node as Comment)) { var response = new EvaluatorResponse(); List <IRenderTask> result = new List <IRenderTask>(); Guid OwnerObjectId = options.OwnerObjectId; var command = Commands.CommandParser.ParseCommand(node as Comment); if (command.Name.ToLower() == "layout") { if ((options.IgnoreEvaluators & EnumEvaluator.LayoutCommand) == EnumEvaluator.LayoutCommand) { return(null); } var task = new CommandRenderTask(node as Comment, options); task.ClearBefore = true; result.Add(task); response.AppendTask = result; } else { var task = new CommandRenderTask(node as Comment, options); result.Add(task); response.ContentTask = result; } response.StopNextEvaluator = true; response.OmitTag = true; if (options.RequireBindingInfo) { if (response.BindingTask == null) { response.BindingTask = new List <IRenderTask>(); } var traceability = new ComponentTrace(command.Name, "command"); var bindingTask = new BindingRenderTask(traceability); response.BindingTask.Add(bindingTask); if (response.EndBindingTask == null) { response.EndBindingTask = new List <IRenderTask>(); } response.EndBindingTask.Add(bindingTask.BindingEndRenderTask); } return(response); } return(null); }
public EvaluatorResponse Evaluate(Node node, EvaluatorOption options) { if (options.IgnoreEvaluators.HasFlag(EnumEvaluator.kConfig)) { return(null); } if (node.nodeType != enumNodeType.ELEMENT) { return(null); } var element = node as Element; string attName = null; string attValue = null; foreach (var item in element.attributes) { if (item.name == "k-config") { attName = item.name; attValue = item.value; break; } } if (!string.IsNullOrEmpty(attName)) { var response = new EvaluatorResponse(); var result = new List <IRenderTask>(); var task = new KConfigRenderTask(element, attValue); result.Add(task); response.ContentTask = result; response.OmitTag = true; if (options.RequireBindingInfo && task.KConfigTraces.Count > 0) { if (response.BindingTask == null) { response.BindingTask = new List <IRenderTask>(); } if (response.EndBindingTask == null) { response.EndBindingTask = new List <IRenderTask>(); } var bindingRenderTasks = task.KConfigTraces.Select(s => new BindingRenderTask(s)).ToArray(); response.BindingTask.AddRange(bindingRenderTasks); response.EndBindingTask.AddRange(bindingRenderTasks.Select(s => s.BindingEndRenderTask).ToArray()); } return(response); } return(null); }
public EvaluatorResponse Evaluate(Node node, EvaluatorOption options) { if (options.IgnoreEvaluators.HasFlag(EnumEvaluator.kCache)) { return(null); } if (node.nodeType != enumNodeType.ELEMENT) { return(null); } var element = node as Element; int interval = 60 * 60; string LabelName = null; foreach (var item in element.attributes) { var lower = item.name.ToLower(); if (lower == "k-externalcache") { LabelName = item.name; break; } } if (!string.IsNullOrEmpty(LabelName)) { var response = new EvaluatorResponse(); string value = element.getAttribute(LabelName); element.removeAttribute(LabelName); string strinternval = element.getAttribute("k-interval"); if (!string.IsNullOrWhiteSpace(strinternval)) { int.TryParse(strinternval, out interval); element.removeAttribute("k-interval"); } element.removeAttribute("href"); List <IRenderTask> result = new List <IRenderTask>(); result.Add(new ContentRenderTask(" href=\"")); result.Add(new ExternalCacheRenderTask(value, interval)); result.Add(new ContentRenderTask("\"")); response.AttributeTask = result; return(response); } return(null); }
public EvaluatorResponse Evaluate(Node node, EvaluatorOption options) { if (node.nodeType != enumNodeType.ELEMENT) { return(null); } var element = node as Element; if (ComponentService.IsServerComponent(element.tagName)) { var response = new EvaluatorResponse(); List <IRenderTask> result = new List <IRenderTask>(); result.Add(new ServerComponentRenderTask(element)); response.ContentTask = result; response.OmitTag = true; response.StopNextEvaluator = true; return(response); } return(null); }
public EvaluatorResponse Evaluate(Node node, EvaluatorOption options) { if (options.IgnoreEvaluators.HasFlag(EnumEvaluator.kConfig)) { return(null); } if (node.nodeType != enumNodeType.ELEMENT) { return(null); } var element = node as Element; string attName = null; string attValue = null; foreach (var item in element.attributes) { if (item.name == "k-config") { attName = item.name; attValue = item.value; break; } } if (!string.IsNullOrEmpty(attName)) { var response = new EvaluatorResponse(); List <IRenderTask> result = new List <IRenderTask>(); result.Add(new KConfigRenderTask(element, attValue)); response.ContentTask = result; response.OmitTag = true; return(response); } return(null); }
public EvaluatorResponse Evaluate(Node node, EvaluatorOption options) { if (options.IgnoreEvaluators.HasFlag(EnumEvaluator.System)) { return(null); } if (node.nodeType != enumNodeType.ELEMENT) { return(null); } var element = node as Element; string attName = null; foreach (var item in element.attributes) { if (item.name.StartsWith("k-sys-")) { attName = item.name; break; } } if (!string.IsNullOrEmpty(attName)) { string conditiontext = element.getAttribute(attName); element.removeAttribute(attName); var response = new EvaluatorResponse(); List <IRenderTask> result = new List <IRenderTask>(); result.Add(new SysRenderTask(element, attName, conditiontext, options)); response.ContentTask = result; response.StopNextEvaluator = true; response.OmitTag = true; return(response); } return(null); }
public EvaluatorResponse Evaluate(Node node, EvaluatorOption options) { if (options.IgnoreEvaluators.HasFlag(EnumEvaluator.Version)) { return(null); } if (!options.EnableImageBrowserCache && !options.EnableJsCssBrowserCache) { return(null); } if (node.nodeType != enumNodeType.ELEMENT) { return(null); } var element = node as Element; // only for style, script and image. if (element.tagName != "script" && element.tagName != "link" && element.tagName != "img") { return(null); } if (element.tagName == "img") { if (!options.EnableImageBrowserCache) { return(null); } } if (element.tagName == "script" || element.tagName == "style") { if (!options.EnableJsCssBrowserCache) { return(null); } } if (element.tagName == "link") { if (!options.EnableJsCssBrowserCache) { return(null); } var rel = element.getAttribute("rel"); var url = element.getAttribute("href"); var mine = Kooboo.Lib.Helper.IOHelper.MimeType(url); if (mine == null) { return(null); } if (!mine.ToLower().Contains("css") && !mine.ToLower().Contains("font") && !mine.ToLower().Contains("style")) { return(null); } } Dictionary <string, string> appendValues = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); string attname = null; bool IsStyle = false; bool IsImage = false; if (element.tagName == "script") { attname = "src"; } else if (element.tagName == "link") { attname = "href"; IsStyle = true; } else if (element.tagName == "img") { attname = "src"; IsImage = true; } string value = element.getAttribute(attname); if (string.IsNullOrWhiteSpace(value)) { return(null); } element.removeAttribute(attname); EvaluatorResponse response = new EvaluatorResponse(); List <IRenderTask> tasks = new List <IRenderTask>(); tasks.Add(new ContentRenderTask(" " + attname + "=\"")); tasks.Add(new VersionRenderTask(value, IsStyle, IsImage)); tasks.Add(new ContentRenderTask("\"")); if (response.AttributeTask == null) { response.AttributeTask = tasks; } else { response.AttributeTask.AddRange(tasks); } if (response.AttributeTask == null || response.AttributeTask.Count() == 0) { return(null); } else { return(response); } }
public EvaluatorResponse Evaluate(Node node, EvaluatorOption options) { if (options.IgnoreEvaluators.HasFlag(EnumEvaluator.For)) { return(null); } if (node.nodeType != enumNodeType.ELEMENT) { return(null); } var element = node as Element; string attName = null; foreach (var item in element.attributes) { var lower = item.name.ToLower(); if (lower == "tal-for" || lower == "k-for") { attName = item.name; break; } } if (string.IsNullOrEmpty(attName)) { return(null); } string repeatitems = element.getAttribute(attName).Trim(); if (string.IsNullOrEmpty(repeatitems)) { return(null); } element.removeAttribute(attName); bool repeatself = false; if (element.hasAttribute("repeat-self")) { repeatself = true; element.removeAttribute("repeat-self"); } else if (element.hasAttribute("tal-repeat-self")) { repeatself = true; element.removeAttribute("tal-repeat-self"); } else if (element.hasAttribute("k-repeat-self")) { repeatself = true; element.removeAttribute("k-repeat-self"); } var para = PrasePara(repeatitems); if (para == null) { return(null); } ForRenderTask task = new ForRenderTask(para.DataKey, para.LowBound, para.HighBound, repeatself, element, options); var response = new EvaluatorResponse(); var result = new List <IRenderTask>(); result.Add(task); response.ContentTask = result; response.OmitTag = true; response.StopNextEvaluator = true; if (options.RequireBindingInfo) { if (response.BindingTask == null) { response.BindingTask = new List <IRenderTask>(); } var traceability = new RepeatTrace(); var bindingTask = new BindingRenderTask(traceability); response.BindingTask.Add(bindingTask); if (response.EndBindingTask == null) { response.EndBindingTask = new List <IRenderTask>(); } response.EndBindingTask.Add(bindingTask.BindingEndRenderTask); } return(response); }
public EvaluatorResponse Evaluate(Node node, EvaluatorOption options) { if (node.nodeType != enumNodeType.COMMENT) { return(null); } /// NOTO: There are two place for evaluating comment command. if (Commands.CommandManager.IsCommand(node as Comment)) { var response = new EvaluatorResponse(); List <IRenderTask> result = new List <IRenderTask>(); Guid OwnerObjectId = options.OwnerObjectId; var command = Commands.CommandParser.ParseCommand(node as Comment); if (command.Name.ToLower() == "layout") { if ((options.IgnoreEvaluators & EnumEvaluator.LayoutCommand) == EnumEvaluator.LayoutCommand) { return(null); } var task = new CommandRenderTask(node as Comment); task.ClearBefore = true; result.Add(task); response.AppendTask = result; } else { var task = new CommandRenderTask(node as Comment); result.Add(task); response.ContentTask = result; } response.StopNextEvaluator = true; response.OmitTag = true; if (options.RequireBindingInfo) { string boundary = Kooboo.Lib.Helper.StringHelper.GetUniqueBoundary(); var startbinding = new BindingObjectRenderTask() { ObjectType = "Command", Boundary = boundary, NameOrId = command.Name }; List <IRenderTask> bindingstarts = new List <IRenderTask>(); bindingstarts.Add(startbinding); response.BindingTask = bindingstarts; var endbinding = new BindingObjectRenderTask() { ObjectType = "Command", IsEndBinding = true, Boundary = boundary, NameOrId = command.Name }; List <IRenderTask> bindingends = new List <IRenderTask>(); bindingends.Add(endbinding); response.EndBindingTask = bindingends; } return(response); } return(null); }
public EvaluatorResponse Evaluate(Node node, EvaluatorOption options) { if (options.IgnoreEvaluators.HasFlag(EnumEvaluator.LocalCache)) { return(null); } if (node.nodeType != enumNodeType.ELEMENT) { return(null); } var element = node as Element; if (!element.hasAttribute("k-localcache")) { return(null); } string attName = "k-localcache"; string attvalue = element.getAttribute(attName); var source = GetSourceLink(element); if (string.IsNullOrEmpty(attvalue)) { attvalue = source.AttributeValue; } element.removeAttribute(attName); if (attvalue == null) { return(null); } if (source != null) { element.removeAttribute(source.AttributeName); } EvaluatorResponse response = new EvaluatorResponse(); List <IRenderTask> tasks = new List <IRenderTask>(); tasks.Add(new ContentRenderTask(" " + source.AttributeName + "=\"")); var local = new LocalCacheRenderTask(attvalue); tasks.Add(local); tasks.Add(new ContentRenderTask("\"")); if (response.AttributeTask == null) { response.AttributeTask = tasks; } else { response.AttributeTask.AddRange(tasks); } if (response.AttributeTask == null || response.AttributeTask.Count() == 0) { return(null); } else { return(response); } }