diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml
index 82397772c4..da6bbaeade 100644
--- a/.github/workflows/test.yaml
+++ b/.github/workflows/test.yaml
@@ -7,6 +7,7 @@ on:
pull_request:
branches:
- f24
+ # - f24-p4
workflow_call: # Usually called from deploy
defaults:
diff --git a/public/src/client/topic.js b/public/src/client/topic.js
index 7e65cbeb4f..905f44d221 100644
--- a/public/src/client/topic.js
+++ b/public/src/client/topic.js
@@ -66,17 +66,35 @@ define('forum/topic', [
addParentHandler();
addRepliesHandler();
addPostsPreviewHandler();
+ configurePostToggle();
setupQuickReply();
handleBookmark(tid);
handleThumbs();
$(window).on('scroll', utils.debounce(updateTopicTitle, 250));
+
+
handleTopicSearch();
hooks.fire('action:topic.loaded', ajaxify.data);
};
+ function configurePostToggle() {
+ $(".topic").on("click", ".view-translated-btn", function () {
+ // Toggle the visibility of the next .translated-content div
+ $(this).closest('.sensitive-content-message').next('.translated-content').toggle();
+ console.log("Toggle btn clicked");
+ // Optionally, change the button text based on visibility
+ var isVisible = $(this).closest('.sensitive-content-message').next('.translated-content').is(':visible');
+ if (isVisible) {
+ $(this).text('Hide the translated message.');
+ } else {
+ $(this).text('Click here to view the translated message.');
+ }
+ });
+ }
+
function handleTopicSearch() {
require(['mousetrap'], (mousetrap) => {
if (config.topicSearchEnabled) {
diff --git a/src/meta/src/post.tpl b/src/meta/src/post.tpl
index 6356cf7e7b..501e2e51db 100644
--- a/src/meta/src/post.tpl
+++ b/src/meta/src/post.tpl
@@ -79,6 +79,14 @@
{posts.content}
+ {{{if !posts.isEnglish }}}
+
+
+ {posts.translatedContent}
+
+ {{{end}}}
diff --git a/src/posts/create.js b/src/posts/create.js
index a9ff9de98a..9a07811e45 100644
--- a/src/posts/create.js
+++ b/src/posts/create.js
@@ -10,6 +10,7 @@ const topics = require('../topics');
const categories = require('../categories');
const groups = require('../groups');
const privileges = require('../privileges');
+const translate = require('../translate');
module.exports = function (Posts) {
Posts.create = async function (data) {
@@ -19,6 +20,7 @@ module.exports = function (Posts) {
const content = data.content.toString();
const timestamp = data.timestamp || Date.now();
const isMain = data.isMain || false;
+ const [isEnglish, translatedContent] = await translate.translate(data)
const { isApproved } = data;
const { annonymousType } = data;
@@ -37,6 +39,8 @@ module.exports = function (Posts) {
tid: tid,
content: content,
timestamp: timestamp,
+ translatedContent: translatedContent,
+ isEnglish: isEnglish,
isApproved: isApproved,
annonymousType: annonymousType,
};
diff --git a/src/posts/data.js b/src/posts/data.js
index 3a4d303ff5..5f92b3c1f7 100644
--- a/src/posts/data.js
+++ b/src/posts/data.js
@@ -67,5 +67,7 @@ function modifyPost(post, fields) {
if (post.hasOwnProperty('edited')) {
post.editedISO = post.edited !== 0 ? utils.toISOString(post.edited) : '';
}
+ // Mark post as "English" if decided by translator service or if it has no info
+ post.isEnglish = post.isEnglish == "true" || post.isEnglish === undefined;
}
}
diff --git a/src/translate/index.js b/src/translate/index.js
new file mode 100644
index 0000000000..b32dcf4343
--- /dev/null
+++ b/src/translate/index.js
@@ -0,0 +1,11 @@
+var request = require('request');
+
+const translatorApi = module.exports;
+
+translatorApi.translate = async function (postData) {
+ // Edit the translator URL below
+ const TRANSLATOR_API = "https://nodebb-f24-translator.azurewebsites.net/"
+ const response = await fetch(TRANSLATOR_API+'/?content='+postData.content);
+ const data = await response.json();
+ return [data["is_english"], data["translated_content"]]
+}
\ No newline at end of file