fun_html 0.1.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/fun_html/attribute.rb +86 -0
- data/lib/fun_html/{attribute_definitions.rb → spec_attributes.rb} +87 -24
- data/lib/fun_html/{node_definitions.rb → spec_elements.rb} +14 -17
- data/lib/fun_html/template.rb +104 -0
- data/lib/fun_html/version.rb +1 -1
- data/lib/fun_html/writer.rb +49 -0
- data/lib/fun_html.rb +4 -108
- data/rbi/attributes.rbx +112 -169
- data/rbi/{node_definitions.rbx → elements.rbx} +142 -142
- data/rbi/fun_html.rbi +393 -396
- data/rbi/fun_html.rbx +65 -12
- metadata +8 -5
data/lib/fun_html.rb
CHANGED
@@ -1,113 +1,9 @@
|
|
1
|
+
# typed: strict
|
1
2
|
# frozen_string_literal: true
|
2
3
|
|
3
|
-
require_relative 'fun_html/
|
4
|
-
require_relative 'fun_html/attribute_definitions'
|
5
|
-
require_relative 'fun_html/version'
|
6
|
-
require 'erb/escape'
|
4
|
+
require_relative 'fun_html/template'
|
7
5
|
|
8
|
-
#
|
6
|
+
# FunHtml is a Ruby module to generate HTML and attributes. It is meant to be
|
7
|
+
# simple, reasonably fast, and support Sorbet typing.
|
9
8
|
module FunHtml
|
10
|
-
# nodoc
|
11
|
-
module Writer
|
12
|
-
def include(func)
|
13
|
-
begin
|
14
|
-
@__buffer << func.render
|
15
|
-
# it is faster to error and try than to detect the type and branch
|
16
|
-
rescue StandardError
|
17
|
-
instance_exec(&func)
|
18
|
-
end
|
19
|
-
self
|
20
|
-
end
|
21
|
-
|
22
|
-
def text(value)
|
23
|
-
(@__buffer ||= +'') << ERB::Escape.html_escape(value)
|
24
|
-
self
|
25
|
-
end
|
26
|
-
|
27
|
-
def attr(&blk) # rubocop:disable Style/ArgumentsForwarding
|
28
|
-
Attribute.new(&blk) # rubocop:disable Style/ArgumentsForwarding
|
29
|
-
end
|
30
|
-
|
31
|
-
def comment(&elements)
|
32
|
-
write('<!--', '-->', nil, closing_char: '', closing_void_char: '-->', &elements)
|
33
|
-
end
|
34
|
-
|
35
|
-
def doctype
|
36
|
-
(@__buffer ||= +'') << '<!DOCTYPE html>'
|
37
|
-
self
|
38
|
-
end
|
39
|
-
|
40
|
-
def render
|
41
|
-
@__buffer
|
42
|
-
ensure
|
43
|
-
# empty the buffer to prevent double rendering
|
44
|
-
@__buffer = +''
|
45
|
-
end
|
46
|
-
|
47
|
-
private
|
48
|
-
|
49
|
-
CLOSE = '>'
|
50
|
-
CLOSE_VOID = '/>'
|
51
|
-
|
52
|
-
def write(open, close, attr = nil, closing_char: CLOSE, closing_void_char: CLOSE_VOID, &block)
|
53
|
-
(@__buffer ||= +'') << open << Attribute.to_html(attr)
|
54
|
-
|
55
|
-
if block
|
56
|
-
@__buffer << closing_char
|
57
|
-
|
58
|
-
begin
|
59
|
-
yield
|
60
|
-
# it is faster to error and try than to detect the type and branch
|
61
|
-
rescue StandardError
|
62
|
-
instance_eval(&block)
|
63
|
-
end
|
64
|
-
@__buffer << close
|
65
|
-
else
|
66
|
-
@__buffer << closing_void_char
|
67
|
-
end
|
68
|
-
|
69
|
-
self
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
# nodoc
|
74
|
-
class Template
|
75
|
-
include FunHtml::Writer
|
76
|
-
include FunHtml::NodeDefinitions::HTMLAllElements
|
77
|
-
end
|
78
|
-
|
79
|
-
# nodoc
|
80
|
-
class Attribute
|
81
|
-
include FunHtml::AttributeDefinitions
|
82
|
-
|
83
|
-
# only allow nil or objects that respond to `safe_attribute`
|
84
|
-
def self.to_html(attr)
|
85
|
-
attr&.safe_attribute.to_s
|
86
|
-
end
|
87
|
-
|
88
|
-
# create a new Attribute object to create reuseable attributes
|
89
|
-
def initialize(buffer = {}, &block)
|
90
|
-
@__buffer = buffer
|
91
|
-
instance_eval(&block) if block
|
92
|
-
end
|
93
|
-
|
94
|
-
# merge two attribute sets together
|
95
|
-
def merge(other)
|
96
|
-
self.class.new(@__buffer.merge(other.instance_variable_get(:@__buffer)))
|
97
|
-
end
|
98
|
-
|
99
|
-
def safe_attribute
|
100
|
-
@__buffer.values.join
|
101
|
-
end
|
102
|
-
|
103
|
-
private
|
104
|
-
|
105
|
-
def write(name, value)
|
106
|
-
@__buffer[name] = "#{name}#{ERB::Escape.html_escape(value)}\""
|
107
|
-
end
|
108
|
-
|
109
|
-
def write_empty(name, print)
|
110
|
-
@__buffer[name] = print ? name : ''
|
111
|
-
end
|
112
|
-
end
|
113
9
|
end
|
data/rbi/attributes.rbx
CHANGED
@@ -2,245 +2,188 @@
|
|
2
2
|
|
3
3
|
module FunHtml
|
4
4
|
# HTML attributes autogenerated, do not edit
|
5
|
-
module
|
6
|
-
sig { params(value: String).
|
7
|
-
|
5
|
+
module SpecAttributes
|
6
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
8
7
|
def accept(value); end
|
9
|
-
sig { params(value: String).
|
10
|
-
|
8
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
11
9
|
def accept_charset(value); end
|
12
|
-
sig { params(value: String).
|
13
|
-
|
10
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
14
11
|
def accesskey(value); end
|
15
|
-
sig { params(value: String).
|
16
|
-
|
12
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
17
13
|
def action(value); end
|
18
|
-
sig { params(value: String).
|
19
|
-
|
14
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
20
15
|
def align(value); end
|
21
|
-
sig { params(value: String).
|
22
|
-
|
16
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
23
17
|
def alt(value); end
|
24
|
-
sig { params(value: T.
|
25
|
-
def async(value
|
26
|
-
sig { params(value: String).
|
27
|
-
|
18
|
+
sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
|
19
|
+
def async(value); end
|
20
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
28
21
|
def autocomplete(value); end
|
29
|
-
sig { params(value: T.
|
30
|
-
def autofocus(value
|
31
|
-
sig { params(value: T.
|
32
|
-
def autoplay(value
|
33
|
-
sig { params(value: String).
|
34
|
-
|
22
|
+
sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
|
23
|
+
def autofocus(value); end
|
24
|
+
sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
|
25
|
+
def autoplay(value); end
|
26
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
35
27
|
def bgcolor(value); end
|
36
|
-
sig { params(value: Numeric).
|
28
|
+
sig { params(value: Numeric).returns(FunHtml::Attribute) }
|
37
29
|
def border(value); end
|
38
|
-
sig { params(value: String).
|
39
|
-
|
30
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
40
31
|
def charset(value); end
|
41
|
-
sig { params(value: T.
|
42
|
-
def checked(value
|
43
|
-
sig { params(value:
|
44
|
-
|
45
|
-
def klass(value); end
|
46
|
-
sig { params(value: Numeric).void }
|
32
|
+
sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
|
33
|
+
def checked(value); end
|
34
|
+
sig { params(value: Numeric).returns(FunHtml::Attribute) }
|
47
35
|
def cols(value); end
|
48
|
-
sig { params(value: Numeric).
|
36
|
+
sig { params(value: Numeric).returns(FunHtml::Attribute) }
|
49
37
|
def colspan(value); end
|
50
|
-
sig { params(value: String).
|
51
|
-
|
38
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
52
39
|
def content(value); end
|
53
|
-
sig { params(value: String).
|
54
|
-
|
40
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
55
41
|
def contenteditable(value); end
|
56
|
-
sig { params(value: T.
|
57
|
-
def controls(value
|
58
|
-
sig { params(value: String).
|
59
|
-
|
42
|
+
sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
|
43
|
+
def controls(value); end
|
44
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
60
45
|
def coords(value); end
|
61
|
-
sig { params(value: String).
|
62
|
-
|
63
|
-
def data(value); end
|
64
|
-
sig { params(value: String).void }
|
65
|
-
|
46
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
66
47
|
def datetime(value); end
|
67
|
-
sig { params(value: T.
|
68
|
-
def default(value
|
69
|
-
sig { params(value: T.
|
70
|
-
def defer(value
|
71
|
-
sig { params(value: String).
|
72
|
-
|
48
|
+
sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
|
49
|
+
def default(value); end
|
50
|
+
sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
|
51
|
+
def defer(value); end
|
52
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
73
53
|
def dir(value); end
|
74
|
-
sig { params(value: T.
|
75
|
-
def disabled(value
|
76
|
-
sig { params(value: T.any(String, T::Boolean)).
|
54
|
+
sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
|
55
|
+
def disabled(value); end
|
56
|
+
sig { params(value: T.any(String, T::Boolean)).returns(FunHtml::Attribute) }
|
77
57
|
def download(value); end
|
78
|
-
sig { params(value: String).
|
79
|
-
|
58
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
80
59
|
def draggable(value); end
|
81
|
-
sig { params(value: String).
|
82
|
-
|
60
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
83
61
|
def enctype(value); end
|
84
|
-
sig { params(value: String).
|
85
|
-
|
62
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
86
63
|
def for(value); end
|
87
|
-
sig { params(value: String).
|
88
|
-
|
64
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
89
65
|
def form(value); end
|
90
|
-
sig { params(value: String).
|
91
|
-
|
66
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
92
67
|
def formaction(value); end
|
93
|
-
sig { params(value: String).
|
94
|
-
|
68
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
95
69
|
def headers(value); end
|
96
|
-
sig { params(value: T.any(Numeric, String)).
|
70
|
+
sig { params(value: T.any(Numeric, String)).returns(FunHtml::Attribute) }
|
97
71
|
def height(value); end
|
98
|
-
sig { params(value: T.
|
99
|
-
def hidden(value
|
100
|
-
sig { params(value: Numeric).
|
72
|
+
sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
|
73
|
+
def hidden(value); end
|
74
|
+
sig { params(value: Numeric).returns(FunHtml::Attribute) }
|
101
75
|
def high(value); end
|
102
|
-
sig { params(value: String).
|
103
|
-
|
76
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
104
77
|
def href(value); end
|
105
|
-
sig { params(value: String).
|
106
|
-
|
78
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
107
79
|
def hreflang(value); end
|
108
|
-
sig { params(value: String).
|
109
|
-
|
80
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
110
81
|
def id(value); end
|
111
|
-
sig { params(value: String).
|
112
|
-
|
82
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
113
83
|
def integrity(value); end
|
114
|
-
sig { params(value: T.
|
115
|
-
def ismap(value
|
116
|
-
sig { params(value: String).
|
117
|
-
|
84
|
+
sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
|
85
|
+
def ismap(value); end
|
86
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
118
87
|
def kind(value); end
|
119
|
-
sig { params(value: String).
|
120
|
-
|
88
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
121
89
|
def label(value); end
|
122
|
-
sig { params(value: String).
|
123
|
-
|
90
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
124
91
|
def lang(value); end
|
125
|
-
sig { params(value: String).
|
126
|
-
|
92
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
127
93
|
def list(value); end
|
128
|
-
sig { params(value: T.
|
129
|
-
def loop(value
|
130
|
-
sig { params(value: Numeric).
|
94
|
+
sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
|
95
|
+
def loop(value); end
|
96
|
+
sig { params(value: Numeric).returns(FunHtml::Attribute) }
|
131
97
|
def low(value); end
|
132
|
-
sig { params(value: T.any(Numeric, String)).
|
98
|
+
sig { params(value: T.any(Numeric, String)).returns(FunHtml::Attribute) }
|
133
99
|
def max(value); end
|
134
|
-
sig { params(value: Numeric).
|
100
|
+
sig { params(value: Numeric).returns(FunHtml::Attribute) }
|
135
101
|
def maxlength(value); end
|
136
|
-
sig { params(value: String).
|
137
|
-
|
102
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
138
103
|
def media(value); end
|
139
|
-
sig { params(value: String).
|
140
|
-
|
104
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
141
105
|
def method(value); end
|
142
|
-
sig { params(value: T.any(Numeric, String)).
|
106
|
+
sig { params(value: T.any(Numeric, String)).returns(FunHtml::Attribute) }
|
143
107
|
def min(value); end
|
144
|
-
sig { params(value: T.
|
145
|
-
def multiple(value
|
146
|
-
sig { params(value: T.
|
147
|
-
def muted(value
|
148
|
-
sig { params(value: String).
|
149
|
-
|
108
|
+
sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
|
109
|
+
def multiple(value); end
|
110
|
+
sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
|
111
|
+
def muted(value); end
|
112
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
150
113
|
def name(value); end
|
151
|
-
sig { params(value: T.
|
152
|
-
def novalidate(value
|
153
|
-
sig { params(value: T.
|
154
|
-
def open(value
|
155
|
-
sig { params(value: Numeric).
|
114
|
+
sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
|
115
|
+
def novalidate(value); end
|
116
|
+
sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
|
117
|
+
def open(value); end
|
118
|
+
sig { params(value: Numeric).returns(FunHtml::Attribute) }
|
156
119
|
def optimum(value); end
|
157
|
-
sig { params(value: String).
|
158
|
-
|
120
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
159
121
|
def pattern(value); end
|
160
|
-
sig { params(value: String).
|
161
|
-
|
122
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
162
123
|
def placeholder(value); end
|
163
|
-
sig { params(value: String).
|
164
|
-
|
124
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
165
125
|
def poster(value); end
|
166
|
-
sig { params(value: String).
|
167
|
-
|
126
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
168
127
|
def preload(value); end
|
169
|
-
sig { params(value: T.
|
170
|
-
def readonly(value
|
171
|
-
sig { params(value: String).
|
172
|
-
|
128
|
+
sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
|
129
|
+
def readonly(value); end
|
130
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
173
131
|
def rel(value); end
|
174
|
-
sig { params(value: T.
|
175
|
-
def required(value
|
176
|
-
sig { params(value: T.
|
177
|
-
def reversed(value
|
178
|
-
sig { params(value: Numeric).
|
132
|
+
sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
|
133
|
+
def required(value); end
|
134
|
+
sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
|
135
|
+
def reversed(value); end
|
136
|
+
sig { params(value: Numeric).returns(FunHtml::Attribute) }
|
179
137
|
def rows(value); end
|
180
|
-
sig { params(value: Numeric).
|
138
|
+
sig { params(value: Numeric).returns(FunHtml::Attribute) }
|
181
139
|
def rowspan(value); end
|
182
|
-
sig { params(value: String).
|
183
|
-
|
140
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
184
141
|
def sandbox(value); end
|
185
|
-
sig { params(value:
|
186
|
-
|
142
|
+
sig { params(value: Numeric).returns(FunHtml::Attribute) }
|
143
|
+
def span(value); end
|
144
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
187
145
|
def scope(value); end
|
188
|
-
sig { params(value: T.
|
189
|
-
def selected(value
|
190
|
-
sig { params(value: String).
|
191
|
-
|
146
|
+
sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
|
147
|
+
def selected(value); end
|
148
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
192
149
|
def shape(value); end
|
193
|
-
sig { params(value: Numeric).
|
150
|
+
sig { params(value: Numeric).returns(FunHtml::Attribute) }
|
194
151
|
def size(value); end
|
195
|
-
sig { params(value: String).
|
196
|
-
|
152
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
197
153
|
def sizes(value); end
|
198
|
-
sig { params(value: String).
|
199
|
-
|
154
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
200
155
|
def spellcheck(value); end
|
201
|
-
sig { params(value: String).
|
202
|
-
|
156
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
203
157
|
def src(value); end
|
204
|
-
sig { params(value: String).
|
205
|
-
|
158
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
206
159
|
def srcdoc(value); end
|
207
|
-
sig { params(value: String).
|
208
|
-
|
160
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
209
161
|
def srclang(value); end
|
210
|
-
sig { params(value: String).
|
211
|
-
|
162
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
212
163
|
def srcset(value); end
|
213
|
-
sig { params(value: Numeric).
|
164
|
+
sig { params(value: Numeric).returns(FunHtml::Attribute) }
|
214
165
|
def start(value); end
|
215
|
-
sig { params(value: T.any(Numeric, String)).
|
166
|
+
sig { params(value: T.any(Numeric, String)).returns(FunHtml::Attribute) }
|
216
167
|
def step(value); end
|
217
|
-
sig { params(value: String).
|
218
|
-
|
168
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
219
169
|
def style(value); end
|
220
|
-
sig { params(value: Numeric).
|
170
|
+
sig { params(value: Numeric).returns(FunHtml::Attribute) }
|
221
171
|
def tabindex(value); end
|
222
|
-
sig { params(value: String).
|
223
|
-
|
172
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
224
173
|
def target(value); end
|
225
|
-
sig { params(value: String).
|
226
|
-
|
174
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
227
175
|
def title(value); end
|
228
|
-
sig { params(value: String).
|
229
|
-
|
176
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
230
177
|
def translate(value); end
|
231
|
-
sig { params(value: String).
|
232
|
-
|
178
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
233
179
|
def type(value); end
|
234
|
-
sig { params(value: String).
|
235
|
-
|
180
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
236
181
|
def usemap(value); end
|
237
|
-
sig { params(value: String).
|
238
|
-
|
182
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
239
183
|
def value(value); end
|
240
|
-
sig { params(value: T.any(Numeric, String)).
|
184
|
+
sig { params(value: T.any(Numeric, String)).returns(FunHtml::Attribute) }
|
241
185
|
def width(value); end
|
242
|
-
sig { params(value: String).
|
243
|
-
|
186
|
+
sig { params(value: String).returns(FunHtml::Attribute) }
|
244
187
|
def wrap(value); end
|
245
188
|
end
|
246
189
|
end
|