// ==UserScript==
// @name WaniKani LevelUP Celebrator
// @namespace https://www.wanikani.com
// @description This will display a "level-up" notification on your WK Dashboard after you level up. You can customize the image and text of the display. Other achievements are also noted. By RhosVeedcy.
// @version 2.0
// @include https://www.wanikani.com/
// @include http://www.wanikani.com/
// @include https://www.wanikani.com/dashboard
// @include http://www.wanikani.com/dashboard
// @run-at document-end
// @grant GM_registerMenuCommand
// @downloadURL none
// ==/UserScript==
function get(id) {
console.log('get fct');
if (id && typeof id === 'string') {
console.log(id);
id = document.getElementById(id);
}
return id || null;
}
function GMsetup() {
if (GM_registerMenuCommand) {
GM_registerMenuCommand('WaniKani LevelUP Celebrator: Set image URL', function() {
var curEntry = localStorage.getItem("WKlvlupImgURL") || "";
var newImgURL = prompt('New Image URL:', curEntry);
if (newImgURL != null) {
if (typeof(newImgURL) !== "string") {
newImgURL = String(newImgURL);
}
localStorage.setItem("WKlvlupImgURL", newImgURL);
}
});
GM_registerMenuCommand('WaniKani LevelUP Celebrator: Set text', function() {
var curEntry = localStorage.getItem("WKlvlupText") || "";
var newText = prompt('New text:', curEntry);
if (newText != null) {
if (typeof(newText) !== "string") {
newText = String(newText);
}
localStorage.setItem("WKlvlupText", newText);
}
});
GM_registerMenuCommand('WaniKani LevelUP Celebrator: Preview', function() {
sessionStorage.setItem("WKlvlupPreview", 1);
location.reload();
});
}
}
function checkLevel() {
console.log("checkLevel() start");
var lastKnownLevel = localStorage.getItem("WKlvlupPrevLevel") || 1;
var curlevel = document.getElementsByClassName("levels")[0].getElementsByTagName("span")[0].innerHTML || lastKnownLevel;
var prev = Number(lastKnownLevel);
var cur = Number(curlevel);
var next = prev + 1;
if (cur == next) {
console.log("leveled up!");
var d = new Date();
var n = d.getTime();
localStorage.setItem("WKlvlupLevTime", n); // record level-up time
localStorage.setItem("WKlvlupPrevLevel", cur); // update 'lastKnownLevel' for next time
} else if (cur != prev) {
// either this is the first time we're running, or there's a different user here,
// or the user's subscription status has changed, or something else weird is going on;
// clear WKlvlupLevTime to make sure we don't display the level-up message
console.log("reinitializing");
localStorage.setItem("WKlvlupLevTime", 0);
localStorage.setItem("WKlvlupPrevLevel", cur); // update 'lastKnownLevel' for next time
// also reinitialize the nextMilestones array
initializeMilestones();
} //else cur == prev, so 'lastKnownLevel' is still correct (or it will continue to default to 1 if it hasn't been stored yet)
console.log("prev level: ", prev);
console.log("cur level: ", cur);
console.log("next level: ", next);
console.log("checkLevel() end");
return cur;
}
function shouldDisplay() {
console.log('shouldDisplay() start');
var levTime = localStorage.getItem("WKlvlupLevTime") || 0;
var rawdur = 10; // new level display is enabled for 10 minutes after first display time
var d = new Date();
var now = d.getTime();
var retval;
var duration = Number(rawdur);
var preview = sessionStorage.getItem("WKlvlupPreview");
var theTxt = localStorage.getItem("WKlvlupText");
console.log("now = ", now);
console.log("levTime = ", levTime);
console.log("rawdur = ", rawdur);
console.log("duration minutes = ", duration);
if (preview && preview == 1) {
console.log("Preview enabled, display it");
sessionStorage.setItem("WKlvlupPreview", 0); // once only
return 1;
}
if (theTxt && theTxt.substring(0, 8) == "%#TEST%#") {
console.log("text begins with %#TEST%#, always display");
return 1;
}
duration *= 60000; // convert to milliseconds
console.log("duration msec = ", duration);
console.log("now - levTime = ", now - levTime);
if ((now - levTime) <= duration) {
retval = 1;
} else {
retval = 0;
}
console.log("retval = ", retval);
console.log('shouldDisplay() end');
return retval;
}
function displayLevelUpMessage ( curLevel ) {
console.log('displayLevelUpMessage() start');
var msg = get("search");
var t = document.createElement('div');
var theImg = localStorage.getItem("WKlvlupImgURL");
var theTxt = localStorage.getItem("WKlvlupText");
t.innerHTML = ' '+
'