govuk_publishing_components 25.3.0 → 25.6.0
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/app/assets/javascripts/govuk_publishing_components/analytics/track-click.js +15 -7
- data/app/assets/javascripts/govuk_publishing_components/components/cookie-banner.js +10 -6
- data/app/assets/javascripts/govuk_publishing_components/components/layout-super-navigation-header.js +3 -7
- data/app/assets/javascripts/govuk_publishing_components/modules.js +1 -1
- data/app/assets/stylesheets/component_guide/application.scss +0 -6
- data/app/assets/stylesheets/govuk_publishing_components/components/_cookie-banner.scss +4 -9
- data/app/assets/stylesheets/govuk_publishing_components/components/_layout-super-navigation-header.scss +22 -24
- data/app/assets/stylesheets/govuk_publishing_components/components/_step-by-step-nav-header.scss +2 -4
- data/app/views/govuk_publishing_components/components/_cookie_banner.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_image_card.html.erb +0 -1
- data/app/views/govuk_publishing_components/components/_layout_for_public.html.erb +5 -2
- data/app/views/govuk_publishing_components/components/docs/image_card.yml +9 -0
- data/lib/govuk_publishing_components/presenters/image_card_helper.rb +3 -2
- data/lib/govuk_publishing_components/presenters/public_layout_helper.rb +3 -0
- data/lib/govuk_publishing_components/version.rb +1 -1
- data/node_modules/govuk-frontend/govuk/all.js +61 -3
- data/node_modules/govuk-frontend/govuk/components/breadcrumbs/_index.scss +1 -0
- data/node_modules/govuk-frontend/govuk/components/button/_index.scss +10 -4
- data/node_modules/govuk-frontend/govuk/components/checkboxes/_index.scss +49 -34
- data/node_modules/govuk-frontend/govuk/components/checkboxes/checkboxes.js +61 -3
- data/node_modules/govuk-frontend/govuk/components/checkboxes/fixtures.json +122 -41
- data/node_modules/govuk-frontend/govuk/components/checkboxes/macro-options.json +12 -0
- data/node_modules/govuk-frontend/govuk/components/checkboxes/template.njk +37 -39
- data/node_modules/govuk-frontend/govuk/components/footer/_index.scss +22 -10
- data/node_modules/govuk-frontend/govuk/components/header/_index.scss +11 -7
- data/node_modules/govuk-frontend/govuk/components/header/fixtures.json +18 -18
- data/node_modules/govuk-frontend/govuk/components/header/template.njk +5 -11
- data/node_modules/govuk-frontend/govuk/components/input/_index.scss +4 -0
- data/node_modules/govuk-frontend/govuk/components/skip-link/_index.scss +2 -0
- data/node_modules/govuk-frontend/govuk/components/warning-text/_index.scss +0 -1
- data/node_modules/govuk-frontend/govuk/core/_template.scss +0 -1
- data/node_modules/govuk-frontend/govuk/helpers/_links.scss +6 -0
- data/node_modules/govuk-frontend/govuk/objects/_button-group.scss +9 -2
- data/node_modules/govuk-frontend/govuk/objects/_width-container.scss +4 -0
- data/node_modules/govuk-frontend/govuk/template.njk +1 -1
- data/node_modules/govuk-frontend/package.json +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b1b20d5bd22562106adb11d4dae477700ae7cf87c10e8113615ddccc43a57eee
|
4
|
+
data.tar.gz: 6c8cbab6a211c1d7192af9128ea910b9394702a7d369e1b48e29d74f541ce4a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 298e4ac11183bbd0dc6dd364c9d831143c5b94e92b65e3afccad59269c1515e683834db2e3af528f7c2416c78a644cbd61aba803b66e65335195f8bc1e4dfd76
|
7
|
+
data.tar.gz: 71429d6099fcc7465c2fef3092fb9b586f385c399e1f90a71470a433d91d2f25314ed53e10b543a683cb3c94c7b8bcb44a272c5a3e479faab9a8f581e9405902
|
@@ -10,38 +10,46 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
10
10
|
this.$module = $module[0]
|
11
11
|
this.$module.handleClick = this.handleClick.bind(this)
|
12
12
|
var trackLinksOnly = this.$module.hasAttribute('data-track-links-only')
|
13
|
+
var limitToElementClass = this.$module.getAttribute('data-limit-to-element-class')
|
13
14
|
|
14
15
|
var that = this
|
15
16
|
// add a listener to the whole element
|
16
17
|
this.$module.addEventListener('click', function (e) {
|
18
|
+
var target = e.target
|
17
19
|
if (!trackLinksOnly) {
|
18
|
-
that.$module.handleClick(
|
19
|
-
} else if (trackLinksOnly &&
|
20
|
-
|
20
|
+
that.$module.handleClick(target)
|
21
|
+
} else if (trackLinksOnly && target.tagName === 'A') {
|
22
|
+
if (!limitToElementClass) {
|
23
|
+
that.$module.handleClick(target)
|
24
|
+
} else if (limitToElementClass && target.closest('.' + limitToElementClass)) {
|
25
|
+
that.$module.handleClick(target)
|
26
|
+
}
|
21
27
|
}
|
22
28
|
})
|
23
29
|
}
|
24
30
|
|
25
31
|
GemTrackClick.prototype.handleClick = function (target) {
|
26
32
|
var options = { transport: 'beacon' }
|
27
|
-
var
|
33
|
+
var linkUrl
|
28
34
|
|
29
35
|
// if clicked element hasn't got the right attributes, look for a parent that matches
|
30
36
|
if (!target.hasAttribute('data-track-category') && !target.hasAttribute('data-track-action')) {
|
31
|
-
|
37
|
+
linkUrl = target.getAttribute('href')
|
32
38
|
target = target.closest('[data-track-category][data-track-action]')
|
33
39
|
}
|
34
40
|
|
35
41
|
if (target) {
|
36
42
|
var category = target.getAttribute('data-track-category')
|
37
43
|
var action = target.getAttribute('data-track-action')
|
38
|
-
var label = target.getAttribute('data-track-label')
|
44
|
+
var label = target.getAttribute('data-track-label') || linkUrl
|
39
45
|
var value = target.getAttribute('data-track-value')
|
40
46
|
var dimension = target.getAttribute('data-track-dimension')
|
41
47
|
var dimensionIndex = target.getAttribute('data-track-dimension-index')
|
42
48
|
var extraOptions = target.getAttribute('data-track-options')
|
43
49
|
|
44
|
-
|
50
|
+
if (label) {
|
51
|
+
options.label = label
|
52
|
+
}
|
45
53
|
|
46
54
|
if (value) {
|
47
55
|
options.value = value
|
@@ -27,11 +27,13 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
27
27
|
|
28
28
|
this.$acceptCookiesButton = this.$module.querySelector('button[data-accept-cookies]')
|
29
29
|
if (this.$acceptCookiesButton) {
|
30
|
+
this.$acceptCookiesButton.style.display = 'block'
|
30
31
|
this.$acceptCookiesButton.addEventListener('click', this.$module.setCookieConsent)
|
31
32
|
}
|
32
33
|
|
33
34
|
this.$rejectCookiesButton = this.$module.querySelector('button[data-reject-cookies]')
|
34
35
|
if (this.$rejectCookiesButton) {
|
36
|
+
this.$rejectCookiesButton.style.display = 'block'
|
35
37
|
this.$rejectCookiesButton.addEventListener('click', this.$module.rejectCookieConsent)
|
36
38
|
}
|
37
39
|
|
@@ -44,7 +46,7 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
44
46
|
var shouldHaveCookieMessage = (this.$module && window.GOVUK.cookie('cookies_preferences_set') !== 'true')
|
45
47
|
|
46
48
|
if (shouldHaveCookieMessage) {
|
47
|
-
this.$module.
|
49
|
+
this.$module.style.display = 'block'
|
48
50
|
|
49
51
|
// Set the default consent cookie if it isn't already present
|
50
52
|
if (!window.GOVUK.cookie('cookies_policy')) {
|
@@ -53,16 +55,17 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
53
55
|
|
54
56
|
window.GOVUK.deleteUnconsentedCookies()
|
55
57
|
} else {
|
56
|
-
this.$module.
|
58
|
+
this.$module.style.display = 'none'
|
57
59
|
}
|
58
60
|
} else {
|
59
|
-
this.$module.
|
61
|
+
this.$module.style.display = 'none'
|
60
62
|
}
|
61
63
|
}
|
62
64
|
|
63
65
|
CookieBanner.prototype.hideCookieMessage = function (event) {
|
64
66
|
if (this.$module) {
|
65
|
-
this.$module.
|
67
|
+
this.$module.hidden = true
|
68
|
+
this.$module.style.display = 'none'
|
66
69
|
window.GOVUK.cookie('cookies_preferences_set', 'true', { days: 365 })
|
67
70
|
}
|
68
71
|
|
@@ -98,8 +101,9 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
98
101
|
CookieBanner.prototype.showConfirmationMessage = function () {
|
99
102
|
this.$cookieBannerMainContent = document.querySelector('.js-banner-wrapper')
|
100
103
|
|
101
|
-
this.$cookieBannerMainContent.
|
102
|
-
this.$module.cookieBannerConfirmationMessage.
|
104
|
+
this.$cookieBannerMainContent.hidden = true
|
105
|
+
this.$module.cookieBannerConfirmationMessage.style.display = 'block'
|
106
|
+
this.$module.cookieBannerConfirmationMessage.hidden = false
|
103
107
|
}
|
104
108
|
|
105
109
|
CookieBanner.prototype.isInCookiesPage = function () {
|
data/app/assets/javascripts/govuk_publishing_components/components/layout-super-navigation-header.js
CHANGED
@@ -155,10 +155,6 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
155
155
|
}
|
156
156
|
|
157
157
|
this.$module.style.marginBottom = '0'
|
158
|
-
|
159
|
-
window.removeEventListener('resize', this.resizeHandler, { passive: true })
|
160
|
-
|
161
|
-
this.lastWindowSize = this.windowSize()
|
162
158
|
}
|
163
159
|
|
164
160
|
// Hide the navigation toggle button and show the navigation submenu:
|
@@ -166,10 +162,10 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
166
162
|
this.$navigationToggle.setAttribute('hidden', 'hidden')
|
167
163
|
this.$navigationMenu.removeAttribute('hidden')
|
168
164
|
|
169
|
-
|
170
|
-
|
171
|
-
this.lastWindowSize = this.windowSize()
|
165
|
+
this.resizeHandler()
|
172
166
|
}
|
167
|
+
|
168
|
+
this.lastWindowSize = this.windowSize()
|
173
169
|
}
|
174
170
|
|
175
171
|
SuperNavigationMegaMenu.prototype.buttonHandler = function (event) {
|
@@ -1,10 +1,9 @@
|
|
1
1
|
@import "govuk/components/cookie-banner/cookie-banner";
|
2
2
|
$govuk-cookie-banner-background: govuk-colour("light-grey", "grey-4");
|
3
3
|
|
4
|
-
.
|
5
|
-
|
6
|
-
|
7
|
-
display: none;
|
4
|
+
.js-enabled {
|
5
|
+
.gem-c-cookie-banner {
|
6
|
+
display: none; // shown with JS, always on for non-JS
|
8
7
|
}
|
9
8
|
}
|
10
9
|
|
@@ -15,13 +14,9 @@ $govuk-cookie-banner-background: govuk-colour("light-grey", "grey-4");
|
|
15
14
|
// can't be used without js so implement there
|
16
15
|
.gem-c-cookie-banner .gem-c-button {
|
17
16
|
display: none;
|
18
|
-
|
19
|
-
.js-enabled & {
|
20
|
-
display: block;
|
21
|
-
}
|
22
17
|
}
|
23
18
|
|
24
|
-
.gem-c-cookie-banner__confirmation
|
19
|
+
.gem-c-cookie-banner__confirmation {
|
25
20
|
display: none;
|
26
21
|
position: relative;
|
27
22
|
padding: govuk-spacing(1);
|
@@ -269,7 +269,11 @@ $search-icon-size: 20px;
|
|
269
269
|
color: $govuk-link-colour;
|
270
270
|
|
271
271
|
&:hover {
|
272
|
-
color: govuk-colour
|
272
|
+
color: $govuk-link-hover-colour;
|
273
|
+
|
274
|
+
@include govuk-media-query($from: "desktop") {
|
275
|
+
color: govuk-colour("mid-grey");
|
276
|
+
}
|
273
277
|
}
|
274
278
|
|
275
279
|
&:focus {
|
@@ -358,6 +362,10 @@ $search-icon-size: 20px;
|
|
358
362
|
position: absolute;
|
359
363
|
right: 45px;
|
360
364
|
|
365
|
+
&.gem-c-layout-super-navigation-header__open-button {
|
366
|
+
border-top-color: govuk-colour("black");
|
367
|
+
}
|
368
|
+
|
361
369
|
@include govuk-media-query($from: 360px) {
|
362
370
|
&:before {
|
363
371
|
@include chevron("white");
|
@@ -388,8 +396,19 @@ $search-icon-size: 20px;
|
|
388
396
|
position: absolute;
|
389
397
|
right: (0 - govuk-spacing(3));
|
390
398
|
|
391
|
-
&:
|
392
|
-
|
399
|
+
&:after {
|
400
|
+
background-color: $govuk-link-colour;
|
401
|
+
content: " ";
|
402
|
+
left: 0;
|
403
|
+
right: 0;
|
404
|
+
}
|
405
|
+
|
406
|
+
&:not(.gem-c-layout-super-navigation-header__open-button):focus {
|
407
|
+
&:hover,
|
408
|
+
&:after {
|
409
|
+
background-color: $govuk-focus-colour;
|
410
|
+
border-top-color: $govuk-focus-colour;
|
411
|
+
}
|
393
412
|
}
|
394
413
|
|
395
414
|
@include govuk-media-query($from: 360px) {
|
@@ -405,22 +424,6 @@ $search-icon-size: 20px;
|
|
405
424
|
position: relative;
|
406
425
|
float: right;
|
407
426
|
|
408
|
-
&:not(.gem-c-layout-super-navigation-header__open-button):hover {
|
409
|
-
background: none;
|
410
|
-
color: govuk-colour("light-grey");
|
411
|
-
|
412
|
-
&:after {
|
413
|
-
content: " ";
|
414
|
-
left: 0;
|
415
|
-
right: 0;
|
416
|
-
}
|
417
|
-
}
|
418
|
-
|
419
|
-
&:focus:hover:after,
|
420
|
-
&:after {
|
421
|
-
content: none;
|
422
|
-
}
|
423
|
-
|
424
427
|
&.gem-c-layout-super-navigation-header__open-button {
|
425
428
|
border-top-color: govuk-colour("black");
|
426
429
|
|
@@ -486,7 +489,6 @@ $search-icon-size: 20px;
|
|
486
489
|
|
487
490
|
&:focus {
|
488
491
|
color: $govuk-focus-text-colour;
|
489
|
-
// border-color: $govuk-focus-text-colour;
|
490
492
|
|
491
493
|
&:after {
|
492
494
|
background-color: $govuk-focus-text-colour;
|
@@ -501,10 +503,6 @@ $search-icon-size: 20px;
|
|
501
503
|
&.gem-c-layout-super-navigation-header__open-button {
|
502
504
|
border-top-color: govuk-colour("black");
|
503
505
|
|
504
|
-
&:focus {
|
505
|
-
border-top-color: $govuk-focus-colour;
|
506
|
-
}
|
507
|
-
|
508
506
|
&:before {
|
509
507
|
transform: translateY(20%) rotate(225deg);
|
510
508
|
}
|
data/app/assets/stylesheets/govuk_publishing_components/components/_step-by-step-nav-header.scss
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
.gem-c-step-nav-header {
|
2
|
+
@include govuk-font(24, $weight: bold);
|
2
3
|
@include govuk-text-colour;
|
4
|
+
|
3
5
|
position: relative;
|
4
6
|
padding: 10px;
|
5
7
|
background: govuk-colour("light-grey", $legacy: "grey-4");
|
@@ -15,7 +17,3 @@
|
|
15
17
|
@include govuk-font(19, $weight: bold);
|
16
18
|
display: block;
|
17
19
|
}
|
18
|
-
|
19
|
-
.gem-c-step-nav-header__title {
|
20
|
-
@include govuk-font(24, $weight: bold, $line-height: 1);
|
21
|
-
}
|
@@ -29,7 +29,7 @@
|
|
29
29
|
css_classes = %w(gem-c-cookie-banner govuk-clearfix)
|
30
30
|
css_classes << "gem-c-cookie-banner--services" if services_cookies
|
31
31
|
%>
|
32
|
-
<div id="<%= id %>" class="<%= css_classes.join(' ') %>" data-module="cookie-banner" role="region" aria-label="cookie banner" data-nosnippet
|
32
|
+
<div id="<%= id %>" class="<%= css_classes.join(' ') %>" data-module="cookie-banner" role="region" aria-label="cookie banner" data-nosnippet>
|
33
33
|
<div class="govuk-cookie-banner js-banner-wrapper" role="region" aria-label="<%= title %>">
|
34
34
|
<div class="gem-c-cookie-banner__message govuk-cookie-banner__message govuk-width-container">
|
35
35
|
<div class="govuk-grid-row">
|
@@ -11,6 +11,7 @@
|
|
11
11
|
omit_header ||= false
|
12
12
|
product_name ||= nil
|
13
13
|
show_explore_header ||= false
|
14
|
+
draft_watermark ||= false
|
14
15
|
show_search = local_assigns.include?(:show_search) ? local_assigns[:show_search] : true
|
15
16
|
title ||= "GOV.UK - The best place to find government services and information"
|
16
17
|
|
@@ -39,6 +40,8 @@
|
|
39
40
|
# when a) there's content for the emergency or global banner *and* b) when using
|
40
41
|
# the contrained width layout.
|
41
42
|
blue_bar_dedupe = !full_width && global_bar.present?
|
43
|
+
body_css_classes = %w(gem-c-layout-for-public govuk-template__body)
|
44
|
+
body_css_classes << "draft" if draft_watermark
|
42
45
|
-%>
|
43
46
|
<!DOCTYPE html>
|
44
47
|
<!--[if lt IE 9]><html class="lte-ie8" lang="<%= html_lang %>"><![endif]-->
|
@@ -72,7 +75,7 @@
|
|
72
75
|
|
73
76
|
<%= yield :head %>
|
74
77
|
</head>
|
75
|
-
|
78
|
+
<%= tag.body class: body_css_classes do %>
|
76
79
|
<script>
|
77
80
|
document.body.className = ((document.body.className) ? document.body.className + ' js-enabled' : 'js-enabled');
|
78
81
|
</script>
|
@@ -147,5 +150,5 @@
|
|
147
150
|
} %>
|
148
151
|
<% end %>
|
149
152
|
<%= javascript_include_tag 'application' %>
|
150
|
-
|
153
|
+
<% end %>
|
151
154
|
</html>
|
@@ -35,6 +35,15 @@ examples:
|
|
35
35
|
image_alt: "some meaningful alt text please"
|
36
36
|
heading_text: "I am not a heading"
|
37
37
|
heading_level: 0
|
38
|
+
with_lazy_loading:
|
39
|
+
description: The image can have an attribute of lazy loading. Defaults to auto if not passed.
|
40
|
+
data:
|
41
|
+
href: "/really-not-a-page"
|
42
|
+
image_src: "https://assets.publishing.service.gov.uk/government/uploads/system/uploads/feature/image/62756/s300_courts-of-justice.JPG"
|
43
|
+
image_alt: "some meaningful alt text please"
|
44
|
+
image_loading: "lazy"
|
45
|
+
heading_text: "I am not a heading"
|
46
|
+
heading_level: 0
|
38
47
|
with_different_link_size:
|
39
48
|
description: |
|
40
49
|
Set a different font size for the link. Uses the [GOV.UK Frontend heading sizes](https://design-system.service.gov.uk/styles/typography/#headings) but defaults to 19px for legacy reasons. Valid options are `xl`, `l`, `m` and `s`.
|
@@ -4,7 +4,7 @@ module GovukPublishingComponents
|
|
4
4
|
include ActionView::Helpers
|
5
5
|
include ActionView::Context
|
6
6
|
|
7
|
-
attr_reader :href, :href_data_attributes, :extra_links, :large, :extra_links_no_indent, :heading_text, :metadata, :lang
|
7
|
+
attr_reader :href, :href_data_attributes, :extra_links, :large, :extra_links_no_indent, :heading_text, :metadata, :lang, :image_loading
|
8
8
|
|
9
9
|
def initialize(local_assigns)
|
10
10
|
@href = local_assigns[:href]
|
@@ -12,6 +12,7 @@ module GovukPublishingComponents
|
|
12
12
|
@extra_links = local_assigns[:extra_links] || []
|
13
13
|
@image_src = local_assigns[:image_src]
|
14
14
|
@image_alt = local_assigns[:image_alt] || ""
|
15
|
+
@image_loading = local_assigns[:image_loading] || "auto"
|
15
16
|
@context = local_assigns[:context]
|
16
17
|
@description = local_assigns[:description]
|
17
18
|
@large = local_assigns[:large]
|
@@ -35,7 +36,7 @@ module GovukPublishingComponents
|
|
35
36
|
def image
|
36
37
|
if @image_src
|
37
38
|
content_tag(:figure, class: "gem-c-image-card__image-wrapper") do
|
38
|
-
image_tag(@image_src, class: "gem-c-image-card__image", alt: @image_alt)
|
39
|
+
image_tag(@image_src, class: "gem-c-image-card__image", alt: @image_alt, loading: @image_loading)
|
39
40
|
end
|
40
41
|
end
|
41
42
|
end
|
@@ -1751,6 +1751,47 @@ Checkboxes.prototype.syncConditionalRevealWithInputState = function ($input) {
|
|
1751
1751
|
}
|
1752
1752
|
};
|
1753
1753
|
|
1754
|
+
/**
|
1755
|
+
* Uncheck other checkboxes
|
1756
|
+
*
|
1757
|
+
* Find any other checkbox inputs with the same name value, and uncheck them.
|
1758
|
+
* This is useful for when a “None of these" checkbox is checked.
|
1759
|
+
*/
|
1760
|
+
Checkboxes.prototype.unCheckAllInputsExcept = function ($input) {
|
1761
|
+
var allInputsWithSameName = document.querySelectorAll('input[type="checkbox"][name="' + $input.name + '"]');
|
1762
|
+
|
1763
|
+
nodeListForEach(allInputsWithSameName, function ($inputWithSameName) {
|
1764
|
+
var hasSameFormOwner = ($input.form === $inputWithSameName.form);
|
1765
|
+
if (hasSameFormOwner && $inputWithSameName !== $input) {
|
1766
|
+
$inputWithSameName.checked = false;
|
1767
|
+
}
|
1768
|
+
});
|
1769
|
+
|
1770
|
+
this.syncAllConditionalReveals();
|
1771
|
+
};
|
1772
|
+
|
1773
|
+
/**
|
1774
|
+
* Uncheck exclusive inputs
|
1775
|
+
*
|
1776
|
+
* Find any checkbox inputs with the same name value and the 'exclusive' behaviour,
|
1777
|
+
* and uncheck them. This helps prevent someone checking both a regular checkbox and a
|
1778
|
+
* "None of these" checkbox in the same fieldset.
|
1779
|
+
*/
|
1780
|
+
Checkboxes.prototype.unCheckExclusiveInputs = function ($input) {
|
1781
|
+
var allInputsWithSameNameAndExclusiveBehaviour = document.querySelectorAll(
|
1782
|
+
'input[data-behaviour="exclusive"][type="checkbox"][name="' + $input.name + '"]'
|
1783
|
+
);
|
1784
|
+
|
1785
|
+
nodeListForEach(allInputsWithSameNameAndExclusiveBehaviour, function ($exclusiveInput) {
|
1786
|
+
var hasSameFormOwner = ($input.form === $exclusiveInput.form);
|
1787
|
+
if (hasSameFormOwner) {
|
1788
|
+
$exclusiveInput.checked = false;
|
1789
|
+
}
|
1790
|
+
});
|
1791
|
+
|
1792
|
+
this.syncAllConditionalReveals();
|
1793
|
+
};
|
1794
|
+
|
1754
1795
|
/**
|
1755
1796
|
* Click event handler
|
1756
1797
|
*
|
@@ -1762,12 +1803,29 @@ Checkboxes.prototype.syncConditionalRevealWithInputState = function ($input) {
|
|
1762
1803
|
Checkboxes.prototype.handleClick = function (event) {
|
1763
1804
|
var $target = event.target;
|
1764
1805
|
|
1765
|
-
//
|
1766
|
-
|
1806
|
+
// Ignore clicks on things that aren't checkbox inputs
|
1807
|
+
if ($target.type !== 'checkbox') {
|
1808
|
+
return
|
1809
|
+
}
|
1810
|
+
|
1811
|
+
// If the checkbox conditionally-reveals some content, sync the state
|
1767
1812
|
var hasAriaControls = $target.getAttribute('aria-controls');
|
1768
|
-
if (
|
1813
|
+
if (hasAriaControls) {
|
1769
1814
|
this.syncConditionalRevealWithInputState($target);
|
1770
1815
|
}
|
1816
|
+
|
1817
|
+
// No further behaviour needed for unchecking
|
1818
|
+
if (!$target.checked) {
|
1819
|
+
return
|
1820
|
+
}
|
1821
|
+
|
1822
|
+
// Handle 'exclusive' checkbox behaviour (ie "None of these")
|
1823
|
+
var hasBehaviourExclusive = ($target.getAttribute('data-behaviour') === 'exclusive');
|
1824
|
+
if (hasBehaviourExclusive) {
|
1825
|
+
this.unCheckAllInputsExcept($target);
|
1826
|
+
} else {
|
1827
|
+
this.unCheckExclusiveInputs($target);
|
1828
|
+
}
|
1771
1829
|
};
|
1772
1830
|
|
1773
1831
|
(function(undefined) {
|