hmrc-frontend 7.14.0 → 7.16.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.14.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.16.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,10 +1,8 @@
1
1
  {
2
2
  "name": "hmrc-frontend",
3
- "version": "7.14.0",
3
+ "version": "7.16.0",
4
4
  "description": "Design patterns for HMRC frontends",
5
- "scripts": {
6
- "postinstall": "node check-compatibility-with-govuk-frontend-version.js"
7
- },
5
+ "scripts": {},
8
6
  "repository": {
9
7
  "type": "git",
10
8
  "url": "git+https://github.com/hmrc/hmrc-frontend.git"
@@ -1,68 +0,0 @@
1
- // prototypes load and compile a subset of hmrc-frontend styles using their
2
- // own version of govuk-frontend, if their version of govuk-frontend is
3
- // lower than 5.4.0 then the compilation of styles will fail with an error
4
- // that can be hard for interaction designers to debug, we would like to
5
- // give them a warning on installation so that they don't get stuck later
6
- // when trying to use the hmrc-frontend styles.
7
- const fs = require('fs');
8
- const path = require('path');
9
-
10
- function hmrcFrontendDisableCompatibilityCheck() {
11
- return (process.env.npm_config_hmrc_frontend_disable_compatibility_check || process.env.HMRC_FRONTEND_DISABLE_COMPATIBILITY_CHECK) === 'true';
12
- }
13
-
14
- function semverGreaterThanOrEqualTo(a, b) {
15
- const [aMaj, aMin, aPat] = a.split('.').map(Number);
16
- const [bMaj, bMin, bPat] = b.split('.').map(Number);
17
- return ((aMaj - bMaj) || (aMin - bMin) || (aPat - bPat)) >= 0;
18
- }
19
-
20
- function withinPrototypeKitAndUsingIncompatibleGovukFrontendVersion() {
21
- const projectDir = process.env.INIT_CWD || process.cwd();
22
- const projectPackagePath = path.join(projectDir, 'package.json');
23
- const projectPackageJson = JSON.parse(fs.readFileSync(projectPackagePath, 'utf8'));
24
-
25
- if (
26
- !projectPackageJson.dependencies
27
- || !projectPackageJson.dependencies['govuk-frontend']
28
- || !projectPackageJson.dependencies['govuk-prototype-kit']
29
- ) {
30
- process.exit(0);
31
- }
32
-
33
- const currentVersionInProject = projectPackageJson.dependencies['govuk-frontend'].replace(/[^0-9.]/g, '');
34
- const minimumGovukFrontendVersion = '6.0.0';
35
-
36
- return (!semverGreaterThanOrEqualTo(currentVersionInProject, minimumGovukFrontendVersion));
37
- }
38
-
39
- try {
40
- if (hmrcFrontendDisableCompatibilityCheck()) {
41
- process.exit(0);
42
- }
43
- if (withinPrototypeKitAndUsingIncompatibleGovukFrontendVersion()) {
44
- // eslint-disable-next-line no-console
45
- process.stderr.write(`
46
- Hello friend, looks like your prototype is using a version of
47
- govuk-frontend lower than v6.0.0, which is the minimum version
48
- compatible to automatically compile and load the styles for the
49
- version of hmrc-frontend you're installing with the govuk-prototype-kit.
50
-
51
- You can silence this warning by setting the environment variable
52
- HMRC_FRONTEND_DISABLE_COMPATIBILITY_CHECK=true.
53
- - PlatUI
54
- -------------------------------------------
55
- \\ ^__^
56
- \\ (oo)_______
57
- (__) )\\/\\
58
- ||----w |
59
- || ||
60
- - PlatMooI the PlatUI Helper Cow
61
- `);
62
- process.exit(1);
63
- } else {
64
- process.exit(0);
65
- }
66
- } catch (err) {
67
- process.exit(0);
68
- }