From 882e6a159cd370f31751847981fc28b8f6766600 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Sat, 9 Jan 2021 21:28:32 -0500 Subject: [PATCH] feat(topic-events): handle newest_to_oldest sort in topic events, WIP --- public/src/client/topic/posts.js | 39 +++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js index 4823a43f21..c68117932a 100644 --- a/public/src/client/topic/posts.js +++ b/public/src/client/topic/posts.js @@ -280,26 +280,39 @@ define('forum/topic/posts', [ return; } - // TODO: Handle oldest_to_newest - const postTimestamps = ajaxify.data.posts.map(post => post.timestamp); - ajaxify.data.events.forEach((event) => { - const beforeIdx = postTimestamps.findIndex(timestamp => timestamp > event.timestamp); + let postTimestamps = ajaxify.data.posts.map(post => post.timestamp); + + const reverse = config.topicPostSort === 'newest_to_oldest'; + const events = ajaxify.data.events.slice(0); + if (reverse) { + events.reverse(); + postTimestamps = postTimestamps.slice(1); // OP is always at top, so exclude from calculations + } + + Promise.all(events.map((event) => { + const beforeIdx = postTimestamps.findIndex(timestamp => (reverse ? (timestamp < event.timestamp) : (timestamp > event.timestamp))); let postEl; if (beforeIdx > -1) { - postEl = document.querySelector(`[component="post"][data-pid="${ajaxify.data.posts[beforeIdx].pid}"]`); + postEl = document.querySelector(`[component="post"][data-pid="${ajaxify.data.posts[beforeIdx + (reverse ? 1 : 0)].pid}"]`); } - app.parseAndTranslate('partials/topic/event', event, function (html) { - html = html.get(0); + return new Promise((resolve) => { + app.parseAndTranslate('partials/topic/event', event, function (html) { + html = html.get(0); - if (postEl) { - document.querySelector('[component="topic"]').insertBefore(html, postEl); - } else { - document.querySelector('[component="topic"]').append(html); - } + if (postEl) { + console.log('insert before', ajaxify.data.posts[beforeIdx].pid); + document.querySelector('[component="topic"]').insertBefore(html, postEl); + } else { + console.log('append to bttom?'); + document.querySelector('[component="topic"]').append(html); + } - $(html).find('.timeago').timeago(); + resolve(); + }); }); + })).then(() => { + $('[component="topic/event"] .timeago').timeago(); }); }