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>
35 lines
1.5 KiB
Smarty
35 lines
1.5 KiB
Smarty
<!DOCTYPE html>
|
|
<html lang="{localeToHTML(userLang, defaultLang)}" {{{if languageDirection}}}data-dir="{languageDirection}" style="direction: {languageDirection};"{{{end}}}>
|
|
<head>
|
|
<title>{browserTitle}</title>
|
|
{{{each metaTags}}}{{buildMetaTag(@value)}}{{{end}}}
|
|
<link rel="stylesheet" type="text/css" href="{relative_path}/assets/client{{{if bootswatchSkin}}}-{bootswatchSkin}{{{end}}}{{{ if (languageDirection=="rtl") }}}-rtl{{{ end }}}.css?{config.cache-buster}" />
|
|
{{{each linkTags}}}{{buildLinkTag(@value)}}{{{end}}}
|
|
|
|
<script>
|
|
var config = JSON.parse('{{configJSON}}');
|
|
var app = {
|
|
user: JSON.parse('{{userJSON}}')
|
|
};
|
|
document.documentElement.style.setProperty('--panel-offset', `0px`);
|
|
</script>
|
|
|
|
{{{if useCustomHTML}}}
|
|
{{customHTML}}
|
|
{{{end}}}
|
|
{{{if useCustomCSS}}}
|
|
<style>{{customCSS}}</style>
|
|
{{{end}}}
|
|
</head>
|
|
|
|
<body class="{bodyClass} skin-{{{if bootswatchSkin}}}{bootswatchSkin}{{{else}}}noskin{{{end}}}">
|
|
<a class="visually-hidden-focusable position-absolute top-0 start-0 p-3 m-3 bg-body" style="z-index: 1021;" href="#content">[[global:skip-to-content]]</a>
|
|
|
|
<div class="layout-container wg-layout-container d-flex flex-column pb-4 pb-md-0">
|
|
<!-- IMPORT partials/header/topbar.tpl -->
|
|
|
|
<main id="panel" class="d-flex flex-column gap-3 flex-grow-1 mt-3" style="min-width: 0;">
|
|
<div class="container-lg px-md-4 d-flex flex-column gap-3 h-100 mb-5 mb-lg-0" id="content">
|
|
<!-- IMPORT partials/noscript/warning.tpl -->
|
|
<!-- IMPORT partials/noscript/message.tpl -->
|