Пример #1
0
 public WeeeEmailServiceBuilder()
 {
     TemplateExecutor = A.Fake <ITemplateExecutor>();
     MessageCreator   = A.Fake <IMessageCreator>();
     Sender           = A.Fake <IWeeeSender>();
     Configuration    = A.Fake <IWeeeEmailConfiguration>();
 }
Пример #2
0
        /// <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());
        }
Пример #3
0
 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};");
 }
Пример #6
0
        /// <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());
        }
Пример #7
0
        /// <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}}!");
        }
Пример #9
0
 public WeeeEmailService(
     ITemplateExecutor templateExecutor,
     IMessageCreator messageCreator,
     IWeeeSender sender,
     IWeeeEmailConfiguration configuration)
 {
     this.templateExecutor = templateExecutor;
     this.messageCreator   = messageCreator;
     this.sender           = sender;
     this.configuration    = configuration;
 }
 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());
        }
Пример #12
0
        /// <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());
        }
Пример #14
0
        /// <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());
        }
Пример #15
0
        /// <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());
        }
Пример #16
0
 /// <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);
 }
Пример #17
0
 /// <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());
 }
Пример #18
0
 /// <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>();
 }
Пример #20
0
 public static string Execute(this ITemplateExecutor executor, RazorDocument document)
 {
     Contract.Requires(document != null);
     return(executor.Execute(document.Template, document.GetModel(), document.References));
 }
Пример #21
0
 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();
 }
Пример #24
0
 public TemplateTagHelper(ITemplateExecutor executor, IModel model)
 {
     _executor = executor;
     _model    = model;
 }
Пример #25
0
 /// <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);
 }
Пример #26
0
 /// <summary>
 /// 生成脚本。
 /// </summary>
 /// <param name="executor">脚本语法解析器。</param>
 /// <returns>返回生成后的脚本。</returns>
 public override string ToJsString(ITemplateExecutor executor)
 {
     return($"html+='{_source?.Replace("'", "\'")}';");
 }
Пример #27
0
 /// <summary>
 /// 生成脚本。
 /// </summary>
 /// <param name="executor">脚本语法解析器。</param>
 /// <returns>返回生成后的脚本。</returns>
 public abstract string ToJsString(ITemplateExecutor executor);
Пример #28
0
 public EmailService(ITemplateExecutor templateExecutor, IMessageCreator messageCreator, ISender sender)
 {
     this.templateExecutor = templateExecutor;
     this.messageCreator   = messageCreator;
     this.sender           = sender;
 }