{"version":3,"sources":["global/disclaimers.js"],"names":["disclaimers","_classCallCheck","this","init","trapFocus","modal","$","focusableElements","find","first","last","lastElement","event","key","on","shiftKey","activeElement","firstElement","document","preventDefault","focusTrapped","$opener","closeDisclaimer","removeClass","ariaLabelFallback","openDisclaimer","content","$dialog","html","addClass","attr","focus","hasClass","onTransitionEnd","removeAttr","off","body","window","addEventListener","ready","e","data","disContent","debug","console","log","scroll"],"mappings":"6XAAMA,uBAEJ,QAAAA,KAAcC,gBAAAC,KAAAF,GACZE,KAAKC,2DA8FF,QAJDC,KAMD,GAAGC,GAAAC,EAAA,uBAKIC,EAAoBF,EAAMG,KAHlC,sGAEQH,EAAUE,EAAhBE,QACMF,EAAAA,EACJG,MAGFL,GAAMM,GAAAA,UAAcJ,SAAAA,GAGA,QAAdK,EAAMC,MADNC,EAAGC,SACHH,SAAAI,gBAAqBC,EAAA,KACvBL,EAAIA,iBACFD,EAAIO,SAGHA,SAAAF,gBAAAL,EAAA,KAJHC,EAKOO,iBACLF,EAAaD,YApHvB,GAAcI,IAAA,EAORC,EAAU,KAKRC,EAAkB,WACtBhB,EAAE,+BATCiB,YAAA,UACLF,EAAMG,SAQFC,EAAA,SAAAC,GACFL,GAAAA,GAAAf,EAAA,8BACDqB,GAUInB,KAAK,0BARVoB,KAAAF,GAUEC,EAAQE,SAAS,UACjBF,EAAQG,KAAK,WAAY,KAAKC,QAC9B3B,KADAuB,EAAa,WACbvB,GAAAA,GAAAA,EAAAA,8BASIuB,GAAQK,SAAS,WANvBL,EAQOG,KAAK,WAAY,KACjBC,QANPX,GAAMa,IASa,MAAXZ,IANNA,EAAIM,QACFA,EACGG,MAGJH,EAAMO,WAAA,YACLd,GAAIC,GAKJD,QAAAA,iBAAe,SAAf,WACDd,EAAAY,UAAAiB,IAAA,WACF7B,EAhBDY,SAAAkB,MAAAD,IAAA,SAsBE7B,EAAE,+BAA+BQ,GAAG,iBAJtCR,EAAA,uBAAA6B,IAAA,SACAE,EAAAA,QAAOC,IAAAA,UACLhC,EAAEY,OACFZ,MAAEY,EAASkB,SAAU,IAGrB9B,EAAAA,UAAAiC,MAAc,WAEfjC,EAPD,yCAAAwB,KAAA,aAtDY,mCA+DZxB,EAAA,+BAAAQ,GAAA,gBAAAmB,GAGE3B,EAAAA,SAAE8B,MAAAtB,GAAA,QAAA,sBAA8C,SAAA0B,GAM9CA,EAAErB,iBAHJE,EAAAf,EAAAJ,KAEAI,IAAEY,GAAeJ,EAAG2B,KAAS,sBAO3BhB,GAAeiB,GAEfC,OAASC,QAAQC,IAAI,uBAAwBH,KAI/CpC,EAAE,sBAAsBQ,GAAG,QAAS,SAAS0B,GAJ3CG,MAMDrC,EAAA+B,QAAGS,OAAA,WAMExC,EAAE,gBAAgB0B,SAAS,WAC7BV","file":"disclaimers.min.js","sourcesContent":["class disclaimers {\r\n\r\n constructor() {\r\n this.init();\r\n }\r\n\r\n init() {\r\n const ariaLabelFallback = 'View disclaimer, opens a dialog';\r\n let focusTrapped = false;\r\n let $opener = null;\r\n\r\n /**\r\n * Closes the disclaimer dialog\r\n */\r\n const closeDisclaimer = () => {\r\n $('.disclaimers[role=\"dialog\"]').removeClass('active');\r\n $opener.focus();\r\n };\r\n\r\n /**\r\n * Opens the disclaimer dialog\r\n *\r\n * @param {string} content - the diclaimer content\r\n */\r\n const openDisclaimer = (content) => {\r\n const $dialog = $('.disclaimers[role=\"dialog\"]');\r\n $dialog\r\n .find('.disclaimers-content p')\r\n .html(content);\r\n $dialog.addClass('active');\r\n $dialog.attr('tabindex', '0').focus(); \r\n trapFocus()\r\n };\r\n\r\n /**\r\n * Callback for when the disclaimer dialog is finished opening or closing\r\n */\r\n const onTransitionEnd = () => {\r\n const $dialog = $('.disclaimers[role=\"dialog\"]');\r\n\r\n if ($dialog.hasClass('active')) {\r\n $dialog\r\n .attr('tabindex', '0')\r\n .focus();\r\n focusTrapped = true;\r\n } else {\r\n if ($opener != null) { \r\n $opener.focus();\r\n $opener = null;\r\n }\r\n $dialog.removeAttr('tabindex');\r\n focusTrapped = false;\r\n }\r\n };\r\n\r\n // General cleanup on window unload\r\n window.addEventListener('unload', () => {\r\n $(document).off('keydown');\r\n $(document.body).off('click');\r\n $('.disclaimers[role=\"dialog\"]').on('transitionend');\r\n $('.disclaimer-callout').off('click');\r\n $(window).off('scroll');\r\n $opener = null;\r\n }, { once: true, passive: true });\r\n\r\n // Document ready - bind event listeners\r\n $(document).ready(function() {\r\n // Ensure that all disclaimer callouts have an aria label\r\n $('.disclaimer-callout:not([aria-label])').attr('aria-label', ariaLabelFallback);\r\n\r\n $('.disclaimers[role=\"dialog\"]').on('transitionend', onTransitionEnd);\r\n // open disclaimer\r\n // add .active class for animation\r\n $(document.body).on('click', '.disclaimer-callout', function(e) {\r\n e.preventDefault();\r\n\r\n $opener = $(this);\r\n\r\n let disContent = $opener.data('disclaimers-content');\r\n\r\n openDisclaimer(disContent);\r\n\r\n debug && console.log('disclaimersContent: ', disContent);\r\n }); //click END\r\n\r\n // close disc\r\n $('.disclaimers-close').on('click', function(e) {\r\n closeDisclaimer();\r\n }); //click END\r\n\r\n\r\n // On scroll\r\n // hide disclaimer\r\n $(window).scroll(function() {\r\n if ($('.disclaimers').hasClass('active')) {\r\n closeDisclaimer();\r\n }\r\n });\r\n\r\n }); //document ready\r\n\r\n // Function to trap focus within the modal\r\n function trapFocus() {\r\n const modal = $('.disclaimers.active');\r\n const focusableElements = modal.find(\r\n 'a[href], button, textarea, input[type=\"text\"], input[type=\"radio\"], input[type=\"checkbox\"], select'\r\n );\r\n const firstElement = focusableElements.first();\r\n const lastElement = focusableElements.last();\r\n \r\n modal.on('keydown', function(event) {\r\n if (event.key === 'Tab') {\r\n if (event.shiftKey) {\r\n if (document.activeElement === firstElement[0]) {\r\n event.preventDefault();\r\n lastElement.focus();\r\n }\r\n } else {\r\n if (document.activeElement === lastElement[0]) {\r\n event.preventDefault();\r\n firstElement.focus();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n }\r\n}"]}