public WeeeEmailServiceBuilder() { TemplateExecutor = A.Fake <ITemplateExecutor>(); MessageCreator = A.Fake <IMessageCreator>(); Sender = A.Fake <IWeeeSender>(); Configuration = A.Fake <IWeeeEmailConfiguration>(); }
/// <summary> /// 生成HTML代码。 /// </summary> /// <param name="executor">语法解析器。</param> /// <param name="instance">当前实例。</param> /// <param name="func">获取实例属性值。</param> /// <returns>返回HTML代码。</returns> public override string ToHtmlString(ITemplateExecutor executor, object instance, Func <object, string, object> func) { var sb = new StringBuilder(); sb.Append("<").Append(TagName); if (_basics.Count > 0 || _attributes.Count > 0) { var result = _basics.ToDictionary(x => x.Key, x => _regex.Replace(x.Value.Value, match => func(instance, match.Groups[1].Value.Trim())?.ToString())); executor.Execute(_attributes.Values, result, instance, func); foreach (var basic in result) { sb.Append(" ") .Append(basic.Key) .Append("=\"") .Append(basic.Value) .Append("\""); } } if (IsSelfClosed) { sb.Append("/>"); return(sb.ToString()); } sb.Append(">"); foreach (var node in this) { sb.Append(node.ToHtmlString(executor, instance, func)); } sb.Append("</").Append(TagName).Append(">"); return(sb.ToString()); }
private void AppendStartJsString(StringBuilder sb, ITemplateExecutor executor) { sb.Append("html+='<").Append(TagName); if (_basics.Count > 0 || _attributes.Count > 0) { var basics = _basics.ToDictionary(x => x.Key, x => _regex.Replace(x.Value.Value, "'+$1+'")); var js = executor.Execute(_attributes.Values, basics); foreach (var basic in basics) { sb.Append(" ") .Append(basic.Key) .Append("=\"") .Append(basic.Value) .Append("\""); } if (!string.IsNullOrWhiteSpace(js)) { sb.Append("';"); sb.Append(js); sb.Append("html+='"); } } if (IsSelfClosed) { sb.Append("/"); } sb.Append(">';"); }
/// <summary> /// 通过当前对象执行语法所得到的字符串。 /// </summary> /// <param name="element">属性实例对象。</param> /// <param name="executor">解析器接口。</param> /// <returns>返回脚本代码</returns> public string Begin(TemplateSyntaxElement element, ITemplateExecutor executor) { var sb = new StringBuilder(); sb.Append("if(").Append(element.Args).Append("){"); return(sb.ToString()); }
/// <summary> /// 生成脚本。 /// </summary> /// <param name="executor">脚本语法解析器。</param> /// <returns>返回生成后的脚本。</returns> public override string ToJsString(ITemplateExecutor executor) { if (Args == null) { return($"html+= {Keyword};"); } return($"html+= {Keyword} {Args};"); }
/// <summary> /// 生成脚本。 /// </summary> /// <param name="executor">脚本语法解析器。</param> /// <returns>返回生成后的脚本。</returns> public override string ToJsString(ITemplateExecutor executor) { var sb = new StringBuilder(); foreach (var element in this) { sb.Append(element.ToJsString(executor)); } return(sb.ToString()); }
/// <summary> /// 生成HTML代码。 /// </summary> /// <param name="executor">语法解析器。</param> /// <param name="instance">当前实例。</param> /// <param name="func">获取实例属性值。</param> /// <returns>返回HTML代码。</returns> public override string ToHtmlString(ITemplateExecutor executor, object instance, Func <object, string, object> func) { var sb = new StringBuilder(); foreach (var element in this) { sb.Append(element.ToHtmlString(executor, instance, func)); } return(sb.ToString()); }
/// <summary> /// 通过当前对象执行语法所得到的字符串。 /// </summary> /// <param name="element">属性实例对象。</param> /// <param name="executor">解析器接口。</param> /// <returns>返回脚本代码</returns> public string Begin(TemplateSyntaxElement element, ITemplateExecutor executor) { var items = element.Args.Trim().Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries); if (items.Length == 3 && items[1] == "in") { return($"{items[2]}.forEach(function({items[0]},index){{"); } throw new Exception("语法错误,必须为{{foreach xx in xxs}}!"); }
public WeeeEmailService( ITemplateExecutor templateExecutor, IMessageCreator messageCreator, IWeeeSender sender, IWeeeEmailConfiguration configuration) { this.templateExecutor = templateExecutor; this.messageCreator = messageCreator; this.sender = sender; this.configuration = configuration; }
/// <summary> /// 生成HTML代码。 /// </summary> /// <param name="executor">语法解析器。</param> /// <param name="instance">当前实例。</param> /// <param name="func">获取实例属性值。</param> /// <returns>返回HTML代码。</returns> public override string ToHtmlString(ITemplateExecutor executor, object instance, Func <object, string, object> func) { if (!executor.TryGetExecutor(this, out var syntax)) { throw new Exception($"不支持此语法:{ToString()}!"); } var sb = new StringBuilder(); sb.Append(syntax.Begin(this, executor, instance, func)); foreach (var child in this) { sb.Append(child.ToHtmlString(executor, instance, func)); } sb.Append(syntax.End(this, executor, instance, func)); return(sb.ToString()); }
/// <summary> /// 生成脚本。 /// </summary> /// <param name="executor">脚本语法解析器。</param> /// <returns>返回生成后的脚本。</returns> public override string ToJsString(ITemplateExecutor executor) { var sb = new StringBuilder(); AppendStartJsString(sb, executor); if (IsSelfClosed) { return(sb.ToString()); } foreach (var node in this) { sb.Append(node.ToJsString(executor)); } sb.Append("html+='").Append("</").Append(TagName).Append(">';"); return(sb.ToString()); }
/// <summary> /// 生成脚本。 /// </summary> /// <param name="executor">脚本语法解析器。</param> /// <returns>返回生成后的脚本。</returns> public override string ToJsString(ITemplateExecutor executor) { if (!executor.TryGetExecutor(this, out var syntax)) { throw new Exception($"不支持此语法:{ToString()}!"); } var sb = new StringBuilder(); sb.Append(syntax.Begin(this, executor)); foreach (var child in this) { sb.Append(child.ToJsString(executor)); } sb.Append(syntax.End(this, executor)); return(sb.ToString()); }
/// <summary> /// 通过当前对象执行语法所得到的字符串。 /// </summary> /// <param name="element">属性实例对象。</param> /// <param name="executor">解析器接口。</param> /// <returns>返回脚本代码</returns> public string Begin(TemplateSyntaxElement element, ITemplateExecutor executor) { if (element.IsSelfClosed || !element.Any()) { return("if($model.count>0){$model.children.forEach(function(item){appender(item);});}"); } var sb = new StringBuilder(); sb.Append("function children($model){"); foreach (var node in element) { sb.Append(node.ToJsString(executor)); } sb.Append("};"); sb.Append("if($model.count>0){$model.children.forEach(function(item){children(item);});}"); return(sb.ToString()); }
/// <summary> /// 通过当前对象执行语法所得到的字符串。 /// </summary> /// <param name="element">属性实例对象。</param> /// <param name="executor">解析器接口。</param> /// <param name="instance">当前实例对象。</param> /// <param name="func">获取当前对象属性值的方法。</param> /// <returns>返回脚本代码</returns> public string Begin(TemplateSyntaxElement element, ITemplateExecutor executor, object instance, Func <object, string, object> func) { var sb = new StringBuilder(); if (instance is IParentable models) { if (element.IsSelfClosed || !element.Any()) { foreach (var model in models.Children) { sb.Append(element.Document.ToHtmlString(executor, model, func)); } } else { foreach (var model in models.Children) { sb.Append(element.ToHtmlString(executor, model, func)); } } } return(sb.ToString()); }
/// <summary> /// 通过当前对象执行语法所得到的字符串。 /// </summary> /// <param name="element">属性实例对象。</param> /// <param name="executor">解析器接口。</param> /// <param name="instance">当前实例对象。</param> /// <param name="func">获取当前对象属性值的方法。</param> /// <returns>返回脚本代码</returns> public string End(TemplateSyntaxElement element, ITemplateExecutor executor, object instance, Func <object, string, object> func) { return(null); }
/// <summary> /// 生成HTML代码。 /// </summary> /// <param name="executor">语法解析器。</param> /// <param name="instance">当前实例。</param> /// <param name="func">获取实例属性值。</param> /// <returns>返回HTML代码。</returns> public override string ToHtmlString(ITemplateExecutor executor, object instance, Func <object, string, object> func) { return(func(instance, Keyword)?.ToString()); }
/// <summary> /// 生成HTML代码。 /// </summary> /// <param name="executor">语法解析器。</param> /// <param name="instance">当前实例。</param> /// <param name="func">获取实例属性值。</param> /// <returns>返回HTML代码。</returns> public abstract string ToHtmlString(ITemplateExecutor executor, object instance, Func <object, string, object> func);
public WeeeEmailServiceBuilder() { TemplateExecutor = A.Fake<ITemplateExecutor>(); MessageCreator = A.Fake<IMessageCreator>(); Sender = A.Fake<IWeeeSender>(); Configuration = A.Fake<IWeeeEmailConfiguration>(); }
public static string Execute(this ITemplateExecutor executor, RazorDocument document) { Contract.Requires(document != null); return(executor.Execute(document.Template, document.GetModel(), document.References)); }
public EmailService(ITemplateExecutor templateExecutor, IMessageCreator messageCreator, ISender sender) { this.templateExecutor = templateExecutor; this.messageCreator = messageCreator; this.sender = sender; }
/// <summary> /// 通过当前对象执行语法所得到的字符串。 /// </summary> /// <param name="element">属性实例对象。</param> /// <param name="executor">解析器接口。</param> /// <returns>返回脚本代码</returns> public string End(TemplateSyntaxElement element, ITemplateExecutor executor) { return("});"); }
/// <summary> /// 通过当前对象执行语法所得到的字符串。 /// </summary> /// <param name="element">属性实例对象。</param> /// <param name="executor">解析器接口。</param> /// <param name="instance">当前实例对象。</param> /// <param name="func">获取当前对象属性值的方法。</param> /// <returns>返回脚本代码</returns> public string Begin(TemplateSyntaxElement element, ITemplateExecutor executor, object instance, Func <object, string, object> func) { throw new NotImplementedException(); }
public TemplateTagHelper(ITemplateExecutor executor, IModel model) { _executor = executor; _model = model; }
/// <summary> /// 生成HTML代码。 /// </summary> /// <param name="executor">语法解析器。</param> /// <param name="instance">当前实例。</param> /// <param name="func">获取实例属性值。</param> /// <returns>返回HTML代码。</returns> public override string ToHtmlString(ITemplateExecutor executor, object instance, Func <object, string, object> func) { return(_source); }
/// <summary> /// 生成脚本。 /// </summary> /// <param name="executor">脚本语法解析器。</param> /// <returns>返回生成后的脚本。</returns> public override string ToJsString(ITemplateExecutor executor) { return($"html+='{_source?.Replace("'", "\'")}';"); }
/// <summary> /// 生成脚本。 /// </summary> /// <param name="executor">脚本语法解析器。</param> /// <returns>返回生成后的脚本。</returns> public abstract string ToJsString(ITemplateExecutor executor);