-
Notifications
You must be signed in to change notification settings - Fork 367
/
PocketViewTags.cs
173 lines (155 loc) · 5.64 KB
/
PocketViewTags.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
using System.Collections;
using System.Collections.Generic;
using Microsoft.AspNetCore.Html;
namespace Microsoft.DotNet.Interactive.Formatting;
public static class PocketViewTags
{
public static dynamic _ { get; } = new PocketView();
public static dynamic a => _.a;
public static dynamic area => _.area;
public static dynamic aside => _.aside;
public static dynamic b => _.b;
public static dynamic body => _.body;
public static dynamic br => new Br();
public static dynamic button => _.button;
public static dynamic caption => _.caption;
public static dynamic center => _.center;
public static dynamic circle => _.circle;
public static dynamic code => _.code;
public static dynamic colgroup => _.colgroup;
public static dynamic dd => _.dd;
public static dynamic details => _.details;
public static dynamic div => _.div;
public static dynamic dl => _.dl;
public static dynamic dt => _.dt;
public static dynamic em => _.em;
public static dynamic figure => _.figure;
public static dynamic font => _.font;
public static dynamic form => _.form;
public static dynamic g => _.g;
public static dynamic h1 => _.h1;
public static dynamic h2 => _.h2;
public static dynamic h3 => _.h3;
public static dynamic h4 => _.h4;
public static dynamic h5 => _.h5;
public static dynamic h6 => _.h6;
public static dynamic head => _.head;
public static dynamic header => _.header;
public static dynamic hgroup => _.hgroup;
public static dynamic hr => _.hr;
public static dynamic html => _.html;
public static dynamic i => _.i;
public static dynamic iframe => _.iframe;
public static dynamic img => _.img;
public static dynamic input => new Input();
public static dynamic label => _.label;
public static dynamic li => _.li;
public static dynamic line => _.line;
public static dynamic link => _.link;
public static dynamic main => _.main;
public static dynamic menu => _.menu;
public static dynamic menuitem => _.menuitem;
public static dynamic meta => _.meta;
public static dynamic meter => _.meter;
public static dynamic nav => _.nav;
public static dynamic ol => _.ol;
public static dynamic optgroup => _.optgroup;
public static dynamic option => _.option;
public static dynamic p => _.p;
public static dynamic pre => _.pre;
public static dynamic progress => _.progress;
public static dynamic q => _.q;
public static dynamic script => _.script;
public static dynamic section => _.section;
public static dynamic select => _.select;
public static dynamic small => _.small;
public static dynamic source => _.source;
public static dynamic span => _.span;
public static dynamic strike => _.strike;
public static dynamic style => new Style();
public static dynamic strong => _.strong;
public static dynamic sub => _.sub;
public static dynamic summary => _.summary;
public static dynamic sup => _.sup;
public static dynamic svg => _.svg;
public static dynamic table => _.table;
public static dynamic tbody => _.tbody;
public static dynamic td => _.td;
public static dynamic text => _.text;
public static dynamic textarea => _.textarea;
public static dynamic tfoot => _.tfoot;
public static dynamic th => _.th;
public static dynamic thead => _.thead;
public static dynamic title => _.title;
public static dynamic tr => _.tr;
public static dynamic u => _.u;
public static dynamic ul => _.ul;
public static dynamic video => _.video;
internal class Br : PocketView
{
public Br() : base("br")
{
HtmlTag.IsSelfClosing = true;
}
}
internal class Input : PocketView
{
public Input() : base("input")
{
HtmlTag.IsSelfClosing = true;
}
}
public class Style : PocketView, IEnumerable
{
private readonly Dictionary<string, List<(string property, string value)>> _css = new();
public Style() : base("style")
{
HtmlTag.Content = WriteCss;
}
private void WriteCss(FormatContext context)
{
var writer = context.Writer;
writer.WriteLine();
foreach (var selectorAndProps in _css)
{
writer.Write(selectorAndProps.Key);
writer.WriteLine(" {");
foreach (var prop in selectorAndProps.Value)
{
writer.WriteLine($" {prop.property}: {prop.value};");
}
writer.WriteLine("}");
}
}
public void Add(
string selector,
params (string property, string value)[] properties)
{
_css.GetOrAdd(selector, _ => new())
.AddRange(properties);
}
internal class HtmlAttributeDependency : HtmlAttributes
{
public HtmlAttributeDependency(IHtmlContent content)
{
HtmlContent = content;
}
public IHtmlContent HtmlContent { get; }
}
public override void SetContent(object[] args)
{
if (_css.Count > 0)
{
throw new InvalidOperationException("style tag contents have already been set.");
}
base.SetContent(args);
}
public IEnumerator GetEnumerator()
{
return _css.GetEnumerator();
}
}
}