@nationalarchives/frontend 0.1.42 → 0.1.43

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.
Files changed (107) hide show
  1. package/nationalarchives/all.css +1 -1
  2. package/nationalarchives/all.css.map +1 -1
  3. package/nationalarchives/all.js +1 -1
  4. package/nationalarchives/all.js.map +1 -1
  5. package/nationalarchives/analytics.js +1 -1
  6. package/nationalarchives/analytics.js.map +1 -1
  7. package/nationalarchives/analytics.mjs +98 -55
  8. package/nationalarchives/components/breadcrumbs/breadcrumbs.css.map +1 -1
  9. package/nationalarchives/components/breadcrumbs/template.njk +2 -1
  10. package/nationalarchives/components/button/button-group.stories.js +122 -0
  11. package/nationalarchives/components/button/button.css +1 -1
  12. package/nationalarchives/components/button/button.css.map +1 -1
  13. package/nationalarchives/components/button/button.scss +4 -8
  14. package/nationalarchives/components/button/button.stories.js +36 -38
  15. package/nationalarchives/components/button/fixtures.json +3 -3
  16. package/nationalarchives/components/button/template.njk +9 -8
  17. package/nationalarchives/components/card/card.css +1 -1
  18. package/nationalarchives/components/card/card.css.map +1 -1
  19. package/nationalarchives/components/card/card.scss +6 -0
  20. package/nationalarchives/components/card/card.stories.js +11 -0
  21. package/nationalarchives/components/checkboxes/checkboxes.css.map +1 -1
  22. package/nationalarchives/components/compound-filters/compound-filters.css.map +1 -1
  23. package/nationalarchives/components/cookie-banner/cookie-banner.css.map +1 -1
  24. package/nationalarchives/components/cookie-banner/fixtures.json +10 -10
  25. package/nationalarchives/components/date-input/date-input.css.map +1 -1
  26. package/nationalarchives/components/date-search/date-search.css.map +1 -1
  27. package/nationalarchives/components/error-summary/error-summary.css +1 -1
  28. package/nationalarchives/components/error-summary/error-summary.css.map +1 -1
  29. package/nationalarchives/components/error-summary/error-summary.scss +1 -1
  30. package/nationalarchives/components/featured-records/featured-records.css +1 -1
  31. package/nationalarchives/components/featured-records/featured-records.css.map +1 -1
  32. package/nationalarchives/components/featured-records/featured-records.scss +1 -1
  33. package/nationalarchives/components/footer/analytics.js +97 -0
  34. package/nationalarchives/components/footer/fixtures.json +7 -12
  35. package/nationalarchives/components/footer/footer.css +1 -1
  36. package/nationalarchives/components/footer/footer.css.map +1 -1
  37. package/nationalarchives/components/footer/footer.scss +4 -2
  38. package/nationalarchives/components/footer/footer.stories.js +5 -11
  39. package/nationalarchives/components/footer/template.njk +13 -10
  40. package/nationalarchives/components/gallery/gallery.css.map +1 -1
  41. package/nationalarchives/components/global-header/analytics.js +42 -8
  42. package/nationalarchives/components/global-header/fixtures.json +1 -1
  43. package/nationalarchives/components/global-header/global-header.css +1 -1
  44. package/nationalarchives/components/global-header/global-header.css.map +1 -1
  45. package/nationalarchives/components/global-header/global-header.js +1 -1
  46. package/nationalarchives/components/global-header/global-header.js.map +1 -1
  47. package/nationalarchives/components/global-header/global-header.mjs +40 -79
  48. package/nationalarchives/components/global-header/global-header.scss +9 -6
  49. package/nationalarchives/components/global-header/macro-options.json +12 -0
  50. package/nationalarchives/components/global-header/template.njk +7 -7
  51. package/nationalarchives/components/grid/grid.css +1 -1
  52. package/nationalarchives/components/grid/grid.css.map +1 -1
  53. package/nationalarchives/components/grid/grid.scss +0 -1
  54. package/nationalarchives/components/header/analytics.js +3 -8
  55. package/nationalarchives/components/header/fixtures.json +1 -1
  56. package/nationalarchives/components/header/header.css +1 -1
  57. package/nationalarchives/components/header/header.css.map +1 -1
  58. package/nationalarchives/components/header/header.js +1 -1
  59. package/nationalarchives/components/header/header.js.map +1 -1
  60. package/nationalarchives/components/header/header.mjs +32 -41
  61. package/nationalarchives/components/header/header.scss +3 -2
  62. package/nationalarchives/components/header/macro-options.json +6 -0
  63. package/nationalarchives/components/header/template.njk +6 -6
  64. package/nationalarchives/components/hero/hero.css +1 -1
  65. package/nationalarchives/components/hero/hero.css.map +1 -1
  66. package/nationalarchives/components/hero/hero.scss +1 -1
  67. package/nationalarchives/components/index-grid/index-grid.css.map +1 -1
  68. package/nationalarchives/components/message/message.css +1 -1
  69. package/nationalarchives/components/message/message.css.map +1 -1
  70. package/nationalarchives/components/message/message.scss +2 -3
  71. package/nationalarchives/components/pagination/fixtures.json +1 -1
  72. package/nationalarchives/components/pagination/macro-options.json +6 -0
  73. package/nationalarchives/components/pagination/pagination.stories.js +44 -0
  74. package/nationalarchives/components/pagination/template.njk +4 -1
  75. package/nationalarchives/components/phase-banner/phase-banner.css.map +1 -1
  76. package/nationalarchives/components/picture/analytics.js +5 -9
  77. package/nationalarchives/components/picture/picture.css.map +1 -1
  78. package/nationalarchives/components/quick-filters/quick-filters.css.map +1 -1
  79. package/nationalarchives/components/radios/radios.css.map +1 -1
  80. package/nationalarchives/components/search-field/search-field.css.map +1 -1
  81. package/nationalarchives/components/search-filters/search-filters.css.map +1 -1
  82. package/nationalarchives/components/select/select.css.map +1 -1
  83. package/nationalarchives/components/skip-link/skip-link.css +1 -1
  84. package/nationalarchives/components/skip-link/skip-link.css.map +1 -1
  85. package/nationalarchives/components/skip-link/skip-link.scss +1 -1
  86. package/nationalarchives/components/tabs/tabs.css.map +1 -1
  87. package/nationalarchives/components/text-input/text-input.css.map +1 -1
  88. package/nationalarchives/components/textarea/textarea.css.map +1 -1
  89. package/nationalarchives/global-header-package.css +1 -1
  90. package/nationalarchives/global-header-package.css.map +1 -1
  91. package/nationalarchives/global-header-package.scss +4 -6
  92. package/nationalarchives/lib/analytics-helpers.mjs +13 -8
  93. package/nationalarchives/prototype-kit.css +1 -1
  94. package/nationalarchives/prototype-kit.css.map +1 -1
  95. package/nationalarchives/stories/utilities/colour-schemes/colour-themes.stories.js +21 -16
  96. package/nationalarchives/stories/utilities/tables/tables.stories.js +30 -28
  97. package/nationalarchives/tools/_a11y.scss +11 -2
  98. package/nationalarchives/tools/_colour.scss +24 -0
  99. package/nationalarchives/utilities/_a11y.scss +4 -0
  100. package/nationalarchives/utilities/_forms.scss +1 -1
  101. package/nationalarchives/utilities/_global.scss +3 -1
  102. package/nationalarchives/utilities/_reset.scss +5 -2
  103. package/nationalarchives/utilities/_tables.scss +23 -6
  104. package/nationalarchives/utilities/_typography.scss +3 -21
  105. package/nationalarchives/variables/_a11y.scss +2 -0
  106. package/nationalarchives/variables/_index.scss +1 -0
  107. package/package.json +1 -1
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.TNAFrontendAnalytics=t():e.TNAFrontendAnalytics=t()}(self,(()=>(()=>{"use strict";var e={d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){s(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e){return function(e){if(Array.isArray(e))return a(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return a(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,f(r.key),r)}}function l(e,t,n){return t&&u(e.prototype,t),n&&u(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function s(e,t,n){return(t=f(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function f(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,"string");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==n(t)?t:String(t)}e.r(t),e.d(t,{EventTracker:()=>K,GA4:()=>B,helpers:()=>G});var d=function(){function e(){if(c(this,e),s(this,"events",{}),s(this,"oneTimeEvents",{}),e._instance)return e._instance;e._instance=this}return l(e,[{key:"on",value:function(e,t){Object.hasOwn(this.events,e)||(this.events[e]=[]),this.events[e]=[].concat(i(this.events[e]),[t])}},{key:"once",value:function(e,t){Object.hasOwn(this.oneTimeEvents,e)||(this.oneTimeEvents[e]=[]),this.oneTimeEvents[e]=[].concat(i(this.oneTimeEvents[e]),[t])}},{key:"trigger",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(Object.hasOwn(this.events,e)&&this.events[e].forEach((function(e){return e.call(t,n)})),Object.hasOwn(this.oneTimeEvents,e))for(var r=this.oneTimeEvents[e].length-1;r>=0;r--)this.oneTimeEvents[e][r].call(this,n),this.oneTimeEvents[e].splice(r,1)}}]),e}(),v=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};c(this,e),s(this,"extraPolicies",[]),s(this,"domain",""),s(this,"path",""),s(this,"secure",!0),s(this,"policiesKey",""),s(this,"events",null);var n=t.extraPolicies,r=void 0===n?[]:n,o=t.domain,i=void 0===o?"":o,a=t.path,u=void 0===a?"/":a,l=t.secure,f=void 0===l||l,v=t.policiesKey,p=void 0===v?"cookies_policy":v;this.extraPolicies=r,this.domain=i,this.path=u,this.secure=f,this.policiesKey=p,this.events=new d,this.init()}return l(e,[{key:"init",value:function(){this.savePolicies(o(o(o({},Object.fromEntries(this.extraPolicies.map((function(e){return[e.toLowerCase(),!1]})))),{},{usage:!1,settings:!1},this.policies),{},{essential:!0}))}},{key:"all",get:function(){var e={};return document.cookie.split("; ").filter((function(e){return e})).forEach((function(t){var n=t.trim().split("=");n[0]&&(e[n[0]]=n[1])})),e}},{key:"policies",get:function(){try{return JSON.parse(this.get(this.policiesKey)||"{}")}catch(e){return{}}}},{key:"exists",value:function(e){return Object.hasOwn(this.all,e)}},{key:"hasValue",value:function(e,t){return this.get(e)==t}},{key:"get",value:function(e){return this.exists(e)?decodeURIComponent(this.all[e]):null}},{key:"set",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.maxAge,o=void 0===r?31536e3:r,i=n.sameSite,a=void 0===i?"Lax":i,c=n.domain,u=void 0===c?this.domain:c,l=n.path,s=void 0===l?this.path:l,f=n.secure,d=void 0===f?this.secure:f;if(e){var v="".concat(encodeURIComponent(e),"=").concat(encodeURIComponent(t),";").concat(u?" domain=".concat(u,"; "):""," samesite=").concat(a,"; path=").concat(s,"; max-age=").concat(o).concat(d?"; secure":"");document.cookie=v,this.events.trigger("setCookie",{key:e,value:t,maxAge:o,path:s,sameSite:a,domain:u,secure:d,cookie:v})}}},{key:"delete",value:function(e){var t={maxAge:-1,path:arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/",domain:(arguments.length>2&&void 0!==arguments[2]?arguments[2]:null)||void 0};this.set(e,"",t),this.events.trigger("deleteCookie",o({key:e},t))}},{key:"deleteAll",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;Object.keys(this.all).forEach((function(r){e.delete(r,t,n)})),this.events.trigger("deleteAllCookies",{path:t,domain:n})}},{key:"acceptPolicy",value:function(e){this.setPolicy(e,!0),this.events.trigger("acceptPolicy",e),this.events.trigger("changePolicy",s({},e,!0))}},{key:"rejectPolicy",value:function(e){this.setPolicy(e,!1),this.events.trigger("rejectPolicy",e),this.events.trigger("changePolicy",s({},e,!1))}},{key:"setPolicy",value:function(e,t){"essential"!==e&&(this.savePolicies(o(o({},this.policies),{},s(s({},e,t),"essential",!0))),this.events.trigger("changePolicy",s({},e,t)))}},{key:"acceptAllPolicies",value:function(){var e=Object.fromEntries(Object.keys(this.policies).map((function(e){return[e.toLowerCase(),!0]})));this.savePolicies(e),this.events.trigger("acceptAllPolicies"),this.events.trigger("changePolicy",e)}},{key:"rejectAllPolicies",value:function(){var e=o(o({},Object.fromEntries(Object.keys(this.policies).map((function(e){return[e.toLowerCase(),!1]})))),{},{essential:!0});this.savePolicies(e),this.events.trigger("rejectAllPolicies"),this.events.trigger("changePolicy",e)}},{key:"savePolicies",value:function(e){this.set(this.policiesKey,JSON.stringify(e))}},{key:"isPolicyAccepted",value:function(e){return Object.hasOwn(this.policies,e)?!0===this.policies[e]:null}},{key:"on",value:function(e,t){this.events.on(e,t)}},{key:"once",value:function(e,t){this.events.once(e,t)}}]),e}(),p=function e(t){if(""!==t.id)return'id("'+t.id+'")';if(t===document.body)return t.tagName;for(var n=0,r=t.parentNode.childNodes,o=0;o<r.length;o++){var i=r[o];if(i===t)return e(t.parentNode)+"/"+t.tagName+"["+(n+1)+"]";1===i.nodeType&&i.tagName===t.tagName&&n++}},g=function(e,t){return t.some((function(t){return e.includes(t)}))},h=function(e){var t="",n=e;do{for(;n.previousElementSibling;)if(n=n.previousElementSibling,["h1","h2","h3","h4","h5","h6"].includes(n.tagName)||n.classList.length&&g(Array.from(n.classList),["tna-heading-xl","tna-heading-l","tna-heading-m","tna-heading-s"])){t=n.innerText;break}n=n.parentElement}while(n.parentElement&&!t);return t},y={text:function(e,t,n){return e.innerText},html:function(e,t,n){return e.innerHTML},value:function(e,t,n){return e.value},checked:function(e,t,n){return e.checked?"checked":"unchecked"}};const m=[{scope:".tna-checkboxes",areaName:"checkboxes",events:[{eventName:"toggle",targetElement:".tna-checkboxes__item input",on:"change",data:{state:y.checked,value:function(e,t,n){return e.parentNode.innerText},group:function(e,t,n){var r;return null===(r=t.closest(".tna-form__group"))||void 0===r||null===(r=r.querySelector(".tna-form__heading"))||void 0===r?void 0:r.innerText}}}]}],b=[{scope:".tna-picture",areaName:"picture",events:[{eventName:"toggle_transcript",targetElement:".tna-picture__toggle-transcript",on:"click",data:{state:function(e,t,n){var r=e.getAttribute("aria-expanded");return null===r?null:"true"===r.toString()?"opened":"closed"},value:function(e,t,n){var r=h(t),o=t.querySelector(".tna-picture__image"),i=o.getAttribute("src"),a=o.getAttribute("alt"),c="".concat(a," (").concat(i,")");return r?"".concat(r," > ").concat(c):c}}}]}],O=[{scope:".tna-radios",areaName:"radios",events:[{eventName:"toggle",targetElement:".tna-radios__item input",on:"change",data:{state:y.checked,value:function(e,t,n){return e.parentNode.innerText},group:function(e,t,n){var r;return null===(r=t.closest(".tna-form__group"))||void 0===r||null===(r=r.querySelector(".tna-form__heading"))||void 0===r?void 0:r.innerText}}}]}],k=[{scope:".tna-search-field",areaName:"search-field",events:[{eventName:"blurred",targetElement:".tna-search-field__input",on:"blur",data:{value:y.value,group:function(e,t,n){var r;return null===(r=t.querySelector(".tna-form__heading"))||void 0===r?void 0:r.innerText}}}]}],w=[{scope:".tna-text-input",areaName:"text-input",events:[{eventName:"blurred",on:"blur",data:{value:y.value,group:function(e,t,n){var r;return null===(r=t.closest(".tna-form__group"))||void 0===r||null===(r=r.querySelector(".tna-form__heading"))||void 0===r?void 0:r.innerText}}}]}],j=[{scope:".tna-textarea",areaName:"textarea",events:[{eventName:"blurred",on:"blur",data:{value:y.value,group:function(e,t,n){var r;return null===(r=t.closest(".tna-form__group"))||void 0===r||null===(r=r.querySelector(".tna-form__heading"))||void 0===r?void 0:r.innerText}}}]}];function E(e,t,n){return t=_(t),function(e,t){if(t&&("object"===x(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return S(e)}(e,P()?Reflect.construct(t,n||[],_(e).constructor):t.apply(e,n))}function P(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(P=function(){return!!e})()}function _(e){return _=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},_(e)}function S(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function T(e,t){return T=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},T(e,t)}function A(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function N(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?A(Object(n),!0).forEach((function(t){I(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):A(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function x(e){return x="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},x(e)}function L(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function D(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,q(r.key),r)}}function C(e,t,n){return t&&D(e.prototype,t),n&&D(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function I(e,t,n){return(t=q(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function q(e){var t=function(e,t){if("object"!=x(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=x(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==x(t)?t:String(t)}function M(e){return function(e){if(Array.isArray(e))return R(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return R(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?R(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function R(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var U=[].concat(M([{scope:".tna-breadcrumbs",areaName:"breadcrumbs",events:[{eventName:"click",targetElement:".tna-breadcrumbs__item--expandable button.tna-breadcrumbs__link",on:"click",data:{state:"expand",value:y.html}}]}]),M(m),M([{scope:".tna-global-header",areaName:"header",events:[{eventName:"toggle",targetElement:".tna-global-header__navigation-button",on:"click",data:{state:function(e,t,n){var r=e.getAttribute("aria-expanded");return null===r?null:"true"===r.toString()?"opened":"closed"}}}]}]),M([{scope:".tna-header",areaName:"header",events:[{eventName:"toggle",targetElement:".tna-header__navigation-toggle-button",on:"click",data:{state:function(e,t,n){var r=e.getAttribute("aria-expanded");return null===r?null:"true"===r.toString()?"opened":"closed"}}}]}]),M([{scope:".tna-hero",areaName:"hero",events:[{eventName:"toggle_caption",targetElement:".tna-hero__details-summary",on:"click",data:{state:function(e,t,n){var r,o;return null!==(r=null===(o=t.querySelector(".tna-hero__details"))||void 0===o?void 0:o.hasAttribute("open"))&&void 0!==r&&r?"closed":"opened"},value:function(e,t,n){var r;return null===(r=t.querySelector("img[alt]"))||void 0===r?void 0:r.getAttribute("alt")}}}]}]),M(b),M(O),M(k),M(w),M(j)),K=function(){function e(){var t,n=this;L(this,e),I(this,"cookies",new((null===(t=window.TNAFrontend)||void 0===t?void 0:t.Cookies)||v)),I(this,"events",[]),I(this,"start",new Date),U.forEach((function(e){n.addListener(e.scope,e.areaName,e.events)}))}return C(e,[{key:"addListener",value:function(e,t,n){var r,o=this;"string"==typeof e?r=Array.from(document.querySelectorAll(e)):"object"===x(e)&&(r=[e]),r&&r.forEach((function(e){n.forEach((function(n){n.on&&(n.targetElement?Array.from(e.querySelectorAll(n.targetElement)).forEach((function(r){return o.attachListener(r,n.on,e,o.generateEventName(t,n),n.data,n.targetElement)})):o.attachListener(e,n.on,e,o.generateEventName(t,n),n.data,n.targetElement))}))}))}},{key:"generateEventName",value:function(e,t){return"".concat(e,".").concat(t.eventName||t.on)}},{key:"attachListener",value:function(e,t,n,r,o,i){var a=this;e&&e.addEventListener(t,(function(t){return a.recordEvent(r,N(N({},o),{},{value:"function"==typeof o.value?o.value.call(a,e,n,t):o.value||null,state:"function"==typeof o.state?o.state.call(a,e,n,t):o.state||null,group:"function"==typeof o.group?o.group.call(a,e,n,t):o.group||null,scope:p(n),targetElement:i,timestamp:(new Date).toISOString(),uri:window.location.pathname,timeSincePageLoad:new Date-a.start}))}))}},{key:"recordEvent",value:function(e,t){this.events.push({event:e,"tna.data":t})}},{key:"getTnaMetaTags",value:function(){return Object.fromEntries(Array.from(document.head.querySelectorAll("meta[name^='tna.'][content]")).map((function(e){return[e.getAttribute("name"),e.getAttribute("content")]})))}}]),e}(),B=function(e){function t(e){var n;return L(this,t),I(S(n=E(this,t)),"trackingCodeAdded",!1),I(S(n),"trackingEnabled",!1),I(S(n),"gTagId",void 0),n.gTagId=e,window.dataLayer=window.dataLayer||[],n.cookies.isPolicyAccepted("usage")&&n.enableTracking(),n.cookies.on("changePolicy",(function(e){Object.hasOwn(e,"usage")&&(e.usage?n.enableTracking():n.disableTracking())})),n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&T(e,t)}(t,e),C(t,[{key:"recordEvent",value:function(e,t){var n={event:e,"tna.event":t};this.pushToDataLayer(n)}},{key:"gtag",value:function(){this.pushToDataLayer(arguments)}},{key:"pushToDataLayer",value:function(e){window.dataLayer.push(e)}},{key:"enableTracking",value:function(){if(!this.trackingEnabled){if(window["ga-disable-GA_MEASUREMENT_ID"]=!1,this.trackingEnabled=!0,!this.trackingCodeAdded){this.pushToDataLayer({"gtm.start":(new Date).getTime(),event:"gtm.js"});var e=document.getElementsByTagName("script")[0],t=document.createElement("script");t.async=!0,t.src="https://www.googletagmanager.com/gtm.js?id=".concat(this.gTagId,"&l=dataLayer"),e.parentNode.insertBefore(t,e),this.trackingCodeAdded=!0,this.pushToDataLayer(this.getTnaMetaTags())}this.gtag("set",{allow_google_signals:!0})}}},{key:"disableTracking",value:function(){this.trackingEnabled&&(window["ga-disable-GA_MEASUREMENT_ID"]=!0,this.gtag("set",{allow_google_signals:!1}),this.trackingEnabled=!1)}}]),t}(K),G={getXPathTo:p,getClosestHeading:h,valueGetters:y};return t})()));
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.TNAFrontendAnalytics=t():e.TNAFrontendAnalytics=t()}(self,(()=>(()=>{"use strict";var e={d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){s(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function a(e){return function(e){if(Array.isArray(e))return i(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return i(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,d(r.key),r)}}function u(e,t,n){return t&&l(e.prototype,t),n&&l(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function s(e,t,n){return(t=d(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function d(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,"string");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==n(t)?t:String(t)}e.r(t),e.d(t,{EventTracker:()=>J,GA4:()=>$,helpers:()=>X});var f=function(){function e(){if(c(this,e),s(this,"events",{}),s(this,"oneTimeEvents",{}),e._instance)return e._instance;e._instance=this}return u(e,[{key:"on",value:function(e,t){Object.hasOwn(this.events,e)||(this.events[e]=[]),this.events[e]=[].concat(a(this.events[e]),[t])}},{key:"once",value:function(e,t){Object.hasOwn(this.oneTimeEvents,e)||(this.oneTimeEvents[e]=[]),this.oneTimeEvents[e]=[].concat(a(this.oneTimeEvents[e]),[t])}},{key:"trigger",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(Object.hasOwn(this.events,e)&&this.events[e].forEach((function(e){return e.call(t,n)})),Object.hasOwn(this.oneTimeEvents,e))for(var r=this.oneTimeEvents[e].length-1;r>=0;r--)this.oneTimeEvents[e][r].call(this,n),this.oneTimeEvents[e].splice(r,1)}}]),e}(),v=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};c(this,e),s(this,"extraPolicies",[]),s(this,"domain",""),s(this,"path",""),s(this,"secure",!0),s(this,"policiesKey",""),s(this,"events",null);var n=t.extraPolicies,r=void 0===n?[]:n,o=t.domain,a=void 0===o?"":o,i=t.path,l=void 0===i?"/":i,u=t.secure,d=void 0===u||u,v=t.policiesKey,p=void 0===v?"cookies_policy":v;this.extraPolicies=r,this.domain=a,this.path=l,this.secure=d,this.policiesKey=p,this.events=new f,this.init()}return u(e,[{key:"init",value:function(){this.savePolicies(o(o(o({},Object.fromEntries(this.extraPolicies.map((function(e){return[e.toLowerCase(),!1]})))),{},{usage:!1,settings:!1},this.policies),{},{essential:!0}))}},{key:"all",get:function(){var e={};return document.cookie.split("; ").filter((function(e){return e})).forEach((function(t){var n=t.trim().split("=");n[0]&&(e[n[0]]=n[1])})),e}},{key:"policies",get:function(){try{return JSON.parse(this.get(this.policiesKey)||"{}")}catch(e){return{}}}},{key:"exists",value:function(e){return Object.hasOwn(this.all,e)}},{key:"hasValue",value:function(e,t){return this.get(e)==t}},{key:"get",value:function(e){return this.exists(e)?decodeURIComponent(this.all[e]):null}},{key:"set",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.maxAge,o=void 0===r?31536e3:r,a=n.sameSite,i=void 0===a?"Lax":a,c=n.domain,l=void 0===c?this.domain:c,u=n.path,s=void 0===u?this.path:u,d=n.secure,f=void 0===d?this.secure:d;if(e){var v="".concat(encodeURIComponent(e),"=").concat(encodeURIComponent(t),";").concat(l?" domain=".concat(l,"; "):""," samesite=").concat(i,"; path=").concat(s,"; max-age=").concat(o).concat(f?"; secure":"");document.cookie=v,this.events.trigger("setCookie",{key:e,value:t,maxAge:o,path:s,sameSite:i,domain:l,secure:f,cookie:v})}}},{key:"delete",value:function(e){var t={maxAge:-1,path:arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/",domain:(arguments.length>2&&void 0!==arguments[2]?arguments[2]:null)||void 0};this.set(e,"",t),this.events.trigger("deleteCookie",o({key:e},t))}},{key:"deleteAll",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;Object.keys(this.all).forEach((function(r){e.delete(r,t,n)})),this.events.trigger("deleteAllCookies",{path:t,domain:n})}},{key:"acceptPolicy",value:function(e){this.setPolicy(e,!0),this.events.trigger("acceptPolicy",e),this.events.trigger("changePolicy",s({},e,!0))}},{key:"rejectPolicy",value:function(e){this.setPolicy(e,!1),this.events.trigger("rejectPolicy",e),this.events.trigger("changePolicy",s({},e,!1))}},{key:"setPolicy",value:function(e,t){"essential"!==e&&(this.savePolicies(o(o({},this.policies),{},s(s({},e,t),"essential",!0))),this.events.trigger("changePolicy",s({},e,t)))}},{key:"acceptAllPolicies",value:function(){var e=Object.fromEntries(Object.keys(this.policies).map((function(e){return[e.toLowerCase(),!0]})));this.savePolicies(e),this.events.trigger("acceptAllPolicies"),this.events.trigger("changePolicy",e)}},{key:"rejectAllPolicies",value:function(){var e=o(o({},Object.fromEntries(Object.keys(this.policies).map((function(e){return[e.toLowerCase(),!1]})))),{},{essential:!0});this.savePolicies(e),this.events.trigger("rejectAllPolicies"),this.events.trigger("changePolicy",e)}},{key:"savePolicies",value:function(e){this.set(this.policiesKey,JSON.stringify(e))}},{key:"isPolicyAccepted",value:function(e){return Object.hasOwn(this.policies,e)?!0===this.policies[e]:null}},{key:"on",value:function(e,t){this.events.on(e,t)}},{key:"once",value:function(e,t){this.events.once(e,t)}}]),e}(),p=function e(t){if(""!==t.id)return'id("'+t.id+'")';if(t===document.body)return t.tagName;for(var n=0,r=t.parentNode.childNodes,o=0;o<r.length;o++){var a=r[o];if(a===t)return e(t.parentNode)+"/"+t.tagName+"["+(n+1)+"]";1===a.nodeType&&a.tagName===t.tagName&&n++}},m=function(e,t){return t.some((function(t){return e.includes(t)}))},g=function(e){var t="",n=e;do{for(;n.previousElementSibling;)if(n=n.previousElementSibling,["h1","h2","h3","h4","h5","h6"].includes(n.tagName)||n.classList.length&&m(Array.from(n.classList),["tna-heading-xl","tna-heading-l","tna-heading-m","tna-heading-s"])){t=n.innerText;break}n=n.parentElement}while(n.parentElement&&!t);return t},h={text:function(e){return e.innerText},html:function(e){return e.innerHTML},value:function(e){return e.value},index:function(e,t,n,r){return r},checked:function(e){return e.checked?"checked":"unchecked"},expanded:function(e){var t=e.getAttribute("aria-expanded");return null===t?null:"true"===t.toString()?"opened":"closed"},closestHeading:function(e){return g(e)}};const y=[{scope:".tna-checkboxes",areaName:"checkboxes",events:[{eventName:"toggle",targetElement:".tna-checkboxes__item input",on:"change",data:{state:h.checked,value:function(e,t,n){return e.parentNode.innerText},group:function(e,t,n){var r;return null===(r=t.closest(".tna-form__group"))||void 0===r||null===(r=r.querySelector(".tna-form__heading"))||void 0===r?void 0:r.innerText}}}]}],b=[{scope:".tna-footer",areaName:"footer",events:[{eventName:"link.click",targetElement:".tna-footer__navigation-block-item-link",on:"click",data:{value:h.text},rootData:{data_component_name:"Footer",data_link_type:"Link",data_section:h.closestHeading,data_position:h.index,data_link:h.text}},{eventName:"social_link.click",targetElement:".tna-footer__social-item-link",on:"click",data:{value:h.text},rootData:{data_component_name:"Footer",data_link_type:"Icon",data_section:"Social media",data_position:h.index,data_link:function(e){return e.getAttribute("data-name")}}},{eventName:"legal_link.click",targetElement:".tna-footer__legal-item-link",on:"click",data:{value:h.text},rootData:{data_component_name:"Footer",data_link_type:"Link",data_section:"Legal information",data_position:h.index,data_link:h.text}},{eventName:"mailing_list.click",targetElement:".tna-footer__mailing-list a.tna-button",on:"click",data:{value:h.text},rootData:{data_component_name:"Footer",data_link_type:"Button",data_section:"Mailing list",data_link:h.text}},{eventName:"ogl.click",targetElement:".tna-footer__licence p a.tna-footer__link",on:"click",data:{value:h.text},rootData:{data_component_name:"Footer",data_link_type:"Link",data_section:"OGL",data_link:h.text}},{eventName:"govuk.click",targetElement:".tna-footer__govuk-link",on:"click",data:{value:h.text},rootData:{data_component_name:"Footer",data_link_type:"Logo",data_section:"GOV.UK",data_link:h.text}}]}],_=[{scope:".tna-global-header",areaName:"header",events:[{eventName:"toggle",targetElement:".tna-global-header__navigation-button",on:"click",data:{state:h.expanded}},{eventName:"logo.click",targetElement:".tna-global-header__logo",on:"click",rootData:{data_component_name:"Header",data_link_type:"Logo",data_link:"The National Archives"}},{eventName:"primary_link.click",targetElement:".tna-global-header__navigation-item-link",on:"click",data:{value:h.text},rootData:{data_component_name:"Header",data_link_type:"Menu",data_section:h.text,data_position:h.index,data_link:h.text}},{eventName:"secondary_link.click",targetElement:".tna-global-header__top-navigation-link",on:"click",data:{value:h.text},rootData:{data_component_name:"Header",data_link_type:"Icon",data_position:h.index,data_link:h.text}}]}],k=[{scope:".tna-header",areaName:"header",events:[{eventName:"toggle",targetElement:".tna-header__navigation-toggle-button",on:"click",data:{state:h.expanded}}]}],O=[{scope:".tna-picture",areaName:"picture",events:[{eventName:"toggle_transcript",targetElement:".tna-picture__toggle-transcript",on:"click",data:{state:h.expanded,value:function(e,t,n){var r=g(t),o=t.querySelector(".tna-picture__image"),a=o.getAttribute("src"),i=o.getAttribute("alt"),c="".concat(i," (").concat(a,")");return r?"".concat(r," > ").concat(c):c}}}]}],E=[{scope:".tna-radios",areaName:"radios",events:[{eventName:"toggle",targetElement:".tna-radios__item input",on:"change",data:{state:h.checked,value:function(e,t,n){return e.parentNode.innerText},group:function(e,t,n){var r;return null===(r=t.closest(".tna-form__group"))||void 0===r||null===(r=r.querySelector(".tna-form__heading"))||void 0===r?void 0:r.innerText}}}]}],j=[{scope:".tna-search-field",areaName:"search-field",events:[{eventName:"blurred",targetElement:".tna-search-field__input",on:"blur",data:{value:h.value,group:function(e,t,n){var r;return null===(r=t.querySelector(".tna-form__heading"))||void 0===r?void 0:r.innerText}}}]}],w=[{scope:".tna-text-input",areaName:"text-input",events:[{eventName:"blurred",on:"blur",data:{value:h.value,group:function(e,t,n){var r;return null===(r=t.closest(".tna-form__group"))||void 0===r||null===(r=r.querySelector(".tna-form__heading"))||void 0===r?void 0:r.innerText}}}]}],x=[{scope:".tna-textarea",areaName:"textarea",events:[{eventName:"blurred",on:"blur",data:{value:h.value,group:function(e,t,n){var r;return null===(r=t.closest(".tna-form__group"))||void 0===r||null===(r=r.querySelector(".tna-form__heading"))||void 0===r?void 0:r.innerText}}}]}];function P(e,t,n){return t=T(t),S(e,A()?Reflect.construct(t,n||[],T(e).constructor):t.apply(e,n))}function S(e,t){if(t&&("object"===M(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return N(e)}function A(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(A=function(){return!!e})()}function T(e){return T=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},T(e)}function N(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function D(e,t){return D=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},D(e,t)}function L(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,c=[],l=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,o=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return c}}(e,t)||G(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function I(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function C(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?I(Object(n),!0).forEach((function(t){U(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):I(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function M(e){return M="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},M(e)}function q(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function F(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,H(r.key),r)}}function R(e,t,n){return t&&F(e.prototype,t),n&&F(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function U(e,t,n){return(t=H(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function H(e){var t=function(e,t){if("object"!=M(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=M(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==M(t)?t:String(t)}function V(e){return function(e){if(Array.isArray(e))return K(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||G(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function G(e,t){if(e){if("string"==typeof e)return K(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?K(e,t):void 0}}function K(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var B=[].concat(V([{scope:".tna-breadcrumbs",areaName:"breadcrumbs",events:[{eventName:"click",targetElement:".tna-breadcrumbs__item--expandable button.tna-breadcrumbs__link",on:"click",data:{state:"expand",value:h.html}}]}]),V(y),V(b),V(_),V(k),V([{scope:".tna-hero",areaName:"hero",events:[{eventName:"toggle_caption",targetElement:".tna-hero__details-summary",on:"click",data:{state:function(e,t,n){var r,o;return null!==(r=null===(o=t.querySelector(".tna-hero__details"))||void 0===o?void 0:o.hasAttribute("open"))&&void 0!==r&&r?"closed":"opened"},value:function(e,t,n){var r;return null===(r=t.querySelector("img[alt]"))||void 0===r?void 0:r.getAttribute("alt")}}}]}]),V(O),V(E),V(j),V(w),V(x)),J=function(){function e(t){var n;q(this,e),U(this,"cookies",new((null===(n=window.TNAFrontend)||void 0===n?void 0:n.Cookies)||v)),U(this,"events",[]),U(this,"start",new Date),U(this,"prefix","tna"),t&&(this.prefix=t)}return R(e,[{key:"initAll",value:function(){var e=this;B.forEach((function(t){e.addListener(t.scope,t.areaName,t.events)}))}},{key:"addListener",value:function(e,t,n){var r,o=this;"string"==typeof e?r=Array.from(document.querySelectorAll(e)):"object"===M(e)&&(r=[e]),r&&r.forEach((function(r){n.forEach((function(n){n.on&&(n.targetElement?Array.from(r.querySelectorAll(n.targetElement)).forEach((function(a,i){return o.attachListener(a,r,o.generateEventName(t,n),n,e,t,i+1)})):o.attachListener(r,r,o.generateEventName(t,n),n,e,t,1))}))}))}},{key:"generateEventName",value:function(e,t){return"".concat(this.prefix,".").concat(e,".").concat(t.eventName||t.on)}},{key:"attachListener",value:function(e,t,n,r,o,a,i){var c=this,l=r.on,u=r.data,s=r.targetElement,d=r.rootData,f=void 0===d?{}:d;e.addEventListener(l,(function(r){return c.recordEvent(n,C(C({},u),{},{value:c.computedValue(u.value,e,t,r,i),state:c.computedValue(u.state,e,t,r,i),group:c.computedValue(u.group,e,t,r,i),xPath:p(t),targetElement:s,timeSincePageLoad:new Date-c.start,index:i,scope:o,areaName:a}),Object.fromEntries(Object.entries(f).map((function(n){var o=L(n,2),a=o[0],l=o[1];return[a,c.computedValue(l,e,t,r,i)]}))))}))}},{key:"computedValue",value:function(e,t,n,r,o){return"function"==typeof e?e.call(this,t,n,r,o):e||null}},{key:"recordEvent",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};this.events.push(C(U({event:e},"".concat(this.prefix,".event"),t),n))}},{key:"getTnaMetaTags",value:function(){return Object.fromEntries(Array.from(document.head.querySelectorAll("meta[name^='".concat(this.prefix,".'][content]"))).map((function(e){return[e.getAttribute("name"),e.getAttribute("content")]})))}}]),e}(),$=function(e){function t(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(q(this,t),t._instance)return S(e,t._instance);if(!n)throw Error("ID was not specified");var o=r.prefix,a=void 0===o?null:o,i=r.initAll,c=void 0===i||i;return U(N(e=P(this,t,[a])),"trackingCodeAdded",!1),U(N(e),"trackingEnabled",!1),U(N(e),"gTagId",void 0),t._instance=N(e),e.gTagId=n,window.dataLayer=window.dataLayer||[],e.cookies.isPolicyAccepted("usage")&&e.enableTracking(),e.cookies.on("changePolicy",(function(t){Object.hasOwn(t,"usage")&&(t.usage?e.enableTracking():e.disableTracking())})),c&&e.initAll(),e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&D(e,t)}(t,e),R(t,[{key:"recordEvent",value:function(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=C(C({event:e},Object.fromEntries(Object.entries(t).map((function(e){var t=L(e,2),r=t[0],o=t[1];return["".concat(n.prefix,".event.").concat(r),o]})))),r);this.pushToDataLayer(o)}},{key:"gtag",value:function(){this.pushToDataLayer(arguments)}},{key:"pushToDataLayer",value:function(e){window.dataLayer.push(e)}},{key:"enableTracking",value:function(){if(!this.trackingEnabled){if(window["ga-disable-GA_MEASUREMENT_ID"]=!1,this.trackingEnabled=!0,!this.trackingCodeAdded){this.pushToDataLayer({"gtm.start":(new Date).getTime(),event:"gtm.js"});var e=document.getElementsByTagName("script")[0],t=document.createElement("script");t.async=!0,t.src="https://www.googletagmanager.com/gtm.js?id=".concat(this.gTagId,"&l=dataLayer"),e.parentNode.insertBefore(t,e),this.trackingCodeAdded=!0,this.pushToDataLayer(this.getTnaMetaTags())}this.gtag("set",{allow_google_signals:!0})}}},{key:"disableTracking",value:function(){this.trackingEnabled&&(window["ga-disable-GA_MEASUREMENT_ID"]=!0,this.gtag("set",{allow_google_signals:!1}),this.trackingEnabled=!1)}}]),t}(J),X={getXPathTo:p,getClosestHeading:g,valueGetters:h};return t})()));
2
2
  //# sourceMappingURL=analytics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.js","mappings":"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","sources":["webpack://TNAFrontend/webpack/universalModuleDefinition","webpack://TNAFrontend/webpack/bootstrap","webpack://TNAFrontend/webpack/runtime/define property getters","webpack://TNAFrontend/webpack/runtime/hasOwnProperty shorthand","webpack://TNAFrontend/webpack/runtime/make namespace object","webpack://TNAFrontend/./src/nationalarchives/lib/cookies.mjs","webpack://TNAFrontend/./src/nationalarchives/lib/analytics-helpers.mjs","webpack://TNAFrontend/./src/nationalarchives/components/breadcrumbs/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/checkboxes/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/picture/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/radios/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/search-field/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/text-input/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/textarea/analytics.js","webpack://TNAFrontend/./src/nationalarchives/analytics.mjs","webpack://TNAFrontend/./src/nationalarchives/components/global-header/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/header/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/hero/analytics.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TNAFrontendAnalytics\"] = factory();\n\telse\n\t\troot[\"TNAFrontendAnalytics\"] = factory();\n})(self, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export class CookieEventHandler {\n events = {};\n oneTimeEvents = {};\n\n constructor() {\n if (CookieEventHandler._instance) {\n return CookieEventHandler._instance;\n }\n CookieEventHandler._instance = this;\n }\n\n /**\n * Add an event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n on(event, callback) {\n if (!Object.hasOwn(this.events, event)) {\n this.events[event] = [];\n }\n this.events[event] = [...this.events[event], callback];\n }\n\n once(event, callback) {\n if (!Object.hasOwn(this.oneTimeEvents, event)) {\n this.oneTimeEvents[event] = [];\n }\n this.oneTimeEvents[event] = [...this.oneTimeEvents[event], callback];\n }\n\n /** @protected */\n trigger(event, data = {}) {\n if (Object.hasOwn(this.events, event)) {\n this.events[event].forEach((eventToTrigger) =>\n eventToTrigger.call(this, data),\n );\n }\n if (Object.hasOwn(this.oneTimeEvents, event)) {\n for (let i = this.oneTimeEvents[event].length - 1; i >= 0; i--) {\n const eventToTrigger = this.oneTimeEvents[event][i];\n eventToTrigger.call(this, data);\n this.oneTimeEvents[event].splice(i, 1);\n }\n }\n }\n}\n\n/**\n * Class to handle cookies.\n * @class Cookies\n * @constructor\n * @public\n */\nexport default class Cookies {\n /** @protected */\n extraPolicies = [];\n /** @protected */\n domain = \"\";\n /** @protected */\n path = \"\";\n /** @protected */\n secure = true;\n /** @protected */\n policiesKey = \"\";\n /** @protected */\n events = null;\n\n /**\n * Create a cookie handler.\n * @param {String} [options.extraPolicies=[]] - The extra cookie policies to manage in addition to essential, settings and usage.\n * @param {String} [options.domain=\"\"] - The domain to register the cookie with.\n * @param {String} [options.path=\"\"] - The domain to register the cookie with.\n * @param {String} [options.secure=true] - Only set cookie in HTTPS environments.\n * @param {String} [options.policiesKey=cookies_policy] - The name of the cookie.\n */\n constructor(options = {}) {\n const {\n extraPolicies = [],\n domain = \"\",\n path = \"/\",\n secure = true,\n policiesKey = \"cookies_policy\",\n } = options;\n this.extraPolicies = extraPolicies;\n this.domain = domain;\n this.path = path;\n this.secure = secure;\n this.policiesKey = policiesKey;\n this.events = new CookieEventHandler();\n this.init();\n }\n\n /** @protected */\n init() {\n this.savePolicies({\n ...Object.fromEntries(\n this.extraPolicies.map((k) => [k.toLowerCase(), false]),\n ),\n usage: false,\n settings: false,\n ...this.policies,\n essential: true,\n });\n }\n\n get all() {\n const deserialised = {};\n document.cookie\n .split(\"; \")\n .filter((x) => x)\n .forEach((cookie) => {\n const parts = cookie.trim().split(\"=\");\n if (parts[0]) {\n deserialised[parts[0]] = parts[1];\n }\n });\n return deserialised;\n }\n\n get policies() {\n try {\n return JSON.parse(this.get(this.policiesKey) || \"{}\");\n } catch (e) {\n return {};\n }\n }\n\n /**\n * Check to see whether a cookie exists or not.\n * @param {String} key - The cookie name.\n * @returns {Boolean}\n */\n exists(key) {\n return Object.hasOwn(this.all, key);\n }\n\n /**\n * Check to see whether a cookie has a particular value.\n * @param {String} key - The cookie name.\n * @param {String|Number|Boolean} value - The value to check against.\n * @returns\n */\n hasValue(key, value) {\n return this.get(key) == value;\n }\n\n /**\n * Get a cookie.\n * @param {String} key - The cookie name.\n * @returns {String|Number|Boolean}\n */\n get(key) {\n return this.exists(key) ? decodeURIComponent(this.all[key]) : null;\n }\n\n /**\n * Set a cookie.\n * @param {String} key - The cookie name.\n * @param {String|Number|Boolean} value - The cookie value.\n * @param {Object} options\n * @param {Number} [options.maxAge=31536000] - The maximum age of the cookie in seconds.\n * @param {String} [options.path=/] - The path to register the cookie for.\n * @param {String} [options.sameSite=Lax] - The sameSite attribute.\n * @param {String} [options.domain=this.domain] - The domain to register the cookie with.\n * @param {String} [options.path=this.path] - The path to register the cookie with.\n * @param {String} [options.secure=this.secure] - Only set cookie in HTTPS environments.\n */\n set(key, value, options = {}) {\n const {\n maxAge = 60 * 60 * 24 * 365,\n sameSite = \"Lax\",\n domain = this.domain,\n path = this.path,\n secure = this.secure,\n } = options;\n if (!key) {\n return;\n }\n const cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)};${\n domain ? ` domain=${domain}; ` : \"\"\n } samesite=${sameSite}; path=${path}; max-age=${maxAge}${\n secure ? \"; secure\" : \"\"\n }`;\n document.cookie = cookie;\n this.events.trigger(\"setCookie\", {\n key,\n value,\n maxAge,\n path,\n sameSite,\n domain,\n secure,\n cookie,\n });\n }\n\n /**\n * Delete a cookie.\n * @param {String} key - The cookie name.\n * @param {String} [path=/] - The path to the cookie is registered on.\n */\n delete(key, path = \"/\", domain = null) {\n const options = { maxAge: -1, path, domain: domain || undefined };\n this.set(key, \"\", options);\n this.events.trigger(\"deleteCookie\", { key, ...options });\n }\n\n /**\n * Delete all cookies.\n */\n deleteAll(path = \"/\", domain = null) {\n Object.keys(this.all).forEach((cookie) => {\n this.delete(cookie, path, domain);\n });\n this.events.trigger(\"deleteAllCookies\", { path, domain });\n }\n\n /**\n * Accept a policy.\n * @param {String} policy - The name of the policy.\n */\n acceptPolicy(policy) {\n this.setPolicy(policy, true);\n this.events.trigger(\"acceptPolicy\", policy);\n this.events.trigger(\"changePolicy\", { [policy]: true });\n }\n\n /**\n * Reject a policy.\n * @param {String} policy - The name of the policy.\n */\n rejectPolicy(policy) {\n this.setPolicy(policy, false);\n this.events.trigger(\"rejectPolicy\", policy);\n this.events.trigger(\"changePolicy\", { [policy]: false });\n }\n\n /**\n * Set a policy.\n * @param {String} policy - The name of the policy.\n * @param {Boolean} accepted - Whether the policy is accepted or not.\n */\n setPolicy(policy, accepted) {\n if (policy === \"essential\") {\n return;\n }\n this.savePolicies({\n ...this.policies,\n [policy]: accepted,\n essential: true,\n });\n this.events.trigger(\"changePolicy\", { [policy]: accepted });\n }\n\n /**\n * Accept all the cookie policies.\n */\n acceptAllPolicies() {\n const allPolicies = Object.fromEntries(\n Object.keys(this.policies).map((k) => [k.toLowerCase(), true]),\n );\n this.savePolicies(allPolicies);\n this.events.trigger(\"acceptAllPolicies\");\n this.events.trigger(\"changePolicy\", allPolicies);\n }\n\n /**\n * Reject all the cookie policies.\n */\n rejectAllPolicies() {\n const allPolicies = {\n ...Object.fromEntries(\n Object.keys(this.policies).map((k) => [k.toLowerCase(), false]),\n ),\n essential: true,\n };\n this.savePolicies(allPolicies);\n this.events.trigger(\"rejectAllPolicies\");\n this.events.trigger(\"changePolicy\", allPolicies);\n }\n\n /**\n * Commit policy preferences to the browser.\n * @param {object} policies - The policies to commit.\n */\n savePolicies(policies) {\n this.set(this.policiesKey, JSON.stringify(policies));\n }\n\n /**\n * Get the acceptance status of a policy.\n * @param {String} policy - The name of the policy.\n * @returns {Boolean}\n */\n isPolicyAccepted(policy) {\n return Object.hasOwn(this.policies, policy)\n ? this.policies[policy] === true\n : null;\n }\n\n /**\n * Add an event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n on(event, callback) {\n this.events.on(event, callback);\n }\n\n /**\n * Add a one-time event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n once(event, callback) {\n this.events.once(event, callback);\n }\n}\n","const getXPathTo = ($element) => {\n if ($element.id !== \"\") {\n return 'id(\"' + $element.id + '\")';\n }\n if ($element === document.body) {\n return $element.tagName;\n }\n let ix = 0;\n const siblings = $element.parentNode.childNodes;\n for (let i = 0; i < siblings.length; i++) {\n const sibling = siblings[i];\n if (sibling === $element)\n return (\n getXPathTo($element.parentNode) +\n \"/\" +\n $element.tagName +\n \"[\" +\n (ix + 1) +\n \"]\"\n );\n if (sibling.nodeType === 1 && sibling.tagName === $element.tagName) ix++;\n }\n};\n\nconst includesAny = (arr, values) => values.some((v) => arr.includes(v));\n\nconst getClosestHeading = ($element) => {\n let heading = \"\";\n let $search = $element;\n do {\n while ($search.previousElementSibling) {\n $search = $search.previousElementSibling;\n if (\n [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"].includes($search.tagName) ||\n ($search.classList.length &&\n includesAny(Array.from($search.classList), [\n \"tna-heading-xl\",\n \"tna-heading-l\",\n \"tna-heading-m\",\n \"tna-heading-s\",\n ]))\n ) {\n heading = $search.innerText;\n break;\n }\n }\n $search = $search.parentElement;\n } while ($search.parentElement && !heading);\n return heading;\n};\n\nconst valueGetters = {\n // eslint-disable-next-line no-unused-vars\n text: ($el, $scope, event) => $el.innerText,\n // eslint-disable-next-line no-unused-vars\n html: ($el, $scope, event) => $el.innerHTML,\n // eslint-disable-next-line no-unused-vars\n value: ($el, $scope, event) => $el.value,\n // eslint-disable-next-line no-unused-vars\n checked: ($el, $scope, event) => ($el.checked ? \"checked\" : \"unchecked\"),\n};\n\nexport { getXPathTo, getClosestHeading, valueGetters };\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-breadcrumbs\",\n areaName: \"breadcrumbs\",\n events: [\n {\n eventName: \"click\",\n targetElement:\n \".tna-breadcrumbs__item--expandable button.tna-breadcrumbs__link\",\n on: \"click\",\n data: { state: \"expand\", value: valueGetters.html },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-checkboxes\",\n areaName: \"checkboxes\",\n events: [\n {\n eventName: \"toggle\",\n targetElement: \".tna-checkboxes__item input\",\n on: \"change\",\n data: {\n state: valueGetters.checked,\n // eslint-disable-next-line no-unused-vars\n value: ($el, $scope, event) => $el.parentNode.innerText,\n // eslint-disable-next-line no-unused-vars\n group: ($el, $scope, event) =>\n $scope\n .closest(\".tna-form__group\")\n ?.querySelector(\".tna-form__heading\")?.innerText,\n },\n },\n ],\n },\n];\n","import { getClosestHeading } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-picture\",\n areaName: \"picture\",\n events: [\n {\n eventName: \"toggle_transcript\",\n targetElement: \".tna-picture__toggle-transcript\",\n on: \"click\",\n data: {\n // eslint-disable-next-line no-unused-vars\n state: ($el, $scope, event) => {\n const expanded = $el.getAttribute(\"aria-expanded\");\n if (expanded === null) {\n return null;\n }\n return expanded.toString() === \"true\" ? \"opened\" : \"closed\";\n },\n // eslint-disable-next-line no-unused-vars\n value: ($el, $scope, event) => {\n const heading = getClosestHeading($scope);\n const image = $scope.querySelector(\".tna-picture__image\");\n const imageSrc = image.getAttribute(\"src\");\n const imageAlt = image.getAttribute(\"alt\");\n const value = `${imageAlt} (${imageSrc})`;\n return heading ? `${heading} > ${value}` : value;\n },\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-radios\",\n areaName: \"radios\",\n events: [\n {\n eventName: \"toggle\",\n targetElement: \".tna-radios__item input\",\n on: \"change\",\n data: {\n state: valueGetters.checked,\n // eslint-disable-next-line no-unused-vars\n value: ($el, $scope, event) => $el.parentNode.innerText,\n // eslint-disable-next-line no-unused-vars\n group: ($el, $scope, event) =>\n $scope\n .closest(\".tna-form__group\")\n ?.querySelector(\".tna-form__heading\")?.innerText,\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-search-field\",\n areaName: \"search-field\",\n events: [\n {\n eventName: \"blurred\",\n targetElement: \".tna-search-field__input\",\n on: \"blur\",\n data: {\n // eslint-disable-next-line no-unused-vars\n value: valueGetters.value,\n // eslint-disable-next-line no-unused-vars\n group: ($el, $scope, event) =>\n $scope.querySelector(\".tna-form__heading\")?.innerText,\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-text-input\",\n areaName: \"text-input\",\n events: [\n {\n eventName: \"blurred\",\n on: \"blur\",\n data: {\n // eslint-disable-next-line no-unused-vars\n value: valueGetters.value,\n // eslint-disable-next-line no-unused-vars\n group: ($el, $scope, event) =>\n $scope\n .closest(\".tna-form__group\")\n ?.querySelector(\".tna-form__heading\")?.innerText,\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-textarea\",\n areaName: \"textarea\",\n events: [\n {\n eventName: \"blurred\",\n on: \"blur\",\n data: {\n // eslint-disable-next-line no-unused-vars\n value: valueGetters.value,\n // eslint-disable-next-line no-unused-vars\n group: ($el, $scope, event) =>\n $scope\n .closest(\".tna-form__group\")\n ?.querySelector(\".tna-form__heading\")?.innerText,\n },\n },\n ],\n },\n];\n","import Cookies from \"./lib/cookies.mjs\";\nimport {\n getXPathTo,\n getClosestHeading,\n valueGetters,\n} from \"./lib/analytics-helpers.mjs\";\nimport BreadcrumbAnalytics from \"./components/breadcrumbs/analytics.js\";\nimport CheckboxesAnalytics from \"./components/checkboxes/analytics.js\";\nimport GlobalHeaderAnalytics from \"./components/global-header/analytics.js\";\nimport HeaderAnalytics from \"./components/header/analytics.js\";\nimport HeroAnalytics from \"./components/hero/analytics.js\";\nimport PictureAnalytics from \"./components/picture/analytics.js\";\nimport RadiosAnalytics from \"./components/radios/analytics.js\";\nimport SearchFieldAnalytics from \"./components/search-field/analytics.js\";\nimport TextInputAnalytics from \"./components/text-input/analytics.js\";\nimport TextareaAnalytics from \"./components/textarea/analytics.js\";\n\nconst componentAnalytics = [\n ...BreadcrumbAnalytics,\n ...CheckboxesAnalytics,\n ...GlobalHeaderAnalytics,\n ...HeaderAnalytics,\n ...HeroAnalytics,\n ...PictureAnalytics,\n ...RadiosAnalytics,\n ...SearchFieldAnalytics,\n ...TextInputAnalytics,\n ...TextareaAnalytics,\n];\n\nclass EventTracker {\n /** @protected */\n cookies = new (window.TNAFrontend?.Cookies || Cookies)();\n\n /** @protected */\n events = [];\n\n /** @protected */\n start = new Date();\n\n constructor() {\n componentAnalytics.forEach((componentConfig) => {\n this.addListener(\n componentConfig.scope,\n componentConfig.areaName,\n componentConfig.events,\n );\n });\n }\n\n /**\n * Add an event listener.\n * @param {String|HTMLElement} scope - The element to which the listener is scoped.\n * @param {String} areaName - The name of the component to pass on to the tracker.\n * @param {{eventName: String, targetElement: String|undefined, on: String, data: {value: Function|String|undefined, state: Function|String|undefined, [String]: any}}[]} events - The configuration of events to track along with their optional value and state which can be computed.\n */\n addListener(scope, areaName, events) {\n let scopeArray;\n if (typeof scope === \"string\") {\n scopeArray = Array.from(document.querySelectorAll(scope));\n } else if (typeof scope === \"object\") {\n scopeArray = [scope];\n }\n if (!scopeArray) {\n return;\n }\n scopeArray.forEach(($scope) => {\n events.forEach((componentTracking) => {\n if (!componentTracking.on) {\n return;\n }\n if (componentTracking.targetElement) {\n Array.from(\n $scope.querySelectorAll(componentTracking.targetElement),\n ).forEach(($el) =>\n this.attachListener(\n $el,\n componentTracking.on,\n $scope,\n this.generateEventName(areaName, componentTracking),\n componentTracking.data,\n componentTracking.targetElement,\n ),\n );\n } else {\n this.attachListener(\n $scope,\n componentTracking.on,\n $scope,\n this.generateEventName(areaName, componentTracking),\n componentTracking.data,\n componentTracking.targetElement,\n );\n }\n });\n });\n }\n\n /** @protected */\n generateEventName(areaName, componentTracking) {\n return `${areaName}.${componentTracking.eventName || componentTracking.on}`;\n }\n\n /** @protected */\n attachListener(\n $el,\n eventTrigger,\n $scope,\n eventName,\n eventDataInit,\n targetElement,\n ) {\n if (!$el) {\n return;\n }\n $el.addEventListener(eventTrigger, (event) =>\n this.recordEvent(eventName, {\n ...eventDataInit,\n value:\n typeof eventDataInit.value === \"function\"\n ? eventDataInit.value.call(this, $el, $scope, event)\n : eventDataInit.value || null,\n state:\n typeof eventDataInit.state === \"function\"\n ? eventDataInit.state.call(this, $el, $scope, event)\n : eventDataInit.state || null,\n group:\n typeof eventDataInit.group === \"function\"\n ? eventDataInit.group.call(this, $el, $scope, event)\n : eventDataInit.group || null,\n scope: getXPathTo($scope),\n targetElement: targetElement,\n timestamp: new Date().toISOString(),\n uri: window.location.pathname,\n timeSincePageLoad: new Date() - this.start,\n }),\n );\n }\n\n /** @protected */\n recordEvent(eventName, data) {\n this.events.push({ event: eventName, \"tna.data\": data });\n }\n\n /** @protected */\n getTnaMetaTags() {\n return Object.fromEntries(\n Array.from(\n document.head.querySelectorAll(\"meta[name^='tna.'][content]\"),\n ).map(($metaEl) => [\n $metaEl.getAttribute(\"name\"),\n $metaEl.getAttribute(\"content\"),\n ]),\n );\n }\n}\n\n/**\n * Class to handle Google Analytics 4 reporting.\n * @class GA4\n * @extends EventTracker\n * @constructor\n * @public\n */\nclass GA4 extends EventTracker {\n trackingCodeAdded = false;\n trackingEnabled = false;\n gTagId;\n\n constructor(id) {\n super();\n this.gTagId = id;\n window.dataLayer = window.dataLayer || [];\n if (this.cookies.isPolicyAccepted(\"usage\")) {\n this.enableTracking();\n }\n this.cookies.on(\"changePolicy\", (policies) => {\n if (Object.hasOwn(policies, \"usage\")) {\n if (policies[\"usage\"]) {\n this.enableTracking();\n } else {\n this.disableTracking();\n }\n }\n });\n }\n\n /** @protected */\n recordEvent(eventName, data) {\n const ga4Data = { event: eventName, \"tna.event\": data };\n this.pushToDataLayer(ga4Data);\n }\n\n /** @protected */\n gtag() {\n this.pushToDataLayer(arguments);\n }\n\n /** @protected */\n pushToDataLayer(data) {\n window.dataLayer.push(data);\n }\n\n /** @protected */\n enableTracking() {\n if (!this.trackingEnabled) {\n window[\"ga-disable-GA_MEASUREMENT_ID\"] = false;\n this.trackingEnabled = true;\n if (!this.trackingCodeAdded) {\n this.pushToDataLayer({\n \"gtm.start\": new Date().getTime(),\n event: \"gtm.js\",\n });\n const firstScript = document.getElementsByTagName(\"script\")[0];\n const script = document.createElement(\"script\");\n script.async = true;\n script.src = `https://www.googletagmanager.com/gtm.js?id=${this.gTagId}&l=dataLayer`;\n firstScript.parentNode.insertBefore(script, firstScript);\n this.trackingCodeAdded = true;\n this.pushToDataLayer(this.getTnaMetaTags());\n }\n this.gtag(\"set\", { allow_google_signals: true });\n }\n }\n\n /** @protected */\n disableTracking() {\n if (this.trackingEnabled) {\n window[\"ga-disable-GA_MEASUREMENT_ID\"] = true;\n this.gtag(\"set\", { allow_google_signals: false });\n this.trackingEnabled = false;\n }\n }\n}\n\nconst helpers = { getXPathTo, getClosestHeading, valueGetters };\n\nexport { EventTracker, GA4, helpers };\n","export default [\n {\n scope: \".tna-global-header\",\n areaName: \"header\",\n events: [\n {\n eventName: \"toggle\",\n targetElement: \".tna-global-header__navigation-button\",\n on: \"click\",\n data: {\n // eslint-disable-next-line no-unused-vars\n state: ($el, $scope, event) => {\n const expanded = $el.getAttribute(\"aria-expanded\");\n if (expanded === null) {\n return null;\n }\n return expanded.toString() === \"true\" ? \"opened\" : \"closed\";\n },\n },\n },\n ],\n },\n];\n","export default [\n {\n scope: \".tna-header\",\n areaName: \"header\",\n events: [\n {\n eventName: \"toggle\",\n targetElement: \".tna-header__navigation-toggle-button\",\n on: \"click\",\n data: {\n // eslint-disable-next-line no-unused-vars\n state: ($el, $scope, event) => {\n const expanded = $el.getAttribute(\"aria-expanded\");\n if (expanded === null) {\n return null;\n }\n return expanded.toString() === \"true\" ? \"opened\" : \"closed\";\n },\n },\n },\n ],\n },\n];\n","export default [\n {\n scope: \".tna-hero\",\n areaName: \"hero\",\n events: [\n {\n eventName: \"toggle_caption\",\n targetElement: \".tna-hero__details-summary\",\n on: \"click\",\n data: {\n // eslint-disable-next-line no-unused-vars\n state: ($el, $scope, event) => {\n const wasExpanded =\n $scope\n .querySelector(\".tna-hero__details\")\n ?.hasAttribute(\"open\") ?? false;\n return wasExpanded ? \"closed\" : \"opened\";\n },\n // eslint-disable-next-line no-unused-vars\n value: ($el, $scope, event) =>\n $scope.querySelector(\"img[alt]\")?.getAttribute(\"alt\"),\n },\n },\n ],\n },\n];\n"],"names":["root","factory","exports","module","define","amd","self","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","CookieEventHandler","_classCallCheck","_defineProperty","_instance","this","_createClass","event","callback","hasOwn","events","concat","_toConsumableArray","oneTimeEvents","_this","data","arguments","length","undefined","forEach","eventToTrigger","i","splice","Cookies","options","_options$extraPolicie","extraPolicies","_options$domain","domain","_options$path","path","_options$secure","secure","_options$policiesKey","policiesKey","init","savePolicies","_objectSpread","fromEntries","map","k","toLowerCase","usage","settings","policies","essential","deserialised","document","cookie","split","filter","x","parts","trim","JSON","parse","e","all","exists","decodeURIComponent","_options$maxAge","maxAge","_options$sameSite","sameSite","_options$domain2","_options$path2","_options$secure2","encodeURIComponent","trigger","set","_this2","keys","policy","setPolicy","accepted","allPolicies","stringify","on","once","getXPathTo","$element","id","body","tagName","ix","siblings","parentNode","childNodes","sibling","nodeType","includesAny","arr","values","some","v","includes","getClosestHeading","heading","$search","previousElementSibling","classList","Array","from","innerText","parentElement","valueGetters","text","$el","$scope","html","innerHTML","checked","scope","areaName","eventName","targetElement","state","group","_$scope$closest","closest","querySelector","expanded","getAttribute","toString","image","imageSrc","imageAlt","_$scope$querySelector","componentAnalytics","CheckboxesAnalytics","_$scope$querySelector2","hasAttribute","_$scope$querySelector3","PictureAnalytics","RadiosAnalytics","SearchFieldAnalytics","TextInputAnalytics","TextareaAnalytics","EventTracker","_window$TNAFrontend","window","TNAFrontend","Date","componentConfig","addListener","scopeArray","querySelectorAll","_typeof","componentTracking","attachListener","generateEventName","eventTrigger","eventDataInit","_this3","addEventListener","recordEvent","timestamp","toISOString","uri","location","pathname","timeSincePageLoad","start","push","head","$metaEl","GA4","_EventTracker2","_this4","_assertThisInitialized","_callSuper","gTagId","dataLayer","cookies","isPolicyAccepted","enableTracking","disableTracking","_inherits","ga4Data","pushToDataLayer","trackingEnabled","trackingCodeAdded","getTime","firstScript","getElementsByTagName","script","createElement","async","src","insertBefore","getTnaMetaTags","gtag","allow_google_signals","helpers"],"sourceRoot":""}
1
+ {"version":3,"file":"analytics.js","mappings":"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","sources":["webpack://TNAFrontend/webpack/universalModuleDefinition","webpack://TNAFrontend/webpack/bootstrap","webpack://TNAFrontend/webpack/runtime/define property getters","webpack://TNAFrontend/webpack/runtime/hasOwnProperty shorthand","webpack://TNAFrontend/webpack/runtime/make namespace object","webpack://TNAFrontend/./src/nationalarchives/lib/cookies.mjs","webpack://TNAFrontend/./src/nationalarchives/lib/analytics-helpers.mjs","webpack://TNAFrontend/./src/nationalarchives/components/breadcrumbs/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/checkboxes/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/footer/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/global-header/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/header/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/picture/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/radios/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/search-field/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/text-input/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/textarea/analytics.js","webpack://TNAFrontend/./src/nationalarchives/analytics.mjs","webpack://TNAFrontend/./src/nationalarchives/components/hero/analytics.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TNAFrontendAnalytics\"] = factory();\n\telse\n\t\troot[\"TNAFrontendAnalytics\"] = factory();\n})(self, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export class CookieEventHandler {\n events = {};\n oneTimeEvents = {};\n\n constructor() {\n if (CookieEventHandler._instance) {\n return CookieEventHandler._instance;\n }\n CookieEventHandler._instance = this;\n }\n\n /**\n * Add an event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n on(event, callback) {\n if (!Object.hasOwn(this.events, event)) {\n this.events[event] = [];\n }\n this.events[event] = [...this.events[event], callback];\n }\n\n once(event, callback) {\n if (!Object.hasOwn(this.oneTimeEvents, event)) {\n this.oneTimeEvents[event] = [];\n }\n this.oneTimeEvents[event] = [...this.oneTimeEvents[event], callback];\n }\n\n /** @protected */\n trigger(event, data = {}) {\n if (Object.hasOwn(this.events, event)) {\n this.events[event].forEach((eventToTrigger) =>\n eventToTrigger.call(this, data),\n );\n }\n if (Object.hasOwn(this.oneTimeEvents, event)) {\n for (let i = this.oneTimeEvents[event].length - 1; i >= 0; i--) {\n const eventToTrigger = this.oneTimeEvents[event][i];\n eventToTrigger.call(this, data);\n this.oneTimeEvents[event].splice(i, 1);\n }\n }\n }\n}\n\n/**\n * Class to handle cookies.\n * @class Cookies\n * @constructor\n * @public\n */\nexport default class Cookies {\n /** @protected */\n extraPolicies = [];\n /** @protected */\n domain = \"\";\n /** @protected */\n path = \"\";\n /** @protected */\n secure = true;\n /** @protected */\n policiesKey = \"\";\n /** @protected */\n events = null;\n\n /**\n * Create a cookie handler.\n * @param {String} [options.extraPolicies=[]] - The extra cookie policies to manage in addition to essential, settings and usage.\n * @param {String} [options.domain=\"\"] - The domain to register the cookie with.\n * @param {String} [options.path=\"\"] - The domain to register the cookie with.\n * @param {String} [options.secure=true] - Only set cookie in HTTPS environments.\n * @param {String} [options.policiesKey=cookies_policy] - The name of the cookie.\n */\n constructor(options = {}) {\n const {\n extraPolicies = [],\n domain = \"\",\n path = \"/\",\n secure = true,\n policiesKey = \"cookies_policy\",\n } = options;\n this.extraPolicies = extraPolicies;\n this.domain = domain;\n this.path = path;\n this.secure = secure;\n this.policiesKey = policiesKey;\n this.events = new CookieEventHandler();\n this.init();\n }\n\n /** @protected */\n init() {\n this.savePolicies({\n ...Object.fromEntries(\n this.extraPolicies.map((k) => [k.toLowerCase(), false]),\n ),\n usage: false,\n settings: false,\n ...this.policies,\n essential: true,\n });\n }\n\n get all() {\n const deserialised = {};\n document.cookie\n .split(\"; \")\n .filter((x) => x)\n .forEach((cookie) => {\n const parts = cookie.trim().split(\"=\");\n if (parts[0]) {\n deserialised[parts[0]] = parts[1];\n }\n });\n return deserialised;\n }\n\n get policies() {\n try {\n return JSON.parse(this.get(this.policiesKey) || \"{}\");\n } catch (e) {\n return {};\n }\n }\n\n /**\n * Check to see whether a cookie exists or not.\n * @param {String} key - The cookie name.\n * @returns {Boolean}\n */\n exists(key) {\n return Object.hasOwn(this.all, key);\n }\n\n /**\n * Check to see whether a cookie has a particular value.\n * @param {String} key - The cookie name.\n * @param {String|Number|Boolean} value - The value to check against.\n * @returns\n */\n hasValue(key, value) {\n return this.get(key) == value;\n }\n\n /**\n * Get a cookie.\n * @param {String} key - The cookie name.\n * @returns {String|Number|Boolean}\n */\n get(key) {\n return this.exists(key) ? decodeURIComponent(this.all[key]) : null;\n }\n\n /**\n * Set a cookie.\n * @param {String} key - The cookie name.\n * @param {String|Number|Boolean} value - The cookie value.\n * @param {Object} options\n * @param {Number} [options.maxAge=31536000] - The maximum age of the cookie in seconds.\n * @param {String} [options.path=/] - The path to register the cookie for.\n * @param {String} [options.sameSite=Lax] - The sameSite attribute.\n * @param {String} [options.domain=this.domain] - The domain to register the cookie with.\n * @param {String} [options.path=this.path] - The path to register the cookie with.\n * @param {String} [options.secure=this.secure] - Only set cookie in HTTPS environments.\n */\n set(key, value, options = {}) {\n const {\n maxAge = 60 * 60 * 24 * 365,\n sameSite = \"Lax\",\n domain = this.domain,\n path = this.path,\n secure = this.secure,\n } = options;\n if (!key) {\n return;\n }\n const cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)};${\n domain ? ` domain=${domain}; ` : \"\"\n } samesite=${sameSite}; path=${path}; max-age=${maxAge}${\n secure ? \"; secure\" : \"\"\n }`;\n document.cookie = cookie;\n this.events.trigger(\"setCookie\", {\n key,\n value,\n maxAge,\n path,\n sameSite,\n domain,\n secure,\n cookie,\n });\n }\n\n /**\n * Delete a cookie.\n * @param {String} key - The cookie name.\n * @param {String} [path=/] - The path to the cookie is registered on.\n */\n delete(key, path = \"/\", domain = null) {\n const options = { maxAge: -1, path, domain: domain || undefined };\n this.set(key, \"\", options);\n this.events.trigger(\"deleteCookie\", { key, ...options });\n }\n\n /**\n * Delete all cookies.\n */\n deleteAll(path = \"/\", domain = null) {\n Object.keys(this.all).forEach((cookie) => {\n this.delete(cookie, path, domain);\n });\n this.events.trigger(\"deleteAllCookies\", { path, domain });\n }\n\n /**\n * Accept a policy.\n * @param {String} policy - The name of the policy.\n */\n acceptPolicy(policy) {\n this.setPolicy(policy, true);\n this.events.trigger(\"acceptPolicy\", policy);\n this.events.trigger(\"changePolicy\", { [policy]: true });\n }\n\n /**\n * Reject a policy.\n * @param {String} policy - The name of the policy.\n */\n rejectPolicy(policy) {\n this.setPolicy(policy, false);\n this.events.trigger(\"rejectPolicy\", policy);\n this.events.trigger(\"changePolicy\", { [policy]: false });\n }\n\n /**\n * Set a policy.\n * @param {String} policy - The name of the policy.\n * @param {Boolean} accepted - Whether the policy is accepted or not.\n */\n setPolicy(policy, accepted) {\n if (policy === \"essential\") {\n return;\n }\n this.savePolicies({\n ...this.policies,\n [policy]: accepted,\n essential: true,\n });\n this.events.trigger(\"changePolicy\", { [policy]: accepted });\n }\n\n /**\n * Accept all the cookie policies.\n */\n acceptAllPolicies() {\n const allPolicies = Object.fromEntries(\n Object.keys(this.policies).map((k) => [k.toLowerCase(), true]),\n );\n this.savePolicies(allPolicies);\n this.events.trigger(\"acceptAllPolicies\");\n this.events.trigger(\"changePolicy\", allPolicies);\n }\n\n /**\n * Reject all the cookie policies.\n */\n rejectAllPolicies() {\n const allPolicies = {\n ...Object.fromEntries(\n Object.keys(this.policies).map((k) => [k.toLowerCase(), false]),\n ),\n essential: true,\n };\n this.savePolicies(allPolicies);\n this.events.trigger(\"rejectAllPolicies\");\n this.events.trigger(\"changePolicy\", allPolicies);\n }\n\n /**\n * Commit policy preferences to the browser.\n * @param {object} policies - The policies to commit.\n */\n savePolicies(policies) {\n this.set(this.policiesKey, JSON.stringify(policies));\n }\n\n /**\n * Get the acceptance status of a policy.\n * @param {String} policy - The name of the policy.\n * @returns {Boolean}\n */\n isPolicyAccepted(policy) {\n return Object.hasOwn(this.policies, policy)\n ? this.policies[policy] === true\n : null;\n }\n\n /**\n * Add an event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n on(event, callback) {\n this.events.on(event, callback);\n }\n\n /**\n * Add a one-time event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n once(event, callback) {\n this.events.once(event, callback);\n }\n}\n","const getXPathTo = ($element) => {\n if ($element.id !== \"\") {\n return 'id(\"' + $element.id + '\")';\n }\n if ($element === document.body) {\n return $element.tagName;\n }\n let ix = 0;\n const siblings = $element.parentNode.childNodes;\n for (let i = 0; i < siblings.length; i++) {\n const sibling = siblings[i];\n if (sibling === $element)\n return (\n getXPathTo($element.parentNode) +\n \"/\" +\n $element.tagName +\n \"[\" +\n (ix + 1) +\n \"]\"\n );\n if (sibling.nodeType === 1 && sibling.tagName === $element.tagName) ix++;\n }\n};\n\nconst includesAny = (arr, values) => values.some((v) => arr.includes(v));\n\nconst getClosestHeading = ($element) => {\n let heading = \"\";\n let $search = $element;\n do {\n while ($search.previousElementSibling) {\n $search = $search.previousElementSibling;\n if (\n [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"].includes($search.tagName) ||\n ($search.classList.length &&\n includesAny(Array.from($search.classList), [\n \"tna-heading-xl\",\n \"tna-heading-l\",\n \"tna-heading-m\",\n \"tna-heading-s\",\n ]))\n ) {\n heading = $search.innerText;\n break;\n }\n }\n $search = $search.parentElement;\n } while ($search.parentElement && !heading);\n return heading;\n};\n\nconst valueGetters = {\n text: ($el) => $el.innerText,\n html: ($el) => $el.innerHTML,\n value: ($el) => $el.value,\n index: ($el, $scope, event, index) => index,\n checked: ($el) => ($el.checked ? \"checked\" : \"unchecked\"),\n expanded: ($el) => {\n const expanded = $el.getAttribute(\"aria-expanded\");\n if (expanded === null) {\n return null;\n }\n return expanded.toString() === \"true\" ? \"opened\" : \"closed\";\n },\n closestHeading: ($el) => getClosestHeading($el),\n};\n\nexport { getXPathTo, getClosestHeading, valueGetters };\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-breadcrumbs\",\n areaName: \"breadcrumbs\",\n events: [\n {\n eventName: \"click\",\n targetElement:\n \".tna-breadcrumbs__item--expandable button.tna-breadcrumbs__link\",\n on: \"click\",\n data: { state: \"expand\", value: valueGetters.html },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-checkboxes\",\n areaName: \"checkboxes\",\n events: [\n {\n eventName: \"toggle\",\n targetElement: \".tna-checkboxes__item input\",\n on: \"change\",\n data: {\n state: valueGetters.checked,\n // eslint-disable-next-line no-unused-vars\n value: ($el, $scope, event) => $el.parentNode.innerText,\n // eslint-disable-next-line no-unused-vars\n group: ($el, $scope, event) =>\n $scope\n .closest(\".tna-form__group\")\n ?.querySelector(\".tna-form__heading\")?.innerText,\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-footer\",\n areaName: \"footer\",\n events: [\n {\n eventName: \"link.click\",\n targetElement: \".tna-footer__navigation-block-item-link\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_component_name: \"Footer\",\n data_link_type: \"Link\",\n data_section: valueGetters.closestHeading,\n data_position: valueGetters.index,\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"social_link.click\",\n targetElement: \".tna-footer__social-item-link\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_component_name: \"Footer\",\n data_link_type: \"Icon\",\n data_section: \"Social media\",\n data_position: valueGetters.index,\n data_link: ($el) => $el.getAttribute(\"data-name\"),\n },\n },\n {\n eventName: \"legal_link.click\",\n targetElement: \".tna-footer__legal-item-link\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_component_name: \"Footer\",\n data_link_type: \"Link\",\n data_section: \"Legal information\",\n data_position: valueGetters.index,\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"mailing_list.click\",\n targetElement: \".tna-footer__mailing-list a.tna-button\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_component_name: \"Footer\",\n data_link_type: \"Button\",\n data_section: \"Mailing list\",\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"ogl.click\",\n targetElement: \".tna-footer__licence p a.tna-footer__link\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_component_name: \"Footer\",\n data_link_type: \"Link\",\n data_section: \"OGL\",\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"govuk.click\",\n targetElement: \".tna-footer__govuk-link\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_component_name: \"Footer\",\n data_link_type: \"Logo\",\n data_section: \"GOV.UK\",\n data_link: valueGetters.text,\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-global-header\",\n areaName: \"header\",\n events: [\n {\n eventName: \"toggle\",\n targetElement: \".tna-global-header__navigation-button\",\n on: \"click\",\n data: {\n state: valueGetters.expanded,\n },\n },\n {\n eventName: \"logo.click\",\n targetElement: \".tna-global-header__logo\",\n on: \"click\",\n rootData: {\n data_component_name: \"Header\",\n data_link_type: \"Logo\",\n data_link: \"The National Archives\",\n },\n },\n {\n eventName: \"primary_link.click\",\n targetElement: \".tna-global-header__navigation-item-link\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_component_name: \"Header\",\n data_link_type: \"Menu\",\n data_section: valueGetters.text,\n data_position: valueGetters.index,\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"secondary_link.click\",\n targetElement: \".tna-global-header__top-navigation-link\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_component_name: \"Header\",\n data_link_type: \"Icon\",\n data_position: valueGetters.index,\n data_link: valueGetters.text,\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-header\",\n areaName: \"header\",\n events: [\n {\n eventName: \"toggle\",\n targetElement: \".tna-header__navigation-toggle-button\",\n on: \"click\",\n data: {\n state: valueGetters.expanded,\n },\n },\n ],\n },\n];\n","import {\n getClosestHeading,\n valueGetters,\n} from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-picture\",\n areaName: \"picture\",\n events: [\n {\n eventName: \"toggle_transcript\",\n targetElement: \".tna-picture__toggle-transcript\",\n on: \"click\",\n data: {\n state: valueGetters.expanded,\n // eslint-disable-next-line no-unused-vars\n value: ($el, $scope, event) => {\n const heading = getClosestHeading($scope);\n const image = $scope.querySelector(\".tna-picture__image\");\n const imageSrc = image.getAttribute(\"src\");\n const imageAlt = image.getAttribute(\"alt\");\n const value = `${imageAlt} (${imageSrc})`;\n return heading ? `${heading} > ${value}` : value;\n },\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-radios\",\n areaName: \"radios\",\n events: [\n {\n eventName: \"toggle\",\n targetElement: \".tna-radios__item input\",\n on: \"change\",\n data: {\n state: valueGetters.checked,\n // eslint-disable-next-line no-unused-vars\n value: ($el, $scope, event) => $el.parentNode.innerText,\n // eslint-disable-next-line no-unused-vars\n group: ($el, $scope, event) =>\n $scope\n .closest(\".tna-form__group\")\n ?.querySelector(\".tna-form__heading\")?.innerText,\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-search-field\",\n areaName: \"search-field\",\n events: [\n {\n eventName: \"blurred\",\n targetElement: \".tna-search-field__input\",\n on: \"blur\",\n data: {\n // eslint-disable-next-line no-unused-vars\n value: valueGetters.value,\n // eslint-disable-next-line no-unused-vars\n group: ($el, $scope, event) =>\n $scope.querySelector(\".tna-form__heading\")?.innerText,\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-text-input\",\n areaName: \"text-input\",\n events: [\n {\n eventName: \"blurred\",\n on: \"blur\",\n data: {\n // eslint-disable-next-line no-unused-vars\n value: valueGetters.value,\n // eslint-disable-next-line no-unused-vars\n group: ($el, $scope, event) =>\n $scope\n .closest(\".tna-form__group\")\n ?.querySelector(\".tna-form__heading\")?.innerText,\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-textarea\",\n areaName: \"textarea\",\n events: [\n {\n eventName: \"blurred\",\n on: \"blur\",\n data: {\n // eslint-disable-next-line no-unused-vars\n value: valueGetters.value,\n // eslint-disable-next-line no-unused-vars\n group: ($el, $scope, event) =>\n $scope\n .closest(\".tna-form__group\")\n ?.querySelector(\".tna-form__heading\")?.innerText,\n },\n },\n ],\n },\n];\n","import Cookies from \"./lib/cookies.mjs\";\nimport {\n getXPathTo,\n getClosestHeading,\n valueGetters,\n} from \"./lib/analytics-helpers.mjs\";\nimport BreadcrumbAnalytics from \"./components/breadcrumbs/analytics.js\";\nimport CheckboxesAnalytics from \"./components/checkboxes/analytics.js\";\nimport FooterAnalytics from \"./components/footer/analytics.js\";\nimport GlobalHeaderAnalytics from \"./components/global-header/analytics.js\";\nimport HeaderAnalytics from \"./components/header/analytics.js\";\nimport HeroAnalytics from \"./components/hero/analytics.js\";\nimport PictureAnalytics from \"./components/picture/analytics.js\";\nimport RadiosAnalytics from \"./components/radios/analytics.js\";\nimport SearchFieldAnalytics from \"./components/search-field/analytics.js\";\nimport TextInputAnalytics from \"./components/text-input/analytics.js\";\nimport TextareaAnalytics from \"./components/textarea/analytics.js\";\n\nconst componentAnalytics = [\n ...BreadcrumbAnalytics,\n ...CheckboxesAnalytics,\n ...FooterAnalytics,\n ...GlobalHeaderAnalytics,\n ...HeaderAnalytics,\n ...HeroAnalytics,\n ...PictureAnalytics,\n ...RadiosAnalytics,\n ...SearchFieldAnalytics,\n ...TextInputAnalytics,\n ...TextareaAnalytics,\n];\n\nclass EventTracker {\n /** @protected */\n cookies = new (window.TNAFrontend?.Cookies || Cookies)();\n\n /** @protected */\n events = [];\n\n /** @protected */\n start = new Date();\n\n /** @protected */\n prefix = \"tna\";\n\n constructor(prefix) {\n if (prefix) {\n this.prefix = prefix;\n }\n }\n\n /**\n * Initialise all TNA Frontend component analytics.\n */\n initAll() {\n componentAnalytics.forEach((componentConfig) => {\n this.addListener(\n componentConfig.scope,\n componentConfig.areaName,\n componentConfig.events,\n );\n });\n }\n\n /**\n * Add an event listener.\n * @param {String|HTMLElement} scope - The element to which the listener is scoped.\n * @param {String} areaName - The name of the component to pass on to the tracker.\n * @param {{eventName: String, targetElement: String|undefined, on: String, data: {value: Function|String|undefined, state: Function|String|undefined, [String]: any}}[]} events - The configuration of events to track along with their optional value and state which can be computed.\n */\n addListener(scope, areaName, events) {\n let scopeArray;\n if (typeof scope === \"string\") {\n scopeArray = Array.from(document.querySelectorAll(scope));\n } else if (typeof scope === \"object\") {\n scopeArray = [scope];\n }\n if (!scopeArray) {\n return;\n }\n scopeArray.forEach(($scope) => {\n events.forEach((eventConfig) => {\n if (!eventConfig.on) {\n return;\n }\n if (eventConfig.targetElement) {\n Array.from(\n $scope.querySelectorAll(eventConfig.targetElement),\n ).forEach(($el, index) =>\n this.attachListener(\n $el,\n $scope,\n this.generateEventName(areaName, eventConfig),\n eventConfig,\n scope,\n areaName,\n index + 1,\n ),\n );\n } else {\n this.attachListener(\n $scope,\n $scope,\n this.generateEventName(areaName, eventConfig),\n eventConfig,\n scope,\n areaName,\n 1,\n );\n }\n });\n });\n }\n\n /** @protected */\n generateEventName(areaName, eventConfig) {\n return `${this.prefix}.${areaName}.${eventConfig.eventName || eventConfig.on}`;\n }\n\n /** @protected */\n attachListener($el, $scope, eventName, eventConfig, scope, areaName, index) {\n const { on, data, targetElement, rootData = {} } = eventConfig;\n $el.addEventListener(on, (event) =>\n this.recordEvent(\n eventName,\n {\n ...data,\n value: this.computedValue(data.value, $el, $scope, event, index),\n state: this.computedValue(data.state, $el, $scope, event, index),\n group: this.computedValue(data.group, $el, $scope, event, index),\n xPath: getXPathTo($scope),\n targetElement: targetElement,\n // timestamp: new Date().toISOString(),\n // uri: window.location.pathname,\n timeSincePageLoad: new Date() - this.start,\n index,\n scope,\n areaName,\n },\n Object.fromEntries(\n Object.entries(rootData).map(([key, value]) => [\n key,\n this.computedValue(value, $el, $scope, event, index),\n ]),\n ),\n ),\n );\n }\n\n /** @protected */\n computedValue(value, $el, $scope, event, index) {\n return typeof value === \"function\"\n ? value.call(this, $el, $scope, event, index)\n : value || null;\n }\n\n /** @protected */\n recordEvent(eventName, data, rootData = {}) {\n this.events.push({\n event: eventName,\n [`${this.prefix}.event`]: data,\n ...rootData,\n });\n }\n\n /** @protected */\n getTnaMetaTags() {\n return Object.fromEntries(\n Array.from(\n document.head.querySelectorAll(\n `meta[name^='${this.prefix}.'][content]`,\n ),\n ).map(($metaEl) => [\n $metaEl.getAttribute(\"name\"),\n $metaEl.getAttribute(\"content\"),\n ]),\n );\n }\n}\n\n/**\n * Class to handle Google Analytics 4 reporting.\n * @class GA4\n * @extends EventTracker\n * @constructor\n * @public\n */\nclass GA4 extends EventTracker {\n trackingCodeAdded = false;\n trackingEnabled = false;\n gTagId;\n\n constructor(id = null, options = {}) {\n if (GA4._instance) {\n return GA4._instance;\n }\n if (!id) {\n throw Error(\"ID was not specified\");\n }\n const { prefix = null, initAll = true } = options;\n super(prefix);\n GA4._instance = this;\n this.gTagId = id;\n window.dataLayer = window.dataLayer || [];\n if (this.cookies.isPolicyAccepted(\"usage\")) {\n this.enableTracking();\n }\n this.cookies.on(\"changePolicy\", (policies) => {\n if (Object.hasOwn(policies, \"usage\")) {\n if (policies[\"usage\"]) {\n this.enableTracking();\n } else {\n this.disableTracking();\n }\n }\n });\n if (initAll) {\n this.initAll();\n }\n }\n\n /** @protected */\n recordEvent(eventName, data, rootData = {}) {\n const ga4Data = {\n event: eventName,\n ...Object.fromEntries(\n Object.entries(data).map(([key, value]) => [\n `${this.prefix}.event.${key}`,\n value,\n ]),\n ),\n ...rootData,\n };\n this.pushToDataLayer(ga4Data);\n }\n\n /** @protected */\n gtag() {\n this.pushToDataLayer(arguments);\n }\n\n /** @protected */\n pushToDataLayer(data) {\n window.dataLayer.push(data);\n }\n\n /** @protected */\n enableTracking() {\n if (!this.trackingEnabled) {\n window[\"ga-disable-GA_MEASUREMENT_ID\"] = false;\n this.trackingEnabled = true;\n if (!this.trackingCodeAdded) {\n this.pushToDataLayer({\n \"gtm.start\": new Date().getTime(),\n event: \"gtm.js\",\n });\n const firstScript = document.getElementsByTagName(\"script\")[0];\n const script = document.createElement(\"script\");\n script.async = true;\n script.src = `https://www.googletagmanager.com/gtm.js?id=${this.gTagId}&l=dataLayer`;\n firstScript.parentNode.insertBefore(script, firstScript);\n this.trackingCodeAdded = true;\n this.pushToDataLayer(this.getTnaMetaTags());\n }\n this.gtag(\"set\", { allow_google_signals: true });\n }\n }\n\n /** @protected */\n disableTracking() {\n if (this.trackingEnabled) {\n window[\"ga-disable-GA_MEASUREMENT_ID\"] = true;\n this.gtag(\"set\", { allow_google_signals: false });\n this.trackingEnabled = false;\n }\n }\n}\n\nconst helpers = { getXPathTo, getClosestHeading, valueGetters };\n\nexport { EventTracker, GA4, helpers };\n","export default [\n {\n scope: \".tna-hero\",\n areaName: \"hero\",\n events: [\n {\n eventName: \"toggle_caption\",\n targetElement: \".tna-hero__details-summary\",\n on: \"click\",\n data: {\n // eslint-disable-next-line no-unused-vars\n state: ($el, $scope, event) => {\n const wasExpanded =\n $scope\n .querySelector(\".tna-hero__details\")\n ?.hasAttribute(\"open\") ?? false;\n return wasExpanded ? \"closed\" : \"opened\";\n },\n // eslint-disable-next-line no-unused-vars\n value: ($el, $scope, event) =>\n $scope.querySelector(\"img[alt]\")?.getAttribute(\"alt\"),\n },\n },\n ],\n },\n];\n"],"names":["root","factory","exports","module","define","amd","self","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","CookieEventHandler","_classCallCheck","_defineProperty","_instance","this","_createClass","event","callback","hasOwn","events","concat","_toConsumableArray","oneTimeEvents","_this","data","arguments","length","undefined","forEach","eventToTrigger","i","splice","Cookies","options","_options$extraPolicie","extraPolicies","_options$domain","domain","_options$path","path","_options$secure","secure","_options$policiesKey","policiesKey","init","savePolicies","_objectSpread","fromEntries","map","k","toLowerCase","usage","settings","policies","essential","deserialised","document","cookie","split","filter","x","parts","trim","JSON","parse","e","all","exists","decodeURIComponent","_options$maxAge","maxAge","_options$sameSite","sameSite","_options$domain2","_options$path2","_options$secure2","encodeURIComponent","trigger","set","_this2","keys","policy","setPolicy","accepted","allPolicies","stringify","on","once","getXPathTo","$element","id","body","tagName","ix","siblings","parentNode","childNodes","sibling","nodeType","includesAny","arr","values","some","v","includes","getClosestHeading","heading","$search","previousElementSibling","classList","Array","from","innerText","parentElement","valueGetters","text","$el","html","innerHTML","index","$scope","checked","expanded","getAttribute","toString","closestHeading","scope","areaName","eventName","targetElement","state","group","_$scope$closest","closest","querySelector","rootData","data_component_name","data_link_type","data_section","data_position","data_link","image","imageSrc","imageAlt","_$scope$querySelector","componentAnalytics","CheckboxesAnalytics","FooterAnalytics","GlobalHeaderAnalytics","HeaderAnalytics","_$scope$querySelector2","hasAttribute","_$scope$querySelector3","PictureAnalytics","RadiosAnalytics","SearchFieldAnalytics","TextInputAnalytics","TextareaAnalytics","EventTracker","prefix","_window$TNAFrontend","window","TNAFrontend","Date","componentConfig","addListener","scopeArray","querySelectorAll","_typeof","eventConfig","attachListener","generateEventName","_this3","_eventConfig$rootData","addEventListener","recordEvent","computedValue","xPath","timeSincePageLoad","start","entries","_ref","_ref2","_slicedToArray","push","head","$metaEl","GA4","_EventTracker2","_this4","_possibleConstructorReturn","Error","_options$prefix","_options$initAll","initAll","_assertThisInitialized","_callSuper","gTagId","dataLayer","cookies","isPolicyAccepted","enableTracking","disableTracking","_inherits","_this5","ga4Data","_ref3","_ref4","pushToDataLayer","trackingEnabled","trackingCodeAdded","getTime","firstScript","getElementsByTagName","script","createElement","async","src","insertBefore","getTnaMetaTags","gtag","allow_google_signals","helpers"],"sourceRoot":""}
@@ -6,6 +6,7 @@ import {
6
6
  } from "./lib/analytics-helpers.mjs";
7
7
  import BreadcrumbAnalytics from "./components/breadcrumbs/analytics.js";
8
8
  import CheckboxesAnalytics from "./components/checkboxes/analytics.js";
9
+ import FooterAnalytics from "./components/footer/analytics.js";
9
10
  import GlobalHeaderAnalytics from "./components/global-header/analytics.js";
10
11
  import HeaderAnalytics from "./components/header/analytics.js";
11
12
  import HeroAnalytics from "./components/hero/analytics.js";
@@ -18,6 +19,7 @@ import TextareaAnalytics from "./components/textarea/analytics.js";
18
19
  const componentAnalytics = [
19
20
  ...BreadcrumbAnalytics,
20
21
  ...CheckboxesAnalytics,
22
+ ...FooterAnalytics,
21
23
  ...GlobalHeaderAnalytics,
22
24
  ...HeaderAnalytics,
23
25
  ...HeroAnalytics,
@@ -38,7 +40,19 @@ class EventTracker {
38
40
  /** @protected */
39
41
  start = new Date();
40
42
 
41
- constructor() {
43
+ /** @protected */
44
+ prefix = "tna";
45
+
46
+ constructor(prefix) {
47
+ if (prefix) {
48
+ this.prefix = prefix;
49
+ }
50
+ }
51
+
52
+ /**
53
+ * Initialise all TNA Frontend component analytics.
54
+ */
55
+ initAll() {
42
56
  componentAnalytics.forEach((componentConfig) => {
43
57
  this.addListener(
44
58
  componentConfig.scope,
@@ -65,31 +79,33 @@ class EventTracker {
65
79
  return;
66
80
  }
67
81
  scopeArray.forEach(($scope) => {
68
- events.forEach((componentTracking) => {
69
- if (!componentTracking.on) {
82
+ events.forEach((eventConfig) => {
83
+ if (!eventConfig.on) {
70
84
  return;
71
85
  }
72
- if (componentTracking.targetElement) {
86
+ if (eventConfig.targetElement) {
73
87
  Array.from(
74
- $scope.querySelectorAll(componentTracking.targetElement),
75
- ).forEach(($el) =>
88
+ $scope.querySelectorAll(eventConfig.targetElement),
89
+ ).forEach(($el, index) =>
76
90
  this.attachListener(
77
91
  $el,
78
- componentTracking.on,
79
92
  $scope,
80
- this.generateEventName(areaName, componentTracking),
81
- componentTracking.data,
82
- componentTracking.targetElement,
93
+ this.generateEventName(areaName, eventConfig),
94
+ eventConfig,
95
+ scope,
96
+ areaName,
97
+ index + 1,
83
98
  ),
84
99
  );
85
100
  } else {
86
101
  this.attachListener(
87
102
  $scope,
88
- componentTracking.on,
89
103
  $scope,
90
- this.generateEventName(areaName, componentTracking),
91
- componentTracking.data,
92
- componentTracking.targetElement,
104
+ this.generateEventName(areaName, eventConfig),
105
+ eventConfig,
106
+ scope,
107
+ areaName,
108
+ 1,
93
109
  );
94
110
  }
95
111
  });
@@ -97,56 +113,63 @@ class EventTracker {
97
113
  }
98
114
 
99
115
  /** @protected */
100
- generateEventName(areaName, componentTracking) {
101
- return `${areaName}.${componentTracking.eventName || componentTracking.on}`;
116
+ generateEventName(areaName, eventConfig) {
117
+ return `${this.prefix}.${areaName}.${eventConfig.eventName || eventConfig.on}`;
102
118
  }
103
119
 
104
120
  /** @protected */
105
- attachListener(
106
- $el,
107
- eventTrigger,
108
- $scope,
109
- eventName,
110
- eventDataInit,
111
- targetElement,
112
- ) {
113
- if (!$el) {
114
- return;
115
- }
116
- $el.addEventListener(eventTrigger, (event) =>
117
- this.recordEvent(eventName, {
118
- ...eventDataInit,
119
- value:
120
- typeof eventDataInit.value === "function"
121
- ? eventDataInit.value.call(this, $el, $scope, event)
122
- : eventDataInit.value || null,
123
- state:
124
- typeof eventDataInit.state === "function"
125
- ? eventDataInit.state.call(this, $el, $scope, event)
126
- : eventDataInit.state || null,
127
- group:
128
- typeof eventDataInit.group === "function"
129
- ? eventDataInit.group.call(this, $el, $scope, event)
130
- : eventDataInit.group || null,
131
- scope: getXPathTo($scope),
132
- targetElement: targetElement,
133
- timestamp: new Date().toISOString(),
134
- uri: window.location.pathname,
135
- timeSincePageLoad: new Date() - this.start,
136
- }),
121
+ attachListener($el, $scope, eventName, eventConfig, scope, areaName, index) {
122
+ const { on, data, targetElement, rootData = {} } = eventConfig;
123
+ $el.addEventListener(on, (event) =>
124
+ this.recordEvent(
125
+ eventName,
126
+ {
127
+ ...data,
128
+ value: this.computedValue(data.value, $el, $scope, event, index),
129
+ state: this.computedValue(data.state, $el, $scope, event, index),
130
+ group: this.computedValue(data.group, $el, $scope, event, index),
131
+ xPath: getXPathTo($scope),
132
+ targetElement: targetElement,
133
+ // timestamp: new Date().toISOString(),
134
+ // uri: window.location.pathname,
135
+ timeSincePageLoad: new Date() - this.start,
136
+ index,
137
+ scope,
138
+ areaName,
139
+ },
140
+ Object.fromEntries(
141
+ Object.entries(rootData).map(([key, value]) => [
142
+ key,
143
+ this.computedValue(value, $el, $scope, event, index),
144
+ ]),
145
+ ),
146
+ ),
137
147
  );
138
148
  }
139
149
 
140
150
  /** @protected */
141
- recordEvent(eventName, data) {
142
- this.events.push({ event: eventName, "tna.data": data });
151
+ computedValue(value, $el, $scope, event, index) {
152
+ return typeof value === "function"
153
+ ? value.call(this, $el, $scope, event, index)
154
+ : value || null;
155
+ }
156
+
157
+ /** @protected */
158
+ recordEvent(eventName, data, rootData = {}) {
159
+ this.events.push({
160
+ event: eventName,
161
+ [`${this.prefix}.event`]: data,
162
+ ...rootData,
163
+ });
143
164
  }
144
165
 
145
166
  /** @protected */
146
167
  getTnaMetaTags() {
147
168
  return Object.fromEntries(
148
169
  Array.from(
149
- document.head.querySelectorAll("meta[name^='tna.'][content]"),
170
+ document.head.querySelectorAll(
171
+ `meta[name^='${this.prefix}.'][content]`,
172
+ ),
150
173
  ).map(($metaEl) => [
151
174
  $metaEl.getAttribute("name"),
152
175
  $metaEl.getAttribute("content"),
@@ -167,8 +190,16 @@ class GA4 extends EventTracker {
167
190
  trackingEnabled = false;
168
191
  gTagId;
169
192
 
170
- constructor(id) {
171
- super();
193
+ constructor(id = null, options = {}) {
194
+ if (GA4._instance) {
195
+ return GA4._instance;
196
+ }
197
+ if (!id) {
198
+ throw Error("ID was not specified");
199
+ }
200
+ const { prefix = null, initAll = true } = options;
201
+ super(prefix);
202
+ GA4._instance = this;
172
203
  this.gTagId = id;
173
204
  window.dataLayer = window.dataLayer || [];
174
205
  if (this.cookies.isPolicyAccepted("usage")) {
@@ -183,11 +214,23 @@ class GA4 extends EventTracker {
183
214
  }
184
215
  }
185
216
  });
217
+ if (initAll) {
218
+ this.initAll();
219
+ }
186
220
  }
187
221
 
188
222
  /** @protected */
189
- recordEvent(eventName, data) {
190
- const ga4Data = { event: eventName, "tna.event": data };
223
+ recordEvent(eventName, data, rootData = {}) {
224
+ const ga4Data = {
225
+ event: eventName,
226
+ ...Object.fromEntries(
227
+ Object.entries(data).map(([key, value]) => [
228
+ `${this.prefix}.event.${key}`,
229
+ value,
230
+ ]),
231
+ ),
232
+ ...rootData,
233
+ };
191
234
  this.pushToDataLayer(ga4Data);
192
235
  }
193
236