/* Trang danh sách game (/game, game/danhmuc.php) — trước đây là script nhúng * cuối danhmuc.php. Giữ nguyên logic; khác bản cũ: * - selector chỉ tìm trong nội dung trang (root), không lẫn sang trang khác; * - sự kiện cuộn của window, IntersectionObserver gỡ khi rời trang; * - kết quả AJAX / hẹn giờ về sau khi đã rời trang thì bỏ qua. */ WGNav.page('game-list', function (root, ctx) { var $ = window.jQuery; function $q(sel) { return $(root).find(sel); } function alive() { return ctx.alive; } // ================== CONFIG ================== // Sửa path API cho đúng dự án của bạn: var API = root.querySelector('#wgGameDir') ? root.querySelector('#wgGameDir').getAttribute('data-api') : '/game/list.php'; // Build A–Z nav (function buildAlpha(){ var nav = $q('#alphaNav'); nav.append('
Không có kết quả.
'); } } }) .fail(function(xhr){ console.error('AJAX all error', xhr.status, xhr.responseText); }) .always(function(){ if (!ctx.alive) return; state.loading = false; hideSpinner(); afterLoadTryScroll(); }); } // ===== Infinite scroll ===== var io = new IntersectionObserver(function(entries){ if (entries[0].isIntersecting && state.has_more && !state.loading) { loadGrouped(false); } }, { root:null, rootMargin:'800px 0px', threshold:0 }); io.observe(root.querySelector('#sentinel')); ctx.cleanup(function(){ io.disconnect(); }); // Fallback scroll function checkScroll(){ if (!state.has_more || state.loading) return; var nearBottom = $(window).scrollTop()+$(window).height() >= $(document).height()-600; if (nearBottom) loadGrouped(false); } ctx.on(window, 'scroll', debounce(checkScroll, 120), { passive: true }); // ===== Events ===== // Tìm kiếm (giữ IME cho TV): compositionend -> input $q('#searchInput') .on('compositionend', function(){ $(this).trigger('input'); }) .on('input keyup change', debounce(function(e){ var val = (e.target && e.target.value) ? e.target.value.trim() : ''; state.q = val; pendingLetter = null; setSearchMode(!!val, val); if ($q('#groupedList').offset()) { $('html,body').scrollTop( $q('#groupedList').offset().top - 90 ); } loadGrouped(true); }, 250)); // Nút "Xoá tìm kiếm" trong khối không có kết quả ctx.on(root, 'click', '#wgClearSearch', function(){ $q('#searchInput').val('').trigger('input').focus(); }); // Nút X trong ô tìm kiếm $q('#searchClear').on('click', function(){ $q('#searchInput').val('').trigger('input').focus(); }); // Hiện/ẩn nút X theo nội dung ô nhập $q('#searchInput').on('input', function(){ $(this).closest('.search-box').toggleClass('has-value', $(this).val().length > 0); }); // Phím Esc để xoá nhanh $q('#searchInput').on('keydown', function(e){ if (e.key === 'Escape' && $(this).val()){ $(this).val('').trigger('input'); } }); // Click A–Z: chỉ click khi đã enable $q('#alphaNav').on('click', 'a:not(.disabled)', function(e){ e.preventDefault(); var L=$(this).data('letter'); var letter=(L==='#')?'#':L; setLetterActive(letter); ensureLetterVisible(letter); }); // ===== DẢI GAME NỔI BẬT ===== function hotItem(c){ var img = c.icon || 'https://via.placeholder.com/74?text=?'; var name = esc(c.name); var url = '/game/' + (c.seo || c.id); return ''+ '