premailer 1.11.1 → 1.12.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 +5 -5
- data/README.md +2 -1
- data/lib/premailer/adapter/nokogiri.rb +1 -1
- data/lib/premailer/adapter/nokogiri_fast.rb +1 -1
- data/lib/premailer/adapter/nokogumbo.rb +3 -3
- data/lib/premailer/html_to_plain_text.rb +21 -2
- data/lib/premailer/premailer.rb +7 -5
- data/lib/premailer/version.rb +1 -1
- metadata +20 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 6d3e8552d269ddef67b722b192f58c2afe242f6a824a07e4e7fd4e5bbc3f57f2
|
4
|
+
data.tar.gz: 6c6b611237ffe68b655654c75c21c7a8f17bc73ca9502e06891f26ab5b1bb583
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1c963172a6abcb9e71824c07e54a80ea89c58fda395349d68ea0567a5fa06cf160663bd1e8a169a81532f5ad3b7c97d8ed0ad2c09a4182c3d281982a878348da
|
7
|
+
data.tar.gz: 758dae24fbd064a1ee44fe4ab6f0537c191826474dc045a8af5354f28a17e4d20e8a56e93d2ea3ebab83ab4c9c9b2376aa0b53467ff50338773e78e815b8ccbe
|
data/README.md
CHANGED
@@ -12,7 +12,7 @@ script is my solution.
|
|
12
12
|
- Checks links in `href`, `src` and CSS `url('')`
|
13
13
|
* CSS properties are checked against e-mail client capabilities
|
14
14
|
- Based on the Email Standards Project's guides
|
15
|
-
* A plain text version is created (optional)
|
15
|
+
* A [plain text version](https://premailer.github.io/premailer/HtmlToPlainText.html) is created (optional)
|
16
16
|
|
17
17
|
## Installation
|
18
18
|
|
@@ -80,6 +80,7 @@ Premailer looks for a few CSS attributes that make working with tables a bit eas
|
|
80
80
|
| -premailer-height | Available on `table`, `tr`, `th` and `td` elements |
|
81
81
|
| -premailer-cellpadding | Available on `table` elements |
|
82
82
|
| -premailer-cellspacing | Available on `table` elements |
|
83
|
+
| -premailer-align | Available on `table` elements |
|
83
84
|
| data-premailer="ignore" | Available on `link` and `style` elements. Premailer will ignore these elements entirely. |
|
84
85
|
|
85
86
|
Each of these CSS declarations will be copied to appropriate element's attribute.
|
@@ -94,7 +94,7 @@ class Premailer
|
|
94
94
|
el['style'] = merged.declarations_to_s
|
95
95
|
end
|
96
96
|
|
97
|
-
doc = write_unmergable_css_rules(doc, @unmergable_rules)
|
97
|
+
doc = write_unmergable_css_rules(doc, @unmergable_rules) unless @options[:drop_unmergeable_css_rules]
|
98
98
|
|
99
99
|
if @options[:remove_classes] or @options[:remove_comments]
|
100
100
|
doc.traverse do |el|
|
@@ -96,7 +96,7 @@ class Premailer
|
|
96
96
|
el['style'] = merged.declarations_to_s
|
97
97
|
end
|
98
98
|
|
99
|
-
doc = write_unmergable_css_rules(doc, @unmergable_rules)
|
99
|
+
doc = write_unmergable_css_rules(doc, @unmergable_rules) unless @options[:drop_unmergeable_css_rules]
|
100
100
|
|
101
101
|
if @options[:remove_classes] or @options[:remove_comments]
|
102
102
|
doc.traverse do |el|
|
@@ -94,7 +94,7 @@ class Premailer
|
|
94
94
|
el['style'] = merged.declarations_to_s
|
95
95
|
end
|
96
96
|
|
97
|
-
doc = write_unmergable_css_rules(doc, @unmergable_rules)
|
97
|
+
doc = write_unmergable_css_rules(doc, @unmergable_rules) unless @options[:drop_unmergeable_css_rules]
|
98
98
|
|
99
99
|
if @options[:remove_classes] or @options[:remove_comments]
|
100
100
|
doc.traverse do |el|
|
@@ -226,9 +226,9 @@ class Premailer
|
|
226
226
|
thing = thing.force_encoding(@options[:input_encoding]).encode!
|
227
227
|
end
|
228
228
|
doc = if @options[:html_fragment]
|
229
|
-
::Nokogiri::HTML5(thing)
|
230
|
-
else
|
231
229
|
::Nokogiri::HTML5.fragment(thing)
|
230
|
+
else
|
231
|
+
::Nokogiri::HTML5(thing)
|
232
232
|
end
|
233
233
|
|
234
234
|
# Fix for removing any CDATA tags from both style and script tags inserted per
|
@@ -5,6 +5,11 @@ require 'htmlentities'
|
|
5
5
|
module HtmlToPlainText
|
6
6
|
|
7
7
|
# Returns the text in UTF-8 format with all HTML tags removed
|
8
|
+
#
|
9
|
+
# HTML content can be omitted from the output by surrounding it in the following comments:
|
10
|
+
#
|
11
|
+
# <!-- start text/html -->
|
12
|
+
# <!-- end text/html -->
|
8
13
|
#
|
9
14
|
# TODO: add support for DL, OL
|
10
15
|
def convert_to_text(html, line_length = 65, from_charset = 'UTF-8')
|
@@ -30,8 +35,22 @@ module HtmlToPlainText
|
|
30
35
|
# <img alt=''>
|
31
36
|
txt.gsub!(/<img.+?alt=\'([^\']*)\'[^>]*\>/i, '\1')
|
32
37
|
|
33
|
-
#
|
34
|
-
txt.gsub!(/<
|
38
|
+
# remove script tags and content
|
39
|
+
txt.gsub!(/<script.*\/script>/m, '')
|
40
|
+
|
41
|
+
# links with double quotes
|
42
|
+
txt.gsub!(/<a\s[^\n]*?href=["'](mailto:)?([^"]*)["][^>]*>(.*?)<\/a>/im) do |s|
|
43
|
+
if $3.empty?
|
44
|
+
''
|
45
|
+
elsif $3.strip.downcase == $2.strip.downcase
|
46
|
+
$3.strip
|
47
|
+
else
|
48
|
+
$3.strip + ' ( ' + $2.strip + ' )'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# links with single quotes
|
53
|
+
txt.gsub!(/<a\s[^\n]*?href=["'](mailto:)?([^']*)['][^>]*>(.*?)<\/a>/im) do |s|
|
35
54
|
if $3.empty?
|
36
55
|
''
|
37
56
|
elsif $3.strip.downcase == $2.strip.downcase
|
data/lib/premailer/premailer.rb
CHANGED
@@ -151,14 +151,14 @@ class Premailer
|
|
151
151
|
#
|
152
152
|
# @param [Hash] options the options to handle html with.
|
153
153
|
# @option options [Fixnum] :line_length Line length used by to_plain_text. Default is 65.
|
154
|
-
# @option options [Fixnum] :warn_level What level of CSS compatibility warnings to show (see {Premailer::Warnings}).
|
154
|
+
# @option options [Fixnum] :warn_level What level of CSS compatibility warnings to show (see {Premailer::Warnings}, default is Warnings::SAFE).
|
155
155
|
# @option options [String] :link_query_string A string to append to every <tt>a href=""</tt> link. Do not include the initial <tt>?</tt>.
|
156
156
|
# @option options [String] :base_url Used to calculate absolute URLs for local files.
|
157
157
|
# @option options [Array(String)] :css Manually specify CSS stylesheets.
|
158
|
-
# @option options [Boolean] :css_to_attributes Copy related CSS attributes into HTML attributes (e.g. background-color to bgcolor)
|
158
|
+
# @option options [Boolean] :css_to_attributes Copy related CSS attributes into HTML attributes (e.g. background-color to bgcolor). Default is true.
|
159
159
|
# @option options [Boolean] :preserve_style_attribute Preserve original style attribute
|
160
160
|
# @option options [String] :css_string Pass CSS as a string
|
161
|
-
# @option options [Boolean] :rgb_to_hex_attributes Convert RBG to Hex colors
|
161
|
+
# @option options [Boolean] :rgb_to_hex_attributes Convert RBG to Hex colors. Default is false.
|
162
162
|
# @option options [Boolean] :remove_ids Remove ID attributes whenever possible and convert IDs used as anchors to hashed to avoid collisions in webmail programs. Default is false.
|
163
163
|
# @option options [Boolean] :remove_classes Remove class attributes. Default is false.
|
164
164
|
# @option options [Boolean] :remove_comments Remove html comments. Default is false.
|
@@ -178,6 +178,7 @@ class Premailer
|
|
178
178
|
# @option options [String] :output_encoding Output encoding option for Nokogiri adapter. Should be set to "US-ASCII" to output HTML entities instead of Unicode characters.
|
179
179
|
# @option options [Boolean] :create_shorthands Combine several properties into a shorthand one, e.g. font: style weight size. Default is true.
|
180
180
|
# @option options [Boolean] :html_fragment Handle HTML fragment without any HTML content wrappers. Default is false.
|
181
|
+
# @option options [Boolean] :drop_unmergeable_css_rules Do not include unmergeable css rules in a <tt><style><tt> tag. Default is false.
|
181
182
|
def initialize(html, options = {})
|
182
183
|
@options = {:warn_level => Warnings::SAFE,
|
183
184
|
:line_length => 65,
|
@@ -209,6 +210,7 @@ class Premailer
|
|
209
210
|
:create_shorthands => true,
|
210
211
|
:html_fragment => false,
|
211
212
|
:adapter => Adapter.use,
|
213
|
+
:drop_unmergeable_css_rules => false
|
212
214
|
}.merge(options)
|
213
215
|
|
214
216
|
@html_file = html
|
@@ -236,7 +238,7 @@ class Premailer
|
|
236
238
|
|
237
239
|
@adapter_class = Adapter.find @options[:adapter]
|
238
240
|
|
239
|
-
self.
|
241
|
+
self.extend(@adapter_class)
|
240
242
|
|
241
243
|
@doc = load_html(@html_file)
|
242
244
|
|
@@ -402,7 +404,7 @@ public
|
|
402
404
|
|
403
405
|
# Check for an XHTML doctype
|
404
406
|
def is_xhtml?
|
405
|
-
intro = @doc.
|
407
|
+
intro = @doc.to_xhtml.strip.split("\n")[0..2].join(' ')
|
406
408
|
is_xhtml = !!(intro =~ /w3c\/\/[\s]*dtd[\s]+xhtml/i)
|
407
409
|
$stderr.puts "Is XHTML? #{is_xhtml.inspect}\nChecked:\n#{intro}" if @options[:debug]
|
408
410
|
is_xhtml
|
data/lib/premailer/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: premailer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Dunae
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: css_parser
|
@@ -92,28 +92,14 @@ dependencies:
|
|
92
92
|
requirements:
|
93
93
|
- - "~>"
|
94
94
|
- !ruby/object:Gem::Version
|
95
|
-
version:
|
95
|
+
version: 1.8.2
|
96
96
|
type: :development
|
97
97
|
prerelease: false
|
98
98
|
version_requirements: !ruby/object:Gem::Requirement
|
99
99
|
requirements:
|
100
100
|
- - "~>"
|
101
101
|
- !ruby/object:Gem::Version
|
102
|
-
version:
|
103
|
-
- !ruby/object:Gem::Dependency
|
104
|
-
name: yard
|
105
|
-
requirement: !ruby/object:Gem::Requirement
|
106
|
-
requirements:
|
107
|
-
- - ">="
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '0'
|
110
|
-
type: :development
|
111
|
-
prerelease: false
|
112
|
-
version_requirements: !ruby/object:Gem::Requirement
|
113
|
-
requirements:
|
114
|
-
- - ">="
|
115
|
-
- !ruby/object:Gem::Version
|
116
|
-
version: '0'
|
102
|
+
version: 1.8.2
|
117
103
|
- !ruby/object:Gem::Dependency
|
118
104
|
name: redcarpet
|
119
105
|
requirement: !ruby/object:Gem::Requirement
|
@@ -184,6 +170,20 @@ dependencies:
|
|
184
170
|
- - ">="
|
185
171
|
- !ruby/object:Gem::Version
|
186
172
|
version: '0'
|
173
|
+
- !ruby/object:Gem::Dependency
|
174
|
+
name: bump
|
175
|
+
requirement: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - ">="
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: '0'
|
180
|
+
type: :development
|
181
|
+
prerelease: false
|
182
|
+
version_requirements: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - ">="
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '0'
|
187
187
|
description: Improve the rendering of HTML emails by making CSS inline, converting
|
188
188
|
links and warning about unsupported code.
|
189
189
|
email: akzhan.abdulin@gmail.com
|
@@ -218,15 +218,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
218
218
|
requirements:
|
219
219
|
- - ">="
|
220
220
|
- !ruby/object:Gem::Version
|
221
|
-
version: 2.
|
221
|
+
version: 2.3.0
|
222
222
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
223
223
|
requirements:
|
224
224
|
- - ">="
|
225
225
|
- !ruby/object:Gem::Version
|
226
226
|
version: '0'
|
227
227
|
requirements: []
|
228
|
-
|
229
|
-
rubygems_version: 2.6.12
|
228
|
+
rubygems_version: 3.1.3
|
230
229
|
signing_key:
|
231
230
|
specification_version: 4
|
232
231
|
summary: Preflight for HTML e-mail.
|