internal static void FormatAndStyleAsPlainText( object text, FormatContext context) { PocketView tag = div(text.ToDisplayString(PlainTextFormatter.MimeType)); tag.HtmlAttributes["class"] = "dni-plaintext"; tag.WriteTo(context); }
internal static HtmlFormatter <T> CreateForAnyObject(bool includeInternals) { var members = typeof(T).GetMembersToFormat(includeInternals) .GetMemberAccessors <T>(); return(new HtmlFormatter <T>((context, instance, writer) => { // Note the order of members is declaration order var reducedMembers = members .Take(Math.Max(0, HtmlFormatter.MaxProperties)) .ToArray(); if (reducedMembers.Length == 0 || context.ContentThreshold < 1.0) { // This formatter refuses to format objects without members, and // refused to produce nested tables, or if no members are selected return false; } else { // Reduce the content threshold for inner formatting, amon other things // ensures no nested tables get produced. var innerContext = context.ReduceContent(FormatContext.NestedInTable); // Note, embeds the keys and values as arbitrary objects into the HTML content, // ultimately rendered by PocketView, e.g. via ToDisplayString(PlainTextFormatter.MimeType) List <object> headers = reducedMembers.Select(m => th(str(m.Member.Name))) .ToList(); // Add a '..' column if we elided some members due to size limitations if (reducedMembers.Length < members.Length) { headers.Add(th(str(".."))); } IEnumerable <object> values = reducedMembers.Select(m => m.GetValueOrException(instance)) .Select(v => td(embed(v, innerContext))); PocketView t = table( thead( tr( headers)), tbody( tr( values))); t.WriteTo(writer, HtmlEncoder.Default); return true; } })); }
private static ConcurrentDictionary <Type, ITypeFormatter> DefaultFormatters() => new ConcurrentDictionary <Type, ITypeFormatter> { [typeof(DateTime)] = new HtmlFormatter <DateTime>((value, writer) => writer.Write(value.ToString("u"))), [typeof(DateTimeOffset)] = new HtmlFormatter <DateTimeOffset>((value, writer) => writer.Write(value.ToString("u"))), [typeof(ExpandoObject)] = new HtmlFormatter <ExpandoObject>((obj, writer) => { var headers = new List <IHtmlContent>(); var values = new List <IHtmlContent>(); foreach (var pair in obj.OrderBy(p => p.Key)) { headers.Add(th(pair.Key)); values.Add(td(pair.Value)); } IHtmlContent view = table( thead( tr( headers)), tbody( tr( values))); view.WriteTo(writer, HtmlEncoder.Default); }), [typeof(HtmlString)] = new HtmlFormatter <HtmlString>((view, writer) => view.WriteTo(writer, HtmlEncoder.Default)), [typeof(JsonString)] = new HtmlFormatter <JsonString>((view, writer) => view.WriteTo(writer, HtmlEncoder.Default)), [typeof(PocketView)] = new HtmlFormatter <PocketView>((view, writer) => view.WriteTo(writer, HtmlEncoder.Default)), [typeof(ReadOnlyMemory <char>)] = new HtmlFormatter <ReadOnlyMemory <char> >((memory, writer) => { PocketView view = span(memory.Span.ToString()); view.WriteTo(writer, HtmlEncoder.Default); }), [typeof(string)] = new HtmlFormatter <string>((s, writer) => writer.Write(span(s))), [typeof(TimeSpan)] = new HtmlFormatter <TimeSpan>((timespan, writer) => { writer.Write(timespan.ToString()); }), [typeof(Type)] = _formatterForSystemType, [typeof(Type).GetType()] = _formatterForSystemType, };
internal static HtmlFormatter <T> CreateForAnyObject(bool includeInternals) { var members = typeof(T).GetMembersToFormat(includeInternals) .GetMemberAccessors <T>(); return(new HtmlFormatter <T>((instance, context) => { // Note the order of members is declaration order var reducedMembers = members .Take(Math.Max(0, HtmlFormatter.MaxProperties)) .ToArray(); if (reducedMembers.Length == 0) { // This formatter refuses to format objects without members, and // refused to produce nested tables, or if no members are selected return false; } else { // Note, embeds the keys and values as arbitrary objects into the HTML content, List <IHtmlContent> headers = reducedMembers.Select(m => (IHtmlContent)th(m.Member.Name)) .ToList(); // Add a '..' column if we elided some members due to size limitations if (reducedMembers.Length < members.Length) { headers.Add(th("..")); } IEnumerable <object> values = reducedMembers.Select(m => m.GetValueOrException(instance)) .Select(v => td( div[@class: "dni-plaintext"](v.ToDisplayString(PlainTextFormatter.MimeType)))); PocketView t = table( thead( tr( headers)), tbody( tr( values))); t.WriteTo(context); return true; } })); }