html-tag 1.3.3 → 2.0.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.
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