html-tag 3.0.0 → 3.0.1
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/.version +1 -1
- data/lib/html-tag/globals.rb +24 -6
- data/lib/html-tag/html_tag.rb +2 -0
- data/lib/html-tag/inbound.rb +39 -26
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 62429fba4dc4f58b599307927a448ac66ff140053a52f3641188cd9b1c261033
|
4
|
+
data.tar.gz: e692ee406a52cdd0d7c4750dd0553768ede5614ea17ca55f9c9c9066d0832c4c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 44aba32e3255ac8c7f843ac14919dde2994f42168d5c8594c96d46233964d0f09567f72c34c6301a4b8d6655694a6e36506fe153fbc2c01b9aee2ada2d62d677
|
7
|
+
data.tar.gz: f028fe5ee782953b8b6ad78774c2af0307774f069c050e1633c50e6d95886c31feb4d4272bac9cc7f514e12c44da1b913175c12f8824831c1c8575e025211c6b
|
data/.version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.0.
|
1
|
+
3.0.1
|
data/lib/html-tag/globals.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
unless {}.respond_to?(:tag)
|
3
3
|
class Hash
|
4
4
|
def tag node_name, inner_html=nil
|
5
|
-
|
5
|
+
HtmlTag().send node_name, self, inner_html
|
6
6
|
end
|
7
7
|
end
|
8
8
|
end
|
@@ -10,13 +10,27 @@ end
|
|
10
10
|
# String
|
11
11
|
unless ''.respond_to?(:tag)
|
12
12
|
class String
|
13
|
-
def tag node_name, opts=
|
14
|
-
|
13
|
+
def tag node_name, opts = nil
|
14
|
+
HtmlTag().send node_name, self, opts
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
19
|
# HtmlTag do ...
|
20
|
+
module HtmlTag
|
21
|
+
class Proxy
|
22
|
+
def initialize
|
23
|
+
@pointer = HtmlTag::Inbound.new
|
24
|
+
end
|
25
|
+
|
26
|
+
def method_missing name, *args, &block
|
27
|
+
@pointer
|
28
|
+
.send(name, *args, &block)
|
29
|
+
.join('')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
20
34
|
def HtmlTag *args, &block
|
21
35
|
args[0] ||= :div
|
22
36
|
|
@@ -25,7 +39,11 @@ def HtmlTag *args, &block
|
|
25
39
|
args[0] = :div
|
26
40
|
end
|
27
41
|
|
28
|
-
|
29
|
-
|
30
|
-
|
42
|
+
if block
|
43
|
+
out = HtmlTag::Inbound.new self
|
44
|
+
out.send(*args, &block)
|
45
|
+
out.render
|
46
|
+
else
|
47
|
+
HtmlTag::Proxy.new
|
48
|
+
end
|
31
49
|
end
|
data/lib/html-tag/html_tag.rb
CHANGED
@@ -23,6 +23,7 @@ module HtmlTag
|
|
23
23
|
if block
|
24
24
|
HtmlTag *args, &block
|
25
25
|
else
|
26
|
+
# HtmlTag()
|
26
27
|
::HtmlTag::Outbound
|
27
28
|
end
|
28
29
|
end
|
@@ -30,6 +31,7 @@ module HtmlTag
|
|
30
31
|
# forward to class only if
|
31
32
|
def method_missing tag_name, *args, &block
|
32
33
|
if self === HtmlTag
|
34
|
+
# Proxy.new.tag(tag_name, args[0], args[1], &block)
|
33
35
|
Outbound.tag(tag_name, args[0], args[1], &block)
|
34
36
|
else
|
35
37
|
super
|
data/lib/html-tag/inbound.rb
CHANGED
@@ -27,7 +27,7 @@ module HtmlTag
|
|
27
27
|
|
28
28
|
###
|
29
29
|
|
30
|
-
def initialize context
|
30
|
+
def initialize context = nil
|
31
31
|
# copy all instance varialbes from context
|
32
32
|
for el in context.instance_variables
|
33
33
|
unless el.to_s.include?('@_')
|
@@ -66,7 +66,7 @@ module HtmlTag
|
|
66
66
|
|
67
67
|
# render single node
|
68
68
|
def tag name, *args, &block
|
69
|
-
opt_hash, opt_data = _prepare_tag_params args
|
69
|
+
name, opt_hash, opt_data = _prepare_tag_params name, args
|
70
70
|
|
71
71
|
tag_data = "%s%s<%s" % [_depth_new_line, _depth_spaces, name]
|
72
72
|
|
@@ -76,15 +76,18 @@ module HtmlTag
|
|
76
76
|
tag_data += opt_hash.inject([]) do |t, el|
|
77
77
|
key, value = el
|
78
78
|
|
79
|
-
|
80
|
-
when Array
|
81
|
-
value = value.join(' ')
|
82
|
-
when Hash
|
79
|
+
if value.class == Hash
|
83
80
|
for el in value
|
84
|
-
t.push
|
81
|
+
t.push "%s-%s='%s'" % [key, el[0], _escape_param(el[1])]
|
85
82
|
end
|
86
83
|
else
|
87
|
-
|
84
|
+
if value.class == Array
|
85
|
+
value = value.join(' ')
|
86
|
+
end
|
87
|
+
|
88
|
+
key = key.to_s.sub(/^data_/, 'data-')
|
89
|
+
|
90
|
+
t.push "%s='%s'" % [key, _escape_param(value)]
|
88
91
|
end
|
89
92
|
t
|
90
93
|
end.join(' ')
|
@@ -99,8 +102,15 @@ module HtmlTag
|
|
99
102
|
# nested blocks
|
100
103
|
if block
|
101
104
|
@_iv.depth += 1
|
102
|
-
|
103
|
-
|
105
|
+
|
106
|
+
if @_iv.context
|
107
|
+
# HtmlTag scope
|
108
|
+
instance_exec(&block)
|
109
|
+
else
|
110
|
+
# outbound scope
|
111
|
+
block.call(self)
|
112
|
+
end
|
113
|
+
|
104
114
|
@_iv.depth -= 1
|
105
115
|
end
|
106
116
|
|
@@ -123,19 +133,7 @@ module HtmlTag
|
|
123
133
|
klass = name.to_s
|
124
134
|
|
125
135
|
if klass.start_with?('_')
|
126
|
-
|
127
|
-
classes = klass
|
128
|
-
.sub('_', '')
|
129
|
-
.split('__')
|
130
|
-
.map{|it| it.gsub('_', '-') }
|
131
|
-
.join(' ')
|
132
|
-
|
133
|
-
prepared = _prepare_tag_params args
|
134
|
-
|
135
|
-
prepared[0] ||= {}
|
136
|
-
prepared[0][:class] = "#{classes} #{prepared[0][:class]}".sub(/\s+$/, '')
|
137
|
-
|
138
|
-
tag :div, *prepared, &block
|
136
|
+
tag klass, *args, &block
|
139
137
|
else
|
140
138
|
message = [
|
141
139
|
%{HTML tag "#{name}" not found.},
|
@@ -148,7 +146,7 @@ module HtmlTag
|
|
148
146
|
|
149
147
|
private
|
150
148
|
|
151
|
-
def _prepare_tag_params args
|
149
|
+
def _prepare_tag_params name, args
|
152
150
|
opt_hash, opt_data = args
|
153
151
|
|
154
152
|
# allow any arragement of vars
|
@@ -158,7 +156,22 @@ module HtmlTag
|
|
158
156
|
opt_hash, opt_data = opt_data, opt_hash
|
159
157
|
end
|
160
158
|
|
161
|
-
|
159
|
+
# _foo__bar-baz class: 'dux' -> <div class="foo bar-baz dux"></div>
|
160
|
+
klass = name.to_s
|
161
|
+
if klass.start_with?('_')
|
162
|
+
classes = klass
|
163
|
+
.sub('_', '')
|
164
|
+
.split('__')
|
165
|
+
.map{|it| it.gsub('_', '-') }
|
166
|
+
.join(' ')
|
167
|
+
|
168
|
+
klass = :div
|
169
|
+
|
170
|
+
opt_hash ||= {}
|
171
|
+
opt_hash[:class] = "#{classes} #{opt_hash[:class]}".sub(/\s+$/, '')
|
172
|
+
end
|
173
|
+
|
174
|
+
[klass, opt_hash, opt_data]
|
162
175
|
end
|
163
176
|
|
164
177
|
def _depth_spaces
|
@@ -174,7 +187,7 @@ module HtmlTag
|
|
174
187
|
end
|
175
188
|
|
176
189
|
def _escape_param el
|
177
|
-
el.to_s.gsub(/
|
190
|
+
el.to_s.gsub(/'/, ''')
|
178
191
|
end
|
179
192
|
end
|
180
193
|
end
|