PageSourceSearch

https://toptrader.io/app/themes/ba-theme/public/build/entries/home-B34AnDyD.js

js toptrader.io collected 2026-10-09 22:41:33 UTC 30,182 bytes, 1 lines download raw bytes

1import{i as t}from"../assets/lazy-load-H3fTemXz.js";import{a as e,b as a}from"../assets/debug-utils-DPNoUJjN.js";import{t as o,i as n,a as r,b as c,c as s}from"../assets/helper-C6s7TZM4.js";import"./matchlist-DJOT6Ifs.js";import"../assets/vendor-axios-DGc3PeEL.js";import"../assets/vendor-mqtt-DUOv-3Io.js";import"../assets/decrypt-w2rEWcc-.js";import"../assets/vendor-pako-DZXWdWhw.js";const l=window.jQuery,i={"1H":"Hiệp 1","2H":"Hiệp 2",HT:"HT",FT:"Kết Thúc"};function d(t){return i[t]||t}let u,m=[],b=!1,h=[],f=!1,g=null,p=!1,y={},v=0,w=null,x=null,k=!1,_="football";const E={football:{},basketball:{}},L={content:!1,bbContent:!1,odds:!1,bbOdds:!1,score:!1,bbScore:!1};let S=!1;l(document).ready(async()=>{"football"===_?(dt?.(),H({delayFirstFetch:2e3})):(lt?.(),O({delayFirstFetch:2500})),window.addEventListener("sport:changed",F),document.addEventListener("ba:card-finished",t=>function(t,e){if(!t)return;if("featured"===t.dataset.accent)return;const a=t.closest("[class*='-matches-grid']");if(!a)return;const o=Array.from(a.classList).find(t=>t.endsWith("-matches-grid")),n=o?o.replace("-matches-grid",""):"",r=n.startsWith("bb-"),c=r?n.slice(3):n,s=parseInt(t.dataset.matchTime||"0",10),l=Math.floor(Date.now()/1e3);if("FT"===e&&s>0&&l-s>10800||("live"===c||"upcoming"===c||"hot"===c)){t.remove();const e=J[c]||c;document.querySelectorAll(`.${r?"bb-"+e:e}-count`).forEach(t=>{t.textContent=Math.max(0,(parseInt(t.textContent,10)||0)-1)})}else a.appendChild(t)}(t.detail.el,t.detail.statusName)),document.addEventListener("visibilitychange",V),function(){const t=l(".leagues-dropdown-desktop > button"),a=l(".leagues-dropdown-mobile > button");t.add(a).one("click",function(){b||async function(){if(!(await async function(){try{const t=await fetch("/app/uploads/match-content/update-content-live.json",{cache:"default"});if(!t.ok)return!1;const e=await t.json();return!(Math.floor(Date.now()/1e3)-(e?.updated_at||0)>=120||void 0===e.leagues||(K(e.leagues),0))}catch(t){return!1}}()))try{const t=await fetch(ajax_object.rest_url+"ba/v1/load-leagues",{method:"GET"});if(!t.ok)throw Error("Network response was not ok");const e=await t.json();e.success&&K(e.data||[])}catch(t){e("[loadLeagues] Error loading leagues:",t)}}().then(()=>b=!0)});const o=l(".bb-leagues-dropdown-desktop > button"),n=l(".bb-leagues-dropdown-mobile > button");o.add(n).one("click",function(){f||async function(){if(!(await async function(){try{const t=await fetch("/app/uploads/match-content/update-bb-content-live.json",{cache:"default"});if(!t.ok)return!1;const e=await t.json();return!(Math.floor(Date.now()/1e3)-(e?.updated_at||0)>=120||void 0===e.leagues||(U(e.leagues),0))}catch(t){return!1}}()))try{const t=await fetch(ajax_object.rest_url+"ba/v1/load-bb-leagues",{method:"GET"});if(!t.ok)throw Error("Network response was not ok");const e=await t.json();e.success&&U(e.data||[])}catch(t){e("[loadBBLeagues] Error:",t)}}().then(()=>f=!0)}),document.querySelectorAll(".tomorrow-tab").forEach(t=>{t.addEventListener("click",function(){tt(this.dataset.date)})}),document.querySelectorAll(".bb-tomorrow-tab").forEach(t=>{t.addEventListener("click",function(){et(this.dataset.date)})}),q.forEach(t=>{document.querySelectorAll(`[data-tabs-target="#${t}-content"]`).forEach(e=>{e.addEventListener("click",()=>{const e=document.getElementById(t+"-content");e&&Z(t,{revalidate:"true"===e.dataset.loaded})})})})}(),q.forEach(t=>{const e=document.getElementById(t+"-content");e&&!e.classList.contains("hidden")&&"false"===e.dataset.loaded&&Z(t)}),document.querySelectorAll("[data-tabs-target]").forEach(t=>{t.classList.contains("tomorrow-tab")||t.addEventListener("click",async function(){if(("live-tab"===this.id||"live-tab-mobile"===this.id)&&!k){if(k=!0,q.includes("live"))return;try{const t=await Q(0,x);t&&t.success&&(at(t.data.matches),ot(t.data.counts),await(dt?.()),await(ct?.()),"football"!==_||document.hidden||M())}catch(o){e("[Tab Refresh] Error refreshing matches on tab click:",o),k=!1}return}if(("bb-live-tab"===this.id||"bb-live-tab-mobile"===this.id)&&!p){p=!0;try{const t=await Q(0,g,"bb-live");if(t&&t.success&&void 0!==t.data?.cards_html){const e=document.querySelector(".bb-live-matches-grid");e&&(e.innerHTML=t.data.cards_html),void 0!==t.data.count&&l(".bb-live-count").text(t.data.count),await(lt?.()),await(it?.()),"basketball"!==_||document.hidden||B()}}catch(o){e("[BB Tab Refresh] Error refreshing basketball live tab:",o),p=!1}
1return}const t=this.id||"",a=Date.now();a-j<T||("football"===_&&I.has(t)?(j=a,dt?.(),ct?.()):"basketball"===_&&$.has(t)&&(j=a,lt?.(),it?.()))})}),l(".leagues-search-input").on("input",function(){var t;t=this.value,R(l(".leagues-list"),m.filter(e=>e.name.toLowerCase().includes(t.toLowerCase())).slice(0,100))}),l(document).on("click",".load-more-matches",async function(t){t.preventDefault();const e=l(this),a=e.data("tab");w=a,v+=20,e.prop("disabled",!0).html('<i class="fas fa-spinner fa-spin"></i> Loading...');try{const t=a.startsWith("bb-")?g:x,o=await Q(v,t,a);o&&o.success&&(l(`.${a}-matches-grid`).append(o.data.cards_html),!1===o.data.has_more&&e.parent().remove())}catch(o){}finally{e.prop("disabled",!1).text("Tải thêm các trận đấu")}}),document.querySelectorAll(".favorite-toggle").forEach(t=>{t.addEventListener("click",o)}),document.addEventListener("click",function(t){t.target.classList.contains("load-more-tomorrow")&&tt(document.querySelector(".tomorrow-tab").dataset.date,document.querySelectorAll(".tomorrow-matches-grid .match-card").length),t.target.classList.contains("load-more-bb-tomorrow")&&et(document.querySelector(".bb-tomorrow-tab").dataset.date,document.querySelectorAll(".bb-tomorrow-matches-grid > *").length)}),P(),z(),document.addEventListener("hotCompetitionFilter",function(t){const{leagueId:e,leagueName:a}=t.detail;l(".selected-league").text(a),X(e)})});const C=3e4,q=["live","upcoming","hot"],A=new Set,T=1e3;let j=0;const I=new Set(["live-tab","live-tab-mobile","hot-tab","hot-tab-mobile","commentator-tab","commentator-tab-mobile","today-tab","today-tab-mobile","upcoming-tab","upcoming-tab-mobile"]),$=new Set(["bb-live-tab","bb-live-tab-mobile","bb-hot-tab","bb-hot-tab-mobile","bb-commentator-tab","bb-commentator-tab-mobile","bb-today-tab","bb-today-tab-mobile","bb-upcoming-tab","bb-upcoming-tab-mobile"]);function M(){E.football.score&&clearInterval(E.football.score),E.football.score=setInterval(dt,C)}function B(){E.basketball.score&&clearInterval(E.basketball.score),E.basketball.score=setInterval(lt,C)}function H({delayFirstFetch:t=0}={}){E.football.boot||E.football.content||(t>0&&(E.football.boot=setTimeout(()=>{E.football.boot=null,ut()},t)),E.football.content=setInterval(ut,6e4),E.football.odds=setInterval(ct,1e4),M())}function D(){E.football.boot&&clearTimeout(E.football.boot),E.football.content&&clearInterval(E.football.content),E.football.odds&&clearInterval(E.football.odds),E.football.score&&clearInterval(E.football.score),E.football={}}function O({delayFirstFetch:t=0}={}){E.basketball.boot||E.basketball.content||(t>0&&(E.basketball.boot=setTimeout(()=>{E.basketball.boot=null,mt()},t)),E.basketball.content=setInterval(mt,6e4),E.basketball.odds=setInterval(it,1e4),B())}function N(){E.basketball.boot&&clearTimeout(E.basketball.boot),E.basketball.content&&clearInterval(E.basketball.content),E.basketball.odds&&clearInterval(E.basketball.odds),E.basketball.score&&clearInterval(E.basketball.score),E.basketball={}}async function F(t){const a=t?.detail?.sport;if(!a||a===_)return;const o=_;_=a,"football"===o?D():N(),"football"===a?k=!0:p=!0;try{"football"===a?await ut():await mt()}catch(n){e("[sport-switch] freshen failed:",n)}_===a&&("football"===a?H():O())}function V(){document.hidden?"football"===_?D():N():S||(S=!0,setTimeout(async()=>{if(S=!1,document.hidden)return;const t=_;try{"football"===t?await ut():await mt()}catch(a){return void e("[visibility] resume failed:",a)}_===t&&("football"===t?H():O())},250))}const W=()=>{document.querySelectorAll(".streamer-scroller").forEach(t=>{const e=t.querySelector(".streamer-scroll");if(!e)return;const a=t.querySelector(".streamer-arrow-left"),o=t.querySelector(".streamer-arrow-right"),n=t.querySelector(".streamer-fade-left"),r=t.querySelector(".streamer-fade-right"),c=(t,e)=>{t&&(t.style.opacity=e?"1":"0",t.style.pointerEvents=e?"auto":"none")},s=()=>{const t=e.scrollWidth-e.clientWidth,s=e.scrollLeft;c(a,s>4),c(n,s>4),c(o,s<t-4),c(r,s<t-4)};e.dataset.scrollerBound||(e.dataset.scrollerBound="1",e.addEventListener("scroll",s,{passive:!0}),a&&a.addEventListener("click",()=>e.scrollBy({left:.8*-e.clientWidth,behavior:"smooth"})),o&&o.addEventListener("click",()=>e.scrollBy({left:.8*e.clientWidth,behavior:"smooth"})),window.ResizeObserver?new ResizeObserver(s).observe(e):window.addEventListener("resize",s)),s()})},P=()=>{const t=l("#streamer-buttons");if(!t.length)return;W(),t.on("click","button",e=>{e.preventDefault();const a=l(e.currentTarget),o=a.data("streamer-id")||"all";t.find("button").removeClass("bg-gradient-red-shadow border-[#AC3A1C]").addClass("bg-dark-
1500 border-transparent"),a.removeClass("bg-dark-500 border-transparent").addClass("bg-gradient-red-shadow border-[#AC3A1C]");const n=l(".with-stream-matches-grid");"all"===o?n.find(".match-card").show():n.find(".match-card").each(function(){const t=l(this),e=t.data("streamer-ids")||[];t.toggle(e.includes(o))})});const e=t.find('button[data-streamer-id="all"]');e.length&&e.addClass("bg-gradient-red-shadow border-[#AC3A1C]").removeClass("bg-dark-500 border-transparent")},z=()=>{const t=l("#bb-streamer-buttons");if(!t.length)return;W(),t.on("click","button",e=>{e.preventDefault();const a=l(e.currentTarget),o=a.data("streamer-id")||"all";t.find("button").removeClass("bg-gradient-red-shadow border-[#AC3A1C]").addClass("bg-dark-500 border-transparent"),a.removeClass("bg-dark-500 border-transparent").addClass("bg-gradient-red-shadow border-[#AC3A1C]");const n=l(".bb-with-stream-matches-grid");"all"===o?n.find(".match-card").show():n.find(".match-card").each(function(){const t=l(this),e=t.data("streamer-ids")||[];t.toggle(e.includes(o))})});const e=t.find('button[data-streamer-id="all"]');e.length&&e.addClass("bg-gradient-red-shadow border-[#AC3A1C]").removeClass("bg-dark-500 border-transparent")},G=t=>[...new Set(l(t).map((t,e)=>l(e).data("match-id")).get())],J={all:"today","with-stream":"commentator"};function R(t,e){const a=document.createDocumentFragment();let o="";o+='\n    <a href="#" \n       class="league-list-item block py-2 px-4 sm:py-4 text-sm text-primary font-semibold"\n       data-league-id="all" data-league-name="Giải đấu">\n      <div class="flex items-center gap-2">\n        <span>All Leagues</span>\n      </div>\n    </a>\n  ',0===e.length?o+='\n      <div class="px-4 py-2 sm:py-4 text-sm text-gray-400 italic">\n        No leagues available\n      </div>\n    ':e.forEach(t=>{const e=t.name||"Unknown League";o+=`\n        <a href="#" \n           class="league-list-item block py-2 sm:py-4 px-4 text-sm text-white flex items-center justify-between font-medium group" \n           data-league-id="${t.uuid}" data-league-name="${e}">\n          <div class="flex items-center gap-2 w-64">\n            <img src="${t.logo||"https://via.placeholder.com/20"}" alt="${e}" class="w-5 h-5 rounded-full">\n            <span class="truncate group-hover:text-primary">${e}</span>\n          </div>\n          <span class="text-xs font-semibold bg-gradient-red-bright px-2 py-0.5 rounded-full">${t.match_count||0}</span>\n        </a>\n      `});const n=(new DOMParser).parseFromString(o,"text/html").body.children;for(;n.length>0;)a.appendChild(n[0]);t.empty().append(a)}function K(t){const e=l(".leagues-list");m=t||[],R(e,m),e.off("click",".league-list-item").on("click",".league-list-item",function(t){t.preventDefault();const e=l(this),a=e.data("league-id"),o=e.data("league-name");l(".selected-league").text(o),X("all"===a?null:a)})}function U(a){const o=l(".bb-leagues-list");h=a||[],R(o,h),o.off("click",".league-list-item").on("click",".league-list-item",function(a){a.preventDefault();const o=l(this).data("league-id"),n=l(this).data("league-name");l(".bb-selected-league").text(n),async function(a=null){g=a;const o=[{tab:"bb-live",containerId:"bb-live-content",badge:"bb-live-count"},{tab:"bb-upcoming",containerId:"bb-upcoming-content",badge:"bb-upcoming-count"},{tab:"bb-hot",containerId:"bb-hot-content",badge:"bb-hot-count"},{tab:"bb-with-stream",containerId:"bb-commentator-content",badge:"bb-commentator-count"},{tab:"bb-all",containerId:"bb-today-content",badge:"bb-today-count"}];o.forEach(({tab:t,containerId:e})=>{const a=document.getElementById(e);a&&(a.classList.add("opacity-50"),a.innerHTML=`<div class="grid grid-cols-1 sm:grid-cols-2 gap-4 ${t}-matches-grid"><div class="col-span-full text-center py-4">Loading trận đấu...</div></div>`)});try{const t=await Promise.all(o.map(({tab:t})=>Q(0,a,t)));o.forEach(({tab:e,badge:a},o)=>{const n=document.querySelector(`.${e}-matches-grid`),r=n?.closest(".match-container");if(!r)return;const c=t[o];n.innerHTML=c?.success&&void 0!==c.data?.cards_html?c.data.cards_html:"";const s=c?.data?.count??0;l("."+a).text(s),c?.data?.has_more||r.querySelector(".load-more-matches")?.parentElement?.remove()}),await(lt?.()),await(it?.()),z?.(),"basketball"!==_||document.hidden||B()}catch(n){e("[filterBBMatchesByLeague] Error:",n),o.forEach(({containerId:t})=>{const e=document.getElementById(t);e&&(e.innerHTML='<div class="text-center py-4 text-red-400">Lỗi khi tải. Vui lòng thử lại.</div>')})}finally{o.forEach(({containerId:t})=>{document.getElementById(t)?.classList.remove("opacity-50")}),t()}}
1("all"===o?null:o)})}async function Q(t=0,e=null,a=null,o=null){const n={date:o,league:e,offset:t,tab:a,initial_load:!1};try{const t=await fetch(ajax_object.rest_url+"ba/v1/filter-matches",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!t.ok)throw Error("Network response was not ok");return await t.json()}catch(r){throw r}}async function X(e=null){x=e,v=0,q.forEach(t=>{const e=document.getElementById(t+"-content");e&&(e.dataset.loaded="false")}),l(".match-container").addClass("opacity-50");const a=l('<div class="text-center py-4">Loading trận đấu. .. </div>');l(".match-container").html(a);try{const t=await Q(v,e);if(t.success){if(at(t.data.matches),await(dt?.()),await(ct?.()),"football"!==_||document.hidden||M(),t.data.counts)if(ot(t.data.counts),t.data.counts.all>0)!function(t){document.querySelectorAll(`[data-tabs-target="#${t}-content"]`).forEach(t=>{const e=new Event("click",{bubbles:!0,cancelable:!0});t.dispatchEvent(e),t.scrollIntoViewIfNeeded?t.scrollIntoViewIfNeeded({behavior:"smooth",block:"nearest"}):t.scrollIntoView({behavior:"smooth",block:"nearest"})});const e=document.getElementById(t+"-content");if(e){const t=()=>{e.removeEventListener("shown.bs.tab",t)};e.addEventListener("shown.bs.tab",t)}}("today");else{const t='\n            <div class="text-center py-4 text-gray-light">\n              <p>Không có trận đấu có sẵn cho giải đấu được chọn.</p>\n            </div>\n          ';l(".match-container").html(t)}}else{const t=l('<div class="text-center py-4 text-red-400">Không thể tải trận đấu. Vui lòng thử lại.</div>');l(".match-container").html(t)}}catch(o){const t=l('<div class="text-center py-4 text-red-400">Lỗi khi tải kết hợp. Vui lòng thử lại.</div>');l(".match-container").html(t)}finally{l(".match-container").removeClass("opacity-50"),t()}}l(".bb-leagues-search-input").on("input",function(){const t=this.value.toLowerCase(),e=h.filter(e=>e.name.toLowerCase().includes(t));R(l(".bb-leagues-list"),e.slice(0,100))});const Y={live:"live_content",upcoming:"upcoming_content",hot:"hot_content"};async function Z(e,{revalidate:a=!1}={}){const o=document.getElementById(e+"-content");if(o&&!A.has(e)){A.add(e),a||(o.innerHTML=`<div class="grid grid-cols-1 sm:grid-cols-2 gap-4 ${e}-matches-grid"><div class="col-span-full text-center py-4">Đang tải trận đấu...</div></div>`);try{if(null===x&&await async function(e){const a=Y[e];if(!a)return!1;const o=document.getElementById(e+"-content");if(!o)return!1;try{const n=await fetch("/app/uploads/match-content/update-content-live.json",{cache:"default"});if(!n.ok)return!1;const r=await n.json();if(Math.floor(Date.now()/1e3)-(r?.updated_at||0)>=120)return!1;const c=r[a];return void 0!==c&&(l(`#${e}-content`).html(c),o.dataset.loaded="true",r.counts&&void 0!==r.counts[e]&&document.querySelectorAll(`.${e}-count`).forEach(t=>{t.textContent=r.counts[e]}),v=0,w=e,await(dt?.()),await(ct?.()),t(),"football"!==_||document.hidden||M(),!0)}catch(n){return!1}}(e))return;const n=await Q(0,x,e);if(n&&n.success&&n.data&&void 0!==n.data.cards_html){let a=o.querySelector(`.${e}-matches-grid`);if(a||(o.innerHTML=`<div class="grid grid-cols-1 sm:grid-cols-2 gap-4 ${e}-matches-grid"></div>`,a=o.querySelector(`.${e}-matches-grid`)),a.innerHTML=n.data.cards_html,o.dataset.loaded="true",void 0!==n.data.count&&document.querySelectorAll(`.${e}-count`).forEach(t=>{t.textContent=n.data.count}),v=0,w=e,o.querySelector(".load-more-matches")?.parentElement?.remove(),n.data.has_more){const t=document.createElement("div");t.className="flex justify-center items-center py-5 gap-1",t.innerHTML=`<button class="load-more-matches px-6 py-2 rounded-full inset-ring inset-ring-gray-500/70 text-gray-400 cursor-pointer hover:bg-gray-700 hover:text-white transition-colors text-base font-normal" data-tab="${e}">Tải thêm các trận đấu</button>`,o.appendChild(t)}await(dt?.()),await(ct?.()),t(),"football"!==_||document.hidden||M()}else if(!a){const t=o.querySelector(`.${e}-matches-grid`);t&&(t.innerHTML='<div class="col-span-full text-center py-4 text-red-400">Lỗi khi tải. Vui lòng thử lại.</div>'),o.dataset.loaded="false"}}catch(n){if(!a){const t=o.querySelector(`.${e}-matches-grid`);t&&(t.innerHTML='<div class="col-span-full text-center py-4 text-red-400">Lỗi khi tải. Vui lòng thử lại.</div>'),o.dataset.loaded="false"}}finally{A.delete(e)}}}async function tt(e,a=0){const o=document.querySelector(".tomorrow-matches-grid"),n=document.querySelector(".load-more-tomorrow-container");if(0!==a||!(await async function(e){const a=document.querySelector(".tomorrow-matches-grid"),o=document.querySelector(".load-more-tomorrow-container");if(!a)return!1;try{const n=await fetch("/app/uploads/match-content/update-content-live.json",{cache:"default"});if(!n.ok)return!1;const r=await n.json();if(Math.floor(Date.now()/1e3)-(r?.updated_at||0)>=120)return!1;if(r.tomorrow_date!==e)return!1;if(void 0===r.tomorrow_cards)return!1;a.innerHTML=r.tomorrow_cards||"";const c=r.tomorrow_count||0;return document.querySelectorAll(".tomorrow-count").forEach(t=>{t.textContent=c}),o&&(o.style.display=c>20?"flex":"none"),t(),!0}catch(n){return!1}}(e))){0===a&&(o.innerHTML='<div class="col-span-2 text-center py-4">Đang tải...</div>');try{const t=await Q(a,null,"all",e);if(t.success){0===a?o.innerHTML=t.data.cards_html:o.insertAdjacentHTML("beforeend",t.data.cards_html);const e=t.data.count||0;document.querySelectorAll(".tomorrow-count").forEach(t=>{t.textContent=e}),n.style.display=t.data.has_more?"flex":"none"}}catch(r){0===a&&(o.innerHTML='<div class="col-span-2 text-center py-4 text-red-500">Đã xảy ra lỗi khi tải dữ liệu</div>')}}}async function et(e,a=0){const o=document.querySelector(".bb-tomorrow-matches-grid"),n=document.querySelector(".load-more-bb-tomorrow-container");if(o&&(0!==a||!(await async function(e){const a=document.querySelector(".bb-tomorrow-matches-grid"),o=document.querySelector(".load-more-bb-tomorrow-container");if(!a)return!1;try{const n=await fetch("/app/uploads/match-content/update-bb-content-live.json",{cache:"default"});if(!n.ok)return!1;const r=await n.json();if(Math.floor(Date.now()/1e3)-(r?.updated_at||0)>=120)return!1;if(r.tomorrow_date!==e)return!1;if(void 0===r.tomorrow_cards)return!1;a.innerHTML=r.tomorrow_cards||"";const c=r.tomorrow_count||0;return document.querySelectorAll(".bb-tomorrow-count").forEach(t=>{t.textContent=c}),o&&(o.style.display=c>20?"flex":"none"),t(),!0}catch(n){return!1}}(e)))){0===a&&(o.innerHTML='<div class="col-span-2 text-center py-4">Đang tải...</div>');try{const r=await Q(a,null,"bb-all",e);if(r&&r.success){0===a?o.innerHTML=r.data.cards_html||"":o.insertAdjacentHTML("beforeend",r.data.cards_html||"");const e=r.data.count||0;document.querySelectorAll(".bb-tomorrow-count").forEach(t=>{t.textContent=e}),n&&(n.style.display=r.data.has_more?"flex":"none"),t()}}catch(r){0===a&&(o.innerHTML='<div class="col-span-2 text-center py-4 text-red-500">Đã xảy ra lỗi khi tải dữ liệu</div>')}}}function at(e){if("football"!==_)return;const a=(t,e)=>{if(void 0===e)return;const a=document.getElementById(t);a&&"false"===a.dataset.loaded||l("#"+t).html(e)};a("live-content",e.live),a("upcoming-content",e.upcoming),a("hot-content",e.hot),a("commentator-content",e["with-stream"]),a("today-content",e.all),t(),l(".favorite-toggle").off("click").on("click",o)}function ot(t){void 0!==t.live&&l(".live-count").text(t.live),void 0!==t.upcoming&&l(".upcoming-count").text(t.upcoming),void 0!==t.hot&&l(".hot-count").text(t.hot),void 0!==t["with-stream"]&&l(".commentator-count").text(t["with-stream"]),void 0!==t.all&&l(".today-count").text(t.all)}window.loadMatchModal=async function(t){if(!t)return;
1const e=t.dataset.matchId;if(!e)return;const a=t.querySelector(".modal-content");if(a)try{const t=await fetch(`/app/uploads/match-modals/${e}.html`,{cache:"default"});if(t.ok){const e=await t.text();a.innerHTML=e,window.Alpine&&"function"==typeof window.Alpine.initTree&&window.Alpine.initTree(a)}else a.innerHTML='<div class="p-6 text-center text-gray-400 text-xs">Match details not available.</div>'}catch(o){t.dataset.modalLoaded=""}};const nt=async t=>{try{const e=await fetch("/app/uploads/livescores/"+t,{cache:"default"});return e.ok?await e.json():null}catch(a){return e(`[live-feed] fetch ${t} failed:`,a),null}},rt=async t=>{const e="undefined"!=typeof window&&window.ajax_object||{},a=(e.matchApiBase||"").replace(/\/+$/,""),o="1"===(0===t.indexOf("bb-")?e.bbLiveDataViaApi:e.liveDataViaApi),n=Number(e.liveDataMaxStale||75),r=t+".json";if(!o||!a)return nt(r);try{const e=await fetch(`${a}/v1/${t}`);if(e.ok){const t=await e.json();if(Math.floor(Date.now()/1e3)-(Number(t&&t.updated_at)||0)<=n)return t}}catch(c){}return nt(r)},ct=async()=>{if(!L.odds){L.odds=!0;try{const t=G('.bals-live-match:not([data-sport="basketball"])');if(!t.length)return void a("[Live Odds] No live matches found to update odds.");u&&clearTimeout(u),u=requestIdleCallback(async()=>{try{const a=await rt("live-odds");if("football"!==_)return;const o=a?.live_odds;if(!Array.isArray(o)||!o.length)return;const n=[];o.forEach(a=>{const o=a.match_id;if(!t.includes(o))return;let r;try{r=JSON.parse(a.odds)}catch(s){return void e(`[Live Odds] Invalid odds JSON for match ${o}:`,s)}const c=document.querySelector(`.bals-live-match[data-match-id="${o}"] .bals-odds`);c&&r&&n.push(()=>st(o,l(c),r))}),requestAnimationFrame(()=>{n.forEach(t=>t())})}catch(a){e("[Live Odds] Error updating live odds:",a)}},{timeout:1e3})}catch(t){e("[Live Odds] Error in updateLiveOdds:",t)}finally{L.odds=!1}}},st=(t,e,a)=>{e.empty();const o=y[t]||{};Object.entries(a).forEach(([t,a])=>{if(!["asia","eu"].includes(t)||!a.length)return;const n=l("<div>",{class:"grid grid-cols-3 gap-0.5 sm:gap-x-2 text-[10px] sm:text-[11px] leading-tight"});a.forEach((e,a)=>{const r=o[t]?.[a],c=parseFloat(e),s=parseFloat(r),i=l("<div>",{class:"text-gray-light whitespace-nowrap overflow-hidden text-ellipsis",text:e});i.removeClass("text-primary text-red-500 text-gray-light"),i.addClass(isNaN(c)||isNaN(s)?"text-gray-light":c>s?"text-primary":c<s?"text-red-500":"text-gray-light"),n.append(i)}),e.append(n)}),y[t]=structuredClone(a)},lt=async()=>{if(L.bbScore)return;const t=document.querySelectorAll('.match-card[data-match-id][data-sport="basketball"]');if(!t.length)return;const a=Math.floor(Date.now()/1e3);let o=!1;if(t.forEach(t=>{if(t.classList.contains("bals-live-match")||t.dataset.accent)o=!0;else if(t.classList.contains("bals-upcoming-match")){const e=parseInt(t.dataset.matchTime||"0",10);e&&e<=a&&(o=!0)}}),o){L.bbScore=!0;try{const t=await rt("bb-live-data");if("basketball"!==_)return;const e=t?.bb_live_data;if(!Array.isArray(e)||!e.length)return;e.forEach(t=>{document.querySelectorAll(`.match-card[data-match-id="${t.match_id}"][data-sport="basketball"]`).forEach(e=>{const a=n(e);r(e,t.status_name),c(e,t.status_name,a);const o=e.querySelector(".bals-home-score"),s=e.querySelector(".bals-away-score"),l=e.querySelector(".bals-status-name"),i=e.querySelector(".bals-elapsed-time");if(o&&(o.textContent=t.home_score),s&&(s.textContent=t.away_score),l&&t.status_name&&(l.textContent=d(t.status_name)),i&&t.elapsed_time&&(i.textContent=t.elapsed_time),o&&s){const e=Number(t.home_score),a=Number(t.away_score);o.classList.toggle("bg-gradient-red-bright",e>a),s.classList.toggle("bg-gradient-red-bright",a>e)}})})}catch(s){e("[BB Live Data] Error:",s)}finally{L.bbScore=!1}}},it=async()=>{if(!L.bbOdds){L.bbOdds=!0;try{const t=G('.bals-live-match[data-sport="basketball"]');if(!t.length)return;const a=await rt("bb-live-odds");if("basketball"!==_)return;const o=a?.bb_live_odds;if(!Array.isArray(o)||!o.length)return;requestAnimationFrame(()=>{o.forEach(a=>{if(!t.includes(a.match_id))return;let o;try{o=JSON.parse(a.odds)}catch(r){return void e(`[BB Live Odds] Invalid odds JSON for match ${a.match_id}:`,r)}const n=document.querySelector(`.bals-live-match[data-sport="basketball"][data-match-id="${a.match_id}"] .bals-odds`);n&&o&&st(a.match_id,l(n),o)})})}catch(t){e("[BB Live Odds] Error:",t)}finally{L.bbOdds=!1}}},dt=async()=>
1{if(L.score)return;const t=document.querySelectorAll('.match-card[data-match-id]:not([data-sport="basketball"])');if(!t.length)return;const a=Math.floor(Date.now()/1e3);let o=!1;if(t.forEach(t=>{if(t.classList.contains("bals-live-match")||t.dataset.accent)o=!0;else if(t.classList.contains("bals-upcoming-match")){const e=parseInt(t.dataset.matchTime||"0",10);e&&e<=a&&(o=!0)}}),o){L.score=!0;try{const t=await rt("live-data");if("football"!==_)return;const e=t?.live_data;if(!Array.isArray(e)||!e.length)return;e.forEach(t=>{document.querySelectorAll(`.match-card[data-match-id="${t.match_id}"]:not([data-sport="basketball"])`).forEach(e=>((t,e)=>{const a=n(e[0]);r(e[0],t.status_name),c(e[0],t.status_name,a),e.find(".bals-home-team-name").text(t.home_team_name),e.find(".bals-away-team-name").text(t.away_team_name);const o=s(t.home_score),l=s(t.away_score),i=t.home_score?.[6]??0,u=t.away_score?.[6]??0,m=e.find(".bals-home-score"),b=e.find(".bals-away-score");m.length&&m.text(o),b.length&&b.text(l),m.toggleClass("bg-gradient-red-bright",o>l),b.toggleClass("bg-gradient-red-bright",l>o);const h=e.find(".bals-status-name"),f=e.find(".bals-elapsed-time");h.length&&t.status_name&&h.text(d(t.status_name)),f.length&&t.elapsed_time&&f.text(t.elapsed_time);const g=t.home_score?.[1]??0,p=t.away_score?.[1]??0,y=t.home_score?.[4]??0,v=t.away_score?.[4]??0,w=t.home_score?.[3]??0,x=t.away_score?.[3]??0,k=e.find(".bals-ht-score"),_=e.find(".bals-corners"),E=e.find(".bals-yellow-cards");k.length&&k.text(`${g}-${p}`),_.length&&_.text(`${y}-${v}`),E.length&&E.text(`${w}-${x}`);const L=e.find(".bals-penalty-note");L.length&&(i>0||u>0?(L.text(`(Phạt súng: ${i} - ${u})`),L.show()):L.hide())})(t,l(e)))})}catch(i){e("[Live Data] Error fetching live data:",i)}finally{L.score=!1}}},ut=async()=>{if(!L.content){L.content=!0;try{const e=k?"live":"initial";let a=null;try{const t=await fetch(`/app/uploads/match-content/update-content-${e}.json`,{cache:"default"});if(t.ok){const e=await t.json();Math.floor(Date.now()/1e3)-(e?.updated_at||0)<120&&(a=e)}}catch(t){}if(!a){const t=`${ajax_object.rest_url}ba/v1/update-content${k?"?initial_load=false":""}`,e=await fetch(t,{method:"GET"});if(!e.ok)throw Error("HTTP error! status: "+e.status);a=await e.json()}if("football"!==_)return;at({live:a.live_content,upcoming:a.upcoming_content,hot:a.hot_content,"with-stream":a.commentator_content,all:a.today_content}),ot(a.counts),void 0!==a.tomorrow_count&&document.querySelectorAll(".tomorrow-count").forEach(t=>{t.textContent=a.tomorrow_count}),await(dt?.()),await(ct?.()),await(P?.()),"football"!==_||document.hidden||M()}catch(a){e("[updateContent] Content Update Error:",{message:a.message,stack:a.stack,timestamp:(new Date).toISOString()})}finally{L.content=!1}}},mt=async()=>{if(!L.bbContent){L.bbContent=!0;try{const e=p?"live":"initial";let c=null;try{const t=await fetch(`/app/uploads/match-content/update-bb-content-${e}.json`,{cache:"default"});if(t.ok){const e=await t.json();Math.floor(Date.now()/1e3)-(e?.updated_at||0)<120&&(c=e)}}catch(r){}if(!c){const t=`${ajax_object.rest_url}ba/v1/update-bb-content${p?"?initial_load=false":""}`,e=await fetch(t,{method:"GET"});if(!e.ok)throw Error("HTTP error! status: "+e.status);c=await e.json()}if("basketball"!==_)return;n={live:c.live_content,upcoming:c.upcoming_content,hot:c.hot_content,"with-stream":c.commentator_content,all:c.today_content,tomorrow:c.tomorrow_content},"basketball"===_&&(void 0!==n.live&&l("#bb-live-content").html(n.live),void 0!==n.upcoming&&l("#bb-upcoming-content").html(n.upcoming),void 0!==n.hot&&l("#bb-hot-content").html(n.hot),void 0!==n["with-stream"]&&l("#bb-commentator-content").html(n["with-stream"]),void 0!==n.all&&l("#bb-today-content").html(n.all),t(),l(".favorite-toggle").off("click").on("click",o)),void 0!==(a=c.counts||{}).live&&l(".bb-live-count").text(a.live),void 0!==a.upcoming&&l(".bb-upcoming-count").text(a.upcoming),void 0!==a.hot&&l(".bb-hot-count").text(a.hot),void 0!==a["with-stream"]&&l(".bb-commentator-count").text(a["with-stream"]),void 0!==a.all&&l(".bb-today-count").text(a.all),z?.(),await(lt?.()),await(it?.()),"basketball"!==_||document.hidden||B()}catch(c){e("[updateBBContent] Basketball content update error:",{message:c.message,stack:c.stack,timestamp:(new Date).toISOString()})}finally{L.bbContent=!1}var a,n}};

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.