PageSourceSearch

https://ancientegyptmagazine.com/about-us

html ancientegyptmagazine.com collected 2026-09-24 21:51:13 UTC 38,345 bytes, 666 lines download raw bytes

1<!DOCTYPE html><html lang="en-gb"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><title>About us - Ancient Egypt Magazine</title><meta name="description" content="The World&#x27;s leading Egyptology magazine"><meta name="generator" content="Publii Open-Source CMS for Static Site">
1<script type="gdpr-blocker/analytics">(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
2						new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
3						j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
4						'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
5					})(window,document,'script','dataLayer','G-66K2THJXL8');</script>
5<link rel="canonical" href="https://ancientegyptmagazine.com/about-us.html"><meta property="og:title" content="About us"><meta property="og:image" content="https://ancientegyptmagazine.com/media/website/ae-logo-2.png"><meta property="og:image:width" content="217"><meta property="og:image:height" content="80"><meta property="og:site_name" content="Ancient Egypt Magazine"><meta property="og:description" content="The World&#x27;s leading Egyptology magazine"><meta property="og:url" content="https://ancientegyptmagazine.com/about-us.html"><meta property="og:type" content="article"><meta name="twitter:card" content="summary"><meta name="twitter:site" content="@AncientEgyptMag"><meta name="twitter:title" content="About us"><meta name="twitter:description" content="The World&#x27;s leading Egyptology magazine"><meta name="twitter:image" content="https://ancientegyptmagazine.com/media/website/ae-logo-2.png"><link rel="alternate" type="application/atom+xml" href="https://ancientegyptmagazine.com/feed.xml" title="Ancient Egypt Magazine - RSS"><link rel="alternate" type="application/json" href="https://ancientegyptmagazine.com/feed.json" title="Ancient Egypt Magazine - JSON"><link rel="shortcut icon" href="https://ancientegyptmagazine.com/media/website/favicon.ico" type="image/x-icon"><link rel="preload" href="https://ancientegyptmagazine.com/assets/dynamic/fonts/lora/lora.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="https://ancientegyptmagazine.com/assets/dynamic/fonts/lora/lora-italic.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="https://ancientegyptmagazine.com/assets/dynamic/fonts/bitter/bitter.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="https://ancientegyptmagazine.com/assets/dynamic/fonts/bitter/bitter-italic.woff2" as="font" type="font/woff2" crossorigin><link rel="stylesheet" href="https://ancientegyptmagazine.com/assets/css/style.css?v&#x3D;4d0e1de44a6a55499f5b1a1eba5f09df">
5<script type="application/ld+json">{"@context":"http://schema.org","@type":"Article","mainEntityOfPage":{"@type":"WebPage","@id":"https://ancientegyptmagazine.com/about-us.html"},"headline":"About us","datePublished":"2022-09-29T17:53+01:00","dateModified":"2025-05-06T15:05+01:00","image":{"@type":"ImageObject","url":"https://ancientegyptmagazine.com/media/website/ae-logo-2.png","height":80,"width":217},"description":"The World's leading Egyptology magazine","author":{"@type":"Person","name":"Current Publishing","url":"https://ancientegyptmagazine.com/authors/current-publishing/"},"publisher":{"@type":"Organization","name":"Current Publishing","logo":{"@type":"ImageObject","url":"https://ancientegyptmagazine.com/media/website/ae-logo-2.png","height":80,"width":217}}}</script>
5<noscript><style>img[loading] {
6                    opacity: 1;
7                }</style></noscript>
7<script type="text/javascript">(function() {
8    window.sib = {
9        equeue: [],
10        client_key: "g7mp6v0g8568slg5u0mae"
11    };
12    /* OPTIONAL: email for identify request*/
13    // window.sib.email_id = '[email protected]';
14    window.sendinblue = {};
15    for (var j = ['track', 'identify', 'trackLink', 'page'], i = 0; i < j.length; i++) {
16    (function(k) {
17        window.sendinblue[k] = function() {
18            var arg = Array.prototype.slice.call(arguments);
19            (window.sib[k] || function() {
20                    var t = {};
21                    t[k] = arg;
22                    window.sib.equeue.push(t);
23                })(arg[0], arg[1], arg[2], arg[3]);
24            };
25        })(j[i]);
26    }
27    var n = document.createElement("script"),
28        i = document.getElementsByTagName("script")[0];
29    n.type = "text/javascript", n.id = "sendinblue-js", n.async = !0, n.src = "https://sibautomation.com/sa.js?key=" + window.sib.client_key, i.parentNode.insertBefore(n, i), window.sendinblue.page();
30})();</script>
30<script>
vendor: 398 bytes, lines 30-38
30!function(f,b,e,v,n,t,s)
31{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
32n.callMethod.apply(n,arguments):n.queue.push(arguments)};
33if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
34n.queue=[];t=b.createElement(e);t.async=!0;
35t.src=v;s=b.getElementsByTagName(e)[0];
36s.parentNode.insertBefore(t,s)}(window, document,'script',
37'https://connect.facebook.net/en_US/fbevents.js');
38fbq('init', '
38566830136242437
vendor: 29 bytes, lines 38-39
38');
39fbq('track', 'PageView');
39</script>
39<noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=566830136242437&ev=PageView&noscript=1"></noscript>
39<script>
vendor: 398 bytes, lines 39-47
39!function(f,b,e,v,n,t,s)
40{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
41n.callMethod.apply(n,arguments):n.queue.push(arguments)};
42if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
43n.queue=[];t=b.createElement(e);t.async=!0;
44t.src=v;s=b.getElementsByTagName(e)[0];
45s.parentNode.insertBefore(t,s)}(window, document,'script',
46'https://connect.facebook.net/en_US/fbevents.js');
47fbq('init', '
47483149976725689
vendor: 29 bytes, lines 47-48
47');
48fbq('track', 'PageView');
48</script>
48<noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=483149976725689&ev=PageView&noscript=1"></noscript></head><body class="post-template"><header class="header header--separator" id="js-header"><div class="wrapper"><a class="logo" href="https://ancientegyptmagazine.com/"><img src="https://ancientegyptmagazine.com/media/website/ae-logo-2.png" alt="Ancient Egypt Magazine" width="217" height="80"></a><nav class="navbar js-navbar"><button class="navbar__toggle js-toggle" aria-label="Menu" aria-haspopup="true" aria-expanded="false"><span class="navbar__toggle-box"><span class="navbar__toggle-inner">Menu</span></span></button><ul class="navbar__menu"><li class="active"><a href="https://ancientegyptmagazine.com/about-us.html" target="_self">About us</a></li><li><a href="https://ancientegyptmagazine.com/tags/feature/" target="_self">Features</a></li><li><a href="https://ancientegyptmagazine.com/tags/issues/" target="_self">Recent Issues</a></li><li><a href="https://ancientegyptmagazine.com/back-issues.html" target="_self">Complete Index</a></li><li><a href="https://ancientegyptmagazine.com/egyptology-societies.html" target="_self">Societies</a></li><li class="btn-subscribe"><a href="https://ancientegyptmagazine.com/subscribe.html" target="_self">Subscribe</a></li></ul></nav></div></header><main class="main post"><div class="wrapper"><div class="content"><article><header class="content__inner content__header content__header--full"><h1 class="content__title">About us</h1></header><div class="content__inner content__entry"><p class="p1"><em>Ancient Egypt</em> is the world's leading Egyptology magazine, exploring the history, people and culture of the Nile Valley. Now in a larger format with a fresh new design, <em>AE</em> brings you the latest news and discoveries, and feature articles covering more than 5000 years of Egyptian history.</p><p class="p1"><span class="s1">Published bimonthly, this glossy well-presented magazine brings readers up to date with the latest news, discoveries, excavations and research into the history of Egypt from Predynastic times through to the modern era.</span></p><figure class="post__image post__image--wide"><span class="s1"><img loading="lazy" src="https://ancientegyptmagazine.com/media/posts/11/ba-bird-2.jpg" alt="" width="1800" height="511" sizes="(max-width: 1200px) 100vw, 1200px" srcset="https://ancientegyptmagazine.com/media/posts/11/responsive/ba-bird-2-xs.webp 300w, https://ancientegyptmagazine.com/media/posts/11/responsive/ba-bird-2-sm.webp 480w, https://ancientegyptmagazine.com/media/posts/11/responsive/ba-bird-2-md.webp 768w, https://ancientegyptmagazine.com/media/posts/11/responsive/ba-bird-2-xl.webp 1200w, https://ancientegyptmagazine.com/media/posts/11/responsive/ba-bird-2-xxl.webp 1600w, https://ancientegyptmagazine.com/media/posts/11/responsive/ba-bird-2-xxxl.webp 2560w"></span></figure>There are in-depth articles on the building of the pyramids, the lives of the great pharaohs, brewing and agriculture, health and disease, gods and goddesses, tombs and temples and ancient Egyptian art and culture. Find out about great Egyptologists and explorers, and ancient priests and peasants; discover more about Egyptian technology and the latest DNA and scanning techniques. How did Tutankhamun die? How did hieroglyphic writing work? What did ancient Egyptians eat for breakfast?<p></p><p class="p1"><span class="s1">All this plus guides to museum collections, reviews of the latest books and major worldwide conferences and exhibitions.</span></p><h2 class="p1"><span class="s1">Editorial team</span></h2><h4 class="p1"><span class="s1">J. Peter Phillips, Editor</span></h4><p class="p1"><span class="s1">Peter has written and published books on ancient Egypt. He lectures on the subject to Egyptology societies in the UK and abroad, and is Chair of the Manchester Ancient Egypt Society. He is a retired IT professional and has a particular interest in ancient Egyptian architecture.</span></p><h4 class="p1"><span class="s1">Sarah Griffiths, Deputy Editor</span></h4><p class="p1"><span class="s1">Sarah is a writer, teacher and broadcaster with over 18 years' experience with the BBC. She holds the Certificate in Egyptology from the University of Manchester, where she also studied for the BSc Zoology and Postgraduate Certificate in Education, and was awarded a Master of Science in Animal Breeding from Edinburgh University.</span></p><h4 class="p1"><span class="s1">Professor Rosalie David OBE, Consultant Editor</span></h4><p class="p1"><span class="s1">
48Professor Rosalie David </span><span class="s1">has achieved world renown for her pioneering work in investigating mummies using non-destructive techniques. A former Keeper of Egyptology at the Manchester Museum, Rosalie became Director of the KNH Centre for Biological and Forensic Studies in Egyptology at The University of Manchester. Her research work into the Schistosomiasis disease has been recognised with a prestigious award from the Anglo-French Medical Society and she was awarded an OBE in recognition of her services in Egyptology.</span></p><h4>Professor Aidan Dodson, FSA, Consultant Editor</h4><p>Aidan is Honorary Professor of Egyptology at the University of Bristol, where he has taught since 1996, and was elected a Fellow of the Society of Antiquaries of London in 2003. He studied archaeology, museology and Egyptology at the Universities of Durham, Liverpool and Cambridge, gaining his PhD from the latter in 1995. Also an historian of 19th/20th century modern navies, Aidan is the author of some 30 books and over 400 articles and reviews.</p></div></article></div></div></main><footer class="footer s-t-2 s-b-2"><div class="wrapper footer__inner"><a class="footer__logo" href="https://ancientegyptmagazine.com/"><img src="https://ancientegyptmagazine.com/media/website/ae-logo-2.png" alt="Ancient Egypt Magazine"></a><div class="footer__social"><a href="https://www.facebook.com/AncientEgyptMagazine/" aria-label="Facebook" target="_blank"><svg><use xlink:href="https://ancientegyptmagazine.com/assets/svg/svg-map.svg#facebook"/></svg> </a><a href="https://twitter.com/AncientEgyptMag/" aria-label="Twitter" target="_blank"><svg><use xlink:href="https://ancientegyptmagazine.com/assets/svg/svg-map.svg#twitter"/></svg></a></div><ul class="footer__nav"><li><a href="https://currentpublishing.com" target="_self">Current Publishing</a></li><li><a href="https://ancientegyptmagazine.com/subscribe.html" target="_self">Subscribe</a></li><li><a href="https://ancientegyptmagazine.com/contact-us.html" target="_self">Contact Us</a></li><li><a href="https://ancientegyptmagazine.com/privacy-policy.html" target="_self">Privacy Policy</a></li></ul><div class="footer__copy">© 2026 Current Publishing Ltd<br>Registered Office: Office 120, 295 Chiswick High Road, London W4 4HH</div></div><button onclick="backToTopFunction()" id="backToTop" class="footer__bttop" aria-label="Back to top" title="Back to top"><svg><use xlink:href="https://ancientegyptmagazine.com/assets/svg/svg-map.svg#toparrow"/></svg></button></footer>
48<script defer="defer" src="https://ancientegyptmagazine.com/assets/js/scripts.min.js?v&#x3D;a2f166b35e58753d38a89c4cb3fb61bd"></script>
48<script>window.publiiThemeMenuConfig = {    
49      mobileMenuMode: 'sidebar',
50      animationSpeed: 300,
51      submenuWidth: 'auto',
52      doubleClickTime: 500,
53      mobileMenuExpandableSubmenus: true, 
54      relatedContainerForOverlayMenuSelector: '.navbar',
55   };</script>
55<script>var images = document.querySelectorAll('img[loading]');
56
57      for (var i = 0; i < images.length; i++) {
58         if (images[i].complete) {
59               images[i].classList.add('is-loaded');
60         } else {
61               images[i].addEventListener('load', function () {
62                  this.classList.add('is-loaded');
63               }, false);
64         }
65      }</script>
65<div class="pcb" data-behaviour="link" data-behaviour-link="#cookie-settings" data-revision="1" data-config-ttl="90" data-debug-mode="false"><div role="dialog" aria-modal="true" aria-hidden="true" aria-labelledby="pcb-title" aria-describedby="pcb-txt" class="pcb__banner pcb__banner--left"><div class="pcb__inner"><div id="pcb-title" role="heading" aria-level="2" class="pcb__title">This website uses cookies</div><div id="pcb-txt" class="pcb__txt">Select which cookies to opt-in to via the checkboxes below; our website uses cookies to examine site traffic and user activity while on our site, for marketing, and to provide social media functionality.</div><div class="pcb__buttons"><button type="button" class="pcb__btn pcb__btn--link pcb__btn--configure" aria-haspopup="dialog">Manage preferences</button> <button type="button" class="pcb__btn pcb__btn--solid pcb__btn--accept">Save</button></div></div></div><div class="pcb__popup" role="dialog" aria-modal="true" aria-hidden="true" aria-labelledby="pcb-popup-title"><div class="pcb__popup__wrapper"><div class="pcb__inner pcb__popup__inner"><div class="pcb__popup__heading"><div id="pcb-popup-title" role="heading" aria-level="2" class="pcb__title">Cookie settings</div><button class="pcb__popup__close" aria-label="Close"></button></div><div class="pcb__popup__content"><div class="pcb__txt pcb__popup__txt">We use cookies to enhance your browsing experience, serve personalized ads or content, and analyze our traffic. By clicking "Accept All", you consent to our use of cookies.</div><ul class="pcb__groups"><li class="pcb__group"><details><summary class="pcb__group__title no-desc">Required</summary></details><div class="pcb__popup__switch is-checked"><input type="checkbox" data-group-name="" id="pcb-group-0" checked="checked"> <label for="pcb-group-0">Required</label></div></li><li class="pcb__group"><details><summary class="pcb__group__title no-desc">Functionality</summary></details><div class="pcb__popup__switch"><input type="checkbox" data-group-name="functions" id="functions-cookies"> <label for="functions-cookies">Functionality</label></div></li><li class="pcb__group"><details><summary class="pcb__group__title no-desc">Analytical</summary></details><div class="pcb__popup__switch"><input type="checkbox" data-group-name="analytics" id="analytics-cookies"> <label for="analytics-cookies">Analytical</label></div></li><li class="pcb__group"><details><summary class="pcb__group__title no-desc">Marketing</summary></details><div class="pcb__popup__switch"><input type="checkbox" data-group-name="marketing" id="marketing-cookies"> <label for="marketing-cookies">Marketing</label></div></li></ul></div><div class="pcb__buttons pcb__popup__buttons"><button type="button" class="pcb__btn pcb__btn--solid pcb__btn--accept">Accept all</button> <button type="button" class="pcb__btn pcb__btn--reject">Reject all</button> <button type="button" class="pcb__btn pcb__btn--save">Save settings</button></div></div></div></div><div class="pcb__overlay" aria-hidden="true"></div></div>
65<script>(function(win) {
66    if (!document.querySelector('.pcb')) {
67        return;
68    }
69
70    var cbConfig = {
71        behaviour: document.querySelector('.pcb').getAttribute('data-behaviour'),
72        behaviourLink: document.querySelector('.pcb').getAttribute('data-behaviour-link'),
73        revision: document.querySelector('.pcb').getAttribute('data-revision'),
74        configTTL: parseInt(document.querySelector('.pcb').getAttribute('data-config-ttl'), 10),
75        debugMode: document.querySelector('.pcb').getAttribute('data-debug-mode') === 'true',
76        initialState: null,
77        initialLsState: null,
78        previouslyAccepted: []
79    };
80
81    var cbUI = {
82        wrapper: document.querySelector('.pcb'),
83        banner: {
84            element: null,
85            btnAccept: null,
86            btnReject: null,
87            btnConfigure: null
88        },
89        popup: {
90            element: null,
91            btnClose: null,
92            btnSave: null,
93            btnAccept: null,
94            btnReject: null,
95            checkboxes: null,
96        },
97        overlay: null,
98        badge: null,
99        blockedScripts: document.querySelectorAll('script[type^="gdpr-blocker/"]'),
100        triggerLinks: cbConfig.behaviourLink ? document.querySelectorAll('a[href*="' + cbConfig.behaviourLink + '"]') : null
101    };
102
103    function initUI () {
104        // setup banner elements
105        cbUI.banner.element = cbUI.wrapper.querySelector('.pcb__banner');
106        cbUI.banner.btnAccept = cbUI.banner.element.querySelector('.pcb__btn--accept');
107        cbUI.banner.btnReject = cbUI.banner.element.querySelector('.pcb__btn--reject');
108        cbUI.banner.btnConfigure = cbUI.banner.element.querySelector('.pcb__btn--configure');
109
110        // setup popup elements
111        if (cbUI.wrapper.querySelector('.pcb__popup')) {
112            cbUI.popup.element = cbUI.wrapper.querySelector('.pcb__popup');
113            cbUI.popup.btnClose = cbUI.wrapper.querySelector('.pcb__popup__close');
114            cbUI.popup.btnSave = cbUI.popup.element.querySelector('.pcb__btn--save');
115            cbUI.popup.btnAccept = cbUI.popup.element.querySelector('.pcb__btn--accept');
116            cbUI.popup.btnReject = cbUI.popup.element.querySelector('.pcb__btn--reject');
117            cbUI.popup.checkboxes = cbUI.popup.element.querySelector('input[type="checkbox"]');
118            // setup overlay
119            cbUI.overlay = cbUI.wrapper.querySelector('.pcb__overlay');
120        }
121
122        cbUI.badge = cbUI.wrapper.querySelector('.pcb__badge');
123
124        if (cbConfig.behaviour.indexOf('link') > -1) {
125            for (var i = 0; i < cbUI.triggerLinks.length; i++) {
126                cbUI.triggerLinks[i].addEventListener('click', function(e) {
127                    e.preventDefault();
128                    showBannerOrPopup();
129                });
130            }
131        }
132    }
133
134    function initState () {
135        var lsKeyName = getConfigName();
136        var currentConfig = localStorage.getItem(lsKeyName);
137        var configIsFresh = checkIfConfigIsFresh();
138
139        if (!configIsFresh || currentConfig === null) {
140            if (cbConfig.debugMode) {
141                console.log('🍪 Config not found, or configuration expired');
142            }
143
144            if (window.publiiCBGCM) {
145                gtag('consent', 'default', {
146                    'ad_storage': window.publiiCBGCM.defaultState.ad_storage ? 'granted' : 'denied',
147                    'ad_personalization': window.publiiCBGCM.defaultState.ad_personalization ? 'granted' : 'denied',
148                    'ad_user_data': window.publiiCBGCM.defaultState.ad_user_data ? 'granted' : 'denied',
149                    'analytics_storage': window.publiiCBGCM.defaultState.analytics_storage ? 'granted' : 'denied',
150                    'personalization_storage': window.publiiCBGCM.defaultState.personalization_storage ? 'granted' : 'denied',
151                    'functionality_storage': window.publiiCBGCM.defaultState.functionality_storage ? 'granted' : 'denied',
152                    'security_storage': window.publiiCBGCM.defaultState.security_storage ? 'granted' : 'denied'
153                });  
154                
155                if (cbConfig.debugMode) {
156                    console.log('🍪 GCMv2 DEFAULT STATE: ' + JSON.stringify({
157                        'ad_storage': window.publiiCBGCM.defaultState.ad_storage ? 'granted' : 'denied',
158                        'ad_personalization': window.publiiCBGCM.defaultState.ad_personalization ? 'granted' : 'denied',
159                        'ad_user_data': window.publiiCBGCM.defaultState.ad_user_data ? 'granted' : 'denied',
160                        'analytics_storage': window.publiiCBGCM.defaultState.analytics_storage ? 'granted' : 'denied',
161                        'personalization_storage': window.publiiCBGCM.defaultState.personalization_storage ? 'granted' : 'denied',
162                        'functionality_storage': window.publiiCBGCM.defaultState.functionality_storage ? 'granted' : 'denied',
163                        'security_storage': window.publiiCBGCM.defaultState.security_storage ? 'granted' : 'denied'
164                    }));
165                }
166            }
167
168            showBanner();
169        } else if (typeof currentConfig === 'string') {
170            if (cbConfig.debugMode) {
171                console.log('🍪 Config founded');
172            }
173
174            cbConfig.initialLsState = currentConfig.split(',');
175
176            if (window.publiiCBGCM) {
177                gtag('consent', 'default', {
178                    'ad_storage': getDefaultConsentState(currentConfig, 'ad_storage'),
179                    'ad_personalization': getDefaultConsentState(currentConfig, 'ad_personalization'),
180                    'ad_user_data': getDefaultConsentState(currentConfig, 'ad_user_data'),
181                    'analytics_storage': getDefaultConsentState(currentConfig, 'analytics_storage'),
182                    'personalization_storage': getDefaultConsentState(currentConfig, 'personalization_storage'),
183                    'functionality_storage': getDefaultConsentState(currentConfig, 'functionality_storage'),
184                    'security_storage': getDefaultConsentState(currentConfig, 'security_storage')
185                });
186                
187                if (cbConfig.debugMode) {
188                    console.log('🍪 GCMv2 DEFAULT STATE: ' + JSON.stringify({
189                        'ad_storage': getDefaultConsentState(currentConfig, 'ad_storage'),
190                        'ad_personalization': getDefaultConsentState(currentConfig, 'ad_personalization'),
191                        'ad_user_data': getDefaultConsentState(currentConfig, 'ad_user_data'),
192                        'analytics_storage': getDefaultConsentState(currentConfig, 'analytics_storage'),
193                        'personalization_storage': getDefaultConsentState(currentConfig, 'personalization_storage'),
194                        'functionality_storage': getDefaultConsentState(currentConfig, 'functionality_storage'),
195                        'security_storage': getDefaultConsentState(currentConfig, 'security_storage')
196                    }));
197                }
198            }
199
200            showBadge();
201
202            if (cbUI.popup.element) {
203                var allowedGroups = currentConfig.split(',');
204                var checkedCheckboxes = cbUI.popup.element.querySelectorAll('input[type="checkbox"]:checked');
205
206                for (var j = 0; j < checkedCheckboxes.length; j++) {
207                    var name = checkedCheckboxes[j].getAttribute('data-group-name');
208
209                    if (name && name !== '-' && allowedGroups.indexOf(name) === -1) {
210                        checkedCheckboxes[j].checked = false;
211                    }
212                }
213
214                for (var i = 0; i < allowedGroups.length; i++) {
215                    var checkbox = cbUI.popup.element.querySelector('input[type="checkbox"][data-group-name="' + allowedGroups[i] + '"]');
216
217                    if (checkbox) {
218                        checkbox.checked = true;
219                    }
220
221                    allowCookieGroup(allowedGroups[i]);
222                }
223            }
224        }
225
226        setTimeout(function () {
227            cbConfig.initialState = getInitialStateOfConsents();
228        }, 0);
229    }
230
231    function checkIfConfigIsFresh () {
232        var lastConfigSave = localStorage.getItem('publii-gdpr-cookies-config-save-date');
233
234        if (lastConfigSave === null) {
235            return false;
236        }
237
238        lastConfigSave = parseInt(lastConfigSave, 10);
239
240        if (lastConfigSave === 0) {
241            return true;
242        }
243
244        if (+new Date() - lastConfigSave < cbConfig.configTTL * 24 * 60 * 60 * 1000) {
245            return true;
246        }
247
248        return false;
249    }
250
251    function getDefaultConsentState (currentConfig, consentGroup) {
252        let configGroups = currentConfig.split(',');
253
254        for (let i = 0; i < configGroups.length; i++) {
255            let groupName = configGroups[i];
256            let group = window.publiiCBGCM.groups.find(group => group.cookieGroup === groupName);
257
258            if (group && group[consentGroup]) {
259                return 'granted';
260            }
261        }  
262        
263        if (window.publiiCBGCM.defaultState[consentGroup]) {
264            return 'granted'; 
265        }
266        
267        return 'denied';
268    }
269
270    function initBannerEvents () {
271        cbUI.banner.btnAccept.addEventListener('click', function (e) {
272            e.preventDefault();
273            acceptAllCookies('banner');
274            showBadge();
275        }, false);
276
277        if (cbUI.banner.btnReject) {
278            cbUI.banner.btnReject.addEventListener('click', function (e) {
279                e.preventDefault();
280                rejectAllCookies();
281                showBadge();
282            }, false);
283        }
284
285        if (cbUI.banner.btnConfigure) {
286            cbUI.banner.btnConfigure.addEventListener('click', function (e) {
287                e.preventDefault();
288                hideBanner();
289                showAdvancedPopup();
290                showBadge();
291            }, false);
292        }
293    }
294
295    function initPopupEvents () {
296        if (!cbUI.popup.element) {
297            return;
298        }
299
300        cbUI.overlay.addEventListener('click', function (e) {
301            hideAdvancedPopup();
302        }, false);
303
304        cbUI.popup.element.addEventListener('click', function (e) {
305            e.stopPropagation();
306        }, false);
307
308        cbUI.popup.btnAccept.addEventListener('click', function (e) {
309            e.preventDefault();
310            acceptAllCookies('popup');
311        }, false);
312
313        cbUI.popup.btnReject.addEventListener('click', function (e) {
314            e.preventDefault();
315            rejectAllCookies();
316        }, false);
317
318        cbUI.popup.btnSave.addEventListener('click', function (e) {
319            e.preventDefault();
320            saveConfiguration();
321        }, false);
322
323        cbUI.popup.btnClose.addEventListener('click', function (e) {
324            e.preventDefault();
325            hideAdvancedPopup();
326        }, false);
327    }
328
329    function initBadgeEvents () {
330        if (!cbUI.badge) {
331            return;
332        }
333
334        cbUI.badge.addEventListener('click', function (e) {
335            showBannerOrPopup();
336        }, false);
337    }
338
339    initUI();
340    initState();
341    initBannerEvents();
342    initPopupEvents();
343    initBadgeEvents();
344
345    /**
346     * API
347     */
348    function addScript (src, inline) {
349        var newScript = document.createElement('script');
350
351        if (src) {
352            newScript.setAttribute('src', src);
353        }
354
355        if (inline) {
356            newScript.text = inline;
357        }
358
359        document.body.appendChild(newScript);
360    }
361
362    function allowCookieGroup (allowedGroup) {
363        var scripts = document.querySelectorAll('script[type="gdpr-blocker/' + allowedGroup + '"]');
364        cbConfig.previouslyAccepted.push(allowedGroup);
365    
366        for (var j = 0; j < scripts.length; j++) {
367            addScript(scripts[j].src, scripts[j].text);
368        }
369
370        var groupEvent = new Event('publii-cookie-banner-unblock-' + allowedGroup);
371        document.body.dispatchEvent(groupEvent);
372        unlockEmbeds(allowedGroup);
373
374        if (cbConfig.debugMode) {
375            console.log('🍪 Allowed group: ' + allowedGroup);
376        }
377
378        if (window.publiiCBGCM && (!cbConfig.initialLsState || cbConfig.initialLsState.indexOf(allowedGroup) === -1)) {
379            let consentResult = {};
380            let group = window.publiiCBGCM.groups.find(group => group.cookieGroup === allowedGroup);
381
382            if (group) {
383                let foundSomeConsents = false;
384
385                Object.keys(group).forEach(key => {
386                    if (key !== 'cookieGroup' && group[key] === true) {
387                        consentResult[key] = 'granted';
388                        foundSomeConsents = true;
389                    }
390                });
391
392                if (foundSomeConsents) {
393                    gtag('consent', 'update', consentResult);   
394
395                    if (cbConfig.debugMode) {
396                        console.log('🍪 GCMv2 UPDATE: ' + JSON.stringify(consentResult));
397                    }
398                }
399            }
400        }
401    }
402
403    function showBannerOrPopup () {
404        if (cbUI.popup.element) {
405            showAdvancedPopup();
406        } else {
407            showBanner();
408        }
409    }
410
411    function showAdvancedPopup () {
412        cbUI.popup.element.classList.add('is-visible');
413        cbUI.overlay.classList.add('is-visible');
414        cbUI.popup.element.setAttribute('aria-hidden', 'false');
415        cbUI.overlay.setAttribute('aria-hidden', 'false');
416    }
417
418    function hideAdvancedPopup () {
419        cbUI.popup.element.classList.remove('is-visible');
420        cbUI.overlay.classList.remove('is-visible');
421        cbUI.popup.element.setAttribute('aria-hidden', 'true');
422        cbUI.overlay.setAttribute('aria-hidden', 'true');
423    }
424
425    function showBanner () {
426        cbUI.banner.element.classList.add('is-visible');
427        cbUI.banner.element.setAttribute('aria-hidden', 'false');
428    }
429
430    function hideBanner () {
431        cbUI.banner.element.classList.remove('is-visible');
432        cbUI.banner.element.setAttribute('aria-hidden', 'true');
433    }
434
435    function showBadge () {
436        if (!cbUI.badge) {
437            return;
438        }
439
440        cbUI.badge.classList.add('is-visible');
441        cbUI.badge.setAttribute('aria-hidden', 'false');
442    }
443
444    function getConfigName () {
445        var lsKeyName = 'publii-gdpr-allowed-cookies';
446
447        if (cbConfig.revision) {
448            lsKeyName = lsKeyName + '-v' + parseInt(cbConfig.revision, 10);
449        }
450
451        return lsKeyName;
452    }
453
454    function storeConfiguration (allowedGroups) {
455        var lsKeyName = getConfigName();
456        var dataToStore = allowedGroups.join(',');
457        localStorage.setItem(lsKeyName, dataToStore);
458
459        if (cbConfig.configTTL === 0) {
460            localStorage.setItem('publii-gdpr-cookies-config-save-date', 0);
461
462            if (cbConfig.debugMode) {
463                console.log('🍪 Store never expiring configuration');
464            }
465        } else {
466            localStorage.setItem('publii-gdpr-cookies-config-save-date', +new Date());
467        }
468    }
469
470    function getInitialStateOfConsents () {
471        if (!cbUI.popup.element) {
472            return [];
473        }
474
475        var checkedGroups = cbUI.popup.element.querySelectorAll('input[type="checkbox"]:checked');
476        var groups = [];
477
478        for (var i = 0; i < checkedGroups.length; i++) {
479            var allowedGroup = checkedGroups[i].getAttribute('data-group-name');
480
481            if (allowedGroup !== '') {
482                groups.push(allowedGroup);
483            }
484        }
485
486        if (cbConfig.debugMode) {
487            console.log('🍪 Initial state: ' + groups.join(', '));
488        }
489
490        return groups;
491    }
492
493    function getCurrentStateOfConsents () {
494        if (!cbUI.popup.element) {
495            return [];
496        }
497
498        var checkedGroups = cbUI.popup.element.querySelectorAll('input[type="checkbox"]:checked');
499        var groups = [];
500
501        for (var i = 0; i < checkedGroups.length; i++) {
502            var allowedGroup = checkedGroups[i].getAttribute('data-group-name');
503
504            if (allowedGroup !== '') {
505                groups.push(allowedGroup);
506            }
507        }
508
509        if (cbConfig.debugMode) {
510            console.log('🍪 State to save: ' + groups.join(', '));
511        }
512
513        return groups;
514    }
515
516    function getAllGroups () {
517        if (!cbUI.popup.element) {
518            return [];
519        }
520
521        var checkedGroups = cbUI.popup.element.querySelectorAll('input[type="checkbox"]');
522        var groups = [];
523
524        for (var i = 0; i < checkedGroups.length; i++) {
525            var allowedGroup = checkedGroups[i].getAttribute('data-group-name');
526
527            if (allowedGroup !== '') {
528                groups.push(allowedGroup);
529            }
530        }
531
532        return groups;
533    }
534
535    function acceptAllCookies (source) {
536        var groupsToAccept = getAllGroups();
537        storeConfiguration(groupsToAccept);
538
539        for (var i = 0; i < groupsToAccept.length; i++) {
540            var group = groupsToAccept[i];
541
542            if (cbConfig.initialState.indexOf(group) > -1 || cbConfig.previouslyAccepted.indexOf(group) > -1) {
543                if (cbConfig.debugMode) {
544                    console.log('🍪 Skip previously activated group: ' + group);
545                }
546
547                continue;
548            }
549
550            allowCookieGroup(group);
551        }
552
553        if (cbUI.popup.element) {
554            var checkboxesToCheck = cbUI.popup.element.querySelectorAll('input[type="checkbox"]');
555
556            for (var j = 0; j < checkboxesToCheck.length; j++) {
557                checkboxesToCheck[j].checked = true;
558            }
559        }
560
561        if (cbConfig.debugMode) {
562            console.log('🍪 Accept all cookies: ', groupsToAccept.join(', '));
563        }
564
565        if (source === 'popup') {
566            hideAdvancedPopup();
567        } else if (source === 'banner') {
568            hideBanner();
569        }
570    }
571
572    function rejectAllCookies () {
573        if (cbConfig.debugMode) {
574            console.log('🍪 Reject all cookies');
575        }
576
577        storeConfiguration([]);
578        setTimeout(function () {
579            window.location.reload();
580        }, 100);
581    }
582
583    function saveConfiguration () {
584        var groupsToAccept = getCurrentStateOfConsents();
585        storeConfiguration(groupsToAccept);
586
587        if (cbConfig.debugMode) {
588            console.log('🍪 Save new config: ', groupsToAccept.join(', '));
589        }
590
591        if (reloadIsNeeded(groupsToAccept)) {
592            setTimeout(function () {
593                window.location.reload();
594            }, 100);
595            return;
596        }
597
598        for (var i = 0; i < groupsToAccept.length; i++) {
599            var group = groupsToAccept[i];
600
601            if (cbConfig.initialState.indexOf(group) > -1 || cbConfig.previouslyAccepted.indexOf(group) > -1) {
602                if (cbConfig.debugMode) {
603                    console.log('🍪 Skip previously activated group: ' + group);
604                }
605
606                continue;
607            }
608
609            allowCookieGroup(group);
610        }
611
612        hideAdvancedPopup();
613    }
614
615    function reloadIsNeeded (groupsToAccept) {
616        // check if user rejected consent for initial groups
617        var initialGroups = cbConfig.initialState;
618        var previouslyAcceptedGroups = cbConfig.previouslyAccepted;
619        var groupsToCheck = initialGroups.concat(previouslyAcceptedGroups);
620
621        for (var i = 0; i < groupsToCheck.length; i++) {
622            var groupToCheck = groupsToCheck[i];
623
624            if (groupToCheck !== '' && groupsToAccept.indexOf(groupToCheck) === -1) {
625                if (cbConfig.debugMode) {
626                    console.log('🍪 Reload is needed due lack of: ', groupToCheck);
627                }
628
629                return true;
630            }
631        }
632
633        return false;
634    }
635
636    function unlockEmbeds (cookieGroup) {
637        var iframesToUnlock = document.querySelectorAll('.pec-wrapper[data-consent-group-id="' + cookieGroup + '"]');
638
639        for (var i = 0; i < iframesToUnlock.length; i++) {
640            var iframeWrapper = iframesToUnlock[i];
641            iframeWrapper.querySelector('.pec-overlay').classList.remove('is-active');
642            iframeWrapper.querySelector('.pec-overlay').setAttribute('aria-hidden', 'true');
643            var iframe = iframeWrapper.querySelector('iframe');
644            iframe.setAttribute('src', iframe.getAttribute('data-consent-src'));
645        }
646    }
647
648    win.publiiEmbedConsentGiven = function (cookieGroup) {
649        // it will unlock embeds
650        allowCookieGroup(cookieGroup);
651
652        var checkbox = cbUI.popup.element.querySelector('input[type="checkbox"][data-group-name="' + cookieGroup + '"]');
653
654        if (checkbox) {
655            checkbox.checked = true;
656        }
657
658        var groupsToAccept = getCurrentStateOfConsents();
659        storeConfiguration(groupsToAccept);
660
661        if (cbConfig.debugMode) {
662            console.log('🍪 Save new config: ', groupsToAccept.join(', '));
663        }
664    }
665})(window);</script>
665<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"2352c54adb814c639385a94c04d80b26","r":1,"spa":2}' crossorigin="anonymous"></script>
665
666</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.