// ==UserScript==
// @name That post isn't new!
// @version 1.4.3
// @description badspot pls fix
// @author Steve5451
// @namespace http://thepotato.net/
// @match https://forum.blockland.us/index.php*
// @updateURL http://pastebin.com/raw/5v9JW4hi
// @downloadURL http://pastebin.com/raw/5v9JW4hi
// @grant none
// @noframes
// ==/UserScript==
/* Known bugs:
Much like any hacky script it's not 100% successful.
Please PM me if you discover any bugs at https://forum.blockland.us/index.php?action=profile;u=132993 */
const maxLength = 64; // How many posts to store as read. 64 is probably enough but feel free to change it. (about half a kilobyte)
// ================================================= You probably shouldn't edit below this line ======================================================= //
const username = document.getElementsByClassName("logoLink")[0].parentNode.parentNode.parentNode.children[1].children[0].innerHTML || ""; // Get our username from "Hey, NAME, you have..."
if(localStorage.seenMessages === undefined)
localStorage.seenMessages = "[]";
var seenMessages = JSON.parse(localStorage.seenMessages) || [];
if(window.location.href.startsWith("https://forum.blockland.us/index.php?topic=")) { // We're in a thread
if(window.location.href.includes("&postTime=")) { // This URL has the postTime specified by my script.
var postTime = window.location.href.split("&postTime=")[1].split("#")[0]; // Get the post time
seenMessages.unshift(postTime); // Add to list
seenMessages = seenMessages.slice(0, maxLength); // Cut list down to the size specified by maxLength so it doesn't become too big
localStorage.seenMessages = JSON.stringify(seenMessages) || []; // Store list
window.history.replaceState(null, null, window.location.href.substr(0, window.location.href.indexOf("&postTime=")) || null); // Remove &postTime from our URL, for copying purposes.
}
} else if(window.location.href.startsWith("https://forum.blockland.us/index.php?board=")) { // Board
var images = document.querySelectorAll('img[src*="/new.gif"'); // Get all (new) images
for(i = 0; i < images.length; i++) {
if(images[i].parentNode.parentNode.parentNode.children[5].children[0].children.length > 2) { // Post from today or yesterday
var postTime = images[i].parentNode.parentNode.parentNode.children[5].children[0].innerHTML.split(" at ")[1].split("
by ")[0].replace(/\D/g,''); // Get the time of the post
} else { // Post from an older date
var postTime = images[i].parentNode.parentNode.parentNode.children[5].children[0].innerHTML.split("
by ")[0].replace(/\D/g,'');
}
if(images[i].parentNode.parentNode.parentNode.children[5].children[0].lastChild.innerHTML === username) { // Is this my post?
images[i].style.display = "none"; // Hide the (new) button
} else if(seenMessages.includes(postTime)) { // It wasn't. Perhaps it's on our list?
images[i].style.display = "none";
} else { // It has not been seen.
images[i].parentNode.parentNode.children[0].href += "&postTime=" + postTime; // Modify the url so that it passes its last post date when it's clicked
images[i].parentNode.href = images[i].parentNode.href.replace("#new","&postTime=" + postTime + "#new");
}
}
} else if(window.location.href.startsWith("https://forum.blockland.us/index.php?action=unreadreplies")) { // Unread repies page
var images = document.querySelectorAll('img[src*="/new.gif"'); // Get all (new) images
for(i = 0; i < images.length; i++) {
if(images[i].parentNode.parentNode.parentNode.children[6].children[0].children.length > 2) // Post from today or yesterday
var postTime = images[i].parentNode.parentNode.parentNode.children[6].children[0].innerHTML.split(" at ")[1].split("
by ")[0].replace(/\D/g,'');
else // Post from an older date
var postTime = images[i].parentNode.parentNode.parentNode.children[6].children[0].innerHTML.split(",")[2].split("
by ")[0].replace(/\D/g,'');
if(images[i].parentNode.parentNode.parentNode.children[6].children[0].lastChild.innerHTML === username) // Is this my post?
images[i].parentNode.parentNode.parentNode.style.display = "none"; // Hide the row
else if(seenMessages.includes(postTime)) // It wasn't. Perhaps it's on our list?
images[i].parentNode.parentNode.parentNode.style.display = "none";
}
} else { // We're somewhere else. As far as I know these images only exist on the index and Help. Let's run it.
var images = document.querySelectorAll('img[src*="/on.gif"'); // This time we're getting all of the lamp images
for(i = 0; i < images.length; i++) {
var postUsername = images[i].parentNode.parentNode.children[4].children[0],
postDate;
if(postUsername.children.length > 4) { // Post is within two days old.
postDate = postUsername.innerHTML.split(" at ")[1].split(" ")[0].replace(/\D/g,'');
postUsername = postUsername.children[4].innerHTML; // Get the username of the last post
} else { // Post is over two days old.
postDate = postUsername.innerHTML.split(", ")[2].split("
")[0].replace(/\D/g,'');
postUsername = postUsername.children[3].innerHTML;
}
if(postUsername === username) // Do we have the last post on that board?
images[i].src = "https://forum.blockland.us/Themes/Blockland/images/off.gif"; // Yes, so let's dim the lamp.
else if(seenMessages.includes(postDate))
images[i].src = "https://forum.blockland.us/Themes/Blockland/images/off.gif";
}
}
/* Changelog:
1.0 - Initial release
1.1 - Updated Topics page support
1.2 - Updated Topics page now removes the thread instead of hiding the (new) button. Added support for the Index lamps.
1.3 - Remembers viewed posts to hide all read (new) posts + bugfix.
1.4 - Way more reliable now.
1.4.1 - Updated Topics bug fix and a few lines of debug code removed.
1.4.2 - &postTime removed from URL for copying purposes, increased stored posts, and minor bugfix.
1.4.3 - Fixed bug from last patch.
*/