Greasy Fork镜像 支持简体中文。

Wanikani Reviews SRS Preview

Shows an item's current SRS level before answering.

  1. // ==UserScript==
  2. // @name Wanikani Reviews SRS Preview
  3. // @namespace rfindley
  4. // @description Shows an item's current SRS level before answering.
  5. // @match https://www.wanikani.com/*
  6. // @match https://preview.wanikani.com/*
  7. // @version 1.0.1
  8. // @author Robin Findley
  9. // @copyright 2017-2023, Robin Findley
  10. // @license MIT; http://opensource.org/licenses/MIT
  11. // @run-at document-end
  12. // @grant none
  13. // ==/UserScript==
  14.  
  15. /* global app_load, page_load, before_page_render, frame_load, before_frame_render, Stimulus */
  16. /* jshint esversion:11 */
  17.  
  18. window.review_srs_indicator = {};
  19.  
  20. (function(gobj) {
  21.  
  22. const match_patterns = [
  23. '/subjects/review',
  24. ];
  25. function url_matches(patterns,url) {patterns=patterns||match_patterns;url=url||window.location.pathname;if(url[0]!=='/')url=new URL(url).pathname;return ((Array.isArray(patterns)?patterns:[patterns]).findIndex((pattern)=>{let regex=new RegExp(pattern.replace(/[.+?^${}()|[\]\\]/g,'\\$&').replaceAll('*','.*'));return (regex.test(url));})>=0);}
  26. function is_turbo_page() {return (document.querySelector('script[type="importmap"]')?.innerHTML.match('@hotwired/turbo') != null);}
  27. function get_controller(name) {return Stimulus.getControllerForElementAndIdentifier(document.querySelector(`[data-controller~="${name}"]`),name);}
  28.  
  29. if (is_turbo_page()) {
  30. try {app_load();} catch(e){}
  31. try {document.documentElement.addEventListener('turbo:load', page_load);} catch(e){}
  32. try {document.documentElement.addEventListener('turbo:before-render', before_page_render);} catch(e){}
  33. try {document.documentElement.addEventListener('turbo:frame-load', frame_load);} catch(e){}
  34. try {document.documentElement.addEventListener('turbo:before-frame-render', before_frame_render);} catch(e){}
  35. } else {
  36. try {app_load();} catch(e){}
  37. try {page_load({detail:{url:window.location.href},target:document.documentElement});} catch(e){}
  38. try {frame_load({target:document.documentElement});} catch(e){}
  39. }
  40.  
  41. function page_load(e) { // e = {detail: {url: '...'}, target: <elem> }
  42. window.removeEventListener('willShowNextQuestion', handle_next_question);
  43. window.removeEventListener('didUnanswerQuestion', handle_next_question_delayed);
  44. if (url_matches()) {
  45. window.addEventListener('willShowNextQuestion', handle_next_question);
  46. window.addEventListener('didUnanswerQuestion', handle_next_question_delayed);
  47. handle_next_question();
  48. }
  49. }
  50.  
  51. function handle_next_question_delayed() {
  52. setTimeout(handle_next_question, 1);
  53. }
  54.  
  55. function handle_next_question() {
  56. let quiz_header = get_controller('quiz-header');
  57. if (!quiz_header.hasSrsContainerTarget) return;
  58. let quiz_input = get_controller('quiz-input');
  59. if (!quiz_input.currentSubject) {
  60. setTimeout(handle_next_question, 100);
  61. return;
  62. }
  63. let subject_id = quiz_input.currentSubject.id;
  64. let quiz_queue = get_controller('quiz-queue');
  65. let srs_info = JSON.parse(quiz_queue.subjectIdsWithSRSTarget.innerText);
  66. let srs_stage = (srs_info.find((info) => info[0] === subject_id) || [0,undefined])[1];
  67. if (srs_stage === undefined) {
  68. quiz_header.srsContainerTarget.dataset.hidden = true;
  69. } else {
  70. let srs_stage_name = ['','Apprentice 1','Apprentice 2','Apprentice 3','Apprentice 4','Guru 1','Guru 2','Master','Enlightened'];
  71. quiz_header.srsIconUpTarget.hidden = true;
  72. quiz_header.srsIconDownTarget.hidden = true;
  73. quiz_header.srsTextTarget.innerText = '('+srs_stage_name[srs_stage]+')';
  74. quiz_header.srsContainerTarget.dataset.wentUp = '';
  75. quiz_header.srsContainerTarget.dataset.hidden = false;
  76. }
  77. }
  78.  
  79. })(window.doublecheck);

QingJ © 2025

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