(function () { var HOME_TITLE = 'Canadian firearms, read straight.'; var HOME_BODY = 'Precision, gear, handloading, and the policy file that actually affects licensed owners. The Dispatch is one email a week. Evidence over outrage, sent only when there is something worth sending.'; var HOME_BUTTON = 'Subscribe to The Dispatch'; var waitingSignup = null; var sentSignup = false; function onReady(fn) { if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', fn); else fn(); } function plausible(name, props) { if (typeof window.plausible !== 'function') return; window.plausible(name, props ? { props: props } : undefined); } function pagePath() { return location.pathname || '/'; } function campaignFromTarget(target) { var holder = target && target.closest ? target.closest('a[href],button,[data-members-form],.gh-cta,.ho-lead-magnet') : null; var href = holder && holder.getAttribute ? (holder.getAttribute('href') || holder.href || '') : ''; try { var url = href ? new URL(href, location.origin) : null; var campaign = url && url.searchParams.get('utm_campaign'); if (campaign) return campaign; } catch (error) {} if (holder && holder.getAttribute && holder.getAttribute('data-ho-campaign')) return holder.getAttribute('data-ho-campaign'); if (pagePath() === '/') return 'homepage-dispatch'; return 'dispatch'; } function leadTarget(target) { var el = target && target.closest ? target.closest('a[href],button,.gh-button') : null; if (!el) return null; var href = el.getAttribute ? (el.getAttribute('href') || el.href || '') : ''; if (/\/dispatch\/|\butm_medium=lead-magnet\b/i.test(href)) return el; if (el.closest && el.closest('.ho-lead-magnet,.gh-cta')) return el; return null; } function fireLeadClick(target) { var campaign = campaignFromTarget(target); try { sessionStorage.setItem('hoLeadCampaign', campaign); } catch (error) {} plausible('Lead Magnet CTA: Click', { page: pagePath(), campaign: campaign }); } function startSignup(target) { waitingSignup = { page: pagePath(), campaign: campaignFromTarget(target) || readLastCampaign() }; } function readLastCampaign() { try { return sessionStorage.getItem('hoLeadCampaign') || 'dispatch'; } catch (error) { return 'dispatch'; } } function completeSignup() { if (!waitingSignup || sentSignup) return; sentSignup = true; plausible('Dispatch Signup: Complete', { page: waitingSignup.page || pagePath(), campaign: waitingSignup.campaign || readLastCampaign() }); } function formLooksSuccessful(form) { if (!form) return false; var state = String(form.getAttribute('data-members-form') || form.className || ''); if (/success/i.test(state)) return true; var successNode = form.querySelector('[data-members-success],.gh-form-success,.success'); if (!successNode) return false; return successNode.offsetParent !== null || successNode.getAttribute('aria-hidden') !== 'true'; } function watchMemberForms() { document.addEventListener('click', function (event) { var target = leadTarget(event.target); if (target) fireLeadClick(target); }, true); document.addEventListener('submit', function (event) { if (event.target && event.target.matches && event.target.matches('[data-members-form]')) { startSignup(event.target); } }, true); if (!window.MutationObserver) return; var observer = new MutationObserver(function () { if (!waitingSignup) return; document.querySelectorAll('[data-members-form]').forEach(function (form) { if (formLooksSuccessful(form)) completeSignup(); }); }); observer.observe(document.documentElement, { attributes: true, childList: true, subtree: true }); } function patchNetworkCompletion() { if (window.fetch) { var originalFetch = window.fetch; window.fetch = function () { var request = arguments[0]; var requestUrl = typeof request === 'string' ? request : (request && request.url) || ''; return originalFetch.apply(this, arguments).then(function (response) { if (waitingSignup && response && response.ok && /\/members\/api\//.test(requestUrl)) completeSignup(); return response; }); }; } if (window.XMLHttpRequest && XMLHttpRequest.prototype.open && XMLHttpRequest.prototype.send) { var originalOpen = XMLHttpRequest.prototype.open; var originalSend = XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.open = function (method, url) { this.hoGrowthUrl = String(url || ''); return originalOpen.apply(this, arguments); }; XMLHttpRequest.prototype.send = function () { this.addEventListener('load', function () { if (waitingSignup && /\/members\/api\//.test(this.hoGrowthUrl || '') && this.status >= 200 && this.status < 400) completeSignup(); }); return originalSend.apply(this, arguments); }; } } function applyHomepageCapture() { if (pagePath() !== '/') return; var title = document.querySelector('.gh-cta-title'); var body = document.querySelector('.gh-cta-description'); var button = document.querySelector('.gh-cta .gh-button span span'); if (title) title.textContent = HOME_TITLE; if (body) body.textContent = HOME_BODY; if (button) button.textContent = HOME_BUTTON; } patchNetworkCompletion(); onReady(function () { applyHomepageCapture(); watchMemberForms(); }); }());