hmrc-frontend 7.2.0 → 7.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["src/components/back-link-helper/back-link-helper.js","src/components/timeout-dialog/utils.js","src/components/timeout-dialog/dialog.js","src/components/timeout-dialog/validate-input.js","src/components/timeout-dialog/redirectHelper.js","src/components/timeout-dialog/timeout-dialog.js","src/components/user-research-banner/user-research-banner.js","src/utils/cookies.js","src/components/timeout-dialog/session-activity-service.js","src/components/hmrc-print-link/hmrc-print-link.js","src/all.js","src/all-govuk-and-hmrc.js"],"names":["BackLinkHelper","$module","window","document","this","prototype","init","_this","history","replaceState","location","href","addEventListener","event","preventDefault","back","warn","console","utils","generateDomElementFromString","str","abc","createElement","innerHTML","firstChild","generateDomElementFromStringAndAppendText","text","$tmp","innerText","hasClass","selector","className","querySelector","classList","contains","addClass","querySelectorAll","forEach","i","add","removeClass","remove","removeElement","$elem","parent","parentNode","removeChild","ajaxGet","url","success","xhr","XMLHttpRequest","open","onreadystatechange","readyState","status","responseText","setRequestHeader","send","dialog","displayDialog","$elementToDisplay","$dialog","$overlay","$preparedElementToDisplay","resetElementsFunctionList","closeCallbacks","appendChild","push","body","handleTouch","elements","join","close","length","shift","fn","value","getAttribute","setAttribute","removeAttribute","keepFocus","modalFocus","getElementById","target","stopPropagation","focus","elemToFocusOnReset","activeElement","removeEventListener","setupFocusHandlerAndFocusDialog","keydownListener","e","keyCode","setupKeydownHandler","touches","changedTouches","closeDialog","setAriaLabelledBy","addCloseHandler","closeHandler","ValidateInput","RedirectHelper","TimeoutDialog","$sessionActivityService","currentTimer","options","settings","cleanupFunctions","sessionActivityService","listenForSessionActivityAndResetDialogTimer","synchroniseTabs","onActivity","timeOfActivity","timestamp","cleanup","setupDialogTimer","validateInput","config","missingRequiredConfig","item","concat","replace","toLowerCase","Error","mergeOptionsWithDefaults","theOptions","localisedDefaults","clone","_objectSpread","Object","keys","key","_typeof","undefined","timeOfLastActivity","arguments","getDateNow","signoutTime","timeout","delta","secondsUntilTimeoutDialog","countdown","setTimeout","setupDialog","clearTimeout","$element","title","$countdownElement","$audibleMessage","$visualMessge","message","createTextNode","messageSuffix","$staySignedInButton","keepAliveButtonText","$wrapper","keepAliveAndClose","hideSignOutButton","$signOutButton","signOutButtonText","signOut","signOutUrl","dialogControl","getMillisecondsRemaining","getHumanText","counter","minutes","visibleMessage","properties","Math","ceil","roundSecondsUp","updateTextIfChanged","updateCountdown","audibleHumanText","humanText","messageParts","getAudibleHumanText","runUpdate","remaining","roundedRemaining","max","round","floor","keepAliveUrl","logActivity","Date","now","redirectToUrl","timeoutUrl","validate","lookupData","attributes","getNamedItem","string","minute","seconds","second","stringToValidate","parsedInt","parseInt","Number","isNaN","String","redirectHelper","UserResearchBanner","$closeLink","cookieName","cookieExpiryDays","name","nameEQ","cookies","cookie","split","len","charAt","substring","indexOf","decodeURIComponent","getCookie","eventHandlers","noThanksClick","bind","cookieString","days","date","setTime","getTime","toGMTString","protocol","setCookie","SessionActivityService","BrowserBroadcastChannel","_classCallCheck","activityChannel","_createClass","postMessage","callback","onmessage","data","HmrcPrintLink","print","HMRCFrontend","initAll","logAndIgnoreErrors","error","$HmrcPrintLink","BroadcastChannel","$TimeoutDialog","$UserResearchBanner","$BackLink"],"mappings":"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","file":"../hmrc-frontend-7.2.0.min.js","sourcesContent":["function BackLinkHelper($module, window, document) {\n this.$module = $module;\n this.window = window;\n this.document = document;\n}\n\nBackLinkHelper.prototype.init = function init() {\n // do nothing if History API is absent\n if (this.window.history) {\n // prevent resubmit warning\n if (this.window.history.replaceState && typeof this.window.history.replaceState === 'function') {\n this.window.history.replaceState(null, null, this.window.location.href);\n }\n\n this.$module.addEventListener('click', (event) => {\n event.preventDefault();\n if (this.window.history.back && typeof this.window.history.back === 'function') {\n this.window.history.back();\n }\n });\n }\n};\n\nexport default BackLinkHelper;\n","const { warn } = console;\n\nconst utils = {\n generateDomElementFromString(str) {\n const abc = document.createElement('div');\n abc.innerHTML = str;\n return abc.firstChild;\n },\n\n generateDomElementFromStringAndAppendText(str, text) {\n const $tmp = utils.generateDomElementFromString(str);\n $tmp.innerText = text;\n return $tmp;\n },\n\n hasClass(selector, className) {\n return document.querySelector(selector).classList.contains(className);\n },\n\n addClass(selector, className) {\n const elements = document.querySelectorAll(selector);\n elements.forEach((i) => { i.classList.add(className); });\n },\n\n removeClass(selector, className) {\n const elements = document.querySelectorAll(selector);\n elements.forEach((i) => { i.classList.remove(className); });\n },\n\n removeElement($elem) {\n const parent = $elem.parentNode;\n if (parent) {\n parent.removeChild($elem);\n } else {\n warn(\"couldn't find parent for elem\", $elem);\n }\n },\n\n ajaxGet(url, success) {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url);\n xhr.onreadystatechange = () => {\n if (xhr.readyState > 3 && xhr.status === 200) success(xhr.responseText);\n };\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.send();\n return xhr;\n },\n};\n\nexport default utils;\n","import utils from './utils';\n\nfunction displayDialog($elementToDisplay) {\n const $dialog = utils.generateDomElementFromString('<div id=\"hmrc-timeout-dialog\" tabindex=\"-1\" role=\"dialog\" aria-modal=\"true\" class=\"hmrc-timeout-dialog\">');\n const $overlay = utils.generateDomElementFromString('<div id=\"hmrc-timeout-overlay\" class=\"hmrc-timeout-overlay\">');\n const $preparedElementToDisplay = typeof $elementToDisplay === 'string' ? utils.generateDomElementFromString($elementToDisplay) : $elementToDisplay;\n const resetElementsFunctionList = [];\n const closeCallbacks = [];\n\n $dialog.appendChild($preparedElementToDisplay);\n\n if (!utils.hasClass('html', 'noScroll')) {\n utils.addClass('html', 'noScroll');\n resetElementsFunctionList.push(() => {\n utils.removeClass('html', 'noScroll');\n });\n }\n document.body.appendChild($dialog);\n document.body.appendChild($overlay);\n\n resetElementsFunctionList.push(() => {\n utils.removeElement($dialog);\n utils.removeElement($overlay);\n });\n\n const setupFocusHandlerAndFocusDialog = () => {\n function keepFocus(event) {\n const modalFocus = document.getElementById('hmrc-timeout-dialog');\n if (modalFocus) {\n if (event.target !== modalFocus && !modalFocus.contains(event.target)) {\n event.stopPropagation();\n modalFocus.focus();\n }\n }\n }\n\n const elemToFocusOnReset = document.activeElement;\n $dialog.focus();\n\n document.addEventListener('focus', keepFocus, true);\n\n resetElementsFunctionList.push(() => {\n document.removeEventListener('focus', keepFocus);\n elemToFocusOnReset.focus();\n });\n };\n\n // disable the non-dialog page to prevent confusion for VoiceOver users\n const selectors = [\n '#skiplink-container',\n 'body > header',\n '#global-cookie-message',\n 'main',\n 'body > footer',\n 'body > .govuk-skip-link',\n '.cbanner-govuk-cookie-banner',\n 'body > .govuk-width-container',\n ];\n const elements = document.querySelectorAll(selectors.join(', '));\n const close = () => {\n while (resetElementsFunctionList.length > 0) {\n const fn = resetElementsFunctionList.shift();\n fn();\n }\n };\n const closeAndInform = () => {\n closeCallbacks.forEach((fn) => { fn(); });\n close();\n };\n const setupKeydownHandler = () => {\n function keydownListener(e) {\n if (e.keyCode === 27) {\n closeAndInform();\n }\n }\n\n document.addEventListener('keydown', keydownListener);\n\n resetElementsFunctionList.push(() => {\n document.removeEventListener('keydown', keydownListener);\n });\n };\n const preventMobileScrollWhileAllowingPinchZoom = () => {\n const handleTouch = (e) => {\n const touches = e.touches || e.changedTouches || [];\n\n if (touches.length === 1) {\n e.preventDefault();\n }\n };\n\n document.addEventListener('touchmove', handleTouch, true);\n\n resetElementsFunctionList.push(() => {\n document.removeEventListener('touchmove', handleTouch, true);\n });\n };\n\n elements.forEach(($elem) => {\n const value = $elem.getAttribute('aria-hidden');\n $elem.setAttribute('aria-hidden', 'true');\n resetElementsFunctionList.push(() => {\n if (value) {\n $elem.setAttribute('aria-hidden', value);\n } else {\n $elem.removeAttribute('aria-hidden');\n }\n });\n });\n\n //\n setupFocusHandlerAndFocusDialog();\n\n setupKeydownHandler();\n\n preventMobileScrollWhileAllowingPinchZoom();\n\n return {\n closeDialog() {\n close();\n },\n setAriaLabelledBy(value) {\n if (value) {\n $dialog.setAttribute('aria-labelledby', value);\n } else {\n $dialog.removeAttribute('aria-labelledby');\n }\n },\n addCloseHandler(closeHandler) {\n closeCallbacks.push(closeHandler);\n },\n };\n}\n\nexport default { displayDialog };\n","function ValidateInput() {\n}\n\nValidateInput.int = (stringToValidate) => {\n const parsedInt = parseInt(stringToValidate, 10);\n return Number.isNaN(parsedInt) ? undefined : parsedInt;\n};\n\nValidateInput.string = (stringToValidate) => (typeof stringToValidate === 'string' ? stringToValidate : undefined);\n\nValidateInput.boolean = (stringToValidate) => String(stringToValidate).toLowerCase() === 'true';\n\nexport default ValidateInput;\n","function RedirectHelper() {}\n\nRedirectHelper.redirectToUrl = (url) => {\n // This exists to make redirects more testable\n window.location.href = url;\n};\n\nexport default RedirectHelper;\n","import dialog from './dialog';\nimport ValidateInput from './validate-input';\nimport RedirectHelper from './redirectHelper';\nimport utils from './utils';\n\n// TODO: rewrite this to follow govuk-frontend prototype module pattern\n\nfunction TimeoutDialog($module, $sessionActivityService) {\n let options = {};\n let settings = {};\n const cleanupFunctions = [];\n let currentTimer;\n const sessionActivityService = $sessionActivityService;\n\n function init() {\n const validate = ValidateInput;\n\n function lookupData(key) {\n return ($module.attributes.getNamedItem(key) || {}).value;\n }\n\n const localisedDefaults = validate.string(lookupData('data-language')) === 'cy' ? {\n title: 'Rydych ar fin cael eich allgofnodi',\n message: 'Er eich diogelwch, byddwn yn eich allgofnodi cyn pen',\n keepAliveButtonText: 'Parhau i fod wedi’ch mewngofnodi',\n signOutButtonText: 'Allgofnodi',\n properties: {\n minutes: 'funud',\n minute: 'funud',\n seconds: 'eiliad',\n second: 'eiliad',\n },\n } : {\n title: 'You’re about to be signed out',\n message: 'For your security, we will sign you out in',\n keepAliveButtonText: 'Stay signed in',\n signOutButtonText: 'Sign out',\n properties: {\n minutes: 'minutes',\n minute: 'minute',\n seconds: 'seconds',\n second: 'second',\n },\n };\n\n options = {\n timeout: validate.int(lookupData('data-timeout')),\n countdown: validate.int(lookupData('data-countdown')),\n keepAliveUrl: validate.string(lookupData('data-keep-alive-url')),\n signOutUrl: validate.string(lookupData('data-sign-out-url')),\n timeoutUrl: validate.string(lookupData('data-timeout-url')),\n title: validate.string(lookupData('data-title')),\n message: validate.string(lookupData('data-message')),\n messageSuffix: validate.string(lookupData('data-message-suffix')),\n keepAliveButtonText: validate.string(\n lookupData('data-keep-alive-button-text'),\n ),\n signOutButtonText: validate.string(\n lookupData('data-sign-out-button-text'),\n ),\n synchroniseTabs: validate.boolean(\n lookupData('data-synchronise-tabs') || false,\n ),\n hideSignOutButton: validate.boolean(\n lookupData('data-hide-sign-out-button') || false,\n ),\n };\n\n // Default timeoutUrl to signOutUrl if not set\n options.timeoutUrl = options.timeoutUrl || options.signOutUrl;\n\n validateInput(options);\n settings = mergeOptionsWithDefaults(options, localisedDefaults);\n setupDialogTimer();\n listenForSessionActivityAndResetDialogTimer();\n }\n\n const broadcastSessionActivity = () => {\n sessionActivityService.logActivity();\n };\n\n const listenForSessionActivityAndResetDialogTimer = () => {\n if (settings.synchroniseTabs) {\n sessionActivityService.onActivity((event) => {\n const timeOfActivity = event.timestamp;\n cleanup();\n setupDialogTimer(timeOfActivity);\n });\n }\n };\n\n const validateInput = (config) => {\n const requiredConfig = ['timeout', 'countdown', 'keepAliveUrl', 'signOutUrl'];\n const missingRequiredConfig = [];\n\n requiredConfig.forEach((item) => {\n if (!config[item]) {\n missingRequiredConfig.push(`data-${item.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()}`);\n }\n });\n\n if (missingRequiredConfig.length > 0) {\n throw new Error(\n `Missing config item(s): [${missingRequiredConfig.join(', ')}]`,\n );\n }\n };\n\n const mergeOptionsWithDefaults = (theOptions, localisedDefaults) => {\n const clone = { ...theOptions };\n\n Object.keys(localisedDefaults).forEach((key) => {\n if (typeof clone[key] === 'object') {\n clone[key] = mergeOptionsWithDefaults(\n theOptions[key],\n localisedDefaults[key],\n );\n }\n if (clone[key] === undefined || clone[key] === '') {\n clone[key] = localisedDefaults[key];\n }\n });\n\n return clone;\n };\n\n const setupDialogTimer = (timeOfLastActivity = getDateNow()) => {\n const signoutTime = timeOfLastActivity + settings.timeout * 1000;\n\n const delta = getDateNow() - timeOfLastActivity;\n const secondsUntilTimeoutDialog = settings.timeout - settings.countdown;\n const timeout = window.setTimeout(() => {\n setupDialog(signoutTime);\n }, (secondsUntilTimeoutDialog * 1000) - delta);\n\n cleanupFunctions.push(() => {\n window.clearTimeout(timeout);\n if (currentTimer) {\n window.clearTimeout(currentTimer);\n }\n });\n };\n\n const setupDialog = (signoutTime) => {\n const $element = utils.generateDomElementFromString('<div>');\n\n if (settings.title) {\n const $tmp = utils.generateDomElementFromStringAndAppendText(\n '<h1 id=\"hmrc-timeout-heading\" class=\"govuk-heading-m push--top\">',\n settings.title,\n );\n $element.appendChild($tmp);\n }\n\n const $countdownElement = utils.generateDomElementFromString(\n '<span id=\"hmrc-timeout-countdown\" class=\"hmrc-timeout-dialog__countdown\">',\n );\n\n const $audibleMessage = utils.generateDomElementFromString('<p id=\"hmrc-timeout-message\" class=\"govuk-visually-hidden screenreader-content\" aria-live=\"assertive\">');\n const $visualMessge = utils.generateDomElementFromStringAndAppendText(\n '<p class=\"govuk-body hmrc-timeout-dialog__message\" aria-hidden=\"true\">',\n settings.message,\n );\n $visualMessge.appendChild(document.createTextNode(' '));\n $visualMessge.appendChild($countdownElement);\n if (settings.messageSuffix) {\n $visualMessge.appendChild(document.createTextNode(` ${settings.messageSuffix}`));\n }\n\n const $staySignedInButton = utils.generateDomElementFromStringAndAppendText(\n '<button id=\"hmrc-timeout-keep-signin-btn\" class=\"govuk-button\">',\n settings.keepAliveButtonText,\n );\n\n const $wrapper = document.createElement('div');\n $wrapper.classList.add('govuk-button-group');\n $wrapper.appendChild($staySignedInButton);\n\n $element.appendChild($visualMessge);\n $element.appendChild($audibleMessage);\n $staySignedInButton.addEventListener('click', keepAliveAndClose);\n $element.appendChild(document.createTextNode(' '));\n\n if (!settings.hideSignOutButton) {\n const $signOutButton = utils.generateDomElementFromStringAndAppendText(\n '<a id=\"hmrc-timeout-sign-out-link\" class=\"govuk-link hmrc-timeout-dialog__link\">',\n settings.signOutButtonText,\n );\n $signOutButton.addEventListener('click', signOut);\n $signOutButton.setAttribute('href', settings.signOutUrl);\n\n $wrapper.appendChild($signOutButton);\n }\n\n $element.appendChild($wrapper);\n\n const dialogControl = dialog.displayDialog($element);\n\n cleanupFunctions.push(() => {\n dialogControl.closeDialog();\n });\n\n dialogControl.addCloseHandler(keepAliveAndClose);\n\n dialogControl.setAriaLabelledBy('hmrc-timeout-heading hmrc-timeout-message');\n\n const getMillisecondsRemaining = () => signoutTime - getDateNow();\n const getSecondsRemaining = () => Math.round(getMillisecondsRemaining() / 1000);\n\n const getHumanText = (counter) => {\n let minutes; let\n visibleMessage;\n if (counter < 60) {\n visibleMessage = `${counter} ${settings.properties[counter !== 1 ? 'seconds' : 'second']}.`;\n } else {\n minutes = Math.ceil(counter / 60);\n visibleMessage = `${minutes} ${settings.properties[minutes === 1 ? 'minute' : 'minutes']}.`;\n }\n return visibleMessage;\n };\n\n const getAudibleHumanText = (counter) => {\n const humanText = getHumanText(roundSecondsUp(counter));\n const messageParts = [settings.message, ' ', humanText];\n if (settings.messageSuffix) {\n messageParts.push(' ');\n messageParts.push(settings.messageSuffix);\n }\n return messageParts.join('');\n };\n\n const roundSecondsUp = (counter) => {\n if (counter > 60) {\n return counter;\n } if (counter < 20) {\n return 20;\n }\n return Math.ceil(counter / 20) * 20;\n };\n\n const updateTextIfChanged = ($elem, text) => {\n if ($elem.innerText !== text) {\n // eslint-disable-next-line no-param-reassign\n $elem.innerText = text;\n }\n };\n\n const updateCountdown = (counter) => {\n const visibleMessage = getHumanText(counter);\n const audibleHumanText = getAudibleHumanText(counter);\n\n updateTextIfChanged($countdownElement, visibleMessage);\n updateTextIfChanged($audibleMessage, audibleHumanText);\n };\n\n const getNextTimeout = () => {\n const remaining = getMillisecondsRemaining();\n const roundedRemaining = Math.floor(getMillisecondsRemaining() / 1000) * 1000;\n if (roundedRemaining <= 60000) {\n return (remaining - roundedRemaining) || 1000;\n }\n return remaining - (roundedRemaining - (roundedRemaining % 60000 || 60000));\n };\n\n const runUpdate = () => {\n const counter = Math.max(getSecondsRemaining(), 0);\n updateCountdown(counter);\n if (counter === 0) {\n timeout();\n } else {\n currentTimer = window.setTimeout(runUpdate, getNextTimeout());\n }\n };\n\n runUpdate();\n };\n\n const keepAliveAndClose = () => {\n cleanup();\n setupDialogTimer();\n utils.ajaxGet(settings.keepAliveUrl, () => {});\n broadcastSessionActivity();\n };\n\n const getDateNow = () => Date.now();\n\n const signOut = () => {\n RedirectHelper.redirectToUrl(settings.signOutUrl);\n };\n\n const timeout = () => {\n RedirectHelper.redirectToUrl(settings.timeoutUrl);\n };\n\n const cleanup = () => {\n while (cleanupFunctions.length > 0) {\n const fn = cleanupFunctions.shift();\n fn();\n }\n };\n\n return { init, cleanup };\n}\n\nTimeoutDialog.dialog = dialog;\nTimeoutDialog.redirectHelper = RedirectHelper;\nTimeoutDialog.utils = utils;\n\nexport default TimeoutDialog;\n","import { getCookie, setCookie } from '../../utils/cookies';\n\nfunction UserResearchBanner($module) {\n this.$module = $module;\n this.$closeLink = this.$module.querySelector('.hmrc-user-research-banner__close');\n this.cookieName = 'mdtpurr';\n this.cookieExpiryDays = 28;\n}\n\nUserResearchBanner.prototype.init = function init() {\n const cookieData = getCookie(this.cookieName);\n\n if (cookieData == null) {\n this.$module.classList.add('hmrc-user-research-banner--show');\n if (this.$closeLink) {\n this.$closeLink.addEventListener('click', this.eventHandlers.noThanksClick.bind(this));\n }\n }\n};\n\nUserResearchBanner.prototype.eventHandlers = {\n noThanksClick(event) {\n event.preventDefault();\n\n setCookie(this.cookieName, 'suppress_for_all_services', { days: this.cookieExpiryDays });\n this.$module.classList.remove('hmrc-user-research-banner--show');\n },\n};\n\nexport default UserResearchBanner;\n","// Based on https://github.com/alphagov/govuk_template_jinja\nexport const setCookie = (name, value, options = {}) => {\n let cookieString = `${name}=${value}; path=/`;\n if (options.days) {\n const date = new Date();\n date.setTime(date.getTime() + (options.days * 24 * 60 * 60 * 1000));\n cookieString = `${cookieString}; expires=${date.toGMTString()}`;\n }\n if (window.location.protocol === 'https:') {\n cookieString += '; Secure';\n }\n document.cookie = cookieString;\n\n return cookieString;\n};\n\nexport const getCookie = (name) => {\n const nameEQ = `${name}=`;\n const cookies = document.cookie.split(';');\n for (let i = 0, len = cookies.length; i < len; i += 1) {\n let cookie = cookies[i];\n while (cookie.charAt(0) === ' ') {\n cookie = cookie.substring(1, cookie.length);\n }\n if (cookie.indexOf(nameEQ) === 0) {\n return decodeURIComponent(cookie.substring(nameEQ.length));\n }\n }\n return null;\n};\n","export default class SessionActivityService {\n constructor(BrowserBroadcastChannel) {\n this.activityChannel = BrowserBroadcastChannel && new BrowserBroadcastChannel('session-activity');\n }\n\n logActivity() {\n if (this.activityChannel) {\n const event = { timestamp: Date.now() };\n this.activityChannel.postMessage(event);\n }\n }\n\n onActivity(callback) {\n if (this.activityChannel) {\n this.activityChannel.onmessage = (event) => {\n callback(event.data);\n };\n }\n }\n}\n","function HmrcPrintLink($module, window) {\n this.$module = $module;\n this.window = window;\n}\n\nHmrcPrintLink.prototype.init = function init() {\n this.$module.addEventListener('click', (event) => {\n event.preventDefault();\n this.window.print();\n });\n};\n\nexport default HmrcPrintLink;\n","import BackLinkHelper from './components/back-link-helper/back-link-helper';\nimport TimeoutDialog from './components/timeout-dialog/timeout-dialog';\nimport UserResearchBanner from './components/user-research-banner/user-research-banner';\nimport SessionActivityService from './components/timeout-dialog/session-activity-service';\nimport HmrcPrintLink from './components/hmrc-print-link/hmrc-print-link';\n\nfunction initAll() {\n function logAndIgnoreErrors(init) {\n try {\n init();\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('hmrc-frontend component initialisation failed', error);\n }\n }\n\n const $HmrcPrintLinks = document.querySelectorAll('a[data-module=\"hmrc-print-link\"]');\n $HmrcPrintLinks.forEach(($HmrcPrintLink) => {\n logAndIgnoreErrors(() => {\n new HmrcPrintLink($HmrcPrintLink, window).init();\n });\n });\n\n const sessionActivityService = new SessionActivityService(window.BroadcastChannel);\n sessionActivityService.logActivity();\n\n const $TimeoutDialog = document.querySelector('meta[name=\"hmrc-timeout-dialog\"]');\n if ($TimeoutDialog) {\n logAndIgnoreErrors(() => {\n new TimeoutDialog($TimeoutDialog, sessionActivityService).init();\n });\n }\n\n const $UserResearchBanner = document.querySelector('[data-module=\"hmrc-user-research-banner\"]');\n if ($UserResearchBanner) {\n logAndIgnoreErrors(() => {\n new UserResearchBanner($UserResearchBanner).init();\n });\n }\n\n const $BackLinks = document.querySelectorAll('[data-module=\"hmrc-back-link\"]');\n $BackLinks.forEach(($BackLink) => {\n logAndIgnoreErrors(() => {\n new BackLinkHelper($BackLink, window, document).init();\n });\n });\n}\n\nexport default {\n initAll,\n TimeoutDialog,\n UserResearchBanner,\n BackLinkHelper,\n};\n","import { initAll } from 'govuk-frontend/dist/govuk/govuk-frontend.min.js';\nimport HMRCFrontend from './all';\n\ninitAll();\nHMRCFrontend.initAll();\n"]}
1
+ {"version":3,"sources":["src/components/back-link-helper/back-link-helper.js","src/components/timeout-dialog/utils.js","src/components/timeout-dialog/dialog.js","src/components/timeout-dialog/validate-input.js","src/components/timeout-dialog/redirectHelper.js","src/components/timeout-dialog/timeout-dialog.js","src/components/user-research-banner/user-research-banner.js","src/utils/cookies.js","src/components/timeout-dialog/session-activity-service.js","src/components/hmrc-print-link/hmrc-print-link.js","src/all.js","src/all-govuk-and-hmrc.js"],"names":["BackLinkHelper","$module","window","document","this","prototype","init","_this","history","replaceState","location","href","addEventListener","event","preventDefault","back","warn","console","utils","generateDomElementFromString","str","abc","createElement","innerHTML","firstChild","generateDomElementFromStringAndAppendText","text","$tmp","innerText","hasClass","selector","className","querySelector","classList","contains","addClass","querySelectorAll","forEach","i","add","removeClass","remove","removeElement","$elem","parent","parentNode","removeChild","ajaxGet","url","success","xhr","XMLHttpRequest","open","onreadystatechange","readyState","status","responseText","setRequestHeader","send","dialog","displayDialog","$elementToDisplay","$dialog","$overlay","$preparedElementToDisplay","resetElementsFunctionList","closeCallbacks","appendChild","push","body","handleTouch","elements","join","close","length","shift","fn","value","getAttribute","setAttribute","removeAttribute","keepFocus","modalFocus","getElementById","target","stopPropagation","focus","elemToFocusOnReset","activeElement","removeEventListener","setupFocusHandlerAndFocusDialog","keydownListener","e","keyCode","setupKeydownHandler","touches","changedTouches","closeDialog","setAriaLabelledBy","addCloseHandler","closeHandler","ValidateInput","RedirectHelper","TimeoutDialog","$sessionActivityService","currentTimer","options","settings","cleanupFunctions","sessionActivityService","listenForSessionActivityAndResetDialogTimer","synchroniseTabs","onActivity","timeOfActivity","timestamp","cleanup","setupDialogTimer","validateInput","config","missingRequiredConfig","item","concat","replace","toLowerCase","Error","mergeOptionsWithDefaults","theOptions","localisedDefaults","clone","_objectSpread","Object","keys","key","_typeof","undefined","timeOfLastActivity","arguments","getDateNow","signoutTime","timeout","delta","secondsUntilTimeoutDialog","countdown","setTimeout","setupDialog","clearTimeout","$element","title","$countdownElement","$audibleMessage","$visualMessge","message","createTextNode","messageSuffix","$staySignedInButton","keepAliveButtonText","$wrapper","keepAliveAndClose","hideSignOutButton","$signOutButton","signOutButtonText","signOut","signOutUrl","dialogControl","getMillisecondsRemaining","getHumanText","counter","minutes","visibleMessage","properties","Math","ceil","roundSecondsUp","updateTextIfChanged","updateCountdown","audibleHumanText","humanText","messageParts","getAudibleHumanText","runUpdate","remaining","roundedRemaining","max","round","floor","keepAliveUrl","logActivity","Date","now","redirectToUrl","timeoutUrl","validate","lookupData","attributes","getNamedItem","string","minute","seconds","second","stringToValidate","parsedInt","parseInt","Number","isNaN","String","redirectHelper","UserResearchBanner","$closeLink","cookieName","cookieExpiryDays","name","nameEQ","cookies","cookie","split","len","charAt","substring","indexOf","decodeURIComponent","getCookie","eventHandlers","noThanksClick","bind","cookieString","days","date","setTime","getTime","toGMTString","protocol","setCookie","SessionActivityService","BrowserBroadcastChannel","_classCallCheck","activityChannel","_createClass","postMessage","callback","onmessage","data","HmrcPrintLink","print","HMRCFrontend","initAll","logAndIgnoreErrors","error","$HmrcPrintLink","BroadcastChannel","$TimeoutDialog","$UserResearchBanner","$BackLink"],"mappings":"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","file":"../hmrc-frontend-7.4.0.min.js","sourcesContent":["function BackLinkHelper($module, window, document) {\n this.$module = $module;\n this.window = window;\n this.document = document;\n}\n\nBackLinkHelper.prototype.init = function init() {\n // do nothing if History API is absent\n if (this.window.history) {\n // prevent resubmit warning\n if (this.window.history.replaceState && typeof this.window.history.replaceState === 'function') {\n this.window.history.replaceState(null, null, this.window.location.href);\n }\n\n this.$module.addEventListener('click', (event) => {\n event.preventDefault();\n if (this.window.history.back && typeof this.window.history.back === 'function') {\n this.window.history.back();\n }\n });\n }\n};\n\nexport default BackLinkHelper;\n","const { warn } = console;\n\nconst utils = {\n generateDomElementFromString(str) {\n const abc = document.createElement('div');\n abc.innerHTML = str;\n return abc.firstChild;\n },\n\n generateDomElementFromStringAndAppendText(str, text) {\n const $tmp = utils.generateDomElementFromString(str);\n $tmp.innerText = text;\n return $tmp;\n },\n\n hasClass(selector, className) {\n return document.querySelector(selector).classList.contains(className);\n },\n\n addClass(selector, className) {\n const elements = document.querySelectorAll(selector);\n elements.forEach((i) => { i.classList.add(className); });\n },\n\n removeClass(selector, className) {\n const elements = document.querySelectorAll(selector);\n elements.forEach((i) => { i.classList.remove(className); });\n },\n\n removeElement($elem) {\n const parent = $elem.parentNode;\n if (parent) {\n parent.removeChild($elem);\n } else {\n warn(\"couldn't find parent for elem\", $elem);\n }\n },\n\n ajaxGet(url, success) {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url);\n xhr.onreadystatechange = () => {\n if (xhr.readyState > 3 && xhr.status === 200) success(xhr.responseText);\n };\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr.send();\n return xhr;\n },\n};\n\nexport default utils;\n","import utils from './utils';\n\nfunction displayDialog($elementToDisplay) {\n const $dialog = utils.generateDomElementFromString('<div id=\"hmrc-timeout-dialog\" tabindex=\"-1\" role=\"dialog\" aria-modal=\"true\" class=\"hmrc-timeout-dialog\">');\n const $overlay = utils.generateDomElementFromString('<div id=\"hmrc-timeout-overlay\" class=\"hmrc-timeout-overlay\">');\n const $preparedElementToDisplay = typeof $elementToDisplay === 'string' ? utils.generateDomElementFromString($elementToDisplay) : $elementToDisplay;\n const resetElementsFunctionList = [];\n const closeCallbacks = [];\n\n $dialog.appendChild($preparedElementToDisplay);\n\n if (!utils.hasClass('html', 'noScroll')) {\n utils.addClass('html', 'noScroll');\n resetElementsFunctionList.push(() => {\n utils.removeClass('html', 'noScroll');\n });\n }\n document.body.appendChild($dialog);\n document.body.appendChild($overlay);\n\n resetElementsFunctionList.push(() => {\n utils.removeElement($dialog);\n utils.removeElement($overlay);\n });\n\n const setupFocusHandlerAndFocusDialog = () => {\n function keepFocus(event) {\n const modalFocus = document.getElementById('hmrc-timeout-dialog');\n if (modalFocus) {\n if (event.target !== modalFocus && !modalFocus.contains(event.target)) {\n event.stopPropagation();\n modalFocus.focus();\n }\n }\n }\n\n const elemToFocusOnReset = document.activeElement;\n $dialog.focus();\n\n document.addEventListener('focus', keepFocus, true);\n\n resetElementsFunctionList.push(() => {\n document.removeEventListener('focus', keepFocus);\n elemToFocusOnReset.focus();\n });\n };\n\n // disable the non-dialog page to prevent confusion for VoiceOver users\n const selectors = [\n '#skiplink-container',\n 'body > header',\n '#global-cookie-message',\n 'main',\n 'body > footer',\n 'body > .govuk-skip-link',\n '.cbanner-govuk-cookie-banner',\n 'body > .govuk-width-container',\n ];\n const elements = document.querySelectorAll(selectors.join(', '));\n const close = () => {\n while (resetElementsFunctionList.length > 0) {\n const fn = resetElementsFunctionList.shift();\n fn();\n }\n };\n const closeAndInform = () => {\n closeCallbacks.forEach((fn) => { fn(); });\n close();\n };\n const setupKeydownHandler = () => {\n function keydownListener(e) {\n if (e.keyCode === 27) {\n closeAndInform();\n }\n }\n\n document.addEventListener('keydown', keydownListener);\n\n resetElementsFunctionList.push(() => {\n document.removeEventListener('keydown', keydownListener);\n });\n };\n const preventMobileScrollWhileAllowingPinchZoom = () => {\n const handleTouch = (e) => {\n const touches = e.touches || e.changedTouches || [];\n\n if (touches.length === 1) {\n e.preventDefault();\n }\n };\n\n document.addEventListener('touchmove', handleTouch, true);\n\n resetElementsFunctionList.push(() => {\n document.removeEventListener('touchmove', handleTouch, true);\n });\n };\n\n elements.forEach(($elem) => {\n const value = $elem.getAttribute('aria-hidden');\n $elem.setAttribute('aria-hidden', 'true');\n resetElementsFunctionList.push(() => {\n if (value) {\n $elem.setAttribute('aria-hidden', value);\n } else {\n $elem.removeAttribute('aria-hidden');\n }\n });\n });\n\n //\n setupFocusHandlerAndFocusDialog();\n\n setupKeydownHandler();\n\n preventMobileScrollWhileAllowingPinchZoom();\n\n return {\n closeDialog() {\n close();\n },\n setAriaLabelledBy(value) {\n if (value) {\n $dialog.setAttribute('aria-labelledby', value);\n } else {\n $dialog.removeAttribute('aria-labelledby');\n }\n },\n addCloseHandler(closeHandler) {\n closeCallbacks.push(closeHandler);\n },\n };\n}\n\nexport default { displayDialog };\n","function ValidateInput() {\n}\n\nValidateInput.int = (stringToValidate) => {\n const parsedInt = parseInt(stringToValidate, 10);\n return Number.isNaN(parsedInt) ? undefined : parsedInt;\n};\n\nValidateInput.string = (stringToValidate) => (typeof stringToValidate === 'string' ? stringToValidate : undefined);\n\nValidateInput.boolean = (stringToValidate) => String(stringToValidate).toLowerCase() === 'true';\n\nexport default ValidateInput;\n","function RedirectHelper() {}\n\nRedirectHelper.redirectToUrl = (url) => {\n // This exists to make redirects more testable\n window.location.href = url;\n};\n\nexport default RedirectHelper;\n","import dialog from './dialog';\nimport ValidateInput from './validate-input';\nimport RedirectHelper from './redirectHelper';\nimport utils from './utils';\n\n// TODO: rewrite this to follow govuk-frontend prototype module pattern\n\nfunction TimeoutDialog($module, $sessionActivityService) {\n let options = {};\n let settings = {};\n const cleanupFunctions = [];\n let currentTimer;\n const sessionActivityService = $sessionActivityService;\n\n function init() {\n const validate = ValidateInput;\n\n function lookupData(key) {\n return ($module.attributes.getNamedItem(key) || {}).value;\n }\n\n const localisedDefaults = validate.string(lookupData('data-language')) === 'cy' ? {\n title: 'Rydych ar fin cael eich allgofnodi',\n message: 'Er eich diogelwch, byddwn yn eich allgofnodi cyn pen',\n keepAliveButtonText: 'Parhau i fod wedi’ch mewngofnodi',\n signOutButtonText: 'Allgofnodi',\n properties: {\n minutes: 'funud',\n minute: 'funud',\n seconds: 'eiliad',\n second: 'eiliad',\n },\n } : {\n title: 'You’re about to be signed out',\n message: 'For your security, we will sign you out in',\n keepAliveButtonText: 'Stay signed in',\n signOutButtonText: 'Sign out',\n properties: {\n minutes: 'minutes',\n minute: 'minute',\n seconds: 'seconds',\n second: 'second',\n },\n };\n\n options = {\n timeout: validate.int(lookupData('data-timeout')),\n countdown: validate.int(lookupData('data-countdown')),\n keepAliveUrl: validate.string(lookupData('data-keep-alive-url')),\n signOutUrl: validate.string(lookupData('data-sign-out-url')),\n timeoutUrl: validate.string(lookupData('data-timeout-url')),\n title: validate.string(lookupData('data-title')),\n message: validate.string(lookupData('data-message')),\n messageSuffix: validate.string(lookupData('data-message-suffix')),\n keepAliveButtonText: validate.string(\n lookupData('data-keep-alive-button-text'),\n ),\n signOutButtonText: validate.string(\n lookupData('data-sign-out-button-text'),\n ),\n synchroniseTabs: validate.boolean(\n lookupData('data-synchronise-tabs') || false,\n ),\n hideSignOutButton: validate.boolean(\n lookupData('data-hide-sign-out-button') || false,\n ),\n };\n\n // Default timeoutUrl to signOutUrl if not set\n options.timeoutUrl = options.timeoutUrl || options.signOutUrl;\n\n validateInput(options);\n settings = mergeOptionsWithDefaults(options, localisedDefaults);\n setupDialogTimer();\n listenForSessionActivityAndResetDialogTimer();\n }\n\n const broadcastSessionActivity = () => {\n sessionActivityService.logActivity();\n };\n\n const listenForSessionActivityAndResetDialogTimer = () => {\n if (settings.synchroniseTabs) {\n sessionActivityService.onActivity((event) => {\n const timeOfActivity = event.timestamp;\n cleanup();\n setupDialogTimer(timeOfActivity);\n });\n }\n };\n\n const validateInput = (config) => {\n const requiredConfig = ['timeout', 'countdown', 'keepAliveUrl', 'signOutUrl'];\n const missingRequiredConfig = [];\n\n requiredConfig.forEach((item) => {\n if (!config[item]) {\n missingRequiredConfig.push(`data-${item.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()}`);\n }\n });\n\n if (missingRequiredConfig.length > 0) {\n throw new Error(\n `Missing config item(s): [${missingRequiredConfig.join(', ')}]`,\n );\n }\n };\n\n const mergeOptionsWithDefaults = (theOptions, localisedDefaults) => {\n const clone = { ...theOptions };\n\n Object.keys(localisedDefaults).forEach((key) => {\n if (typeof clone[key] === 'object') {\n clone[key] = mergeOptionsWithDefaults(\n theOptions[key],\n localisedDefaults[key],\n );\n }\n if (clone[key] === undefined || clone[key] === '') {\n clone[key] = localisedDefaults[key];\n }\n });\n\n return clone;\n };\n\n const setupDialogTimer = (timeOfLastActivity = getDateNow()) => {\n const signoutTime = timeOfLastActivity + settings.timeout * 1000;\n\n const delta = getDateNow() - timeOfLastActivity;\n const secondsUntilTimeoutDialog = settings.timeout - settings.countdown;\n const timeout = window.setTimeout(() => {\n setupDialog(signoutTime);\n }, (secondsUntilTimeoutDialog * 1000) - delta);\n\n cleanupFunctions.push(() => {\n window.clearTimeout(timeout);\n if (currentTimer) {\n window.clearTimeout(currentTimer);\n }\n });\n };\n\n const setupDialog = (signoutTime) => {\n const $element = utils.generateDomElementFromString('<div>');\n\n if (settings.title) {\n const $tmp = utils.generateDomElementFromStringAndAppendText(\n '<h1 id=\"hmrc-timeout-heading\" class=\"govuk-heading-m push--top\">',\n settings.title,\n );\n $element.appendChild($tmp);\n }\n\n const $countdownElement = utils.generateDomElementFromString(\n '<span id=\"hmrc-timeout-countdown\" class=\"hmrc-timeout-dialog__countdown\">',\n );\n\n const $audibleMessage = utils.generateDomElementFromString('<p id=\"hmrc-timeout-message\" class=\"govuk-visually-hidden screenreader-content\" aria-live=\"assertive\">');\n const $visualMessge = utils.generateDomElementFromStringAndAppendText(\n '<p class=\"govuk-body hmrc-timeout-dialog__message\" aria-hidden=\"true\">',\n settings.message,\n );\n $visualMessge.appendChild(document.createTextNode(' '));\n $visualMessge.appendChild($countdownElement);\n if (settings.messageSuffix) {\n $visualMessge.appendChild(document.createTextNode(` ${settings.messageSuffix}`));\n }\n\n const $staySignedInButton = utils.generateDomElementFromStringAndAppendText(\n '<button id=\"hmrc-timeout-keep-signin-btn\" class=\"govuk-button\">',\n settings.keepAliveButtonText,\n );\n\n const $wrapper = document.createElement('div');\n $wrapper.classList.add('govuk-button-group');\n $wrapper.appendChild($staySignedInButton);\n\n $element.appendChild($visualMessge);\n $element.appendChild($audibleMessage);\n $staySignedInButton.addEventListener('click', keepAliveAndClose);\n $element.appendChild(document.createTextNode(' '));\n\n if (!settings.hideSignOutButton) {\n const $signOutButton = utils.generateDomElementFromStringAndAppendText(\n '<a id=\"hmrc-timeout-sign-out-link\" class=\"govuk-link hmrc-timeout-dialog__link\">',\n settings.signOutButtonText,\n );\n $signOutButton.addEventListener('click', signOut);\n $signOutButton.setAttribute('href', settings.signOutUrl);\n\n $wrapper.appendChild($signOutButton);\n }\n\n $element.appendChild($wrapper);\n\n const dialogControl = dialog.displayDialog($element);\n\n cleanupFunctions.push(() => {\n dialogControl.closeDialog();\n });\n\n dialogControl.addCloseHandler(keepAliveAndClose);\n\n dialogControl.setAriaLabelledBy('hmrc-timeout-heading hmrc-timeout-message');\n\n const getMillisecondsRemaining = () => signoutTime - getDateNow();\n const getSecondsRemaining = () => Math.round(getMillisecondsRemaining() / 1000);\n\n const getHumanText = (counter) => {\n let minutes; let\n visibleMessage;\n if (counter < 60) {\n visibleMessage = `${counter} ${settings.properties[counter !== 1 ? 'seconds' : 'second']}.`;\n } else {\n minutes = Math.ceil(counter / 60);\n visibleMessage = `${minutes} ${settings.properties[minutes === 1 ? 'minute' : 'minutes']}.`;\n }\n return visibleMessage;\n };\n\n const getAudibleHumanText = (counter) => {\n const humanText = getHumanText(roundSecondsUp(counter));\n const messageParts = [settings.message, ' ', humanText];\n if (settings.messageSuffix) {\n messageParts.push(' ');\n messageParts.push(settings.messageSuffix);\n }\n return messageParts.join('');\n };\n\n const roundSecondsUp = (counter) => {\n if (counter > 60) {\n return counter;\n } if (counter < 20) {\n return 20;\n }\n return Math.ceil(counter / 20) * 20;\n };\n\n const updateTextIfChanged = ($elem, text) => {\n if ($elem.innerText !== text) {\n // eslint-disable-next-line no-param-reassign\n $elem.innerText = text;\n }\n };\n\n const updateCountdown = (counter) => {\n const visibleMessage = getHumanText(counter);\n const audibleHumanText = getAudibleHumanText(counter);\n\n updateTextIfChanged($countdownElement, visibleMessage);\n updateTextIfChanged($audibleMessage, audibleHumanText);\n };\n\n const getNextTimeout = () => {\n const remaining = getMillisecondsRemaining();\n const roundedRemaining = Math.floor(getMillisecondsRemaining() / 1000) * 1000;\n if (roundedRemaining <= 60000) {\n return (remaining - roundedRemaining) || 1000;\n }\n return remaining - (roundedRemaining - (roundedRemaining % 60000 || 60000));\n };\n\n const runUpdate = () => {\n const counter = Math.max(getSecondsRemaining(), 0);\n updateCountdown(counter);\n if (counter === 0) {\n timeout();\n } else {\n currentTimer = window.setTimeout(runUpdate, getNextTimeout());\n }\n };\n\n runUpdate();\n };\n\n const keepAliveAndClose = () => {\n cleanup();\n setupDialogTimer();\n utils.ajaxGet(settings.keepAliveUrl, () => {});\n broadcastSessionActivity();\n };\n\n const getDateNow = () => Date.now();\n\n const signOut = () => {\n RedirectHelper.redirectToUrl(settings.signOutUrl);\n };\n\n const timeout = () => {\n RedirectHelper.redirectToUrl(settings.timeoutUrl);\n };\n\n const cleanup = () => {\n while (cleanupFunctions.length > 0) {\n const fn = cleanupFunctions.shift();\n fn();\n }\n };\n\n return { init, cleanup };\n}\n\nTimeoutDialog.dialog = dialog;\nTimeoutDialog.redirectHelper = RedirectHelper;\nTimeoutDialog.utils = utils;\n\nexport default TimeoutDialog;\n","import { getCookie, setCookie } from '../../utils/cookies';\n\nfunction UserResearchBanner($module) {\n this.$module = $module;\n this.$closeLink = this.$module.querySelector('.hmrc-user-research-banner__close');\n this.cookieName = 'mdtpurr';\n this.cookieExpiryDays = 28;\n}\n\nUserResearchBanner.prototype.init = function init() {\n const cookieData = getCookie(this.cookieName);\n\n if (cookieData == null) {\n this.$module.classList.add('hmrc-user-research-banner--show');\n if (this.$closeLink) {\n this.$closeLink.addEventListener('click', this.eventHandlers.noThanksClick.bind(this));\n }\n }\n};\n\nUserResearchBanner.prototype.eventHandlers = {\n noThanksClick(event) {\n event.preventDefault();\n\n setCookie(this.cookieName, 'suppress_for_all_services', { days: this.cookieExpiryDays });\n this.$module.classList.remove('hmrc-user-research-banner--show');\n },\n};\n\nexport default UserResearchBanner;\n","// Based on https://github.com/alphagov/govuk_template_jinja\nexport const setCookie = (name, value, options = {}) => {\n let cookieString = `${name}=${value}; path=/`;\n if (options.days) {\n const date = new Date();\n date.setTime(date.getTime() + (options.days * 24 * 60 * 60 * 1000));\n cookieString = `${cookieString}; expires=${date.toGMTString()}`;\n }\n if (window.location.protocol === 'https:') {\n cookieString += '; Secure';\n }\n document.cookie = cookieString;\n\n return cookieString;\n};\n\nexport const getCookie = (name) => {\n const nameEQ = `${name}=`;\n const cookies = document.cookie.split(';');\n for (let i = 0, len = cookies.length; i < len; i += 1) {\n let cookie = cookies[i];\n while (cookie.charAt(0) === ' ') {\n cookie = cookie.substring(1, cookie.length);\n }\n if (cookie.indexOf(nameEQ) === 0) {\n return decodeURIComponent(cookie.substring(nameEQ.length));\n }\n }\n return null;\n};\n","export default class SessionActivityService {\n constructor(BrowserBroadcastChannel) {\n this.activityChannel = BrowserBroadcastChannel && new BrowserBroadcastChannel('session-activity');\n }\n\n logActivity() {\n if (this.activityChannel) {\n const event = { timestamp: Date.now() };\n this.activityChannel.postMessage(event);\n }\n }\n\n onActivity(callback) {\n if (this.activityChannel) {\n this.activityChannel.onmessage = (event) => {\n callback(event.data);\n };\n }\n }\n}\n","function HmrcPrintLink($module, window) {\n this.$module = $module;\n this.window = window;\n}\n\nHmrcPrintLink.prototype.init = function init() {\n this.$module.addEventListener('click', (event) => {\n event.preventDefault();\n this.window.print();\n });\n};\n\nexport default HmrcPrintLink;\n","import BackLinkHelper from './components/back-link-helper/back-link-helper';\nimport TimeoutDialog from './components/timeout-dialog/timeout-dialog';\nimport UserResearchBanner from './components/user-research-banner/user-research-banner';\nimport SessionActivityService from './components/timeout-dialog/session-activity-service';\nimport HmrcPrintLink from './components/hmrc-print-link/hmrc-print-link';\n\nfunction initAll() {\n function logAndIgnoreErrors(init) {\n try {\n init();\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('hmrc-frontend component initialisation failed', error);\n }\n }\n\n const $HmrcPrintLinks = document.querySelectorAll('a[data-module=\"hmrc-print-link\"]');\n $HmrcPrintLinks.forEach(($HmrcPrintLink) => {\n logAndIgnoreErrors(() => {\n new HmrcPrintLink($HmrcPrintLink, window).init();\n });\n });\n\n const sessionActivityService = new SessionActivityService(window.BroadcastChannel);\n sessionActivityService.logActivity();\n\n const $TimeoutDialog = document.querySelector('meta[name=\"hmrc-timeout-dialog\"]');\n if ($TimeoutDialog) {\n logAndIgnoreErrors(() => {\n new TimeoutDialog($TimeoutDialog, sessionActivityService).init();\n });\n }\n\n const $UserResearchBanner = document.querySelector('[data-module=\"hmrc-user-research-banner\"]');\n if ($UserResearchBanner) {\n logAndIgnoreErrors(() => {\n new UserResearchBanner($UserResearchBanner).init();\n });\n }\n\n const $BackLinks = document.querySelectorAll('[data-module=\"hmrc-back-link\"]');\n $BackLinks.forEach(($BackLink) => {\n logAndIgnoreErrors(() => {\n new BackLinkHelper($BackLink, window, document).init();\n });\n });\n}\n\nexport default {\n initAll,\n TimeoutDialog,\n UserResearchBanner,\n BackLinkHelper,\n};\n","import { initAll } from 'govuk-frontend/dist/govuk/govuk-frontend.min.js';\nimport HMRCFrontend from './all';\n\ninitAll();\nHMRCFrontend.initAll();\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hmrc-frontend",
3
- "version": "7.2.0",
3
+ "version": "7.4.0",
4
4
  "description": "Design patterns for HMRC frontends",
5
5
  "scripts": {
6
6
  "postinstall": "node check-compatibility-with-govuk-frontend-version.js"