timestamps.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. const elements = document.querySelectorAll("[data-timestamp]")
  7. elements.forEach(setupTooltip)
  8. updateUITexts(elements)
  9. window.setInterval(() => {
  10. updateUITexts(elements)
  11. }, UI_UPDATE_INTERVAL)
  12. }
  13. const setupTooltip = element => {
  14. const date = moment(element.dataset.timestamp)
  15. element.title = date.format("LLLL")
  16. $(element).tooltip()
  17. }
  18. const updateUITexts = elements => {
  19. const now = moment()
  20. elements.forEach(element => {
  21. updateUIText(element, now)
  22. })
  23. }
  24. const updateUIText = (element, now) => {
  25. const date = moment(element.dataset.timestamp)
  26. const diff = Math.abs(date.diff(now, "seconds"))
  27. if (diff < RECENT_CUTOFF) {
  28. element.textContent = date.from(now)
  29. } else {
  30. const daysAgo = Math.abs(date.diff(now, "days"))
  31. if (daysAgo < 5) {
  32. element.textContent = date.calendar(now)
  33. } else {
  34. element.textContent = date.format(element.dataset.format)
  35. }
  36. }
  37. }
  38. export default initTimestamps