ChessTempo Analysis

provide analysis links on ChessTempo

  1. // ==UserScript==
  2. // @name ChessTempo Analysis
  3. // @locale en
  4. // @description provide analysis links on ChessTempo
  5. // @namespace http://tampermonkey.net/
  6. // @version 0.2
  7. // @author SethTr
  8. // @match *://chesstempo.com/*
  9. // @grant GM_addStyle
  10. // @require https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js
  11. // ==/UserScript==
  12.  
  13. GM_addStyle(".links-panel {" +
  14. "color: white;" +
  15. "background-color: #333;" +
  16. "position: absolute;" +
  17. "top: 25%;" +
  18. "left: 1%;" +
  19. "border-radius: 5px;" +
  20. "padding: 5px;" +
  21. "text-align: center;" +
  22. "font-size: 18px;" +
  23. "}");
  24.  
  25. function toCord(offset) {
  26. var num = Number(offset.substr(0, offset.length - 1));
  27. return Math.round(num / 12.5);
  28. }
  29.  
  30. function fenName(piece) {
  31. piece = piece.substr(piece.lastIndexOf('/') + 1, 100);
  32. var isWhite = piece.indexOf("white") >= 0;
  33. var name = ["king", "queen", "rook", "bishop", "knight", "pawn"];
  34. var fen = ["k", "q", "r", "b", "n", "p"];
  35. for (i = 0; i < name.length; i++) {
  36. if (piece.indexOf(name[i]) >= 0) {
  37. if (isWhite) {
  38. return fen[i].toUpperCase();
  39. } else {
  40. return fen[i].toLowerCase();
  41. }
  42. }
  43. }
  44. return "WTF" + piece;
  45. }
  46.  
  47. function fenNotation(board, isWhite) {
  48. var fen = '';
  49. for (y = 0; y < 8; y++) {
  50. var spaces = 0;
  51. for (x = 0; x < 8; x++) {
  52. var p = isWhite ? board[8*y + x] : board[63 - (8*y + x)];
  53. if (p) {
  54. if (spaces > 0) fen += spaces;
  55. fen += p;
  56. spaces = 0;
  57. } else {
  58. spaces += 1;
  59. }
  60. }
  61. if (spaces > 0) fen += spaces;
  62. if (y != 7) fen += '/';
  63. }
  64. fen += ' ' + (isWhite ? 'w' : 'b');
  65. return fen;
  66. }
  67.  
  68. function lichessFen(fen) {
  69. return "https://www.lichess.org/analysis/" + fen.replace(' ', '_');
  70. }
  71.  
  72. function createWrappedLink(parent, text) {
  73. var link = document.createElement('a');
  74. link.appendChild(document.createTextNode(text));
  75. link.title = text;
  76. link.target="_blank";
  77. link.href = "http://lichess.com";
  78. var div = document.createElement('div');
  79. div.appendChild(link);
  80. parent.appendChild(div);
  81. return link;
  82. }
  83.  
  84. function createLinks() {
  85. console.log("adding button for links");
  86. var linkWrapper = document.createElement('div');
  87. linkWrapper.className = 'links-panel';
  88.  
  89. whiteLink = createWrappedLink(linkWrapper, "Analysis white to play");
  90. blackLink = createWrappedLink(linkWrapper, "Analysis black to play");
  91.  
  92. document.getElementsByTagName('body')[0].appendChild(linkWrapper);
  93. return [whiteLink, blackLink];
  94. }
  95.  
  96. (function() {
  97. 'use strict';
  98.  
  99. var links = createLinks();
  100.  
  101. setInterval(function() {
  102. jQuery.noConflict();
  103. var board = {};
  104.  
  105. jQuery('.svgPieceContainer').parent().each(function(index, pieceDiv) {
  106. var x = toCord(pieceDiv.style.left);
  107. var y = toCord(pieceDiv.style.top);
  108. var piece = fenName(pieceDiv.children[0].src);
  109. board[8*y + x] = piece;
  110. });
  111.  
  112. var whiteLink = lichessFen(fenNotation(board, true));
  113. var blackLink = lichessFen(fenNotation(board, false));
  114.  
  115. console.log("White to play analysis: ", whiteLink);
  116. console.log("Black to play analysis: ", blackLink);
  117.  
  118. links[0].href = whiteLink;
  119. links[1].href = blackLink;
  120. }, 3000);
  121.  
  122. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址