NodeBB 4.14 turned on real HTML escaping for single-brace template interpolations (4.13 used an identity escape). This ports raw-HTML output to the double-brace forms ({{helper(...)}}, {{txEscape(content)}}, {{tx(name)}}), mirroring the harmony 2.2.72 -> 3.0.15 and core 4.13.2 -> 4.14.0 template diffs. Fixes the escaped-markup breakage on westgate.pw after the 2026.07.11-1 deploy.
Verified on a fresh 4.14.0 dev stack: no escaped tags on /, /categories, /category/2, /topic/1, /search; contract tests pass.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Reviewed-on: #19
Reviewed-by: xtul <mpiasecki720@protonmail.com>
Co-authored-by: gitea-bot <gitea-bot@noreply.git.westgate.pw>
Co-committed-by: gitea-bot <gitea-bot@noreply.git.westgate.pw>
28 lines
1.9 KiB
Smarty
28 lines
1.9 KiB
Smarty
<li component="post" class="posts-list-item {{{ if ./deleted }}} deleted{{{ else }}}{{{ if ./topic.deleted }}} deleted{{{ end }}}{{{ end }}}{{{ if ./topic.scheduled }}} scheduled{{{ end }}}" data-pid="{./pid}" data-uid="{./uid}">
|
|
<hr/>
|
|
<a class="topic-title fw-semibold fs-5 mb-2 text-reset text-break d-block" href="{{{ if ./isWikiArticle }}}{config.relative_path}{./wikiPath}{{{ else }}}{config.relative_path}/post/{encodeURIComponent(./pid)}{{{ end }}}">
|
|
{{{ if ./isWikiArticle }}}<span class="badge westgate-wiki-badge"><i class="fa fa-book-open"></i> [[westgate:wiki-badge]]</span> {{{ end }}}{./topic.title}
|
|
</a>
|
|
|
|
<div class="post-body d-flex flex-column gap-1 mb-2">
|
|
<div class="d-flex gap-2 post-info text-sm align-items-center">
|
|
<div class="post-author d-flex align-items-center gap-1">
|
|
<a class="lh-1 text-decoration-none" href="{config.relative_path}/user/{./user.userslug}">{{buildAvatar(./user, "16px", true, "not-responsive")}}</a>
|
|
<a class="lh-1 fw-semibold" href="{config.relative_path}/user/{./user.userslug}">{../user.displayname}</a>
|
|
</div>
|
|
<span class="timeago text-muted lh-1" title="{./timestampISO}"></span>
|
|
</div>
|
|
|
|
<div component="post/content" class="content text-sm text-break">
|
|
{{{ if ./txContent }}}{{tx(./content)}}{{{ else }}}{{txEscape(./content)}}{{{ end }}}
|
|
</div>
|
|
</div>
|
|
<div class="mb-3 d-flex flex-wrap gap-1 w-100">
|
|
{{buildCategoryLabel(./category, "a", "border")}}
|
|
<span data-tid="{./topic.tid}" component="topic/tags" class="lh-1 tag-list d-flex flex-wrap gap-1 {{{ if !./topic.tags.length }}}hidden{{{ end }}}">
|
|
{{{ each ./topic.tags }}}
|
|
<a href="{config.relative_path}/tags/{./valueEncoded}"><span class="badge border border-gray-300 fw-normal tag tag-class-{./class}" data-tag="{./value}">{./valueEscaped}</span></a>
|
|
{{{ end }}}
|
|
</span>
|
|
</div>
|
|
</li> |