bootstrap-email 0.3.4 → 1.0.0.alpha1
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/bin/bootstrap-email +2 -0
- data/core/bootstrap-email.scss +27 -18
- data/core/bootstrap-head.scss +143 -0
- data/core/layout.html.erb +11 -0
- data/core/scss/_colors.scss +161 -0
- data/core/scss/_functions.scss +29 -0
- data/core/scss/_helper_groups.scss +21 -0
- data/core/{sass → scss}/_reboot_email.scss +7 -22
- data/core/scss/_selectors_for_utils.scss +100 -0
- data/core/scss/_utilities.scss +125 -0
- data/core/scss/_variables.scss +52 -0
- data/core/{sass → scss/components}/_alert.scss +0 -1
- data/core/{sass → scss/components}/_badge.scss +8 -15
- data/core/{sass → scss/components}/_button.scss +21 -17
- data/core/{sass → scss/components}/_card.scss +3 -2
- data/core/{sass → scss/components}/_container.scss +0 -0
- data/core/scss/components/_grid.scss +35 -0
- data/core/scss/components/_hr.scss +8 -0
- data/core/{sass → scss/components}/_image.scss +2 -1
- data/core/{sass → scss/components}/_preview.scss +0 -0
- data/core/{sass → scss/components}/_table.scss +0 -0
- data/core/scss/utilities/_background.scss +5 -0
- data/core/scss/utilities/_border-radius.scss +21 -0
- data/core/scss/utilities/_border.scss +13 -0
- data/core/scss/utilities/_color.scss +9 -0
- data/core/scss/utilities/_display.scss +7 -0
- data/core/scss/utilities/_sizing.scss +16 -0
- data/core/scss/utilities/_spacing.scss +18 -0
- data/core/scss/utilities/_text-decoration.scss +9 -0
- data/core/scss/utilities/_typography.scss +54 -0
- data/core/templates/col.html.erb +2 -2
- data/core/templates/row.html.erb +2 -2
- data/lib/bootstrap-email/bootstrap_email_cli.rb +91 -0
- data/lib/bootstrap-email/compiler.rb +118 -0
- data/lib/bootstrap-email/components/alert.rb +11 -0
- data/lib/bootstrap-email/components/align.rb +21 -0
- data/lib/bootstrap-email/components/badge.rb +11 -0
- data/lib/bootstrap-email/components/base.rb +26 -0
- data/lib/bootstrap-email/components/body.rb +22 -0
- data/lib/bootstrap-email/components/button.rb +11 -0
- data/lib/bootstrap-email/components/card.rb +14 -0
- data/lib/bootstrap-email/components/color.rb +13 -0
- data/lib/bootstrap-email/components/container.rb +14 -0
- data/lib/bootstrap-email/components/grid.rb +14 -0
- data/lib/bootstrap-email/components/hr.rb +12 -0
- data/lib/bootstrap-email/components/margin.rb +22 -0
- data/lib/bootstrap-email/components/padding.rb +16 -0
- data/lib/bootstrap-email/components/paragraph.rb +24 -0
- data/lib/bootstrap-email/components/spacer.rb +11 -0
- data/lib/bootstrap-email/components/spacing.rb +18 -0
- data/lib/bootstrap-email/components/table.rb +13 -0
- data/lib/bootstrap-email/initialize.rb +1 -0
- data/lib/bootstrap-email/{action_mailer.rb → rails/action_mailer.rb} +3 -7
- data/lib/bootstrap-email/{engine.rb → rails/engine.rb} +0 -0
- data/lib/bootstrap-email/sass_cache.rb +47 -0
- data/lib/bootstrap-email/version.rb +3 -5
- data/lib/bootstrap_email.rb +26 -0
- metadata +70 -58
- data/core/head.scss +0 -269
- data/core/sass/_border.scss +0 -73
- data/core/sass/_color.scss +0 -33
- data/core/sass/_display.scss +0 -7
- data/core/sass/_functions.scss +0 -14
- data/core/sass/_grid.scss +0 -131
- data/core/sass/_hr.scss +0 -13
- data/core/sass/_spacing.scss +0 -100
- data/core/sass/_typography.scss +0 -50
- data/core/sass/_variables.scss +0 -150
- data/core/template.html.erb +0 -11
- data/core/templates/align-center.html.erb +0 -9
- data/core/templates/align-left.html.erb +0 -9
- data/core/templates/align-right.html.erb +0 -9
- data/core/templates/hr.html.erb +0 -9
- data/lib/assets/stylesheets/bootstrap-email.scss +0 -1
- data/lib/bootstrap-email.rb +0 -230
- data/lib/bootstrap-email/premailer_railtie.rb +0 -5
@@ -0,0 +1,26 @@
|
|
1
|
+
module BootstrapEmail
|
2
|
+
module Component
|
3
|
+
class Base
|
4
|
+
attr_reader :doc
|
5
|
+
def initialize(doc)
|
6
|
+
@doc = doc
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.build(doc)
|
10
|
+
new(doc).build
|
11
|
+
end
|
12
|
+
|
13
|
+
def template(file, locals_hash = {})
|
14
|
+
locals_hash[:classes] = locals_hash[:classes].split.join(' ') if locals_hash[:classes]
|
15
|
+
namespace = OpenStruct.new(locals_hash)
|
16
|
+
template_html = File.read(File.expand_path("../../../core/templates/#{file}.html.erb", __dir__))
|
17
|
+
ERB.new(template_html).result(namespace.instance_eval { binding })
|
18
|
+
end
|
19
|
+
|
20
|
+
def each_node(css_lookup, &blk)
|
21
|
+
# sort by youngest child and traverse backwards up the tree
|
22
|
+
doc.css(css_lookup).sort_by { |n| n.ancestors.size }.reverse!.each(&blk)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module BootstrapEmail
|
2
|
+
module Component
|
3
|
+
class Body < Base
|
4
|
+
def build
|
5
|
+
each_node('body') do |node|
|
6
|
+
node.replace('<body>' + preview_text.to_s + template('body', classes: "#{node['class']} body", contents: node.inner_html) + '</body>')
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def preview_text
|
11
|
+
preview_node = doc.at_css('preview')
|
12
|
+
return if preview_node.nil?
|
13
|
+
|
14
|
+
# apply spacing after the text max of 100 characters so it doesn't show body text
|
15
|
+
preview_node.content += ' ' * [(100 - preview_node.content.length.to_i), 0].max
|
16
|
+
node = template('div', classes: 'preview', contents: preview_node.content)
|
17
|
+
preview_node.remove
|
18
|
+
node
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module BootstrapEmail
|
2
|
+
module Component
|
3
|
+
class Card < Base
|
4
|
+
def build
|
5
|
+
each_node('.card') do |node|
|
6
|
+
node.replace(template('table', classes: node['class'], contents: node.delete('class') && node.inner_html))
|
7
|
+
end
|
8
|
+
each_node('.card-body') do |node|
|
9
|
+
node.replace(template('table', classes: node['class'], contents: node.delete('class') && node.inner_html))
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module BootstrapEmail
|
2
|
+
module Component
|
3
|
+
class Color < Base
|
4
|
+
def build
|
5
|
+
each_node('*[class*=bg-]') do |node|
|
6
|
+
next unless ['div'].include?(node.name) # only do automatic thing for div
|
7
|
+
|
8
|
+
node.replace(template('table', classes: "#{node['class']} w-full", contents: node.delete('class') && node.inner_html))
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module BootstrapEmail
|
2
|
+
module Component
|
3
|
+
class Container < Base
|
4
|
+
def build
|
5
|
+
each_node('.container') do |node|
|
6
|
+
node.replace(template('container', classes: node['class'], contents: node.inner_html))
|
7
|
+
end
|
8
|
+
each_node('.container-fluid') do |node|
|
9
|
+
node.replace(template('table', classes: node['class'], contents: node.inner_html))
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module BootstrapEmail
|
2
|
+
module Component
|
3
|
+
class Grid < Base
|
4
|
+
def build
|
5
|
+
each_node('.row') do |node|
|
6
|
+
node.replace(template('row', classes: node['class'], contents: node.inner_html))
|
7
|
+
end
|
8
|
+
each_node('*[class*=col]') do |node|
|
9
|
+
node.replace(template('col', classes: node['class'], contents: node.inner_html))
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module BootstrapEmail
|
2
|
+
module Component
|
3
|
+
class Hr < Base
|
4
|
+
def build
|
5
|
+
each_node('hr') do |node|
|
6
|
+
default_margin = node['class'].to_s.match?(/m[tby]{1}-(lg-)?\d+/) ? '' : 'my-5'
|
7
|
+
node.replace(template('table', classes: "#{default_margin} hr #{node['class']}", contents: ''))
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module BootstrapEmail
|
2
|
+
module Component
|
3
|
+
class Margin < Base
|
4
|
+
def build
|
5
|
+
each_node('*[class*=my-], *[class*=mt-], *[class*=mb-]') do |node|
|
6
|
+
top_class = node['class'][/m[ty]{1}-(lg-)?(\d+)/]
|
7
|
+
bottom_class = node['class'][/m[by]{1}-(lg-)?(\d+)/]
|
8
|
+
node['class'] = node['class'].gsub(/(m[tby]{1}-(lg-)?\d+)/, '')
|
9
|
+
html = ''
|
10
|
+
if top_class
|
11
|
+
html += template('div', classes: "s-#{top_class.gsub(/m[ty]{1}-/, '')}", contents: nil)
|
12
|
+
end
|
13
|
+
html += node.to_html
|
14
|
+
if bottom_class
|
15
|
+
html += template('div', classes: "s-#{bottom_class.gsub(/m[by]{1}-/, '')}", contents: nil)
|
16
|
+
end
|
17
|
+
node.replace(html)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module BootstrapEmail
|
2
|
+
module Component
|
3
|
+
class Padding < Base
|
4
|
+
def build
|
5
|
+
each_node('*[class*=p-], *[class*=pt-], *[class*=pr-], *[class*=pb-], *[class*=pl-], *[class*=px-], *[class*=py-]') do |node|
|
6
|
+
next if ['table', 'td', 'a'].include?(node.name)
|
7
|
+
|
8
|
+
padding_regex = /(p[trblxy]?-\d+)/
|
9
|
+
classes = node['class'].scan(padding_regex).join(' ')
|
10
|
+
node['class'] = node['class'].gsub(padding_regex, '')
|
11
|
+
node.replace(template('table', classes: classes, contents: node.to_html))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module BootstrapEmail
|
2
|
+
module Component
|
3
|
+
class Paragraph < Base
|
4
|
+
def build
|
5
|
+
each_node('p') do |node|
|
6
|
+
next if margin?(node) || space_y?(node)
|
7
|
+
|
8
|
+
node['class'] ||= ''
|
9
|
+
node['class'] += 'mb-4'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def margin?(node)
|
16
|
+
node['class'].to_s.match?(/m[tby]{1}-(lg-)?\d+/)
|
17
|
+
end
|
18
|
+
|
19
|
+
def space_y?(node)
|
20
|
+
node.parent['class'].to_s.match?(/space-y-(lg-)?\d+/)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module BootstrapEmail
|
2
|
+
module Component
|
3
|
+
class Spacing < Base
|
4
|
+
def build
|
5
|
+
each_node('*[class*=space-y-]') do |node|
|
6
|
+
spacer = node['class'].scan(/space-y-((lg-)?\d+)/)[0][0]
|
7
|
+
# get all direct children except the first
|
8
|
+
node.xpath('./*[position()>1] | ./tbody/tr/td/*[position()>1]').each do |child|
|
9
|
+
html = ''
|
10
|
+
html += template('div', classes: "s-#{spacer}", contents: nil)
|
11
|
+
html += child.to_html
|
12
|
+
child.replace(html)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Premailer::Adapter.use = :nokogiri_fast
|
@@ -1,14 +1,10 @@
|
|
1
1
|
ActiveSupport.on_load(:action_mailer, {yield: true}) do |action_mailer|
|
2
2
|
action_mailer.class_eval do # To support Rails less than 6
|
3
3
|
# sit in the middle and compile the html
|
4
|
-
def bootstrap_mail(*args)
|
5
|
-
bootstrap = BootstrapEmail::Compiler.new(mail(*args)
|
6
|
-
bootstrap.perform_full_compile
|
7
|
-
end
|
8
|
-
|
9
|
-
def make_bootstrap_mail(*args, &block)
|
10
|
-
bootstrap = BootstrapEmail::Compiler.new(mail(*args, &block))
|
4
|
+
def bootstrap_mail(*args, &block)
|
5
|
+
bootstrap = BootstrapEmail::Compiler.new(mail(*args, &block), type: :rails)
|
11
6
|
bootstrap.perform_full_compile
|
12
7
|
end
|
8
|
+
alias make_bootstrap_mail bootstrap_mail
|
13
9
|
end
|
14
10
|
end
|
File without changes
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module BootstrapEmail
|
2
|
+
class SassCache
|
3
|
+
CACHE_DIR = File.expand_path('../../.sass-cache', __dir__)
|
4
|
+
SASS_DIR = File.expand_path('../../core', __dir__)
|
5
|
+
|
6
|
+
def self.compile(name, config_path: nil, style: :compressed)
|
7
|
+
path = "#{SASS_DIR}/#{name}"
|
8
|
+
config_file = nil
|
9
|
+
|
10
|
+
lookup_locations = ["#{name}.config.scss", "app/assets/stylesheets/#{name}.config.scss"]
|
11
|
+
locations = lookup_locations.select { |location| File.exist?(File.expand_path(location, Dir.pwd)) }
|
12
|
+
|
13
|
+
if config_path && File.exist?(config_path)
|
14
|
+
# check if custom config was passed in
|
15
|
+
config_file = File.read(config_path)
|
16
|
+
elsif locations.any?
|
17
|
+
config_file = File.read(File.expand_path(locations.first, Dir.pwd))
|
18
|
+
end
|
19
|
+
|
20
|
+
check = checksum(config_file&.gsub("//= @import #{name};", "@import '#{path}';"))
|
21
|
+
cache_path = "#{CACHE_DIR}/#{check}/#{name}.css"
|
22
|
+
if cached?(cache_path)
|
23
|
+
File.read(cache_path)
|
24
|
+
else
|
25
|
+
file = config_file.nil? ? File.read("#{path}.scss") : config_file
|
26
|
+
SassC::Engine.new(file, style: style).render.tap do |css|
|
27
|
+
Dir.mkdir(CACHE_DIR) unless File.directory?(CACHE_DIR)
|
28
|
+
Dir.mkdir("#{CACHE_DIR}/#{check}") unless File.directory?("#{CACHE_DIR}/#{check}")
|
29
|
+
File.write(cache_path, css)
|
30
|
+
puts "New css file cached for #{name}"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.checksum(config_file)
|
36
|
+
checksums = config_file.nil? ? [] : [Digest::SHA1.hexdigest(config_file)]
|
37
|
+
Dir.glob('../../core/**/*.scss', base: __dir__).each do |path|
|
38
|
+
checksums << Digest::SHA1.file(File.expand_path(path, __dir__)).hexdigest
|
39
|
+
end
|
40
|
+
Digest::SHA1.hexdigest(checksums.join)
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.cached?(cache_path)
|
44
|
+
File.file?(cache_path)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
require 'erb'
|
3
|
+
require 'ostruct'
|
4
|
+
require 'premailer'
|
5
|
+
require 'sassc'
|
6
|
+
require 'digest/sha1'
|
7
|
+
require 'css_parser'
|
8
|
+
|
9
|
+
begin
|
10
|
+
require 'rails'
|
11
|
+
rescue LoadError; end
|
12
|
+
|
13
|
+
if defined?(Rails)
|
14
|
+
require 'action_mailer'
|
15
|
+
end
|
16
|
+
|
17
|
+
require_relative 'bootstrap-email/initialize'
|
18
|
+
require_relative 'bootstrap-email/compiler'
|
19
|
+
require_relative 'bootstrap-email/sass_cache'
|
20
|
+
require_relative 'bootstrap-email/version'
|
21
|
+
Dir[File.join(__dir__, 'bootstrap-email/components', '*.rb')].each { |file| require_relative file }
|
22
|
+
|
23
|
+
if defined?(Rails)
|
24
|
+
require_relative 'bootstrap-email/rails/action_mailer'
|
25
|
+
require_relative 'bootstrap-email/rails/engine'
|
26
|
+
end
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bootstrap-email
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0.alpha1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stuart Yamartino
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-01-
|
11
|
+
date: 2021-01-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: actionmailer
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '3'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '3'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: nokogiri
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,78 +25,103 @@ dependencies:
|
|
39
25
|
- !ruby/object:Gem::Version
|
40
26
|
version: '1.6'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
|
-
name: premailer
|
28
|
+
name: premailer
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
31
|
- - "~>"
|
46
32
|
- !ruby/object:Gem::Version
|
47
|
-
version: '1.
|
33
|
+
version: '1.14'
|
48
34
|
type: :runtime
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
38
|
- - "~>"
|
53
39
|
- !ruby/object:Gem::Version
|
54
|
-
version: '1.
|
40
|
+
version: '1.14'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
42
|
+
name: sassc
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
|
-
- - "
|
45
|
+
- - "~>"
|
60
46
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
47
|
+
version: '2.4'
|
62
48
|
type: :runtime
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
|
-
- - "
|
52
|
+
- - "~>"
|
67
53
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
54
|
+
version: '2.4'
|
69
55
|
description:
|
70
56
|
email: stu@stuyam.com
|
71
|
-
executables:
|
57
|
+
executables:
|
58
|
+
- bootstrap-email
|
72
59
|
extensions: []
|
73
60
|
extra_rdoc_files: []
|
74
61
|
files:
|
75
62
|
- VERSION
|
63
|
+
- bin/bootstrap-email
|
76
64
|
- core/bootstrap-email.scss
|
77
|
-
- core/head.scss
|
78
|
-
- core/
|
79
|
-
- core/
|
80
|
-
- core/
|
81
|
-
- core/
|
82
|
-
- core/
|
83
|
-
- core/
|
84
|
-
- core/
|
85
|
-
- core/
|
86
|
-
- core/
|
87
|
-
- core/
|
88
|
-
- core/
|
89
|
-
- core/
|
90
|
-
- core/
|
91
|
-
- core/
|
92
|
-
- core/
|
93
|
-
- core/
|
94
|
-
- core/
|
95
|
-
- core/
|
96
|
-
- core/
|
97
|
-
- core/
|
98
|
-
- core/
|
99
|
-
- core/
|
65
|
+
- core/bootstrap-head.scss
|
66
|
+
- core/layout.html.erb
|
67
|
+
- core/scss/_colors.scss
|
68
|
+
- core/scss/_functions.scss
|
69
|
+
- core/scss/_helper_groups.scss
|
70
|
+
- core/scss/_reboot_email.scss
|
71
|
+
- core/scss/_selectors_for_utils.scss
|
72
|
+
- core/scss/_utilities.scss
|
73
|
+
- core/scss/_variables.scss
|
74
|
+
- core/scss/components/_alert.scss
|
75
|
+
- core/scss/components/_badge.scss
|
76
|
+
- core/scss/components/_button.scss
|
77
|
+
- core/scss/components/_card.scss
|
78
|
+
- core/scss/components/_container.scss
|
79
|
+
- core/scss/components/_grid.scss
|
80
|
+
- core/scss/components/_hr.scss
|
81
|
+
- core/scss/components/_image.scss
|
82
|
+
- core/scss/components/_preview.scss
|
83
|
+
- core/scss/components/_table.scss
|
84
|
+
- core/scss/utilities/_background.scss
|
85
|
+
- core/scss/utilities/_border-radius.scss
|
86
|
+
- core/scss/utilities/_border.scss
|
87
|
+
- core/scss/utilities/_color.scss
|
88
|
+
- core/scss/utilities/_display.scss
|
89
|
+
- core/scss/utilities/_sizing.scss
|
90
|
+
- core/scss/utilities/_spacing.scss
|
91
|
+
- core/scss/utilities/_text-decoration.scss
|
92
|
+
- core/scss/utilities/_typography.scss
|
100
93
|
- core/templates/body.html.erb
|
101
94
|
- core/templates/col.html.erb
|
102
95
|
- core/templates/container.html.erb
|
103
96
|
- core/templates/div.html.erb
|
104
|
-
- core/templates/hr.html.erb
|
105
97
|
- core/templates/row.html.erb
|
106
98
|
- core/templates/table-left.html.erb
|
107
99
|
- core/templates/table.html.erb
|
108
|
-
- lib/
|
109
|
-
- lib/bootstrap-email.rb
|
110
|
-
- lib/bootstrap-email/
|
111
|
-
- lib/bootstrap-email/
|
112
|
-
- lib/bootstrap-email/
|
100
|
+
- lib/bootstrap-email/bootstrap_email_cli.rb
|
101
|
+
- lib/bootstrap-email/compiler.rb
|
102
|
+
- lib/bootstrap-email/components/alert.rb
|
103
|
+
- lib/bootstrap-email/components/align.rb
|
104
|
+
- lib/bootstrap-email/components/badge.rb
|
105
|
+
- lib/bootstrap-email/components/base.rb
|
106
|
+
- lib/bootstrap-email/components/body.rb
|
107
|
+
- lib/bootstrap-email/components/button.rb
|
108
|
+
- lib/bootstrap-email/components/card.rb
|
109
|
+
- lib/bootstrap-email/components/color.rb
|
110
|
+
- lib/bootstrap-email/components/container.rb
|
111
|
+
- lib/bootstrap-email/components/grid.rb
|
112
|
+
- lib/bootstrap-email/components/hr.rb
|
113
|
+
- lib/bootstrap-email/components/margin.rb
|
114
|
+
- lib/bootstrap-email/components/padding.rb
|
115
|
+
- lib/bootstrap-email/components/paragraph.rb
|
116
|
+
- lib/bootstrap-email/components/spacer.rb
|
117
|
+
- lib/bootstrap-email/components/spacing.rb
|
118
|
+
- lib/bootstrap-email/components/table.rb
|
119
|
+
- lib/bootstrap-email/initialize.rb
|
120
|
+
- lib/bootstrap-email/rails/action_mailer.rb
|
121
|
+
- lib/bootstrap-email/rails/engine.rb
|
122
|
+
- lib/bootstrap-email/sass_cache.rb
|
113
123
|
- lib/bootstrap-email/version.rb
|
124
|
+
- lib/bootstrap_email.rb
|
114
125
|
homepage: https://bootstrapemail.com
|
115
126
|
licenses:
|
116
127
|
- MIT
|
@@ -126,13 +137,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
126
137
|
version: '2.0'
|
127
138
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
128
139
|
requirements:
|
129
|
-
- - "
|
140
|
+
- - ">"
|
130
141
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
142
|
+
version: 1.3.1
|
132
143
|
requirements: []
|
133
144
|
rubygems_version: 3.0.3
|
134
145
|
signing_key:
|
135
146
|
specification_version: 4
|
136
|
-
summary: Bootstrap
|
137
|
-
emails with the Bootstrap syntax you know and love.
|
147
|
+
summary: 'Bootstrap 5 stylesheet, compiler, and inliner for responsive and consistent
|
148
|
+
emails with the Bootstrap syntax you know and love. Support: command line, ruby,
|
149
|
+
rails'
|
138
150
|
test_files: []
|