(() => { const labelSlots = () => { document.querySelectorAll('.AdvallyTag').forEach(el => { if (el.dataset.advDevLabeled) return; const classes = [...el.classList].filter(c => c !== 'AdvallyTag' && c !== 'v2'); el.textContent = 'ADVALLY TEST \u2014 ' + (classes.join(' ') || 'Ad Slot'); el.dataset.advDevLabeled = '1'; }); const placeholders = { '__ADVvideoPlaceholder': 'Video Player', '__ADVrecirculationPlaceholder': 'Recirculation Widget', '__ADVquizPlaceholder': 'Quiz Widget' }; Object.entries(placeholders).forEach(([id, label]) => { const el = document.getElementById(id); if (el && !el.dataset.advDevLabeled) { el.textContent = 'ADVALLY TEST \u2014 ' + label; el.dataset.advDevLabeled = '1'; } }); }; if (document.readyState === 'complete') { labelSlots(); } else { window.addEventListener('load', labelSlots); } if (typeof XF !== 'undefined' && typeof XF.on === 'function') { XF.on(document, 'ajax:complete', labelSlots); } })(); {{ phrase('advally_guest_adhesion_message') }} (() => { // rules.js defines advally.scanNew; guard every call so a slow // or blocked CDN load can't throw "advally.scanNew is not a function". var advScanNew = function() { if (typeof advally !== 'undefined' && typeof advally.scanNew === 'function') { advally.scanNew(); } }; if (XF && typeof XF.on == 'function') { // Handle AJAX-loaded content XF.on(document, 'ajax:complete', ({ data }) => { advScanNew(); }); // XF 2.3 fix: Re-scan after page fully loads to ensure // lazy loading is properly initialized for below-fold ads if (document.readyState === 'complete') { setTimeout(advScanNew, 100); } else { window.addEventListener('load', () => { setTimeout(advScanNew, 100); }); } } })(); (() => { if (!window.XF || !XF.History || typeof XF.History.push !== 'function') return; if (XF.History.push.__advallyLightboxGuarded) return; // idempotent, never double-wrap var origPush = XF.History.push; var isUndefinedUrl = function(url) { if (!url) return true; var s = String(url); return s === 'undefined' || /\/undefined$/.test(s); }; var guardedPush = function(state, title, url) { // XF core calls XF.History.push unconditionally when lbHistory is set; // it does NOT gate the pushState on a [data-fancybox-nw] toolbar button // existing. A default toolbar (zoom/fullscreen/close, no nw button) still // reaches this call, so this guard must not require nw either or it misses // exactly the configs where the bug is worst. nw is used best-effort for the // cosmetic href cleanup only. if (isUndefinedUrl(url)) { // Counter + console marker: separates "guard installed and suppressed a // bad url" from "guard never installed". Both states otherwise look // identical from outside. window.__advallyLightboxGuardFired = (window.__advallyLightboxGuardFired || 0) + 1; console.debug('[advally] lightbox history guard: skipped pushState for /undefined url', url); // Same defect writes "undefined" onto this same element's // href in the same code path, just before this call fires — // clean it up if a toolbar happens to be present. var nw = document.querySelector('.fancybox__toolbar [data-fancybox-nw]'); if (nw && nw.getAttribute('href') === 'undefined') { nw.removeAttribute('href'); } return; // skip the pushState — this is the fix } return origPush.call(this, state, title, url); }; guardedPush.__advallyLightboxGuarded = true; XF.History.push = guardedPush; })();
enableHeaderDesktop" data-adv-mobile="enableHeaderMobile">
enableHeaderDesktop" data-adv-mobile="enableHeaderMobile">
enableHeaderDesktop" data-adv-mobile="enableHeaderMobile">
{{ phrase('advally_guest_thread_first_message') }}
container_sidenav_above
container_sidenav_below
forum_overview_top
forum_overview_bottom
forum_view_above_node_list
forum_view_below_node_list
forum_view_above_thread_list
forum_view_below_stickies
forum_view_below_thread_list
thread_view_above_messages
thread_view_below_messages
post_below_content {{$post}}
post_above_content
{{ dump_simple($array) }}