html_rb 1.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 +7 -0
- data/lib/html_rb.rb +83 -0
- data/lib/html_rb/constants.rb +158 -0
- metadata +47 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 907ff51c68c17cdcf035eacaa2ef82b3a2a3050b
|
4
|
+
data.tar.gz: d70f50da58bc048b61ebf02873028dc3794f0a64
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 22c13f0bbdc20394782c704e59a8d92dde4d0a7361f4d8eaa83109feb21d2ce905578b2ac7c9dd0308378881f512a6912f609c24f761fc756f6d691bb116a6bc
|
7
|
+
data.tar.gz: a3098a8f2623954a6e81a1aece656ee22dd598afa76e31c6b404ce4028e958a2fa82148bf042525b1d7ec2867b8799d3ea0d2ea45186e5836e6d1d22b654b3a6
|
data/lib/html_rb.rb
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'html_rb/constants'
|
2
|
+
|
3
|
+
module HtmlRB
|
4
|
+
VERSION = "1.0.0".freeze
|
5
|
+
|
6
|
+
Error = Class.new(StandardError)
|
7
|
+
|
8
|
+
class Tag
|
9
|
+
def initialize(name=nil,content=nil,**attrs,&block)
|
10
|
+
@strings = []
|
11
|
+
build name, content, **attrs, &block
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_s
|
15
|
+
@strings.join
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
def build(name=nil,content=nil,**attrs,&block)
|
20
|
+
void = HtmlRB::VOID_ELEMENTS.include?(name)
|
21
|
+
raise HtmlRB::Error, "May not provide both content and block" if content && block_given?
|
22
|
+
raise HtmlRB::Error, "Void elements cannot enclose content" if void && (content || block_given?)
|
23
|
+
|
24
|
+
@strings << "<#{[name,attribute_string(attrs)].join(" ").strip}>" if name
|
25
|
+
unless void
|
26
|
+
@strings << content if content
|
27
|
+
instance_eval(&block) if block_given?
|
28
|
+
@strings << "</#{name}>" if name
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# Define all the tag methods
|
33
|
+
(HtmlRB::STD_ELEMENTS + HtmlRB::VOID_ELEMENTS).each do |el|
|
34
|
+
define_method(el) do |content=nil,**attrs,&block|
|
35
|
+
build el, content, **attrs, &block
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Used for Text Nodes
|
40
|
+
def text(content)
|
41
|
+
build nil, content
|
42
|
+
end
|
43
|
+
|
44
|
+
# ATTRIBUTE HANDLING
|
45
|
+
def attribute_string(hash={})
|
46
|
+
hash.delete_if{|k,v| v.nil? || v == "" }
|
47
|
+
.map{|k,v| attribute_pair(k,v) }
|
48
|
+
.compact
|
49
|
+
.join(" ")
|
50
|
+
end
|
51
|
+
|
52
|
+
def attribute_pair(k,v)
|
53
|
+
if HtmlRB::BOOL_ATTRS.include?(k)
|
54
|
+
attribute_key(k) if v
|
55
|
+
else
|
56
|
+
%Q|#{attribute_key(k)}="#{v}"|
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def attribute_key(k)
|
61
|
+
str = k.to_s
|
62
|
+
if str.start_with? "!"
|
63
|
+
str.slice!(0)
|
64
|
+
else
|
65
|
+
str.gsub!("_","-")
|
66
|
+
end
|
67
|
+
str
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def html(content=nil,document:false,doctype:"html",**attrs,&block)
|
72
|
+
name = nil
|
73
|
+
dt = ""
|
74
|
+
if document
|
75
|
+
name = :html
|
76
|
+
dt = "<!DOCTYPE #{doctype}>" if doctype
|
77
|
+
end
|
78
|
+
dt + Tag.new(name, content, **attrs, &block).to_s
|
79
|
+
end
|
80
|
+
|
81
|
+
alias_method :markup, :html
|
82
|
+
module_function :markup
|
83
|
+
end
|
@@ -0,0 +1,158 @@
|
|
1
|
+
module HtmlRB
|
2
|
+
STD_ELEMENTS=[
|
3
|
+
:a,
|
4
|
+
:abbr,
|
5
|
+
:address,
|
6
|
+
:article,
|
7
|
+
:aside,
|
8
|
+
:audio,
|
9
|
+
:b,
|
10
|
+
:bdi,
|
11
|
+
:bdo,
|
12
|
+
:blockquote,
|
13
|
+
:body,
|
14
|
+
:button,
|
15
|
+
:canvas,
|
16
|
+
:caption,
|
17
|
+
:cite,
|
18
|
+
:code,
|
19
|
+
:colgroup,
|
20
|
+
:datalist,
|
21
|
+
:dd,
|
22
|
+
:del,
|
23
|
+
:details,
|
24
|
+
:dfn,
|
25
|
+
:dialog,
|
26
|
+
:div,
|
27
|
+
:dl,
|
28
|
+
:dt,
|
29
|
+
:em,
|
30
|
+
:fieldset,
|
31
|
+
:figcaption,
|
32
|
+
:figure,
|
33
|
+
:footer,
|
34
|
+
:form,
|
35
|
+
:h1,
|
36
|
+
:head,
|
37
|
+
:header,
|
38
|
+
:html,
|
39
|
+
:i,
|
40
|
+
:iframe,
|
41
|
+
:ins,
|
42
|
+
:kbd,
|
43
|
+
:label,
|
44
|
+
:legend,
|
45
|
+
:li,
|
46
|
+
:main,
|
47
|
+
:map,
|
48
|
+
:mark,
|
49
|
+
:menu,
|
50
|
+
:menuitem,
|
51
|
+
:meter,
|
52
|
+
:nav,
|
53
|
+
:noscript,
|
54
|
+
:object,
|
55
|
+
:ol,
|
56
|
+
:optgroup,
|
57
|
+
:option,
|
58
|
+
:output,
|
59
|
+
:p,
|
60
|
+
:pre,
|
61
|
+
:progress,
|
62
|
+
:q,
|
63
|
+
:rp,
|
64
|
+
:rt,
|
65
|
+
:ruby,
|
66
|
+
:s,
|
67
|
+
:samp,
|
68
|
+
:script,
|
69
|
+
:section,
|
70
|
+
:select,
|
71
|
+
:small,
|
72
|
+
:span,
|
73
|
+
:strong,
|
74
|
+
:style,
|
75
|
+
:sub,
|
76
|
+
:summary,
|
77
|
+
:sup,
|
78
|
+
:table,
|
79
|
+
:tbody,
|
80
|
+
:td,
|
81
|
+
:textarea,
|
82
|
+
:tfoot,
|
83
|
+
:th,
|
84
|
+
:thead,
|
85
|
+
:time,
|
86
|
+
:title,
|
87
|
+
:tr,
|
88
|
+
:u,
|
89
|
+
:ul,
|
90
|
+
:var,
|
91
|
+
:video,
|
92
|
+
].to_set.freeze
|
93
|
+
|
94
|
+
VOID_ELEMENTS=[
|
95
|
+
:area,
|
96
|
+
:base,
|
97
|
+
:br,
|
98
|
+
:col,
|
99
|
+
:embed,
|
100
|
+
:hr,
|
101
|
+
:img,
|
102
|
+
:input,
|
103
|
+
:keygen,
|
104
|
+
:link,
|
105
|
+
:meta,
|
106
|
+
:param,
|
107
|
+
:source,
|
108
|
+
:track,
|
109
|
+
:wbr,
|
110
|
+
].to_set.freeze
|
111
|
+
|
112
|
+
BOOL_ATTRS=[
|
113
|
+
:allowfullscreen,
|
114
|
+
:async,
|
115
|
+
:autofocus,
|
116
|
+
:autoplay,
|
117
|
+
:checked,
|
118
|
+
:compact,
|
119
|
+
:controls,
|
120
|
+
:declare,
|
121
|
+
:default,
|
122
|
+
:defaultchecked,
|
123
|
+
:defaultmuted,
|
124
|
+
:defaultselected,
|
125
|
+
:defer,
|
126
|
+
:disabled,
|
127
|
+
:draggable,
|
128
|
+
:enabled,
|
129
|
+
:formnovalidate,
|
130
|
+
:hidden,
|
131
|
+
:indeterminate,
|
132
|
+
:inert,
|
133
|
+
:ismap,
|
134
|
+
:itemscope,
|
135
|
+
:loop,
|
136
|
+
:multiple,
|
137
|
+
:muted,
|
138
|
+
:nohref,
|
139
|
+
:noresize,
|
140
|
+
:noshade,
|
141
|
+
:novalidate,
|
142
|
+
:nowrap,
|
143
|
+
:open,
|
144
|
+
:pauseonexit,
|
145
|
+
:readonly,
|
146
|
+
:required,
|
147
|
+
:reversed,
|
148
|
+
:scoped,
|
149
|
+
:seamless,
|
150
|
+
:selected,
|
151
|
+
:sortable,
|
152
|
+
:spellcheck,
|
153
|
+
:translate,
|
154
|
+
:truespeed,
|
155
|
+
:typemustmatch,
|
156
|
+
:visible,
|
157
|
+
].to_set.freeze
|
158
|
+
end
|
metadata
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: html_rb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Andrew Burleson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-05-14 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: A beautifully simple DSL for writing HTML in ruby. Check out the readme
|
14
|
+
at github.com/burlesona/html_rb for detailed examples, or see the tests.
|
15
|
+
email: burlesona@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/html_rb.rb
|
21
|
+
- lib/html_rb/constants.rb
|
22
|
+
homepage: http://github.com/burlesona/html
|
23
|
+
licenses:
|
24
|
+
- MIT
|
25
|
+
metadata: {}
|
26
|
+
post_install_message:
|
27
|
+
rdoc_options: []
|
28
|
+
require_paths:
|
29
|
+
- lib
|
30
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '2.0'
|
35
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
requirements: []
|
41
|
+
rubyforge_project:
|
42
|
+
rubygems_version: 2.5.1
|
43
|
+
signing_key:
|
44
|
+
specification_version: 4
|
45
|
+
summary: A beautifully simple DSL for writing HTML in ruby
|
46
|
+
test_files: []
|
47
|
+
has_rdoc:
|