From 5f30cc4ed8a368c8fcdfb5cc50fb5687b706d137 Mon Sep 17 00:00:00 2001 From: Misty Release Bot Date: Tue, 21 Jan 2025 09:19:18 +0000 Subject: [PATCH 001/125] Latest translations and fallbacks --- public/language/bg/error.json | 2 +- public/language/pl/admin/manage/categories.json | 4 ++-- public/language/pl/admin/settings/activitypub.json | 6 +++--- public/language/pl/admin/settings/general.json | 8 ++++---- public/language/pl/error.json | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/public/language/bg/error.json b/public/language/bg/error.json index 30952b74ec..ecc5c079c3 100644 --- a/public/language/bg/error.json +++ b/public/language/bg/error.json @@ -249,7 +249,7 @@ "api.501": "Пътят, който се опитвате да извикате, все още не съществува. Моля, опитайте отново утре.", "api.503": "Пътят, който се опитвате да извикате, в момента не е достъпен, поради настройките на сървъра.", "api.reauth-required": "Ресурсът, който се опитвате да достъпите, изисква (повторно) удостоверяване.", - "activitypub.not-enabled": "Federation is not enabled on this server", + "activitypub.not-enabled": "Федерирането не е включено на този сървър", "activitypub.invalid-id": "Входният идентификатор не може да бъде разпознат – може да е неправилен.", "activitypub.get-failed": "Посоченият материал не може да бъде получен.", "activitypub.pubKey-not-found": "Публичният ключ не може да бъде разпознат, така че потвърждението на данните не може да бъде извършено.", diff --git a/public/language/pl/admin/manage/categories.json b/public/language/pl/admin/manage/categories.json index a652daa9ca..67fd4b5e55 100644 --- a/public/language/pl/admin/manage/categories.json +++ b/public/language/pl/admin/manage/categories.json @@ -7,7 +7,7 @@ "privileges": "Uprawnienia", "back-to-categories": "Wróć do kategorii", "name": "Nazwa kategorii", - "handle": "Obsługa kategorii", + "handle": "Przydział kategorii", "handle.help": "Obsługa kategorii robi za znak rozpoznawczy w innych sieciach na wzór nazwy użytkownika. Z tej racji jej nazwa nie może się pokrywać z nazwą użytkownika lub grupą użytkowników.", "description": "Opis kategorii", "bg-color": "Kolor tła", @@ -91,7 +91,7 @@ "federation.syncing-follow": "Śledź", "federation.syncing-unfollow": "Przestań śledzić", "federation.followers": "Zdalni użytkownicy śledzący tę kategorię", - "federation.followers-handle": "Obsługa", + "federation.followers-handle": "Przydział", "federation.followers-id": "ID", "federation.followers-none": "Brak śledzących.", diff --git a/public/language/pl/admin/settings/activitypub.json b/public/language/pl/admin/settings/activitypub.json index 910806e69c..31aa6e7282 100644 --- a/public/language/pl/admin/settings/activitypub.json +++ b/public/language/pl/admin/settings/activitypub.json @@ -1,8 +1,8 @@ { - "intro-lead": "Czym jest Federacja? ", + "intro-lead": "Czym jest Federacja?", "intro-body": "NodeBB jest w stanie komunikować się z innymi instancjami NodeBB, które to obsługują. Jest to osiągnięte za pomocą protokołu ActivityPub. Jeśli włączono, NodeBB będzie też w stanie komunikować się z innymi aplikacjami i stronami, które używają ActivityPub (jak Mastodon, Peertube, itp.)", "general": "Ogólne", - "pruning": "Usuwanie Zawartości", + "pruning": "Usuwanie zawartości", "content-pruning": "Dni przechowywania zawartości zdalnej", "content-pruning-help": "Zauważ, że zawartość zdalna, która uzyskała jakąś reakcję (jak odpowiedź, głos) zostanie zachowana. (0 aby wyłączyć)", "user-pruning": "Dni przechowywania użytkowników zdalnych", @@ -12,7 +12,7 @@ "allowLoopback": "Zezwól na przetwarzanie pętli zwrotnej", "allowLoopback-help": "Użyteczne tylko do debugowania. Raczej powinieneś(-aś) zostawić to wyłączone.", - "probe": "Otwórz w Aplikacji", + "probe": "Otwórz w aplikacji", "probe-enabled": "Spróbuj otworzyć zawartość związaną z ActivityPub w NodeBB", "probe-enabled-help": "O ile włączone, NodeBB sprawdzi każdy odnośnik pod kątem odpowiednika ActivityPub, a załaduje w NodeBB.", "probe-timeout": "Czas oczekiwania (milisekundy)", diff --git a/public/language/pl/admin/settings/general.json b/public/language/pl/admin/settings/general.json index cf397e2aa5..45063d4935 100644 --- a/public/language/pl/admin/settings/general.json +++ b/public/language/pl/admin/settings/general.json @@ -51,12 +51,12 @@ "topic-tools": "Narzędzia tematu", "home-page": "Strona główna", "home-page-route": "Ścieżka strony głównej", - "custom-route": "Niestandardowa Ścieżka", + "custom-route": "Niestandardowa ścieżka", "allow-user-home-pages": "Zezwalaj na strony startowe użytkowników", - "home-page-title": "Tytuł strony głównej (domyślnie: „Strona Główna”)", + "home-page-title": "Tytuł strony głównej (domyślnie: \"Strona główna\")", "default-language": "Domyślny język", "auto-detect": "Automatycznie wykrywaj język gości", "default-language-help": "Domyślny język określa ustawienia języka dla wszystkich użytkowników, którzy odwiedzają forum.
Użytkownicy mogą zmienić domyślny język w ustawieniach swojego konta.", - "post-sharing": "Udostępnianie postów", - "info-plugins-additional": "Wtyczki mogą dodać dodatkowe platformy do udostępniania postów" + "post-sharing": "Udostępnianie wpisów", + "info-plugins-additional": "Wtyczki mogą dodać dodatkowe platformy do udostępniania wpisów." } \ No newline at end of file diff --git a/public/language/pl/error.json b/public/language/pl/error.json index e62c08f1d0..e73dfc1b30 100644 --- a/public/language/pl/error.json +++ b/public/language/pl/error.json @@ -184,7 +184,7 @@ "not-enough-reputation-custom-field": "Wymagane %1 reputatacji dla %2", "custom-user-field-value-too-long": "Zawartość dodatkowego pola za długa, %1", "custom-user-field-select-value-invalid": "Zawartość pola niewłaściwa, %1", - "custom-user-field-invalid-text": "Dodatkowe pole profilu jest wadliwa, %1", + "custom-user-field-invalid-text": "Dodatkowe pole profilu jest wadliwe, %1", "custom-user-field-invalid-link": "Odnośnik jest niewłaściwy, %1", "custom-user-field-invalid-number": "Wartość jest niewłaściwa, %1", "custom-user-field-invalid-date": "Data dodatkowego pola jest wadliwa, %1", @@ -249,7 +249,7 @@ "api.501": "Ścieżka jaką próbujesz wywołać, nie jest jeszcze zaimplementowana. Spróbuj ponownie jutro.", "api.503": "Ścieżka z którą próbujesz się połączyć, jest obecnie niedostępna z powodu konfiguracji serwera", "api.reauth-required": "Zasób, do którego próbujesz uzyskać dostęp, wymaga (być może ponownego) uwierzytelnienia.", - "activitypub.not-enabled": "Federation is not enabled on this server", + "activitypub.not-enabled": "Fediverse nie jest włączone na tym serwerze", "activitypub.invalid-id": "Nie można przetworzyć id na wejściu, czyli pewnie jest zdeformowane.", "activitypub.get-failed": "Nie udało się pobrać zadanego zasobu.", "activitypub.pubKey-not-found": "Nie udało się uzyskać klucza publicznego, więc nie może zajść weryfikacja zawartości.", From b98d047a805a4bea8febd77cc43dc035a914ac91 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 09:23:25 -0500 Subject: [PATCH 002/125] fix(deps): update dependency nodebb-theme-harmony to v2.0.3 (#13063) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 4ccdf409f3..cd0f41e6e1 100644 --- a/install/package.json +++ b/install/package.json @@ -108,7 +108,7 @@ "nodebb-plugin-spam-be-gone": "2.3.0", "nodebb-plugin-web-push": "0.7.2", "nodebb-rewards-essentials": "1.0.0", - "nodebb-theme-harmony": "2.0.0", + "nodebb-theme-harmony": "2.0.3", "nodebb-theme-lavender": "7.1.17", "nodebb-theme-peace": "2.2.33", "nodebb-theme-persona": "14.0.1", From 8ec3ceae73b4a3d64649047ead9551d799e4becb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 09:23:35 -0500 Subject: [PATCH 003/125] fix(deps): update dependency nodebb-theme-persona to v14.0.2 (#13064) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index cd0f41e6e1..cfed6930de 100644 --- a/install/package.json +++ b/install/package.json @@ -111,7 +111,7 @@ "nodebb-theme-harmony": "2.0.3", "nodebb-theme-lavender": "7.1.17", "nodebb-theme-peace": "2.2.33", - "nodebb-theme-persona": "14.0.1", + "nodebb-theme-persona": "14.0.2", "nodebb-widget-essentials": "7.0.32", "nodemailer": "6.9.16", "nprogress": "0.2.0", From 37b2b83df13b37ffa51a2bfbf595c94989f98098 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 09:23:47 -0500 Subject: [PATCH 004/125] chore(deps): update dependency lint-staged to v15.4.1 (#13060) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index cfed6930de..3e73a7850f 100644 --- a/install/package.json +++ b/install/package.json @@ -169,7 +169,7 @@ "grunt-contrib-watch": "1.1.0", "husky": "8.0.3", "jsdom": "26.0.0", - "lint-staged": "15.4.0", + "lint-staged": "15.4.1", "mocha": "11.0.1", "mocha-lcov-reporter": "1.3.0", "mockdate": "3.0.5", From 7d5482b26b092aa353f04478fb2a5528154213c1 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 21 Jan 2025 10:27:09 -0500 Subject: [PATCH 005/125] chore: add helper method to ease in dev --- src/activitypub/helpers.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/activitypub/helpers.js b/src/activitypub/helpers.js index dd0b0c05ff..545903fe93 100644 --- a/src/activitypub/helpers.js +++ b/src/activitypub/helpers.js @@ -28,6 +28,16 @@ const sha256 = payload => crypto.createHash('sha256').update(payload).digest('he const Helpers = module.exports; +Helpers._test = (method, args) => { + // because I am lazy and I probably wrote some variant of this below code 1000 times already + setTimeout(async () => { + console.log(await method.apply(method, args)); + }, 2500); +}; +// process.nextTick(() => { +// Helpers._test(activitypub.notes.assert, ['uid', 1, `https://`]); +// }); + let _lastLog; Helpers.log = (message) => { if (!message) { From adeaff4b820341eb7858162363c617633cf31638 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 21 Jan 2025 12:43:35 -0500 Subject: [PATCH 006/125] feat: changes to how a topic is presented via ActivityPub; conformance with upcoming changes to 7888 --- src/activitypub/contexts.js | 22 ++++++--- src/activitypub/notes.js | 2 +- src/controllers/activitypub/actors.js | 65 ++++++++++++++++++--------- src/routes/activitypub.js | 3 +- 4 files changed, 61 insertions(+), 31 deletions(-) diff --git a/src/activitypub/contexts.js b/src/activitypub/contexts.js index 12dcae1059..3f32654e68 100644 --- a/src/activitypub/contexts.js +++ b/src/activitypub/contexts.js @@ -12,6 +12,7 @@ const acceptableTypes = ['Collection', 'CollectionPage', 'OrderedCollection', 'O Contexts.get = async (uid, id) => { let context; let type; + let collection; // Generate digest for If-None-Match if locally cached const tid = await posts.getPostField(id, 'tid'); @@ -27,12 +28,15 @@ Contexts.get = async (uid, id) => { } try { - ({ context } = await activitypub.get('uid', uid, id, { headers })); - if (!context) { + ({ id, type, context, posts: collection } = await activitypub.get('uid', uid, id, { headers })); + if (type === 'Conversation' && collection) { + activitypub.helpers.log(`[activitypub/context] ${id} is the context.`); + return { context: id, collection }; + } else if (!context) { activitypub.helpers.log(`[activitypub/context] ${id} contains no context.`); return false; } - ({ type } = await activitypub.get('uid', uid, context)); + ({ type, posts: collection } = await activitypub.get('uid', uid, context)); } catch (e) { if (e.code === 'ap_get_304') { activitypub.helpers.log(`[activitypub/context] ${id} context unchanged.`); @@ -43,8 +47,8 @@ Contexts.get = async (uid, id) => { return false; } - if (acceptableTypes.includes(type)) { - return { context }; + if (type === 'Conversation') { + return { context, collection }; } return false; @@ -98,9 +102,13 @@ Contexts.getItems = async (uid, id, options) => { const inputId = activitypub.helpers.isUri(options.input) ? options.input : options.input.id; const inCollection = Array.from(chain).map(p => p.pid).includes(inputId); if (!inCollection) { - chain.add(activitypub.helpers.isUri(options.input) ? + const item = activitypub.helpers.isUri(options.input) ? await parseString(uid, options.input) : - await parseItem(uid, options.input)); + await parseItem(uid, options.input); + + if (item) { + chain.add(item); + } } return chain; diff --git a/src/activitypub/notes.js b/src/activitypub/notes.js index 03cca7d9d8..0e9df7bcb3 100644 --- a/src/activitypub/notes.js +++ b/src/activitypub/notes.js @@ -49,7 +49,7 @@ Notes.assert = async (uid, input, options = { skipChecks: false }) => { const { tid } = context; return { tid, count: 0 }; } else if (context.context) { - chain = Array.from(await activitypub.contexts.getItems(uid, context.context, { input })); + chain = Array.from(await activitypub.contexts.getItems(uid, context.collection, { input })); if (chain && chain.length) { // Context resolves, use in later topic creation context = context.context; diff --git a/src/controllers/activitypub/actors.js b/src/controllers/activitypub/actors.js index c80f6e2867..7b05938c80 100644 --- a/src/controllers/activitypub/actors.js +++ b/src/controllers/activitypub/actors.js @@ -115,12 +115,52 @@ Actors.replies = async function (req, res) { Actors.topic = async function (req, res, next) { const allowed = await privileges.topics.can('topics:read', req.params.tid, activitypub._constants.uid); if (!allowed) { - return res.sendStatus(404); + return next(); + } + + const { cid, titleRaw: name, mainPid, slug } = await topics.getTopicFields(req.params.tid, ['cid', 'title', 'mainPid', 'slug']); + let pids = await db.getSortedSetMembers(`tid:${req.params.tid}:posts`); + pids.push(mainPid); + pids = pids.map(pid => (utils.isNumber(pid) ? `${nconf.get('url')}/post/${pid}` : pid)); + + // Generate digest for ETag + const digest = activitypub.helpers.generateDigest(new Set(pids)); + const ifNoneMatch = (req.get('If-None-Match') || '').split(',').map((tag) => { + tag = tag.trim(); + if (tag.startsWith('"') && tag.endsWith('"')) { + return tag.slice(1, tag.length - 1); + } + + return tag; + }); + if (ifNoneMatch.includes(digest)) { + return res.sendStatus(304); + } + res.set('ETag', digest); + + const object = { + '@context': 'https://www.w3.org/ns/activitystreams', + id: `${nconf.get('url')}/topic/${req.params.tid}`, + url: `${nconf.get('url')}/topic/${slug}`, + type: 'Conversation', + name, + attributedTo: `${nconf.get('url')}/category/${cid}`, + // audience: cid !== -1 ? `${nconf.get('url')}/category/${cid}` : undefined, + posts: `${nconf.get('url')}/topic/${req.params.tid}/posts`, + }; + + res.status(200).json(object); +}; + +Actors.topicPosts = async function (req, res, next) { + const allowed = await privileges.topics.can('topics:read', req.params.tid, activitypub._constants.uid); + if (!allowed) { + return next(); } const page = parseInt(req.query.page, 10) || undefined; const perPage = meta.config.postsPerPage; - const { cid, titleRaw: name, mainPid, slug } = await topics.getTopicFields(req.params.tid, ['cid', 'title', 'mainPid', 'slug']); + const mainPid = await topics.getTopicField(req.params.tid, 'mainPid'); try { let [collection, pids] = await Promise.all([ activitypub.helpers.generateCollection({ @@ -136,21 +176,6 @@ Actors.topic = async function (req, res, next) { pids = pids.map(pid => (utils.isNumber(pid) ? `${nconf.get('url')}/post/${pid}` : pid)); collection.totalItems += 1; // account for mainPid - // Generate digest for ETag - const digest = activitypub.helpers.generateDigest(new Set(pids)); - const ifNoneMatch = (req.get('If-None-Match') || '').split(',').map((tag) => { - tag = tag.trim(); - if (tag.startsWith('"') && tag.endsWith('"')) { - return tag.slice(1, tag.length - 1); - } - - return tag; - }); - if (ifNoneMatch.includes(digest)) { - return res.sendStatus(304); - } - res.set('ETag', digest); - // Convert pids to urls if (page || collection.totalItems < meta.config.postsPerPage) { collection.orderedItems = collection.orderedItems || []; @@ -162,11 +187,7 @@ Actors.topic = async function (req, res, next) { const object = { '@context': 'https://www.w3.org/ns/activitystreams', - id: `${nconf.get('url')}/topic/${req.params.tid}${collection.orderedItems && page ? `?page=${page}` : ''}`, - url: `${nconf.get('url')}/topic/${slug}`, - name, - attributedTo: `${nconf.get('url')}/category/${cid}`, - audience: cid !== -1 ? `${nconf.get('url')}/category/${cid}` : undefined, + id: `${nconf.get('url')}/topic/${req.params.tid}/posts${collection.orderedItems && page ? `?page=${page}` : ''}`, ...collection, }; diff --git a/src/routes/activitypub.js b/src/routes/activitypub.js index 8993cb8875..0c26a36ea4 100644 --- a/src/routes/activitypub.js +++ b/src/routes/activitypub.js @@ -40,13 +40,14 @@ module.exports = function (app, middleware, controllers) { app.get('/post/:pid', [...middlewares, middleware.assert.post], controllers.activitypub.actors.note); app.get('/post/:pid/replies', [...middlewares, middleware.assert.post], controllers.activitypub.actors.replies); + app.get('/topic/:tid/posts', [...middlewares, middleware.assert.topic], controllers.activitypub.actors.topicPosts); app.get('/topic/:tid/:slug?', [...middlewares, middleware.assert.topic], controllers.activitypub.actors.topic); - app.get('/category/:cid/:slug?', [...middlewares, middleware.assert.category], controllers.activitypub.actors.category); app.get('/category/:cid/inbox', [...middlewares, middleware.assert.category], controllers.activitypub.getInbox); app.post('/category/:cid/inbox', [...inboxMiddlewares, middleware.assert.category, ...inboxMiddlewares], controllers.activitypub.postInbox); app.get('/category/:cid/outbox', [...middlewares, middleware.assert.category], controllers.activitypub.getCategoryOutbox); app.post('/category/:cid/outbox', [...middlewares, middleware.assert.category], controllers.activitypub.postOutbox); + app.get('/category/:cid/:slug?', [...middlewares, middleware.assert.category], controllers.activitypub.actors.category); app.get('/message/:mid', [...middlewares, middleware.assert.message], controllers.activitypub.actors.message); }; From b2530e61228695e6937255c0cf7f13a33d566c4b Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 21 Jan 2025 13:01:27 -0500 Subject: [PATCH 007/125] fix: incorrect `posts` url in topic posts collection --- src/controllers/activitypub/actors.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/activitypub/actors.js b/src/controllers/activitypub/actors.js index 7b05938c80..ca92cee5f0 100644 --- a/src/controllers/activitypub/actors.js +++ b/src/controllers/activitypub/actors.js @@ -168,7 +168,7 @@ Actors.topicPosts = async function (req, res, next) { method: posts.getPidsFromSet, page, perPage, - url: `${nconf.get('url')}/topic/${req.params.tid}`, + url: `${nconf.get('url')}/topic/${req.params.tid}/posts`, }), db.getSortedSetMembers(`tid:${req.params.tid}:posts`), ]); From 0069f08ecd77b85227b4feb31db042754d877247 Mon Sep 17 00:00:00 2001 From: Misty Release Bot Date: Tue, 21 Jan 2025 09:19:18 +0000 Subject: [PATCH 008/125] Latest translations and fallbacks --- public/language/bg/error.json | 2 +- public/language/pl/admin/manage/categories.json | 4 ++-- public/language/pl/admin/settings/activitypub.json | 6 +++--- public/language/pl/admin/settings/general.json | 8 ++++---- public/language/pl/error.json | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/public/language/bg/error.json b/public/language/bg/error.json index 30952b74ec..ecc5c079c3 100644 --- a/public/language/bg/error.json +++ b/public/language/bg/error.json @@ -249,7 +249,7 @@ "api.501": "Пътят, който се опитвате да извикате, все още не съществува. Моля, опитайте отново утре.", "api.503": "Пътят, който се опитвате да извикате, в момента не е достъпен, поради настройките на сървъра.", "api.reauth-required": "Ресурсът, който се опитвате да достъпите, изисква (повторно) удостоверяване.", - "activitypub.not-enabled": "Federation is not enabled on this server", + "activitypub.not-enabled": "Федерирането не е включено на този сървър", "activitypub.invalid-id": "Входният идентификатор не може да бъде разпознат – може да е неправилен.", "activitypub.get-failed": "Посоченият материал не може да бъде получен.", "activitypub.pubKey-not-found": "Публичният ключ не може да бъде разпознат, така че потвърждението на данните не може да бъде извършено.", diff --git a/public/language/pl/admin/manage/categories.json b/public/language/pl/admin/manage/categories.json index a652daa9ca..67fd4b5e55 100644 --- a/public/language/pl/admin/manage/categories.json +++ b/public/language/pl/admin/manage/categories.json @@ -7,7 +7,7 @@ "privileges": "Uprawnienia", "back-to-categories": "Wróć do kategorii", "name": "Nazwa kategorii", - "handle": "Obsługa kategorii", + "handle": "Przydział kategorii", "handle.help": "Obsługa kategorii robi za znak rozpoznawczy w innych sieciach na wzór nazwy użytkownika. Z tej racji jej nazwa nie może się pokrywać z nazwą użytkownika lub grupą użytkowników.", "description": "Opis kategorii", "bg-color": "Kolor tła", @@ -91,7 +91,7 @@ "federation.syncing-follow": "Śledź", "federation.syncing-unfollow": "Przestań śledzić", "federation.followers": "Zdalni użytkownicy śledzący tę kategorię", - "federation.followers-handle": "Obsługa", + "federation.followers-handle": "Przydział", "federation.followers-id": "ID", "federation.followers-none": "Brak śledzących.", diff --git a/public/language/pl/admin/settings/activitypub.json b/public/language/pl/admin/settings/activitypub.json index 910806e69c..31aa6e7282 100644 --- a/public/language/pl/admin/settings/activitypub.json +++ b/public/language/pl/admin/settings/activitypub.json @@ -1,8 +1,8 @@ { - "intro-lead": "Czym jest Federacja? ", + "intro-lead": "Czym jest Federacja?", "intro-body": "NodeBB jest w stanie komunikować się z innymi instancjami NodeBB, które to obsługują. Jest to osiągnięte za pomocą protokołu ActivityPub. Jeśli włączono, NodeBB będzie też w stanie komunikować się z innymi aplikacjami i stronami, które używają ActivityPub (jak Mastodon, Peertube, itp.)", "general": "Ogólne", - "pruning": "Usuwanie Zawartości", + "pruning": "Usuwanie zawartości", "content-pruning": "Dni przechowywania zawartości zdalnej", "content-pruning-help": "Zauważ, że zawartość zdalna, która uzyskała jakąś reakcję (jak odpowiedź, głos) zostanie zachowana. (0 aby wyłączyć)", "user-pruning": "Dni przechowywania użytkowników zdalnych", @@ -12,7 +12,7 @@ "allowLoopback": "Zezwól na przetwarzanie pętli zwrotnej", "allowLoopback-help": "Użyteczne tylko do debugowania. Raczej powinieneś(-aś) zostawić to wyłączone.", - "probe": "Otwórz w Aplikacji", + "probe": "Otwórz w aplikacji", "probe-enabled": "Spróbuj otworzyć zawartość związaną z ActivityPub w NodeBB", "probe-enabled-help": "O ile włączone, NodeBB sprawdzi każdy odnośnik pod kątem odpowiednika ActivityPub, a załaduje w NodeBB.", "probe-timeout": "Czas oczekiwania (milisekundy)", diff --git a/public/language/pl/admin/settings/general.json b/public/language/pl/admin/settings/general.json index cf397e2aa5..45063d4935 100644 --- a/public/language/pl/admin/settings/general.json +++ b/public/language/pl/admin/settings/general.json @@ -51,12 +51,12 @@ "topic-tools": "Narzędzia tematu", "home-page": "Strona główna", "home-page-route": "Ścieżka strony głównej", - "custom-route": "Niestandardowa Ścieżka", + "custom-route": "Niestandardowa ścieżka", "allow-user-home-pages": "Zezwalaj na strony startowe użytkowników", - "home-page-title": "Tytuł strony głównej (domyślnie: „Strona Główna”)", + "home-page-title": "Tytuł strony głównej (domyślnie: \"Strona główna\")", "default-language": "Domyślny język", "auto-detect": "Automatycznie wykrywaj język gości", "default-language-help": "Domyślny język określa ustawienia języka dla wszystkich użytkowników, którzy odwiedzają forum.
Użytkownicy mogą zmienić domyślny język w ustawieniach swojego konta.", - "post-sharing": "Udostępnianie postów", - "info-plugins-additional": "Wtyczki mogą dodać dodatkowe platformy do udostępniania postów" + "post-sharing": "Udostępnianie wpisów", + "info-plugins-additional": "Wtyczki mogą dodać dodatkowe platformy do udostępniania wpisów." } \ No newline at end of file diff --git a/public/language/pl/error.json b/public/language/pl/error.json index e62c08f1d0..e73dfc1b30 100644 --- a/public/language/pl/error.json +++ b/public/language/pl/error.json @@ -184,7 +184,7 @@ "not-enough-reputation-custom-field": "Wymagane %1 reputatacji dla %2", "custom-user-field-value-too-long": "Zawartość dodatkowego pola za długa, %1", "custom-user-field-select-value-invalid": "Zawartość pola niewłaściwa, %1", - "custom-user-field-invalid-text": "Dodatkowe pole profilu jest wadliwa, %1", + "custom-user-field-invalid-text": "Dodatkowe pole profilu jest wadliwe, %1", "custom-user-field-invalid-link": "Odnośnik jest niewłaściwy, %1", "custom-user-field-invalid-number": "Wartość jest niewłaściwa, %1", "custom-user-field-invalid-date": "Data dodatkowego pola jest wadliwa, %1", @@ -249,7 +249,7 @@ "api.501": "Ścieżka jaką próbujesz wywołać, nie jest jeszcze zaimplementowana. Spróbuj ponownie jutro.", "api.503": "Ścieżka z którą próbujesz się połączyć, jest obecnie niedostępna z powodu konfiguracji serwera", "api.reauth-required": "Zasób, do którego próbujesz uzyskać dostęp, wymaga (być może ponownego) uwierzytelnienia.", - "activitypub.not-enabled": "Federation is not enabled on this server", + "activitypub.not-enabled": "Fediverse nie jest włączone na tym serwerze", "activitypub.invalid-id": "Nie można przetworzyć id na wejściu, czyli pewnie jest zdeformowane.", "activitypub.get-failed": "Nie udało się pobrać zadanego zasobu.", "activitypub.pubKey-not-found": "Nie udało się uzyskać klucza publicznego, więc nie może zajść weryfikacja zawartości.", From 153e65bc50ebb930a435cb8ac86519981a784b22 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 09:23:47 -0500 Subject: [PATCH 009/125] chore(deps): update dependency lint-staged to v15.4.1 (#13060) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index e8e55324e2..3e60ee9539 100644 --- a/install/package.json +++ b/install/package.json @@ -169,7 +169,7 @@ "grunt-contrib-watch": "1.1.0", "husky": "8.0.3", "jsdom": "26.0.0", - "lint-staged": "15.4.0", + "lint-staged": "15.4.1", "mocha": "11.0.1", "mocha-lcov-reporter": "1.3.0", "mockdate": "3.0.5", From d7d64a14756f391261996aeae25740f7d7242616 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 21 Jan 2025 10:27:09 -0500 Subject: [PATCH 010/125] chore: add helper method to ease in dev --- src/activitypub/helpers.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/activitypub/helpers.js b/src/activitypub/helpers.js index dd0b0c05ff..545903fe93 100644 --- a/src/activitypub/helpers.js +++ b/src/activitypub/helpers.js @@ -28,6 +28,16 @@ const sha256 = payload => crypto.createHash('sha256').update(payload).digest('he const Helpers = module.exports; +Helpers._test = (method, args) => { + // because I am lazy and I probably wrote some variant of this below code 1000 times already + setTimeout(async () => { + console.log(await method.apply(method, args)); + }, 2500); +}; +// process.nextTick(() => { +// Helpers._test(activitypub.notes.assert, ['uid', 1, `https://`]); +// }); + let _lastLog; Helpers.log = (message) => { if (!message) { From 4fd7a9dc59b65e8654d704c493f2254793e8d6a9 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 21 Jan 2025 12:43:35 -0500 Subject: [PATCH 011/125] feat: changes to how a topic is presented via ActivityPub; conformance with upcoming changes to 7888 --- src/activitypub/contexts.js | 22 ++++++--- src/activitypub/notes.js | 2 +- src/controllers/activitypub/actors.js | 65 ++++++++++++++++++--------- src/routes/activitypub.js | 3 +- 4 files changed, 61 insertions(+), 31 deletions(-) diff --git a/src/activitypub/contexts.js b/src/activitypub/contexts.js index 12dcae1059..3f32654e68 100644 --- a/src/activitypub/contexts.js +++ b/src/activitypub/contexts.js @@ -12,6 +12,7 @@ const acceptableTypes = ['Collection', 'CollectionPage', 'OrderedCollection', 'O Contexts.get = async (uid, id) => { let context; let type; + let collection; // Generate digest for If-None-Match if locally cached const tid = await posts.getPostField(id, 'tid'); @@ -27,12 +28,15 @@ Contexts.get = async (uid, id) => { } try { - ({ context } = await activitypub.get('uid', uid, id, { headers })); - if (!context) { + ({ id, type, context, posts: collection } = await activitypub.get('uid', uid, id, { headers })); + if (type === 'Conversation' && collection) { + activitypub.helpers.log(`[activitypub/context] ${id} is the context.`); + return { context: id, collection }; + } else if (!context) { activitypub.helpers.log(`[activitypub/context] ${id} contains no context.`); return false; } - ({ type } = await activitypub.get('uid', uid, context)); + ({ type, posts: collection } = await activitypub.get('uid', uid, context)); } catch (e) { if (e.code === 'ap_get_304') { activitypub.helpers.log(`[activitypub/context] ${id} context unchanged.`); @@ -43,8 +47,8 @@ Contexts.get = async (uid, id) => { return false; } - if (acceptableTypes.includes(type)) { - return { context }; + if (type === 'Conversation') { + return { context, collection }; } return false; @@ -98,9 +102,13 @@ Contexts.getItems = async (uid, id, options) => { const inputId = activitypub.helpers.isUri(options.input) ? options.input : options.input.id; const inCollection = Array.from(chain).map(p => p.pid).includes(inputId); if (!inCollection) { - chain.add(activitypub.helpers.isUri(options.input) ? + const item = activitypub.helpers.isUri(options.input) ? await parseString(uid, options.input) : - await parseItem(uid, options.input)); + await parseItem(uid, options.input); + + if (item) { + chain.add(item); + } } return chain; diff --git a/src/activitypub/notes.js b/src/activitypub/notes.js index 03cca7d9d8..0e9df7bcb3 100644 --- a/src/activitypub/notes.js +++ b/src/activitypub/notes.js @@ -49,7 +49,7 @@ Notes.assert = async (uid, input, options = { skipChecks: false }) => { const { tid } = context; return { tid, count: 0 }; } else if (context.context) { - chain = Array.from(await activitypub.contexts.getItems(uid, context.context, { input })); + chain = Array.from(await activitypub.contexts.getItems(uid, context.collection, { input })); if (chain && chain.length) { // Context resolves, use in later topic creation context = context.context; diff --git a/src/controllers/activitypub/actors.js b/src/controllers/activitypub/actors.js index c80f6e2867..7b05938c80 100644 --- a/src/controllers/activitypub/actors.js +++ b/src/controllers/activitypub/actors.js @@ -115,12 +115,52 @@ Actors.replies = async function (req, res) { Actors.topic = async function (req, res, next) { const allowed = await privileges.topics.can('topics:read', req.params.tid, activitypub._constants.uid); if (!allowed) { - return res.sendStatus(404); + return next(); + } + + const { cid, titleRaw: name, mainPid, slug } = await topics.getTopicFields(req.params.tid, ['cid', 'title', 'mainPid', 'slug']); + let pids = await db.getSortedSetMembers(`tid:${req.params.tid}:posts`); + pids.push(mainPid); + pids = pids.map(pid => (utils.isNumber(pid) ? `${nconf.get('url')}/post/${pid}` : pid)); + + // Generate digest for ETag + const digest = activitypub.helpers.generateDigest(new Set(pids)); + const ifNoneMatch = (req.get('If-None-Match') || '').split(',').map((tag) => { + tag = tag.trim(); + if (tag.startsWith('"') && tag.endsWith('"')) { + return tag.slice(1, tag.length - 1); + } + + return tag; + }); + if (ifNoneMatch.includes(digest)) { + return res.sendStatus(304); + } + res.set('ETag', digest); + + const object = { + '@context': 'https://www.w3.org/ns/activitystreams', + id: `${nconf.get('url')}/topic/${req.params.tid}`, + url: `${nconf.get('url')}/topic/${slug}`, + type: 'Conversation', + name, + attributedTo: `${nconf.get('url')}/category/${cid}`, + // audience: cid !== -1 ? `${nconf.get('url')}/category/${cid}` : undefined, + posts: `${nconf.get('url')}/topic/${req.params.tid}/posts`, + }; + + res.status(200).json(object); +}; + +Actors.topicPosts = async function (req, res, next) { + const allowed = await privileges.topics.can('topics:read', req.params.tid, activitypub._constants.uid); + if (!allowed) { + return next(); } const page = parseInt(req.query.page, 10) || undefined; const perPage = meta.config.postsPerPage; - const { cid, titleRaw: name, mainPid, slug } = await topics.getTopicFields(req.params.tid, ['cid', 'title', 'mainPid', 'slug']); + const mainPid = await topics.getTopicField(req.params.tid, 'mainPid'); try { let [collection, pids] = await Promise.all([ activitypub.helpers.generateCollection({ @@ -136,21 +176,6 @@ Actors.topic = async function (req, res, next) { pids = pids.map(pid => (utils.isNumber(pid) ? `${nconf.get('url')}/post/${pid}` : pid)); collection.totalItems += 1; // account for mainPid - // Generate digest for ETag - const digest = activitypub.helpers.generateDigest(new Set(pids)); - const ifNoneMatch = (req.get('If-None-Match') || '').split(',').map((tag) => { - tag = tag.trim(); - if (tag.startsWith('"') && tag.endsWith('"')) { - return tag.slice(1, tag.length - 1); - } - - return tag; - }); - if (ifNoneMatch.includes(digest)) { - return res.sendStatus(304); - } - res.set('ETag', digest); - // Convert pids to urls if (page || collection.totalItems < meta.config.postsPerPage) { collection.orderedItems = collection.orderedItems || []; @@ -162,11 +187,7 @@ Actors.topic = async function (req, res, next) { const object = { '@context': 'https://www.w3.org/ns/activitystreams', - id: `${nconf.get('url')}/topic/${req.params.tid}${collection.orderedItems && page ? `?page=${page}` : ''}`, - url: `${nconf.get('url')}/topic/${slug}`, - name, - attributedTo: `${nconf.get('url')}/category/${cid}`, - audience: cid !== -1 ? `${nconf.get('url')}/category/${cid}` : undefined, + id: `${nconf.get('url')}/topic/${req.params.tid}/posts${collection.orderedItems && page ? `?page=${page}` : ''}`, ...collection, }; diff --git a/src/routes/activitypub.js b/src/routes/activitypub.js index 8993cb8875..0c26a36ea4 100644 --- a/src/routes/activitypub.js +++ b/src/routes/activitypub.js @@ -40,13 +40,14 @@ module.exports = function (app, middleware, controllers) { app.get('/post/:pid', [...middlewares, middleware.assert.post], controllers.activitypub.actors.note); app.get('/post/:pid/replies', [...middlewares, middleware.assert.post], controllers.activitypub.actors.replies); + app.get('/topic/:tid/posts', [...middlewares, middleware.assert.topic], controllers.activitypub.actors.topicPosts); app.get('/topic/:tid/:slug?', [...middlewares, middleware.assert.topic], controllers.activitypub.actors.topic); - app.get('/category/:cid/:slug?', [...middlewares, middleware.assert.category], controllers.activitypub.actors.category); app.get('/category/:cid/inbox', [...middlewares, middleware.assert.category], controllers.activitypub.getInbox); app.post('/category/:cid/inbox', [...inboxMiddlewares, middleware.assert.category, ...inboxMiddlewares], controllers.activitypub.postInbox); app.get('/category/:cid/outbox', [...middlewares, middleware.assert.category], controllers.activitypub.getCategoryOutbox); app.post('/category/:cid/outbox', [...middlewares, middleware.assert.category], controllers.activitypub.postOutbox); + app.get('/category/:cid/:slug?', [...middlewares, middleware.assert.category], controllers.activitypub.actors.category); app.get('/message/:mid', [...middlewares, middleware.assert.message], controllers.activitypub.actors.message); }; From 812ec73ed7bfed68fb79b48597c1403ac106ef64 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 21 Jan 2025 13:01:27 -0500 Subject: [PATCH 012/125] fix: incorrect `posts` url in topic posts collection --- src/controllers/activitypub/actors.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/activitypub/actors.js b/src/controllers/activitypub/actors.js index 7b05938c80..ca92cee5f0 100644 --- a/src/controllers/activitypub/actors.js +++ b/src/controllers/activitypub/actors.js @@ -168,7 +168,7 @@ Actors.topicPosts = async function (req, res, next) { method: posts.getPidsFromSet, page, perPage, - url: `${nconf.get('url')}/topic/${req.params.tid}`, + url: `${nconf.get('url')}/topic/${req.params.tid}/posts`, }), db.getSortedSetMembers(`tid:${req.params.tid}:posts`), ]); From 59afd193354bb9aefbf87f16cecce7b396ea91a4 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 22 Jan 2025 13:12:02 -0500 Subject: [PATCH 013/125] test: adjust webfinger test for updated 404 status code --- test/activitypub/webfinger.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/activitypub/webfinger.js b/test/activitypub/webfinger.js index c408000e9e..c59cb2c0e1 100644 --- a/test/activitypub/webfinger.js +++ b/test/activitypub/webfinger.js @@ -33,12 +33,12 @@ describe('WebFinger endpoint', () => { assert.strictEqual(response.statusCode, 400); }); - it('should return 403 Forbidden if the calling user is not allowed to view the user list/profiles', async () => { + it('should return 404 Not Found if the calling user is not allowed to view the user list/profiles', async () => { await privileges.global.rescind(['groups:view:users'], 'fediverse'); const { response } = await request.get(`${nconf.get('url')}/.well-known/webfinger?resource=acct%3a${slug}%40${host}`); assert(response); - assert.strictEqual(response.statusCode, 400); + assert.strictEqual(response.statusCode, 404); await privileges.global.give(['groups:view:users'], 'fediverse'); }); From c3e9cb68e0d6cdda665aa6e19140820312407d1c Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 22 Jan 2025 13:26:29 -0500 Subject: [PATCH 014/125] feat: #13066, report canonical URL in user agent for outgoing requests --- src/request.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/request.js b/src/request.js index 7f6efb300a..b84b198914 100644 --- a/src/request.js +++ b/src/request.js @@ -1,5 +1,6 @@ 'use strict'; +const nconf = require('nconf'); const { CookieJar } = require('tough-cookie'); const fetchCookie = require('fetch-cookie').default; const { version } = require('../package.json'); @@ -8,7 +9,7 @@ exports.jar = function () { return new CookieJar(); }; -const userAgent = `NodeBB/${version.split('.').shift()}.x`; +const userAgent = `NodeBB/${version.split('.').shift()}.x (${nconf.get('url')})`; // Initialize fetch - somewhat hacky, but it's required for globalDispatcher to be available async function call(url, method, { body, timeout, jar, ...config } = {}) { From b14494b03dd20b0e600df51d80d925bd80d10c76 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 22 Jan 2025 13:39:47 -0500 Subject: [PATCH 015/125] chore: fix ap dev helper --- src/activitypub/helpers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/activitypub/helpers.js b/src/activitypub/helpers.js index 545903fe93..70adf66e8b 100644 --- a/src/activitypub/helpers.js +++ b/src/activitypub/helpers.js @@ -35,7 +35,7 @@ Helpers._test = (method, args) => { }, 2500); }; // process.nextTick(() => { -// Helpers._test(activitypub.notes.assert, ['uid', 1, `https://`]); +// Helpers._test(activitypub.notes.assert, [1, `https://`]); // }); let _lastLog; From 397d28e3b6001f81555802b4387e30035cbb65d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 22 Jan 2025 13:52:04 -0500 Subject: [PATCH 016/125] lint: fix tab --- src/activitypub/helpers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/activitypub/helpers.js b/src/activitypub/helpers.js index 70adf66e8b..ec293504f1 100644 --- a/src/activitypub/helpers.js +++ b/src/activitypub/helpers.js @@ -35,7 +35,7 @@ Helpers._test = (method, args) => { }, 2500); }; // process.nextTick(() => { -// Helpers._test(activitypub.notes.assert, [1, `https://`]); +// Helpers._test(activitypub.notes.assert, [1, `https://`]); // }); let _lastLog; From d1d554613a2209578f10cfa52b2299101e696eb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 22 Jan 2025 14:00:44 -0500 Subject: [PATCH 017/125] test: add sourceContent to spec --- public/openapi/read/categories.yaml | 3 +++ public/openapi/read/index.yaml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/public/openapi/read/categories.yaml b/public/openapi/read/categories.yaml index 37c0c09d31..76d2375ebb 100644 --- a/public/openapi/read/categories.yaml +++ b/public/openapi/read/categories.yaml @@ -142,6 +142,9 @@ get: type: number content: type: string + sourceContent: + type: string + nullable: true timestampISO: type: string description: An ISO 8601 formatted date string (complementing `timestamp`) diff --git a/public/openapi/read/index.yaml b/public/openapi/read/index.yaml index f6c09d7c21..4c45da4360 100644 --- a/public/openapi/read/index.yaml +++ b/public/openapi/read/index.yaml @@ -144,6 +144,9 @@ get: type: number content: type: string + sourceContent: + type: string + nullable: true timestampISO: type: string description: An ISO 8601 formatted date string (complementing `timestamp`) From 8e99c97ae1865d561e0dce1729868c4658a5a9c2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Jan 2025 17:21:28 -0500 Subject: [PATCH 018/125] chore(deps): update dependency mocha to v11.1.0 (#13069) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 3e60ee9539..d15878f3eb 100644 --- a/install/package.json +++ b/install/package.json @@ -170,7 +170,7 @@ "husky": "8.0.3", "jsdom": "26.0.0", "lint-staged": "15.4.1", - "mocha": "11.0.1", + "mocha": "11.1.0", "mocha-lcov-reporter": "1.3.0", "mockdate": "3.0.5", "nyc": "17.1.0", From 075a91b0a198ddd3a9a4cb9b5845fc570ffe03ed Mon Sep 17 00:00:00 2001 From: Misty Release Bot Date: Thu, 23 Jan 2025 09:19:48 +0000 Subject: [PATCH 019/125] Latest translations and fallbacks --- public/language/he/category.json | 6 ++--- public/language/he/error.json | 2 +- public/language/he/login.json | 2 +- public/language/he/modules.json | 44 ++++++++++++++++---------------- public/language/he/unread.json | 4 +-- public/language/he/user.json | 12 ++++----- 6 files changed, 35 insertions(+), 35 deletions(-) diff --git a/public/language/he/category.json b/public/language/he/category.json index 17abd2c13f..b00c7f26e1 100644 --- a/public/language/he/category.json +++ b/public/language/he/category.json @@ -2,8 +2,8 @@ "category": "קטגוריה", "subcategories": "קטגוריות משנה", "new-topic-button": "נושא חדש", - "guest-login-post": "התחבר כדי לפרסם", - "no-topics": "קטגוריה זו ריקה מנושאים.
למה שלא תנסה להוסיף נושא חדש?", + "guest-login-post": "התחברו כדי לפרסם", + "no-topics": "קטגוריה זו ריקה מנושאים.
למה שלא תנסו להוסיף נושא חדש?", "browsing": "צופים בנושא זה כעת", "no-replies": "אין תגובות", "no-new-posts": "אין פוסטים חדשים.", @@ -13,7 +13,7 @@ "tracking": "מעקב", "not-watching": "לא עוקב", "ignoring": "מתעלם", - "watching.description": "הודע לי על נושאים חדשים.
הצג נושאים שלא נקראו ואחרונים", + "watching.description": "עדכן אותי על נושאים חדשים.
הצג נושאים שלא נקראו ואחרונים", "tracking.description": "מציג נושאים שלא נקראו ואחרונים", "not-watching.description": "הסתר בנושאים שלא נקראו, הצג בנושאים אחרונים", "ignoring.description": "אל תציג נושאים שלא נקראו ואחרונים", diff --git a/public/language/he/error.json b/public/language/he/error.json index 2041b227e1..246ccaa782 100644 --- a/public/language/he/error.json +++ b/public/language/he/error.json @@ -249,7 +249,7 @@ "api.501": "הנתיב אליו אתם מנסים לתקשר עדיין לא מיושם, אנא נסו שוב מחר", "api.503": "הנתיב אליו אתם מנסים לתקשר אינו זמין כעת עקב תצורת שרת", "api.reauth-required": "המשאב שאליו אתה מנסה לגשת דורש אימות (מחודש).", - "activitypub.not-enabled": "Federation is not enabled on this server", + "activitypub.not-enabled": "הפדרציה אינה מופעלת בשרת זה", "activitypub.invalid-id": "לא ניתן לפתור את מזהה הקלט, ככל הנראה מכיוון שהוא פגום.", "activitypub.get-failed": "לא ניתן לאחזר את המשאב שצוין.", "activitypub.pubKey-not-found": "לא ניתן לפתור מפתח ציבורי, ולכן לא ניתן לבצע אימות מטען.", diff --git a/public/language/he/login.json b/public/language/he/login.json index 69ab89cb01..6760e96517 100644 --- a/public/language/he/login.json +++ b/public/language/he/login.json @@ -7,6 +7,6 @@ "failed-login-attempt": "ההתחברות נכשלה", "login-successful": "התחברת בהצלחה!", "dont-have-account": "אין לך חשבון עדיין?", - "logged-out-due-to-inactivity": "התנתקת מפאנל הניהול בעקבות חוסר פעילות", + "logged-out-due-to-inactivity": "התנתקתם מפאנל הניהול בעקבות חוסר פעילות", "caps-lock-enabled": "Caps Lock מופעל" } \ No newline at end of file diff --git a/public/language/he/modules.json b/public/language/he/modules.json index 3cd835e583..fb546965c1 100644 --- a/public/language/he/modules.json +++ b/public/language/he/modules.json @@ -4,7 +4,7 @@ "chat.placeholder": "כתבו את תוכן הפוסט כאן. ניתן לגרור ולשחרר כאן תמונות.", "chat.placeholder.mobile": "הקלידו הודעת צ'אט", "chat.placeholder.message-room": "הודעה #%1", - "chat.scroll-up-alert": "עבור להודעה האחרונה", + "chat.scroll-up-alert": "מעבר להודעה האחרונה", "chat.usernames-and-x-others": "%1 ו-%2 אחרים", "chat.chat-with-usernames": "צ'אט עם %1", "chat.chat-with-usernames-and-x-others": "צ'אט עם %1 ו-%2 אחרים", @@ -16,8 +16,8 @@ "chat.user-typing-n": "%1, %2 ו%3 אחרים מקלידים...", "chat.user-has-messaged-you": "ל%1 יש הודעה עבורכם.", "chat.replying-to": "מגיב ל%1", - "chat.see-all": "צפו בכל הצ'אטים", - "chat.mark-all-read": "סמנו את כל הצ'אטים כ'נקראו'", + "chat.see-all": "צפייה בכל הצ'אטים", + "chat.mark-all-read": "סימון כל הצ'אטים כ'נקראו'", "chat.no-messages": "בחרו משתמש על מנת לראות את שיחות הצ'אט ביניכם", "chat.no-users-in-room": "אין משתמשים בחדר הזה", "chat.recent-chats": "צ'אטים אחרונים", @@ -25,34 +25,34 @@ "chat.message-history": "היסטוריית הודעות", "chat.message-deleted": "ההודעה נמחקה", "chat.options": "אפשרויות צ'אט", - "chat.pop-out": "מזעור חלונית צ'אט", - "chat.minimize": "צמצום", + "chat.pop-out": "הגדלת חלונית צ'אט", + "chat.minimize": "מזעור", "chat.maximize": "הרחבה", "chat.seven-days": "7 ימים", "chat.thirty-days": "30 ימים", "chat.three-months": "3 חודשים", "chat.delete-message-confirm": "האם למחוק הודעה זו?", "chat.retrieving-users": "מאחזר משתמשים...", - "chat.view-users-list": "הצג רשימת משתמשים", + "chat.view-users-list": "הצגת רשימת משתמשים", "chat.pinned-messages": "הודעות מוצמדות", "chat.no-pinned-messages": "אין הודעות מוצמדות", - "chat.pin-message": "הצמד הודעה", - "chat.unpin-message": "בטל את הצמדת ההודעה", + "chat.pin-message": "הצמדת הודעה", + "chat.unpin-message": "ביטול הצמדת הודעה", "chat.public-rooms": "חדרים ציבוריים (%1)", "chat.private-rooms": "חדרים פרטיים (%1)", - "chat.create-room": "צור חדר צ'אט", + "chat.create-room": "יצירת חדר צ'אט", "chat.private.option": "פרטי (גלוי רק למשתמשים שנוספו לחדר)", "chat.public.option": "ציבורי (גלוי לכל משתמש בקבוצות שנבחרו)", - "chat.public.groups-help": "כדי ליצור חדר צ'אט הגלוי לכל המשתמשים בחר \"משתמשים רשומים\" מרשימת הקבוצות.", + "chat.public.groups-help": "כדי ליצור חדר צ'אט הגלוי לכל המשתמשים בחרו ב\"משתמשים רשומים\" מרשימת הקבוצות.", "chat.manage-room": "ניהול חדר צ'אט", - "chat.add-user": "הוסף משתמש", + "chat.add-user": "הוספת משתמש", "chat.notification-settings": "הגדרות התראות", "chat.default-notification-setting": "הגדרת ברירת מחדל להתראות", "chat.notification-setting-room-default": "ברירת המחדל של החדר", "chat.notification-setting-none": "ללא התראות", "chat.notification-setting-at-mention-only": "@אזכור בלבד", "chat.notification-setting-all-messages": "כל ההודעות", - "chat.select-groups": "בחר קבוצות", + "chat.select-groups": "בחירת קבוצות", "chat.add-user-help": "חפשו משתמשים כאן. כאשר משתמש נבחר, הוא יצורף לצ'אט. המשתמש החדש לא יוכל לראות הודעות שנכתבו לפני הצטרפותו. רק מנהלי החדר () יכולים להסיר משתמשים מהצ'אט.", "chat.confirm-chat-with-dnd-user": "משתמש זה שינה את הסטטוס שלו ל'לא להפריע'. אתם עדיין מעוניין לשוחח איתו?", "chat.room-name-optional": "שם חדר (אופציונלי)", @@ -60,17 +60,17 @@ "chat.rename-placeholder": "הזינו את שם החדר שלכם כאן", "chat.rename-help": "שם החדר המוגדר כאן יהיה זמין לכל המשתתפים בחדר.", "chat.leave": "יציאה", - "chat.leave-room": "עזוב חדר", - "chat.leave-prompt": "האם לעזוב שיחה זו?", - "chat.leave-help": "עזיבת שיחה, תסיר אתכם מהתכתבות עתידית בצ'אט זה. אם תצטרפו מחדש בעתיד, לא תראו את היסטוריית הצ'אט שלפני הצטרפותכם מחדש.", + "chat.leave-room": "יציאה מהחדר", + "chat.leave-prompt": "האם לצאת משיחה זו?", + "chat.leave-help": "יציאה משיחה, תסיר אתכם מהתכתבות עתידית בצ'אט זה. אם תצטרפו מחדש בעתיד, לא תראו את היסטוריית הצ'אט שלפני הצטרפותכם מחדש.", "chat.delete": "מחיקה", - "chat.delete-room": "מחק חדר", + "chat.delete-room": "מחיקת חדר", "chat.delete-prompt": "האם אתם בטוחים שברצונכם למחוק את חדר הצ'אט הזה?", "chat.in-room": "בתוך חדר זה", "chat.kick": "הוצאה", - "chat.show-ip": "הצג IP", - "chat.copy-text": "העתק טקסט", - "chat.copy-link": "העתק קישור", + "chat.show-ip": "הצגת IP", + "chat.copy-text": "העתקת טקסט", + "chat.copy-link": "העתקת קישור", "chat.owner": "מנהלי החדר", "chat.grant-rescind-ownership": "הענקת/ביטול בעלות", "chat.system.user-join": "%1 צורף לחדר ", @@ -84,7 +84,7 @@ "composer.user-said": "%1 כתב:", "composer.discard": "האם לבטל את השינויים שנעשו בפוסט זה?", "composer.submit-and-lock": "אשרו ונעלו", - "composer.toggle-dropdown": "הדליקו / כבו את התפריט הנפתח", + "composer.toggle-dropdown": "הצגת תפריט הנפתח", "composer.uploading": "העלאה %1", "composer.formatting.bold": "מודגש", "composer.formatting.italic": "נטוי", @@ -96,7 +96,7 @@ "composer.formatting.heading5": "כותרת 5", "composer.formatting.heading6": "כותרת 6", "composer.formatting.list": "רשימה", - "composer.formatting.strikethrough": "קו פוסל", + "composer.formatting.strikethrough": "קו חוצה", "composer.formatting.code": "קוד", "composer.formatting.link": "קישור", "composer.formatting.picture": "קישור תמונה", @@ -110,7 +110,7 @@ "composer.schedule-date": "תאריך", "composer.schedule-time": "שעה", "composer.cancel-scheduling": "ביטול תזמון", - "composer.change-schedule-date": "שנה תאריך", + "composer.change-schedule-date": "שינוי תאריך", "composer.set-schedule-date": "הגדרת תאריך", "composer.discard-all-drafts": "מחיקת כל הטיוטות", "composer.no-drafts": "אין לכם טיוטות", diff --git a/public/language/he/unread.json b/public/language/he/unread.json index f18e70d7fd..6a05076592 100644 --- a/public/language/he/unread.json +++ b/public/language/he/unread.json @@ -1,13 +1,13 @@ { "title": "לא נקרא", - "no-unread-topics": "אין נושאים שלא נקראו", + "no-unread-topics": "אין נושאים שלא נקראו.", "load-more": "טען עוד", "mark-as-read": "סמן כנקרא", "mark-as-unread": "סימון כלא נקרא", "selected": "נבחר", "all": "הכל", "all-categories": "כל הקטגוריות", - "topics-marked-as-read.success": "הנושאים שבחרת סומנו כנקרא!", + "topics-marked-as-read.success": "הנושאים שבחרת סומנו כנקראו!", "all-topics": "כל הנושאים", "new-topics": "נושאים חדשים", "watched-topics": "נושאים שאתם עוקבים אחריהם", diff --git a/public/language/he/user.json b/public/language/he/user.json index c850298326..a45f411cd0 100644 --- a/public/language/he/user.json +++ b/public/language/he/user.json @@ -10,10 +10,10 @@ "joindate": "תאריך הצטרפות", "postcount": "כמות פוסטים", "email": "כתובת אימייל", - "confirm-email": "אשר מייל", + "confirm-email": "אישור מייל", "account-info": "פרטי חשבון", "admin-actions-label": "פעולות ניהול", - "ban-account": "הרחק חשבון", + "ban-account": "הרחקת חשבון", "ban-account-confirm": "האם אתהם בטוחים שאתם רוצים להרחיק משתמש זה?", "unban-account": "ביטול הרחקת חשבון", "mute-account": "השתקת חשבון", @@ -40,7 +40,7 @@ "bookmarks": "מועדפים", "watched-categories": "קטגוריות במעקב", "watched-tags": "תגיות במעקב", - "change-all": "שנה הכל", + "change-all": "שינוי הכל", "watched": "נצפה", "ignored": "התעלם", "read": "נקרא", @@ -61,7 +61,7 @@ "new-chat-with": "התחלת צ'אט עם %1", "flag-profile": "דיווח על משתמש", "profile-flagged": "דווח כבר", - "follow": "עקוב", + "follow": "מעקב", "unfollow": "הפסקת מעקב", "cancel-follow": "ביטול בקשת המעקב", "more": "עוד", @@ -147,8 +147,8 @@ "topic-search-help": "החיפוש בתוך הנושא יעקוף את שיטת החיפוש של הדפדפן, ויאפשר לכם לחפש בכל הנושא - ולא רק במה שמוצג על המסך, עם זאת בלחיצה נוספת על Ctrl+F ייפתח לכם החיפוש הרגיל של הדפדפן", "update-url-with-post-index": "עדכון כתובת ה-URL עם אינדקס הפוסט בעת גלישה בנושאים", "scroll-to-my-post": "הצג את הפוסט לאחר פרסום התגובה", - "follow-topics-you-reply-to": "עקוב אחר נושאים שהגבת עליהם", - "follow-topics-you-create": "עקוב אחר נושאים שייצרת", + "follow-topics-you-reply-to": "מעקב אחר נושאים שהגבת עליהם", + "follow-topics-you-create": "מעקב אחר נושאים שייצרת", "grouptitle": "כותרת הקבוצה", "group-order-help": "בחרו קבוצה והשתמשו בחיצים על מנת לסדר כותרות", "show-group-title": "הצגת כותרת קבוצה", From b386e4a66e8154759a6454b61283940d1701b3e4 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 23 Jan 2025 14:52:03 -0500 Subject: [PATCH 020/125] feat: introduce new 'markdown' post parsing type, closes #13077 --- install/package.json | 4 ++-- src/activitypub/mocks.js | 8 ++++++-- src/posts/parse.js | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/install/package.json b/install/package.json index d15878f3eb..84c0521bf2 100644 --- a/install/package.json +++ b/install/package.json @@ -103,8 +103,8 @@ "nodebb-plugin-dbsearch": "6.2.5", "nodebb-plugin-emoji": "6.0.1", "nodebb-plugin-emoji-android": "4.1.1", - "nodebb-plugin-markdown": "13.0.0", - "nodebb-plugin-mentions": "4.6.10", + "nodebb-plugin-markdown": "13.1.0", + "nodebb-plugin-mentions": "4.7.0", "nodebb-plugin-spam-be-gone": "2.3.0", "nodebb-plugin-web-push": "0.7.2", "nodebb-rewards-essentials": "1.0.0", diff --git a/src/activitypub/mocks.js b/src/activitypub/mocks.js index 95274fae89..0c17f83304 100644 --- a/src/activitypub/mocks.js +++ b/src/activitypub/mocks.js @@ -436,7 +436,7 @@ Mocks.notes.public = async (post) => { } const content = await posts.getPostField(post.pid, 'content'); - post.content = content; // re-send raw content + post.content = content; // re-send raw content into parsePost const parsed = await posts.parsePost(post, 'activitypub.note'); post.content = sanitize(parsed.content, sanitizeConfig); post.content = posts.relativeToAbsolute(post.content, posts.urlRegex); @@ -448,9 +448,13 @@ Mocks.notes.public = async (post) => { plugins.isActive('nodebb-plugin-mentions'), ]); if (markdownEnabled) { + // Re-parse for markdown + const _post = { ...post }; const raw = await posts.getPostField(post.pid, 'content'); + _post.content = raw; + const { content } = await posts.parsePost(_post, 'markdown'); source = { - content: raw, + content, mediaType: 'text/markdown', }; } diff --git a/src/posts/parse.js b/src/posts/parse.js index fcc87b1ecd..7f5f0bd518 100644 --- a/src/posts/parse.js +++ b/src/posts/parse.js @@ -33,7 +33,7 @@ let sanitizeConfig = { 'tabindex', 'title', 'translate', 'aria-*', 'data-*', ], }; -const allowedTypes = new Set(['default', 'plaintext', 'activitypub.note', 'activitypub.article']); +const allowedTypes = new Set(['default', 'plaintext', 'activitypub.note', 'activitypub.article', 'markdown']); module.exports = function (Posts) { Posts.urlRegex = { From ff0de09797afd7ddb9d8dc93a103cdf2040be13f Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 23 Jan 2025 15:05:39 -0500 Subject: [PATCH 021/125] chore: bump emoji for #13077 as well --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 84c0521bf2..220510b17f 100644 --- a/install/package.json +++ b/install/package.json @@ -101,7 +101,7 @@ "nodebb-plugin-2factor": "7.5.8", "nodebb-plugin-composer-default": "10.2.44", "nodebb-plugin-dbsearch": "6.2.5", - "nodebb-plugin-emoji": "6.0.1", + "nodebb-plugin-emoji": "6.0.2", "nodebb-plugin-emoji-android": "4.1.1", "nodebb-plugin-markdown": "13.1.0", "nodebb-plugin-mentions": "4.7.0", From 7687da00d16ebb71849035b1e9efeb5b85d16f36 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 23 Jan 2025 15:12:54 -0500 Subject: [PATCH 022/125] feat: allow search bar to load remote 7888 Conversations, aka nodebb topics --- src/search.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/search.js b/src/search.js index 5e9b3c8e47..1609bea31f 100644 --- a/src/search.js +++ b/src/search.js @@ -173,6 +173,9 @@ async function fetchRemoteObject(data) { } else if (activitypub._constants.acceptableActorTypes.has(type)) { data.searchIn = 'users'; return await user.search(data); + } else if (type === 'Conversation') { + ({ tid } = await activitypub.notes.assert(uid, id)); + id = await topics.getTopicField(tid, 'mainPid'); } } From db1f8959330528b9f9d1213e5dcc7243ae365bee Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 23 Jan 2025 16:23:06 -0500 Subject: [PATCH 023/125] fix: extend remoteAnchorToLocalProfile ap helper to handle markdown content --- src/activitypub/helpers.js | 18 +++++++++++++++--- src/activitypub/mocks.js | 3 ++- src/activitypub/notes.js | 2 +- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/activitypub/helpers.js b/src/activitypub/helpers.js index ec293504f1..35fd9eb75d 100644 --- a/src/activitypub/helpers.js +++ b/src/activitypub/helpers.js @@ -367,13 +367,25 @@ Helpers.generateTitle = (html) => { return title; }; -Helpers.remoteAnchorToLocalProfile = async (content) => { - const anchorRegex = /(.*?)<\/a>/ig; +Helpers.remoteAnchorToLocalProfile = async (content, isMarkdown = false) => { + let anchorRegex; + if (isMarkdown) { + anchorRegex = /\[(.*?)\]\((.+?)\)/ig; + } else { + anchorRegex = /(.*?)<\/a>/ig; + } + const anchors = content.matchAll(anchorRegex); const urls = new Set(); const matches = []; for (const anchor of anchors) { - const [match, url] = anchor; + let match; + let url; + if (isMarkdown) { + [match,, url] = anchor; + } else { + [match, url] = anchor; + } matches.push([match, url]); urls.add(url); } diff --git a/src/activitypub/mocks.js b/src/activitypub/mocks.js index 0c17f83304..67c6636bc4 100644 --- a/src/activitypub/mocks.js +++ b/src/activitypub/mocks.js @@ -176,9 +176,10 @@ Mocks.post = async (objects) => { let edited = new Date(updated); edited = Number.isNaN(edited.valueOf()) ? undefined : edited; - const sourceContent = source && source.mediaType === 'text/markdown' ? source.content : undefined; + let sourceContent = source && source.mediaType === 'text/markdown' ? source.content : undefined; if (sourceContent) { content = null; + sourceContent = await activitypub.helpers.remoteAnchorToLocalProfile(sourceContent, true); } else if (content && content.length) { content = sanitize(content, sanitizeConfig); content = await activitypub.helpers.remoteAnchorToLocalProfile(content); diff --git a/src/activitypub/notes.js b/src/activitypub/notes.js index 0e9df7bcb3..eb22dc292c 100644 --- a/src/activitypub/notes.js +++ b/src/activitypub/notes.js @@ -183,7 +183,6 @@ Notes.assert = async (uid, input, options = { skipChecks: false }) => { _activitypub: mainPost._activitypub, }), Notes.updateLocalRecipients(mainPid, { to, cc }), - posts.attachments.update(mainPid, attachment), ]); unprocessed.shift(); @@ -193,6 +192,7 @@ Notes.assert = async (uid, input, options = { skipChecks: false }) => { id: tid, path: mainPost._activitypub.image, }) : null, + posts.attachments.update(mainPid, attachment), ]); if (context) { From 1d84613472b15c7a61f008c5a852d314eadbb69a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 27 Jan 2025 10:58:24 -0500 Subject: [PATCH 024/125] chore(deps): update dependency lint-staged to v15.4.3 (#13079) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 8c137c21f8..3b7fd29342 100644 --- a/install/package.json +++ b/install/package.json @@ -169,7 +169,7 @@ "grunt-contrib-watch": "1.1.0", "husky": "8.0.3", "jsdom": "26.0.0", - "lint-staged": "15.4.1", + "lint-staged": "15.4.3", "mocha": "11.1.0", "mocha-lcov-reporter": "1.3.0", "mockdate": "3.0.5", From 8ab71e4fd26c83caeb5a7d0549461bfbc5a600c9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 27 Jan 2025 10:58:37 -0500 Subject: [PATCH 025/125] fix(deps): update dependency nodemailer to v6.10.0 (#13073) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 3b7fd29342..39919541f8 100644 --- a/install/package.json +++ b/install/package.json @@ -113,7 +113,7 @@ "nodebb-theme-peace": "2.2.34", "nodebb-theme-persona": "14.0.3", "nodebb-widget-essentials": "7.0.32", - "nodemailer": "6.9.16", + "nodemailer": "6.10.0", "nprogress": "0.2.0", "passport": "0.7.0", "passport-http-bearer": "1.0.1", From 0afbc81fc8a512f3153cdcb2d916de924c3e57e0 Mon Sep 17 00:00:00 2001 From: Misty Release Bot Date: Wed, 29 Jan 2025 09:20:05 +0000 Subject: [PATCH 026/125] Latest translations and fallbacks --- .../language/nb/admin/manage/categories.json | 16 +++---- public/language/nb/admin/menu.json | 2 +- .../nb/admin/settings/activitypub.json | 4 +- public/language/nb/error.json | 10 ++--- public/language/nb/global.json | 4 +- public/language/nb/modules.json | 4 +- public/language/nb/notifications.json | 8 ++-- public/language/nb/pages.json | 4 +- public/language/nb/recent.json | 4 +- public/language/nb/topic.json | 10 ++--- public/language/nb/user.json | 8 ++-- public/language/nb/world.json | 12 ++--- public/language/nn-NO/admin/dashboard.json | 12 ++--- .../nn-NO/admin/development/logger.json | 4 +- .../language/nn-NO/admin/extend/plugins.json | 34 +++++++------- .../language/nn-NO/admin/extend/rewards.json | 2 +- .../language/nn-NO/admin/extend/widgets.json | 2 +- .../nn-NO/admin/manage/categories.json | 34 +++++++------- public/language/nn-NO/admin/menu.json | 2 +- .../nn-NO/admin/settings/activitypub.json | 44 +++++++++---------- .../nn-NO/admin/settings/uploads.json | 2 +- public/language/nn-NO/aria.json | 2 +- public/language/nn-NO/error.json | 16 +++---- public/language/nn-NO/flags.json | 10 ++--- public/language/nn-NO/global.json | 4 +- public/language/nn-NO/modules.json | 4 +- public/language/nn-NO/notifications.json | 8 ++-- public/language/nn-NO/pages.json | 4 +- public/language/nn-NO/recent.json | 4 +- public/language/nn-NO/topic.json | 10 ++--- public/language/nn-NO/user.json | 8 ++-- public/language/nn-NO/world.json | 28 ++++++------ 32 files changed, 160 insertions(+), 160 deletions(-) diff --git a/public/language/nb/admin/manage/categories.json b/public/language/nb/admin/manage/categories.json index 17d6c8267d..fadadac3ba 100644 --- a/public/language/nb/admin/manage/categories.json +++ b/public/language/nb/admin/manage/categories.json @@ -7,7 +7,7 @@ "privileges": "Rettigheter", "back-to-categories": "Tilbake til kategorier", "name": "Kategorinavn", - "handle": "Category Handle", + "handle": "Kategoristi", "handle.help": "Your category handle is used as a representation of this category across other networks, similar to a username. A category handle must not match an existing username or user group.", "description": "Kategoribeskrivelse", "bg-color": "Bakgrunnsfarge", @@ -39,7 +39,7 @@ "disable": "Deaktiver", "edit": "Rediger", "analytics": "Analyser", - "federation": "Federation", + "federation": "Føderasjon", "view-category": "Vis kategori", "set-order": "Sett rekkefølge", @@ -82,18 +82,18 @@ "federation.title": "Federation settings for \"%1\" category", "federation.disabled": "Federation is disabled site-wide, so category federation settings are currently unavailable.", "federation.disabled-cta": "Federation Settings →", - "federation.syncing-header": "Synchronization", + "federation.syncing-header": "Synkronisering", "federation.syncing-intro": "A category can follow a \"Group Actor\" via the ActivityPub protocol. If content is received from one of the actors listed below, it will be automatically added to this category.", "federation.syncing-caveat": "N.B. Setting up syncing here establishes a one-way synchronization. NodeBB attempts to subscribe/follow the actor, but the reverse cannot be assumed.", "federation.syncing-none": "This category is not currently following anybody.", - "federation.syncing-add": "Synchronize with...", - "federation.syncing-actorUri": "Actor", - "federation.syncing-follow": "Follow", - "federation.syncing-unfollow": "Unfollow", + "federation.syncing-add": "Synkroniser med...", + "federation.syncing-actorUri": "Aktør", + "federation.syncing-follow": "Følg", + "federation.syncing-unfollow": "Avfølg", "federation.followers": "Remote users following this category", "federation.followers-handle": "Handle", "federation.followers-id": "ID", - "federation.followers-none": "No followers.", + "federation.followers-none": "Ingen følgere", "alert.created": "Opprettet", "alert.create-success": "Kategori opprettet!", diff --git a/public/language/nb/admin/menu.json b/public/language/nb/admin/menu.json index ebf15d0d34..6c51ad8ccf 100644 --- a/public/language/nb/admin/menu.json +++ b/public/language/nb/admin/menu.json @@ -38,7 +38,7 @@ "settings/tags": "Emneord", "settings/notifications": "Varsler", "settings/api": "API-tilgang", - "settings/activitypub": "Federation (ActivityPub)", + "settings/activitypub": "Føderasjon (ActivityPub)", "settings/sounds": "Lyder", "settings/social": "Sosialt", "settings/cookies": "Informasjonskapsler", diff --git a/public/language/nb/admin/settings/activitypub.json b/public/language/nb/admin/settings/activitypub.json index 94f9ad7822..5ad03708e4 100644 --- a/public/language/nb/admin/settings/activitypub.json +++ b/public/language/nb/admin/settings/activitypub.json @@ -12,13 +12,13 @@ "allowLoopback": "Allow loopback processing", "allowLoopback-help": "Useful for debugging purposes only. You should probably leave this disabled.", - "probe": "Open in App", + "probe": "Åpne i app", "probe-enabled": "Try to open ActivityPub-enabled resources in NodeBB", "probe-enabled-help": "If enabled, NodeBB will check every external link for an ActivityPub equivalent, and load it in NodeBB instead.", "probe-timeout": "Lookup Timeout (milliseconds)", "probe-timeout-help": "(Default: 2000) If the lookup query does not receive a response within the set timeframe, will send the user to the link directly instead. Adjust this number higher if sites are responding slowly and you wish to give extra time.", - "server-filtering": "Filtering", + "server-filtering": "Filtrering", "count": "This NodeBB is currently aware of %1 server(s)", "server.filter-help": "Specify servers you would like to bar from federating with your NodeBB. Alternatively, you may opt to selectively allow federation with specific servers, instead. Both options are supported, although they are mutually exclusive.", "server.filter-help-hostname": "Enter just the instance hostname below (e.g. example.org), separated by line breaks.", diff --git a/public/language/nb/error.json b/public/language/nb/error.json index e9d3700379..ac4dba5dcb 100644 --- a/public/language/nb/error.json +++ b/public/language/nb/error.json @@ -235,7 +235,7 @@ "plugins-set-in-configuration": "Du har ikke tillatelse til å endre plugin-status da de er definert under kjøring (config.json, miljøvariabler eller terminalargumenter)Vennligst endre konfigurasjonen i stedet.", "theme-not-set-in-configuration": "Når aktive plugins er definert i konfigurasjonen, krever endring av tema at det nye temaet legges til i listen over aktive plugins før det oppdateres i ACP.", "topic-event-unrecognized": "Trådhendelse '%1' er ukjent", - "category.handle-taken": "Category handle is already taken, please choose another.", + "category.handle-taken": "Kategoristi er allerede tatt, velg noe annet.", "cant-set-child-as-parent": "Kan ikke sette underkategori til hovedkategori", "cant-set-self-as-parent": "Kan ikke sette denne som hovedkategori", "api.master-token-no-uid": "Et master token ble mottatt uten korresponderende `_uid` i request body", @@ -249,10 +249,10 @@ "api.501": "Ruten du prøver å kalle er ikke implementert enda. Prøv igjen i morgen", "api.503": "Ruten du prøver å kalle er for øyeblikket ikke tilgjengelig grunnet innstilling på serveren", "api.reauth-required": "Ressursen du prøver å få tilgang til krever (re-)autentisering.", - "activitypub.not-enabled": "Federation is not enabled on this server", - "activitypub.invalid-id": "Unable to resolve the input id, likely as it is malformed.", - "activitypub.get-failed": "Unable to retrieve the specified resource.", - "activitypub.pubKey-not-found": "Unable to resolve public key, so payload verification cannot take place.", + "activitypub.not-enabled": "Føderasjon er ikke aktivert på denne serveren", + "activitypub.invalid-id": "Kan ikke løse opp input-ID-en, sannsynligvis fordi den er ugyldig.", + "activitypub.get-failed": "Kan ikke hente den angitte ressursen.", + "activitypub.pubKey-not-found": "Kan ikke løse opp offentlig nøkkel, så verifisering av nyttelasten kan ikke gjennomføres.", "activitypub.origin-mismatch": "The received object's origin does not match the sender's origin", "activitypub.actor-mismatch": "The received activity is being carried out by an actor that is different from expected.", "activitypub.not-implemented": "The request was denied because it or an aspect of it is not implemented by the recipient server" diff --git a/public/language/nb/global.json b/public/language/nb/global.json index 1e79477472..86a0654284 100644 --- a/public/language/nb/global.json +++ b/public/language/nb/global.json @@ -50,7 +50,7 @@ "header.navigation": "Navigasjon", "header.manage": "Administrer", "header.drafts": "Utkast", - "header.world": "World", + "header.world": "Verden", "notifications.loading": "Laster varsler", "chats.loading": "Laster samtaler", "drafts.loading": "Laster utkast", @@ -111,7 +111,7 @@ "dnd": "Ikke forstyrr", "invisible": "Usynlig", "offline": "Frakoblet", - "remote-user": "This user is from outside of this forum", + "remote-user": "Denne brukeren er fra utsiden av dette forumet.", "email": "E-post", "language": "Språk", "guest": "Gjest", diff --git a/public/language/nb/modules.json b/public/language/nb/modules.json index e11a03e664..0ed1b210cf 100644 --- a/public/language/nb/modules.json +++ b/public/language/nb/modules.json @@ -115,8 +115,8 @@ "composer.discard-all-drafts": "Forkast alle utkast", "composer.no-drafts": "Du har ingen utkast", "composer.discard-draft-confirm": "Vil du forkaste dette utkastet?", - "composer.remote-pid-editing": "Editing a remote post", - "composer.remote-pid-content-immutable": "The content of remote posts cannot be edited. However, you are able change the topic title and tags.", + "composer.remote-pid-editing": "Redigerer et eksternt innlegg", + "composer.remote-pid-content-immutable": "Innholdet i eksterne innlegg kan ikke redigeres. Du kan imidlertid endre emnetittel og merkelapper.", "bootbox.ok": "OK", "bootbox.cancel": "Avbryt", "bootbox.confirm": "Bekreft", diff --git a/public/language/nb/notifications.json b/public/language/nb/notifications.json index 115879e8ec..eb518f1378 100644 --- a/public/language/nb/notifications.json +++ b/public/language/nb/notifications.json @@ -99,8 +99,8 @@ "notificationType-new-post-flag": "Når ett nytt innlegg er flagget", "notificationType-new-user-flag": "Når en bruker er flagget", "notificationType-new-reward": "Når du får en ny tildelning", - "activitypub.announce": "%1 shared your post in %2 to their followers.", - "activitypub.announce-dual": "%1 and %2 shared your post in %3 to their followers.", - "activitypub.announce-triple": "%1, %2 and %3 shared your post in %4 to their followers.", - "activitypub.announce-multiple": "%1, %2 and %3 others shared your post in %4 to their followers." + "activitypub.announce": "%1 delte din post i %2 til sine følgere.", + "activitypub.announce-dual": "%1 og %2 delte din post i %3 til sine følgere.", + "activitypub.announce-triple": "%1, %2 og %3 delte din post i %4 til sine følgere.", + "activitypub.announce-multiple": "%1, %2 og %3 andre delte din post i %4 til sine følgere." } \ No newline at end of file diff --git a/public/language/nb/pages.json b/public/language/nb/pages.json index bfeaece7e9..cda6874860 100644 --- a/public/language/nb/pages.json +++ b/public/language/nb/pages.json @@ -36,7 +36,7 @@ "chat": "Samtale med %1", "flags": "Flagg", "flag-details": "Flagg %1 detaljer", - "world": "World", + "world": "Verden", "account/edit": "Endrer \"%1\"", "account/edit/password": "Redigeringspassord for \"%1\"", "account/edit/username": "Rediger brukernavnet til \"%1\"", @@ -63,7 +63,7 @@ "account/blocks": "Brukere blokkert av %1", "account/uploads": "Opplastninger av %1", "account/sessions": "Påloggingsøkter", - "account/shares": "Topics shared by %1", + "account/shares": "Emner delt av %1", "confirm": "E-post bekreftet", "maintenance.text": "%1 er for øyeblikket under vedlikehold.
Vennligst kom tilbake en annen gang.", "maintenance.messageIntro": "I tillegg har administratoren skrevet denne meldingen:", diff --git a/public/language/nb/recent.json b/public/language/nb/recent.json index c3a05198b5..e8ec1af77b 100644 --- a/public/language/nb/recent.json +++ b/public/language/nb/recent.json @@ -8,6 +8,6 @@ "no-recent-topics": "Det er ingen nye emner.", "no-popular-topics": "Det er ingen populære emner.", "load-new-posts": "Last inn nye innlegg", - "uncategorized.title": "All known topics", - "uncategorized.intro": "This page shows a chronological listing of every topic that this forum has received.
The views and opinions expressed in the topics below are not moderated and may not represent the views and opinions of this website." + "uncategorized.title": "Alle kjente emner", + "uncategorized.intro": "Denne siden viser en kronologisk liste over alle emner som dette forumet har mottatt.
Meningene og synspunktene som uttrykkes i emnene nedenfor, er ikke moderert og representerer kanskje ikke meningene og synspunktene til denne nettsiden." } \ No newline at end of file diff --git a/public/language/nb/topic.json b/public/language/nb/topic.json index 21646ac420..0ff7f17abf 100644 --- a/public/language/nb/topic.json +++ b/public/language/nb/topic.json @@ -61,8 +61,8 @@ "user-restored-topic-on": "%1 gjenopprettet dette menet på %2", "user-moved-topic-from-ago": "%1 flyttet dette emnet fra %2 %3", "user-moved-topic-from-on": "%1 flyttet dette emnet fra %2 på %3", - "user-shared-topic-ago": "%1 shared this topic %2", - "user-shared-topic-on": "%1 shared this topic on %2", + "user-shared-topic-ago": "%1 delte dette emnet %2", + "user-shared-topic-on": "%1 delte dette emnet på %2", "user-queued-post-ago": "%1 i kø post til godkjenning %3", "user-queued-post-on": "%1 i køpost til godkjenning %3", "user-referenced-topic-ago": "%1 refererte dette emnet %3", @@ -137,7 +137,7 @@ "bookmarks": "Bokmerker", "bookmarks.has-no-bookmarks": "Du har ikke bokmerket noen innlegg ennå.", "copy-permalink": "Kopier permanent lenke", - "go-to-original": "View Original Post", + "go-to-original": "Vis innlegg", "loading-more-posts": "Laster flere innlegg", "move-topic": "Flytt tråd", "move-topics": "Flytt tråder", @@ -223,6 +223,6 @@ "post-tools": "Innleggsverktøy", "unread-posts-link": "Lenke til uleste innlegg", "thumb-image": "Miniatyrbilde for emne", - "announcers": "Shares", - "announcers-x": "Shares (%1)" + "announcers": "Delinger", + "announcers-x": "Delinger (%1)" } \ No newline at end of file diff --git a/public/language/nb/user.json b/public/language/nb/user.json index da9b6365ff..1c8a21b99a 100644 --- a/public/language/nb/user.json +++ b/public/language/nb/user.json @@ -47,7 +47,7 @@ "default-category-watch-state": "Standard følgesstatus for kategorier", "followers": "Følgere", "following": "Følger", - "shares": "Shares", + "shares": "Delinger", "blocks": "Blokkeringer", "blocked-users": "Blokkerte brukere", "block-toggle": "Endre blokkering", @@ -60,10 +60,10 @@ "chat-with": "Fortsett å chatte med %1", "new-chat-with": "Start ny chat med %1", "flag-profile": "Rapporter profil", - "profile-flagged": "Already flagged", + "profile-flagged": "Allerede flagget", "follow": "Følg", "unfollow": "Avfølg", - "cancel-follow": "Cancel follow request", + "cancel-follow": "Avbryt forespørsel om å følge", "more": "Mer", "profile-update-success": "Profilen ble oppdatert!", "change-picture": "Bytt bilde", @@ -123,7 +123,7 @@ "has-no-downvoted-posts": "Denne brukeren har ikke stemt ned noen innlegg ennå.", "has-no-controversial-posts": "Denne brukeren har ikke noen nedstemte innlegg ennå.", "has-no-blocks": "Du har ingen blokkerte brukere.", - "has-no-shares": "This user has not shared any topics.", + "has-no-shares": "Denne brukeren har ikke delt noen tråder enda.", "email-hidden": "E-post skjult", "hidden": "skjult", "paginate-description": "Bruk sidevelger for tråder og innlegg istedet for uendelig scrolling", diff --git a/public/language/nb/world.json b/public/language/nb/world.json index 3753335278..54ab26f15e 100644 --- a/public/language/nb/world.json +++ b/public/language/nb/world.json @@ -1,17 +1,17 @@ { - "name": "World", - "popular": "Popular topics", - "recent": "All topics", - "help": "Help", + "name": "Verden", + "popular": "Populære tema", + "recent": "Alle tema", + "help": "Hjelp", - "help.title": "What is this page?", + "help.title": "Hva er denne siden?", "help.intro": "Welcome to your corner of the fediverse.", "help.fediverse": "The \"fediverse\" is a network of interconnected applications and websites that all talk to one another and whose users can see each other. This forum is federated, and can interact with that social web (or \"fediverse\"). This page is your corner of the fediverse. It consists solely of topics created by — and shared from — users you follow.", "help.build": "There might not be a lot of topics here to start; that's normal. You will start to see more content here over time when you start following other users.", "help.federating": "Likewise, if users from outside of this forum start following you, then your posts will start appearing on those apps and websites as well.", "help.next-generation": "This is the next generation of social media, start contributing today!", - "onboard.title": "Your window to the fediverse...", + "onboard.title": "Ditt vindu til fødiverset...", "onboard.what": "This is your personalized category made up of only content found outside of this forum. Whether something shows up in this page depends on whether you follow them, or whether that post was shared by someone you follow.", "onboard.why": "There's a lot that goes on outside of this forum, and not all of it is relevant to your interests. That's why following people is the best way to signal that you want to see more from someone.", "onboard.how": "In the meantime, you can click on the shortcut buttons at the top to see what else this forum knows about, and start discovering some new content!" diff --git a/public/language/nn-NO/admin/dashboard.json b/public/language/nn-NO/admin/dashboard.json index fc6a1f9ae9..6d874339a4 100644 --- a/public/language/nn-NO/admin/dashboard.json +++ b/public/language/nn-NO/admin/dashboard.json @@ -12,8 +12,8 @@ "page-views-custom": "Tilpassa sidevisningar", "page-views-custom-start": "Startdato", "page-views-custom-end": "Sluttdato", - "page-views-custom-help": "Vel eit tidsintervall for å sjå sidevisningar.", - "page-views-custom-error": "Ugyldig tidsintervall.", + "page-views-custom-help": "Vel eit tidsintervall på datoformat YYYY-MM-DD for å sjå sidevisningar. ", + "page-views-custom-error": "Ugyldig tidsintervall. Bruk format YYYY-MM-DD", "stats.yesterday": "I går", "stats.today": "I dag", @@ -24,11 +24,11 @@ "stats.all": "Alle", "updates": "Oppdateringar", - "running-version": "Køyrer versjon", + "running-version": "Køyrer NodeBB versjon %1 .", "keep-updated": "Hald oppdatert", - "up-to-date": "Oppdatert", - "upgrade-available": "Oppgradering tilgjengeleg", - "prerelease-upgrade-available": "Førehandsutgåveoppgradering tilgjengeleg", + "up-to-date": "Oppdatert ", + "upgrade-available": "Oppgradering tilgjengeleg. Vurder å oppgradere din versjon av NodeBB.", + "prerelease-upgrade-available": "Førehandsutgåveoppgradering tilgjengeleg. Vurder å oppgradere din versjon av NodeBB.", "prerelease-warning": "Ver varsam når du oppgraderer til førehandsutgåver, dei kan innehalde feil.", "fallback-emailer-not-found": "Fann ikkje tilbakefallse-postar", "running-in-development": "Køyrer i utviklingsmodus", diff --git a/public/language/nn-NO/admin/development/logger.json b/public/language/nn-NO/admin/development/logger.json index f1109a6cca..c25ddc3d61 100644 --- a/public/language/nn-NO/admin/development/logger.json +++ b/public/language/nn-NO/admin/development/logger.json @@ -1,12 +1,12 @@ { "logger": "Loggførar", "logger-settings": "Innstillingar loggførar ", - "description": "Konfigurer loggførarinnstillingar for å overvake aktivitetar og førespurnader i NodeBB.", + "description": "Ved å aktivere avkrysningsboksane vil du få loggar til terminalen din. Dersom du spesifiserer ein sti, vil loggane bli lagra i ei fil i staden. HTTP-logging er nyttig for å samle statistikk om kven, når og kva folk har tilgang til på forumet ditt. I tillegg til å logge HTTP-forespurningar, kan vi òg logge socket.io-hendingar. Socket.io-logging, i kombinasjon med redis-cli monitor, kan vere svært nyttig for å forstå NodeBB sitt indre system.", "explanation": "Aktiver loggføring av HTTP- og WebSocket-aktivitet for feilsøking og overvaking.", "enable-http": "Aktiver HTTP-loggføring", "enable-socket": "Aktiver WebSocket-loggføring", "file-path": "Filsti", - "file-path-placeholder": "Skriv inn stien til loggføringsfila", + "file-path-placeholder": "/path/to/log/file.log ::: la stå tom for å logge til terminalen din", "control-panel": "Kontrollpanel loggførar", "update-settings": "Oppdater loggførar innstillingar" diff --git a/public/language/nn-NO/admin/extend/plugins.json b/public/language/nn-NO/admin/extend/plugins.json index ad23225ed6..dc4e69aa33 100644 --- a/public/language/nn-NO/admin/extend/plugins.json +++ b/public/language/nn-NO/admin/extend/plugins.json @@ -17,8 +17,8 @@ "dev-interested": "Er du ein utviklar?", "docs-info": "Dokumentasjon for utvikling av innstikk kan du sjå i NodeBB Docs Portal.", - "order.description": "Du kan dra og sleppe pluginar for å endre rekkjefølgja", - "order.explanation": "Rekkjefølgja kan påverke korleis pluginar fungerer saman", + "order.description": "Visse innstikk fungerer best når dei blir initierte før/etter andre innstikk.", + "order.explanation": "Innstikk blir lasta inn i rekkjefølgja som er spesifisert her, frå topp til botn.", "plugin-item.themes": "Tema", "plugin-item.deactivate": "Deaktiver", @@ -33,26 +33,26 @@ "plugin-item.unknown": "Ukjent", "plugin-item.unknown-explanation": "Vi kunne ikkje finne informasjon om denne pluginen", "plugin-item.compatible": "Innstikk er kompatibelt med NodeBB %1", - "plugin-item.not-compatible": "Ikkje kompatibel", + "plugin-item.not-compatible": "Dette innstikket har ingen kompatibilitetsdata, sørg for at det fungerer før du installerer det i produksjonsmiljøet ditt.", - "alert.enabled": "Plugin aktivert", - "alert.disabled": "Plugin deaktivert", - "alert.upgraded": "Plugin oppgradert", - "alert.installed": "Plugin installert", - "alert.uninstalled": "Plugin avinstallert", - "alert.activate-success": "Plugin vart aktivert med suksess", - "alert.deactivate-success": "Plugin vart deaktivert med suksess", - "alert.upgrade-success": "Plugin vart oppgradert med suksess", - "alert.install-success": "Plugin vart installert med suksess", + "alert.enabled": "Innstikk aktivert", + "alert.disabled": "Innstikk deaktivert", + "alert.upgraded": "Innstikk oppgradert", + "alert.installed": "Innstikk installert", + "alert.uninstalled": "Innstikk avinstallert", + "alert.activate-success": "Ver venleg å bygg og start NodeBB på nytt for å fullt ut aktivere dette innstikket.", + "alert.deactivate-success": "Innstikk vart deaktivert med suksess", + "alert.upgrade-success": "Ver venleg å bygg og start NodeBB på nytt for å fullt ut aktivere dette innstikket.", + "alert.install-success": "Innstikk vart installert med suksess", "alert.uninstall-success": "Plugin vart avinstallert med suksess", - "alert.suggest-error": "Vi kan ikkje foreslå pluginar for augneblinken", - "alert.package-manager-unreachable": "Pakkehåndteraren er ikkje tilgjengeleg for augneblinken", - "alert.incompatible": "Denne pluginen er ikkje kompatibel med din versjon av NodeBB", - "alert.possibly-incompatible": "Denne pluginen kan vere inkompatibel med din versjon av NodeBB", + "alert.suggest-error": "

 NodeBB kunne ikkje nå pakkebehandlaren. Vil du halde fram med installasjonen av siste versjon?

Server returnerte (%1): %2
", + "alert.package-manager-unreachable": "

Pakkehåndteraren er ikkje tilgjengeleg for NodeBB for augneblinken.

", + "alert.incompatible": "

Versjonen din av NodeBB (v%1) er berre godkjend for oppgradering til v%2 av dette innstikket. Oppdater NodeBB dersom du ønskjer å installere ein nyare versjon av dette innstikket..

", + "alert.possibly-incompatible": "

Ingen kompatibilitetsinformasjon funnen

 Dette innstikket spesifiserte ikkje ein spesifikk versjon for installasjon med tanke på din NodeBB-versjon. Full kompatibilitet kan ikkje garanterast, og det kan føre til at NodeBB ikkje startar som det skal.

Dersom NodeBB ikkje kan starte som det skal:

$ ./nodebb reset plugin=\"%1\"

Vil du halde fram med installasjonen av siste versjon av dette innstikket?

", "alert.reorder": "Pluginar omorganisert", "alert.reorder-success": "Rekkjefølgja av pluginar vart oppdatert med suksess", "license.title": "Lisens", - "license.intro": "Les lisensavtalen før du installerer eller brukar denne pluginen.", + "license.intro": "Innstikket %1 er lisensiert under %2. Les og forstå lisensvilkåra før du aktiverer dette innstikket.", "license.cta": "Godta og fortset" } diff --git a/public/language/nn-NO/admin/extend/rewards.json b/public/language/nn-NO/admin/extend/rewards.json index 6cd3e5f719..866e7a5138 100644 --- a/public/language/nn-NO/admin/extend/rewards.json +++ b/public/language/nn-NO/admin/extend/rewards.json @@ -2,7 +2,7 @@ "rewards": "Utmerkingar", "add-reward": "Legg til utmerking", "condition-if-users": "Vilkår: Om brukarar", - "condition-is": "er", + "condition-is": "er:", "condition-then": "Då", "max-claims": "Maks krav", "zero-infinite": "0 for uendeleg", diff --git a/public/language/nn-NO/admin/extend/widgets.json b/public/language/nn-NO/admin/extend/widgets.json index 10856e53f3..67cf922d1c 100644 --- a/public/language/nn-NO/admin/extend/widgets.json +++ b/public/language/nn-NO/admin/extend/widgets.json @@ -2,7 +2,7 @@ "widgets": "Widgetar", "available": "Tilgjengelege", "explanation": "Dra og slepp widgetar for å tilpasse forumet.", - "none-installed": "Ingen widgetar installert", + "none-installed": "Ingen widgetar funne! Aktiver innstikket for widget-essensialar i innstikk kontrollpanelet.", "clone-from": "Klon frå", "containers.available": "Tilgjengelege konteinarar", "containers.explanation": "Konteinarar fungerer som behaldarar for widgetar.", diff --git a/public/language/nn-NO/admin/manage/categories.json b/public/language/nn-NO/admin/manage/categories.json index 93e824e599..32374d39e7 100644 --- a/public/language/nn-NO/admin/manage/categories.json +++ b/public/language/nn-NO/admin/manage/categories.json @@ -7,8 +7,8 @@ "privileges": "Rettar", "back-to-categories": "Tilbake til kategoriar", "name": "Namn", - "handle": "Category Handle", - "handle.help": "Your category handle is used as a representation of this category across other networks, similar to a username. A category handle must not match an existing username or user group.", + "handle": "Kategori-sti", + "handle.help": " Kategori-stien din blir brukt som ein representasjon av denne kategorien på andre nettverk, liknande eit brukarnamn. Ein kategori-sti må ikkje samsvare med eit eksisterande brukarnamn eller ei brukargruppe.", "description": "Skildring", "bg-color": "Bakgrunnsfarge", "text-color": "Tekstfarge", @@ -39,7 +39,7 @@ "disable": "Deaktiver", "edit": "Rediger", "analytics": "Analyse", - "federation": "Federation", + "federation": "Føderasjon", "view-category": "Vis kategori", "set-order": "Set rekkjefølgje", @@ -79,21 +79,21 @@ "analytics.topics-daily": "Emne per dag", "analytics.posts-daily": "Innlegg per dag", - "federation.title": "Federation settings for \"%1\" category", - "federation.disabled": "Federation is disabled site-wide, so category federation settings are currently unavailable.", - "federation.disabled-cta": "Federation Settings →", - "federation.syncing-header": "Synchronization", - "federation.syncing-intro": "A category can follow a \"Group Actor\" via the ActivityPub protocol. If content is received from one of the actors listed below, it will be automatically added to this category.", - "federation.syncing-caveat": "N.B. Setting up syncing here establishes a one-way synchronization. NodeBB attempts to subscribe/follow the actor, but the reverse cannot be assumed.", - "federation.syncing-none": "This category is not currently following anybody.", - "federation.syncing-add": "Synchronize with...", - "federation.syncing-actorUri": "Actor", - "federation.syncing-follow": "Follow", - "federation.syncing-unfollow": "Unfollow", - "federation.followers": "Remote users following this category", - "federation.followers-handle": "Handle", + "federation.title": "Føderasjonsinnstillingar for kategorien \"%1\"", + "federation.disabled": "Føderasjon er deaktivert for heile nettstaden, så innstillingar for kategori-føderasjon er for tida ikkje tilgjengelege.", + "federation.disabled-cta": "Føderasjonsinnstillingar →", + "federation.syncing-header": "Synkronisering", + "federation.syncing-intro": "Ein kategori kan følgje ein “Gruppeaktør” via ActivityPub-protokollen. Dersom innhald blir mottatt frå ein av aktørane som er lista opp nedanfor, vil det automatisk bli lagt til i denne kategorien.", + "federation.syncing-caveat": " Merk: Å konfigurere synkronisering her opprettar ein einvegs synkronisering. NodeBB prøver å abonnere på/følgje aktøren, men det motsette kan ikkje føresetjast.", + "federation.syncing-none": "Denne kategorien følgjer for tida ingen.", + "federation.syncing-add": "Synkronser med...", + "federation.syncing-actorUri": "Aktør", + "federation.syncing-follow": "Følg", + "federation.syncing-unfollow": "Avfølg", + "federation.followers": "Eksterne brukarar som følgjer denne kategorien", + "federation.followers-handle": "Sti", "federation.followers-id": "ID", - "federation.followers-none": "No followers.", + "federation.followers-none": "Ingen følgjarar.", "alert.created": "Oppretta", "alert.create-success": "Kategori oppretta med suksess", diff --git a/public/language/nn-NO/admin/menu.json b/public/language/nn-NO/admin/menu.json index 8ab19ed3c7..828f60842b 100644 --- a/public/language/nn-NO/admin/menu.json +++ b/public/language/nn-NO/admin/menu.json @@ -38,7 +38,7 @@ "settings/tags": "Emneord", "settings/notifications": "Varsel", "settings/api": "API-tilgang", - "settings/activitypub": "Federation (ActivityPub)", + "settings/activitypub": "Føderasjon (ActivityPub)", "settings/sounds": "Lydar", "settings/social": "Sosial", "settings/cookies": "Informasjonskapslar", diff --git a/public/language/nn-NO/admin/settings/activitypub.json b/public/language/nn-NO/admin/settings/activitypub.json index 94f9ad7822..96d0526ecc 100644 --- a/public/language/nn-NO/admin/settings/activitypub.json +++ b/public/language/nn-NO/admin/settings/activitypub.json @@ -1,26 +1,26 @@ { - "intro-lead": "What is Federation?", - "intro-body": "NodeBB is able to communicate with other NodeBB instances that support it. This is achieved through a protocol called ActivityPub. If enabled, NodeBB will also be able to communicate with other apps and websites that use ActivityPub (e.g. Mastodon, Peertube, etc.)", - "general": "General", - "pruning": "Content Pruning", - "content-pruning": "Days to keep remote content", - "content-pruning-help": "Note that remote content that has received engagement (a reply or a upvote/downvote) will be preserved. (0 for disabled)", - "user-pruning": "Days to cache remote user accounts", - "user-pruning-help": "Remote user accounts will only be pruned if they have no posts. Otherwise they will be re-retrieved. (0 for disabled)", - "enabled": "Enable Federation", - "enabled-help": "If enabled, will allow this NodeBB will be able to communicate with all Activitypub-enabled clients on the wider fediverse.", - "allowLoopback": "Allow loopback processing", - "allowLoopback-help": "Useful for debugging purposes only. You should probably leave this disabled.", + "intro-lead": "Kva er føderering?", + "intro-body": "NodeBB kan kommunisere med andre NodeBB-instansar som støttar det. Dette blir oppnådd gjennom ein protokoll kalla ActivityPub. Dersom aktivert, vil NodeBB òg kunne kommunisere med andre appar og nettsider som brukar ActivityPub (t.d. Mastodon, Peertube, osb.).", + "general": "Generelt", + "pruning": "Innhaldsbeskjæring", + "content-pruning": "Dagar å behalde eksternt innhald", + "content-pruning-help": " Merk at eksternt innhald som har fått engasjement (eit svar eller ei opp-/nedstemming) vil bli bevart. (0 for deaktivert)", + "user-pruning": "Dagar å mellomlagre eksterne brukarkontoar", + "user-pruning-help": "Eksterne brukarkontoar vil berre bli fjerna dersom dei ikkje har innlegg. Elles vil dei bli henta på nytt. (0 for deaktivert)", + "enabled": "Aktiver føderering", + "enabled-help": "Dersom aktivert, vil dette gjere at NodeBB kan kommunisere med alle ActivityPub-aktiverte klientar i det større fødiverset.", + "allowLoopback": "Tillat loopback-prosessering", + "allowLoopback-help": "Nyttig berre for feilsøking. Du bør sannsynlegvis la dette vere deaktivert.", - "probe": "Open in App", - "probe-enabled": "Try to open ActivityPub-enabled resources in NodeBB", - "probe-enabled-help": "If enabled, NodeBB will check every external link for an ActivityPub equivalent, and load it in NodeBB instead.", - "probe-timeout": "Lookup Timeout (milliseconds)", - "probe-timeout-help": "(Default: 2000) If the lookup query does not receive a response within the set timeframe, will send the user to the link directly instead. Adjust this number higher if sites are responding slowly and you wish to give extra time.", + "probe": "Opne i app", + "probe-enabled": "Forsøk å opne ActivityPub-aktiverte ressursar i NodeBB", + "probe-enabled-help": "Dersom aktivert, vil NodeBB sjekke kvar ekstern lenkje for ein ActivityPub-ekvivalent og laste den inn i NodeBB i staden.", + "probe-timeout": "Oppslagstimeout (millisekund)", + "probe-timeout-help": "(Standard: 2000) Dersom oppslagsførespurnaden ikkje får eit svar innan den angitte tidsramma, vil brukaren bli sendt direkte til lenkja i staden. Juster dette talet oppover dersom nettsider responderer sakte, og du ønskjer å gi ekstra tid.", - "server-filtering": "Filtering", - "count": "This NodeBB is currently aware of %1 server(s)", - "server.filter-help": "Specify servers you would like to bar from federating with your NodeBB. Alternatively, you may opt to selectively allow federation with specific servers, instead. Both options are supported, although they are mutually exclusive.", - "server.filter-help-hostname": "Enter just the instance hostname below (e.g. example.org), separated by line breaks.", - "server.filter-allow-list": "Use this as an Allow List instead" + "server-filtering": "Filtrer etter", + "count": "Denne NodeBB-en er for tida klar over %1 server(ar)", + "server.filter-help": "Spesifiser serverar du ønskjer å hindre frå å føderere med din NodeBB. Alternativt kan du velje å tillate føderasjon berre med spesifikke serverar. Begge alternativ er støtta, men dei er gjensidig utelukkande.", + "server.filter-help-hostname": "Skriv berre inn vertsnamnet for instansen nedanfor (t.d. døme.no), separert med linjeskift.", + "server.filter-allow-list": "Bruk dette som ei tillatingsliste i staden" } \ No newline at end of file diff --git a/public/language/nn-NO/admin/settings/uploads.json b/public/language/nn-NO/admin/settings/uploads.json index 4986849ef3..c729541aff 100644 --- a/public/language/nn-NO/admin/settings/uploads.json +++ b/public/language/nn-NO/admin/settings/uploads.json @@ -12,7 +12,7 @@ "resize-image-width-threshold-help": "( i pixels, standard er 2000 pixler, angi 0 for å avvise) ", "resize-image-width": "Endre bilete breidde", "resize-image-width-help": "Angi ny breidde for bilete som vert endra ved opplasting.", - "resize-image-keep-original": "Keep original image after resize", + "resize-image-keep-original": "Behald originalbiletet etter endring av storleik", "resize-image-quality": "Biletekvalitet ved endring", "resize-image-quality-help": "Angi kvaliteten for bilete som vert endra ved opplasting.", "max-file-size": "Maks filstorleik", diff --git a/public/language/nn-NO/aria.json b/public/language/nn-NO/aria.json index 54e2f61bc4..a89012d5a8 100644 --- a/public/language/nn-NO/aria.json +++ b/public/language/nn-NO/aria.json @@ -2,7 +2,7 @@ "post-sort-option": "Val for innleggssortering, %1", "topic-sort-option": "Val for emnessortering, %1", "user-avatar-for": "Brukar ikon for %1", - "profile-page-for": "Profile page for user %1", + "profile-page-for": "Profilside for brukar %1", "user-watched-tags": "Emneord følgt av brukar", "delete-upload-button": "Slett opplasting-knapp", "group-page-link-for": "Gruppeside-lenkje for, %1" diff --git a/public/language/nn-NO/error.json b/public/language/nn-NO/error.json index bd14df3803..e66e3b263a 100644 --- a/public/language/nn-NO/error.json +++ b/public/language/nn-NO/error.json @@ -235,7 +235,7 @@ "plugins-set-in-configuration": "Du har ikkje løyve til å endre plugin-status sidan dei er definert ved oppstart (config.json, miljøvariablar eller terminalargument), ver venleg å endre konfigurasjonen i staden.", "theme-not-set-in-configuration": "Når ein definerer aktive pluginar i konfigurasjonen, krev endring av tema at det nye temaet vert lagt til i lista over aktive pluginar før det oppdaterast i ACP", "topic-event-unrecognized": "Emnehending '%1' ikkje gjenkjent", - "category.handle-taken": "Category handle is already taken, please choose another.", + "category.handle-taken": "Kategori-stien er allereie i bruk, vel vennlegst eit anna.", "cant-set-child-as-parent": "Kan ikkje setje barn som overordna kategori", "cant-set-self-as-parent": "Kan ikkje setje seg sjølv som overordna kategori", "api.master-token-no-uid": "Ein mastertoken vart mottatt utan ein tilsvarande `_uid` i førespurnadsinnhaldet", @@ -249,11 +249,11 @@ "api.501": "Ruta du prøver å kalle på er ikkje implementert enno, prøv igjen i morgon", "api.503": "Ruta du prøver å kalle på er for augneblinken ikkje tilgjengeleg grunna serverkonfigurasjon", "api.reauth-required": "Ressursen du prøver å nå krev (re-)autentisering.", - "activitypub.not-enabled": "Federation is not enabled on this server", - "activitypub.invalid-id": "Unable to resolve the input id, likely as it is malformed.", - "activitypub.get-failed": "Unable to retrieve the specified resource.", - "activitypub.pubKey-not-found": "Unable to resolve public key, so payload verification cannot take place.", - "activitypub.origin-mismatch": "The received object's origin does not match the sender's origin", - "activitypub.actor-mismatch": "The received activity is being carried out by an actor that is different from expected.", - "activitypub.not-implemented": "The request was denied because it or an aspect of it is not implemented by the recipient server" + "activitypub.not-enabled": " Føderasjon er ikkje aktivert på denne serveren.", + "activitypub.invalid-id": "Kan ikkje løyse opp input-ID-en, sannsynlegvis fordi ho er ugyldig.", + "activitypub.get-failed": "Kan ikkje hente den spesifiserte ressursen.", + "activitypub.pubKey-not-found": " Kan ikkje løyse opp den offentlege nøkkelen, så verifisering av nyttelasta kan ikkje gjennomførast.", + "activitypub.origin-mismatch": "Den mottatte objektet sin opphavsstad samsvarar ikkje med avsendaren sin opphavsstad.", + "activitypub.actor-mismatch": " Den mottatte aktiviteten blir utført av ein aktør som er annleis enn forventa.", + "activitypub.not-implemented": "Førespurnaden blei avvist fordi han, eller ein del av han, ikkje er implementert av mottakarserveren." } \ No newline at end of file diff --git a/public/language/nn-NO/flags.json b/public/language/nn-NO/flags.json index e90ecdbf42..0ab74af824 100644 --- a/public/language/nn-NO/flags.json +++ b/public/language/nn-NO/flags.json @@ -84,17 +84,17 @@ "modal-reason-offensive": "Støytande innhald", "modal-reason-other": "Annan grunn", "modal-reason-custom": "Skriv inn eigen grunn", - "modal-notify-remote": "Forward this report to %1", + "modal-notify-remote": "Vidareformidle denne rapporten til %1", "modal-submit": "Send inn", "modal-submit-success": "Rapport sendt med suksess", - "modal-confirm-rescind": "Rescind Report?", + "modal-confirm-rescind": "Trekke tilbake rapporten?", "bulk-actions": "Massehandlingar", "bulk-resolve": "Løys alle", - "confirm-purge": "Are you sure you want to permanently delete these flags?", - "purge-cancelled": "Flag Purge Cancelled", - "bulk-purge": "Purge Flag(s)", + "confirm-purge": "Er du sikker på at du vil slette desse flagga?", + "purge-cancelled": "Merking sletting avbroten", + "bulk-purge": "Slett merking(ar)", "bulk-success": "Alle vart handsama med suksess", "flagged-timeago": "Rapportert for %1 sidan", "auto-flagged": "Automatisk rapportert" diff --git a/public/language/nn-NO/global.json b/public/language/nn-NO/global.json index 29b9deba32..e66aa148f4 100644 --- a/public/language/nn-NO/global.json +++ b/public/language/nn-NO/global.json @@ -50,7 +50,7 @@ "header.navigation": "Navigasjon", "header.manage": "Administrer", "header.drafts": "Utkast", - "header.world": "World", + "header.world": "Verda", "notifications.loading": "Laster varsel", "chats.loading": "Laster chattar", "drafts.loading": "Laster utkast", @@ -111,7 +111,7 @@ "dnd": "Ikkje forstyrr", "invisible": "Usynleg", "offline": "Avlogga", - "remote-user": "This user is from outside of this forum", + "remote-user": "Denne brukaren kjem frå utsida av dette forumet.", "email": "E-post", "language": "Språk", "guest": "Gjest", diff --git a/public/language/nn-NO/modules.json b/public/language/nn-NO/modules.json index 131bc561fb..56391f107a 100644 --- a/public/language/nn-NO/modules.json +++ b/public/language/nn-NO/modules.json @@ -115,8 +115,8 @@ "composer.discard-all-drafts": "Forkast alle utkast", "composer.no-drafts": "Du har ingen utkast", "composer.discard-draft-confirm": "Ønskjer du å forkaste dette utkastet?", - "composer.remote-pid-editing": "Editing a remote post", - "composer.remote-pid-content-immutable": "The content of remote posts cannot be edited. However, you are able change the topic title and tags.", + "composer.remote-pid-editing": "Redigering av ein ekstern post", + "composer.remote-pid-content-immutable": "Innhaldet i eksterne postar kan ikkje redigerast. Du kan likevel endre emnetittelen og merkelappane.", "bootbox.ok": "OK", "bootbox.cancel": "Avbryt", "bootbox.confirm": "Stadfest", diff --git a/public/language/nn-NO/notifications.json b/public/language/nn-NO/notifications.json index 30e4e6d510..d7602b43b4 100644 --- a/public/language/nn-NO/notifications.json +++ b/public/language/nn-NO/notifications.json @@ -99,8 +99,8 @@ "notificationType-new-post-flag": "Når eit innlegg vert rapportert", "notificationType-new-user-flag": "Når ein brukar vert rapportert", "notificationType-new-reward": "Når du får ein ny utmerking", - "activitypub.announce": "%1 shared your post in %2 to their followers.", - "activitypub.announce-dual": "%1 and %2 shared your post in %3 to their followers.", - "activitypub.announce-triple": "%1, %2 and %3 shared your post in %4 to their followers.", - "activitypub.announce-multiple": "%1, %2 and %3 others shared your post in %4 to their followers." + "activitypub.announce": "%1 delte din post i %2 til sine følgjarar.", + "activitypub.announce-dual": "%1 og %2 delte din post i %3til sine følgjarar.", + "activitypub.announce-triple": "%1, %2 og %3 delte din post i %4 til sine følgjarar.", + "activitypub.announce-multiple": "%1, %2 og %3 andre delte din post i %4 til sine følgjarar." } \ No newline at end of file diff --git a/public/language/nn-NO/pages.json b/public/language/nn-NO/pages.json index 0cf6246cfe..4d1cdb955d 100644 --- a/public/language/nn-NO/pages.json +++ b/public/language/nn-NO/pages.json @@ -36,7 +36,7 @@ "chat": "Chattar med %1", "flags": "Rapportar", "flag-details": "Detaljar for rapport %1", - "world": "World", + "world": "Verda", "account/edit": "Redigerar \"%1\"", "account/edit/password": "Endrar passord for \"%1\"", "account/edit/username": "Endrar brukarnamn for \"%1\"", @@ -63,7 +63,7 @@ "account/blocks": "Blokkerte brukarar for %1", "account/uploads": "Opplastingar av %1", "account/sessions": "Påloggingssesjonar", - "account/shares": "Topics shared by %1", + "account/shares": "Emne delt av %1", "confirm": "E-post stadfesta", "maintenance.text": "%1 er for augneblinken under vedlikehald.
Ver venleg å kome tilbake seinare.", "maintenance.messageIntro": "Administratoren har også lagt att denne meldinga:", diff --git a/public/language/nn-NO/recent.json b/public/language/nn-NO/recent.json index d3f22b10c1..ee3a39b778 100644 --- a/public/language/nn-NO/recent.json +++ b/public/language/nn-NO/recent.json @@ -8,6 +8,6 @@ "no-recent-topics": "Det er ingen nylege emne.", "no-popular-topics": "Det er ingen populære emne.", "load-new-posts": "Last nye innlegg", - "uncategorized.title": "All known topics", - "uncategorized.intro": "This page shows a chronological listing of every topic that this forum has received.
The views and opinions expressed in the topics below are not moderated and may not represent the views and opinions of this website." + "uncategorized.title": "Alle kjente emner", + "uncategorized.intro": "Denne sida viser ei kronologisk liste over alle emne som dette forumet har mottatt.
Meiningane og synspunkta som kjem til uttrykk i emna nedanfor, er ikkje modererte og representerer kanskje ikkje meiningane og synspunkta til denne nettsida." } \ No newline at end of file diff --git a/public/language/nn-NO/topic.json b/public/language/nn-NO/topic.json index ae7274ff73..48f429a550 100644 --- a/public/language/nn-NO/topic.json +++ b/public/language/nn-NO/topic.json @@ -61,8 +61,8 @@ "user-restored-topic-on": "%1 gjenoppretta dette emnet den %2", "user-moved-topic-from-ago": "%1 flytta dette emnet frå %2 %3", "user-moved-topic-from-on": "%1 flytta dette emnet frå %2 den %3", - "user-shared-topic-ago": "%1 shared this topic %2", - "user-shared-topic-on": "%1 shared this topic on %2", + "user-shared-topic-ago": "%1 delte dette emnet %2", + "user-shared-topic-on": "%1 delte dette emnet på %2", "user-queued-post-ago": "%1 køyrde innlegget for godkjenning %3", "user-queued-post-on": "%1 køyrde innlegget for godkjenning den %3", "user-referenced-topic-ago": "%1 refererte til dette emnet %3", @@ -137,7 +137,7 @@ "bookmarks": "Bokmerke", "bookmarks.has-no-bookmarks": "Du har ikkje bokmerka noko innlegg enno.", "copy-permalink": "Kopier permalenkje", - "go-to-original": "View Original Post", + "go-to-original": "Sjå innlegget", "loading-more-posts": "Lastar fleire innlegg", "move-topic": "Flytt emne", "move-topics": "Flytt emne", @@ -223,6 +223,6 @@ "post-tools": "Innleggsverktøy", "unread-posts-link": "Lenkje til uleste innlegg", "thumb-image": "Emne miniatyrbilete", - "announcers": "Shares", - "announcers-x": "Shares (%1)" + "announcers": "Delingar", + "announcers-x": "Delingar (%1)" } \ No newline at end of file diff --git a/public/language/nn-NO/user.json b/public/language/nn-NO/user.json index 5ebe918014..600ad9bd04 100644 --- a/public/language/nn-NO/user.json +++ b/public/language/nn-NO/user.json @@ -47,7 +47,7 @@ "default-category-watch-state": "Standard kategori følgjetilstand", "followers": "Følgjarar", "following": "Følgjer", - "shares": "Shares", + "shares": "Delingar", "blocks": "Blokker", "blocked-users": "Blokkerte brukarar", "block-toggle": "Veksle blokkering", @@ -60,10 +60,10 @@ "chat-with": "Fortset chat med %1", "new-chat-with": "Start ny chat med %1", "flag-profile": "Rapporter profil", - "profile-flagged": "Already flagged", + "profile-flagged": "Allerede flagga", "follow": "Følg", "unfollow": "Slutt å følgje", - "cancel-follow": "Cancel follow request", + "cancel-follow": " Avbryt førespurnad om å følgje", "more": "Meir", "profile-update-success": "Profilen er oppdatert!", "change-picture": "Endre bilete", @@ -123,7 +123,7 @@ "has-no-downvoted-posts": "Denne brukaren har ikkje stemt ned nokre innlegg enno.", "has-no-controversial-posts": "Denne brukaren har inga kontroversielle innlegg enno.", "has-no-blocks": "Du har ikkje blokkert nokon brukarar.", - "has-no-shares": "This user has not shared any topics.", + "has-no-shares": "Denne brukaren har ikkje delt nokre emner.", "email-hidden": "E-post er skjult", "hidden": "skjult", "paginate-description": "Del emne og innlegg i sider i staden for å bruke uendeleg rulling", diff --git a/public/language/nn-NO/world.json b/public/language/nn-NO/world.json index 3753335278..c5c0c1ae1f 100644 --- a/public/language/nn-NO/world.json +++ b/public/language/nn-NO/world.json @@ -1,18 +1,18 @@ { - "name": "World", - "popular": "Popular topics", - "recent": "All topics", - "help": "Help", + "name": "Verda", + "popular": "Populære emne", + "recent": "Alle emne", + "help": "Hjelp", - "help.title": "What is this page?", - "help.intro": "Welcome to your corner of the fediverse.", - "help.fediverse": "The \"fediverse\" is a network of interconnected applications and websites that all talk to one another and whose users can see each other. This forum is federated, and can interact with that social web (or \"fediverse\"). This page is your corner of the fediverse. It consists solely of topics created by — and shared from — users you follow.", - "help.build": "There might not be a lot of topics here to start; that's normal. You will start to see more content here over time when you start following other users.", - "help.federating": "Likewise, if users from outside of this forum start following you, then your posts will start appearing on those apps and websites as well.", - "help.next-generation": "This is the next generation of social media, start contributing today!", + "help.title": "Kva er denne sida?", + "help.intro": "Velkommen til ditt hjørne av fødiverset.", + "help.fediverse": "“Fødiverset” er eit nettverk av samanbundne applikasjonar og nettsider som kommuniserer med kvarandre, og der brukarane kan sjå kvarandre. Dette forumet er føderert og kan samhandle med det sosiale nettet (eller “fødiverset”). Denne sida er ditt hjørne av fødiverset. Ho består utelukkande av emne oppretta av – og delt frå – brukarar du følgjer.", + "help.build": "Det kan vere at det ikkje er mange emne her til å begynne med; det er heilt normalt. Du vil sjå meir innhald her etter kvart som du begynner å følgje andre brukarar.", + "help.federating": "På same måte, dersom brukarar frå utsida av dette forumet begynner å følgje deg, vil innlegga dine òg begynne å visast på desse appane og nettsidene.", + "help.next-generation": "Dette er den neste generasjonen av sosiale medium, begynn å bidra i dag!", - "onboard.title": "Your window to the fediverse...", - "onboard.what": "This is your personalized category made up of only content found outside of this forum. Whether something shows up in this page depends on whether you follow them, or whether that post was shared by someone you follow.", - "onboard.why": "There's a lot that goes on outside of this forum, and not all of it is relevant to your interests. That's why following people is the best way to signal that you want to see more from someone.", - "onboard.how": "In the meantime, you can click on the shortcut buttons at the top to see what else this forum knows about, and start discovering some new content!" + "onboard.title": "Ditt vindauge til fødiverset...", + "onboard.what": "Dette er din personlege kategori som berre består av innhald funne utanfor dette forumet. Om noko blir vist på denne sida, avheng av om du følgjer dei, eller om innlegget blei delt av nokon du følgjer.", + "onboard.why": "Det skjer mykje utanfor dette forumet, og ikkje alt er relevant for interessene dine. Difor er det å følgje folk den beste måten å signalisere at du ønskjer å sjå meir frå nokon.", + "onboard.how": "I mellomtida kan du klikke på snarvegsknappane øvst for å sjå kva anna dette forumet kjenner til, og begynne å oppdage nytt innhald!" } \ No newline at end of file From f64e6f0f1a9c4f972312f606d4c4374ab77f30e9 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 29 Jan 2025 11:55:38 -0500 Subject: [PATCH 027/125] refactor: Posts.relativeToAbsolute so that the regexes passed to it no longer need a pre-defined length, it is now calculated from the match result, added new regex for markdown image/anchors --- src/posts/parse.js | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/posts/parse.js b/src/posts/parse.js index 7f5f0bd518..8d0c902e46 100644 --- a/src/posts/parse.js +++ b/src/posts/parse.js @@ -36,15 +36,9 @@ let sanitizeConfig = { const allowedTypes = new Set(['default', 'plaintext', 'activitypub.note', 'activitypub.article', 'markdown']); module.exports = function (Posts) { - Posts.urlRegex = { - regex: /href="([^"]+)"/g, - length: 6, - }; - - Posts.imgRegex = { - regex: /src="([^"]+)"/g, - length: 5, - }; + Posts.urlRegex = /href="([^"]+)"/g; + Posts.imgRegex = /src="([^"]+)"/g; + Posts.mdImageUrlRegex = /\[.+?\]\(([^\\)]+)\)/g; Posts.parsePost = async function (postData, type) { if (!postData) { @@ -89,7 +83,7 @@ module.exports = function (Posts) { return content; } let parsed; - let current = regex.regex.exec(content); + let current = regex.exec(content); let absolute; while (current !== null) { if (current[1]) { @@ -104,15 +98,16 @@ module.exports = function (Posts) { absolute = `//${current[1]}`; } - content = content.slice(0, current.index + regex.length) + + const offset = current[0].indexOf(current[1]); + content = content.slice(0, current.index + offset) + absolute + - content.slice(current.index + regex.length + current[1].length); + content.slice(current.index + offset + current[1].length); } } catch (err) { winston.verbose(err.messsage); } } - current = regex.regex.exec(content); + current = regex.exec(content); } return content; From 02fb99ebb6cc58b271d96fffcb50ec8e90d9c91b Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 29 Jan 2025 12:03:22 -0500 Subject: [PATCH 028/125] fix: call relativeToAbsolute helper when generating markdown source content in mocks.notes.public/private --- src/activitypub/helpers.js | 2 +- src/activitypub/mocks.js | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/activitypub/helpers.js b/src/activitypub/helpers.js index 35fd9eb75d..da0416fde0 100644 --- a/src/activitypub/helpers.js +++ b/src/activitypub/helpers.js @@ -35,7 +35,7 @@ Helpers._test = (method, args) => { }, 2500); }; // process.nextTick(() => { -// Helpers._test(activitypub.notes.assert, [1, `https://`]); +// Helpers._test(activitypub.notes.assert, [1, `https://`]); // }); let _lastLog; diff --git a/src/activitypub/mocks.js b/src/activitypub/mocks.js index 67c6636bc4..842c3b3d21 100644 --- a/src/activitypub/mocks.js +++ b/src/activitypub/mocks.js @@ -453,7 +453,8 @@ Mocks.notes.public = async (post) => { const _post = { ...post }; const raw = await posts.getPostField(post.pid, 'content'); _post.content = raw; - const { content } = await posts.parsePost(_post, 'markdown'); + let { content } = await posts.parsePost(_post, 'markdown'); + content = posts.relativeToAbsolute(content, posts.mdImageUrlRegex); source = { content, mediaType: 'text/markdown', @@ -500,7 +501,7 @@ Mocks.notes.public = async (post) => { }); // Inspect post content for external imagery as well - let match = posts.imgRegex.regex.exec(post.content); + let match = posts.imgRegex.exec(post.content); while (match !== null) { if (match[1]) { const { hostname, pathname, href: url } = new URL(match[1]); @@ -509,7 +510,7 @@ Mocks.notes.public = async (post) => { attachment.push({ mediaType, url }); } } - match = posts.imgRegex.regex.exec(post.content); + match = posts.imgRegex.exec(post.content); } attachment = attachment.map(({ mediaType, url, width, height }) => { @@ -600,8 +601,11 @@ Mocks.notes.private = async ({ messageObj }) => { let source; const markdownEnabled = await plugins.isActive('nodebb-plugin-markdown'); if (markdownEnabled) { + let { content } = messageObj; + content = posts.relativeToAbsolute(content, posts.mdImageUrlRegex); + source = { - content: messageObj.content, + content, mediaType: 'text/markdown', }; } From 126ff2861258e1e25bd3599435d0dda86c0f81b1 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 29 Jan 2025 14:38:43 -0500 Subject: [PATCH 029/125] Revert "feat: changes to how a topic is presented via ActivityPub; conformance with upcoming changes to 7888" This reverts commit 4fd7a9dc59b65e8654d704c493f2254793e8d6a9. --- src/activitypub/contexts.js | 22 +++------ src/activitypub/notes.js | 2 +- src/controllers/activitypub/actors.js | 65 +++++++++------------------ src/routes/activitypub.js | 3 +- 4 files changed, 31 insertions(+), 61 deletions(-) diff --git a/src/activitypub/contexts.js b/src/activitypub/contexts.js index 3f32654e68..12dcae1059 100644 --- a/src/activitypub/contexts.js +++ b/src/activitypub/contexts.js @@ -12,7 +12,6 @@ const acceptableTypes = ['Collection', 'CollectionPage', 'OrderedCollection', 'O Contexts.get = async (uid, id) => { let context; let type; - let collection; // Generate digest for If-None-Match if locally cached const tid = await posts.getPostField(id, 'tid'); @@ -28,15 +27,12 @@ Contexts.get = async (uid, id) => { } try { - ({ id, type, context, posts: collection } = await activitypub.get('uid', uid, id, { headers })); - if (type === 'Conversation' && collection) { - activitypub.helpers.log(`[activitypub/context] ${id} is the context.`); - return { context: id, collection }; - } else if (!context) { + ({ context } = await activitypub.get('uid', uid, id, { headers })); + if (!context) { activitypub.helpers.log(`[activitypub/context] ${id} contains no context.`); return false; } - ({ type, posts: collection } = await activitypub.get('uid', uid, context)); + ({ type } = await activitypub.get('uid', uid, context)); } catch (e) { if (e.code === 'ap_get_304') { activitypub.helpers.log(`[activitypub/context] ${id} context unchanged.`); @@ -47,8 +43,8 @@ Contexts.get = async (uid, id) => { return false; } - if (type === 'Conversation') { - return { context, collection }; + if (acceptableTypes.includes(type)) { + return { context }; } return false; @@ -102,13 +98,9 @@ Contexts.getItems = async (uid, id, options) => { const inputId = activitypub.helpers.isUri(options.input) ? options.input : options.input.id; const inCollection = Array.from(chain).map(p => p.pid).includes(inputId); if (!inCollection) { - const item = activitypub.helpers.isUri(options.input) ? + chain.add(activitypub.helpers.isUri(options.input) ? await parseString(uid, options.input) : - await parseItem(uid, options.input); - - if (item) { - chain.add(item); - } + await parseItem(uid, options.input)); } return chain; diff --git a/src/activitypub/notes.js b/src/activitypub/notes.js index eb22dc292c..dfe9ef2435 100644 --- a/src/activitypub/notes.js +++ b/src/activitypub/notes.js @@ -49,7 +49,7 @@ Notes.assert = async (uid, input, options = { skipChecks: false }) => { const { tid } = context; return { tid, count: 0 }; } else if (context.context) { - chain = Array.from(await activitypub.contexts.getItems(uid, context.collection, { input })); + chain = Array.from(await activitypub.contexts.getItems(uid, context.context, { input })); if (chain && chain.length) { // Context resolves, use in later topic creation context = context.context; diff --git a/src/controllers/activitypub/actors.js b/src/controllers/activitypub/actors.js index ca92cee5f0..704a767b82 100644 --- a/src/controllers/activitypub/actors.js +++ b/src/controllers/activitypub/actors.js @@ -115,52 +115,12 @@ Actors.replies = async function (req, res) { Actors.topic = async function (req, res, next) { const allowed = await privileges.topics.can('topics:read', req.params.tid, activitypub._constants.uid); if (!allowed) { - return next(); - } - - const { cid, titleRaw: name, mainPid, slug } = await topics.getTopicFields(req.params.tid, ['cid', 'title', 'mainPid', 'slug']); - let pids = await db.getSortedSetMembers(`tid:${req.params.tid}:posts`); - pids.push(mainPid); - pids = pids.map(pid => (utils.isNumber(pid) ? `${nconf.get('url')}/post/${pid}` : pid)); - - // Generate digest for ETag - const digest = activitypub.helpers.generateDigest(new Set(pids)); - const ifNoneMatch = (req.get('If-None-Match') || '').split(',').map((tag) => { - tag = tag.trim(); - if (tag.startsWith('"') && tag.endsWith('"')) { - return tag.slice(1, tag.length - 1); - } - - return tag; - }); - if (ifNoneMatch.includes(digest)) { - return res.sendStatus(304); - } - res.set('ETag', digest); - - const object = { - '@context': 'https://www.w3.org/ns/activitystreams', - id: `${nconf.get('url')}/topic/${req.params.tid}`, - url: `${nconf.get('url')}/topic/${slug}`, - type: 'Conversation', - name, - attributedTo: `${nconf.get('url')}/category/${cid}`, - // audience: cid !== -1 ? `${nconf.get('url')}/category/${cid}` : undefined, - posts: `${nconf.get('url')}/topic/${req.params.tid}/posts`, - }; - - res.status(200).json(object); -}; - -Actors.topicPosts = async function (req, res, next) { - const allowed = await privileges.topics.can('topics:read', req.params.tid, activitypub._constants.uid); - if (!allowed) { - return next(); + return res.sendStatus(404); } const page = parseInt(req.query.page, 10) || undefined; const perPage = meta.config.postsPerPage; - const mainPid = await topics.getTopicField(req.params.tid, 'mainPid'); + const { cid, titleRaw: name, mainPid, slug } = await topics.getTopicFields(req.params.tid, ['cid', 'title', 'mainPid', 'slug']); try { let [collection, pids] = await Promise.all([ activitypub.helpers.generateCollection({ @@ -176,6 +136,21 @@ Actors.topicPosts = async function (req, res, next) { pids = pids.map(pid => (utils.isNumber(pid) ? `${nconf.get('url')}/post/${pid}` : pid)); collection.totalItems += 1; // account for mainPid + // Generate digest for ETag + const digest = activitypub.helpers.generateDigest(new Set(pids)); + const ifNoneMatch = (req.get('If-None-Match') || '').split(',').map((tag) => { + tag = tag.trim(); + if (tag.startsWith('"') && tag.endsWith('"')) { + return tag.slice(1, tag.length - 1); + } + + return tag; + }); + if (ifNoneMatch.includes(digest)) { + return res.sendStatus(304); + } + res.set('ETag', digest); + // Convert pids to urls if (page || collection.totalItems < meta.config.postsPerPage) { collection.orderedItems = collection.orderedItems || []; @@ -187,7 +162,11 @@ Actors.topicPosts = async function (req, res, next) { const object = { '@context': 'https://www.w3.org/ns/activitystreams', - id: `${nconf.get('url')}/topic/${req.params.tid}/posts${collection.orderedItems && page ? `?page=${page}` : ''}`, + id: `${nconf.get('url')}/topic/${req.params.tid}${collection.orderedItems && page ? `?page=${page}` : ''}`, + url: `${nconf.get('url')}/topic/${slug}`, + name, + attributedTo: `${nconf.get('url')}/category/${cid}`, + audience: cid !== -1 ? `${nconf.get('url')}/category/${cid}` : undefined, ...collection, }; diff --git a/src/routes/activitypub.js b/src/routes/activitypub.js index 0c26a36ea4..8993cb8875 100644 --- a/src/routes/activitypub.js +++ b/src/routes/activitypub.js @@ -40,14 +40,13 @@ module.exports = function (app, middleware, controllers) { app.get('/post/:pid', [...middlewares, middleware.assert.post], controllers.activitypub.actors.note); app.get('/post/:pid/replies', [...middlewares, middleware.assert.post], controllers.activitypub.actors.replies); - app.get('/topic/:tid/posts', [...middlewares, middleware.assert.topic], controllers.activitypub.actors.topicPosts); app.get('/topic/:tid/:slug?', [...middlewares, middleware.assert.topic], controllers.activitypub.actors.topic); + app.get('/category/:cid/:slug?', [...middlewares, middleware.assert.category], controllers.activitypub.actors.category); app.get('/category/:cid/inbox', [...middlewares, middleware.assert.category], controllers.activitypub.getInbox); app.post('/category/:cid/inbox', [...inboxMiddlewares, middleware.assert.category, ...inboxMiddlewares], controllers.activitypub.postInbox); app.get('/category/:cid/outbox', [...middlewares, middleware.assert.category], controllers.activitypub.getCategoryOutbox); app.post('/category/:cid/outbox', [...middlewares, middleware.assert.category], controllers.activitypub.postOutbox); - app.get('/category/:cid/:slug?', [...middlewares, middleware.assert.category], controllers.activitypub.actors.category); app.get('/message/:mid', [...middlewares, middleware.assert.message], controllers.activitypub.actors.message); }; From c6e6ab438b08f2787fceabed5aec3782fa59f86d Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 29 Jan 2025 14:48:36 -0500 Subject: [PATCH 030/125] fix: #13076, allow pulling in of topics by their topic URL fix: reapply fixes that were part of since-reverted 4fd7a9dc59b65e8654d704c493f2254793e8d6a9 --- src/activitypub/contexts.js | 17 +++++++++++++---- src/routes/activitypub.js | 2 +- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/activitypub/contexts.js b/src/activitypub/contexts.js index 12dcae1059..08546bb9e6 100644 --- a/src/activitypub/contexts.js +++ b/src/activitypub/contexts.js @@ -27,11 +27,16 @@ Contexts.get = async (uid, id) => { } try { - ({ context } = await activitypub.get('uid', uid, id, { headers })); - if (!context) { + ({ id, type, context } = await activitypub.get('uid', uid, id, { headers })); + if (acceptableTypes.includes(type)) { // is context + activitypub.helpers.log(`[activitypub/context] ${id} is the context.`); + return { context: id }; + } else if (!context) { activitypub.helpers.log(`[activitypub/context] ${id} contains no context.`); return false; } + + // context provided; try to resolve it. ({ type } = await activitypub.get('uid', uid, context)); } catch (e) { if (e.code === 'ap_get_304') { @@ -98,9 +103,13 @@ Contexts.getItems = async (uid, id, options) => { const inputId = activitypub.helpers.isUri(options.input) ? options.input : options.input.id; const inCollection = Array.from(chain).map(p => p.pid).includes(inputId); if (!inCollection) { - chain.add(activitypub.helpers.isUri(options.input) ? + const item = activitypub.helpers.isUri(options.input) ? await parseString(uid, options.input) : - await parseItem(uid, options.input)); + await parseItem(uid, options.input); + + if (item) { + chain.add(item); + } } return chain; diff --git a/src/routes/activitypub.js b/src/routes/activitypub.js index 8993cb8875..b6a516b481 100644 --- a/src/routes/activitypub.js +++ b/src/routes/activitypub.js @@ -42,11 +42,11 @@ module.exports = function (app, middleware, controllers) { app.get('/topic/:tid/:slug?', [...middlewares, middleware.assert.topic], controllers.activitypub.actors.topic); - app.get('/category/:cid/:slug?', [...middlewares, middleware.assert.category], controllers.activitypub.actors.category); app.get('/category/:cid/inbox', [...middlewares, middleware.assert.category], controllers.activitypub.getInbox); app.post('/category/:cid/inbox', [...inboxMiddlewares, middleware.assert.category, ...inboxMiddlewares], controllers.activitypub.postInbox); app.get('/category/:cid/outbox', [...middlewares, middleware.assert.category], controllers.activitypub.getCategoryOutbox); app.post('/category/:cid/outbox', [...middlewares, middleware.assert.category], controllers.activitypub.postOutbox); + app.get('/category/:cid/:slug?', [...middlewares, middleware.assert.category], controllers.activitypub.actors.category); app.get('/message/:mid', [...middlewares, middleware.assert.message], controllers.activitypub.actors.message); }; From 84b28fae5fc06481c8a36db5666a2bd2ee7af608 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 Jan 2025 19:36:29 -0500 Subject: [PATCH 031/125] chore(deps): update coverallsapp/github-action action to v2.3.6 (#13089) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/test.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 8a3f0df422..724a49d584 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -192,7 +192,7 @@ jobs: run: npm run coverage - name: Test coverage - uses: coverallsapp/github-action@cfd0633edbd2411b532b808ba7a8b5e04f76d2c8 # v2.3.4 + uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6 if: matrix.coverage with: github-token: ${{ secrets.GITHUB_TOKEN }} @@ -206,7 +206,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Coveralls Finished - uses: coverallsapp/github-action@cfd0633edbd2411b532b808ba7a8b5e04f76d2c8 # v2.3.4 + uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6 with: github-token: ${{ secrets.GITHUB_TOKEN }} parallel-finished: true From 54bc54e176c3f0e551f356925de11a4477f886d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 29 Jan 2025 19:44:35 -0500 Subject: [PATCH 032/125] lint: remove tab --- src/activitypub/helpers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/activitypub/helpers.js b/src/activitypub/helpers.js index da0416fde0..0c649a3945 100644 --- a/src/activitypub/helpers.js +++ b/src/activitypub/helpers.js @@ -35,7 +35,7 @@ Helpers._test = (method, args) => { }, 2500); }; // process.nextTick(() => { -// Helpers._test(activitypub.notes.assert, [1, `https://`]); +// Helpers._test(activitypub.notes.assert, [1, `https://`]); // }); let _lastLog; From d644c0f41c42417950634ce52ade5711da20a19c Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 30 Jan 2025 16:41:52 -0500 Subject: [PATCH 033/125] refactor: acceptable types in context.js to index.js, allow searching for remote topis by topic url --- src/activitypub/contexts.js | 8 +++----- src/activitypub/index.js | 1 + src/search.js | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/activitypub/contexts.js b/src/activitypub/contexts.js index 08546bb9e6..7ca954e097 100644 --- a/src/activitypub/contexts.js +++ b/src/activitypub/contexts.js @@ -7,8 +7,6 @@ const topics = require('../topics'); const activitypub = module.parent.exports; const Contexts = module.exports; -const acceptableTypes = ['Collection', 'CollectionPage', 'OrderedCollection', 'OrderedCollectionPage']; - Contexts.get = async (uid, id) => { let context; let type; @@ -28,7 +26,7 @@ Contexts.get = async (uid, id) => { try { ({ id, type, context } = await activitypub.get('uid', uid, id, { headers })); - if (acceptableTypes.includes(type)) { // is context + if (activitypub._constants.acceptable.contextTypes.has(type)) { // is context activitypub.helpers.log(`[activitypub/context] ${id} is the context.`); return { context: id }; } else if (!context) { @@ -48,7 +46,7 @@ Contexts.get = async (uid, id) => { return false; } - if (acceptableTypes.includes(type)) { + if (activitypub._constants.acceptable.contextTypes.has(type)) { return { context }; } @@ -62,7 +60,7 @@ Contexts.getItems = async (uid, id, options) => { activitypub.helpers.log(`[activitypub/context] Retrieving context ${id}`); let { type, items, orderedItems, first, next } = await activitypub.get('uid', uid, id); - if (!acceptableTypes.includes(type)) { + if (!activitypub._constants.acceptable.contextTypes.has(type)) { return false; } diff --git a/src/activitypub/index.js b/src/activitypub/index.js index 4a6d95b48b..1884eb76ef 100644 --- a/src/activitypub/index.js +++ b/src/activitypub/index.js @@ -44,6 +44,7 @@ ActivityPub._constants = Object.freeze({ acceptedProtocols: ['https', ...(process.env.CI === 'true' ? ['http'] : [])], acceptable: { customFields: new Set(['PropertyValue', 'Link', 'Note']), + contextTypes: new Set(['Collection', 'CollectionPage', 'OrderedCollection', 'OrderedCollectionPage']), }, }); ActivityPub._cache = requestCache; diff --git a/src/search.js b/src/search.js index 1609bea31f..8e9d947dae 100644 --- a/src/search.js +++ b/src/search.js @@ -173,7 +173,7 @@ async function fetchRemoteObject(data) { } else if (activitypub._constants.acceptableActorTypes.has(type)) { data.searchIn = 'users'; return await user.search(data); - } else if (type === 'Conversation') { + } else if (activitypub._constants.acceptable.contextTypes.has(type)) { ({ tid } = await activitypub.notes.assert(uid, id)); id = await topics.getTopicField(tid, 'mainPid'); } From a348e808271f3a61d756cad23ede626552e15329 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jan 2025 19:51:04 -0500 Subject: [PATCH 034/125] fix(deps): update dependency semver to v7.7.0 (#13099) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 145beb8b22..318378b639 100644 --- a/install/package.json +++ b/install/package.json @@ -131,7 +131,7 @@ "sanitize-html": "2.14.0", "sass": "1.83.4", "satori": "0.12.1", - "semver": "7.6.3", + "semver": "7.7.0", "serve-favicon": "2.5.0", "sharp": "0.32.6", "sitemap": "8.0.0", From bedfafe8e0a2830248fdc40c6c8b96d9dc1c1fe9 Mon Sep 17 00:00:00 2001 From: Misty Release Bot Date: Fri, 31 Jan 2025 09:19:24 +0000 Subject: [PATCH 035/125] Latest translations and fallbacks --- public/language/vi/error.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/language/vi/error.json b/public/language/vi/error.json index 3638e8b12b..f13d89c150 100644 --- a/public/language/vi/error.json +++ b/public/language/vi/error.json @@ -249,7 +249,7 @@ "api.501": "Định tuyến bạn đang cố gắng gọi chưa được triển khai, vui lòng thử lại vào ngày mai", "api.503": "Định tuyến bạn đang cố gọi hiện không khả dụng do cấu hình máy chủ", "api.reauth-required": "Tài nguyên bạn đang cố truy cập yêu cầu xác thực (lại).", - "activitypub.not-enabled": "Federation is not enabled on this server", + "activitypub.not-enabled": "Liên đoàn không được bật trên máy chủ này", "activitypub.invalid-id": "Không thể giải quyết id đầu vào, có thể vì nó không đúng định dạng.", "activitypub.get-failed": "Không thể truy xuất tài nguyên được chỉ định.", "activitypub.pubKey-not-found": "Không thể giải quyết khóa công khai, do đó việc xác minh payload không thể diễn ra.", From d41109a08dbf027c8c9b2ada204b08af90e46126 Mon Sep 17 00:00:00 2001 From: Misty Release Bot Date: Fri, 31 Jan 2025 21:57:01 +0000 Subject: [PATCH 036/125] chore(i18n): fallback strings for new resources: nodebb.admin-settings-general --- public/language/ar/admin/settings/general.json | 3 ++- public/language/bg/admin/settings/general.json | 3 ++- public/language/bn/admin/settings/general.json | 3 ++- public/language/cs/admin/settings/general.json | 3 ++- public/language/da/admin/settings/general.json | 3 ++- public/language/de/admin/settings/general.json | 3 ++- public/language/el/admin/settings/general.json | 3 ++- public/language/en-US/admin/settings/general.json | 3 ++- public/language/en-x-pirate/admin/settings/general.json | 3 ++- public/language/es/admin/settings/general.json | 3 ++- public/language/et/admin/settings/general.json | 3 ++- public/language/fa-IR/admin/settings/general.json | 3 ++- public/language/fi/admin/settings/general.json | 3 ++- public/language/fr/admin/settings/general.json | 3 ++- public/language/gl/admin/settings/general.json | 3 ++- public/language/he/admin/settings/general.json | 3 ++- public/language/hr/admin/settings/general.json | 3 ++- public/language/hu/admin/settings/general.json | 3 ++- public/language/hy/admin/settings/general.json | 3 ++- public/language/id/admin/settings/general.json | 3 ++- public/language/it/admin/settings/general.json | 3 ++- public/language/ja/admin/settings/general.json | 3 ++- public/language/ko/admin/settings/general.json | 3 ++- public/language/lt/admin/settings/general.json | 3 ++- public/language/lv/admin/settings/general.json | 3 ++- public/language/ms/admin/settings/general.json | 3 ++- public/language/nb/admin/settings/general.json | 3 ++- public/language/nl/admin/settings/general.json | 3 ++- public/language/nn-NO/admin/settings/general.json | 3 ++- public/language/pl/admin/settings/general.json | 3 ++- public/language/pt-BR/admin/settings/general.json | 3 ++- public/language/pt-PT/admin/settings/general.json | 3 ++- public/language/ro/admin/settings/general.json | 3 ++- public/language/ru/admin/settings/general.json | 3 ++- public/language/rw/admin/settings/general.json | 3 ++- public/language/sc/admin/settings/general.json | 3 ++- public/language/sk/admin/settings/general.json | 3 ++- public/language/sl/admin/settings/general.json | 3 ++- public/language/sq-AL/admin/settings/general.json | 3 ++- public/language/sr/admin/settings/general.json | 3 ++- public/language/sv/admin/settings/general.json | 3 ++- public/language/th/admin/settings/general.json | 3 ++- public/language/tr/admin/settings/general.json | 3 ++- public/language/uk/admin/settings/general.json | 3 ++- public/language/vi/admin/settings/general.json | 3 ++- public/language/zh-CN/admin/settings/general.json | 3 ++- public/language/zh-TW/admin/settings/general.json | 3 ++- 47 files changed, 94 insertions(+), 47 deletions(-) diff --git a/public/language/ar/admin/settings/general.json b/public/language/ar/admin/settings/general.json index 5009685c7e..43e7f5a38c 100644 --- a/public/language/ar/admin/settings/general.json +++ b/public/language/ar/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Title Layout", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "A short description about your community", - "description": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "الكلمات الدليله للموقع", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/bg/admin/settings/general.json b/public/language/bg/admin/settings/general.json index 65e1e54448..b10d540b74 100644 --- a/public/language/bg/admin/settings/general.json +++ b/public/language/bg/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Разположение на заглавието", "title-layout-help": "Определете как ще бъде структурирано заглавието на браузъра, например: {pageTitle} | {browserTitle}", "description.placeholder": "Кратко описание на общността Ви", - "description": "Изберете коя страница да бъде показана, когато потребителите отидат на главния адрес на форума.", + "description": "Site Description", "keywords": "Ключови думи на уеб сайта", "keywords-placeholder": "Ключови думи, описващи общността Ви. Трябва да бъдат разделени със запетаи.", "logo-and-icons": "Лого и иконки на уеб сайта", @@ -51,6 +51,7 @@ "topic-tools": "Инструменти за темите", "home-page": "Начална страница", "home-page-route": "Път на началната страница", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Персонализиран път", "allow-user-home-pages": "Разрешаване на потребителските начални страници", "home-page-title": "Заглавие на началната страница (по подразбиране: „Начало“)", diff --git a/public/language/bn/admin/settings/general.json b/public/language/bn/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/bn/admin/settings/general.json +++ b/public/language/bn/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Title Layout", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "A short description about your community", - "description": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/cs/admin/settings/general.json b/public/language/cs/admin/settings/general.json index fae5a99573..78c991a4f9 100644 --- a/public/language/cs/admin/settings/general.json +++ b/public/language/cs/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Vzhled názvu", "title-layout-help": "Určete jak název prohlížeče má být sestaven, tj. {pageTitle} | {browserTitle}", "description.placeholder": "Zkrácený popis vaší komunity", - "description": "Vyberte, kterou stránku chcete zobrazit, jakmile uživatel přejde na výchozí URL vašeho fóra.", + "description": "Site Description", "keywords": "Klíčová slova pro stránky", "keywords-placeholder": "Klíčová slova popisující vaši komunitu, odděleno čárkou", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Domovská stránka", "home-page-route": "Cesta k domovské stránce", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Upravit cestu", "allow-user-home-pages": "Povolit uživatelům domovské stránky", "home-page-title": "Titulka domovské stránky (výchozí „Domů”)", diff --git a/public/language/da/admin/settings/general.json b/public/language/da/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/da/admin/settings/general.json +++ b/public/language/da/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Title Layout", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "A short description about your community", - "description": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/de/admin/settings/general.json b/public/language/de/admin/settings/general.json index 795070f128..4ea6834bda 100644 --- a/public/language/de/admin/settings/general.json +++ b/public/language/de/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Titel Layout", "title-layout-help": "Definiert wie der Browser Titel gebildet wird, z.B. {pageTitle} | {browserTitle}", "description.placeholder": "Eine kurze Beschreibung der Community", - "description": "Wähle, welche Seite angezeigt wird, wenn Benutzer zur Stamm-URL deines Forums navigieren.", + "description": "Site Description", "keywords": "Forum Schlüsselworte", "keywords-placeholder": "Schlüsselworte, die ihre Community beschreiben, mit Komma getrennt", "logo-and-icons": "Website-Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Themen-Tools", "home-page": "Startseite", "home-page-route": "Startseiten Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Benutzerdefinierte Route", "allow-user-home-pages": "Benutzer-Startseiten zulassen", "home-page-title": "Titel der Startseite (Standardmäßig \"Home\")", diff --git a/public/language/el/admin/settings/general.json b/public/language/el/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/el/admin/settings/general.json +++ b/public/language/el/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Title Layout", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "A short description about your community", - "description": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/en-US/admin/settings/general.json b/public/language/en-US/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/en-US/admin/settings/general.json +++ b/public/language/en-US/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Title Layout", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "A short description about your community", - "description": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/en-x-pirate/admin/settings/general.json b/public/language/en-x-pirate/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/en-x-pirate/admin/settings/general.json +++ b/public/language/en-x-pirate/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Title Layout", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "A short description about your community", - "description": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/es/admin/settings/general.json b/public/language/es/admin/settings/general.json index 8548ae4d0c..09a6c8295f 100644 --- a/public/language/es/admin/settings/general.json +++ b/public/language/es/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Plantilla del Sitio", "title-layout-help": "Define cómo el se estructurará el título del explorador. Por ejemplo: {TítulodelaPágina} | {TítulodelExplorador}\n", "description.placeholder": "Una descripción corta de tu comunidad", - "description": "Escoge que pagina se muestra cuando los usuarios navegan en la raíz del foro.", + "description": "Site Description", "keywords": "Palabras Clave (keywords) del Sitio", "keywords-placeholder": "Palabras Clave (keywords) que describen tu comunidad, separadas por comas", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Página Principal", "home-page-route": "Ruta de la Pagina Principal", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Ruta Personalizada", "allow-user-home-pages": "Permitir Pagina de Perfil del Usuario", "home-page-title": "Título de la página de inicio (por defecto, \"Home\" o \"Inicio\")", diff --git a/public/language/et/admin/settings/general.json b/public/language/et/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/et/admin/settings/general.json +++ b/public/language/et/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Title Layout", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "A short description about your community", - "description": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/fa-IR/admin/settings/general.json b/public/language/fa-IR/admin/settings/general.json index 6465a4a2c4..e8b37f08e5 100644 --- a/public/language/fa-IR/admin/settings/general.json +++ b/public/language/fa-IR/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Title Layout", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "A short description about your community", - "description": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/fi/admin/settings/general.json b/public/language/fi/admin/settings/general.json index bb130934b1..58d803f7ee 100644 --- a/public/language/fi/admin/settings/general.json +++ b/public/language/fi/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Title Layout", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "A short description about your community", - "description": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Aihetyökalut", "home-page": "Aloitussivu", "home-page-route": "Aloitussivun polku", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Mukautettu polku", "allow-user-home-pages": "Salli käyttäjäkohtaiset aloitussivut", "home-page-title": "Aloitussivun otsikko (oletus on \"Aloitus\")", diff --git a/public/language/fr/admin/settings/general.json b/public/language/fr/admin/settings/general.json index 62af1f018b..d4b6872288 100644 --- a/public/language/fr/admin/settings/general.json +++ b/public/language/fr/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Disposition du titre", "title-layout-help": "Définir la manière dont le titre est structuré dans le navigateur ex : {pageTitle} | {browserTitle}", "description.placeholder": "Une courte description de votre communauté", - "description": "Choisir la page affichée lorsque les utilisateurs naviguent à la racine de votre forum.", + "description": "Site Description", "keywords": "Mots-clés du site", "keywords-placeholder": "Mots-clés décrivant votre communauté, séparés par des virgules", "logo-and-icons": "Logo & Icônes du site", @@ -51,6 +51,7 @@ "topic-tools": "Outils pour les sujets", "home-page": "Page d'accueil", "home-page-route": "Route de la page d'accueil", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Route personnalisée", "allow-user-home-pages": "Permettre aux utilisateurs de choisir une page d'accueil personnalisée", "home-page-title": "Titre de la page d'accueil (par défaut \"Accueil\")", diff --git a/public/language/gl/admin/settings/general.json b/public/language/gl/admin/settings/general.json index e4f6ecf827..23438c4828 100644 --- a/public/language/gl/admin/settings/general.json +++ b/public/language/gl/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Title Layout", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "A short description about your community", - "description": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/he/admin/settings/general.json b/public/language/he/admin/settings/general.json index 90ff9787d7..d87a7a6af9 100644 --- a/public/language/he/admin/settings/general.json +++ b/public/language/he/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "פריסת כותרת", "title-layout-help": "הגדרה כיצד כותרת הדפדפן תהיה מובנית לדוגמא. {pageTitle} | {browserTitle}", "description.placeholder": "תיאור קצר על הקהילה שלך", - "description": "בחר איזה דף יוצג כאשר מנווטים לכתובת ה-URL הראשית של הפורום.", + "description": "Site Description", "keywords": "מילות מפתח של האתר", "keywords-placeholder": "מילות מפתח המתארות את הקהילה שלך, מופרדות באמצעות פסיקים", "logo-and-icons": "לוגו אתר ואייקונים", @@ -51,6 +51,7 @@ "topic-tools": "כלי נושא", "home-page": "דף הבית", "home-page-route": "נתיב דף הבית", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "נתיב מותאם אישית", "allow-user-home-pages": "אפשר בחירת דף הבית בהגדרות המשתמשים להתאמה אישית", "home-page-title": "כותרת דף הבית (ברירת מחדל \"דף הבית\")", diff --git a/public/language/hr/admin/settings/general.json b/public/language/hr/admin/settings/general.json index f01ec43454..d21861149a 100644 --- a/public/language/hr/admin/settings/general.json +++ b/public/language/hr/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Raspored naslova", "title-layout-help": "Definiraj kako će naslov pretraživača biti strukturiran npr.: {pageTitle} | {browserTitle}", "description.placeholder": "Kratak opis zajednice", - "description": "Izaberi koja stranica će se prikazivati kada korisnici navigiraju u root URL Vašeg foruma", + "description": "Site Description", "keywords": "Ključne riječi", "keywords-placeholder": "Ključne riječi koje opisuju Vašu zajednicu, odvojeni zarezom", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Naslovnica", "home-page-route": "Putanja naslovnice", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Uobičajna putanja", "allow-user-home-pages": "Dozvoli korisničke naslovnice", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/hu/admin/settings/general.json b/public/language/hu/admin/settings/general.json index 7a9226f00a..29839979b5 100644 --- a/public/language/hu/admin/settings/general.json +++ b/public/language/hu/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Cím formátuma", "title-layout-help": "Add meg, hogy a böngésző cím hogyan épüljön fel. Pl.: {pageTitle} | {browserTitle}", "description.placeholder": "A közösséged rövid leírása", - "description": "Válaszd ki milyen oldal jelenjen meg, amikor a felhasználók fórumod gyökér URL címéhez navigálnak.", + "description": "Site Description", "keywords": "Weboldal kulcsszavak", "keywords-placeholder": "A közösségedet leíró kulcsszavak, vesszővel elválasztva", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Témakör eszközök", "home-page": "Főoldal", "home-page-route": "Főoldal útvonala", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Egyéni útvonal", "allow-user-home-pages": "Felhasználói főoldalak engedélyezése", "home-page-title": "A főoldal címe (alapértelmezés \"Kezdőlap\")", diff --git a/public/language/hy/admin/settings/general.json b/public/language/hy/admin/settings/general.json index 51ddc35d49..ba5240156d 100644 --- a/public/language/hy/admin/settings/general.json +++ b/public/language/hy/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Վերնագրի դասավորություն", "title-layout-help": "Սահմանեք, թե ինչպես է կառուցված բրաուզերի վերնագիրը, այսինքն. {էջի վերնագիր} | {browserTitle}", "description.placeholder": "Ձեր համայնքի մասին կարճ նկարագրություն", - "description": "Ընտրեք, թե որ էջը կցուցադրվի, երբ օգտվողները անցնեն դեպի ձեր ֆորումի արմատային URL-ը:", + "description": "Site Description", "keywords": "Կայքի հիմնաբառեր", "keywords-placeholder": "Ձեր համայնքը նկարագրող հիմնաբառեր՝ բաժանված ստորակետերով", "logo-and-icons": "Կայքի Լոգո և պատկերանշաններ", @@ -51,6 +51,7 @@ "topic-tools": "Թեմայի գործիքներ", "home-page": "Գլխավոր էջ", "home-page-route": "Գլխավոր Էջի ուղեգիծ", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Հատուկ ուղեգիծ", "allow-user-home-pages": "Թույլատրել օգտատիրոջ գլխավոր էջերը", "home-page-title": "Գլխավոր էջի անվանումը (կանխադրված «Գլխավոր»)", diff --git a/public/language/id/admin/settings/general.json b/public/language/id/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/id/admin/settings/general.json +++ b/public/language/id/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Title Layout", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "A short description about your community", - "description": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/it/admin/settings/general.json b/public/language/it/admin/settings/general.json index 32cb5f7f82..f0a5c1ed0d 100644 --- a/public/language/it/admin/settings/general.json +++ b/public/language/it/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Layout del Titolo", "title-layout-help": "Definire come sarà strutturato il titolo del browser, ad es. {pageTitle} | {browserTitle}", "description.placeholder": "Una breve descrizione della tua comunità", - "description": "Scegliere quale pagina visualizzare quando gli utenti navigano all'URL principale del forum.", + "description": "Site Description", "keywords": "Parole chiave del sito", "keywords-placeholder": "Parole chiave che descrivono la vostra comunità, separate da virgole", "logo-and-icons": "Logo e icone del sito", @@ -51,6 +51,7 @@ "topic-tools": "Strumenti discussione", "home-page": "Pagina Iniziale", "home-page-route": "Percorso Pagina Iniziale", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Percorso personalizzato", "allow-user-home-pages": "Consenti Pagina Iniziale Utente", "home-page-title": "Titolo della pagina iniziale (impostazione predefinita \"Home\")", diff --git a/public/language/ja/admin/settings/general.json b/public/language/ja/admin/settings/general.json index a7d62d281c..2d79a2bc35 100644 --- a/public/language/ja/admin/settings/general.json +++ b/public/language/ja/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "タイトル配置", "title-layout-help": "ブラウザのタイトルがどのように構成されるかを定義します。{pageTitle} | {browserTitle}", "description.placeholder": "あなたのコミュニティについての簡単な説明", - "description": "ユーザーがあなたのフォーラムのルートURLに移動するときに表示されるページを選択します。", + "description": "Site Description", "keywords": "サイトのキーワード", "keywords-placeholder": "あなたのコミュニティを記述するキーワード、カンマ区切り", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "ホームページ", "home-page-route": "ホームページのルート", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "カスタムルート", "allow-user-home-pages": "ユーザーホームページを有効にする", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/ko/admin/settings/general.json b/public/language/ko/admin/settings/general.json index c489bc7ba1..0756494d50 100644 --- a/public/language/ko/admin/settings/general.json +++ b/public/language/ko/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "제목 레이아웃", "title-layout-help": "브라우저 제목을 구성할 방식을 정의합니다. 예를 들어, {pageTitle} | {browserTitle} 형식으로 구성됩니다.", "description.placeholder": "커뮤니티에 대한 간단한 설명", - "description": "사용자가 포럼의 루트 URL로 이동할 때 표시되는 페이지를 선택합니다.", + "description": "Site Description", "keywords": "사이트 키워드", "keywords-placeholder": "커뮤니티를 설명하는 키워드, 쉼표로 구분", "logo-and-icons": "사이트 로고 & 아이콘", @@ -51,6 +51,7 @@ "topic-tools": "토픽 도구", "home-page": "홈 페이지", "home-page-route": "홈 페이지 경로", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "사용자 정의 경로", "allow-user-home-pages": "사용자 홈 페이지 허용", "home-page-title": "홈 페이지 제목 (default \"Home\")", diff --git a/public/language/lt/admin/settings/general.json b/public/language/lt/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/lt/admin/settings/general.json +++ b/public/language/lt/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Title Layout", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "A short description about your community", - "description": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/lv/admin/settings/general.json b/public/language/lv/admin/settings/general.json index eaef60c569..fabfbb824e 100644 --- a/public/language/lv/admin/settings/general.json +++ b/public/language/lv/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Virsraksta izkārtojums", "title-layout-help": "Noteikt, kā virsraksts pārlūkā tiks izkārtots, t.i., {pageTitle} | {browserTitle}", "description.placeholder": "Īss foruma apraksts", - "description": "Izvēlies, kādu lapu rādīt, kad lietotājs izvēlas foruma saknes URL.", + "description": "Site Description", "keywords": "Foruma atslēgvārdi", "keywords-placeholder": "Atslēgvārdi, kas apraksta forumu, atdalīti ar komatu", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Sākums", "home-page-route": "Sākumlapas ceļš", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Pielāgotais ceļš", "allow-user-home-pages": "Atļaut lietotājiem savas mājaslapas", "home-page-title": "Sākumlapas titulis (pēc noklusējuma \"Sākums\")", diff --git a/public/language/ms/admin/settings/general.json b/public/language/ms/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/ms/admin/settings/general.json +++ b/public/language/ms/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Title Layout", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "A short description about your community", - "description": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/nb/admin/settings/general.json b/public/language/nb/admin/settings/general.json index c8960ad53a..17d717b787 100644 --- a/public/language/nb/admin/settings/general.json +++ b/public/language/nb/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Tittellayout", "title-layout-help": "Definer hvordan nettlesertittelen skal struktureres, f.eks. {pageTitle} | {browserTitle}", "description.placeholder": "En kort beskrivelse av fellesskapet ditt", - "description": "Velg hvilken side som vises når brukere navigerer til rot-URL-en for forumet ditt.", + "description": "Site Description", "keywords": "Nøkkelord for nettstedet", "keywords-placeholder": "Nøkkelord som beskriver fellesskapet ditt, kommaseparert", "logo-and-icons": "Logo og ikoner for nettstedet", @@ -51,6 +51,7 @@ "topic-tools": "Verktøy for emner", "home-page": "Hjemmeside", "home-page-route": "Rute for hjemmeside", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Egendefinert rute", "allow-user-home-pages": "Tillat brukerspesifikke hjemmesider", "home-page-title": "Tittel på hjemmesiden (standard: \"Hjem\")", diff --git a/public/language/nl/admin/settings/general.json b/public/language/nl/admin/settings/general.json index 051d022488..a5828eaa84 100644 --- a/public/language/nl/admin/settings/general.json +++ b/public/language/nl/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Titel Lay-out", "title-layout-help": "Defineer hoe de browser titel gestructureerd word. bijv: {paginaTitel} | {browserTitel}", "description.placeholder": "Een korte beschrijving van uw gemeenschap", - "description": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Trefwoorden", "keywords-placeholder": "Trefwoorden die uw community beschrijven, kommagescheiden", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/nn-NO/admin/settings/general.json b/public/language/nn-NO/admin/settings/general.json index 85a1a62132..f14f5c6598 100644 --- a/public/language/nn-NO/admin/settings/general.json +++ b/public/language/nn-NO/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Titteloppsett", "title-layout-help": "Vel korleis tittelen skal visast på forumet.", "description.placeholder": "Skriv inn ei kort skildring av nettstaden", - "description": "Konfigurer forumets heimeside og tilpass ruta for brukarane.", + "description": "Site Description", "keywords": "Nøkkelord", "keywords-placeholder": "Skriv inn nøkkelord, skilde med komma", "logo-and-icons": "Logo og ikon", @@ -51,6 +51,7 @@ "topic-tools": "Emneverktøy", "home-page": "Startside", "home-page-route": "Startsiderute", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Tilpassa rute", "allow-user-home-pages": "Tillat brukarar å setje eigne heimesider", "home-page-title": "Startsidetittel", diff --git a/public/language/pl/admin/settings/general.json b/public/language/pl/admin/settings/general.json index 45063d4935..c04c2e5720 100644 --- a/public/language/pl/admin/settings/general.json +++ b/public/language/pl/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Struktura tytułu karty przeglądarki", "title-layout-help": "Określ strukturę tytułu karty przeglądarki, np. {pageTitle} | {browserTitle}", "description.placeholder": "Krótki opis twojej społeczności", - "description": "Wybierz stronę startową dla forum", + "description": "Site Description", "keywords": "Słowa kluczowe strony", "keywords-placeholder": "Słowa kluczowe opisujące społeczność, oddzielone przecinkami", "logo-and-icons": "Logo i ikony strony", @@ -51,6 +51,7 @@ "topic-tools": "Narzędzia tematu", "home-page": "Strona główna", "home-page-route": "Ścieżka strony głównej", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Niestandardowa ścieżka", "allow-user-home-pages": "Zezwalaj na strony startowe użytkowników", "home-page-title": "Tytuł strony głównej (domyślnie: \"Strona główna\")", diff --git a/public/language/pt-BR/admin/settings/general.json b/public/language/pt-BR/admin/settings/general.json index 14e76ff8d9..d59c71f9f5 100644 --- a/public/language/pt-BR/admin/settings/general.json +++ b/public/language/pt-BR/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Layout do Título", "title-layout-help": "Defina como o título do navegador será estruturado, por exemplo: {pageTitle} | {browserTitle}", "description.placeholder": "Uma descrição curta sobre a sua comunidade", - "description": "Escolha qual página será mostrada quando usuários navegarem para a URL raíz do seu fórum.", + "description": "Site Description", "keywords": "Palavras-chave do Site", "keywords-placeholder": "Palavras-chave descrevendo sua comunidade, separadas por vírgula", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Página Inicial", "home-page-route": "Rota da Página Inicial", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Rota Personalizada", "allow-user-home-pages": "Permitir Páginas Iniciais do Usuário", "home-page-title": "Título da página inicial (padrão \"Home\")", diff --git a/public/language/pt-PT/admin/settings/general.json b/public/language/pt-PT/admin/settings/general.json index 605582eff1..8e7e464640 100644 --- a/public/language/pt-PT/admin/settings/general.json +++ b/public/language/pt-PT/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Title Layout", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "A short description about your community", - "description": "Escolhe qual página é apresentada quando os utilizadores navegam para o URL raiz do teu fórum.", + "description": "Site Description", "keywords": "Palavras-chave do Site", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Página Principal", "home-page-route": "Caminho da Página Principal", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Caminho personalizado", "allow-user-home-pages": "Permitir página principal personalizada para os utilizadores", "home-page-title": "Título da página inicial (predefinido \"Página inicial\")", diff --git a/public/language/ro/admin/settings/general.json b/public/language/ro/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/ro/admin/settings/general.json +++ b/public/language/ro/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Title Layout", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "A short description about your community", - "description": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/ru/admin/settings/general.json b/public/language/ru/admin/settings/general.json index ea5e5fa1bd..21aceec945 100644 --- a/public/language/ru/admin/settings/general.json +++ b/public/language/ru/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Макет заголовка", "title-layout-help": "Укажите, как сформировать заголовок для браузера, напр.\n{название сайта} | {название для браузера}", "description.placeholder": "Краткое описание вашего сообщества", - "description": "Выберите, какую страницу показывать по корневому URL форума.", + "description": "Site Description", "keywords": "Ключевые слова для сайта", "keywords-placeholder": "Укажите через запятую ключевые слова, описывающие ваше сообщество", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Управление темой", "home-page": "Главная страница", "home-page-route": "Маршрут для главной страницы", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Другой маршрут", "allow-user-home-pages": "Разрешить пользователям выбирать персональные главные страницы", "home-page-title": "Заголовок домашней страницы («Главная» по умолчанию)", diff --git a/public/language/rw/admin/settings/general.json b/public/language/rw/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/rw/admin/settings/general.json +++ b/public/language/rw/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Title Layout", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "A short description about your community", - "description": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/sc/admin/settings/general.json b/public/language/sc/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/sc/admin/settings/general.json +++ b/public/language/sc/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Title Layout", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "A short description about your community", - "description": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/sk/admin/settings/general.json b/public/language/sk/admin/settings/general.json index 961feb9697..2dfddf133e 100644 --- a/public/language/sk/admin/settings/general.json +++ b/public/language/sk/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Vzhľad názvu", "title-layout-help": "Určite, ako má byť zostavený názov prehliadača, tj. {pageTitle} | {browserTitle}", "description.placeholder": "Skrátený popis Vašej komunity", - "description": "Vyberte, akú stránku sa zobrazí, keď sa používatelia dostanú do koreňovej adresy URL vášho fóra.", + "description": "Site Description", "keywords": "Kľúčové slová pre stránky", "keywords-placeholder": "Kľúčové slová popisujúce Vašu komunitu, oddelené čiarkou", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Domovská stránka", "home-page-route": "Cesta k domovskej stránke", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Upraviť cestu", "allow-user-home-pages": "Povoliť používateľom domovské stránky", "home-page-title": "Titulok domovskej stránky (Predvolený „Domov”)", diff --git a/public/language/sl/admin/settings/general.json b/public/language/sl/admin/settings/general.json index c3fa039095..ea11d557c7 100644 --- a/public/language/sl/admin/settings/general.json +++ b/public/language/sl/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Postavitev naslova", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "Kratek opis vaše skupnosti", - "description": "Izberite, katera stran se prikaže, ko se uporabniki pomaknejo do korenskega URL-ja vašega foruma.", + "description": "Site Description", "keywords": "Ključne besede spletnega mesta", "keywords-placeholder": "Ključne besede, ki opisujejo vašo skupnost, ločene z vejicami", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Domača stran", "home-page-route": "Pot do domače strani", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Pot po meri", "allow-user-home-pages": "Dovoli domače strani uporabnikov", "home-page-title": "Naslov domače strani (privzeto »Domača stran«)", diff --git a/public/language/sq-AL/admin/settings/general.json b/public/language/sq-AL/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/sq-AL/admin/settings/general.json +++ b/public/language/sq-AL/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Title Layout", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "A short description about your community", - "description": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/sr/admin/settings/general.json b/public/language/sr/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/sr/admin/settings/general.json +++ b/public/language/sr/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Title Layout", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "A short description about your community", - "description": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/sv/admin/settings/general.json b/public/language/sv/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/sv/admin/settings/general.json +++ b/public/language/sv/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Title Layout", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "A short description about your community", - "description": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/th/admin/settings/general.json b/public/language/th/admin/settings/general.json index 29d02412e8..a0f6cc7655 100644 --- a/public/language/th/admin/settings/general.json +++ b/public/language/th/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Title Layout", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "A short description about your community", - "description": "เลือกหน้าเว็บที่จะแสดงเมื่อผู้ใช้ไปที่ URL หลักของฟอรัม", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "หน้าแรก", "home-page-route": "เส้นทางหน้าแรก", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "เส้นทางที่กำหนดเอง", "allow-user-home-pages": "อนุญาตหน้าแรกของผู้ใช้", "home-page-title": "ชื่อของหน้าแรก (ค่าเริ่มต้นคือ \"Home\")", diff --git a/public/language/tr/admin/settings/general.json b/public/language/tr/admin/settings/general.json index 552fa724cf..e553bcdf41 100644 --- a/public/language/tr/admin/settings/general.json +++ b/public/language/tr/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Başlık Düzeni", "title-layout-help": "Tarayıcı başlığının nasıl yapılandırılacağını tanımlayın örn. {pageTitle} | {browserTitle}", "description.placeholder": "Topluluk hakkında kısa bir açıklama yazın", - "description": "Kullanıcıların, forumunuzun kök bağlantısına gittiğinde hangi sayfanın görüntüleneceğini seçin.", + "description": "Site Description", "keywords": "Site Anahtar Kelimeler", "keywords-placeholder": "Topluluğunuzu tanımlayan anahtar kelimeler, virgülle-ayrılmış", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Konu Araçları", "home-page": "Ana Sayfa", "home-page-route": "Ana Sayfa Yolu", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Özel Yol", "allow-user-home-pages": "Kullanıcılara ana sayfalarını özelleştirmeleri için izin ver", "home-page-title": "Ana sayfanın başlığı (varsayılan \"Ana Sayfa\")", diff --git a/public/language/uk/admin/settings/general.json b/public/language/uk/admin/settings/general.json index 321c2a26e2..96962dfe01 100644 --- a/public/language/uk/admin/settings/general.json +++ b/public/language/uk/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Структура заголовка", "title-layout-help": "Визначте як заголовок браузера буде сформовано, наприклад {pageTitle} | {browserTitle}", "description.placeholder": "Короткий опис вашої спільноти", - "description": "Вкажіть яку сторінку показувати коли користувач переходить на корньовий URL форуму.", + "description": "Site Description", "keywords": "Ключові слова сайту", "keywords-placeholder": "Ключові слова, що описують вашу спільноту, розділені комами", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Головна сторінка", "home-page-route": "Шлях головної сторінки", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Користувацький шлях", "allow-user-home-pages": "Дозволити користувачам власні сторінки", "home-page-title": "Назва домашньої сторінки (за замовчуванням \"Домашня сторінка\")", diff --git a/public/language/vi/admin/settings/general.json b/public/language/vi/admin/settings/general.json index d2e924a248..3c66e1e3de 100644 --- a/public/language/vi/admin/settings/general.json +++ b/public/language/vi/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Bố Cục Tiêu Đề", "title-layout-help": "Xác định cách tiêu đề trình duyệt sẽ được cấu trúc, tức là {pageTitle} | {browserTitle}", "description.placeholder": "Mô tả ngắn gọn về cộng đồng của bạn", - "description": "Chọn trang hiển thị khi người dùng chuyển hướng đến URL gốc diễn đàn của bạn.", + "description": "Site Description", "keywords": "Từ Khóa Trang", "keywords-placeholder": "Các từ khóa mô tả cộng đồng của bạn, được phân tách bằng dấu phẩy", "logo-and-icons": "Lô-gô & Biểu Tượng Trang", @@ -51,6 +51,7 @@ "topic-tools": "Công cụ chủ đề", "home-page": "Trang Chủ", "home-page-route": "Liên Kết Trang Chủ", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Tùy Chỉnh Liên Kết", "allow-user-home-pages": "Cho Phép Trang Chủ Người Dùng", "home-page-title": "Tiêu đề trang chủ (mặc định là \"Trang chủ\")", diff --git a/public/language/zh-CN/admin/settings/general.json b/public/language/zh-CN/admin/settings/general.json index ddab0b7b53..e2489e4382 100644 --- a/public/language/zh-CN/admin/settings/general.json +++ b/public/language/zh-CN/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "标题布局", "title-layout-help": "定义浏览器标题的布局,即{pageTitle} | {browserTitle}", "description.placeholder": "关于您的社区的简短说明", - "description": "请选择用户到达根 URL 时所显示的页面。", + "description": "Site Description", "keywords": "站点关键字", "keywords-placeholder": "描述您的社区的关键字(以逗号分隔)", "logo-and-icons": "网站徽标与图标", @@ -51,6 +51,7 @@ "topic-tools": "主题工具", "home-page": "主页", "home-page-route": "主页路由", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "自定义路由", "allow-user-home-pages": "允许用户主页", "home-page-title": "首页标题(默认“Home”)", diff --git a/public/language/zh-TW/admin/settings/general.json b/public/language/zh-TW/admin/settings/general.json index 8a9be80e02..992143a90b 100644 --- a/public/language/zh-TW/admin/settings/general.json +++ b/public/language/zh-TW/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "標題佈局", "title-layout-help": "定義瀏覽器標題的佈局,即{pageTitle} | {browserTitle}", "description.placeholder": "關於您的社區的簡短說明", - "description": "請選擇使用者到達根 URL 時所顯示的頁面。", + "description": "Site Description", "keywords": "網站關鍵字", "keywords-placeholder": "描述您的社區的關鍵字,以逗號分隔", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "首頁", "home-page-route": "首頁路徑", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "自訂路徑", "allow-user-home-pages": "允許使用者自訂首頁", "home-page-title": "首頁標題(預設為“Home”)", From 31ff6c2e8444c5f732386bbb3fb0dc3f5fef8a1c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 31 Jan 2025 17:05:04 -0500 Subject: [PATCH 037/125] fix(deps): update dependency mongodb to v6.13.0 (#13106) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 786f1fbbbd..6f3767447f 100644 --- a/install/package.json +++ b/install/package.json @@ -93,7 +93,7 @@ "lru-cache": "10.4.3", "mime": "3.0.0", "mkdirp": "3.0.1", - "mongodb": "6.12.0", + "mongodb": "6.13.0", "morgan": "1.10.0", "mousetrap": "1.6.5", "multiparty": "4.2.3", From 28ee872bed84b8df3bbbc8bd81e2e9e68f6fa86d Mon Sep 17 00:00:00 2001 From: Misty Release Bot Date: Sat, 1 Feb 2025 09:18:51 +0000 Subject: [PATCH 038/125] Latest translations and fallbacks --- public/language/nb/user.json | 2 +- public/language/pl/admin/settings/general.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/public/language/nb/user.json b/public/language/nb/user.json index 1c8a21b99a..9c22c99c1b 100644 --- a/public/language/nb/user.json +++ b/public/language/nb/user.json @@ -75,7 +75,7 @@ "edit-profile": "Rediger profil", "default-picture": "Standardikonet", "uploaded-picture": "Opplastet bilde", - "upload-new-picture": "Last opp nytt bidle", + "upload-new-picture": "Last opp nytt bilde", "upload-new-picture-from-url": "Last opp nytt bilde fra URL", "current-password": "Gjeldende passord", "new-password": "Nytt passord", diff --git a/public/language/pl/admin/settings/general.json b/public/language/pl/admin/settings/general.json index c04c2e5720..ed26bb21bf 100644 --- a/public/language/pl/admin/settings/general.json +++ b/public/language/pl/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Struktura tytułu karty przeglądarki", "title-layout-help": "Określ strukturę tytułu karty przeglądarki, np. {pageTitle} | {browserTitle}", "description.placeholder": "Krótki opis twojej społeczności", - "description": "Site Description", + "description": "Opis strony", "keywords": "Słowa kluczowe strony", "keywords-placeholder": "Słowa kluczowe opisujące społeczność, oddzielone przecinkami", "logo-and-icons": "Logo i ikony strony", @@ -51,7 +51,7 @@ "topic-tools": "Narzędzia tematu", "home-page": "Strona główna", "home-page-route": "Ścieżka strony głównej", - "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", + "home-page-description": "Wybierz stronę, która ma być dostępna pod startowym URL tego forum.", "custom-route": "Niestandardowa ścieżka", "allow-user-home-pages": "Zezwalaj na strony startowe użytkowników", "home-page-title": "Tytuł strony głównej (domyślnie: \"Strona główna\")", From 334be72179e01ac4b43c9dd1b685433b504864c5 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Sun, 2 Feb 2025 03:27:54 -0500 Subject: [PATCH 039/125] fix: bad logic that invisibly broke outgoing user follows completely --- src/api/activitypub.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/activitypub.js b/src/api/activitypub.js index 36bb35acb5..76abcc9c51 100644 --- a/src/api/activitypub.js +++ b/src/api/activitypub.js @@ -38,7 +38,7 @@ function enabledCheck(next) { activitypubApi.follow = enabledCheck(async (caller, { type, id, actor } = {}) => { // Privilege checks should be done upstream const assertion = await activitypub.actors.assert(actor); - if (!assertion || !assertion.length) { + if (!assertion || (Array.isArray(assertion) && assertion.length)) { throw new Error('[[error:activitypub.invalid-id]]'); } From 4c92248a4bac44707ddd180ce3912fea2432b407 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Sun, 2 Feb 2025 03:30:52 -0500 Subject: [PATCH 040/125] list remove all (#13113) * list remove all * one more test * sortedSetIncrByBulk * remove name * incrObjectFieldByBulk * test: disable api tests * try merge * another test * give upon bulk incr * update so answer * one more try * fix: name * chore: up dbsearch --- install/package.json | 2 +- src/database/mongo/hash.js | 2 +- src/database/postgres/hash.js | 38 ++++++++++++++++++++++++++------- src/database/postgres/list.js | 21 ++++++++++++++++-- src/database/postgres/sorted.js | 34 +++++++++++++++++++++++++++-- 5 files changed, 83 insertions(+), 14 deletions(-) diff --git a/install/package.json b/install/package.json index 5b06b3dc5d..ba00233418 100644 --- a/install/package.json +++ b/install/package.json @@ -100,7 +100,7 @@ "nconf": "0.12.1", "nodebb-plugin-2factor": "7.5.8", "nodebb-plugin-composer-default": "10.2.44", - "nodebb-plugin-dbsearch": "6.2.7", + "nodebb-plugin-dbsearch": "6.2.8", "nodebb-plugin-emoji": "6.0.2", "nodebb-plugin-emoji-android": "4.1.1", "nodebb-plugin-markdown": "13.1.0", diff --git a/src/database/mongo/hash.js b/src/database/mongo/hash.js index 5e42a4f26d..958d5384f3 100644 --- a/src/database/mongo/hash.js +++ b/src/database/mongo/hash.js @@ -188,7 +188,7 @@ module.exports = function (module) { }; module.deleteObjectField = async function (key, field) { - await module.deleteObjectFields(key, [field]); + await module.deleteObjectFields(key, Array.isArray(field) ? field : [field]); }; module.deleteObjectFields = async function (key, fields) { diff --git a/src/database/postgres/hash.js b/src/database/postgres/hash.js index ced3207822..5e3a842d22 100644 --- a/src/database/postgres/hash.js +++ b/src/database/postgres/hash.js @@ -295,7 +295,7 @@ SELECT (h."data" ? $2::TEXT AND h."data"->>$2::TEXT IS NOT NULL) b }; module.deleteObjectField = async function (key, field) { - await module.deleteObjectFields(key, [field]); + await module.deleteObjectFields(key, Array.isArray(field) ? field : [field]); }; module.deleteObjectFields = async function (key, fields) { @@ -377,12 +377,34 @@ RETURNING ("data"->>$2::TEXT)::NUMERIC v`, if (!Array.isArray(data) || !data.length) { return; } - // TODO: perf? - await Promise.all(data.map(async (item) => { - for (const [field, value] of Object.entries(item[1])) { - // eslint-disable-next-line no-await-in-loop - await module.incrObjectFieldBy(item[0], field, value); - } - })); + + await module.transaction(async (client) => { + await helpers.ensureLegacyObjectsType(client, data.map(item => item[0]), 'hash'); + + const keys = data.map(item => item[0]); + const dataStrings = data.map(item => JSON.stringify(item[1])); + + await client.query({ + name: 'incrObjectFieldByBulk', + text: ` +INSERT INTO "legacy_hash" ("_key", "data") +SELECT k, d +FROM UNNEST($1::TEXT[], $2::JSONB[]) vs(k, d) +ON CONFLICT ("_key") +DO UPDATE SET "data" = ( + SELECT jsonb_object_agg( + key, + CASE + WHEN jsonb_typeof(legacy_hash.data -> key) = 'number' + AND jsonb_typeof(EXCLUDED.data -> key) = 'number' + THEN to_jsonb((legacy_hash.data ->> key)::NUMERIC + (EXCLUDED.data ->> key)::NUMERIC) + ELSE COALESCE(EXCLUDED.data -> key, legacy_hash.data -> key) + END + ) + FROM jsonb_each(legacy_hash.data || EXCLUDED.data) AS merged(key, value) +);`, + values: [keys, dataStrings], + }); + }); }; }; diff --git a/src/database/postgres/list.js b/src/database/postgres/list.js index a950f4ce41..5e91b8c947 100644 --- a/src/database/postgres/list.js +++ b/src/database/postgres/list.js @@ -75,9 +75,26 @@ RETURNING A."array"[array_length(A."array", 1)] v`, if (!key) { return; } - // TODO: remove all values with one query + if (Array.isArray(value)) { - await Promise.all(value.map(v => module.listRemoveAll(key, v))); + await module.pool.query({ + name: 'listRemoveAllMultiple', + text: ` + UPDATE "legacy_list" l + SET "array" = ( + SELECT ARRAY( + SELECT elem + FROM unnest(l."array") WITH ORDINALITY AS u(elem, ord) + WHERE elem NOT IN (SELECT unnest($2::TEXT[])) + ORDER BY ord + ) + ) + FROM "legacy_object_live" o + WHERE o."_key" = l."_key" + AND o."type" = l."type" + AND o."_key" = $1::TEXT;`, + values: [key, value], + }); return; } await module.pool.query({ diff --git a/src/database/postgres/sorted.js b/src/database/postgres/sorted.js index 27168493a7..916425e0c1 100644 --- a/src/database/postgres/sorted.js +++ b/src/database/postgres/sorted.js @@ -547,8 +547,38 @@ RETURNING "score" s`, }; module.sortedSetIncrByBulk = async function (data) { - // TODO: perf single query? - return await Promise.all(data.map(item => module.sortedSetIncrBy(item[0], item[1], item[2]))); + if (!data.length) { + return []; + } + + return await module.transaction(async (client) => { + await helpers.ensureLegacyObjectsType(client, data.map(item => item[0]), 'zset'); + + const values = []; + const queryParams = []; + let paramIndex = 1; + + data.forEach(([key, increment, value]) => { + value = helpers.valueToString(value); + increment = parseFloat(increment); + values.push(key, value, increment); + queryParams.push(`($${paramIndex}::TEXT, $${paramIndex + 1}::TEXT, $${paramIndex + 2}::NUMERIC)`); + paramIndex += 3; + }); + + const query = ` +INSERT INTO "legacy_zset" ("_key", "value", "score") +VALUES ${queryParams.join(', ')} +ON CONFLICT ("_key", "value") +DO UPDATE SET "score" = "legacy_zset"."score" + EXCLUDED."score" +RETURNING "value", "score"`; + + const res = await client.query({ + text: query, + values, + }); + return res.rows.map(row => parseFloat(row.score)); + }); }; module.getSortedSetRangeByLex = async function (key, min, max, start, count) { From f4c41a64874af4cb18a2342fbff30ca1d998cc17 Mon Sep 17 00:00:00 2001 From: Misty Release Bot Date: Sun, 2 Feb 2025 09:18:54 +0000 Subject: [PATCH 041/125] Latest translations and fallbacks --- public/language/bg/admin/settings/general.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/language/bg/admin/settings/general.json b/public/language/bg/admin/settings/general.json index b10d540b74..9c84b5413d 100644 --- a/public/language/bg/admin/settings/general.json +++ b/public/language/bg/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Разположение на заглавието", "title-layout-help": "Определете как ще бъде структурирано заглавието на браузъра, например: {pageTitle} | {browserTitle}", "description.placeholder": "Кратко описание на общността Ви", - "description": "Site Description", + "description": "Описание на уеб сайта", "keywords": "Ключови думи на уеб сайта", "keywords-placeholder": "Ключови думи, описващи общността Ви. Трябва да бъдат разделени със запетаи.", "logo-and-icons": "Лого и иконки на уеб сайта", @@ -51,7 +51,7 @@ "topic-tools": "Инструменти за темите", "home-page": "Начална страница", "home-page-route": "Път на началната страница", - "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", + "home-page-description": "Изберете коя страница да бъде показана, когато потребителите отидат на главния адрес на форума.", "custom-route": "Персонализиран път", "allow-user-home-pages": "Разрешаване на потребителските начални страници", "home-page-title": "Заглавие на началната страница (по подразбиране: „Начало“)", From 5f3c5a5547fbc5ba72bd7801924c48d5733065e6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Feb 2025 13:06:25 -0500 Subject: [PATCH 042/125] fix(deps): update dependency semver to v7.7.1 (#13122) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index e5929b5811..d4c47d8918 100644 --- a/install/package.json +++ b/install/package.json @@ -131,7 +131,7 @@ "sanitize-html": "2.14.0", "sass": "1.83.4", "satori": "0.12.1", - "semver": "7.7.0", + "semver": "7.7.1", "serve-favicon": "2.5.0", "sharp": "0.32.6", "sitemap": "8.0.0", From ca6734b33b37e117520de72d6abaed775fcaea30 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Feb 2025 13:06:37 -0500 Subject: [PATCH 043/125] chore(deps): update commitlint monorepo to v19.7.1 (#13123) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/package.json b/install/package.json index d4c47d8918..88ec2e2eb0 100644 --- a/install/package.json +++ b/install/package.json @@ -159,8 +159,8 @@ }, "devDependencies": { "@apidevtools/swagger-parser": "10.1.0", - "@commitlint/cli": "19.6.1", - "@commitlint/config-angular": "19.7.0", + "@commitlint/cli": "19.7.1", + "@commitlint/config-angular": "19.7.1", "coveralls": "3.1.1", "eslint": "8.57.1", "eslint-config-nodebb": "0.2.1", From 3aeec2cd114d80d2ac14c62d06543e4b01c9ae16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Tue, 4 Feb 2025 20:11:25 -0500 Subject: [PATCH 044/125] remove w-100 --- src/views/modals/merge-topic.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/modals/merge-topic.tpl b/src/views/modals/merge-topic.tpl index 6b996922b9..d95cd89464 100644 --- a/src/views/modals/merge-topic.tpl +++ b/src/views/modals/merge-topic.tpl @@ -11,7 +11,7 @@ -