Hides the forums until you've completed some reviews
// ==UserScript==
// @name Wanikani Procrastination Annihilation
// @namespace mempo
// @description Hides the forums until you've completed some reviews
// @include https://www.wanikani.com/*
// @version 1.2.3.4
// @grant none
// ==/UserScript==
console.log('started Wanikani Procrastination Annihilation BETA');
var currentTime = new Date().getTime();
var debug = false; //TODO: change into method for 1-refresh-reinit
var initialSettings = ({
'apiKey': "",
'lastUnlock': 0,
'lastReviewAmount': 0,
'unlockPercentage': 0.5,
'onLockDown': false,
'resetTime': 1800000, //Half hour: 30min * 60sec * 1000ms
'offset': 30
});
//console.log(initialSettings);
//$.jStorage = unsafeWindow.$.jStorage;
var settings = $.jStorage.get('WPA_Settings');
console.log(settings);
if(settings === null){ //not initialized yet
console.log('#### no settings found');
if (window.location.href.indexOf('account') != - 1) {
initialSettings.apiKey = "" + retrieveAPIkey();
settings = initialSettings;
console.log('@@@@@' + initialSettings.apiKey);
} else {
var okcancel = confirm('Wanikani Procrastination Annihilation has no API key entered!\nPress OK to go to your settings page and retrieve your API key!');
if (okcancel == true) {
window.location = 'https://www.wanikani.com/settings/account';
return;
}
}
$.jStorage.set('WPA_Settings', JSON.stringify(settings));
console.log('settings loaded in jstorage');
//GO BACK TO DASHBOARD
window.location = 'https://www.wanikani.com/dashboard';
return;
/* TODO: find a way to look up API key without leaving dashboard
var settingsHTML = $.get( "https://www.wanikani.com/settings/account.html", function(html) {
retrieveAPIkey(html);
})
.fail(function() {
alert( "WPA error: The API key could not be located" );
});
*/
}else{
settings = $.parseJSON(settings);
console.log("##### found the settings!");
}
console.log('//////////////////////////////');
console.log('apiKey is ' + settings.apiKey);
console.log('lastUnlock is ' + settings.lastUnlock);
console.log('lastReviewAmount is ' + settings.lastReviewAmount);
console.log('onLockDown is ' + settings.onLockDown);
console.log('//////////////////////////////');
/*********************************************************************************
* *
* checkPageRedirection *
* *
**********************************************************************************/
if (window.location.href.indexOf('chat') != -1 || window.location.href.indexOf('community') != -1) {
if(settings.onLockDown === true){
alert("I'm very sorry, but the forums are on lockdown. Complete some reviews to unlock them!");
window.location = 'https://www.wanikani.com/review';
}else {
console.log("well go on, the forums are unlocked!");
}
}
if (window.location.href.indexOf('dashboard') != -1 || window.location.href === "https://www.wanikani.com/") {
displaySettings();
checkLockDown();
}
/* TODO: for next update
if (window.location.href.indexOf('review/session') != -1) {
console.log('doing reviews!');
var currentReviewAmount = $.jStorage.get('activeQueue').length + $.jStorage.get('reviewQueue').length;
console.log("//////////total amount of reviews at start is: " + currentReviewAmount);
$.jStorage.listenKeyChange('completedCount', function(){
var currentCompletedAmount = $.jStorage.get('completedCount');
if(currentCompletedAmount >= (1 - settings.unlockPercentage) * currentCompletedAmount){
console.log('§§§§§§§§ Did sufficient amount of reviews! Forums unlocked');
$('#summary-button').after('<div id="forum-unlocked-message"><h2>Forums unlocked!</h2></div>');
}
});
}
*/
/*********************************************************************************
* *
* save Settings *
* *
**********************************************************************************/
if(!debug){
$(window).unload(function(){
$.jStorage.set('WPA_Settings', JSON.stringify(settings));
console.log('WPA: saved settings');
});
}else{
$.jStorage.deleteKey('WPA_Settings');
}
/*********************************************************************************
* *
* checkLockDown *
* *
**********************************************************************************/
function checkLockDown(){
console.log('inside checklockdown function');
console.log('resettime is ' + settings.resetTime);
console.log('difference in time is '+ (currentTime - settings.lastUnlock) );
var currentReviewAmount = 0;
$.getJSON('https://www.wanikani.com/api/user/'+ settings.apiKey +'/study-queue', function(data){
setTimeout(function() {
if(data.error){
alert("API Error: "+data.error.message);
}else{
currentReviewAmount = data.requested_information.reviews_available;
console.log("current amount of reviews is " + currentReviewAmount);
console.log("last amount of reviews is " + settings.lastReviewAmount);
console.log("time to reset is " + ((settings.lastUnlock + settings.resetTime) < currentTime));
if(!settings.onLockDown){ //Unlocked
if((settings.lastUnlock + settings.resetTime) < currentTime){
if(currentReviewAmount > settings.offset){
lockForums(currentReviewAmount);
}else{
console.log('reviews < offset');
showForums();
}
}else {
showForums();
if(currentReviewAmount < settings.lastReviewAmount){
settings.lastReviewAmount = currentReviewAmount;
}
}
} else { //Locked
if(currentReviewAmount <= (settings.lastReviewAmount * (1-settings.unlockPercentage))) { //Locked && Reviews DONE
unlockForums(currentTime,currentReviewAmount);
}else{ //Locked && Reviews TODO
hideForums();
console.log('not done enough reviews yet');
}
}
}
}, 0);
});
}
/////////////////////////
function retrieveAPIkey() {
var apiKey;
apiKey = document.getElementById('user_api_key').value;
alert('API key was set to: ' + apiKey);
if (apiKey) {
return apiKey;
}
}
function displaySettings() {
$('section.forum-topics-list').after(
'<section id="proc">'+
' <style id="proc_style"></style>'+
' <p class="showOnLockDown">Sorry, the forums are on lockdown. Complete some reviews before you can socialize again.</p> ' +
// ' <a id="proc_settings-lnk" class="link">[settings]</a>'+
'</section>'
);
}
function lockForums(currentReviewAmount){
settings.lastReviewAmount = currentReviewAmount;
settings.onLockDown = true;
console.log('locked forums');
console.log('currentReviews are ' + currentReviewAmount);
hideForums();
}
function unlockForums(currentTime,currentReviewAmount){
settings.onLockDown = false;
settings.lastUnlock = currentTime;
settings.lastReviewAmount = currentReviewAmount;
console.log('unlocked forums');
console.log('last review amount is ' + currentReviewAmount);
console.log('last unlock is ' + currentTime);
showForums();
}
function hideForums(){
var forumPanels = document.getElementsByClassName("forum-topics-list");
forumPanels[0].style.display = "none";
if(forumPanels.length === 2){
forumPanels[1].style.display = "none";
}
document.getElementsByClassName("showOnLockDown")[0].style.display = "block";
}
function showForums(){
var forumPanels = document.getElementsByClassName("forum-topics-list");
forumPanels[0].style.display = "block";
if(forumPanels.length === 2){
forumPanels[1].style.display = "block";
}
document.getElementsByClassName("showOnLockDown")[0].style.display = "none";
}