diff --git a/src/internal_time_ago.js b/src/internal_time_ago.js new file mode 100644 index 0000000..f34062f --- /dev/null +++ b/src/internal_time_ago.js @@ -0,0 +1,64 @@ +export function time_ago(time) { + const time_date = new Date(time) + const now_date = new Date(Date.now()) + const ago = now_date - time_date + return internal_time_ago(ago) +} + +function internal_time_ago(time) { + + switch (typeof time) { + case 'number': + break; + case 'string': + time = +new Date(time); + break; + case 'object': + if (time.constructor === Date) time = time.getTime(); + break; + default: + time = +new Date(); + } + + const time_formats = [ + [60, 'seconds', 1], // 60 + [120, '1 minute ago', '1 minute from now'], // 60*2 + [3600, 'minutes', 60], // 60*60, 60 + [7200, '1 hour ago', '1 hour from now'], // 60*60*2 + [86400, 'hours', 3600], // 60*60*24, 60*60 + [172800, 'Yesterday', 'Tomorrow'], // 60*60*24*2 + [604800, 'days', 86400], // 60*60*24*7, 60*60*24 + [1209600, 'Last week', 'Next week'], // 60*60*24*7*4*2 + [2419200, 'weeks', 604800], // 60*60*24*7*4, 60*60*24*7 + [4838400, 'Last month', 'Next month'], // 60*60*24*7*4*2 + [29030400, 'months', 2419200], // 60*60*24*7*4*12, 60*60*24*7*4 + [58060800, 'Last year', 'Next year'], // 60*60*24*7*4*12*2 + [2903040000, 'years', 29030400], // 60*60*24*7*4*12*100, 60*60*24*7*4*12 + [5806080000, 'Last century', 'Next century'], // 60*60*24*7*4*12*100*2 + [58060800000, 'centuries', 2903040000] // 60*60*24*7*4*12*100*20, 60*60*24*7*4*12*100 + ]; + + let seconds = time / 1000 + + let token = 'ago' + let list_choice = 1 + + if (seconds === 0) { + return 'Just now' + } + + if (seconds < 0) { + seconds = Math.abs(seconds); + token = 'from now'; + list_choice = 2; + } + let i = 0, format; + while (format = time_formats[i++]) + if (seconds < format[0]) { + if (typeof format[2] == 'string') + return format[list_choice]; + else + return Math.floor(seconds / format[2]) + ' ' + format[1] + ' ' + token; + } + return time; +} diff --git a/src/views/contents/ContentCard.vue b/src/views/contents/ContentCard.vue index 7ef9650..2f04a4c 100644 --- a/src/views/contents/ContentCard.vue +++ b/src/views/contents/ContentCard.vue @@ -2,7 +2,12 @@
-
{{ props.content.title }}
+
+ {{ props.content.title }} + + {{ time_ago(props.content.createdAt) }} + +
@@ -39,11 +44,11 @@

Commentaires

- +
- +
@@ -57,6 +62,7 @@ import {defineProps, computed} from 'vue'; import MessageList from "@/views/messages/MessageList.vue"; import PostMessage from "@/views/messages/PostMessage.vue"; +import {time_ago} from "@/internal_time_ago.js"; const isHttpUrl = computed(() => props.content?.uri?.startsWith('http')) diff --git a/src/views/contents/ContentList.vue b/src/views/contents/ContentList.vue index c13ffaa..649562f 100644 --- a/src/views/contents/ContentList.vue +++ b/src/views/contents/ContentList.vue @@ -37,13 +37,13 @@ const props = defineProps({ const client = useClient() const contents = ref([]) -const max_items = 10 +const page_size = 10 const errorMessage = ref() let last_id = null async function load({done}) { try { - let uri = `/api/contents/user/${props.creatorId}?max_items=${max_items}` + let uri = `/api/contents/user/${props.creatorId}?page_size=${page_size}` if (last_id !== null) uri = uri + `&last_id=${last_id}` console.log(`Fetching content at: ${uri}`) @@ -59,7 +59,7 @@ async function load({done}) { last_id = last_content.id } - if (contentCount < max_items) + if (contentCount < page_size) done('empty') else done('ok') diff --git a/src/views/creators/CreatorBanner.vue b/src/views/creators/CreatorBanner.vue index 9287ead..8df3153 100644 --- a/src/views/creators/CreatorBanner.vue +++ b/src/views/creators/CreatorBanner.vue @@ -1,5 +1,5 @@