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.
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/node_definitions'
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
- # nodoc
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 AttributeDefinitions
6
- sig { params(value: String).void }
7
-
5
+ module SpecAttributes
6
+ sig { params(value: String).returns(FunHtml::Attribute) }
8
7
  def accept(value); end
9
- sig { params(value: String).void }
10
-
8
+ sig { params(value: String).returns(FunHtml::Attribute) }
11
9
  def accept_charset(value); end
12
- sig { params(value: String).void }
13
-
10
+ sig { params(value: String).returns(FunHtml::Attribute) }
14
11
  def accesskey(value); end
15
- sig { params(value: String).void }
16
-
12
+ sig { params(value: String).returns(FunHtml::Attribute) }
17
13
  def action(value); end
18
- sig { params(value: String).void }
19
-
14
+ sig { params(value: String).returns(FunHtml::Attribute) }
20
15
  def align(value); end
21
- sig { params(value: String).void }
22
-
16
+ sig { params(value: String).returns(FunHtml::Attribute) }
23
17
  def alt(value); end
24
- sig { params(value: T.nilable(T::Boolean)).void }
25
- def async(value = nil); end
26
- sig { params(value: String).void }
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.nilable(T::Boolean)).void }
30
- def autofocus(value = nil); end
31
- sig { params(value: T.nilable(T::Boolean)).void }
32
- def autoplay(value = nil); end
33
- sig { params(value: String).void }
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).void }
28
+ sig { params(value: Numeric).returns(FunHtml::Attribute) }
37
29
  def border(value); end
38
- sig { params(value: String).void }
39
-
30
+ sig { params(value: String).returns(FunHtml::Attribute) }
40
31
  def charset(value); end
41
- sig { params(value: T.nilable(T::Boolean)).void }
42
- def checked(value = nil); end
43
- sig { params(value: String).void }
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).void }
36
+ sig { params(value: Numeric).returns(FunHtml::Attribute) }
49
37
  def colspan(value); end
50
- sig { params(value: String).void }
51
-
38
+ sig { params(value: String).returns(FunHtml::Attribute) }
52
39
  def content(value); end
53
- sig { params(value: String).void }
54
-
40
+ sig { params(value: String).returns(FunHtml::Attribute) }
55
41
  def contenteditable(value); end
56
- sig { params(value: T.nilable(T::Boolean)).void }
57
- def controls(value = nil); end
58
- sig { params(value: String).void }
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).void }
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.nilable(T::Boolean)).void }
68
- def default(value = nil); end
69
- sig { params(value: T.nilable(T::Boolean)).void }
70
- def defer(value = nil); end
71
- sig { params(value: String).void }
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.nilable(T::Boolean)).void }
75
- def disabled(value = nil); end
76
- sig { params(value: T.any(String, T::Boolean)).void }
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).void }
79
-
58
+ sig { params(value: String).returns(FunHtml::Attribute) }
80
59
  def draggable(value); end
81
- sig { params(value: String).void }
82
-
60
+ sig { params(value: String).returns(FunHtml::Attribute) }
83
61
  def enctype(value); end
84
- sig { params(value: String).void }
85
-
62
+ sig { params(value: String).returns(FunHtml::Attribute) }
86
63
  def for(value); end
87
- sig { params(value: String).void }
88
-
64
+ sig { params(value: String).returns(FunHtml::Attribute) }
89
65
  def form(value); end
90
- sig { params(value: String).void }
91
-
66
+ sig { params(value: String).returns(FunHtml::Attribute) }
92
67
  def formaction(value); end
93
- sig { params(value: String).void }
94
-
68
+ sig { params(value: String).returns(FunHtml::Attribute) }
95
69
  def headers(value); end
96
- sig { params(value: T.any(Numeric, String)).void }
70
+ sig { params(value: T.any(Numeric, String)).returns(FunHtml::Attribute) }
97
71
  def height(value); end
98
- sig { params(value: T.nilable(T::Boolean)).void }
99
- def hidden(value = nil); end
100
- sig { params(value: Numeric).void }
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).void }
103
-
76
+ sig { params(value: String).returns(FunHtml::Attribute) }
104
77
  def href(value); end
105
- sig { params(value: String).void }
106
-
78
+ sig { params(value: String).returns(FunHtml::Attribute) }
107
79
  def hreflang(value); end
108
- sig { params(value: String).void }
109
-
80
+ sig { params(value: String).returns(FunHtml::Attribute) }
110
81
  def id(value); end
111
- sig { params(value: String).void }
112
-
82
+ sig { params(value: String).returns(FunHtml::Attribute) }
113
83
  def integrity(value); end
114
- sig { params(value: T.nilable(T::Boolean)).void }
115
- def ismap(value = nil); end
116
- sig { params(value: String).void }
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).void }
120
-
88
+ sig { params(value: String).returns(FunHtml::Attribute) }
121
89
  def label(value); end
122
- sig { params(value: String).void }
123
-
90
+ sig { params(value: String).returns(FunHtml::Attribute) }
124
91
  def lang(value); end
125
- sig { params(value: String).void }
126
-
92
+ sig { params(value: String).returns(FunHtml::Attribute) }
127
93
  def list(value); end
128
- sig { params(value: T.nilable(T::Boolean)).void }
129
- def loop(value = nil); end
130
- sig { params(value: Numeric).void }
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)).void }
98
+ sig { params(value: T.any(Numeric, String)).returns(FunHtml::Attribute) }
133
99
  def max(value); end
134
- sig { params(value: Numeric).void }
100
+ sig { params(value: Numeric).returns(FunHtml::Attribute) }
135
101
  def maxlength(value); end
136
- sig { params(value: String).void }
137
-
102
+ sig { params(value: String).returns(FunHtml::Attribute) }
138
103
  def media(value); end
139
- sig { params(value: String).void }
140
-
104
+ sig { params(value: String).returns(FunHtml::Attribute) }
141
105
  def method(value); end
142
- sig { params(value: T.any(Numeric, String)).void }
106
+ sig { params(value: T.any(Numeric, String)).returns(FunHtml::Attribute) }
143
107
  def min(value); end
144
- sig { params(value: T.nilable(T::Boolean)).void }
145
- def multiple(value = nil); end
146
- sig { params(value: T.nilable(T::Boolean)).void }
147
- def muted(value = nil); end
148
- sig { params(value: String).void }
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.nilable(T::Boolean)).void }
152
- def novalidate(value = nil); end
153
- sig { params(value: T.nilable(T::Boolean)).void }
154
- def open(value = nil); end
155
- sig { params(value: Numeric).void }
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).void }
158
-
120
+ sig { params(value: String).returns(FunHtml::Attribute) }
159
121
  def pattern(value); end
160
- sig { params(value: String).void }
161
-
122
+ sig { params(value: String).returns(FunHtml::Attribute) }
162
123
  def placeholder(value); end
163
- sig { params(value: String).void }
164
-
124
+ sig { params(value: String).returns(FunHtml::Attribute) }
165
125
  def poster(value); end
166
- sig { params(value: String).void }
167
-
126
+ sig { params(value: String).returns(FunHtml::Attribute) }
168
127
  def preload(value); end
169
- sig { params(value: T.nilable(T::Boolean)).void }
170
- def readonly(value = nil); end
171
- sig { params(value: String).void }
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.nilable(T::Boolean)).void }
175
- def required(value = nil); end
176
- sig { params(value: T.nilable(T::Boolean)).void }
177
- def reversed(value = nil); end
178
- sig { params(value: Numeric).void }
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).void }
138
+ sig { params(value: Numeric).returns(FunHtml::Attribute) }
181
139
  def rowspan(value); end
182
- sig { params(value: String).void }
183
-
140
+ sig { params(value: String).returns(FunHtml::Attribute) }
184
141
  def sandbox(value); end
185
- sig { params(value: String).void }
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.nilable(T::Boolean)).void }
189
- def selected(value = nil); end
190
- sig { params(value: String).void }
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).void }
150
+ sig { params(value: Numeric).returns(FunHtml::Attribute) }
194
151
  def size(value); end
195
- sig { params(value: String).void }
196
-
152
+ sig { params(value: String).returns(FunHtml::Attribute) }
197
153
  def sizes(value); end
198
- sig { params(value: String).void }
199
-
154
+ sig { params(value: String).returns(FunHtml::Attribute) }
200
155
  def spellcheck(value); end
201
- sig { params(value: String).void }
202
-
156
+ sig { params(value: String).returns(FunHtml::Attribute) }
203
157
  def src(value); end
204
- sig { params(value: String).void }
205
-
158
+ sig { params(value: String).returns(FunHtml::Attribute) }
206
159
  def srcdoc(value); end
207
- sig { params(value: String).void }
208
-
160
+ sig { params(value: String).returns(FunHtml::Attribute) }
209
161
  def srclang(value); end
210
- sig { params(value: String).void }
211
-
162
+ sig { params(value: String).returns(FunHtml::Attribute) }
212
163
  def srcset(value); end
213
- sig { params(value: Numeric).void }
164
+ sig { params(value: Numeric).returns(FunHtml::Attribute) }
214
165
  def start(value); end
215
- sig { params(value: T.any(Numeric, String)).void }
166
+ sig { params(value: T.any(Numeric, String)).returns(FunHtml::Attribute) }
216
167
  def step(value); end
217
- sig { params(value: String).void }
218
-
168
+ sig { params(value: String).returns(FunHtml::Attribute) }
219
169
  def style(value); end
220
- sig { params(value: Numeric).void }
170
+ sig { params(value: Numeric).returns(FunHtml::Attribute) }
221
171
  def tabindex(value); end
222
- sig { params(value: String).void }
223
-
172
+ sig { params(value: String).returns(FunHtml::Attribute) }
224
173
  def target(value); end
225
- sig { params(value: String).void }
226
-
174
+ sig { params(value: String).returns(FunHtml::Attribute) }
227
175
  def title(value); end
228
- sig { params(value: String).void }
229
-
176
+ sig { params(value: String).returns(FunHtml::Attribute) }
230
177
  def translate(value); end
231
- sig { params(value: String).void }
232
-
178
+ sig { params(value: String).returns(FunHtml::Attribute) }
233
179
  def type(value); end
234
- sig { params(value: String).void }
235
-
180
+ sig { params(value: String).returns(FunHtml::Attribute) }
236
181
  def usemap(value); end
237
- sig { params(value: String).void }
238
-
182
+ sig { params(value: String).returns(FunHtml::Attribute) }
239
183
  def value(value); end
240
- sig { params(value: T.any(Numeric, String)).void }
184
+ sig { params(value: T.any(Numeric, String)).returns(FunHtml::Attribute) }
241
185
  def width(value); end
242
- sig { params(value: String).void }
243
-
186
+ sig { params(value: String).returns(FunHtml::Attribute) }
244
187
  def wrap(value); end
245
188
  end
246
189
  end