From cac3e208f1ef3b7e85e9dab619d753e3955a4e1a Mon Sep 17 00:00:00 2001 From: Evelyn Lo Date: Tue, 11 Feb 2025 23:29:24 -0500 Subject: [PATCH 1/2] added calculateTimeSinceEdit, moment.js error still needs to be fixed --- dump.rdb | Bin 48970 -> 54881 bytes public/src/client/topic/events.js | 28 ++++++++++++++++++--- src/posts/edit.js | 39 +++++++++++++++++++++++++++--- 3 files changed, 61 insertions(+), 6 deletions(-) diff --git a/dump.rdb b/dump.rdb index bff9e0b1117b64bf749a6e3c3b970f88d6811993..d7dcdcaf5f345cbd8232a99d43532ef9ccc690f5 100644 GIT binary patch delta 9714 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 diff --git a/public/src/client/topic/events.js b/public/src/client/topic/events.js index e091dd6..59f72d2 100644 --- a/public/src/client/topic/events.js +++ b/public/src/client/topic/events.js @@ -13,6 +13,7 @@ define('forum/topic/events', [ 'helpers', ], function (postTools, threadTools, posts, images, components, translator, hooks, helpers) { const Events = {}; + const moment = window.moment || require('moment'); const events = { 'event:user_status_change': onUserStatusChange, @@ -135,6 +136,7 @@ define('forum/topic/events', [ }); } + //change code if (data.post.changed) { editedPostEl.fadeOut(250, function () { editedPostEl.html(translator.unescape(data.post.content)); @@ -146,17 +148,37 @@ define('forum/topic/events', [ if (data.post.edited) { const editData = { editor: data.editor, - editedISO: utils.toISOString(data.post.edited), + //editedISO: utils.toISOString(data.post.edited), + editedTimeAgo: data.post.editedTimeAgo, }; + // app.parseAndTranslate('partials/topic/post-editor', editData, function (html) { + // editorEl.replaceWith(html); + // postContainer.find('[component="post/edit-indicator"]') + // .removeClass('hidden') + // .translateAttr('title', `[[global:edited-timestamp, ${helpers.isoTimeToLocaleString(editData.editedISO, config.userLang)}]]`); + // postContainer.find('[component="post/editor"] .timeago').timeago(); + // hooks.fire('action:posts.edited', data); + // }); + // app.parseAndTranslate('partials/topic/post-editor', editData, function (html) { + // editorEl.replaceWith(html); + + // // Update the edit indicator with relative time instead of a timestamp + // postContainer.find('[component="post/edit-indicator"]') + // .removeClass('hidden') + // .text(`Edited: ${editData.editedTimeAgo}`); // Shows "X minutes/hours ago" + + // hooks.fire('action:posts.edited', data); + // }); app.parseAndTranslate('partials/topic/post-editor', editData, function (html) { editorEl.replaceWith(html); postContainer.find('[component="post/edit-indicator"]') .removeClass('hidden') - .translateAttr('title', `[[global:edited-timestamp, ${helpers.isoTimeToLocaleString(editData.editedISO, config.userLang)}]]`); - postContainer.find('[component="post/editor"] .timeago').timeago(); + .text(`Edited: ${editData.editedTimeAgo}`); // Directly set "X minutes/hours ago" + hooks.fire('action:posts.edited', data); }); + } }); } else { diff --git a/src/posts/edit.js b/src/posts/edit.js index a63f34c..c87951e 100644 --- a/src/posts/edit.js +++ b/src/posts/edit.js @@ -13,6 +13,27 @@ const pubsub = require('../pubsub'); const utils = require('../utils'); const slugify = require('../slugify'); const translator = require('../translator'); +const moment = require('moment'); + + +function calculateTimeSinceEdit(editTime){ + const now = moment(); + const editedMoment = moment(editTime); + const diffMinutes = now.diff(editedMoment, 'minutes'); + + if (diffMinutes < 60){ + return `${diffMinutes} minutes ago`; + + } + + const diffHours = Math.floor(diffMinutes/60); + if (diffHours < 24){ + return `${diffHours} hours ago`; + } + + const diffDays = Math.floor(diffHours / 24); + return `${diffDays} days ago`; +} module.exports = function (Posts) { pubsub.on('post:edit', (pid) => { @@ -74,14 +95,22 @@ module.exports = function (Posts) { // Normalize data prior to constructing returnPostData (match types with getPostSummaryByPids) postData.deleted = !!postData.deleted; + const moment = require('moment'); + + const returnPostData = { ...postData, ...result.post }; returnPostData.cid = topic.cid; returnPostData.topic = topic; - returnPostData.editedISO = utils.toISOString(editPostData.edited); + + //returnPostData.editedISO = utils.toISOString(editPostData.edited); + returnPostData.editedTimeAgo = calculateTimeSinceEdit(editPostData.edited); returnPostData.changed = contentChanged; returnPostData.oldContent = oldContent; returnPostData.newContent = data.content; + + + await topics.notifyFollowers(returnPostData, data.uid, { type: 'post-edit', bodyShort: translator.compile('notifications:user-edited-post', editor.username, topic.title), @@ -103,6 +132,11 @@ module.exports = function (Posts) { }; }; + //new code + + + + async function editMainPost(data, postData, topicData) { const { tid } = postData; const title = data.title ? data.title.trim() : ''; @@ -145,8 +179,7 @@ module.exports = function (Posts) { const results = await plugins.hooks.fire('filter:topic.edit', { req: data.req, topic: newTopicData, - data: data, - }); + data: data,}); await db.setObject(`topic:${tid}`, results.topic); if (tagsupdated) { await topics.updateTopicTags(tid, data.tags); From 3c4fc741f4d635d70976c67c326a408fb7f6715e Mon Sep 17 00:00:00 2001 From: evelyn lo Date: Wed, 26 Feb 2025 16:19:33 -0500 Subject: [PATCH 2/2] update edit time --- dump.rdb | Bin 54881 -> 59686 bytes src/posts/index.js | 4 ++++ 2 files changed, 4 insertions(+) diff --git a/dump.rdb b/dump.rdb index d7dcdcaf5f345cbd8232a99d43532ef9ccc690f5..4e63384de9492c44926b72a244a6c91e9740121a 100644 GIT binary patch delta 10380 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 f!0$Xp*typPI$-ZkyRu%_?r$b77LWe1 z?a4WlG@beVzTfZX^*i#W@#0D29%|l=H77g2&FM`jVNbWx{n8#gY4|orim9HElu%9^ zzBl~2xz^~g_C~^f#vhL*l8NEKqQDC03WLF5gWsXZ zMaiVc9F~$wGSXc=Hwf80FH$~AWXN7~my}dvJ>BH8?B;m9OCejNK$9`l6I&O2z~o+Z zS5J)Ovm4xfN>3sZYrdPHS(@BJBEr3KBaH0bMcCbNj;?~iwhM&A3(ZTap!ND}71)ED|z}&NSa46+VGlPW)Ry$Q zN6p4~Bz)SGZjBZrSg^zfJ4-5{>q0qP-c|qyo6JC}MR4XXk3i({1@jzv6PxH!WF?x+ z>;uzuISeU8r#2QRpxr!!Q#@_!r7-9A(+F%skMccYhYy3U<7ni zC7gc114Q4gP<8Pi;Fc#i#DQZ=Ed=-EK+97zVNEk%ZOfoBvlhKUgkfqS$6@}~c{3dj zTM z_E*1z+xuoBdSYsKTVq-bu6ELaF?YDJ~o)N+vrE;P~u6N0pVH8nfyk1of`vkAR z(V{8|K9&j#80?s71Vxa1m}mG9EvT$l^r|Yua};I^*{cfSLRt!QTuAb&7>*$^6jm5U zBw3SJz@$U2vWcw1QZmC({h@HkOAcjt;w0vY!KwU0+L4>Bwpe*qWLb(4L|Wv@>Z?o= zs4{Cr;`TGwFv*)!n508zk{gU}%zEU`B2Mz~Jk5JJD#UptRifOU5XA%zl9v!qO(BxH zV4soU7$4bdpy9(KRDSdAm>!r(dPt9afDr83ZG+`YigZ?Jx@?9&IA+55Kl|XW7VYzL z=nhYZ(fHYP^piXUUADw1vi7;4(_ki@sMDXa z8uCahTKo*YC?{*s{U=gOiJ6%4@G~%>eLH6b(2HGqfi#k^svp3;pAy9QCN;ihvP!y~{uII5XXzOD{kG5G4kbR#VTr{3 z8OjO7VtPrQJP|RD+h^lN)xcicW%&MJV@ZCdo|^tfV$nok%^LlyhY#HjsJ8^dk39tU z(vIPc@t|06+69}zHJCXu$WD(G(d8b%9j>GL}aPDyNY#nLdC16@=pO%)eAR zO-12|s`|x7TE`(qJL~m&jqr3L9pK&TGOWEJcg$cMT+qkP`g;w)G0NenknZ~n0AL#(N_ zhP_uu-ygbX5f%h`+St~aZ#?%1IlagNsp_KsV5xOm2DaH_B`01_ISdb{97Br{Q!t9k zvbJ@_IwMiCp4jd=ld8AxP>Q3VkKmHkvb##Y`Lf_1smdO3PM#rp;r+ z@{rxID`-C*HRO+?Qp3Qg;jAflY|*($YQACDsG-Q@55s1v%}Rr$Xq5|L!} zO@@L|Lm3vs`Ae!Nfc9CgPK$nKxVavVT@s5NmL1rJC1cU9NK~m)L{s&{mzoU$Q`*ym7)~ zv@SO5gqQIcCD>m)4a4ha<*YQH(Z_vXuM__1?X7A1=J^QzZod=G?Y}#tZCUWZTQyJ` z5oXxUon5hz)HNK41-9C^;%O~1JQ!8hCznLRIVKd$H7puMFj7%`o7>P%I(OQhQbI=;KLB*DG7&=}BE#jNd`dASZ#Rs4rF^~<*A^FTZ znpM;wDE#39{yI6K2wy_W{!Rj0nMv#TUC@ICf`=Dg`32#iCqQe3#De8;9aF27t&C=(3ReHgM?sn$9DU7TXt@^M&$om6ZwVKg*8~@XVjK9xRv$s zNRN_m``rx1cs&&3(R809YpVQSu@Sp+JxeHDSdb_&B!vV)1@A5H%EKr=vDKssIu)NEP#IQWg2$HHQ6y*|R z*++A9SPm=jg5;Jr9?ghHxUX%jVZ{c)CH^elm;p7rvgS6~|4?2sdy;V4$*eH{5x zc8`+m?TNO>$QOyGu2}UPa%sjmjA7$Y1+gP!JL#Ju{-Q4a_qyB?D~p`q3wcDr%X+Yx z3426dr9CPy`Ba5Pim$qBiu$((kD3`4dli}`k7mc=!V%B%=6+JpX_j!1p_yaNPS2?0(n^ zPdJPA1xAr?0(W+pvCabvP9}7lk6oUoj#v@F(H4Q>Uk*ayn$pJqr>ovvQV%;4x=iUS zxEgB4^tnFyrUYvPXOK}#u`n?L;S;!?+yV*~QyI@Umb7Z2?6xiE0YH<0N60A3)o3oz($Fuw-%nM4sA zIEb|(gI5a#e^n0lg0oO?pA8=BDAyl|69uC5jG=V{zXRj(b>QAw34`v+S&pfR@MmqE zL(6+J;mlhqxK|g$yc^v_6M~_`EL5+qAg@jjb_IGeGEJEtCypS?{-&O=3%1QDa?QF`U@fXj%0K|Hw_I$#F-)5B_ouZb*1y z8MqhSQzF{nWJCjM&U{F%>O(lG;ofHa@9K2#t}+Cd|JV-sPh5|)SSFifvKV$ouyWxz zyp!@%4*QR>b9L80iJA1F)*6&eu?G<E!PB!**_5|EEA^JV8<7l4JOL*X5eNltC@Jb zr1lz+O-brgNeA2qKZJklwCV|M&pu^mUbKr2X5z&d=fDhsWX3?H{E3OQs=i z>S*hJBQaS!!z7@m%7JEiy?8Yq{ZI)9|MUorAv7AW!kI<+mTPQ#?hm#-z2Kb?f?vC9 zz}Q;^)jNjL7Yiy86mIxmyy?f`lM%Mqs`TMg7wrhCTN!TROL;6xIq;v$Yl)NtnR)|L;UrHA439tu`+xLMdfUAe6ojzyiY>%b{|+@&Sre}~PV;yGTN z3nTM0X*uUIjx0QulDV7oB&8)n^3HWOd$umB*u@40A-P)iXXWV!L^yn6%WBJ5RudZN z!{Pa~&9F02hLoOQzQsnMfuw?uV|&OAM(hE{9hrEv { + post.editedISO = post.edited ? new Date(post.edited).toISOString() : null; + }); + return data.posts.filter(Boolean); };