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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 2e98876ae79a7e20d9a4ce73747f40099d4f19a1
4
- data.tar.gz: f9f95d0fbc0b3304db6cd772069729a5801c388d
2
+ SHA256:
3
+ metadata.gz: 6d3e8552d269ddef67b722b192f58c2afe242f6a824a07e4e7fd4e5bbc3f57f2
4
+ data.tar.gz: 6c6b611237ffe68b655654c75c21c7a8f17bc73ca9502e06891f26ab5b1bb583
5
5
  SHA512:
6
- metadata.gz: 88f3f5d7ba2f1e4ca8e0afdb33b2514352b80914ed98629bab52d9b92450dfa0b133994d08f0f3f3b42f33d10f0e90253432592ebcb0a931bbb7b1f54465dcfe
7
- data.tar.gz: 3d61952d50bfc6ea280fa9f36da8da0a8e7df1af5967c9e742334a26bc916bbe0db463efb69e70f62b77e6770b18cc52b821b2d36d0f9d37c56bd36b803af037
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
- # links
34
- txt.gsub!(/<a\s[^\n]*?href=["'](mailto:)?([^"']*)["'][^>]*>(.*?)<\/a>/im) do |s|
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
@@ -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, default false
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.class.send(:include, @adapter_class)
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.to_html.strip.split("\n")[0..2].join(' ')
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
@@ -1,4 +1,4 @@
1
1
  class Premailer
2
2
  # Premailer version.
3
- VERSION = '1.11.1'.freeze
3
+ VERSION = '1.12.0'.freeze
4
4
  end
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.11.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: 2017-11-14 00:00:00.000000000 Z
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: '1.7'
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: '1.7'
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.1.0
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
- rubyforge_project:
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.