WaniKani Customize Wrap Up

Customize the number of wrap-up items

当前为 2018-03-10 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name WaniKani Customize Wrap Up
  3. // @namespace http://alsanchez.es/
  4. // @include /^https?://(www\.)?wanikani\.com/review/session/?$/
  5. // @version 3
  6. // @grant none
  7. // @description Customize the number of wrap-up items
  8. // ==/UserScript==
  9.  
  10.  
  11. (function()
  12. {
  13. var numberOfItems = localStorage.getItem("wanikani-addon-number-of-wrap-up-items") || 10;
  14. var fn = loadingScreen.remove;
  15. var wrapUpActive = false;
  16. loadingScreen.remove = function()
  17. {
  18. loadingScreen.remove = fn;
  19. fn();
  20. initialize();
  21. }
  22.  
  23. function initialize()
  24. {
  25. createIcon();
  26.  
  27. var wrapUp = document.getElementById("option-wrap-up");
  28. wrapUp.addEventListener("click", function()
  29. {
  30. wrapUpActive = !wrapUpActive;
  31.  
  32. if(wrapUpActive)
  33. {
  34. updateQueues(numberOfItems);
  35. }
  36.  
  37. // Force available-count update
  38. $.jStorage.set("activeQueue", $.jStorage.get("activeQueue"));
  39. });
  40. }
  41.  
  42. function createIcon()
  43. {
  44. var container = $('<span style="cursor: pointer;">');
  45. container.append($('<i class="icon-time"></i>'));
  46. var numberOfItemsLabel = $("<span>").html(numberOfItems);
  47. container.append(numberOfItemsLabel);
  48. container.click(function()
  49. {
  50. var answer = prompt("Number of items");
  51. if(answer !== null)
  52. {
  53. numberOfItems = answer;
  54. numberOfItemsLabel.html(numberOfItems);
  55. localStorage.setItem("wanikani-addon-number-of-wrap-up-items", numberOfItems);
  56. }
  57. });
  58. $("#stats").prepend(container);
  59. }
  60. function updateQueues(numberOfItems)
  61. {
  62. var activeQueue = getSortedActiveQueue();
  63. var reviewQueue = $.jStorage.get("reviewQueue");
  64. var newQueue = getSortedActiveQueue().concat(reviewQueue);
  65. numberOfItems = Math.min(numberOfItems, newQueue.length);
  66. $.jStorage.set("activeQueue", newQueue.slice(0, numberOfItems));
  67. $.jStorage.set("reviewQueue", newQueue.slice(numberOfItems));
  68. }
  69. function getSortedActiveQueue()
  70. {
  71. var currentItem = $.jStorage.get("currentItem");
  72. var otherItems = $.jStorage.get("activeQueue").filter(function(item)
  73. {
  74. return item.id !== currentItem.id;
  75. });
  76. return [ currentItem ].concat(otherItems);
  77. }
  78. })();