Compare commits

..

476 Commits

Author SHA1 Message Date
Misty (Bot)
a2468b84b4 chore: incrementing version number - v1.15.1
(cherry picked from commit 2790a3a3fe)
Signed-off-by: Misty (Bot) <deploy@nodebb.org>
2020-11-11 22:51:06 +00:00
Misty (Bot)
efb7d688f0 chore: update changelog for v1.15.1 2020-11-11 22:51:06 +00:00
Barış Soner Uşaklı
dc6e27730a Merge branch 'master' of https://github.com/NodeBB/NodeBB 2020-11-11 12:48:32 -05:00
Barış Soner Uşaklı
567c5f2056 fix: #8869, dont escape category title,description twice 2020-11-11 12:48:22 -05:00
Renovate Bot
1460a7a84d fix(deps): update dependency nodebb-plugin-mentions to v2.13.4 2020-11-11 15:52:59 +00:00
Julian Lam
769aba0aed fix: refresh flags list on bulk action success 2020-11-11 10:15:49 -05:00
Renovate Bot
72d1b3cdca fix(deps): update dependency diff to v5 2020-11-10 14:43:20 -05:00
Julian Lam
ee4d90f68f fix: test breakage from f300c933a5 2020-11-10 14:39:57 -05:00
Julian Lam
f300c933a5 refactor: move session revocation route to write api 2020-11-10 14:27:38 -05:00
renovate[bot]
e250c3f1fb fix(deps): update dependency nodebb-theme-persona to v10.2.67 (#8847)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-11-10 13:18:52 -05:00
renovate[bot]
ba7b23ac48 fix(deps): update dependency json2csv to v5.0.4 (#8865)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-11-10 13:15:10 -05:00
renovate[bot]
2946bb1679 fix(deps): update dependency postcss to v8.1.7 (#8866)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-11-10 13:14:25 -05:00
Barış Soner Uşaklı
9c5c32d4a5 feat: #8864, add action:events.log 2020-11-10 11:29:15 -05:00
renovate[bot]
20f4fe085f fix(deps): update dependency nodebb-theme-slick to v1.2.40 (#8863)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-11-10 11:10:11 -05:00
renovate[bot]
c18f449190 fix(deps): update dependency nodebb-plugin-mentions to v2.13.3 (#8862)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-11-10 10:50:21 -05:00
Misty (Bot)
e033da8a04 chore: incrementing version number - v1.15.1-beta.0 2020-11-10 14:16:12 +00:00
Barış Soner Uşaklı
62c0454cfe feat: show db info side by side 2020-11-09 13:27:40 -05:00
Misty (Bot)
0b57ec19ce Latest translations and fallbacks 2020-11-09 09:08:52 +00:00
Barış Soner Uşaklı
9f7902efdf fix: remove some unnecessary jquery wrappers 2020-11-08 20:26:43 -05:00
Barış Soner Uşaklı
978f1ee04f fix: send back jquery object to keep backwards compat 2020-11-08 20:02:27 -05:00
Barış Soner Uşaklı
a0164b1c38 fix: use header/footer cache in prod 2020-11-08 19:46:36 -05:00
Barış Soner Uşaklı
05a92885f2 fix: add missing maxAge to cache 2020-11-08 08:35:40 -05:00
Peter Jaszkowiak
e128264b66 refactor: change Benchpress.parse to .render (#8856)
It has been deprecated with no warning message for a while
Changing these over before enabling the warning message to reduce spam
2020-11-08 08:17:49 -05:00
Renovate Bot
14ba638345 fix(deps): update dependency benchpressjs to v2.1.0 2020-11-08 10:11:34 +00:00
Misty (Bot)
e6b9e8ddee Latest translations and fallbacks 2020-11-08 09:05:59 +00:00
Renovate Bot
381a32abe6 fix(deps): update dependency benchpressjs to v2.0.9 2020-11-08 05:30:12 +00:00
Barış Soner Uşaklı
3f5f38dd89 fix: clear header-cache after each suite 2020-11-07 22:57:03 -05:00
Barış Soner Uşaklı
255cf43ea9 fix: show msg on fail 2020-11-07 22:40:34 -05:00
Barış Soner Uşaklı
fe63c6aef3 fix: spec 2020-11-07 22:21:04 -05:00
Barış Soner Uşaklı
2e44639210 fix: guest header/footer cache
allow clearing individual caches
2020-11-07 22:06:25 -05:00
Tobias Dossinger
1ce983ccb9 add public/language/de/admin/menu.json & public/language/de/admin/settings/api.json (#8842)
Co-authored-by: Tobias Dossinger <tobiasdossinger@Jans-MBP-3.localdomain>
Co-authored-by: Julian Lam <julian@nodebb.org>
2020-11-07 17:25:08 -05:00
Julian Lam
8368c25b1d chore: fallback l10n for admin-settings-api 2020-11-07 17:05:03 -05:00
Julian Lam
d32e4e0213 feat: add language keys for admin-settings-api 2020-11-07 17:05:03 -05:00
Misty (Bot)
e81e88f3e9 Latest translations and fallbacks 2020-11-07 09:06:12 +00:00
Barış Soner Uşaklı
f1f9b225b0 feat: #8824, cache refactor (#8851)
* feat: #8824, cache refactor

ability to disable caches
ability to download contents of cache
refactor cache modules to remove duplicated code

* fix: remove duplicate hit/miss tracking

check cacheEnabled in getUncachedKeys
2020-11-06 23:13:12 -05:00
Renovate Bot
bcbc085497 chore(deps): update dependency eslint to v7.13.0 2020-11-07 03:40:16 +00:00
Renovate Bot
d227fe9fb6 chore(deps): update dependency eslint-config-airbnb-base to v14.2.1 2020-11-07 00:19:18 +00:00
Barış Soner Uşaklı
6255874e32 feat: move mkdirp to beforeBuild so it doesnt get called twice 2020-11-06 13:44:29 -05:00
Barış Soner Uşaklı
74951f5967 fix: #8846, possible fix 2020-11-06 12:46:27 -05:00
Barış Soner Uşaklı
0b30efba31 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2020-11-06 12:30:15 -05:00
Barış Soner Uşaklı
16d03975a0 fix: winston error message 2020-11-06 12:24:50 -05:00
Julian Lam
d263192271 feat: group exists API call in write api 2020-11-06 12:18:42 -05:00
Julian Lam
1446cec77f feat: user exist route in write api 2020-11-06 11:55:04 -05:00
Julian Lam
6b196a207f fix: permanent redirect on user api redirect shorthand 2020-11-06 11:54:46 -05:00
Julian Lam
f2bb42c076 fix: user exist route needs no authentication 2020-11-06 11:53:56 -05:00
Julian Lam
60e1e99b4f feat: new shorthand route /api/v3/users/bySlug/:userslug
closes #8844
2020-11-06 11:37:21 -05:00
renovate[bot]
7e273e7710 fix(deps): update dependency mongodb to v3.6.3 (#8841)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-11-06 10:25:49 -05:00
Renovate Bot
90bcfa6d16 chore(deps): update commitlint monorepo to v11 2020-11-06 09:21:48 -05:00
Julian Lam
512f6de6de feat: allow passwords with length > 73 characters (#8818)
* feat: allow passwords longer than 73 characters

Context: A bcrypt/blowfish limitation means that password length is capped at 72 characters. We can get around this without compromising on security
by hashing all incoming passwords with SHA512, and then sending that to bcrypt.

https://dropbox.tech/security/how-dropbox-securely-stores-your-passwords

* feat: add additional test for passwords > 73 chars

* fix: remove 'password-too-long' error message and all invocations

* test: added test to show that a super long password won't bring down NodeBB

* fix: remove debug log

* Revert "fix: remove 'password-too-long' error message and all invocations"

This reverts commit 1e312bf7ef.

* fix: added back password length checks, but at 512 chars

As processing a large string still uses a lot of memory
2020-11-06 08:40:00 -05:00
Misty (Bot)
113d3324fb Latest translations and fallbacks 2020-11-06 09:08:06 +00:00
Barış Soner Uşaklı
c61dee4b62 fix: #8840, don't crash if /compose route is called with no query params 2020-11-05 21:01:19 -05:00
Barış Soner Uşaklı
9e3eb5d41a feat: #8821, allow guest topic views 2020-11-05 20:52:43 -05:00
Julian Lam
f68bce86a9 fix: XSS in event:banned messaging modal 2020-11-05 19:18:17 -05:00
renovate[bot]
00f90cd98c fix(deps): update dependency nodebb-theme-persona to v10.2.66 (#8839)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-11-05 16:50:41 -05:00
Barış Soner Uşaklı
78ee83324c fix: #8838, fix chat dropdown timestamps
use shorthand like notification dropdown
2020-11-05 16:46:17 -05:00
Barış Soner Uşaklı
76cd5b0fc1 fix: #8836, truncate fullname 2020-11-05 16:25:55 -05:00
renovate[bot]
064c99cd9f fix(deps): update dependency nodebb-plugin-mentions to v2.13.2 (#8835)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-11-05 14:35:40 -05:00
Renovate Bot
e0cf9740d1 fix(deps): update dependency postcss to v8.1.6 2020-11-05 19:25:03 +00:00
Peter Jaszkowiak
de5a21f19b fix(#8828): web install templates now compiled (#8832) 2020-11-05 12:05:31 -05:00
renovate[bot]
40eb658bc1 fix(deps): update dependency @nodebb/socket.io-adapter-mongo to v3.1.1 (#8831)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-11-05 11:58:40 -05:00
psychobunny
eec630f1ef fix(acp): max-height for plugin menu list 2020-11-05 11:44:23 -05:00
renovate[bot]
7b8a5567c7 fix(deps): update dependency @nodebb/mubsub to v1.7.1 (#8830)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-11-05 11:40:54 -05:00
Renovate Bot
9f5ef9d0cb fix(deps): update dependency postcss to v8.1.5 2020-11-05 16:31:13 +00:00
Julian Lam
891a1ea2af fix: #8827, do not require admin:users privilege to ban users 2020-11-05 10:22:07 -05:00
Julian Lam
540a32cfdd chore: changing log to remove pre-release changelogs from changelog
... changelog
2020-11-04 15:56:45 -05:00
Misty (Bot)
a30aa5629c chore: incrementing version number - v1.15.0
(cherry picked from commit 71cdbbce0d1118c9631e77d1adeb5af519a2c3fa)
Signed-off-by: Misty (Bot) <deploy@nodebb.org>
2020-11-04 20:50:38 +00:00
Misty (Bot)
155f74e45e chore: update changelog for v1.15.0 2020-11-04 20:50:38 +00:00
Julian Lam
1afd215050 feat: add back error handling for a number of api calls 2020-11-04 14:11:54 -05:00
Renovate Bot
b44c7e9658 fix(deps): update dependency nodebb-plugin-composer-default to v6.4.6 2020-11-04 13:48:24 -05:00
Renovate Bot
f06d4878c0 fix(deps): update dependency nodebb-plugin-spam-be-gone to v0.7.3 2020-11-04 18:34:00 +00:00
Barış Soner Uşaklı
4b63f9937c fix: check is banned in buildHeader
remove unused banReason
remove generateHeader function
2020-11-04 13:23:10 -05:00
Misty (Bot)
69f4d5ac7d chore: update changelog for v1.15.0-rc.5 2020-11-04 16:22:37 +00:00
Misty (Bot)
4bd2788ba3 chore: incrementing version number - v1.15.0-rc.5 2020-11-04 16:22:37 +00:00
Barış Soner Uşaklı
a338f52780 feat: #8823, remove hardcoded write concern 2020-11-04 11:10:23 -05:00
Barış Soner Uşaklı
518d4fa170 fix: undefined call 2020-11-04 08:57:19 -05:00
Renovate Bot
0d80190f79 fix(deps): update dependency nodebb-theme-vanilla to v11.3.0 2020-11-04 13:53:29 +00:00
Barış Soner Uşaklı
08ff4041aa fix: missing await 2020-11-03 17:13:05 -05:00
Barış Soner Uşaklı
5a2b14b751 fix: client side crash when creating groups 2020-11-03 16:54:44 -05:00
psychobunny
d40779a4ba feat(acp): autocomplete user search for welcome notifications 2020-11-03 14:10:39 -05:00
Barış Soner Uşaklı
f6623622be Merge branch 'master' of https://github.com/NodeBB/NodeBB 2020-11-03 11:17:32 -05:00
Barış Soner Uşaklı
715775a707 feat: #8817, add login clientside hooks
same as logout
2020-11-03 11:17:25 -05:00
Julian Lam
c0f699e655 fix: disallow registration attempts with password length > 4096
This is a stopgap measure for v1.15.0
2020-11-03 09:54:04 -05:00
Renovate Bot
35e725d17c chore(deps): update dependency mocha to v8.2.1 2020-11-03 14:37:17 +00:00
Julian Lam
e66c1f4017 Revert "fix(deps): update dependency textcomplete to ^0.18.0"
This reverts commit 8fe954997c.
2020-11-03 08:35:13 -05:00
Renovate Bot
df5d66e5fe fix(deps): update dependency textcomplete to ^0.18.0 2020-11-03 13:32:15 +00:00
Renovate Bot
2fa78e4384 chore(deps): update dependency lint-staged to v10.5.1 2020-11-03 12:52:18 +00:00
Barış Soner Uşaklı
b6d8687837 chore: add info log into tests 2020-11-02 20:34:12 -05:00
Barış Soner Uşaklı
4818ec377e fix: missing await 2020-11-02 15:13:22 -05:00
Julian Lam
1c8b8ce14a chore: update renovate config to automatically merge non-major version bumps #yolo 2020-11-02 14:45:25 -05:00
Misty (Bot)
1688294165 chore: update changelog for v1.15.0-rc.4 2020-11-02 19:42:54 +00:00
Misty (Bot)
57b4932074 chore: incrementing version number - v1.15.0-rc.4 2020-11-02 19:42:53 +00:00
Peter Jaszkowiak
eddf4a4f33 feat: use github actions for ci (#8811)
- test using minimum supported db versions
- ESLint will make review comments on PRs
- formatted configs
2020-11-02 13:12:29 -05:00
Peter Jaszkowiak
a3fa313298 Github actions lint demo (#8812)
* feat: use github actions for ci

- test using minimum supported db versions
- ESLint will make review comments on PRs
- formatted configs

* mess up eslint

* fix: lint maybe

Co-authored-by: Barış Soner Uşaklı <baris@nodebb.org>
2020-11-02 12:59:16 -05:00
Barış Soner Uşaklı
6e85920cb6 feat: allow mods/admins to see deleted posts on user profile 2020-11-02 12:03:21 -05:00
Misty (Bot)
841cbcc3e3 Latest translations and fallbacks 2020-11-01 09:05:53 +00:00
Julian Lam
87bff6cd65 fix: broken test 2020-10-30 17:17:31 -04:00
Renovate Bot
0c7d58605e fix(deps): update dependency nodebb-theme-persona to v10.2.65 2020-10-30 16:10:45 -04:00
Julian Lam
a53d49a2b0 fix: updated commitlint config to allow longer subjects, because nobody anywhere uses an email client that limits subject lines to 72 characters 2020-10-30 14:12:07 -04:00
Julian Lam
dda5d42610 fix: restore old behaviour of empty json w/ 401 code in admin middleware 2020-10-30 14:07:47 -04:00
Julian Lam
15e0731dd9 fix: deprecate middleware.isAdmin
Also, handle admin logout timer in middleware.admin.checkPrivileges
2020-10-30 12:30:58 -04:00
Julian Lam
4439864ce0 fix: post editing not taking plugin hook results into account 2020-10-30 10:05:26 -04:00
Misty (Bot)
2738041b38 chore: update changelog for v1.15.0-rc.3 2020-10-30 03:46:16 +00:00
Misty (Bot)
6de7760a1d chore: incrementing version number - v1.15.0-rc.3 2020-10-30 03:46:16 +00:00
Barış Soner Uşaklı
a02ae6f5df refactor: simpler check in user.blocks.filter 2020-10-29 22:33:28 -04:00
Barış Soner Uşaklı
27016d221c feat: rearrange buttons on manage/users 2020-10-29 13:39:08 -04:00
Julian Lam
57ed6be78b fix: #8805 define our own name for write API v3 2020-10-29 12:51:36 -04:00
Julian Lam
a08fb8e53b fix: removed superfluous assignment 2020-10-29 12:33:12 -04:00
Julian Lam
0b6ef61e40 fix: createNewPosts to build tpl with ajaxify.data
If the post template contains references to items outside of the scope of the post, then when the post is loaded via IS, the expected values are empty.

This was due to createNewPosts calling app.parseAndTranslate with a subset of the page payload. This works fine in Persona (and most other themes)
because they do not refer to properties outside of the post object, but it may be helpful to include the rest of the ajaxify data as well.
2020-10-29 12:29:29 -04:00
Julian Lam
266d7587b2 refactor: remove usage of middlewares
Specifically, middleware.isAdmin|exposePrivilegeSet|exposePrivileges
2020-10-29 07:56:28 -04:00
Julian Lam
bff53de03f fix: handle ACP category enable/disable states after call success 2020-10-29 07:16:41 -04:00
Julian Lam
a6a52430ce fix: remove setCategorySort and setTopicSort 2020-10-28 17:21:54 -04:00
Julian Lam
aa8faf58a0 refactor: remove /users/{uid}/settings/{setting} route
@baris Also, I am now allowing the following properties to be saved in User.saveSettings:
- categoryTopicSort
- topicPostSort
- setCategorySort
- setTopicSort
2020-10-28 17:21:54 -04:00
Barış Soner Uşaklı
e0b6781776 chore: bump persona 2020-10-28 16:52:46 -04:00
Barış Soner Uşaklı
9082062e90 fix: sort setting not using correct field name 2020-10-28 16:05:40 -04:00
renovate[bot]
c4431294a5 fix(deps): update dependency jsesc to v3.0.2 (#8802)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-28 12:30:48 -04:00
Julian Lam
2d29e603bd fix: update readme to include psql 2020-10-28 07:51:17 -04:00
Renovate Bot
7d0d0005ff fix(deps): update dependency nodebb-plugin-composer-default to v6.4.5 2020-10-28 07:37:33 -04:00
Misty (Bot)
2baccd3ce2 Latest translations and fallbacks 2020-10-28 09:10:35 +00:00
renovate[bot]
224502d8c3 chore(deps): update dependency eslint to v7.12.1 (#8799)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-28 00:21:01 -04:00
renovate[bot]
1f2eca6a52 chore(deps): update dependency lint-staged to v10.5.0 (#8797)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-28 00:20:46 -04:00
Barış Soner Uşaklı
6ac73ccb7e feat: #8801, disable express compression by default 2020-10-27 21:40:21 -04:00
Julian Lam
cc1c722092 fix: breaking test from 0db0231cff
Also lowered export timeout to 5s
2020-10-27 20:37:23 -04:00
Julian Lam
04185d94c1 fix: indentation 2020-10-27 20:37:23 -04:00
Julian Lam
8e7914ff72 fix: add back derpy 20 second sleep 2020-10-27 20:37:23 -04:00
Julian Lam
14e5c24ec5 fix(openapi): final fixes to schemas 2020-10-27 20:37:23 -04:00
Julian Lam
b2e9e3e048 fix(writeapi): more tweaks to schema files 2020-10-27 20:37:23 -04:00
Julian Lam
9f9e3c1582 fix(writeapi): fix components, + tag object schema 2020-10-27 20:37:23 -04:00
Julian Lam
3ebb3a3479 fix: missing method in test error output 2020-10-27 20:37:23 -04:00
Julian Lam
3c98cd3d95 fix: topic object in post editing data return 2020-10-27 20:37:23 -04:00
Julian Lam
a4f3270fc5 fix(writeapi): missing files for tests 2020-10-27 20:37:23 -04:00
Julian Lam
1392d064a1 fix(writeapi): normalizing data 2020-10-27 20:37:23 -04:00
Julian Lam
b092f65d95 fix(writeapi): tests 2020-10-27 20:37:23 -04:00
Julian Lam
ec03af7a38 feat: allow passing subset of user settings on update route 2020-10-27 20:37:23 -04:00
Julian Lam
618e098305 fix: bug where token generation route would fail on null case 2020-10-27 20:37:23 -04:00
Julian Lam
843aff582d refactor: api test suite to accept methods other than GET 2020-10-27 20:37:23 -04:00
Julian Lam
93f65f89e7 fix(writeapi): added examples to all parameter objects in schema 2020-10-27 20:37:23 -04:00
Julian Lam
b156b8b573 feat: wip, write api tests framework
re-using read api tests if possible
2020-10-27 20:37:23 -04:00
Renovate Bot
b3ca7de016 fix(deps): update dependency nodebb-theme-persona to v10.2.63 2020-10-27 17:27:53 -04:00
Barış Soner Uşaklı
a512d99472 refactor: remove unnecessary wrapper 2020-10-27 14:51:49 -04:00
Barış Soner Uşaklı
f0131e72ae Merge branch 'master' of https://github.com/NodeBB/NodeBB 2020-10-27 11:02:16 -04:00
Barış Soner Uşaklı
2e9f27d8ff fix: typo 2020-10-27 10:59:08 -04:00
Misty (Bot)
c3a7ab54dc chore: update changelog for v1.15.0-rc.2 2020-10-27 13:41:06 +00:00
Misty (Bot)
7c084134c7 chore: incrementing version number - v1.15.0-rc.2 2020-10-27 13:41:05 +00:00
Misty (Bot)
5605a0d1b7 Latest translations and fallbacks 2020-10-27 09:08:02 +00:00
renovate[bot]
12c590ad56 fix(deps): update dependency nodebb-theme-persona to v10.2.62 (#8798)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-26 22:00:31 -04:00
Barış Soner Uşaklı
93bdfe2f10 perf: reorder async calls 2020-10-26 21:09:51 -04:00
Barış Soner Uşaklı
88a07e69b5 feat: add filter:category.getFields 2020-10-26 15:14:54 -04:00
renovate[bot]
3108f628b6 chore(deps): update dependency eslint to v7.12.0 (#8791)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-26 12:50:26 -04:00
renovate[bot]
8353857b3b fix(deps): update dependency nodebb-plugin-mentions to v2.13.1 (#8790)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-26 12:49:55 -04:00
Misty (Bot)
4f49b3da8c chore: update changelog for v1.15.0-rc.1 2020-10-26 15:45:21 +00:00
Misty (Bot)
943424b539 chore: incrementing version number - v1.15.0-rc.1 2020-10-26 15:45:21 +00:00
Barış Soner Uşaklı
a05905f196 performance improvements (#8795)
* perf: nconf/winston/render

cache nconf.get calls
modify middleware.pageView to call next earlier
don't call winston.verbose on every hook see https://github.com/winstonjs/winston/issues/1669
translate header/footer separately and cache results for guests

* fix: copy paste fail

* refactor: style and fire hook only log in dev mode

* fix: cache key, header changes based on template

* perf: change replace

* fix: add missing await

* perf: category

* perf: lodash clone

* perf: remove escapeRegexChars
2020-10-26 10:43:18 -04:00
Misty (Bot)
822c13f199 Latest translations and fallbacks 2020-10-26 09:08:20 +00:00
Misty (Bot)
89a1f481e0 Latest translations and fallbacks 2020-10-25 09:06:02 +00:00
renovate[bot]
9de8497dad fix(deps): update dependency nodebb-theme-persona to v10.2.61 (#8794)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-24 23:32:34 -04:00
Barış Soner Uşaklı
0db0231cff feat: move postercount to topic hash 2020-10-24 21:14:52 -04:00
Barış Soner Uşaklı
203db47b30 fix: return early for guests/spiders 2020-10-24 01:49:22 -04:00
Barış Soner Uşaklı
156e1396f2 fix: #8789,cache meta.settings 2020-10-23 14:20:47 -04:00
Barış Soner Uşaklı
7a3183520f fix: spec 2020-10-22 19:51:25 -04:00
Barış Soner Uşaklı
a7b6d0dfe5 feat: add free and total mem usage to info 2020-10-22 17:46:12 -04:00
Julian Lam
63e07c9433 fix: tests 2020-10-22 14:43:29 -04:00
Julian Lam
c26f2b6599 feat(writeapi): user settings API 2020-10-22 14:07:50 -04:00
Misty (Bot)
aab5f018b9 chore: update changelog for v1.15.0-rc.0 2020-10-21 21:19:57 +00:00
Misty (Bot)
8d48455b04 chore: incrementing version number - v1.15.0-rc.0 2020-10-21 21:19:57 +00:00
Barış Soner Uşaklı
db63f5e3f0 fix: #8781 2020-10-21 16:30:14 -04:00
Julian Lam
177a961000 feat: new filter filter:teasers.configureStripTags 2020-10-21 14:04:52 -04:00
Baris Usakli
1a4c0decb7 fix: reset button loading html 2020-10-21 13:05:46 -04:00
Julian Lam
d68ffea80d feat: send 'Vary' header when ACAO header set 2020-10-21 10:34:38 -04:00
Misty (Bot)
c31cab3457 Latest translations and fallbacks 2020-10-21 09:10:48 +00:00
Misty (Bot)
3964872289 chore: update changelog for v1.15.0-beta.30 2020-10-21 01:10:28 +00:00
Misty (Bot)
2dd3c9622f chore: incrementing version number - v1.15.0-beta.30 2020-10-21 01:10:28 +00:00
Barış Soner Uşaklı
e6440c0d21 fix: #8779, fix move all
add new language keys
2020-10-20 20:53:45 -04:00
Barış Soner Uşaklı
1f43e98f8b fix: allow admins adding users to global moderators
add new test
2020-10-20 18:43:45 -04:00
Barış Soner Uşaklı
bbafa1b82a Revert "fix: [breaking] send configured config URL as origin if not custom"
This reverts commit 205a10308e.
2020-10-20 18:38:50 -04:00
Julian Lam
a691be5952 fix: incorrect logic for post history editable bool 2020-10-20 16:09:40 -04:00
Julian Lam
205a10308e fix: [breaking] send configured config URL as origin if not custom
This is a breaking change if your install uses multiple URLs to access. You will need to update the Access-Control-Allow-Origin header in ACP > Advanced > Headers to supply all URLs you use to access your site
2020-10-20 15:25:20 -04:00
Barış Soner Uşaklı
7a019494e8 feat: add filter.topics.getPostReplies 2020-10-20 12:00:56 -04:00
Julian Lam
7a8f704900 fix: #8776 some users unable to restore old versions via history 2020-10-20 10:40:23 -04:00
Misty (Bot)
df1cfc4caf Latest translations and fallbacks 2020-10-20 09:09:22 +00:00
Barış Soner Uşaklı
75024c3580 refactor: remove console.log, extra require 2020-10-20 00:29:44 -04:00
Barış Soner Uşaklı
b26e9b5993 fix: #8595, dont save escaped data when renaming groups 2020-10-20 00:24:34 -04:00
Barış Soner Uşaklı
ea31f50554 refactor: show more lines of stack trace 2020-10-19 22:43:18 -04:00
Barış Soner Uşaklı
3ee4936db6 fix: keep sortBy while searching 2020-10-19 22:16:34 -04:00
Barış Soner Uşaklı
85cfe49d65 fix: autocomplete.user on search page 2020-10-19 21:58:56 -04:00
Barış Soner Uşaklı
cf474ab246 fix: spec 2020-10-19 19:11:50 -04:00
Barış Soner Uşaklı
7bddec93ec fix: sortby 2020-10-19 18:56:39 -04:00
Misty (Bot)
1b50e1a062 Latest translations and fallbacks 2020-10-19 09:10:05 +00:00
Barış Soner Uşaklı
b3619d3d47 fix: #8774 2020-10-18 16:54:42 -04:00
Julian Lam
ff4fcc23b6 Update bundled logos with new branding (#8702)
* feat: updating logo assets, square logos missing still

* fix: squared logo for touch icon and notification fallback

* fix: update link to favicon

* feat: add default touch icon sizes, if one isn't uploaded

Co-authored-by: Barış Soner Uşaklı <barisusakli@gmail.com>
2020-10-18 01:41:04 -04:00
Barış Soner Uşaklı
c107649b40 fix: #8732 2020-10-18 01:33:03 -04:00
Barış Soner Uşaklı
e362c342a3 fix: #8630, sort extra deps 2020-10-17 23:56:42 -04:00
Barış Soner Uşaklı
d9a16855d0 refactor: posts api 2020-10-17 22:59:12 -04:00
Barış Soner Uşaklı
272e73da53 refactor: post restore/delete/purge 2020-10-17 21:24:33 -04:00
renovate[bot]
4bfd008781 chore(deps): update dependency lint-staged to v10.4.2 (#8773)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-17 20:24:02 -04:00
Barış Soner Uşaklı
9738e20207 refactor: merge post.edit
fix: dont fadeout/fadeint if title/post didnt change
2020-10-17 15:07:04 -04:00
renovate[bot]
bb85c059de chore(deps): update dependency eslint to v7.11.0 (#8747)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-17 01:19:22 -04:00
renovate[bot]
08a240fa8e chore(deps): update dependency lint-staged to v10.4.1 (#8771)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-17 01:03:52 -04:00
renovate[bot]
a471b1afb3 chore(deps): update dependency mocha to v8.2.0 (#8772)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-16 23:49:41 -04:00
Barış Soner Uşaklı
2279e37261 refactor: deprecate socket.emit('users.search') use api route 2020-10-16 23:30:22 -04:00
Barış Soner Uşaklı
083c74e059 refactor: api categories 2020-10-16 22:41:38 -04:00
Barış Soner Uşaklı
e78c498e84 fix: missing doTopicAction, fix wrong api params 2020-10-16 21:36:59 -04:00
Barış Soner Uşaklı
bc880ee0ca refactor: remove sockets.reqFromSocket 2020-10-16 21:05:00 -04:00
Barış Soner Uşaklı
8fd3c04480 fix: test 2020-10-16 20:36:24 -04:00
Barış Soner Uşaklı
9d81660e24 Revert "Revert "fix: appropriate 404 handling for write API calls""
This reverts commit 135c2d6c7d.
2020-10-16 20:21:52 -04:00
Barış Soner Uşaklı
135c2d6c7d Revert "fix: appropriate 404 handling for write API calls"
This reverts commit b6cce75d97.
2020-10-16 20:21:32 -04:00
Julian Lam
9ee3cb9b62 refactor: topic follow/ignore to use api lib 2020-10-16 12:30:14 -04:00
Julian Lam
68d6818bca refactor: topic tools' actions to use api lib 2020-10-16 12:02:51 -04:00
Julian Lam
21974a77f8 feat: topic reply to use api lib (also + missing file) 2020-10-16 11:01:18 -04:00
Julian Lam
40598b368e refactor: topic creation to use api lib 2020-10-16 11:01:18 -04:00
Julian Lam
b6cce75d97 fix: appropriate 404 handling for write API calls 2020-10-16 11:01:18 -04:00
Julian Lam
ede9435f0e feat: send 401 for invalid-uid 2020-10-16 11:01:18 -04:00
Misty (Bot)
854d61a257 Latest translations and fallbacks 2020-10-16 09:08:42 +00:00
Barış Soner Uşaklı
c913900ed6 feat: async/await admin/search 2020-10-16 00:05:55 -04:00
Barış Soner Uşaklı
2927509af3 feat: ignore test folder 2020-10-15 23:28:12 -04:00
Barış Soner Uşaklı
bf480ee58b refactor: setupApiRoute signature 2020-10-15 23:12:19 -04:00
Barış Soner Uşaklı
688d7a2cc2 refactor: remove unused middleware 2020-10-15 22:50:23 -04:00
Barış Soner Uşaklı
b2ff1594b8 fix: redis hget
'node_redis: The HGET command contains a invalid argument type.\n' +
'Only strings, dates and buffers are accepted. Please update your code to use valid argument types.'
2020-10-15 22:25:56 -04:00
Julian Lam
e98285dbbb fix: reimplementing isPrivilegedOrSelfAndPasswordMatch 2020-10-15 21:45:57 -04:00
Barış Soner Uşaklı
84a179f48c Merge branch 'master' of https://github.com/NodeBB/NodeBB 2020-10-15 20:51:55 -04:00
Julian Lam
3f347baadb fix: socket user bans 2020-10-15 20:31:25 -04:00
Julian Lam
14f9d8b0e5 feat: send back 403 on no-privileges error 2020-10-15 20:23:19 -04:00
Julian Lam
222b4c9533 fix: broken tests from api change 2020-10-15 19:33:20 -04:00
Julian Lam
2d252f2fa4 refactor: user bans to use api lib 2020-10-15 19:05:31 -04:00
Barış Soner Uşaklı
7d86be2bc2 fix: tests 2020-10-15 17:51:04 -04:00
Barış Soner Uşaklı
48a9b5d66e update logo 2020-10-15 17:31:03 -04:00
Barış Soner Uşaklı
e367c5403e refactor: move groups.leave, fix some tests 2020-10-15 17:29:38 -04:00
Barış Soner Uşaklı
bbbd9fee85 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2020-10-15 17:12:26 -04:00
Julian Lam
960e925e40 refactor: change password/user follow to use api lib 2020-10-15 17:09:39 -04:00
Barış Soner Uşaklı
081c4fa6d4 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2020-10-15 16:55:59 -04:00
Julian Lam
430e7f5834 refactor: user deletion to use api lib 2020-10-15 16:49:06 -04:00
Barış Soner Uşaklı
8ae1f81cf4 feat: refactor groups.delete 2020-10-15 16:36:53 -04:00
Julian Lam
77481947f0 refactor: socket profile update to use api lib 2020-10-15 16:22:40 -04:00
Julian Lam
31ae8a8323 refactor: socket profile update to use api lib 2020-10-15 16:21:54 -04:00
Barış Soner Uşaklı
d69e503d21 feat: move groups.join to api 2020-10-15 16:13:19 -04:00
Barış Soner Uşaklı
eed8deda61 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2020-10-15 16:07:39 -04:00
Barış Soner Uşaklı
51a60d3d46 fix: handler for group.join 2020-10-15 16:07:25 -04:00
Julian Lam
d07f0081b7 fix: add missing file 2020-10-15 15:52:07 -04:00
Julian Lam
23086daead refactor: user create and profile update to use api lib 2020-10-15 15:50:30 -04:00
Barış Soner Uşaklı
5e2caf19f5 refactor: use single function for api code 2020-10-15 12:12:01 -04:00
Barış Soner Uşaklı
25e4a09816 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2020-10-15 11:10:07 -04:00
Barış Soner Uşaklı
4418ff0716 fix: #8768 2020-10-15 11:09:57 -04:00
Julian Lam
cc6e995ee2 fix: api bug where user profile editing continued even if not allowed 2020-10-15 10:23:57 -04:00
Barış Soner Uşaklı
205e46647c Merge branch 'master' of https://github.com/NodeBB/NodeBB 2020-10-14 23:39:19 -04:00
Barış Soner Uşaklı
43afe7ffab refactor: async/await src/user/approval 2020-10-14 23:38:16 -04:00
renovate[bot]
3b88545b03 fix(deps): update dependency benchpressjs to v2.0.8 (#8767)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-14 23:37:44 -04:00
Barış Soner Uşaklı
bae0f343e1 fix: module build 2020-10-14 23:32:30 -04:00
Barış Soner Uşaklı
3881ac309f refactor: async/await install/web.js 2020-10-14 23:20:45 -04:00
Barış Soner Uşaklı
1fd2eba6f2 refactor: async/await
src/cli/manage.js
src/meta/build.js
src/meta/css.js
src/meta/js.js
2020-10-14 22:49:39 -04:00
Barış Soner Uşaklı
b295d15eae fix: tests 2020-10-14 20:02:32 -04:00
Barış Soner Uşaklı
d89477cad0 refactor: use app.render 2020-10-14 19:18:07 -04:00
renovate[bot]
42aed15b96 fix(deps): update dependency sharp to v0.26.2 (#8765)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-14 18:57:17 -04:00
Julian Lam
9dd3cc0483 feat: allow plugins to define api routes
via new plugin hook static:api.routes
2020-10-14 17:44:27 -04:00
Julian Lam
a4ba23899e feat: require https if nodebb is configured with https url 2020-10-14 14:28:04 -04:00
Julian Lam
20bb9c7ec8 fix: csrf token only on non-GET routes 2020-10-14 14:02:03 -04:00
Barış Soner Uşaklı
3326d80c11 feat: add nyc config 2020-10-14 12:27:17 -04:00
Barış Soner Uşaklı
3673accdb8 refactor: api module
only return promise if callback is undefined
dont append baseUrl if url already starts with api
correctly handle writeapi readapi response for data/error
remove unused onError
dont append empty ? to url for get routes
2020-10-14 11:05:50 -04:00
Julian Lam
a784d10fff refactor: api module returns promise, error-first cb if cb passed in
no more separate onSuccess onError callbacks

/cc @baris
2020-10-14 10:02:02 -04:00
Misty (Bot)
d52992de1b Latest translations and fallbacks 2020-10-14 09:09:02 +00:00
Barış Soner Uşaklı
4b9444f1a5 fix: avatar selector 2020-10-14 00:12:09 -04:00
Barış Soner Uşaklı
e6ea71c95a fix: test 2020-10-13 23:40:04 -04:00
Barış Soner Uşaklı
8c6a559188 fix: timestamp 2020-10-13 23:29:19 -04:00
Barış Soner Uşaklı
331d236f6e fix: #8763 2020-10-13 23:19:07 -04:00
Barış Soner Uşaklı
a481024d27 fix: lastonline again 2020-10-13 23:02:49 -04:00
Barış Soner Uşaklı
71d82ec8e0 fix: caret 2020-10-13 22:59:52 -04:00
Barış Soner Uşaklı
b6d5888334 Merge branch 'admin/users' 2020-10-13 22:58:04 -04:00
Barış Soner Uşaklı
97628e2ff2 fix: lastonline values 2020-10-13 22:57:18 -04:00
renovate[bot]
25c447df05 fix(deps): update dependency nodebb-rewards-essentials to v0.1.4 (#8764)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-13 22:46:47 -04:00
Barış Soner Uşaklı
872bacf1c4 Admin/users (#8762)
* feat: wip admin/users

* feat: more work

* feat: more fixes

* feat: #8662, verified/unverified user groups

* feat: add filter

* feat: change user search to use filters array

* refactor: remove unused search call

* fix: tests

* fix: cant join system groups

* fix: upgrade script
2020-10-13 22:42:50 -04:00
Barış Soner Uşaklı
1289c10568 fix: upgrade script 2020-10-13 22:12:28 -04:00
Barış Soner Uşaklı
59bbede8c7 fix: cant join system groups 2020-10-13 22:08:09 -04:00
Barış Soner Uşaklı
a411df1321 fix: tests 2020-10-13 21:04:07 -04:00
Barış Soner Uşaklı
dd7424e5b5 refactor: remove unused search call 2020-10-13 20:44:07 -04:00
Barış Soner Uşaklı
2d6ea6e505 Merge branch 'master' into admin/users 2020-10-13 20:43:48 -04:00
Barış Soner Uşaklı
a2edb86dfb feat: change user search to use filters array 2020-10-13 20:37:38 -04:00
Barış Soner Uşaklı
959314c921 feat: add filter 2020-10-13 17:07:26 -04:00
Julian Lam
bfaeb27c11 Merge branch 'write-api-csrf' 2020-10-13 17:01:51 -04:00
Julian Lam
1e07886f30 feat: require csrf token if not using bearer token 2020-10-13 16:58:44 -04:00
psychobunny
0e0f1506d2 fix: update server param to /api/v3 2020-10-13 15:06:42 -04:00
Barış Soner Uşaklı
933989e013 Merge branch 'master' into admin/users 2020-10-13 14:56:06 -04:00
Barış Soner Uşaklı
682e926c6b feat: #8662, verified/unverified user groups 2020-10-13 14:55:56 -04:00
psychobunny
c68653d035 fix: typo 2020-10-13 14:43:20 -04:00
psychobunny
7aa4d104af fix: testing openapi write tests 2020-10-13 14:43:20 -04:00
psychobunny
16873800a6 fix(openapi): users.yaml 2020-10-13 14:00:54 -04:00
psychobunny
7b2301ff9c fix: enable tests 2020-10-13 13:10:49 -04:00
psychobunny
54e6003a7c fix: test fix for write API
need to rewrite users.yaml to fix properly
2020-10-13 13:07:54 -04:00
Renovate Bot
dcf7235466 fix(deps): update dependency nodebb-theme-persona to v10.2.60 2020-10-13 12:11:22 -04:00
Julian Lam
30b3fedca4 fix: password reset to invalidate all existing reset tokens for that uid 2020-10-13 11:48:32 -04:00
Barış Soner Uşaklı
700e1e4340 feat: more fixes 2020-10-13 01:49:12 -04:00
Barış Soner Uşaklı
40a05b70ef feat: more work 2020-10-13 01:29:21 -04:00
Barış Soner Uşaklı
b038ac07d8 feat: wip admin/users 2020-10-13 00:29:38 -04:00
Barış Soner Uşaklı
ba2e1c4c7e fix: show more lines 2020-10-12 20:42:08 -04:00
Barış Soner Uşaklı
7beaf49028 feat: set unread false for guests 2020-10-12 15:16:58 -04:00
renovate[bot]
411fa8bc84 fix(deps): update dependency nodebb-plugin-mentions to v2.13.0 (#8758)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-12 14:42:55 -04:00
Barış Soner Uşaklı
01265d08f3 feat: add stack to deprecate message 2020-10-12 14:33:21 -04:00
Barış Soner Uşaklı
30d6a2b84e fix: #8756, pass missing req to mock 2020-10-12 14:29:25 -04:00
Barış Soner Uşaklı
1ee9384875 fix: #8757, allow all slashes in category route 2020-10-12 14:18:59 -04:00
Misty (Bot)
0a4fd50aac Latest translations and fallbacks 2020-10-12 09:09:31 +00:00
Barış Soner Uşaklı
d76229c061 feat: add checkbox tests 2020-10-12 00:18:34 -04:00
Barış Soner Uşaklı
e92d4719cc feat: add test for serialize/deserialize form 2020-10-12 00:04:20 -04:00
Barış Soner Uşaklı
7db224f689 fix: timeago test for dev/prod 2020-10-11 22:40:28 -04:00
Barış Soner Uşaklı
cecdd2915e fix: timeago test 2020-10-11 22:39:37 -04:00
Barış Soner Uşaklı
ae5fb103ca feat: disable write api tests until fixed 2020-10-11 22:28:07 -04:00
Barış Soner Uşaklı
dc29f4dca2 refactor: switch to using slugify module 2020-10-11 21:49:37 -04:00
Barış Soner Uşaklı
bddfcb5867 feat: #8734, add slugify module, deprecate utils.slugify 2020-10-11 21:25:31 -04:00
Barış Soner Uşaklı
f16c8268cf feat: #8734, move bootstrap-tagsinput to package.json 2020-10-11 19:52:01 -04:00
Barış Soner Uşaklı
eab7489ec5 feat: #8734, move deserialize/serialize to package.json 2020-10-11 19:28:46 -04:00
renovate[bot]
cd34bfb1ed fix(deps): update dependency nodebb-theme-persona to v10.2.59 (#8755)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-11 17:26:57 -04:00
Barış Soner Uşaklı
948f26143c feat: #5964, #8734 remove colorpicker 2020-10-11 16:05:52 -04:00
Barış Soner Uşaklı
c954db84e4 refactor: require style 2020-10-11 10:14:02 -04:00
Barış Soner Uşaklı
931d44b5e2 fix: undefined api require, @julianlam 2020-10-11 10:13:51 -04:00
renovate[bot]
a77ba71e05 fix(deps): update dependency nodebb-theme-persona to v10.2.58 (#8754)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-11 00:40:13 -04:00
Barış Soner Uşaklı
e2d407b769 fix: watch tooltip 2020-10-11 00:38:18 -04:00
Barış Soner Uşaklı
aedd28e0a6 fix: module name 2020-10-10 23:45:58 -04:00
Barış Soner Uşaklı
8f436eb881 fix: pin sortablejs 2020-10-10 23:41:51 -04:00
Barış Soner Uşaklı
3bbb4e269d Merge branch 'master' of https://github.com/NodeBB/NodeBB 2020-10-10 23:35:02 -04:00
Barış Soner Uşaklı
c721625a95 feat: #8734 remove unused files 2020-10-10 23:34:56 -04:00
Barış Soner Uşaklı
cc705e5e2b feat: #8734, move sortable to package.json 2020-10-10 23:24:13 -04:00
renovate[bot]
0399ffaf5f fix(deps): update dependency nodebb-plugin-composer-default to v6.4.4 (#8752)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-10 23:09:58 -04:00
renovate[bot]
f8e2324ce7 fix(deps): update dependency benchpressjs to v2.0.7 (#8733)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-10 23:07:58 -04:00
Barış Soner Uşaklı
75c9668656 fix: admin jquerui requires 2020-10-10 23:01:32 -04:00
Barış Soner Uşaklı
8c019a6a3b fix: timeago locale switch 2020-10-10 22:26:48 -04:00
Barış Soner Uşaklı
300a87559f feat: #8734, move bootbox to package.json 2020-10-10 22:15:34 -04:00
Barış Soner Uşaklı
420a312982 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2020-10-10 21:55:03 -04:00
Barış Soner Uşaklı
3b231360d3 feat: load jquery-form before using 2020-10-10 21:54:32 -04:00
Barış Soner Uşaklı
fda2aedfd8 feat: #8734, jquery-ui, jquery-form, timeago (#8748)
* feat: #8734, jquery-ui, jquery-form, timeago

get rid of forum/footer.js move that code to app.js & wait for app to load before calling ajaxify.end
make sockets.js a requirejs module
move jquery-ui to node_modules and load via requirejs
move jquery-form to node_modules and load via requirejs
move timeago to node_modules and load via requirejs
only include the css for needed jquery-ui widgets

* feat: keep socket/io global for backwards compat

* refactor: move socket listener to chat
2020-10-10 21:47:27 -04:00
renovate[bot]
666064bf46 fix(deps): update dependency nodebb-plugin-composer-default to v6.4.3 (#8750)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-10 21:46:42 -04:00
Misty (Bot)
ea830871c2 Latest translations and fallbacks 2020-10-10 09:06:14 +00:00
renovate[bot]
1c94220b45 fix(deps): update dependency nodebb-theme-persona to v10.2.57 (#8749)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-10 00:56:55 -04:00
Julian Lam
87e3f26fe4 feat(openapi): schema validation for write api definitions file 2020-10-09 16:38:43 -04:00
Renovate Bot
414fe19c6e fix(deps): update dependency nodebb-theme-persona to v10.2.56 2020-10-09 15:51:46 -04:00
Renovate Bot
1bc99411b5 fix(deps): update dependency nodebb-theme-slick to v1.2.39 2020-10-09 15:50:11 -04:00
Barış Soner Uşaklı
59311a63a0 feat: remove unused textcomplete file 2020-10-09 14:49:59 -04:00
Julian Lam
944a7e0e28 fix(deps): bump vanilla/persona 2020-10-09 14:25:40 -04:00
Barış Soner Uşaklı
ae3a231fce feat: #8734, remove semver.browser
use compare-versions as a module
2020-10-09 14:10:38 -04:00
renovate[bot]
43df4b8e15 fix(deps): update dependency nodebb-theme-lavender to v5.0.14 (#8739)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-09 12:57:09 -04:00
renovate[bot]
ba62ebb620 fix(deps): update dependency socket.io-client to v2.3.1 (#8700)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-09 12:56:39 -04:00
psychobunny
9a5b8a798a fix: category RSS feed was displaying deleted topics 2020-10-09 12:54:02 -04:00
renovate[bot]
45aceb26a5 fix(deps): update dependency nodebb-theme-slick to v1.2.37 (#8741)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-09 12:33:35 -04:00
renovate[bot]
0c7af5029b fix(deps): update dependency nodebb-theme-vanilla to v11.2.21 (#8740)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-09 12:26:30 -04:00
renovate[bot]
4207dde4c2 fix(deps): update dependency nodebb-theme-persona to v10.2.54 (#8736)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-09 12:22:27 -04:00
Barış Soner Uşaklı
1531536d46 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2020-10-09 12:20:24 -04:00
Barış Soner Uşaklı
2c1897b373 feat: #8734, move slideout to package.json 2020-10-09 12:20:09 -04:00
psychobunny
dbb4cfe9d6 style(openapi): break write API routes into individual files 2020-10-09 12:16:25 -04:00
psychobunny
ffac3c7902 style(openapi): move schemas and responses out of write.yaml 2020-10-09 12:16:25 -04:00
Barış Soner Uşaklı
9c157de05d feat: #8734, move tinycon to package.json 2020-10-09 12:01:51 -04:00
Barış Soner Uşaklı
45e8a4d588 fix: #8734 make nprogress module 2020-10-09 11:48:52 -04:00
Barış Soner Uşaklı
43589a744d feat: #8734, move visibilityjs to package.json 2020-10-09 11:35:52 -04:00
Julian Lam
8af30a51b5 fix: regression caused by 7545951725
/cc @psychobunny
2020-10-09 10:58:42 -04:00
Barış Soner Uşaklı
a46cbb623d feat: #8734, move nprogress to package.json 2020-10-09 10:53:07 -04:00
Barış Soner Uşaklı
e02c57d963 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2020-10-09 10:42:22 -04:00
Barış Soner Uşaklı
aa08f8826c feat: #8734 move r.js to package.json 2020-10-09 10:40:46 -04:00
renovate[bot]
70c085ba5d fix(deps): update dependency nodebb-theme-persona to v10.2.52 (#8735)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-09 10:22:26 -04:00
Misty (Bot)
d5d05e17af Latest translations and fallbacks 2020-10-09 09:11:15 +00:00
Barış Soner Uşaklı
12c8b1c2bc fix: dont allow adding duplicates to privileges page
hightlight uid/group if it is added again from autocomplete
2020-10-08 18:32:36 -04:00
Barış Soner Uşaklı
f259063f08 fix: #8728, dont add admins to table 2020-10-08 18:08:04 -04:00
cryptoethic
b3ed26ac2c feat: revoke user sessions above threshold (#8731)
* feat: revoke user sessions above threshold

* fix: removed translations from en-US

* fix: defined default maxUserSessions in install\data\defaults.json
2020-10-08 17:33:18 -04:00
Julian Lam
4a63c20a72 chore: some optimizations for codeclimate 2020-10-08 15:58:42 -04:00
Julian Lam
ebcb664b41 fix(writeapi): tests 2020-10-08 15:33:10 -04:00
Julian Lam
229eb2c2d8 fix(writeapi): tests 2020-10-08 15:33:10 -04:00
Julian Lam
b8703ba9f6 fix(writeapi): tests 2020-10-08 15:33:10 -04:00
Julian Lam
8ecef7b891 refactor: middleware.assert.* 2020-10-08 15:33:10 -04:00
Julian Lam
41f55b7a5a fix(writeapi): tests 2020-10-08 15:33:10 -04:00
Julian Lam
cfee431c53 feat(writeapi): commented-out stub code for file upload 2020-10-08 15:33:10 -04:00
Julian Lam
f870721fca feat(writeapi): file deletion route 2020-10-08 15:33:10 -04:00
Julian Lam
a55b381791 feat(writeapi): admin settings update route 2020-10-08 15:33:10 -04:00
Julian Lam
2ec838fc59 feat(writeapi): token generation/delete routes, ACP updates 2020-10-08 15:33:10 -04:00
Julian Lam
2928b9b87a style: updates to openapi files 2020-10-08 15:33:10 -04:00
Julian Lam
c7d15dfa94 feat: filter:settings.get plugin hook 2020-10-08 15:33:10 -04:00
Julian Lam
3ea1aa4780 refactor(writeapi): update route prefix to api/v3, default error option 2020-10-08 15:33:10 -04:00
Julian Lam
f67824719c chore(writeapi): cleanup 2020-10-08 15:33:10 -04:00
Julian Lam
0973feea16 feat(writeapi): post bookmarking 2020-10-08 15:33:10 -04:00
Julian Lam
9942c248eb feat(writeapi): post voting 2020-10-08 15:33:10 -04:00
Julian Lam
5e2a3ea6ec refactor(writeapi): post.tools.purge no longer a method 2020-10-08 15:33:10 -04:00
Julian Lam
414169fdfa feat(writeapi): post delete/restore/purge 2020-10-08 15:33:10 -04:00
Julian Lam
f66c2fb60f feat(writeapi): post editing 2020-10-08 15:33:10 -04:00
Julian Lam
1605e5e443 feat(writeapi): topic tags 2020-10-08 15:33:10 -04:00
Julian Lam
9be5629458 feat(writeapi): topic follow/ignore 2020-10-08 15:33:10 -04:00
Julian Lam
da25ce4d09 feat: topic delete/restore/purge/(un)pin/(un)lock 2020-10-08 15:33:10 -04:00
Julian Lam
675a62dadd fix: remove debug log 2020-10-08 15:33:10 -04:00
Julian Lam
5fc7e7bfd0 feat: add new api page to ACP menu 2020-10-08 15:33:10 -04:00
Julian Lam
49652e6f1b feat: management of API tokens via ACP 2020-10-08 15:33:10 -04:00
Julian Lam
adcadbb2b5 fix: tests 2020-10-08 15:33:10 -04:00
Julian Lam
cb9369f10e fix: bad merge w/ category ACP page 2020-10-08 15:33:10 -04:00
Julian Lam
a905d7f022 refactor: rewrite modules/api.js in AMD style 2020-10-08 15:33:10 -04:00
Julian Lam
8e89f34dbf fix: bad logic in group assertion middleware 2020-10-08 15:33:10 -04:00
Julian Lam
8e7baac6ef fix(writeapi): calls to profile editing routes 200 even if user DNE 2020-10-08 15:33:10 -04:00
Julian Lam
7757f965eb fix: errors thrown if no password sent in to profile edit route 2020-10-08 15:33:10 -04:00
Julian Lam
549ca11056 fix: bug where middlewares seemingly ran in parallel 2020-10-08 15:33:10 -04:00
Julian Lam
6096f74ab2 feat(writeapi): adding missing files 2020-10-08 15:33:10 -04:00
Julian Lam
4c833d0bf0 feat(writeapi): topic posting and replying 2020-10-08 15:33:10 -04:00
Julian Lam
40dc1c38d3 feat(writeapi): added DELETE /groups/:slug/membership/:uid route 2020-10-08 15:33:10 -04:00
Julian Lam
68ecf41ecf fix(writeapi): client-side group join API call 2020-10-08 15:33:10 -04:00
Julian Lam
e1c40b2792 style: allowing some es6 features client-side 2020-10-08 15:33:10 -04:00
Julian Lam
952dc211dd feat(writeapi): added group joining and deletion 2020-10-08 15:33:10 -04:00
Julian Lam
d044c3223e feat(writeapi): abstracted ajax calls out to new api module 2020-10-08 15:33:10 -04:00
Julian Lam
ba345e53e8 feat(writeapi): added POST /api/v1/groups 2020-10-08 15:33:10 -04:00
Julian Lam
49994f3a15 fix(openapi): moved write-api to public/openapi 2020-10-08 15:33:10 -04:00
Julian Lam
3072de4812 feat: added DELETE /api/v1/categories/:cid route 2020-10-08 15:33:10 -04:00
Julian Lam
e942ad8101 feat: added PUT /api/v1/categories/:cid route
Deprecated admin.categories.update socket call
Showing stack trace in console for errors, when in development mode
2020-10-08 15:33:10 -04:00
Julian Lam
dc666fd8a9 feat: added POST /api/v1/categories route 2020-10-08 15:33:10 -04:00
Julian Lam
a5af2dc819 feat: added PUT/DELETE /api/v1/users/:uid/ban routes 2020-10-08 15:33:10 -04:00
Julian Lam
db5c5b2cfb fix: follow route to match spec 2020-10-08 15:33:10 -04:00
Julian Lam
b5bbcbaeaa feat: added POST and DELETE /api/v1/users/:uid/follow routes 2020-10-08 15:33:10 -04:00
Julian Lam
7aed174ebc feat: added PUT /api/v1/users/:uid/password route 2020-10-08 15:33:10 -04:00
Julian Lam
af2e424ffe fix: missing one property in openapi doc 2020-10-08 15:33:10 -04:00
Julian Lam
a1ddc210b2 feat: added DELETE /api/v1/users/:uid and DELETE /api/v1/users 2020-10-08 15:33:10 -04:00
Julian Lam
d15d9e4492 fix(refactor): patching helpers.tryRoute for API routes, some re-org
Thanks @barisusakli for the tip
2020-10-08 15:33:10 -04:00
Julian Lam
d8879d21db fix: error handling with POST /api/v1/users 2020-10-08 15:33:10 -04:00
Julian Lam
58043e07ba fix: use POST call for user creation in ACP
- Not entirely sure about error handling yet, more research needed
- Also added socket method deprecation utility method
2020-10-08 15:33:10 -04:00
Julian Lam
bba2a4638c fix: user creation POST route returns user data, updated openapi spec 2020-10-08 15:33:10 -04:00
Julian Lam
91b79f1793 feat: added openapi.yaml file for BEST documentation 2020-10-08 15:33:10 -04:00
Julian Lam
7b6d43bcc8 feat: added checkRequired middleware for API calls 2020-10-08 15:33:10 -04:00
Julian Lam
fd67355b03 fix(writeapi): authenticate middleware logic to work better with await 2020-10-08 15:33:10 -04:00
Julian Lam
f6433ef2c5 fix(refactor): merging write-api auth middlewares with core middlewares 2020-10-08 15:33:10 -04:00
Julian Lam
ec5c48b188 feat: migrating write-api skeleton into core 2020-10-08 15:33:10 -04:00
Barış Soner Uşaklı
dc152a558c Merge branch 'master' of https://github.com/NodeBB/NodeBB 2020-10-08 09:55:25 -04:00
Barış Soner Uşaklı
7138d433b1 fix: selector, so it doesnt effect suggested topics 2020-10-08 09:55:15 -04:00
Misty (Bot)
af90b99706 Latest translations and fallbacks 2020-10-08 09:10:35 +00:00
renovate[bot]
bae2eadae9 fix(deps): update dependency nodebb-theme-persona to v10.2.51 (#8729)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-07 18:34:39 -04:00
Barış Soner Uşaklı
264818e517 fix: use proper api url
no need to parse all tags since https://api.github.com/repos/NodeBB/NodeBB/releases/latest gives the latest non-prerelease, non-draft releases
2020-10-07 18:21:23 -04:00
Barış Soner Uşaklı
8eb62e2210 fix: tests, get latest release tag recursively 2020-10-07 18:14:45 -04:00
renovate[bot]
804729fcec fix(deps): update dependency nodebb-theme-persona to v10.2.50 (#8727)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-07 17:50:03 -04:00
Julian Lam
fc603a5368 fix: use app.parseAndTranslate instead of benchpress.parse 2020-10-07 12:23:53 -04:00
psychobunny
20e0cc5cbb fix: sorted list delete button 2020-10-07 11:59:45 -04:00
psychobunny
cdb794888d style: linting 2020-10-07 11:47:44 -04:00
Misty (Bot)
174e239332 Latest translations and fallbacks 2020-10-07 09:09:45 +00:00
Barış Soner Uşaklı
ed092bf6b5 refactor: remove posts.tools.purge
moved the check to socketPosts.purge
2020-10-06 14:03:59 -04:00
Julian Lam
dde5b6b814 fix: unable to register async method as response hook listener
Also fixes #8723, /api/config now runs middleware.authenticateOrGuest
2020-10-06 09:32:13 -04:00
renovate[bot]
b01bc2ae0f fix(deps): update dependency nodebb-theme-persona to v10.2.49 (#8722)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-05 22:54:01 -04:00
renovate[bot]
0170261369 fix(deps): update dependency nodebb-theme-persona to v10.2.48 (#8721)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-05 22:10:20 -04:00
renovate[bot]
04b1daac16 fix(deps): update dependency nodebb-theme-persona to v10.2.47 (#8720)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-05 14:42:15 -04:00
Barış Soner Uşaklı
b955fd363d fix: dont allow sorting pinned topics on recent 2020-10-05 14:41:24 -04:00
Julian Lam
3c7f79cb8a fix: use console.info instead of console.log for sw registration 2020-10-05 13:45:09 -04:00
renovate[bot]
ba906d7d02 fix(deps): update dependency nodebb-theme-persona to v10.2.46 (#8719)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-05 13:32:39 -04:00
renovate[bot]
229421edbe fix(deps): update dependency nodebb-plugin-composer-default to v6.4.2 (#8718)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-05 13:15:10 -04:00
Barış Soner Uşaklı
1542a5d7e5 feat: remove post/header selector 2020-10-05 13:01:00 -04:00
Misty (Bot)
63696c400e chore: update changelog for v1.15.0-beta.29 2020-10-05 14:34:33 +00:00
Misty (Bot)
fca176d2bd chore: incrementing version number - v1.15.0-beta.29 2020-10-05 14:34:33 +00:00
Barış Soner Uşaklı
7cd83b9a6a fix: spec 2020-10-04 22:32:06 -04:00
Barış Soner Uşaklı
6924eb6c52 fix: spec 2020-10-04 22:15:56 -04:00
Barış Soner Uşaklı
cb2f6f7c4a fix: test 2020-10-04 22:11:41 -04:00
Barış Soner Uşaklı
7bf6d3b8eb fix: dont let mods load postqueue for a cid they are not a mod of 2020-10-04 22:10:24 -04:00
Barış Soner Uşaklı
2ea9768e00 fix: show disabled categories in admin&mods 2020-10-04 21:52:57 -04:00
Misty (Bot)
d93315e3ee Latest translations and fallbacks 2020-10-04 09:06:59 +00:00
renovate[bot]
b3a24f7410 fix(deps): update dependency nodebb-plugin-composer-default to v6.4.0 (#8716)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-03 22:04:26 -04:00
psychobunny
60afb110ef fix: prevent mutiple highlighted rows on category/topic pages 2020-10-03 17:12:42 -04:00
Misty (Bot)
6ee0cad289 Latest translations and fallbacks 2020-10-03 09:06:55 +00:00
Barış Soner Uşaklı
fbd85680fb fix: spec 2020-10-02 16:57:26 -04:00
renovate[bot]
c95a38987f fix(deps): update dependency nodebb-plugin-mentions to v2.11.0 (#8714)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-02 16:37:26 -04:00
renovate[bot]
fc2795d317 fix(deps): update dependency nodebb-theme-slick to v1.2.36 (#8713)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-02 16:37:15 -04:00
renovate[bot]
2b0deeb77a fix(deps): update dependency nodebb-theme-vanilla to v11.2.20 (#8715)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-02 16:35:38 -04:00
Barış Soner Uşaklı
5d9a868142 feat: category filter on post queue (#8710)
* feat: category filter on post queue

category filter module

* feat: add spec
2020-10-02 16:35:20 -04:00
renovate[bot]
f14b49457c fix(deps): update dependency nodebb-theme-persona to v10.2.45 (#8711)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-10-02 16:28:19 -04:00
Julian Lam
f1de084da3 fix: do not show TOC if fewer than 2 headings 2020-10-02 15:51:04 -04:00
psychobunny
caa8c00f89 fix: params cached in autocomplete module 2020-10-02 13:55:11 -04:00
psychobunny
7545951725 chore: refactor src/emailer.js 2020-10-02 11:01:39 -04:00
Misty (Bot)
c65ea5bfa6 Latest translations and fallbacks 2020-10-02 09:10:49 +00:00
Peter Jaszkowiak
1aa336d837 refactor: shared constants (#8707)
define plugin name and theme name regexs in one location for consistency

define various shared paths in one place for consistency
2020-10-01 23:02:44 -04:00
Barış Soner Uşaklı
e60357d20d feat: #6594, add top/popular sections to digest email (#8709) 2020-10-01 22:07:33 -04:00
Peter Jaszkowiak
55d5cccf2e Document deprecations and remove old ones (#8706)
* chore: document deprecation removal versions

* chore: remove deprecations 2+ versions old
2020-10-01 12:25:03 -04:00
Peter Jaszkowiak
017af63fb0 fix: #8686, deprecate plugin.json/library (#8705)
and also fix deprecated hooks with no alternative
2020-10-01 11:45:27 -04:00
Misty (Bot)
39b51707ce Latest translations and fallbacks 2020-10-01 09:09:51 +00:00
Julian Lam
d3951ebeaf fix: updating minimum node version in readme 2020-09-30 14:56:30 -04:00
psychobunny
5441651ea7 fix: update "install plugins" link to go to the download tab 2020-09-30 13:05:17 -04:00
renovate[bot]
1d0eaafb5f fix(deps): update dependency nodebb-theme-persona to v10.2.43 (#8701)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-09-30 13:00:37 -04:00
Barış Soner Uşaklı
72e82c4aca Merge branch 'master' of https://github.com/NodeBB/NodeBB 2020-09-30 12:57:30 -04:00
psychobunny
1761e13dbd feat: dedicated sorting buttons for plugin ordering in ACP 2020-09-30 12:49:34 -04:00
Barış Soner Uşaklı
c33dc90562 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2020-09-30 12:41:33 -04:00
Barış Soner Uşaklı
54737d3076 feat: #8233, search sub categories 2020-09-30 12:41:23 -04:00
psychobunny
c56236f081 fix: overflow on submitPluginUsage field 2020-09-30 12:30:23 -04:00
Julian Lam
38f88fc563 fix: #8699 tags route is case sensitive, though tags are not 2020-09-30 11:57:59 -04:00
Renovate Bot
2a1da61cd9 fix(deps): update dependency nodebb-theme-persona to v10.2.42 2020-09-30 10:09:27 -04:00
psychobunny
f4d76f1edd feat: move service-worker.js into its own file 2020-09-30 10:00:28 -04:00
Julian Lam
8437130ec2 fix: early button/anchor clicks do nothing
This reverts commit a395324b52, and
fixes the issue where the ACP became unusable because of the earlier
variant of this code.

Thanks @psychobunny for spotting.
2020-09-30 09:18:46 -04:00
Misty (Bot)
f693ce97bf Latest translations and fallbacks 2020-09-30 09:09:59 +00:00
Misty (Bot)
fd975a6694 chore: update changelog for v1.15.0-beta.28 2020-09-29 23:16:27 +00:00
1286 changed files with 12585 additions and 15192 deletions

204
.github/workflows/test.yaml vendored Normal file
View File

@@ -0,0 +1,204 @@
name: Lint and test
on:
push:
branches:
- master
- develop
pull_request:
branches:
- master
- develop
defaults:
run:
shell: bash
jobs:
test:
name: Lint and test
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
node: [10, 12, 14]
database: [mongo-dev, mongo, redis, postgres]
include:
# only run coverage once
- os: ubuntu-latest
node: 14
coverage: true
# test under development once
- database: mongo-dev
test_env: development
# only run eslint once
- os: ubuntu-latest
node: 14
database: mongo-dev
lint: true
runs-on: ${{ matrix.os }}
env:
TEST_ENV: ${{ matrix.test_env || 'production' }}
services:
postgres:
image: 'postgres:10-alpine'
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
# Set health checks to wait until postgres has started
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
# Maps port 5432 on service container to the host
- 5432:5432
redis:
image: 'redis:2.8.9'
# Set health checks to wait until redis has started
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
# Maps port 6379 on service container to the host
- 6379:6379
mongo:
image: 'mongo:3.2'
ports:
# Maps port 27017 on service container to the host
- 27017:27017
steps:
- uses: actions/checkout@v2
- run: cp install/package.json package.json
- name: Install Node
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node }}
- name: NPM Install
uses: bahmutov/npm-install@v1
with:
useLockFile: false
- name: Setup on MongoDB
if: startsWith(matrix.database, 'mongo')
env:
SETUP: >-
{
"url": "http://127.0.0.1:4567",
"secret": "abcdef",
"admin:username": "admin",
"admin:email": "test@example.org",
"admin:password": "hAN3Eg8W",
"admin:password:confirm": "hAN3Eg8W",
"database": "mongo",
"mongo:host": "127.0.0.1",
"mongo:port": 27017,
"mongo:username": "",
"mongo:password": "",
"mongo:database": "nodebb"
}
CI: >-
{
"host": "127.0.0.1",
"port": 27017,
"database": "ci_test"
}
run: |
node app --setup="${SETUP}" --ci="${CI}"
- name: Setup on PostgreSQL
if: startsWith(matrix.database, 'postgres')
env:
SETUP: >-
{
"url": "http://127.0.0.1:4567",
"secret": "abcdef",
"admin:username": "admin",
"admin:email": "test@example.org",
"admin:password": "hAN3Eg8W",
"admin:password:confirm": "hAN3Eg8W",
"database": "postgres",
"postgres:host": "127.0.0.1",
"postgres:port": 5432,
"postgres:username": "postgres",
"postgres:password": "postgres",
"postgres:database": "nodebb"
}
CI: >-
{
"host": "127.0.0.1",
"database": "ci_test",
"port": 5432,
"username": "postgres",
"password": "postgres"
}
run: |
node -e "const { Client } = require('pg'); const c = new Client({ host: '127.0.0.1', port: 5432, user: 'postgres', password: 'postgres' }); c.connect().then(() => c.query('CREATE DATABASE nodebb')).then(() => c.query('CREATE DATABASE ci_test')).then(() => c.end())"
node app --setup="${SETUP}" --ci="${CI}"
- name: Setup on Redis
if: startsWith(matrix.database, 'redis')
env:
SETUP: >-
{
"url": "http://127.0.0.1:4567/forum",
"secret": "abcdef",
"admin:username": "admin",
"admin:email": "test@example.org",
"admin:password": "hAN3Eg8W",
"admin:password:confirm": "hAN3Eg8W",
"database": "redis",
"redis:host": "127.0.0.1",
"redis:port": 6379,
"redis:password": "",
"redis:database": 0
}
CI: >-
{
"host": "127.0.0.1",
"database": 1,
"port": 6379
}
run: |
node app --setup="${SETUP}" --ci="${CI}"
- name: Run ESLint
if: matrix.lint
run: npm run lint
- name: Node tests
run: npm test
- name: Extract coverage info
run: npm run coverage
- name: Test coverage
uses: coverallsapp/github-action@v1.1.2
if: matrix.coverage
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
flag-name: ${{ matrix.os }}-node-${{ matrix.node }}-db-${{ matrix.database }}
parallel: true
finish:
needs: test
runs-on: ubuntu-latest
steps:
- name: Coveralls Finished
uses: coverallsapp/github-action@v1.1.2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
parallel-finished: true

1
.gitignore vendored
View File

@@ -40,6 +40,7 @@ pidfile
/public/acp.min.js.map
/public/installer.css
/public/installer.min.js
/public/bootstrap.min.css
/public/logo.png
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio

View File

@@ -1,47 +0,0 @@
services:
- mongodb
- redis-server
- postgresql
before_install:
- cp install/package.json package.json
- sudo apt-get update
- sudo apt-get --yes remove postgresql\*
- sudo apt-get install -y postgresql-12 postgresql-client-12
- sudo cp /etc/postgresql/{9.6,12}/main/pg_hba.conf
- sudo service postgresql restart 12
before_script:
- sleep 15 # wait for mongodb to be ready
- "mongo mydb_test --eval 'db.createUser({user:\"travis\", pwd: \"test\", roles: []});'"
- sh -c "if [ '$DB' = 'mongodb' ]; then node app --setup=\"{\\\"url\\\":\\\"http://127.0.0.1:4567\\\",\\\"secret\\\":\\\"abcdef\\\",\\\"database\\\":\\\"mongo\\\",\\\"mongo:host\\\":\\\"127.0.0.1\\\",\\\"mongo:port\\\":27017,\\\"mongo:username\\\":\\\"\\\",\\\"mongo:password\\\":\\\"\\\",\\\"mongo:database\\\":0,\\\"admin:username\\\":\\\"admin\\\",\\\"admin:email\\\":\\\"test@example.org\\\",\\\"admin:password\\\":\\\"hAN3Eg8W\\\",\\\"admin:password:confirm\\\":\\\"hAN3Eg8W\\\"}\" --ci=\"{\\\"host\\\":\\\"127.0.0.1\\\",\\\"port\\\":27017,\\\"database\\\":\\\"travis_ci_test\\\"}\"; fi"
- sh -c "if [ '$DB' = 'redis' ]; then node app --setup=\"{\\\"url\\\":\\\"http://127.0.0.1:4567/forum\\\",\\\"secret\\\":\\\"abcdef\\\",\\\"database\\\":\\\"redis\\\",\\\"redis:host\\\":\\\"127.0.0.1\\\",\\\"redis:port\\\":6379,\\\"redis:password\\\":\\\"\\\",\\\"redis:database\\\":0,\\\"admin:username\\\":\\\"admin\\\",\\\"admin:email\\\":\\\"test@example.org\\\",\\\"admin:password\\\":\\\"hAN3Eg8W\\\",\\\"admin:password:confirm\\\":\\\"hAN3Eg8W\\\"}\" --ci=\"{\\\"host\\\":\\\"127.0.0.1\\\",\\\"port\\\":6379,\\\"database\\\":1}\"; fi"
- sh -c "if [ '$DB' = 'postgres' ]; then psql -c 'create database nodebb;' -U postgres; psql -c 'create database travis_ci_test;' -U postgres; node app --setup=\"{\\\"url\\\":\\\"http://127.0.0.1:4567\\\",\\\"secret\\\":\\\"abcdef\\\",\\\"database\\\":\\\"postgres\\\",\\\"postgres:host\\\":\\\"127.0.0.1\\\",\\\"postgres:port\\\":5433,\\\"postgres:password\\\":\\\"\\\",\\\"postgres:database\\\":\\\"nodebb\\\",\\\"admin:username\\\":\\\"admin\\\",\\\"admin:email\\\":\\\"test@example.org\\\",\\\"admin:password\\\":\\\"hAN3Eg8W\\\",\\\"admin:password:confirm\\\":\\\"hAN3Eg8W\\\"}\" --ci=\"{\\\"host\\\":\\\"127.0.0.1\\\",\\\"port\\\":5433,\\\"username\\\":\\\"postgres\\\",\\\"database\\\":\\\"travis_ci_test\\\"}\"; fi"
after_success:
- "npm run coveralls"
language: node_js
sudo: false
dist: xenial
env:
global:
- PGUSER=postgres
- PGPORT=5433
- CXX=g++-4.8
jobs:
- "DB=mongodb TEST_ENV=production"
- "DB=mongodb TEST_ENV=development"
- "DB=redis TEST_ENV=production"
- "DB=postgres TEST_ENV=production"
addons:
apt:
sources:
- ubuntu-toolchain-r-test
- mongodb-4.0-xenial
packages:
- g++-4.8
- mongodb-org-server
node_js:
- "14"
- "12"
branches:
only:
- master
- develop

View File

@@ -3300,6 +3300,56 @@ trans.zh_CN = public/language/zh-CN/admin/settings/notifications.json
trans.zh_TW = public/language/zh-TW/admin/settings/notifications.json
type = KEYVALUEJSON
[nodebb.admin-settings-api]
file_filter = public/language/<lang>/admin/settings/api.json
source_file = public/language/en-GB/admin/settings/api.json
source_lang = en_GB
trans.ar = public/language/ar/admin/settings/api.json
trans.bg = public/language/bg/admin/settings/api.json
trans.bn = public/language/bn/admin/settings/api.json
trans.cs = public/language/cs/admin/settings/api.json
trans.da = public/language/da/admin/settings/api.json
trans.de = public/language/de/admin/settings/api.json
trans.el = public/language/el/admin/settings/api.json
trans.en@pirate = public/language/en-x-pirate/admin/settings/api.json
trans.en_US = public/language/en-US/admin/settings/api.json
trans.es = public/language/es/admin/settings/api.json
trans.et = public/language/et/admin/settings/api.json
trans.fa_IR = public/language/fa-IR/admin/settings/api.json
trans.fi = public/language/fi/admin/settings/api.json
trans.fr = public/language/fr/admin/settings/api.json
trans.gl = public/language/gl/admin/settings/api.json
trans.he = public/language/he/admin/settings/api.json
trans.hr = public/language/hr/admin/settings/api.json
trans.hu = public/language/hu/admin/settings/api.json
trans.id = public/language/id/admin/settings/api.json
trans.it = public/language/it/admin/settings/api.json
trans.ja = public/language/ja/admin/settings/api.json
trans.ko = public/language/ko/admin/settings/api.json
trans.lt = public/language/lt/admin/settings/api.json
trans.lv = public/language/lv/admin/settings/api.json
trans.ms = public/language/ms/admin/settings/api.json
trans.nb = public/language/nb/admin/settings/api.json
trans.nl = public/language/nl/admin/settings/api.json
trans.pl = public/language/pl/admin/settings/api.json
trans.pt_BR = public/language/pt-BR/admin/settings/api.json
trans.pt_PT = public/language/pt-PT/admin/settings/api.json
trans.ro = public/language/ro/admin/settings/api.json
trans.ru = public/language/ru/admin/settings/api.json
trans.rw = public/language/rw/admin/settings/api.json
trans.sc = public/language/sc/admin/settings/api.json
trans.sk = public/language/sk/admin/settings/api.json
trans.sl = public/language/sl/admin/settings/api.json
trans.sr = public/language/sr/admin/settings/api.json
trans.sv = public/language/sv/admin/settings/api.json
trans.th = public/language/th/admin/settings/api.json
trans.tr = public/language/tr/admin/settings/api.json
trans.uk = public/language/uk/admin/settings/api.json
trans.vi = public/language/vi/admin/settings/api.json
trans.zh_CN = public/language/zh-CN/admin/settings/api.json
trans.zh_TW = public/language/zh-TW/admin/settings/api.json
type = KEYVALUEJSON
[nodebb.admin-settings-post]
file_filter = public/language/<lang>/admin/settings/post.json
source_file = public/language/en-GB/admin/settings/post.json

File diff suppressed because it is too large Load Diff

View File

@@ -1,15 +1,16 @@
# <img alt="NodeBB" src="http://i.imgur.com/mYxPPtB.png" />
# ![NodeBB](public/images/logo.svg)
[![Build Status](https://travis-ci.org/NodeBB/NodeBB.svg?branch=master)](https://travis-ci.org/NodeBB/NodeBB)
[![Coverage Status](https://coveralls.io/repos/github/NodeBB/NodeBB/badge.svg?branch=master)](https://coveralls.io/github/NodeBB/NodeBB?branch=master)
[![Dependency Status](https://david-dm.org/nodebb/nodebb.svg?path=install)](https://david-dm.org/nodebb/nodebb?path=install)
[![Code Climate](https://codeclimate.com/github/NodeBB/NodeBB/badges/gpa.svg)](https://codeclimate.com/github/NodeBB/NodeBB)
[**NodeBB Forum Software**](https://nodebb.org) is powered by Node.js and built on either a Redis or MongoDB database. It utilizes web sockets for instant interactions and real-time notifications. NodeBB has many modern features out of the box such as social network integration and streaming discussions, while still making sure to be compatible with older browsers.
[**NodeBB Forum Software**](https://nodebb.org) is powered by Node.js and supports either Redis, MongoDB, or a PostgreSQL database. It utilizes web sockets for instant interactions and real-time notifications. NodeBB has many modern features out of the box such as social network integration and streaming discussions, while still making sure to be compatible with older browsers.
Additional functionality is enabled through the use of third-party plugins.
* [Demo & Meta Discussion](http://community.nodebb.org)
* [Demo](https://try.nodebb.org)
* [Developer Community](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)
@@ -48,8 +49,8 @@ Our minimalist "Persona" theme gets you going right away, no coding experience r
NodeBB requires the following software to be installed:
* A version of Node.js at least 10 or greater ([installation/upgrade instructions](https://github.com/nodesource/distributions))
* Redis, version 2.8.9 or greater **or** MongoDB, version 2.6 or greater
* A version of Node.js at least 12 or greater ([installation/upgrade instructions](https://github.com/nodesource/distributions))
* MongoDB, version 2.6 or greater **or** Redis, version 2.8.9 or greater
* nginx, version 1.3.13 or greater (**only if** intending to use nginx to proxy requests to a NodeBB)
## Installation

View File

@@ -3,6 +3,7 @@
module.exports = {
extends: ['@commitlint/config-angular'],
rules: {
'header-max-length': [1, 'always', 72],
'type-enum': [
2,
'always',

View File

@@ -114,6 +114,8 @@
"hideFullname": 0,
"hideEmail": 0,
"allowGuestHandles": 0,
"guestsIncrementTopicViews": 1,
"incrementTopicViewsInterval": 60,
"recentMaxTopics": 200,
"disableRecentCategoryFilter": 0,
"maximumRelatedTopics": 0,
@@ -133,5 +135,7 @@
"timeagoCutoff": 30,
"necroThreshold": 7,
"categoryWatchState": "watching",
"submitPluginUsage": 1
"submitPluginUsage": 1,
"maxUserSessions": 10,
"useCompression": 0
}

View File

@@ -2,7 +2,7 @@
"name": "nodebb",
"license": "GPL-3.0",
"description": "NodeBB Forum",
"version": "1.15.0-beta.28",
"version": "1.15.1",
"homepage": "http://www.nodebb.org",
"repository": {
"type": "git",
@@ -12,10 +12,16 @@
"scripts": {
"start": "node loader.js",
"lint": "npx eslint --cache ./nodebb .",
"pretest": "npm run lint",
"test": "npx nyc --reporter=html --reporter=text-summary npx mocha",
"coverage": "nyc report --reporter=text-lcov > ./coverage/lcov.info",
"coveralls": "nyc report --reporter=text-lcov | coveralls && rm -r coverage"
},
"nyc": {
"exclude": [
"src/upgrades/*",
"test/*"
]
},
"husky": {
"hooks": {
"pre-commit": "npx lint-staged",
@@ -29,19 +35,22 @@
]
},
"dependencies": {
"@adactive/bootstrap-tagsinput": "^0.8.2",
"ace-builds": "^1.4.9",
"archiver": "^5.0.0",
"async": "^3.2.0",
"autoprefixer": "^10.0.0",
"bcryptjs": "2.4.3",
"benchpressjs": "2.0.4",
"benchpressjs": "2.1.0",
"body-parser": "^1.19.0",
"bootbox": "4.4.0",
"bootstrap": "^3.4.1",
"chart.js": "^2.9.3",
"cli-graph": "^3.2.2",
"clipboard": "^2.0.6",
"colors": "^1.4.0",
"commander": "^6.0.0",
"compare-versions": "3.6.0",
"compression": "^1.7.4",
"connect-ensure-login": "^0.1.1",
"connect-flash": "^0.1.1",
@@ -54,7 +63,7 @@
"cropperjs": "^1.5.6",
"csurf": "^1.11.0",
"daemon": "^1.1.0",
"diff": "^4.0.2",
"diff": "^5.0.0",
"express": "^4.17.1",
"express-session": "^1.17.0",
"express-useragent": "^1.0.13",
@@ -63,8 +72,12 @@
"html-to-text": "^5.1.1",
"ipaddr.js": "^2.0.0",
"jquery": "3.5.1",
"jsesc": "3.0.1",
"json2csv": "5.0.3",
"jquery-deserialize": "2.0.0-rc1",
"jquery-form": "4.3.0",
"jquery-serializeobject": "1.0.0",
"jquery-ui": "1.12.1",
"jsesc": "3.0.2",
"json2csv": "5.0.4",
"jsonwebtoken": "^8.5.1",
"less": "^3.11.1",
"lodash": "^4.17.15",
@@ -73,59 +86,67 @@
"material-design-lite": "^1.3.0",
"mime": "^2.4.4",
"mkdirp": "^1.0.4",
"mongodb": "3.6.2",
"mongodb": "3.6.3",
"morgan": "^1.10.0",
"mousetrap": "^1.6.5",
"@nodebb/bootswatch": "3.4.2",
"@nodebb/mubsub": "1.7.0",
"@nodebb/socket.io-adapter-mongo": "3.1.0",
"@nodebb/mubsub": "1.7.1",
"@nodebb/socket.io-adapter-mongo": "3.1.1",
"nconf": "^0.10.0",
"nodebb-plugin-composer-default": "6.3.57",
"nodebb-plugin-composer-default": "6.4.6",
"nodebb-plugin-dbsearch": "4.1.2",
"nodebb-plugin-emoji": "^3.3.0",
"nodebb-plugin-emoji-android": "2.0.0",
"nodebb-plugin-markdown": "8.12.1",
"nodebb-plugin-mentions": "2.10.0",
"nodebb-plugin-mentions": "2.13.4",
"nodebb-plugin-soundpack-default": "1.0.0",
"nodebb-plugin-spam-be-gone": "0.7.2",
"nodebb-rewards-essentials": "0.1.3",
"nodebb-theme-lavender": "5.0.13",
"nodebb-theme-persona": "10.2.41",
"nodebb-theme-slick": "1.2.34",
"nodebb-theme-vanilla": "11.2.18",
"nodebb-plugin-spam-be-gone": "0.7.3",
"nodebb-rewards-essentials": "0.1.4",
"nodebb-theme-lavender": "5.0.14",
"nodebb-theme-persona": "10.2.67",
"nodebb-theme-slick": "1.2.40",
"nodebb-theme-vanilla": "11.3.0",
"nodebb-widget-essentials": "4.1.2",
"nodemailer": "^6.4.6",
"nprogress": "0.2.0",
"passport": "^0.4.1",
"passport-http-bearer": "^1.0.1",
"passport-local": "1.0.0",
"pg": "^8.0.2",
"pg-cursor": "^2.1.9",
"postcss": "8.0.6",
"postcss": "8.1.7",
"postcss-clean": "1.1.0",
"promise-polyfill": "^8.1.3",
"prompt": "^1.0.0",
"redis": "3.0.2",
"request": "2.88.2",
"request-promise-native": "^1.0.8",
"requirejs": "2.3.6",
"rimraf": "3.0.2",
"rss": "^1.2.2",
"sanitize-html": "^2.0.0",
"semver": "^7.2.1",
"serve-favicon": "^2.5.0",
"sharp": "0.26.1",
"sharp": "0.26.2",
"sitemap": "^6.1.0",
"slideout": "1.0.1",
"socket.io": "2.3.0",
"socket.io-adapter-cluster": "^1.0.1",
"socket.io-adapter-postgres": "^1.2.1",
"socket.io-client": "2.3.0",
"socket.io-client": "2.3.1",
"socket.io-redis": "5.4.0",
"socketio-wildcard": "2.0.0",
"sortablejs": "1.10.2",
"spdx-license-list": "^6.1.0",
"spider-detector": "2.0.0",
"textcomplete": "^0.17.1",
"textcomplete.contenteditable": "^0.1.1",
"timeago": "^1.6.7",
"tinycon": "0.6.8",
"toobusy-js": "^0.5.1",
"uglify-es": "^3.3.9",
"validator": "13.1.17",
"visibilityjs": "2.0.2",
"winston": "3.3.3",
"xml": "^1.0.1",
"xregexp": "^4.3.0",
@@ -133,18 +154,18 @@
},
"devDependencies": {
"@apidevtools/swagger-parser": "10.0.2",
"@commitlint/cli": "9.1.2",
"@commitlint/config-angular": "9.1.2",
"@commitlint/cli": "11.0.0",
"@commitlint/config-angular": "11.0.0",
"coveralls": "3.1.0",
"eslint": "7.10.0",
"eslint-config-airbnb-base": "14.2.0",
"eslint": "7.13.0",
"eslint-config-airbnb-base": "14.2.1",
"eslint-plugin-import": "2.22.1",
"grunt": "1.3.0",
"grunt-contrib-watch": "1.1.0",
"husky": "4.3.0",
"jsdom": "16.4.0",
"lint-staged": "10.4.0",
"mocha": "8.1.3",
"lint-staged": "10.5.1",
"mocha": "8.2.1",
"mocha-lcov-reporter": "1.3.0",
"nyc": "15.1.0",
"smtp-server": "3.7.0"

View File

@@ -1,21 +1,27 @@
'use strict';
var winston = require('winston');
var express = require('express');
var bodyParser = require('body-parser');
var fs = require('fs');
var path = require('path');
var childProcess = require('child_process');
var less = require('less');
var async = require('async');
var uglify = require('uglify-es');
var nconf = require('nconf');
var Benchpress = require('benchpressjs');
const winston = require('winston');
const express = require('express');
const bodyParser = require('body-parser');
const fs = require('fs');
const path = require('path');
const childProcess = require('child_process');
const less = require('less');
const util = require('util');
const lessRenderAsync = util.promisify(
(style, opts, cb) => less.render(String(style), opts, cb)
);
const uglify = require('uglify-es');
const nconf = require('nconf');
var app = express();
var server;
const Benchpress = require('benchpressjs');
const mkdirp = require('mkdirp');
const { paths } = require('../src/constants');
var formats = [
const app = express();
let server;
const formats = [
winston.format.colorize(),
];
@@ -42,50 +48,52 @@ winston.configure({
],
});
var web = module.exports;
const web = module.exports;
var scripts = [
const scripts = [
'node_modules/jquery/dist/jquery.js',
'public/vendor/xregexp/xregexp.js',
'public/vendor/xregexp/unicode/unicode-base.js',
'node_modules/xregexp/xregexp-all.js',
'public/src/modules/slugify.js',
'public/src/utils.js',
'public/src/installer/install.js',
'node_modules/zxcvbn/dist/zxcvbn.js',
];
var installing = false;
var success = false;
var error = false;
var launchUrl;
let installing = false;
let success = false;
let error = false;
let launchUrl;
web.install = function (port) {
const viewsDir = path.join(paths.baseDir, 'build/public/templates');
web.install = async function (port) {
port = port || 4567;
winston.info('Launching web installer on port ' + port);
app.use(express.static('public', {}));
app.engine('tpl', function (filepath, options, callback) {
async.waterfall([
function (next) {
fs.readFile(filepath, 'utf-8', next);
},
function (buffer, next) {
Benchpress.compileParse(buffer.toString(), options, next);
},
], callback);
filepath = filepath.replace(/\.tpl$/, '.js');
Benchpress.__express(filepath, options, callback);
});
app.set('view engine', 'tpl');
app.set('views', path.join(__dirname, '../src/views'));
app.set('views', viewsDir);
app.use(bodyParser.urlencoded({
extended: true,
}));
async.parallel([compileLess, compileJS, copyCSS, loadDefaults], function (err) {
if (err) {
winston.error(err.stack);
}
try {
await Promise.all([
compileTemplate(),
compileLess(),
compileJS(),
copyCSS(),
loadDefaults(),
]);
setupRoutes();
launchExpress(port);
});
} catch (err) {
winston.error(err.stack);
}
};
@@ -180,120 +188,116 @@ function install(req, res) {
});
}
function launch(req, res) {
res.json({});
server.close();
req.setTimeout(0);
var child;
async function launch(req, res) {
try {
res.json({});
server.close();
req.setTimeout(0);
var child;
if (!nconf.get('launchCmd')) {
child = childProcess.spawn('node', ['loader.js'], {
detached: true,
stdio: ['ignore', 'ignore', 'ignore'],
});
if (!nconf.get('launchCmd')) {
child = childProcess.spawn('node', ['loader.js'], {
detached: true,
stdio: ['ignore', 'ignore', 'ignore'],
});
console.log('\nStarting NodeBB');
console.log(' "./nodebb stop" to stop the NodeBB server');
console.log(' "./nodebb log" to view server output');
console.log(' "./nodebb restart" to restart NodeBB');
} else {
// Use launchCmd instead, if specified
child = childProcess.exec(nconf.get('launchCmd'), {
detached: true,
stdio: ['ignore', 'ignore', 'ignore'],
});
}
var filesToDelete = [
'installer.css',
'installer.min.js',
'bootstrap.min.css',
];
async.each(filesToDelete, function (filename, next) {
fs.unlink(path.join(__dirname, '../public', filename), next);
}, function (err) {
if (err) {
winston.warn('Unable to remove installer files');
console.log('\nStarting NodeBB');
console.log(' "./nodebb stop" to stop the NodeBB server');
console.log(' "./nodebb log" to view server output');
console.log(' "./nodebb restart" to restart NodeBB');
} else {
// Use launchCmd instead, if specified
child = childProcess.exec(nconf.get('launchCmd'), {
detached: true,
stdio: ['ignore', 'ignore', 'ignore'],
});
}
const filesToDelete = [
'installer.css',
'installer.min.js',
'bootstrap.min.css',
];
await Promise.all(
filesToDelete.map(
filename => fs.promises.unlink(path.join(__dirname, '../public', filename))
)
);
child.unref();
process.exit(0);
});
}
function compileLess(callback) {
var installSrc = path.join(__dirname, '../public/less/install.less');
fs.readFile(installSrc, function (err, style) {
if (err) {
return winston.error('Unable to read LESS install file: ', err.stack);
}
less.render(style.toString(), {
filename: path.resolve(installSrc),
}, function (err, css) {
if (err) {
return winston.error('Unable to compile LESS: ', err.stack);
}
fs.writeFile(path.join(__dirname, '../public/installer.css'), css.css, callback);
});
});
}
function compileJS(callback) {
var code = '';
async.eachSeries(scripts, function (srcPath, next) {
fs.readFile(path.join(__dirname, '..', srcPath), function (err, buffer) {
if (err) {
return next(err);
}
code += buffer.toString();
next();
});
}, function (err) {
if (err) {
return callback(err);
}
try {
var minified = uglify.minify(code, {
compress: false,
});
if (!minified.code) {
return callback(new Error('[[error:failed-to-minify]]'));
}
fs.writeFile(path.join(__dirname, '../public/installer.min.js'), minified.code, callback);
} catch (e) {
callback(e);
}
});
}
function copyCSS(next) {
async.waterfall([
function (next) {
fs.readFile(path.join(__dirname, '../node_modules/bootstrap/dist/css/bootstrap.min.css'), 'utf8', next);
},
function (src, next) {
fs.writeFile(path.join(__dirname, '../public/bootstrap.min.css'), src, next);
},
], next);
}
function loadDefaults(next) {
var setupDefaultsPath = path.join(__dirname, '../setup.json');
fs.access(setupDefaultsPath, fs.constants.F_OK | fs.constants.R_OK, function (err) {
if (err) {
// setup.json not found or inaccessible, proceed with no defaults
return setImmediate(next);
}
winston.info('[installer] Found setup.json, populating default values');
nconf.file({
file: setupDefaultsPath,
});
next();
} catch (err) {
winston.error(err.stack);
throw err;
}
}
// this is necessary because otherwise the compiled templates won't be available on a clean install
async function compileTemplate() {
const sourceFile = path.join(__dirname, '../src/views/install/index.tpl');
const destTpl = path.join(viewsDir, 'install/index.tpl');
const destJs = path.join(viewsDir, 'install/index.js');
const source = await fs.promises.readFile(sourceFile, 'utf8');
const [compiled] = await Promise.all([
Benchpress.precompile(source),
mkdirp(path.dirname(destJs)),
]);
await Promise.all([
fs.promises.writeFile(destJs, compiled),
fs.promises.writeFile(destTpl, source),
]);
}
async function compileLess() {
try {
const installSrc = path.join(__dirname, '../public/less/install.less');
const style = await fs.promises.readFile(installSrc);
const css = await lessRenderAsync(style, { filename: path.resolve(installSrc) });
await fs.promises.writeFile(path.join(__dirname, '../public/installer.css'), css.css);
} catch (err) {
winston.error('Unable to compile LESS: \n' + err.stack);
throw err;
}
}
async function compileJS() {
let code = '';
for (const srcPath of scripts) {
// eslint-disable-next-line no-await-in-loop
const buffer = await fs.promises.readFile(path.join(__dirname, '..', srcPath));
code += buffer.toString();
}
const minified = uglify.minify(code, {
compress: false,
});
if (!minified.code) {
throw new Error('[[error:failed-to-minify]]');
}
await fs.promises.writeFile(path.join(__dirname, '../public/installer.min.js'), minified.code);
}
async function copyCSS() {
const src = await fs.promises.readFile(
path.join(__dirname, '../node_modules/bootstrap/dist/css/bootstrap.min.css'), 'utf8'
);
await fs.promises.writeFile(path.join(__dirname, '../public/bootstrap.min.css'), src);
}
async function loadDefaults() {
const setupDefaultsPath = path.join(__dirname, '../setup.json');
try {
await fs.promises.access(setupDefaultsPath, fs.constants.F_OK | fs.constants.R_OK);
} catch (err) {
// setup.json not found or inaccessible, proceed with no defaults
if (err.code !== 'ENOENT') {
throw err;
}
}
winston.info('[installer] Found setup.json, populating default values');
nconf.file({
file: setupDefaultsPath,
});
}

View File

@@ -1,6 +1,6 @@
'use strict';
var nconf = require('nconf');
var nconf = require('nconf');
var fs = require('fs');
var url = require('url');
var path = require('path');
@@ -18,7 +18,7 @@ nconf.argv().env().file({
file: pathToConfig,
});
var pidFilePath = path.join(__dirname, 'pidfile');
var pidFilePath = path.join(__dirname, 'pidfile');
var outputLogFilePath = path.join(__dirname, nconf.get('logFile') || 'logs/output.log');

View File

@@ -17,7 +17,7 @@
"jquery": true,
"amd": true,
"browser": true,
"es6": false
"es6": true
},
"rules": {
"block-scoped-var": "off",
@@ -31,12 +31,10 @@
"prefer-template": "off"
},
"parserOptions": {
"ecmaVersion": 5,
"ecmaVersion": 6,
"ecmaFeatures": {
"arrowFunctions": false,
"classes": false,
"defaultParams": false,
"destructuring": false,
"experimentalObjectRestSpread": false,
"blockBindings": false,
"forOf": false,
@@ -50,9 +48,7 @@
"objectLiteralShorthandProperties": false,
"impliedStrict": false,
"restParams": false,
"spread": false,
"superInFunctions": false,
"templateStrings": false
"superInFunctions": false
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 13 KiB

16
public/images/logo.svg Normal file
View File

@@ -0,0 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg" width="321" height="75" viewBox="0 0 321 75">
<defs>
<radialGradient id="nodebb-a" cx="65.599%" cy="0%" r="169.036%" fx="65.599%" fy="0%" gradientTransform="matrix(-.5183 .5916 -.38031 -.80624 .996 -.388)">
<stop offset="0%" stop-color="#2A6CBE"/>
<stop offset="38.688%" stop-color="#2062BC"/>
<stop offset="49.182%" stop-color="#1F5FBC"/>
<stop offset="66.583%" stop-color="#1C5ABD"/>
<stop offset="85.354%" stop-color="#1956BC"/>
<stop offset="100%" stop-color="#1851BE"/>
</radialGradient>
</defs>
<g fill="none" transform="translate(1 1)">
<path fill="#000306" stroke="#000306" stroke-width=".275" d="M195.810017,20 C210.691849,20 221.256813,28.7272272 221.484017,45.845679 C221.490864,46.3615394 221.461776,47.1194739 221.396754,48.1194827 C221.328352,49.1714504 220.455158,49.9897119 219.400969,49.9897119 L179.110557,49.9897119 C179.110557,56.6336943 182.723978,64.2757202 196.378026,64.2757202 C204.088827,64.2757202 211.625406,61.928339 218.987763,57.2335766 L219.553745,56.8677968 C220.246813,56.4139645 221.17656,56.6079034 221.630392,57.3009716 C221.757029,57.4943637 221.837254,57.7144077 221.864806,57.943925 C222.131013,60.1615294 222.004084,61.5832211 221.484017,62.2089999 C220.452051,63.4507301 210.901843,73 196.378026,73 C180.58738,73 169,61.8765432 169,46.3909465 C169,31.3415638 180.019372,20 195.810017,20 Z M162.92733,0 C164.031899,-4.2495073e-16 164.92733,0.8954305 164.92733,2 L164.928075,44.1266361 C164.975781,44.8118124 165,45.5058194 165,46.2079256 C165,61.5334332 153.460581,73 138,73 C122.427386,73 111,61.5334332 111,46.2079256 C111,30.882418 122.427386,19.4158511 138,19.4158511 C144.981278,19.4158511 151.163029,21.7538895 155.843826,25.7295173 L155.843557,4.54188628 C155.843557,2.03347175 157.877029,4.60788274e-16 160.385444,0 L162.92733,0 Z M81,20 C96.4605809,20 108,31.3415638 108,46.5 C108,61.6584362 96.4605809,73 81,73 C65.4273859,73 54,61.6584362 54,46.5 C54,31.3415638 65.4273859,20 81,20 Z M27.324263,20 C41.6099773,20 50,29.1649049 50,41.7801268 L50,67.5 C50,69.4329966 48.4329966,71 46.5,71 L42.2494331,71 C41.1448636,71 40.2494331,70.1045695 40.2494331,69 L40.2494331,42.5348837 C40.2494331,34.3403805 35.8276644,28.6257928 26.3038549,28.6257928 C10.0816327,28.6257928 9.75718821,35.7795705 9.75069932,44.6831843 L9.75056689,71 L2,71 C0.8954305,71 1.3527075e-16,70.1045695 0,69 L0,35.2932975 L0,35.2932975 C0,24.3935718 19.1609977,20 27.324263,20 Z M81,28.7242798 C70.8049793,28.7242798 63.6348548,36.4670782 63.6348548,46.5 C63.6348548,56.3148148 70.8049793,64.2757202 81,64.2757202 C91.1950207,64.2757202 98.3651452,56.3148148 98.3651452,46.5 C98.3651452,36.4670782 91.1950207,28.7242798 81,28.7242798 Z M138,28.2362872 C127.804979,28.2362872 120.634855,36.0644241 120.634855,46.2079256 C120.634855,56.1309161 127.804979,64.179564 138,64.179564 C148.195021,64.179564 155.365145,56.1309161 155.365145,46.2079256 C155.365145,36.0644241 148.195021,28.2362872 138,28.2362872 Z M195.810017,28.7242798 C186.721876,28.7242798 180.473779,33.9588477 179.224159,41.8106996 L211.259858,41.8106996 C210.010238,33.9588477 204.443752,28.7242798 195.810017,28.7242798 Z"/>
<path fill="url(#nodebb-a)" d="M277,19 L276.999615,57.7303365 C276.99251,64.180962 276.88949,68.6242617 276.88949,73 L276.88949,73 L255.649055,73 C242.962262,73 236,67.06 236,57.7257143 C236,51.4771429 239.558488,46.9257143 245.1283,45.0742857 C240.564149,43.1457143 237.779243,38.8257143 237.779243,33.5028571 C237.779243,24.8628571 244.664149,19 256.732074,19 L256.732074,19 L277,19 Z M299.267926,19 C311.335851,19 318.220757,24.8628571 318.220757,33.5028571 C318.220757,38.8257143 315.435851,43.1457143 310.8717,45.0742857 C316.441512,46.9257143 320,51.4771429 320,57.7257143 C320,67.06 313.037738,73 300.350945,73 L279.11051,73 L279.11051,73 C279.11051,68.6242617 279.00749,64.180962 279.000385,57.7303365 L279,19 L299.267926,19 Z M266.092452,49.8571429 L256.499999,49.8571429 C250.156602,49.8571429 246.984904,52.2485714 246.984904,56.9542857 C246.984904,61.8914286 249.924527,64.36 255.726414,64.36 L255.726414,64.36 L260.754716,64.36 C264.777358,64.36 266.092452,62.4314286 266.092452,56.5685714 L266.092452,56.5685714 L266.092452,49.8571429 Z M299.500001,49.8571429 L289.907548,49.8571429 L289.907548,56.5685714 C289.907548,62.4314286 291.222642,64.36 295.245284,64.36 L300.273586,64.36 C306.075473,64.36 309.015096,61.8914286 309.015096,56.9542857 C309.015096,52.2485714 305.843398,49.8571429 299.500001,49.8571429 Z M266.169811,27.64 L257.350942,27.64 C251.703772,27.64 248.764149,30.1857143 248.764149,34.5057143 C248.764149,38.8257143 251.703772,41.3714286 257.350942,41.3714286 L257.350942,41.3714286 L266.169811,41.3714286 L266.169811,27.64 Z M298.649058,27.64 L289.830189,27.64 L289.830189,41.3714286 L298.649058,41.3714286 C304.296228,41.3714286 307.235851,38.8257143 307.235851,34.5057143 C307.235851,30.1857143 304.296228,27.64 298.649058,27.64 Z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

BIN
public/images/logo@3x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
public/images/touch/144.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

BIN
public/images/touch/192.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

BIN
public/images/touch/36.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
public/images/touch/48.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
public/images/touch/512.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
public/images/touch/72.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

BIN
public/images/touch/96.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@@ -1,11 +1,6 @@
{
"post-cache": "التخزين المؤقت للمشاركات",
"posts-in-cache": "المشاركات المخزنة مؤقتاً",
"average-post-size": "متوسط ​​حجم المشاركة",
"length-to-max": "الطول / أقصى حد",
"percent-full": "1% كاملة",
"post-cache-size": "حجم التخزين المؤقت للمشاركات",
"items-in-cache": "العناصر في التخزين المؤقت",
"control-panel": "لوحة التحكم",
"update-settings": "تحديث إعدادات التخزين المؤقت"
"items-in-cache": "العناصر في التخزين المؤقت"
}

View File

@@ -1,4 +1,5 @@
{
"trending": "Trending",
"installed": "منصبة",
"active": "مفعلة",
"inactive": "معطلة",

View File

@@ -48,5 +48,6 @@
"alert.confirm-copyToAllGroup": "Are you sure you wish to apply this group's privilege set to <strong>all categories</strong>?",
"alert.confirm-copyToChildren": "Are you sure you wish to apply this privilege set to <strong>all descendant (child) categories</strong>?",
"alert.confirm-copyToChildrenGroup": "Are you sure you wish to apply this group's privilege set to <strong>all descendant (child) categories</strong>?",
"alert.no-undo": "<em>This action cannot be undone.</em>"
"alert.no-undo": "<em>This action cannot be undone.</em>",
"alert.admin-warning": "Administrators implicitly get all privileges"
}

View File

@@ -20,16 +20,10 @@
"add-group": "Add Group",
"invite": "Invite",
"new": "New User",
"pills.latest": "Latest Users",
"filter-by": "Filter by",
"pills.unvalidated": "Not Validated",
"pills.no-posts": "No Posts",
"pills.top-posters": "Top Posters",
"pills.top-rep": "Most Reputation",
"pills.inactive": "Inactive",
"pills.flagged": "Most Flagged",
"pills.validated": "Validated",
"pills.banned": "Banned",
"pills.search": "User Search",
"50-per-page": "50 per page",
"100-per-page": "100 per page",

View File

@@ -32,5 +32,12 @@
"sockets.settings": "WebSocket Settings",
"sockets.max-attempts": "Max Reconnection Attempts",
"sockets.default-placeholder": "Default: %1",
"sockets.delay": "Reconnection Delay"
"sockets.delay": "Reconnection Delay",
"analytics.settings": "Analytics Settings",
"analytics.max-cache": "Analytics Cache Max Value",
"analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)",
"compression.settings": "Compression Settings",
"compression.enable": "Enable Compression",
"compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes."
}

View File

@@ -0,0 +1,12 @@
{
"tokens": "Tokens",
"lead-text": "From this page you can configure access to the Write API in NodeBB.",
"intro": "By default, the Write API authenticates users based on their session cookie, but NodeBB also supports Bearer authentication via tokens generated via this page.",
"docs": "Click here to access the full API specification",
"uid": "User ID",
"uid-help-text": "Specify a User ID to associate with this token. If the user ID is <code>0</code>, it will be considered a <em>master</em> token, which can assume the identity of other users based on the <code>_uid</code> parameter",
"description": "Description",
"no-description": "No description specified.",
"token-on-save": "Token will be generated once form is saved"
}

View File

@@ -6,6 +6,7 @@
"max-length": "Maximum length of chat messages",
"max-room-size": "Maximum number of users in chat rooms",
"delay": "Time between chat messages in milliseconds",
"notification-delay": "Notification delay for chat messages. (0 for no delay)",
"restrictions.seconds-edit-after": "Number of seconds a chat message will remain editable. (0 disabled)",
"restrictions.seconds-delete-after": "Number of seconds a chat message will remain deletable. (0 disabled)"
}

View File

@@ -8,5 +8,6 @@
"consent.blank-localised-default": "Leave blank to use NodeBB localised defaults",
"settings": "Settings",
"cookie-domain": "Session cookie domain",
"max-user-sessions": "Max active sessions per user",
"blank-default": "Leave blank for default"
}

View File

@@ -27,9 +27,12 @@
"log.alt-text-placeholder": "Alternative text for accessibility",
"favicon": "صورة المفضله",
"favicon.upload": "رفع",
"touch-icon": "Homescreen/Touch Icon",
"pwa": "Progressive Web App",
"touch-icon": "Touch Icon",
"touch-icon.upload": "رفع",
"touch-icon.help": "Recommended size and format: 192x192, PNG format only. If no touch icon is specified, NodeBB will fall back to using the favicon.",
"touch-icon.help": "Recommended size and format: 512x512, PNG format only. If no touch icon is specified, NodeBB will fall back to using the favicon.",
"maskable-icon": "Maskable (Homescreen) Icon",
"maskable-icon.help": "Recommended size and format: 512x512, PNG format only. If no maskable icon is specified, NodeBB will fall back to the Touch Icon.",
"outgoing-links": "Outgoing Links",
"outgoing-links.warning-page": "Use Outgoing Links Warning Page",
"search-default-sort-by": "الترتيب الافتراضي للبحث",
@@ -38,4 +41,4 @@
"theme-color": "لون الثيم",
"background-color": "لون الخلفية",
"background-color-help": "Color used for splash screen background when website is installed as a PWA"
}
}

View File

@@ -1,5 +1,7 @@
{
"handles": "Guest Handles",
"handles.enabled": "Allow guest handles",
"handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\""
"handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"",
"topic-views": "Topic views",
"topic-views.enabled": "Allow guests to increase topic view counts"
}

View File

@@ -34,6 +34,8 @@
"timestamp.cut-off-help": "Dates &amp; times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).<br /><em>(Default: <code>30</code>, or one month). Set to 0 to always display dates, leave blank to always display relative times.</em>",
"timestamp.necro-threshold": "Necro Threshold (in days)",
"timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: <code>7</code>, or one week). Set to 0 to disable.</em>",
"timestamp.topic-views-interval": "Increment topic views interval (in minutes)",
"timestamp.topic-views-interval-help": "Topic views will only increment once every X minutes as defined by this setting.",
"teaser": "Teaser Post",
"teaser.last-post": "Last &ndash; Show the latest post, including the original post, if no replies",
"teaser.last-reply": "Last &ndash; Show the latest reply, or a \"No replies\" placeholder if no replies",

View File

@@ -21,6 +21,8 @@
"reset.notify.text1": "نحيطك علما أن كلمة مرورك قد تم تغييرها في %1",
"reset.notify.text2": "إن لم يكن لديك علم بهذا، المرجو إشعار مدبر النظام بأسرع مايمكن.",
"digest.latest_topics": "آخر المستجدات من %1",
"digest.top-topics": "Top topics from %1",
"digest.popular-topics": "Popular topics from %1",
"digest.cta": "انقر هنا لمشاهدة %1",
"digest.unsub.info": "تم إرسال هذا الإشعار بآخر المستجدات وفقا لخيارات تسجيلكم.",
"digest.day": "يوم",

View File

@@ -44,5 +44,6 @@
"search-preferences-saved": "تم حفظ تفضيلات البحث",
"search-preferences-cleared": "تم ازالة تفضيلات البحث",
"show-results-as": "عرض النتائج كـ",
"see-more-results": "See more results (%1)"
"see-more-results": "See more results (%1)",
"search-in-category": "Search in \"%1\""
}

View File

@@ -79,7 +79,9 @@
"thread_tools.purge_confirm": "هل أنت متأكد أنك تريد تطهير هذا الموضوع؟",
"thread_tools.merge_topics": "Merge Topics",
"thread_tools.merge": "Merge",
"topic_move_success": "This topic will be moved shortly. Click here to undo.",
"topic_move_success": "This topic will be moved to \"%1\" shortly. Click here to undo.",
"topic_move_multiple_success": "These topics will be moved to \"%1\" shortly. Click here to undo.",
"topic_move_all_success": "All topics will be moved to \"%1\" shortly. Click here to undo.",
"topic_move_undone": "Topic move undone",
"topic_move_posts_success": "Posts will be moved shortly. Click here to undo.",
"topic_move_posts_undone": "Post move undone",

View File

@@ -1,11 +1,6 @@
{
"post-cache": "Кеш за публикации",
"posts-in-cache": "Публикации в кеша",
"average-post-size": "Среден обем на публикация",
"length-to-max": "Дължина / максимум",
"percent-full": "Запълненост: %1%",
"post-cache-size": "Размер на кеша за публикации",
"items-in-cache": "Елементи в кеша",
"control-panel": "Контролен панел",
"update-settings": "Обновяване на настройките на кеша"
"items-in-cache": "Елементи в кеша"
}

View File

@@ -1,4 +1,5 @@
{
"trending": "Популярни",
"installed": "Инсталирани",
"active": "Включени",
"inactive": "Изключени",

View File

@@ -48,5 +48,6 @@
"alert.confirm-copyToAllGroup": "Наистина ли искате да приложите набора от правомощия на таи група към <strong>всички категории</strong>?",
"alert.confirm-copyToChildren": "Наистина ли искате да приложите този набор от правомощия към <strong>всички по-долни (дъщерни) категории</strong>?",
"alert.confirm-copyToChildrenGroup": "Наистина ли искате да приложите набора от правомощия на таи група към <strong>всички по-долни (дъщерни) категории</strong>?",
"alert.no-undo": "<em>Това действие е необратимо.</em>"
"alert.no-undo": "<em>Това действие е необратимо.</em>",
"alert.admin-warning": "Администраторите имат всички правомощия по подразбиране"
}

View File

@@ -20,16 +20,10 @@
"add-group": "Добавяне на група",
"invite": "Покана",
"new": "Нов потребител",
"pills.latest": "Последни потребители",
"filter-by": "Филтриране по",
"pills.unvalidated": "Няма потвърдена е-поща",
"pills.no-posts": "Няма публикации",
"pills.top-posters": "С най-много публикации",
"pills.top-rep": "С най-много репутация",
"pills.inactive": "Недеен",
"pills.flagged": "С най-много доклади",
"pills.validated": "Потвърдена",
"pills.banned": "Блокиран",
"pills.search": "Търсене на потребители",
"50-per-page": "50 на страница",
"100-per-page": "100 на страница",

View File

@@ -32,5 +32,12 @@
"sockets.settings": "Настройки за WebSocket",
"sockets.max-attempts": "Максимален брой опити за повторно свързване",
"sockets.default-placeholder": "По подразбиране: %1",
"sockets.delay": "Забавяне при повторно свързване"
"sockets.delay": "Забавяне при повторно свързване",
"analytics.settings": "Настройки за анализите",
"analytics.max-cache": "Макс. стойност на кеша за анализите",
"analytics.max-cache-help": "При инсталации с натоварен трафик, кешът може да бъде изразходен, ако има повече едновременни потребители, от колкото е максималната стойност на кеша. (Изисква рестартиране)",
"compression.settings": "Настройки за компресирането",
"compression.enable": "Включване на компресирането",
"compression.help": "Тази настройка включва компресирането чрез „gzip“. За натоварени уеб сайтове най-добрият начин за използване на компресия е тя да се случва на нивото на обратния сървър-посредник (reverse proxy). Но с цел тестване, можете да го включите и тук."
}

View File

@@ -0,0 +1,12 @@
{
"tokens": "Кодове",
"lead-text": "На тази страница можете да настроите достъпа до ППИ за писане в NodeBB.",
"intro": "По подразбиране ППИ за писане удостоверява потребителите чрез бисквитката им за сесията, но NodeBB поддържа и удостоверяване чрез метода „Bearer“, използвайки кодовете от тази страница.",
"docs": "Щракнете тук за достъп до пълната документация на ППИ",
"uid": "Потребителски ИД",
"uid-help-text": "Посочете потребителски ИД, който да бъде свързан с този код. Ако ИД е <code>0</code>, това ще се счита за <em>главен</em> код, който може да приема идентичността на всеки от другите потребители чрез параметъра <code>_uid</code>",
"description": "Описание",
"no-description": "Няма описание.",
"token-on-save": "Кодът ще бъде създаден след като данните бъдат запазени"
}

View File

@@ -5,7 +5,8 @@
"disable-editing-help": "Това ограничение не засяга администраторите и глобалните модератори",
"max-length": "Максимална дължина на съобщенията в разговорите",
"max-room-size": "Максимален брой потребители в стая за разговор",
"delay": "Време между съобщеният в разговорите (в милисекунди)",
"delay": "Време между съобщенията в разговорите (в милисекунди)",
"notification-delay": "Забавяне преди известяване за съобщения в разговорите. (0 без забавяне)",
"restrictions.seconds-edit-after": "Брой секунди, през които съобщенията в разговор могат да бъдат редактирани. (0 = изключено)",
"restrictions.seconds-delete-after": "Брой секунди, през които съобщенията в разговор могат да бъдат изтривани. (0 = изключено)"
}

View File

@@ -8,5 +8,6 @@
"consent.blank-localised-default": "Оставете това празно, за да използвате данните по подразбиране на NodeBB, които са преведени",
"settings": "Настройки",
"cookie-domain": "Домейн на бисквитката за сесията",
"max-user-sessions": "Максимален брой активни сесии за потребител",
"blank-default": "Оставете празно, за да използвате стойността по подразбиране"
}

View File

@@ -27,9 +27,12 @@
"log.alt-text-placeholder": "Алтернативен текст за достъпност",
"favicon": "Иконка на уеб сайта",
"favicon.upload": "Качване",
"touch-icon": "Иконка за начален екран (мобилно устройство)",
"pwa": "Прогресивно уеб-приложение",
"touch-icon": "Иконка за сензорен екран",
"touch-icon.upload": "Качване",
"touch-icon.help": "Препоръчителен размер и формат: 192x192, само във формат „PNG“. Ако не е посочена иконка за начален екран на мобилно устройство, NodeBB ще използва иконката на уеб сайта.",
"touch-icon.help": "Препоръчителен размер и формат: 512x512, само във формат „PNG“. Ако не е посочена иконка за сензорен екран, NodeBB ще използва иконката на уеб сайта.",
"maskable-icon": "Маскируема иконка (за начален екран)",
"maskable-icon.help": "Препоръчителен размер и формат: 512x512, само във формат „PNG“. Ако не е посочена маскируема иконка, NodeBB ще използва иконката за сензорен екран.",
"outgoing-links": "Изходящи връзки",
"outgoing-links.warning-page": "Показване на предупредителна страница при щракване върху външни връзки",
"search-default-sort-by": "Подредба по подразбиране при търсене",
@@ -38,4 +41,4 @@
"theme-color": "Цвят на темата",
"background-color": "Фонов цвят",
"background-color-help": "Цвят, който да се използва като фон за началния екран, когато уеб сайтът е инсталиран като приложение"
}
}

View File

@@ -1,5 +1,7 @@
{
"handles": "Имена за гостите",
"handles.enabled": "Позволяване на имената за гостите",
"handles.enabled-help": "Тази възможност предоставя ново поле, което позволява на гостите да си изберат име, което да се използва за всяка публикация, която правят. Ако е изключено, всички те просто ще имат името „Гост“."
"handles.enabled-help": "Тази възможност предоставя ново поле, което позволява на гостите да си изберат име, което да се използва за всяка публикация, която правят. Ако е изключено, всички те просто ще имат името „Гост“.",
"topic-views": "Преглеждания на темите",
"topic-views.enabled": "Гостите да допринасят за броя на преглеждания на темите"
}

View File

@@ -34,6 +34,8 @@
"timestamp.cut-off-help": "Датите и времената ще бъдат показвани относително (напр. „преди 3 часа“ или „преди 5 дни“), и преведени на множество\n\\t\\t\\t\\t\\tезици. След определено време, този текст ще започне да показва самите дата и час, според езика на потребителя\n\\t\\t\\t\\t\\t(напр. „5 ноември 2016 15:30“).<br /><em>(По подразбиране: <code>30</code>, тоест един месец). Ако зададете 0, винаги ще се изписват дати, а ако оставите полето празно, времето ще бъде винаги относително.</em>",
"timestamp.necro-threshold": "Мъртва граница (в дни)",
"timestamp.necro-threshold-help": "Между публикациите ще бъде показано съобщение, ако времето между тях е по-дълго от мъртвата граница. (По подразбиране: <code>7</code>, или една седмица). Задайте 0 за изключване.</em>",
"timestamp.topic-views-interval": "Интервал за увеличаване на броя на преглеждания на темите (в минути)",
"timestamp.topic-views-interval-help": "Броят на преглеждания на темите ще се увеличава веднъж на всеки Х минути, според тази настройка.",
"teaser": "Представителна публикация",
"teaser.last-post": "Последната &ndash; Показване на последната публикация, или първоначалната такава, ако няма отговори.",
"teaser.last-reply": "Последната &ndash; Показване на последния отговор, или „Няма отговори“, ако все още няма такива.",

View File

@@ -21,6 +21,8 @@
"reset.notify.text1": "Известяваме Ви, че на %1, Вашата парола беше променена успешно.",
"reset.notify.text2": "Ако не сте поискали това, моля, свържете се незабавно с администратор.",
"digest.latest_topics": "Последни теми от %1",
"digest.top-topics": "Най-интересните теми от %1",
"digest.popular-topics": "Популярни теми от %1",
"digest.cta": "Натиснете тук, за да посетите %1",
"digest.unsub.info": "Това резюме беше изпратено до Вас поради настройките Ви за абонаментите.",
"digest.day": "ден",

View File

@@ -44,5 +44,6 @@
"search-preferences-saved": "Предпочитанията за търсене бяха запазени",
"search-preferences-cleared": "Предпочитанията за търсене бяха изчистени",
"show-results-as": "Показване на резултатите като",
"see-more-results": "Показване на още резултати (%1)"
"see-more-results": "Показване на още резултати (%1)",
"search-in-category": "Търсене в „%1“"
}

View File

@@ -79,7 +79,9 @@
"thread_tools.purge_confirm": "Наистина ли искате да изчистите тази тема?",
"thread_tools.merge_topics": "Сливане на темите",
"thread_tools.merge": "Сливане",
"topic_move_success": "Темата ще бъде преместена след малко. Натиснете тук, за да отмените преместването.",
"topic_move_success": "Темата ще бъде преместена в „%1“ след малко. Натиснете тук, за да отмените преместването.",
"topic_move_multiple_success": "Темите ще бъдат преместени в „%1“ след малко. Натиснете тук, за да отмените преместването.",
"topic_move_all_success": "Всички теми ще бъдат преместени в „%1“ след малко. Натиснете тук, за да отмените преместването.",
"topic_move_undone": "Преместването на темата беше отменено",
"topic_move_posts_success": "Публикациите ще бъдат преместени след малко. Натиснете тук, за да отмените преместването.",
"topic_move_posts_undone": "Преместването на публикациите беше отменено",

View File

@@ -1,11 +1,6 @@
{
"post-cache": "Post Cache",
"posts-in-cache": "Posts in Cache",
"average-post-size": "Average Post Size",
"length-to-max": "Length / Max",
"percent-full": "%1% Full",
"post-cache-size": "Post Cache Size",
"items-in-cache": "Items in Cache",
"control-panel": "Control Panel",
"update-settings": "Update Cache Settings"
"items-in-cache": "Items in Cache"
}

View File

@@ -1,4 +1,5 @@
{
"trending": "Trending",
"installed": "Installed",
"active": "Active",
"inactive": "Inactive",

View File

@@ -48,5 +48,6 @@
"alert.confirm-copyToAllGroup": "Are you sure you wish to apply this group's privilege set to <strong>all categories</strong>?",
"alert.confirm-copyToChildren": "Are you sure you wish to apply this privilege set to <strong>all descendant (child) categories</strong>?",
"alert.confirm-copyToChildrenGroup": "Are you sure you wish to apply this group's privilege set to <strong>all descendant (child) categories</strong>?",
"alert.no-undo": "<em>This action cannot be undone.</em>"
"alert.no-undo": "<em>This action cannot be undone.</em>",
"alert.admin-warning": "Administrators implicitly get all privileges"
}

View File

@@ -20,16 +20,10 @@
"add-group": "Add Group",
"invite": "Invite",
"new": "New User",
"pills.latest": "Latest Users",
"filter-by": "Filter by",
"pills.unvalidated": "Not Validated",
"pills.no-posts": "No Posts",
"pills.top-posters": "Top Posters",
"pills.top-rep": "Most Reputation",
"pills.inactive": "Inactive",
"pills.flagged": "Most Flagged",
"pills.validated": "Validated",
"pills.banned": "Banned",
"pills.search": "User Search",
"50-per-page": "50 per page",
"100-per-page": "100 per page",

View File

@@ -32,5 +32,12 @@
"sockets.settings": "WebSocket Settings",
"sockets.max-attempts": "Max Reconnection Attempts",
"sockets.default-placeholder": "Default: %1",
"sockets.delay": "Reconnection Delay"
"sockets.delay": "Reconnection Delay",
"analytics.settings": "Analytics Settings",
"analytics.max-cache": "Analytics Cache Max Value",
"analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)",
"compression.settings": "Compression Settings",
"compression.enable": "Enable Compression",
"compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes."
}

View File

@@ -0,0 +1,12 @@
{
"tokens": "Tokens",
"lead-text": "From this page you can configure access to the Write API in NodeBB.",
"intro": "By default, the Write API authenticates users based on their session cookie, but NodeBB also supports Bearer authentication via tokens generated via this page.",
"docs": "Click here to access the full API specification",
"uid": "User ID",
"uid-help-text": "Specify a User ID to associate with this token. If the user ID is <code>0</code>, it will be considered a <em>master</em> token, which can assume the identity of other users based on the <code>_uid</code> parameter",
"description": "Description",
"no-description": "No description specified.",
"token-on-save": "Token will be generated once form is saved"
}

View File

@@ -6,6 +6,7 @@
"max-length": "Maximum length of chat messages",
"max-room-size": "Maximum number of users in chat rooms",
"delay": "Time between chat messages in milliseconds",
"notification-delay": "Notification delay for chat messages. (0 for no delay)",
"restrictions.seconds-edit-after": "Number of seconds a chat message will remain editable. (0 disabled)",
"restrictions.seconds-delete-after": "Number of seconds a chat message will remain deletable. (0 disabled)"
}

View File

@@ -8,5 +8,6 @@
"consent.blank-localised-default": "Leave blank to use NodeBB localised defaults",
"settings": "Settings",
"cookie-domain": "Session cookie domain",
"max-user-sessions": "Max active sessions per user",
"blank-default": "Leave blank for default"
}

View File

@@ -27,9 +27,12 @@
"log.alt-text-placeholder": "Alternative text for accessibility",
"favicon": "Favicon",
"favicon.upload": "Upload",
"touch-icon": "Homescreen/Touch Icon",
"pwa": "Progressive Web App",
"touch-icon": "Touch Icon",
"touch-icon.upload": "Upload",
"touch-icon.help": "Recommended size and format: 192x192, PNG format only. If no touch icon is specified, NodeBB will fall back to using the favicon.",
"touch-icon.help": "Recommended size and format: 512x512, PNG format only. If no touch icon is specified, NodeBB will fall back to using the favicon.",
"maskable-icon": "Maskable (Homescreen) Icon",
"maskable-icon.help": "Recommended size and format: 512x512, PNG format only. If no maskable icon is specified, NodeBB will fall back to the Touch Icon.",
"outgoing-links": "Outgoing Links",
"outgoing-links.warning-page": "Use Outgoing Links Warning Page",
"search-default-sort-by": "Search default sort by",
@@ -38,4 +41,4 @@
"theme-color": "Theme Color",
"background-color": "Background Color",
"background-color-help": "Color used for splash screen background when website is installed as a PWA"
}
}

View File

@@ -1,5 +1,7 @@
{
"handles": "Guest Handles",
"handles.enabled": "Allow guest handles",
"handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\""
"handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"",
"topic-views": "Topic views",
"topic-views.enabled": "Allow guests to increase topic view counts"
}

View File

@@ -34,6 +34,8 @@
"timestamp.cut-off-help": "Dates &amp; times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).<br /><em>(Default: <code>30</code>, or one month). Set to 0 to always display dates, leave blank to always display relative times.</em>",
"timestamp.necro-threshold": "Necro Threshold (in days)",
"timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: <code>7</code>, or one week). Set to 0 to disable.</em>",
"timestamp.topic-views-interval": "Increment topic views interval (in minutes)",
"timestamp.topic-views-interval-help": "Topic views will only increment once every X minutes as defined by this setting.",
"teaser": "Teaser Post",
"teaser.last-post": "Last &ndash; Show the latest post, including the original post, if no replies",
"teaser.last-reply": "Last &ndash; Show the latest reply, or a \"No replies\" placeholder if no replies",

View File

@@ -21,6 +21,8 @@
"reset.notify.text1": "আপনাকে জানাচ্ছি যে %1 এ আপনার পাসওয়ার্ড পরিবর্তন হয়েছে",
"reset.notify.text2": "এটা আপনার অজান্তে হলে এখনই প্রশাসককে আবহিত করুন",
"digest.latest_topics": "%1 এর সর্বশেষ টপিকসমূহ",
"digest.top-topics": "Top topics from %1",
"digest.popular-topics": "Popular topics from %1",
"digest.cta": "%1 ভিজিট করতে এখানে ক্লিক করুন",
"digest.unsub.info": "আপনার সাবস্ক্রীপশন সেটিংসের কারনে আপনাকে এই ডাইজেষ্টটি পাঠানো হয়েছে।",
"digest.day": "দিন",

View File

@@ -44,5 +44,6 @@
"search-preferences-saved": "Search preferences saved",
"search-preferences-cleared": "Search preferences cleared",
"show-results-as": "ফলাফল দেখানো হোক : ",
"see-more-results": "See more results (%1)"
"see-more-results": "See more results (%1)",
"search-in-category": "Search in \"%1\""
}

View File

@@ -79,7 +79,9 @@
"thread_tools.purge_confirm": "আপনি নিশ্চিত যে আপনি টপিকটি পার্জ করতে চাচ্ছেন ? ",
"thread_tools.merge_topics": "Merge Topics",
"thread_tools.merge": "Merge",
"topic_move_success": "This topic will be moved shortly. Click here to undo.",
"topic_move_success": "This topic will be moved to \"%1\" shortly. Click here to undo.",
"topic_move_multiple_success": "These topics will be moved to \"%1\" shortly. Click here to undo.",
"topic_move_all_success": "All topics will be moved to \"%1\" shortly. Click here to undo.",
"topic_move_undone": "Topic move undone",
"topic_move_posts_success": "Posts will be moved shortly. Click here to undo.",
"topic_move_posts_undone": "Post move undone",

View File

@@ -1,11 +1,6 @@
{
"post-cache": "Mezipaměť příspěvku",
"posts-in-cache": "Příspěvků v mezipaměti",
"average-post-size": "Průměrná velikost příspěvku",
"length-to-max": "Délka / Maximum",
"percent-full": "%1% plný",
"post-cache-size": "Velikost mezipaměti příspěvku",
"items-in-cache": "Položek v mezipaměti",
"control-panel": "Ovládací panel",
"update-settings": "Aktualizovat nastavení mezipaměti"
"items-in-cache": "Položek v mezipaměti"
}

View File

@@ -1,4 +1,5 @@
{
"trending": "Trending",
"installed": "Nainstalováno",
"active": "Aktivní",
"inactive": "Neaktivní",

View File

@@ -48,5 +48,6 @@
"alert.confirm-copyToAllGroup": "Are you sure you wish to apply this group's privilege set to <strong>all categories</strong>?",
"alert.confirm-copyToChildren": "Are you sure you wish to apply this privilege set to <strong>all descendant (child) categories</strong>?",
"alert.confirm-copyToChildrenGroup": "Are you sure you wish to apply this group's privilege set to <strong>all descendant (child) categories</strong>?",
"alert.no-undo": "<em>This action cannot be undone.</em>"
"alert.no-undo": "<em>This action cannot be undone.</em>",
"alert.admin-warning": "Administrators implicitly get all privileges"
}

View File

@@ -20,16 +20,10 @@
"add-group": "Přidat skupinu",
"invite": "Pozvat",
"new": "Nový uživatel",
"pills.latest": "Poslední uživatelé",
"filter-by": "Filter by",
"pills.unvalidated": "Neověřeno",
"pills.no-posts": "Žádné příspěvky",
"pills.top-posters": "Nejvíce příspěvků",
"pills.top-rep": "Nejvíce reputace",
"pills.inactive": "Neaktivní",
"pills.flagged": "Nejoznačovanější",
"pills.validated": "Validated",
"pills.banned": "Zakázán",
"pills.search": "Hledat uživatele",
"50-per-page": "50 na stránku",
"100-per-page": "100 na stránku",

View File

@@ -32,5 +32,12 @@
"sockets.settings": "WebSocket Settings",
"sockets.max-attempts": "Max Reconnection Attempts",
"sockets.default-placeholder": "Default: %1",
"sockets.delay": "Reconnection Delay"
"sockets.delay": "Reconnection Delay",
"analytics.settings": "Analytics Settings",
"analytics.max-cache": "Analytics Cache Max Value",
"analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)",
"compression.settings": "Compression Settings",
"compression.enable": "Enable Compression",
"compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes."
}

View File

@@ -0,0 +1,12 @@
{
"tokens": "Tokens",
"lead-text": "From this page you can configure access to the Write API in NodeBB.",
"intro": "By default, the Write API authenticates users based on their session cookie, but NodeBB also supports Bearer authentication via tokens generated via this page.",
"docs": "Click here to access the full API specification",
"uid": "User ID",
"uid-help-text": "Specify a User ID to associate with this token. If the user ID is <code>0</code>, it will be considered a <em>master</em> token, which can assume the identity of other users based on the <code>_uid</code> parameter",
"description": "Description",
"no-description": "No description specified.",
"token-on-save": "Token will be generated once form is saved"
}

View File

@@ -6,6 +6,7 @@
"max-length": "Maximální délka konverzační zprávy",
"max-room-size": "Maximální počet uživatelů v konverzační místnosti",
"delay": "Čas mezi konverzačními zprávami v milisekundách",
"notification-delay": "Notification delay for chat messages. (0 for no delay)",
"restrictions.seconds-edit-after": "Počet sekund, kdy může být ještě konverzační zpráva upravena (pro zakázání - 0)",
"restrictions.seconds-delete-after": "Počet sekund, kdy může být ještě konverzační zpráva odstraněna (pro zakázání - 0)"
}

View File

@@ -8,5 +8,6 @@
"consent.blank-localised-default": "Pro použití výchozího textu NodeBB, zanechte prázdné",
"settings": "Nastavení",
"cookie-domain": "Doména relace cookies",
"max-user-sessions": "Max active sessions per user",
"blank-default": "Pro výchozí, zanechte prázdné"
}

View File

@@ -27,9 +27,12 @@
"log.alt-text-placeholder": "Alternativní text pro přístupnost",
"favicon": "Ikonka (favicon)",
"favicon.upload": "Nahrát",
"touch-icon": "Ikonka domovské obrazovky/dotyková",
"pwa": "Progressive Web App",
"touch-icon": "Touch Icon",
"touch-icon.upload": "Nahrát",
"touch-icon.help": "Doporučená velikost a formát je: jen v *.png 192x192. Nebude-li určena dotyková ikona, NodeBB nepoužije žádnou z ikon (favicon).",
"touch-icon.help": "Recommended size and format: 512x512, PNG format only. If no touch icon is specified, NodeBB will fall back to using the favicon.",
"maskable-icon": "Maskable (Homescreen) Icon",
"maskable-icon.help": "Recommended size and format: 512x512, PNG format only. If no maskable icon is specified, NodeBB will fall back to the Touch Icon.",
"outgoing-links": "Odchozí odkazy",
"outgoing-links.warning-page": "Použít stránku s upozorněním při odchozích odkazech",
"search-default-sort-by": "Výchozí třídění při hledání",
@@ -38,4 +41,4 @@
"theme-color": "Theme Color",
"background-color": "Background Color",
"background-color-help": "Color used for splash screen background when website is installed as a PWA"
}
}

View File

@@ -1,5 +1,7 @@
{
"handles": "Zacházení s hosty",
"handles.enabled": "Povolit upravení zacházení s hosty",
"handles.enabled-help": "Tato možnost odkryje nové pole, které umožňuje hostům vybrat jméno, které se připojí ke každému příspěvku, který vytvoří. Bude-li zakázáno, budou jednoduše nazýváni „Host”"
"handles.enabled-help": "Tato možnost odkryje nové pole, které umožňuje hostům vybrat jméno, které se připojí ke každému příspěvku, který vytvoří. Bude-li zakázáno, budou jednoduše nazýváni „Host”",
"topic-views": "Topic views",
"topic-views.enabled": "Allow guests to increase topic view counts"
}

View File

@@ -34,6 +34,8 @@
"timestamp.cut-off-help": "Datum a čas bude zobrazen relativně (tj. „před 3 hodinami” / „před 5 dny”), a dle toho lokalizován do různých\n\t\t\t\t\tjazyků. Za určitých okolností, může tento text být přepnut na lokalizované datum\n\t\t\t\t\t(tj. 5 Led 2017 15:30)<br /><em>(výchozí: <code>30</code>,nebo měsíc). Nastavte na 0, pro zobrazení datumů, zanecháte-li prázdné, bude vždy zobrazen relativní čas.</em>",
"timestamp.necro-threshold": "Necro Threshold (in days)",
"timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: <code>7</code>, or one week). Set to 0 to disable.</em>",
"timestamp.topic-views-interval": "Increment topic views interval (in minutes)",
"timestamp.topic-views-interval-help": "Topic views will only increment once every X minutes as defined by this setting.",
"teaser": "Ukázka příspěvku",
"teaser.last-post": "Poslední zobrazení posledního příspěvku, včetně hlavního příspěvku, nejsou-li odpovědi",
"teaser.last-reply": "Poslední zobrazení poslední odpovědi, nebo nejsou-li žádné odpovědi textu „Bez odpovědi”",

View File

@@ -21,6 +21,8 @@
"reset.notify.text1": "Informujeme Vás, že na %1 vaše heslo bylo úspěšně změněno.",
"reset.notify.text2": "Pokud jste to neschválil, prosíme neprodleně kontaktujte správce.",
"digest.latest_topics": "Nejnovější témata od %1",
"digest.top-topics": "Top topics from %1",
"digest.popular-topics": "Popular topics from %1",
"digest.cta": "Kliknutím zde navštívíte %1",
"digest.unsub.info": "Tento výtah vám byl odeslán, protože jste si to nastavili ve vašich odběrech.",
"digest.day": "den",

View File

@@ -44,5 +44,6 @@
"search-preferences-saved": "Hledat dle uložených nastavení",
"search-preferences-cleared": "Hledat dle smazaných nastavení",
"show-results-as": "Zobrazit výsledek jako",
"see-more-results": "Zobrazit více výsledků (%1)"
"see-more-results": "Zobrazit více výsledků (%1)",
"search-in-category": "Search in \"%1\""
}

View File

@@ -79,7 +79,9 @@
"thread_tools.purge_confirm": "Jste si jist/a, že chcete vyčistit toto téma?",
"thread_tools.merge_topics": "Sloučit témata",
"thread_tools.merge": "Sloučit",
"topic_move_success": "This topic will be moved shortly. Click here to undo.",
"topic_move_success": "This topic will be moved to \"%1\" shortly. Click here to undo.",
"topic_move_multiple_success": "These topics will be moved to \"%1\" shortly. Click here to undo.",
"topic_move_all_success": "All topics will be moved to \"%1\" shortly. Click here to undo.",
"topic_move_undone": "Topic move undone",
"topic_move_posts_success": "Posts will be moved shortly. Click here to undo.",
"topic_move_posts_undone": "Post move undone",

View File

@@ -1,11 +1,6 @@
{
"post-cache": "Indlægs Cache",
"posts-in-cache": "Indlæg i Cache",
"average-post-size": "Gennemsnitlig Størrelse af Indlæg",
"length-to-max": "Længde / Max",
"percent-full": "%1% Fuld",
"post-cache-size": "Indlægs Cache Størrelse",
"items-in-cache": "Ting i Cache",
"control-panel": "Kontrol Panel",
"update-settings": "Opdater Cache Indstillinger"
"items-in-cache": "Ting i Cache"
}

View File

@@ -1,4 +1,5 @@
{
"trending": "Trending",
"installed": "Installed",
"active": "Active",
"inactive": "Inactive",

View File

@@ -48,5 +48,6 @@
"alert.confirm-copyToAllGroup": "Are you sure you wish to apply this group's privilege set to <strong>all categories</strong>?",
"alert.confirm-copyToChildren": "Are you sure you wish to apply this privilege set to <strong>all descendant (child) categories</strong>?",
"alert.confirm-copyToChildrenGroup": "Are you sure you wish to apply this group's privilege set to <strong>all descendant (child) categories</strong>?",
"alert.no-undo": "<em>This action cannot be undone.</em>"
"alert.no-undo": "<em>This action cannot be undone.</em>",
"alert.admin-warning": "Administrators implicitly get all privileges"
}

View File

@@ -20,16 +20,10 @@
"add-group": "Add Group",
"invite": "Invite",
"new": "New User",
"pills.latest": "Latest Users",
"filter-by": "Filter by",
"pills.unvalidated": "Not Validated",
"pills.no-posts": "No Posts",
"pills.top-posters": "Top Posters",
"pills.top-rep": "Most Reputation",
"pills.inactive": "Inactive",
"pills.flagged": "Most Flagged",
"pills.validated": "Validated",
"pills.banned": "Banned",
"pills.search": "User Search",
"50-per-page": "50 per page",
"100-per-page": "100 per page",

View File

@@ -32,5 +32,12 @@
"sockets.settings": "WebSocket Settings",
"sockets.max-attempts": "Max Reconnection Attempts",
"sockets.default-placeholder": "Default: %1",
"sockets.delay": "Reconnection Delay"
"sockets.delay": "Reconnection Delay",
"analytics.settings": "Analytics Settings",
"analytics.max-cache": "Analytics Cache Max Value",
"analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)",
"compression.settings": "Compression Settings",
"compression.enable": "Enable Compression",
"compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes."
}

View File

@@ -0,0 +1,12 @@
{
"tokens": "Tokens",
"lead-text": "From this page you can configure access to the Write API in NodeBB.",
"intro": "By default, the Write API authenticates users based on their session cookie, but NodeBB also supports Bearer authentication via tokens generated via this page.",
"docs": "Click here to access the full API specification",
"uid": "User ID",
"uid-help-text": "Specify a User ID to associate with this token. If the user ID is <code>0</code>, it will be considered a <em>master</em> token, which can assume the identity of other users based on the <code>_uid</code> parameter",
"description": "Description",
"no-description": "No description specified.",
"token-on-save": "Token will be generated once form is saved"
}

View File

@@ -6,6 +6,7 @@
"max-length": "Maximum length of chat messages",
"max-room-size": "Maximum number of users in chat rooms",
"delay": "Time between chat messages in milliseconds",
"notification-delay": "Notification delay for chat messages. (0 for no delay)",
"restrictions.seconds-edit-after": "Number of seconds a chat message will remain editable. (0 disabled)",
"restrictions.seconds-delete-after": "Number of seconds a chat message will remain deletable. (0 disabled)"
}

View File

@@ -8,5 +8,6 @@
"consent.blank-localised-default": "Leave blank to use NodeBB localised defaults",
"settings": "Settings",
"cookie-domain": "Session cookie domain",
"max-user-sessions": "Max active sessions per user",
"blank-default": "Leave blank for default"
}

View File

@@ -27,9 +27,12 @@
"log.alt-text-placeholder": "Alternative text for accessibility",
"favicon": "Favicon",
"favicon.upload": "Upload",
"touch-icon": "Homescreen/Touch Icon",
"pwa": "Progressive Web App",
"touch-icon": "Touch Icon",
"touch-icon.upload": "Upload",
"touch-icon.help": "Recommended size and format: 192x192, PNG format only. If no touch icon is specified, NodeBB will fall back to using the favicon.",
"touch-icon.help": "Recommended size and format: 512x512, PNG format only. If no touch icon is specified, NodeBB will fall back to using the favicon.",
"maskable-icon": "Maskable (Homescreen) Icon",
"maskable-icon.help": "Recommended size and format: 512x512, PNG format only. If no maskable icon is specified, NodeBB will fall back to the Touch Icon.",
"outgoing-links": "Outgoing Links",
"outgoing-links.warning-page": "Use Outgoing Links Warning Page",
"search-default-sort-by": "Search default sort by",
@@ -38,4 +41,4 @@
"theme-color": "Theme Color",
"background-color": "Background Color",
"background-color-help": "Color used for splash screen background when website is installed as a PWA"
}
}

View File

@@ -1,5 +1,7 @@
{
"handles": "Guest Handles",
"handles.enabled": "Allow guest handles",
"handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\""
"handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"",
"topic-views": "Topic views",
"topic-views.enabled": "Allow guests to increase topic view counts"
}

View File

@@ -34,6 +34,8 @@
"timestamp.cut-off-help": "Dates &amp; times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).<br /><em>(Default: <code>30</code>, or one month). Set to 0 to always display dates, leave blank to always display relative times.</em>",
"timestamp.necro-threshold": "Necro Threshold (in days)",
"timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: <code>7</code>, or one week). Set to 0 to disable.</em>",
"timestamp.topic-views-interval": "Increment topic views interval (in minutes)",
"timestamp.topic-views-interval-help": "Topic views will only increment once every X minutes as defined by this setting.",
"teaser": "Teaser Post",
"teaser.last-post": "Last &ndash; Show the latest post, including the original post, if no replies",
"teaser.last-reply": "Last &ndash; Show the latest reply, or a \"No replies\" placeholder if no replies",

View File

@@ -21,6 +21,8 @@
"reset.notify.text1": "Bemærk: %1 gang blev dit kodeord ændret.",
"reset.notify.text2": "Hvis du ikke godkendte dette, kontakt straks en administrator.",
"digest.latest_topics": "Nyeste emne fra %1",
"digest.top-topics": "Top topics from %1",
"digest.popular-topics": "Popular topics from %1",
"digest.cta": "Klik her for at gå til %1",
"digest.unsub.info": "Du har fået tilsendt dette sammendrag pga. indstillingerne i dit abonnement.",
"digest.day": "dag",

View File

@@ -44,5 +44,6 @@
"search-preferences-saved": "Søgnings præferencer gemt",
"search-preferences-cleared": "Søgnings præferencer slettet",
"show-results-as": "Vis resultater som",
"see-more-results": "See more results (%1)"
"see-more-results": "See more results (%1)",
"search-in-category": "Search in \"%1\""
}

View File

@@ -79,7 +79,9 @@
"thread_tools.purge_confirm": "Er du sikker på at du vil udrense denne tråd?",
"thread_tools.merge_topics": "Merge Topics",
"thread_tools.merge": "Merge",
"topic_move_success": "This topic will be moved shortly. Click here to undo.",
"topic_move_success": "This topic will be moved to \"%1\" shortly. Click here to undo.",
"topic_move_multiple_success": "These topics will be moved to \"%1\" shortly. Click here to undo.",
"topic_move_all_success": "All topics will be moved to \"%1\" shortly. Click here to undo.",
"topic_move_undone": "Topic move undone",
"topic_move_posts_success": "Posts will be moved shortly. Click here to undo.",
"topic_move_posts_undone": "Post move undone",

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