html-tag 1.3.3 → 2.0.0

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: 6e059a4d0fc919b9a8c8ea26b5909c24b5519acf7459314b15fb8d7b485f543b
4
- data.tar.gz: 6a9386662a963454a5235376be4eec0f6170b21f393c069fd008f92fbdf89741
3
+ metadata.gz: 5c14a5d669505ed74d43e52cb564a8635a48a21670e0dce86756b3fc18a90a28
4
+ data.tar.gz: 00c996b4444863bd710c722585b53638a28f562e64a79483335a853a7e4670e0
5
5
  SHA512:
6
- metadata.gz: b9d7af17a77ce73ca4c3488092b8772e008ee4b1d8848a0058f3ee969c7e3e24523aa6fc81fb8f9e7f903d4deaeafa0608bb7633894ea22af954e43886df72a8
7
- data.tar.gz: b5e3893b3e76b8fc8744c7fb71a508d327d6f8fea98efd51c9b1b3893955d7c17e6c1260b019333b45c399edf125163040c1903e219d8312dccaa266abb80d4c
6
+ metadata.gz: 00eebf82a2b96e95f25272f536ada28d90115a2a177a129c5877a966449dc87de88833520eb9aa0e8d18038f06a9fd3bab079e10ae92c40be3479e4670787592
7
+ data.tar.gz: 57047fe46f74f6bb2e6d400c1c0bbb4e9832fc631eabc43cd4f83070c7ccfa67d2a87c6a6c62e1b44db73d61ed3ce2b1fc17412f6a461616f37c349fc759b9b2
data/.version CHANGED
@@ -1 +1 @@
1
- 1.3.3
1
+ 2.0.0
data/lib/html-tag.rb CHANGED
@@ -1,6 +1,3 @@
1
- unless ''.respond_to?(:blank?)
2
- require 'fast_blank'
3
- end
4
-
5
- require_relative './html-tag/base'
1
+ require_relative './html-tag/html_tag_builder'
2
+ require_relative './html-tag/html_tag'
6
3
  require_relative './html-tag/adapter'
@@ -2,7 +2,7 @@
2
2
  unless {}.respond_to?(:tag)
3
3
  class Hash
4
4
  def tag node_name, inner_html=nil
5
- HtmlTagBuilder.build self, node_name, inner_html
5
+ ::HtmlTagBuilder.build node_name, self, inner_html
6
6
  end
7
7
  end
8
8
  end
@@ -11,20 +11,7 @@ end
11
11
  unless ''.respond_to?(:tag)
12
12
  class String
13
13
  def tag node_name, opts={}
14
- HtmlTagBuilder.build opts, node_name, self
14
+ ::HtmlTagBuilder.build node_name, opts, self
15
15
  end
16
16
  end
17
17
  end
18
-
19
- # All other objects
20
- class Object
21
- def tag
22
- HtmlTagBuilder
23
- end
24
-
25
- # Rails has tag methd defeined in views, in ActionView::Helpers::TagHelper
26
- # Access HtmlTagBuilder via xtag then
27
- def xtag
28
- HtmlTagBuilder
29
- end
30
- end
@@ -0,0 +1,18 @@
1
+ # inclue HtmlTag to import tag method
2
+
3
+ module HtmlTag
4
+ extend self
5
+
6
+ def tag
7
+ ::HtmlTagBuilder
8
+ end
9
+
10
+ # forward to class only if
11
+ def method_missing tag_name, *args, &block
12
+ if self === HtmlTag
13
+ ::HtmlTagBuilder.tag(tag_name, args[0], args[1], &block)
14
+ else
15
+ super
16
+ end
17
+ end
18
+ end
@@ -1,24 +1,41 @@
1
+ require 'set'
2
+
1
3
  class HtmlTagBuilder
4
+ EMPTY_TAGS ||= Set.new %w(area base br col embed hr img input keygen link meta param source track wbr)
5
+
2
6
  class << self
3
7
  # tag.div -> tag.tag :div
4
- def method_missing tag_name, *args, &block
5
- tag tag_name, args[0], args[1], &block
8
+ def method_missing name, *args, &block
9
+ tag name, args[0], args[1], &block
6
10
  end
7
11
 
8
12
  # tag :div, { 'class'=>'iform' } do
9
- def tag name=nil, opts={}, data=nil
10
- if Array === opts
11
- # join data given as an array
12
- data = opts
13
- opts = {}
14
- elsif Hash === data
15
- # tag.button('btn', href: '/') { 'Foo' }
16
- opts = data.merge class: opts
17
- data = nil
13
+ def tag name, *args
14
+ data, opts =
15
+ if args[1]
16
+ args[0].class == Hash ? args.reverse : args
17
+ elsif args[0]
18
+ if args[0].class == Symbol
19
+ # tag.div(:a) { 1 } -> <div class="a">1</div>
20
+ [nil, { class: args[0].to_s.gsub('__', ' ').gsub('_', '-') }]
21
+ elsif args[0].class == Hash
22
+ [nil, args[0]]
23
+ else
24
+ [args[0], {}]
25
+ end
26
+ else
27
+ [nil, {}]
28
+ end
29
+
30
+ opts ||= {}
31
+
32
+ unless opts.class == Hash
33
+ raise ArgumentError.new('HtmlTag: bad agrument, attriobutes are no a hash')
18
34
  end
19
35
 
20
- # tag.div(:a) { 1 } -> <div class="a">1</div>
21
- opts = opts.to_s if opts.class == Symbol
36
+ if data.class == Hash
37
+ raise ArgumentError.new('HtmlTag: bad agrument, data sent as hash')
38
+ end
22
39
 
23
40
  # covert n._row_foo to n(class: 'row-foo')
24
41
  name = name.to_s
@@ -28,21 +45,11 @@ class HtmlTagBuilder
28
45
  name = :div
29
46
  end
30
47
 
31
- # covert tag.a '.foo.bar' to class names
32
- # covert tag.a '#id' to id names
33
- if (data || block_given?) && opts.is_a?(String)
34
- given = opts.dup
35
- opts = {}
36
-
37
- given.sub(/#([\w\-]+)/) { opts[:id] = $1 }
38
- klass = given.sub(/^\./, '').gsub('.', ' ')
39
- opts[:class] = klass unless klass.blank?
40
- end
41
-
42
- # fix data and opts unless opts is Hash
43
- data, opts = opts, {} unless opts.class == Hash
44
-
45
48
  if block_given?
49
+ if data
50
+ raise ArgumentError.new('HtmlTag: data is allreay defined and block is given')
51
+ end
52
+
46
53
  stack = new
47
54
  data = yield(stack, opts)
48
55
 
@@ -52,11 +59,13 @@ class HtmlTagBuilder
52
59
 
53
60
  data = data.join('') if data.is_a?(Array)
54
61
 
55
- build opts, name, data
62
+ build name, opts, data
56
63
  end
57
64
 
58
65
  # build html node
59
- def build attrs, node=nil, text=nil
66
+ def build node, attrs={}, text=nil
67
+ node = node.to_s
68
+
60
69
  opts = []
61
70
  attrs.each do |attr_key, attr_value|
62
71
  if attr_value.is_a?(Hash)
@@ -70,12 +79,13 @@ class HtmlTagBuilder
70
79
 
71
80
  opts = opts.first ? ' '+opts.join(' ') : ''
72
81
 
73
- return opts unless node
74
-
75
- empty_tags = ['input', 'img', 'meta', 'link', 'hr', 'br', 'col', 'frame', 'area']
76
- text ||= '' unless empty_tags.include?(node.to_s)
77
- out = text ? %{<#{node}#{opts}>#{text}</#{node}>} : %{<#{node}#{opts} />}
78
- out.respond_to?(:html_safe) ? out.html_safe : out
82
+ if node
83
+ text ||= '' unless EMPTY_TAGS.include?(node)
84
+ out = text ? %{<#{node}#{opts}>#{text}</#{node}>} : %{<#{node}#{opts} />}
85
+ out.respond_to?(:html_safe) ? out.html_safe : out
86
+ else
87
+ opts
88
+ end
79
89
  end
80
90
 
81
91
  # tag.div(class: 'klasa') do -> tag.('klasa') do
@@ -84,7 +94,7 @@ class HtmlTagBuilder
84
94
  end
85
95
 
86
96
  def __add_opts opts, key, value
87
- unless value.to_s.blank?
97
+ unless value.to_s == ''
88
98
  value = value.join(' ') if value.is_a?(Array)
89
99
  key = key.to_s.gsub(/data_/,'data-')
90
100
  opts.push key+'="'+value.to_s.gsub(/"/,'&quot;')+'"'
@@ -105,15 +115,10 @@ class HtmlTagBuilder
105
115
  @data.push block_given? ? yield : data
106
116
  end
107
117
 
108
- # n.('foo') do -> n.div(class: 'foo') do
109
- def call class_name, &block
110
- @data.push self.class.tag(:div, { class: class_name }, &block)
111
- end
112
-
113
118
  private
114
119
 
115
120
  # forward to class
116
121
  def method_missing tag_name, *args, &block
117
122
  @data.push self.class.tag(tag_name, args[0], args[1], &block)
118
123
  end
119
- end
124
+ end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: html-tag
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.3
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dino Reic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-26 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: fast_blank
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1'
11
+ date: 2021-02-27 00:00:00.000000000 Z
12
+ dependencies: []
27
13
  description: Fast and powerful tag builder, upgrade to Rails tag helper, framework
28
14
  agnostic.
29
15
  email: reic.dino@gmail.com
@@ -34,7 +20,8 @@ files:
34
20
  - "./.version"
35
21
  - "./lib/html-tag.rb"
36
22
  - "./lib/html-tag/adapter.rb"
37
- - "./lib/html-tag/base.rb"
23
+ - "./lib/html-tag/html_tag.rb"
24
+ - "./lib/html-tag/html_tag_builder.rb"
38
25
  homepage: https://github.com/dux/html-tag
39
26
  licenses:
40
27
  - MIT