PageSourceSearch

https://culdaffparish.com/

html culdaffparish.com collected 2026-10-03 00:55:06 UTC 30,123 bytes, 149 lines download raw bytes

1<!doctype html>
2<html lang="en">
3<head>
4  <meta charset="utf-8">
5  <meta name="viewport" content="width=device-width, initial-scale=1">
6  <title>Culdaff Parish | Diocese of Derry</title>
7  <meta name="description" content="">
8  <link rel="stylesheet" href="site.css">
9  
10</head>
11<body>
12  <header class="site-header sticky">
13    <div class="header-inner">
14      <a class="brand" href="index.html" aria-label="Culdaff Parish home">
15        <img class="brand-logo" src="https://www.odyc.net/parish-resources/culdaff/images/logo.png" alt="Culdaff Parish logo">
16        <div class="brand-copy">
17          
18          
19        </div>
20      </a>
21      <button class="nav-toggle" type="button" aria-label="Open navigation" onclick="document.body.classList.toggle('nav-open')">☰</button>
22      <nav class="site-nav" aria-label="Primary navigation"><ul><li><a href="index.html">Home</a></li><li class="has-children"><a href="churches.html">Parish Church</a><ul><li><a href="mass-times.html">Mass Times</a></li><li><a href="sunday-readings.html">Sunday Readings</a></li><li><a href="daily-readings.html">Daily Readings</a></li></ul></li><li><a href="media.html">Webcam</a></li><li class="has-children"><a href="sacraments.html">Sacraments</a><ul><li><a href="baptism.html">Baptisms</a></li><li><a href="weddings.html">Weddings</a></li><li><a href="funerals.html">Funerals</a></li></ul></li><li><a href="contact.html">Contacts</a></li><li class="has-children"><a href="parish-resources.html">Parish Resources</a><ul><li><a href="our-parish.html">Our Parish</a></li><li><a href="newsletter-archive.html">Newsletter Archive</a></li><li><a href="finances.html">Parish Finances</a></li><li><a href="safeguarding.html">Safeguarding</a></li><li><a href="privacy-notice.html">Privacy Notice</a></li></ul></li><li><a href="https://www.irishgraveyards.ie/search?area_id=8&amp;yardid=44&amp;lastname=&amp;firstname=&amp;address=&amp;month=&amp;year=" target="_blank" rel="noopener">Irish Graveyards</a></li></ul></nav>
23    </div>
24  </header>
25  <section class="hero hero-image" data-collapsible-hero style="background-position:center center;background-image:linear-gradient(rgba(10,25,40,.24),rgba(10,25,40,.34)),url('https://www.odyc.net/parish-resources/culdaff/images/BocanChurch.png')"><div class="hero-banner"><div class="hero-inner hero-title-entrance"><h1>Culdaff Parish</h1></div><button class="hero-toggle hero-toggle-entrance" type="button" data-hero-toggle aria-expanded="true" aria-label="Hide main image"><span class="hero-toggle-icon" aria-hidden="true">▴</span><span class="hero-toggle-text">Hide image</span></button></div></section>
26  <main class="page-shell">
27    <section class="pc-home-contact pc-home-contact--dark pc-home-contact--image" style="--pc-intro-image:url('https://www.odyc.net/parish-resources/culdaff/images/BocanChurch02.png');--pc-intro-position:center top;"><div class="pc-home-contact-art" aria-hidden="true"></div><div class="pc-home-contact-copy"><div class="pc-home-contact-eyebrow">We’re here to help</div><h2>Tell us how we can help.</h2><p>Whether you need parish information, sacramental guidance or simply want to get in touch, the parish office is only a call or message away.</p><div class="pc-social-links" aria-label="Parish social media"><a class="pc-social-link pc-social-link--facebook" href="https://en-gb.facebook.com/bocanparish/" target="_blank" rel="noopener" aria-label="Facebook" title="Facebook"><span aria-hidden="true">f</span></a></div><button type="button" class="pc-donate-button" data-donate-url="https://platform.payzone.ie/customer/10128/product-list"><img src="https://www.odyc.net/parish-resources/culdaff/images/donate-long-teal.png" alt="" loading="lazy"><span><small>Support our parish</small><strong>Donate</strong></span></button></div><div class="pc-contact-methods"><a class="pc-contact-method" href="tel:003530749379107"><span class="pc-contact-icon">☎</span><span><small>Call the Parish Office</small><strong>00 353 (0)74 – 9379107</strong></span></a><a class="pc-contact-method" href="mailto:[email protected]"><span class="pc-contact-icon">✉</span><span><small>Send us an email</small><strong>[email protected]</strong></span></a><div class="pc-contact-method"><span class="pc-contact-icon">⌂</span><span><small>Parish Office</small><strong>Culdaff, Co. Donegal</strong></span></div></div></section><div class="pc-modal pc-redirect-modal" id="pc-donate-redirect" aria-hidden="true"><div class="pc-modal-backdrop"></div><section class="pc-modal-panel pc-redirect-panel" role="status" aria-l
27ive="polite"><div class="pc-redirect-spinner" aria-hidden="true"></div><h2>Redirecting</h2><p>Opening the donation page…</p></section></div>
27<script>(function(){var b=document.querySelector('[data-donate-url]');if(!b)return;b.addEventListener('click',function(){var m=document.getElementById('pc-donate-redirect'),u=b.dataset.donateUrl;if(m){m.classList.add('is-open');m.setAttribute('aria-hidden','false');document.body.classList.add('modal-open')}setTimeout(function(){if(m){m.classList.remove('is-open');m.setAttribute('aria-hidden','true');document.body.classList.remove('modal-open')}window.open(u,'_blank','noopener')},2000)})})();</script>
27
28    <section class="pc-homepage-notices" aria-label="Parish notices">
28<script language="Javascript" src="https://theparishmessenger.com/xlaabsolutenm.aspx?z=821&amp;tag=culdaff_homepage_notice"></script>
28</section>
29    <section class="pc-connected" data-connected-explorer><div class="pc-connected-head"><h2>Connected.</h2><p>Choose a church to explore Webcam, Mass Times and Location.</p></div><div class="pc-connected-parishes"><button type="button" class="pc-connected-parish-tab" data-connected-parish="bd3718fb-7bd6-4fb0-9003-0b5adb9055d7">Clonmany</button><button type="button" class="pc-connected-parish-tab is-active" data-connected-parish="a712038d-1318-488b-84f6-da09aeddd71a">Culdaff</button></div><div class="pc-connected-grid"><article class="pc-connected-church is-parish-hidden" data-connected-church data-parish-id="bd3718fb-7bd6-4fb0-9003-0b5adb9055d7" id="pc-connected-church-0"><button type="button" class="pc-connected-church-button" data-connected-select aria-expanded="false"><div class="pc-connected-church-image has-image"><img src="https://www.odyc.net/parish-resources/clonmany/images/saint-michaels-church.png" alt="St Michael&#x27;s" loading="lazy"></div><span class="pc-connected-church-copy"><strong>St Michael&#x27;s</strong><small>Urris</small></span></button><div class="pc-connected-actions" aria-hidden="true"><button type="button" class="pc-connected-action" data-modal="pc-connected-mass-0"><span>◷</span>Mass Times</button><button type="button" class="pc-connected-action" data-modal="pc-connected-map-0"><span>⌖</span>Map</button><button type="button" class="pc-connected-action" data-connected-webcam="https://www.clonmanyparish.com/urris-webcam.html" data-webcam-target="same_tab"><span>◉</span>Webcam</button></div></article><article class="pc-connected-church is-primary is-parish-hidden" data-connected-church data-parish-id="bd3718fb-7bd6-4fb0-9003-0b5adb9055d7" id="pc-connected-church-1"><button type="button" class="pc-connected-church-button" data-connected-select aria-expanded="false"><div class="pc-connected-church-image has-image"><img src="https://www.odyc.net/parish-resources/clonmany/images/St-Marys.png" alt="St Mary&#x27;s" loading="lazy"></div><span class="pc-connected-church-copy"><strong>St Mary&#x27;s</strong><small>Clonmany</small></span></button><div class="pc-connected-actions" aria-hidden="true"><button type="button" class="pc-connected-action" data-modal="pc-connected-mass-1"><span>◷</span>Mass Times</button><button type="button" class="pc-connected-action" data-modal="pc-connected-map-1"><span>⌖</span>Map</button><button type="button" class="pc-connected-action" data-connected-webcam="https://www.clonmanyparish.com/st-mary-s-webcam.html" data-webcam-target="same_tab"><span>◉</span>Webcam</button></div></article><article class="pc-connected-church is-parish-hidden" data-connected-church data-parish-id="bd3718fb-7bd6-4fb0-9003-0b5adb9055d7" id="pc-connected-church-2"><button type="button" class="pc-connected-church-button" data-connected-select aria-expanded="false"><div class="pc-connected-church-image has-image"><img src="https://www.odyc.net/parish-resources/clonmany/images/The-Oratory.png" alt="Oratory of the Assumption" loading="lazy"></div><span class="pc-connected-church-copy"><strong>Ballyliffin</strong><small>Ballyliffin</small></span></button><div class="pc-connected-actions" aria-hidden="true"><button type="button" class="pc-connected-action" data-modal="pc-connected-mass-2"><span>◷</span>Mass Times</button><button type="button" class="pc-connected-action" data-modal="pc-connected-map-2"><span>⌖</span>Map</button></div></article><article class="pc-connected-church is-primary" data-connected-church data-parish-id="a712038d-1318-488b-84f6-da09aeddd71a" id="pc-connected-church-3"><button type="button" class="pc-connected-church-button" data-connected-select aria-expanded="false"><div class="pc-connected-church-image has-image"><img src="https://www.odyc.net/parish-resources/culdaff/images/BocanChurch.png" alt="St Mary&#x27;s Church, Bocan" loading="lazy"></div><span class="pc-connected-church-copy"><strong>St Mary&#x27;s</strong><small>Culdaff</small></span></button><div class="pc-connected-actions" aria-hidden="true"><button type="button" class="pc-connected-action" data-modal="pc-connected-mass-3"><span>◷</span>Mass Times</button><button type="button" class="pc-connected-action" data-modal="pc-connected-map-3"><span>⌖</span>Map</button><button type="button" class="pc-connected-action" data-connected-webcam="https://www.culdaffparish.com/media.html" data-webcam-target="same_tab"><span>◉</span>Webcam</button></div></article></div></section><div class="pc-modal" id="pc-connected-mass-0" aria-hidden="true"><div class="pc-modal-backdrop" data-close-modal></div><section class="pc-modal-panel" role="dialog" aria-modal="true"><button class="pc-modal-close" type="button" data-close-modal>
29×</button><div class="pc-modal-heading"><div class="pc-modal-eyebrow">Mass & Service Times</div><h2>St Michael&#x27;s</h2></div><div class="pc-modal-content"><div class="pc-service-row"><h3>Weekday</h3><div class="pc-service-content"><h3>Friday - Eucharistic Adoration	3pm - 6pm</h3></div></div><div class="pc-service-row"><h3>Weekend</h3><div class="pc-service-content"><h3><strong>Sunday - 10.00am</strong></h3></div></div></div></section></div><div class="pc-modal pc-map-modal" id="pc-connected-map-0" aria-hidden="true"><div class="pc-modal-backdrop" data-close-modal></div><section class="pc-modal-panel pc-map-panel" role="dialog" aria-modal="true" aria-label="Map - St Michael&#x27;s"><button class="pc-modal-close" type="button" data-close-modal aria-label="Close">×</button><div class="pc-modal-heading"><div class="pc-modal-eyebrow">Location</div><h2>St Michael&#x27;s</h2><p class="pc-map-address">Urris, Donegal, F93 PO86</p></div><div class="pc-map-frame-wrap"><iframe class="pc-map-frame" src="https://www.google.com/maps?q=Urris%2C+Donegal%2C+F93+PO86&amp;output=embed" loading="lazy" referrerpolicy="no-referrer-when-downgrade" title="Map of St Michael&#x27;s"></iframe></div><div class="pc-map-footer"><a class="pc-action-button" href="https://www.google.com/maps/search/?api=1&amp;query=Urris%2C+Donegal%2C+F93+PO86" target="_blank" rel="noopener">Open in Google Maps ↗</a></div></section></div><div class="pc-modal" id="pc-connected-mass-1" aria-hidden="true"><div class="pc-modal-backdrop" data-close-modal></div><section class="pc-modal-panel" role="dialog" aria-modal="true"><button class="pc-modal-close" type="button" data-close-modal>×</button><div class="pc-modal-heading"><div class="pc-modal-eyebrow">Mass & Service Times</div><h2>St Mary&#x27;s</h2></div><div class="pc-modal-content"><div class="pc-service-row"><h3>Weekday</h3><div class="pc-service-content"><h3>Monday - Thursday	9.30am</h3>
30<h3>Wednesday	2.30 - 3.30pm - Eucharistic Adoration</h3>
31<h3>Friday	7.30pm</h3>
32<p><em>Confessions from 7.00pm</em></p></div></div><div class="pc-service-row"><h3>Weekend</h3><div class="pc-service-content"><h3>Saturday - Vigil	6.30pm</h3>
33<p><em>Confessions from 6.00pm</em></p>
34<h3>Sunday	11.30am</h3></div></div></div></section></div><div class="pc-modal pc-map-modal" id="pc-connected-map-1" aria-hidden="true"><div class="pc-modal-backdrop" data-close-modal></div><section class="pc-modal-panel pc-map-panel" role="dialog" aria-modal="true" aria-label="Map - St Mary&#x27;s"><button class="pc-modal-close" type="button" data-close-modal aria-label="Close">×</button><div class="pc-modal-heading"><div class="pc-modal-eyebrow">Location</div><h2>St Mary&#x27;s</h2><p class="pc-map-address">Clonmany, County Donegal, F93 YX90</p></div><div class="pc-map-frame-wrap"><iframe class="pc-map-frame" src="https://www.google.com/maps?q=Clonmany%2C+County+Donegal%2C+F93+YX90&amp;output=embed" loading="lazy" referrerpolicy="no-referrer-when-downgrade" title="Map of St Mary&#x27;s"></iframe></div><div class="pc-map-footer"><a class="pc-action-button" href="https://www.google.com/maps/search/?api=1&amp;query=Clonmany%2C+County+Donegal%2C+F93+YX90" target="_blank" rel="noopener">Open in Google Maps ↗</a></div></section></div><div class="pc-modal" id="pc-connected-mass-2" aria-hidden="true"><div class="pc-modal-backdrop" data-close-modal></div><section class="pc-modal-panel" role="dialog" aria-modal="true"><button class="pc-modal-close" type="button" data-close-modal>×</button><div class="pc-modal-heading"><div class="pc-modal-eyebrow">Mass & Service Times</div><h2>Oratory of the Assumption</h2></div><div class="pc-modal-content"><div class="pc-service-row"><h3>Weekday</h3><div class="pc-service-content"><h3><strong>Tuesday</strong> - Eucharistic Adoration	: 7.30pm - 8.30pm</h3></div></div></div></section></div><div class="pc-modal pc-map-modal" id="pc-connected-map-2" aria-hidden="true"><div class="pc-modal-backdrop" data-close-modal></div><section class="pc-modal-panel pc-map-panel" role="dialog" aria-modal="true" aria-label="Map - Oratory of the Assumption"><button class="pc-modal-close" type="button" data-close-modal aria-label="Close">×</button><div class="pc-modal-heading"><div class="pc-modal-eyebrow">Location</div><h2>Oratory of the Assumption</h2><p class="pc-map-address">Ballyliffin, County Donegal, F93 PW44</p></div><div class="pc-map-frame-wrap"><iframe class="pc-map-frame" src="https://www.google.com/maps?q=Ballyliffin%2C+County+Donegal%2C+F93+PW44&amp;output=embed" loading="lazy" referrerpolicy="no-referrer-when-downgrade" title="Map of Oratory of the Assumption"></iframe></div><div class="pc-map-footer"><a class="pc-action-button" href="https://www.google.com/maps/search/?api=1&amp;query=Ballyliffin%2C+County+Donegal%2C+F93+PW44" target="_blank" rel="noopener">Open in Google Maps ↗</a></div></section></div><div class="pc-modal" id="pc-connected-mass-3" aria-hidden="true"><div class="pc-modal-backdrop" data-close-modal></div><section class="pc-modal-panel" role="dialog" aria-modal="true"><button class="pc-modal-close" type="button" data-close-modal>
34×</button><div class="pc-modal-heading"><div class="pc-modal-eyebrow">Mass & Service Times</div><h2>St Mary&#x27;s Church, Bocan</h2></div><div class="pc-modal-content"><div class="pc-service-row"><h3>Sunday Mass Times</h3><div class="pc-service-content"><h2>Weekend Mass Times</h2>
35<p>Saturday Vigil 8 pm ; Sunday 10 am.</p></div></div><div class="pc-service-row"><h3>Daily Mass Times</h3><div class="pc-service-content"><p><strong>Monday</strong> 7.30 pm; <strong>Tuesday</strong> &amp; <strong>Wednesday,</strong> 10 am</p>
36<p>[Blessed Sacrament Exposition after 10 am Mass until 2pm]; </p>
37<p><strong>Thursday,</strong> 7.30 pm; <strong>Friday</strong> 10 am;  <strong>Saturday</strong> 11am</p></div></div><div class="pc-service-row"><h3>Confessions</h3><div class="pc-service-content"><p>Before Saturday nights Mass, 7.30 – 7.50</p></div></div></div></section></div><div class="pc-modal pc-map-modal" id="pc-connected-map-3" aria-hidden="true"><div class="pc-modal-backdrop" data-close-modal></div><section class="pc-modal-panel pc-map-panel" role="dialog" aria-modal="true" aria-label="Map - St Mary&#x27;s Church, Bocan"><button class="pc-modal-close" type="button" data-close-modal aria-label="Close">×</button><div class="pc-modal-heading"><div class="pc-modal-eyebrow">Location</div><h2>St Mary&#x27;s Church, Bocan</h2><p class="pc-map-address">Bocan, Culdaff, Culdaff, Co. Donegal</p></div><div class="pc-map-frame-wrap"><iframe class="pc-map-frame" src="https://www.google.com/maps?q=Bocan%2C+Culdaff%2C+Culdaff%2C+Co.+Donegal&amp;output=embed" loading="lazy" referrerpolicy="no-referrer-when-downgrade" title="Map of St Mary&#x27;s Church, Bocan"></iframe></div><div class="pc-map-footer"><a class="pc-action-button" href="https://www.google.com/maps/search/?api=1&amp;query=Bocan%2C+Culdaff%2C+Culdaff%2C+Co.+Donegal" target="_blank" rel="noopener">Open in Google Maps ↗</a></div></section></div><div class="pc-modal pc-redirect-modal" id="pc-connected-redirect" aria-hidden="true"><div class="pc-modal-backdrop"></div><section class="pc-modal-panel pc-redirect-panel" role="status" aria-live="polite"><div class="pc-redirect-spinner" aria-hidden="true"></div><h2>Redirecting</h2><p>Opening the church webcam…</p></section></div>
37<script>(function(){
38var box=document.querySelector('[data-connected-explorer]');if(!box)return;
39var cards=[].slice.call(box.querySelectorAll('[data-connected-church]')),tabs=[].slice.call(box.querySelectorAll('[data-connected-parish]'));
40function closeCard(card){card.classList.remove('is-selected');var b=card.querySelector('[data-connected-select]'),a=card.querySelector('.pc-connected-actions');if(b)b.setAttribute('aria-expanded','false');if(a)a.setAttribute('aria-hidden','true')}
41function closeAll(except){cards.forEach(function(c){if(c!==except)closeCard(c)})}
42cards.forEach(function(card){var button=card.querySelector('[data-connected-select]');if(!button)return;button.addEventListener('click',function(){var opening=!card.classList.contains('is-selected');closeAll(card);card.classList.toggle('is-selected',opening);button.setAttribute('aria-expanded',opening?'true':'false');var a=card.querySelector('.pc-connected-actions');if(a)a.setAttribute('aria-hidden',opening?'false':'true')})});
43var switching=false;
43tabs.forEach(function(tab){tab.addEventListener('click',function(){if(switching||tab.classList.contains('is-active'))return;switching=true;var pid=tab.dataset.connectedParish,current=cards.filter(function(c){return !c.classList.contains('is-parish-hidden')});tabs.forEach(function(t){t.disabled=true;t.classList.toggle('is-active',t===tab)});closeAll();current.forEach(function(c,i){setTimeout(function(){c.classList.add('is-switching-out')},i*35)});setTimeout(function(){cards.forEach(function(c){c.classList.remove('is-switching-out','is-switching-in');c.classList.toggle('is-parish-hidden',c.dataset.parishId!==pid)});var incoming=cards.filter(function(c){return !c.classList.contains('is-parish-hidden')});incoming.forEach(function(c,i){c.classList.add('is-switching-in');setTimeout(function(){c.classList.remove('is-switching-in')},80+i*55)});setTimeout(function(){tabs.forEach(function(t){t.disabled=false});switching=false},220+incoming.length*55)},360)})});
44box.querySelectorAll('[data-connected-webcam]').forEach(function(b){b.addEventListener('click',function(e){e.stopPropagation();var m=document.getElementById('pc-connected-redirect');if(m){m.classList.add('is-open');m.setAttribute('aria-hidden','false');document.body.classList.add('modal-open')}var url=b.dataset.connectedWebcam,target=b.dataset.webcamTarget;setTimeout(function(){if(m){m.classList.remove('is-open');m.setAttribute('aria-hidden','true');document.body.classList.remove('modal-open')}if(target==='same_tab')window.location.href=url;else window.open(url,'_blank','noopener')},2000)})});
45})();</script>
45
46    <section class="pc-newsletter-showcase" data-newsletter-showcase data-available-day="Saturday"><div class="pc-newsletter-label">Parish Newsletter</div><div class="pc-newsletter-grid" data-newsletter-grid></div></section>
47    <section class="pc-home-readings"><div class="pc-home-readings-copy"><h2>Mass Readings</h2><div class="pc-home-readings-actions"><a href="daily-readings.html">Daily Readings <span>→</span></a><a href="sunday-readings.html">Sunday Readings <span>→</span></a></div></section>
48    
49    <article class="content-card">
50      <div class="pc-embed-card pc-embed-padding-small pc-embed-bg-transparent pc-embed-rounded pc-embed-full" data-embed-name="Parish Newsletters"><iframe class="pc-isolated-embed" data-pc-embed-id="79e863d7-20ee-43b1-80fa-026c52e21970" title="Parish Newsletters" srcdoc="&lt;!doctype html&gt;&lt;html&gt;&lt;head&gt;&lt;meta charset=&quot;utf-8&quot;&gt;&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;https://www.odyc.net/p200/odyc/newscss.css&quot;&gt;&lt;style&gt;html,body{margin:0;padding:0;background:transparent}*,*:before,*:after{box-sizing:border-box}#pc-isolated-root{width:100%;overflow:visible}&lt;/style&gt;&lt;/head&gt;&lt;body&gt;&lt;div id=&quot;pc-isolated-root&quot;&gt;&lt;script language=&quot;Javascript&quot; src=&quot;https://theparishmessenger.com/xlaabsolutenm.aspx?z=819&amp;amp;tag=DerryDioceseFrontNews&quot;&gt;&lt;/script&gt;&lt;/div&gt;&lt;script src=&quot;https://www.odyc.net/p200/odyc/js-news.js&quot;&gt;&lt;/script&gt;&lt;script&gt;(function(){function report(){var h=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight,document.documentElement.offsetHeight,document.body.offsetHeight);parent.postMessage({type:&#x27;pc-embed-height&#x27;,id:&#x27;79e863d7-20ee-43b1-80fa-026c52e21970&#x27;,height:h},&#x27;*&#x27;);}window.addEventListener(&#x27;load&#x27;,report);if(window.ResizeObserver){new ResizeObserver(report).observe(document.documentElement);}setTimeout(report,250);setTimeout(report,1000);setTimeout(report,2500);})();&lt;/script&gt;&lt;/body&gt;&lt;/html&gt;" loading="lazy" scrolling="no"></iframe></div>
51    </article>
52    
53  </main>
54  <footer class="site-footer">
55    
56    <div class="pc-footer-art" aria-hidden="true"></div><div class="footer-inner pc-footer-grid"><div class="pc-footer-brand"><div class="pc-footer-kicker">Clonmany And Culdaff</div><strong>Culdaff Parish</strong><p>Faith, welcome and community</p></div><div class="pc-footer-contact"><h3>Contact</h3><span>Culdaff, Co. Donegal</span><a href="tel:003530749379107">00 353 (0)74 – 9379107</a><a href="mailto:[email protected]">[email protected]</a></div><div class="pc-footer-links"><h3>Important</h3><a href="privacy-notice.html">Privacy Notice</a><a href="safeguarding.html">Safeguarding</a></div></div><div class="pc-footer-bottom"><span>© <span data-current-year></span> Culdaff Parish</span><span>ParishCentral</span></div>
57  </footer>
58  
58<script>
59    document.querySelectorAll('[data-current-year]').forEach(function(el) { el.textContent = new Date().getFullYear(); });
60    document.querySelectorAll('.site-nav a').forEach(function(link) {
61      link.addEventListener('click', function() { document.body.classList.remove('nav-open'); });
62    });
63    document.querySelectorAll('[data-hero-toggle]').forEach(function(button) {
64      var hero = button.closest('[data-collapsible-hero]');
65      if (!hero) return;
66      var storageKey = 'pc-hero-collapsed';
67      function setHero(collapsed) {
68        hero.classList.toggle('is-collapsed', collapsed);
69        button.setAttribute('aria-expanded', collapsed ? 'false' : 'true');
70        button.setAttribute('aria-label', collapsed ? 'Show main image' : 'Hide main image');
71        var text = button.querySelector('.hero-toggle-text');
72        var icon = button.querySelector('.hero-toggle-icon');
73        if (text) text.textContent = collapsed ? 'Show image' : 'Hide image';
74        if (icon) icon.textContent = collapsed ? '▾' : '▴';
75      }
76      try { setHero(window.sessionStorage.getItem(storageKey) === '1'); } catch (e) { setHero(false); }
77      button.addEventListener('click', function() {
78        var collapsed = !hero.classList.contains('is-collapsed');
79        setHero(collapsed);
80        try { window.sessionStorage.setItem(storageKey, collapsed ? '1' : '0'); } catch (e) {}
81      });
82    });
83    document.querySelectorAll('[data-modal]').forEach(function(button) {
84      button.addEventListener('click', function() {
85        var modal = document.getElementById(button.dataset.modal);
86        if (modal) { modal.classList.add('is-open'); modal.setAttribute('aria-hidden','false'); document.body.classList.add('modal-open'); }
87      });
88    });
89    document.querySelectorAll('[data-close-modal]').forEach(function(button) {
90      button.addEventListener('click', function() {
91        var modal = button.closest('.pc-modal');
92        if (modal) { modal.classList.remove('is-open'); modal.setAttribute('aria-hidden','true'); document.body.classList.remove('modal-open'); }
93      });
94    });
95    document.addEventListener('keydown', function(event) {
96      if (event.key === 'Escape') document.querySelectorAll('.pc-modal.is-open').forEach(function(modal) { modal.classList.remove('is-open'); modal.setAttribute('aria-hidden','true'); document.body.classList.remove('modal-open'); });
97    });
98    document.querySelectorAll('[data-newsletter-showcase]').forEach(function(section) {
99      function pad(n) { return String(n).padStart(2,'0'); }
100      function suffix(n) { var m=n%100; if(m>=11&&m<=13)return 'th'; return {1:'st',2:'nd',3:'rd'}[n%10]||'th'; }
101      function easterSunday(y) {
102        var a=y%19,b=Math.floor(y/100),c=y%100,d=Math.floor(b/4),e=b%4,f=Math.floor((b+8)/25),g=Math.floor((b-f+1)/3),h=(19*a+b-d-g+15)%30,i=Math.floor(c/4),k=c%4,l=(32+2*e+2*i-h-k)%7,m=Math.floor((a+11*h+22*l)/451),month=Math.floor((h+l-7*m+114)/31),day=((h+l-7*m+114)%31)+1;
103        return new Date(y,month-1,day);
104      }
105      function addDays(d,n) { var x=new Date(d); x.setDate(x.getDate()+n); return x; }
106      function adventStart(y) { var d=new Date(y,10,27); while(d.getDay()!==0)d.setDate(d.getDate()+1); return d; }
107      function sundayTitle(d) {
108        var y=d.getFullYear(), easter=easterSunday(y), adv=adventStart(y), palm=addDays(easter,-7), lent1=addDays(easter,-42), pentecost=addDays(easter,49), trinity=addDays(easter,56), corpus=addDays(easter,63), christKing=addDays(adv,-7);
109        var days=Math.round((d-new Date(y,0,1))/86400000);
110        if(d.getTime()===easter.getTime()) return 'Easter Sunday';
111        if(d.getTime()===palm.getTime()) return 'Palm Sunday';
112        if(d>=lent1 && d<palm) return (Math.round((d-lent1)/604800000)+1)+suffix(Math.round((d-lent1)/604800000)+1)+' Sunday of Lent';
113        if(d>easter && d<pentecost) { var n=Math.round((d-easter)/604800000)+1; return n+suffix(n)+' Sunday of Easter'; }
114        if(d.getTime()===pentecost.getTime()) return 'Pentecost Sunday';
115        if(d.getTime()===trinity.getTime()) return 'The Most Holy Trinity';
116        if(d.getTime()===corpus.getTime()) return 'Corpus Christi';
117        if(d.getTime()===christKing.getTime()) return 'Christ the King';
118        if(d>=adv) { var n=Math.floor((d-adv)/604800000)+1; return n+suffix(n)+' Sunday of Advent'; }
119        if(d.getMonth()===11 && d.getDate()>=25) return 'Christmas Season';
120        if(d>corpus && d<christKing) { var weeks=Math.round((christKing-d)/604800000); var n=34-weeks; return n+suffix(n)+' Sunday in Ordinary Time'; }
121        return 'Sunday Newsletter';
122      }
123      var availableDay=(section.dataset.availableDay||'Sunday').toLowerCase(), now=new Date(), today=new Date(now.getFullYear(),now.getMonth(),now.getDate()), day=today.getDay(), currentSunday=new Date(today);
124      if(day===6 && availableDay==='saturday') currentSunday.setDate(today.getDate()+1);
125      else if(day===0) currentSunday.setDate(today.getDate());
126      else currentSunday.setDate(today.getDate()-day);
127      var grid=section.querySelector('[data-newsletter-grid]'); if(!grid)return;
128      var cards=[];
129      for(var i=0;i<3;i++) {
130        var d=addDays(currentSunday,-7*i), code=pad(d.getDate())+pad(d.getMonth()+1)+String(d.getFullYear()).slice(-2), iso=d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate());
131        var dateText=d.getDate()+suffix(d.getDate())+' '+d.toLocaleDateString('en-GB',{month:'long',year:'numeric'}), title=sundayTitle(d), featured=i===0?' is-featured':'';
132        cards.push('<article class="pc-newsletter-card'+featured+'" data-newsletter-date="'+iso+'"><a class="pc-newsletter-image" href="pdf/'+code+'.pdf" target="_blank" rel="noopener">
132<img src="https://www.odyc.net/parishimages/'+code+'.jpg" alt="Newsletter - '+dateText+'" loading="lazy"><span class="pc-newsletter-open">Open Newsletter ↗</span></a><div class="pc-newsletter-copy"><div class="pc-newsletter-date">Sunday, '+dateText+'</div><h3>'+title+'</h3><a class="pc-newsletter-link" href="pdf/'+code+'.pdf" target="_blank" rel="noopener">Read newsletter <span>→</span></a>'+(i===0?'<a class="pc-newsletter-reading-link" href="sunday-readings.html">Sunday Mass Readings <span>→</span></a>':'')+'</div></article>');
133      }
134      grid.innerHTML=cards.join('');
135    });
136    window.addEventListener('message', function(event) {
137      var data = event.data || {};
138      if (data.type !== 'pc-embed-height' || !data.id) return;
139      document.querySelectorAll('.pc-isolated-embed').forEach(function(frame) {
140        if (frame.dataset.pcEmbedId === String(data.id)) {
141          var h = Math.max(80, Math.min(Number(data.height) || 0, 12000));
142          if (h) frame.style.height = h + 'px';
143        }
144      });
145    });
146  </script>
146
147  <style></style>
148</body>
149</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.