1 2( function () { 3 'use strict'; 4 5 function qs( s, r ) { return ( r || document ).querySelector( s ); } 6 function qsa( s, r ) { return Array.prototype.slice.call( ( r || document ).querySelectorAll( s ) ); } 7 8 document.addEventListener( 'DOMContentLoaded', function () { 9 10 qsa( '[data-jala-datepick]' ).forEach( function ( inp ) { 11 12 var openPicker = function () { 13 if ( typeof inp.showPicker === 'function' ) { 14 try { inp.showPicker(); } catch ( err ) {} 15 } 16 }; 17 inp.addEventListener( 'click', openPicker ); 18 inp.addEventListener( 'focus', openPicker ); 19 inp.addEventListener( 'change', function () { 20 var d = inp.value; 21 if ( ! /^\d{4}-\d{2}-\d{2}$/.test( d ) ) { return; } 22 var base = inp.getAttribute( 'data-base' ) || location.pathname; 23 var sport = inp.getAttribute( 'data-sport' ) || ''; 24 var url = base + ( base.indexOf( '?' ) > -1 ? '&' : '?' ) + 'date=' + encodeURIComponent( d ); 25 if ( sport ) { url += '&sport=' + encodeURIComponent( sport ); } 26 location.href = url; 27 } ); 28 } ); 29 30 qsa( '[data-jala-comp-select]' ).forEach( function ( sel ) { 31 sel.addEventListener( 'change', function () { 32 var base = sel.getAttribute( 'data-base' ) || location.pathname; 33 var param = sel.getAttribute( 'data-param' ) || 'comp'; 34 var sport = sel.getAttribute( 'data-sport' ) || ''; 35 var extra = sel.getAttribute( 'data-extra' ) || ''; 36 var url = base + ( base.indexOf( '?' ) > -1 ? '&' : '?' ) + param + '=' + encodeURIComponent( sel.value ); 37 if ( sport ) { url += '&sport=' + encodeURIComponent( sport ); } 38 if ( extra ) { url += '&' + extra; } 39 location.href = url; 40 } ); 41 } ); 42 43 qsa( '[data-jala-combo]' ).forEach( function ( combo ) { 44 var toggle = qs( '[data-jala-combo-toggle]', combo ); 45 var panel = qs( '[data-jala-combo-panel]', combo ); 46 var search = qs( '[data-jala-combo-search]', combo ); 47 var items = qsa( '[data-name]', combo ); 48 if ( ! toggle || ! panel ) { return; } 49 toggle.addEventListener( 'click', function ( e ) { 50 e.stopPropagation(); 51 var open = panel.classList.toggle( 'hidden' ) === false; 52 toggle.setAttribute( 'aria-expanded', open ? 'true' : 'false' ); 53 if ( open && search ) { search.value = ''; items.forEach( function ( i ) { i.style.display = ''; } ); search.focus(); } 54 } ); 55 if ( search ) { 56 search.addEventListener( 'input', function () { 57 var q = search.value.toLowerCase().trim(); 58 items.forEach( function ( i ) { 59 i.style.display = ( ! q || i.getAttribute( 'data-name' ).indexOf( q ) > -1 ) ? '' : 'none'; 60 } ); 61 } ); 62 search.addEventListener( 'click', function ( e ) { e.stopPropagation(); } ); 63 } 64 document.addEventListener( 'click', function ( e ) { 65 if ( ! combo.contains( e.target ) ) { panel.classList.add( 'hidden' ); toggle.setAttribute( 'aria-expanded', 'false' ); } 66 } ); 67 } ); 68 69 var lw = qs( '[data-jala-league]' ); 70 if ( lw ) { 71 var toggle = qs( '[data-jala-league-toggle]', lw ); 72 var menu = qs( '[data-jala-league-menu]', lw ); 73 var label = qs( '[data-jala-league-label]', lw ); 74 if ( toggle && menu ) { 75 toggle.addEventListener( 'click', function ( e ) { e.stopPropagation(); menu.classList.toggle( 'hidden' ); } ); 76 document.addEventListener( 'click', function ( e ) { if ( ! lw.contains( e.target ) ) { menu.classList.add( 'hidden' ); } } ); 77 } 78 qsa( '[data-jala-league-opt]', lw ).forEach( function ( opt ) { 79 opt.addEventListener( 'click', function () { 80 var want = opt.getAttribute( 'data-jala-league-opt' ); 81 if ( label ) { label.textContent = opt.textContent.trim(); } 82 if ( menu ) { menu.classList.add( 'hidden' ); } 83 qsa( '[data-ls-id][data-comp]' ).forEach( function ( card ) { 84 var show = ( ! want ) || ( card.getAttribute( 'data-comp' ) === want ); 85 card.style.display = show ? '' : 'none'; 86 } ); 87 88 qsa( '[data-jala-group]' ).forEach( function ( g ) { 89 var any = qsa( '[data-ls-id]', g ).some( function ( c ) { return c.style.display !== 'none'; } ); 90 g.style.display = any ? '' : 'none'; 91 } ); 92 } ); 93 } ); 94 } 95 96 qsa( '[data-jala-pop-league]' ).forEach( function ( pbtn ) { 97 pbtn.addEventListener( 'click', function () { 98 var want = pbtn.getAttribute( 'data-jala-pop-league' ); 99 qsa( '[data-ls-id][data-comp]' ).forEach( function ( card ) { 100 card.style.display = ( ! want || card.getAttribute( 'data-comp' ) === want ) ? '' : 'none'; 101 } ); 102 qsa( '[data-jala-group]' ).forEach( function ( g ) { 103 var any = qsa( '[data-ls-id]', g ).some( function ( c ) { return c.style.display !== 'none'; } ); 104 g.style.display = any ? '' : 'none'; 105 } ); 106 var ll = qs( '[data-jala-league-label]' ); 107 if ( ll ) { ll.textContent = pbtn.getAttribute( 'title' ) || want; } 108 var top = qs( '[data-jala-match-wrap]' ); 109 if ( top && top.scrollIntoView ) { top.scrollIntoView( { behavior: 'smooth', block: 'start' } ); } 110 } ); 111 } ); 112 113 qsa( '[data-jala-acc-toggle]' ).forEach( function ( btn ) { 114 btn.addEventListener( 'click', function () { 115 var acc = btn.closest( '[data-jala-acc]' ); 116 if ( ! acc ) { return; } 117 var body = qs( '[data-jala-acc-body]', acc ); 118 if ( ! body ) { return; } 119 var hidden = body.classList.toggle( 'hidden' ); 120 var icon = qs( 'svg', btn ); 121 if ( icon ) { icon.style.transform = hidden ? 'rotate(-90deg)' : ''; } 122 } ); 123 } ); 124 125 var tocNav = qs( '[data-jala-toc]' ); 126 if ( tocNav ) { 127 var content = qs( '[data-jala-content]' ); 128 var heads = content ? qsa( 'h2, h3', content ).filter( function ( h ) { return h.textContent.trim(); } ) : []; 129 if ( heads.length < 2 ) { 130 var grid = qs( '[data-jala-toc-grid]' ); 131 var wrap = qs( '[data-jala-toc-wrap]' ); 132 if ( wrap ) { wrap.style.display = 'none'; } 133 if ( grid ) { grid.style.gridTemplateColumns = '1fr'; } 134 } else { 135 heads.forEach( function ( h, i ) { 136 if ( ! h.id ) { h.id = 'jala-h-' + i; } 137 var a = document.createElement( 'a' ); 138 a.href = '#' + h.id; 139 a.className = 'flex items-center gap-3 text-left px-3 py-2.5 rounded-lg border border-transparent text-[#A3A3A3] hover:text-[#E5E5E5] hover:bg-white/5 text-sm transition-colors'; 140 var dot = document.createElement( 'span' ); 141 dot.className = 'w-1.5 h-1.5 rounded-full bg-[#525252] shrink-0'; 142 var t = document.createElement( 'span' ); 143 t.className = 'truncate'; 144 t.textContent = ( i + 1 ) + '. ' + h.textContent.trim(); 145 a.appendChild( dot ); 146 a.appendChild( t ); 147 a.addEventListener( 'click', function ( e ) { 148 e.preventDefault(); 149 h.scrollIntoView( { behavior: 'smooth', block: 'start' } ); 150 qsa( 'a', tocNav ).forEach( function ( x ) { x.className = 'flex items-center gap-3 text-left px-3 py-2.5 rounded-lg border border-transparent text-[#A3A3A3] hover:text-[#E5E5E5] hover:bg-white/5 text-sm transition-colors'; } ); 151 a.className = 'flex items-center gap-3 text-left px-3 py-2.5 rounded-lg bg-[#FACC15]/10 border border-[#FACC15]/30 text-[#FACC15] font-semibold text-sm transition-colors'; 152 } ); 153 tocNav.appendChild( a ); 154 } ); 155 } 156 } 157 158 qsa( '[data-jala-subtab]' ).forEach( function ( b ) { 159 b.addEventListener( 'click', function () { 160 var bar = b.closest( '[data-jala-subtabs]' ); 161 if ( ! bar ) { return; } 162 var wrap = bar.parentNode; 163 var key = b.getAttribute( 'data-jala-subtab' ); 164 qsa( '[data-jala-subtab]', bar ).forEach( function ( t ) { 165 var on = ( t === b ); 166 t.className = 'px-3 py-1.5 rounded-md text-xs font-bold transition-colors ' + ( on ? 'active text-[#FACC15] bg-[#1A1A1A]' : 'text-[#A3A3A3] hover:text-[#E5E5E5]' ); 167 } ); 168 qsa( '[data-jala-subpanel]', wrap ).forEach( function ( p ) { 169 p.style.display = ( p.getAttribute( 'data-jala-subpanel' ) === key ) ? '' : 'none'; 170 } ); 171 } ); 172 } ); 173 174 qsa( '[data-jala-yt-play]' ).forEach( function ( btn ) { 175 btn.addEventListener( 'click', function () { 176 var wrap = btn.closest( '[data-jala-yt]' ); 177 if ( ! wrap ) { return; } 178 var vid = wrap.getAttribute( 'data-jala-yt' ); 179 if ( ! vid ) { return; } 180 wrap.innerHTML = '<iframe class="w-full h-full" style="width:100%;height:100%;border:0;" src="https://www.youtube-nocookie.com/embed/' + encodeURIComponent( vid ) + '?autoplay=1&rel=0" title="YouTube" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>'; 181 } ); 182 } ); 183 184 var jalaScorerStat = 'goals'; 185 var jalaScorerCellIdx = { goals: 3, assists: 4, penalty: 5, minutes: 6 }; 186 function jalaSortScorer( stat ) { 187 var scorerBody = qs( '[data-jala-scorer-body]' ); 188 if ( ! scorerBody ) { return; } 189 jalaScorerStat = stat; 190 var rows = qsa( '[data-jala-scorer-row]', scorerBody ); 191 rows.sort( function ( a, b ) { 192 return ( parseInt( b.getAttribute( 'data-' + stat ), 10 ) || 0 ) - ( parseInt( a.getAttribute( 'data-' + stat ), 10 ) || 0 ); 193 } ); 194 rows.forEach( function ( r ) { 195 scorerBody.appendChild( r ); 196 var tds = r.children; 197 [ 3, 4, 5, 6 ].forEach( function ( ci ) { 198 if ( tds[ ci ] ) { tds[ ci ].classList.remove( 'text-[#FACC15]' ); tds[ ci ].classList.add( 'text-[#A3A3A3]' ); } 199 } );
200 var idx = jalaScorerCellIdx[ stat ]; 201 if ( tds[ idx ] ) { tds[ idx ].classList.remove( 'text-[#A3A3A3]' ); tds[ idx ].classList.add( 'text-[#FACC15]' ); } 202 } ); 203 qsa( '[data-jala-rank]', scorerBody ).forEach( function ( s, i ) { s.textContent = ( i + 1 ); } ); 204 qsa( '[data-jala-col]' ).forEach( function ( th ) { 205 var on = ( th.getAttribute( 'data-jala-col' ) === stat ); 206 th.classList.remove( 'text-[#FACC15]', 'text-[#A3A3A3]' ); 207 th.classList.add( on ? 'text-[#FACC15]' : 'text-[#A3A3A3]' ); 208 } ); 209 } 210 211 window.jalaReapplyScorer = function () { if ( 'goals' !== jalaScorerStat ) { jalaSortScorer( jalaScorerStat ); } }; 212 qsa( '[data-jala-stat-tab]' ).forEach( function ( tab ) { 213 tab.addEventListener( 'click', function () { 214 var stat = tab.getAttribute( 'data-jala-stat-tab' ); 215 qsa( '[data-jala-stat-tab]' ).forEach( function ( t ) { 216 var on = ( t === tab ); 217 t.className = 'px-3 py-1.5 rounded-md text-xs font-bold transition-colors whitespace-nowrap ' + ( on ? 'bg-[#1A1A1A] text-[#FACC15]' : 'text-[#A3A3A3] hover:text-[#E5E5E5]' ); 218 } ); 219 jalaSortScorer( stat ); 220 } ); 221 } ); 222 223 var jalaHomeWrap = qs( '[data-jala-match-wrap]' ); 224 if ( jalaHomeWrap ) { 225 var jalaMoreBtn = qs( '[data-jala-load-more]' ); 226 window.jalaHome = window.jalaHome || { filter: '', revealed: 0, 227 initial: ( parseInt( jalaHomeWrap.getAttribute( 'data-jala-initial' ), 10 ) || 12 ), 228 step: jalaMoreBtn ? ( parseInt( jalaMoreBtn.getAttribute( 'data-step' ), 10 ) || 9 ) : 9 }; 229 window.jalaApplyHome = function () { 230 var st = window.jalaHome; 231 var wraps = qsa( '[data-jala-mc]', jalaHomeWrap ); 232 var matched = 0, totalMatch = 0; 233 wraps.forEach( function ( w ) { 234 var a = w.querySelector( '[data-bucket]' ); 235 var ok = true; 236 if ( 'hot' === st.filter ) { ok = !! a && a.getAttribute( 'data-hot' ) === '1'; } 237 else if ( st.filter ) { ok = !! a && a.getAttribute( 'data-bucket' ) === st.filter; } 238 w.classList.remove( 'jala-mc-hidden' ); 239 if ( ! ok ) { w.style.display = 'none'; return; } 240 totalMatch++; 241 if ( ! st.filter ) { 242 w.style.display = ( matched < ( st.initial + st.revealed ) ) ? '' : 'none'; 243 } else { 244 w.style.display = ''; 245 } 246 matched++; 247 } ); 248 if ( jalaMoreBtn && jalaMoreBtn.parentNode ) { 249 var showMore = ( ! st.filter ) && totalMatch > ( st.initial + st.revealed ); 250 jalaMoreBtn.parentNode.style.display = showMore ? '' : 'none'; 251 } 252 };
253 if ( jalaMoreBtn ) { 254 jalaMoreBtn.addEventListener( 'click', function () { 255 window.jalaHome.revealed += window.jalaHome.step; 256 window.jalaApplyHome(); 257 } ); 258 } 259 window.jalaApplyHome(); 260 } 261 262 var lsBox = qs( '[data-jala-livescore][data-jala-poll]' ); 263 if ( lsBox ) { 264 var mlId = lsBox.getAttribute( 'data-jala-match-id' ); 265 var mlUrl = lsBox.getAttribute( 'data-jala-live-url' ); 266 var srvBucket = lsBox.getAttribute( 'data-jala-bucket' ) || ''; 267 var mlMode = lsBox.getAttribute( 'data-jala-poll' ) || 'live'; 268 var shEl = qs( '[data-jala-sh]', lsBox ), saEl = qs( '[data-jala-sa]', lsBox ), minEl = qs( '[data-jala-minute]', lsBox ); 269 if ( mlId && mlUrl ) { 270 var mlInterval = ( 'live' === mlMode ) ? 20000 : 30000; 271 var mlT = setInterval( function () { 272 if ( document.hidden ) { return; } 273 fetch( mlUrl + ( mlUrl.indexOf( '?' ) > -1 ? '&' : '?' ) + 'id=' + encodeURIComponent( mlId ), { cache: 'no-store', credentials: 'same-origin' } ) 274 .then( function ( r ) { return r.json(); } ) 275 .then( function ( d ) { 276 if ( ! d || ! d.ok ) { return; } 277 278 if ( d.bucket && d.bucket !== srvBucket ) { 279 clearInterval( mlT ); 280 281 if ( d.is_finished ) { 282 if ( shEl ) { shEl.textContent = d.home; } 283 if ( saEl ) { saEl.textContent = d.away; } 284 var lb = minEl ? minEl.parentElement : null; 285 if ( lb && lb.parentNode ) { 286 var ft = document.createElement( 'span' ); 287 ft.className = 'text-[10px] font-bold bg-[#262626] text-[#A3A3A3] px-2 py-0.5 rounded'; 288 ft.textContent = 'FT'; 289 lb.parentNode.replaceChild( ft, lb ); 290 } 291 return; 292 } 293 var rk = 'jala_rl_' + mlId; 294 try { if ( ! sessionStorage.getItem( rk ) ) { sessionStorage.setItem( rk, d.bucket ); setTimeout( function () { location.reload(); }, 900 ); } } catch ( e ) { setTimeout( function () { location.reload(); }, 900 ); } 295 return; 296 } 297 298 if ( d.is_live ) { 299 if ( shEl ) { shEl.textContent = d.home; } 300 if ( saEl ) { saEl.textContent = d.away; } 301 if ( minEl && d.minute ) { minEl.textContent = d.minute; } 302 } 303 } ) 304 .catch( function () {} ); 305 }, mlInterval ); 306 } 307 } 308 309 var wrap = qs( '[data-jala-match-wrap]' ); 310 if ( wrap ) { 311 var baseSecs = parseInt( wrap.getAttribute( 'data-jala-refresh' ), 10 ) || 30; 312 var REFRESH = Math.max( 10, baseSecs ) * 1000; 313 var refreshing = false; 314 var cardsUrl = wrap.getAttribute( 'data-jala-cards-url' ); 315 var cardsLang = wrap.getAttribute( 'data-jala-lang' ) || ''; 316 setInterval( function () { 317 if ( refreshing || document.hidden ) { return; } 318 319 if ( qsa( '[data-bucket="live"]', wrap ).length === 0 ) { 320 window.__jalaTick = ( window.__jalaTick || 0 ) + 1; 321 if ( window.__jalaTick % 2 !== 0 ) { return; } 322 } 323 refreshing = true; 324 var done = function () { refreshing = false; }; 325 326 var applied = function () { if ( window.jalaApplyHome ) { window.jalaApplyHome(); } }; 327 if ( cardsUrl ) { 328 329 var curl = cardsUrl + ( cardsUrl.indexOf( '?' ) > -1 ? '&' : '?' ) + 'lang=' + encodeURIComponent( cardsLang ); 330 fetch( curl, { credentials: 'same-origin' } ) 331 .then( function ( r ) { return r.json(); } ) 332 .then( function ( j ) { 333 if ( j && typeof j.html === 'string' && j.html !== '' ) { 334 wrap.innerHTML = j.html; 335 applied(); 336 } 337 } ) 338 .catch( function () {} ) 339 .then( done ); 340 } else { 341 342 var rurl = location.href + ( location.href.indexOf( '?' ) > -1 ? '&' : '?' ) + '_jr=' + Date.now(); 343 fetch( rurl, { credentials: 'same-origin', cache: 'no-store', headers: { 'X-Jala-Refresh': '1' } } ) 344 .then( function ( r ) { return r.text(); } ) 345 .then( function ( html ) { 346 var doc = new DOMParser().parseFromString( html, 'text/html' ); 347 var fresh = doc.querySelector( '[data-jala-match-wrap]' ); 348 if ( fresh ) { 349 wrap.innerHTML = fresh.innerHTML; 350 applied(); 351 } 352 } ) 353 .catch( function () {} ) 354 .then( done ); 355 } 356 }, REFRESH ); 357 } 358 359 qsa( '[data-jala-copy]' ).forEach( function ( btn ) { 360 btn.addEventListener( 'click', function ( e ) { 361 e.preventDefault(); 362 var url = btn.getAttribute( 'data-jala-copy' ) || location.href; 363 var done = function () { 364 var old = btn.getAttribute( 'aria-label' ); 365 btn.classList.add( 'text-[#FACC15]' ); 366 btn.setAttribute( 'aria-label', 'Tersalin' ); 367 setTimeout( function () { btn.classList.remove( 'text-[#FACC15]' ); if ( old ) { btn.setAttribute( 'aria-label', old ); } }, 1500 ); 368 };
369 if ( navigator.clipboard && navigator.clipboard.writeText ) { 370 navigator.clipboard.writeText( url ).then( done ).catch( function () {} ); 371 } else { 372 var t = document.createElement( 'textarea' ); 373 t.value = url; document.body.appendChild( t ); t.select(); 374 try { document.execCommand( 'copy' ); done(); } catch ( err ) {} 375 document.body.removeChild( t ); 376 } 377 } ); 378 } ); 379 qsa( '[data-jala-bookmark]' ).forEach( function ( btn ) { 380 var key = 'jala_bm_' + location.pathname; 381 var sync = function () { 382 var on = false; 383 try { on = '1' === localStorage.getItem( key ); } catch ( err ) {} 384 btn.classList.toggle( 'text-[#FACC15]', on ); 385 btn.classList.toggle( 'border-[#FACC15]/40', on ); 386 }; 387 btn.addEventListener( 'click', function ( e ) { 388 e.preventDefault(); 389 try { 390 var on = '1' === localStorage.getItem( key ); 391 if ( on ) { localStorage.removeItem( key ); } else { localStorage.setItem( key, '1' ); } 392 } catch ( err ) {} 393 sync(); 394 } ); 395 sync(); 396 } ); 397 398 qsa( '[data-jala-refresh-zone]' ).forEach( function ( zone ) { 399 var zid = zone.getAttribute( 'data-jala-refresh-zone' ); 400 if ( ! zid ) { return; } 401 var zsecs = parseInt( zone.getAttribute( 'data-jala-interval' ), 10 ) || 60; 402 var ZINT = Math.max( 15, zsecs ) * 1000; 403 var zbusy = false; 404 setInterval( function () { 405 if ( zbusy || document.hidden ) { return; } 406 zbusy = true; 407 var zurl = location.href + ( location.href.indexOf( '?' ) > -1 ? '&' : '?' ) + '_jr=' + Date.now(); 408 fetch( zurl, { credentials: 'same-origin', cache: 'no-store', headers: { 'X-Jala-Refresh': '1' } } ) 409 .then( function ( r ) { return r.text(); } ) 410 .then( function ( html ) { 411 var doc = new DOMParser().parseFromString( html, 'text/html' ); 412 var fresh = doc.querySelector( '[data-jala-refresh-zone="' + zid + '"]' ); 413 if ( fresh && fresh.innerHTML !== zone.innerHTML ) { 414 zone.innerHTML = fresh.innerHTML; 415 if ( 'topskor' === zid && typeof window.jalaReapplyScorer === 'function' ) { window.jalaReapplyScorer(); } 416 } 417 } ) 418 .catch( function () {} ) 419 .then( function () { zbusy = false; } ); 420 }, ZINT ); 421 } ); 422 } ); 423}() );
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.