/// <summary> /// Writes an element. /// </summary> public override bool TryGetMember( GetMemberBinder binder, out object result) { var returnValue = new PocketView(tagName: binder.Name, nested: this); if (_transforms.TryGetValue(binder.Name, out var transform)) { returnValue._transform = transform; } result = returnValue; 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(PocketViewTags.th(pair.Key)); values.Add(PocketViewTags.td(pair.Value)); } PocketView t = PocketViewTags.table( PocketViewTags.thead( PocketViewTags.tr( headers)), PocketViewTags.tbody( PocketViewTags.tr( values)) ); t.WriteTo(writer, HtmlEncoder.Default); }), [typeof(HtmlString)] = new HtmlFormatter <PocketView>((view, writer) => view.WriteTo(writer, HtmlEncoder.Default)), [typeof(JsonString)] = new HtmlFormatter <PocketView>((view, writer) => view.WriteTo(writer, HtmlEncoder.Default)), [typeof(PocketView)] = new HtmlFormatter <PocketView>((view, writer) => view.WriteTo(writer, HtmlEncoder.Default)), [typeof(ReadOnlyMemory <char>)] = Formatter.Create <ReadOnlyMemory <char> >((memory, writer) => { PocketView view = PocketViewTags.span(memory.Span.ToString()); view.WriteTo(writer, HtmlEncoder.Default); }, HtmlFormatter.MimeType), [typeof(string)] = new HtmlFormatter <string>((s, writer) => writer.Write(s)), [typeof(Type)] = _formatterForSystemType, [typeof(Type).GetType()] = _formatterForSystemType, };
/// <summary> /// Writes an element. /// </summary> public override bool TryInvokeMember( InvokeMemberBinder binder, object[] args, out object result) { var pocketView = new PocketView(tagName: binder.Name, nested: this); pocketView.SetContent(args); if (_transforms.TryGetValue(binder.Name, out var transform)) { var content = ComposeContent(binder.CallInfo.ArgumentNames, args); transform(pocketView._tag, content); } result = pocketView; return(true); }
/// <summary> /// Initializes a new instance of the <see cref="PocketView"/> class. /// </summary> /// <param name="tagName">Name of the tag.</param> /// <param name="nested">A nested instance.</param> public PocketView(string tagName, PocketView nested = null) : this(nested) { _tag = tagName.Tag(); }
/// <summary> /// Initializes a new instance of the <see cref="PocketView"/> class. /// </summary> /// <param name="tagName">Name of the tag.</param> /// <param name="nested">A nested instance.</param> protected internal PocketView(string tagName, PocketView nested = null) : this(nested) { _tag = tagName.Tag(); }