html-tag 3.0.0 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1af81083a15e78d8cecfed801fb466ce389ccae3bd5378528acc1f63aa345e3a
4
- data.tar.gz: 668a8a601339fe419daba93f97c33df6f4d3c1ce391b6df6cb70d3cb5574f719
3
+ metadata.gz: 62429fba4dc4f58b599307927a448ac66ff140053a52f3641188cd9b1c261033
4
+ data.tar.gz: e692ee406a52cdd0d7c4750dd0553768ede5614ea17ca55f9c9c9066d0832c4c
5
5
  SHA512:
6
- metadata.gz: d520970b6bfbeb1738e7dc23110f4c66e3859a98fbeb59876f9d31bd916f1b288bb72743da4b38bc944942880d92c4641cce873e1e8e57f82ac726dafacdacfa
7
- data.tar.gz: fd4750d1cdbfe778a41a02371a3cca980956ec553acf66df3daf5b40a73c3249e22aceab0287e6f0ca3760da46d71befeb7d029d696d847abd786504bf1ada0a
6
+ metadata.gz: 44aba32e3255ac8c7f843ac14919dde2994f42168d5c8594c96d46233964d0f09567f72c34c6301a4b8d6655694a6e36506fe153fbc2c01b9aee2ada2d62d677
7
+ data.tar.gz: f028fe5ee782953b8b6ad78774c2af0307774f069c050e1633c50e6d95886c31feb4d4272bac9cc7f514e12c44da1b913175c12f8824831c1c8575e025211c6b
data/.version CHANGED
@@ -1 +1 @@
1
- 3.0.0
1
+ 3.0.1
@@ -2,7 +2,7 @@
2
2
  unless {}.respond_to?(:tag)
3
3
  class Hash
4
4
  def tag node_name, inner_html=nil
5
- ::HtmlTag::Outbound.build node_name, self, inner_html
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
- ::HtmlTag::Outbound.build node_name, opts, self
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
- out = HtmlTag::Inbound.new self
29
- out.send(*args, &block)
30
- out.render
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
@@ -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
@@ -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
- case value
80
- when Array
81
- value = value.join(' ')
82
- when Hash
79
+ if value.class == Hash
83
80
  for el in value
84
- t.push '%s-%s="%s"' % [key, el[0], _escape_param(el[1])]
81
+ t.push "%s-%s='%s'" % [key, el[0], _escape_param(el[1])]
85
82
  end
86
83
  else
87
- t.push '%s="%s"' % [key, _escape_param(value)]
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
- instance_exec(@_iv.context, &block)
103
- # block.call(self) # for outbound render
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
- # _foo__bar-baz class: 'dux' -> <div class="foo bar-baz dux"></div>
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
- [opt_hash, opt_data]
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(/"/, '&quot;')
190
+ el.to_s.gsub(/'/, '&apos;')
178
191
  end
179
192
  end
180
193
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: html-tag
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dino Reic