PageSourceSearch

https://www.edinburghdirectaid.org/includes/load-includes.js

js edinburghdirectaid.org collected 2026-10-01 23:53:23 UTC 15,984 bytes, 150 lines download raw bytes

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">&#8594;</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">&times;</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&amp;id=d8b8ef41d6&amp;v_id=5334&amp;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 &gt;</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.