如何为特定类别重写帖子日期(叙事项目角色扮演)

您好。对于即将到来的近未来科幻叙事项目季,我们想尝试将 Discourse 上某些类别中所有帖子的日期重写为特定的日/月/年。我知道这听起来很奇怪,但在我们的案例中是有意义的,因为我们的社区将其用于游戏内的角色扮演,而看到实际年份会稍微破坏一些悬念。我尝试搜索现有的插件或其他解决方案,但没有找到太多。我能想到的最好的办法是自己编写一个插件,并使用插件出口来更改日期。有人有想法或我们可以使用的现有东西吗?

哦,听起来很有趣!可能没有现成的解决方案,而且我很难想象有什么正当理由去创建一个真正改变实际时间戳的解决方案。你所能做的,是创建一个自定义主题组件,它会在每个帖子中插入一个伪造的时间戳。

你可以添加一个通用的 [wrap] bbcode,它允许你在想要更改的帖子中使用任何任意的 [wrap=] bbcode。

设置类似 [wrap=timechange time='Apr 1'][/wrap],你会在帖子本身中得到 \u003cspan class=\"d-wrap\" data-time=\"Apr 1\" data-wrap=\"timechange\"\u003e\u003c/span\u003e。然后你可以使用 decorateCookedElement() 来搜索每个帖子中的 [data-wrap=\"timechange\"],以决定是否应该更改时间戳。

我不认为时间戳处有插件出口,但你总可以在 post-date anchor 元素中插入一个新元素,并使用一些 CSS 来隐藏旧的。

这是当前 post-date 的样子。

\u003cdiv class=\"post-info post-date\"\u003e
  \u003ca class=\"widget-link post-date\" href=\"...\" title=\"Post date\"\u003e
    \u003cspan title=\"...\" data-time=\"...\" data-format=\"tiny\" class=\"relative-date\"\u003e...\u003c/span\u003e
  \u003c/a\u003e
\u003c/div\u003e

你可能需要定位 .post-info a.post-date,并在那里添加一个新元素,比如一个 span。一些 CSS .post-info a.post-date span:first-child { display: none; } 将会隐藏真实的时间戳。定位 anchor 标签并保留它将允许你的用户继续正常使用它(它有分享功能)。

连接到 decorateCookedElement(),该函数会给你煮熟帖子的根元素,所以你可以从那里使用 element.closest().querySelector() 快速搜索 DOM,以到达正确的 .post-info

使用 bbcode 将允许你(以及其他人)更改任何帖子的外观,无论其类别如何。你也可以使用一些巧妙的 CSS 来限制它实际显示的位置。正文应该有一个类 .category-*,它将包含主题的类别名称。所以你可以将你的 CSS 限制在这些类别中。

3 个赞

这是一个很好的起点信息。我们特别希望它能自动进行,而不是让每个帖子都选择加入,所以我不太确定 bbcode 是否会是必需的,但我想如果我们有一个在渲染帖子时自动生成它的东西,那也可以。我一定会看看你的建议。谢谢!

为了给你更多的背景信息,它是关于 Neurocracy 的,我们的 Discourse 在 talk.omnipedia.app 上,你可以在那里看到“推测”类别,其中包含每个宇宙内部日期的子类别。我们的社区自然而然地成为了我们未来维基的用户,就各种曲折展开进行角色扮演。