(async function () { if (document.documentElement.hasAttribute('data-wf-item-slug')) return; var canon = document.querySelector('link[rel="canonical"]'); if (canon && /\/404$/.test(canon.getAttribute('href'))) return; var lds = [].slice.call(document.querySelectorAll('script[type="application/ld+json"]')); if (lds.some(function (s) { return s.textContent.indexOf('BreadcrumbList') > -1; })) return; var origin = location.origin; var seg = location.pathname.replace(/\/$/, '').split('/').filter(Boolean); if (!seg.length) return; var label = function (slug) { return slug.split('-').map(function (w) { return w.charAt(0).toUpperCase() + w.slice(1); }).join(' '); }; var findHub = async function (base) { var tries = [base, base + '/overview']; for (var i = 0; i < tries.length; i++) { try { var r = await fetch(tries[i], { method: 'HEAD', redirect: 'follow' }); if (r.ok) return r.url.split(/[?#]/)[0].replace(/\/$/, ''); } catch (e) {} } return null; }; var current = origin + '/' + seg.join('/'); var items = [{ name: 'Home', item: origin + '/' }]; var isHubPage = false; for (var i = 0; i < seg.length - 1; i++) { var hub = await findHub('/' + seg.slice(0, i + 1).join('/')); if (!hub) continue; items.push({ name: label(seg[i]), item: hub }); if (hub === current) { isHubPage = true; break; } } if (!isHubPage) items.push({ name: document.title.split('|')[0].trim(), item: current }); var s = document.createElement('script'); s.type = 'application/ld+json'; s.text = JSON.stringify({ '@context': 'https://schema.org', '@type': 'BreadcrumbList', 'itemListElement': items.map(function (it, n) { return { '@type': 'ListItem', 'position': n + 1, 'name': it.name, 'item': it.item }; }) }); document.head.appendChild(s); })();