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 +4 -4
- data/.version +1 -1
- data/lib/html-tag.rb +2 -5
- data/lib/html-tag/adapter.rb +2 -15
- data/lib/html-tag/html_tag.rb +18 -0
- data/lib/html-tag/{base.rb → html_tag_builder.rb} +47 -42
- metadata +5 -18
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5c14a5d669505ed74d43e52cb564a8635a48a21670e0dce86756b3fc18a90a28
|
|
4
|
+
data.tar.gz: 00c996b4444863bd710c722585b53638a28f562e64a79483335a853a7e4670e0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 00eebf82a2b96e95f25272f536ada28d90115a2a177a129c5877a966449dc87de88833520eb9aa0e8d18038f06a9fd3bab079e10ae92c40be3479e4670787592
|
|
7
|
+
data.tar.gz: 57047fe46f74f6bb2e6d400c1c0bbb4e9832fc631eabc43cd4f83070c7ccfa67d2a87c6a6c62e1b44db73d61ed3ce2b1fc17412f6a461616f37c349fc759b9b2
|
data/.version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
2.0.0
|
data/lib/html-tag.rb
CHANGED
data/lib/html-tag/adapter.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
|
-
HtmlTagBuilder.build
|
|
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
|
|
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
|
|
5
|
-
tag
|
|
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
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
21
|
-
|
|
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
|
|
62
|
+
build name, opts, data
|
|
56
63
|
end
|
|
57
64
|
|
|
58
65
|
# build html node
|
|
59
|
-
def build
|
|
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
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
|
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(/"/,'"')+'"'
|
|
@@ -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:
|
|
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-
|
|
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/
|
|
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
|