Merge commit 'bcb3903446e9b40be899d9606d26ca490afcc69e' into v1.x.x

This commit is contained in:
Misty (Bot)
2016-12-01 21:28:53 +00:00
359 changed files with 4233 additions and 2188 deletions

View File

@@ -23,7 +23,6 @@ addons:
- g++-4.8
node_js:
- "6"
- "5"
- "4"
branches:
only:

View File

@@ -3,7 +3,7 @@ host = https://www.transifex.com
[nodebb.category]
file_filter = public/language/<lang>/category.json
source_file = public/language/en_GB/category.json
source_file = public/language/en-GB/category.json
source_lang = en_GB
trans.ar = public/language/ar/category.json
trans.bn = public/language/bn/category.json
@@ -12,11 +12,11 @@ trans.cs = public/language/cs/category.json
trans.da = public/language/da/category.json
trans.de = public/language/de/category.json
trans.el = public/language/el/category.json
trans.en_US = public/language/en_US/category.json
trans.en@pirate = public/language/en@pirate/category.json
trans.en_US = public/language/en-US/category.json
trans.en@pirate = public/language/en-x-pirate/category.json
trans.es = public/language/es/category.json
trans.et = public/language/et/category.json
trans.fa_IR = public/language/fa_IR/category.json
trans.fa_IR = public/language/fa-IR/category.json
trans.fi = public/language/fi/category.json
trans.fr = public/language/fr/category.json
trans.gl = public/language/gl/category.json
@@ -31,7 +31,7 @@ trans.ms = public/language/ms/category.json
trans.nb = public/language/nb/category.json
trans.nl = public/language/nl/category.json
trans.pl = public/language/pl/category.json
trans.pt_BR = public/language/pt_BR/category.json
trans.pt_BR = public/language/pt-BR/category.json
trans.ru = public/language/ru/category.json
trans.ro = public/language/ro/category.json
trans.rw = public/language/rw/category.json
@@ -43,13 +43,13 @@ trans.sv = public/language/sv/category.json
trans.th = public/language/th/category.json
trans.tr = public/language/tr/category.json
trans.vi = public/language/vi/category.json
trans.zh_CN = public/language/zh_CN/category.json
trans.zh_TW = public/language/zh_TW/category.json
trans.zh_CN = public/language/zh-CN/category.json
trans.zh_TW = public/language/zh-TW/category.json
type = KEYVALUEJSON
[nodebb.login]
file_filter = public/language/<lang>/login.json
source_file = public/language/en_GB/login.json
source_file = public/language/en-GB/login.json
source_lang = en_GB
trans.ar = public/language/ar/login.json
trans.bn = public/language/bn/login.json
@@ -58,11 +58,11 @@ trans.cs = public/language/cs/login.json
trans.da = public/language/da/login.json
trans.de = public/language/de/login.json
trans.el = public/language/el/login.json
trans.en_US = public/language/en_US/login.json
trans.en@pirate = public/language/en@pirate/login.json
trans.en_US = public/language/en-US/login.json
trans.en@pirate = public/language/en-x-pirate/login.json
trans.es = public/language/es/login.json
trans.et = public/language/et/login.json
trans.fa_IR = public/language/fa_IR/login.json
trans.fa_IR = public/language/fa-IR/login.json
trans.fi = public/language/fi/login.json
trans.fr = public/language/fr/login.json
trans.gl = public/language/gl/login.json
@@ -77,7 +77,7 @@ trans.ms = public/language/ms/login.json
trans.nb = public/language/nb/login.json
trans.nl = public/language/nl/login.json
trans.pl = public/language/pl/login.json
trans.pt_BR = public/language/pt_BR/login.json
trans.pt_BR = public/language/pt-BR/login.json
trans.ru = public/language/ru/login.json
trans.ro = public/language/ro/login.json
trans.rw = public/language/rw/login.json
@@ -89,13 +89,13 @@ trans.sv = public/language/sv/login.json
trans.th = public/language/th/login.json
trans.tr = public/language/tr/login.json
trans.vi = public/language/vi/login.json
trans.zh_CN = public/language/zh_CN/login.json
trans.zh_TW = public/language/zh_TW/login.json
trans.zh_CN = public/language/zh-CN/login.json
trans.zh_TW = public/language/zh-TW/login.json
type = KEYVALUEJSON
[nodebb.recent]
file_filter = public/language/<lang>/recent.json
source_file = public/language/en_GB/recent.json
source_file = public/language/en-GB/recent.json
source_lang = en_GB
trans.ar = public/language/ar/recent.json
trans.bn = public/language/bn/recent.json
@@ -104,11 +104,11 @@ trans.cs = public/language/cs/recent.json
trans.da = public/language/da/recent.json
trans.de = public/language/de/recent.json
trans.el = public/language/el/recent.json
trans.en_US = public/language/en_US/recent.json
trans.en@pirate = public/language/en@pirate/recent.json
trans.en_US = public/language/en-US/recent.json
trans.en@pirate = public/language/en-x-pirate/recent.json
trans.es = public/language/es/recent.json
trans.et = public/language/et/recent.json
trans.fa_IR = public/language/fa_IR/recent.json
trans.fa_IR = public/language/fa-IR/recent.json
trans.fi = public/language/fi/recent.json
trans.fr = public/language/fr/recent.json
trans.gl = public/language/gl/recent.json
@@ -123,7 +123,7 @@ trans.ms = public/language/ms/recent.json
trans.nb = public/language/nb/recent.json
trans.nl = public/language/nl/recent.json
trans.pl = public/language/pl/recent.json
trans.pt_BR = public/language/pt_BR/recent.json
trans.pt_BR = public/language/pt-BR/recent.json
trans.ru = public/language/ru/recent.json
trans.ro = public/language/ro/recent.json
trans.rw = public/language/rw/recent.json
@@ -135,13 +135,13 @@ trans.sv = public/language/sv/recent.json
trans.th = public/language/th/recent.json
trans.tr = public/language/tr/recent.json
trans.vi = public/language/vi/recent.json
trans.zh_CN = public/language/zh_CN/recent.json
trans.zh_TW = public/language/zh_TW/recent.json
trans.zh_CN = public/language/zh-CN/recent.json
trans.zh_TW = public/language/zh-TW/recent.json
type = KEYVALUEJSON
[nodebb.unread]
file_filter = public/language/<lang>/unread.json
source_file = public/language/en_GB/unread.json
source_file = public/language/en-GB/unread.json
source_lang = en_GB
trans.ar = public/language/ar/unread.json
trans.bn = public/language/bn/unread.json
@@ -150,11 +150,11 @@ trans.cs = public/language/cs/unread.json
trans.da = public/language/da/unread.json
trans.de = public/language/de/unread.json
trans.el = public/language/el/unread.json
trans.en_US = public/language/en_US/unread.json
trans.en@pirate = public/language/en@pirate/unread.json
trans.en_US = public/language/en-US/unread.json
trans.en@pirate = public/language/en-x-pirate/unread.json
trans.es = public/language/es/unread.json
trans.et = public/language/et/unread.json
trans.fa_IR = public/language/fa_IR/unread.json
trans.fa_IR = public/language/fa-IR/unread.json
trans.fi = public/language/fi/unread.json
trans.fr = public/language/fr/unread.json
trans.gl = public/language/gl/unread.json
@@ -169,7 +169,7 @@ trans.ms = public/language/ms/unread.json
trans.nb = public/language/nb/unread.json
trans.nl = public/language/nl/unread.json
trans.pl = public/language/pl/unread.json
trans.pt_BR = public/language/pt_BR/unread.json
trans.pt_BR = public/language/pt-BR/unread.json
trans.ru = public/language/ru/unread.json
trans.ro = public/language/ro/unread.json
trans.rw = public/language/rw/unread.json
@@ -181,13 +181,13 @@ trans.sv = public/language/sv/unread.json
trans.th = public/language/th/unread.json
trans.tr = public/language/tr/unread.json
trans.vi = public/language/vi/unread.json
trans.zh_CN = public/language/zh_CN/unread.json
trans.zh_TW = public/language/zh_TW/unread.json
trans.zh_CN = public/language/zh-CN/unread.json
trans.zh_TW = public/language/zh-TW/unread.json
type = KEYVALUEJSON
[nodebb.modules]
file_filter = public/language/<lang>/modules.json
source_file = public/language/en_GB/modules.json
source_file = public/language/en-GB/modules.json
source_lang = en_GB
trans.ar = public/language/ar/modules.json
trans.bn = public/language/bn/modules.json
@@ -196,11 +196,11 @@ trans.cs = public/language/cs/modules.json
trans.da = public/language/da/modules.json
trans.de = public/language/de/modules.json
trans.el = public/language/el/modules.json
trans.en_US = public/language/en_US/modules.json
trans.en@pirate = public/language/en@pirate/modules.json
trans.en_US = public/language/en-US/modules.json
trans.en@pirate = public/language/en-x-pirate/modules.json
trans.es = public/language/es/modules.json
trans.et = public/language/et/modules.json
trans.fa_IR = public/language/fa_IR/modules.json
trans.fa_IR = public/language/fa-IR/modules.json
trans.fi = public/language/fi/modules.json
trans.fr = public/language/fr/modules.json
trans.gl = public/language/gl/modules.json
@@ -215,7 +215,7 @@ trans.ms = public/language/ms/modules.json
trans.nb = public/language/nb/modules.json
trans.nl = public/language/nl/modules.json
trans.pl = public/language/pl/modules.json
trans.pt_BR = public/language/pt_BR/modules.json
trans.pt_BR = public/language/pt-BR/modules.json
trans.ru = public/language/ru/modules.json
trans.ro = public/language/ro/modules.json
trans.rw = public/language/rw/modules.json
@@ -227,13 +227,13 @@ trans.sv = public/language/sv/modules.json
trans.th = public/language/th/modules.json
trans.tr = public/language/tr/modules.json
trans.vi = public/language/vi/modules.json
trans.zh_CN = public/language/zh_CN/modules.json
trans.zh_TW = public/language/zh_TW/modules.json
trans.zh_CN = public/language/zh-CN/modules.json
trans.zh_TW = public/language/zh-TW/modules.json
type = KEYVALUEJSON
[nodebb.register]
file_filter = public/language/<lang>/register.json
source_file = public/language/en_GB/register.json
source_file = public/language/en-GB/register.json
source_lang = en_GB
trans.ar = public/language/ar/register.json
trans.bn = public/language/bn/register.json
@@ -242,11 +242,11 @@ trans.cs = public/language/cs/register.json
trans.da = public/language/da/register.json
trans.de = public/language/de/register.json
trans.el = public/language/el/register.json
trans.en_US = public/language/en_US/register.json
trans.en@pirate = public/language/en@pirate/register.json
trans.en_US = public/language/en-US/register.json
trans.en@pirate = public/language/en-x-pirate/register.json
trans.es = public/language/es/register.json
trans.et = public/language/et/register.json
trans.fa_IR = public/language/fa_IR/register.json
trans.fa_IR = public/language/fa-IR/register.json
trans.fi = public/language/fi/register.json
trans.fr = public/language/fr/register.json
trans.gl = public/language/gl/register.json
@@ -261,7 +261,7 @@ trans.ms = public/language/ms/register.json
trans.nb = public/language/nb/register.json
trans.nl = public/language/nl/register.json
trans.pl = public/language/pl/register.json
trans.pt_BR = public/language/pt_BR/register.json
trans.pt_BR = public/language/pt-BR/register.json
trans.ru = public/language/ru/register.json
trans.ro = public/language/ro/register.json
trans.rw = public/language/rw/register.json
@@ -273,13 +273,13 @@ trans.sv = public/language/sv/register.json
trans.th = public/language/th/register.json
trans.tr = public/language/tr/register.json
trans.vi = public/language/vi/register.json
trans.zh_CN = public/language/zh_CN/register.json
trans.zh_TW = public/language/zh_TW/register.json
trans.zh_CN = public/language/zh-CN/register.json
trans.zh_TW = public/language/zh-TW/register.json
type = KEYVALUEJSON
[nodebb.user]
file_filter = public/language/<lang>/user.json
source_file = public/language/en_GB/user.json
source_file = public/language/en-GB/user.json
source_lang = en_GB
trans.ar = public/language/ar/user.json
trans.bn = public/language/bn/user.json
@@ -288,11 +288,11 @@ trans.cs = public/language/cs/user.json
trans.da = public/language/da/user.json
trans.de = public/language/de/user.json
trans.el = public/language/el/user.json
trans.en_US = public/language/en_US/user.json
trans.en@pirate = public/language/en@pirate/user.json
trans.en_US = public/language/en-US/user.json
trans.en@pirate = public/language/en-x-pirate/user.json
trans.es = public/language/es/user.json
trans.et = public/language/et/user.json
trans.fa_IR = public/language/fa_IR/user.json
trans.fa_IR = public/language/fa-IR/user.json
trans.fi = public/language/fi/user.json
trans.fr = public/language/fr/user.json
trans.gl = public/language/gl/user.json
@@ -307,7 +307,7 @@ trans.ms = public/language/ms/user.json
trans.nb = public/language/nb/user.json
trans.nl = public/language/nl/user.json
trans.pl = public/language/pl/user.json
trans.pt_BR = public/language/pt_BR/user.json
trans.pt_BR = public/language/pt-BR/user.json
trans.ru = public/language/ru/user.json
trans.ro = public/language/ro/user.json
trans.rw = public/language/rw/user.json
@@ -319,13 +319,13 @@ trans.sv = public/language/sv/user.json
trans.th = public/language/th/user.json
trans.tr = public/language/tr/user.json
trans.vi = public/language/vi/user.json
trans.zh_CN = public/language/zh_CN/user.json
trans.zh_TW = public/language/zh_TW/user.json
trans.zh_CN = public/language/zh-CN/user.json
trans.zh_TW = public/language/zh-TW/user.json
type = KEYVALUEJSON
[nodebb.global]
file_filter = public/language/<lang>/global.json
source_file = public/language/en_GB/global.json
source_file = public/language/en-GB/global.json
source_lang = en_GB
trans.ar = public/language/ar/global.json
trans.bn = public/language/bn/global.json
@@ -334,11 +334,11 @@ trans.cs = public/language/cs/global.json
trans.da = public/language/da/global.json
trans.de = public/language/de/global.json
trans.el = public/language/el/global.json
trans.en_US = public/language/en_US/global.json
trans.en@pirate = public/language/en@pirate/global.json
trans.en_US = public/language/en-US/global.json
trans.en@pirate = public/language/en-x-pirate/global.json
trans.es = public/language/es/global.json
trans.et = public/language/et/global.json
trans.fa_IR = public/language/fa_IR/global.json
trans.fa_IR = public/language/fa-IR/global.json
trans.fi = public/language/fi/global.json
trans.fr = public/language/fr/global.json
trans.gl = public/language/gl/global.json
@@ -353,7 +353,7 @@ trans.ms = public/language/ms/global.json
trans.nb = public/language/nb/global.json
trans.nl = public/language/nl/global.json
trans.pl = public/language/pl/global.json
trans.pt_BR = public/language/pt_BR/global.json
trans.pt_BR = public/language/pt-BR/global.json
trans.ru = public/language/ru/global.json
trans.ro = public/language/ro/global.json
trans.rw = public/language/rw/global.json
@@ -365,13 +365,13 @@ trans.sv = public/language/sv/global.json
trans.th = public/language/th/global.json
trans.tr = public/language/tr/global.json
trans.vi = public/language/vi/global.json
trans.zh_CN = public/language/zh_CN/global.json
trans.zh_TW = public/language/zh_TW/global.json
trans.zh_CN = public/language/zh-CN/global.json
trans.zh_TW = public/language/zh-TW/global.json
type = KEYVALUEJSON
[nodebb.notifications]
file_filter = public/language/<lang>/notifications.json
source_file = public/language/en_GB/notifications.json
source_file = public/language/en-GB/notifications.json
source_lang = en_GB
trans.ar = public/language/ar/notifications.json
trans.bn = public/language/bn/notifications.json
@@ -380,11 +380,11 @@ trans.cs = public/language/cs/notifications.json
trans.da = public/language/da/notifications.json
trans.de = public/language/de/notifications.json
trans.el = public/language/el/notifications.json
trans.en_US = public/language/en_US/notifications.json
trans.en@pirate = public/language/en@pirate/notifications.json
trans.en_US = public/language/en-US/notifications.json
trans.en@pirate = public/language/en-x-pirate/notifications.json
trans.es = public/language/es/notifications.json
trans.et = public/language/et/notifications.json
trans.fa_IR = public/language/fa_IR/notifications.json
trans.fa_IR = public/language/fa-IR/notifications.json
trans.fi = public/language/fi/notifications.json
trans.fr = public/language/fr/notifications.json
trans.gl = public/language/gl/notifications.json
@@ -399,7 +399,7 @@ trans.ms = public/language/ms/notifications.json
trans.nb = public/language/nb/notifications.json
trans.nl = public/language/nl/notifications.json
trans.pl = public/language/pl/notifications.json
trans.pt_BR = public/language/pt_BR/notifications.json
trans.pt_BR = public/language/pt-BR/notifications.json
trans.ru = public/language/ru/notifications.json
trans.ro = public/language/ro/notifications.json
trans.rw = public/language/rw/notifications.json
@@ -411,13 +411,13 @@ trans.sv = public/language/sv/notifications.json
trans.th = public/language/th/notifications.json
trans.tr = public/language/tr/notifications.json
trans.vi = public/language/vi/notifications.json
trans.zh_CN = public/language/zh_CN/notifications.json
trans.zh_TW = public/language/zh_TW/notifications.json
trans.zh_CN = public/language/zh-CN/notifications.json
trans.zh_TW = public/language/zh-TW/notifications.json
type = KEYVALUEJSON
[nodebb.reset_password]
file_filter = public/language/<lang>/reset_password.json
source_file = public/language/en_GB/reset_password.json
source_file = public/language/en-GB/reset_password.json
source_lang = en_GB
trans.ar = public/language/ar/reset_password.json
trans.bn = public/language/bn/reset_password.json
@@ -426,11 +426,11 @@ trans.cs = public/language/cs/reset_password.json
trans.da = public/language/da/reset_password.json
trans.de = public/language/de/reset_password.json
trans.el = public/language/el/reset_password.json
trans.en_US = public/language/en_US/reset_password.json
trans.en@pirate = public/language/en@pirate/reset_password.json
trans.en_US = public/language/en-US/reset_password.json
trans.en@pirate = public/language/en-x-pirate/reset_password.json
trans.es = public/language/es/reset_password.json
trans.et = public/language/et/reset_password.json
trans.fa_IR = public/language/fa_IR/reset_password.json
trans.fa_IR = public/language/fa-IR/reset_password.json
trans.fi = public/language/fi/reset_password.json
trans.fr = public/language/fr/reset_password.json
trans.gl = public/language/gl/reset_password.json
@@ -445,7 +445,7 @@ trans.ms = public/language/ms/reset_password.json
trans.nb = public/language/nb/reset_password.json
trans.nl = public/language/nl/reset_password.json
trans.pl = public/language/pl/reset_password.json
trans.pt_BR = public/language/pt_BR/reset_password.json
trans.pt_BR = public/language/pt-BR/reset_password.json
trans.ru = public/language/ru/reset_password.json
trans.ro = public/language/ro/reset_password.json
trans.rw = public/language/rw/reset_password.json
@@ -457,13 +457,13 @@ trans.sv = public/language/sv/reset_password.json
trans.th = public/language/th/reset_password.json
trans.tr = public/language/tr/reset_password.json
trans.vi = public/language/vi/reset_password.json
trans.zh_CN = public/language/zh_CN/reset_password.json
trans.zh_TW = public/language/zh_TW/reset_password.json
trans.zh_CN = public/language/zh-CN/reset_password.json
trans.zh_TW = public/language/zh-TW/reset_password.json
type = KEYVALUEJSON
[nodebb.users]
file_filter = public/language/<lang>/users.json
source_file = public/language/en_GB/users.json
source_file = public/language/en-GB/users.json
source_lang = en_GB
trans.ar = public/language/ar/users.json
trans.bn = public/language/bn/users.json
@@ -472,11 +472,11 @@ trans.cs = public/language/cs/users.json
trans.da = public/language/da/users.json
trans.de = public/language/de/users.json
trans.el = public/language/el/users.json
trans.en_US = public/language/en_US/users.json
trans.en@pirate = public/language/en@pirate/users.json
trans.en_US = public/language/en-US/users.json
trans.en@pirate = public/language/en-x-pirate/users.json
trans.es = public/language/es/users.json
trans.et = public/language/et/users.json
trans.fa_IR = public/language/fa_IR/users.json
trans.fa_IR = public/language/fa-IR/users.json
trans.fi = public/language/fi/users.json
trans.fr = public/language/fr/users.json
trans.gl = public/language/gl/users.json
@@ -491,7 +491,7 @@ trans.ms = public/language/ms/users.json
trans.nb = public/language/nb/users.json
trans.nl = public/language/nl/users.json
trans.pl = public/language/pl/users.json
trans.pt_BR = public/language/pt_BR/users.json
trans.pt_BR = public/language/pt-BR/users.json
trans.ru = public/language/ru/users.json
trans.ro = public/language/ro/users.json
trans.rw = public/language/rw/users.json
@@ -503,13 +503,13 @@ trans.sv = public/language/sv/users.json
trans.th = public/language/th/users.json
trans.tr = public/language/tr/users.json
trans.vi = public/language/vi/users.json
trans.zh_CN = public/language/zh_CN/users.json
trans.zh_TW = public/language/zh_TW/users.json
trans.zh_CN = public/language/zh-CN/users.json
trans.zh_TW = public/language/zh-TW/users.json
type = KEYVALUEJSON
[nodebb.language-1]
file_filter = public/language/<lang>/language.json
source_file = public/language/en_GB/language.json
source_file = public/language/en-GB/language.json
source_lang = en_GB
trans.ar = public/language/ar/language.json
trans.bn = public/language/bn/language.json
@@ -518,11 +518,11 @@ trans.cs = public/language/cs/language.json
trans.da = public/language/da/language.json
trans.de = public/language/de/language.json
trans.el = public/language/el/language.json
trans.en_US = public/language/en_US/language.json
trans.en@pirate = public/language/en@pirate/language.json
trans.en_US = public/language/en-US/language.json
trans.en@pirate = public/language/en-x-pirate/language.json
trans.es = public/language/es/language.json
trans.et = public/language/et/language.json
trans.fa_IR = public/language/fa_IR/language.json
trans.fa_IR = public/language/fa-IR/language.json
trans.fi = public/language/fi/language.json
trans.fr = public/language/fr/language.json
trans.gl = public/language/gl/language.json
@@ -537,7 +537,7 @@ trans.ms = public/language/ms/language.json
trans.nb = public/language/nb/language.json
trans.nl = public/language/nl/language.json
trans.pl = public/language/pl/language.json
trans.pt_BR = public/language/pt_BR/language.json
trans.pt_BR = public/language/pt-BR/language.json
trans.ru = public/language/ru/language.json
trans.ro = public/language/ro/language.json
trans.rw = public/language/rw/language.json
@@ -549,13 +549,13 @@ trans.sv = public/language/sv/language.json
trans.th = public/language/th/language.json
trans.tr = public/language/tr/language.json
trans.vi = public/language/vi/language.json
trans.zh_CN = public/language/zh_CN/language.json
trans.zh_TW = public/language/zh_TW/language.json
trans.zh_CN = public/language/zh-CN/language.json
trans.zh_TW = public/language/zh-TW/language.json
type = KEYVALUEJSON
[nodebb.pages]
file_filter = public/language/<lang>/pages.json
source_file = public/language/en_GB/pages.json
source_file = public/language/en-GB/pages.json
source_lang = en_GB
trans.ar = public/language/ar/pages.json
trans.bn = public/language/bn/pages.json
@@ -564,11 +564,11 @@ trans.cs = public/language/cs/pages.json
trans.da = public/language/da/pages.json
trans.de = public/language/de/pages.json
trans.el = public/language/el/pages.json
trans.en_US = public/language/en_US/pages.json
trans.en@pirate = public/language/en@pirate/pages.json
trans.en_US = public/language/en-US/pages.json
trans.en@pirate = public/language/en-x-pirate/pages.json
trans.es = public/language/es/pages.json
trans.et = public/language/et/pages.json
trans.fa_IR = public/language/fa_IR/pages.json
trans.fa_IR = public/language/fa-IR/pages.json
trans.fi = public/language/fi/pages.json
trans.fr = public/language/fr/pages.json
trans.gl = public/language/gl/pages.json
@@ -583,7 +583,7 @@ trans.ms = public/language/ms/pages.json
trans.nb = public/language/nb/pages.json
trans.nl = public/language/nl/pages.json
trans.pl = public/language/pl/pages.json
trans.pt_BR = public/language/pt_BR/pages.json
trans.pt_BR = public/language/pt-BR/pages.json
trans.ru = public/language/ru/pages.json
trans.ro = public/language/ro/pages.json
trans.rw = public/language/rw/pages.json
@@ -595,13 +595,13 @@ trans.sv = public/language/sv/pages.json
trans.th = public/language/th/pages.json
trans.tr = public/language/tr/pages.json
trans.vi = public/language/vi/pages.json
trans.zh_CN = public/language/zh_CN/pages.json
trans.zh_TW = public/language/zh_TW/pages.json
trans.zh_CN = public/language/zh-CN/pages.json
trans.zh_TW = public/language/zh-TW/pages.json
type = KEYVALUEJSON
[nodebb.topic]
file_filter = public/language/<lang>/topic.json
source_file = public/language/en_GB/topic.json
source_file = public/language/en-GB/topic.json
source_lang = en_GB
trans.ar = public/language/ar/topic.json
trans.bn = public/language/bn/topic.json
@@ -610,11 +610,11 @@ trans.cs = public/language/cs/topic.json
trans.da = public/language/da/topic.json
trans.de = public/language/de/topic.json
trans.el = public/language/el/topic.json
trans.en_US = public/language/en_US/topic.json
trans.en@pirate = public/language/en@pirate/topic.json
trans.en_US = public/language/en-US/topic.json
trans.en@pirate = public/language/en-x-pirate/topic.json
trans.es = public/language/es/topic.json
trans.et = public/language/et/topic.json
trans.fa_IR = public/language/fa_IR/topic.json
trans.fa_IR = public/language/fa-IR/topic.json
trans.fi = public/language/fi/topic.json
trans.fr = public/language/fr/topic.json
trans.gl = public/language/gl/topic.json
@@ -629,7 +629,7 @@ trans.ms = public/language/ms/topic.json
trans.nb = public/language/nb/topic.json
trans.nl = public/language/nl/topic.json
trans.pl = public/language/pl/topic.json
trans.pt_BR = public/language/pt_BR/topic.json
trans.pt_BR = public/language/pt-BR/topic.json
trans.ru = public/language/ru/topic.json
trans.ro = public/language/ro/topic.json
trans.rw = public/language/rw/topic.json
@@ -641,13 +641,13 @@ trans.sv = public/language/sv/topic.json
trans.th = public/language/th/topic.json
trans.tr = public/language/tr/topic.json
trans.vi = public/language/vi/topic.json
trans.zh_CN = public/language/zh_CN/topic.json
trans.zh_TW = public/language/zh_TW/topic.json
trans.zh_CN = public/language/zh-CN/topic.json
trans.zh_TW = public/language/zh-TW/topic.json
type = KEYVALUEJSON
[nodebb.success]
file_filter = public/language/<lang>/success.json
source_file = public/language/en_GB/success.json
source_file = public/language/en-GB/success.json
source_lang = en_GB
trans.ar = public/language/ar/success.json
trans.bn = public/language/bn/success.json
@@ -656,11 +656,11 @@ trans.cs = public/language/cs/success.json
trans.da = public/language/da/success.json
trans.de = public/language/de/success.json
trans.el = public/language/el/success.json
trans.en_US = public/language/en_US/success.json
trans.en@pirate = public/language/en@pirate/success.json
trans.en_US = public/language/en-US/success.json
trans.en@pirate = public/language/en-x-pirate/success.json
trans.es = public/language/es/success.json
trans.et = public/language/et/success.json
trans.fa_IR = public/language/fa_IR/success.json
trans.fa_IR = public/language/fa-IR/success.json
trans.fi = public/language/fi/success.json
trans.fr = public/language/fr/success.json
trans.gl = public/language/gl/success.json
@@ -675,7 +675,7 @@ trans.ms = public/language/ms/success.json
trans.nb = public/language/nb/success.json
trans.nl = public/language/nl/success.json
trans.pl = public/language/pl/success.json
trans.pt_BR = public/language/pt_BR/success.json
trans.pt_BR = public/language/pt-BR/success.json
trans.ru = public/language/ru/success.json
trans.ro = public/language/ro/success.json
trans.rw = public/language/rw/success.json
@@ -687,13 +687,13 @@ trans.sv = public/language/sv/success.json
trans.th = public/language/th/success.json
trans.tr = public/language/tr/success.json
trans.vi = public/language/vi/success.json
trans.zh_CN = public/language/zh_CN/success.json
trans.zh_TW = public/language/zh_TW/success.json
trans.zh_CN = public/language/zh-CN/success.json
trans.zh_TW = public/language/zh-TW/success.json
type = KEYVALUEJSON
[nodebb.error]
file_filter = public/language/<lang>/error.json
source_file = public/language/en_GB/error.json
source_file = public/language/en-GB/error.json
source_lang = en_GB
trans.ar = public/language/ar/error.json
trans.bn = public/language/bn/error.json
@@ -702,11 +702,11 @@ trans.cs = public/language/cs/error.json
trans.da = public/language/da/error.json
trans.de = public/language/de/error.json
trans.el = public/language/el/error.json
trans.en_US = public/language/en_US/error.json
trans.en@pirate = public/language/en@pirate/error.json
trans.en_US = public/language/en-US/error.json
trans.en@pirate = public/language/en-x-pirate/error.json
trans.es = public/language/es/error.json
trans.et = public/language/et/error.json
trans.fa_IR = public/language/fa_IR/error.json
trans.fa_IR = public/language/fa-IR/error.json
trans.fi = public/language/fi/error.json
trans.fr = public/language/fr/error.json
trans.gl = public/language/gl/error.json
@@ -721,7 +721,7 @@ trans.ms = public/language/ms/error.json
trans.nb = public/language/nb/error.json
trans.nl = public/language/nl/error.json
trans.pl = public/language/pl/error.json
trans.pt_BR = public/language/pt_BR/error.json
trans.pt_BR = public/language/pt-BR/error.json
trans.ru = public/language/ru/error.json
trans.ro = public/language/ro/error.json
trans.rw = public/language/rw/error.json
@@ -733,13 +733,13 @@ trans.sv = public/language/sv/error.json
trans.th = public/language/th/error.json
trans.tr = public/language/tr/error.json
trans.vi = public/language/vi/error.json
trans.zh_CN = public/language/zh_CN/error.json
trans.zh_TW = public/language/zh_TW/error.json
trans.zh_CN = public/language/zh-CN/error.json
trans.zh_TW = public/language/zh-TW/error.json
type = KEYVALUEJSON
[nodebb.tags]
file_filter = public/language/<lang>/tags.json
source_file = public/language/en_GB/tags.json
source_file = public/language/en-GB/tags.json
source_lang = en_GB
trans.ar = public/language/ar/tags.json
trans.bn = public/language/bn/tags.json
@@ -748,11 +748,11 @@ trans.cs = public/language/cs/tags.json
trans.da = public/language/da/tags.json
trans.de = public/language/de/tags.json
trans.el = public/language/el/tags.json
trans.en_US = public/language/en_US/tags.json
trans.en@pirate = public/language/en@pirate/tags.json
trans.en_US = public/language/en-US/tags.json
trans.en@pirate = public/language/en-x-pirate/tags.json
trans.es = public/language/es/tags.json
trans.et = public/language/et/tags.json
trans.fa_IR = public/language/fa_IR/tags.json
trans.fa_IR = public/language/fa-IR/tags.json
trans.fi = public/language/fi/tags.json
trans.fr = public/language/fr/tags.json
trans.gl = public/language/gl/tags.json
@@ -767,7 +767,7 @@ trans.ms = public/language/ms/tags.json
trans.nb = public/language/nb/tags.json
trans.nl = public/language/nl/tags.json
trans.pl = public/language/pl/tags.json
trans.pt_BR = public/language/pt_BR/tags.json
trans.pt_BR = public/language/pt-BR/tags.json
trans.ru = public/language/ru/tags.json
trans.ro = public/language/ro/tags.json
trans.rw = public/language/rw/tags.json
@@ -779,13 +779,13 @@ trans.sv = public/language/sv/tags.json
trans.th = public/language/th/tags.json
trans.tr = public/language/tr/tags.json
trans.vi = public/language/vi/tags.json
trans.zh_CN = public/language/zh_CN/tags.json
trans.zh_TW = public/language/zh_TW/tags.json
trans.zh_CN = public/language/zh-CN/tags.json
trans.zh_TW = public/language/zh-TW/tags.json
type = KEYVALUEJSON
[nodebb.email]
file_filter = public/language/<lang>/email.json
source_file = public/language/en_GB/email.json
source_file = public/language/en-GB/email.json
source_lang = en_GB
trans.ar = public/language/ar/email.json
trans.bn = public/language/bn/email.json
@@ -794,11 +794,11 @@ trans.cs = public/language/cs/email.json
trans.da = public/language/da/email.json
trans.de = public/language/de/email.json
trans.el = public/language/el/email.json
trans.en_US = public/language/en_US/email.json
trans.en@pirate = public/language/en@pirate/email.json
trans.en_US = public/language/en-US/email.json
trans.en@pirate = public/language/en-x-pirate/email.json
trans.es = public/language/es/email.json
trans.et = public/language/et/email.json
trans.fa_IR = public/language/fa_IR/email.json
trans.fa_IR = public/language/fa-IR/email.json
trans.fi = public/language/fi/email.json
trans.fr = public/language/fr/email.json
trans.gl = public/language/gl/email.json
@@ -813,7 +813,7 @@ trans.ms = public/language/ms/email.json
trans.nb = public/language/nb/email.json
trans.nl = public/language/nl/email.json
trans.pl = public/language/pl/email.json
trans.pt_BR = public/language/pt_BR/email.json
trans.pt_BR = public/language/pt-BR/email.json
trans.ru = public/language/ru/email.json
trans.ro = public/language/ro/email.json
trans.rw = public/language/rw/email.json
@@ -825,13 +825,13 @@ trans.sv = public/language/sv/email.json
trans.th = public/language/th/email.json
trans.tr = public/language/tr/email.json
trans.vi = public/language/vi/email.json
trans.zh_CN = public/language/zh_CN/email.json
trans.zh_TW = public/language/zh_TW/email.json
trans.zh_CN = public/language/zh-CN/email.json
trans.zh_TW = public/language/zh-TW/email.json
type = KEYVALUEJSON
[nodebb.search]
file_filter = public/language/<lang>/search.json
source_file = public/language/en_GB/search.json
source_file = public/language/en-GB/search.json
source_lang = en_GB
trans.ar = public/language/ar/search.json
trans.bn = public/language/bn/search.json
@@ -840,11 +840,11 @@ trans.cs = public/language/cs/search.json
trans.da = public/language/da/search.json
trans.de = public/language/de/search.json
trans.el = public/language/el/search.json
trans.en_US = public/language/en_US/search.json
trans.en@pirate = public/language/en@pirate/search.json
trans.en_US = public/language/en-US/search.json
trans.en@pirate = public/language/en-x-pirate/search.json
trans.es = public/language/es/search.json
trans.et = public/language/et/search.json
trans.fa_IR = public/language/fa_IR/search.json
trans.fa_IR = public/language/fa-IR/search.json
trans.fi = public/language/fi/search.json
trans.fr = public/language/fr/search.json
trans.gl = public/language/gl/search.json
@@ -859,7 +859,7 @@ trans.ms = public/language/ms/search.json
trans.nb = public/language/nb/search.json
trans.nl = public/language/nl/search.json
trans.pl = public/language/pl/search.json
trans.pt_BR = public/language/pt_BR/search.json
trans.pt_BR = public/language/pt-BR/search.json
trans.ru = public/language/ru/search.json
trans.ro = public/language/ro/search.json
trans.rw = public/language/rw/search.json
@@ -871,13 +871,13 @@ trans.sv = public/language/sv/search.json
trans.th = public/language/th/search.json
trans.tr = public/language/tr/search.json
trans.vi = public/language/vi/search.json
trans.zh_CN = public/language/zh_CN/search.json
trans.zh_TW = public/language/zh_TW/search.json
trans.zh_CN = public/language/zh-CN/search.json
trans.zh_TW = public/language/zh-TW/search.json
type = KEYVALUEJSON
[nodebb.groups]
file_filter = public/language/<lang>/groups.json
source_file = public/language/en_GB/groups.json
source_file = public/language/en-GB/groups.json
source_lang = en_GB
trans.ar = public/language/ar/groups.json
trans.bn = public/language/bn/groups.json
@@ -886,11 +886,11 @@ trans.cs = public/language/cs/groups.json
trans.da = public/language/da/groups.json
trans.de = public/language/de/groups.json
trans.el = public/language/el/groups.json
trans.en_US = public/language/en_US/groups.json
trans.en@pirate = public/language/en@pirate/groups.json
trans.en_US = public/language/en-US/groups.json
trans.en@pirate = public/language/en-x-pirate/groups.json
trans.es = public/language/es/groups.json
trans.et = public/language/et/groups.json
trans.fa_IR = public/language/fa_IR/groups.json
trans.fa_IR = public/language/fa-IR/groups.json
trans.fi = public/language/fi/groups.json
trans.fr = public/language/fr/groups.json
trans.gl = public/language/gl/groups.json
@@ -905,7 +905,7 @@ trans.ms = public/language/ms/groups.json
trans.nb = public/language/nb/groups.json
trans.nl = public/language/nl/groups.json
trans.pl = public/language/pl/groups.json
trans.pt_BR = public/language/pt_BR/groups.json
trans.pt_BR = public/language/pt-BR/groups.json
trans.ru = public/language/ru/groups.json
trans.ro = public/language/ro/groups.json
trans.rw = public/language/rw/groups.json
@@ -917,13 +917,13 @@ trans.sv = public/language/sv/groups.json
trans.th = public/language/th/groups.json
trans.tr = public/language/tr/groups.json
trans.vi = public/language/vi/groups.json
trans.zh_CN = public/language/zh_CN/groups.json
trans.zh_TW = public/language/zh_TW/groups.json
trans.zh_CN = public/language/zh-CN/groups.json
trans.zh_TW = public/language/zh-TW/groups.json
type = KEYVALUEJSON
[nodebb.uploads]
file_filter = public/language/<lang>/uploads.json
source_file = public/language/en_GB/uploads.json
source_file = public/language/en-GB/uploads.json
source_lang = en_GB
trans.ar = public/language/ar/uploads.json
trans.bn = public/language/bn/uploads.json
@@ -932,11 +932,11 @@ trans.cs = public/language/cs/uploads.json
trans.da = public/language/da/uploads.json
trans.de = public/language/de/uploads.json
trans.el = public/language/el/uploads.json
trans.en_US = public/language/en_US/uploads.json
trans.en@pirate = public/language/en@pirate/uploads.json
trans.en_US = public/language/en-US/uploads.json
trans.en@pirate = public/language/en-x-pirate/uploads.json
trans.es = public/language/es/uploads.json
trans.et = public/language/et/uploads.json
trans.fa_IR = public/language/fa_IR/uploads.json
trans.fa_IR = public/language/fa-IR/uploads.json
trans.fi = public/language/fi/uploads.json
trans.fr = public/language/fr/uploads.json
trans.gl = public/language/gl/uploads.json
@@ -951,7 +951,7 @@ trans.ms = public/language/ms/uploads.json
trans.nb = public/language/nb/uploads.json
trans.nl = public/language/nl/uploads.json
trans.pl = public/language/pl/uploads.json
trans.pt_BR = public/language/pt_BR/uploads.json
trans.pt_BR = public/language/pt-BR/uploads.json
trans.ru = public/language/ru/uploads.json
trans.ro = public/language/ro/uploads.json
trans.rw = public/language/rw/uploads.json
@@ -963,6 +963,6 @@ trans.sv = public/language/sv/uploads.json
trans.th = public/language/th/uploads.json
trans.tr = public/language/tr/uploads.json
trans.vi = public/language/vi/uploads.json
trans.zh_CN = public/language/zh_CN/uploads.json
trans.zh_TW = public/language/zh_TW/uploads.json
trans.zh_CN = public/language/zh-CN/uploads.json
trans.zh_TW = public/language/zh-TW/uploads.json
type = KEYVALUEJSON

View File

@@ -2,8 +2,9 @@
var fork = require('child_process').fork,
env = process.env,
worker,
incomplete = [];
worker, updateWorker,
incomplete = [],
running = 0;
module.exports = function (grunt) {
@@ -19,38 +20,43 @@ module.exports = function (grunt) {
time = Date.now();
if (target === 'lessUpdated_Client') {
fromFile = ['js', 'tpl', 'acpLess'];
compiling = 'clientLess';
compiling = 'clientCSS';
} else if (target === 'lessUpdated_Admin') {
fromFile = ['js', 'tpl', 'clientLess'];
compiling = 'acpLess';
compiling = 'acpCSS';
} else if (target === 'clientUpdated') {
fromFile = ['clientLess', 'acpLess', 'tpl'];
compiling = 'js';
} else if (target === 'templatesUpdated') {
fromFile = ['js', 'clientLess', 'acpLess'];
compiling = 'tpl';
} else if (target === 'serverUpdated') {
fromFile = ['clientLess', 'acpLess', 'js', 'tpl'];
// Do nothing, just restart
}
fromFile = fromFile.filter(function (ext) {
return incomplete.indexOf(ext) === -1;
});
if (incomplete.indexOf(compiling) === -1) {
incomplete.push(compiling);
}
updateArgs.push('--from-file=' + fromFile.join(','));
incomplete.push(compiling);
updateArgs.push('--build');
updateArgs.push(incomplete.join(','));
worker.kill();
worker = fork('app.js', updateArgs, { env: env });
if (updateWorker) {
updateWorker.kill('SIGKILL');
}
updateWorker = fork('app.js', updateArgs, { env: env });
++running;
updateWorker.on('exit', function () {
--running;
if (running === 0) {
worker = fork('app.js', args, { env: env });
worker.on('message', function () {
if (incomplete.length) {
incomplete = [];
worker.on('message', function () {
if (incomplete.length) {
incomplete = [];
if (grunt.option('verbose')) {
grunt.log.writeln('NodeBB restarted in ' + (Date.now() - time) + ' ms');
}
if (grunt.option('verbose')) {
grunt.log.writeln('NodeBB restarted in ' + (Date.now() - time) + ' ms');
}
}
});
}
});
}

View File

@@ -11,17 +11,18 @@
Additional functionality is enabled through the use of third-party plugins.
* [Get NodeBB](http://www.nodebb.org/ "NodeBB")
* [Demo & Meta Discussion](http://community.nodebb.org)
* [Documentation & Installation Instructions](http://docs.nodebb.org)
* [Help translate NodeBB](https://www.transifex.com/projects/p/nodebb/)
* [NodeBB Blog](http://blog.nodebb.org)
* [Join us on IRC](https://kiwiirc.com/client/irc.freenode.net/nodebb) - #nodebb on Freenode
* [Premium Hosting for NodeBB](http://www.nodebb.org/ "NodeBB")
* [Follow us on Twitter](http://www.twitter.com/NodeBB/ "NodeBB Twitter")
* [Like us on Facebook](http://www.facebook.com/NodeBB/ "NodeBB Facebook")
## Screenshots
NodeBB's theming engine is highly flexible and does not restrict your design choices. Check out some themed installs in these screenshots below:
[![](http://i.imgur.com/VCoOFyqb.png)](http://i.imgur.com/VCoOFyq.png)
[![](http://i.imgur.com/FLOUuIqb.png)](http://i.imgur.com/FLOUuIq.png)
[![](http://i.imgur.com/Ud1LrfIb.png)](http://i.imgur.com/Ud1LrfI.png)
@@ -31,6 +32,8 @@ Additional functionality is enabled through the use of third-party plugins.
[![](http://i.imgur.com/LmHtPhob.png)](http://i.imgur.com/LmHtPho.png)
[![](http://i.imgur.com/paiJPJkb.jpg)](http://i.imgur.com/paiJPJk.jpg)
Our minimalist "Persona" theme gets you going right away, no coding experience required.
[![](http://i.imgur.com/HwNEXGu.png)](http://i.imgur.com/HwNEXGu.png)
[![](http://i.imgur.com/II1byYs.png)](http://i.imgur.com/II1byYs.png)
@@ -47,7 +50,7 @@ Additional functionality is enabled through the use of third-party plugins.
NodeBB requires the following software to be installed:
* A version of Node.js at least 4 or greater
* A version of Node.js at least 4 or greater ([installation/upgrade instructions](https://github.com/nodesource/distributions))
* Redis, version 2.8.9 or greater **or** MongoDB, version 2.6 or greater
* nginx, version 1.3.13 or greater (**only if** intending to use nginx to proxy requests to a NodeBB)

86
app.js
View File

@@ -23,13 +23,12 @@
var nconf = require('nconf');
nconf.argv().env('__');
var url = require('url'),
async = require('async'),
winston = require('winston'),
colors = require('colors'),
path = require('path'),
pkg = require('./package.json'),
file = require('./src/file');
var url = require('url');
var async = require('async');
var winston = require('winston');
var path = require('path');
var pkg = require('./package.json');
var file = require('./src/file');
global.env = process.env.NODE_ENV || 'production';
@@ -38,11 +37,11 @@ winston.add(winston.transports.Console, {
colorize: true,
timestamp: function () {
var date = new Date();
return (global.env === 'production') ? date.toJSON() : date.getDate() + '/' + (date.getMonth() + 1) + ' ' + date.toTimeString().substr(0,5) + ' [' + global.process.pid + ']';
return (!!nconf.get('json-logging')) ? date.toJSON() : date.getDate() + '/' + (date.getMonth() + 1) + ' ' + date.toTimeString().substr(0,5) + ' [' + global.process.pid + ']';
},
level: nconf.get('log-level') || (global.env === 'production' ? 'info' : 'verbose'),
json: (global.env === 'production'),
stringify: (global.env === 'production')
json: (!!nconf.get('json-logging')),
stringify: (!!nconf.get('json-logging'))
});
@@ -79,11 +78,13 @@ if (nconf.get('setup') || nconf.get('install')) {
activate();
} else if (nconf.get('plugins')) {
listPlugins();
} else if (nconf.get('build')) {
require('./build').build(nconf.get('build'));
} else {
start();
}
function loadConfig() {
function loadConfig(callback) {
winston.verbose('* using configuration stored in: %s', configFile);
nconf.file({
@@ -110,6 +111,10 @@ function loadConfig() {
if (nconf.get('url')) {
nconf.set('url_parsed', url.parse(nconf.get('url')));
}
if (typeof callback === 'function') {
callback();
}
}
@@ -153,25 +158,11 @@ function start() {
return;
}
var meta = require('./src/meta');
var emitter = require('./src/emitter');
switch (message.action) {
case 'reload':
meta.reload();
break;
case 'js-propagate':
meta.js.target = message.data;
emitter.emit('meta:js.compiled');
winston.verbose('[cluster] Client-side javascript and mapping propagated to worker %s', process.pid);
break;
case 'css-propagate':
meta.css.cache = message.cache;
meta.css.acpCache = message.acpCache;
emitter.emit('meta:css.compiled');
winston.verbose('[cluster] Stylesheets propagated to worker %s', process.pid);
break;
case 'templates:compiled':
emitter.emit('templates:compiled');
break;
}
});
@@ -209,7 +200,7 @@ function start() {
require('./src/user').startJobs();
}
webserver.listen();
webserver.listen(next);
}
], function (err) {
if (err) {
@@ -227,17 +218,19 @@ function start() {
winston.warn(' ./nodebb upgrade');
break;
default:
if (err.stacktrace !== false) {
winston.error(err.stack);
} else {
winston.error(err.message);
}
winston.error(err);
break;
}
// Either way, bad stuff happened. Abort start.
process.exit();
}
if (process.send) {
process.send({
action: 'listening'
});
}
});
}
@@ -245,12 +238,20 @@ function setup() {
winston.info('NodeBB Setup Triggered via Command Line');
var install = require('./src/install');
var build = require('./build');
process.stdout.write('\nWelcome to NodeBB!\n');
process.stdout.write('\nThis looks like a new installation, so you\'ll have to answer a few questions about your environment before we can proceed.\n');
process.stdout.write('Press enter to accept the default setting (shown in brackets).\n');
install.setup(function (err, data) {
async.series([
async.apply(install.setup),
async.apply(loadConfig),
async.apply(build.build, true)
], function (err, data) {
// Disregard build step data
data = data[0];
var separator = ' ';
if (process.stdout.columns > 10) {
for(var x = 0,cols = process.stdout.columns - 10; x < cols; x++) {
@@ -282,14 +283,23 @@ function setup() {
}
function upgrade() {
require('./src/database').init(function (err) {
var db = require('./src/database');
var meta = require('./src/meta');
var upgrade = require('./src/upgrade');
var build = require('./build');
async.series([
async.apply(db.init),
async.apply(meta.configs.init),
async.apply(upgrade.upgrade),
async.apply(build.build, true)
], function (err) {
if (err) {
winston.error(err.stack);
process.exit();
process.exit(1);
} else {
process.exit(0);
}
require('./src/meta').configs.init(function () {
require('./src/upgrade').upgrade();
});
});
}

109
build.js Normal file
View File

@@ -0,0 +1,109 @@
'use strict';
var async = require('async');
var winston = require('winston');
var buildStart;
exports.build = function build(targets, callback) {
buildStart = Date.now();
var db = require('./src/database');
var meta = require('./src/meta');
var plugins = require('./src/plugins');
var valid = ['js', 'clientCSS', 'acpCSS', 'tpl'];
targets = (targets === true ? valid : targets.split(',').filter(function (target) {
return valid.indexOf(target) !== -1;
}));
if (!targets) {
winston.error('[build] No valid build targets found. Aborting.');
return process.exit(0);
}
async.series([
async.apply(db.init),
async.apply(meta.themes.setupPaths),
async.apply(plugins.prepareForBuild)
], function (err) {
if (err) {
winston.error('[build] Encountered error preparing for build: ' + err.message);
return process.exit(1);
}
exports.buildTargets(targets, callback);
});
};
exports.buildTargets = function (targets, callback) {
var meta = require('./src/meta');
buildStart = buildStart || Date.now();
var step = function (startTime, target, next) {
winston.info('[build] ' + target + ' => Completed in ' + ((Date.now() - startTime) / 1000) + 's');
next();
};
async.parallel([
function (next) {
if (targets.indexOf('js') !== -1) {
winston.info('[build] Building javascript');
var startTime = Date.now();
async.series([
async.apply(meta.js.minify, 'nodebb.min.js'),
async.apply(meta.js.minify, 'acp.min.js')
], step.bind(this, startTime, 'js', next));
} else {
setImmediate(next);
}
},
function (next) {
async.eachSeries(targets, function (target, next) {
var startTime;
switch(target) {
case 'js':
setImmediate(next);
break;
case 'clientCSS':
winston.info('[build] Building client-side CSS');
startTime = Date.now();
meta.css.minify('stylesheet.css', step.bind(this, startTime, target, next));
break;
case 'acpCSS':
winston.info('[build] Building admin control panel CSS');
startTime = Date.now();
meta.css.minify('admin.css', step.bind(this, startTime, target, next));
break;
case 'tpl':
winston.info('[build] Building templates');
startTime = Date.now();
meta.templates.compile(step.bind(this, startTime, target, next));
break;
default:
winston.warn('[build] Unknown build target: \'' + target + '\'');
setImmediate(next);
break;
}
}, next);
}
], function (err) {
if (err) {
winston.error('[build] Encountered error during build step: ' + err.message);
return process.exit(1);
}
var time = (Date.now() - buildStart) / 1000;
winston.info('[build] Asset compilation successful. Completed in ' + time + 's.');
if (typeof callback === 'function') {
callback();
} else {
process.exit(0);
}
});
};

View File

@@ -124,11 +124,6 @@ function launch(req, res) {
}
function compileLess(callback) {
if ((nconf.get('from-file') || '').indexOf('less') !== -1) {
winston.info('LESS compilation skipped');
return callback(false);
}
fs.readFile(path.join(__dirname, '../public/less/install.less'), function (err, style) {
if (err) {
return winston.error('Unable to read LESS install file: ', err);
@@ -145,11 +140,6 @@ function compileLess(callback) {
}
function compileJS(callback) {
if ((nconf.get('from-file') || '').indexOf('js') !== -1) {
winston.info('Client-side JS compilation skipped');
return callback(false);
}
var scriptPath = path.join(__dirname, '..');
var result = uglify.minify(scripts.map(function (script) {
return path.join(scriptPath, script);

View File

@@ -22,15 +22,7 @@ var pidFilePath = __dirname + '/pidfile',
workers = [],
Loader = {
timesStarted: 0,
js: {
target: {}
},
css: {
cache: undefined,
acpCache: undefined
},
templatesCompiled: false
timesStarted: 0
};
Loader.init = function (callback) {
@@ -86,30 +78,6 @@ Loader.addWorkerEvents = function (worker) {
worker.on('message', function (message) {
if (message && typeof message === 'object' && message.action) {
switch (message.action) {
case 'ready':
if (Loader.js.target['nodebb.min.js'] && Loader.js.target['acp.min.js'] && !worker.isPrimary) {
worker.send({
action: 'js-propagate',
data: Loader.js.target
});
}
if (Loader.css.cache && !worker.isPrimary) {
worker.send({
action: 'css-propagate',
cache: Loader.css.cache,
acpCache: Loader.css.acpCache
});
}
if (Loader.templatesCompiled && !worker.isPrimary) {
worker.send({
action: 'templates:compiled'
});
}
break;
case 'restart':
console.log('[cluster] Restarting...');
Loader.restart();
@@ -118,31 +86,6 @@ Loader.addWorkerEvents = function (worker) {
console.log('[cluster] Reloading...');
Loader.reload();
break;
case 'js-propagate':
Loader.js.target = message.data;
Loader.notifyWorkers({
action: 'js-propagate',
data: message.data
}, worker.pid);
break;
case 'css-propagate':
Loader.css.cache = message.cache;
Loader.css.acpCache = message.acpCache;
Loader.notifyWorkers({
action: 'css-propagate',
cache: message.cache,
acpCache: message.acpCache
}, worker.pid);
break;
case 'templates:compiled':
Loader.templatesCompiled = true;
Loader.notifyWorkers({
action: 'templates:compiled',
}, worker.pid);
break;
}
}
});
@@ -163,6 +106,7 @@ Loader.start = function (callback) {
function forkWorker(index, isPrimary) {
var ports = getPorts();
var args = [];
if(!ports[index]) {
return console.log('[cluster] invalid port for worker : ' + index + ' ports: ' + ports.length);
@@ -172,7 +116,7 @@ function forkWorker(index, isPrimary) {
process.env.isCluster = ports.length > 1 ? true : false;
process.env.port = ports[index];
var worker = fork('app.js', [], {
var worker = fork('app.js', args, {
silent: silent,
env: process.env
});

10
nodebb
View File

@@ -335,6 +335,13 @@ switch(process.argv[2]) {
});
break;
case 'build':
var args = process.argv.slice(0);
args[2] = '--' + args[2];
fork(args);
break;
case 'setup':
cproc.fork('app.js', ['--setup'], {
cwd: __dirname,
@@ -401,13 +408,14 @@ switch(process.argv[2]) {
default:
process.stdout.write('\nWelcome to NodeBB\n\n'.bold);
process.stdout.write('Usage: ./nodebb {start|stop|reload|restart|log|setup|reset|upgrade|dev}\n\n');
process.stdout.write('Usage: ./nodebb {start|slog|stop|reload|restart|log|build|setup|reset|upgrade|dev}\n\n');
process.stdout.write('\t' + 'start'.yellow + '\t\tStart the NodeBB server\n');
process.stdout.write('\t' + 'slog'.yellow + '\t\tStarts the NodeBB server and displays the live output log\n');
process.stdout.write('\t' + 'stop'.yellow + '\t\tStops the NodeBB server\n');
process.stdout.write('\t' + 'reload'.yellow + '\t\tRestarts NodeBB\n');
process.stdout.write('\t' + 'restart'.yellow + '\t\tRestarts NodeBB\n');
process.stdout.write('\t' + 'log'.yellow + '\t\tOpens the logging interface (useful for debugging)\n');
process.stdout.write('\t' + 'build'.yellow + '\t\tCompiles javascript, css stylesheets, and templates\n');
process.stdout.write('\t' + 'setup'.yellow + '\t\tRuns the NodeBB setup script\n');
process.stdout.write('\t' + 'reset'.yellow + '\t\tDisables all plugins, restores the default theme.\n');
process.stdout.write('\t' + 'activate'.yellow + '\tActivates a plugin for the next startup of NodeBB.\n');

View File

@@ -52,17 +52,17 @@
"morgan": "^1.3.2",
"mousetrap": "^1.5.3",
"nconf": "~0.8.2",
"nodebb-plugin-composer-default": "4.2.13",
"nodebb-plugin-dbsearch": "1.0.3",
"nodebb-plugin-composer-default": "4.3.0",
"nodebb-plugin-dbsearch": "1.0.4",
"nodebb-plugin-emoji-extended": "1.1.1",
"nodebb-plugin-emoji-one": "1.1.5",
"nodebb-plugin-markdown": "6.0.2",
"nodebb-plugin-markdown": "7.0.1",
"nodebb-plugin-mentions": "1.1.3",
"nodebb-plugin-soundpack-default": "0.1.6",
"nodebb-plugin-spam-be-gone": "0.4.10",
"nodebb-rewards-essentials": "0.0.9",
"nodebb-theme-lavender": "3.0.15",
"nodebb-theme-persona": "4.1.86",
"nodebb-theme-persona": "4.1.88",
"nodebb-theme-vanilla": "5.1.56",
"nodebb-widget-essentials": "2.0.13",
"nodemailer": "2.6.4",
@@ -81,9 +81,9 @@
"semver": "^5.1.0",
"serve-favicon": "^2.1.5",
"sitemap": "^1.4.0",
"socket.io": "^1.4.8",
"socket.io-client": "^1.4.0",
"socket.io-redis": "1.1.1",
"socket.io": "1.7.1",
"socket.io-client": "1.7.1",
"socket.io-redis": "2.0.0",
"socketio-wildcard": "~0.3.0",
"string": "^3.0.0",
"templates.js": "0.3.4",

View File

@@ -31,7 +31,8 @@
"signature": "توقيع",
"birthday": "عيد ميلاد",
"chat": "محادثة",
"chat_with": "Chat with %1",
"chat_with": "Continue chat with %1",
"new_chat_with": "Start new chat with %1",
"follow": "تابع",
"unfollow": "إلغاء المتابعة",
"more": "المزيد",

View File

@@ -31,7 +31,8 @@
"signature": "Подпис",
"birthday": "Рождена дата",
"chat": "Разговор",
"chat_with": "Разговор с %1",
"chat_with": "Продължаване на разговора с %1",
"new_chat_with": "Започване на нов разговор с %1",
"follow": "Следване",
"unfollow": "Спиране на следването",
"more": "Още",

View File

@@ -31,7 +31,8 @@
"signature": "স্বাক্ষর",
"birthday": "জন্মদিন",
"chat": "বার্তালাপ",
"chat_with": "চ্যাট উইথ %1",
"chat_with": "Continue chat with %1",
"new_chat_with": "Start new chat with %1",
"follow": "অনুসরন করুন",
"unfollow": "অনুসরন করা থেকে বিরত থাকুন",
"more": "আরো...",

View File

@@ -31,7 +31,8 @@
"signature": "Podpis",
"birthday": "Datum narození",
"chat": "Chat",
"chat_with": "Chatovat s %1",
"chat_with": "Continue chat with %1",
"new_chat_with": "Start new chat with %1",
"follow": "Sledovat",
"unfollow": "Nesledovat",
"more": "Více",

View File

@@ -31,7 +31,8 @@
"signature": "Signatur",
"birthday": "Fødselsdag",
"chat": "Chat",
"chat_with": "Chat med %1",
"chat_with": "Continue chat with %1",
"new_chat_with": "Start new chat with %1",
"follow": "Følg",
"unfollow": "Følg ikke",
"more": "Mere",

View File

@@ -31,7 +31,8 @@
"signature": "Signatur",
"birthday": "Geburtstag",
"chat": "Chat",
"chat_with": "Chat mit %1",
"chat_with": "Continue chat with %1",
"new_chat_with": "Start new chat with %1",
"follow": "Folgen",
"unfollow": "Nicht mehr folgen",
"more": "Mehr",

View File

@@ -31,7 +31,8 @@
"signature": "Υπογραφή",
"birthday": "Γενέθλια",
"chat": "Συνομιλία",
"chat_with": "Chat with %1",
"chat_with": "Continue chat with %1",
"new_chat_with": "Start new chat with %1",
"follow": "Ακολούθησε",
"unfollow": "Μην Ακολουθείς",
"more": "More",

View File

@@ -1,5 +1,5 @@
{
"name": "English (United Kingdom/Canada)",
"code": "en_GB",
"code": "en-GB",
"dir": "ltr"
}

View File

@@ -1,5 +1,5 @@
{
"name": "English (United States)",
"code": "en_US",
"code": "en-US",
"dir": "ltr"
}

View File

@@ -31,7 +31,8 @@
"signature": "Signature",
"birthday": "Birthday",
"chat": "Chat",
"chat_with": "Chat with %1",
"chat_with": "Continue chat with %1",
"new_chat_with": "Start new chat with %1",
"follow": "Follow",
"unfollow": "Unfollow",
"more": "More",

View File

@@ -1,5 +1,5 @@
{
"name": "English (Pirate)",
"code": "en@pirate",
"code": "en-x-pirate",
"dir": "ltr"
}

View File

@@ -31,7 +31,8 @@
"signature": "Signature",
"birthday": "Birthday",
"chat": "Chat",
"chat_with": "Chat with %1",
"chat_with": "Continue chat with %1",
"new_chat_with": "Start new chat with %1",
"follow": "Follow",
"unfollow": "Unfollow",
"more": "More",

View File

@@ -31,7 +31,8 @@
"signature": "Firma",
"birthday": "Cumpleaños",
"chat": "Chat",
"chat_with": "Chatear con %1",
"chat_with": "Continuar chat con %1",
"new_chat_with": "Empezar chat con %1",
"follow": "Seguir",
"unfollow": "Dejar de seguir",
"more": "Más",

View File

@@ -31,7 +31,8 @@
"signature": "Allkiri",
"birthday": "Sünnipäev",
"chat": "Vestlus",
"chat_with": "Vestle kasutajaga %1",
"chat_with": "Continue chat with %1",
"new_chat_with": "Start new chat with %1",
"follow": "Jälgi",
"unfollow": "Ära jälgi enam",
"more": "Rohkem",

View File

@@ -1,5 +1,5 @@
{
"name": "فارسی",
"code": "fa_IR",
"code": "fa-IR",
"dir": "rtl"
}

Some files were not shown because too many files have changed in this diff Show More