Ledger Nano X - The secure hardware wallet
SHARE
TWEET

WaniKani Real Times by Penx

a guest Jul 15th, 2014 496 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name        WaniKani Real Times
  3. // @namespace   penx.scripts
  4. // @description Replaces WaniKani times with more exact times.
  5. // @include     https://www.wanikani.com/*
  6. // @exclude             https://www.wanikani.com/review*
  7. // @exclude             https://www.wanikani.com/lesson*
  8. // @exclude             https://www.wanikani.com/community/people/*
  9. // @exclude             https://www.wanikani.com/account
  10. // @exclude             https://www.wanikani.com/login
  11. // @version     1.2
  12. // @run-at              document-end
  13. // ==/UserScript==
  14.  
  15. function main(){
  16.        
  17.         GM_addStyle("time1 { cursor: help; font-family: \"Ubuntu\",Helvetica,Arial,sans-serif; }");
  18.         GM_addStyle("time2 { cursor: help; font-family: \"Ubuntu\",Helvetica,Arial,sans-serif; }");
  19.         GM_addStyle("time3 { cursor: help; font-family: \"Ubuntu\",Helvetica,Arial,sans-serif; }");
  20.         GM_addStyle("time4 { cursor: help; font-family: \"Ubuntu\",Helvetica,Arial,sans-serif; }");
  21.         GM_addStyle(".dashboard section.review-status time1 { display: block; margin-bottom: 0.5em; font-size: 36px; font-weight: bold; line-height: 1em; }");
  22.         GM_addStyle("time2 { color: rgb(153, 153, 153); text-shadow: 0px 1px 0px rgb(255, 255, 255); }");
  23.         GM_addStyle(".dashboard section.system-alert time4 { margin-left: 1em; color: rgb(119, 0, 79); font-weight: 600; text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.3); opacity: 0.45; }");
  24.  
  25.         var timeElements = document.getElementsByClassName("timeago");
  26.         var currentTime = new Date().valueOf();
  27.        
  28.         for(var i=0;i<timeElements.length;i){
  29.  
  30.                 if(timeElements[i].parentNode.parentNode.parentNode.className.indexOf("review-status") != -1){
  31.  
  32.                         var reviewTimeHolder = timeElements[i];
  33.                         var reviewTime = new Date(reviewTimeHolder.getAttribute("datetime")*1000);
  34.                         var title = reviewTimeHolder.getAttribute("title");
  35.                         var children = reviewTimeHolder.childNodes;
  36.                         var parent = reviewTimeHolder.parentNode;
  37.                         var newNode = document.createElement("time1");
  38.                         newNode.setAttribute("title", title);
  39.                         newNode.setAttribute("datetime", reviewTime.valueOf());
  40.                        
  41.                         for(var j=0;j<children.length;j++){
  42.                                
  43.                                 newNode.appendChild(children[j]);
  44.                                
  45.                         }
  46.                        
  47.                         parent.replaceChild(newNode,reviewTimeHolder);
  48.                        
  49.                 }else if(timeElements[i].parentNode.parentNode.className.indexOf("system-alert") != -1){
  50.                        
  51.                         var alertTimeHolder = timeElements[i];
  52.                         var alertTime = new Date(alertTimeHolder.getAttribute("datetime").valueOf());
  53.                         var title = alertTimeHolder.getAttribute("title");
  54.                         var children = alertTimeHolder.childNodes;
  55.                         var parent = alertTimeHolder.parentNode;
  56.                         var newNode = document.createElement("time4");
  57.                         newNode.setAttribute("title", title);
  58.                         newNode.setAttribute("datetime", alertTime.valueOf());
  59.                        
  60.                         for(var j=0;j<children.length;j++){
  61.                        
  62.                                 newNode.appendChild(children[j]);
  63.                                
  64.                         }
  65.                        
  66.                         parent.replaceChild(newNode,alertTimeHolder);
  67.                        
  68.                 }else{
  69.                        
  70.                         var theTime = new Date(timeElements[i].getAttribute("datetime")).valueOf();
  71.                        
  72.                         if(theTime){
  73.                        
  74.                                 var upCountHolder = timeElements[i];
  75.                                 var upCountTime = new Date(upCountHolder.getAttribute("datetime")).valueOf();
  76.                                 var title = upCountHolder.getAttribute("title");
  77.                                 var children = upCountHolder.childNodes;
  78.                                 var parent = upCountHolder.parentNode;
  79.                                 var newNode = document.createElement("time3");
  80.                                 newNode.setAttribute("title", upCountHolder.getAttribute("title"));
  81.                                 newNode.setAttribute("datetime", upCountTime.valueOf());
  82.                                
  83.                                 for(var j=0;j<children.length;j++){
  84.                                
  85.                                         newNode.appendChild(children[j]);
  86.                                        
  87.                                 }
  88.                                
  89.                                 parent.replaceChild(newNode,upCountHolder);
  90.                                
  91.                         }else{
  92.                        
  93.                                 var downCountHolder = timeElements[i];
  94.                                 var downCountTime = new Date(downCountHolder.getAttribute("datetime")*1000);
  95.                                 var title = downCountHolder.getAttribute("title");
  96.                                 var children = downCountHolder.childNodes;
  97.                                 var parent = downCountHolder.parentNode;
  98.                                 var newNode = document.createElement("time2");
  99.                                 newNode.setAttribute("title", downCountHolder.getAttribute("title"));
  100.                                 newNode.setAttribute("datetime", downCountTime.valueOf());
  101.                                
  102.                                 for(var j=0;j<children.length;j++){
  103.                                
  104.                                         newNode.appendChild(children[j]);
  105.                                        
  106.                                 }
  107.                                
  108.                                 parent.replaceChild(newNode,downCountHolder);
  109.                                
  110.                         }
  111.        
  112.                 }
  113.                
  114.         }
  115.  
  116.         alertCount = document.getElementsByTagName("time4");
  117.         reviewCount = document.getElementsByTagName("time1");
  118.  
  119.         downCounters = document.getElementsByTagName("time2");
  120.         upCounters = document.getElementsByTagName("time3");
  121.  
  122.         function newTimes(){
  123.        
  124.                 updateUpCounters(upCounters);
  125.                 updateUpCounters(alertCount);
  126.                 updateDownCounters(downCounters);
  127.                 updateDownCounters(reviewCount);
  128.                
  129.         }
  130.        
  131.         newTimes();
  132.         window.setInterval(newTimes,30000);
  133.  
  134. }
  135.  
  136. window.addEventListener("load", main, false);
  137.  
  138. function updateUpCounters(up){
  139.  
  140.         var currentTime = new Date();
  141.        
  142.         for(var i=0;i<up.length;i++){
  143.        
  144.                 var diff = currentTime - up[i].getAttribute("datetime");
  145.                 var x = diff / 60000;
  146.                 var minutes = parseInt(x % 60);
  147.                
  148.                 if(minutes == 0){
  149.                
  150.                         minutes = "";
  151.                        
  152.                 }else if(minutes > 1){
  153.                
  154.                         minutes += " minutes ";
  155.                        
  156.                 }else{
  157.                
  158.                         minutes += " minute ";
  159.                        
  160.                 }
  161.                
  162.                 x /= 60;
  163.                 var hours = parseInt(x % 24);
  164.                
  165.                 if(hours == 0){
  166.                
  167.                         hours = "";
  168.                        
  169.                 }else if(hours > 1){
  170.                
  171.                         hours += " hours ";
  172.                        
  173.                 }else{
  174.                
  175.                         hours += " hour ";
  176.                        
  177.                 }
  178.                
  179.                 x /= 24;
  180.                 var days = parseInt(x % 30);
  181.                
  182.                 if(days == 0){
  183.                
  184.                         days = "";
  185.                        
  186.                 }else if(days > 1){
  187.                
  188.                         days += " days ";
  189.                        
  190.                 }else{
  191.                
  192.                         days += " day ";
  193.                        
  194.                 }
  195.                
  196.                 x /= 30;
  197.                 var months = parseInt(x);
  198.                
  199.                 if(months == 0){
  200.                
  201.                         months = "";
  202.                        
  203.                 }else if(months > 1){
  204.                
  205.                         months += " months ";
  206.                        
  207.                 }else{
  208.                
  209.                         months += " month ";
  210.                        
  211.                 }
  212.                
  213.                 var output = "";
  214.                
  215.                 if(diff > 7776000000){
  216.                
  217.                         output = months + "ago";
  218.                        
  219.                 }else if(diff > 2592000000){
  220.                
  221.                         output = months + days + "ago";
  222.                        
  223.                 }else if(diff > 259200000){
  224.                
  225.                         output = days + "ago";
  226.                        
  227.                 }else if(diff > 86400000){
  228.                
  229.                         output = days + hours + "ago";
  230.                        
  231.                 }else if(diff > 3600000){
  232.                
  233.                         output = hours + minutes + "ago";
  234.                        
  235.                 }else if(diff > 60000){
  236.                
  237.                         output = minutes + "ago";
  238.                        
  239.                 }else{
  240.                
  241.                         output = "Just now";
  242.                        
  243.                 }
  244.                
  245.                 up[i].innerHTML = output;
  246.                
  247.         }
  248.        
  249. }
  250.  
  251. function updateDownCounters(down){
  252.  
  253.         var currentTime = new Date();
  254.        
  255.         for(var i=0;i<down.length;i++){
  256.        
  257.                 var diff = down[i].getAttribute("datetime") - currentTime;
  258.                 var x = diff / 60000;
  259.                 var minutes = parseInt(x % 60);
  260.                
  261.                 if(minutes == 0){
  262.                
  263.                         minutes = "";
  264.                        
  265.                 }else if(minutes > 1){
  266.                
  267.                         minutes += " minutes ";
  268.                        
  269.                 }else{
  270.                
  271.                         minutes += " minute ";
  272.                        
  273.                 }
  274.                
  275.                 x /= 60;
  276.                 var hours = parseInt(x % 24);
  277.                
  278.                 if(hours == 0){
  279.                
  280.                         hours = "";
  281.                        
  282.                 }else if(hours > 1){
  283.                
  284.                         hours += " hours ";
  285.                        
  286.                 }else{
  287.                
  288.                         hours += " hour ";
  289.                        
  290.                 }
  291.                
  292.                 x /= 24;
  293.                 var days = parseInt(x % 30);
  294.                
  295.                 if(days == 0){
  296.                
  297.                         days = "";
  298.                        
  299.                 }else if(days > 1){
  300.                
  301.                         days += " days ";
  302.                        
  303.                 }else{
  304.                
  305.                         days += " day ";
  306.                 }
  307.                
  308.                 x /= 30;
  309.                 var months = parseInt(x);
  310.                
  311.                 if(months == 0){
  312.                
  313.                         months = "";
  314.                        
  315.                 }else if(months > 1){
  316.                
  317.                         months += " months ";
  318.                        
  319.                 }else{
  320.                
  321.                         months += " month ";
  322.                        
  323.                 }
  324.                
  325.                 var output = "";
  326.                
  327.                 if(diff < 0 || (window.location.href.indexOf("dashboard") != -1 && document.getElementsByClassName("reviews")[0].getElementsByTagName("span")[0].innerHTML != "0")){
  328.                
  329.                         output = "Available Now";
  330.                        
  331.                 }else if(diff > 7776000000){
  332.                
  333.                         output = months;
  334.                        
  335.                 }else if(diff > 2592000000){
  336.                
  337.                         output = months + days;
  338.                        
  339.                 }else if(diff > 259200000){
  340.                
  341.                         output = days;
  342.                        
  343.                 }else if(diff > 86400000){
  344.                
  345.                         output = days + hours;
  346.                        
  347.                 }else if(diff > 3600000){
  348.                
  349.                         output = hours + minutes;
  350.                        
  351.                 }else if(diff > 60000){
  352.                
  353.                         output = minutes;
  354.                        
  355.                 }else{
  356.                
  357.                         output = "Soon&#8482;";
  358.                        
  359.                 }
  360.                
  361.                 down[i].innerHTML = output;
  362.                
  363.         }
  364.        
  365. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top