timestamps.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import $ from "jquery"
  2. import moment from "moment"
  3. const UI_UPDATE_INTERVAL = 20 * 1000 // 20 seconds
  4. const RECENT_CUTOFF = 6 * 3600 // 6 hours
  5. const initTimestamps = () => {
  6. moment.locale(getInterfaceLanguage())
  7. const elements = document.querySelectorAll("[data-timestamp]")
  8. elements.forEach(setupTooltip)
  9. updateUITexts(elements)
  10. window.setInterval(() => {
  11. updateUITexts(elements)
  12. }, UI_UPDATE_INTERVAL)
  13. }
  14. const getInterfaceLanguage = () => {
  15. const html = document.querySelector("html")
  16. return html.lang
  17. }
  18. const setupTooltip = element => {
  19. const date = moment(element.dataset.timestamp)
  20. element.title = date.format("LLLL")
  21. $(element).tooltip()
  22. }
  23. const updateUITexts = elements => {
  24. const now = moment()
  25. elements.forEach(element => {
  26. updateUIText(element, now)
  27. })
  28. }
  29. const updateUIText = (element, now) => {
  30. const date = moment(element.dataset.timestamp)
  31. const diff = Math.abs(date.diff(now, "seconds"))
  32. if (diff < RECENT_CUTOFF) {
  33. element.textContent = date.from(now)
  34. } else {
  35. const daysAgo = Math.abs(date.diff(now, "days"))
  36. if (daysAgo < 5) {
  37. element.textContent = date.calendar(now)
  38. } else {
  39. element.textContent = date.format(element.dataset.format)
  40. }
  41. }
  42. }
  43. export default initTimestamps