您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
lichessCurrentMatch
// ==UserScript== // @name liChess.org Current Match Score // @namespace http://userstyles.org // @description lichessCurrentMatch // @author ceberous // @homepage https://creatitees.info // @include https://lichess.org/* // @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js // @run-at document-start // @version 0.3 // ==/UserScript== ( function() { var lastRecordedMatch; var wPlayers; var wCurrentScores; if (!String.prototype.format) { String.prototype.format = function() { var args = arguments; return this.replace(/{(\d+)}/g, function(match, number) { return typeof args[number] != 'undefined' ? args[number] : match ; }); }; } function normalizeString( wString ) { wString = wString.split(""); var wL = wString.length; var wF = ""; for ( var i = 0; i < wL; ++i ) { var c = wString[i].charCodeAt(0); if ( c === 10 ) { continue; } if ( c === 32 ) { if ( wF.length < 1 ) { continue; } var x = i + 1; if ( x < wL ) { var d = wString[x].charCodeAt(0); if ( d != 32 && d != 10 ) { wF = wF + " "; } } } else { wF = wF + wString[i]; } } return wF; } function scoreStringToINT( wScoreString ) { var wNumRegEx = new RegExp( "[0-9]" ); var wTMP = wScoreString.split(""); var wFinal = ""; var wAddon = 0; for ( var i = 0; i < wTMP.length; ++i ) { if ( !wNumRegEx.test( wTMP[i] ) ) { wAddon = 0.5; } else { wFinal = wFinal + wTMP[i]; } } wFinal = parseInt( wFinal ); wFinal = wFinal + wAddon; return wFinal; } function getCurrentPlayers() { var wPlayers = $(".players").children(); var wPLen = $(".players").children().length; if ( wPLen < 1 ) { return undefined; } var wWhitePlayer = $(wPlayers[0]).children(); wWhitePlayer = $(wWhitePlayer[0]).attr("href"); wWhitePlayer = wWhitePlayer.split("/@/")[1]; var wBlackPlayer = $(wPlayers[1]).children(); wBlackPlayer = $(wBlackPlayer[0]).attr("href"); wBlackPlayer = wBlackPlayer.split("/@/")[1]; //alert( wWhitePlayer + " vs " + wBlackPlayer ); return [ wWhitePlayer , wBlackPlayer ]; } function getCurrentScore() { var wScores = {}; $(".score").each( function( indx , elem ) { var wPN = $(elem).next("th.user").text().split(" "); wPN = wPN.length > 1 ? wPN[1] : wPN[0]; var wScore = normalizeString( $(elem).text() ); wScores[wPN] = scoreStringToINT( wScore ); }); return wScores; } function insertIntoScoreTable( wScore1 , wScore2 ) { //var wP1 = "<td><th class='score win'>{0}</th></td>".format( wScore1 ); //var wP2 = "<td><th class='score lose'>{0}</th></td>".format( wScore2 ); var wP1 = "<td><a>{0}</a></td>".format( wScore1 ); var wP2 = "<td><a>{0}</a></td>".format( wScore2 ); console.log( wP1 ); console.log( wP2 ); var wS = $('.crosstable > table > tbody').children(); var wPOS = $(wS[0]).children().length - 1; var wP1CH = $( wS[0] ).children(); var wP2CH = $( wS[1] ).children(); $( wP1CH ).eq( wPOS ).after(wP1); $( wP2CH ).eq( wPOS ).after(wP2); } $(document).ready(function() { lastRecordedMatch = localStorage.getItem( "lastRecordedMatch" ); wPlayers = getCurrentPlayers(); if ( !wPlayers ) { return; } console.log( wPlayers ); wCurrentScores = getCurrentScore(); var key1 = wPlayers[0] + "@/vs/@" + wPlayers[1]; var key2 = wPlayers[1] + "@/vs/@" + wPlayers[0]; var wFresh = true; var wKey; var wLSK1 = localStorage.getItem( key1 ); var wLSK2; if ( wLSK1 === null ) { wLSK2 = localStorage.getItem( key2 ); if ( wLSK2 === null ) { wKey = key1; } else { wFresh = false; wKey = key2; } } else { wFresh = false; wKey = key1; } //console.log( "Fresh ? = " + wFresh ); //console.log( "using key --> " + wKey ); var wTMPN = wKey.split("@/vs/@"); if ( wFresh ) { var wOBJ = { p1: { name: wTMPN[0], totalScore: wCurrentScores[ wTMPN[0] ], currentMatch: 0, }, p2: { name: wTMPN[1], totalScore: wCurrentScores[ wTMPN[1] ], currentMatch: 0, }, }; wOBJ = JSON.stringify( wOBJ ); localStorage.setItem( wKey , wOBJ ); localStorage.setItem( "lastRecordedMatch" , wKey ); } else { var wOldScores = JSON.parse( localStorage.getItem( wKey ) ); var wP1OldScore = wOldScores.p1.totalScore; var wP2OldScore = wOldScores.p2.totalScore; //console.log( "\nOld Scores =" ); //console.log( wP1OldScore ); //console.log( wP2OldScore ); //console.log( "\n\nNew Scores = "); //console.log( wCurrentScores ); var wP1ScoreDiff , wP2ScoreDiff; // Were in the same match if ( lastRecordedMatch === wKey ) { //console.log("same match"); wP1ScoreDiff = wCurrentScores[ wTMPN[0] ] - wP1OldScore; wP2ScoreDiff = wCurrentScores[ wTMPN[1] ] - wP2OldScore; wP1ScoreDiff = isNaN( wP1ScoreDiff ) ? 0.5 : wP1ScoreDiff; wP2ScoreDiff = isNaN( wP2ScoreDiff ) ? 0.5 : wP2ScoreDiff; console.log( "Current Match Differences = " ); console.log( wTMPN[0] + " -P1-Diff = " + wP1ScoreDiff ); console.log( wTMPN[1] + " -P2-Diff = " + wP2ScoreDiff ); wOldScores.p1.currentMatch = wP1ScoreDiff; wOldScores.p2.currentMatch = wP2ScoreDiff; wOldScores = JSON.stringify( wOldScores ); localStorage.setItem( wKey , wOldScores ); localStorage.setItem( "lastRecordedMatch" , wKey ); } else { // this is a new matchup //console.log("not the same match"); localStorage.removeItem( lastRecordedMatch ); wP1ScoreDiff = wCurrentScores[ wTMPN[0] ] - wP1OldScore; wP2ScoreDiff = wCurrentScores[ wTMPN[1] ] - wP2OldScore; wP1ScoreDiff = isNaN( wP1ScoreDiff ) ? 0.5 : wP1ScoreDiff; wP2ScoreDiff = isNaN( wP2ScoreDiff ) ? 0.5 : wP2ScoreDiff; console.log( "Current Match Differences = " ); console.log( wTMPN[0] + " -P1-Diff = " + wP1ScoreDiff ); console.log( wTMPN[1] + " -P2-Diff = " + wP2ScoreDiff ); } insertIntoScoreTable( wP1ScoreDiff , wP2ScoreDiff ); } }); })();