forked from CMU-313/cmu-313-f24-nodebb-f24-NodeBB
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #52 from CMU-313/feature-integrate-translator-service
Feature: Integrate Translator Service
- Loading branch information
Showing
184 changed files
with
8,004 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
|
||
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"]] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"extends": "nodebb" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
Harmony theme for NodeBB | ||
==================== | ||
|
||
The Harmony theme is the default theme for NodeBB for versions spanning v3.0.0 onwards. | ||
|
||
## Issues | ||
|
||
Issues are tracked in [the main project issue tracker](https://github.com/NodeBB/NodeBB/issues?q=is%3Aopen+is%3Aissue+label%3Athemes). | ||
|
||
## Screenshots | ||
|
||
### Categories | ||
<img height="450" src="screenshots/categories.png"> | ||
|
||
### Recent | ||
<img height="450" src="screenshots/recent.png"> | ||
|
||
### Topic | ||
<img height="450" src="screenshots/topic.png"> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
{} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
'use strict'; | ||
|
||
const Controllers = module.exports; | ||
|
||
const accountHelpers = require.main.require('./src/controllers/accounts/helpers'); | ||
const helpers = require.main.require('./src/controllers/helpers'); | ||
|
||
Controllers.renderAdminPage = (req, res) => { | ||
res.render('admin/plugins/harmony', { | ||
title: '[[themes/harmony:theme-name]]', | ||
}); | ||
}; | ||
|
||
Controllers.renderThemeSettings = async (req, res, next) => { | ||
const userData = await accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, req.query); | ||
if (!userData) { | ||
return next(); | ||
} | ||
const lib = require('../library'); | ||
userData.theme = await lib.loadThemeConfig(userData.uid); | ||
|
||
userData.title = '[[themes/harmony:settings.title]]'; | ||
userData.breadcrumbs = helpers.buildBreadcrumbs([ | ||
{ text: userData.username, url: `/user/${userData.userslug}` }, | ||
{ text: '[[themes/harmony:settings.title]]' }, | ||
]); | ||
|
||
res.render('account/theme', userData); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,190 @@ | ||
'use strict'; | ||
|
||
const nconf = require.main.require('nconf'); | ||
const meta = require.main.require('./src/meta'); | ||
const _ = require.main.require('lodash'); | ||
const user = require.main.require('./src/user'); | ||
|
||
const controllers = require('./lib/controllers'); | ||
|
||
const library = module.exports; | ||
|
||
const defaults = { | ||
enableQuickReply: 'on', | ||
enableBreadcrumbs: 'on', | ||
centerHeaderElements: 'off', | ||
mobileTopicTeasers: 'off', | ||
stickyToolbar: 'on', | ||
autohideBottombar: 'on', | ||
openSidebars: 'off', | ||
chatModals: 'off', | ||
}; | ||
|
||
library.init = async function (params) { | ||
const { router, middleware } = params; | ||
const routeHelpers = require.main.require('./src/routes/helpers'); | ||
|
||
routeHelpers.setupAdminPageRoute(router, '/admin/plugins/harmony', [], controllers.renderAdminPage); | ||
|
||
routeHelpers.setupPageRoute(router, '/user/:userslug/theme', [ | ||
middleware.exposeUid, | ||
middleware.ensureLoggedIn, | ||
middleware.canViewUsers, | ||
middleware.checkAccountPermissions, | ||
], controllers.renderThemeSettings); | ||
|
||
if (nconf.get('isPrimary') && process.env.NODE_ENV === 'production') { | ||
setTimeout(buildSkins, 0); | ||
} | ||
}; | ||
|
||
async function buildSkins() { | ||
try { | ||
const plugins = require.main.require('./src/plugins'); | ||
await plugins.prepareForBuild(['client side styles']); | ||
for (const skin of meta.css.supportedSkins) { | ||
// eslint-disable-next-line no-await-in-loop | ||
await meta.css.buildBundle(`client-${skin}`, true); | ||
} | ||
require.main.require('./src/meta/minifier').killAll(); | ||
} catch (err) { | ||
console.error(err.stack); | ||
} | ||
} | ||
|
||
library.addAdminNavigation = async function (header) { | ||
header.plugins.push({ | ||
route: '/plugins/harmony', | ||
icon: 'fa-paint-brush', | ||
name: '[[themes/harmony:theme-name]]', | ||
}); | ||
return header; | ||
}; | ||
|
||
library.addProfileItem = async (data) => { | ||
data.links.push({ | ||
id: 'theme', | ||
route: 'theme', | ||
icon: 'fa-paint-brush', | ||
name: '[[themes/harmony:settings.title]]', | ||
visibility: { | ||
self: true, | ||
other: false, | ||
moderator: false, | ||
globalMod: false, | ||
admin: false, | ||
}, | ||
}); | ||
|
||
return data; | ||
}; | ||
|
||
library.defineWidgetAreas = async function (areas) { | ||
const locations = ['header', 'sidebar', 'footer']; | ||
const templates = [ | ||
'categories.tpl', 'category.tpl', 'topic.tpl', 'users.tpl', | ||
'unread.tpl', 'recent.tpl', 'popular.tpl', 'top.tpl', 'tags.tpl', 'tag.tpl', | ||
'login.tpl', 'register.tpl', | ||
]; | ||
function capitalizeFirst(str) { | ||
return str.charAt(0).toUpperCase() + str.slice(1); | ||
} | ||
templates.forEach((template) => { | ||
locations.forEach((location) => { | ||
areas.push({ | ||
name: `${capitalizeFirst(template.split('.')[0])} ${capitalizeFirst(location)}`, | ||
template: template, | ||
location: location, | ||
}); | ||
}); | ||
}); | ||
|
||
areas = areas.concat([ | ||
{ | ||
name: 'Main post header', | ||
template: 'topic.tpl', | ||
location: 'mainpost-header', | ||
}, | ||
{ | ||
name: 'Main post footer', | ||
template: 'topic.tpl', | ||
location: 'mainpost-footer', | ||
}, | ||
{ | ||
name: 'Sidebar Footer', | ||
template: 'global', | ||
location: 'sidebar-footer', | ||
}, | ||
{ | ||
name: 'Brand Header', | ||
template: 'global', | ||
location: 'brand-header', | ||
}, | ||
{ | ||
name: 'About me (before)', | ||
template: 'account/profile.tpl', | ||
location: 'profile-aboutme-before', | ||
}, | ||
{ | ||
name: 'About me (after)', | ||
template: 'account/profile.tpl', | ||
location: 'profile-aboutme-after', | ||
}, | ||
]); | ||
|
||
return areas; | ||
}; | ||
|
||
library.loadThemeConfig = async function (uid) { | ||
const [themeConfig, userConfig] = await Promise.all([ | ||
meta.settings.get('harmony'), | ||
user.getSettings(uid), | ||
]); | ||
|
||
const config = { ...defaults, ...themeConfig, ...(_.pick(userConfig, Object.keys(defaults))) }; | ||
config.enableQuickReply = config.enableQuickReply === 'on'; | ||
config.enableBreadcrumbs = config.enableBreadcrumbs === 'on'; | ||
config.centerHeaderElements = config.centerHeaderElements === 'on'; | ||
config.mobileTopicTeasers = config.mobileTopicTeasers === 'on'; | ||
config.stickyToolbar = config.stickyToolbar === 'on'; | ||
config.autohideBottombar = config.autohideBottombar === 'on'; | ||
config.openSidebars = config.openSidebars === 'on'; | ||
config.chatModals = config.chatModals === 'on'; | ||
return config; | ||
}; | ||
|
||
library.getThemeConfig = async function (config) { | ||
config.theme = await library.loadThemeConfig(config.uid); | ||
config.openDraftsOnPageLoad = false; | ||
return config; | ||
}; | ||
|
||
library.getAdminSettings = async function (hookData) { | ||
if (hookData.plugin === 'harmony') { | ||
hookData.values = { | ||
...defaults, | ||
...hookData.values, | ||
}; | ||
} | ||
return hookData; | ||
}; | ||
|
||
library.saveUserSettings = async function (hookData) { | ||
Object.keys(defaults).forEach((key) => { | ||
if (hookData.data.hasOwnProperty(key)) { | ||
hookData.settings[key] = hookData.data[key] || undefined; | ||
} | ||
}); | ||
return hookData; | ||
}; | ||
|
||
library.filterMiddlewareRenderHeader = async function (hookData) { | ||
hookData.templateData.bootswatchSkinOptions = await meta.css.getSkinSwitcherOptions(hookData.req.uid); | ||
return hookData; | ||
}; | ||
|
||
library.filterTeasersConfigureStripTags = function (hookData) { | ||
// teasers have a stretched-link to go to last post, the anchors in them are not clickable | ||
hookData.tags.push('a'); | ||
return hookData; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
{ | ||
"name": "nodebb-theme-harmony", | ||
"version": "1.2.63", | ||
"nbbpm": { | ||
"compatibility": "^3.7.0" | ||
}, | ||
"description": "Harmony theme for NodeBB", | ||
"main": "library.js", | ||
"repository": { | ||
"type": "git", | ||
"url": "https://github.com/NodeBB/nodebb-theme-harmony" | ||
}, | ||
"scripts": { | ||
"lint": "eslint ." | ||
}, | ||
"keywords": [ | ||
"nodebb", | ||
"theme", | ||
"forum", | ||
"bootstrap", | ||
"responsive" | ||
], | ||
"contributors": [ | ||
{ | ||
"name": "Julian Lam", | ||
"email": "[email protected]", | ||
"url": "https://github.com/julianlam" | ||
}, | ||
{ | ||
"name": "Barış Soner Uşaklı", | ||
"email": "[email protected]", | ||
"url": "https://github.com/barisusakli" | ||
} | ||
], | ||
"license": "MIT", | ||
"bugs": { | ||
"url": "https://github.com/NodeBB/nodebb-theme-harmony/issues" | ||
}, | ||
"dependencies": { | ||
"@fontsource/inter": "5.0.15", | ||
"@fontsource/poppins": "5.0.8" | ||
}, | ||
"devDependencies": { | ||
"eslint": "^9.0.0", | ||
"eslint-config-nodebb": "^0.2.0", | ||
"eslint-plugin-import": "^2.24.2" | ||
} | ||
} |
Oops, something went wrong.