-
Notifications
You must be signed in to change notification settings - Fork 327
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Release v4.4.0 #3000
Merged
Merged
Release v4.4.0 #3000
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
govuk-design-system-ci
temporarily deployed
to
govuk-frontend-pr-3000
November 10, 2022 16:58
Inactive
Changes to distdiff --git a/dist/VERSION.txt b/dist/VERSION.txt
index 8e22a975..fdc66988 100644
--- a/dist/VERSION.txt
+++ b/dist/VERSION.txt
@@ -1 +1 @@
-4.3.1
+4.4.0
diff --git a/dist/govuk-frontend-4.3.1.min.css b/dist/govuk-frontend-4.4.0.min.css
similarity index 32%
rename from dist/govuk-frontend-4.3.1.min.css
rename to dist/govuk-frontend-4.4.0.min.css
index fb29d8bd..663193fd 100644
--- a/dist/govuk-frontend-4.3.1.min.css
+++ b/dist/govuk-frontend-4.4.0.min.css
@@ -2224,14 +2224,11 @@
}
}
+.govuk-fieldset__legend:not(.govuk-fieldset__legend--m):not(.govuk-fieldset__legend--l):not(.govuk-fieldset__legend--xl)+.govuk-hint,
.govuk-label:not(.govuk-label--m):not(.govuk-label--l):not(.govuk-label--xl)+.govuk-hint {
margin-bottom: 10px
}
-.govuk-fieldset__legend:not(.govuk-fieldset__legend--m):not(.govuk-fieldset__legend--l):not(.govuk-fieldset__legend--xl)+.govuk-hint {
- margin-bottom: 10px
-}
-
.govuk-fieldset__legend+.govuk-hint {
margin-top: -5px
}
@@ -2466,21 +2463,22 @@
}
.govuk-checkboxes__label:before {
- content: "";
- box-sizing: border-box;
- position: absolute;
top: 0;
left: 0;
width: 40px;
height: 40px;
- border: 2px solid;
- background: rgba(0, 0, 0, 0)
+ border: 2px solid
}
-.govuk-checkboxes__label:after {
+.govuk-checkboxes__label:after,
+.govuk-checkboxes__label:before {
content: "";
box-sizing: border-box;
position: absolute;
+ background: rgba(0, 0, 0, 0)
+}
+
+.govuk-checkboxes__label:after {
top: 11px;
left: 9px;
width: 23px;
@@ -2491,8 +2489,7 @@
border: solid;
border-width: 0 0 5px 5px;
border-top-color: rgba(0, 0, 0, 0);
- opacity: 0;
- background: rgba(0, 0, 0, 0)
+ opacity: 0
}
.govuk-checkboxes__hint {
@@ -2760,6 +2757,10 @@ screen and (forced-colors:active) {
}
}
+.govuk-character-count__message:after {
+ content: "\200B"
+}
+
.govuk-character-count__message--disabled {
visibility: hidden
}
@@ -4691,13 +4692,15 @@ only screen and (min-resolution:192dpi) {
min-width: 15px
}
-.govuk-pagination__link:after {
- content: "";
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0
+@media screen {
+ .govuk-pagination__link:after {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0
+ }
}
.govuk-pagination__link:active .govuk-pagination__link-title--decorated,
diff --git a/dist/govuk-frontend-4.3.1.min.js b/dist/govuk-frontend-4.4.0.min.js
similarity index 1%
rename from dist/govuk-frontend-4.3.1.min.js
rename to dist/govuk-frontend-4.4.0.min.js
index bd6c1c87..32d82fd7 100644
--- a/dist/govuk-frontend-4.3.1.min.js
+++ b/dist/govuk-frontend-4.4.0.min.js
@@ -3,90 +3,197 @@
}(this, function(t) {
"use strict";
- function s(t, e) {
+ function i(t, e) {
if (window.NodeList.prototype.forEach) return t.forEach(e);
for (var n = 0; n < t.length; n++) e.call(window, t[n], n, t)
}
- function n(t) {
- this.$module = t, this.moduleId = t.getAttribute("id"), this.$sections = t.querySelectorAll(".govuk-accordion__section"), this.$showAllButton = "", this.browserSupportsSessionStorage = e.checkForSessionStorage(), this.controlsClass = "govuk-accordion__controls", this.showAllClass = "govuk-accordion__show-all", this.showAllTextClass = "govuk-accordion__show-all-text", this.sectionExpandedClass = "govuk-accordion__section--expanded", this.sectionButtonClass = "govuk-accordion__section-button", this.sectionHeaderClass = "govuk-accordion__section-header", this.sectionHeadingClass = "govuk-accordion__section-heading", this.sectionHeadingTextClass = "govuk-accordion__section-heading-text", this.sectionHeadingTextFocusClass = "govuk-accordion__section-heading-text-focus", this.sectionShowHideToggleClass = "govuk-accordion__section-toggle", this.sectionShowHideToggleFocusClass = "govuk-accordion__section-toggle-focus", this.sectionShowHideTextClass = "govuk-accordion__section-toggle-text", this.upChevronIconClass = "govuk-accordion-nav__chevron", this.downChevronIconClass = "govuk-accordion-nav__chevron--down", this.sectionSummaryClass = "govuk-accordion__section-summary", this.sectionSummaryFocusClass = "govuk-accordion__section-summary-focus"
- }(function(t) {
- var a, l, c, u;
- "defineProperty" in Object && function() {
- try {
- return Object.defineProperty({}, "test", {
- value: 42
- }), !0
- } catch (t) {
- return !1
+ function s() {
+ for (var t = {}, e = 0; e < arguments.length; e++) {
+ var n, o = function(t) {
+ var i = {},
+ s = function(t, e) {
+ for (var n in t) {
+ var o;
+ Object.prototype.hasOwnProperty.call(t, n) && (o = e ? e + "." + n : n, "object" == typeof(n = t[n]) ? s(n, o) : i[o] = n)
+ }
+ };
+ return s(t), i
+ }(arguments[e]);
+ for (n in o) Object.prototype.hasOwnProperty.call(o, n) && (t[n] = o[n])
+ }
+ return t
+ }
+
+ function r(t, e) {
+ if (!t || "object" != typeof t) throw new Error('Provide a `configObject` of type "object".');
+ if (!e || "string" != typeof e) throw new Error('Provide a `namespace` of type "string" to filter the `configObject` by.');
+ var n, o = {};
+ for (n in t) {
+ var i = n.split(".");
+ Object.prototype.hasOwnProperty.call(t, n) && i[0] === e && (1 < i.length && i.shift(), o[i.join(".")] = t[n])
+ }
+ return o
+ }
+
+ function a(t, e) {
+ this.translations = t || {}, this.locale = e && e.locale || document.documentElement.lang || "en"
+ }
+
+ function l(t) {
+ var e, n, o, i = {};
+ for (e in t) i[e] = (n = t[e], o = void 0, "string" != typeof n ? n : "true" === (o = n.trim()) || "false" !== o && (0 < o.length && isFinite(o) ? Number(o) : n));
+ return i
+ }
+ a.prototype.t = function(t, e) {
+ if (!t) throw new Error("i18n: lookup key missing");
+ if ((t = e && "undefined" != typeof e.count ? t + "." + this.getPluralSuffix(t, e.count) : t) in this.translations) {
+ var n = this.translations[t];
+ if (n.match(/%{(.\S+)}/)) {
+ if (e) return this.replacePlaceholders(n, e);
+ throw new Error("i18n: cannot replace placeholders in string if no option data provided")
+ }
+ return n
}
- }() || (a = Object.defineProperty, l = Object.prototype.hasOwnProperty("__defineGetter__"), c = "Getters & setters cannot be defined on this javascript engine", u = "A property cannot both have accessors and be writable or have a value", Object.defineProperty = function(t, e, n) {
- if (a && (t === window || t === document || t === Element.prototype || t instanceof Element)) return a(t, e, n);
- if (null === t || !(t instanceof Object || "object" == typeof t)) throw new TypeError("Object.defineProperty called on non-object");
- if (!(n instanceof Object)) throw new TypeError("Property description must be an object");
- var o = String(e),
- i = "value" in n || "writable" in n,
- s = "get" in n && typeof n.get,
- r = "set" in n && typeof n.set;
- if (s) {
- if ("function" !== s) throw new TypeError("Getter must be a function");
- if (!l) throw new TypeError(c);
- if (i) throw new TypeError(u);
- Object.__defineGetter__.call(t, o, n.get)
- } else t[o] = n.value;
- if (r) {
- if ("function" !== r) throw new TypeError("Setter must be a function");
- if (!l) throw new TypeError(c);
- if (i) throw new TypeError(u);
- Object.__defineSetter__.call(t, o, n.set)
+ return t
+ }, a.prototype.replacePlaceholders = function(t, n) {
+ var o;
+ return this.hasIntlNumberFormatSupport() && (o = new Intl.NumberFormat(this.locale)), t.replace(/%{(.\S+)}/g, function(t, e) {
+ if (Object.prototype.hasOwnProperty.call(n, e)) return !1 === (e = n[e]) ? "" : "number" == typeof e && o ? o.format(e) : e;
+ throw new Error("i18n: no data found to replace " + t + " placeholder in string")
+ })
+ }, a.prototype.hasIntlPluralRulesSupport = function() {
+ return Boolean(window.Intl && "PluralRules" in window.Intl && Intl.PluralRules.supportedLocalesOf(this.locale).length)
+ }, a.prototype.hasIntlNumberFormatSupport = function() {
+ return Boolean(window.Intl && "NumberFormat" in window.Intl && Intl.NumberFormat.supportedLocalesOf(this.locale).length)
+ }, a.prototype.getPluralSuffix = function(t, e) {
+ if (e = Number(e), !isFinite(e)) return "other";
+ e = this.hasIntlPluralRulesSupport() ? new Intl.PluralRules(this.locale).select(e) : this.selectPluralFormUsingFallbackRules(e);
+ if (t + "." + e in this.translations) return e;
+ if (t + ".other" in this.translations) return console && "warn" in console && console.warn('i18n: Missing plural form ".' + e + '" for "' + this.locale + '" locale. Falling back to ".other".'), "other";
+ throw new Error('i18n: Plural form ".other" is required for "' + this.locale + '" locale')
+ }, a.prototype.selectPluralFormUsingFallbackRules = function(t) {
+ t = Math.abs(Math.floor(t));
+ var e = this.getPluralRulesForLocale();
+ return e ? a.pluralRules[e](t) : "other"
+ }, a.prototype.getPluralRulesForLocale = function() {
+ var t, e = this.locale,
+ n = e.split("-")[0];
+ for (t in a.pluralRulesMap)
+ if (Object.prototype.hasOwnProperty.call(a.pluralRulesMap, t))
+ for (var o = a.pluralRulesMap[t], i = 0; i < o.length; i++)
+ if (o[i] === e || o[i] === n) return t
+ }, a.pluralRulesMap = {
+ arabic: ["ar"],
+ chinese: ["my", "zh", "id", "ja", "jv", "ko", "ms", "th", "vi"],
+ french: ["hy", "bn", "fr", "gu", "hi", "fa", "pa", "zu"],
+ german: ["af", "sq", "az", "eu", "bg", "ca", "da", "nl", "en", "et", "fi", "ka", "de", "el", "hu", "lb", "no", "so", "sw", "sv", "ta", "te", "tr", "ur"],
+ irish: ["ga"],
+ russian: ["ru", "uk"],
+ scottish: ["gd"],
+ spanish: ["pt-PT", "it", "es"],
+ welsh: ["cy"]
+ }, a.pluralRules = {
+ arabic: function(t) {
+ return 0 === t ? "zero" : 1 === t ? "one" : 2 === t ? "two" : 3 <= t % 100 && t % 100 <= 10 ? "few" : 11 <= t % 100 && t % 100 <= 99 ? "many" : "other"
+ },
+ chinese: function() {
+ return "other"
+ },
+ french: function(t) {
+ return 0 === t || 1 === t ? "one" : "other"
+ },
+ german: function(t) {
+ return 1 === t ? "one" : "other"
+ },
+ irish: function(t) {
+ return 1 === t ? "one" : 2 === t ? "two" : 3 <= t && t <= 6 ? "few" : 7 <= t && t <= 10 ? "many" : "other"
+ },
+ russian: function(t) {
+ var t = t % 100,
+ e = t % 10;
+ return 1 == e && 11 != t ? "one" : 2 <= e && e <= 4 && !(12 <= t && t <= 14) ? "few" : 0 == e || 5 <= e && e <= 9 || 11 <= t && t <= 14 ? "many" : "other"
+ },
+ scottish: function(t) {
+ return 1 === t || 11 === t ? "one" : 2 === t || 12 === t ? "two" : 3 <= t && t <= 10 || 13 <= t && t <= 19 ? "few" : "other"
+ },
+ spanish: function(t) {
+ return 1 === t ? "one" : t % 1e6 == 0 && 0 !== t ? "many" : "other"
+ },
+ welsh: function(t) {
+ return 0 === t ? "zero" : 1 === t ? "one" : 2 === t ? "two" : 3 === t ? "few" : 6 === t ? "many" : "other"
}
- return "value" in n && (t[o] = n.value), t
- })
- }).call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {}),
+ },
+ function(t) {
+ var r, a, l, c;
+ "defineProperty" in Object && function() {
+ try {
+ return Object.defineProperty({}, "test", {
+ value: 42
+ }), !0
+ } catch (t) {
+ return !1
+ }
+ }() || (r = Object.defineProperty, a = Object.prototype.hasOwnProperty("__defineGetter__"), l = "Getters & setters cannot be defined on this javascript engine", c = "A property cannot both have accessors and be writable or have a value", Object.defineProperty = function(t, e, n) {
+ if (r && (t === window || t === document || t === Element.prototype || t instanceof Element)) return r(t, e, n);
+ if (null === t || !(t instanceof Object || "object" == typeof t)) throw new TypeError("Object.defineProperty called on non-object");
+ if (!(n instanceof Object)) throw new TypeError("Property description must be an object");
+ var e = String(e),
+ o = "value" in n || "writable" in n,
+ i = "get" in n && typeof n.get,
+ s = "set" in n && typeof n.set;
+ if (i) {
+ if ("function" !== i) throw new TypeError("Getter must be a function");
+ if (!a) throw new TypeError(l);
+ if (o) throw new TypeError(c);
+ Object.__defineGetter__.call(t, e, n.get)
+ } else t[e] = n.value;
+ if (s) {
+ if ("function" !== s) throw new TypeError("Setter must be a function");
+ if (!a) throw new TypeError(l);
+ if (o) throw new TypeError(c);
+ Object.__defineSetter__.call(t, e, n.set)
+ }
+ return "value" in n && (t[e] = n.value), t
+ })
+ }.call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {}),
function(t) {
"bind" in Function.prototype || Object.defineProperty(Function.prototype, "bind", {
value: function(e) {
- var n, t = Array,
- o = Object,
- i = o.prototype,
- s = t.prototype,
- r = function r() {},
- a = i.toString,
- l = "function" == typeof Symbol && "symbol" == typeof Symbol.toStringTag,
- c = Function.prototype.toString,
- u = function u(t) {
+ var t = Array,
+ n = Object,
+ o = n.prototype,
+ t = t.prototype,
+ i = function i() {},
+ s = o.toString,
+ r = "function" == typeof Symbol && "symbol" == typeof Symbol.toStringTag,
+ a = Function.prototype.toString,
+ l = function l(t) {
try {
- return c.call(t), !0
+ return a.call(t), !0
} catch (e) {
return !1
}
- };
- n = function n(t) {
- if ("function" != typeof t) return !1;
- if (l) return u(t);
- var e = a.call(t);
- return "[object Function]" === e || "[object GeneratorFunction]" === e
- };
- var d = s.slice,
- h = s.concat,
- p = s.push,
- m = Math.max,
- f = this;
- if (!n(f)) throw new TypeError("Function.prototype.bind called on incompatible " + f);
- for (var b, v = d.call(arguments, 1), y = m(0, f.length - v.length), g = [], w = 0; w < y; w++) p.call(g, "$" + w);
- return b = Function("binder", "return function (" + g.join(",") + "){ return binder.apply(this, arguments); }")(function() {
- if (this instanceof b) {
- var t = f.apply(this, h.call(v, d.call(arguments)));
- return o(t) === t ? t : this
- }
- return f.apply(e, h.call(v, d.call(arguments)))
- }), f.prototype && (r.prototype = f.prototype, b.prototype = new r, r.prototype = null), b
+ },
+ c = t.slice,
+ u = t.concat,
+ d = t.push,
+ o = Math.max,
+ h = this;
+ if (! function g(t) {
+ return "function" == typeof t && (r ? l(t) : "[object Function]" === (t = s.call(t)) || "[object GeneratorFunction]" === t)
+ }(h)) throw new TypeError("Function.prototype.bind called on incompatible " + h);
+ for (var p, f = c.call(arguments, 1), m = o(0, h.length - f.length), b = [], y = 0; y < m; y++) d.call(b, "$" + y);
+ return p = Function("binder", "return function (" + b.join(",") + "){ return binder.apply(this, arguments); }")(function() {
+ var t;
+ return this instanceof p ? (t = h.apply(this, u.call(f, c.call(arguments))), n(t) === t ? t : this) : h.apply(e, u.call(f, c.call(arguments)))
+ }), h.prototype && (i.prototype = h.prototype, p.prototype = new i, i.prototype = null), p
}
})
}.call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {}),
function(o) {
- var t, e, n;
- "DOMTokenList" in this && (!("classList" in (t = document.createElement("x"))) || !t.classList.toggle("x", !1) && !t.className) || ("DOMTokenList" in (e = this) && e.DOMTokenList && (!document.createElementNS || !document.createElementNS("http://www.w3.org/2000/svg", "svg") || document.createElementNS("http://www.w3.org/2000/svg", "svg").classList instanceof DOMTokenList) || (e.DOMTokenList = function() {
+ var t, i, s;
+ (!("DOMTokenList" in this) || "classList" in (t = document.createElement("x")) && (t.classList.toggle("x", !1) || t.className)) && ("DOMTokenList" in (t = this) && t.DOMTokenList && (!document.createElementNS || !document.createElementNS("http://www.w3.org/2000/svg", "svg") || document.createElementNS("http://www.w3.org/2000/svg", "svg").classList instanceof DOMTokenList) || (t.DOMTokenList = function() {
var i = !0,
n = function(t, e, n, o) {
Object.defineProperty ? Object.defineProperty(t, e, {
@@ -120,7 +227,7 @@
if (n.length)
for (e = 0; e < n.length; ++e)
if (o.test(n[e])) throw (t = new SyntaxError('String "' + n[e] + '" contains an invalid character')).code = 5, t.name = "InvalidCharacterError", t;
- for ("" === (a = "object" == typeof i[s] ? ("" + i[s].baseVal).replace(/^\s+|\s+$/g, "").split(o) : ("" + i[s]).replace(/^\s+|\s+$/g, "").split(o))[0] && (a = []), l = {}, e = 0; e < a.length; ++e) l[a[e]] = !0;
+ for ("" === (a = ("object" == typeof i[s] ? "" + i[s].baseVal : "" + i[s]).replace(/^\s+|\s+$/g, "").split(o))[0] && (a = []), l = {}, e = 0; e < a.length; ++e) l[a[e]] = !0;
c = a.length, u()
};
return d(), n(r, "length", function() {
@@ -144,71 +251,46 @@
return d.apply(r, [t]), o !== e ? e ? (r.add(t), !0) : (r.remove(t), !1) : l[t] ? (r.remove(t), !1) : (r.add(t), !0)
}, r
}
- }()), "classList" in (n = document.createElement("span")) && (n.classList.toggle("x", !1), n.classList.contains("x") && (n.classList.constructor.prototype.toggle = function(t) {
- var e = arguments[1];
- if (e !== o) return this[(e = !!e) ? "add" : "remove"](t), e;
- var n = !this.contains(t);
- return this[n ? "add" : "remove"](t), n
- })), function() {
- var t = document.createElement("span");
- if ("classList" in t && (t.classList.add("a", "b"), !t.classList.contains("b"))) {
- var o = t.classList.constructor.prototype.add;
- t.classList.constructor.prototype.add = function() {
- for (var t = arguments, e = arguments.length, n = 0; n < e; n++) o.call(this, t[n])
- }
- }
- }(), function() {
- var t = document.createElement("span");
- if ("classList" in t && (t.classList.add("a"), t.classList.add("b"), t.classList.remove("a", "b"), t.classList.contains("b"))) {
- var o = t.classList.constructor.prototype.remove;
- t.classList.constructor.prototype.remove = function() {
- for (var t = arguments, e = arguments.length, n = 0; n < e; n++) o.call(this, t[n])
- }
- }
- }())
+ }()), "classList" in (t = document.createElement("span")) && (t.classList.toggle("x", !1), t.classList.contains("x")) && (t.classList.constructor.prototype.toggle = function(t) {
+ var e, n = arguments[1];
+ return n === o ? (e = !this.contains(t), this[e ? "add" : "remove"](t), e) : (this[(n = !!n) ? "add" : "remove"](t), n)
+ }), "classList" in (t = document.createElement("span")) && (t.classList.add("a", "b"), t.classList.contains("b") || (i = t.classList.constructor.prototype.add, t.classList.constructor.prototype.add = function() {
+ for (var t = arguments, e = arguments.length, n = 0; n < e; n++) i.call(this, t[n])
+ })), "classList" in (t = document.createElement("span")) && (t.classList.add("a"), t.classList.add("b"), t.classList.remove("a", "b"), t.classList.contains("b"))) && (s = t.classList.constructor.prototype.remove, t.classList.constructor.prototype.remove = function() {
+ for (var t = arguments, e = arguments.length, n = 0; n < e; n++) s.call(this, t[n])
+ })
}.call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {}),
function(t) {
"Document" in this || "undefined" == typeof WorkerGlobalScope && "function" != typeof importScripts && (this.HTMLDocument ? this.Document = this.HTMLDocument : (this.Document = this.HTMLDocument = document.constructor = new Function("return function Document() {}")(), this.Document.prototype = document))
}.call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {}),
function(t) {
- "Element" in this && "HTMLElement" in this || function() {
- if (!window.Element || window.HTMLElement) {
- window.Element = window.HTMLElement = new Function("return function Element() {}")();
- var t, e = document.appendChild(document.createElement("body")),
- n = e.appendChild(document.createElement("iframe")).contentWindow.document,
- a = Element.prototype = n.appendChild(n.createElement("*")),
- l = {},
- c = function(t, e) {
- var n, o, i, s = t.childNodes || [],
- r = -1;
- if (1 === t.nodeType && t.constructor !== Element)
- for (n in t.constructor = Element, l) o = l[n], t[n] = o;
- for (; i = e && s[++r];) c(i, e);
- return t
- },
- u = document.getElementsByTagName("*"),
- o = document.createElement,
- i = 100;
- a.attachEvent("onpropertychange", function(t) {
- for (var e, n = t.propertyName, o = !l.hasOwnProperty(n), i = a[n], s = l[n], r = -1; e = u[++r];) 1 === e.nodeType && (!o && e[n] !== s || (e[n] = i));
- l[n] = i
- }), a.constructor = Element, a.hasAttribute || (a.hasAttribute = function(t) {
- return null !== this.getAttribute(t)
- }), s() || (document.onreadystatechange = s, t = setInterval(s, 25)), document.createElement = function(t) {
- var e = o(String(t).toLowerCase());
- return c(e)
- }, document.removeChild(e)
- } else window.HTMLElement = window.Element;
+ var e, n, a, l, c, u, o, i, s;
- function s() {
- return i-- || clearTimeout(t), !(!document.body || document.body.prototype || !/(complete|interactive)/.test(document.readyState)) && (c(document, !0), t && document.body.prototype && clearTimeout(t), !!document.body.prototype)
- }
- }()
+ function r() {
+ return s-- || clearTimeout(i), !(!document.body || document.body.prototype || !/(complete|interactive)/.test(document.readyState) || (c(document, !0), i && document.body.prototype && clearTimeout(i), !document.body.prototype))
+ }
+ "Element" in this && "HTMLElement" in this || (window.Element && !window.HTMLElement ? window.HTMLElement = window.Element : (window.Element = window.HTMLElement = new Function("return function Element() {}")(), n = (e = document.appendChild(document.createElement("body"))).appendChild(document.createElement("iframe")).contentWindow.document, a = Element.prototype = n.appendChild(n.createElement("*")), l = {}, c = function(t, e) {
+ var n, o, i, s = t.childNodes || [],
+ r = -1;
+ if (1 === t.nodeType && t.constructor !== Element)
+ for (n in t.constructor = Element, l) o = l[n], t[n] = o;
+ for (; i = e && s[++r];) c(i, e);
+ return t
+ }, u = document.getElementsByTagName("*"), o = document.createElement, s = 100, a.attachEvent("onpropertychange", function(t) {
+ for (var e, n = t.propertyName, o = !l.hasOwnProperty(n), i = a[n], s = l[n], r = -1; e = u[++r];) 1 !== e.nodeType || !o && e[n] !== s || (e[n] = i);
+ l[n] = i
+ }), a.constructor = Element, a.hasAttribute || (a.hasAttribute = function(t) {
+ return null !== this.getAttribute(t)
+ }), r() || (document.onreadystatechange = r, i = setInterval(r, 25)), document.createElement = function(t) {
+ t = o(String(t).toLowerCase());
+ return c(t)
+ }, document.removeChild(e)))
}.call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {}),
function(t) {
- var e;
- "document" in this && "classList" in document.documentElement && "Element" in this && "classList" in Element.prototype && ((e = document.createElement("span")).classList.add("a", "b"), e.classList.contains("b")) || function(t) {
- var u = !0,
+ var e = "document" in this && "classList" in document.documentElement && "Element" in this && "classList" in Element.prototype && ((e = document.createElement("span")).classList.add("a", "b"), e.classList.contains("b"));
+ if (!e) {
+ var n = this,
+ u = !0,
d = function(t, e, n, o) {
Object.defineProperty ? Object.defineProperty(t, e, {
configurable: !1 === u || !!o,
@@ -217,109 +299,145 @@
};
try {
d({}, "support")
- } catch (e) {
+ } catch (o) {
u = !1
}
var h = function(t, l, c) {
d(t.prototype, l, function() {
var t, e = this,
n = "__defineGetter__DEFINE_PROPERTY" + l;
- if (e[n]) return t;
- if (!(e[n] = !0) === u) {
- for (var o, i = h.mirror || document.createElement("div"), s = i.childNodes, r = s.length, a = 0; a < r; ++a)
- if (s[a]._R === e) {
- o = s[a];
- break
- } o = o || i.appendChild(document.createElement("div")), t = DOMTokenList.call(o, e, c)
- } else t = new DOMTokenList(e, c);
- return d(e, l, function() {
- return t
- }), delete e[n], t
+ if (!e[n]) {
+ if (!(e[n] = !0) === u) {
+ for (var o, i = h.mirror || document.createElement("div"), s = i.childNodes, r = s.length, a = 0; a < r; ++a)
+ if (s[a]._R === e) {
+ o = s[a];
+ break
+ } o = o || i.appendChild(document.createElement("div")), t = DOMTokenList.call(o, e, c)
+ } else t = new DOMTokenList(e, c);
+ d(e, l, function() {
+ return t
+ }), delete e[n]
+ }
+ return t
}, !0)
};
- h(t.Element, "classList", "className"), h(t.HTMLElement, "classList", "className"), h(t.HTMLLinkElement, "relList", "rel"), h(t.HTMLAnchorElement, "relList", "rel"), h(t.HTMLAreaElement, "relList", "rel")
- }(this)
- }.call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {}), n.prototype.init = function() {
- if (this.$module) {
- this.initControls(), this.initSectionHeaders();
- var t = this.checkIfAllSectionsOpen();
- this.updateShowAllButton(t)
- }
- }, n.prototype.initControls = function() {
- this.$showAllButton = document.createElement("button"), this.$showAllButton.setAttribute("type", "button"), this.$showAllButton.setAttribute("class", this.showAllClass), this.$showAllButton.setAttribute("aria-expanded", "false");
- var t = document.createElement("span");
- t.classList.add(this.upChevronIconClass), this.$showAllButton.appendChild(t);
- var e = document.createElement("div");
- e.setAttribute("class", this.controlsClass), e.appendChild(this.$showAllButton), this.$module.insertBefore(e, this.$module.firstChild);
- var n = document.createElement("span");
- n.classList.add(this.showAllTextClass), this.$showAllButton.appendChild(n), this.$showAllButton.addEventListener("click", this.onShowOrHideAllToggle.bind(this))
- }, n.prototype.initSectionHeaders = function() {
- s(this.$sections, function(t, e) {
- var n = t.querySelector("." + this.sectionHeaderClass);
- this.constructHeaderMarkup(n, e), this.setExpanded(this.isExpanded(t), t), n.addEventListener("click", this.onSectionToggle.bind(this, t)), this.setInitialState(t)
- }.bind(this))
- }, n.prototype.constructHeaderMarkup = function(t, e) {
- var n = t.querySelector("." + this.sectionButtonClass),
- o = t.querySelector("." + this.sectionHeadingClass),
- i = t.querySelector("." + this.sectionSummaryClass),
- s = document.createElement("button");
- s.setAttribute("type", "button"), s.setAttribute("aria-controls", this.moduleId + "-content-" + (e + 1));
- for (var r = 0; r < n.attributes.length; r++) {
- var a = n.attributes.item(r);
- "id" !== a.nodeName && s.setAttribute(a.nodeName, a.nodeValue)
+ h(n.Element, "classList", "className"), h(n.HTMLElement, "classList", "className"), h(n.HTMLLinkElement, "relList", "rel"), h(n.HTMLAnchorElement, "relList", "rel"), h(n.HTMLAreaElement, "relList", "rel")
}
- var l = document.createElement("span");
- l.classList.add(this.sectionHeadingTextClass), l.id = n.id;
- var c = document.createElement("span");
- c.classList.add(this.sectionHeadingTextFocusClass), l.appendChild(c), c.innerHTML = n.innerHTML;
- var u = document.createElement("span");
- u.classList.add(this.sectionShowHideToggleClass), u.setAttribute("data-nosnippet", "");
- var d = document.createElement("span");
- d.classList.add(this.sectionShowHideToggleFocusClass), u.appendChild(d);
- var h = document.createElement("span"),
- p = document.createElement("span");
- if (p.classList.add(this.upChevronIconClass), d.appendChild(p), h.classList.add(this.sectionShowHideTextClass), d.appendChild(h), s.appendChild(l), s.appendChild(this.getButtonPunctuationEl()), null != i) {
- var m = document.createElement("span"),
- f = document.createElement("span");
- f.classList.add(this.sectionSummaryFocusClass), m.appendChild(f);
- for (var b = 0, v = i.attributes.length; b < v; ++b) {
- var y = i.attributes.item(b).nodeName,
- g = i.attributes.item(b).nodeValue;
- m.setAttribute(y, g)
+ }.call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {}),
+ function(t) {
+ "trim" in String.prototype || (String.prototype.trim = function() {
+ return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "")
+ })
+ }.call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {}),
+ function(t) {
+ var e;
+ !!document.documentElement.dataset && ((e = document.createElement("div")).setAttribute("data-a-b", "c"), e.dataset) && "c" == e.dataset.aB || Object.defineProperty(Element.prototype, "dataset", {
+ get: function() {
+ for (var t = this.attributes, e = {}, n = 0; n < t.length; n++) {
+ var o, i, s = t[n];
+ s && s.name && /^data-\w[.\w-]*$/.test(s.name) && (o = s.name, s = s.value, i = o.substr(5).replace(/-./g, function(t) {
+ return t.charAt(1).toUpperCase()
+ }), "__defineGetter__" in Object.prototype && "__defineSetter__" in Object.prototype ? Object.defineProperty(e, i, {
+ enumerable: !0,
+ get: function() {
+ return this.value
+ }.bind({
+ value: s || ""
+ }),
+ set: function(t, e) {
+ void 0 !== e ? this.setAttribute(t, e) : this.removeAttribute(t)
+ }.bind(this, o)
+ }) : e[i] = s)
+ }
+ return e
}
- f.innerHTML = i.innerHTML, i.parentNode.replaceChild(m, i), s.appendChild(m), s.appendChild(this.getButtonPunctuationEl())
+ })
+ }.call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {});
+ var n = {
+ hideAllSections: "Hide all sections",
+ hideSection: "Hide",
+ hideSectionAriaLabel: "Hide this section",
+ showAllSections: "Show all sections",
+ showSection: "Show",
+ showSectionAriaLabel: "Show this section"
+ };
+
+ function o(t, e) {
+ this.$module = t, this.$sections = t.querySelectorAll(".govuk-accordion__section"), this.browserSupportsSessionStorage = c.checkForSessionStorage(), this.config = s({
+ i18n: n
+ }, e || {}, l(t.dataset)), this.i18n = new a(r(this.config, "i18n")), this.controlsClass = "govuk-accordion__controls", this.showAllClass = "govuk-accordion__show-all", this.showAllTextClass = "govuk-accordion__show-all-text", this.sectionExpandedClass = "govuk-accordion__section--expanded", this.sectionButtonClass = "govuk-accordion__section-button", this.sectionHeaderClass = "govuk-accordion__section-header", this.sectionHeadingClass = "govuk-accordion__section-heading", this.sectionHeadingTextClass = "govuk-accordion__section-heading-text", this.sectionHeadingTextFocusClass = "govuk-accordion__section-heading-text-focus", this.sectionShowHideToggleClass = "govuk-accordion__section-toggle", this.sectionShowHideToggleFocusClass = "govuk-accordion__section-toggle-focus", this.sectionShowHideTextClass = "govuk-accordion__section-toggle-text", this.upChevronIconClass = "govuk-accordion-nav__chevron", this.downChevronIconClass = "govuk-accordion-nav__chevron--down", this.sectionSummaryClass = "govuk-accordion__section-summary", this.sectionSummaryFocusClass = "govuk-accordion__section-summary-focus"
+ }
+ o.prototype.init = function() {
+ var t;
+ this.$module && (this.initControls(), this.initSectionHeaders(), t = this.checkIfAllSectionsOpen(), this.updateShowAllButton(t))
+ }, o.prototype.initControls = function() {
+ this.$showAllButton = document.createElement("button"), this.$showAllButton.setAttribute("type", "button"), this.$showAllButton.setAttribute("class", this.showAllClass), this.$showAllButton.setAttribute("aria-expanded", "false");
+ var t = document.createElement("span"),
+ t = (t.classList.add(this.upChevronIconClass), this.$showAllButton.appendChild(t), document.createElement("div")),
+ t = (t.setAttribute("class", this.controlsClass), t.appendChild(this.$showAllButton), this.$module.insertBefore(t, this.$module.firstChild), document.createElement("span"));
+ t.classList.add(this.showAllTextClass), this.$showAllButton.appendChild(t), this.$showAllButton.addEventListener("click", this.onShowOrHideAllToggle.bind(this))
+ }, o.prototype.initSectionHeaders = function() {
+ i(this.$sections, function(t, e) {
+ var n = t.querySelector("." + this.sectionHeaderClass);
+ this.constructHeaderMarkup(n, e), this.setExpanded(this.isExpanded(t), t), n.addEventListener("click", this.onSectionToggle.bind(this, t)), this.setInitialState(t)
+ }.bind(this))
+ }, o.prototype.constructHeaderMarkup = function(t, e) {
+ var n = t.querySelector("." + this.sectionButtonClass),
+ o = t.querySelector("." + this.sectionHeadingClass),
+ i = t.querySelector("." + this.sectionSummaryClass),
+ s = document.createElement("button");
+ s.setAttribute("type", "button"), s.setAttribute("aria-controls", this.$module.id + "-content-" + (e + 1));
+ for (var r = 0; r < n.attributes.length; r++) {
+ var a = n.attributes.item(r);
+ "id" !== a.nodeName && s.setAttribute(a.nodeName, a.nodeValue)
+ }
+ var t = document.createElement("span"),
+ e = (t.classList.add(this.sectionHeadingTextClass), t.id = n.id, document.createElement("span")),
+ e = (e.classList.add(this.sectionHeadingTextFocusClass), t.appendChild(e), e.innerHTML = n.innerHTML, document.createElement("span")),
+ l = (e.classList.add(this.sectionShowHideToggleClass), e.setAttribute("data-nosnippet", ""), document.createElement("span")),
+ c = (l.classList.add(this.sectionShowHideToggleFocusClass), e.appendChild(l), document.createElement("span")),
+ u = document.createElement("span");
+ if (u.classList.add(this.upChevronIconClass), l.appendChild(u), c.classList.add(this.sectionShowHideTextClass), l.appendChild(c), s.appendChild(t), s.appendChild(this.getButtonPunctuationEl()), null != i) {
+ var d = document.createElement("span"),
+ u = document.createElement("span");
+ u.classList.add(this.sectionSummaryFocusClass), d.appendChild(u);
+ for (var h = 0, p = i.attributes.length; h < p; ++h) {
+ var f = i.attributes.item(h).nodeName,
+ m = i.attributes.item(h).nodeValue;
+ d.setAttribute(f, m)
}
- s.appendChild(u), o.removeChild(n), o.appendChild(s)
- }, n.prototype.onSectionToggle = function(t) {
- var e = this.isExpanded(t);
- this.setExpanded(!e, t), this.storeState(t)
- }, n.prototype.onShowOrHideAllToggle = function() {
- var e = this,
- t = this.$sections,
- n = !this.checkIfAllSectionsOpen();
- s(t, function(t) {
- e.setExpanded(n, t), e.storeState(t)
- }), e.updateShowAllButton(n)
- }, n.prototype.setExpanded = function(t, e) {
- var n = e.querySelector("." + this.upChevronIconClass),
- o = e.querySelector("." + this.sectionShowHideTextClass),
- i = e.querySelector("." + this.sectionButtonClass),
- s = t ? "Hide" : "Show",
- r = document.createElement("span");
- r.classList.add("govuk-visually-hidden"), r.innerHTML = " this section", o.innerHTML = s, o.appendChild(r), i.setAttribute("aria-expanded", t), t ? (e.classList.add(this.sectionExpandedClass), n.classList.remove(this.downChevronIconClass)) : (e.classList.remove(this.sectionExpandedClass), n.classList.add(this.downChevronIconClass));
- var a = this.checkIfAllSectionsOpen();
- this.updateShowAllButton(a)
- }, n.prototype.isExpanded = function(t) {
- return t.classList.contains(this.sectionExpandedClass)
- }, n.prototype.checkIfAllSectionsOpen = function() {
- return this.$sections.length === this.$module.querySelectorAll("." + this.sectionExpandedClass).length
- }, n.prototype.updateShowAllButton = function(t) {
- var e = this.$showAllButton.querySelector("." + this.upChevronIconClass),
- n = this.$showAllButton.querySelector("." + this.showAllTextClass),
- o = t ? "Hide all sections" : "Show all sections";
- this.$showAllButton.setAttribute("aria-expanded", t), n.innerHTML = o, t ? e.classList.remove(this.downChevronIconClass) : e.classList.add(this.downChevronIconClass)
- };
- var e = {
+ u.innerHTML = i.innerHTML, i.parentNode.replaceChild(d, i), s.appendChild(d), s.appendChild(this.getButtonPunctuationEl())
+ }
+ s.appendChild(e), o.removeChild(n), o.appendChild(s)
+ }, o.prototype.onSectionToggle = function(t) {
+ var e = this.isExpanded(t);
+ this.setExpanded(!e, t), this.storeState(t)
+ }, o.prototype.onShowOrHideAllToggle = function() {
+ var e = this,
+ t = this.$sections,
+ n = !this.checkIfAllSectionsOpen();
+ i(t, function(t) {
+ e.setExpanded(n, t), e.storeState(t)
+ }), e.updateShowAllButton(n)
+ }, o.prototype.setExpanded = function(t, e) {
+ var n = e.querySelector("." + this.upChevronIconClass),
+ o = e.querySelector("." + this.sectionShowHideTextClass),
+ i = e.querySelector("." + this.sectionButtonClass),
+ s = t ? this.i18n.t("hideSection") : this.i18n.t("showSection");
+ o.innerText = s, i.setAttribute("aria-expanded", t);
+ o = [e.querySelector("." + this.sectionHeadingTextClass).innerText.trim()], s = e.querySelector("." + this.sectionSummaryClass), s && o.push(s.innerText.trim()), s = t ? this.i18n.t("hideSectionAriaLabel") : this.i18n.t("showSectionAriaLabel"), o.push(s), i.setAttribute("aria-label", o.join(" , ")), t ? (e.classList.add(this.sectionExpandedClass), n.classList.remove(this.downChevronIconClass)) : (e.classList.remove(this.sectionExpandedClass), n.classList.add(this.downChevronIconClass)), s = this.checkIfAllSectionsOpen();
+ this.updateShowAllButton(s)
+ }, o.prototype.isExpanded = function(t) {
+ return t.classList.contains(this.sectionExpandedClass)
+ }, o.prototype.checkIfAllSectionsOpen = function() {
+ return this.$sections.length === this.$module.querySelectorAll("." + this.sectionExpandedClass).length
+ }, o.prototype.updateShowAllButton = function(t) {
+ var e = this.$showAllButton.querySelector("." + this.upChevronIconClass),
+ n = this.$showAllButton.querySelector("." + this.showAllTextClass),
+ o = t ? this.i18n.t("hideAllSections") : this.i18n.t("showAllSections");
+ this.$showAllButton.setAttribute("aria-expanded", t), n.innerText = o, t ? e.classList.remove(this.downChevronIconClass) : e.classList.add(this.downChevronIconClass)
+ };
+ var c = {
checkForSessionStorage: function() {
var t, e = "this is the test string";
try {
@@ -329,35 +447,29 @@
}
}
};
- n.prototype.storeState = function(t) {
- if (this.browserSupportsSessionStorage) {
- var e = t.querySelector("." + this.sectionButtonClass);
- if (e) {
- var n = e.getAttribute("aria-controls"),
- o = e.getAttribute("aria-expanded");
- n && o && window.sessionStorage.setItem(n, o)
- }
- }
- }, n.prototype.setInitialState = function(t) {
- if (this.browserSupportsSessionStorage) {
- var e = t.querySelector("." + this.sectionButtonClass);
- if (e) {
- var n = e.getAttribute("aria-controls"),
- o = n ? window.sessionStorage.getItem(n) : null;
- null !== o && this.setExpanded("true" === o, t)
- }
- }
- }, n.prototype.getButtonPunctuationEl = function() {
+ o.prototype.storeState = function(t) {
+ var e;
+ this.browserSupportsSessionStorage && (t = t.querySelector("." + this.sectionButtonClass)) && (e = t.getAttribute("aria-controls"), t = t.getAttribute("aria-expanded"), e) && t && window.sessionStorage.setItem(e, t)
+ }, o.prototype.setInitialState = function(t) {
+ var e;
+ this.browserSupportsSessionStorage && (e = t.querySelector("." + this.sectionButtonClass)) && null !== (e = (e = e.getAttribute("aria-controls")) ? window.sessionStorage.getItem(e) : null) && this.setExpanded("true" === e, t)
+ }, o.prototype.getButtonPunctuationEl = function() {
var t = document.createElement("span");
return t.classList.add("govuk-visually-hidden", "govuk-accordion__section-heading-divider"), t.innerHTML = ", ", t
},
function(t) {
- "Window" in this || "undefined" == typeof WorkerGlobalScope && "function" != typeof importScripts && function(t) {
+ "Window" in this || "undefined" == typeof WorkerGlobalScope && "function" != typeof importScripts && ! function(t) {
t.constructor ? t.Window = t.constructor : (t.Window = t.constructor = new Function("return function Window() {}")()).prototype = this
}(this)
}.call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {}),
function(s) {
- ! function(t) {
+ var t, n;
+
+ function a(t, e) {
+ for (var n = -1, o = t.length; ++n < o;)
+ if (n in t && t[n] === e) return n;
+ return -1
+ }(function(t) {
if (!("Event" in t)) return !1;
if ("function" == typeof t.Event) return !0;
try {
@@ -365,145 +477,215 @@
} catch (e) {
return !1
}
- }(this) && function() {
- var n = {
- click: 1,
- dblclick: 1,
- keyup: 1,
- keypress: 1,
- keydown: 1,
- mousedown: 1,
- mouseup: 1,
- mousemove: 1,
- mouseover: 1,
- mouseenter: 1,
- mouseleave: 1,
- mouseout: 1,
- storage: 1,
- storagecommit: 1,
- textinput: 1
- };
- if ("undefined" != typeof document && "undefined" != typeof window) {
- var t = window.Event && window.Event.prototype || null;
- window.Event = Window.prototype.Event = function(t, e) {
- if (!t) throw new Error("Not enough arguments");
- var n;
- if ("createEvent" in document) {
- n = document.createEvent("Event");
- var o = !(!e || e.bubbles === s) && e.bubbles,
- i = !(!e || e.cancelable === s) && e.cancelable;
- return n.initEvent(t, o, i), n
- }
- return (n = document.createEventObject()).type = t, n.bubbles = !(!e || e.bubbles === s) && e.bubbles, n.cancelable = !(!e || e.cancelable === s) && e.cancelable, n
- }, t && Object.defineProperty(window.Event, "prototype", {
- configurable: !1,
- enumerable: !1,
- writable: !0,
- value: t
- }), "createEvent" in document || (window.addEventListener = Window.prototype.addEventListener = Document.prototype.addEventListener = Element.prototype.addEventListener = function() {
- var r = this,
- t = arguments[0],
- e = arguments[1];
- if (r === window && t in n) throw new Error("In IE8 the event: " + t + " is not available on the window object. Please see https://github.com/Financial-Times/polyfill-service/issues/317 for more information.");
- r._events || (r._events = {}), r._events[t] || (r._events[t] = function(t) {
- var e, n = r._events[t.type].list,
- o = n.slice(),
- i = -1,
- s = o.length;
- for (t.preventDefault = function() {
- !1 !== t.cancelable && (t.returnValue = !1)
- }, t.stopPropagation = function() {
- t.cancelBubble = !0
- }, t.stopImmediatePropagation = function() {
- t.cancelBubble = !0, t.cancelImmediate = !0
- }, t.currentTarget = r, t.relatedTarget = t.fromElement || null, t.target = t.target || t.srcElement || r, t.timeStamp = (new Date).getTime(), t.clientX && (t.pageX = t.clientX + document.documentElement.scrollLeft, t.pageY = t.clientY + document.documentElement.scrollTop); ++i < s && !t.cancelImmediate;) i in o && -1 !== a(n, e = o[i]) && "function" == typeof e && e.call(r, t)
- }, r._events[t].list = [], r.attachEvent && r.attachEvent("on" + t, r._events[t])), r._events[t].list.push(e)
- }, window.removeEventListener = Window.prototype.removeEventListener = Document.prototype.removeEventListener = Element.prototype.removeEventListener = function() {
- var t, e = this,
- n = arguments[0],
- o = arguments[1];
- e._events && e._events[n] && e._events[n].list && -1 !== (t = a(e._events[n].list, o)) && (e._events[n].list.splice(t, 1), e._events[n].list.length || (e.detachEvent && e.detachEvent("on" + n, e._events[n]), delete e._events[n]))
- }, window.dispatchEvent = Window.prototype.dispatchEvent = Document.prototype.dispatchEvent = Element.prototype.dispatchEvent = function(t) {
- if (!arguments.length) throw new Error("Not enough arguments");
- if (!t || "string" != typeof t.type) throw new Error("DOM Events Exception 0");
- var e = this,
- n = t.type;
- try {
- if (!t.bubbles) {
- t.cancelBubble = !0;
- var o = function(t) {
- t.cancelBubble = !0, (e || window).detachEvent("on" + n, o)
- };
- this.attachEvent("on" + n, o)
- }
- this.fireEvent("on" + n, t)
- } catch (i) {
- for (t.target = e;
- "_events" in (t.currentTarget = e) && "function" == typeof e._events[n] && e._events[n].call(e, t), "function" == typeof e["on" + n] && e["on" + n].call(e, t), (e = 9 === e.nodeType ? e.parentWindow : e.parentNode) && !t.cancelBubble;);
- }
- return !0
- }, document.attachEvent("onreadystatechange", function() {
- "complete" === document.readyState && document.dispatchEvent(new Event("DOMContentLoaded", {
- bubbles: !0
- }))
- }))
- }
-
- function a(t, e) {
- for (var n = -1, o = t.length; ++n < o;)
- if (n in t && t[n] === e) return n;
- return -1
+ })(this) || (n = {
+ click: 1,
+ dblclick: 1,
+ keyup: 1,
+ keypress: 1,
+ keydown: 1,
+ mousedown: 1,
+ mouseup: 1,
+ mousemove: 1,
+ mouseover: 1,
+ mouseenter: 1,
+ mouseleave: 1,
+ mouseout: 1,
+ storage: 1,
+ storagecommit: 1,
+ textinput: 1
+ }, "undefined" == typeof document) || "undefined" == typeof window || (t = window.Event && window.Event.prototype || null, window.Event = Window.prototype.Event = function Event(t, e) {
+ var n, o, i;
+ if (t) return "createEvent" in document ? (n = document.createEvent("Event"), o = !(!e || e.bubbles === s) && e.bubbles, i = !(!e || e.cancelable === s) && e.cancelable, n.initEvent(t, o, i)) : ((n = document.createEventObject()).type = t, n.bubbles = !(!e || e.bubbles === s) && e.bubbles, n.cancelable = !(!e || e.cancelable === s) && e.cancelable), n;
+ throw new Error("Not enough arguments")
+ }, t && Object.defineProperty(window.Event, "prototype", {
+ configurable: !1,
+ enumerable: !1,
+ writable: !0,
+ value: t
+ }), "createEvent" in document) || (window.addEventListener = Window.prototype.addEventListener = Document.prototype.addEventListener = Element.prototype.addEventListener = function() {
+ var r = this,
+ t = arguments[0],
+ e = arguments[1];
+ if (r === window && t in n) throw new Error("In IE8 the event: " + t + " is not available on the window object. Please see https://github.com/Financial-Times/polyfill-service/issues/317 for more information.");
+ r._events || (r._events = {}), r._events[t] || (r._events[t] = function(t) {
+ var e, n = r._events[t.type].list,
+ o = n.slice(),
+ i = -1,
+ s = o.length;
+ for (t.preventDefault = function() {
+ !1 !== t.cancelable && (t.returnValue = !1)
+ }, t.stopPropagation = function() {
+ t.cancelBubble = !0
+ }, t.stopImmediatePropagation = function() {
+ t.cancelBubble = !0, t.cancelImmediate = !0
+ }, t.currentTarget = r, t.relatedTarget = t.fromElement || null, t.target = t.target || t.srcElement || r, t.timeStamp = (new Date).getTime(), t.clientX && (t.pageX = t.clientX + document.documentElement.scrollLeft, t.pageY = t.clientY + document.documentElement.scrollTop); ++i < s && !t.cancelImmediate;) i in o && -1 !== a(n, e = o[i]) && "function" == typeof e && e.call(r, t)
+ }, r._events[t].list = [], r.attachEvent && r.attachEvent("on" + t, r._events[t])), r._events[t].list.push(e)
+ }, window.removeEventListener = Window.prototype.removeEventListener = Document.prototype.removeEventListener = Element.prototype.removeEventListener = function() {
+ var t, e = this,
+ n = arguments[0];
+ e._events && e._events[n] && e._events[n].list && -1 !== (t = a(e._events[n].list, arguments[1])) && (e._events[n].list.splice(t, 1), e._events[n].list.length || (e.detachEvent && e.detachEvent("on" + n, e._events[n]), delete e._events[n]))
+ }, window.dispatchEvent = Window.prototype.dispatchEvent = Document.prototype.dispatchEvent = Element.prototype.dispatchEvent = function(t) {
+ if (!arguments.length) throw new Error("Not enough arguments");
+ if (!t || "string" != typeof t.type) throw new Error("DOM Events Exception 0");
+ var e, n = this,
+ o = t.type;
+ try {
+ t.bubbles || (t.cancelBubble = !0, e = function(t) {
+ t.cancelBubble = !0, (n || window).detachEvent("on" + o, e)
+ }, this.attachEvent("on" + o, e)), this.fireEvent("on" + o, t)
+ } catch (i) {
+ for (t.target = n;
+ "_events" in (t.currentTarget = n) && "function" == typeof n._events[o] && n._events[o].call(n, t), "function" == typeof n["on" + o] && n["on" + o].call(n, t), (n = 9 === n.nodeType ? n.parentWindow : n.parentNode) && !t.cancelBubble;);
}
- }()
+ return !0
+ }, document.attachEvent("onreadystatechange", function() {
+ "complete" === document.readyState && document.dispatchEvent(new Event("DOMContentLoaded", {
+ bubbles: !0
+ }))
+ }))
}.call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {});
- function o(t) {
- this.$module = t, this.debounceFormSubmitTimer = null
+ function u(t, e) {
+ if (!t) return this;
+ this.$module = t, this.debounceFormSubmitTimer = null;
+ this.config = s({
+ preventDoubleClick: !1
+ }, e || {}, l(t.dataset))
}
- o.prototype.handleKeyDown = function(t) {
+ u.prototype.init = function() {
+ this.$module && (this.$module.addEventListener("keydown", this.handleKeyDown), this.$module.addEventListener("click", this.debounce.bind(this)))
+ }, u.prototype.handleKeyDown = function(t) {
var e = t.target;
"button" === e.getAttribute("role") && 32 === t.keyCode && (t.preventDefault(), e.click())
- }, o.prototype.debounce = function(t) {
- if ("true" === t.target.getAttribute("data-prevent-double-click")) return this.debounceFormSubmitTimer ? (t.preventDefault(), !1) : void(this.debounceFormSubmitTimer = setTimeout(function() {
+ }, u.prototype.debounce = function(t) {
+ if (this.config.preventDoubleClick) return this.debounceFormSubmitTimer ? (t.preventDefault(), !1) : void(this.debounceFormSubmitTimer = setTimeout(function() {
this.debounceFormSubmitTimer = null
}.bind(this), 1e3))
- }, o.prototype.init = function() {
- this.$module.addEventListener("keydown", this.handleKeyDown), this.$module.addEventListener("click", this.debounce)
};
- function i(t) {
+ function d(t) {
this.$module = t
}
+ d.prototype.init = function() {
+ this.$module && "boolean" != typeof this.$module.open && this.polyfillDetails()
+ }, d.prototype.polyfillDetails = function() {
+ var n, t = this.$module,
+ e = this.$summary = t.getElementsByTagName("summary").item(0),
+ o = this.$content = t.getElementsByTagName("div").item(0);
+ e && o && (o.id || (o.id = "details-content-" + (n = (new Date).getTime(), "undefined" != typeof window.performance && "function" == typeof window.performance.now && (n += window.performance.now()), "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(t) {
+ var e = (n + 16 * Math.random()) % 16 | 0;
+ return n = Math.floor(n / 16), ("x" === t ? e : 3 & e | 8).toString(16)
+ }))), t.setAttribute("role", "group"), e.setAttribute("role", "button"), e.setAttribute("aria-controls", o.id), e.tabIndex = 0, this.$module.hasAttribute("open") ? e.setAttribute("aria-expanded", "true") : (e.setAttribute("aria-expanded", "false"), o.style.display = "none"), this.polyfillHandleInputs(e, this.polyfillSetAttributes.bind(this)))
+ }, d.prototype.polyfillSetAttributes = function() {
+ return this.$module.hasAttribute("open") ? (this.$module.removeAttribute("open"), this.$summary.setAttribute("aria-expanded", "false"), this.$content.style.display = "none") : (this.$module.setAttribute("open", "open"), this.$summary.setAttribute("aria-expanded", "true"), this.$content.style.display = ""), !0
+ }, d.prototype.polyfillHandleInputs = function(t, n) {
+ t.addEventListener("keypress", function(t) {
+ var e = t.target;
+ 13 !== t.keyCode && 32 !== t.keyCode || "summary" === e.nodeName.toLowerCase() && (t.preventDefault(), e.click ? e.click() : n(t))
+ }), t.addEventListener("keyup", function(t) {
+ var e = t.target;
+ 32 === t.keyCode && "summary" === e.nodeName.toLowerCase() && t.preventDefault()
+ }), t.addEventListener("click", n)
+ },
+ function(t) {
+ "Date" in self && "now" in self.Date && "getTime" in self.Date.prototype || (Date.now = function() {
+ return (new Date).getTime()
+ })
+ }.call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {}),
+ function(t) {
+ "document" in this && "matches" in document.documentElement || (Element.prototype.matches = Element.prototype.webkitMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.mozMatchesSelector || function(t) {
+ for (var e = (this.document || this.ownerDocument).querySelectorAll(t), n = 0; e[n] && e[n] !== this;) ++n;
+ return !!e[n]
+ })
+ }.call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {}),
+ function(t) {
+ "document" in this && "closest" in document.documentElement || (Element.prototype.closest = function(t) {
+ for (var e = this; e;) {
+ if (e.matches(t)) return e;
+ e = "SVGElement" in window && e instanceof SVGElement ? e.parentNode : e.parentElement
+ }
+ return null
+ })
+ }.call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {});
+ var h = {
+ charactersUnderLimit: {
+ one: "You have %{count} character remaining",
+ other: "You have %{count} characters remaining"
+ },
+ charactersAtLimit: "You have 0 characters remaining",
+ charactersOverLimit: {
+ one: "You have %{count} character too many",
+ other: "You have %{count} characters too many"
+ },
+ wordsUnderLimit: {
+ one: "You have %{count} word remaining",
+ other: "You have %{count} words remaining"
+ },
+ wordsAtLimit: "You have 0 words remaining",
+ wordsOverLimit: {
+ one: "You have %{count} word too many",
+ other: "You have %{count} words too many"
+ },
+ textareaDescription: {
+ other: ""
+ }
+ };
- function r(t) {
+ function p(t, e) {
+ if (!t) return this;
+ var n = {
+ threshold: 0,
+ i18n: h
+ },
+ o = l(t.dataset),
+ i = {};
+ if (("maxwords" in o || "maxlength" in o) && (i = {
+ maxlength: !1,
+ maxwords: !1
+ }), this.config = s(n, e || {}, i, o), this.i18n = new a(r(this.config, "i18n"), {
+ locale: function(t, e) {
+ if (t = t.closest("[" + e + "]")) return t.getAttribute(e)
+ }(t, "lang")
+ }), this.config.maxwords) this.maxLength = this.config.maxwords;
+ else {
+ if (!this.config.maxlength) return;
+ this.maxLength = this.config.maxlength
+ }
this.$module = t, this.$textarea = t.querySelector(".govuk-js-character-count"), this.$visibleCountMessage = null, this.$screenReaderCountMessage = null, this.lastInputTimestamp = null
}
- function a(t) {
+ function f(t) {
this.$module = t, this.$inputs = t.querySelectorAll('input[type="checkbox"]')
}
- function l(t) {
- this.$module = t
+ function m(t, e) {
+ if (!t) return this;
+ this.$module = t;
+ this.config = s({
+ disableAutoFocus: !1
+ }, e || {}, l(t.dataset))
}
- function c(t) {
- this.$module = t
+ function b(t, e) {
+ this.$module = t;
+ this.config = s({
+ disableAutoFocus: !1
+ }, e || {}, l(t.dataset))
}
- function u(t) {
+ function y(t) {
this.$module = t, this.$menuButton = t && t.querySelector(".govuk-js-header-toggle"), this.$menu = this.$menuButton && t.querySelector("#" + this.$menuButton.getAttribute("aria-controls")), this.menuIsOpen = !1, this.mql = null
}
- function d(t) {
+ function g(t) {
this.$module = t, this.$inputs = t.querySelectorAll('input[type="radio"]')
}
- function h(t) {
+ function v(t) {
this.$module = t, this.$linkedElement = null, this.linkedElementListener = !1
}
- function p(t) {
+ function w(t) {
this.$module = t, this.$tabs = t.querySelectorAll(".govuk-tabs__tab"), this.keys = {
left: 37,
right: 39,
@@ -511,213 +693,142 @@
down: 40
}, this.jsHiddenClass = "govuk-tabs__panel--hidden"
}
- i.prototype.init = function() {
- this.$module && ("boolean" == typeof this.$module.open || this.polyfillDetails())
- }, i.prototype.polyfillDetails = function() {
- var t = this.$module,
- e = this.$summary = t.getElementsByTagName("summary").item(0),
- n = this.$content = t.getElementsByTagName("div").item(0);
- e && n && (n.id || (n.id = "details-content-" + function o() {
- var n = (new Date).getTime();
- return "undefined" != typeof window.performance && "function" == typeof window.performance.now && (n += window.performance.now()), "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(t) {
- var e = (n + 16 * Math.random()) % 16 | 0;
- return n = Math.floor(n / 16), ("x" === t ? e : 3 & e | 8).toString(16)
- })
- }()), t.setAttribute("role", "group"), e.setAttribute("role", "button"), e.setAttribute("aria-controls", n.id), e.tabIndex = 0, this.$module.hasAttribute("open") ? e.setAttribute("aria-expanded", "true") : (e.setAttribute("aria-expanded", "false"), n.style.display = "none"), this.polyfillHandleInputs(e, this.polyfillSetAttributes.bind(this)))
- }, i.prototype.polyfillSetAttributes = function() {
- return this.$module.hasAttribute("open") ? (this.$module.removeAttribute("open"), this.$summary.setAttribute("aria-expanded", "false"), this.$content.style.display = "none") : (this.$module.setAttribute("open", "open"), this.$summary.setAttribute("aria-expanded", "true"), this.$content.style.display = ""), !0
- }, i.prototype.polyfillHandleInputs = function(t, n) {
- t.addEventListener("keypress", function(t) {
- var e = t.target;
- 13 !== t.keyCode && 32 !== t.keyCode || "summary" === e.nodeName.toLowerCase() && (t.preventDefault(), e.click ? e.click() : n(t))
- }), t.addEventListener("keyup", function(t) {
- var e = t.target;
- 32 === t.keyCode && "summary" === e.nodeName.toLowerCase() && t.preventDefault()
- }), t.addEventListener("click", n)
- }, r.prototype.defaults = {
- characterCountAttribute: "data-maxlength",
- wordCountAttribute: "data-maxwords"
- }, r.prototype.init = function() {
- if (this.$textarea) {
- var t = this.$module,
- e = this.$textarea,
- n = document.getElementById(e.id + "-info");
- e.insertAdjacentElement("afterend", n);
- var o = document.createElement("div");
- o.className = "govuk-character-count__sr-status govuk-visually-hidden", o.setAttribute("aria-live", "polite"), this.$screenReaderCountMessage = o, n.insertAdjacentElement("afterend", o);
- var i = document.createElement("div");
- i.className = n.className, i.classList.add("govuk-character-count__status"), i.setAttribute("aria-hidden", "true"), this.$visibleCountMessage = i, n.insertAdjacentElement("afterend", i), n.classList.add("govuk-visually-hidden"), this.options = this.getDataset(t);
- var s = this.defaults.characterCountAttribute;
- this.options.maxwords && (s = this.defaults.wordCountAttribute), this.maxLength = t.getAttribute(s), this.maxLength && (e.removeAttribute("maxlength"), this.bindChangeEvents(), "onpageshow" in window ? window.addEventListener("pageshow", this.updateCountMessage.bind(this)) : window.addEventListener("DOMContentLoaded", this.updateCountMessage.bind(this)), this.updateCountMessage())
- }
- }, r.prototype.getDataset = function(t) {
- var e = {},
- n = t.attributes;
- if (n)
- for (var o = 0; o < n.length; o++) {
- var i = n[o],
- s = i.name.match(/^data-(.+)/);
- s && (e[s[1]] = i.value)
- }
- return e
- }, r.prototype.count = function(t) {
- var e;
- this.options.maxwords ? e = (t.match(/\S+/g) || []).length : e = t.length;
- return e
- }, r.prototype.bindChangeEvents = function() {
+ p.prototype.init = function() {
+ var t, e, n;
+ this.$textarea && (t = this.$textarea, (e = document.getElementById(t.id + "-info")).innerText.match(/^\s*$/) && (e.innerText = this.i18n.t("textareaDescription", {
+ count: this.maxLength
+ })), t.insertAdjacentElement("afterend", e), (n = document.createElement("div")).className = "govuk-character-count__sr-status govuk-visually-hidden", n.setAttribute("aria-live", "polite"), this.$screenReaderCountMessage = n, e.insertAdjacentElement("afterend", n), (n = document.createElement("div")).className = e.className, n.classList.add("govuk-character-count__status"), n.setAttribute("aria-hidden", "true"), this.$visibleCountMessage = n, e.insertAdjacentElement("afterend", n), e.classList.add("govuk-visually-hidden"), t.removeAttribute("maxlength"), this.bindChangeEvents(), "onpageshow" in window ? window.addEventListener("pageshow", this.updateCountMessage.bind(this)) : window.addEventListener("DOMContentLoaded", this.updateCountMessage.bind(this)), this.updateCountMessage())
+ }, p.prototype.bindChangeEvents = function() {
var t = this.$textarea;
t.addEventListener("keyup", this.handleKeyUp.bind(this)), t.addEventListener("focus", this.handleFocus.bind(this)), t.addEventListener("blur", this.handleBlur.bind(this))
- }, r.prototype.checkIfValueChanged = function() {
+ }, p.prototype.handleKeyUp = function() {
+ this.updateVisibleCountMessage(), this.lastInputTimestamp = Date.now()
+ }, p.prototype.handleFocus = function() {
+ this.valueChecker = setInterval(function() {
+ (!this.lastInputTimestamp || Date.now() - 500 >= this.lastInputTimestamp) && this.updateIfValueChanged()
+ }.bind(this), 1e3)
+ }, p.prototype.handleBlur = function() {
+ clearInterval(this.valueChecker)
+ }, p.prototype.updateIfValueChanged = function() {
this.$textarea.oldValue || (this.$textarea.oldValue = ""), this.$textarea.value !== this.$textarea.oldValue && (this.$textarea.oldValue = this.$textarea.value, this.updateCountMessage())
- }, r.prototype.updateCountMessage = function() {
+ }, p.prototype.updateCountMessage = function() {
this.updateVisibleCountMessage(), this.updateScreenReaderCountMessage()
- }, r.prototype.updateVisibleCountMessage = function() {
+ }, p.prototype.updateVisibleCountMessage = function() {
var t = this.$textarea,
e = this.$visibleCountMessage,
n = this.maxLength - this.count(t.value);
- this.isOverThreshold() ? e.classList.remove("govuk-character-count__message--disabled") : e.classList.add("govuk-character-count__message--disabled"), n < 0 ? (t.classList.add("govuk-textarea--error"), e.classList.remove("govuk-hint"), e.classList.add("govuk-error-message")) : (t.classList.remove("govuk-textarea--error"), e.classList.remove("govuk-error-message"), e.classList.add("govuk-hint")), e.innerHTML = this.formattedUpdateMessage()
- }, r.prototype.updateScreenReaderCountMessage = function() {
+ this.isOverThreshold() ? e.classList.remove("govuk-character-count__message--disabled") : e.classList.add("govuk-character-count__message--disabled"), n < 0 ? (t.classList.add("govuk-textarea--error"), e.classList.remove("govuk-hint"), e.classList.add("govuk-error-message")) : (t.classList.remove("govuk-textarea--error"), e.classList.remove("govuk-error-message"), e.classList.add("govuk-hint")), e.innerText = this.getCountMessage()
+ }, p.prototype.updateScreenReaderCountMessage = function() {
var t = this.$screenReaderCountMessage;
- this.isOverThreshold() ? t.removeAttribute("aria-hidden") : t.setAttribute("aria-hidden", !0), t.innerHTML = this.formattedUpdateMessage()
- }, r.prototype.formattedUpdateMessage = function() {
- var t, e = this.$textarea,
- n = this.options,
- o = this.maxLength - this.count(e.value),
- i = "character";
- return n.maxwords && (i = "word"), i += -1 == o || 1 == o ? "" : "s", t = o < 0 ? "too many" : "remaining", "You have " + Math.abs(o) + " " + i + " " + t
- }, r.prototype.isOverThreshold = function() {
- var t = this.$textarea,
- e = this.options,
- n = this.count(t.value);
- return this.maxLength * (e.threshold ? e.threshold : 0) / 100 <= n
- }, r.prototype.handleKeyUp = function() {
- this.updateVisibleCountMessage(), this.lastInputTimestamp = Date.now()
- }, r.prototype.handleFocus = function() {
- this.valueChecker = setInterval(function() {
- (!this.lastInputTimestamp || Date.now() - 500 >= this.lastInputTimestamp) && this.checkIfValueChanged()
- }.bind(this), 1e3)
- }, r.prototype.handleBlur = function() {
- clearInterval(this.valueChecker)
- }, a.prototype.init = function() {
+ this.isOverThreshold() ? t.removeAttribute("aria-hidden") : t.setAttribute("aria-hidden", !0), t.innerText = this.getCountMessage()
+ }, p.prototype.count = function(t) {
+ return (this.config.maxwords ? t.match(/\S+/g) || [] : t).length
+ }, p.prototype.getCountMessage = function() {
+ var t = this.maxLength - this.count(this.$textarea.value),
+ e = this.config.maxwords ? "words" : "characters";
+ return this.formatCountMessage(t, e)
+ }, p.prototype.formatCountMessage = function(t, e) {
+ return 0 === t ? this.i18n.t(e + "AtLimit") : this.i18n.t(e + (t < 0 ? "OverLimit" : "UnderLimit"), {
+ count: Math.abs(t)
+ })
+ }, p.prototype.isOverThreshold = function() {
+ var t;
+ return !this.config.threshold || (t = this.$textarea, t = this.count(t.value), this.maxLength * this.config.threshold / 100 <= t)
+ }, f.prototype.init = function() {
var t = this.$module;
- s(this.$inputs, function(t) {
+ i(this.$inputs, function(t) {
var e = t.getAttribute("data-aria-controls");
e && document.getElementById(e) && (t.setAttribute("aria-controls", e), t.removeAttribute("data-aria-controls"))
}), "onpageshow" in window ? window.addEventListener("pageshow", this.syncAllConditionalReveals.bind(this)) : window.addEventListener("DOMContentLoaded", this.syncAllConditionalReveals.bind(this)), this.syncAllConditionalReveals(), t.addEventListener("click", this.handleClick.bind(this))
- }, a.prototype.syncAllConditionalReveals = function() {
- s(this.$inputs, this.syncConditionalRevealWithInputState.bind(this))
- }, a.prototype.syncConditionalRevealWithInputState = function(t) {
- var e = document.getElementById(t.getAttribute("aria-controls"));
- if (e && e.classList.contains("govuk-checkboxes__conditional")) {
- var n = t.checked;
- t.setAttribute("aria-expanded", n), e.classList.toggle("govuk-checkboxes__conditional--hidden", !n)
- }
- }, a.prototype.unCheckAllInputsExcept = function(e) {
- s(document.querySelectorAll('input[type="checkbox"][name="' + e.name + '"]'), function(t) {
+ }, f.prototype.syncAllConditionalReveals = function() {
+ i(this.$inputs, this.syncConditionalRevealWithInputState.bind(this))
+ }, f.prototype.syncConditionalRevealWithInputState = function(t) {
+ var e, n = document.getElementById(t.getAttribute("aria-controls"));
+ n && n.classList.contains("govuk-checkboxes__conditional") && (e = t.checked, t.setAttribute("aria-expanded", e), n.classList.toggle("govuk-checkboxes__conditional--hidden", !e))
+ }, f.prototype.unCheckAllInputsExcept = function(e) {
+ i(document.querySelectorAll('input[type="checkbox"][name="' + e.name + '"]'), function(t) {
e.form === t.form && t !== e && (t.checked = !1, this.syncConditionalRevealWithInputState(t))
}.bind(this))
- }, a.prototype.unCheckExclusiveInputs = function(e) {
- s(document.querySelectorAll('input[data-behaviour="exclusive"][type="checkbox"][name="' + e.name + '"]'), function(t) {
+ }, f.prototype.unCheckExclusiveInputs = function(e) {
+ i(document.querySelectorAll('input[data-behaviour="exclusive"][type="checkbox"][name="' + e.name + '"]'), function(t) {
e.form === t.form && (t.checked = !1, this.syncConditionalRevealWithInputState(t))
}.bind(this))
- }, a.prototype.handleClick = function(t) {
- var e = t.target;
- "checkbox" === e.type && (e.getAttribute("aria-controls") && this.syncConditionalRevealWithInputState(e), e.checked && ("exclusive" === e.getAttribute("data-behaviour") ? this.unCheckAllInputsExcept(e) : this.unCheckExclusiveInputs(e)))
- },
- function(t) {
- "document" in this && "matches" in document.documentElement || (Element.prototype.matches = Element.prototype.webkitMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.mozMatchesSelector || function(t) {
- for (var e = (this.document || this.ownerDocument).querySelectorAll(t), n = 0; e[n] && e[n] !== this;) ++n;
- return !!e[n]
- })
- }.call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {}),
- function(t) {
- "document" in this && "closest" in document.documentElement || (Element.prototype.closest = function(t) {
- for (var e = this; e;) {
- if (e.matches(t)) return e;
- e = "SVGElement" in window && e instanceof SVGElement ? e.parentNode : e.parentElement
- }
- return null
- })
- }.call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {}), l.prototype.init = function() {
+ }, f.prototype.handleClick = function(t) {
+ t = t.target;
+ "checkbox" === t.type && (t.getAttribute("aria-controls") && this.syncConditionalRevealWithInputState(t), t.checked) && ("exclusive" === t.getAttribute("data-behaviour") ? this.unCheckAllInputsExcept(t) : this.unCheckExclusiveInputs(t))
+ }, m.prototype.init = function() {
var t = this.$module;
t && (this.setFocus(), t.addEventListener("click", this.handleClick.bind(this)))
- }, l.prototype.setFocus = function() {
+ }, m.prototype.setFocus = function() {
var t = this.$module;
- "true" !== t.getAttribute("data-disable-auto-focus") && (t.setAttribute("tabindex", "-1"), t.addEventListener("blur", function() {
+ this.config.disableAutoFocus || (t.setAttribute("tabindex", "-1"), t.addEventListener("blur", function() {
t.removeAttribute("tabindex")
}), t.focus())
- }, l.prototype.handleClick = function(t) {
+ }, m.prototype.handleClick = function(t) {
var e = t.target;
this.focusTarget(e) && t.preventDefault()
- }, l.prototype.focusTarget = function(t) {
- if ("A" !== t.tagName || !1 === t.href) return !1;
- var e = this.getFragmentFromUrl(t.href),
- n = document.getElementById(e);
- if (!n) return !1;
- var o = this.getAssociatedLegendOrLabel(n);
- return !!o && (o.scrollIntoView(), n.focus({
+ }, m.prototype.focusTarget = function(t) {
+ var e;
+ return "A" === t.tagName && !1 !== t.href && (t = this.getFragmentFromUrl(t.href), !!(t = document.getElementById(t))) && !!(e = this.getAssociatedLegendOrLabel(t)) && (e.scrollIntoView(), t.focus({
preventScroll: !0
}), !0)
- }, l.prototype.getFragmentFromUrl = function(t) {
+ }, m.prototype.getFragmentFromUrl = function(t) {
return -1 !== t.indexOf("#") && t.split("#").pop()
- }, l.prototype.getAssociatedLegendOrLabel = function(t) {
+ }, m.prototype.getAssociatedLegendOrLabel = function(t) {
var e = t.closest("fieldset");
if (e) {
- var n = e.getElementsByTagName("legend");
- if (n.length) {
- var o = n[0];
- if ("checkbox" === t.type || "radio" === t.type) return o;
- var i = o.getBoundingClientRect().top,
- s = t.getBoundingClientRect();
- if (s.height && window.innerHeight)
- if (s.top + s.height - i < window.innerHeight / 2) return o
+ e = e.getElementsByTagName("legend");
+ if (e.length) {
+ e = e[0];
+ if ("checkbox" === t.type || "radio" === t.type) return e;
+ var n = e.getBoundingClientRect().top,
+ o = t.getBoundingClientRect();
+ if (o.height && window.innerHeight)
+ if (o.top + o.height - n < window.innerHeight / 2) return e
}
}
return document.querySelector("label[for='" + t.getAttribute("id") + "']") || t.closest("label")
- }, c.prototype.init = function() {
+ }, b.prototype.init = function() {
this.$module && this.setFocus()
- }, c.prototype.setFocus = function() {
+ }, b.prototype.setFocus = function() {
var t = this.$module;
- "true" !== t.getAttribute("data-disable-auto-focus") && "alert" === t.getAttribute("role") && (t.getAttribute("tabindex") || (t.setAttribute("tabindex", "-1"), t.addEventListener("blur", function() {
+ this.config.disableAutoFocus || "alert" === t.getAttribute("role") && (t.getAttribute("tabindex") || (t.setAttribute("tabindex", "-1"), t.addEventListener("blur", function() {
t.removeAttribute("tabindex")
})), t.focus())
- }, u.prototype.init = function() {
+ }, y.prototype.init = function() {
this.$module && this.$menuButton && this.$menu && ("matchMedia" in window ? (this.mql = window.matchMedia("(min-width: 48.0625em)"), "addEventListener" in this.mql ? this.mql.addEventListener("change", this.syncState.bind(this)) : this.mql.addListener(this.syncState.bind(this)), this.syncState(), this.$menuButton.addEventListener("click", this.handleMenuButtonClick.bind(this))) : this.$menuButton.setAttribute("hidden", ""))
- }, u.prototype.syncState = function() {
+ }, y.prototype.syncState = function() {
this.mql.matches ? (this.$menu.removeAttribute("hidden"), this.$menuButton.setAttribute("hidden", "")) : (this.$menuButton.removeAttribute("hidden"), this.$menuButton.setAttribute("aria-expanded", this.menuIsOpen), this.menuIsOpen ? this.$menu.removeAttribute("hidden") : this.$menu.setAttribute("hidden", ""))
- }, u.prototype.handleMenuButtonClick = function() {
+ }, y.prototype.handleMenuButtonClick = function() {
this.menuIsOpen = !this.menuIsOpen, this.syncState()
- }, d.prototype.init = function() {
+ }, g.prototype.init = function() {
var t = this.$module;
- s(this.$inputs, function(t) {
+ i(this.$inputs, function(t) {
var e = t.getAttribute("data-aria-controls");
e && document.getElementById(e) && (t.setAttribute("aria-controls", e), t.removeAttribute("data-aria-controls"))
}), "onpageshow" in window ? window.addEventListener("pageshow", this.syncAllConditionalReveals.bind(this)) : window.addEventListener("DOMContentLoaded", this.syncAllConditionalReveals.bind(this)), this.syncAllConditionalReveals(), t.addEventListener("click", this.handleClick.bind(this))
- }, d.prototype.syncAllConditionalReveals = function() {
- s(this.$inputs, this.syncConditionalRevealWithInputState.bind(this))
- }, d.prototype.syncConditionalRevealWithInputState = function(t) {
- var e = document.getElementById(t.getAttribute("aria-controls"));
- if (e && e.classList.contains("govuk-radios__conditional")) {
- var n = t.checked;
- t.setAttribute("aria-expanded", n), e.classList.toggle("govuk-radios__conditional--hidden", !n)
- }
- }, d.prototype.handleClick = function(t) {
+ }, g.prototype.syncAllConditionalReveals = function() {
+ i(this.$inputs, this.syncConditionalRevealWithInputState.bind(this))
+ }, g.prototype.syncConditionalRevealWithInputState = function(t) {
+ var e, n = document.getElementById(t.getAttribute("aria-controls"));
+ n && n.classList.contains("govuk-radios__conditional") && (e = t.checked, t.setAttribute("aria-expanded", e), n.classList.toggle("govuk-radios__conditional--hidden", !e))
+ }, g.prototype.handleClick = function(t) {
var n = t.target;
- "radio" === n.type && s(document.querySelectorAll('input[type="radio"][aria-controls]'), function(t) {
+ "radio" === n.type && i(document.querySelectorAll('input[type="radio"][aria-controls]'), function(t) {
var e = t.form === n.form;
t.name === n.name && e && this.syncConditionalRevealWithInputState(t)
}.bind(this))
- }, h.prototype.init = function() {
- this.$module && (this.$linkedElement = this.getLinkedElement(), this.$linkedElement && this.$module.addEventListener("click", this.focusLinkedElement.bind(this)))
- }, h.prototype.getLinkedElement = function() {
+ }, v.prototype.init = function() {
+ this.$module && (this.$linkedElement = this.getLinkedElement(), this.$linkedElement) && this.$module.addEventListener("click", this.focusLinkedElement.bind(this))
+ }, v.prototype.getLinkedElement = function() {
var t = this.getFragmentFromUrl();
return !!t && document.getElementById(t)
- }, h.prototype.focusLinkedElement = function() {
+ }, v.prototype.focusLinkedElement = function() {
var t = this.$linkedElement;
- t.getAttribute("tabindex") || (t.setAttribute("tabindex", "-1"), t.classList.add("govuk-skip-link-focused-element"), this.linkedElementListener || (this.$linkedElement.addEventListener("blur", this.removeFocusProperties.bind(this)), this.linkedElementListener = !0)), t.focus()
- }, h.prototype.removeFocusProperties = function() {
+ t.getAttribute("tabindex") || (t.setAttribute("tabindex", "-1"), t.classList.add("govuk-skip-link-focused-element"), this.linkedElementListener) || (this.$linkedElement.addEventListener("blur", this.removeFocusProperties.bind(this)), this.linkedElementListener = !0), t.focus()
+ }, v.prototype.removeFocusProperties = function() {
this.$linkedElement.removeAttribute("tabindex"), this.$linkedElement.classList.remove("govuk-skip-link-focused-element")
- }, h.prototype.getFragmentFromUrl = function() {
+ }, v.prototype.getFragmentFromUrl = function() {
return !!this.$module.hash && this.$module.hash.split("#").pop()
},
function(t) {
@@ -735,71 +846,61 @@
return t
}
})
- }.call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {}), p.prototype.init = function() {
+ }.call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {}), w.prototype.init = function() {
"function" == typeof window.matchMedia ? this.setupResponsiveChecks() : this.setup()
- }, p.prototype.setupResponsiveChecks = function() {
+ }, w.prototype.setupResponsiveChecks = function() {
this.mql = window.matchMedia("(min-width: 40.0625em)"), this.mql.addListener(this.checkMode.bind(this)), this.checkMode()
- }, p.prototype.checkMode = function() {
+ }, w.prototype.checkMode = function() {
this.mql.matches ? this.setup() : this.teardown()
- }, p.prototype.setup = function() {
+ }, w.prototype.setup = function() {
var t = this.$module,
e = this.$tabs,
n = t.querySelector(".govuk-tabs__list"),
o = t.querySelectorAll(".govuk-tabs__list-item");
- if (e && n && o) {
- n.setAttribute("role", "tablist"), s(o, function(t) {
- t.setAttribute("role", "presentation")
- }), s(e, function(t) {
- this.setAttributes(t), t.boundTabClick = this.onTabClick.bind(this), t.boundTabKeydown = this.onTabKeydown.bind(this), t.addEventListener("click", t.boundTabClick, !0), t.addEventListener("keydown", t.boundTabKeydown, !0), this.hideTab(t)
- }.bind(this));
- var i = this.getTab(window.location.hash) || this.$tabs[0];
- this.showTab(i), t.boundOnHashChange = this.onHashChange.bind(this), window.addEventListener("hashchange", t.boundOnHashChange, !0)
- }
- }, p.prototype.teardown = function() {
+ e && n && o && (n.setAttribute("role", "tablist"), i(o, function(t) {
+ t.setAttribute("role", "presentation")
+ }), i(e, function(t) {
+ this.setAttributes(t), t.boundTabClick = this.onTabClick.bind(this), t.boundTabKeydown = this.onTabKeydown.bind(this), t.addEventListener("click", t.boundTabClick, !0), t.addEventListener("keydown", t.boundTabKeydown, !0), this.hideTab(t)
+ }.bind(this)), n = this.getTab(window.location.hash) || this.$tabs[0], this.showTab(n), t.boundOnHashChange = this.onHashChange.bind(this), window.addEventListener("hashchange", t.boundOnHashChange, !0))
+ }, w.prototype.teardown = function() {
var t = this.$module,
e = this.$tabs,
n = t.querySelector(".govuk-tabs__list"),
o = t.querySelectorAll(".govuk-tabs__list-item");
- e && n && o && (n.removeAttribute("role"), s(o, function(t) {
+ e && n && o && (n.removeAttribute("role"), i(o, function(t) {
t.removeAttribute("role", "presentation")
- }), s(e, function(t) {
+ }), i(e, function(t) {
t.removeEventListener("click", t.boundTabClick, !0), t.removeEventListener("keydown", t.boundTabKeydown, !0), this.unsetAttributes(t)
}.bind(this)), window.removeEventListener("hashchange", t.boundOnHashChange, !0))
- }, p.prototype.onHashChange = function(t) {
- var e = window.location.hash,
- n = this.getTab(e);
- if (n)
- if (this.changingHash) this.changingHash = !1;
- else {
- var o = this.getCurrentTab();
- this.hideTab(o), this.showTab(n), n.focus()
- }
- }, p.prototype.hideTab = function(t) {
+ }, w.prototype.onHashChange = function(t) {
+ var e, n = window.location.hash,
+ n = this.getTab(n);
+ n && (this.changingHash ? this.changingHash = !1 : (e = this.getCurrentTab(), this.hideTab(e), this.showTab(n), n.focus()))
+ }, w.prototype.hideTab = function(t) {
this.unhighlightTab(t), this.hidePanel(t)
- }, p.prototype.showTab = function(t) {
+ }, w.prototype.showTab = function(t) {
this.highlightTab(t), this.showPanel(t)
- }, p.prototype.getTab = function(t) {
+ }, w.prototype.getTab = function(t) {
return this.$module.querySelector('.govuk-tabs__tab[href="' + t + '"]')
- }, p.prototype.setAttributes = function(t) {
- var e = this.getHref(t).slice(1);
- t.setAttribute("id", "tab_" + e), t.setAttribute("role", "tab"), t.setAttribute("aria-controls", e), t.setAttribute("aria-selected", "false"), t.setAttribute("tabindex", "-1");
- var n = this.getPanel(t);
- n.setAttribute("role", "tabpanel"), n.setAttribute("aria-labelledby", t.id), n.classList.add(this.jsHiddenClass)
- }, p.prototype.unsetAttributes = function(t) {
+ }, w.prototype.setAttributes = function(t) {
+ var e = this.getHref(t).slice(1),
+ e = (t.setAttribute("id", "tab_" + e), t.setAttribute("role", "tab"), t.setAttribute("aria-controls", e), t.setAttribute("aria-selected", "false"), t.setAttribute("tabindex", "-1"), this.getPanel(t));
+ e.setAttribute("role", "tabpanel"), e.setAttribute("aria-labelledby", t.id), e.classList.add(this.jsHiddenClass)
+ }, w.prototype.unsetAttributes = function(t) {
t.removeAttribute("id"), t.removeAttribute("role"), t.removeAttribute("aria-controls"), t.removeAttribute("aria-selected"), t.removeAttribute("tabindex");
- var e = this.getPanel(t);
- e.removeAttribute("role"), e.removeAttribute("aria-labelledby"), e.classList.remove(this.jsHiddenClass)
- }, p.prototype.onTabClick = function(t) {
+ t = this.getPanel(t);
+ t.removeAttribute("role"), t.removeAttribute("aria-labelledby"), t.classList.remove(this.jsHiddenClass)
+ }, w.prototype.onTabClick = function(t) {
if (!t.target.classList.contains("govuk-tabs__tab")) return !1;
t.preventDefault();
- var e = t.target,
- n = this.getCurrentTab();
- this.hideTab(n), this.showTab(e), this.createHistoryEntry(e)
- }, p.prototype.createHistoryEntry = function(t) {
+ var t = t.target,
+ e = this.getCurrentTab();
+ this.hideTab(e), this.showTab(t), this.createHistoryEntry(t)
+ }, w.prototype.createHistoryEntry = function(t) {
var e = this.getPanel(t),
n = e.id;
e.id = "", this.changingHash = !0, window.location.hash = this.getHref(t).slice(1), e.id = n
- }, p.prototype.onTabKeydown = function(t) {
+ }, w.prototype.onTabKeydown = function(t) {
switch (t.keyCode) {
case this.keys.left:
case this.keys.up:
@@ -809,49 +910,51 @@
case this.keys.down:
this.activateNextTab(), t.preventDefault()
}
- }, p.prototype.activateNextTab = function() {
- var t = this.getCurrentTab(),
- e = t.parentNode.nextElementSibling;
- if (e) var n = e.querySelector(".govuk-tabs__tab");
- n && (this.hideTab(t), this.showTab(n), n.focus(), this.createHistoryEntry(n))
- }, p.prototype.activatePreviousTab = function() {
- var t = this.getCurrentTab(),
- e = t.parentNode.previousElementSibling;
- if (e) var n = e.querySelector(".govuk-tabs__tab");
- n && (this.hideTab(t), this.showTab(n), n.focus(), this.createHistoryEntry(n))
- }, p.prototype.getPanel = function(t) {
+ }, w.prototype.activateNextTab = function() {
+ var t, e = this.getCurrentTab(),
+ n = e.parentNode.nextElementSibling;
+ (t = n ? n.querySelector(".govuk-tabs__tab") : t) && (this.hideTab(e), this.showTab(t), t.focus(), this.createHistoryEntry(t))
+ }, w.prototype.activatePreviousTab = function() {
+ var t, e = this.getCurrentTab(),
+ n = e.parentNode.previousElementSibling;
+ (t = n ? n.querySelector(".govuk-tabs__tab") : t) && (this.hideTab(e), this.showTab(t), t.focus(), this.createHistoryEntry(t))
+ }, w.prototype.getPanel = function(t) {
return this.$module.querySelector(this.getHref(t))
- }, p.prototype.showPanel = function(t) {
+ }, w.prototype.showPanel = function(t) {
this.getPanel(t).classList.remove(this.jsHiddenClass)
- }, p.prototype.hidePanel = function(t) {
+ }, w.prototype.hidePanel = function(t) {
this.getPanel(t).classList.add(this.jsHiddenClass)
- }, p.prototype.unhighlightTab = function(t) {
+ }, w.prototype.unhighlightTab = function(t) {
t.setAttribute("aria-selected", "false"), t.parentNode.classList.remove("govuk-tabs__list-item--selected"), t.setAttribute("tabindex", "-1")
- }, p.prototype.highlightTab = function(t) {
+ }, w.prototype.highlightTab = function(t) {
t.setAttribute("aria-selected", "true"), t.parentNode.classList.add("govuk-tabs__list-item--selected"), t.setAttribute("tabindex", "0")
- }, p.prototype.getCurrentTab = function() {
+ }, w.prototype.getCurrentTab = function() {
return this.$module.querySelector(".govuk-tabs__list-item--selected .govuk-tabs__tab")
- }, p.prototype.getHref = function(t) {
- var e = t.getAttribute("href");
- return e.slice(e.indexOf("#"), e.length)
- }, t.initAll = function m(t) {
- var e = "undefined" != typeof(t = void 0 !== t ? t : {}).scope ? t.scope : document;
- s(e.querySelectorAll('[data-module="govuk-button"]'), function(t) {
- new o(t).init()
- }), s(e.querySelectorAll('[data-module="govuk-accordion"]'), function(t) {
- new n(t).init()
- }), s(e.querySelectorAll('[data-module="govuk-details"]'), function(t) {
- new i(t).init()
- }), s(e.querySelectorAll('[data-module="govuk-character-count"]'), function(t) {
- new r(t).init()
- }), s(e.querySelectorAll('[data-module="govuk-checkboxes"]'), function(t) {
- new a(t).init()
- }), new l(e.querySelector('[data-module="govuk-error-summary"]')).init(), new u(e.querySelector('[data-module="govuk-header"]')).init(), s(e.querySelectorAll('[data-module="govuk-notification-banner"]'), function(t) {
- new c(t).init()
- }), s(e.querySelectorAll('[data-module="govuk-radios"]'), function(t) {
+ }, w.prototype.getHref = function(t) {
+ t = t.getAttribute("href");
+ return t.slice(t.indexOf("#"), t.length)
+ }, t.initAll = function(e) {
+ var t = "undefined" != typeof(e = void 0 !== e ? e : {}).scope ? e.scope : document,
+ n = (i(t.querySelectorAll('[data-module="govuk-accordion"]'), function(t) {
+ new o(t, e.accordion).init()
+ }), t.querySelectorAll('[data-module="govuk-button"]')),
+ n = (i(n, function(t) {
+ new u(t, e.button).init()
+ }), t.querySelectorAll('[data-module="govuk-character-count"]')),
+ n = (i(n, function(t) {
+ new p(t, e.characterCount).init()
+ }), t.querySelectorAll('[data-module="govuk-checkboxes"]')),
+ n = (i(n, function(t) {
+ new f(t).init()
+ }), t.querySelectorAll('[data-module="govuk-details"]'));
+ i(n, function(t) {
new d(t).init()
- }), new h(e.querySelector('[data-module="govuk-skip-link"]')).init(), s(e.querySelectorAll('[data-module="govuk-tabs"]'), function(t) {
- new p(t).init()
+ }), (n = t.querySelector('[data-module="govuk-error-summary"]')) && new m(n, e.errorSummary).init(), (n = t.querySelector('[data-module="govuk-header"]')) && new y(n).init(), i(t.querySelectorAll('[data-module="govuk-notification-banner"]'), function(t) {
+ new b(t, e.notificationBanner).init()
+ }), i(n = t.querySelectorAll('[data-module="govuk-radios"]'), function(t) {
+ new g(t).init()
+ }), new v(t.querySelector('[data-module="govuk-skip-link"]')).init(), i(t.querySelectorAll('[data-module="govuk-tabs"]'), function(t) {
+ new w(t).init()
})
- }, t.Accordion = n, t.Button = o, t.Details = i, t.CharacterCount = r, t.Checkboxes = a, t.ErrorSummary = l, t.Header = u, t.NotificationBanner = c, t.Radios = d, t.SkipLink = h, t.Tabs = p
+ }, t.Accordion = o, t.Button = u, t.Details = d, t.CharacterCount = p, t.Checkboxes = f, t.ErrorSummary = m, t.Header = y, t.NotificationBanner = b, t.Radios = g, t.SkipLink = v, t.Tabs = w
});
\ No newline at end of file
diff --git a/dist/govuk-frontend-ie8-4.3.1.min.css b/dist/govuk-frontend-ie8-4.4.0.min.css
similarity index 5%
rename from dist/govuk-frontend-ie8-4.3.1.min.css
rename to dist/govuk-frontend-ie8-4.4.0.min.css
index ab01f847..e6dcd9b8 100644
--- a/dist/govuk-frontend-ie8-4.3.1.min.css
+++ b/dist/govuk-frontend-ie8-4.4.0.min.css
@@ -64,7 +64,7 @@
color: #0b0c0c
}
- {
+.govuk-link--no-underline:not(:hover):not(:active) {
text-decoration: none
}
@@ -347,18 +347,12 @@
.govuk-button-group {
margin-bottom: 15px;
- display: -ms-flexbox;
display: flex;
- -ms-flex-direction: column;
flex-direction: column;
- -ms-flex-align: center;
align-items: center;
margin-right: -15px;
- -ms-flex-direction: row;
flex-direction: row;
- -ms-flex-wrap: wrap;
flex-wrap: wrap;
- -ms-flex-align: baseline;
align-items: baseline
}
@@ -530,8 +524,6 @@
.govuk-template {
background-color: #f3f2f1;
- -webkit-text-size-adjust: 100%;
- -moz-text-size-adjust: 100%;
text-size-adjust: 100%;
overflow-y: scroll
}
@@ -698,8 +690,6 @@
left: .375rem;
width: .375rem;
height: .375rem;
- -webkit-transform: rotate(-45deg);
- -ms-transform: rotate(-45deg);
transform: rotate(-45deg);
content: "\25B2";
position: relative;
@@ -707,15 +697,11 @@
}
.js-enabled .govuk-accordion-nav__chevron--down {
- -webkit-transform: rotate(180deg);
- -ms-transform: rotate(180deg);
transform: rotate(180deg)
}
.js-enabled .govuk-accordion-nav__chevron--down:after {
content: "\25BC";
- -webkit-transform: none;
- -ms-transform: none;
transform: none
}
@@ -876,8 +862,6 @@
width: 7px;
height: 7px;
margin: auto 0;
- -webkit-transform: rotate(225deg);
- -ms-transform: rotate(225deg);
transform: rotate(225deg);
content: "\003c";
width: auto;
@@ -947,8 +931,6 @@
width: 7px;
height: 7px;
margin: auto 0;
- -webkit-transform: rotate(45deg);
- -ms-transform: rotate(45deg);
transform: rotate(45deg);
content: "\003e";
width: auto;
@@ -1055,7 +1037,7 @@
box-shadow: inset 0 0 0 1px #fd0
}
- {
+.govuk-button:focus:not(:active):not(:hover) {
border-color: #fd0;
color: #0b0c0c;
background-color: #fd0;
@@ -1148,19 +1130,15 @@
font-size: 24px;
font-size: 1.5rem;
line-height: 1;
- display: -ms-inline-flexbox;
display: inline-flex;
min-height: auto;
- -ms-flex-pack: center;
justify-content: center
}
.govuk-button__start-icon {
margin-left: 10px;
vertical-align: middle;
- -ms-flex-negative: 0;
flex-shrink: 0;
- -ms-flex-item-align: center;
align-self: center;
forced-color-adjust: auto
}
@@ -1297,11 +1275,8 @@
color: #505a5f
}
- {
- margin-bottom: 10px
-}
-
- {
+.govuk-fieldset__legend:not(.govuk-fieldset__legend--m):not(.govuk-fieldset__legend--l):not(.govuk-fieldset__legend--xl)+.govuk-hint,
+.govuk-label:not(.govuk-label--m):not(.govuk-label--l):not(.govuk-label--xl)+.govuk-hint {
margin-bottom: 10px
}
@@ -1422,7 +1397,6 @@
margin-bottom: 0;
padding: 8px 15px 5px;
cursor: pointer;
- -ms-touch-action: manipulation;
touch-action: manipulation
}
@@ -1533,7 +1507,7 @@
clear: both
}
- {
+.govuk-checkboxes--small .govuk-checkboxes__item:hover .govuk-checkboxes__input:not(:disabled)+.govuk-checkboxes__label:before {
box-shadow: 0 0 0 10px #b1b4b6
}
@@ -1591,7 +1565,6 @@
font-family: GDS Transport, arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
- -webkit-font-feature-settings: "tnum" 1;
font-feature-settings: "tnum" 1;
font-weight: 400;
margin-top: 0;
@@ -1600,12 +1573,15 @@
@supports (font-variant-numeric:tabular-nums) {
.govuk-character-count__message {
- -webkit-font-feature-settings: normal;
font-feature-settings: normal;
font-variant-numeric: tabular-nums
}
}
+.govuk-character-count__message:after {
+ content: "\200B"
+}
+
.govuk-character-count__message--disabled {
visibility: hidden
}
@@ -1656,7 +1632,7 @@
display: table-row
}
- {
+.govuk-summary-list__row:not(.govuk-summary-list__row--no-actions)>:last-child {
padding-right: 0
}
@@ -1715,7 +1691,7 @@
padding-left: 10px
}
- {
+.govuk-summary-list__actions-list-item:not(:first-child) {
border-left: 1px solid #b1b4b6
}
@@ -1764,7 +1740,6 @@
padding: 5px;
border: 2px solid #0b0c0c;
border-radius: 0;
- -webkit-appearance: none;
appearance: none
}
@@ -1822,12 +1797,10 @@
}
.govuk-input__wrapper {
- display: -ms-flexbox;
display: flex
}
.govuk-input__wrapper .govuk-input {
- -ms-flex: 0 1 auto;
flex: 0 1 auto
}
@@ -1859,7 +1832,6 @@
text-align: center;
white-space: nowrap;
cursor: default;
- -ms-flex: 0 0 auto;
flex: 0 0 auto
}
@@ -1945,7 +1917,6 @@
display: block;
width: 0;
height: 0;
- -webkit-clip-path: polygon(0 0, 100% 50%, 0 100%);
clip-path: polygon(0 0, 100% 50%, 0 100%);
border-color: transparent;
border-style: solid;
@@ -1957,7 +1928,6 @@
display: block;
width: 0;
height: 0;
- -webkit-clip-path: polygon(0 0, 50% 100%, 100% 0);
clip-path: polygon(0 0, 50% 100%, 100% 0);
border-color: transparent;
border-style: solid;
@@ -2149,15 +2119,11 @@
}
.govuk-footer__meta {
- display: -ms-flexbox;
display: flex;
margin-right: -15px;
margin-left: -15px;
- -ms-flex-wrap: wrap;
flex-wrap: wrap;
- -ms-flex-align: end;
align-items: flex-end;
- -ms-flex-pack: center;
justify-content: center
}
@@ -2168,7 +2134,6 @@
}
.govuk-footer__meta-item--grow {
- -ms-flex: 1;
flex: 1
}
@@ -2238,7 +2203,6 @@
margin: 0;
padding: 0;
list-style: none;
- -webkit-column-gap: 30px;
column-gap: 30px
}
@@ -2247,12 +2211,10 @@
}
.govuk-footer__list--columns-2 {
- -webkit-column-count: 2;
column-count: 2
}
.govuk-footer__list--columns-3 {
- -webkit-column-count: 3;
column-count: 3
}
@@ -2462,7 +2424,6 @@
}
.govuk-header__menu-button:hover {
- -webkit-text-decoration: solid underline 3px;
text-decoration: solid underline 3px;
text-underline-offset: .1em
}
@@ -2478,7 +2439,6 @@
display: inline-block;
width: 0;
height: 0;
- -webkit-clip-path: polygon(0 0, 50% 100%, 100% 0);
clip-path: polygon(0 0, 50% 100%, 100% 0);
border-color: transparent;
border-style: solid;
@@ -2492,7 +2452,6 @@
display: inline-block;
width: 0;
height: 0;
- -webkit-clip-path: polygon(50% 0, 0 100%, 100% 100%);
clip-path: polygon(50% 0, 0 100%, 100% 100%);
border-color: transparent;
border-style: solid;
@@ -2720,17 +2679,11 @@
.govuk-pagination {
margin-bottom: 30px;
- display: -ms-flexbox;
display: flex;
- -ms-flex-direction: column;
flex-direction: column;
- -ms-flex-align: center;
align-items: center;
- -ms-flex-wrap: wrap;
flex-wrap: wrap;
- -ms-flex-direction: row;
flex-direction: row;
- -ms-flex-align: start;
align-items: flex-start
}
@@ -2780,9 +2733,7 @@
.govuk-pagination__next .govuk-pagination__link,
.govuk-pagination__prev .govuk-pagination__link {
- display: -ms-flexbox;
display: flex;
- -ms-flex-align: center;
align-items: center
}
@@ -2943,7 +2894,7 @@
text-decoration: none
}
- {
+.govuk-pagination--block .govuk-pagination__link:not(:focus) {
text-decoration: none
}
@@ -3314,7 +3265,6 @@
margin-bottom: 0;
padding: 8px 15px 5px;
cursor: pointer;
- -ms-touch-action: manipulation;
touch-action: manipulation
}
@@ -3468,7 +3418,7 @@
margin-bottom: 5px
}
- {
+.govuk-radios--small .govuk-radios__item:hover .govuk-radios__input:not(:disabled)+.govuk-radios__label:before {
box-shadow: 0 0 0 10px #b1b4b6
}
@@ -3526,7 +3476,6 @@
margin: 0 !important;
overflow: hidden !important;
clip: rect(0 0 0 0) !important;
- -webkit-clip-path: inset(50%) !important;
clip-path: inset(50%) !important;
white-space: nowrap !important;
font-family: GDS Transport, arial, sans-serif;
@@ -3551,7 +3500,6 @@
margin: inherit !important;
overflow: visible !important;
clip: auto !important;
- -webkit-clip-path: none !important;
clip-path: none !important;
white-space: inherit !important
}
@@ -3621,14 +3569,12 @@
font-family: GDS Transport, arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
- -webkit-font-feature-settings: "tnum" 1;
font-feature-settings: "tnum" 1;
font-weight: 400
}
@supports (font-variant-numeric:tabular-nums) {
.govuk-table__cell--numeric {
- -webkit-font-feature-settings: normal;
font-feature-settings: normal;
font-variant-numeric: tabular-nums
}
@@ -3716,7 +3662,6 @@
padding: 0 !important;
overflow: hidden !important;
clip: rect(0 0 0 0) !important;
- -webkit-clip-path: inset(50%) !important;
clip-path: inset(50%) !important;
border: 0 !important;
white-space: nowrap !important
@@ -3741,8 +3686,6 @@
font-size: 30px;
line-height: 29px;
text-align: center;
- -webkit-user-select: none;
- -ms-user-select: none;
user-select: none;
forced-color-adjust: none
}
@@ -3782,7 +3725,6 @@
margin: 0 !important;
overflow: hidden !important;
clip: rect(0 0 0 0) !important;
- -webkit-clip-path: inset(50%) !important;
clip-path: inset(50%) !important;
white-space: nowrap !important
}
@@ -3795,7 +3737,6 @@
margin: inherit !important;
overflow: visible !important;
clip: auto !important;
- -webkit-clip-path: none !important;
clip-path: none !important;
white-space: inherit !important
} |
36degrees
approved these changes
Nov 11, 2022
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, but let's hold off on actually merging this until we're ready to do the release on Monday.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
New features
Change the Button component's background and text colour
For non-GOV.UK branded websites, you can now change the Button component background and text colour.
To change the Button component background colour, set the
$govuk-button-background-colour
Sass variable.To change the Button component text colour, set the
$govuk-button-text-colour
Sass variable.This was added in pull request #2752: Change the Button component background and text colour. Thanks to Nick Colley for this contribution.
Localise the navigation menu toggle button
When using the header Nunjucks macro, you can now translate the text of the mobile navigation menu toggle button by using the
menuButtonText
parameter.You should avoid lengthy values for the
menuButtonText
parameter. If the text is too long it can overflow and cause visual issues.This was added in pull request #2720: Add parameter to localise mobile menu toggle button.
Localise the character count's textarea description/fallback text
When using the character count Nunjucks macro, you can now translate the description of textarea by using the
textareaDescriptionText
option.This text is announced by screen readers when the character count input is focused. It's also displayed visually as a fallback if JavaScript is not available.
This was added in pull request #2742: Add ability to customise character count fallback text, and the option renamed to
textareaDescriptionText
in pull request #2915.Localise the character count's counter message
You can now translate the text shown by the character count component to inform users of:
The Nunjucks macro accepts new options so you can customise each message. You can:
charactersAtLimitText
orwordsAtLimitText
to provide the text that shows when users have reached the limit.charactersUnderLimitText
orwordsUnderLimitText
to provide the text that shows when users are under the limit. The component will pluralise the message according to the configured locale and the number of characters or words remaining.charactersOverLimitText
orwordsOverLimitText
to provide the text that shows when users are over the limit. The component will pluralise the message according to the configured locale and the number of characters or words remaining.You'll find guidance about the plural forms in our documentation about localising GOV.UK Frontend. The component will replace
%{count}
with the number of characters over or under the limit.If you're not using Nunjucks macros, you can use data-* attributes to provide these translations. Within the attribute value, any quotation marks or other characters reserved by HTML needs to be converted into their HTML entity equivalents.
You can:
data-i18n.characters-at-limit
ordata-i18n.words-at-limit
for when users are at the limitdata-i18n.characters-under-limit.{other,many,few,two,one,zero}
ordata-i18n.words-under-limit.{other,many,few,two,one,zero}
, with one suffix for each plural form required by your localedata-i18n.characters-over-limit.{other,many,few,two,one,zero}
ordata-i18n.words-over-limit.{other,many,few,two,one,zero}
, with one suffix for each plural form required by your localeYou can also provide these messages using a JavaScript configuration object when creating an instance of the component or initialising all components. See our guidance on localising GOV.UK Frontend for how to do this.
This was added in the following pull requests:
Localise the character count's input description for assistive technologies
When configuring the character count's limit in JavaScript, you can customise the description provided to assistive technologies when users focus the input (so it indicates the overall limit of characters or words).
Depending on the plural form required by your locale, you can pass the description in the HTML using the
data-i18n.textarea-description.{other,many,few,two,one,zero}
attribute on the element to provide the text to set as the description.You can also provide these messages using a JavaScript configuration object when creating an instance of the component or initialising all components. See our guidance on localising GOV.UK Frontend for how to do this.
This was added in pull request #2915.
Localise the accordion's toggle buttons
You can now translate the text of the accordion component's show and hide toggle buttons.
When using the Nunjucks macro, you can use the new
showSectionText
andhideSectionText
parameters to customise the text of the 'show' and 'hide' toggles in each section.You can also use
showAllSectionsText
andhideAllSectionsText
parameters to customise the text of the toggle at the top of the accordion.If you're not using the Nunjucks macro, you can customise these using data-* attributes. Within the attribute value, any quotation marks or other characters reserved by HTML needs to be converted into their HTML entity equivalents.
data-i18n.show-section
data-i18n.show-section-aria-label
data-i18n.hide-section
data-i18n.hide-section-aria-label
data-i18n.show-all-sections
data-i18n.hide-all-sections
You can also change this text for all instances of the Accordion using a JavaScript configuration object. See our guidance on localising GOV.UK Frontend for how to do this.
This was added in pull requests:
Suppress deprecation warnings
You can now suppress warnings from deprecations within GOV.UK Frontend by updating the
$govuk-suppressed-warnings
map in Sass. Every deprecation warning will now include a warning "key" which you can use in the following code, placed at the root of your sass project:This was added in #2911 Add warning suppression functionality
Configure components in JavaScript
JavaScript components can get the same configuration options in 2 ways - through data attributes, as before, and now when creating an instance. These components are:
Button
component, for itspreventDoubleClick
option (matchingdata-prevent-double-click
)CharacterCount
component, for itsmaxlength
,maxwords
andthreshold
options (matchingdata-maxlength
,data-maxwords
anddata-threshold
, respectively)ErrorSummary
component, for itsdisableAutoFocus
option (matchingdata-disable-auto-focus
)NotificationBanner
component, for itsdisableAutoFocus
option (matchingdata-disable-auto-focus
)You can leave out these configuration options when using the Nunjucks macro and provide configuration when:
initAll
For example:
You can find more information about component configuration in GOV.UK Frontend documentation.
This was added in pull requests specific for each components:
Recommended changes
Update the HTML for the error summary
If you're not using the Nunjucks macros, you can improve the experience for screen reader users by making these changes to the error summary markup:
aria-labelledby="error-summary-title"
androle="alert"
from the parent element (govuk-error-summary
)div
wrapper around the contents ofgovuk-error-summary
with the attributerole="alert"
id="error-summary-title"
from the error summaryh2
(govuk-error-summary__title
)This will enable screen reader users to have a better, more coherent experience with the error summary. It will make sure users of JAWS 2022 or later will hear the entire contents of the error summary on page load and therefore have further context on why there is an error on the page they're on.
This was added in pull request #2677: Amend error summary markup to fix page load focus bug in JAWS 2022.
Deprecated features
Stop using the compatibility mode settings
In GOV.UK Frontend v5.0 we will stop supporting compatibility with legacy codebases. We are therefore deprecating the compatibility mode variables associated with legacy codebases:
$govuk-compatibility-govukfrontendtoolkit
$govuk-compatibility-govuktemplate
$govuk-compatibility-govukelements
This was introduced in pull request #2882: Deprecate compatibility mode settings.
Stop using settings associated with legacy codebases
In GOV.UK Frontend v5.0 we will stop supporting compatibility with legacy codebases. As part of this, we're deprecating settings controlled by compatibility mode variables. This includes the
govuk-compatibility
mixin and the following settings:$govuk-use-legacy-palette
$govuk-use-legacy-font
$govuk-typography-use-rem
$govuk-font-family-tabular
This was introduced in pull request #2844: Remove compatibility mode from govuk-frontend.
Fixes
In pull request 2851: Support Prototype Kit v13 we've introduced support for the plugins system included in the upcoming Prototype Kit v13.
We've made fixes to GOV.UK Frontend in the following pull requests: