Greasy Fork 还支持 简体中文。

liChess.org Current Match Score

lichessCurrentMatch

Versione datata 22/06/2017. Vedi la nuova versione l'ultima versione.

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

You will need to install an extension such as Tampermonkey to install this script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==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 );

	    }

	});

})();