Wanikani: Review Queue Sizer

Lets you choose the size of your review session

  1. // ==UserScript==
  2. // @name Wanikani: Review Queue Sizer
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.0.6
  5. // @description Lets you choose the size of your review session
  6. // @author Kumirei
  7. // @match https://www.wanikani.com/*
  8. // @match https://preview.wanikani.com/*
  9. // @require https://greasyfork.org/scripts/462049-wanikani-queue-manipulator/code/WaniKani%20Queue%20Manipulator.user.js
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. ;(async function (wkof, $) {
  14. let script_name = 'Wanikani: Review Queue Sizer'
  15. let script_title = 'Review Queue Sizer'
  16. let script_id = 'review_queue_sizer'
  17. let settings
  18.  
  19. confirm_wkof()
  20. await init()
  21. window.addEventListener(`turbo:render`, init)
  22. window.wkQueue.addFilter((queue) => {
  23. if (!settings?.qsize) return queue
  24. return queue.slice(0, settings.qsize)
  25. })
  26.  
  27. function confirm_wkof() {
  28. // Make sure WKOF is installed
  29. if (!wkof) {
  30. let response = confirm(
  31. script_name +
  32. ' requires WaniKani Open Framework.\n Click "OK" to be forwarded to installation instructions.',
  33. )
  34. if (response) {
  35. window.location.href =
  36. 'https://community.wanikani.com/t/instructions-installing-wanikani-open-framework/28549'
  37. }
  38. return
  39. }
  40. }
  41.  
  42. async function init() {
  43. wkof.include('Menu,Settings,Jquery')
  44. await wkof.ready('Menu,Settings,Jquery')
  45. await load_settings()
  46. install_menu()
  47. return
  48. }
  49.  
  50. // Load WKOF settings
  51. async function load_settings() {
  52. let defaults = { qsize: 0 }
  53. settings = await wkof.Settings.load(script_id, defaults)
  54. return
  55. }
  56.  
  57. // Installs the options button in the menu
  58. function install_menu() {
  59. let config = {
  60. name: script_id,
  61. submenu: 'Settings',
  62. title: script_title,
  63. on_click: open_settings,
  64. }
  65. wkof.Menu.insert_script_link(config)
  66. }
  67.  
  68. function open_settings() {
  69. var config = {
  70. script_id: script_id,
  71. title: script_title,
  72. on_save: settings_on_save,
  73. content: {
  74. qsize: {
  75. type: 'number',
  76. label: 'Queue size',
  77. default: 0,
  78. hover_tip: '0 means unlimited',
  79. },
  80. },
  81. }
  82. let dialog = new wkof.Settings(config)
  83. dialog.open()
  84. }
  85.  
  86. function settings_on_save(settings) {
  87. window.wkQueue.refresh()
  88. }
  89. })(window.wkof)