您需要先安装一个扩展,例如 篡改猴、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 );
- }
- });
- })();