2024-04-28 22:00:56 +07:00
|
|
|
package utils
|
|
|
|
|
|
|
|
import "strings"
|
|
|
|
|
|
|
|
// RelativeTimeText updates the text content of the element to be a relative time text.
|
|
|
|
//
|
|
|
|
// Every second it updates the text content to be the relative time text of the input string.
|
|
|
|
|
2024-04-29 15:18:23 +07:00
|
|
|
script RelativeFromTimeText(id string, time string, inter int) {
|
2024-04-28 22:00:56 +07:00
|
|
|
const el = document.getElementById(id)
|
|
|
|
|
|
|
|
const timeText = dayjs(time).fromNow()
|
|
|
|
el.textContent = timeText
|
|
|
|
|
|
|
|
const interval = setInterval(() => {
|
|
|
|
const timeText = dayjs(time).fromNow()
|
|
|
|
el.textContent = timeText
|
2024-04-29 15:18:23 +07:00
|
|
|
}, inter)
|
|
|
|
|
|
|
|
const obs = new MutationObserver((mutations) => {
|
|
|
|
for (const mutation of mutations) {
|
|
|
|
for (const removed of mutation.removedNodes) {
|
|
|
|
if (el === removed) {
|
|
|
|
clearInterval(interval)
|
|
|
|
obs.disconnect()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
obs.observe(el.parentNode, { childList: true })
|
|
|
|
}
|
|
|
|
|
|
|
|
script RelativeTimeToNowText(id, time string, inter int) {
|
|
|
|
const el = document.getElementById(id)
|
|
|
|
|
|
|
|
const timeText = dayjs(time).toNow()
|
|
|
|
el.textContent = timeText
|
|
|
|
|
|
|
|
const interval = setInterval(() => {
|
|
|
|
const timeText = dayjs(time).toNow()
|
|
|
|
el.textContent = timeText
|
2024-04-28 22:00:56 +07:00
|
|
|
}, 1000)
|
|
|
|
|
|
|
|
const obs = new MutationObserver((mutations) => {
|
|
|
|
for (const mutation of mutations) {
|
|
|
|
for (const removed of mutation.removedNodes) {
|
|
|
|
if (el === removed) {
|
|
|
|
clearInterval(interval)
|
|
|
|
obs.disconnect()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
obs.observe(el.parentNode, { childList: true })
|
|
|
|
}
|
|
|
|
|
|
|
|
templ RelativeTimeNode(id string, time string, class ...string) {
|
|
|
|
<span
|
|
|
|
id={ id }
|
|
|
|
class={ strings.Join(class, " ") }
|
|
|
|
>{ time }</span>
|
2024-04-29 15:18:23 +07:00
|
|
|
@RelativeFromTimeText(id, time, 10000)
|
|
|
|
}
|
|
|
|
|
|
|
|
templ RelativeTimeToNowNode(id, time string, class ...string) {
|
|
|
|
<span
|
|
|
|
id={ id }
|
|
|
|
class={ strings.Join(class, " ") }
|
|
|
|
>{ time }</span>
|
|
|
|
@RelativeTimeToNowText(id, time, 10000)
|
2024-04-28 22:00:56 +07:00
|
|
|
}
|