Wanikani Item List Filter (for Self-Study Quiz)

Select specific items (for Self-Study Quiz)

  1. // ==UserScript==
  2. // @name Wanikani Item List Filter (for Self-Study Quiz)
  3. // @namespace rfindley
  4. // @description Select specific items (for Self-Study Quiz)
  5. // @version 1.1.0
  6. // @match https://www.wanikani.com/*
  7. // @match https://preview.wanikani.com/*
  8. // @copyright 2018+, Robin Findley
  9. // @license MIT; http://opensource.org/licenses/MIT
  10. // @run-at document-end
  11. // @grant none
  12. // ==/UserScript==
  13.  
  14. window.item_list_filter = {};
  15.  
  16. (function(gobj) {
  17.  
  18. /* global $, wkof */
  19. /* eslint no-multi-spaces: "off" */
  20.  
  21. //===================================================================
  22. // Initialization of the Wanikani Open Framework.
  23. //-------------------------------------------------------------------
  24. var script_name = 'Items List Filter (for Self-Study Quiz)';
  25. var wkof_version_needed = '1.1.3';
  26. if (!window.wkof) {
  27. if (confirm(script_name+' requires Wanikani Open Framework.\nDo you want to be forwarded to the installation instructions?')) {
  28. window.location.href = 'https://community.wanikani.com/t/instructions-installing-wanikani-open-framework/28549';
  29. }
  30. return;
  31. }
  32. if (wkof.version.compare_to(wkof_version_needed) === 'older') {
  33. if (confirm(script_name+' requires Wanikani Open Framework version '+wkof_version_needed+'.\nDo you want to be forwarded to the update page?')) {
  34. window.location.href = 'https://greasyfork.org/en/scripts/38582-wanikani-open-framework';
  35. }
  36. return;
  37. }
  38.  
  39. wkof.include('ItemData');
  40. wkof.ready('ItemData').then(startup);
  41.  
  42. //-------------------------------------------------------------------
  43. function split_list(str) {return str.replace(/、/g,',').replace(/[\s ]+/g,' ').trim().replace(/ *, */g, ',').split(',').filter(function(name) {return (name.length > 0);});}
  44.  
  45. //--[ Radicals ]-----------------------------------------------------
  46. var radical_list = [];
  47. function radical_filter(filter_value, item) {return (item.object !== 'radical') || (radical_list.indexOf(item.data.slug) >= 0);};
  48. function radical_filter_map(filter_value) {radical_list = split_list(filter_value);};
  49.  
  50. //--[ Kanji ]--------------------------------------------------------
  51. var kanji_list = [];
  52. function kanji_filter(filter_value, item) {return (item.object !== 'kanji') || (kanji_list.indexOf(item.data.slug) >= 0);};
  53. function kanji_filter_map(filter_value) {kanji_list = split_list(filter_value);};
  54.  
  55. //--[ Vocabulary ]---------------------------------------------------
  56. var vocabulary_list = [];
  57. function vocabulary_filter(filter_value, item) {return (item.object !== 'vocabulary') || (vocabulary_list.indexOf(item.data.slug) >= 0);};
  58. function vocabulary_filter_map(filter_value) {vocabulary_list = split_list(filter_value);};
  59.  
  60. //--[ Kana Vocabulary ]---------------------------------------------------
  61. var kana_vocabulary_list = [];
  62. function kana_vocabulary_filter(filter_value, item) {return (item.object !== 'kana_vocabulary') || (kana_vocabulary_list.indexOf(item.data.slug) >= 0);};
  63. function kana_vocabulary_filter_map(filter_value) {kana_vocabulary_list = split_list(filter_value);};
  64.  
  65. //===================================================================
  66. function startup() {
  67. wkof.ItemData.registry.sources.wk_items.filters.radical_list = {
  68. label: 'Radical List',
  69. type: 'text',
  70. default:'',
  71. placeholder: 'big, small',
  72. filter_func: radical_filter,
  73. filter_value_map: radical_filter_map,
  74. hover_tip: 'Enter a list of comma-separated radicals (in English)'
  75. };
  76. wkof.ItemData.registry.sources.wk_items.filters.kanji_list = {
  77. label: 'Kanji List',
  78. type: 'text',
  79. default:'',
  80. placeholder: '大, 小',
  81. filter_func: kanji_filter,
  82. filter_value_map: kanji_filter_map,
  83. hover_tip: 'Enter a list of comma-separated kanji'
  84. };
  85. wkof.ItemData.registry.sources.wk_items.filters.vocabulary_list = {
  86. label: 'Vocabulary List',
  87. type: 'text',
  88. default:'',
  89. placeholder: '大きい, 小さい',
  90. filter_func: vocabulary_filter,
  91. filter_value_map: vocabulary_filter_map,
  92. hover_tip: 'Enter a list of comma-separated vocabulary'
  93. };
  94. wkof.ItemData.registry.sources.wk_items.filters.kana_vocabulary_list = {
  95. label: 'Kana Vocabulary List',
  96. type: 'text',
  97. default:'',
  98. placeholder: 'はい, いいえ',
  99. filter_func: kana_vocabulary_filter,
  100. filter_value_map: kana_vocabulary_filter_map,
  101. hover_tip: 'Enter a list of comma-separated kana vocabulary'
  102. };
  103.  
  104. wkof.set_state('item_list_filter', 'ready');
  105. }
  106.  
  107. })(window.item_list_filter);