make the date update dynamic
This commit is contained in:
parent
bfe30bc5af
commit
3d99247c01
4 changed files with 61 additions and 22 deletions
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
|
|
@ -48,6 +48,8 @@
|
||||||
"preferredquality",
|
"preferredquality",
|
||||||
"printtraffic",
|
"printtraffic",
|
||||||
"quicktime",
|
"quicktime",
|
||||||
|
"rtime",
|
||||||
|
"smhd",
|
||||||
"timespec",
|
"timespec",
|
||||||
"tmpfilename",
|
"tmpfilename",
|
||||||
"upgrader",
|
"upgrader",
|
||||||
|
|
|
||||||
|
|
@ -125,17 +125,13 @@
|
||||||
</td>
|
</td>
|
||||||
<td class="is-vcentered has-text-centered is-unselectable">
|
<td class="is-vcentered has-text-centered is-unselectable">
|
||||||
<span class="user-hint" :date-datetime="item.datetime"
|
<span class="user-hint" :date-datetime="item.datetime"
|
||||||
v-tooltip="moment(item.datetime).format('YYYY-M-DD H:mm Z')">
|
v-tooltip="moment(item.datetime).format('YYYY-M-DD H:mm Z')" v-rtime="item.datetime" />
|
||||||
{{ moment(item.datetime).fromNow() }}
|
|
||||||
</span>
|
|
||||||
</td>
|
</td>
|
||||||
<td class="is-vcentered has-text-centered is-unselectable"
|
<td class="is-vcentered has-text-centered is-unselectable"
|
||||||
v-if="item.live_in && 'not_live' === item.status">
|
v-if="item.live_in && 'not_live' === item.status">
|
||||||
<span class="icon"><i class="fa-solid fa-spin fa-rotate-right" /></span>
|
|
||||||
<span :date-datetime="item.live_in" class="user-hint"
|
<span :date-datetime="item.live_in" class="user-hint"
|
||||||
v-tooltip="'Will automatically be requeued at: ' + moment(item.live_in).format('YYYY-M-DD H:mm Z')">
|
v-tooltip="'Will automatically be requeued at: ' + moment(item.live_in).format('YYYY-M-DD H:mm Z')"
|
||||||
{{ moment(item.live_in).fromNow() }}
|
v-rtime="item.live_in" />
|
||||||
</span>
|
|
||||||
</td>
|
</td>
|
||||||
<td class="is-vcentered has-text-centered is-unselectable" v-else>
|
<td class="is-vcentered has-text-centered is-unselectable" v-else>
|
||||||
{{ item.file_size ? formatBytes(item.file_size) : '-' }}
|
{{ item.file_size ? formatBytes(item.file_size) : '-' }}
|
||||||
|
|
@ -259,17 +255,13 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="column is-half-mobile has-text-centered is-text-overflow is-unselectable"
|
<div class="column is-half-mobile has-text-centered is-text-overflow is-unselectable"
|
||||||
v-if="item.live_in && 'not_live' === item.status">
|
v-if="item.live_in && 'not_live' === item.status">
|
||||||
<span class="icon"><i class="fa-solid fa-spin fa-rotate-right" /></span>
|
|
||||||
<span :date-datetime="item.live_in" class="user-hint"
|
<span :date-datetime="item.live_in" class="user-hint"
|
||||||
v-tooltip="'Will automatically be requeued at: ' + moment(item.live_in).format('YYYY-M-DD H:mm Z')">
|
v-tooltip="'Will automatically be requeued at: ' + moment(item.live_in).format('YYYY-M-DD H:mm Z')"
|
||||||
{{ moment(item.live_in).fromNow() }}
|
v-rtime="item.live_in" />
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="column is-half-mobile has-text-centered is-text-overflow is-unselectable">
|
<div class="column is-half-mobile has-text-centered is-text-overflow is-unselectable">
|
||||||
<span class="user-hint" :date-datetime="item.datetime"
|
<span class="user-hint" :date-datetime="item.datetime"
|
||||||
v-tooltip="moment(item.datetime).format('YYYY-M-DD H:mm Z')">
|
v-tooltip="moment(item.datetime).format('YYYY-M-DD H:mm Z')" v-rtime="item.datetime" />
|
||||||
{{ moment(item.datetime).fromNow() }}
|
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="column is-half-mobile has-text-centered is-text-overflow is-unselectable"
|
<div class="column is-half-mobile has-text-centered is-text-overflow is-unselectable"
|
||||||
v-if="item.file_size">
|
v-if="item.file_size">
|
||||||
|
|
|
||||||
|
|
@ -83,10 +83,8 @@
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="has-text-centered is-text-overflow is-unselectable">
|
<td class="has-text-centered is-text-overflow is-unselectable">
|
||||||
<span :data-datetime="item.datetime"
|
<span v-tooltip="moment(item.datetime).format('MMMM Do YYYY, h:mm:ss a')"
|
||||||
v-tooltip="moment(item.datetime).format('MMMM Do YYYY, h:mm:ss a')">
|
:data-datetime="item.datetime" v-rtime="item.datetime" />
|
||||||
{{ moment(item.datetime).fromNow() }}
|
|
||||||
</span>
|
|
||||||
</td>
|
</td>
|
||||||
<td class="is-vcentered is-items-center">
|
<td class="is-vcentered is-items-center">
|
||||||
<div class="field is-grouped is-grouped-centered">
|
<div class="field is-grouped is-grouped-centered">
|
||||||
|
|
@ -167,10 +165,8 @@
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="column is-half-mobile has-text-centered is-text-overflow is-unselectable">
|
<div class="column is-half-mobile has-text-centered is-text-overflow is-unselectable">
|
||||||
<span :data-datetime="item.datetime"
|
<span v-tooltip="moment(item.datetime).format('MMMM Do YYYY, h:mm:ss a')" :data-datetime="item.datetime"
|
||||||
v-tooltip="moment(item.datetime).format('MMMM Do YYYY, h:mm:ss a')">
|
v-rtime="item.datetime" />
|
||||||
{{ moment(item.datetime).fromNow() }}
|
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="column is-half-mobile has-text-centered is-text-overflow is-unselectable">
|
<div class="column is-half-mobile has-text-centered is-text-overflow is-unselectable">
|
||||||
<label class="checkbox is-block">
|
<label class="checkbox is-block">
|
||||||
|
|
|
||||||
49
ui/plugins/rtime.js
Normal file
49
ui/plugins/rtime.js
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
import { defineNuxtPlugin } from '#app'
|
||||||
|
import moment from 'moment'
|
||||||
|
|
||||||
|
const parseInterval = arg => {
|
||||||
|
const match = arg.match(/^(\d+)([smhd])$/)
|
||||||
|
if (!match) {
|
||||||
|
return 60 * 1000
|
||||||
|
}
|
||||||
|
|
||||||
|
const [, numStr, unit] = match
|
||||||
|
const num = parseInt(numStr, 10)
|
||||||
|
|
||||||
|
switch (unit) {
|
||||||
|
case 'd': return num * 24 * 3600 * 1000
|
||||||
|
case 'h': return num * 3600 * 1000
|
||||||
|
case 'm': return num * 60 * 1000
|
||||||
|
case 's': return num * 1000
|
||||||
|
default: return 60 * 1000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default defineNuxtPlugin(nuxtApp => nuxtApp.vueApp.directive('rtime', {
|
||||||
|
mounted(el, binding) {
|
||||||
|
const intervalMs = binding.arg ? parseInterval(binding.arg) : 60 * 1000
|
||||||
|
const update = () => el.textContent = moment(binding.value).fromNow()
|
||||||
|
|
||||||
|
update()
|
||||||
|
el._next_timer = window.setInterval(update, intervalMs)
|
||||||
|
},
|
||||||
|
updated(el, binding) {
|
||||||
|
if (binding.oldValue !== binding.value) {
|
||||||
|
if (null != el._next_timer) {
|
||||||
|
clearInterval(el._next_timer)
|
||||||
|
}
|
||||||
|
|
||||||
|
const intervalMs = binding.arg ? parseInterval(binding.arg) : 60 * 1000
|
||||||
|
|
||||||
|
const update = () => el.textContent = moment(binding.value).fromNow()
|
||||||
|
update()
|
||||||
|
|
||||||
|
el._next_timer = window.setInterval(update, intervalMs)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
beforeUnmount(el) {
|
||||||
|
if (null != el._next_timer) {
|
||||||
|
clearInterval(el._next_timer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}))
|
||||||
Loading…
Reference in a new issue