您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds score evaluation, view TotalScore, AH1,AH2 (+ 1H and 1P) at matchdetails and can show soccer game stats on mygames tab.
// ==UserScript== // @name Flashscore Better Score // @namespace Flashscore // @version 0.6 // @include http://www.flashscore.com/* // @include http://www.flashscore.de/* // @description Adds score evaluation, view TotalScore, AH1,AH2 (+ 1H and 1P) at matchdetails and can show soccer game stats on mygames tab. // @author [email protected] // @license Creative Commons (by-nc-sa); http://creativecommons.org/licenses/by-sa/4.0/ // @grant none // ==/UserScript== //Show Stats on Mygames Tab var showSoccerStats = true; //How many Stats Rows show var soccerStatsCount = 3; //Stats Row Width var srw = 75; //browser compatible if(!String.prototype.startsWith){ String.prototype.startsWith = function (str) { return !this.indexOf(str); } } if(!String.prototype.endsWith){ String.prototype.endsWith = function (s) { return this.indexOf(s, this.length - s.length) !== -1; } } function isInt(n){ return Number(n) === n && n % 1 === 0; } if (typeof String.prototype.translate !== 'function') { String.prototype.translate = function (o) { return this.replace(/{([^{}]*)}/g, function (a, b) { var r = o[b]; return typeof r === 'string' ? r : a; }); }; } var SRefD = '<select id="SRef"><option value="AH1">AH1</option><option value="AH2">AH2</option><option value="TotalScore">TotalScore</option><option value="Team1Score">Team1Score</option><option value="Team1Score">Team2Score</option><option value="1H_AH1">1H_AH1</option><option value="1H_AH2">1H_AH2</option><option value="1H_TotalScore">1H_TotalScore</option><option value="1P_AH1">1P_AH1</option><option value="1P_AH2">1P_AH2</option><option value="1P_TotalScore">1P_TotalScore</option>'; var SOPD = '</select> OP:<select ID="SOP"><option value="LT"><</option><option value="GT">></option><option value="LE">≤</option><option value="GE">≥</option><option value="EQ">≡</option><option value="NE">≠</option>'; var COMPD = '</select> COMP:<input type="number" id="SCOMP" value="0" step="0.5">'; var SelDef = SRefD + SOPD + COMPD; var OStatsFT = '<option>FT - {a}</option><option>FT - {b}</option><option>FT - {c}</option><option>FT - {d}</option><option>FT - {e}</option><option>FT - {f}</option><option>FT - {g}</option><option>FT - {h}</option><option>FT - {i}</option><option>FT - {j}</option><option>FT - {k}</option><option>FT - {l}</option><option>FT - {m}</option>'; var OStats1H = '<option>1H - {a}</option><option>1H - {b}</option><option>1H - {c}</option><option>1H - {d}</option><option>1H - {e}</option><option>1H - {f}</option><option>1H - {g}</option><option>1H - {h}</option><option>1H - {i}</option><option>1H - {j}</option><option>1H - {k}</option><option>1H - {l}</option><option>1H - {m}</option>'; var OStats2H = '<option>2H - {a}</option><option>2H - {b}</option><option>2H - {c}</option><option>2H - {d}</option><option>2H - {e}</option><option>2H - {f}</option><option>2H - {g}</option><option>2H - {h}</option><option>2H - {i}</option><option>2H - {j}</option><option>2H - {k}</option><option>2H - {l}</option><option>2H - {m}</option>'; var OStatsDef = OStatsFT + OStats1H + OStats2H; var translateCOM = {a:'Ball Possession',b:'Goal Attempts',c:'Shots on Goal',d:'Shots off Goal',e:'Blocked Shots',f:'Free Kicks',g:'Corner Kicks',h:'Offsides',i:'Throw-in',j:'Goalkeeper Saves',k:'Red Cards',l:'Yellow Cards',m:'Fouls'}; var translateDE = {a:'Ballbesitz',b:'Torversuche',c:'Schüsse aufs Tor',d:'Schüsse neben das Tor',e:'Blocked Shots',f:'Freistöße',g:'Eckbälle',h:'Abseits',i:'Einwürfe',j:'Gehaltene Bälle',k:'Rote Karten',l:'Gelbe Karten',m:'Fouls'}; if(document.domain.endsWith('.de')){ console.log('Translate to German'); var OStats = OStatsDef.translate(translateDE); } else { console.log('Translate to English'); var OStats = OStatsDef.translate(translateCOM); } if (!showSoccerStats) { soccerStatsCount = 0; } function MyCompareScore(SRef, SCOMP, SOP, T1, T2) { var A; var B; var R; T1 = parseInt(T1); T2 = parseInt(T2); if (SRef.endsWith('TotalScore') ){ A = T1 + T2; } else if (SRef.endsWith('AH1') ){ A = T2 - T1; } else if (SRef.endsWith('AH2') ){ A = T1 - T2; } else if (SRef.endsWith('Team1Score') ){ A = T1; } else if (SRef.endsWith('Team2Score') ){ A = T2; } B = parseFloat(SCOMP); C = isInt(B); if (SOP == 'GT') { if(C && B == A) return 2; return A > B; } else if (SOP == 'LT') { if(C && B == A) return 2; return A < B; } else if (SOP == 'GE') { return A >= B; } else if (SOP == 'LE') { return A <= B; } else if (SOP == 'EQ') { return A == B; } else if (SOP == 'NE') { return A != B; } return 0; } function MyOperationText(SOP) { if (SOP == 'GT') { return '>'; } else if (SOP == 'LT') { return '<'; } else if (SOP == 'GE') { return '>='; } else if (SOP == 'LE') { return '<='; } else if (SOP == 'EQ') { return '=='; } else if (SOP == 'NE') { return '!='; } return null; } function MyFlashscore() { //Get Saved if (localStorage.getItem('BetterScoreSel') === null) { LSSel = []; } else { LSSel = JSON.parse(localStorage['BetterScoreSel']); } //-------------------------------------------------------------------------------------------------------------- // match-summary //-------------------------------------------------------------------------------------------------------------- var uri; var re = /.*\/match\/(.*)\/#/; if ((uri = re.exec(window.location.href)) !== null) { //More Score Top if ($('.current-result > .r > .sum').length) { T1 = parseInt($('.current-result > .r > span:eq(0)').text()); T2 = parseInt($('.current-result > .r > span:eq(2)').text()); sum = T1 + T2; diff = T2 - T1; if (!isNaN(sum)) { $('.current-result > .r > .sum').text(sum + ' | AH1 ' + diff); } } else { if ($('.current-result > .r').length) { $('.current-result > .r').append('<div class="sum"></div>'); MyFlashscore(); } else { if ($('.current-result > .sum').length) { T1 = parseInt($('.current-result > span:eq(0)').text()); T2 = parseInt($('.current-result > span:eq(2)').text()); sum = T1 + T2; diff = T2 - T1; if (!isNaN(sum)) { $('.current-result > .sum').text(sum + ' | AH1 ' + diff); } } else { $('.current-result').append('<div class="sum"></div>'); MyFlashscore(); } } } //Basketball Quarters sum if ($('#parts> tbody > tr.odd:first > td').length == 7 && $('#parts> tbody > tr').length <= 3) { $('#parts> tbody').append('<tr class="odd"><td></td><td class="Sum"></td><td class="score 1Q"></td><td class="score 2Q"></td><td class="score 3Q"></td><td class="score 4Q"></td></tr>'); $sum = parseInt($('#parts> tbody > tr:eq(1) >td:eq(1)').text()) + parseInt($('#parts> tbody > tr:eq(2) >td:eq(1)').text()); $sum1Q = parseInt($('#parts> tbody > tr:eq(1) >td:eq(2)').text()) + parseInt($('#parts> tbody > tr:eq(2) >td:eq(2)').text()); $sum2Q = parseInt($('#parts> tbody > tr:eq(1) >td:eq(3)').text()) + parseInt($('#parts> tbody > tr:eq(2) >td:eq(3)').text()); $sum3Q = parseInt($('#parts> tbody > tr:eq(1) >td:eq(4)').text()) + parseInt($('#parts> tbody > tr:eq(2) >td:eq(4)').text()); $sum4Q = parseInt($('#parts> tbody > tr:eq(1) >td:eq(5)').text()) + parseInt($('#parts> tbody > tr:eq(2) >td:eq(5)').text()); if (!isNaN($sum)) { $('#parts> tbody > tr >td.Sum').text($sum); } if (!isNaN($sum1Q)) { $('#parts> tbody > tr >td.1Q').text($sum1Q); } if (!isNaN($sum2Q)) { $('#parts> tbody > tr >td.2Q').text($sum2Q); } if (!isNaN($sum3Q)) { $('#parts> tbody > tr >td.3Q').text($sum3Q); } if (!isNaN($sum4Q)) { $('#parts> tbody > tr >td.4Q').text($sum4Q); } } // Add comparison options if ($('th.header > div').length == 1) { $('th.header').append('<div> - Ref:' + SelDef + '</div>'); } //Check have saved data and first load var i; var m; if (match_summary_first) { for (i = 0; i < LSSel.length; i++) { if (LSSel[i]['ID'] == uri[1]) { $("#SRef").val(LSSel[i]['SRef']); $("#SCOMP").val(LSSel[i]['SCOMP']); $("#SOP").val(LSSel[i]['SOP']); break; } } match_summary_first = false; } // Check comparison options if ($("#SCOMP").val() && !isNaN(sum)) { var CT1; var CT2; if( $("#SRef option:selected").val().startsWith('1H_') ){ if( $('body.basketball').length > 0){ CT1 = parseInt($('.p1_home').text())+ parseInt($('.p2_home').text()); CT2 = parseInt($('.p1_away').text())+ parseInt($('.p2_away').text()); } else { CT1 = $('.p1_home').text(); CT2 = $('.p1_away').text(); } } else if( $("#SRef option:selected").val().startsWith('1P_') ){ CT1 = $('.p1_home').text(); CT2 = $('.p1_away').text(); } else { CT1 = T1; CT2 = T2; } var R = MyCompareScore($("#SRef option:selected").val(), $("#SCOMP").val(), $("#SOP option:selected").val(), CT1, CT2); console.log($("#SRef option:selected").val(), $("#SCOMP").val(), $("#SOP option:selected").val(), R, CT1, CT2); if (R == 1) { $('#flashscore_column').css("background-color", "#9f9"); } else if (R == 2) { $('#flashscore_column').css("background-color", "#ff9"); } else { $('#flashscore_column').css("background-color", "#f99"); } // add title icons /* var link = document.createElement('link'); link.rel = 'shortcut icon'; if (R) { link.href = 'http://files.softicons.com/download/application-icons/32x32-free-design-icons-by-aha-soft/ico/Ok.ico'; } else { link.href = 'http://files.softicons.com/download/toolbar-icons/max-mini-icons-by-ashung/ico/error.ico '; } document.getElementsByTagName('head')[0].appendChild(link); */ } } //-------------------------------------------------------------------------------------------------------------- // My-Games //-------------------------------------------------------------------------------------------------------------- if ($('li.ifmenu-custom.selected').length === 1) { //console.log('My-Games'); if ($('div.MySRef').length === 0) { $('.table-line-bottom:first').after('<div class="MySRef"><label>Ref:</label>' + SelDef + '</div>'); } if ($('td.MyRefer').length === 0) { $skipnext = false; $('.table-main > table > tbody >tr:not([class="blank-line"]) ').each(function() { if ($skipnext) { $skipnext = false; return true; } var FO = null; var i; for (i = 0; i < LSSel.length; i++) { if ($(this).attr('id').endsWith(LSSel[i]['ID'])) { FO = LSSel[i]; break; } } //console.log(FO); if ($(this).parents('table').attr('class') == 'basketball') { if (!!FO) { $(this).append('<td rowspan="2" class="MyRefer" style="nowrap;width: 100px;" sref="' + FO['SRef'] + '" sop="' + FO['SOP'] + '" scomp="' + FO['SCOMP'] + '">' + FO['SRef'] + ' ' + MyOperationText(FO['SOP']) + ' ' + FO['SCOMP'] + '</td>'); } else { $(this).append('<td rowspan="2" class="MyRefer" style="nowrap;width: 100px;" >Choose your bet below the table and click here</td>'); } $skipnext = true; } else { var statshtml = ''; if ($(this).parents('table').attr('class') == 'soccer' && showSoccerStats) { for (i = 0; i < soccerStatsCount; i++) { statshtml += '<td id="MyS' + i + '_' + $(this).attr('id').substr(4) + '" style="nowrap;"></td>'; } } if (!!FO) { $(this).append('<td class="MyRefer" style="nowrap;width: 100px;" sref="' + FO['SRef'] + '" sop="' + FO['SOP'] + '" scomp="' + FO['SCOMP'] + '">' + FO['SRef'] + ' ' + MyOperationText(FO['SOP']) + ' ' + FO['SCOMP'] + '</td>' + statshtml); } else { $(this).append('<td class="MyRefer" style="nowrap;width: 100px;">Choose your bet below the table and click here</td>' + statshtml); } } }); $('.head_ab').each(function() { $(this).parent().append('<td></td>'); if ($(this).parents('table').attr('class') == 'soccer' && showSoccerStats) { for (i = 0; i < soccerStatsCount; i++) { $(this).parent().append('<td style="nowrap;width: ' + srw + 'px;"><select style="width:' + srw + 'px" class="SStats' + i + '">' + OStats + '</select></td>'); } } }); //Kosmetik $('.table-main > table > tbody >tr.blank-line > td ').each(function() { $(this).attr('colspan', $(this).attr('colspan') + 1); }); $('.stats-link').css({'position':'relative','float':'right'}); if (MyGamesRunOne) { var addwidth = 100 + soccerStatsCount * srw; $('div.container > .content').width($('div.container > .content').width() + addwidth); $('#fsbody').width($('#fsbody').width() + addwidth); MyGamesRunOne = false; } // Save Changes from Select/Options $('.MyRefer').on('click', function(e) { e.stopPropagation(); //console.log($(this)); var SRef = $("#SRef option:selected").val(); var SOP = $("#SOP option:selected").val(); var SCOMP = $("#SCOMP").val(); var reb = /.+_.+_(.*)/; var m = reb.exec($(this).parent().attr('id')); var ID = m[1]; MakeSave(ID); //Set Attr ad Displaytext $(this).attr('SRef', SRef); $(this).attr('SOP', SOP); $(this).attr('SCOMP', parseFloat(SCOMP)); $(this).text(SRef + ' ' + MyOperationText(SOP) + ' ' + SCOMP); }); $('.MyRefer').on('mouseover', function(e) { e.stopPropagation(); }); } $('td.MyRefer').each(function() { if ($(this).is('[SRef]')) { var T1, T2; var re = ''; if( $(this).attr('SRef').startsWith('1H_') ){ re = /\((\d+).-.(\d+)\)/; if ((m = re.exec($($(this).parent()).find('.cell_sb').text())) !== null) { T1 = m[1]; T2 = m[2]; } else { if ($(this).parents('table').attr('class') == 'basketball') { T1 = parseInt($($(this).parent()).find('.cell_sd').text()) + parseInt($($(this).parent()).find('.cell_se').text()); T2 = parseInt($($(this).parent()).next().find('.cell_tb').text()) + parseInt($($(this).parent()).next().find('.cell_tc').text()); } else { T1 = $($(this).parent()).find('.cell_sd').text(); T2 = $($(this).parent()).next().find('.cell_tb').text(); } } } else if( $(this).attr('SRef').startsWith('1P_') ){ T1 = $($(this).parent()).find('.cell_sd').text(); T2 = $($(this).parent()).next().find('.cell_tb').text(); } else { re = /(\d+).-.(\d+)/; if ((m = re.exec($($(this).parent()).find('.score').text())) !== null) { T1 = m[1]; T2 = m[2]; } else if ($($(this).parent()).find('.score-home').text() !== '') { T1 = $($(this).parent()).find('.score-home').text(); T2 = $($(this).parent()).next().find('.score-away').text(); } } if (!isNaN(parseInt(T1))) { var R = MyCompareScore($(this).attr('SRef'), parseFloat($(this).attr('SCOMP')), $(this).attr('SOP'), T1, T2); //console.log($(this).attr('SRef'), $(this).attr('SCOMP'), $(this).attr('SOP'),R,T1,T2); if (R == 1) { $(this).css("background-color", "#9f9"); } else if (R == 2) { $(this).css("background-color", "#ff9"); } else { $(this).css("background-color", "#f99"); } } } }); } } function MyFlashscoreStats() { if ($('li.ifmenu-custom.selected').length === 1) { $('.table-main > table.soccer').each(function() { var i; var k; var action = {}; var c = 0; $(this).find("select option:selected").each(function() { action['MyS' + c] = $(this).text(); c++; }); $(this).find('tr[id]').each(function() { action['gid'] = $(this).attr('id').substr(4); if(document.domain.endsWith('.de')){ var url = 'http://d.flashscore.de/x/feed/d_st_' + action['gid'] + '_de_1'; } else { var url = 'http://d.flashscore.com/x/feed/d_st_' + action['gid'] + '_en_1'; } var x = cjs.feedRequest._createAjaxJqObject( url, function(status, header, data, json) { var respond = $('<html />').html(data); //console.log( respond ); //console.log( 'json:'+json ); var opt = JSON.parse(json); //Get all Stats var stats = []; for (i = 0; i < 3; i++) { stats[i] = []; respond.find('#tab-statistics-' + i + '-statistic tr').each(function() { var tds = $(this).find('td'); if (tds.length == 3) { var v = []; for (k = 0; k < 3; k++) { v[k] = $(tds[k]).text(); } stats[i].push(v); } }); } //console.log(stats); for (i = 0; i < soccerStatsCount; i++) { var m = 0; var n = opt['MyS' + i].split(" - "); if (n[0] == 'FT') { m = 0; } else if (n[0] == '1H') { m = 1; } else if (n[0] == '2H') { m = 2; } for (k = 0; k < stats[m].length; k++) { if (stats[m][k][1] == n[1]) { $('#MyS' + i + '_' + opt['gid']).text(stats[m][k][0] + ' : ' + stats[m][k][2]); break; } } } }, JSON.stringify(action) ); x.update(); }); }); } setTimeout(function() { MyFlashscoreStats(); }, 10000); } function MakeSave(ID) { //Get Saved if (localStorage.getItem('BetterScoreSel') === null) { LSSel = []; } else { LSSel = JSON.parse(localStorage['BetterScoreSel']); } var SRef = $("#SRef option:selected").val(); var SOP = $("#SOP option:selected").val(); var SCOMP = $("#SCOMP").val(); var TS = new Date().getTime(); //Remove old timestamps (5 Days) for (var i = 0; i < LSSel.length; i++) { if ((LSSel[i]['TS'] + 432000000) <= TS) { LSSel.splice(i, 1); } } //Remove old values for (i = 0; i < LSSel.length; i++) { if (LSSel[i]['ID'] == ID) { LSSel.splice(i, 1); break; } } //Add new values and saved LSSel.push({ SRef: SRef, SOP: SOP, SCOMP: SCOMP, TS: TS, ID: ID }); localStorage.setItem('BetterScoreSel', JSON.stringify(LSSel)); } var match_summary_first = true; var MyGamesRunOne = true; var sum = 0; var diff = 0; var T1 = 0; var T2 = 0; $('th.header').change(function() { var uri; var re = /.*\/match\/(.*)\/#/; if ((uri = re.exec(window.location.href)) !== null) { MakeSave(uri[1]); } MyFlashscore(); }); $(document).ready(function() { setInterval(function() { MyFlashscore(); }, 1000); if (showSoccerStats) { setTimeout(function() { MyFlashscoreStats(); }, 2000); } });