1// å ¨å±åé声æ 2const apiUrl = { 3 'football': 'https://score.falou.net', 4 'basketball': 'https://bb.falou.net' 5}; 6var intervalScoreObj = null; 7var intervalLiveObj = null; 8 9function loadHtml(object) { 10 // æ¸ é¤å®æ¶å¨ 11 clearInterval(intervalScoreObj); 12 13 jQuery(object).html(` 14 <div class="ajax-loading"> 15 <div class="loading-line" style="width: 50%;"></div> 16 <div class="loading-line" style="width: 70%;"></div> 17 <div class="loading-line" style="width: 100%;"></div> 18 </div> 19 `); 20} 21 22// è·åå¼å§æ¶é´ 23function getStartTime(match_time) { 24 return Math.ceil((Date.now() / 1000 - match_time) / 60); 25} 26 27function get_country_list(sportType) { 28 loadHtml('#category-left-menu .country_list'); 29 30 jQuery.ajax({ 31 url: `${apiUrl[sportType]}/country/list`, 32 type: 'GET', 33 dataType: 'json', 34 success: function (res) { 35 // å¤çæ°æ® 36 let html = countryListHtml(sportType,res.data); 37 jQuery('#category-left-menu .country_list').html(html); 38 39 // æ·»å "Show more"æé®çç¹å»äºä»¶ 40 jQuery('.lmc__itemMore').on('click', function() { 41 jQuery('#category-left-menu .country_list .lmc__block.hidden').removeClass('hidden'); 42 jQuery(this).hide(); // éè"Show more"æé® 43 }); 44 } 45 }); 46} 47 48function get_category_list(sportType) { 49 loadHtml('#category-left-menu .category_list'); 50 51 jQuery.ajax({ 52 url: `${apiUrl[sportType]}/category/list`, 53 type: 'GET', 54 dataType: 'json', 55 success: function (res) { 56 // å¤çæ°æ® 57 let html = categoryListHtml(sportType,res.data); 58 jQuery('#category-left-menu .category_list').html(html); 59 } 60 }); 61} 62 63function countryListHtml(sportType,data){ 64 let countryListHtml = ''; 65 let showMoreHtml = ''; 66 67 data.forEach((country, index) => { 68 let displayClass = index >= 15 ? 'lmc__block hidden' : 'lmc__block'; 69 countryListHtml += ` 70 <div class="${displayClass}"> 71 <a id="lmenu_${country.id}" class="lmc__element lmc__item " href="javascript:void(0);" data-ctype="${sportType}" data-id="${country.id}" > 72 <span class="lmc__elementName"><img class="country_logo lazyload" src="${country.logo}">${country.name}</span> 73 <svg class="lmc__sortIcon lmc__sortIcon--desktop"><use xlink:href="${theme_uri}/assets/img/icons/incident.v4.svg#arrow-bold"></use></svg> 74 <svg class="lmc__sortIcon lmc__sortIcon--mobile"><use xlink:href="${theme_uri}/assets/img/icons/action.svg#arrow"></use></svg> 75 </a> 76 </div> 77 `; 78 }); 79 80 // 妿å½å®¶æ°éè¶ è¿25ä¸ªï¼æ·»å "Show more"æé® 81 if (data.length > 25) { 82 showMoreHtml = ` 83 <span class="lmc__itemMore">${language.more}<svg class="leftMenu__icon leftMenu__icon--arrow"><use xlink:href="${theme_uri}/assets/img/icons/action.svg#arrow"></use></svg></span> 84 `; 85 } 86 87 return countryListHtml + showMoreHtml; 88} 89 90function categoryListHtml(sportType,data){ 91 let categoryListHtml = ''; 92 93 data.forEach((category, index) => { 94 let displayClass = index >= 15 ? 'lmc__block hidden' : 'lmc__block'; 95 categoryListHtml += ` 96 <div class="${displayClass}"> 97 <a id="lmenu_${category.id}" class="lmc__element lmc__item " href="javascript:void(0);" data-ctype="${sportType}" data-id="${category.id}" > 98 <span class="lmc__elementName"><img class="country_logo lazyload" src="${theme_uri}/assets/img/international.png">${category.name}</span> 99 <svg class="lmc__sortIcon lmc__sortIcon--desktop"><use xlink:href="${theme_uri}/assets/img/icons/incident.v4.svg#arrow-bold"></use></svg> 100 <svg class="lmc__sortIcon lmc__sortIcon--mobile"><use xlink:href="${theme_uri}/assets/img/icons/action.svg#arrow"></use></svg> 101 </a> 102 </div> 103 `; 104 }); 105 106 return categoryListHtml; 107} 108 109function competitionListHtml(sportType,data){
110 let competitionListHtml = ''; 111 112 data.forEach(competition => { 113 competitionListHtml += `<span class="lmc__template "><span></span><a href="${league_page[sportType]}${competition.id}" class="lmc__templateHref" title="${competition.name}"><img class="country_logo lazyload" src="${competition.logo}">${competition.name}</a></span>` 114 }); 115 116 return competitionListHtml; 117} 118 119function locadMatchLists(selector = '.match-lists') { 120 jQuery(selector).html(` 121 <div class="ajax-loading"> 122 <div class="loading-line" style="width: 100%;"></div> 123 <div style="display:grid; gap: 5px;grid-template-columns: 1fr 9fr 2fr;"> 124 <div class="loading-line" style="width: 100%;"></div> 125 <div class="loading-line" style="width: 100%;"></div> 126 <div class="loading-line" style="width: 100%;"></div> 127 </div> 128 <div style="display:grid; gap: 5px;grid-template-columns: 1fr 9fr 2fr;"> 129 <div class="loading-line" style="width: 100%;"></div> 130 <div class="loading-line" style="width: 100%;"></div> 131 <div class="loading-line" style="width: 100%;"></div> 132 </div> 133 <div style="display:grid; gap: 5px;grid-template-columns: 1fr 9fr 2fr;"> 134 <div class="loading-line" style="width: 100%;"></div> 135 <div class="loading-line" style="width: 100%;"></div> 136 <div class="loading-line" style="width: 100%;"></div> 137 </div> 138 <div style="height:20px;width:100%;"></div> 139 <div class="loading-line" style="width: 100%;"></div> 140 <div style="display:grid; gap: 5px;grid-template-columns: 1fr 9fr 2fr;"> 141 <div class="loading-line" style="width: 100%;"></div> 142 <div class="loading-line" style="width: 100%;"></div> 143 <div class="loading-line" style="width: 100%;"></div> 144 </div> 145 <div style="display:grid; gap: 5px;grid-template-columns: 1fr 9fr 2fr;"> 146 <div class="loading-line" style="width: 100%;"></div> 147 <div class="loading-line" style="width: 100%;"></div> 148 <div class="loading-line" style="width: 100%;"></div> 149 </div> 150 </div> 151 `); 152} 153 154// è·åèµç¨èµææ°æ® 155function get_match_result(sportType,type, date,callback) { 156 locadMatchLists(); 157 158 // æ¸ é¤å®æ¶å¨ 159 clearInterval(intervalScoreObj); 160 161 jQuery.ajax({ 162 url: `${apiUrl[sportType]}/match/result?type=${type}&date=${date}&status=1`, 163 type: 'GET', 164 dataType: 'json', 165 success: function (res) { 166 // å¤çæ°æ® 167 let html; 168 if (sportType === 'basketball') { 169 html = bb_matchResultHtml(res.data); 170 } else { 171 html = matchResultHtml(res.data); 172 } 173 jQuery('.match-lists').html(html); 174 175 if( date == formatDate('Ymd', new Date().getTime()) ){ 176 // æ§è¡å®æ¶æ´æ° 177 intervalLive(sportType); 178 } 179 180 if (callback) { 181 callback(); 182 } 183 } 184 }); 185} 186 187function bb_matchResultHtml(data){ 188 let html = ''; 189 190 data.forEach(league => { 191 // æ·»å èèµæ é¢ 192 html += ` 193 <div class="headerLeague__wrapper" id="league_${league.id}"> 194 <div class="wcl-header_HrElx wcl-pinned_dRFvU headerLeague headerLeague--has-star"> 195 <div class="headerLeague__body"> 196 <div class="headerLeague__titleWrapper"> 197 <a title="${league.name}" href="${league_page[sportType]}${league.id}" class="headerLeague__title"> 198 <strong class="wcl-simpleText_2t3pL wcl-scores-simple-text-01_8lVyp wcl-bold_MMDhq headerLeague__title-text">${league.name}</strong> 199 </a> 200 </div> 201 </div> 202 <div class="headerLeague__actions headerLeague__actions--no-spacing-mobile headerLeague__actions--no-spacing-desktop"> 203 <div class="wclIcon__leagueShowMoreCont"> 204 <div class="wcl-trigger_CGiIV"> 205 <button type="button" class="wcl-accordion_7Fi80">
206 <span class="wcl-icon_WJBei"> 207 <svg fill="currentColor" viewBox="0 0 20 20" class="wcl-icon_WGKvC" width="14" height="14"><path fill-rule="evenodd" class="action-navigation-arrow-up" d="M.98 15 10 5.97 19.02 15l.98-.98-10-10-10 10 .98.98Z"></path></svg> 208 </span> 209 </button> 210 </div> 211 </div> 212 </div> 213 </div> 214 </div> 215 `; 216 217 // æ·»å æ¯èµå表 218 league.list.forEach((match, index) => { 219 // ç¡®å®æ¯èµç¶æç±» 220 let statusClass = 'event__match--scheduled'; 221 if (match.status >= 2 && match.status <= 9) statusClass = 'event__match--live'; 222 else if (match.status === 10) statusClass = 'event__match--finished'; 223 224 // ç¡®å®æ¯å¦æ¯æåä¸åºæ¯èµ 225 let isLastClass = index === league.list.length - 1 ? 'event__match--last' : ''; 226 227 // æ ¼å¼åæ¯èµæ¶é´ 228 const matchTime = new Date(match.match_time * 1000); 229 const formattedTime = matchTime.getHours().toString().padStart(2, '0') + ':' + matchTime.getMinutes().toString().padStart(2, '0'); 230 231 // è·åæ¯å - æ»å为åèç¸å 232 const homeScore = (match.home_score[0] || 0) + (match.home_score[1] || 0) + (match.home_score[2] || 0) + (match.home_score[3] || 0); 233 const awayScore = (match.away_score[0] || 0) + (match.away_score[1] || 0) + (match.away_score[2] || 0) + (match.away_score[3] || 0); 234 235 // æ ¹æ®ç¶æçæä¸åçå 容 236 let statusContent = ''; 237 let timeOrScore = ''; 238 239 if (match.status === 1) { 240 // æªå¼èµ - æ¾ç¤ºç¶æææ¬ 241 statusContent = `<a class="icon--preview"><em class="wcl-badgePreview_cjWs9">${bb_language.status_1}</em></a>`; 242 timeOrScore = `<div class="event__time">${formattedTime}</div>`; 243 } else if (match.status >= 2 && match.status <= 9) { 244 // è¿è¡ä¸ - æ¾ç¤ºæ¯ååæ¶é´ 245 statusContent = ''; 246 timeOrScore = ` 247 <div class="event__time">${getStartTime(match.match_time)}</div> 248 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home">${homeScore}</span> 249 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away">${awayScore}</span> 250 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home1">${match.home_score[0]}</span> 251 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away1">${match.home_score[0]}</span> 252 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home2">${match.home_score[1]}</span> 253 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away2">${match.home_score[1]}</span> 254 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home3">${match.home_score[2]}</span> 255 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away3">${match.home_score[2]}</span> 256 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home4">${match.home_score[3]}</span> 257 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away4">${match.home_score[3]}</span> 258 `; 259 } else if (match.status === 10) { 260 // å·²ç»æ - æ¾ç¤ºæ¯å 261 statusContent = ''; 262 timeOrScore = ` 263 <div class="event__time">${bb_language.status_10}</div> 264 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home">${homeScore}</span>
265 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away">${awayScore}</span> 266 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home1">${match.home_score[0] || 0}</span> 267 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away1">${match.home_score[0] || 0}</span> 268 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home2">${match.home_score[1] || 0}</span> 269 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away2">${match.home_score[1] || 0}</span> 270 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home3">${match.home_score[2] || 0}</span> 271 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away3">${match.home_score[2] || 0}</span> 272 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home4">${match.home_score[3] || 0}</span> 273 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away4">${match.home_score[3] || 0}</span> 274 `; 275 } 276 277 html += ` 278 <div class="event__match bb league_${league.id} event__match--withRowLink ${statusClass} ${isLastClass} event__match--twoLine"> 279 <a href="${matchinfo_page[sportType]}${match.match_id}" target="_self" title="${language.look_match_info}" class="eventRowLink"></a> 280 ${timeOrScore} 281 <div class="wcl-participant_bctDY event__homeParticipant"> 282 <img class="wcl-assetContainer_KJQf9 wcl-logo_UrSpU wcl-sizeXXS_CNb8a" alt="${match.home_name}" loading="lazy" src="${match.home_logo}"> 283 <span class="wcl-simpleText_2t3pL wcl-scores-simple-text-01_8lVyp wcl-name_jjfMf">${match.home_name}</span> 284 </div> 285 <div class="wcl-participant_bctDY event__awayParticipant"> 286 <img class="wcl-assetContainer_KJQf9 wcl-logo_UrSpU wcl-sizeXXS_CNb8a" alt="${match.away_name}" loading="lazy" src="${match.away_logo}"> 287 <span class="wcl-simpleText_2t3pL wcl-scores-simple-text-01_8lVyp wcl-name_jjfMf">${match.away_name}</span> 288 </div> 289 ${statusContent} 290 </div> 291 `; 292 }); 293 }); 294 295 return html; 296} 297 298function matchResultHtml(data){ 299 let html = ''; 300 301 data.forEach(league => { 302 // æ·»å èèµæ é¢ 303 html += ` 304 <div class="headerLeague__wrapper" id="league_${league.id}"> 305 <div class="wcl-header_HrElx wcl-pinned_dRFvU headerLeague headerLeague--has-star"> 306 <div class="headerLeague__body"> 307 <div class="headerLeague__titleWrapper"> 308 <a title="${league.name}" href="${league_page[sportType]}${league.id}" class="headerLeague__title"> 309 <strong class="wcl-simpleText_2t3pL wcl-scores-simple-text-01_8lVyp wcl-bold_MMDhq headerLeague__title-text">${league.name}</strong> 310 </a> 311 </div> 312 </div> 313 <div class="headerLeague__actions headerLeague__actions--no-spacing-mobile headerLeague__actions--no-spacing-desktop"> 314 <div class="wclIcon__leagueShowMoreCont"> 315 <div class="wcl-trigger_CGiIV"> 316 <button type="button" class="wcl-accordion_7Fi80"> 317 <span class="wcl-icon_WJBei"> 318 <svg fill="currentColor" viewBox="0 0 20 20" class="wcl-icon_WGKvC" width="14" height="14"><path fill-rule="evenodd" class="action-navigation-arrow-up" d="M.98 15 10 5.97 19.02 15l.98-.98-10-10-10 10 .98.98Z"></path></svg> 319 </span> 320 </button> 321 </div> 322 </div> 323 </div> 324 </div> 325 </div> 326 `; 327 328 // æ·»å æ¯èµå表 329 league.list.forEach((match, index) => { 330 // ç¡®å®æ¯èµç¶æç±» 331 let statusClass = 'event__match--scheduled'; 332 if (match.status >= 2 && match.status < 8 ) statusClass = 'event__match--live'; 333 else if (match.status === 8) statusClass = 'event__match--finished'; 334 335 // ç¡®å®æ¯å¦æ¯æåä¸åºæ¯èµ 336 let isLastClass = index === league.list.length - 1 ? 'event__match--last' : ''; 337 338 // æ ¼å¼åæ¯èµæ¶é´
339 const matchTime = new Date(match.match_time * 1000); 340 const formattedTime = matchTime.getHours().toString().padStart(2, '0') + ':' + matchTime.getMinutes().toString().padStart(2, '0'); 341 342 // è·åæ¯å 343 const homeScore = match.home_score[0] || 0; 344 const awayScore = match.away_score[0] || 0; 345 346 // æ ¹æ®ç¶æçæä¸åçå 容 347 let statusContent = ''; 348 let timeOrScore = ''; 349 350 if (match.status === 1) { 351 // æªå¼èµ - æ¾ç¤ºç¶æææ¬ 352 statusContent = `<a class="icon--preview"><em class="wcl-badgePreview_cjWs9">${language.status_1}</em></a>`; 353 timeOrScore = `<div class="event__time">${formattedTime}</div>`; 354 } else if (match.status === 2 || match.status === 3 || match.status === 4) { 355 // ä¸ååºãä¸åºä¼æ¯ãä¸ååº - æ¾ç¤ºæ¯ååæ¶é´ 356 statusContent = ''; 357 timeOrScore = ` 358 <div class="event__time">${getStartTime(match.match_time)}</div> 359 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home">${homeScore}</span> 360 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away">${awayScore}</span> 361 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__part--home event__part--1"><img src="${theme_uri}/assets/img/corner.png">${match.home_score[4] > 0 ? match.home_score[4] : '-' }</span> 362 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__part--away event__part--1"><img src="${theme_uri}/assets/img/corner.png">${match.away_score[4] > 0 ? match.away_score[4] : '-'}</span> 363 `; 364 } else if (match.status === 8) { 365 // å·²ç»æ - æ¾ç¤ºæ¯å 366 statusContent = ''; 367 timeOrScore = ` 368 <div class="event__time">${language.status_8}</div> 369 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home">${homeScore}</span> 370 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away">${awayScore}</span> 371 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__part--home event__part--1"><img src="${theme_uri}/assets/img/corner.png">${match.home_score[4] > 0 ? match.home_score[4] : '-' }</span> 372 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__part--away event__part--1"><img src="${theme_uri}/assets/img/corner.png">${match.away_score[4] > 0 ? match.away_score[4] : '-'}</span> 373 `; 374 } 375 376 html += ` 377 <div class="event__match league_${league.id} event__match--withRowLink ${statusClass} ${isLastClass} event__match--twoLine"> 378 <a href="${matchinfo_page[sportType]}${match.match_id}" target="_self" title="${language.look_match_info}" class="eventRowLink"></a> 379 ${timeOrScore} 380 <div class="wcl-participant_bctDY event__homeParticipant"> 381 <img class="wcl-assetContainer_KJQf9 wcl-logo_UrSpU wcl-sizeXXS_CNb8a" alt="${match.home_name}" loading="lazy" src="${match.home_logo}"> 382 <span class="wcl-simpleText_2t3pL wcl-scores-simple-text-01_8lVyp wcl-name_jjfMf">${match.home_name}</span> 383 </div> 384 <div class="wcl-participant_bctDY event__awayParticipant"> 385 <img class="wcl-assetContainer_KJQf9 wcl-logo_UrSpU wcl-sizeXXS_CNb8a" alt="${match.away_name}" loading="lazy" src="${match.away_logo}"> 386 <span class="wcl-simpleText_2t3pL wcl-scores-simple-text-01_8lVyp wcl-name_jjfMf">${match.away_name}</span> 387 </div> 388 ${statusContent} 389 </div> 390 `; 391 }); 392 }); 393 394 return html; 395} 396 397// 宿¶æ´æ°æ¯å 398function intervalLive(sportType) { 399 var liveStatus = 0; 400 intervalScoreObj = setInterval(function () { 401 if (liveStatus == 0) { 402 liveStatus = 1; 403 let ajaxUrl = `${apiUrl[sportType]}/live`; 404 jQuery.get(ajaxUrl, function (res) { 405 if (res.code == 200) { 406 liveStatus = 0; 407 jQuery.each(res.data, function (index, item) { 408 var matchObj = jQuery(`#g_1_${item.id}`); 409 if (matchObj.length) { 410 // æ´æ°ç¶æç±» 411 matchObj.removeClass('event__match--scheduled event__match--live event__match--finished'); 412 413 let statusClass = 'event__match--live'; 414 let finishedStatus = sportType === 'basketball' ? 10 : 8; 415 if (item.status_id === finishedStatus) statusClass = 'event__match--finished'; 416 417 matchObj.addClass(statusClass); 418 419 // è·åæ¯å - ä½¿ç¨æ£ç¡®çåæ®µå 420 const homeScore = (item.home_scores[0] || 0) + (item.home_scores[1] || 0) + (item.home_scores[2] || 0) + (item.home_scores[3] || 0); 421 const awayScore = (item.away_scores[0] || 0) + (item.away_scores[1] || 0) + (item.away_scores[2] || 0) + (item.away_scores[3] || 0); 422 423 // æ ¹æ®ç¶ææ´æ°å 容 424 if (sportType === 'basketball') { 425 // 篮çç¶æå¤ç 426 if (item.status_id >= 2 && item.status_id <= 9) { 427 // è¿è¡ä¸ - æ¾ç¤ºæ¯ååæ¶é´ 428 const startTime = getStartTime(item.match_time); 429 matchObj.find('.event__time').html(startTime); 430 matchObj.find('.event__score--home').html(homeScore); 431 matchObj.find('.event__score--away').html(awayScore); 432 // æ´æ°åèåæ° 433 matchObj.find('.event__score--home1').html(item.home_scores[0] || 0); 434 matchObj.find('.event__score--away1').html(item.away_scores[0] || 0); 435 matchObj.find('.event__score--home2').html(item.home_scores[1] || 0); 436 matchObj.find('.event__score--away2').html(item.away_scores[1] || 0); 437 matchObj.find('.event__score--home3').html(item.home_scores[2] || 0); 438 matchObj.find('.event__score--away3').html(item.away_scores[2] || 0); 439 matchObj.find('.event__score--home4').html(item.home_scores[3] || 0); 440 matchObj.find('.event__score--away4').html(item.away_scores[3] || 0); 441 matchObj.find('.event__score, .event__part--1').show(); 442 matchObj.find('.icon--preview').remove(); 443 } else if (item.status_id === 10) { 444 // å·²ç»æ - æ¾ç¤ºæ¯å 445 matchObj.find('.event__time').html(bb_language.status_10); 446 matchObj.find('.event__score--home').html(homeScore); 447 matchObj.find('.event__score--away').html(awayScore); 448 // æ´æ°åèåæ° 449 matchObj.find('.event__score--home1').html(item.home_scores[0] || 0); 450 matchObj.find('.event__score--away1').html(item.away_scores[0] || 0); 451 matchObj.find('.event__score--home2').html(item.home_scores[1] || 0); 452 matchObj.find('.event__score--away2').html(item.away_scores[1] || 0); 453 matchObj.find('.event__score--home3').html(item.home_scores[2] || 0); 454 matchObj.find('.event__score--away3').html(item.away_scores[2] || 0); 455 matchObj.find('.event__score--home4').html(item.home_scores[3] || 0); 456 matchObj.find('.event__score--away4').html(item.away_scores[3] || 0); 457 matchObj.find('.event__score, .event__part--1').show(); 458 matchObj.find('.icon--preview').remove(); 459 } else { 460 let statusLang = `status_${item.status_id}`; 461 matchObj.find('.icon--preview').html(`<em class="wcl-badgePreview_cjWs9">${bb_language[statusLang]}</em>`); 462 } 463 } else { 464 // è¶³çç¶æå¤ç 465 if (item.status_id === 2 || item.status_id === 3 || item.status_id === 4 || item.status_id === 5 || item.status_id === 7) { 466 // è¿è¡ä¸ - æ¾ç¤ºæ¯ååæ¶é´ 467 const startTime = getStartTime(item.match_time); 468 matchObj.find('.event__time').html(startTime); 469 matchObj.find('.event__score--home').html(homeScore); 470 matchObj.find('.event__score--away').html(awayScore); 471 matchObj.find('.event__part--home').html(`<img src="${theme_uri}/assets/img/corner.png">${item.home_scores[4] > 0 ? item.home_scores[4] : '-'}`); 472 matchObj.find('.event__part--away').html(`<img src="${theme_uri}/assets/img/corner.png">${item.away_scores[4] > 0 ? item.away_scores[4] : '-'}`); 473 matchObj.find('.event__score, .event__part--1').show(); 474 matchObj.find('.icon--preview').remove(); 475 } else if (item.status_id === 8) { 476 // å·²ç»æ - æ¾ç¤ºæ¯å 477 matchObj.find('.event__time').html(language.status_8); 478 matchObj.find('.event__score--home').html(homeScore); 479 matchObj.find('.event__score--away').html(awayScore); 480 matchObj.find('.event__part--home').html(`<img src="${theme_uri}/assets/img/corner.png">${item.home_scores[4] > 0 ? item.home_scores[4] : '-'}`); 481 matchObj.find('.event__part--away').html(`<img src="${theme_uri}/assets/img/corner.png">${item.away_scores[4] > 0 ? item.away_scores[4] : '-'}`); 482 matchObj.find('.event__score, .event__part--1').show(); 483 matchObj.find('.icon--preview').remove(); 484 } else { 485 let statusLang = `status_${item.status_id}`; 486 matchObj.find('.icon--preview').html(`<em class="wcl-badgePreview_cjWs9">${language[statusLang]}</em>`); 487 } 488 } 489 } 490 }); 491 } 492 }).fail(function(xhr, status, error) { 493 liveStatus = 0; 494 }); 495 } 496 }, ajaxSecond * 1000); 497} 498 499// æ£æ¥å¹¶éèæ²¡æå¯è§æ¯èµçèèµæ é¢ 500function checkAndHideEmptyLeagues() { 501 jQuery('.headerLeague__wrapper').each(function() { 502 var leagueId = jQuery(this).attr('id'); 503 if (leagueId && leagueId.startsWith('league_')) { 504 var leagueNum = leagueId.replace('league_', ''); 505 var visibleMatches = jQuery(`.league_${leagueNum}:visible`).length; 506 507 if (visibleMatches === 0) { 508 jQuery(this).hide(); 509 } else { 510 jQuery(this).show(); 511 } 512 } 513 }); 514} 515 516function get_league_info(sportType,leagueId) { 517 // ä¿®æ¹å³ä¾§ä¸»å 容 518 get_competition_info(sportType, leagueId, function (data) { 519 jQuery('.league_name').text(data.name); 520 jQuery('.league_logo').attr('src', data.logo); 521 }); 522 523 // è·åèèµç仿¥èµäºãèµç¨ãèµæãæè¡æ¦æ°æ® 524 get_league_summary(sportType, leagueId); 525 get_league_schedule(sportType, leagueId); 526 get_league_result(sportType, leagueId); 527 get_intergal_data(sportType, leagueId, 0, function (html) { 528 jQuery(`.event.league_table .match-lists`).html(html); 529 }); 530} 531 532// è·åèèµä¿¡æ¯ 533function get_competition_info(sportType, id, afterFunc) { 534 let ajaxUrl = `${apiUrl[sportType]}
534/competition/info?id=${id}`; 535 jQuery.get(ajaxUrl, function (res) { 536 if (res.code == 200) { 537 afterFunc(res.data); 538 } 539 }); 540} 541 542// è·å仿¥èµäº 543function get_league_summary(sportType, id) { 544 // å æ¾ç¤ºå è½½ç¶æ 545 locadMatchLists('.event.league_summary .match-lists'); 546 547 let ajaxUrl = `${apiUrl[sportType]}/competition/result?type=1&id=${id}&date=${formatDate('Ymd', new Date().getTime())}`; 548 549 jQuery.ajax({ 550 url: ajaxUrl, 551 type: 'GET', 552 dataType: 'json', 553 success: function (res) { 554 // å¤çæ°æ® 555 let html = insertLeagueResultHtml(sportType, res.data); 556 jQuery(`.event.league_summary .match-lists`).html(html); 557 }, 558 error: function() { 559 // 请æ±å¤±è´¥æ¶æ¾ç¤ºç©ºæ°æ®æç¤º 560 jQuery(`.event.league_summary .match-lists`).html(`<div class="empty_data">${language.empty}</div>`); 561 } 562 }); 563} 564 565// è·åèµç¨ 566function get_league_schedule(sportType, id) { 567 // å æ¾ç¤ºå è½½ç¶æ 568 locadMatchLists('.event.league_schedule .match-lists'); 569 570 jQuery.ajax({ 571 url: `${apiUrl[sportType]}/competition/result?type=1&id=${id}`, 572 type: 'GET', 573 dataType: 'json', 574 success: function (res) { 575 // å¤çæ°æ® 576 let html = insertLeagueResultHtml(sportType, res.data); 577 jQuery(`.event.league_schedule .match-lists`).html(html); 578 }, 579 error: function() { 580 // 请æ±å¤±è´¥æ¶æ¾ç¤ºç©ºæ°æ®æç¤º 581 jQuery(`.event.league_schedule .match-lists`).html(`<div class="empty_data">${language.empty}</div>`); 582 } 583 }); 584} 585 586// è·åèµæ 587function get_league_result(sportType, id) { 588 // å æ¾ç¤ºå è½½ç¶æ 589 locadMatchLists('.event.league_result .match-lists'); 590 591 jQuery.ajax({ 592 url: `${apiUrl[sportType]}/competition/result?type=0&id=${id}`, 593 type: 'GET', 594 dataType: 'json', 595 success: function (res) { 596 // å¤çæ°æ® 597 let html = insertLeagueResultHtml(sportType, res.data); 598 jQuery(`.event.league_result .match-lists`).html(html); 599 }, 600 error: function() { 601 // 请æ±å¤±è´¥æ¶æ¾ç¤ºç©ºæ°æ®æç¤º 602 jQuery(`.event.league_result .match-lists`).html(`<div class="empty_data">${language.empty}</div>`); 603 } 604 }); 605} 606 607// è·åæè¡æ¦ 608function get_intergal_data(sportType, competition_id, season_id, afterFunc) { 609 // å æ¾ç¤ºå è½½ç¶æ 610 locadMatchLists(`.event.league_table .match-lists`); 611 612 let ajaxUrl = `${apiUrl[sportType]}/competition/table?id=${competition_id}&sid=${season_id}`; 613 jQuery.get(ajaxUrl, function (res) { 614 if (res.code == 200) { 615 let html = insertIntergalHtml(res.data, sportType); 616 afterFunc(html); 617 } else { 618 // 请æ±å¤±è´¥æ¶æ¾ç¤ºç©ºæ°æ®æç¤º 619 afterFunc(`<div class="empty_data">${language.empty}</div>`); 620 } 621 }).fail(function() { 622 // 请æ±å¤±è´¥æ¶æ¾ç¤ºç©ºæ°æ®æç¤º 623 afterFunc(`<div class="empty_data">${language.empty}</div>`); 624 }); 625} 626 627// èèµé¡µé¢èµç¨èµææ°æ® 628function insertLeagueResultHtml(sportType, data) { 629 let html = ''; 630 631 if (!Array.isArray(data) || data.length === 0) { 632 return `<div class="empty_data">${language.empty}</div>`; 633 } 634 635 // ç´æ¥å¤çæå¹³çæ¯èµæ°ç»ï¼ä¸éè¦èèµæ é¢ 636 data.forEach((match, index) => { 637 if (sportType === 'basketball') { 638 html += bb_leagueMatchHtml(match, index === data.length - 1); 639 } else { 640 html += leagueMatchHtml(match, index === data.length - 1); 641 } 642 }); 643 644 return html; 645} 646 647// çæèèµé¡µé¢ç¯®çæ¯èµHTML 648function bb_leagueMatchHtml(match, isLast) { 649 // ç¡®å®æ¯èµç¶æç±» 650 let statusClass = 'event__match--scheduled'; 651 if (match.status >= 2 && match.status <= 9) statusClass = 'event__match--live'; 652 else if (match.status === 10) statusClass = 'event__match--finished'; 653 654 // ç¡®å®æ¯å¦æ¯æåä¸åºæ¯èµ 655 let isLastClass = isLast ? 'event__match--last' : ''; 656 657 // æ ¼å¼åæ¯èµæ¶é´åæ¥æ 658 const formattedDate = formatDate('d-m', match.match_time); 659 const formattedTime = formatDate('H:i', match.match_time); 660 661 // è·åæ¯å - æ»å为åèç¸å 662 const homeScore = (match.home_score[0] || 0) + (match.home_score[1] || 0) + (match.home_score[2] || 0) + (match.home_score[3] || 0); 663 const awayScore = (match.away_score[0] || 0) + (match.away_score[1] || 0) + (match.away_score[2] || 0) + (match.away_score[3] || 0); 664 665 // æ ¹æ®ç¶æçæä¸åçå 容 666 let statusContent = ''; 667 let timeOrScore = ''; 668 669 if (match.status === 1) { 670 // æªå¼èµ - æ¾ç¤ºç¶æææ¬ 671 statusContent = `<a class="icon--preview"><em class="wcl-badgePreview_cjWs9">${bb_language.status_1}</em></a>`; 672 timeOrScore = `<div class="event__time">${formattedDate} ${formattedTime}</div>`; 673 } else if (match.status >= 2 && match.status <= 9) { 674 // è¿è¡ä¸ - æ¾ç¤ºæ¯ååæ¶é´ 675 statusContent = ''; 676 timeOrScore = `
677 <div class="event__time">${formattedDate} ${getStartTime(match.match_time)}</div> 678 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home">${homeScore}</span> 679 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away">${awayScore}</span> 680 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home1">${match.home_score[0]}</span> 681 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away1">${match.away_score[0]}</span> 682 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home2">${match.home_score[1]}</span> 683 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away2">${match.away_score[1]}</span> 684 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home3">${match.home_score[2]}</span> 685 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away3">${match.away_score[2]}</span> 686 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home4">${match.home_score[3]}</span> 687 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away4">${match.away_score[3]}</span> 688 `; 689 } else if (match.status === 10) { 690 // å·²ç»æ - æ¾ç¤ºæ¯å 691 statusContent = ''; 692 timeOrScore = ` 693 <div class="event__time">${formattedDate} ${formattedTime}</div> 694 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home">${homeScore}</span> 695 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away">${awayScore}</span> 696 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home1">${match.home_score[0] || 0}</span> 697 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away1">${match.away_score[0] || 0}</span> 698 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home2">${match.home_score[1] || 0}</span> 699 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away2">${match.away_score[1] || 0}</span> 700 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home3">${match.home_score[2] || 0}</span> 701 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away3">${match.away_score[2] || 0}</span> 702 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home4">${match.home_score[3] || 0}</span> 703 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away4">${match.away_score[3] || 0}</span> 704 `; 705 } 706 707 return ` 708 <div class="event__match bb event__match--withRowLink ${statusClass} ${isLastClass} event__match--twoLine" id="g_1_${match.match_id}"> 709 <a href="${matchinfo_page[sportType]}${match.match_id}" target="_self" title="${language.look_match_info}" class="eventRowLink"></a> 710 ${timeOrScore} 711 <div class="wcl-participant_bctDY event__homeParticipant"> 712 <img class="wcl-assetContainer_KJQf9 wcl-logo_UrSpU wcl-sizeXXS_CNb8a" alt="${match.home_name}" loading="lazy" src="${match.home_logo}"> 713 <span class="wcl-simpleText_2t3pL wcl-scores-simple-text-01_8lVyp wcl-name_jjfMf">${match.home_name}</span> 714 </div> 715 <div class="wcl-participant_bctDY event__awayParticipant"> 716 <img class="wcl-assetContainer_KJQf9 wcl-logo_UrSpU wcl-sizeXXS_CNb8a" alt="${match.away_name}" loading="lazy" src="${match.away_logo}"> 717 <span class="wcl-simpleText_2t3pL wcl-scores-simple-text-01_8lVyp wcl-name_jjfMf">${match.away_name}</span> 718 </div> 719 ${statusContent} 720 </div> 721 `; 722} 723 724// çæèèµé¡µé¢è¶³çæ¯èµHTML 725function leagueMatchHtml(match, isLast) { 726 // ç¡®å®æ¯èµç¶æç±» 727 let statusClass = 'event__match--scheduled'; 728 if (match.status >= 2 && match.status < 8) statusClass = 'event__match--live'; 729 else if (match.status === 8) statusClass = 'event__match--finished'; 730 731 // ç¡®å®æ¯å¦æ¯æåä¸åºæ¯èµ 732 let isLastClass = isLast ? 'event__match--last' : ''; 733 734 // æ ¼å¼åæ¯èµæ¶é´åæ¥æ 735 const formattedDate = formatDate('d-m', match.match_time); 736 const formattedTime = formatDate('H:i', match.match_time); 737 738 // è·åæ¯å 739 const homeScore = match.home_score[0] || 0; 740 const awayScore = match.away_score[0] || 0; 741 742 // æ ¹æ®ç¶æçæä¸åçå 容 743 let statusContent = ''; 744 let timeOrScore = ''; 745 746 if (match.status === 1) { 747 // æªå¼èµ - æ¾ç¤ºç¶æææ¬ 748 statusContent = `<a class="icon--preview"><em class="wcl-badgePreview_cjWs9">${language.status_1}</em></a>`; 749 timeOrScore = `<div class="event__time">${formattedDate} ${formattedTime}</div>`; 750 } else if (match.status === 2 || match.status === 3 || match.status === 4) { 751 // ä¸ååºãä¸åºä¼æ¯ãä¸ååº - æ¾ç¤ºæ¯ååæ¶é´ 752 statusContent = ''; 753 timeOrScore = `
754 <div class="event__time">${formattedDate} ${getStartTime(match.match_time)}</div> 755 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home">${homeScore}</span> 756 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away">${awayScore}</span> 757 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__part--home event__part--1"><img src="${theme_uri}/assets/img/corner.png">${match.home_score[4] > 0 ? match.home_score[4] : '-' }</span> 758 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__part--away event__part--1"><img src="${theme_uri}/assets/img/corner.png">${match.away_score[4] > 0 ? match.away_score[4] : '-'}</span> 759 `; 760 } else if (match.status === 8) { 761 // å·²ç»æ - æ¾ç¤ºæ¯å 762 statusContent = ''; 763 timeOrScore = ` 764 <div class="event__time">${formattedDate} ${formattedTime}</div> 765 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home">${homeScore}</span> 766 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away">${awayScore}</span> 767 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__part--home event__part--1"><img src="${theme_uri}/assets/img/corner.png">${match.home_score[4] > 0 ? match.home_score[4] : '-' }</span> 768 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__part--away event__part--1"><img src="${theme_uri}/assets/img/corner.png">${match.away_score[4] > 0 ? match.away_score[4] : '-'}</span> 769 `; 770 } 771 772 return ` 773 <div class="event__match event__match--withRowLink ${statusClass} ${isLastClass} event__match--twoLine" id="g_1_${match.match_id}"> 774 <a href="${matchinfo_page[sportType]}${match.match_id}" target="_self" title="${language.look_match_info}" class="eventRowLink"></a> 775 ${timeOrScore} 776 <div class="wcl-participant_bctDY event__homeParticipant"> 777 <img class="wcl-assetContainer_KJQf9 wcl-logo_UrSpU wcl-sizeXXS_CNb8a" alt="${match.home_name}" loading="lazy" src="${match.home_logo}"> 778 <span class="wcl-simpleText_2t3pL wcl-scores-simple-text-01_8lVyp wcl-name_jjfMf">${match.home_name}</span> 779 </div> 780 <div class="wcl-participant_bctDY event__awayParticipant"> 781 <img class="wcl-assetContainer_KJQf9 wcl-logo_UrSpU wcl-sizeXXS_CNb8a" alt="${match.away_name}" loading="lazy" src="${match.away_logo}"> 782 <span class="wcl-simpleText_2t3pL wcl-scores-simple-text-01_8lVyp wcl-name_jjfMf">${match.away_name}</span> 783 </div> 784 ${statusContent} 785 </div> 786 `; 787} 788 789 790function insertIntergalHtml(data, sportType) { 791 if (!data.list || data.list.length === 0) { 792 return `<div class="empty_data">${language.empty}</div>`; 793 } 794 795 var lang = sportType === 'basketball' ? bb_language['intergal'] : language['intergal']; 796 var html = ''; 797 var promotions_html = ''; 798 799 // çæ promotions HTML 800 if (data.promotions && Object.keys(data.promotions).length > 0) { 801 promotions_html = '<div class="tableLegend"><div class="tableLegend__rank">'; 802 Object.values(data.promotions).forEach(promo => { 803 promotions_html += ` 804 <div class="tableLegend__row"> 805 <div class="tableLegend__coloredSquare" style="background-color: ${promo.color};"></div> 806 <span>${promo.name_en}</span> 807 </div> 808 `; 809 }); 810 promotions_html += '</div></div>'; 811 } 812 813 // çææè¡æ¦ HTML 814 html = '<div id="tournament-table" class="tournament-table-standings">'; 815 html += '<div id="tournament-table-tabs-and-content">'; 816 html += '<div class="tableWrapper">'; 817 html += '<div class="ui-table">'; 818 819 // çæè¡¨æ ¼å 容 820 html += '<div class="ui-table__body">'; 821 822 data.list.forEach(function(group) { 823 // 为æ¯ä¸ªç»çæè¡¨å¤´ 824 html += '<div class="ui-table__header">'; 825 if (data.list.length > 1) { 826 // å¤ä¸ªç»æ¶ï¼æååæ¾ç¤ºç»å 827 html += '<div class="ui-table__headerCell table__headerCell--rank ui-table__headerCell--sortable ui-table__headerCell--sorted" role="button" tabindex="0">' + group.group + '</div>'; 828 } else { 829 // åä¸ªç»æ¶ï¼æ¾ç¤º# 830 html += '<div class="ui-table__headerCell table__headerCell--rank ui-table__headerCell--sortable ui-table__headerCell--sorted" role="button" tabindex="0">#</div>'; 831 } 832 html += '<div class="ui-table__headerCell table__headerCell--participant ui-table__headerCell--sortable" role="button" tabindex="0">' + lang[0] + '</div>'; 833 html += '<div class="ui-table__headerCell ui-table__headerCell--sortable" role="button" tabindex="0">' + lang[1] + '</div>'; 834 835 // æ ¹æ®è¿å¨ç±»åæ¾ç¤ºä¸åçå 836 if (sportType === 'basketball') { 837 // ç¯®çæ²¡æå¹³å±ï¼åªæ¾ç¤ºèåºåè´åº 838 html += '<div class="ui-table__headerCell ui-table__headerCell--sortable" role="button" tabindex="0">' + lang[2] + '</div>'; 839 html += '<div class="ui-table__headerCell ui-table__headerCell--sortable" role="button" tabindex="0">' + lang[4] + '</div>'; 840 } else { 841 // è¶³çæ¾ç¤ºèãå¹³ãè´ 842 html += '<div class="ui-table__headerCell ui-table__headerCell--sortable" role="button" tabindex="0">' + lang[2] + '</div>'; 843 html += '<div class="ui-table__headerCell ui-table__headerCell--sortable" role="button" tabindex="0">' + lang[3] + '</div>'; 844 html += '<div class="ui-table__headerCell ui-table__headerCell--sortable" role="button" tabindex="0">' + lang[4] + '</div>'; 845 } 846 847 html += '<div class="ui-table__headerCell table__cell--score ui-table__headerCell--sortable" role="button" tabindex="0">' + lang[5] + '</div>'; 848 849 // åªæè¶³çæ¾ç¤ºåèç 850 if (sportType !== 'basketball') { 851 html += '<div class="ui-table__headerCell table__cell--goalsForAgainstDiff ui-table__headerCell--sortable" role="button" tabindex="0">' + lang[7] + '</div>'; 852 } 853 854 html += '<div class="ui-table__headerCell table__cell--points ui-table__headerCell--sortable" role="button" tabindex="0">' + lang[8] + '</div>'; 855 html += '<div class="ui-table__headerCell table__headerCell--form" role="button" tabindex="0">' + lang[9] + '</div>'; 856 html += '</div>'; 857 858 group.list.forEach(function(team, index) { 859 var promotionColor = team.promotion_id > 0 && data.promotions[team.promotion_id] ? data.promotions[team.promotion_id].c
859olor : ''; 860 var rankStyle = promotionColor ? `style="--color: ${promotionColor}"` : ''; 861 862 html += '<div class="ui-table__row" ' + rankStyle + '>'; 863 html += '<div class="table__cell table__cell--rank table__cell--sorted">'; 864 html += '<div class="tableCellRank" title="">' + (index + 1) + '.</div>'; 865 html += '</div>'; 866 867 html += '<div class="table__cell table__cell--participant">'; 868 html += '<div class="tableCellParticipant">'; 869 html += '<div class="tableCellParticipant__block">'; 870 html += '<a class="tableCellParticipant__image" href="' + team_page[sportType] + (team.team_id ?? team.id) + '" target="_self" title="' + team.name + '">'; 871 html += '<img class="participant__image" loading="lazy" alt="' + team.name + '" src="' + team.logo + '" onerror="this.src=\'' + theme_uri + '/assets/img/team_default.png\'">'; 872 html += '</a>'; 873 html += '<a href="' + team_page[sportType] + (team.team_id ?? team.id) + '" target="_self" class="tableCellParticipant__name">' + team.name + '</a>'; 874 html += '</div>'; 875 html += '</div>'; 876 html += '</div>'; 877 878 html += '<span class="table__cell table__cell--value">' + team.total + '</span>'; 879 880 // æ ¹æ®è¿å¨ç±»åæ¾ç¤ºä¸åçæ°æ® 881 if (sportType === 'basketball') { 882 // 篮çï¼åªæ¾ç¤ºèåºåè´åº 883 html += '<span class="table__cell table__cell--value">' + team.won + '</span>'; 884 html += '<span class="table__cell table__cell--value">' + team.loss + '</span>'; 885 } else { 886 // è¶³çï¼æ¾ç¤ºèãå¹³ãè´ 887 html += '<span class="table__cell table__cell--value">' + team.won + '</span>'; 888 html += '<span class="table__cell table__cell--value">' + (team.draw || 0) + '</span>'; 889 html += '<span class="table__cell table__cell--value">' + team.loss + '</span>'; 890 } 891 892 html += '<span class="table__cell table__cell--value table__cell--score">' + team.goals + ':' + team.goals_against + '</span>'; 893 894 // åªæè¶³çæ¾ç¤ºåèç 895 if (sportType !== 'basketball') { 896 html += '<span class="table__cell table__cell--value table__cell--goalsForAgainstDiff">' + team.goal_diff + '</span>'; 897 } 898 899 html += '<span class="table__cell table__cell--value table__cell--points">' + team.points + '</span>'; 900 901 // Form åæ®µ - æ¾ç¤ºæè¿æ¯èµçç¶æ 902 html += '<div class="table__cell table__cell--form">'; 903 if (team.recent && Array.isArray(team.recent) && team.recent.length > 0) { 904 // åªæ¾ç¤ºæè¿5åºæ¯èµç¶æ
905 team.recent.slice(0, 5).forEach(function(result) { 906 let formClass = ''; 907 let formText = ''; 908 909 switch(result) { 910 case 'win': 911 formClass = 'wcl-win_8x-jp'; 912 formText = 'W'; 913 break; 914 case 'lose': 915 formClass = 'wcl-lose_9xj6q'; 916 formText = 'L'; 917 break; 918 case 'draw': 919 formClass = 'wcl-draw_bAS0n'; 920 formText = 'D'; 921 break; 922 default: 923 formClass = ''; 924 formText = '-'; 925 } 926 927 html += ` 928 <a href="javascript:void(0);" target="_blank" rel="noreferrer" class="tableCellFormIcon"> 929 <div class="wcl-trigger_CGiIV"> 930 <div class="wcl-badgeform_AKaAR ${formClass}"> 931 <span class="wcl-simpleText_2t3pL wcl-scores-simple-text-01_8lVyp">${formText}</span> 932 </div> 933 </div> 934 </a> 935 `; 936 }); 937 } 938 html += '</div>'; 939 940 html += '</div>'; 941 }); 942 }); 943 944 html += '</div>'; 945 html += '</div>'; 946 html += '</div>'; 947 html += promotions_html; 948 html += '</div>'; 949 html += '</div>'; 950 951 return html; 952} 953 954function get_team_info(sportType,teamId) { 955 // ä¿®æ¹å³ä¾§ä¸»å 容 956 get_team_data(sportType, teamId, function (data) { 957 jQuery('.team_name').text(data.name); 958 jQuery('.team_logo').attr('src', data.logo); 959 960 // æè¡æ¦ 961 locadMatchLists('.event.team_table .match-lists'); 962 get_intergal_data(sportType, data.competition_id, 0, function (html) { 963 jQuery(`.event.team_table .match-lists`).html(html); 964 }); 965 }); 966 967 // è·åçéç仿¥èµäºãèµç¨ãèµææ°æ® 968 get_team_summary(sportType, teamId); 969 get_team_schedule(sportType, teamId); 970 get_team_result(sportType, teamId); 971} 972 973 974// è·åçéä¿¡æ¯ 975function get_team_data(sportType, id, afterFunc) { 976 let ajaxUrl = `${apiUrl[sportType]}/team/info?id=${id}`; 977 jQuery.get(ajaxUrl, function (res) { 978 if (res.code == 200) { 979 afterFunc(res.data); 980 } 981 }); 982} 983 984// è·åçé仿¥èµäº 985function get_team_summary(sportType, id) { 986 // å æ¾ç¤ºå è½½ç¶æ 987 locadMatchLists('.event.team_summary .match-lists'); 988 989 let ajaxUrl = `${apiUrl[sportType]}/team/result?type=1&id=${id}&date=${formatDate('Ymd', new Date().getTime())}`; 990 991 jQuery.ajax({ 992 url: ajaxUrl, 993 type: 'GET', 994 dataType: 'json', 995 success: function (res) { 996 // å¤çæ°æ® 997 let html = insertLeagueResultHtml(sportType, res.data); 998 jQuery(`.event.team_summary .match-lists`).html(html); 999 }, 1000 error: function() { 1001 // 请æ±å¤±è´¥æ¶æ¾ç¤ºç©ºæ°æ®æç¤º 1002 jQuery(`.event.team_summary .match-lists`).html(`<div class="empty_data">${language.empty}</div>`); 1003 } 1004 }); 1005} 1006 1007// è·åçéèµç¨ 1008function get_team_schedule(sportType, id) { 1009 // å æ¾ç¤ºå è½½ç¶æ 1010 locadMatchLists('.event.team_schedule .match-lists'); 1011 1012 jQuery.ajax({ 1013 url: `${apiUrl[sportType]}/team/result?type=1&id=${id}`, 1014 type: 'GET', 1015 dataType: 'json', 1016 success: function (res) { 1017 // å¤çæ°æ® 1018 let html = insertLeagueResultHtml(sportType, res.data); 1019 jQuery(`.event.team_schedule .match-lists`).html(html); 1020 }, 1021 error: function() { 1022 // 请æ±å¤±è´¥æ¶æ¾ç¤ºç©ºæ°æ®æç¤º 1023 jQuery(`.event.team_schedule .match-lists`).html(`<div class="empty_data">${language.empty}</div>`); 1024 } 1025 }); 1026} 1027 1028// è·åçéèµæ 1029function get_team_result(sportType, id) { 1030 // å æ¾ç¤ºå è½½ç¶æ 1031 locadMatchLists('.event.team_result .match-lists'); 1032 1033 jQuery.ajax({ 1034 url: `${apiUrl[sportType]}/team/result?type=0&id=${id}`, 1035 type: 'GET', 1036 dataType: 'json', 1037 success: function (res) { 1038 // å¤çæ°æ® 1039 let html = insertLeagueResultHtml(sportType, res.data); 1040 jQuery(`.event.team_result .match-lists`).html(html); 1041 }, 1042 error: function() { 1043 // 请æ±å¤±è´¥æ¶æ¾ç¤ºç©ºæ°æ®æç¤º 1044 jQuery(`.event.team_result .match-lists`).html(`<div class="empty_data">${language.empty}</div>`); 1045 } 1046 }); 1047} 1048 1049 1050// è·åèµç¨èµææ°æ®
1051function get_match_info(sportType,matchId) { 1052 if (sportType === 'basketball') { 1053 jQuery('.match_stats').hide(); 1054 jQuery('.match_lineup').hide(); 1055 } 1056 1057 locadMatchLists('.event.event--results .match-lists'); 1058 1059 jQuery.ajax({ 1060 url: `${apiUrl[sportType]}/match/info?match_id=${matchId}`, 1061 type: 'GET', 1062 dataType: 'json', 1063 success: function (res) { 1064 // å¤çæ°æ® 1065 insertMatchInfoHtml(res.data); 1066 1067 // æ£æ¥æ¯å¦éè¦å¯å¨å®æ¶æ´æ° 1068 if (res.data && res.data.info) { 1069 var statusId = res.data.info.status_id; 1070 var isLive = false; 1071 1072 if (sportType === 'football') { 1073 // è¶³çï¼status_id 2-7 为æ¯èµä¸ç¶æ 1074 isLive = statusId > 1 && statusId < 8; 1075 } else if (sportType === 'basketball') { 1076 // 篮çï¼status_id 2-9 为æ¯èµä¸ç¶æï¼å æ¬èé´ä¼æ¯ï¼ 1077 isLive = statusId > 1 && statusId < 10; 1078 } 1079 1080 if (isLive) { 1081 startMatchInfoLiveUpdate(sportType, matchId); 1082 } 1083 } 1084 } 1085 }); 1086} 1087 1088// æ¯èµä¿¡æ¯é¡µé¢å®æ¶æ´æ° 1089function startMatchInfoLiveUpdate(sportType, matchId) { 1090 // æ¸ é¤ä¹åç宿¶å¨ 1091 if (intervalScoreObj) { 1092 clearInterval(intervalScoreObj); 1093 } 1094 1095 intervalScoreObj = setInterval(function () { 1096 // 使ç¨ä¸é¨çæ¯åæ´æ°API 1097 let ajaxUrl = `${apiUrl[sportType]}/match/score/${matchId}`; 1098 1099 jQuery.get(ajaxUrl, function (res) { 1100 if (res.code == 200 && res.data) { 1101 var matchInfo = res.data; 1102 var statusId = matchInfo.status_id; 1103 var isStillLive = false; 1104 1105 if (sportType === 'football') { 1106 isStillLive = statusId > 1 && statusId < 8; 1107 } else if (sportType === 'basketball') { 1108 isStillLive = statusId > 1 && statusId < 10; 1109 } 1110 1111 if (isStillLive) { 1112 // æ´æ°æ¯ååç¶æ 1113 updateMatchInfoData(matchInfo, sportType); 1114 } else { 1115 // æ¯èµç»æï¼åæ¢æ´æ° 1116 clearInterval(intervalScoreObj); 1117 updateMatchInfoData(matchInfo, sportType); 1118 } 1119 } else { 1120 // æ°æ®å¼å¸¸ï¼åæ¢æ´æ° 1121 clearInterval(intervalScoreObj); 1122 } 1123 }).fail(function() { 1124 // 请æ±å¤±è´¥ï¼åæ¢æ´æ° 1125 clearInterval(intervalScoreObj); 1126 }); 1127 }, ajaxSecond * 1000); 1128} 1129 1130// æ´æ°æ¯èµä¿¡æ¯é¡µé¢çæ¯ååç¶æ 1131function updateMatchInfoData(matchInfo, sportType) { 1132 // æ´æ°æ¯å 1133 var homeTotalScore, awayTotalScore; 1134 1135 if (sportType === 'basketball') { 1136 // 篮çï¼åªè®¡ç®ååèï¼å¸¸è§æ¶é´ï¼çå¾å 1137 var regularPeriods = matchInfo.home_scores.slice(0, 4); 1138 homeTotalScore = regularPeriods.reduce((sum, score) => sum + score, 0); 1139 1140 regularPeriods = matchInfo.away_scores.slice(0, 4); 1141 awayTotalScore = regularPeriods.reduce((sum, score) => sum + score, 0); 1142 } else { 1143 // è¶³çï¼åªæ¾ç¤ºå½åæ¯å 1144 homeTotalScore = matchInfo.home_scores[0]; 1145 awayTotalScore = matchInfo.away_scores[0]; 1146 } 1147 1148 jQuery('.match_scores').html(`<span>${homeTotalScore}</span><span class="detailScore__divider">-</span><span>${awayTotalScore}</span>`); 1149 1150 // æ´æ°ç¶æ 1151 var statusText = sportType === 'basketball' ? bb_language['status_'+matchInfo.status_id] : language['status_'+matchInfo.status_id]; 1152 1153 if (sportType === 'football' && matchInfo.status_id > 1 && matchInfo.status_id < 8) { 1154 // è¶³çæ¯èµä¸æ¾ç¤ºåéæ° 1155 jQuery('.match_status span').text(statusText + ': ' + getStartTime(matchInfo.match_time) + "'"); 1156 jQuery('.full_time').text(statusText + ': ' + getStartTime(matchInfo.match_time) + "'"); 1157 } else { 1158 jQuery('.match_status span').text(statusText); 1159 jQuery('.full_time').text(statusText); 1160 } 1161} 1162 1163function insertMatchInfoHtml(data) { 1164 var matchInfo = data.info; 1165 jQuery('.league_name').text(matchInfo.competition_name); 1166 jQuery('.league_name').attr('href',`${league_page[sportType]}${matchInfo.competition_id}`); 1167 jQuery('.league_logo').attr('src', matchInfo.competition_logo); 1168 jQuery('.league_logo').attr('onerror',`this.src='${theme_uri}/assets/img/team_default.png'`); 1169 1170 jQuery('.date_time').text(formatDate('y-m-d H:i', matchInfo.match_time * 1000)); 1171 jQuery('.full_time').text(matchInfo.status_id > 1 && matchInfo.status_id < 8 ? language['status_'+matchInfo.status_id] + ': ' + getStartTime(matchInfo.match_time) + "'" : language['status_'+matchInfo.status_id]); 1172 1173 jQuery('.home_team').attr('href',`${team_page[sportType]}${matchInfo.home_id}`); 1174 jQuery('.home_logo').attr('src', matchInfo.home_logo); 1175 jQuery('.home_logo').attr('onerror',`this.src='${theme_uri}/assets/img/team_default.png'`); 1176 jQuery('.home_name').text(matchInfo.home_name).attr('data-desktop',matchInfo.home_name).attr('data-mobile',matchInfo.home_name); 1177 1178 jQuery('.away_team').attr('href',`${team_page[sportType]}${matchInfo.away_id}`); 1179 jQuery('.away_logo').attr('src', matchInfo.away_logo); 1180 jQuery('.away_logo').attr('onerror',`this.src='${theme_uri}/assets/img/team_default.png'`); 1181 jQuery('.away_name').text(matchInfo.away_name).attr('data-desktop',matchInfo.away_name).attr('data-mobile',matchInfo.away_name); 1182 1183 1184 // æ ¹æ®è¿å¨ç±»åè®¡ç®æ»å 1185 var homeTotalScore, awayTotalScore; 1186 if (matchInfo.status_id > 1) { 1187 if (sportType === 'basketball') { 1188 // 篮çï¼åªè®¡ç®ååèï¼å¸¸è§æ¶é´ï¼çå¾åï¼ä¸å æ
1188¬å æ¶èµ 1189 var regularPeriods = matchInfo.home_scores.slice(0, 4); 1190 homeTotalScore = regularPeriods.reduce((sum, score) => sum + score, 0); 1191 1192 regularPeriods = matchInfo.away_scores.slice(0, 4); 1193 awayTotalScore = regularPeriods.reduce((sum, score) => sum + score, 0); 1194 } else { 1195 // è¶³çï¼åªæ¾ç¤ºå½åæ¯å 1196 homeTotalScore = matchInfo.home_scores[0]; 1197 awayTotalScore = matchInfo.away_scores[0]; 1198 } 1199 jQuery('.match_scores').html(`<span>${homeTotalScore}</span><span class="detailScore__divider">-</span><span>${awayTotalScore}</span>`); 1200 } else { 1201 jQuery('.match_scores').html('<span>VS</span>'); 1202 } 1203 1204 // 设置èµäºç¶ææå 1205 var statusText = sportType === 'basketball' ? bb_language['status_'+matchInfo.status_id] : language['status_'+matchInfo.status_id]; 1206 jQuery('.match_status span').text(statusText); 1207 1208 // å¤çå个æ ç¾é¡µå 容 1209 // match_info - åºæ¬ä¿¡æ¯ 1210 if (data.info) { 1211 generateMatchInfoHtml(data.info); 1212 } 1213 1214 // match_stats - ç»è®¡æ°æ®ï¼ç¯®ç没æç»è®¡æ°æ®ï¼ 1215 if (sportType === 'basketball') { 1216 jQuery('.match_stats').hide(); 1217 } else if (data.stats) { 1218 var statsHtml = generateMatchStatsHtml(data.stats); 1219 jQuery('.match_stats .match-lists').html(statsHtml); 1220 } else { 1221 jQuery('.match_stats .match-lists').html(`<div class="empty_data">${language.empty}</div>`); 1222 } 1223 1224 // match_lineup - éµå®¹ä¿¡æ¯ 1225 if (sportType === 'football' && data.lineup && Object.keys(data.lineup).length > 0) { 1226 var lineupHtml = generateMatchLineupHtml(data.info, data.lineup); 1227 jQuery('.match_lineup .match-lists').html(lineupHtml); 1228 } else { 1229 jQuery('.match_lineup .match-lists').html(`<div class="empty_data">${language.empty}</div>`); 1230 } 1231 1232 // match_table - ç§¯åæ¦ 1233 if (sportType === 'football' && data.table && Object.keys(data.table).length > 0) { 1234 var tableHtml = generateMatchTableHtml(data.table, sportType); 1235 jQuery('.match_table .match-lists').html(tableHtml); 1236 } else { 1237 jQuery('.match_table .match-lists').html(`<div class="empty_data">${language.empty}</div>`); 1238 } 1239 1240 // match_h2h - åå²äº¤é 1241 var h2hHtml = generateMatchListHtml(data.vs || [], 'h2h'); 1242 jQuery('.match_h2h .match-lists').html(h2hHtml); 1243 1244 // match_h2h_home - 主éåå² 1245 var homeHistoryHtml = generateMatchListHtml(data.home || [], 'home'); 1246 jQuery('.match_h2h_home .match-lists').html(homeHistoryHtml); 1247 1248 // match_h2h_away - 客éåå² 1249 var awayHistoryHtml = generateMatchListHtml(data.away || [], 'away'); 1250 jQuery('.match_h2h_away .match-lists').html(awayHistoryHtml); 1251} 1252 1253 1254 1255// çææ¯èµä¿¡æ¯HTML 1256function generateMatchInfoHtml(matchInfo) { 1257 // æ´æ°åºæ¬ä¿¡æ¯ 1258 jQuery('.competition-name').text(matchInfo.competition_name); 1259 jQuery('.venue-name').text(matchInfo.venue_name || 'Unknown'); 1260 jQuery('.match-time').text(formatDate('y-m-d H:i', matchInfo.match_time * 1000)); 1261 1262 // 天æ°ä¿¡æ¯ï¼å¦ææï¼ 1263 if (matchInfo.environment) { 1264 var weatherData = { 1265 "1": "Partly Cloudy", "2": "Cloudy", "3": "Partly Cloudy / Rain", "4": "Snow", 1266 "5": "Clear", "6": "Overcast with Rain / Isolated Thunderstorms", "7": "Overcast", 1267 "8": "Haze", "9": "Overcast with Rain", "10": "Cloudy with Rain", 1268 "11": "Cloudy with Rain / Isolated Thunderstorms", "12": "Partly Cloudy / Rain and Thunderstorms", 1269 "13": "Fog" 1270 }; 1271 1272 jQuery('.weather-name').text(weatherData[matchInfo.environment.weather] || 'Unknown'); 1273 jQuery('.temperature-value').text((matchInfo.environment.temperature || 'N/A') + '°C'); 1274 jQuery('.humidity-value').text((matchInfo.environment.humidity || 'N/A') + '%'); 1275 1276 // æ¾ç¤ºå¤©æ°ç¸å ³å段 1277 jQuery('.weather-info, .temperature-info, .humidity-info').show(); 1278 } else { 1279 // éè天æ°ç¸å ³å段 1280 jQuery('.weather-info, .temperature-info, .humidity-info').hide(); 1281 } 1282} 1283 1284// çææ¯èµç»è®¡HTML 1285function generateMatchStatsHtml(stats) { 1286 var html = ''; 1287 1288 // APIè¿åçstatsæ¯æ°ç»æ ¼å¼ï¼[{away:16, home:5, type:22}, ...] 1289 if (stats && Array.isArray(stats) && stats.length > 0) {
1290 stats.forEach(function(stat) { 1291 var homeValue = parseFloat(stat.home) || 0; 1292 var awayValue = parseFloat(stat.away) || 0; 1293 var statType = stat.type; 1294 var total = homeValue + awayValue; 1295 1296 // é¿å é¤ä»¥é¶ 1297 var homePercent = total > 0 ? Math.round((homeValue / total) * 100) : 50; 1298 var awayPercent = total > 0 ? Math.round((awayValue / total) * 100) : 50; 1299 1300 // ç¡®å®åªä¸æ¹æ´å¥½ï¼ç¨äºå¾è¡¨æ ·å¼ 1301 var homeClass = homeValue > awayValue ? 'wcl-betterSideBackground_q18q-' : 'wcl-worseSideOrEqualBackground_Zhv0n'; 1302 var awayClass = awayValue > homeValue ? 'wcl-betterSideBackground_q18q-' : 'wcl-worseSideOrEqualBackground_Zhv0n'; 1303 1304 // æ ¹æ®typeè·åè¯è¨ææ¬ 1305 var statName = language['stats_' + statType] || 'Stat ' + statType; 1306 1307 html += '<div class="wcl-row_2oCpS">'; 1308 html += '<div class="wcl-category_Ydwqh">'; 1309 html += '<div class="wcl-value_XJG99 wcl-homeValue_3Q-7P">'; 1310 html += '<strong class="wcl-simpleText_2t3pL wcl-scores-simple-text-01_8lVyp wcl-bold_MMDhq">' + homePercent + '%</strong>'; 1311 html += '</div>'; 1312 html += '<div class="wcl-category_6sT1J">'; 1313 html += '<strong class="wcl-simpleText_2t3pL wcl-scores-simple-text-01_8lVyp wcl-bold_MMDhq">' + statName + '</strong>'; 1314 html += '</div>'; 1315 html += '<div class="wcl-value_XJG99 wcl-awayValue_Y-QR1">'; 1316 html += '<strong class="wcl-simpleText_2t3pL wcl-scores-simple-text-01_8lVyp wcl-bold_MMDhq">' + awayPercent + '%</strong>'; 1317 html += '</div>'; 1318 html += '</div>'; 1319 html += '<div class="wcl-charts_UfKzp">'; 1320 html += '<div class="wcl-chart_-31bu wcl-home_yQ91A">'; 1321 html += '<div class="' + homeClass + '" style="width: ' + homePercent + '%;"></div>'; 1322 html += '</div>'; 1323 html += '<div class="wcl-chart_-31bu">'; 1324 html += '<div class="' + awayClass + '" style="width: ' + awayPercent + '%;"></div>'; 1325 html += '</div>'; 1326 html += '</div>'; 1327 html += '</div>'; 1328 }); 1329 } 1330 1331 // å¦ææ²¡æçæä»»ä½å å®¹ï¼æ¾ç¤ºç©ºæ°æ® 1332 if (!html) { 1333 html += `<div class="empty_data">${language.empty}</div>`; 1334 } 1335 1336 return html; 1337}// çææ¯èµéµå®¹HTML 1338function generateMatchLineupHtml(matchInfo, lineup) { 1339 var html = '<div class="match-lineup">'; 1340 1341 if (lineup.home && lineup.away) { 1342 // 主ééµå®¹ 1343 html += '<div class="team-lineup home-lineup">'; 1344 html += '<h3>' + matchInfo.home_name + '</h3>'; 1345 html += '<div class="formation">' + (lineup.home.formation || 'N/A') + '</div>'; 1346 1347 if (lineup.home.players) { 1348 html += '<div class="players-list">'; 1349 lineup.home.players.forEach(function(player) { 1350 html += '<div class="player-item">'; 1351 html += '<span class="player-number">' + (player.number || '') + '</span>'; 1352 html += '<span class="player-name">' + (player.name || '') + '</span>'; 1353 html += '<span class="player-position">' + (player.position || '') + '</span>'; 1354 html += '</div>'; 1355 }); 1356 html += '</div>'; 1357 } 1358 1359 html += '</div>'; 1360 1361 // 客ééµå®¹ 1362 html += '<div class="team-lineup away-lineup">'; 1363 html += '<h3>' + matchInfo.away_name + '</h3>'; 1364 html += '<div class="formation">' + (lineup.away.formation || 'N/A') + '</div>'; 1365 1366 if (lineup.away.players) { 1367 html += '<div class="players-list">'; 1368 lineup.away.players.forEach(function(player) { 1369 html += '<div class="player-item">'; 1370 html += '<span class="player-number">' + (player.number || '') + '</span>'; 1371 html += '<span class="player-name">' + (player.name || '') + '</span>'; 1372 html += '<span class="player-position">' + (player.position || '') + '</span>'; 1373 html += '</div>'; 1374 }); 1375 html += '</div>'; 1376 } 1377 1378 html += '</div>'; 1379 } 1380 1381 html += '</div>'; 1382 return html; 1383} 1384 1385// çææ¯èµå表HTMLï¼éç¨æ¹æ³ï¼ç¨äºæ£é¢äº¤éã主éåå²ã客éåå²ï¼ 1386function generateMatchListHtml(matchData, listType) { 1387 let html = ''; 1388 1389 if (!Array.isArray(matchData) || matchData.length === 0) { 1390 return `<div class="empty_data">${language.empty}</div>`; 1391 } 1392 1393 // å岿¯èµåªæ¾ç¤ºå·²ç»æçæ¯èµ 1394 matchData.forEach((match, index) => { 1395 // ç¡®å®æ¯å¦æ¯æåä¸åºæ¯èµ 1396 let isLastClass = index === matchData.length - 1 ? 'event__match--last' : ''; 1397 1398 // æ ¼å¼åæ¯èµæ¶é´åæ¥æ 1399 const formattedDate = formatDate('d-m', match.match_time); 1400 const formattedTime = formatDate('H:i', match.match_time); 1401 1402 // æ ¹æ®è¿å¨ç±»åè·åæ¯å 1403 let homeScore, awayScore, scoreDetails = ''; 1404 1405 if (sportType === 'basketball') { 1406 // 篮çï¼è®¡ç®åèæ»å 1407 homeScore = (match.home_scores[0] || 0) + (match.home_scores[1] || 0) + (match.home_scores[2] || 0) + (match.home_scores[3] || 0); 1408 awayScore = (match.away_scores[0] || 0) + (match.away_scores[1] || 0) + (match.away_scores[2] || 0) + (match.away_scores[3] || 0); 1409 1410 // 篮çèæ¯å详æ 1411 scoreDetails = `
1412 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home1">${match.home_scores[0] || 0}</span> 1413 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away1">${match.away_scores[0] || 0}</span> 1414 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home2">${match.home_scores[1] || 0}</span> 1415 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away2">${match.away_scores[1] || 0}</span> 1416 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home3">${match.home_scores[2] || 0}</span> 1417 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away3">${match.away_scores[2] || 0}</span> 1418 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home4">${match.home_scores[3] || 0}</span> 1419 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away4">${match.away_scores[3] || 0}</span> 1420 `; 1421 } else { 1422 // è¶³çï¼è·åæ¯å 1423 homeScore = match.home_scores[0] || 0; 1424 awayScore = match.away_scores[0] || 0; 1425 1426 // è¶³çè§çæ°è¯¦æ 1427 scoreDetails = ` 1428 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__part--home event__part--1"><img src="${theme_uri}/assets/img/corner.png">${match.home_scores[4] > 0 ? match.home_scores[4] : '-' }</span> 1429 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__part--away event__part--1"><img src="${theme_uri}/assets/img/corner.png">${match.away_scores[4] > 0 ? match.away_scores[4] : '-'}</span> 1430 `; 1431 } 1432 1433 // å岿¯èµé½æ¯å·²ç»æçæ¯èµï¼ä½¿ç¨ finished ç¶æ 1434 const statusClass = sportType === 'basketball' ? 'event__match--finished bb' : 'event__match--finished'; 1435 1436 // æ ¹æ®å表类åç¡®å®æ¯å¦é«äº®æ¾ç¤ºè·èæ¯èµ 1437 let winnerClass = ''; 1438 if (listType === 'home') { 1439 // 主éåå²ï¼é«äº®ä¸»éè·èçæ¯èµ 1440 winnerClass = homeScore > awayScore ? 'event__match--winner' : ''; 1441 } else if (listType === 'away') { 1442 // 客éåå²ï¼é«äº®å®¢éè·èçæ¯èµ 1443 winnerClass = awayScore > homeScore ? 'event__match--winner' : ''; 1444 } 1445 // æ£é¢äº¤éï¼h2hï¼ä¸é«äº®ä»»ä½ä¸æ¹ 1446 1447 // çææ¯èµHTML 1448 html += ` 1449 <div class="event__match event__match--withRowLink ${statusClass} ${isLastClass} ${winnerClass} event__match--twoLine" id="${listType}_${match.match_id}"> 1450 <a href="${matchinfo_page[sportType]}${match.match_id}" target="_self" title="${language.look_match_info}" class="eventRowLink"></a> 1451 <div class="event__time">${formattedDate} ${formattedTime}</div> 1452 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--home">${homeScore}</span> 1453 <span class="wcl-matchRowScore_fWR-Z wcl-isFinal_7U4ca event__score event__score--away">${awayScore}</span> 1454 ${scoreDetails} 1455 <div class="wcl-participant_bctDY event__homeParticipant"> 1456 <img class="wcl-assetContainer_KJQf9 wcl-logo_UrSpU wcl-sizeXXS_CNb8a" alt="${match.home_name}" loading="lazy" src="${match.home_logo}" onerror="this.src='${theme_uri}/assets/img/team_default.png'"> 1457 <span class="wcl-simpleText_2t3pL wcl-scores-simple-text-01_8lVyp wcl-name_jjfMf">${match.home_name}</span> 1458 </div> 1459 <div class="wcl-participant_bctDY event__awayParticipant"> 1460 <img class="wcl-assetContainer_KJQf9 wcl-logo_UrSpU wcl-sizeXXS_CNb8a" alt="${match.away_name}" loading="lazy" src="${match.away_logo}" onerror="this.src='${theme_uri}/assets/img/team_default.png'"> 1461 <span class="wcl-simpleText_2t3pL wcl-scores-simple-text-01_8lVyp wcl-name_jjfMf">${match.away_name}</span> 1462 </div> 1463 </div> 1464 `; 1465 }); 1466 1467 return html; 1468} 1469 1470 1471 1472// çææ¯èµè¯¦æ é¡µç§¯åæ¦HTMLï¼ä¸å å«Formåæ®µï¼ 1473function generateMatchTableHtml(data, sportType) { 1474 if (!data.list || data.list.length === 0) { 1475 return `<div class="empty_data">${language.empty}</div>`; 1476 } 1477 1478 var lang = sportType === 'basketball' ? bb_language['intergal'] : language['intergal']; 1479 var html = ''; 1480 var promotions_html = ''; 1481 1482 // çæ promotions HTML 1483 if (data.promotions && Object.keys(data.promotions).length > 0) { 1484 promotions_html = '<div class="tableLegend"><div class="tableLegend__rank">';
1485 Object.values(data.promotions).forEach(promo => { 1486 promotions_html += ` 1487 <div class="tableLegend__row"> 1488 <div class="tableLegend__coloredSquare" style="background-color: ${promo.color};"></div> 1489 <span>${promo.name_en}</span> 1490 </div> 1491 `; 1492 }); 1493 promotions_html += '</div></div>'; 1494 } 1495 1496 // çææè¡æ¦ HTML 1497 html = '<div id="tournament-table" class="tournament-table-standings">'; 1498 html += '<div id="tournament-table-tabs-and-content">'; 1499 html += '<div class="tableWrapper">'; 1500 html += '<div class="ui-table">'; 1501 1502 // çæè¡¨æ ¼å 容 1503 html += '<div class="ui-table__body">'; 1504 1505 data.list.forEach(function(group) { 1506 // 为æ¯ä¸ªç»çæè¡¨å¤´ 1507 html += '<div class="ui-table__header">'; 1508 if (data.list.length > 1) { 1509 // å¤ä¸ªç»æ¶ï¼æååæ¾ç¤ºç»å 1510 html += '<div class="ui-table__headerCell table__headerCell--rank ui-table__headerCell--sortable ui-table__headerCell--sorted" role="button" tabindex="0">' + group.group + '</div>'; 1511 } else { 1512 // åä¸ªç»æ¶ï¼æ¾ç¤º# 1513 html += '<div class="ui-table__headerCell table__headerCell--rank ui-table__headerCell--sortable ui-table__headerCell--sorted" role="button" tabindex="0">#</div>'; 1514 } 1515 html += '<div class="ui-table__headerCell table__headerCell--participant ui-table__headerCell--sortable" role="button" tabindex="0">' + lang[0] + '</div>'; 1516 html += '<div class="ui-table__headerCell ui-table__headerCell--sortable" role="button" tabindex="0">' + lang[1] + '</div>'; 1517 1518 // æ ¹æ®è¿å¨ç±»åæ¾ç¤ºä¸åçå 1519 if (sportType === 'basketball') { 1520 // ç¯®çæ²¡æå¹³å±ï¼åªæ¾ç¤ºèåºåè´åº 1521 html += '<div class="ui-table__headerCell ui-table__headerCell--sortable" role="button" tabindex="0">' + lang[2] + '</div>'; 1522 html += '<div class="ui-table__headerCell ui-table__headerCell--sortable" role="button" tabindex="0">' + lang[4] + '</div>'; 1523 } else { 1524 // è¶³çæ¾ç¤ºèãå¹³ãè´ 1525 html += '<div class="ui-table__headerCell ui-table__headerCell--sortable" role="button" tabindex="0">' + lang[2] + '</div>'; 1526 html += '<div class="ui-table__headerCell ui-table__headerCell--sortable" role="button" tabindex="0">' + lang[3] + '</div>'; 1527 html += '<div class="ui-table__headerCell ui-table__headerCell--sortable" role="button" tabindex="0">' + lang[4] + '</div>'; 1528 } 1529 1530 html += '<div class="ui-table__headerCell table__cell--score ui-table__headerCell--sortable" role="button" tabindex="0">' + lang[5] + '</div>'; 1531 1532 // åªæè¶³çæ¾ç¤ºåèç 1533 if (sportType !== 'basketball') { 1534 html += '<div class="ui-table__headerCell table__cell--goalsForAgainstDiff ui-table__headerCell--sortable" role="button" tabindex="0">' + lang[7] + '</div>'; 1535 } 1536 1537 html += '<div class="ui-table__headerCell table__cell--points ui-table__headerCell--sortable" role="button" tabindex="0">' + lang[8] + '</div>'; 1538 // 注æï¼è¿é䏿·»å Form åæ®µç表头 1539 html += '</div>'; 1540 1541 group.list.forEach(function(team, index) { 1542 var promotionColor = team.promotion_id > 0 && data.promotions[team.promotion_id] ? data.promotions[team.promotion_id].color : ''; 1543 var rankStyle = promotionColor ? `style="--color: ${promotionColor}"` : ''; 1544 1545 html += '<div class="ui-table__row" ' + rankStyle + '>'; 1546 html += '<div class="table__cell table__cell--rank table__cell--sorted">'; 1547 html += '<div class="tableCellRank" title="">' + (index + 1) + '.</div>'; 1548 html += '</div>'; 1549 1550 html += '<div class="table__cell table__cell--participant">'; 1551 html += '<div class="tableCellParticipant">'; 1552 html += '<div class="tableCellParticipant__block">'; 1553 html += '<a class="tableCellParticipant__image" href="' + team_page[sportType] + (team.team_id ?? team.id) + '" target="_self" title="' + team.name + '">'; 1554 html += '<img class="participant__image" loading="lazy" alt="' + team.name + '" src="' + team.logo + '" onerror="this.src=\'' + theme_uri + '/assets/img/team_default.png\'">'; 1555 html += '</a>'; 1556 html += '<a href="' + team_page[sportType] + (team.team_id ?? team.id) + '" target="_self" class="tableCellParticipant__name">' + team.name + '</a>'; 1557 html += '</div>'; 1558 html += '</div>'; 1559 html += '</div>'; 1560 1561 html += '<span class="table__cell table__cell--value">' + team.total + '</span>'; 1562 1563 // æ ¹æ®è¿å¨ç±»åæ¾ç¤ºä¸åçæ°æ® 1564 if (sportType === 'basketball') { 1565 // 篮çï¼åªæ¾ç¤ºèåºåè´åº 1566 html += '<span class="table__cell table__cell--value">' + team.won + '</span>'; 1567 html += '<span class="table__cell table__cell--value">' + team.loss + '</span>'; 1568 } else { 1569 // è¶³çï¼æ¾ç¤ºèãå¹³ãè´ 1570 html += '<span class="table__cell table__cell--value">' + team.won + '</span>'; 1571 html += '<span class="table__cell table__cell--value">' + (team.draw || 0) + '</span>'; 1572 html += '<span class="table__cell table__cell--value">' + team.loss + '</span>'; 1573 } 1574 1575 html += '<span class="table__cell table__cell--value table__cell--score">' + team.goals + ':' + team.goals_against + '</span>'; 1576 1577 // åªæè¶³çæ¾ç¤ºåèç 1578 if (sportType !== 'basketball') { 1579 html += '<span class="table__cell table__cell--value table__cell--goalsForAgainstDiff">' + team.goal_diff + '</span>'; 1580 } 1581 1582 html += '<span class="table__cell table__cell--value table__cell--points">' + team.points + '</span>'; 1583 // 注æï¼è¿é䏿·»å Form åæ®µçå 容 1584 1585 html += '</div>'; 1586 }); 1587 }); 1588 1589 html += '</div>'; 1590 html += '</div>'; 1591 html += '</div>'; 1592 html += promotions_html; 1593 html += '</div>'; 1594 html += '</div>'; 1595 1596 return html; 1597} 1598 1599// 页é¢å è½½å®æåæ§è¡ 1600jQuery(document).ready(function () { 1601 jQuery('body').removeClass('isSportPage','tournament-page','team-page'); 1602 if (page_slug == 'home') { 1603 jQuery('body').addClass('isSportPage'); 1604 1605 get_country_list(sportType); 1606 get_category_list(sportType); 1607 get_match_result(sportType,1, real_day); 1608 } 1609 1610 if (page_slug == 'league') { 1611 jQuery('body').addClass('tournament-page'); 1612 1613 get_country_list(sportType); 1614 get_category_list(sportType); 1615 get_league_info(sportType,leagueId); 1616 } 1617 1618 if (page_slug == 'team') { 1619 jQuery('body').addClass('team-page'); 1620 1621 get_country_list(sportType); 1622 get_category_list(sportType); 1623 get_team_info(sportType,teamId); 1624 } 1625 1626 if (page_slug == 'matchInfo') { 1627 jQuery('body').addClass('team-page'); 1628 1629 get_country_list(sportType); 1630 get_category_list(sportType);
1631 get_match_info(sportType,matchId); 1632 } 1633 1634 1635 // åæ¢è¶³ç/篮ç 1636 jQuery('.menuTop__item').click(function(){ 1637 let selectedType = jQuery(this).data('type'); 1638 if( sportType != selectedType ){ 1639 sportType = selectedType; 1640 // 忢èåé«äº® 1641 jQuery('.menuTop__item').removeClass('menuTop__item--active'); 1642 jQuery(this).addClass('menuTop__item--active'); 1643 1644 // 忢çé¨èèµå表æ¾ç¤º 1645 jQuery('.leftMenu__list').removeClass('active'); 1646 1647 if (sportType === 'basketball') { 1648 jQuery('.basketball-league-list').addClass('active'); 1649 } else { 1650 jQuery('.football-league-list').addClass('active'); 1651 } 1652 1653 // è·å左侧èåæ°æ® 1654 1655 get_country_list(sportType); 1656 get_category_list(sportType); 1657 1658 // è·åèµç¨èµææ°æ® 1659 get_match_result(sportType,1, real_day); 1660 } 1661 }); 1662 1663 // 左侧èå å½å®¶ ç¹å»äºä»¶ 1664 jQuery('.country_list').on('click','.lmc__item',function(){ 1665 let sportType = jQuery(this).data('ctype'); 1666 let countryId = jQuery(this).data('id'); 1667 let _that = jQuery(this); 1668 1669 if( !_that.parent().hasClass('lmc__blockOpened') ){ 1670 if( !_that.next().hasClass('lmc__template') ){ 1671 _that.parent().addClass('lmc__blockOpened'); 1672 _that.addClass('lmc__itemOpen'); 1673 if( !_that.next().hasClass(`${sportType}_${countryId}`) ){ 1674 _that.after(`<div class="${sportType}_${countryId}"><div class="ajax-loading"><div class="loading-line" style="width: 70%;height:15px;"></div><div class="loading-line" style="width: 70%;height:15px;"></div><div class="loading-line" style="width: 70%;height:15px;"></div></div></div>`); 1675 } 1676 1677 jQuery.ajax({ 1678 url: `${apiUrl[sportType]}/country/competition?id=${countryId}`, 1679 type: 'GET', 1680 dataType: 'json', 1681 success: function (res) { 1682 // å¤çæ°æ® 1683 let html = competitionListHtml(sportType,res.data); 1684 _that.next().remove(); 1685 _that.after(html); 1686 } 1687 }); 1688 }else{ 1689 _that.parent().addClass('lmc__blockOpened'); 1690 _that.addClass('lmc__itemOpen'); 1691 } 1692 }else{ 1693 _that.parent().removeClass('lmc__blockOpened'); 1694 _that.removeClass('lmc__itemOpen'); 1695 } 1696 }); 1697 1698 // 左侧èå åç±» ç¹å»äºä»¶ 1699 jQuery('.category_list').on('click','.lmc__item',function(){ 1700 let sportType = jQuery(this).data('ctype'); 1701 let countryId = jQuery(this).data('id'); 1702 let _that = jQuery(this); 1703 1704 if( !_that.parent().hasClass('lmc__blockOpened') ){ 1705 if( !_that.next().hasClass('lmc__template') ){ 1706 _that.parent().addClass('lmc__blockOpened'); 1707 _that.addClass('lmc__itemOpen'); 1708 if( !_that.next().hasClass(`${sportType}_${countryId}`) ){ 1709 _that.after(`<div class="${sportType}_${countryId}"><div class="ajax-loading"><div class="loading-line" style="width: 70%;height:15px;"></div><div class="loading-line" style="width: 70%;height:15px;"></div><div class="loading-line" style="width: 70%;height:15px;"></div></div></div>`); 1710 } 1711 1712 jQuery.ajax({ 1713 url: `${apiUrl[sportType]}/category/competition?id=${countryId}`, 1714 type: 'GET', 1715 dataType: 'json', 1716 success: function (res) { 1717 // å¤çæ°æ® 1718 let html = competitionListHtml(sportType,res.data); 1719 _that.next().remove(); 1720 _that.after(html); 1721 } 1722 }); 1723 }else{ 1724 _that.parent().addClass('lmc__blockOpened'); 1725 _that.addClass('lmc__itemOpen'); 1726 } 1727 }else{ 1728 _that.parent().removeClass('lmc__blockOpened'); 1729 _that.removeClass('lmc__itemOpen'); 1730 } 1731 }); 1732 1733 // èµäºå表 topäºä»¶ 1734 jQuery('.filters .filters__group .filters__tab').click(function(){ 1735 let type = jQuery(this).data('type'); 1736 jQuery(this).addClass('selected').siblings().removeClass('selected'); 1737 if( type == 'live' ){ 1738 jQuery('.filters .calendarContainer').hide(); 1739 get_match_result(sportType,1,real_day,function(){ 1740 jQuery('.match-lists .event__match').hide(); 1741 jQuery('.match-lists .event__match.event__match--live').show(); 1742 checkAndHideEmptyLeagues(); 1743 }); 1744 1745 }else{ 1746 jQuery('.match-lists .event__match').show(); 1747 1748 jQuery('.filters .calendarContainer').show(); 1749 let date = jQuery('.btn-ddmmyy.active').data('date'); 1750 if( date == undefined ){ 1751 date = real_day; 1752 } 1753 1754 if( date == real_day ){ 1755 if( type == 'all' ){ 1756 get_match_result(sportType,1,date); 1757 } else if( type == 'scheduled' ){ 1758 get_match_result(sportType,1,date,function(){ 1759 jQuery('.match-lists .event__match.event__match--live').hide(); 1760 checkAndHideEmptyLeagues(); 1761 }); 1762 }else{ 1763 get_match_result(sportType,0,date); 1764 } 1765 }else{ 1766 get_match_result(sportType,real_day > date ? 0 : 1,date); 1767 } 1768 } 1769 }); 1770 1771 // tab 忢äºä»¶ 1772 jQuery('.tabs__tab').click(function(){ 1773 let tabId = jQuery(this).attr('id'); 1774 1775 // 忢 tab éä¸ç¶æ 1776 jQuery(this).addClass('selected').siblings().removeClass('selected'); 1777 1778 // éèææ section.event å ç´ 1779 jQuery('#live-table section.event').hide(); 1780 1781 // 对äºå ¶ä» tabï¼æ¾ç¤ºå¯¹åºç±»åç section 1782 jQuery(`#live-table section.event.${tabId}`).show(); 1783 1784 if( sportType == 'basketball' ){ 1785 jQuery('#live-table section.event.match_stats').hide(); 1786 jQuery('#live-table section.event.match_lineup').hide(); 1787 } 1788 }); 1789});
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.