Lichess Chess.com Full Pack

gg

目前为 2015-04-02 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Lichess Chess.com Full Pack
  3. // @namespace http://example.com
  4. // @description gg
  5. // @include http://*.lichess.org/*
  6. // @version 1.3
  7. // @grant none
  8. // ==/UserScript==
  9. $.sound = (function() {
  10. var MoveW = new Audio();
  11. MoveW.src = 'http://images.chesscomfiles.com/chess-themes/sounds/_MP3_/default/move-self.mp3';
  12. var MoveB = new Audio();
  13. MoveB.src = 'http://images.chesscomfiles.com/chess-themes/sounds/_MP3_/default/move-opponent.mp3';
  14. var Take = new Audio();
  15. Take.src = 'http://images.chesscomfiles.com/chess-themes/sounds/_MP3_/default/capture.mp3';
  16. var Dong = new Audio();
  17. Dong.src = 'http://images.chesscomfiles.com/chess-themes/sounds/_MP3_/default/game-end.mp3';
  18. var Lowtime = new Audio();
  19. Lowtime.src = 'http://images.chesscomfiles.com/chess-themes/sounds/_MP3_/default/move-check.mp3';
  20. var baseUrl = $('body').data('sound-dir') + '/';
  21. Howler.volume(lichess.storage.get('sound-volume') || 0.1);
  22. var audio = {
  23. dong: 'dong',
  24. moveW: 'move',
  25. moveB: 'move',
  26. take: 'take',
  27. lowtime: 'lowtime',
  28. };
  29. var volumes = {
  30. lowtime: 0.5
  31. };
  32. var get = new $.lazy(function(k) {
  33. return new Howl({
  34. src: ['ogg', 'mp3'].map(function(ext) {
  35. return baseUrl + audio[k] + '.' + ext;
  36. }),
  37. volume: volumes[k] || 0.1
  38. });
  39. });
  40. var $control = $('#sound_control');
  41. var $toggle = $('#sound_state');
  42. var enabled = function() {
  43. return !!lichess.storage.get('sound');
  44. };
  45. $control.add($toggle).toggleClass('sound_state_on', enabled());
  46. var play = {
  47. move: function(white) {
  48. if (enabled()) {
  49. if (white) MoveW.play();
  50. else MoveB.play();
  51. }
  52. },
  53. take: function() {
  54. if (enabled()) Take.play();
  55. },
  56. dong: function() {
  57. if (enabled()) Dong.play();
  58. },
  59. lowtime: function() {
  60. if (enabled()) Lowtime.play();
  61. }
  62. };
  63. var setVolume = function(v) {
  64. lichess.storage.set('sound-volume', v);
  65. Howler.volume(v);
  66. };
  67. var manuallySetVolume = $.fp.debounce(function(v) {
  68. setVolume(v);
  69. play.move(true);
  70. }, 50);
  71. $toggle.click(function() {
  72. var enab = !enabled();
  73. if (enab) lichess.storage.set('sound', 1);
  74. else lichess.storage.remove('sound');
  75. $control.add($toggle).toggleClass('sound_state_on', enab);
  76. play.dong();
  77. return false;
  78. });
  79. $toggle.one('mouseover', function() {
  80. $toggle.parent().find('.slider').slider({
  81. orientation: "vertical",
  82. min: 0,
  83. max: 1,
  84. range: 'min',
  85. step: 0.01,
  86. value: Howler.volume(),
  87. slide: function(e, ui) {
  88. manuallySetVolume(ui.value);
  89. }
  90. });
  91. });
  92. return play;
  93. })();
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101. function addGlobalStyle(css) {
  102. var head, style;
  103. head = document.getElementsByTagName('head')[0];
  104. if (!head) { return; }
  105. style = document.createElement('style');
  106. style.type = 'text/css';
  107. style.innerHTML = css;
  108. head.appendChild(style);
  109. };
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117. addGlobalStyle('.cg-piece.knight.black { background-image: url("http://images.chesscomfiles.com/chess-themes/pieces/classic/80/bn.png")!important;} ');
  118. addGlobalStyle('.cg-piece.bishop.black { background-image: url("http://images.chesscomfiles.com/chess-themes/pieces/classic/80/bb.png")!important;} ');
  119. addGlobalStyle('.cg-piece.queen.black { background-image: url("http://images.chesscomfiles.com/chess-themes/pieces/classic/80/bq.png")!important;} ');
  120. addGlobalStyle('.cg-piece.rook.black { background-image: url("http://images.chesscomfiles.com/chess-themes/pieces/classic/80/br.png")!important;} ');
  121. addGlobalStyle('.cg-piece.pawn.black { background-image: url("http://images.chesscomfiles.com/chess-themes/pieces/classic/80/bp.png")!important;} ');
  122. addGlobalStyle('.cg-piece.king.black { background-image: url("http://images.chesscomfiles.com/chess-themes/pieces/classic/80/bk.png")!important;} ');
  123. addGlobalStyle('.cg-piece.knight.white { background-image: url("http://images.chesscomfiles.com/chess-themes/pieces/classic/80/wn.png")!important;} ');
  124. addGlobalStyle('.cg-piece.bishop.white { background-image: url("http://images.chesscomfiles.com/chess-themes/pieces/classic/80/wb.png")!important;} ');
  125. addGlobalStyle('.cg-piece.queen.white { background-image: url("http://images.chesscomfiles.com/chess-themes/pieces/classic/80/wq.png")!important;} ');
  126. addGlobalStyle('.cg-piece.rook.white { background-image: url("http://images.chesscomfiles.com/chess-themes/pieces/classic/80/wr.png")!important;} ');
  127. addGlobalStyle('.cg-piece.pawn.white { background-image: url("http://images.chesscomfiles.com/chess-themes/pieces/classic/80/wp.png")!important;} ');
  128. addGlobalStyle('.cg-piece.king.white { background-image: url("http://images.chesscomfiles.com/chess-themes/pieces/classic/80/wk.png")!important;} ');
  129.  
  130.  
  131. addGlobalStyle('.cg-board { background-image: url("http://images.chesscomfiles.com/chess-themes/boards/translucent/80.png")!important;} ');
  132.  
  133. addGlobalStyle('.cg-square.last-move { background-color:rgba(255, 0, 0, 0.41) !important;box-sizing:border-box;border:2px solid red;} ');
  134.  
  135. addGlobalStyle('.cg-square.check {background-color:red !important;}');
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142. $('.cg-board').css({"border-color": "#ccc",
  143. "border-width":"3px",
  144. "border-style":"solid"});
  145.  
  146.  
  147.