govspeak 8.1.0 → 8.2.1

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
2
  SHA256:
3
- metadata.gz: 0122207e54ee34f5d1e7b8d42f893cc98c4305b41c3d6ce26ad9e7b17d3f4a6e
4
- data.tar.gz: c643149ccfd275d1ba819c55b2db5928f3a8e9f3af83268193394f2c34013cbf
3
+ metadata.gz: 0d49c335c68cd5f05db18037a354c1da3b1a9ad72807b41bd16dd889ed2df4f5
4
+ data.tar.gz: 12a859b126e18e44aa69e5a693508e86bb43056ea1623569cb84db51976e1985
5
5
  SHA512:
6
- metadata.gz: 03fd251aac19ee15e22a6e8bee2486a5e0686150ad55784939fba4818e016de2515ca9e94a5c790ff34734654174ce4e9883973a457a5ba18cd1d37c9bfef292
7
- data.tar.gz: 94804d743f6269f40fc3d27f8e006a2879aa9181f8af11268445a4e4d9e96d5d9f7b989640a3cfae3b27dd667afcd46f4d3917f91789211662766a615497e867
6
+ metadata.gz: da16a5a2881e26fedadb229251d7d0ad6a3992828a30d142e3643026a238fd3e079b69e0a79b6a4d5b5f8645d06ef25844285a248a13fccea62afeaa53c92af7
7
+ data.tar.gz: d3fec351bc7836c657268e7fe265dc2cd331a84f858ad10620ebb7063ee9c967169563b19400075f2a3b60fd49a03df95e08f6e5c9211a686eaa29715407ded5
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 8.2.1
2
+
3
+ * Prevent user error when incorrectly formatted footnotes are added to HTML attachments ([#287](https://github.com/alphagov/govspeak/pull/287))
4
+
5
+ ## 8.2.0
6
+
7
+ * Reintroduce support for acronyms in Call To Action blocks and in Legislative Lists ([#285](https://github.com/alphagov/govspeak/pull/285))
8
+
1
9
  ## 8.1.0
2
10
 
3
11
  * Allow attachment links wtihin numbered lists ([#283](https://github.com/alphagov/govspeak/pull/283))
@@ -1,3 +1,3 @@
1
1
  module Govspeak
2
- VERSION = "8.1.0".freeze
2
+ VERSION = "8.2.1".freeze
3
3
  end
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 = source.scan(/(?<=\*)\[(.*)\]:(.*)/)
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,8 +371,6 @@ 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
@@ -454,10 +451,13 @@ module Govspeak
454
451
  end
455
452
 
456
453
  def add_acronym_alt_text(html)
457
- # FIXME: this code is buggy and replaces abbreviations in HTML tags - removing the functionality for now
458
- # @acronyms.each do |acronym|
459
- # html.gsub!(acronym[0], "<abbr title=\"#{acronym[1].strip}\">#{acronym[0]}</abbr>")
460
- # end
454
+ return unless html
455
+
456
+ @acronyms.each do |acronym|
457
+ html.gsub!(acronym[0], "<abbr title=\"#{acronym[1].strip}\">#{acronym[0]}</abbr>")
458
+ end
459
+
460
+ html
461
461
  end
462
462
  end
463
463
  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
@@ -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
- # FIXME: this code is buggy and replaces abbreviations in HTML tags - removing the functionality for now
1094
- # test_given_govspeak "
1095
- # $LegislativeList
1096
- # * 1. Item 1[^1] with an ACRONYM
1097
- # * 2. Item 2[^2]
1098
- # * 3. Item 3
1099
- # $EndLegislativeList
1100
- #
1101
- # [^1]: Footnote definition one
1102
- # [^2]: Footnote definition two with an ACRONYM
1103
- #
1104
- # *[ACRONYM]: This is the acronym explanation
1105
- # " do
1106
- # assert_html_output %(
1107
- # <ol class="legislative-list">
1108
- # <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>
1109
- # </li>
1110
- # <li>2. Item 2<sup id="fnref:2" role="doc-noteref"><a href="#fn:2" class="footnote" rel="footnote">[footnote 2]</a></sup>
1111
- # </li>
1112
- # <li>3. Item 3</li>
1113
- # </ol>
1114
- #
1115
- # <div class="footnotes" role="doc-endnotes">
1116
- # <ol>
1117
- # <li id="fn:1" role="doc-endnote">
1118
- # <p>
1119
- # Footnote definition one<a href="#fnref:1" class="reversefootnote" role="doc-backlink" aria-label="go to where this is referenced">↩</a>
1120
- # </p>
1121
- # </li>
1122
- # <li id="fn:2" role="doc-endnote">
1123
- # <p>
1124
- # 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>
1125
- # </p>
1126
- # </li>
1127
- # </ol>
1128
- # </div>
1129
- # )
1130
- # end
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.1.0
4
+ version: 8.2.1
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-08-01 00:00:00.000000000 Z
11
+ date: 2023-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionview
@@ -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.17
330
+ rubygems_version: 3.4.19
331
331
  signing_key:
332
332
  specification_version: 4
333
333
  summary: Markup language for single domain