Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        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,
        };
Esempio n. 3
0
        /// <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);
        }
Esempio n. 4
0
 /// <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();
 }
Esempio n. 5
0
 /// <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();
 }