Nova Hill Timezone modifier

Modify timezones on forums posts

  1. // ==UserScript==
  2. // @name Nova Hill Timezone modifier
  3. // @version 1.1
  4. // @description Modify timezones on forums posts
  5. // @author fajay
  6. // @match https://nova-hill.com/*
  7. // @namespace https://greasyfork.org/users/725966
  8. // ==/UserScript==
  9. (function () {
  10. 'use strict';
  11. var HourFormat24 = document.cookie.includes("24hour=true") ? true : false
  12. var MMDDYYYYFormat = document.cookie.includes("mmddyy=false") ? false : true
  13.  
  14. var joinedRegex = /Joined ([0123]\d)\/([01]\d)\/(20\d{2})/ // REGEX FUCK YEAH
  15. var postRegex = /([01]\d):([012345]\d) (AM|PM) ([0123]\d)\/([01]\d)\/(20\d{2})/ // MORE REGEX FUCK YEAH
  16. var feedRegex = /([0123]\d)\/([01]\d)\/(20\d{2}) ([01]\d):([012345]\d) (AM|PM)/ // WHAT?! MORE REGEX?! AAAAAAAAAAAAAAAAAAAA
  17. 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??
  18. var transactionsRegex = /([0123]\d)-([01]\d)-(20\d{2})/
  19. var gameRegex = /(20\d{2})\/([01]\d)\/([0123]\d)/
  20. // Some people might find the above lines of code sorcelery, but I love regex
  21.  
  22.  
  23. // BAD CODE INCOMING!!
  24. function convertDateAndHour(day, month, year, hour, minutes, modifier) {
  25. var date = new Date()
  26. date.setUTCFullYear(year, month-1, day)
  27. var a = convertHour(hour,minutes,modifier)
  28. date.setUTCHours(a[0], a[1])
  29. if (MMDDYYYYFormat) {
  30. if (HourFormat24) {
  31. return `${date.getHours().toString().padStart(2,"0")}:${date.getMinutes().toString().padStart(2,"0")} ${date.getMonth()+1}/${date.getDate()}/${date.getFullYear()}`
  32. }
  33. return `${convertToAMPM(date)} ${date.getMonth()+1}/${date.getDate()}/${date.getFullYear()}`
  34. } else {
  35.  
  36. if (HourFormat24) {
  37. return `${date.getHours().toString().padStart(2,"0")}:${date.getMinutes().toString().padStart(2,"0")} ${date.getDate()}/${date.getMonth()+1}/${date.getFullYear()}`
  38. }
  39. return `${convertToAMPM(date)} ${date.getDate()}/${date.getMonth()+1}/${date.getFullYear()}`
  40. }
  41. }
  42.  
  43. function convertDate(day,month,year) {
  44. if(MMDDYYYYFormat) {
  45. return month + "/" + day + "/" + year
  46. } else {
  47. return day + "/" + month + "/" + year
  48. }
  49. }
  50.  
  51. function convertHour(hour, minutes, modifier) {
  52. hour = parseInt(hour)
  53. if (hour == 12) {
  54. hour = 0
  55. }
  56. if (modifier == "PM") {
  57. hour += 12
  58. }
  59. return [hour, minutes]
  60. }
  61.  
  62. function convertToAMPM(date){
  63. if(date.getHours() < 12) {
  64. return (date.getHours() % 12 || 12).toString().padStart(2,"0") + ":" + date.getMinutes().toString().padStart(2,"0") + " AM"
  65. } else {
  66. return (date.getHours() % 12 || 12).toString().padStart(2,"0") + ":" + date.getMinutes().toString().padStart(2,"0") + " PM"
  67. }
  68. }
  69. // Loop? What's that?
  70. setInterval(()=>{
  71. var elements = document.body.querySelectorAll("*")
  72. elements.forEach(element => {
  73. if (!element.innerHTML.includes("<") && element.innerHTML != "" && !element.tzmfconverted) { //TimeZone ModiFier CONVERTED
  74. var m = ""
  75. element.tzmfconverted = true
  76. if (m = element.innerHTML.match(joinedRegex)) {
  77. element.innerHTML = "Joined " + convertDate(m[1],m[2],m[3])
  78. } else if (m = element.innerHTML.match(postRegex)) {
  79. element.innerHTML = convertDateAndHour(m[4],m[5],m[6],m[1],m[2],m[3])
  80. } else if (m = element.innerHTML.match(feedRegex)) {
  81. element.innerHTML = convertDateAndHour(m[1],m[2],m[3],m[4],m[5],m[6])
  82. } else if (m = element.innerHTML.match(transactionsRegex)) {
  83. element.innerHTML = convertDate(m[1],m[2],m[3])
  84. } else if(m = element.innerHTML.match(commentRegex)) {
  85. element.innerHTML = convertDateAndHour(m[1],m[2],m[3],parseInt(m[4])+(new Date().getTimezoneOffset()/60),m[5],m[6])
  86. // 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
  87. } else if(m = element.innerHTML.match(gameRegex)) {
  88. element.innerHTML = convertDate(m[3],m[2],m[1])
  89. }
  90. }
  91. })
  92. },500)
  93.  
  94.  
  95. if(document.location.href.includes("settings")) {
  96. setTimeout(()=>{ // Settings need to load, wacky solution
  97. let settings = document.querySelector(".content")
  98. settings.appendChild(document.createElement("hr"))
  99. let title = document.createElement("span")
  100. title.className = "dark-gray-text bold block"
  101. title.style.paddingBottom = "5px"
  102. title.innerText = "Timezone Modifier Settings"
  103. settings.appendChild(title)
  104. let hour24 = document.createElement("div")
  105. hour24.className = "block"
  106. hour24.style.display = "flex"
  107. hour24.style.alignItems = "center"
  108. 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
  109. settings.appendChild(hour24)
  110. document.getElementById("hour24").checked = document.cookie.includes("24hour=true") ? true : false
  111. let mmddyy = document.createElement("div")
  112. mmddyy.className = "block"
  113. mmddyy.style.display = "flex"
  114. mmddyy.style.alignItems = "center"
  115. 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">`
  116. settings.appendChild(mmddyy)
  117. document.getElementById("mmddyy").checked = document.cookie.includes("mmddyy=false") ? false : true
  118. },1500)
  119. }
  120. })();