From a75a043b61ad21cdede136eb1e0dda64d06c4072 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Mon, 10 Jan 2022 16:44:16 -0500 Subject: [PATCH] feat: allow % in tags, #10135 --- public/src/ajaxify.js | 2 +- public/src/utils.js | 2 +- src/topics/data.js | 1 + src/topics/tags.js | 1 + 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index 417c0f9a01..6181af8357 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -140,7 +140,7 @@ ajaxify = window.ajaxify || {}; if (data) { let status = parseInt(data.status, 10); - if (status === 403 || status === 404 || status === 500 || status === 502 || status === 503) { + if ([400, 403, 404, 500, 502, 504].includes(status)) { if (status === 502 && retry) { retry = false; ajaxifyTimer = undefined; diff --git a/public/src/utils.js b/public/src/utils.js index 6628a8f008..a505398545 100644 --- a/public/src/utils.js +++ b/public/src/utils.js @@ -334,7 +334,7 @@ tag = tag.trim().toLowerCase(); // see https://github.com/NodeBB/NodeBB/issues/4378 tag = tag.replace(/\u202E/gi, ''); - tag = tag.replace(/[,/#!$%^*;:{}=_`<>'"~()?|]/g, ''); + tag = tag.replace(/[,/#!$^*;:{}=_`<>'"~()?|]/g, ''); tag = tag.substr(0, maxLength || 15).trim(); const matches = tag.match(/^[.-]*(.+?)[.-]*$/); if (matches && matches.length > 1) { diff --git a/src/topics/data.js b/src/topics/data.js index 7c1b306674..1260c092e1 100644 --- a/src/topics/data.js +++ b/src/topics/data.js @@ -134,6 +134,7 @@ function modifyTopic(topic, fields) { return { value: tag, valueEscaped: escaped, + valueEncoded: encodeURIComponent(escaped), class: escaped.replace(/\s/g, '-'), }; }); diff --git a/src/topics/tags.js b/src/topics/tags.js index 4153f68785..7d585771d3 100644 --- a/src/topics/tags.js +++ b/src/topics/tags.js @@ -285,6 +285,7 @@ module.exports = function (Topics) { } tags.forEach((tag) => { tag.valueEscaped = validator.escape(String(tag.value)); + tag.valueEncoded = encodeURIComponent(tag.valueEscaped); tag.class = tag.valueEscaped.replace(/\s/g, '-'); }); return tags;