govspeak 8.0.1 → 8.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/lib/govspeak/version.rb +1 -1
- data/lib/govspeak.rb +11 -13
- data/test/govspeak_attachment_link_test.rb +24 -0
- data/test/govspeak_button_test.rb +1 -1
- data/test/govspeak_test.rb +60 -38
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0c555468b4ecde3805f07e313973dddaeadcd14383c982982294c51e804ea1da
|
4
|
+
data.tar.gz: 96053a068119e22ce4c984ab23398e069c5e0389bdc3ea4defc6401d57c1e1aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bae3e886909c655e6bbec31accad94c3fb1603c089e5a3208d9939ea886920d1961be65f4706e0d58c6304560970771c4507163b86f7669e4b7a798b9831d72f
|
7
|
+
data.tar.gz: 5d0a20f844cfe0c4e451b6fb0f959be7c5aa80bf95f3db2c10382f439ac28b427c10035cad2f95a79088b0d3197ea2f2e98634f1fc715f7653b7e1acba7e21db
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## 8.2.0
|
2
|
+
|
3
|
+
* Reintroduce support for acronyms in Call To Action blocks and in Legislative Lists ([#285](https://github.com/alphagov/govspeak/pull/285))
|
4
|
+
|
5
|
+
## 8.1.0
|
6
|
+
|
7
|
+
* Allow attachment links wtihin numbered lists ([#283](https://github.com/alphagov/govspeak/pull/283))
|
8
|
+
|
1
9
|
## 8.0.1
|
2
10
|
|
3
11
|
* Add margin-bottom to embedded attachments ([#281](https://github.com/alphagov/govspeak/pull/281))
|
data/lib/govspeak/version.rb
CHANGED
data/lib/govspeak.rb
CHANGED
@@ -139,12 +139,13 @@ module Govspeak
|
|
139
139
|
is_legislative_list = source.scan(/\$LegislativeList.*?\[\^\d\]*.*?\$EndLegislativeList/m).size.positive?
|
140
140
|
is_cta = source.scan(/\$CTA.*?\[\^\d\]*.*?\$CTA/m).size.positive?
|
141
141
|
footnotes = source.scan(/^\s*\[\^(\d+)\]:(.*)/)
|
142
|
-
@acronyms
|
142
|
+
@acronyms.concat(source.scan(/(?<=\*)\[(.*)\]:(.*)/))
|
143
143
|
if (is_legislative_list || is_cta) && footnotes.size.positive?
|
144
144
|
list_items = footnotes.map do |footnote|
|
145
145
|
number = footnote[0]
|
146
146
|
text = footnote[1].strip
|
147
147
|
footnote_definition = Govspeak::Document.new(text).to_html[/(?<=<p>).*(?=<\/p>)/]
|
148
|
+
footnote_definition = add_acronym_alt_text(footnote_definition)
|
148
149
|
|
149
150
|
<<~HTML_SNIPPET
|
150
151
|
<li id="fn:#{number}" role="doc-endnote">
|
@@ -163,10 +164,6 @@ module Govspeak
|
|
163
164
|
</div>
|
164
165
|
HTML_CONTAINER
|
165
166
|
end
|
166
|
-
|
167
|
-
unless @footnote_definition_html.nil? && @acronyms.size.positive?
|
168
|
-
add_acronym_alt_text(@footnote_definition_html)
|
169
|
-
end
|
170
167
|
end
|
171
168
|
|
172
169
|
def remove_forbidden_characters(source)
|
@@ -326,6 +323,7 @@ module Govspeak
|
|
326
323
|
|
327
324
|
extension("call-to-action", surrounded_by("$CTA")) do |body|
|
328
325
|
doc = Kramdown::Document.new(preprocess(body.strip), @options).to_html
|
326
|
+
doc = add_acronym_alt_text(doc)
|
329
327
|
doc = %(\n<div class="call-to-action">\n#{doc}</div>\n)
|
330
328
|
footnotes = body.scan(/\[\^(\d+)\]/).flatten
|
331
329
|
|
@@ -337,7 +335,6 @@ module Govspeak
|
|
337
335
|
doc.sub!(/(\[\^#{footnote}\])/, html)
|
338
336
|
end
|
339
337
|
|
340
|
-
add_acronym_alt_text(doc) if @acronyms.size.positive?
|
341
338
|
doc
|
342
339
|
end
|
343
340
|
|
@@ -358,6 +355,8 @@ module Govspeak
|
|
358
355
|
|
359
356
|
extension("legislative list", /#{NEW_PARAGRAPH_LOOKBEHIND}\$LegislativeList\s*$(.*?)\$EndLegislativeList/m) do |body|
|
360
357
|
Govspeak::KramdownOverrides.with_kramdown_ordered_lists_disabled do
|
358
|
+
body = add_acronym_alt_text(body.strip)
|
359
|
+
|
361
360
|
Kramdown::Document.new(body.strip).to_html.tap do |doc|
|
362
361
|
doc.gsub!("<ul>", "<ol>")
|
363
362
|
doc.gsub!("</ul>", "</ol>")
|
@@ -372,15 +371,13 @@ module Govspeak
|
|
372
371
|
|
373
372
|
doc.sub!(/(\[\^#{footnote}\])/, html)
|
374
373
|
end
|
375
|
-
|
376
|
-
add_acronym_alt_text(doc) if @acronyms.size.positive?
|
377
374
|
end
|
378
375
|
end
|
379
376
|
end
|
380
377
|
|
381
378
|
extension("numbered list", /^[ \t]*((s\d+\.\s.*(?:\n|$))+)/) do |body|
|
382
379
|
body.gsub!(/s(\d+)\.\s(.*)(?:\n|$)/) do
|
383
|
-
"<li>#{Govspeak::Document.new(Regexp.last_match(2).strip).to_html}</li>\n"
|
380
|
+
"<li>#{Govspeak::Document.new(Regexp.last_match(2).strip, attachments: attachments).to_html}</li>\n"
|
384
381
|
end
|
385
382
|
%(<ol class="steps">\n#{body}</ol>)
|
386
383
|
end
|
@@ -454,10 +451,11 @@ module Govspeak
|
|
454
451
|
end
|
455
452
|
|
456
453
|
def add_acronym_alt_text(html)
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
454
|
+
@acronyms.each do |acronym|
|
455
|
+
html.gsub!(acronym[0], "<abbr title=\"#{acronym[1].strip}\">#{acronym[0]}</abbr>")
|
456
|
+
end
|
457
|
+
|
458
|
+
html
|
461
459
|
end
|
462
460
|
end
|
463
461
|
end
|
@@ -46,4 +46,28 @@ class GovspeakAttachmentLinkTest < Minitest::Test
|
|
46
46
|
rendered = render_govspeak("[AttachmentLink: This is the name of my &%$@€? attachment]", [attachment])
|
47
47
|
assert_match(/Attachment Title/, rendered)
|
48
48
|
end
|
49
|
+
|
50
|
+
test "renders an attachment link inside a numbered list" do
|
51
|
+
attachment = {
|
52
|
+
id: "attachment.pdf",
|
53
|
+
url: "http://example.com/attachment.pdf",
|
54
|
+
title: "Attachment Title",
|
55
|
+
}
|
56
|
+
|
57
|
+
rendered = render_govspeak("s1. First item with [AttachmentLink: attachment.pdf]\ns2. Second item without attachment", [attachment])
|
58
|
+
|
59
|
+
expected_output = <<~TEXT
|
60
|
+
<ol class="steps">
|
61
|
+
<li>
|
62
|
+
<p>First item with <span class="gem-c-attachment-link">
|
63
|
+
<a class="govuk-link" href="http://example.com/attachment.pdf">Attachment Title</a> </span></p>
|
64
|
+
</li>
|
65
|
+
<li>
|
66
|
+
<p>Second item without attachment</p>
|
67
|
+
</li>
|
68
|
+
</ol>
|
69
|
+
TEXT
|
70
|
+
|
71
|
+
assert_equal(expected_output, rendered)
|
72
|
+
end
|
49
73
|
end
|
@@ -118,7 +118,7 @@ class GovspeakTest < Minitest::Test
|
|
118
118
|
" do
|
119
119
|
assert_text_output "Start now JSA"
|
120
120
|
assert_html_output %(
|
121
|
-
<p><a class="gem-c-button govuk-button govuk-button--start" role="button" data-module="govuk-button" draggable="false" href="https://www.apply-for-new-style-jsa.dwp.gov.uk/?lang=cy"> Start now <abbr title="Jobseeker's Allowance">JSA</abbr><svg class="govuk-button__start-icon govuk-!-display-none-print" xmlns="http://www.w3.org/2000/svg" width="17.5" height="19" viewbox="0 0 33 40" focusable="false" aria-hidden="true"><path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z"></path></svg></a></p>
|
121
|
+
<p><a class="gem-c-button govuk-button govuk-button--start" role="button" data-module="govuk-button" draggable="false" href="https://www.apply-for-new-style-jsa.dwp.gov.uk/?lang=cy"><span> Start now <abbr title="Jobseeker's Allowance">JSA</abbr></span><svg class="govuk-button__start-icon govuk-!-display-none-print" xmlns="http://www.w3.org/2000/svg" width="17.5" height="19" viewbox="0 0 33 40" focusable="false" aria-hidden="true"><path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z"></path></svg></a></p>
|
122
122
|
)
|
123
123
|
end
|
124
124
|
end
|
data/test/govspeak_test.rb
CHANGED
@@ -622,6 +622,21 @@ Teston
|
|
622
622
|
)
|
623
623
|
end
|
624
624
|
|
625
|
+
test_given_govspeak "
|
626
|
+
$CTA
|
627
|
+
Contact the SGD on 0800 000 0000 or contact the class on 0800 001 0001
|
628
|
+
$CTA
|
629
|
+
|
630
|
+
*[class]: Other Government Department
|
631
|
+
*[SGD]: Some Government Department
|
632
|
+
" do
|
633
|
+
assert_html_output %(
|
634
|
+
<div class="call-to-action">
|
635
|
+
<p>Contact the <abbr title="Some Government Department">SGD</abbr> on 0800 000 0000 or contact the <abbr title="Other Government Department">class</abbr> on 0800 001 0001</p>
|
636
|
+
</div>
|
637
|
+
)
|
638
|
+
end
|
639
|
+
|
625
640
|
test_given_govspeak "
|
626
641
|
1. rod
|
627
642
|
2. jane
|
@@ -1090,44 +1105,51 @@ Teston
|
|
1090
1105
|
)
|
1091
1106
|
end
|
1092
1107
|
|
1093
|
-
|
1094
|
-
|
1095
|
-
|
1096
|
-
|
1097
|
-
|
1098
|
-
|
1099
|
-
|
1100
|
-
|
1101
|
-
|
1102
|
-
|
1103
|
-
|
1104
|
-
|
1105
|
-
|
1106
|
-
|
1107
|
-
|
1108
|
-
|
1109
|
-
|
1110
|
-
|
1111
|
-
|
1112
|
-
|
1113
|
-
|
1114
|
-
|
1115
|
-
|
1116
|
-
|
1117
|
-
|
1118
|
-
|
1119
|
-
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1125
|
-
|
1126
|
-
|
1127
|
-
|
1128
|
-
|
1129
|
-
|
1130
|
-
|
1108
|
+
test_given_govspeak "
|
1109
|
+
$LegislativeList
|
1110
|
+
* 1. Item 1[^1] with an ACRONYM
|
1111
|
+
* 2. Item 2[^2]
|
1112
|
+
* 3. Item 3[^3]
|
1113
|
+
$EndLegislativeList
|
1114
|
+
|
1115
|
+
[^1]: Footnote definition one
|
1116
|
+
[^2]: Footnote definition two with an ACRONYM
|
1117
|
+
[^3]: Footnote definition three with an acronym that matches an HTML tag class
|
1118
|
+
|
1119
|
+
*[ACRONYM]: This is the acronym explanation
|
1120
|
+
*[class]: Testing HTML matching
|
1121
|
+
" do
|
1122
|
+
assert_html_output %(
|
1123
|
+
<ol class="legislative-list">
|
1124
|
+
<li>1. Item 1<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">[footnote 1]</a></sup> with an <abbr title="This is the acronym explanation">ACRONYM</abbr>
|
1125
|
+
</li>
|
1126
|
+
<li>2. Item 2<sup id="fnref:2" role="doc-noteref"><a href="#fn:2" class="footnote" rel="footnote">[footnote 2]</a></sup>
|
1127
|
+
</li>
|
1128
|
+
<li>3. Item 3<sup id="fnref:3" role="doc-noteref"><a href="#fn:3" class="footnote" rel="footnote">[footnote 3]</a></sup>
|
1129
|
+
</li>
|
1130
|
+
</ol>
|
1131
|
+
|
1132
|
+
<div class="footnotes" role="doc-endnotes">
|
1133
|
+
<ol>
|
1134
|
+
<li id="fn:1" role="doc-endnote">
|
1135
|
+
<p>
|
1136
|
+
Footnote definition one<a href="#fnref:1" class="reversefootnote" role="doc-backlink" aria-label="go to where this is referenced">↩</a>
|
1137
|
+
</p>
|
1138
|
+
</li>
|
1139
|
+
<li id="fn:2" role="doc-endnote">
|
1140
|
+
<p>
|
1141
|
+
Footnote definition two with an <abbr title="This is the acronym explanation">ACRONYM</abbr><a href="#fnref:2" class="reversefootnote" role="doc-backlink" aria-label="go to where this is referenced">↩</a>
|
1142
|
+
</p>
|
1143
|
+
</li>
|
1144
|
+
<li id="fn:3" role="doc-endnote">
|
1145
|
+
<p>
|
1146
|
+
Footnote definition three with an acronym that matches an HTML tag <abbr title="Testing HTML matching">class</abbr><a href="#fnref:3" class="reversefootnote" role="doc-backlink" aria-label="go to where this is referenced">↩</a>
|
1147
|
+
</p>
|
1148
|
+
</li>
|
1149
|
+
</ol>
|
1150
|
+
</div>
|
1151
|
+
)
|
1152
|
+
end
|
1131
1153
|
|
1132
1154
|
test_given_govspeak "
|
1133
1155
|
The quick brown
|
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: 8.0
|
4
|
+
version: 8.2.0
|
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: 2023-
|
11
|
+
date: 2023-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionview
|
@@ -190,14 +190,14 @@ dependencies:
|
|
190
190
|
requirements:
|
191
191
|
- - '='
|
192
192
|
- !ruby/object:Gem::Version
|
193
|
-
version: 4.
|
193
|
+
version: 4.12.0
|
194
194
|
type: :development
|
195
195
|
prerelease: false
|
196
196
|
version_requirements: !ruby/object:Gem::Requirement
|
197
197
|
requirements:
|
198
198
|
- - '='
|
199
199
|
- !ruby/object:Gem::Version
|
200
|
-
version: 4.
|
200
|
+
version: 4.12.0
|
201
201
|
- !ruby/object:Gem::Dependency
|
202
202
|
name: simplecov
|
203
203
|
requirement: !ruby/object:Gem::Requirement
|
@@ -327,7 +327,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
327
327
|
- !ruby/object:Gem::Version
|
328
328
|
version: '0'
|
329
329
|
requirements: []
|
330
|
-
rubygems_version: 3.4.
|
330
|
+
rubygems_version: 3.4.19
|
331
331
|
signing_key:
|
332
332
|
specification_version: 4
|
333
333
|
summary: Markup language for single domain
|