fun_html 0.1.4 → 0.3.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,8 +2,188 @@
2
2
 
3
3
  module FunHtml
4
4
  # HTML attributes autogenerated, do not edit
5
- module AttributeDefinitions
6
- sig { params(suffix: String, value: T::Boolean).void }
7
- def data(suffix, value); end
5
+ module SpecAttributes
6
+ sig { params(value: String).returns(FunHtml::Attribute) }
7
+ def accept(value); end
8
+ sig { params(value: String).returns(FunHtml::Attribute) }
9
+ def accept_charset(value); end
10
+ sig { params(value: String).returns(FunHtml::Attribute) }
11
+ def accesskey(value); end
12
+ sig { params(value: String).returns(FunHtml::Attribute) }
13
+ def action(value); end
14
+ sig { params(value: String).returns(FunHtml::Attribute) }
15
+ def align(value); end
16
+ sig { params(value: String).returns(FunHtml::Attribute) }
17
+ def alt(value); end
18
+ sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
19
+ def async(value); end
20
+ sig { params(value: String).returns(FunHtml::Attribute) }
21
+ def autocomplete(value); end
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) }
27
+ def bgcolor(value); end
28
+ sig { params(value: Numeric).returns(FunHtml::Attribute) }
29
+ def border(value); end
30
+ sig { params(value: String).returns(FunHtml::Attribute) }
31
+ def charset(value); end
32
+ sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
33
+ def checked(value); end
34
+ sig { params(value: Numeric).returns(FunHtml::Attribute) }
35
+ def cols(value); end
36
+ sig { params(value: Numeric).returns(FunHtml::Attribute) }
37
+ def colspan(value); end
38
+ sig { params(value: String).returns(FunHtml::Attribute) }
39
+ def content(value); end
40
+ sig { params(value: String).returns(FunHtml::Attribute) }
41
+ def contenteditable(value); end
42
+ sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
43
+ def controls(value); end
44
+ sig { params(value: String).returns(FunHtml::Attribute) }
45
+ def coords(value); end
46
+ sig { params(value: String).returns(FunHtml::Attribute) }
47
+ def datetime(value); end
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) }
53
+ def dir(value); end
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) }
57
+ def download(value); end
58
+ sig { params(value: String).returns(FunHtml::Attribute) }
59
+ def draggable(value); end
60
+ sig { params(value: String).returns(FunHtml::Attribute) }
61
+ def enctype(value); end
62
+ sig { params(value: String).returns(FunHtml::Attribute) }
63
+ def for(value); end
64
+ sig { params(value: String).returns(FunHtml::Attribute) }
65
+ def form(value); end
66
+ sig { params(value: String).returns(FunHtml::Attribute) }
67
+ def formaction(value); end
68
+ sig { params(value: String).returns(FunHtml::Attribute) }
69
+ def headers(value); end
70
+ sig { params(value: T.any(Numeric, String)).returns(FunHtml::Attribute) }
71
+ def height(value); end
72
+ sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
73
+ def hidden(value); end
74
+ sig { params(value: Numeric).returns(FunHtml::Attribute) }
75
+ def high(value); end
76
+ sig { params(value: String).returns(FunHtml::Attribute) }
77
+ def href(value); end
78
+ sig { params(value: String).returns(FunHtml::Attribute) }
79
+ def hreflang(value); end
80
+ sig { params(value: String).returns(FunHtml::Attribute) }
81
+ def id(value); end
82
+ sig { params(value: String).returns(FunHtml::Attribute) }
83
+ def integrity(value); end
84
+ sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
85
+ def ismap(value); end
86
+ sig { params(value: String).returns(FunHtml::Attribute) }
87
+ def kind(value); end
88
+ sig { params(value: String).returns(FunHtml::Attribute) }
89
+ def label(value); end
90
+ sig { params(value: String).returns(FunHtml::Attribute) }
91
+ def lang(value); end
92
+ sig { params(value: String).returns(FunHtml::Attribute) }
93
+ def list(value); end
94
+ sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
95
+ def loop(value); end
96
+ sig { params(value: Numeric).returns(FunHtml::Attribute) }
97
+ def low(value); end
98
+ sig { params(value: T.any(Numeric, String)).returns(FunHtml::Attribute) }
99
+ def max(value); end
100
+ sig { params(value: Numeric).returns(FunHtml::Attribute) }
101
+ def maxlength(value); end
102
+ sig { params(value: String).returns(FunHtml::Attribute) }
103
+ def media(value); end
104
+ sig { params(value: String).returns(FunHtml::Attribute) }
105
+ def method(value); end
106
+ sig { params(value: T.any(Numeric, String)).returns(FunHtml::Attribute) }
107
+ def min(value); end
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) }
113
+ def name(value); end
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) }
119
+ def optimum(value); end
120
+ sig { params(value: String).returns(FunHtml::Attribute) }
121
+ def pattern(value); end
122
+ sig { params(value: String).returns(FunHtml::Attribute) }
123
+ def placeholder(value); end
124
+ sig { params(value: String).returns(FunHtml::Attribute) }
125
+ def poster(value); end
126
+ sig { params(value: String).returns(FunHtml::Attribute) }
127
+ def preload(value); end
128
+ sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
129
+ def readonly(value); end
130
+ sig { params(value: String).returns(FunHtml::Attribute) }
131
+ def rel(value); end
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) }
137
+ def rows(value); end
138
+ sig { params(value: Numeric).returns(FunHtml::Attribute) }
139
+ def rowspan(value); end
140
+ sig { params(value: String).returns(FunHtml::Attribute) }
141
+ def sandbox(value); end
142
+ sig { params(value: Numeric).returns(FunHtml::Attribute) }
143
+ def span(value); end
144
+ sig { params(value: String).returns(FunHtml::Attribute) }
145
+ def scope(value); end
146
+ sig { params(value: T::Boolean).returns(FunHtml::Attribute) }
147
+ def selected(value); end
148
+ sig { params(value: String).returns(FunHtml::Attribute) }
149
+ def shape(value); end
150
+ sig { params(value: Numeric).returns(FunHtml::Attribute) }
151
+ def size(value); end
152
+ sig { params(value: String).returns(FunHtml::Attribute) }
153
+ def sizes(value); end
154
+ sig { params(value: String).returns(FunHtml::Attribute) }
155
+ def spellcheck(value); end
156
+ sig { params(value: String).returns(FunHtml::Attribute) }
157
+ def src(value); end
158
+ sig { params(value: String).returns(FunHtml::Attribute) }
159
+ def srcdoc(value); end
160
+ sig { params(value: String).returns(FunHtml::Attribute) }
161
+ def srclang(value); end
162
+ sig { params(value: String).returns(FunHtml::Attribute) }
163
+ def srcset(value); end
164
+ sig { params(value: Numeric).returns(FunHtml::Attribute) }
165
+ def start(value); end
166
+ sig { params(value: T.any(Numeric, String)).returns(FunHtml::Attribute) }
167
+ def step(value); end
168
+ sig { params(value: String).returns(FunHtml::Attribute) }
169
+ def style(value); end
170
+ sig { params(value: Numeric).returns(FunHtml::Attribute) }
171
+ def tabindex(value); end
172
+ sig { params(value: String).returns(FunHtml::Attribute) }
173
+ def target(value); end
174
+ sig { params(value: String).returns(FunHtml::Attribute) }
175
+ def title(value); end
176
+ sig { params(value: String).returns(FunHtml::Attribute) }
177
+ def translate(value); end
178
+ sig { params(value: String).returns(FunHtml::Attribute) }
179
+ def type(value); end
180
+ sig { params(value: String).returns(FunHtml::Attribute) }
181
+ def usemap(value); end
182
+ sig { params(value: String).returns(FunHtml::Attribute) }
183
+ def value(value); end
184
+ sig { params(value: T.any(Numeric, String)).returns(FunHtml::Attribute) }
185
+ def width(value); end
186
+ sig { params(value: String).returns(FunHtml::Attribute) }
187
+ def wrap(value); end
8
188
  end
9
189
  end