Greasy Fork is available in English.

Rest Score Input for lidarts

adding restscore functionalty to lidarts

  1. // ==UserScript==
  2. // @name Rest Score Input for lidarts
  3. // @name:de Rest-Betrag Eingabe für lidarts
  4. // @version 0.6.1
  5. // @description adding restscore functionalty to lidarts
  6. // @description:de fügt in lidarts die Rest-Betrag Eingabe hinzu
  7. // @author AlexisDot
  8. // @license MIT
  9. // @match https://lidarts.org/game/*
  10. // @namespace https://greatest.deepsurf.us/en/users/913506-alexisdot
  11. // ==/UserScript==
  12. /*jshint esversion: 8 */
  13.  
  14. (function () {
  15. 'use strict';
  16.  
  17. let scoreSelfElement = null;
  18. const scoreInputForm = document.querySelector('#score_input');
  19. const scoreInput = scoreInputForm.querySelector('#score_value');
  20. const chatInput = document.querySelector('#message');
  21. const isNotCricket = document.querySelector('#cricket_scoreboard')
  22. ? false
  23. : true;
  24. let isLocalGame = false;
  25. let isComputerGame = false;
  26.  
  27. async function initRestScoreInput() {
  28. let url = `https://lidarts.org/api${window.location.pathname}`;
  29. const response = await fetch(url, {
  30. method: 'GET',
  31. });
  32. const responseJson = await response.json();
  33. window['myJson'] = responseJson;
  34. isLocalGame = responseJson.p1_name == responseJson.p2_name;
  35. isComputerGame = responseJson.p2_name == null;
  36.  
  37. function restScoreSubmit() {
  38. let restScore = scoreInput.value;
  39. let scoreSelf = isLocalGame
  40. ? document.querySelector('.player_turn.border-light [id$=_score]')
  41. .innerText
  42. : scoreSelfElement.innerText;
  43. let currentScore = parseInt(scoreSelf);
  44. let thrownScore = currentScore - restScore;
  45.  
  46. scoreInput.value = thrownScore;
  47. scoreInput.focus();
  48.  
  49. $(scoreInputForm).submit();
  50. }
  51.  
  52. if (scoreInput && isNotCricket) {
  53. document.head.insertAdjacentHTML(
  54. 'beforeend',
  55. /*html*/ `
  56. <style>
  57. .p1_turn_name_card .card-body.select-highlight, .p2_turn_name_card .card-body.select-highlight{
  58. background: red;
  59. animation: mymove 3s infinite;
  60. cursor: pointer;
  61. }
  62.  
  63. @keyframes mymove {
  64. from {background-color: inherit;}
  65. 50% {background-color: rgb(227,172,17);}
  66. to {background-color: inherit;}
  67. }
  68. </style>`
  69. );
  70.  
  71. if (!isLocalGame && !isComputerGame) {
  72. let userId = document.querySelector('#user_id').dataset.id;
  73. let player1Id = document.querySelector('#player1_id').dataset.id;
  74. let player2Id = document.querySelector('#player2_id').dataset.id;
  75.  
  76. if (userId == player1Id) {
  77. scoreSelfElement = document.querySelector('#p1_score');
  78. } else if (userId == player2Id) {
  79. scoreSelfElement = document.querySelector('#p2_score');
  80. }
  81. }
  82.  
  83. if (isComputerGame) {
  84. scoreSelfElement = document.querySelector('#p1_score');
  85. }
  86.  
  87. let dummyDiv = document.createElement('div');
  88. dummyDiv.innerHTML = /*html*/ `
  89. <button type="button" class="mt-3 btn btn-lg btn-outline-info btn-block" id="rest-score-input">Rest</button>
  90. `;
  91.  
  92. let restScoreInput = dummyDiv
  93. .querySelector('#rest-score-input')
  94. .cloneNode(true);
  95.  
  96. dummyDiv.innerHTML = /*html*/ `
  97. <div id="keyboard-notice" class="mt-3 alert alert-info small text-center alert-dismissible fade show" role="alert">
  98. Keyboard controls:<br>
  99. <hr>
  100. undo: <kbd>c</kbd> or <kbd>-</kbd><br>
  101. <hr>
  102. rest: <kbd>r</kbd> or <kbd>/</kbd>
  103. <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  104. <span aria-hidden="true">&times;</span>
  105. </button>
  106. </div>`;
  107.  
  108. let keyboardNotice = dummyDiv
  109. .querySelector('#keyboard-notice')
  110. .cloneNode(true);
  111.  
  112. scoreInputForm.insertAdjacentElement('afterend', keyboardNotice);
  113. scoreInputForm.insertAdjacentElement('afterend', restScoreInput);
  114.  
  115. restScoreInput.addEventListener('click', (e) => {
  116. e.preventDefault();
  117. restScoreSubmit();
  118. });
  119.  
  120. document.addEventListener('keydown', (e) => {
  121. const isNotChat = e.target === chatInput ? false : true;
  122. if (isNotChat && (e.key === '/' || e.key === 'r')) {
  123. e.preventDefault();
  124. restScoreSubmit();
  125. }
  126. if (isNotChat && (e.key === '-' || e.key === 'c')) {
  127. e.preventDefault();
  128. document.querySelector('#undo-button').click();
  129. scoreInput.focus()
  130. }
  131. });
  132. }
  133. }
  134.  
  135. initRestScoreInput();
  136. })();