ud4's board script
Versión del día
// ==UserScript==
// @name GameFaqs Private Board Userlist Viewer
// @namespace https://greatest.deepsurf.us/en/scripts/7745-gamefaqs-private-board-userlist-viewer/code
// @description ud4's board script
// @include http://www.gamefaqs.com/boards/848-hardcore/?admin=1
// @version 1
// @grant none
// ==/UserScript==
var daysFromLastVisit = 7; // Change this and only this to modify the cutoff date.
var cutoffDate = new Date(); // Gets current date
var AmericanDateFormat=true; //Set to true for American Date Format (Month/Day/Year), false for (Day/Month/Year)
cutoffDate.setHours(0,0,0,0); // setting the current date to a plain date, without the hour and such. This could cause problems otherwise.
cutoffDate.setDate(cutoffDate.getDate() - daysFromLastVisit); // Specs say this should work everywhere. In doubt, use Chrome or Firefox.
var usernamesArray = document.getElementsByClassName('nobold'); // This will probably break with any site updates.
// Output strings
var hasVisited = '';
var hasntVisited = '';
if (usernamesArray.length == 0){
console.log("NO USERS DETECTED, THE SITE HAD A LAYOUT UPDATE"); // Adding a warning, just in case
}else{
for(var i=0; i < usernamesArray.length; i++){
var username = usernamesArray[i].innerHTML; // Grabs username
var AMURICAdateText = usernamesArray[i].parentNode.parentNode.lastChild.innerHTML.trim(); // Does some DOM magic to get the date. This will probably break when the site updates.
var hasVisitedRecently = false; // This is set to true only if the user has visited, after all that code.
if(AMURICAdateText != ''){ // If the user has visited the board at least once. I don't feel particularly confident when checking against an empty string, this is very prone to breaking but it works for the current version of the admin page.
// Start code to fix the date to a standard format because AMURICA
var splitDate = AMURICAdateText.split('/'); // splits '11/18/14' into ['11', '18', '14']
if(AmericanDateFormat){
var outputDate = splitDate[0]+'/'+splitDate[1]+'/20'+splitDate[2]; // Switches month and day around. Will break when 2100 comes.
}else{
var outputDate = splitDate[1]+'/'+splitDate[0]+'/20'+splitDate[2]; // Switches month and day around. Will break when 2100 comes.
}
// End AMURICA code
// This has to be done manually as I don't trust at all that different browsers will parse a non ISO date correctly.
var lastVisitDateObject = new Date();
lastVisitDateObject.setHours(0,0,0,0); // Plain date, no hours.
lastVisitDateObject.setFullYear('20'+splitDate[2]);
lastVisitDateObject.setMonth(splitDate[0] - 1); // WHY THE **** MONTH IS 0-11 WHEN DAY IS 1-31
lastVisitDateObject.setDate(splitDate[1]);
if(lastVisitDateObject.toString() == 'NaN'){ // Just doing some housekeeping, this should never happen but if GF screws up you'll be warned
var lastVisitDate = "ERROR";
}else{
if(cutoffDate <= lastVisitDateObject){
hasVisitedRecently = true; // Whew. Done.
};
};
}else{
var outputDate = "Hasn't visited the board";
};
if(hasVisitedRecently){
hasVisited += (username + ' @ ' + outputDate + "\n");
}else{
hasntVisited += (username + ' @ ' + outputDate + "\n");
};
};
// The following generates a textarea and fills it with the output.
var textareaVisited = document.createElement('textarea');
textareaVisited.style.width = '49%';
textareaVisited.style.height = '300px';
textareaVisited.innerHTML = "Users who visited in the last "+daysFromLastVisit+" days:\n" + hasVisited;
var textareaNotVisited = document.createElement('textarea');
textareaNotVisited.style.width = '49%';
textareaNotVisited.style.height = '300px';
textareaNotVisited.innerHTML = "Users who did NOT visit in the last "+daysFromLastVisit+" days:\n" + hasntVisited;
// The following adds it to the page.
var userTable = document.getElementsByClassName('board')[0];
var parentDiv = userTable.parentNode;
parentDiv.insertBefore(textareaVisited, userTable);
parentDiv.insertBefore(textareaNotVisited, userTable);
};