// ==UserScript==
// @name Nova Hill Timezone modifier
// @version 1.1
// @description Modify timezones on forums posts
// @author fajay
// @match https://nova-hill.com/*
// @namespace https://greasyfork.org/users/725966
// ==/UserScript==
(function () {
'use strict';
var HourFormat24 = document.cookie.includes("24hour=true") ? true : false
var MMDDYYYYFormat = document.cookie.includes("mmddyy=false") ? false : true
var joinedRegex = /Joined ([0123]\d)\/([01]\d)\/(20\d{2})/ // REGEX FUCK YEAH
var postRegex = /([01]\d):([012345]\d) (AM|PM) ([0123]\d)\/([01]\d)\/(20\d{2})/ // MORE REGEX FUCK YEAH
var feedRegex = /([0123]\d)\/([01]\d)\/(20\d{2}) ([01]\d):([012345]\d) (AM|PM)/ // WHAT?! MORE REGEX?! AAAAAAAAAAAAAAAAAAAA
var commentRegex = /([0123]\d)\/([01]\d)\/(20\d{2}) (\d{1,2}):([012345]\d):[012345]\d (AM|PM)/ // They use an other date format for comments, brick-hill ftw??
var transactionsRegex = /([0123]\d)-([01]\d)-(20\d{2})/
var gameRegex = /(20\d{2})\/([01]\d)\/([0123]\d)/
// Some people might find the above lines of code sorcelery, but I love regex
// BAD CODE INCOMING!!
function convertDateAndHour(day, month, year, hour, minutes, modifier) {
var date = new Date()
date.setUTCFullYear(year, month-1, day)
var a = convertHour(hour,minutes,modifier)
date.setUTCHours(a[0], a[1])
if (MMDDYYYYFormat) {
if (HourFormat24) {
return `${date.getHours().toString().padStart(2,"0")}:${date.getMinutes().toString().padStart(2,"0")} ${date.getMonth()+1}/${date.getDate()}/${date.getFullYear()}`
}
return `${convertToAMPM(date)} ${date.getMonth()+1}/${date.getDate()}/${date.getFullYear()}`
} else {
if (HourFormat24) {
return `${date.getHours().toString().padStart(2,"0")}:${date.getMinutes().toString().padStart(2,"0")} ${date.getDate()}/${date.getMonth()+1}/${date.getFullYear()}`
}
return `${convertToAMPM(date)} ${date.getDate()}/${date.getMonth()+1}/${date.getFullYear()}`
}
}
function convertDate(day,month,year) {
if(MMDDYYYYFormat) {
return month + "/" + day + "/" + year
} else {
return day + "/" + month + "/" + year
}
}
function convertHour(hour, minutes, modifier) {
hour = parseInt(hour)
if (hour == 12) {
hour = 0
}
if (modifier == "PM") {
hour += 12
}
return [hour, minutes]
}
function convertToAMPM(date){
if(date.getHours() < 12) {
return (date.getHours() % 12 || 12).toString().padStart(2,"0") + ":" + date.getMinutes().toString().padStart(2,"0") + " AM"
} else {
return (date.getHours() % 12 || 12).toString().padStart(2,"0") + ":" + date.getMinutes().toString().padStart(2,"0") + " PM"
}
}
// Loop? What's that?
setInterval(()=>{
var elements = document.body.querySelectorAll("*")
elements.forEach(element => {
if (!element.innerHTML.includes("<") && element.innerHTML != "" && !element.tzmfconverted) { //TimeZone ModiFier CONVERTED
var m = ""
element.tzmfconverted = true
if (m = element.innerHTML.match(joinedRegex)) {
element.innerHTML = "Joined " + convertDate(m[1],m[2],m[3])
} else if (m = element.innerHTML.match(postRegex)) {
element.innerHTML = convertDateAndHour(m[4],m[5],m[6],m[1],m[2],m[3])
} else if (m = element.innerHTML.match(feedRegex)) {
element.innerHTML = convertDateAndHour(m[1],m[2],m[3],m[4],m[5],m[6])
} else if (m = element.innerHTML.match(transactionsRegex)) {
element.innerHTML = convertDate(m[1],m[2],m[3])
} else if(m = element.innerHTML.match(commentRegex)) {
element.innerHTML = convertDateAndHour(m[1],m[2],m[3],parseInt(m[4])+(new Date().getTimezoneOffset()/60),m[5],m[6])
// SOMEHOW jefemy the web developer managed to mess it up even more and make the comment time automatically adapted to your timezone. Thanks for the pain jefemy
} else if(m = element.innerHTML.match(gameRegex)) {
element.innerHTML = convertDate(m[3],m[2],m[1])
}
}
})
},500)
if(document.location.href.includes("settings")) {
setTimeout(()=>{ // Settings need to load, wacky solution
let settings = document.querySelector(".content")
settings.appendChild(document.createElement("hr"))
let title = document.createElement("span")
title.className = "dark-gray-text bold block"
title.style.paddingBottom = "5px"
title.innerText = "Timezone Modifier Settings"
settings.appendChild(title)
let hour24 = document.createElement("div")
hour24.className = "block"
hour24.style.display = "flex"
hour24.style.alignItems = "center"
hour24.innerHTML = `<span style="margin-right: 5px">24 hour mode:</span><input type="checkbox" style="width: unset; margin: 0px" onclick='document.cookie = "24hour="+this.checked+"; path=/"' id="hour24">` // Ah yes, 100% width checkbox. Thanks jefemy
settings.appendChild(hour24)
document.getElementById("hour24").checked = document.cookie.includes("24hour=true") ? true : false
let mmddyy = document.createElement("div")
mmddyy.className = "block"
mmddyy.style.display = "flex"
mmddyy.style.alignItems = "center"
mmddyy.innerHTML = `<span style="margin-right: 5px">MMDDYY format:</span><input type="checkbox" style="width: unset; margin: 0px" onclick='document.cookie = "mmddyy="+this.checked+"; path=/"' id="mmddyy">`
settings.appendChild(mmddyy)
document.getElementById("mmddyy").checked = document.cookie.includes("mmddyy=false") ? false : true
},1500)
}
})();