govspeak 5.2.0 → 5.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
  SHA1:
3
- metadata.gz: a4a6fee8680d3b04ed7c86d26efcfdd73fa58f5b
4
- data.tar.gz: f3102b0907209a598118940cf7fc1b81258be172
3
+ metadata.gz: dec9f9ee71166be1a0eead7618adabb81efd51f4
4
+ data.tar.gz: cdc03d5927dac0271c21d8bba7dddbb565cccf27
5
5
  SHA512:
6
- metadata.gz: 62b7674a6488a733859c07147734a663a9e0217d9ee7527a1d79cf9d8f04d0bfc50cb3c3d57736e3e87bcd2547a481d31cd5f91e6c923f134c7932a46a7fdd8b
7
- data.tar.gz: 56c16ff2616269cd93089a480fa373ba6b6251f66cda4f725e354359a6d7d8141f604e7765304425bd93ff9d0ed6df4fcc5fd6a3bc90bdb6053dd81b9aa73682
6
+ metadata.gz: 02d24aa502bf2dbb098d03f07fe991b978f272e479ee2beaaab52bb7a4c6fd0927f9e52d40339ec8fd48c432eb316657ae1557f46d0bc8cb44bf9b06eab69844
7
+ data.tar.gz: 3cfbf2cc7011d73d4f35f223eb7c83946e7f1efba721a2a4f40e03ee1b5ffb75763a0a9671ae32e5c7a001d69c6437b5002ed8e0285ed3cd65f79583c8a65b31
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 5.2.1
2
+ * Fix validation to make sure buttons are considered valid
3
+ * Only allow buttons to be used on new lines, not when indented or inline within text (useful for guides) [#116](https://github.com/alphagov/govspeak/pull/116)
4
+
1
5
  ## 5.2.0
2
6
  * Add button component for govspeak [#114](https://github.com/alphagov/govspeak/pull/114) see README for usage
3
7
 
@@ -59,7 +59,7 @@ class Govspeak::HtmlSanitizer
59
59
 
60
60
  def button_sanitize_config
61
61
  [
62
- "data-module='cross-domain-tracking'",
62
+ "data-module",
63
63
  "data-tracking-code",
64
64
  "data-tracking-name"
65
65
  ]
@@ -1,3 +1,3 @@
1
1
  module Govspeak
2
- VERSION = "5.2.0".freeze
2
+ VERSION = "5.2.1".freeze
3
3
  end
data/lib/govspeak.rb CHANGED
@@ -136,6 +136,7 @@ module Govspeak
136
136
  end
137
137
 
138
138
  extension('button', %r{
139
+ ^ # Match start of line only, allows for indenting code examples
139
140
  {button(.*?)} # match opening bracket and capture attributes
140
141
  \s* # any whitespace between opening bracket and link
141
142
  \[ # match start of link markdown
@@ -146,6 +147,7 @@ module Govspeak
146
147
  \) # match end of link text markdown
147
148
  \s* # any whitespace between opening bracket and link
148
149
  {\/button} # match ending bracket
150
+ $ # Match end of line only, allows for indenting code examples
149
151
  }x) { |attributes, text, href|
150
152
  button_classes = "button"
151
153
  button_classes << " button-start" if attributes =~ /start/
@@ -45,17 +45,6 @@ class GovspeakTest < Minitest::Test
45
45
  assert_html_output '<p>{button}I shouldn’t render a button{/button}</p>'
46
46
  end
47
47
 
48
- test_given_govspeak "Text before the button {button}[Start Now](http://www.gov.uk){/button} test after the button" do
49
- # rubocop:disable Layout/TrailingWhitespace
50
- assert_html_output %{
51
- <p>Text before the button
52
- <a role="button" class="button" href="http://www.gov.uk">Start Now</a>
53
- test after the button</p>
54
- }
55
- # rubocop:enable Layout/TrailingWhitespace
56
- assert_text_output "Text before the button Start Now test after the button"
57
- end
58
-
59
48
  test_given_govspeak "Text before the button with line breaks \n\n\n{button}[Start Now](http://www.gov.uk){/button}\n\n\n test after the button" do
60
49
  assert_html_output %{
61
50
  <p>Text before the button with line breaks</p>
@@ -82,4 +71,12 @@ class GovspeakTest < Minitest::Test
82
71
  assert_html_output '<p><a role="button" class="button button-start" href="https://example.com/external-service/start-now" data-module="cross-domain-tracking" data-tracking-code="UA-XXXXXX-Y" data-tracking-name="govspeakButtonTracker">Start Now</a></p>'
83
72
  assert_text_output "Start Now"
84
73
  end
74
+
75
+ # Test indenting button govspeak results in no render, useful in guides
76
+ test_given_govspeak " {button start cross-domain-tracking:UA-XXXXXX-Y}[Example](https://example.com/external-service/start-now){/button}" do
77
+ assert_html_output %{
78
+ <pre><code>{button start cross-domain-tracking:UA-XXXXXX-Y}[Example](https://example.com/external-service/start-now){/button}
79
+ </code></pre>
80
+ }
81
+ end
85
82
  end
@@ -28,6 +28,14 @@ class HtmlSanitizerTest < Minitest::Test
28
28
  assert_equal "Fortnum &amp; Mason", Govspeak::HtmlSanitizer.new(html).sanitize
29
29
  end
30
30
 
31
+ test "allow govspeak button markup" do
32
+ html = "<a href='#' data-module='cross-domain-tracking' data-tracking-code='UA-XXXXXX-Y' data-tracking-name='govspeakButtonTracker'></a>"
33
+ assert_equal(
34
+ "<a href=\"#\" data-module=\"cross-domain-tracking\" data-tracking-code=\"UA-XXXXXX-Y\" data-tracking-name=\"govspeakButtonTracker\"></a>",
35
+ Govspeak::HtmlSanitizer.new(html).sanitize
36
+ )
37
+ end
38
+
31
39
  test "allows images on whitelisted domains" do
32
40
  html = "<img src='http://allowed.com/image.jgp'>"
33
41
  sanitized_html = Govspeak::HtmlSanitizer.new(html, allowed_image_hosts: ['allowed.com']).sanitize
@@ -95,4 +95,10 @@ class HtmlValidatorTest < Minitest::Test
95
95
  html = "<div class=\"govspeak\"><h2 id=\"some-title\">\n<span class=\"number\">1. </span> Some title</h2>\n\n<p>Some text</p>\n</div>"
96
96
  assert Govspeak::HtmlValidator.new(html).valid?
97
97
  end
98
+
99
+ test "allow govspeak button" do
100
+ assert Govspeak::HtmlValidator.new("{button}[Start now](https://gov.uk){/button}").valid?
101
+ assert Govspeak::HtmlValidator.new("{button start}[Start now](https://gov.uk){/button}").valid?
102
+ assert Govspeak::HtmlValidator.new("{button start cross-domain-tracking:UA-XXXXXX-Y}[Start now](https://gov.uk){/button}").valid?
103
+ end
98
104
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: govspeak
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.2.0
4
+ version: 5.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Griffiths
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-11-20 00:00:00.000000000 Z
12
+ date: 2017-11-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: kramdown
@@ -320,18 +320,18 @@ signing_key:
320
320
  specification_version: 4
321
321
  summary: Markup language for single domain
322
322
  test_files:
323
- - test/blockquote_extra_quote_remover_test.rb
324
323
  - test/govspeak_test_helper.rb
325
- - test/govspeak_structured_headers_test.rb
324
+ - test/govspeak_test.rb
326
325
  - test/govspeak_attachments_image_test.rb
327
- - test/govspeak_attachments_test.rb
326
+ - test/with_deep_merge_test.rb
327
+ - test/govspeak_link_test.rb
328
328
  - test/test_helper.rb
329
- - test/govspeak_attachments_inline_test.rb
329
+ - test/html_validator_test.rb
330
+ - test/blockquote_extra_quote_remover_test.rb
330
331
  - test/html_sanitizer_test.rb
332
+ - test/govspeak_attachments_test.rb
331
333
  - test/govspeak_button_test.rb
332
- - test/with_deep_merge_test.rb
333
- - test/html_validator_test.rb
334
- - test/govspeak_test.rb
335
- - test/govspeak_link_test.rb
336
- - test/govspeak_contacts_test.rb
334
+ - test/govspeak_structured_headers_test.rb
337
335
  - test/presenters/h_card_presenter_test.rb
336
+ - test/govspeak_contacts_test.rb
337
+ - test/govspeak_attachments_inline_test.rb