lib/bootstrap-email.rb in bootstrap-email-0.0.0.alpha.2 vs lib/bootstrap-email.rb in bootstrap-email-0.0.0.alpha.3
- old
+ new
@@ -23,10 +23,11 @@
hr
container
grid
padding
margin
+ spacer
table
end
def update_mailer!
@mail.body = @doc.to_html
@@ -36,21 +37,21 @@
private
def build_from_template template, locals_hash = {}
namespace = OpenStruct.new(locals_hash)
template = File.open(File.expand_path("../core/templates/#{template}.html.erb", __dir__)).read
- Nokogiri::HTML::DocumentFragment.parse(ERB.new(template).result(namespace.instance_eval { binding }))
+ ERB.new(template).result(namespace.instance_eval { binding })
end
def each_node css_lookup, &blk
# sort by youngest child and traverse backwards up the tree
@doc.css(css_lookup).sort_by{ |n| n.ancestors.size }.reverse!.each(&blk)
end
def button
each_node('.btn') do |node| # move all classes up and remove all classes from the element
- node.replace(build_from_template('table-left', {classes: node['class'], contents: node.delete('class') && node.to_html}))
+ node.replace(build_from_template('table', {classes: node['class'], contents: node.delete('class') && node.to_html}))
end
end
def badge
each_node('.badge') do |node| # move all classes up and remove all classes from the element
@@ -115,23 +116,35 @@
def padding
each_node('*[class*=p-], *[class*=pt-], *[class*=pr-], *[class*=pb-], *[class*=pl-], *[class*=px-], *[class*=py-]') do |node|
if node.name != 'table' # if it is already on a table, set the padding on the table, else wrap the content in a table
padding_regex = /(p[trblxy]?-\d)/
classes = node['class'].scan(padding_regex).join(' ')
- node['class'] = node['class'].sub(padding_regex, '')
+ node['class'] = node['class'].gsub(padding_regex, '')
node.replace(build_from_template('table', {classes: classes, contents: node.to_html}))
end
end
end
def margin
- each_node('*[class*=m-], *[class*=mt-], *[class*=mr-], *[class*=mb-], *[class*=ml-], *[class*=mx-], *[class*=my-]') do |node|
- if node.name != 'div' # if it is already on a div, set the margin on the div, else wrap the content in a div
- margin_regex = /(m[trblxy]?-\d)/
- classes = node['class'].scan(margin_regex).join(' ')
- node['class'] = node['class'].sub(margin_regex, '')
- node.replace(build_from_template('div', {classes: classes, contents: node.to_html}))
+ each_node('*[class*=m-], *[class*=mt-], *[class*=mb-]') do |node|
+ top_class = node['class'][/m[t]?-(\d)/]
+ bottom_class = node['class'][/m[b]?-(\d)/]
+ node['class'] = node['class'].gsub(/(m[trblxy]?-\d)/, '')
+ html = ''
+ if top_class
+ html += build_from_template('div', {classes: "s-#{top_class.gsub(/m[t]?-/, '')}", contents: nil})
end
+ html += node.to_html
+ if bottom_class
+ html += build_from_template('div', {classes: "s-#{bottom_class.gsub(/m[b]?-/, '')}", contents: nil})
+ end
+ node.replace(html)
+ end
+ end
+
+ def spacer
+ each_node('*[class*=s-]') do |node|
+ node.replace(build_from_template('table', {classes: node['class'] + ' w-100', contents: " "}))
end
end
def table
@doc.css('table').each do |node|