Merge commit '45dfeeb033672e6537e8a8efd7a2970129a86a5a' into v1.13.x

This commit is contained in:
Misty (Bot)
2020-05-14 01:28:09 +00:00
72 changed files with 2186 additions and 1759 deletions

View File

@@ -1,3 +1,236 @@
#### 1.13.3 (2020-05-08)
##### Chores
* incrementing version number - v1.13.3 (ee583e80)
* bump persona (d2bd746c)
* incrementing version number - v1.13.2 (beafd613)
* **deps:**
* update dependency coveralls to v3.1.0 (5ed4a108)
* pin dependency @apidevtools/swagger-parser to 9.0.1 (51eccef5)
* update dependency husky to v4.2.5 (30a25983)
* update dependency husky to v4.2.4 (0a650118)
* update dependency lint-staged to v10.1.3 (a9e68639)
* update dependency nyc to v15.0.1 (#8231) (a3789e28)
* update dependency lint-staged to v10.1.2 (#8235) (e1919c90)
* update dependency lint-staged to v10.1.1 (944a6f58)
* update dependency lint-staged to v10.1.0 (30bd233b)
* update dependency eslint-config-airbnb-base to v14.1.0 (811c3aee)
* update dependency jsdom to v16.2.2 (c5a7242d)
* update dependency eslint-plugin-import to v2.20.2 (b92c1600)
* update dependency lint-staged to v10.0.10 (0ad4b556)
* update dependency coveralls to v3.0.11 (14458087)
* update dependency smtp-server to v3.6.0 (22681945)
* update dependency mocha to v7.1.1 (#8215) (c5356541)
* update dependency grunt to v1.1.0 (#8214) (b0864e7c)
* update dependency husky to v4.2.3 (#8162) (776fe9d2)
* update dependency lint-staged to v10.0.8 (#8180) (13d8f6f1)
* update dependency eslint-plugin-import to v2.20.1 (#8081) (4cdb3131)
* update dependency jsdom to v16.2.1 (#8165) (fbd95a50)
* update dependency husky to v4.2.2 (#8160) (f4ed35c9)
* update dependency jsdom to v16 (#8114) (1037de02)
##### Documentation Changes
* updated changelog (146388aa)
##### New Features
* allow activating additional plugins for testing via config.json (a969c5ce)
* move plugin tests to separate file (3a23ddab)
* remove node14 for now (a72e4429)
* reduce infinite scroll area (3fcbd691)
* manifest.json improvements from #8126 (#8264) (6e5ebb61)
* show error if json is invalid (15345627)
* moved component specs into separate files (cd506557)
* added UserObject, UserObjectFull, Breadcrumb, Pagination component (64d79fe5)
* added some summary and descriptions (ae3e90d6)
* add some descriptions (442c018e)
* common schema (eade13f9)
* openapi component (1af5507a)
* add page query param to docs (9987813f)
* tag route doc (bbddaadf)
* local redoc view on development mode only (1136a369)
* added auto-generated, slimmed-down openapi 3.0 file for read api (7b155dab)
* add parent cids to body class (23571224)
* add 2 hooks for modifying privileges (d080c7b0)
* add user ip to admin/dev/info (5e91a67e)
* change option name (cba5b23e)
* add no-build to ./nodebb setup (476f6717)
* add awaitable socket.emit (4083a6e3)
* settings sorted list (#8170) (3c9689a5)
* guard against accidental ommision (79737c53)
* **openapi:**
* merging openapi-test branch into master (8387178b)
* move all commonprops out for commonprops component (65c78de6)
* added template to commonprops (2425f453)
##### Bug Fixes
* #8302, send string to writeFileSync (d09bd2cf)
* winston showing json object (7d081843)
* sortable topics even if only 1 pinned topic (6765de3d)
* #8298, use class name added by jQueryUI instead (dd2bc189)
* topic search shortcut for macs (f2c725c6)
* #8297, uids.length is different than topics.length (0431d75f)
* #8297 guest handles shown in category.tpl (fcb81cb8)
* only add to set if numRecentReplies>0 (16a98eaf)
* #8293, don't show error if there are no self messages (be305410)
* failing tests @julianlam (ecd622fd)
* #3321, run plugin tests for installed plugins (a6bb9f43)
* remove deprecated mocha.opts (3d0db963)
* spec (84383d39)
* #8290, if there are no filters go to ?reset=1 (9839346e)
* #8283, update gdpr link again (2d076344)
* add missing await (4f1128fd)
* #8287, dont readd user after deletion (9d153fd3)
* missing await (4d6b2ec3)
* #8286, rescind notif when its resolved/rejected (0391856d)
* #8284, parse ToS on register (0ca84bd9)
* #8283, point to official site (17d664e0)
* jquery xhtml violations (275e837b)
* #8274 Don't escape HTML in manage users (#8275) (4855f1de)
* crash in topic controller (0c7c70ed)
* crash when res.locals.linkTags is undefined (7cab2b0f)
* #8272 user link in digest email (e80b8101)
* tag of /api/unread/total (9ffdab02)
* response hook logic (5a1c6ee7)
* remove upload picture test (avatars) (6edf02d4)
* remove tests related to group covers, as route is gone (442fe65f)
* #8269, return array of topics from hook (4eafe0f0)
* remove dead picture upload code #8260 (ef52461f)
* path.resolve to logs file (5bcaf715)
* only trigger infinitescroll on scroll end (ba6d3fd3)
* wrong data returned in available.groups (c7ea84a2)
* no focus on find user modal (1b425ef1)
* accidental fp precision on flag and acp dash graphs (bcbf98aa)
* #8232, unresolvable session mismatch on register cancel (f2f6fbf1)
* pin jquery to 3.4.1, #8252 (e440d617)
* #8249, don't send move notifications for deleted posts/topics (d77036db)
* missing descriptions for common properties (7b31fb34)
* some definitions in read API spec (03739b6f)
* tagged all routes in read api spec (455d42bc)
* override ACAO header for read API spec file (240d9091)
* throw error if topic does not exist (59cf0e80)
* hookname (e93578b8)
* #8230, add hook getUserDataByUserSlug (0d1b5a7f)
* ignore case for group details route (15d6975e)
* lint (740e598a)
* lint (8e23dec8)
* #8221, fix parent selection (08031730)
* invite properly (071506eb)
* admins not seeing invite button (8f4b99a4)
* #8217, add missing lang key (0b5fac75)
* #8206 first message in chat has false `newSet` (93acd139)
* #8203, fix user invites refreshing page (2f9c7c62)
* #8202, filter non-existing users in search by uid (f07f4f8e)
* notification bodyShort truncated if there is a comma in topic title (266061c3)
* hsts max-age missing translation (b67af70d)
* call next (80f1bcad)
* try travis fix again (05bee629)
* try fixing psql on travis (bc9e92a1)
* dont let regular users see other users watched categories (cf6eadb9)
* also fix updating bookmark if sorting is newest_to_oldest (6e5de39b)
* #8188, fix bookmark if sorting is newest_to_oldest (32ada7c4)
* duplicate ID + label (ac241fb8)
* #8184 global mods unable to revoke other user sessions (f0db240a)
* return null if field does not exist (e72a29b3)
* #8179, limit length of location/website/fullname, check grouptitle (14e78667)
* tag key (32636755)
* #8175 (bc93b567)
* #8168 re-allowing slashes in homePageRoute (667608a0)
* tweak to session validation in addHeaders (eddbd868)
* only call clearCookie for logged in users (630f5d5b)
* #6422, update deleted/restored messages (06703408)
* #8163, prevent account deletion (4d0636f8)
* register (5a0c7c14)
* #8157, update recent tid when post is moved (e7495440)
* tests (b73aa84d)
* move start/stop every iteration (dd3893b1)
* #8154, move start/stop every iteration (300c04ce)
* #8154, respect stop (690bb69d)
* #8156 dont allow loading members from hidden groups (f23bc347)
* #8155, don't validate name on update if groupName didn't change (03a02e5d)
* return correct number of suggested topics (236e1e68)
* #8151, don't crash if taskbar doesn't have element (2e794801)
* logic for determining dailyStats hour vars (398f0120)
* fix daily analytics being one day off (9ecdb92f)
* remove debug line (0b9ad416)
* no decimal places for category analytics (14655f87)
* #8142, broken site if no server-side session (#8148) (d6e3f3f0)
* #8144 pluginHooks in maintenance mode middleware (0885ec68)
* **deps:**
* #8298 bump persona (158d9231)
* update dependency nodebb-plugin-composer-default to v6.3.25 (89d17647)
* update dependency jquery to v3.5.1 [security] (#8281) (a69f0b29)
* update dependency nodebb-rewards-essentials to v0.1.3 (#8289) (919034a7)
* update dependency mongodb to v3.5.7 (#8279) (25d509c4)
* actually, swagger-parser is a dev dependency (d09c6ae0)
* missing @apidevtools/swagger-parser (f1720735)
* update dependency nodebb-theme-persona to v10.1.37 (#8258) (b0c30ceb)
* update dependency archiver to v4 (28777f67)
* update dependency mongodb to v3.5.6 (#8256) (49236067)
* bump dependencies (#8239) (e68156e1)
* update dependency jsesc to v3.0.1 (#8243) (92b55ef5)
* update dependency jsesc to v3 (bb70cebb)
* update dependency pg to v8 (#8227) (ac98775f)
* update dependency validator to v13 (f497ee62)
* update dependency sharp to v0.25.2 (#8220) (dd660c87)
* bump markdown (ee6cb412)
* update dependency mongodb to v3.5.5 (#8205) (5535c50c)
* update dependency sitemap to v6 (#8198) (2052f14c)
* update dependency nodebb-plugin-composer-default to v6.3.23 (6d98d5a1)
* update dependency sharp to v0.25.1 (#8199) (21e91c91)
* update dependency nodebb-plugin-composer-default to v6.3.22 (#8193) (e01f05e3)
* update dependency nodebb-theme-slick to v1.2.29 (#8177) (9daa21ff)
* update dependency nodebb-theme-vanilla to v11.1.16 (#8178) (7d6a983b)
* update dependency nodebb-theme-persona to v10.1.35 (#8176) (3acc24b0)
* update dependency sharp to v0.24.1 (#8164) (7cc63f7d)
* update dependency mongodb to v3.5.3 (#8161) (4b907137)
* update dependency nodebb-widget-essentials to v4.1.0 (#8159) (a5f3c2a2)
* update dependency request to v2.88.2 (#8158) (7fde180a)
* update dependency redis to v3 (#8152) (ef964b11)
* update dependency rimraf to v3.0.2 (#8153) (d8efc6b6)
* **openapi:**
* v14 test fix (23a0b8c5)
* remove account and group upload routes (d342a28c)
* more fleshing out (058a15db)
* fleshed out admin routes (bae88e08)
* added some descriptions (ab4bd7e1)
* added PostsObject component (2395d2be)
* finished moving all category objects out (23dd2727)
* changed some descriptions (c939f8c6)
* added CategoryObject component (55d0a9ff)
* removed repeated breadcrumb blocks in favour of $ref (646fac1e)
* remove all repeated pagination blocks in favour of (ac579f9d)
* removed warning for category mods route (1cf62095)
* normalising the file for programmatic updates (3a5c6e07)
##### Other Changes
* #8298 (2e57d8ac)
* post.updatePostVoteCount (b25b51bd)
* //github.com/NodeBB/NodeBB (5e140454)
* categories.updateRecentTid (6c59683b)
* categories.updateRecentTid (51933c1f)
* router.page, dep. filter variant (0053e779)
* flags as well (5ebcdb18)
* crash when res.locals.linkTags is undefined" (fe03effe)
* //github.com/NodeBB/NodeBB (87a6ff0d)
* cnpm and pnpm (#8222) (e6a1741c)
* //github.com/NodeBB/NodeBB (7ae76477)
* openapi component" (683e5851)
* override ACAO header for read API spec file" (c82a2637)
* password.change (00e299e9)
* topic.tools.load (5aa76cdf)
* #8154, move start/stop every iteration" (4abe5eb7)
##### Refactors
* match core field name pinned (478ed6c1)
* getUsersCSV to use batch lib (1efb238a)
* reorganized socket.io admin modules (e1c6c3b2)
#### 1.13.2 (2020-02-05)
##### Chores

View File

@@ -81,9 +81,11 @@
"notificationType_upvote": "notification",
"notificationType_new-topic": "notification",
"notificationType_new-reply": "notification",
"notificationType_post-edit": "notification",
"notificationType_follow": "notification",
"notificationType_new-chat": "notification",
"notificationType_group-invite": "notification",
"notificationType_group-request-membership": "notification",
"notificationType_mention": "notification",
"notificationType_new-register": "notification",
"notificationType_post-queue": "notification",

View File

@@ -79,7 +79,7 @@
"mousetrap": "^1.6.5",
"@nodebb/mubsub": "^1.6.0",
"nconf": "^0.10.0",
"nodebb-plugin-composer-default": "6.3.25",
"nodebb-plugin-composer-default": "6.3.28",
"nodebb-plugin-dbsearch": "4.0.7",
"nodebb-plugin-emoji": "^3.3.0",
"nodebb-plugin-emoji-android": "2.0.0",
@@ -136,7 +136,7 @@
"@commitlint/cli": "8.3.5",
"@commitlint/config-angular": "8.3.4",
"coveralls": "3.1.0",
"eslint": "6.8.0",
"eslint": "7.0.0",
"eslint-config-airbnb-base": "14.1.0",
"eslint-plugin-import": "2.20.2",
"grunt": "1.1.0",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> and <strong>%2</strong> have posted replies to: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> and %2 others have posted replies to: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> أنشأ موضوعًا جديدًا: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> صار يتابعك.",
"user_started_following_you_dual": "<strong>%1</strong> and <strong>%2</strong> started following you.",
"user_started_following_you_multiple": "<strong>%1</strong> and %2 others started following you.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "عندما يوافقك احدهم على منشورك",
"notificationType_new-topic": "When someone you follow posts a topic",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> и <strong>%2</strong> публикуваха отговори на: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> и %2 други публикуваха отговори на: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> публикува нова тема: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> редактира публикация в <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> започна да Ви следва.",
"user_started_following_you_dual": "<strong>%1</strong> и <strong>%2</strong> започнаха да Ви следват.",
"user_started_following_you_multiple": "<strong>%1</strong> и %2 започнаха да Ви следват.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "Когато някой гласува положително за Ваша публикация",
"notificationType_new-topic": "Когато някой, когото следвате, публикува тема",
"notificationType_new-reply": "Когато бъде публикуван нов отговор в тема, която следвате",
"notificationType_post-edit": "Когато бъде редактирана публикация в тема, която следите",
"notificationType_follow": "Когато някой започне да Ви следва",
"notificationType_new-chat": "Когато получите съобщение в разговор",
"notificationType_group-invite": "Когато получите покана за група",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> and <strong>%2</strong> have posted replies to: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> and %2 others have posted replies to: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> has posted a new topic: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> আপনাকে অনুসরন করা শুরু করেছেন।",
"user_started_following_you_dual": "<strong>%1</strong> and <strong>%2</strong> started following you.",
"user_started_following_you_multiple": "<strong>%1</strong> and %2 others started following you.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "When someone upvotes your post",
"notificationType_new-topic": "When someone you follow posts a topic",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> a <strong>%2</strong> odpověděli na: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> a %2 další/ch odpověděli na <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> založil nové téma: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> vás začal sledovat.",
"user_started_following_you_dual": "<strong>%1</strong> a <strong>%2</strong> vás začali sledovat.",
"user_started_following_you_multiple": "<strong>%1</strong> a %2 další/ch vás začali sledovat.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "Vyjádří-li někdo souhlas s vaším příspěvkem",
"notificationType_new-topic": "Začne-li někdo sledovat příspěvky a téma",
"notificationType_new-reply": "Bude-li přidán nový příspěvek v tématu, které sledujete",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "Začne-li vás někdo sledovat",
"notificationType_new-chat": "Obdržíte-li novou konverzační zprávu",
"notificationType_group-invite": "Obdržíte-li pozvání ke skupině",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> og <strong>%2</strong> har skrevet svar til: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> og %2 andre har skrevet svar til: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> har oprettet en ny tråd: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> har valgt at følge dig.",
"user_started_following_you_dual": "<strong>%1</strong> og <strong>%2</strong> har valgt at følge dig.",
"user_started_following_you_multiple": "<strong>%1</strong> og %2 har valgt at følge dig.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "When someone upvotes your post",
"notificationType_new-topic": "When someone you follow posts a topic",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> und <strong>%2</strong> haben auf <strong>%3</strong> geantwortet.",
"user_posted_to_multiple": "<strong>%1</strong> und %2 andere Nutzer haben auf <strong>%3</strong> geantwortet.",
"user_posted_topic": "<strong>%1</strong> hat ein neues Thema erstellt: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> folgt dir jetzt.",
"user_started_following_you_dual": "<strong>%1</strong> und <strong>%2</strong> folgen dir jetzt.",
"user_started_following_you_multiple": "<strong>%1</strong> und %2 andere Nutzer folgen dir jetzt.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "Wenn jemand deinen beitrag positiv bewertet",
"notificationType_new-topic": "Wenn jemand dem du folgst einen Beitrag erstellt",
"notificationType_new-reply": "Wenn es eine neue Antwort auf ein Thema das du beobachtest gibt",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "Wenn dir jemand neues folgt",
"notificationType_new-chat": "Wenn du eine Chat Nachricht erhältst",
"notificationType_group-invite": "Wenn du eine Gruppeneinladung erhältst",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> and <strong>%2</strong> have posted replies to: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> and %2 others have posted replies to: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> has posted a new topic: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> started following you.",
"user_started_following_you_dual": "<strong>%1</strong> and <strong>%2</strong> started following you.",
"user_started_following_you_multiple": "<strong>%1</strong> and %2 others started following you.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "When someone upvotes your post",
"notificationType_new-topic": "When someone you follow posts a topic",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",

View File

@@ -39,6 +39,7 @@
"user_posted_to_dual" : "<strong>%1</strong> and <strong>%2</strong> have posted replies to: <strong>%3</strong>",
"user_posted_to_multiple" : "<strong>%1</strong> and %2 others have posted replies to: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> has posted a new topic: <strong>%2</strong>",
"user_edited_post" : "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> started following you.",
"user_started_following_you_dual": "<strong>%1</strong> and <strong>%2</strong> started following you.",
"user_started_following_you_multiple": "<strong>%1</strong> and %2 others started following you.",
@@ -59,6 +60,7 @@
"notificationType_upvote": "When someone upvotes your post",
"notificationType_new-topic": "When someone you follow posts a topic",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> and <strong>%2</strong> have posted replies to: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> and %2 others have posted replies to: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> has posted a new topic: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> started following you.",
"user_started_following_you_dual": "<strong>%1</strong> and <strong>%2</strong> started following you.",
"user_started_following_you_multiple": "<strong>%1</strong> and %2 others started following you.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "When someone upvotes your post",
"notificationType_new-topic": "When someone you follow posts a topic",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> and <strong>%2</strong> have posted replies to: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> and %2 others have posted replies to: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> has posted a new topic: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> started following you.",
"user_started_following_you_dual": "<strong>%1</strong> and <strong>%2</strong> started following you.",
"user_started_following_you_multiple": "<strong>%1</strong> and %2 others started following you.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "When someone upvotes your post",
"notificationType_new-topic": "When someone you follow posts a topic",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> y <strong>%2</strong> han respondido a <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> y otras %2 personas han respondido a: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> ha publicado un nuevo tema: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> comenzó a seguirte.",
"user_started_following_you_dual": "<strong>%1</strong> y <strong>%2</strong> comenzaron a seguirte.",
"user_started_following_you_multiple": "<strong>%1</strong> y otras %2 personas comenzaron a seguirte.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "Cuando alguien vota positivamente en tu entrada",
"notificationType_new-topic": "Cuando alguien a quien sigues comenta en un tema",
"notificationType_new-reply": "Cuando hay una respuesta nueva en un tema que estás viendo",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "Cuando alguien comienza a seguirte",
"notificationType_new-chat": "Cuando recibes un mensaje de chat",
"notificationType_group-invite": "Cuando recibes una invitación a un grupo",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> ja <strong>%2</strong> on postitanud vastused: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> ja %2 teist on postitanud vastused: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> on postitanud uue teema: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> hakkas sind jälgima.",
"user_started_following_you_dual": "<strong>%1</strong> ja <strong>%2</strong> hakkasid sind jälgima.",
"user_started_following_you_multiple": "<strong>%1</strong> ja %2 hakkasid sind jälgima.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "When someone upvotes your post",
"notificationType_new-topic": "When someone you follow posts a topic",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> و <strong>%2</strong> پاسخ به پست دادند در: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> و %2 نفر دیگر به پست شما پاسخ ارسال کرده‌اند در: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> یک موضوع جدید ارسال کرده: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> شروع به دنبال کردن شما کرده",
"user_started_following_you_dual": "<strong>%1</strong> و <strong>%2</strong> شروع به دنبال کردن شما کرده.",
"user_started_following_you_multiple": "<strong>%1</strong> و %2 نفر دیگر شروع به دنبال کردن شما کرده.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "هنگامی که شخصی به پست شما رای مثبت می دهد",
"notificationType_new-topic": "هنگامی که شخصی که شما دنبال می کنید موضوعی ایجاد نماید",
"notificationType_new-reply": "هنگامی که پاسخ جدید در تاپیکی که شما پیگیری می کنید فرستاده می شود",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "هنگامی که کسی شما را دنبال می کند",
"notificationType_new-chat": "هنگامی که شما پیام چتی دریافت می کنید",
"notificationType_group-invite": "هنگامی که شما دعوتنامه گروه دریافت می کنید",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> ja <strong>%2</strong> ovat vastanneet viestiin: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> ja %2 muuta ovat vastanneet viestiin: <strong>%3 </strong>",
"user_posted_topic": "<strong>%1</strong> on kirjoittanut uuden aiheen: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> alkoi seurata sinua.",
"user_started_following_you_dual": "<strong>%1</strong> ja <strong>%2</strong> alkoivat seurata sinua",
"user_started_following_you_multiple": "<strong>%1</strong> ja %2 muuta alkoivat seurata sinua",
@@ -53,6 +54,7 @@
"notificationType_upvote": "Kun joku tykkää viestistäsi",
"notificationType_new-topic": "Kun joku seuraa viestejäsi aiheessa",
"notificationType_new-reply": "Kun uusi vastaus on lähetetty aiheeseen, jota seuraat",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "Kun joku alkaa seurata sinua",
"notificationType_new-chat": "Kun saat viestin keskusteluun",
"notificationType_group-invite": "Kun saat kutsun ryhmään",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> et <strong>%2</strong> ont posté une réponse à : <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> et %2 autres ont posté une réponse à : <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> a posté un nouveau sujet: <strong>%2</strong>.",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> vous suit.",
"user_started_following_you_dual": "<strong>%1</strong> et <strong>%2</strong> se sont abonnés à votre compte.",
"user_started_following_you_multiple": "<strong>%1</strong> et %2 autres se sont abonnés à votre compte.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "Lorsque quelqu'un a voté pour un de vos messages",
"notificationType_new-topic": "Lorsque quelqu'un que vous suivez publie un sujet",
"notificationType_new-reply": "Lorsqu'une nouvelle réponse est ajoutée dans un sujet que vous suivez",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "Lorsque quelqu'un commence à vous suivre",
"notificationType_new-chat": "Lorsque vous recevez un message du chat ",
"notificationType_group-invite": "Lorsque vous recevez une invitation d'un groupe",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> e <strong>%2</strong> responderon a <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> e outras %2 persoas responderon a: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> publicou un novo tema: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> comezou a seguirte.",
"user_started_following_you_dual": "<strong>%1</strong> e <strong>%2</strong> comezaron a seguirte.",
"user_started_following_you_multiple": "<strong>%1</strong> e %2 máis comezaron a seguirte.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "When someone upvotes your post",
"notificationType_new-topic": "When someone you follow posts a topic",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> ו<strong>%2</strong> הגיבו ל: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> ו%2 אחרים הגיבו ל: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> העלה נושא חדש: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> התחיל לעקוב אחריך.",
"user_started_following_you_dual": "<strong>%1</strong> ו<strong>%1</strong> התחילו לעקוב אחריך.",
"user_started_following_you_multiple": "<strong>%1</strong> ו%2 התחילו לעקוב אחריך.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "כאשר מישהו מצביע בעד הפוסט שלך",
"notificationType_new-topic": "כשמישהו שאתה עוקב אחריו פרסם נושא",
"notificationType_new-reply": "כשתגובה חדשה מפורסמת בנושא שאתה צופה בו",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "כשמישהו מתחיל לעקוב אחריך",
"notificationType_new-chat": "כשאתה מקבל הודעת צאט",
"notificationType_group-invite": "כשאתה מקבל הזמנה מקבוצה",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> i %2 ostalih su odgovorili na objavu u: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> i %2 drugih su odgovorili na: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> je otvorio novu temu: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> Vas sada prati.",
"user_started_following_you_dual": "<strong>%1</strong> i <strong>%2</strong> vas sada prate.",
"user_started_following_you_multiple": "<strong>%1</strong> i %2 ostalih vas sada prate.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "When someone upvotes your post",
"notificationType_new-topic": "When someone you follow posts a topic",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> és<strong>%2</strong> választ írt neki: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> és %2 másik választ írt neki: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> új témakört hozott létre: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> elkezdett követni téged.",
"user_started_following_you_dual": "<strong>%1</strong> és<strong>%2</strong> elkezdett követni téged.",
"user_started_following_you_multiple": "<strong>%1</strong> és %2 másik elkezdett követni téged.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "Mikor valaki kedveli a hozzászólásod",
"notificationType_new-topic": "Mikor egy követett felhasználód hozzászól",
"notificationType_new-reply": "Mikor egy általad figyelt témakörre válasz érkezik",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "Mikor valaki elkezd követni téged",
"notificationType_new-chat": "Mikor chat üzenetet kapsz",
"notificationType_group-invite": "Mikor csoportmeghívást kapsz",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> and <strong>%2</strong> have posted replies to: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> and %2 others have posted replies to: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> telah membuat topik baru: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> mulai mengikutimu.",
"user_started_following_you_dual": "<strong>%1</strong> and <strong>%2</strong> started following you.",
"user_started_following_you_multiple": "<strong>%1</strong> and %2 others started following you.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "When someone upvotes your post",
"notificationType_new-topic": "When someone you follow posts a topic",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> e <strong>%2</strong> hanno postato una risposta su: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> ed altri %2 hanno postato una risposta su: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> ha postato una nuova discussione: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> ha iniziato a seguirti.",
"user_started_following_you_dual": "<strong>%1</strong> e <strong>%2</strong> hanno iniziato a seguirti.",
"user_started_following_you_multiple": "<strong>%1</strong> ed altri %2 hanno iniziato a seguirti.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "Quando il tuo post riceve un Mi Piace",
"notificationType_new-topic": "Quando qualcuno che segui pubblica un argomento",
"notificationType_new-reply": "Quando viene pubblicata una nuova risposta in un argomento che stai seguendo",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "Quando qualcuno inizia a seguirti",
"notificationType_new-chat": "Quando ricevi un messaggio in chat",
"notificationType_group-invite": "Quando ricevi un invito ad un gruppo",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> と <strong>%2</strong> は、返信しました: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> と %2 または他のユーザーが返信しました: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> が新しいスレッドを投稿しました。: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong>があなたをフォローしました。",
"user_started_following_you_dual": "<strong>%1</strong> と <strong>%2</strong> があなたをフォローしました。",
"user_started_following_you_multiple": "<strong>%1</strong> と %2 または他のユーザーがあなたをフォローしました。",
@@ -53,6 +54,7 @@
"notificationType_upvote": "誰かがあなたの投稿を評価したとき",
"notificationType_new-topic": "フォロワーがスレッドを投稿したとき",
"notificationType_new-reply": "あなたが見ているトピックに新しい返信が投稿されたとき",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "誰かがあなたをフォローしたとき",
"notificationType_new-chat": "チャットメッセージを受信したとき",
"notificationType_group-invite": "グループ招待を受けたとき",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> 님과 <strong>%2</strong> 님이 <strong>%3</strong> 에 답글을 달았습니다.",
"user_posted_to_multiple": "<strong>%1</strong> 님과 %2 명의 다른 유저들이 <strong>%3</strong> 에 답글을 달았습니다.",
"user_posted_topic": "<strong>%1</strong>님이 새 게시물을 작성했습니다: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong>님이 나를 팔로우 합니다.",
"user_started_following_you_dual": "<strong>%1</strong>님과 <strong>%2</strong>님이 나를 팔로우 합니다.",
"user_started_following_you_multiple": "<strong>%1</strong>님외 %2명이 나를 팔로우 합니다.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "누군가 사용자님의 글을 추천해 줄 때",
"notificationType_new-topic": "When someone you follow posts a topic",
"notificationType_new-reply": "주시중인 글에 새로운 답글이 게시되면",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "누군가 사용자님을 팔로우 하면",
"notificationType_new-chat": "채팅 메시지를 받으면",
"notificationType_group-invite": "그룹 초대를 받으면",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> and <strong>%2</strong> have posted replies to: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> and %2 others have posted replies to: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> paskelbė naują temą: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> pradėjo sekti tave",
"user_started_following_you_dual": "<strong>%1</strong> and <strong>%2</strong> started following you.",
"user_started_following_you_multiple": "<strong>%1</strong> and %2 others started following you.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "When someone upvotes your post",
"notificationType_new-topic": "When someone you follow posts a topic",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> un <strong>%2</strong> ir atbildējuši <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> un %2 citi ir atbildējuši <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> ir ievietojis jaunu tematu: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> sāka Tev sekot.",
"user_started_following_you_dual": "<strong>%1</strong> un <strong>%2</strong> sāka Tev sekot.",
"user_started_following_you_multiple": "<strong>%1</strong> un %2 citi sāka Tev sekot.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "Kad kāds balso \"par\" Tavu rakstu",
"notificationType_new-topic": "Kad kāds, kuru Tu seko, publicē rakstu",
"notificationType_new-reply": "Kad jauna atbilde tiek pievienota tematam, kuru novēro",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "Kad kāds sāk Tev sekot",
"notificationType_new-chat": "Kad saņemi sarunu",
"notificationType_group-invite": "Kad saņemi ielūgumu pievienoties grupai",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> dan <strong>%2</strong> membalas kiriman : <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> dan %2 lagu membalas kiriman: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> membuka topik baru : <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> mula mengikut anda.",
"user_started_following_you_dual": "<strong>%1</strong> dan <strong>%2</strong> mula mengikuti anda.",
"user_started_following_you_multiple": "<strong>%1</strong> dan %2 lagi mula mengikuti anda.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "When someone upvotes your post",
"notificationType_new-topic": "When someone you follow posts a topic",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> and <strong>%2</strong> have posted replies to: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> and %2 others have posted replies to: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> har skrevet et nytt emne: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> begynte å følge deg.",
"user_started_following_you_dual": "<strong>%1</strong> and <strong>%2</strong> started following you.",
"user_started_following_you_multiple": "<strong>%1</strong> and %2 others started following you.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "When someone upvotes your post",
"notificationType_new-topic": "When someone you follow posts a topic",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> en <strong>%2</strong> hebben een reactie geplaatst in: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> en %2 hebben een reactie geplaatst in: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> heeft een nieuw onderwerp geplaatst: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> volgt jou nu.",
"user_started_following_you_dual": "<strong>%1</strong> en <strong>%2</strong> volgen jou nu.",
"user_started_following_you_multiple": "<strong>%1</strong> en %2 anderen volgen jou nu.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "Als iemand positief stemt voor je bericht",
"notificationType_new-topic": "Wanneer iemand die jij volgt een onderwerp post",
"notificationType_new-reply": "Als een nieuwe reactie komt op een onderwerp dat je volgt",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "Als iemand begint met jou te volgen",
"notificationType_new-chat": "Als je een chat-bericht ontvangt",
"notificationType_group-invite": "Als je een uitnodiging voor een groep ontvangt",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> oraz <strong>%2</strong> dodali odpowiedzi do <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> oraz %2 innych dodali odpowiedzi do <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> stworzył nowy temat: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> zaczął Cię obserwować.",
"user_started_following_you_dual": "<strong>%1</strong> oraz <strong>%2</strong> zaczęli Cię obserwować.",
"user_started_following_you_multiple": "<strong>%1</strong> oraz %2 innych obserwują Cię.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "Kiedy ktoś zagłosuje na Twój post",
"notificationType_new-topic": "Kiedy ktoś, kogo obserwujesz, utworzy temat",
"notificationType_new-reply": "Kiedy ktoś doda nową odpowiedź w temacie, który obserwujesz",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "Kiedy ktoś zacznie Cię obserwować",
"notificationType_new-chat": "Kiedy otrzymasz wiadomość na czacie",
"notificationType_group-invite": "Kiedy otrzymasz grupowe zaproszenie",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> e <strong>%2</strong> postaram respostas para: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> e %2 outros postaram respostas para: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> postou um novo tópico: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> começou a seguir você.",
"user_started_following_you_dual": "<strong>%1</strong> e <strong>%2</strong> começaram a lhe acompanhar.",
"user_started_following_you_multiple": "<strong>%1</strong> e %2 outros começaram a lhe acompanhar.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "Quando alguém dá um voto positivo em seu post",
"notificationType_new-topic": "Quando alguém que você segue posta um tópico",
"notificationType_new-reply": "Quando uma nova resposta é postada em um tópico que você está acompanhando",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "Quando alguém começar a seguir você",
"notificationType_new-chat": "Quando você receber uma mensagem de chat",
"notificationType_group-invite": "Quando você receber um convite para um grupo",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> e <strong>%2</strong> publicaram respostas a: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> e %2 outros utilizadores publicaram respostas a: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> publicou um novo tópico: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> começou a seguir-te.",
"user_started_following_you_dual": "<strong>%1</strong> e <strong>%2</strong> começaram a seguir-te.",
"user_started_following_you_multiple": "<strong>%1</strong> e %2 outros utilizadores começaram a seguir-te.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "Quando alguém vota positivamente numa publicação tua",
"notificationType_new-topic": "Quando alguém que tu segues publica um tópico",
"notificationType_new-reply": "Quando uma nova resposta é publicada num tópico que tu estás a seguir",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "Quando alguém começa a seguir-te",
"notificationType_new-chat": "Quando recebes uma mensagem numa conversa",
"notificationType_group-invite": "Quando recebes um convite para um grupo",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> and <strong>%2</strong> have posted replies to: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> and %2 others have posted replies to: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> has posted a new topic: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> a început să te urmărească.",
"user_started_following_you_dual": "<strong>%1</strong> and <strong>%2</strong> started following you.",
"user_started_following_you_multiple": "<strong>%1</strong> and %2 others started following you.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "When someone upvotes your post",
"notificationType_new-topic": "When someone you follow posts a topic",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "Пользователи <strong>%1</strong> и <strong>%2</strong> ответили на сообщение в <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> и %2 других пользователя ответили на сообщение в <strong>%3</strong>",
"user_posted_topic": "Пользователь <strong>%1</strong> создал новую тему: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "Пользователь <strong>%1</strong> подписался на вас.",
"user_started_following_you_dual": "Пользователи <strong>%1</strong> и <strong>%2</strong> подписались на вас.",
"user_started_following_you_multiple": "<strong>%1</strong> и %2 других пользователя подписались на вас.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "Когда кто-то проголосовал за ваше сообщение",
"notificationType_new-topic": "Когда кто-то, на кого вы подписаны, создаёт новую тему",
"notificationType_new-reply": "Когда в теме, за которой вы следите, появляется новое сообщение",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "Когда кто-то подписался на вас",
"notificationType_new-chat": "Когда вы получаете сообщение в чат",
"notificationType_group-invite": "Когда вы получаете приглашение в группу",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> and <strong>%2</strong> have posted replies to: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> and %2 others have posted replies to: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> yatangije ikiganiro gishya: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> yatangiye kugukurikira.",
"user_started_following_you_dual": "<strong>%1</strong> and <strong>%2</strong> started following you.",
"user_started_following_you_multiple": "<strong>%1</strong> and %2 others started following you.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "When someone upvotes your post",
"notificationType_new-topic": "When someone you follow posts a topic",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> and <strong>%2</strong> have posted replies to: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> and %2 others have posted replies to: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> has posted a new topic: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> started following you.",
"user_started_following_you_dual": "<strong>%1</strong> and <strong>%2</strong> started following you.",
"user_started_following_you_multiple": "<strong>%1</strong> and %2 others started following you.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "When someone upvotes your post",
"notificationType_new-topic": "When someone you follow posts a topic",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> a <strong>%2</strong> uverejnili odpoveď na:<strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> a %2 ďalší uverejnili odpovede na:<strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> pridal novú tému: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> Vás začal sledovať.",
"user_started_following_you_dual": "<strong>%1</strong> a <strong>%2</strong> Vás začali sledovať.",
"user_started_following_you_multiple": "<strong>%1</strong> a %2 ďalší Vás začali sledovať.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "Ak niekto vyjadri súhlas s vaším príspevkom",
"notificationType_new-topic": "Ak začne niekto sledovať príspevky a témy",
"notificationType_new-reply": "Ak bude pridaný nový príspevok v téme, ktorú sledujete",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "Ak Vás začne niekto sledovať",
"notificationType_new-chat": "Ak obdržíte novú správu konverzácie",
"notificationType_group-invite": "Ak obdržíte pozvanie do skupiny",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> in <strong>%2</strong> sta objavila/-i odgovor na: <strong>%3</strong>.",
"user_posted_to_multiple": "<strong>%1</strong> in %2 drugih je objavilo odgovor na: <strong>%3</strong>.",
"user_posted_topic": "<strong>%1</strong> je odprl/-a novo temo: <strong>%2</strong>.",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> te je začel/-a spremljati.",
"user_started_following_you_dual": "<strong>%1</strong> in <strong>%2</strong> sta te začela/-i spremljati.",
"user_started_following_you_multiple": "<strong>%1</strong> in %2 drugih te je začelo spremljati.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "When someone upvotes your post",
"notificationType_new-topic": "When someone you follow posts a topic",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> и <strong>%2</strong> су одговорили на: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> и %2 других су одговорили на: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> је поставио нову тему: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> је почео да вас прати.",
"user_started_following_you_dual": "<strong>%1</strong> и <strong>%2</strong> су почели да вас прате.",
"user_started_following_you_multiple": "<strong>%1</strong> и %2 других су почели да вас прате.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "Када неко гласа за вашу поруку",
"notificationType_new-topic": "Када неко кога пратите постави тему",
"notificationType_new-reply": "Када је постављен нови одговор у теми коју надгледате",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "Када неко почне да вас прати",
"notificationType_new-chat": "Када примите поруку за ћаскање",
"notificationType_group-invite": "Када примите позивницу за групу",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> och <strong>%2</strong> har svarat på: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> och %2 andra har svarat på: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> har skapat ett nytt ämne: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> började följa dig.",
"user_started_following_you_dual": "<strong>%1</strong> och <strong>%2</strong> började följa dig.",
"user_started_following_you_multiple": "<strong>%1</strong> och %2 andra började följa dig.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "När någon röstar upp ditt inlägg",
"notificationType_new-topic": "När någon du följer skapar ett ämne",
"notificationType_new-reply": "När ett nytt svar skrivs inom ett ämne du följer",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "När någon börjar följa dig",
"notificationType_new-chat": "När du får ett chattmeddelande",
"notificationType_group-invite": "När du får en gruppinbjudan",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong>และ <strong>%2</strong>ได้โพสต์คำตอบไปยัง : <strong>%3</strong> ",
"user_posted_to_multiple": "<strong>%1</strong>และคนอื่นๆอีก %2 ได้โพสต์คำตอบไปยัง : <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong>ได้โพสต์กระทู้ใหม่ : <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> ได้เริ่มติดตามคุณ",
"user_started_following_you_dual": "<strong>%1</strong>และ<strong>%2</strong>ได้เริ่มติดตามคุณ",
"user_started_following_you_multiple": "<strong>%1</strong>และคืนอื่นๆอีก %2  คนได้เริ่มติดตามคุณ",
@@ -53,6 +54,7 @@
"notificationType_upvote": "เมื่อมีคนโหวตอัพให้โพสต์คุณ",
"notificationType_new-topic": "เมื่อมีคนติดตามโพสต์คุณ",
"notificationType_new-reply": "เมื่อมีการตอบกลับในโพสต์ที่คุณกำลังติดตาม",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "เมื่อมีคนติดตามคุณ",
"notificationType_new-chat": "เมื่อคุณได้รับข้อความใหม่",
"notificationType_group-invite": "เมื่อคุณได้รับเชิญเข้ากลุ่ม",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> ve <strong>%2</strong> şu başlıktaki gönderinize cevap verdi: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> ve %2 kişi daha şu başlıktaki gönderinize cevap verdi: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> şu yeni konuyu yarattı: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> sizi takip etmeye başladı.",
"user_started_following_you_dual": "<strong>%1</strong> ve <strong>%2</strong> sizi takip etmeye başladı.",
"user_started_following_you_multiple": "<strong>%1</strong> ve %2 kişi daha sizi takip etmeye başladı.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "Birisi senin iletine artı oy verdiğinde",
"notificationType_new-topic": "Takip ettiğiniz birisi bir başlık gönderdiğinde",
"notificationType_new-reply": "İzlediğiniz bir başlığa yeni bir ileti gönderildiğinde",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "Birisi seni takip etmeye başlayınca",
"notificationType_new-chat": "Bir sohbet mesajı aldığınızda",
"notificationType_group-invite": "Bir grup davetiyesi aldığınızda",

View File

@@ -135,5 +135,5 @@
"diffs.current-revision": "mevcut revizyon",
"diffs.original-revision": "orijinal revizyon",
"timeago_later": "%1 sonra",
"timeago_earlier": "%1 daha öncesi"
"timeago_earlier": "%1 önce"
}

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> та <strong>%2</strong> запостили відповіді до: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> та %2 інших запостили відповіді до: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> запостив нову тему: <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> почав стежити за вами.",
"user_started_following_you_dual": "<strong>%1</strong> та <strong>%2</strong> почали стежити за вами.",
"user_started_following_you_multiple": "<strong>%1</strong> та %2 інших почали стежити за вами.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "Коли хтось голосує за ваш пост",
"notificationType_new-topic": "Коли хтось, кого ви читаєте, публікує тему",
"notificationType_new-reply": "Коли з'являється нова відповідь у темі, за якою ви слідкуєте",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "Коли хтось починає слідкувати за вами",
"notificationType_new-chat": "Коли ви отримуєте повідомлення чату",
"notificationType_group-invite": "Коли ви отримуєте запрошення до групи",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> và <strong>%2</strong> đã trả lời: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> và %2 người khác đã trả lời: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> đã gởi chủ đề mới ở <strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> đã theo dõi bạn.",
"user_started_following_you_dual": "<strong>%1</strong> và <strong>%2</strong> đã bắt đầu theo dõi bạn.",
"user_started_following_you_multiple": "<strong>%1</strong> và %2 người khác đã bắt đầu theo dõi bạn.",
@@ -53,6 +54,7 @@
"notificationType_upvote": "Khi ai đó thích bài đăng của bạn",
"notificationType_new-topic": "Khi người bạn theo dõi đăng một chủ đề",
"notificationType_new-reply": "Khi phản hồi được đăng trong chủ đề bạn đang quan tâm",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "Khi ai đó theo dõi bạn",
"notificationType_new-chat": "Khi bạn nhận được thông điệp chat",
"notificationType_group-invite": "Khi bạn nhận được lời mời gia nhập nhóm",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> 和 <strong>%2</strong> 回复了: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> 和 %2 个其他人回复了: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> 发表了新主题:<strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong>关注了您。",
"user_started_following_you_dual": "<strong>%1</strong> 和 <strong>%2</strong> 关注了您。",
"user_started_following_you_multiple": "<strong>%1</strong> 和 %2 个其他人关注了您。",
@@ -53,6 +54,7 @@
"notificationType_upvote": "当有人顶了我的帖子时",
"notificationType_new-topic": "当有人回复我的帖子时",
"notificationType_new-reply": "当您正在查看的主题中有新回复时",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "当有人关注您时",
"notificationType_new-chat": "当您收到聊天消息时",
"notificationType_group-invite": "当您收到群组邀请时",

View File

@@ -35,6 +35,7 @@
"user_posted_to_dual": "<strong>%1</strong> 和 <strong>%2</strong> 回覆了: <strong>%3</strong>",
"user_posted_to_multiple": "<strong>%1</strong> 和 %2 個其他人回覆了: <strong>%3</strong>",
"user_posted_topic": "<strong>%1</strong> 發表了新主題:<strong>%2</strong>",
"user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong>追隨了您。",
"user_started_following_you_dual": "<strong>%1</strong> 和 <strong>%2</strong> 追隨了您。",
"user_started_following_you_multiple": "<strong>%1</strong> 和 %2 個其他人追隨了您。",
@@ -53,6 +54,7 @@
"notificationType_upvote": "當有人點贊了我的貼文時",
"notificationType_new-topic": "當有人回覆我的貼文時",
"notificationType_new-reply": "當您正在查看的主題中有新回覆時",
"notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType_follow": "當有人追隨您時",
"notificationType_new-chat": "當您收到聊天訊息時",
"notificationType_group-invite": "當您收到群組邀請時",

File diff suppressed because it is too large Load Diff

View File

@@ -199,7 +199,11 @@ define('topicList', [
});
}
var categoryEl = $(this);
var cid = $(this).attr('data-cid');
var link = categoryEl.find('a').attr('href');
if (link && link !== '#' && link.length) {
return;
}
var cid = categoryEl.attr('data-cid');
if (ev.ctrlKey) {
selectChildren(cid, !categoryEl.find('[component="category/select/icon"]').hasClass('fa-check'));
}

View File

@@ -175,20 +175,16 @@ function calculateTopicPostCount(category) {
return;
}
var postCount = category.post_count;
var topicCount = category.topic_count;
if (!Array.isArray(category.children) || !category.children.length) {
category.totalPostCount = postCount;
category.totalTopicCount = topicCount;
return;
let postCount = category.post_count;
let topicCount = category.topic_count;
if (Array.isArray(category.children)) {
category.children.forEach(function (child) {
calculateTopicPostCount(child);
postCount += parseInt(child.totalPostCount, 10) || 0;
topicCount += parseInt(child.totalTopicCount, 10) || 0;
});
}
category.children.forEach(function (child) {
calculateTopicPostCount(child);
postCount += parseInt(child.totalPostCount, 10) || 0;
topicCount += parseInt(child.totalTopicCount, 10) || 0;
});
category.totalPostCount = postCount;
category.totalTopicCount = topicCount;
}
@@ -240,7 +236,7 @@ Categories.getChildrenCids = async function (rootCid) {
}
keys = childrenCids.map(cid => 'cid:' + cid + ':children');
childrenCids.forEach(cid => allCids.push(parseInt(cid, 10)));
recursive(keys);
await recursive(keys);
}
const key = 'cid:' + rootCid + ':children';
const childrenCids = cache.get(key);

View File

@@ -62,12 +62,24 @@ module.exports = function (Categories) {
}
};
Categories.getRecentTopicReplies = async function (categoryData, uid) {
Categories.getRecentTopicReplies = async function (categoryData, uid, query) {
if (!Array.isArray(categoryData) || !categoryData.length) {
return;
}
const categoriesToLoad = categoryData.filter(category => category && category.numRecentReplies && parseInt(category.numRecentReplies, 10) > 0);
const keys = categoriesToLoad.map(category => 'cid:' + category.cid + ':recent_tids');
const categoriesToLoad = categoryData.filter(c => c && c.numRecentReplies && parseInt(c.numRecentReplies, 10) > 0);
let keys = [];
if (plugins.hasListeners('filter:categories.getRecentTopicReplies')) {
const result = await plugins.fireHook('filter:categories.getRecentTopicReplies', {
categories: categoriesToLoad,
uid: uid,
query: query,
keys: [],
});
keys = result.keys;
} else {
keys = categoriesToLoad.map(c => 'cid:' + c.cid + ':recent_tids');
}
const results = await db.getSortedSetsMembers(keys);
let tids = _.uniq(_.flatten(results).filter(Boolean));

View File

@@ -108,7 +108,7 @@ settingsController.get = async function (req, res, next) {
userData.disableCustomUserSkins = meta.config.disableCustomUserSkins || 0;
userData.allowUserHomePage = meta.config.allowUserHomePage || 1;
userData.allowUserHomePage = meta.config.allowUserHomePage === 1 ? 1 : 0;
userData.hideFullname = meta.config.hideFullname || 0;
userData.hideEmail = meta.config.hideEmail || 0;

View File

@@ -19,7 +19,7 @@ categoriesController.list = async function (req, res) {
const categoryData = await categories.getCategoriesByPrivilege('categories:cid', req.uid, 'find');
const tree = categories.getTree(categoryData, 0);
await categories.getRecentTopicReplies(categoryData, req.uid);
await categories.getRecentTopicReplies(categoryData, req.uid, req.query);
const data = {
title: meta.config.homePageTitle || '[[pages:home]]',

View File

@@ -88,7 +88,7 @@ categoryController.get = async function (req, res, next) {
if (categoryData.children.length) {
const allCategories = [];
categories.flattenCategories(allCategories, categoryData.children);
await categories.getRecentTopicReplies(allCategories, req.uid);
await categories.getRecentTopicReplies(allCategories, req.uid, req.query);
}
categoryData.title = translator.escape(categoryData.name);

View File

@@ -222,7 +222,7 @@ async function getCategoryData(cids, uid, selectedCid, states) {
if (selectedCid && !Array.isArray(selectedCid)) {
selectedCid = [selectedCid];
}
selectedCid = selectedCid && selectedCid.map(String);
states = states || [categories.watchStates.watching, categories.watchStates.notwatching];
const [allowed, watchState, categoryData, isAdmin] = await Promise.all([
@@ -286,7 +286,7 @@ function checkVisibleChildren(c, cidToAllowed, cidToWatchState, states) {
if (!c || !Array.isArray(c.children)) {
return false;
}
return c.children.some(c => c && (
return c.children.some(c => c && !c.disabled && (
(cidToAllowed[c.cid] && states.includes(cidToWatchState[c.cid])) || checkVisibleChildren(c, cidToAllowed, cidToWatchState, states)
));
}

View File

@@ -52,7 +52,8 @@ module.exports = function (module) {
return;
}
const isArrayOfScores = Array.isArray(scores);
if (!isArrayOfScores && !utils.isNumber(scores)) {
if ((!isArrayOfScores && !utils.isNumber(scores)) ||
(isArrayOfScores && scores.map(s => utils.isNumber(s)).includes(false))) {
throw new Error('[[error:invalid-score, ' + scores + ']]');
}
@@ -75,6 +76,9 @@ module.exports = function (module) {
}
var bulk = module.client.collection('objects').initializeUnorderedBulkOp();
data.forEach(function (item) {
if (!utils.isNumber(item[1])) {
throw new Error('[[error:invalid-score, ' + item[1] + ']]');
}
bulk.find({ _key: item[0], value: String(item[2]) }).upsert().updateOne({ $set: { score: parseFloat(item[1]) } });
});
await bulk.execute();

View File

@@ -69,7 +69,8 @@ DO UPDATE SET "score" = EXCLUDED."score"`,
return;
}
const isArrayOfScores = Array.isArray(scores);
if (!isArrayOfScores && !utils.isNumber(scores)) {
if ((!isArrayOfScores && !utils.isNumber(scores)) ||
(isArrayOfScores && scores.map(s => utils.isNumber(s)).includes(false))) {
throw new Error('[[error:invalid-score, ' + scores + ']]');
}
@@ -108,6 +109,9 @@ INSERT INTO "legacy_zset" ("_key", "value", "score")
const values = [];
const scores = [];
data.forEach(function (item) {
if (!utils.isNumber(item[1])) {
throw new Error('[[error:invalid-score, ' + item[1] + ']]');
}
keys.push(item[0]);
scores.push(item[1]);
values.push(item[2]);

View File

@@ -42,7 +42,8 @@ module.exports = function (module) {
return;
}
const isArrayOfScores = Array.isArray(scores);
if (!isArrayOfScores && !utils.isNumber(scores)) {
if ((!isArrayOfScores && !utils.isNumber(scores)) ||
(isArrayOfScores && scores.map(s => utils.isNumber(s)).includes(false))) {
throw new Error('[[error:invalid-score, ' + scores + ']]');
}
@@ -65,6 +66,9 @@ module.exports = function (module) {
}
var batch = module.client.batch();
data.forEach(function (item) {
if (!utils.isNumber(item[1])) {
throw new Error('[[error:invalid-score, ' + item[1] + ']]');
}
batch.zadd(item[0], item[1], item[2]);
});
await helpers.execBatch(batch);

View File

@@ -21,6 +21,7 @@ Notifications.baseTypes = [
'notificationType_upvote',
'notificationType_new-topic',
'notificationType_new-reply',
'notificationType_post-edit',
'notificationType_follow',
'notificationType_new-chat',
'notificationType_group-invite',

View File

@@ -52,6 +52,13 @@ module.exports = function (Posts) {
postData.cid = topic.cid;
postData.topic = topic;
await topics.notifyFollowers(postData, data.uid, {
type: 'post-edit',
bodyShort: translator.compile('notifications:user_edited_post', editor.username, postData.topic.title),
nid: 'edit_post:' + postData.pid + ':uid:' + data.uid,
});
plugins.fireHook('action:post.edit', { post: _.clone(postData), data: data, uid: data.uid });
require('./cache').del(String(postData.pid));
@@ -79,6 +86,7 @@ module.exports = function (Posts) {
return {
tid: tid,
cid: topicData.cid,
title: validator.escape(String(topicData.title)),
isMainPost: false,
renamed: false,
};

View File

@@ -13,6 +13,7 @@ var meta = require('../meta');
var posts = require('../posts');
var privileges = require('../privileges');
var categories = require('../categories');
const translator = require('../translator');
module.exports = function (Topics) {
Topics.create = async function (data) {
@@ -180,7 +181,13 @@ module.exports = function (Topics) {
user.setUserField(uid, 'lastonline', Date.now());
}
Topics.notifyFollowers(postData, uid);
Topics.notifyFollowers(postData, uid, {
type: 'new-reply',
bodyShort: translator.compile('notifications:user_posted_to', postData.user.username, postData.topic.title),
nid: 'new_post:tid:' + postData.topic.tid + ':pid:' + postData.pid + ':uid:' + uid,
mergeId: 'notifications:user_posted_to|' + postData.topic.tid,
});
analytics.increment(['posts', 'posts:byCid:' + data.cid]);
plugins.fireHook('action:topic.reply', { post: _.clone(postData), data: data });

View File

@@ -145,47 +145,37 @@ module.exports = function (Topics) {
return tids.filter((tid, index) => tid && !scores[index]);
};
Topics.notifyFollowers = async function (postData, exceptUid) {
var title;
var titleEscaped;
Topics.notifyFollowers = async function (postData, exceptUid, notifData) {
notifData = notifData || {};
let followers = await Topics.getFollowers(postData.topic.tid);
var index = followers.indexOf(exceptUid.toString());
const index = followers.indexOf(String(exceptUid));
if (index !== -1) {
followers.splice(index, 1);
}
followers = await privileges.topics.filterUids('topics:read', postData.topic.tid, followers);
if (!followers.length) {
return;
}
title = postData.topic.title;
let title = postData.topic.title;
if (title) {
title = utils.decodeHTMLEntities(title);
titleEscaped = title.replace(/%/g, '&#37;').replace(/,/g, '&#44;');
}
postData.content = posts.relativeToAbsolute(postData.content, posts.urlRegex);
postData.content = posts.relativeToAbsolute(postData.content, posts.imgRegex);
const notification = await notifications.create({
type: 'new-reply',
subject: title,
bodyShort: '[[notifications:user_posted_to, ' + postData.user.username + ', ' + titleEscaped + ']]',
bodyLong: postData.content,
pid: postData.pid,
path: '/post/' + postData.pid,
nid: 'new_post:tid:' + postData.topic.tid + ':pid:' + postData.pid + ':uid:' + exceptUid,
tid: postData.topic.tid,
from: exceptUid,
mergeId: 'notifications:user_posted_to|' + postData.topic.tid,
topicTitle: title,
...notifData,
});
if (notification) {
notifications.push(notification, followers);
}
notifications.push(notification, followers);
};
};

View File

@@ -67,7 +67,7 @@ Topics.getTopicsByTids = async function (tids, options) {
const uids = _.uniq(topics.map(t => t && t.uid && t.uid.toString()).filter(v => utils.isNumber(v)));
const cids = _.uniq(topics.map(t => t && t.cid && t.cid.toString()).filter(v => utils.isNumber(v)));
const guestTopics = topics.filter(t => t.uid === 0);
const guestTopics = topics.filter(t => t && t.uid === 0);
async function loadGuestHandles() {
return await Promise.all(guestTopics.map(topic => posts.getPostField(topic.mainPid, 'handle')));
}

View File

@@ -152,12 +152,15 @@ module.exports = function (Topics) {
};
Topics.getTopicTags = async function (tid) {
return await db.getSetMembers('topic:' + tid + ':tags');
const tags = await db.getSetMembers('topic:' + tid + ':tags');
return tags.sort();
};
Topics.getTopicsTags = async function (tids) {
const keys = tids.map(tid => 'topic:' + tid + ':tags');
return await db.getSetsMembers(keys);
const tags = await db.getSetsMembers(keys);
tags.forEach(tags => tags.sort());
return tags;
};
Topics.getTopicTagsObjects = async function (tid) {
@@ -192,6 +195,31 @@ module.exports = function (Topics) {
return topicTags;
};
Topics.addTags = async function (tags, tids) {
const topicData = await Topics.getTopicsFields(tids, ['timestamp']);
const sets = tids.map(tid => 'topic:' + tid + ':tags');
for (let i = 0; i < tags.length; i++) {
/* eslint-disable no-await-in-loop */
await Promise.all([
db.setsAdd(sets, tags[i]),
db.sortedSetAdd('tag:' + tags[i] + ':topics', topicData.map(t => t.timestamp), tids),
]);
await updateTagCount(tags[i]);
}
};
Topics.removeTags = async function (tags, tids) {
const sets = tids.map(tid => 'topic:' + tid + ':tags');
for (let i = 0; i < tags.length; i++) {
/* eslint-disable no-await-in-loop */
await Promise.all([
db.setsRemove(sets, tags[i]),
db.sortedSetRemove('tag:' + tags[i] + ':topics', tids),
]);
await updateTagCount(tags[i]);
}
};
Topics.updateTopicTags = async function (tid, tags) {
await Topics.deleteTopicTags(tid);
const timestamp = await Topics.getTopicField(tid, 'timestamp');

View File

@@ -93,7 +93,8 @@ module.exports = function (Topics) {
throw new Error('[[error:no-privileges]]');
}
await Topics.setTopicField(tid, 'locked', lock ? 1 : 0);
topicData.isLocked = lock;
topicData.isLocked = lock; // deprecate in v2.0
topicData.locked = lock;
plugins.fireHook('action:topic.lock', { topic: _.clone(topicData), uid: uid });
return topicData;

View File

@@ -44,9 +44,9 @@ module.exports = {
}
totalUserCount += 1;
await db.sortedSetAddBulk([
['users:joindate', userData.joindate, uids[index]],
['users:reputation', userData.reputation, uids[index]],
['users:postcount', userData.postcount, uids[index]],
['users:joindate', userData.joindate || Date.now(), uids[index]],
['users:reputation', userData.reputation || 0, uids[index]],
['users:postcount', userData.postcount || 0, uids[index]],
]);
if (userData.hasOwnProperty('flags') && parseInt(userData.flags, 10) > 0) {
await db.sortedSetAdd('users:flags', userData.flags, uids[index]);

View File

@@ -5,6 +5,7 @@ const LRU = require('lru-cache');
const db = require('../database');
const pubsub = require('../pubsub');
const plugins = require('../plugins');
module.exports = function (User) {
User.blocks = {
@@ -63,6 +64,7 @@ module.exports = function (User) {
await User.incrementUserFieldBy(uid, 'blocksCount', 1);
User.blocks._cache.del(parseInt(uid, 10));
pubsub.publish('user:blocks:cache:del', parseInt(uid, 10));
plugins.fireHook('action:user.blocks.add', { uid: uid, targetUid: targetUid });
};
User.blocks.remove = async function (targetUid, uid) {
@@ -71,6 +73,7 @@ module.exports = function (User) {
await User.decrementUserFieldBy(uid, 'blocksCount', 1);
User.blocks._cache.del(parseInt(uid, 10));
pubsub.publish('user:blocks:cache:del', parseInt(uid, 10));
plugins.fireHook('action:user.blocks.remove', { uid: uid, targetUid: targetUid });
};
User.blocks.applyChecks = async function (type, targetUid, uid) {
@@ -115,7 +118,8 @@ module.exports = function (User) {
set = set.filter(function (item) {
return !blockedSet.has(parseInt(isPlain ? item : item[property], 10));
});
const data = await plugins.fireHook('filter:user.blocks.filter', { set: set, property: property, uid: uid, blockedSet: blockedSet });
return set;
return data.set;
};
};

View File

@@ -109,7 +109,7 @@ describe('Categories', function () {
uid: 0,
}, function (err, categoryData) {
assert.ifError(err);
Categories.getRecentTopicReplies(categoryData, 0, function (err) {
Categories.getRecentTopicReplies(categoryData, 0, {}, function (err) {
assert.ifError(err);
done();
});
@@ -910,4 +910,18 @@ describe('Categories', function () {
});
});
});
it('should return nested children categories', async function () {
const rootCategory = await Categories.create({ name: 'root' });
const child1 = await Categories.create({ name: 'child1', parentCid: rootCategory.cid });
const child2 = await Categories.create({ name: 'child2', parentCid: child1.cid });
const data = await Categories.getCategoryById({
uid: 1,
cid: rootCategory.cid,
start: 0,
stop: 19,
});
assert.strictEqual(child1.cid, data.children[0].cid);
assert.strictEqual(child2.cid, data.children[0].children[0].cid);
});
});

View File

@@ -118,6 +118,18 @@ describe('Sorted Set methods', function () {
done();
});
});
it('should error if scores has null', async function () {
let err;
try {
await db.sortedSetsAdd(['sorted1', 'sorted2'], [1, null], 'dontadd');
} catch (_err) {
err = _err;
}
assert.equal(err.message, '[[error:invalid-score, 1,]]');
assert.strictEqual(await db.isSortedSetMember('sorted1', 'dontadd'), false);
assert.strictEqual(await db.isSortedSetMember('sorted2', 'dontadd'), false);
});
});
describe('sortedSetAddMulti()', function () {
@@ -146,6 +158,21 @@ describe('Sorted Set methods', function () {
done();
});
});
it('should error if score is null', async function () {
let err;
try {
await db.sortedSetAddBulk([
['bulk4', 0, 'dontadd'],
['bulk5', null, 'dontadd'],
]);
} catch (_err) {
err = _err;
}
assert.equal(err.message, '[[error:invalid-score, null]]');
assert.strictEqual(await db.isSortedSetMember('bulk4', 'dontadd'), false);
assert.strictEqual(await db.isSortedSetMember('bulk5', 'dontadd'), false);
});
});
describe('getSortedSetRange()', function () {

View File

@@ -1753,6 +1753,19 @@ describe('Topic\'s', function () {
});
});
});
it('should add and remove tags from topics properly', async () => {
const result = await topics.post({ uid: adminUid, tags: ['tag4', 'tag2', 'tag1', 'tag3'], title: 'tag topic', content: 'topic 1 content', cid: topic.categoryId });
const tid = result.topicData.tid;
let tags = await topics.getTopicTags(tid);
assert.deepStrictEqual(tags, ['tag1', 'tag2', 'tag3', 'tag4']);
await topics.addTags(['tag7', 'tag6', 'tag5'], [tid]);
tags = await topics.getTopicTags(tid);
assert.deepStrictEqual(tags, ['tag1', 'tag2', 'tag3', 'tag4', 'tag5', 'tag6', 'tag7']);
await topics.removeTags(['tag1', 'tag3', 'tag5', 'tag7'], [tid]);
tags = await topics.getTopicTags(tid);
assert.deepStrictEqual(tags, ['tag2', 'tag4', 'tag6']);
});
});
describe('follow/unfollow', function () {