govspeak 6.5.2 → 6.5.3
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 +5 -0
- data/README.md +6 -5
- data/lib/govspeak.rb +2 -2
- data/lib/govspeak/html_sanitizer.rb +3 -1
- data/lib/govspeak/post_processor.rb +18 -0
- data/lib/govspeak/version.rb +1 -1
- data/test/govspeak_button_test.rb +17 -17
- metadata +15 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 753ae3784f7f2ea1afcba0ab048130ea81a12d18e6b83297c0044a029b9a7f96
|
4
|
+
data.tar.gz: 66b4612a2f7f821e94b5e0b5bc1a2471e40cc171506337f4c76dd3c95c087921
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 979a24087e5278d5c5c045f02bbd65bd2b9265ba255af4d00de3697d44af9024330973d477177aacf117ac3cfa5210c209bc545117d4a1731e9b0b2cdfd4fbb9
|
7
|
+
data.tar.gz: b6e1a3e1d72f7c83b747cdc204b32efc7824dbea550cd9bdc3d965cd685952ff1dee44066dd9d3215c04f050abe8647b30584a3fca7d43c181a3d2eed2ae4b9b
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,13 @@
|
|
1
|
+
## 6.5.3
|
2
|
+
|
3
|
+
* Use button component for buttons (PR#176)
|
4
|
+
|
1
5
|
## 6.5.2
|
2
6
|
|
3
7
|
* Allow `data` attributes on `div` tags (PR#173)
|
4
8
|
|
5
9
|
## 6.5.1
|
10
|
+
|
6
11
|
* Change unicode testing characters after external gem change
|
7
12
|
* Move from govuk-lint to rubocop-govuk
|
8
13
|
* Allow version 6 of actionview
|
data/README.md
CHANGED
@@ -619,8 +619,7 @@ will output
|
|
619
619
|
|
620
620
|
An accessible way to add button links into content, that can also allow cross domain tracking with [Google Analytics](https://support.google.com/analytics/answer/7372977?hl=en)
|
621
621
|
|
622
|
-
This button component
|
623
|
-
Note: Ideally we'd use the original component directly but this currently isnt possible
|
622
|
+
This button component uses the component from the [components gem](https://components.publishing.service.gov.uk/component-guide/button) for use in govspeak.
|
624
623
|
|
625
624
|
You must use the [link](https://daringfireball.net/projects/markdown/syntax#link) syntax within the button tags.
|
626
625
|
|
@@ -635,7 +634,7 @@ To get the most basic button.
|
|
635
634
|
which outputs
|
636
635
|
|
637
636
|
```html
|
638
|
-
<a role="button" class="button" href="https://gov.uk/random">
|
637
|
+
<a role="button" class="gem-c-button govuk-button" href="https://gov.uk/random">
|
639
638
|
Continue
|
640
639
|
</a>
|
641
640
|
```
|
@@ -649,8 +648,9 @@ To turn a button into a ['Start now' button](https://www.gov.uk/service-manual/d
|
|
649
648
|
which outputs
|
650
649
|
|
651
650
|
```html
|
652
|
-
<a role="button" class="button button-start" href="https://gov.uk/random">
|
651
|
+
<a role="button" class="gem-c-button govuk-button govuk-button--start" href="https://gov.uk/random">
|
653
652
|
Start Now
|
653
|
+
<svg class="govuk-button__start-icon" xmlns="http://www.w3.org/2000/svg" width="17.5" height="19" viewBox="0 0 33 40" role="presentation" focusable="false"><path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z"></path></svg>
|
654
654
|
</a>
|
655
655
|
```
|
656
656
|
|
@@ -667,12 +667,13 @@ which outputs
|
|
667
667
|
```html
|
668
668
|
<a
|
669
669
|
role="button"
|
670
|
-
class="button button-start"
|
670
|
+
class="gem-c-button govuk-button govuk-button--start"
|
671
671
|
href="https://example.com/external-service/start-now"
|
672
672
|
data-module="cross-domain-tracking"
|
673
673
|
data-tracking-code="UA-XXXXXX-Y"
|
674
674
|
data-tracking-name="govspeakButtonTracker"
|
675
675
|
>
|
676
676
|
Start Now
|
677
|
+
<svg class="govuk-button__start-icon" xmlns="http://www.w3.org/2000/svg" width="17.5" height="19" viewBox="0 0 33 40" role="presentation" focusable="false"><path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z"></path></svg>
|
677
678
|
</a>
|
678
679
|
```
|
data/lib/govspeak.rb
CHANGED
@@ -161,10 +161,10 @@ module Govspeak
|
|
161
161
|
{\/button} # match ending bracket
|
162
162
|
(?:\r|\n|$) # non-capturing match to make sure end of line and linebreak
|
163
163
|
}x) { |attributes, text, href|
|
164
|
-
button_classes = "button"
|
165
|
-
button_classes << " button-start" if attributes =~ /start/
|
164
|
+
button_classes = "govuk-button"
|
166
165
|
/cross-domain-tracking:(?<cross_domain_tracking>.[^\s*]+)/ =~ attributes
|
167
166
|
data_attribute = ""
|
167
|
+
data_attribute << " data-start='true'" if attributes =~ /start/
|
168
168
|
if cross_domain_tracking
|
169
169
|
data_attribute << " data-module='cross-domain-tracking'"
|
170
170
|
data_attribute << " data-tracking-code='#{cross_domain_tracking.strip}'"
|
@@ -51,10 +51,12 @@ class Govspeak::HtmlSanitizer
|
|
51
51
|
def sanitize_config
|
52
52
|
Sanitize::Config.merge(
|
53
53
|
Sanitize::Config::RELAXED,
|
54
|
-
elements: Sanitize::Config::RELAXED[:elements] + %w[govspeak-embed-attachment govspeak-embed-attachment-link],
|
54
|
+
elements: Sanitize::Config::RELAXED[:elements] + %w[govspeak-embed-attachment govspeak-embed-attachment-link svg path],
|
55
55
|
attributes: {
|
56
56
|
:all => Sanitize::Config::RELAXED[:attributes][:all] + %w[role aria-label],
|
57
57
|
"a" => Sanitize::Config::RELAXED[:attributes]["a"] + [:data],
|
58
|
+
"svg" => Sanitize::Config::RELAXED[:attributes][:all] + %w[xmlns width height viewbox focusable],
|
59
|
+
"path" => Sanitize::Config::RELAXED[:attributes][:all] + %w[fill d],
|
58
60
|
"div" => [:data],
|
59
61
|
"th" => Sanitize::Config::RELAXED[:attributes]["th"] + %w[style],
|
60
62
|
"td" => Sanitize::Config::RELAXED[:attributes]["td"] + %w[style],
|
@@ -100,6 +100,24 @@ module Govspeak
|
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
|
+
extension("use gem component for buttons") do |document|
|
104
|
+
document.css(".govuk-button").map do |el|
|
105
|
+
button_html = GovukPublishingComponents.render(
|
106
|
+
"govuk_publishing_components/components/button",
|
107
|
+
text: el.content,
|
108
|
+
href: el["href"],
|
109
|
+
start: el["data-start"],
|
110
|
+
data_attributes: {
|
111
|
+
module: el["data-module"],
|
112
|
+
"tracking-code": el["data-tracking-code"],
|
113
|
+
"tracking-name": el["data-tracking-name"],
|
114
|
+
},
|
115
|
+
).squish.gsub("> <", "><").gsub!(/\s+/, " ")
|
116
|
+
|
117
|
+
el.swap(button_html)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
103
121
|
attr_reader :input, :govspeak_document
|
104
122
|
|
105
123
|
def initialize(html, govspeak_document)
|
data/lib/govspeak/version.rb
CHANGED
@@ -9,34 +9,34 @@ class GovspeakTest < Minitest::Test
|
|
9
9
|
include GovspeakTestHelper
|
10
10
|
|
11
11
|
test_given_govspeak "{button start cross-domain-tracking:UA-23066786-5}[Start now](https://www.registertovote.service.gov.uk/register-to-vote/start){/button}" do
|
12
|
-
assert_html_output '<p><a
|
12
|
+
assert_html_output '<p><a class="gem-c-button govuk-button govuk-button--start" role="button" data-module="cross-domain-tracking" data-tracking-code="UA-23066786-5" data-tracking-name="govspeakButtonTracker" href="https://www.registertovote.service.gov.uk/register-to-vote/start"> Start now <svg class="govuk-button__start-icon" xmlns="http://www.w3.org/2000/svg" width="17.5" height="19" viewbox="0 0 33 40" role="presentation" focusable="false"><path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z"></path></svg></a></p>'
|
13
13
|
assert_text_output "Start now"
|
14
14
|
end
|
15
15
|
|
16
16
|
# The same as above but with line breaks
|
17
17
|
test_given_govspeak "{button start cross-domain-tracking:UA-23066786-5}\n\n\n[Start now](https://www.registertovote.service.gov.uk/register-to-vote/start)\n\n\n{/button}" do
|
18
|
-
assert_html_output '<p><a
|
18
|
+
assert_html_output '<p><a class="gem-c-button govuk-button govuk-button--start" role="button" data-module="cross-domain-tracking" data-tracking-code="UA-23066786-5" data-tracking-name="govspeakButtonTracker" href="https://www.registertovote.service.gov.uk/register-to-vote/start"> Start now <svg class="govuk-button__start-icon" xmlns="http://www.w3.org/2000/svg" width="17.5" height="19" viewbox="0 0 33 40" role="presentation" focusable="false"><path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z"></path></svg></a></p>'
|
19
19
|
assert_text_output "Start now"
|
20
20
|
end
|
21
21
|
|
22
22
|
test_given_govspeak "{button cross-domain-tracking:UA-23066786-5}[Start now](https://www.registertovote.service.gov.uk/register-to-vote/start){/button}" do
|
23
|
-
assert_html_output '<p><a
|
23
|
+
assert_html_output '<p><a class="gem-c-button govuk-button" role="button" data-module="cross-domain-tracking" data-tracking-code="UA-23066786-5" data-tracking-name="govspeakButtonTracker" href="https://www.registertovote.service.gov.uk/register-to-vote/start">Start now</a></p>'
|
24
24
|
assert_text_output "Start now"
|
25
25
|
end
|
26
26
|
|
27
27
|
test_given_govspeak "{button start}[Start now](https://www.registertovote.service.gov.uk/register-to-vote/start){/button}" do
|
28
|
-
assert_html_output '<p><a
|
28
|
+
assert_html_output '<p><a class="gem-c-button govuk-button govuk-button--start" role="button" href="https://www.registertovote.service.gov.uk/register-to-vote/start"> Start now <svg class="govuk-button__start-icon" xmlns="http://www.w3.org/2000/svg" width="17.5" height="19" viewbox="0 0 33 40" role="presentation" focusable="false"><path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z"></path></svg></a></p>'
|
29
29
|
assert_text_output "Start now"
|
30
30
|
end
|
31
31
|
|
32
32
|
test_given_govspeak "{button}[Start now](https://www.registertovote.service.gov.uk/register-to-vote/start){/button}" do
|
33
|
-
assert_html_output '<p><a
|
33
|
+
assert_html_output '<p><a class="gem-c-button govuk-button" role="button" href="https://www.registertovote.service.gov.uk/register-to-vote/start">Start now</a></p>'
|
34
34
|
assert_text_output "Start now"
|
35
35
|
end
|
36
36
|
|
37
37
|
# Test other text outputs
|
38
38
|
test_given_govspeak "{button}[Something else](https://www.registertovote.service.gov.uk/register-to-vote/start){/button}" do
|
39
|
-
assert_html_output '<p><a
|
39
|
+
assert_html_output '<p><a class="gem-c-button govuk-button" role="button" href="https://www.registertovote.service.gov.uk/register-to-vote/start">Something else</a></p>'
|
40
40
|
assert_text_output "Something else"
|
41
41
|
end
|
42
42
|
|
@@ -49,7 +49,7 @@ class GovspeakTest < Minitest::Test
|
|
49
49
|
assert_html_output %{
|
50
50
|
<p>Text before the button with line breaks</p>
|
51
51
|
|
52
|
-
<p><a
|
52
|
+
<p><a class="gem-c-button govuk-button" role="button" href="http://www.gov.uk">Start Now</a></p>
|
53
53
|
|
54
54
|
<p>test after the button</p>
|
55
55
|
}
|
@@ -58,17 +58,17 @@ class GovspeakTest < Minitest::Test
|
|
58
58
|
|
59
59
|
# Test README examples
|
60
60
|
test_given_govspeak "{button}[Continue](https://gov.uk/random){/button}" do
|
61
|
-
assert_html_output '<p><a
|
61
|
+
assert_html_output '<p><a class="gem-c-button govuk-button" role="button" href="https://gov.uk/random">Continue</a></p>'
|
62
62
|
assert_text_output "Continue"
|
63
63
|
end
|
64
64
|
|
65
65
|
test_given_govspeak "{button start}[Start Now](https://gov.uk/random){/button}" do
|
66
|
-
assert_html_output '<p><a
|
66
|
+
assert_html_output '<p><a class="gem-c-button govuk-button govuk-button--start" role="button" href="https://gov.uk/random"> Start Now <svg class="govuk-button__start-icon" xmlns="http://www.w3.org/2000/svg" width="17.5" height="19" viewbox="0 0 33 40" role="presentation" focusable="false"><path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z"></path></svg></a></p>'
|
67
67
|
assert_text_output "Start Now"
|
68
68
|
end
|
69
69
|
|
70
70
|
test_given_govspeak "{button start cross-domain-tracking:UA-XXXXXX-Y}[Start Now](https://example.com/external-service/start-now){/button}" do
|
71
|
-
assert_html_output '<p><a
|
71
|
+
assert_html_output '<p><a class="gem-c-button govuk-button govuk-button--start" role="button" data-module="cross-domain-tracking" data-tracking-code="UA-XXXXXX-Y" data-tracking-name="govspeakButtonTracker" href="https://example.com/external-service/start-now"> Start Now <svg class="govuk-button__start-icon" xmlns="http://www.w3.org/2000/svg" width="17.5" height="19" viewbox="0 0 33 40" role="presentation" focusable="false"><path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z"></path></svg></a></p>'
|
72
72
|
assert_text_output "Start Now"
|
73
73
|
end
|
74
74
|
|
@@ -83,21 +83,21 @@ class GovspeakTest < Minitest::Test
|
|
83
83
|
# Make sure button renders when typical linebreaks are before it, seen in publishing applications
|
84
84
|
test_given_govspeak "{button}[Line breaks](https://gov.uk/random){/button}\r\n\r\n{button}[Continue](https://gov.uk/random){/button}\r\n\r\n{button}[Continue](https://gov.uk/random){/button}" do
|
85
85
|
assert_html_output %{
|
86
|
-
<p><a
|
86
|
+
<p><a class="gem-c-button govuk-button" role="button" href="https://gov.uk/random">Line breaks</a></p>
|
87
87
|
|
88
|
-
<p><a
|
88
|
+
<p><a class="gem-c-button govuk-button" role="button" href="https://gov.uk/random">Continue</a></p>
|
89
89
|
|
90
|
-
<p><a
|
90
|
+
<p><a class="gem-c-button govuk-button" role="button" href="https://gov.uk/random">Continue</a></p>
|
91
91
|
}
|
92
92
|
end
|
93
93
|
|
94
94
|
test_given_govspeak "{button}[More line breaks](https://gov.uk/random){/button}\n\n{button}[Continue](https://gov.uk/random){/button}\n\n{button}[Continue](https://gov.uk/random){/button}" do
|
95
95
|
assert_html_output %{
|
96
|
-
<p><a
|
96
|
+
<p><a class="gem-c-button govuk-button" role="button" href="https://gov.uk/random">More line breaks</a></p>
|
97
97
|
|
98
|
-
<p><a
|
98
|
+
<p><a class="gem-c-button govuk-button" role="button" href="https://gov.uk/random">Continue</a></p>
|
99
99
|
|
100
|
-
<p><a
|
100
|
+
<p><a class="gem-c-button govuk-button" role="button" href="https://gov.uk/random">Continue</a></p>
|
101
101
|
}
|
102
102
|
end
|
103
103
|
|
@@ -122,7 +122,7 @@ class GovspeakTest < Minitest::Test
|
|
122
122
|
<p>lorem lorem lorem
|
123
123
|
lorem lorem lorem</p>
|
124
124
|
|
125
|
-
<p><a
|
125
|
+
<p><a class="gem-c-button govuk-button govuk-button--start" role="button" href="https://gov.uk/random"> Start Now <svg class="govuk-button__start-icon" xmlns="http://www.w3.org/2000/svg" width="17.5" height="19" viewbox="0 0 33 40" role="presentation" focusable="false"><path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z"></path></svg></a></p>
|
126
126
|
|
127
127
|
<p>lorem lorem lorem
|
128
128
|
lorem lorem lorem</p>
|
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.5.
|
4
|
+
version: 6.5.3
|
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:
|
11
|
+
date: 2020-02-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionview
|
@@ -365,23 +365,23 @@ signing_key:
|
|
365
365
|
specification_version: 4
|
366
366
|
summary: Markup language for single domain
|
367
367
|
test_files:
|
368
|
-
- test/govspeak_link_extractor_test.rb
|
369
|
-
- test/govspeak_structured_headers_test.rb
|
370
|
-
- test/govspeak_images_bang_test.rb
|
371
|
-
- test/govspeak_button_test.rb
|
372
|
-
- test/govspeak_table_with_headers_test.rb
|
373
|
-
- test/govspeak_extract_contact_content_ids_test.rb
|
374
368
|
- test/blockquote_extra_quote_remover_test.rb
|
375
369
|
- test/govspeak_test_helper.rb
|
376
|
-
- test/
|
377
|
-
- test/govspeak_images_test.rb
|
370
|
+
- test/govspeak_structured_headers_test.rb
|
378
371
|
- test/govspeak_attachment_link_test.rb
|
379
|
-
- test/
|
372
|
+
- test/govspeak_attachments_image_test.rb
|
380
373
|
- test/test_helper.rb
|
381
|
-
- test/html_validator_test.rb
|
382
|
-
- test/html_sanitizer_test.rb
|
383
374
|
- test/govspeak_attachments_inline_test.rb
|
384
|
-
- test/
|
375
|
+
- test/html_sanitizer_test.rb
|
376
|
+
- test/govspeak_button_test.rb
|
377
|
+
- test/govspeak_images_bang_test.rb
|
378
|
+
- test/govspeak_images_test.rb
|
379
|
+
- test/html_validator_test.rb
|
385
380
|
- test/govspeak_attachment_test.rb
|
386
|
-
- test/
|
381
|
+
- test/govspeak_extract_contact_content_ids_test.rb
|
382
|
+
- test/govspeak_test.rb
|
383
|
+
- test/govspeak_link_extractor_test.rb
|
384
|
+
- test/govspeak_link_test.rb
|
385
|
+
- test/govspeak_contacts_test.rb
|
387
386
|
- test/presenters/h_card_presenter_test.rb
|
387
|
+
- test/govspeak_table_with_headers_test.rb
|