liChess.org Current Match Score

lichessCurrentMatch

  1. // ==UserScript==
  2. // @name liChess.org Current Match Score
  3. // @namespace http://userstyles.org
  4. // @description lichessCurrentMatch
  5. // @author ceberous
  6. // @homepage https://creatitees.info
  7. // @include https://lichess.org/*
  8. // @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js
  9. // @run-at document-start
  10. // @version 0.3
  11. // ==/UserScript==
  12.  
  13. ( function() {
  14.  
  15. var lastRecordedMatch;
  16. var wPlayers;
  17. var wCurrentScores;
  18.  
  19. if (!String.prototype.format) {
  20. String.prototype.format = function() {
  21. var args = arguments;
  22. return this.replace(/{(\d+)}/g, function(match, number) {
  23. return typeof args[number] != 'undefined'
  24. ? args[number]
  25. : match
  26. ;
  27. });
  28. };
  29. }
  30.  
  31. function normalizeString( wString ) {
  32.  
  33. wString = wString.split("");
  34. var wL = wString.length;
  35. var wF = "";
  36. for ( var i = 0; i < wL; ++i ) {
  37. var c = wString[i].charCodeAt(0);
  38. if ( c === 10 ) { continue; }
  39. if ( c === 32 ) {
  40. if ( wF.length < 1 ) { continue; }
  41. var x = i + 1;
  42. if ( x < wL ) {
  43. var d = wString[x].charCodeAt(0);
  44. if ( d != 32 && d != 10 ) {
  45. wF = wF + " ";
  46. }
  47. }
  48. }
  49. else { wF = wF + wString[i]; }
  50. }
  51. return wF;
  52.  
  53. }
  54.  
  55. function scoreStringToINT( wScoreString ) {
  56. var wNumRegEx = new RegExp( "[0-9]" );
  57. var wTMP = wScoreString.split("");
  58. var wFinal = "";
  59. var wAddon = 0;
  60. for ( var i = 0; i < wTMP.length; ++i ) {
  61. if ( !wNumRegEx.test( wTMP[i] ) ) {
  62. wAddon = 0.5;
  63. }
  64. else {
  65. wFinal = wFinal + wTMP[i];
  66. }
  67. }
  68. wFinal = parseInt( wFinal );
  69. wFinal = wFinal + wAddon;
  70. return wFinal;
  71.  
  72. }
  73.  
  74. function getCurrentPlayers() {
  75.  
  76. var wPlayers = $(".players").children();
  77. var wPLen = $(".players").children().length;
  78. if ( wPLen < 1 ) { return undefined; }
  79. var wWhitePlayer = $(wPlayers[0]).children();
  80. wWhitePlayer = $(wWhitePlayer[0]).attr("href");
  81. wWhitePlayer = wWhitePlayer.split("/@/")[1];
  82. var wBlackPlayer = $(wPlayers[1]).children();
  83. wBlackPlayer = $(wBlackPlayer[0]).attr("href");
  84. wBlackPlayer = wBlackPlayer.split("/@/")[1];
  85. //alert( wWhitePlayer + " vs " + wBlackPlayer );
  86. return [ wWhitePlayer , wBlackPlayer ];
  87.  
  88. }
  89.  
  90. function getCurrentScore() {
  91.  
  92. var wScores = {};
  93.  
  94. $(".score").each( function( indx , elem ) {
  95. var wPN = $(elem).next("th.user").text().split(" ");
  96. wPN = wPN.length > 1 ? wPN[1] : wPN[0];
  97. var wScore = normalizeString( $(elem).text() );
  98. wScores[wPN] = scoreStringToINT( wScore );
  99. });
  100.  
  101. return wScores;
  102.  
  103. }
  104.  
  105. function insertIntoScoreTable( wScore1 , wScore2 ) {
  106.  
  107. //var wP1 = "<td><th class='score win'>{0}</th></td>".format( wScore1 );
  108. //var wP2 = "<td><th class='score lose'>{0}</th></td>".format( wScore2 );
  109.  
  110. var wP1 = "<td><a>{0}</a></td>".format( wScore1 );
  111. var wP2 = "<td><a>{0}</a></td>".format( wScore2 );
  112.  
  113. console.log( wP1 );
  114. console.log( wP2 );
  115.  
  116. var wS = $('.crosstable > table > tbody').children();
  117. var wPOS = $(wS[0]).children().length - 1;
  118. var wP1CH = $( wS[0] ).children();
  119. var wP2CH = $( wS[1] ).children();
  120. $( wP1CH ).eq( wPOS ).after(wP1);
  121. $( wP2CH ).eq( wPOS ).after(wP2);
  122.  
  123. }
  124.  
  125. $(document).ready(function() {
  126.  
  127. lastRecordedMatch = localStorage.getItem( "lastRecordedMatch" );
  128. wPlayers = getCurrentPlayers();
  129. if ( !wPlayers ) { return; }
  130. console.log( wPlayers );
  131. wCurrentScores = getCurrentScore();
  132.  
  133. var key1 = wPlayers[0] + "@/vs/@" + wPlayers[1];
  134. var key2 = wPlayers[1] + "@/vs/@" + wPlayers[0];
  135.  
  136. var wFresh = true;
  137. var wKey;
  138. var wLSK1 = localStorage.getItem( key1 );
  139. var wLSK2;
  140. if ( wLSK1 === null ) {
  141. wLSK2 = localStorage.getItem( key2 );
  142. if ( wLSK2 === null ) {
  143. wKey = key1;
  144. }
  145. else {
  146. wFresh = false;
  147. wKey = key2;
  148. }
  149. }
  150. else {
  151. wFresh = false;
  152. wKey = key1;
  153. }
  154.  
  155. //console.log( "Fresh ? = " + wFresh );
  156. //console.log( "using key --> " + wKey );
  157.  
  158. var wTMPN = wKey.split("@/vs/@");
  159. if ( wFresh ) {
  160. var wOBJ = {
  161. p1: {
  162. name: wTMPN[0],
  163. totalScore: wCurrentScores[ wTMPN[0] ],
  164. currentMatch: 0,
  165. },
  166. p2: {
  167. name: wTMPN[1],
  168. totalScore: wCurrentScores[ wTMPN[1] ],
  169. currentMatch: 0,
  170. },
  171. };
  172. wOBJ = JSON.stringify( wOBJ );
  173. localStorage.setItem( wKey , wOBJ );
  174. localStorage.setItem( "lastRecordedMatch" , wKey );
  175. }
  176. else {
  177.  
  178. var wOldScores = JSON.parse( localStorage.getItem( wKey ) );
  179. var wP1OldScore = wOldScores.p1.totalScore;
  180. var wP2OldScore = wOldScores.p2.totalScore;
  181. //console.log( "\nOld Scores =" );
  182. //console.log( wP1OldScore );
  183. //console.log( wP2OldScore );
  184.  
  185. //console.log( "\n\nNew Scores = ");
  186. //console.log( wCurrentScores );
  187.  
  188. var wP1ScoreDiff , wP2ScoreDiff;
  189.  
  190. // Were in the same match
  191. if ( lastRecordedMatch === wKey ) {
  192.  
  193. //console.log("same match");
  194.  
  195. wP1ScoreDiff = wCurrentScores[ wTMPN[0] ] - wP1OldScore;
  196. wP2ScoreDiff = wCurrentScores[ wTMPN[1] ] - wP2OldScore;
  197.  
  198. wP1ScoreDiff = isNaN( wP1ScoreDiff ) ? 0.5 : wP1ScoreDiff;
  199. wP2ScoreDiff = isNaN( wP2ScoreDiff ) ? 0.5 : wP2ScoreDiff;
  200.  
  201. console.log( "Current Match Differences = " );
  202. console.log( wTMPN[0] + " -P1-Diff = " + wP1ScoreDiff );
  203. console.log( wTMPN[1] + " -P2-Diff = " + wP2ScoreDiff );
  204.  
  205. wOldScores.p1.currentMatch = wP1ScoreDiff;
  206. wOldScores.p2.currentMatch = wP2ScoreDiff;
  207.  
  208. wOldScores = JSON.stringify( wOldScores );
  209. localStorage.setItem( wKey , wOldScores );
  210. localStorage.setItem( "lastRecordedMatch" , wKey );
  211.  
  212. }
  213. else { // this is a new matchup
  214.  
  215. //console.log("not the same match");
  216. localStorage.removeItem( lastRecordedMatch );
  217.  
  218. wP1ScoreDiff = wCurrentScores[ wTMPN[0] ] - wP1OldScore;
  219. wP2ScoreDiff = wCurrentScores[ wTMPN[1] ] - wP2OldScore;
  220.  
  221. wP1ScoreDiff = isNaN( wP1ScoreDiff ) ? 0.5 : wP1ScoreDiff;
  222. wP2ScoreDiff = isNaN( wP2ScoreDiff ) ? 0.5 : wP2ScoreDiff;
  223.  
  224. console.log( "Current Match Differences = " );
  225. console.log( wTMPN[0] + " -P1-Diff = " + wP1ScoreDiff );
  226. console.log( wTMPN[1] + " -P2-Diff = " + wP2ScoreDiff );
  227.  
  228. }
  229.  
  230. insertIntoScoreTable( wP1ScoreDiff , wP2ScoreDiff );
  231.  
  232. }
  233.  
  234. });
  235.  
  236. })();