1/** 2 * Load shared header and footer from includes/header.html and includes/footer.html. 3 * Set window.EDA_BASE before this script runs: '' for root pages, '../' for blog pages. 4 */ 5(function () { 6 var script = document.currentScript; 7 var scriptUrl = script && script.src ? script.src : ''; 8 var includesDir = scriptUrl ? scriptUrl.replace(/\/[^/]+$/, '/') : 'includes/'; 9 10 /** Set to true when the site is live and analytics cookies need consent. */ 11 var ENABLE_COOKIE_BANNER = true; 12 13 var COOKIE_CONSENT_KEY = 'eda_cookie_consent'; 14 15 function loadGoogleAnalytics() { 16 if (document.querySelector('script[data-eda-google-tag]')) return; 17 var ga = document.createElement('script'); 18 ga.src = includesDir + 'eda-gtag.js'; 19 ga.async = true; 20 document.head.appendChild(ga); 21 } 22 23 var base = typeof window.EDA_BASE === 'string' ? window.EDA_BASE : ''; 24 25 function load(path) { 26 return fetch(includesDir + path) 27 .then(function (r) { 28 if (!r.ok) throw new Error('Failed to load ' + path); 29 return r.text(); 30 }) 31 .then(function (html) { 32 return html.replace(/\{\{BASE\}\}/g, base); 33 }); 34 } 35 36 function inject(id, html) { 37 var el = document.getElementById(id); 38 if (el && html) el.innerHTML = html; 39 } 40 41 // Fallback for file:// usage where fetch() may be blocked. 42 var fallbackHeader = 43 '<div class="update-ticker" role="region" aria-label="Latest update"><a class="update-ticker-link" href="{{BASE}}our-people.html"><span class="update-ticker-message"><span class="update-ticker-label">Latest update</span><span class="update-ticker-headline">New Chair elected</span><span class="update-ticker-text">George McNeill succeeds Denis Rutovitz as Chair of EDAI.</span></span><span class="update-ticker-cta">Find out more <span class="red-arrow" aria-hidden="true">→</span></span></a></div>' + 44 '<nav class="navbar">' + 45 '<div class="nav-container"><div class="nav-logo"><a href="/" aria-label="Go to homepage" class="nav-logo-link"><img src="{{BASE}}Images/EDA-Logo-New-Long.svg" alt="Edinburgh Direct Aid International" class="nav-logo-img"></a></div><div class="nav-right"><ul class="nav-menu">' + 46 '<li class="nav-item nav-item-dropdown"><a href="{{BASE}}about.html" class="nav-link">About</a><div class="dropdown-mega-menu"><div class="dropdown-content"><button type="button" class="dropdown-back">â Back</button><div class="dropdown-links"><h2 class="dropdown-title">ABOUT US <span class="dropdown-arrow">></span></h2><div class="dropdown-links-columns"><div class="dropdown-column"><a href="{{BASE}}our-history.html" class="dropdown-link">Our History</a><a href="{{BASE}}our-people.html" class="dropdown-link">Our People</a><a href="{{BASE}}in-memoriam.html" class="dropdown-link">In Memoriam<span class="dropdown-link-mobile-suffix" aria-hidden="true"> -</span></a><a href="{{BASE}}our-finances.html" class="dropdown-link">Our Finances</a></div><div class="dropdown-column"><a href="{{BASE}}edai-book.html" class="dropdown-link">Our Book</a><a href="{{BASE}}contact-us.html" class="dropdown-link">Contact Us</a><a href="{{BASE}}volunteer.html" class="dropdown-link">Volunteer</a><a href="{{BASE}}donate-goods.html" class="dropdown-link">OUR WAREHOUSE</a></div></div></div><div class="dropdown-image"><img src="{{BASE}}Images/Falcon-Convoy-About-Us-Header.jpg" alt="About EDA"></div></div></div></li>' + 47 '<li class="nav-item nav-item-dropdown"><a href="#" class="nav-link">Projects</a><div class="dropdown-mega-menu"><div class="dropdown-content"><button type="button" class="dropdown-back">â Back</button><div class="dropdown-links"><h2 class="dropdown-title">OUR PROJECTS <span class="dropdown-arrow">></span></h2><div class="dropdown-links-columns"><div class="dropdown-column"><a href="{{BASE}}projects/lebanon-emergency.html" class="dropdown-link">Lebanon Emergency</a><a href="{{BASE}}projects/tragedy-of-gaza.html" class="dropdown-link">Gaza Medical Team</a><a href="{{BASE}}projects/ukraine-safe-schools-project.html" class="dropdown-link">EDAI in Ukraine</a><a href="{{BASE}}projects/music-therapy-programs.html" class="dropdown-link">Music Therapy</a></div><div class="dropdown-column"><a href="{{BASE}}projects/kashmir-floods.html" class="dropdown-link">Kashmir Floods</a><a href="{{BASE}}projects/balkan-summer-camp.html" class="dropdown-link">Balkans Summer Camp</a><a href="https://www.christinewitcuttfund.org/" class="dropdown-link" target="_blank" rel="noopener noreferrer">The Witcutt Fund</a><a href="{{BASE}}donate-goods.html" class="dropdown-link">GOODS DONATION</a></div></div></div><div class="dropdown-image"><img src="{{BASE}}Images/Maggie-Nabil-Damascus-Feb2026-Our-Work-Drop-Down.jpeg" alt="Our Programmes"></div></div></div></li>' + 48 '<li class="nav-item nav-item-dropdown"><a href="#" class="nav-link">Latest</a><div class="dropdown-mega-menu"><div class="dropdown-content"><button type="button" class="dropdown-back">â Back</button><div class="dropdown-links"><h2 class="dropdown-title">LATEST <span class="dropdown-arrow">></span></h2><div class="dropdown-links-columns"><div class="dropdown-column"><a href="{{BASE}}events.html" class="dropdown-link">Events</a><a href="{{BASE}}press-coverage.html" class="dropdown-link">Press Coverage</a><a href="{{BASE}}reports.html" class="dropdown-link">Reports</a></div></div></div><div class="dropdown-image"><img src="{{BASE}}Images/Latest-Drop-Down-Image.jpg" alt="Latest Updates"></div></div></div></li>' + 49 '</ul><a href="{{BASE}}donate.html" class="nav-donate-btn">DONATE</a><div class="hamburger"><span class="bar"></span><span class="bar"></span><span class="bar"></span></div></div></div></nav>'; 50 51 var fallbackCookieBanner = 52 '<div id="eda-cookie-banner" class="eda-cookie-banner" role="dialog" aria-label="Cookie notice" aria-describedby="eda-cookie-banner-desc">' + 53 '<button type="button" class="eda-cookie-banner-close" aria-label="Close cookie notice">×</button>' + 54 '<h2 class="eda-cookie-banner-title">Cookie notice</h2>' + 55 '<p id="eda-cookie-banner-desc" class="eda-cookie-banner-text">
55This website uses cookies essential for functionality and to improve your experience. We would like to use cookies to collect website analytics information to help us improve our site. If you accept these additional cookies, we will receive data about how you interact with our website. <a href="{{BASE}}cookie-policy.html">Read our cookie policy</a>.</p>' + 56 '<div class="eda-cookie-banner-actions">' + 57 '<button type="button" class="eda-cookie-banner-btn eda-cookie-banner-btn-accept">Accept</button>' + 58 '<button type="button" class="eda-cookie-banner-btn eda-cookie-banner-btn-reject">Reject</button>' + 59 '</div></div>'; 60 61 var fallbackFooter = 62 '<div class="container"><div class="footer-top"><div class="footer-brand"><h3>Edinburgh Direct Aid International</h3><p>Delivering aid to people in desperate need in far away places.</p><p class="footer-brand-contact">A charity registered in Scotland (SC050964).</p><a href="https://www.oscr.org.uk/" class="footer-oscr-link" target="_blank" rel="noopener noreferrer"><img src="{{BASE}}Images/oscr-large-mono.jpg" alt="Scottish Charity Regulator (OSCR)" class="footer-oscr-logo" loading="lazy"></a></div><div class="footer-newsletter"><h3>Sign up to our newsletter</h3><p class="footer-newsletter-intro">Get the latest updates from our programmes, campaigns and fundraising appeals straight to your inbox.</p><form action="https://edinburghdirectaid.us20.list-manage.com/subscribe/post?u=35f916c27e7b6ae3e44af7f03&id=d8b8ef41d6&v_id=5334&f_id=00b874eef0" method="post" target="_blank" class="footer-newsletter-form" novalidate><div class="footer-newsletter-row"><div class="footer-newsletter-field"><label for="footer-mce-FNAME">First name</label><input type="text" name="FNAME" id="footer-mce-FNAME" required></div><div class="footer-newsletter-field"><label for="footer-mce-LNAME">Last name</label><input type="text" name="LNAME" id="footer-mce-LNAME" required></div></div><div class="footer-newsletter-row"><div class="footer-newsletter-field"><label for="footer-mce-EMAIL">Email</label><input type="email" name="EMAIL" id="footer-mce-EMAIL" required></div><div class="footer-newsletter-field"><label for="footer-mce-CITY">City</label><input type="text" name="CITY" id="footer-mce-CITY" required></div></div><label class="footer-newsletter-consent" for="footer-gdpr_66881">
62<input type="checkbox" id="footer-gdpr_66881" name="gdpr[66881]" value="Y" required><span>I agree to receive emails from EDAI and can unsubscribe at any time. See our <a href="{{BASE}}privacy-policy.html">privacy policy</a>.</span></label><div hidden><input type="hidden" name="tags" value="3633065,4447009"></div><div aria-hidden="true" style="position:absolute;left:-5000px"><input type="text" name="b_35f916c27e7b6ae3e44af7f03_d8b8ef41d6" tabindex="-1" value=""></div><button type="submit" name="subscribe" class="footer-newsletter-submit">Sign up ></button></form></div></div><div class="footer-connect"><div class="footer-social"><h3>Follow us</h3><div class="social-links"><a href="https://www.instagram.com/eda_organisation/" aria-label="Instagram" target="_blank" rel="noopener"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z"/></svg></a><a href="https://www.facebook.com/EdinburghDirectAid/" aria-label="Facebook" target="_blank" rel="noopener"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"/></svg></a></div></div><a href="{{BASE}}contact-us.html" class="footer-contact-btn">Contact us</a></div><nav class="footer-nav" aria-label="Footer"><div class="footer-nav-col"><h4>About EDAI</h4><ul><li><a href="{{BASE}}our-history.html">Our history</a></li><li><a href="{{BASE}}our-people.html">Our people</a></li><li><a href="{{BASE}}edai-book.html">Our book</a></li></ul></div><div class="footer-nav-col"><h4>Our projects</h4><ul><li><a href="{{BASE}}projects/lebanon-emergency.html">Lebanon Emergency</a></li><li><a href="{{BASE}}projects/tragedy-of-gaza.html">Gaza medical team</a></li><li><a href="{{BASE}}projects/ukraine-safe-schools-project.html">EDAI in Ukraine</a></li><li><a href="{{BASE}}projects/music-therapy-programs.html">Music therapy</a></li></ul></div><div class="footer-nav-col"><h4>Latest</h4><ul><li><a href="{{BASE}}events.html">Events</a></li><li><a href="{{BASE}}press-coverage.html">Press coverage</a></li><li><a href="{{BASE}}newsletter.html">Newsletter</a></li></ul></div><div class="footer-nav-col"><h4>Support us</h4><ul><li><a href="{{BASE}}donate.html">Donate</a></li><li><a href="{{BASE}}donate-goods.html">Donate goods</a></li><li><a href="{{BASE}}volunteer.html">Volunteer</a></li></ul></div></nav><div class="footer-bottom"><div class="footer-org-info"><p>Edinburgh Direct Aid International is a charity registered in Scotland (SC050964).</p></div><div class="footer-policy-links"><a href="{{BASE}}cookie-policy.html" class="footer-policy-link">Cookie policy</a><a href="#" class="footer-policy-link" data-eda-cookie-settings aria-label="Cookie settings â change your consent">Cookie settings</a><a href="{{BASE}}privacy-policy.html" class="footer-policy-link">Privacy policy</a></div></div></div>'; 63 64 function appendCookieBanner(html) { 65 var wrap = document.createElement('div'); 66 wrap.innerHTML = html; 67 var banner = wrap.firstElementChild; 68 if (banner) document.body.appendChild(banner); 69 return banner; 70 } 71 72 function initCookieBanner() { 73 var banner = document.getElementById('eda-cookie-banner'); 74 if (!banner) return; 75 var key = COOKIE_CONSENT_KEY; 76 var stored = null; 77 try { 78 stored = localStorage.getItem(key); 79 } catch (e) {} 80 81 if (stored === 'accept') { 82 loadGoogleAnalytics(); 83 banner.classList.add('eda-cookie-banner--hidden'); 84 return; 85 } 86 if (stored === 'reject') { 87 banner.classList.add('eda-cookie-banner--hidden'); 88 return; 89 } 90 91 function setChoice(value) { 92 try { 93 localStorage.setItem(key, value); 94 } catch (e) {} 95 } 96 function hide() { 97 banner.classList.add('eda-cookie-banner--hidden'); 98 } 99 100 banner.querySelector('.eda-cookie-banner-close').addEventListener('click', function () { 101 setChoice('reject'); 102 hide(); 103 }); 104 banner.querySelector('.eda-cookie-banner-btn-accept').addEventListener('click', function () { 105 setChoice('accept'); 106 loadGoogleAnalytics(); 107 hide(); 108 }); 109 banner.querySelector('.eda-cookie-banner-btn-reject').addEventListener('click', function () { 110 setChoice('reject'); 111 hide(); 112 }); 113 } 114 115 Promise.all([load('header.html'), load('footer.html'), load('cookie-banner.html')]) 116 .then(function (results) { 117 inject('eda-header-placeholder', results[0]); 118 inject('eda-footer-placeholder', results[1]); 119 if (ENABLE_COOKIE_BANNER) { 120 appendCookieBanner(results[2].replace(/\{\{BASE\}\}/g, base)); 121 initCookieBanner(); 122 } 123 document.dispatchEvent(new CustomEvent('eda-includes-loaded')); 124 }) 125 .catch(function (err) { 126 console.warn('EDA includes failed to load via fetch(). Using local fallback markup.', err); 127 inject('eda-header-placeholder', fallbackHeader.replace(/\{\{BASE\}\}/g, base)); 128 inject('eda-footer-placeholder', fallbackFooter.replace(/\{\{BASE\}\}/g, base)); 129 if (ENABLE_COOKIE_BANNER) { 130 appendCookieBanner(fallbackCookieBanner.replace(/\{\{BASE\}\}/g, base)); 131 initCookieBanner(); 132 } 133 document.dispatchEvent(new CustomEvent('eda-includes-loaded')); 134 }); 135 136 (function bindCookieSettingsLink() { 137 if (window.__edaCookieSettingsBound) return; 138 window.__edaCookieSettingsBound = true; 139 document.body.addEventListener('click', function (e) {
140 var t = e.target.closest('[data-eda-cookie-settings]'); 141 if (!t) return; 142 e.preventDefault(); 143 try { 144 localStorage.removeItem(COOKIE_CONSENT_KEY); 145 } catch (err) {} 146 location.reload(); 147 }); 148 })(); 149})(); 150
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.