WaniKani Fast Abridged Wrong/Multiple Answer

try to take over the world!

当前为 2018-04-09 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name WaniKani Fast Abridged Wrong/Multiple Answer
  3. // @namespace http://tampermonkey.net/
  4. // @version 2.8
  5. // @description try to take over the world!
  6. // @author You
  7. // @match https://www.wanikani.com/review/session
  8. // @match https://www.wanikani.com/
  9. // @match https://www.wanikani.com/dashboard
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. window.wk_fawa = {};
  14.  
  15. var wrongCountFAWA;
  16. (function(global) {
  17. 'use strict';
  18. // Hook into App Store
  19. try { $('.app-store-menu-item').remove(); $('<li class="app-store-menu-item"><a href="https://community.wanikani.com/t/there-are-so-many-user-scripts-now-that-discovering-them-is-hard/20709">App Store</a></li>').insertBefore($('.navbar .dropdown-menu .nav-header:contains("Account")')); window.appStoreRegistry = window.appStoreRegistry || {}; window.appStoreRegistry[GM_info.script.uuid] = GM_info; localStorage.appStoreRegistry = JSON.stringify(appStoreRegistry); } catch (e) {}
  20.  
  21. if (!window.wkof) {
  22. alert('WaniKani Fast Abridged Wrong/Multiple Answer requires Wanikani Open Framework.\nYou will now be forwarded to installation instructions.');
  23. window.location.href = 'https://community.wanikani.com/t/instructions-installing-wanikani-open-framework/28549';
  24. return;
  25. }
  26.  
  27. var settings_dialog;
  28. var defaults = {
  29. alwaysShow: false,
  30. alwaysShowOnlyMultiple: false,
  31. dontShowWrong: false,
  32. correctColor: "#88cc00",
  33. incorrectColor: "#ff0033"
  34. };
  35.  
  36. if(localStorage.getItem("wkFastWrongAlwaysShow") != null){
  37. defaults.alwaysShow = localStorage.getItem("wkFastWrongAlwaysShow");
  38. defaults.alwaysShowOnlyMultiple = localStorage.getItem("wkFastWrongAlwaysShowOnlyMultiple");
  39. defaults.dontShowWrong = localStorage.getItem("wkFastWrongDontShowWrong");
  40. localStorage.removeItem("wkFastWrongAlwaysShow");
  41. localStorage.removeItem("wkFastWrongAlwaysShowOnlyMultiple");
  42. localStorage.removeItem("wkFastWrongDontShowWrong");
  43. }
  44. if(localStorage.getItem("wkFastWrongWrongColor") != null){
  45. defaults.correctColor = localStorage.getItem("wkFastWrongWrongColor");
  46. defaults.incorrectColor = localStorage.getItem("wkFastWrongMultipleColor");
  47. localStorage.removeItem("wkFastWrongWrongColor");
  48. localStorage.removeItem("wkFastWrongMultipleColor");
  49. }
  50.  
  51. wrongCountFAWA = $.jStorage.get("wrongCount");
  52. if(window.location.pathname == "/" || window.location.pathname == "/dashboard"){
  53. wkof.include('Apiv2, Menu, Settings');
  54. wkof.ready('Menu').then(install_menu);
  55. wkof.ready('Settings').then(install_settings);
  56. } else {
  57. wkof.include('Apiv2, Settings');
  58. wkof.ready('Settings').then(install_settings).then(function(){
  59. $('#user-response').after("<input id='lblCorrect' type='text' style='display: none;' disabled/>");
  60. $.jStorage.listenKeyChange('currentItem', function (key, action) {
  61. if (action === 'updated') {
  62. $('#lblCorrect').val('').css('display','none');
  63. }
  64. });
  65. $.jStorage.listenKeyChange('questionCount', function (key, action) {
  66. if(wrongCountFAWA != $.jStorage.get("wrongCount"))
  67. {
  68. wrongCountFAWA = $.jStorage.get("wrongCount");
  69. if(wkof.settings.fawa.dontShowWrong != "1"){
  70. showCorrect(0);
  71. }
  72. }
  73. else {
  74. if (action === 'updated' && $.jStorage.get("questionCount") > 0 && wkof.settings.fawa.alwaysShow == "1") {
  75. showCorrect(1);
  76. }
  77. }
  78. });
  79. });
  80. }
  81.  
  82. function install_menu() {
  83. wkof.Menu.insert_script_link({
  84. script_id: 'fawa',
  85. name: 'fawa',
  86. submenu: 'Settings',
  87. title: 'Fast Abridged Wrong/Multiple Answer',
  88. on_click: open_settings
  89. });
  90. }
  91. function open_settings() {
  92. settings_dialog.open();
  93. }
  94. function install_settings() {
  95. settings_dialog = new wkof.Settings({
  96. script_id: 'fawa',
  97. name: 'fawa',
  98. title: 'Fast Abridged Wrong/Multiple Answer',
  99. on_save: process_settings,
  100. settings: {
  101. 'grp_main': {
  102. type:'group',
  103. label:'Main',
  104. content:{
  105. 'alwaysShow': {type:'checkbox',label:'Always Show Correct Answers',default:defaults.alwaysShow,on_change:alwaysShowChanged},
  106. 'alwaysShowOnlyMultiple': {type:'checkbox',label:'&nbsp;&nbsp;&nbsp;(Only if multiple answers)',default:defaults.alwaysShowOnlyMultiple},
  107. 'dontShowWrong': {type:'checkbox',label:'&nbsp;&nbsp;&nbsp;(Don\'t show wrongs)',default:defaults.dontShowWrong}
  108. }
  109. },
  110. 'grp_colors':{
  111. type: 'group',
  112. label: 'colors',
  113. content: {
  114. 'correctColor': {type:'color',label:'Correct',default:defaults.correctColor},
  115. 'incorrectColor': {type:'color',label:'Incorrect',default:defaults.incorrectColor},
  116. }
  117. }
  118. }
  119. });
  120. settings_dialog.load().then(function(){
  121. wkof.settings.fawa = $.extend(true, {}, defaults,wkof.settings.fawa);
  122. });
  123. }
  124. function alwaysShowChanged(){
  125. if($(this).prop('checked') == false){
  126. $('#fawa_alwaysShowOnlyMultiple').attr('disabled','disabled');
  127. $('#fawa_alwaysShowOnlyMultiple').prop("checked",false);
  128. $('#dontShowWrong').attr('disabled','disabled');
  129. $('#dontShowWrong').prop("checked",false);
  130. } else {
  131. $('#fawa_alwaysShowOnlyMultiple').removeAttr('disabled');
  132. $('#dontShowWrong').removeAttr('disabled');
  133. }
  134. }
  135. function process_settings(){
  136. settings_dialog.save();
  137. console.log('Settings saved!');
  138. }
  139.  
  140. function showBar(mode){//0=wrong, 1=right
  141. $('#lblCorrect').css('display','block');
  142. $('#lblCorrect').attr('style','display: block; background-color: ' + ((mode == 0) ? wkof.settings.fawa.incorrectColor : wkof.settings.fawa.correctColor) + ' !important;');
  143. }
  144.  
  145. function showCorrect(mode){
  146. switch($('#question-type h1').text().toLowerCase()){
  147. case "vocabulary reading":
  148. if(mode === 1 && wkof.settings.fawa.alwaysShowOnlyMultiple == "1" && $.jStorage.get("currentItem").kana.length === 1) return;
  149. showBar(mode);
  150. $('#lblCorrect').val($.jStorage.get("currentItem").kana.join(", "));
  151. break;
  152. case "vocabulary meaning":
  153. case "kanji meaning":
  154. case "radical name":
  155. if(mode === 1 && wkof.settings.fawa.alwaysShowOnlyMultiple == "1" && $.jStorage.get("currentItem").en.length === 1) return;
  156. showBar(mode);
  157. $('#lblCorrect').val($.jStorage.get("currentItem").en.join(", "));
  158. break;
  159. case "kanji reading":
  160. switch($.jStorage.get("currentItem").emph.toLowerCase()){
  161. case "onyomi":
  162. if(mode === 1 && wkof.settings.fawa.alwaysShowOnlyMultiple == "1" && $.jStorage.get("currentItem").on.length === 1) return;
  163. showBar(mode);
  164. $('#lblCorrect').val($.jStorage.get("currentItem").on.join(", "));
  165. break;
  166. case "kunyomi":
  167. if(mode === 1 && wkof.settings.fawa.alwaysShowOnlyMultiple == "1" && $.jStorage.get("currentItem").kun.length === 1) return;
  168. showBar(mode);
  169. $('#lblCorrect').val($.jStorage.get("currentItem").kun.join(", "));
  170. break;
  171. }
  172. break;
  173. }
  174. }
  175.  
  176. })(window.wk_fawa);