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 +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
|