Quizlet Learn for Languages

Optimized for learning Chinese. Gives "learn" functionality similar to Pleco. Single hand navigation.

  1. // ==UserScript==
  2. // @include https://quizlet.com/*
  3. // @name Quizlet Learn for Languages
  4. // @description Optimized for learning Chinese. Gives "learn" functionality similar to Pleco. Single hand navigation.
  5. // @version 0.0.1.20210704205534
  6. // @namespace https://greasyfork.org/users/790368
  7. // @require https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js
  8. // ==/UserScript==
  9.  
  10.  
  11. // Navigation Controls:
  12. // "incorrect" -- LEFT ARROW
  13. // "correct" -- RIGHT ARROW
  14. // "listen" -- SHIFT
  15. // "flip card" -- ALT
  16. // "open Google Translate" -- ? (question mark)
  17.  
  18. // TODO:
  19. // ** Change interval function into a js mutationObserver
  20.  
  21. document.onkeydown = function(e) {
  22. switch(e.which) {
  23. case 18: // left
  24. $(".a17kns5:contains('Study again')")[0].click();
  25. break;
  26. case 93: // context menu
  27. $(".a17kns5:contains('Study again')")[0].click();
  28. break;
  29.  
  30. case 39: // right
  31. $(".a17kns5:contains('Got it')")[0].click();
  32. break;
  33. case 16: // shift
  34. $(".AssemblyButtonBase--small").click();
  35. break;
  36. case 191: // alt
  37. $(".bc3udft").click();
  38. break;
  39. case 37: // forward slash
  40. $("#myID > span > a")[0].click();
  41. break;
  42.  
  43. default: return; // exit this handler for other keys
  44. }
  45. e.preventDefault(); // prevent the default action (scroll / move caret)
  46. };
  47.  
  48. document.addEventListener("contextmenu", function(e) {
  49. e.preventDefault();
  50. });
  51.  
  52.  
  53. setInterval(function() {
  54. if ($('.FormattedText').length) {
  55. console.log("Exists!");
  56. $('.FormattedText').css("font-size", "50px");
  57. $('.c1sj1twu').css("justify-content", "center");
  58. if ($('#myID').length != 1) {
  59. var myText = $('.FormattedText > div').html();
  60. var myList = [];
  61. for (var i = 0; i < myText.length; i++) {
  62. myList.push(myText.charAt(i))
  63. };
  64. console.log(myList);
  65. var seperatedText = myList.join('%0A');
  66. console.log(seperatedText);
  67. $( ".l1b4ycqi" ).html( "<button id='myID' style='background-color:transparent;border-width:1px;'><span><a href='https://translate.google.com/?sl=zh-CN&tl=en&text=" + seperatedText + "&op=translate' target='blank' style='color:#7b89c991;'>TRANSLATE</a></span></button>" );
  68. }
  69. // if ($(".h10q3o7a").length) {
  70. // $(".h10q3o7a").remove();
  71. // };
  72.  
  73. clearInterval(checkExist);
  74. }
  75. }, 1000); // check every 1000ms
  76.  
  77.