govspeak 6.7.8 → 6.8.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 709c3fbb62a1b1e54cae82fd1539785acaaf3586c0a094b402880bf4608df065
4
- data.tar.gz: 1300878c1001b40ade71a2e5446ea1f62ea8cd1e5d764e97ef9450da6124d74a
3
+ metadata.gz: a8509b4c394ef305fd80454c6c6bdb13561332bcdedc5d0292c271387a34043c
4
+ data.tar.gz: a73d8175cbea307d6b8028931bd15e9b99b97f7ae7708247cc833873622a8574
5
5
  SHA512:
6
- metadata.gz: dcf825ebf9e77452c200104606486d9c0ad26c5f00855ce69c3c127d5e6cd7357d804fb3df77b3362fe797e814ed2cffe3823c2a835d1784e89b25c459abfd12
7
- data.tar.gz: 607b7b974bf443801e83ec7afaab1449e00a50d63134dc90b912f62a5a5c0635ea2e54afece268dbe6c4471cc232c4f12033bef6f8961aee1816a4cd6f1fcc25
6
+ metadata.gz: ae280e29132e39a4d85f6f095bfd45cfc0da7505b7148e0b48756c4c9fccd29af2a550257a6f972837b8f1c1495f817ee61653ee069db868e66fc5a149386553
7
+ data.tar.gz: d3e0c5858ebe636a50d44bb360c68bc2bee4cad547529872c51be3f42a5630d5444ccc29e4ef5437d096ecdc43386f18c27363f9bcfbeff801a86fb3f6bbc486
data/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## 6.8.2
2
+
3
+ * Fix footnote numbering [#239](https://github.com/alphagov/govspeak/pull/239)
4
+
5
+ ## 6.8.1
6
+
7
+ * Fix a bug which resulted in validation errors on 'Start Button' elements [#237](https://github.com/alphagov/govspeak/pull/237)
8
+
9
+ ## 6.8.0
10
+
11
+ * Drop support for Ruby 2.6 which reaches End of Life (EOL) on 31/03/2022
12
+ * Add support for Rails 7 by loosening the version constraint on `activeview` gem
13
+ * Fix deprecation notices caused by the bump in Ruby version
14
+
1
15
  ## 6.7.8
2
16
 
3
17
  * Fixes bug which reverts acronyms from being converted into abbr tags [#229](https://github.com/alphagov/govspeak/pull/229)
@@ -46,7 +46,17 @@ class Govspeak::HtmlSanitizer
46
46
  transformers << ImageSourceWhitelister.new(@allowed_image_hosts)
47
47
  end
48
48
 
49
- Sanitize.clean(@dirty_html, Sanitize::Config.merge(sanitize_config(allowed_elements: allowed_elements), transformers: transformers))
49
+ # It would be cleaner to move this `transformers` key into the `sanitize_config` method rather
50
+ # than having to use Sanitize::Config.merge() twice in succession. However, `sanitize_config`
51
+ # is a public method and it looks like other projects depend on it behaving the way it
52
+ # currently does – i.e. to return Sanitize config without any transformers.
53
+ # e.g. https://github.com/alphagov/hmrc-manuals-api/blob/4a83f78d0bb839520155623fd9b63b3b12a3b13a/app/validators/no_dangerous_html_in_text_fields_validator.rb#L44
54
+ config_with_transformers = Sanitize::Config.merge(
55
+ sanitize_config(allowed_elements: allowed_elements),
56
+ transformers: transformers,
57
+ )
58
+
59
+ Sanitize.clean(@dirty_html, config_with_transformers)
50
60
  end
51
61
 
52
62
  def sanitize_config(allowed_elements: [])
@@ -1,9 +1,9 @@
1
1
  class Govspeak::HtmlValidator
2
2
  attr_reader :govspeak_string
3
3
 
4
- def initialize(govspeak_string, sanitization_options = {})
4
+ def initialize(govspeak_string, options = {})
5
5
  @govspeak_string = govspeak_string.dup.force_encoding(Encoding::UTF_8)
6
- @sanitization_options = sanitization_options
6
+ @allowed_image_hosts = options[:allowed_image_hosts]
7
7
  end
8
8
 
9
9
  def invalid?
@@ -11,17 +11,23 @@ class Govspeak::HtmlValidator
11
11
  end
12
12
 
13
13
  def valid?
14
- dirty_html = govspeak_to_html
15
- clean_html = Govspeak::HtmlSanitizer.new(dirty_html, @sanitization_options).sanitize
14
+ dirty_html = govspeak_to_html(sanitize: false)
15
+ clean_html = govspeak_to_html(sanitize: true)
16
16
  normalise_html(dirty_html) == normalise_html(clean_html)
17
17
  end
18
18
 
19
+ private
20
+
19
21
  # Make whitespace in html tags consistent
20
22
  def normalise_html(html)
21
23
  Nokogiri::HTML5.fragment(html).to_s
22
24
  end
23
25
 
24
- def govspeak_to_html
25
- Govspeak::Document.new(govspeak_string, sanitize: false).to_html
26
+ def govspeak_to_html(sanitize:)
27
+ Govspeak::Document.new(
28
+ govspeak_string,
29
+ sanitize: sanitize,
30
+ allowed_image_hosts: @allowed_image_hosts,
31
+ ).to_html
26
32
  end
27
33
  end
@@ -17,7 +17,7 @@ module Govspeak
17
17
  def t(*args)
18
18
  options = args.last.is_a?(Hash) ? args.last.dup : {}
19
19
  key = args.shift
20
- I18n.t!(key, options.merge(locale: locale))
20
+ I18n.t!(key, **options.merge(locale: locale))
21
21
  end
22
22
 
23
23
  def format_with_html_line_breaks(string)
@@ -1,3 +1,3 @@
1
1
  module Govspeak
2
- VERSION = "6.7.8".freeze
2
+ VERSION = "6.8.2".freeze
3
3
  end
data/lib/govspeak.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require "active_support"
1
2
  require "active_support/core_ext/hash"
2
3
  require "active_support/core_ext/array"
3
4
  require "erb"
@@ -53,6 +54,7 @@ module Govspeak
53
54
 
54
55
  @images = options.delete(:images) || []
55
56
  @allowed_elements = options.delete(:allowed_elements) || []
57
+ @allowed_image_hosts = options.delete(:allowed_image_hosts) || []
56
58
  @attachments = Array.wrap(options.delete(:attachments))
57
59
  @links = Array.wrap(options.delete(:links))
58
60
  @contacts = Array.wrap(options.delete(:contacts))
@@ -68,7 +70,8 @@ module Govspeak
68
70
  def to_html
69
71
  @to_html ||= begin
70
72
  html = if @options[:sanitize]
71
- HtmlSanitizer.new(kramdown_doc.to_html).sanitize(allowed_elements: @allowed_elements)
73
+ HtmlSanitizer.new(kramdown_doc.to_html, allowed_image_hosts: @allowed_image_hosts)
74
+ .sanitize(allowed_elements: @allowed_elements)
72
75
  else
73
76
  kramdown_doc.to_html
74
77
  end
@@ -135,7 +138,7 @@ module Govspeak
135
138
  def footnote_definitions(source)
136
139
  is_legislative_list = source.scan(/\$LegislativeList.*?\[\^\d\]*.*?\$EndLegislativeList/m).size.positive?
137
140
  is_cta = source.scan(/\$CTA.*?\[\^\d\]*.*?\$CTA/m).size.positive?
138
- footnotes = source.scan(/\[\^(\d+)\]:(.*)/)
141
+ footnotes = source.scan(/^\s*\[\^(\d+)\]:(.*)/)
139
142
  @acronyms = source.scan(/(?<=\*)\[(.*)\]:(.*)/)
140
143
  if (is_legislative_list || is_cta) && footnotes.size.positive?
141
144
  list_items = footnotes.map do |footnote|
@@ -1048,6 +1048,48 @@ Teston
1048
1048
  )
1049
1049
  end
1050
1050
 
1051
+ test_given_govspeak "
1052
+ $LegislativeList
1053
+ 1. some text[^1]:
1054
+ $EndLegislativeList
1055
+ [^1]: footnote text
1056
+ " do
1057
+ assert_html_output %(
1058
+ <p>1. some text<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">[footnote 1]</a></sup>:</p>
1059
+
1060
+ <div class="footnotes" role="doc-endnotes">
1061
+ <ol>
1062
+ <li id="fn:1" role="doc-endnote">
1063
+ <p>
1064
+ footnote text<a href="#fnref:1" class="reversefootnote" role="doc-backlink" aria-label="go to where this is referenced">↩</a>
1065
+ </p>
1066
+ </li>
1067
+ </ol>
1068
+ </div>
1069
+ )
1070
+ end
1071
+
1072
+ test_given_govspeak "
1073
+ $LegislativeList
1074
+ 1. some text[^1]: extra
1075
+ $EndLegislativeList
1076
+ [^1]: footnote text
1077
+ " do
1078
+ assert_html_output %(
1079
+ <p>1. some text<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">[footnote 1]</a></sup>: extra</p>
1080
+
1081
+ <div class="footnotes" role="doc-endnotes">
1082
+ <ol>
1083
+ <li id="fn:1" role="doc-endnote">
1084
+ <p>
1085
+ footnote text<a href="#fnref:1" class="reversefootnote" role="doc-backlink" aria-label="go to where this is referenced">↩</a>
1086
+ </p>
1087
+ </li>
1088
+ </ol>
1089
+ </div>
1090
+ )
1091
+ end
1092
+
1051
1093
  # FIXME: this code is buggy and replaces abbreviations in HTML tags - removing the functionality for now
1052
1094
  # test_given_govspeak "
1053
1095
  # $LegislativeList
data/test/test_helper.rb CHANGED
@@ -1,8 +1,6 @@
1
1
  require "simplecov"
2
- require "simplecov-rcov"
3
2
 
4
3
  SimpleCov.start
5
- SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter
6
4
 
7
5
  $LOAD_PATH.unshift(File.expand_path("../lib")) unless $LOAD_PATH.include?(File.expand_path("../lib"))
8
6
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: govspeak
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.7.8
4
+ version: 6.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - GOV.UK Dev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-05 00:00:00.000000000 Z
11
+ date: 2022-03-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionview
@@ -16,20 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '5.0'
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: '7'
19
+ version: '6'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - ">="
28
25
  - !ruby/object:Gem::Version
29
- version: '5.0'
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: '7'
26
+ version: '6'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: addressable
35
29
  requirement: !ruby/object:Gem::Requirement
@@ -194,16 +188,16 @@ dependencies:
194
188
  name: rubocop-govuk
195
189
  requirement: !ruby/object:Gem::Requirement
196
190
  requirements:
197
- - - "~>"
191
+ - - '='
198
192
  - !ruby/object:Gem::Version
199
- version: 4.2.0
193
+ version: 4.3.0
200
194
  type: :development
201
195
  prerelease: false
202
196
  version_requirements: !ruby/object:Gem::Requirement
203
197
  requirements:
204
- - - "~>"
198
+ - - '='
205
199
  - !ruby/object:Gem::Version
206
- version: 4.2.0
200
+ version: 4.3.0
207
201
  - !ruby/object:Gem::Dependency
208
202
  name: simplecov
209
203
  requirement: !ruby/object:Gem::Requirement
@@ -218,20 +212,6 @@ dependencies:
218
212
  - - ">="
219
213
  - !ruby/object:Gem::Version
220
214
  version: '0'
221
- - !ruby/object:Gem::Dependency
222
- name: simplecov-rcov
223
- requirement: !ruby/object:Gem::Requirement
224
- requirements:
225
- - - ">="
226
- - !ruby/object:Gem::Version
227
- version: '0'
228
- type: :development
229
- prerelease: false
230
- version_requirements: !ruby/object:Gem::Requirement
231
- requirements:
232
- - - ">="
233
- - !ruby/object:Gem::Version
234
- version: '0'
235
215
  description: |-
236
216
  A set of extensions to markdown layered on top of the kramdown
237
217
  library for use in the UK Government Single Domain project
@@ -340,36 +320,36 @@ required_ruby_version: !ruby/object:Gem::Requirement
340
320
  requirements:
341
321
  - - ">="
342
322
  - !ruby/object:Gem::Version
343
- version: '2.6'
323
+ version: '2.7'
344
324
  required_rubygems_version: !ruby/object:Gem::Requirement
345
325
  requirements:
346
326
  - - ">="
347
327
  - !ruby/object:Gem::Version
348
328
  version: '0'
349
329
  requirements: []
350
- rubygems_version: 3.0.3
330
+ rubygems_version: 3.3.10
351
331
  signing_key:
352
332
  specification_version: 4
353
333
  summary: Markup language for single domain
354
334
  test_files:
355
- - test/test_helper.rb
335
+ - test/govspeak_test_helper.rb
356
336
  - test/blockquote_extra_quote_remover_test.rb
357
- - test/govspeak_images_bang_test.rb
358
- - test/govspeak_contacts_test.rb
359
- - test/govspeak_table_with_headers_test.rb
360
337
  - test/govspeak_link_extractor_test.rb
361
- - test/govspeak_attachments_image_test.rb
362
- - test/html_validator_test.rb
363
- - test/govspeak_button_test.rb
338
+ - test/govspeak_images_test.rb
339
+ - test/govspeak_link_test.rb
364
340
  - test/govspeak_extract_contact_content_ids_test.rb
365
- - test/govspeak_test_helper.rb
366
341
  - test/govspeak_footnote_test.rb
367
- - test/govspeak_link_test.rb
342
+ - test/presenters/h_card_presenter_test.rb
343
+ - test/govspeak_attachments_inline_test.rb
368
344
  - test/govspeak_structured_headers_test.rb
345
+ - test/test_helper.rb
346
+ - test/govspeak_button_test.rb
347
+ - test/govspeak_attachment_test.rb
369
348
  - test/html_sanitizer_test.rb
370
- - test/govspeak_images_test.rb
349
+ - test/govspeak_contacts_test.rb
350
+ - test/govspeak_attachments_image_test.rb
351
+ - test/govspeak_images_bang_test.rb
371
352
  - test/govspeak_test.rb
353
+ - test/govspeak_table_with_headers_test.rb
354
+ - test/html_validator_test.rb
372
355
  - test/govspeak_attachment_link_test.rb
373
- - test/govspeak_attachment_test.rb
374
- - test/presenters/h_card_presenter_test.rb
375
- - test/govspeak_attachments_inline_test.rb