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&yardid=44&lastname=&firstname=&address=&month=&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&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's" loading="lazy"></div><span class="pc-connected-church-copy"><strong>St Michael'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's" loading="lazy"></div><span class="pc-connected-church-copy"><strong>St Mary'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's Church, Bocan" loading="lazy"></div><span class="pc-connected-church-copy"><strong>St Mary'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'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'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'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&output=embed" loading="lazy" referrerpolicy="no-referrer-when-downgrade" title="Map of St Michael's"></iframe></div><div class="pc-map-footer"><a class="pc-action-button" href="https://www.google.com/maps/search/?api=1&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'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'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'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&output=embed" loading="lazy" referrerpolicy="no-referrer-when-downgrade" title="Map of St Mary's"></iframe></div><div class="pc-map-footer"><a class="pc-action-button" href="https://www.google.com/maps/search/?api=1&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&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&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'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> & <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'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'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&output=embed" loading="lazy" referrerpolicy="no-referrer-when-downgrade" title="Map of St Mary's Church, Bocan"></iframe></div><div class="pc-map-footer"><a class="pc-action-button" href="https://www.google.com/maps/search/?api=1&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="<!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="https://www.odyc.net/p200/odyc/newscss.css"><style>html,body{margin:0;padding:0;background:transparent}*,*:before,*:after{box-sizing:border-box}#pc-isolated-root{width:100%;overflow:visible}</style></head><body><div id="pc-isolated-root"><script language="Javascript" src="https://theparishmessenger.com/xlaabsolutenm.aspx?z=819&amp;tag=DerryDioceseFrontNews"></script></div><script src="https://www.odyc.net/p200/odyc/js-news.js"></script><script>(function(){function report(){var h=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight,document.documentElement.offsetHeight,document.body.offsetHeight);parent.postMessage({type:'pc-embed-height',id:'79e863d7-20ee-43b1-80fa-026c52e21970',height:h},'*');}window.addEventListener('load',report);if(window.ResizeObserver){new ResizeObserver(report).observe(document.documentElement);}setTimeout(report,250);setTimeout(report,1000);setTimeout(report,2500);})();</script></body></html>" 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.