Exemple #1
0
        public IRawString htmlDump(TemplateScopeContext scope, object target, object scopeOptions)
        {
            var scopedParams = scope.AssertOptions(nameof(htmlDump), scopeOptions);
            var depth        = scopedParams.TryGetValue("depth", out object oDepth) ? (int)oDepth : 0;
            var childDepth   = scopedParams.TryGetValue("childDepth", out object oChildDepth) ? oChildDepth.ConvertTo <int>() : 1;

            scopedParams["depth"] = depth + 1;

            try
            {
                if (!isComplexType(target))
                {
                    return(GetScalarHtml(target).ToRawString());
                }

                scopedParams.TryGetValue("captionIfEmpty", out object captionIfEmpty);
                scopedParams.TryGetValue("headerStyle", out object oHeaderStyle);
                scopedParams.TryGetValue("className", out object parentClass);
                scopedParams.TryGetValue("childClass", out object childClass);
                var headerStyle = oHeaderStyle as string ?? "splitCase";
                var className   = ((depth < childDepth ? parentClass : childClass ?? parentClass)
                                   ?? Context.Args[TemplateConstants.DefaultTableClassName]).ToString();

                if (target is IEnumerable e)
                {
                    var objs = e.Map(x => x);

                    var isEmpty = objs.Count == 0;
                    if (isEmpty && captionIfEmpty == null)
                    {
                        return(RawString.Empty);
                    }

                    var first = !isEmpty ? objs[0] : null;
                    if (first is IDictionary)
                    {
                        return(htmlList(scope, target, scopeOptions));
                    }

                    var sb = StringBuilderCacheAlt.Allocate();

                    sb.Append("<table");

                    if (scopedParams.TryGetValue("id", out object id))
                    {
                        sb.Append(" id=\"").Append(id).Append("\"");
                    }
                    if (className != null)
                    {
                        sb.Append(" class=\"").Append(className).Append("\"");
                    }

                    sb.Append(">");

                    scopedParams.TryGetValue("caption", out object caption);
                    if (isEmpty)
                    {
                        caption = captionIfEmpty;
                    }

                    if (caption != null)
                    {
                        sb.Append("<caption>").Append(caption.ToString().HtmlEncode()).Append("</caption>");
                    }

                    if (!isEmpty)
                    {
                        sb.Append("<tbody>");

                        if (first is KeyValuePair <string, object> )
                        {
                            foreach (var o in objs)
                            {
                                if (o is KeyValuePair <string, object> kvp)
                                {
                                    sb.Append("<tr>");
                                    sb.Append("<th>");
                                    sb.Append(Context.DefaultFilters?.textStyle(kvp.Key, headerStyle)?.HtmlEncode());
                                    sb.Append("</th>");
                                    sb.Append("<td>");
                                    if (!isComplexType(kvp.Value))
                                    {
                                        sb.Append(GetScalarHtml(kvp.Value));
                                    }
                                    else
                                    {
                                        var body = htmlDump(scope, kvp.Value, scopeOptions);
                                        sb.Append(body.ToRawString());
                                    }
                                    sb.Append("</td>");
                                    sb.Append("</tr>");
                                }
                            }
                        }
                        else if (!isComplexType(first))
                        {
                            foreach (var o in objs)
                            {
                                sb.Append("<tr>");
                                sb.Append("<td>");
                                sb.Append(GetScalarHtml(o));
                                sb.Append("</td>");
                                sb.Append("</tr>");
                            }
                        }
                        else
                        {
                            if (objs.Count > 1)
                            {
                                var rows = objs.Map(x => x.ToObjectDictionary());
                                sb.Append("<tr>");
                                sb.Append("<td>");
                                var list = htmlList(scope, rows, scopeOptions);
                                sb.Append(list.ToRawString());
                                sb.Append("</td>");
                                sb.Append("</tr>");
                            }
                            else
                            {
                                foreach (var o in objs)
                                {
                                    sb.Append("<tr>");

                                    if (!isComplexType(o))
                                    {
                                        sb.Append("<td>");
                                        sb.Append(GetScalarHtml(o));
                                        sb.Append("</td>");
                                    }
                                    else
                                    {
                                        sb.Append("<td>");
                                        var body = htmlDump(scope, o, scopeOptions);
                                        sb.Append(body.ToRawString());
                                        sb.Append("</td>");
                                    }

                                    sb.Append("</tr>");
                                }
                            }
                        }

                        sb.Append("</tbody>");
                    }

                    sb.Append("</table>");

                    var html = StringBuilderCacheAlt.ReturnAndFree(sb);
                    return(html.ToRawString());
                }

                return(htmlDump(scope, target.ToObjectDictionary(), scopeOptions));
            }
            finally
            {
                scopedParams["depth"] = depth;
            }
        }
Exemple #2
0
 public object throwUnauthorizedAccessException(TemplateScopeContext scope, string message, object options) => new UnauthorizedAccessException(message).InStopFilter(scope, options);
Exemple #3
0
 public object throwOptimisticConcurrencyException(TemplateScopeContext scope, string message, object options) => new Data.OptimisticConcurrencyException(message).InStopFilter(scope, options);
Exemple #4
0
 public object skipExecutingFiltersOnError(TemplateScopeContext scope)
 {
     scope.PageResult.SkipExecutingFiltersIfError = true;
     return(StopExecution.Value);
 }
Exemple #5
0
 public object throwNotSupportedException(TemplateScopeContext scope, string message) => new NotSupportedException(message).InStopFilter(scope, null);
Exemple #6
0
 public object ifThrowArgumentNullException(TemplateScopeContext scope, bool test, string paramName) => test
     ? new ArgumentNullException(paramName).InStopFilter(scope, null)
     : StopExecution.Value;
Exemple #7
0
 public object throwArgumentException(TemplateScopeContext scope, string message) => new ArgumentException(message).InStopFilter(scope, null);
Exemple #8
0
 public static Task WritePageAsync(this TemplateScopeContext scope) => scope.PageResult.WritePageAsync(scope.Page, scope);
Exemple #9
0
 public static TemplateScopeContext ScopeWithStream(this TemplateScopeContext scope, Stream stream) =>
 new TemplateScopeContext(scope.PageResult, stream, scope.ScopedParams);
Exemple #10
0
 public IRawString htmlErrorDebug(TemplateScopeContext scope) => htmlErrorDebug(scope, scope.PageResult.LastFilterError);
Exemple #11
0
 [HandleUnknownValue] public IRawString htmlErrorDebug(TemplateScopeContext scope, object ex) =>
 htmlErrorDebug(scope, ex as Exception ?? scope.PageResult.LastFilterError, ex as Dictionary <string, object>);
Exemple #12
0
 public IRawString htmlErrorMessage(TemplateScopeContext scope) => htmlErrorMessage(scope.PageResult.LastFilterError);
Exemple #13
0
 [HandleUnknownValue] public IRawString htmlError(TemplateScopeContext scope, Exception ex, object options) =>
 Context.DebugMode ? htmlErrorDebug(scope, ex, options) : htmlErrorMessage(ex, options);
Exemple #14
0
 [HandleUnknownValue] public IRawString htmlError(TemplateScopeContext scope, Exception ex) => htmlError(scope, ex, null);
Exemple #15
0
 public object ifThrowArgumentException(TemplateScopeContext scope, bool test, string message, string paramName, object options) => test
     ? new ArgumentException(message, paramName).InStopFilter(scope, options)
     : StopExecution.Value;
Exemple #16
0
 public static async Task WritePageAsync(this TemplateScopeContext scope, TemplatePage page, TemplateCodePage codePage, Dictionary <string, object> pageParams, CancellationToken token = default(CancellationToken))
 {
     await scope.PageResult.WritePageAsync(page, codePage, scope.ScopeWithParams(pageParams), token);
 }
Exemple #17
0
 public object skipExecutingFiltersOnError(TemplateScopeContext scope, object ignoreTarget) => skipExecutingFiltersOnError(scope);
Exemple #18
0
        public static object EvaluateToken(this TemplateScopeContext scope, JsToken token)
        {
            var result = scope.PageResult.EvaluateToken(scope, token);

            return(result);
        }
Exemple #19
0
 public object throwArgumentNullExceptionIf(TemplateScopeContext scope, string paramName, bool test, object options) => test
     ? new ArgumentNullException(paramName).InStopFilter(scope, options)
     : StopExecution.Value;
Exemple #20
0
 public static object GetValue(this TemplateScopeContext scope, string name)
 {
     return(scope.PageResult.GetValue(name, scope));
 }
Exemple #21
0
 public object throwArgumentException(TemplateScopeContext scope, string message, string options) => ifThrowArgumentException(scope, true, message, options);
Exemple #22
0
 public object assignError(TemplateScopeContext scope, string errorBinding)
 {
     scope.PageResult.AssignExceptionsTo = errorBinding;
     return(StopExecution.Value);
 }
Exemple #23
0
 public object throwArgumentNullException(TemplateScopeContext scope, string paramName, object options) => new ArgumentNullException(paramName).InStopFilter(scope, options);
Exemple #24
0
 public object ensureAnyArgsNotEmpty(TemplateScopeContext scope, object args) => ensureAnyArgsNotEmpty(scope, args, null);
Exemple #25
0
 public object throwNotImplementedException(TemplateScopeContext scope, string message, object options) => new NotImplementedException(message).InStopFilter(scope, options);
Exemple #26
0
 public object ifthrow(TemplateScopeContext scope, bool test, string message) => test
     ? new Exception(message).InStopFilter(scope, null)
     : StopExecution.Value;
Exemple #27
0
 public object throwFileNotFoundException(TemplateScopeContext scope, string message, object options) => new FileNotFoundException(message).InStopFilter(scope, options);
Exemple #28
0
 public object throwIf(TemplateScopeContext scope, string message, bool test, object options) => test
     ? new Exception(message).InStopFilter(scope, options)
     : StopExecution.Value;
Exemple #29
0
        public async Task <object> @throwAsync(TemplateScopeContext scope, string message, object options)
        {
            await Task.Yield();

            return(new Exception(message).InStopFilter(scope, options));
        }
Exemple #30
0
        public IRawString htmlList(TemplateScopeContext scope, object target, object scopeOptions)
        {
            if (target is IDictionary <string, object> single)
            {
                target = new[] { single }
            }
            ;

            var items        = target.AssertEnumerable(nameof(htmlList));
            var scopedParams = scope.AssertOptions(nameof(htmlList), scopeOptions);
            var depth        = scopedParams.TryGetValue("depth", out object oDepth) ? (int)oDepth : 0;
            var childDepth   = scopedParams.TryGetValue("childDepth", out object oChildDepth) ? oChildDepth.ConvertTo <int>() : 1;

            scopedParams["depth"] = depth + 1;

            try
            {
                scopedParams.TryGetValue("className", out object parentClass);
                scopedParams.TryGetValue("childClass", out object childClass);
                var className = ((depth < childDepth ? parentClass : childClass ?? parentClass)
                                 ?? Context.Args[TemplateConstants.DefaultTableClassName]).ToString();

                scopedParams.TryGetValue("headerStyle", out object oHeaderStyle);
                scopedParams.TryGetValue("headerTag", out object oHeaderTag);
                scopedParams.TryGetValue("captionIfEmpty", out object captionIfEmpty);
                var headerTag   = oHeaderTag as string ?? "th";
                var headerStyle = oHeaderStyle as string ?? "splitCase";

                var           sbHeader = StringBuilderCache.Allocate();
                var           sbRows   = StringBuilderCacheAlt.Allocate();
                List <string> keys     = null;

                foreach (var item in items)
                {
                    if (item is IDictionary <string, object> d)
                    {
                        if (keys == null)
                        {
                            keys = d.Keys.ToList();
                            sbHeader.Append("<tr>");
                            foreach (var key in keys)
                            {
                                sbHeader.Append('<').Append(headerTag).Append('>');
                                sbHeader.Append(Context.DefaultFilters?.textStyle(key, headerStyle)?.HtmlEncode());
                                sbHeader.Append("</").Append(headerTag).Append('>');
                            }
                            sbHeader.Append("</tr>");
                        }

                        sbRows.Append("<tr>");
                        foreach (var key in keys)
                        {
                            var value = d[key];
                            sbRows.Append("<td>");

                            if (!isComplexType(value))
                            {
                                sbRows.Append(GetScalarHtml(value));
                            }
                            else
                            {
                                var htmlValue = htmlDump(scope, value, scopeOptions);
                                sbRows.Append(htmlValue.ToRawString());
                            }

                            sbRows.Append("</td>");
                        }
                        sbRows.Append("</tr>");
                    }
                }

                var isEmpty = sbRows.Length == 0;
                if (isEmpty && captionIfEmpty == null)
                {
                    return(RawString.Empty);
                }

                var htmlHeaders = StringBuilderCache.ReturnAndFree(sbHeader);
                var htmlRows    = StringBuilderCacheAlt.ReturnAndFree(sbRows);

                var sb = StringBuilderCache.Allocate();
                sb.Append("<table");

                if (scopedParams.TryGetValue("id", out object id))
                {
                    sb.Append(" id=\"").Append(id).Append("\"");
                }
                if (!string.IsNullOrEmpty(className))
                {
                    sb.Append(" class=\"").Append(className).Append("\"");
                }

                sb.Append(">");

                scopedParams.TryGetValue("caption", out object caption);
                if (isEmpty)
                {
                    caption = captionIfEmpty;
                }

                if (caption != null)
                {
                    sb.Append("<caption>").Append(caption.ToString().HtmlEncode()).Append("</caption>");
                }

                if (htmlHeaders.Length > 0)
                {
                    sb.Append("<thead>").Append(htmlHeaders).Append("</thead>");
                }
                if (htmlRows.Length > 0)
                {
                    sb.Append("<tbody>").Append(htmlRows).Append("</tbody>");
                }

                sb.Append("</table>");

                var html = StringBuilderCache.ReturnAndFree(sb);
                return(html.ToRawString());
            }
            finally
            {
                scopedParams["depth"] = depth;
            }
        }