govspeak 6.7.8 → 6.8.2
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/CHANGELOG.md +14 -0
- data/lib/govspeak/html_sanitizer.rb +11 -1
- data/lib/govspeak/html_validator.rb +12 -6
- data/lib/govspeak/template_renderer.rb +1 -1
- data/lib/govspeak/version.rb +1 -1
- data/lib/govspeak.rb +5 -2
- data/test/govspeak_test.rb +42 -0
- data/test/test_helper.rb +0 -2
- metadata +23 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a8509b4c394ef305fd80454c6c6bdb13561332bcdedc5d0292c271387a34043c
|
4
|
+
data.tar.gz: a73d8175cbea307d6b8028931bd15e9b99b97f7ae7708247cc833873622a8574
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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,
|
4
|
+
def initialize(govspeak_string, options = {})
|
5
5
|
@govspeak_string = govspeak_string.dup.force_encoding(Encoding::UTF_8)
|
6
|
-
@
|
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 =
|
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(
|
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
|
data/lib/govspeak/version.rb
CHANGED
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
|
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(
|
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|
|
data/test/govspeak_test.rb
CHANGED
@@ -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
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.
|
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-
|
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: '
|
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: '
|
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.
|
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.
|
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.
|
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.
|
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/
|
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/
|
362
|
-
- test/
|
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/
|
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/
|
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
|