diff --git a/.docker/.gitkeep b/.docker/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.docker/build/.gitkeep b/.docker/build/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.docker/config/.gitkeep b/.docker/config/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.docker/database/mongo/data/.gitkeep b/.docker/database/mongo/data/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.docker/database/postgresql/data/.gitkeep b/.docker/database/postgresql/data/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.docker/database/redis/data/.gitkeep b/.docker/database/redis/data/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.docker/public/uploads/.gitkeep b/.docker/public/uploads/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index b304ee19d8..0000000000 --- a/.eslintignore +++ /dev/null @@ -1,21 +0,0 @@ -node_modules/ -*.sublime-project -*.sublime-workspace -.project -.vagrant -.DS_Store -logs/ -/public/templates -/public/uploads -/public/vendor -/public/src/modules/string.js -.idea/ -.vscode/ -*.ipr -*.iws -/coverage -/build -.eslintrc -test/files -*.min.js -install/docker/ \ No newline at end of file diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index abd292af1b..0000000000 --- a/.eslintrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "nodebb" -} diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 16fc4a0de0..ee554e117e 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -16,46 +16,116 @@ permissions: packages: write jobs: - release: - runs-on: ubuntu-latest + build: + strategy: + matrix: + include: + - os: ubuntu-latest + platforms: linux/amd64 + required: true + - os: ubuntu-24.04-arm + platforms: linux/arm64 + required: true + continue-on-error: ${{ !matrix.required }} + runs-on: ${{ matrix.os }} steps: - - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 + - name: Prepare + run: | + platform=${{ matrix.platforms }} + echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV + echo "IMAGE=ghcr.io/${GITHUB_REPOSITORY@L}" >> $GITHUB_ENV + - uses: actions/checkout@v6 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to GitHub Container Registry - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: - images: ghcr.io/${{ github.repository }} + images: ${{ env.IMAGE }} + + - name: Cache node_modules + id: cache-node-modules + uses: actions/cache@v5 + with: + path: var-cache-node-modules + key: var-cache-node-modules-${{ hashFiles('Dockerfile', 'install/package.json') }} + + - name: Build and push Docker images + id: build + uses: docker/build-push-action@v7 + with: + cache-from: type=gha + cache-to: type=gha,mode=min + context: . + file: ./Dockerfile + platforms: ${{ matrix.platforms }} + labels: ${{ steps.meta.outputs.labels }} + tags: ${{ env.IMAGE }} + outputs: type=image,push-by-digest=true,name-canonical=true,push=true + - name: Export digest + run: | + mkdir -p ${{ runner.temp }}/digests + digest="${{ steps.build.outputs.digest }}" + touch "${{ runner.temp }}/digests/${digest#sha256:}" + + - name: Upload digest + uses: actions/upload-artifact@v7 + with: + name: digests-${{ env.PLATFORM_PAIR }} + path: ${{ runner.temp }}/digests/* + if-no-files-found: error + retention-days: 1 + merge: + runs-on: ubuntu-latest + needs: + - build + steps: + - name: Prepare + run: | + echo "IMAGE=ghcr.io/${GITHUB_REPOSITORY@L}" >> $GITHUB_ENV + echo "CURRENT_DATE_NST=$(date +'%Y%m%d-%H%M%S' -d '-3 hours -30 minutes')" >> $GITHUB_ENV + - name: Download digests + uses: actions/download-artifact@v8 + with: + path: ${{ runner.temp }}/digests + pattern: digests-* + merge-multiple: true + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v4 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v4 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Docker meta + id: meta + uses: docker/metadata-action@v6 + with: + images: ${{ env.IMAGE }} tags: | type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}}.x type=raw,value=latest,enable={{is_default_branch}} type=ref,event=branch,enable=${{ github.event.repository.default_branch != github.ref }} - - - name: Build and push Docker images - uses: docker/build-push-action@v5 - with: - cache-from: type=gha - cache-to: type=gha,mode=max - context: . - file: ./Dockerfile - platforms: linux/amd64,linux/arm64,linux/arm/v7 - push: true - tags: ${{ steps.meta.outputs.tags }} + type=raw,value=${{ env.CURRENT_DATE_NST }} + flavor: | + latest=true + - name: Create manifest list and push + working-directory: ${{ runner.temp }}/digests + run: | + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf '${{ env.IMAGE }}@sha256:%s ' *) + - name: Inspect image + run: | + docker buildx imagetools inspect ${{ env.IMAGE }}:${{ steps.meta.outputs.version }} diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 0733c4d02f..00846e9c06 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -27,19 +27,19 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest] - node: [18, 20] + node: [20, 22] database: [mongo-dev, mongo, redis, postgres] include: # only run coverage once - os: ubuntu-latest - node: 18 + node: 22 coverage: true # test under development once - database: mongo-dev test_env: development # only run eslint once - os: ubuntu-latest - node: 18 + node: 22 database: mongo-dev lint: true runs-on: ${{ matrix.os }} @@ -48,7 +48,7 @@ jobs: services: postgres: - image: 'postgres:16-alpine' + image: 'postgres:18-alpine' env: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres @@ -63,7 +63,7 @@ jobs: - 5432:5432 redis: - image: 'redis:7.2.3' + image: 'redis:8.6.2' # Set health checks to wait until redis has started options: >- --health-cmd "redis-cli ping" @@ -75,18 +75,18 @@ jobs: - 6379:6379 mongo: - image: 'mongo:7.0' + image: 'mongo:8.2' ports: # Maps port 27017 on service container to the host - 27017:27017 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - run: cp install/package.json package.json - name: Install Node - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ matrix.node }} @@ -192,12 +192,13 @@ jobs: run: npm run coverage - name: Test coverage - uses: coverallsapp/github-action@3dfc5567390f6fa9267c0ee9c251e4c8c3f18949 # v2.2.3 + uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6 if: matrix.coverage with: github-token: ${{ secrets.GITHUB_TOKEN }} flag-name: ${{ matrix.os }}-node-${{ matrix.node }}-db-${{ matrix.database }} parallel: true + fail-on-error: false finish: permissions: @@ -206,7 +207,8 @@ jobs: runs-on: ubuntu-latest steps: - name: Coveralls Finished - uses: coverallsapp/github-action@3dfc5567390f6fa9267c0ee9c251e4c8c3f18949 # v2.2.3 + uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6 with: github-token: ${{ secrets.GITHUB_TOKEN }} parallel-finished: true + fail-on-error: false diff --git a/.gitignore b/.gitignore index 887ef337b0..42a1b3c705 100644 --- a/.gitignore +++ b/.gitignore @@ -71,4 +71,5 @@ package-lock.json link-plugins.sh test.sh -.docker/ \ No newline at end of file +.docker/** +!**/.gitkeep \ No newline at end of file diff --git a/.tx/config b/.tx/config index a6bcb48d72..ff0e36f735 100644 --- a/.tx/config +++ b/.tx/config @@ -6,51 +6,54 @@ file_filter = public/language//admin/admin.json source_file = public/language/en-GB/admin/admin.json source_lang = en_GB type = KEYVALUEJSON -trans.pt_BR = public/language/pt-BR/admin/admin.json -trans.en@pirate = public/language/en-x-pirate/admin/admin.json -trans.hy = public/language/hy/admin/admin.json -trans.pl = public/language/pl/admin/admin.json -trans.th = public/language/th/admin/admin.json -trans.de = public/language/de/admin/admin.json -trans.el = public/language/el/admin/admin.json trans.ar = public/language/ar/admin/admin.json +trans.az = public/language/az/admin/admin.json trans.bg = public/language/bg/admin/admin.json trans.bn = public/language/bn/admin/admin.json -trans.it = public/language/it/admin/admin.json -trans.lv = public/language/lv/admin/admin.json -trans.nl = public/language/nl/admin/admin.json -trans.ru = public/language/ru/admin/admin.json -trans.sr = public/language/sr/admin/admin.json -trans.sv = public/language/sv/admin/admin.json -trans.uk = public/language/uk/admin/admin.json -trans.zh_CN = public/language/zh-CN/admin/admin.json -trans.fa_IR = public/language/fa-IR/admin/admin.json -trans.id = public/language/id/admin/admin.json -trans.ms = public/language/ms/admin/admin.json -trans.nb = public/language/nb/admin/admin.json -trans.sk = public/language/sk/admin/admin.json trans.cs = public/language/cs/admin/admin.json -trans.fi = public/language/fi/admin/admin.json -trans.fr = public/language/fr/admin/admin.json -trans.rw = public/language/rw/admin/admin.json -trans.sq_AL = public/language/sq-AL/admin/admin.json +trans.da = public/language/da/admin/admin.json +trans.de = public/language/de/admin/admin.json +trans.el = public/language/el/admin/admin.json trans.en_US = public/language/en-US/admin/admin.json +trans.en@pirate = public/language/en-x-pirate/admin/admin.json trans.es = public/language/es/admin/admin.json trans.et = public/language/et/admin/admin.json +trans.fa_IR = public/language/fa-IR/admin/admin.json +trans.fi = public/language/fi/admin/admin.json +trans.fr = public/language/fr/admin/admin.json trans.gl = public/language/gl/admin/admin.json trans.he = public/language/he/admin/admin.json -trans.ja = public/language/ja/admin/admin.json -trans.lt = public/language/lt/admin/admin.json -trans.pt_PT = public/language/pt-PT/admin/admin.json -trans.sc = public/language/sc/admin/admin.json -trans.sl = public/language/sl/admin/admin.json -trans.vi = public/language/vi/admin/admin.json -trans.da = public/language/da/admin/admin.json trans.hr = public/language/hr/admin/admin.json trans.hu = public/language/hu/admin/admin.json +trans.hy = public/language/hy/admin/admin.json +trans.id = public/language/id/admin/admin.json +trans.it = public/language/it/admin/admin.json +trans.ja = public/language/ja/admin/admin.json trans.ko = public/language/ko/admin/admin.json +trans.lt = public/language/lt/admin/admin.json +trans.lv = public/language/lv/admin/admin.json +trans.ms = public/language/ms/admin/admin.json +trans.nb = public/language/nb/admin/admin.json +trans.nl = public/language/nl/admin/admin.json +trans.nn_NO = public/language/nn-NO/admin/admin.json +trans.pl = public/language/pl/admin/admin.json +trans.pt_BR = public/language/pt-BR/admin/admin.json +trans.pt_PT = public/language/pt-PT/admin/admin.json trans.ro = public/language/ro/admin/admin.json +trans.ru = public/language/ru/admin/admin.json +trans.rw = public/language/rw/admin/admin.json +trans.sc = public/language/sc/admin/admin.json +trans.sk = public/language/sk/admin/admin.json +trans.sl = public/language/sl/admin/admin.json +trans.sq_AL = public/language/sq-AL/admin/admin.json +trans.sr = public/language/sr/admin/admin.json +trans.sv = public/language/sv/admin/admin.json +trans.th = public/language/th/admin/admin.json trans.tr = public/language/tr/admin/admin.json +trans.uk = public/language/uk/admin/admin.json +trans.ur = public/language/ur/admin/admin.json +trans.vi = public/language/vi/admin/admin.json +trans.zh_CN = public/language/zh-CN/admin/admin.json trans.zh_TW = public/language/zh-TW/admin/admin.json [o:nodebb:p:nodebb:r:admin-advanced-cache] @@ -58,415 +61,494 @@ file_filter = public/language//admin/advanced/cache.json source_file = public/language/en-GB/admin/advanced/cache.json source_lang = en_GB type = KEYVALUEJSON -trans.fa_IR = public/language/fa-IR/admin/advanced/cache.json -trans.he = public/language/he/admin/advanced/cache.json -trans.ko = public/language/ko/admin/advanced/cache.json -trans.pt_PT = public/language/pt-PT/admin/advanced/cache.json -trans.rw = public/language/rw/admin/advanced/cache.json -trans.tr = public/language/tr/admin/advanced/cache.json -trans.en_US = public/language/en-US/admin/advanced/cache.json -trans.hu = public/language/hu/admin/advanced/cache.json -trans.id = public/language/id/admin/advanced/cache.json -trans.ms = public/language/ms/admin/advanced/cache.json -trans.sc = public/language/sc/admin/advanced/cache.json -trans.sv = public/language/sv/admin/advanced/cache.json -trans.es = public/language/es/admin/advanced/cache.json -trans.gl = public/language/gl/admin/advanced/cache.json -trans.lv = public/language/lv/admin/advanced/cache.json -trans.nl = public/language/nl/admin/advanced/cache.json -trans.ru = public/language/ru/admin/advanced/cache.json -trans.zh_TW = public/language/zh-TW/admin/advanced/cache.json -trans.bn = public/language/bn/admin/advanced/cache.json -trans.en@pirate = public/language/en-x-pirate/admin/advanced/cache.json -trans.fr = public/language/fr/admin/advanced/cache.json -trans.hr = public/language/hr/admin/advanced/cache.json -trans.pt_BR = public/language/pt-BR/admin/advanced/cache.json trans.ar = public/language/ar/admin/advanced/cache.json +trans.az = public/language/az/admin/advanced/cache.json trans.bg = public/language/bg/admin/advanced/cache.json +trans.bn = public/language/bn/admin/advanced/cache.json trans.cs = public/language/cs/admin/advanced/cache.json -trans.lt = public/language/lt/admin/advanced/cache.json -trans.nb = public/language/nb/admin/advanced/cache.json -trans.uk = public/language/uk/admin/advanced/cache.json -trans.el = public/language/el/admin/advanced/cache.json -trans.pl = public/language/pl/admin/advanced/cache.json -trans.sr = public/language/sr/admin/advanced/cache.json trans.da = public/language/da/admin/advanced/cache.json +trans.de = public/language/de/admin/advanced/cache.json +trans.el = public/language/el/admin/advanced/cache.json +trans.en_US = public/language/en-US/admin/advanced/cache.json +trans.en@pirate = public/language/en-x-pirate/admin/advanced/cache.json +trans.es = public/language/es/admin/advanced/cache.json trans.et = public/language/et/admin/advanced/cache.json +trans.fa_IR = public/language/fa-IR/admin/advanced/cache.json trans.fi = public/language/fi/admin/advanced/cache.json +trans.fr = public/language/fr/admin/advanced/cache.json +trans.gl = public/language/gl/admin/advanced/cache.json +trans.he = public/language/he/admin/advanced/cache.json +trans.hr = public/language/hr/admin/advanced/cache.json +trans.hu = public/language/hu/admin/advanced/cache.json trans.hy = public/language/hy/admin/advanced/cache.json +trans.id = public/language/id/admin/advanced/cache.json +trans.it = public/language/it/admin/advanced/cache.json trans.ja = public/language/ja/admin/advanced/cache.json +trans.ko = public/language/ko/admin/advanced/cache.json +trans.lt = public/language/lt/admin/advanced/cache.json +trans.lv = public/language/lv/admin/advanced/cache.json +trans.ms = public/language/ms/admin/advanced/cache.json +trans.nb = public/language/nb/admin/advanced/cache.json +trans.nl = public/language/nl/admin/advanced/cache.json +trans.nn_NO = public/language/nn-NO/admin/advanced/cache.json +trans.pl = public/language/pl/admin/advanced/cache.json +trans.pt_BR = public/language/pt-BR/admin/advanced/cache.json +trans.pt_PT = public/language/pt-PT/admin/advanced/cache.json +trans.ro = public/language/ro/admin/advanced/cache.json +trans.ru = public/language/ru/admin/advanced/cache.json +trans.rw = public/language/rw/admin/advanced/cache.json +trans.sc = public/language/sc/admin/advanced/cache.json +trans.sk = public/language/sk/admin/advanced/cache.json trans.sl = public/language/sl/admin/advanced/cache.json trans.sq_AL = public/language/sq-AL/admin/advanced/cache.json +trans.sr = public/language/sr/admin/advanced/cache.json +trans.sv = public/language/sv/admin/advanced/cache.json trans.th = public/language/th/admin/advanced/cache.json -trans.de = public/language/de/admin/advanced/cache.json -trans.it = public/language/it/admin/advanced/cache.json -trans.ro = public/language/ro/admin/advanced/cache.json -trans.sk = public/language/sk/admin/advanced/cache.json +trans.tr = public/language/tr/admin/advanced/cache.json +trans.uk = public/language/uk/admin/advanced/cache.json +trans.ur = public/language/ur/admin/advanced/cache.json trans.vi = public/language/vi/admin/advanced/cache.json trans.zh_CN = public/language/zh-CN/admin/advanced/cache.json +trans.zh_TW = public/language/zh-TW/admin/advanced/cache.json [o:nodebb:p:nodebb:r:admin-advanced-database] file_filter = public/language//admin/advanced/database.json source_file = public/language/en-GB/admin/advanced/database.json source_lang = en_GB type = KEYVALUEJSON -trans.fr = public/language/fr/admin/advanced/database.json -trans.he = public/language/he/admin/advanced/database.json -trans.ja = public/language/ja/admin/advanced/database.json -trans.lv = public/language/lv/admin/advanced/database.json -trans.pt_PT = public/language/pt-PT/admin/advanced/database.json -trans.en_US = public/language/en-US/admin/advanced/database.json -trans.el = public/language/el/admin/advanced/database.json -trans.tr = public/language/tr/admin/advanced/database.json -trans.zh_CN = public/language/zh-CN/admin/advanced/database.json trans.ar = public/language/ar/admin/advanced/database.json -trans.hr = public/language/hr/admin/advanced/database.json -trans.lt = public/language/lt/admin/advanced/database.json -trans.ro = public/language/ro/admin/advanced/database.json -trans.zh_TW = public/language/zh-TW/admin/advanced/database.json -trans.gl = public/language/gl/admin/advanced/database.json -trans.it = public/language/it/admin/advanced/database.json -trans.nb = public/language/nb/admin/advanced/database.json +trans.az = public/language/az/admin/advanced/database.json +trans.bg = public/language/bg/admin/advanced/database.json trans.bn = public/language/bn/admin/advanced/database.json +trans.cs = public/language/cs/admin/advanced/database.json trans.da = public/language/da/admin/advanced/database.json trans.de = public/language/de/admin/advanced/database.json +trans.el = public/language/el/admin/advanced/database.json +trans.en_US = public/language/en-US/admin/advanced/database.json trans.en@pirate = public/language/en-x-pirate/admin/advanced/database.json +trans.es = public/language/es/admin/advanced/database.json +trans.et = public/language/et/admin/advanced/database.json +trans.fa_IR = public/language/fa-IR/admin/advanced/database.json +trans.fi = public/language/fi/admin/advanced/database.json +trans.fr = public/language/fr/admin/advanced/database.json +trans.gl = public/language/gl/admin/advanced/database.json +trans.he = public/language/he/admin/advanced/database.json +trans.hr = public/language/hr/admin/advanced/database.json trans.hu = public/language/hu/admin/advanced/database.json trans.hy = public/language/hy/admin/advanced/database.json trans.id = public/language/id/admin/advanced/database.json +trans.it = public/language/it/admin/advanced/database.json +trans.ja = public/language/ja/admin/advanced/database.json +trans.ko = public/language/ko/admin/advanced/database.json +trans.lt = public/language/lt/admin/advanced/database.json +trans.lv = public/language/lv/admin/advanced/database.json +trans.ms = public/language/ms/admin/advanced/database.json +trans.nb = public/language/nb/admin/advanced/database.json trans.nl = public/language/nl/admin/advanced/database.json -trans.cs = public/language/cs/admin/advanced/database.json -trans.sv = public/language/sv/admin/advanced/database.json -trans.sr = public/language/sr/admin/advanced/database.json +trans.nn_NO = public/language/nn-NO/admin/advanced/database.json trans.pl = public/language/pl/admin/advanced/database.json +trans.pt_BR = public/language/pt-BR/admin/advanced/database.json +trans.pt_PT = public/language/pt-PT/admin/advanced/database.json +trans.ro = public/language/ro/admin/advanced/database.json trans.ru = public/language/ru/admin/advanced/database.json +trans.rw = public/language/rw/admin/advanced/database.json trans.sc = public/language/sc/admin/advanced/database.json +trans.sk = public/language/sk/admin/advanced/database.json trans.sl = public/language/sl/admin/advanced/database.json trans.sq_AL = public/language/sq-AL/admin/advanced/database.json +trans.sr = public/language/sr/admin/advanced/database.json +trans.sv = public/language/sv/admin/advanced/database.json trans.th = public/language/th/admin/advanced/database.json -trans.et = public/language/et/admin/advanced/database.json -trans.fa_IR = public/language/fa-IR/admin/advanced/database.json -trans.ko = public/language/ko/admin/advanced/database.json -trans.sk = public/language/sk/admin/advanced/database.json -trans.vi = public/language/vi/admin/advanced/database.json -trans.es = public/language/es/admin/advanced/database.json -trans.fi = public/language/fi/admin/advanced/database.json -trans.ms = public/language/ms/admin/advanced/database.json -trans.pt_BR = public/language/pt-BR/admin/advanced/database.json -trans.rw = public/language/rw/admin/advanced/database.json +trans.tr = public/language/tr/admin/advanced/database.json trans.uk = public/language/uk/admin/advanced/database.json -trans.bg = public/language/bg/admin/advanced/database.json +trans.ur = public/language/ur/admin/advanced/database.json +trans.vi = public/language/vi/admin/advanced/database.json +trans.zh_CN = public/language/zh-CN/admin/advanced/database.json +trans.zh_TW = public/language/zh-TW/admin/advanced/database.json [o:nodebb:p:nodebb:r:admin-advanced-errors] file_filter = public/language//admin/advanced/errors.json source_file = public/language/en-GB/admin/advanced/errors.json source_lang = en_GB type = KEYVALUEJSON +trans.ar = public/language/ar/admin/advanced/errors.json +trans.az = public/language/az/admin/advanced/errors.json +trans.bg = public/language/bg/admin/advanced/errors.json +trans.bn = public/language/bn/admin/advanced/errors.json trans.cs = public/language/cs/admin/advanced/errors.json -trans.en_US = public/language/en-US/admin/advanced/errors.json -trans.es = public/language/es/admin/advanced/errors.json -trans.pl = public/language/pl/admin/advanced/errors.json -trans.sk = public/language/sk/admin/advanced/errors.json -trans.uk = public/language/uk/admin/advanced/errors.json trans.da = public/language/da/admin/advanced/errors.json -trans.gl = public/language/gl/admin/advanced/errors.json -trans.hu = public/language/hu/admin/advanced/errors.json -trans.pt_PT = public/language/pt-PT/admin/advanced/errors.json -trans.vi = public/language/vi/admin/advanced/errors.json trans.de = public/language/de/admin/advanced/errors.json -trans.ko = public/language/ko/admin/advanced/errors.json -trans.nb = public/language/nb/admin/advanced/errors.json -trans.sc = public/language/sc/admin/advanced/errors.json -trans.sl = public/language/sl/admin/advanced/errors.json -trans.tr = public/language/tr/admin/advanced/errors.json -trans.zh_CN = public/language/zh-CN/admin/advanced/errors.json +trans.el = public/language/el/admin/advanced/errors.json +trans.en_US = public/language/en-US/admin/advanced/errors.json +trans.en@pirate = public/language/en-x-pirate/admin/advanced/errors.json +trans.es = public/language/es/admin/advanced/errors.json +trans.et = public/language/et/admin/advanced/errors.json +trans.fa_IR = public/language/fa-IR/admin/advanced/errors.json +trans.fi = public/language/fi/admin/advanced/errors.json trans.fr = public/language/fr/admin/advanced/errors.json +trans.gl = public/language/gl/admin/advanced/errors.json +trans.he = public/language/he/admin/advanced/errors.json +trans.hr = public/language/hr/admin/advanced/errors.json +trans.hu = public/language/hu/admin/advanced/errors.json trans.hy = public/language/hy/admin/advanced/errors.json +trans.id = public/language/id/admin/advanced/errors.json +trans.it = public/language/it/admin/advanced/errors.json +trans.ja = public/language/ja/admin/advanced/errors.json +trans.ko = public/language/ko/admin/advanced/errors.json +trans.lt = public/language/lt/admin/advanced/errors.json +trans.lv = public/language/lv/admin/advanced/errors.json +trans.ms = public/language/ms/admin/advanced/errors.json +trans.nb = public/language/nb/admin/advanced/errors.json +trans.nl = public/language/nl/admin/advanced/errors.json +trans.nn_NO = public/language/nn-NO/admin/advanced/errors.json +trans.pl = public/language/pl/admin/advanced/errors.json trans.pt_BR = public/language/pt-BR/admin/advanced/errors.json +trans.pt_PT = public/language/pt-PT/admin/advanced/errors.json trans.ro = public/language/ro/admin/advanced/errors.json +trans.ru = public/language/ru/admin/advanced/errors.json +trans.rw = public/language/rw/admin/advanced/errors.json +trans.sc = public/language/sc/admin/advanced/errors.json +trans.sk = public/language/sk/admin/advanced/errors.json +trans.sl = public/language/sl/admin/advanced/errors.json +trans.sq_AL = public/language/sq-AL/admin/advanced/errors.json trans.sr = public/language/sr/admin/advanced/errors.json trans.sv = public/language/sv/admin/advanced/errors.json -trans.fa_IR = public/language/fa-IR/admin/advanced/errors.json -trans.it = public/language/it/admin/advanced/errors.json -trans.lt = public/language/lt/admin/advanced/errors.json -trans.ms = public/language/ms/admin/advanced/errors.json -trans.ru = public/language/ru/admin/advanced/errors.json -trans.sq_AL = public/language/sq-AL/admin/advanced/errors.json -trans.ar = public/language/ar/admin/advanced/errors.json -trans.fi = public/language/fi/admin/advanced/errors.json -trans.he = public/language/he/admin/advanced/errors.json -trans.ja = public/language/ja/admin/advanced/errors.json trans.th = public/language/th/admin/advanced/errors.json +trans.tr = public/language/tr/admin/advanced/errors.json +trans.uk = public/language/uk/admin/advanced/errors.json +trans.ur = public/language/ur/admin/advanced/errors.json +trans.vi = public/language/vi/admin/advanced/errors.json +trans.zh_CN = public/language/zh-CN/admin/advanced/errors.json trans.zh_TW = public/language/zh-TW/admin/advanced/errors.json -trans.bn = public/language/bn/admin/advanced/errors.json -trans.en@pirate = public/language/en-x-pirate/admin/advanced/errors.json -trans.hr = public/language/hr/admin/advanced/errors.json -trans.rw = public/language/rw/admin/advanced/errors.json -trans.bg = public/language/bg/admin/advanced/errors.json -trans.el = public/language/el/admin/advanced/errors.json -trans.et = public/language/et/admin/advanced/errors.json -trans.id = public/language/id/admin/advanced/errors.json -trans.lv = public/language/lv/admin/advanced/errors.json -trans.nl = public/language/nl/admin/advanced/errors.json [o:nodebb:p:nodebb:r:admin-advanced-events] file_filter = public/language//admin/advanced/events.json source_file = public/language/en-GB/admin/advanced/events.json source_lang = en_GB type = KEYVALUEJSON -trans.bg = public/language/bg/admin/advanced/events.json -trans.el = public/language/el/admin/advanced/events.json -trans.lt = public/language/lt/admin/advanced/events.json -trans.pt_BR = public/language/pt-BR/admin/advanced/events.json -trans.zh_TW = public/language/zh-TW/admin/advanced/events.json -trans.th = public/language/th/admin/advanced/events.json -trans.gl = public/language/gl/admin/advanced/events.json -trans.ko = public/language/ko/admin/advanced/events.json -trans.nl = public/language/nl/admin/advanced/events.json -trans.ro = public/language/ro/admin/advanced/events.json -trans.sl = public/language/sl/admin/advanced/events.json trans.ar = public/language/ar/admin/advanced/events.json -trans.hr = public/language/hr/admin/advanced/events.json -trans.vi = public/language/vi/admin/advanced/events.json -trans.fa_IR = public/language/fa-IR/admin/advanced/events.json -trans.ms = public/language/ms/admin/advanced/events.json -trans.tr = public/language/tr/admin/advanced/events.json -trans.nb = public/language/nb/admin/advanced/events.json -trans.pt_PT = public/language/pt-PT/admin/advanced/events.json -trans.sk = public/language/sk/admin/advanced/events.json +trans.az = public/language/az/admin/advanced/events.json +trans.bg = public/language/bg/admin/advanced/events.json +trans.bn = public/language/bn/admin/advanced/events.json +trans.cs = public/language/cs/admin/advanced/events.json +trans.da = public/language/da/admin/advanced/events.json +trans.de = public/language/de/admin/advanced/events.json +trans.el = public/language/el/admin/advanced/events.json +trans.en_US = public/language/en-US/admin/advanced/events.json trans.en@pirate = public/language/en-x-pirate/admin/advanced/events.json trans.es = public/language/es/admin/advanced/events.json trans.et = public/language/et/admin/advanced/events.json -trans.he = public/language/he/admin/advanced/events.json -trans.lv = public/language/lv/admin/advanced/events.json -trans.sv = public/language/sv/admin/advanced/events.json -trans.zh_CN = public/language/zh-CN/admin/advanced/events.json -trans.pl = public/language/pl/admin/advanced/events.json -trans.rw = public/language/rw/admin/advanced/events.json -trans.cs = public/language/cs/admin/advanced/events.json -trans.de = public/language/de/admin/advanced/events.json +trans.fa_IR = public/language/fa-IR/admin/advanced/events.json +trans.fi = public/language/fi/admin/advanced/events.json trans.fr = public/language/fr/admin/advanced/events.json +trans.gl = public/language/gl/admin/advanced/events.json +trans.he = public/language/he/admin/advanced/events.json +trans.hr = public/language/hr/admin/advanced/events.json +trans.hu = public/language/hu/admin/advanced/events.json trans.hy = public/language/hy/admin/advanced/events.json trans.id = public/language/id/admin/advanced/events.json -trans.ru = public/language/ru/admin/advanced/events.json -trans.sq_AL = public/language/sq-AL/admin/advanced/events.json -trans.uk = public/language/uk/admin/advanced/events.json -trans.da = public/language/da/admin/advanced/events.json -trans.en_US = public/language/en-US/admin/advanced/events.json -trans.hu = public/language/hu/admin/advanced/events.json trans.it = public/language/it/admin/advanced/events.json trans.ja = public/language/ja/admin/advanced/events.json -trans.bn = public/language/bn/admin/advanced/events.json -trans.fi = public/language/fi/admin/advanced/events.json +trans.ko = public/language/ko/admin/advanced/events.json +trans.lt = public/language/lt/admin/advanced/events.json +trans.lv = public/language/lv/admin/advanced/events.json +trans.ms = public/language/ms/admin/advanced/events.json +trans.nb = public/language/nb/admin/advanced/events.json +trans.nl = public/language/nl/admin/advanced/events.json +trans.nn_NO = public/language/nn-NO/admin/advanced/events.json +trans.pl = public/language/pl/admin/advanced/events.json +trans.pt_BR = public/language/pt-BR/admin/advanced/events.json +trans.pt_PT = public/language/pt-PT/admin/advanced/events.json +trans.ro = public/language/ro/admin/advanced/events.json +trans.ru = public/language/ru/admin/advanced/events.json +trans.rw = public/language/rw/admin/advanced/events.json trans.sc = public/language/sc/admin/advanced/events.json +trans.sk = public/language/sk/admin/advanced/events.json +trans.sl = public/language/sl/admin/advanced/events.json +trans.sq_AL = public/language/sq-AL/admin/advanced/events.json trans.sr = public/language/sr/admin/advanced/events.json +trans.sv = public/language/sv/admin/advanced/events.json +trans.th = public/language/th/admin/advanced/events.json +trans.tr = public/language/tr/admin/advanced/events.json +trans.uk = public/language/uk/admin/advanced/events.json +trans.ur = public/language/ur/admin/advanced/events.json +trans.vi = public/language/vi/admin/advanced/events.json +trans.zh_CN = public/language/zh-CN/admin/advanced/events.json +trans.zh_TW = public/language/zh-TW/admin/advanced/events.json + +[o:nodebb:p:nodebb:r:admin-advanced-jobs] +file_filter = public/language//admin/advanced/jobs.json +source_file = public/language/en-GB/admin/advanced/jobs.json +source_lang = en_GB +type = KEYVALUEJSON +trans.ar = public/language/ar/admin/advanced/jobs.json +trans.az = public/language/az/admin/advanced/jobs.json +trans.bg = public/language/bg/admin/advanced/jobs.json +trans.bn = public/language/bn/admin/advanced/jobs.json +trans.cs = public/language/cs/admin/advanced/jobs.json +trans.da = public/language/da/admin/advanced/jobs.json +trans.de = public/language/de/admin/advanced/jobs.json +trans.el = public/language/el/admin/advanced/jobs.json +trans.en_US = public/language/en-US/admin/advanced/jobs.json +trans.en@pirate = public/language/en-x-pirate/admin/advanced/jobs.json +trans.es = public/language/es/admin/advanced/jobs.json +trans.et = public/language/et/admin/advanced/jobs.json +trans.fa_IR = public/language/fa-IR/admin/advanced/jobs.json +trans.fi = public/language/fi/admin/advanced/jobs.json +trans.fr = public/language/fr/admin/advanced/jobs.json +trans.gl = public/language/gl/admin/advanced/jobs.json +trans.he = public/language/he/admin/advanced/jobs.json +trans.hr = public/language/hr/admin/advanced/jobs.json +trans.hu = public/language/hu/admin/advanced/jobs.json +trans.hy = public/language/hy/admin/advanced/jobs.json +trans.id = public/language/id/admin/advanced/jobs.json +trans.it = public/language/it/admin/advanced/jobs.json +trans.ja = public/language/ja/admin/advanced/jobs.json +trans.ko = public/language/ko/admin/advanced/jobs.json +trans.lt = public/language/lt/admin/advanced/jobs.json +trans.lv = public/language/lv/admin/advanced/jobs.json +trans.ms = public/language/ms/admin/advanced/jobs.json +trans.nb = public/language/nb/admin/advanced/jobs.json +trans.nl = public/language/nl/admin/advanced/jobs.json +trans.nn_NO = public/language/nn-NO/admin/advanced/jobs.json +trans.pl = public/language/pl/admin/advanced/jobs.json +trans.pt_BR = public/language/pt-BR/admin/advanced/jobs.json +trans.pt_PT = public/language/pt-PT/admin/advanced/jobs.json +trans.ro = public/language/ro/admin/advanced/jobs.json +trans.ru = public/language/ru/admin/advanced/jobs.json +trans.rw = public/language/rw/admin/advanced/jobs.json +trans.sc = public/language/sc/admin/advanced/jobs.json +trans.sk = public/language/sk/admin/advanced/jobs.json +trans.sl = public/language/sl/admin/advanced/jobs.json +trans.sq_AL = public/language/sq-AL/admin/advanced/jobs.json +trans.sr = public/language/sr/admin/advanced/jobs.json +trans.sv = public/language/sv/admin/advanced/jobs.json +trans.th = public/language/th/admin/advanced/jobs.json +trans.tr = public/language/tr/admin/advanced/jobs.json +trans.uk = public/language/uk/admin/advanced/jobs.json +trans.ur = public/language/ur/admin/advanced/jobs.json +trans.vi = public/language/vi/admin/advanced/jobs.json +trans.zh_CN = public/language/zh-CN/admin/advanced/jobs.json +trans.zh_TW = public/language/zh-TW/admin/advanced/jobs.json [o:nodebb:p:nodebb:r:admin-advanced-logs] file_filter = public/language//admin/advanced/logs.json source_file = public/language/en-GB/admin/advanced/logs.json source_lang = en_GB type = KEYVALUEJSON -trans.nl = public/language/nl/admin/advanced/logs.json -trans.ru = public/language/ru/admin/advanced/logs.json -trans.vi = public/language/vi/admin/advanced/logs.json -trans.id = public/language/id/admin/advanced/logs.json -trans.fi = public/language/fi/admin/advanced/logs.json -trans.he = public/language/he/admin/advanced/logs.json -trans.hr = public/language/hr/admin/advanced/logs.json -trans.ja = public/language/ja/admin/advanced/logs.json -trans.lt = public/language/lt/admin/advanced/logs.json -trans.nb = public/language/nb/admin/advanced/logs.json -trans.rw = public/language/rw/admin/advanced/logs.json -trans.es = public/language/es/admin/advanced/logs.json -trans.sv = public/language/sv/admin/advanced/logs.json -trans.fa_IR = public/language/fa-IR/admin/advanced/logs.json -trans.fr = public/language/fr/admin/advanced/logs.json -trans.gl = public/language/gl/admin/advanced/logs.json -trans.zh_TW = public/language/zh-TW/admin/advanced/logs.json -trans.en@pirate = public/language/en-x-pirate/admin/advanced/logs.json -trans.sc = public/language/sc/admin/advanced/logs.json -trans.sq_AL = public/language/sq-AL/admin/advanced/logs.json -trans.uk = public/language/uk/admin/advanced/logs.json -trans.hu = public/language/hu/admin/advanced/logs.json -trans.bn = public/language/bn/admin/advanced/logs.json -trans.de = public/language/de/admin/advanced/logs.json -trans.it = public/language/it/admin/advanced/logs.json -trans.lv = public/language/lv/admin/advanced/logs.json -trans.ms = public/language/ms/admin/advanced/logs.json -trans.pl = public/language/pl/admin/advanced/logs.json -trans.zh_CN = public/language/zh-CN/admin/advanced/logs.json trans.ar = public/language/ar/admin/advanced/logs.json -trans.et = public/language/et/admin/advanced/logs.json -trans.hy = public/language/hy/admin/advanced/logs.json -trans.ko = public/language/ko/admin/advanced/logs.json -trans.th = public/language/th/admin/advanced/logs.json -trans.tr = public/language/tr/admin/advanced/logs.json +trans.az = public/language/az/admin/advanced/logs.json +trans.bg = public/language/bg/admin/advanced/logs.json +trans.bn = public/language/bn/admin/advanced/logs.json trans.cs = public/language/cs/admin/advanced/logs.json -trans.ro = public/language/ro/admin/advanced/logs.json -trans.pt_BR = public/language/pt-BR/admin/advanced/logs.json trans.da = public/language/da/admin/advanced/logs.json +trans.de = public/language/de/admin/advanced/logs.json trans.el = public/language/el/admin/advanced/logs.json trans.en_US = public/language/en-US/admin/advanced/logs.json +trans.en@pirate = public/language/en-x-pirate/admin/advanced/logs.json +trans.es = public/language/es/admin/advanced/logs.json +trans.et = public/language/et/admin/advanced/logs.json +trans.fa_IR = public/language/fa-IR/admin/advanced/logs.json +trans.fi = public/language/fi/admin/advanced/logs.json +trans.fr = public/language/fr/admin/advanced/logs.json +trans.gl = public/language/gl/admin/advanced/logs.json +trans.he = public/language/he/admin/advanced/logs.json +trans.hr = public/language/hr/admin/advanced/logs.json +trans.hu = public/language/hu/admin/advanced/logs.json +trans.hy = public/language/hy/admin/advanced/logs.json +trans.id = public/language/id/admin/advanced/logs.json +trans.it = public/language/it/admin/advanced/logs.json +trans.ja = public/language/ja/admin/advanced/logs.json +trans.ko = public/language/ko/admin/advanced/logs.json +trans.lt = public/language/lt/admin/advanced/logs.json +trans.lv = public/language/lv/admin/advanced/logs.json +trans.ms = public/language/ms/admin/advanced/logs.json +trans.nb = public/language/nb/admin/advanced/logs.json +trans.nl = public/language/nl/admin/advanced/logs.json +trans.nn_NO = public/language/nn-NO/admin/advanced/logs.json +trans.pl = public/language/pl/admin/advanced/logs.json +trans.pt_BR = public/language/pt-BR/admin/advanced/logs.json trans.pt_PT = public/language/pt-PT/admin/advanced/logs.json +trans.ro = public/language/ro/admin/advanced/logs.json +trans.ru = public/language/ru/admin/advanced/logs.json +trans.rw = public/language/rw/admin/advanced/logs.json +trans.sc = public/language/sc/admin/advanced/logs.json trans.sk = public/language/sk/admin/advanced/logs.json trans.sl = public/language/sl/admin/advanced/logs.json +trans.sq_AL = public/language/sq-AL/admin/advanced/logs.json trans.sr = public/language/sr/admin/advanced/logs.json -trans.bg = public/language/bg/admin/advanced/logs.json +trans.sv = public/language/sv/admin/advanced/logs.json +trans.th = public/language/th/admin/advanced/logs.json +trans.tr = public/language/tr/admin/advanced/logs.json +trans.uk = public/language/uk/admin/advanced/logs.json +trans.ur = public/language/ur/admin/advanced/logs.json +trans.vi = public/language/vi/admin/advanced/logs.json +trans.zh_CN = public/language/zh-CN/admin/advanced/logs.json +trans.zh_TW = public/language/zh-TW/admin/advanced/logs.json [o:nodebb:p:nodebb:r:admin-appearance-customise] file_filter = public/language//admin/appearance/customise.json source_file = public/language/en-GB/admin/appearance/customise.json source_lang = en_GB type = KEYVALUEJSON +trans.ar = public/language/ar/admin/appearance/customise.json +trans.az = public/language/az/admin/appearance/customise.json +trans.bg = public/language/bg/admin/appearance/customise.json +trans.bn = public/language/bn/admin/appearance/customise.json trans.cs = public/language/cs/admin/appearance/customise.json trans.da = public/language/da/admin/appearance/customise.json -trans.es = public/language/es/admin/appearance/customise.json -trans.hy = public/language/hy/admin/appearance/customise.json -trans.th = public/language/th/admin/appearance/customise.json -trans.ar = public/language/ar/admin/appearance/customise.json -trans.bg = public/language/bg/admin/appearance/customise.json -trans.he = public/language/he/admin/appearance/customise.json -trans.lt = public/language/lt/admin/appearance/customise.json -trans.nb = public/language/nb/admin/appearance/customise.json -trans.pl = public/language/pl/admin/appearance/customise.json -trans.sl = public/language/sl/admin/appearance/customise.json -trans.zh_TW = public/language/zh-TW/admin/appearance/customise.json -trans.bn = public/language/bn/admin/appearance/customise.json -trans.el = public/language/el/admin/appearance/customise.json -trans.hu = public/language/hu/admin/appearance/customise.json -trans.sk = public/language/sk/admin/appearance/customise.json -trans.tr = public/language/tr/admin/appearance/customise.json -trans.et = public/language/et/admin/appearance/customise.json -trans.id = public/language/id/admin/appearance/customise.json -trans.lv = public/language/lv/admin/appearance/customise.json -trans.pt_BR = public/language/pt-BR/admin/appearance/customise.json -trans.sr = public/language/sr/admin/appearance/customise.json -trans.zh_CN = public/language/zh-CN/admin/appearance/customise.json -trans.fr = public/language/fr/admin/appearance/customise.json -trans.hr = public/language/hr/admin/appearance/customise.json -trans.it = public/language/it/admin/appearance/customise.json -trans.nl = public/language/nl/admin/appearance/customise.json -trans.sv = public/language/sv/admin/appearance/customise.json -trans.fi = public/language/fi/admin/appearance/customise.json -trans.gl = public/language/gl/admin/appearance/customise.json -trans.ko = public/language/ko/admin/appearance/customise.json -trans.sc = public/language/sc/admin/appearance/customise.json trans.de = public/language/de/admin/appearance/customise.json +trans.el = public/language/el/admin/appearance/customise.json trans.en_US = public/language/en-US/admin/appearance/customise.json -trans.ja = public/language/ja/admin/appearance/customise.json -trans.ru = public/language/ru/admin/appearance/customise.json -trans.rw = public/language/rw/admin/appearance/customise.json -trans.vi = public/language/vi/admin/appearance/customise.json trans.en@pirate = public/language/en-x-pirate/admin/appearance/customise.json +trans.es = public/language/es/admin/appearance/customise.json +trans.et = public/language/et/admin/appearance/customise.json trans.fa_IR = public/language/fa-IR/admin/appearance/customise.json +trans.fi = public/language/fi/admin/appearance/customise.json +trans.fr = public/language/fr/admin/appearance/customise.json +trans.gl = public/language/gl/admin/appearance/customise.json +trans.he = public/language/he/admin/appearance/customise.json +trans.hr = public/language/hr/admin/appearance/customise.json +trans.hu = public/language/hu/admin/appearance/customise.json +trans.hy = public/language/hy/admin/appearance/customise.json +trans.id = public/language/id/admin/appearance/customise.json +trans.it = public/language/it/admin/appearance/customise.json +trans.ja = public/language/ja/admin/appearance/customise.json +trans.ko = public/language/ko/admin/appearance/customise.json +trans.lt = public/language/lt/admin/appearance/customise.json +trans.lv = public/language/lv/admin/appearance/customise.json trans.ms = public/language/ms/admin/appearance/customise.json +trans.nb = public/language/nb/admin/appearance/customise.json +trans.nl = public/language/nl/admin/appearance/customise.json +trans.nn_NO = public/language/nn-NO/admin/appearance/customise.json +trans.pl = public/language/pl/admin/appearance/customise.json +trans.pt_BR = public/language/pt-BR/admin/appearance/customise.json trans.pt_PT = public/language/pt-PT/admin/appearance/customise.json trans.ro = public/language/ro/admin/appearance/customise.json +trans.ru = public/language/ru/admin/appearance/customise.json +trans.rw = public/language/rw/admin/appearance/customise.json +trans.sc = public/language/sc/admin/appearance/customise.json +trans.sk = public/language/sk/admin/appearance/customise.json +trans.sl = public/language/sl/admin/appearance/customise.json trans.sq_AL = public/language/sq-AL/admin/appearance/customise.json +trans.sr = public/language/sr/admin/appearance/customise.json +trans.sv = public/language/sv/admin/appearance/customise.json +trans.th = public/language/th/admin/appearance/customise.json +trans.tr = public/language/tr/admin/appearance/customise.json trans.uk = public/language/uk/admin/appearance/customise.json +trans.ur = public/language/ur/admin/appearance/customise.json +trans.vi = public/language/vi/admin/appearance/customise.json +trans.zh_CN = public/language/zh-CN/admin/appearance/customise.json +trans.zh_TW = public/language/zh-TW/admin/appearance/customise.json [o:nodebb:p:nodebb:r:admin-appearance-skins] file_filter = public/language//admin/appearance/skins.json source_file = public/language/en-GB/admin/appearance/skins.json source_lang = en_GB type = KEYVALUEJSON +trans.ar = public/language/ar/admin/appearance/skins.json +trans.az = public/language/az/admin/appearance/skins.json +trans.bg = public/language/bg/admin/appearance/skins.json +trans.bn = public/language/bn/admin/appearance/skins.json +trans.cs = public/language/cs/admin/appearance/skins.json +trans.da = public/language/da/admin/appearance/skins.json +trans.de = public/language/de/admin/appearance/skins.json +trans.el = public/language/el/admin/appearance/skins.json +trans.en_US = public/language/en-US/admin/appearance/skins.json +trans.en@pirate = public/language/en-x-pirate/admin/appearance/skins.json +trans.es = public/language/es/admin/appearance/skins.json trans.et = public/language/et/admin/appearance/skins.json +trans.fa_IR = public/language/fa-IR/admin/appearance/skins.json +trans.fi = public/language/fi/admin/appearance/skins.json +trans.fr = public/language/fr/admin/appearance/skins.json +trans.gl = public/language/gl/admin/appearance/skins.json trans.he = public/language/he/admin/appearance/skins.json trans.hr = public/language/hr/admin/appearance/skins.json -trans.sc = public/language/sc/admin/appearance/skins.json -trans.sk = public/language/sk/admin/appearance/skins.json -trans.uk = public/language/uk/admin/appearance/skins.json -trans.vi = public/language/vi/admin/appearance/skins.json -trans.bn = public/language/bn/admin/appearance/skins.json -trans.ms = public/language/ms/admin/appearance/skins.json -trans.pl = public/language/pl/admin/appearance/skins.json -trans.sv = public/language/sv/admin/appearance/skins.json -trans.fi = public/language/fi/admin/appearance/skins.json -trans.da = public/language/da/admin/appearance/skins.json trans.hu = public/language/hu/admin/appearance/skins.json trans.hy = public/language/hy/admin/appearance/skins.json trans.id = public/language/id/admin/appearance/skins.json -trans.lv = public/language/lv/admin/appearance/skins.json -trans.sq_AL = public/language/sq-AL/admin/appearance/skins.json -trans.cs = public/language/cs/admin/appearance/skins.json -trans.de = public/language/de/admin/appearance/skins.json -trans.ko = public/language/ko/admin/appearance/skins.json -trans.sl = public/language/sl/admin/appearance/skins.json -trans.zh_TW = public/language/zh-TW/admin/appearance/skins.json -trans.bg = public/language/bg/admin/appearance/skins.json -trans.en_US = public/language/en-US/admin/appearance/skins.json -trans.es = public/language/es/admin/appearance/skins.json -trans.sr = public/language/sr/admin/appearance/skins.json -trans.zh_CN = public/language/zh-CN/admin/appearance/skins.json -trans.en@pirate = public/language/en-x-pirate/admin/appearance/skins.json trans.it = public/language/it/admin/appearance/skins.json trans.ja = public/language/ja/admin/appearance/skins.json +trans.ko = public/language/ko/admin/appearance/skins.json +trans.lt = public/language/lt/admin/appearance/skins.json +trans.lv = public/language/lv/admin/appearance/skins.json +trans.ms = public/language/ms/admin/appearance/skins.json trans.nb = public/language/nb/admin/appearance/skins.json -trans.fr = public/language/fr/admin/appearance/skins.json -trans.fa_IR = public/language/fa-IR/admin/appearance/skins.json -trans.gl = public/language/gl/admin/appearance/skins.json +trans.nl = public/language/nl/admin/appearance/skins.json +trans.nn_NO = public/language/nn-NO/admin/appearance/skins.json +trans.pl = public/language/pl/admin/appearance/skins.json +trans.pt_BR = public/language/pt-BR/admin/appearance/skins.json +trans.pt_PT = public/language/pt-PT/admin/appearance/skins.json trans.ro = public/language/ro/admin/appearance/skins.json trans.ru = public/language/ru/admin/appearance/skins.json trans.rw = public/language/rw/admin/appearance/skins.json -trans.el = public/language/el/admin/appearance/skins.json -trans.lt = public/language/lt/admin/appearance/skins.json -trans.nl = public/language/nl/admin/appearance/skins.json -trans.pt_BR = public/language/pt-BR/admin/appearance/skins.json -trans.pt_PT = public/language/pt-PT/admin/appearance/skins.json +trans.sc = public/language/sc/admin/appearance/skins.json +trans.sk = public/language/sk/admin/appearance/skins.json +trans.sl = public/language/sl/admin/appearance/skins.json +trans.sq_AL = public/language/sq-AL/admin/appearance/skins.json +trans.sr = public/language/sr/admin/appearance/skins.json +trans.sv = public/language/sv/admin/appearance/skins.json trans.th = public/language/th/admin/appearance/skins.json trans.tr = public/language/tr/admin/appearance/skins.json -trans.ar = public/language/ar/admin/appearance/skins.json +trans.uk = public/language/uk/admin/appearance/skins.json +trans.ur = public/language/ur/admin/appearance/skins.json +trans.vi = public/language/vi/admin/appearance/skins.json +trans.zh_CN = public/language/zh-CN/admin/appearance/skins.json +trans.zh_TW = public/language/zh-TW/admin/appearance/skins.json [o:nodebb:p:nodebb:r:admin-appearance-themes] file_filter = public/language//admin/appearance/themes.json source_file = public/language/en-GB/admin/appearance/themes.json source_lang = en_GB type = KEYVALUEJSON -trans.sq_AL = public/language/sq-AL/admin/appearance/themes.json trans.ar = public/language/ar/admin/appearance/themes.json +trans.az = public/language/az/admin/appearance/themes.json trans.bg = public/language/bg/admin/appearance/themes.json trans.bn = public/language/bn/admin/appearance/themes.json -trans.en_US = public/language/en-US/admin/appearance/themes.json -trans.fa_IR = public/language/fa-IR/admin/appearance/themes.json -trans.pt_BR = public/language/pt-BR/admin/appearance/themes.json -trans.ru = public/language/ru/admin/appearance/themes.json -trans.sv = public/language/sv/admin/appearance/themes.json trans.cs = public/language/cs/admin/appearance/themes.json trans.da = public/language/da/admin/appearance/themes.json -trans.sk = public/language/sk/admin/appearance/themes.json -trans.zh_CN = public/language/zh-CN/admin/appearance/themes.json +trans.de = public/language/de/admin/appearance/themes.json +trans.el = public/language/el/admin/appearance/themes.json +trans.en_US = public/language/en-US/admin/appearance/themes.json +trans.en@pirate = public/language/en-x-pirate/admin/appearance/themes.json +trans.es = public/language/es/admin/appearance/themes.json trans.et = public/language/et/admin/appearance/themes.json -trans.ja = public/language/ja/admin/appearance/themes.json -trans.sl = public/language/sl/admin/appearance/themes.json -trans.sr = public/language/sr/admin/appearance/themes.json +trans.fa_IR = public/language/fa-IR/admin/appearance/themes.json +trans.fi = public/language/fi/admin/appearance/themes.json +trans.fr = public/language/fr/admin/appearance/themes.json +trans.gl = public/language/gl/admin/appearance/themes.json +trans.he = public/language/he/admin/appearance/themes.json trans.hr = public/language/hr/admin/appearance/themes.json trans.hu = public/language/hu/admin/appearance/themes.json -trans.ms = public/language/ms/admin/appearance/themes.json -trans.sc = public/language/sc/admin/appearance/themes.json -trans.th = public/language/th/admin/appearance/themes.json -trans.lt = public/language/lt/admin/appearance/themes.json -trans.el = public/language/el/admin/appearance/themes.json -trans.en@pirate = public/language/en-x-pirate/admin/appearance/themes.json -trans.fi = public/language/fi/admin/appearance/themes.json -trans.he = public/language/he/admin/appearance/themes.json trans.hy = public/language/hy/admin/appearance/themes.json trans.id = public/language/id/admin/appearance/themes.json -trans.ko = public/language/ko/admin/appearance/themes.json -trans.nb = public/language/nb/admin/appearance/themes.json -trans.pl = public/language/pl/admin/appearance/themes.json -trans.pt_PT = public/language/pt-PT/admin/appearance/themes.json -trans.tr = public/language/tr/admin/appearance/themes.json -trans.fr = public/language/fr/admin/appearance/themes.json -trans.nl = public/language/nl/admin/appearance/themes.json -trans.ro = public/language/ro/admin/appearance/themes.json -trans.uk = public/language/uk/admin/appearance/themes.json -trans.de = public/language/de/admin/appearance/themes.json -trans.es = public/language/es/admin/appearance/themes.json -trans.gl = public/language/gl/admin/appearance/themes.json trans.it = public/language/it/admin/appearance/themes.json +trans.ja = public/language/ja/admin/appearance/themes.json +trans.ko = public/language/ko/admin/appearance/themes.json +trans.lt = public/language/lt/admin/appearance/themes.json trans.lv = public/language/lv/admin/appearance/themes.json -trans.vi = public/language/vi/admin/appearance/themes.json +trans.ms = public/language/ms/admin/appearance/themes.json +trans.nb = public/language/nb/admin/appearance/themes.json +trans.nl = public/language/nl/admin/appearance/themes.json +trans.nn_NO = public/language/nn-NO/admin/appearance/themes.json +trans.pl = public/language/pl/admin/appearance/themes.json +trans.pt_BR = public/language/pt-BR/admin/appearance/themes.json +trans.pt_PT = public/language/pt-PT/admin/appearance/themes.json +trans.ro = public/language/ro/admin/appearance/themes.json +trans.ru = public/language/ru/admin/appearance/themes.json trans.rw = public/language/rw/admin/appearance/themes.json +trans.sc = public/language/sc/admin/appearance/themes.json +trans.sk = public/language/sk/admin/appearance/themes.json +trans.sl = public/language/sl/admin/appearance/themes.json +trans.sq_AL = public/language/sq-AL/admin/appearance/themes.json +trans.sr = public/language/sr/admin/appearance/themes.json +trans.sv = public/language/sv/admin/appearance/themes.json +trans.th = public/language/th/admin/appearance/themes.json +trans.tr = public/language/tr/admin/appearance/themes.json +trans.uk = public/language/uk/admin/appearance/themes.json +trans.ur = public/language/ur/admin/appearance/themes.json +trans.vi = public/language/vi/admin/appearance/themes.json +trans.zh_CN = public/language/zh-CN/admin/appearance/themes.json trans.zh_TW = public/language/zh-TW/admin/appearance/themes.json [o:nodebb:p:nodebb:r:admin-dashboard] @@ -474,103 +556,109 @@ file_filter = public/language//admin/dashboard.json source_file = public/language/en-GB/admin/dashboard.json source_lang = en_GB type = KEYVALUEJSON -trans.bn = public/language/bn/admin/dashboard.json -trans.en_US = public/language/en-US/admin/dashboard.json -trans.fa_IR = public/language/fa-IR/admin/dashboard.json -trans.fr = public/language/fr/admin/dashboard.json -trans.hu = public/language/hu/admin/dashboard.json -trans.nl = public/language/nl/admin/dashboard.json -trans.pl = public/language/pl/admin/dashboard.json -trans.bg = public/language/bg/admin/dashboard.json -trans.el = public/language/el/admin/dashboard.json -trans.gl = public/language/gl/admin/dashboard.json -trans.hy = public/language/hy/admin/dashboard.json -trans.id = public/language/id/admin/dashboard.json -trans.ja = public/language/ja/admin/dashboard.json -trans.pt_BR = public/language/pt-BR/admin/dashboard.json -trans.zh_CN = public/language/zh-CN/admin/dashboard.json -trans.zh_TW = public/language/zh-TW/admin/dashboard.json -trans.uk = public/language/uk/admin/dashboard.json trans.ar = public/language/ar/admin/dashboard.json +trans.az = public/language/az/admin/dashboard.json +trans.bg = public/language/bg/admin/dashboard.json +trans.bn = public/language/bn/admin/dashboard.json +trans.cs = public/language/cs/admin/dashboard.json +trans.da = public/language/da/admin/dashboard.json trans.de = public/language/de/admin/dashboard.json +trans.el = public/language/el/admin/dashboard.json +trans.en_US = public/language/en-US/admin/dashboard.json trans.en@pirate = public/language/en-x-pirate/admin/dashboard.json trans.es = public/language/es/admin/dashboard.json +trans.et = public/language/et/admin/dashboard.json +trans.fa_IR = public/language/fa-IR/admin/dashboard.json +trans.fi = public/language/fi/admin/dashboard.json +trans.fr = public/language/fr/admin/dashboard.json +trans.gl = public/language/gl/admin/dashboard.json +trans.he = public/language/he/admin/dashboard.json +trans.hr = public/language/hr/admin/dashboard.json +trans.hu = public/language/hu/admin/dashboard.json +trans.hy = public/language/hy/admin/dashboard.json +trans.id = public/language/id/admin/dashboard.json +trans.it = public/language/it/admin/dashboard.json +trans.ja = public/language/ja/admin/dashboard.json trans.ko = public/language/ko/admin/dashboard.json -trans.sv = public/language/sv/admin/dashboard.json +trans.lt = public/language/lt/admin/dashboard.json trans.lv = public/language/lv/admin/dashboard.json trans.ms = public/language/ms/admin/dashboard.json -trans.ru = public/language/ru/admin/dashboard.json -trans.sl = public/language/sl/admin/dashboard.json -trans.sq_AL = public/language/sq-AL/admin/dashboard.json -trans.da = public/language/da/admin/dashboard.json -trans.lt = public/language/lt/admin/dashboard.json -trans.he = public/language/he/admin/dashboard.json -trans.sr = public/language/sr/admin/dashboard.json -trans.vi = public/language/vi/admin/dashboard.json +trans.nb = public/language/nb/admin/dashboard.json +trans.nl = public/language/nl/admin/dashboard.json +trans.nn_NO = public/language/nn-NO/admin/dashboard.json +trans.pl = public/language/pl/admin/dashboard.json +trans.pt_BR = public/language/pt-BR/admin/dashboard.json trans.pt_PT = public/language/pt-PT/admin/dashboard.json trans.ro = public/language/ro/admin/dashboard.json +trans.ru = public/language/ru/admin/dashboard.json trans.rw = public/language/rw/admin/dashboard.json trans.sc = public/language/sc/admin/dashboard.json -trans.th = public/language/th/admin/dashboard.json trans.sk = public/language/sk/admin/dashboard.json +trans.sl = public/language/sl/admin/dashboard.json +trans.sq_AL = public/language/sq-AL/admin/dashboard.json +trans.sr = public/language/sr/admin/dashboard.json +trans.sv = public/language/sv/admin/dashboard.json +trans.th = public/language/th/admin/dashboard.json trans.tr = public/language/tr/admin/dashboard.json -trans.cs = public/language/cs/admin/dashboard.json -trans.et = public/language/et/admin/dashboard.json -trans.fi = public/language/fi/admin/dashboard.json -trans.hr = public/language/hr/admin/dashboard.json -trans.it = public/language/it/admin/dashboard.json -trans.nb = public/language/nb/admin/dashboard.json +trans.uk = public/language/uk/admin/dashboard.json +trans.ur = public/language/ur/admin/dashboard.json +trans.vi = public/language/vi/admin/dashboard.json +trans.zh_CN = public/language/zh-CN/admin/dashboard.json +trans.zh_TW = public/language/zh-TW/admin/dashboard.json [o:nodebb:p:nodebb:r:admin-development-info] file_filter = public/language//admin/development/info.json source_file = public/language/en-GB/admin/development/info.json source_lang = en_GB type = KEYVALUEJSON -trans.de = public/language/de/admin/development/info.json -trans.et = public/language/et/admin/development/info.json -trans.hr = public/language/hr/admin/development/info.json -trans.ms = public/language/ms/admin/development/info.json -trans.pl = public/language/pl/admin/development/info.json -trans.pt_BR = public/language/pt-BR/admin/development/info.json -trans.ro = public/language/ro/admin/development/info.json -trans.rw = public/language/rw/admin/development/info.json -trans.sl = public/language/sl/admin/development/info.json -trans.sr = public/language/sr/admin/development/info.json -trans.uk = public/language/uk/admin/development/info.json +trans.ar = public/language/ar/admin/development/info.json +trans.az = public/language/az/admin/development/info.json +trans.bg = public/language/bg/admin/development/info.json +trans.bn = public/language/bn/admin/development/info.json +trans.cs = public/language/cs/admin/development/info.json trans.da = public/language/da/admin/development/info.json +trans.de = public/language/de/admin/development/info.json +trans.el = public/language/el/admin/development/info.json +trans.en_US = public/language/en-US/admin/development/info.json trans.en@pirate = public/language/en-x-pirate/admin/development/info.json trans.es = public/language/es/admin/development/info.json -trans.fi = public/language/fi/admin/development/info.json -trans.it = public/language/it/admin/development/info.json -trans.lt = public/language/lt/admin/development/info.json -trans.th = public/language/th/admin/development/info.json -trans.ar = public/language/ar/admin/development/info.json -trans.bn = public/language/bn/admin/development/info.json +trans.et = public/language/et/admin/development/info.json trans.fa_IR = public/language/fa-IR/admin/development/info.json -trans.hu = public/language/hu/admin/development/info.json -trans.id = public/language/id/admin/development/info.json -trans.lv = public/language/lv/admin/development/info.json -trans.gl = public/language/gl/admin/development/info.json -trans.hy = public/language/hy/admin/development/info.json -trans.zh_CN = public/language/zh-CN/admin/development/info.json -trans.cs = public/language/cs/admin/development/info.json -trans.ja = public/language/ja/admin/development/info.json -trans.nb = public/language/nb/admin/development/info.json -trans.sq_AL = public/language/sq-AL/admin/development/info.json -trans.sv = public/language/sv/admin/development/info.json -trans.bg = public/language/bg/admin/development/info.json -trans.he = public/language/he/admin/development/info.json -trans.sk = public/language/sk/admin/development/info.json -trans.el = public/language/el/admin/development/info.json +trans.fi = public/language/fi/admin/development/info.json trans.fr = public/language/fr/admin/development/info.json -trans.ru = public/language/ru/admin/development/info.json -trans.sc = public/language/sc/admin/development/info.json -trans.tr = public/language/tr/admin/development/info.json -trans.en_US = public/language/en-US/admin/development/info.json +trans.gl = public/language/gl/admin/development/info.json +trans.he = public/language/he/admin/development/info.json +trans.hr = public/language/hr/admin/development/info.json +trans.hu = public/language/hu/admin/development/info.json +trans.hy = public/language/hy/admin/development/info.json +trans.id = public/language/id/admin/development/info.json +trans.it = public/language/it/admin/development/info.json +trans.ja = public/language/ja/admin/development/info.json trans.ko = public/language/ko/admin/development/info.json +trans.lt = public/language/lt/admin/development/info.json +trans.lv = public/language/lv/admin/development/info.json +trans.ms = public/language/ms/admin/development/info.json +trans.nb = public/language/nb/admin/development/info.json trans.nl = public/language/nl/admin/development/info.json +trans.nn_NO = public/language/nn-NO/admin/development/info.json +trans.pl = public/language/pl/admin/development/info.json +trans.pt_BR = public/language/pt-BR/admin/development/info.json trans.pt_PT = public/language/pt-PT/admin/development/info.json +trans.ro = public/language/ro/admin/development/info.json +trans.ru = public/language/ru/admin/development/info.json +trans.rw = public/language/rw/admin/development/info.json +trans.sc = public/language/sc/admin/development/info.json +trans.sk = public/language/sk/admin/development/info.json +trans.sl = public/language/sl/admin/development/info.json +trans.sq_AL = public/language/sq-AL/admin/development/info.json +trans.sr = public/language/sr/admin/development/info.json +trans.sv = public/language/sv/admin/development/info.json +trans.th = public/language/th/admin/development/info.json +trans.tr = public/language/tr/admin/development/info.json +trans.uk = public/language/uk/admin/development/info.json +trans.ur = public/language/ur/admin/development/info.json trans.vi = public/language/vi/admin/development/info.json +trans.zh_CN = public/language/zh-CN/admin/development/info.json trans.zh_TW = public/language/zh-TW/admin/development/info.json [o:nodebb:p:nodebb:r:admin-development-logger] @@ -578,832 +666,1045 @@ file_filter = public/language//admin/development/logger.json source_file = public/language/en-GB/admin/development/logger.json source_lang = en_GB type = KEYVALUEJSON -trans.de = public/language/de/admin/development/logger.json -trans.fr = public/language/fr/admin/development/logger.json -trans.gl = public/language/gl/admin/development/logger.json -trans.hr = public/language/hr/admin/development/logger.json -trans.sl = public/language/sl/admin/development/logger.json -trans.vi = public/language/vi/admin/development/logger.json -trans.zh_TW = public/language/zh-TW/admin/development/logger.json trans.ar = public/language/ar/admin/development/logger.json -trans.he = public/language/he/admin/development/logger.json -trans.id = public/language/id/admin/development/logger.json -trans.ko = public/language/ko/admin/development/logger.json -trans.lt = public/language/lt/admin/development/logger.json -trans.nb = public/language/nb/admin/development/logger.json -trans.pt_BR = public/language/pt-BR/admin/development/logger.json -trans.ro = public/language/ro/admin/development/logger.json -trans.fi = public/language/fi/admin/development/logger.json -trans.sc = public/language/sc/admin/development/logger.json -trans.ru = public/language/ru/admin/development/logger.json -trans.sq_AL = public/language/sq-AL/admin/development/logger.json -trans.th = public/language/th/admin/development/logger.json -trans.hy = public/language/hy/admin/development/logger.json -trans.fa_IR = public/language/fa-IR/admin/development/logger.json -trans.it = public/language/it/admin/development/logger.json -trans.lv = public/language/lv/admin/development/logger.json -trans.nl = public/language/nl/admin/development/logger.json -trans.pt_PT = public/language/pt-PT/admin/development/logger.json -trans.sk = public/language/sk/admin/development/logger.json -trans.sv = public/language/sv/admin/development/logger.json -trans.el = public/language/el/admin/development/logger.json -trans.uk = public/language/uk/admin/development/logger.json -trans.ms = public/language/ms/admin/development/logger.json -trans.zh_CN = public/language/zh-CN/admin/development/logger.json +trans.az = public/language/az/admin/development/logger.json +trans.bg = public/language/bg/admin/development/logger.json trans.bn = public/language/bn/admin/development/logger.json -trans.et = public/language/et/admin/development/logger.json -trans.ja = public/language/ja/admin/development/logger.json +trans.cs = public/language/cs/admin/development/logger.json trans.da = public/language/da/admin/development/logger.json +trans.de = public/language/de/admin/development/logger.json +trans.el = public/language/el/admin/development/logger.json +trans.en_US = public/language/en-US/admin/development/logger.json trans.en@pirate = public/language/en-x-pirate/admin/development/logger.json trans.es = public/language/es/admin/development/logger.json -trans.cs = public/language/cs/admin/development/logger.json -trans.en_US = public/language/en-US/admin/development/logger.json +trans.et = public/language/et/admin/development/logger.json +trans.fa_IR = public/language/fa-IR/admin/development/logger.json +trans.fi = public/language/fi/admin/development/logger.json +trans.fr = public/language/fr/admin/development/logger.json +trans.gl = public/language/gl/admin/development/logger.json +trans.he = public/language/he/admin/development/logger.json +trans.hr = public/language/hr/admin/development/logger.json trans.hu = public/language/hu/admin/development/logger.json +trans.hy = public/language/hy/admin/development/logger.json +trans.id = public/language/id/admin/development/logger.json +trans.it = public/language/it/admin/development/logger.json +trans.ja = public/language/ja/admin/development/logger.json +trans.ko = public/language/ko/admin/development/logger.json +trans.lt = public/language/lt/admin/development/logger.json +trans.lv = public/language/lv/admin/development/logger.json +trans.ms = public/language/ms/admin/development/logger.json +trans.nb = public/language/nb/admin/development/logger.json +trans.nl = public/language/nl/admin/development/logger.json +trans.nn_NO = public/language/nn-NO/admin/development/logger.json trans.pl = public/language/pl/admin/development/logger.json +trans.pt_BR = public/language/pt-BR/admin/development/logger.json +trans.pt_PT = public/language/pt-PT/admin/development/logger.json +trans.ro = public/language/ro/admin/development/logger.json +trans.ru = public/language/ru/admin/development/logger.json trans.rw = public/language/rw/admin/development/logger.json +trans.sc = public/language/sc/admin/development/logger.json +trans.sk = public/language/sk/admin/development/logger.json +trans.sl = public/language/sl/admin/development/logger.json +trans.sq_AL = public/language/sq-AL/admin/development/logger.json trans.sr = public/language/sr/admin/development/logger.json +trans.sv = public/language/sv/admin/development/logger.json +trans.th = public/language/th/admin/development/logger.json trans.tr = public/language/tr/admin/development/logger.json -trans.bg = public/language/bg/admin/development/logger.json +trans.uk = public/language/uk/admin/development/logger.json +trans.ur = public/language/ur/admin/development/logger.json +trans.vi = public/language/vi/admin/development/logger.json +trans.zh_CN = public/language/zh-CN/admin/development/logger.json +trans.zh_TW = public/language/zh-TW/admin/development/logger.json [o:nodebb:p:nodebb:r:admin-extend-plugins] file_filter = public/language//admin/extend/plugins.json source_file = public/language/en-GB/admin/extend/plugins.json source_lang = en_GB type = KEYVALUEJSON -trans.en@pirate = public/language/en-x-pirate/admin/extend/plugins.json -trans.et = public/language/et/admin/extend/plugins.json -trans.hr = public/language/hr/admin/extend/plugins.json -trans.hy = public/language/hy/admin/extend/plugins.json -trans.tr = public/language/tr/admin/extend/plugins.json -trans.it = public/language/it/admin/extend/plugins.json -trans.lv = public/language/lv/admin/extend/plugins.json -trans.sl = public/language/sl/admin/extend/plugins.json -trans.th = public/language/th/admin/extend/plugins.json -trans.en_US = public/language/en-US/admin/extend/plugins.json -trans.he = public/language/he/admin/extend/plugins.json -trans.nb = public/language/nb/admin/extend/plugins.json -trans.sk = public/language/sk/admin/extend/plugins.json -trans.uk = public/language/uk/admin/extend/plugins.json -trans.es = public/language/es/admin/extend/plugins.json -trans.lt = public/language/lt/admin/extend/plugins.json -trans.sv = public/language/sv/admin/extend/plugins.json -trans.nl = public/language/nl/admin/extend/plugins.json -trans.pt_PT = public/language/pt-PT/admin/extend/plugins.json trans.ar = public/language/ar/admin/extend/plugins.json -trans.cs = public/language/cs/admin/extend/plugins.json -trans.fi = public/language/fi/admin/extend/plugins.json -trans.id = public/language/id/admin/extend/plugins.json -trans.ja = public/language/ja/admin/extend/plugins.json -trans.ko = public/language/ko/admin/extend/plugins.json -trans.ru = public/language/ru/admin/extend/plugins.json -trans.sr = public/language/sr/admin/extend/plugins.json +trans.az = public/language/az/admin/extend/plugins.json +trans.bg = public/language/bg/admin/extend/plugins.json trans.bn = public/language/bn/admin/extend/plugins.json +trans.cs = public/language/cs/admin/extend/plugins.json +trans.da = public/language/da/admin/extend/plugins.json trans.de = public/language/de/admin/extend/plugins.json trans.el = public/language/el/admin/extend/plugins.json -trans.ms = public/language/ms/admin/extend/plugins.json -trans.pt_BR = public/language/pt-BR/admin/extend/plugins.json -trans.sq_AL = public/language/sq-AL/admin/extend/plugins.json -trans.zh_TW = public/language/zh-TW/admin/extend/plugins.json -trans.da = public/language/da/admin/extend/plugins.json +trans.en_US = public/language/en-US/admin/extend/plugins.json +trans.en@pirate = public/language/en-x-pirate/admin/extend/plugins.json +trans.es = public/language/es/admin/extend/plugins.json +trans.et = public/language/et/admin/extend/plugins.json trans.fa_IR = public/language/fa-IR/admin/extend/plugins.json -trans.gl = public/language/gl/admin/extend/plugins.json -trans.hu = public/language/hu/admin/extend/plugins.json -trans.sc = public/language/sc/admin/extend/plugins.json -trans.vi = public/language/vi/admin/extend/plugins.json -trans.bg = public/language/bg/admin/extend/plugins.json +trans.fi = public/language/fi/admin/extend/plugins.json trans.fr = public/language/fr/admin/extend/plugins.json +trans.gl = public/language/gl/admin/extend/plugins.json +trans.he = public/language/he/admin/extend/plugins.json +trans.hr = public/language/hr/admin/extend/plugins.json +trans.hu = public/language/hu/admin/extend/plugins.json +trans.hy = public/language/hy/admin/extend/plugins.json +trans.id = public/language/id/admin/extend/plugins.json +trans.it = public/language/it/admin/extend/plugins.json +trans.ja = public/language/ja/admin/extend/plugins.json +trans.ko = public/language/ko/admin/extend/plugins.json +trans.lt = public/language/lt/admin/extend/plugins.json +trans.lv = public/language/lv/admin/extend/plugins.json +trans.ms = public/language/ms/admin/extend/plugins.json +trans.nb = public/language/nb/admin/extend/plugins.json +trans.nl = public/language/nl/admin/extend/plugins.json +trans.nn_NO = public/language/nn-NO/admin/extend/plugins.json trans.pl = public/language/pl/admin/extend/plugins.json +trans.pt_BR = public/language/pt-BR/admin/extend/plugins.json +trans.pt_PT = public/language/pt-PT/admin/extend/plugins.json trans.ro = public/language/ro/admin/extend/plugins.json +trans.ru = public/language/ru/admin/extend/plugins.json trans.rw = public/language/rw/admin/extend/plugins.json +trans.sc = public/language/sc/admin/extend/plugins.json +trans.sk = public/language/sk/admin/extend/plugins.json +trans.sl = public/language/sl/admin/extend/plugins.json +trans.sq_AL = public/language/sq-AL/admin/extend/plugins.json +trans.sr = public/language/sr/admin/extend/plugins.json +trans.sv = public/language/sv/admin/extend/plugins.json +trans.th = public/language/th/admin/extend/plugins.json +trans.tr = public/language/tr/admin/extend/plugins.json +trans.uk = public/language/uk/admin/extend/plugins.json +trans.ur = public/language/ur/admin/extend/plugins.json +trans.vi = public/language/vi/admin/extend/plugins.json trans.zh_CN = public/language/zh-CN/admin/extend/plugins.json +trans.zh_TW = public/language/zh-TW/admin/extend/plugins.json [o:nodebb:p:nodebb:r:admin-extend-rewards] file_filter = public/language//admin/extend/rewards.json source_file = public/language/en-GB/admin/extend/rewards.json source_lang = en_GB type = KEYVALUEJSON -trans.ms = public/language/ms/admin/extend/rewards.json trans.ar = public/language/ar/admin/extend/rewards.json +trans.az = public/language/az/admin/extend/rewards.json +trans.bg = public/language/bg/admin/extend/rewards.json +trans.bn = public/language/bn/admin/extend/rewards.json +trans.cs = public/language/cs/admin/extend/rewards.json +trans.da = public/language/da/admin/extend/rewards.json +trans.de = public/language/de/admin/extend/rewards.json +trans.el = public/language/el/admin/extend/rewards.json +trans.en_US = public/language/en-US/admin/extend/rewards.json +trans.en@pirate = public/language/en-x-pirate/admin/extend/rewards.json +trans.es = public/language/es/admin/extend/rewards.json +trans.et = public/language/et/admin/extend/rewards.json +trans.fa_IR = public/language/fa-IR/admin/extend/rewards.json trans.fi = public/language/fi/admin/extend/rewards.json trans.fr = public/language/fr/admin/extend/rewards.json -trans.sr = public/language/sr/admin/extend/rewards.json +trans.gl = public/language/gl/admin/extend/rewards.json +trans.he = public/language/he/admin/extend/rewards.json +trans.hr = public/language/hr/admin/extend/rewards.json +trans.hu = public/language/hu/admin/extend/rewards.json +trans.hy = public/language/hy/admin/extend/rewards.json trans.id = public/language/id/admin/extend/rewards.json +trans.it = public/language/it/admin/extend/rewards.json +trans.ja = public/language/ja/admin/extend/rewards.json +trans.ko = public/language/ko/admin/extend/rewards.json +trans.lt = public/language/lt/admin/extend/rewards.json +trans.lv = public/language/lv/admin/extend/rewards.json +trans.ms = public/language/ms/admin/extend/rewards.json +trans.nb = public/language/nb/admin/extend/rewards.json +trans.nl = public/language/nl/admin/extend/rewards.json +trans.nn_NO = public/language/nn-NO/admin/extend/rewards.json +trans.pl = public/language/pl/admin/extend/rewards.json trans.pt_BR = public/language/pt-BR/admin/extend/rewards.json -trans.sq_AL = public/language/sq-AL/admin/extend/rewards.json trans.pt_PT = public/language/pt-PT/admin/extend/rewards.json trans.ro = public/language/ro/admin/extend/rewards.json trans.ru = public/language/ru/admin/extend/rewards.json -trans.sk = public/language/sk/admin/extend/rewards.json -trans.es = public/language/es/admin/extend/rewards.json -trans.lt = public/language/lt/admin/extend/rewards.json -trans.nl = public/language/nl/admin/extend/rewards.json -trans.en@pirate = public/language/en-x-pirate/admin/extend/rewards.json -trans.hr = public/language/hr/admin/extend/rewards.json -trans.ja = public/language/ja/admin/extend/rewards.json -trans.ko = public/language/ko/admin/extend/rewards.json -trans.nb = public/language/nb/admin/extend/rewards.json -trans.bg = public/language/bg/admin/extend/rewards.json -trans.bn = public/language/bn/admin/extend/rewards.json -trans.da = public/language/da/admin/extend/rewards.json -trans.hy = public/language/hy/admin/extend/rewards.json -trans.pl = public/language/pl/admin/extend/rewards.json -trans.sc = public/language/sc/admin/extend/rewards.json -trans.it = public/language/it/admin/extend/rewards.json -trans.tr = public/language/tr/admin/extend/rewards.json -trans.uk = public/language/uk/admin/extend/rewards.json -trans.vi = public/language/vi/admin/extend/rewards.json -trans.zh_CN = public/language/zh-CN/admin/extend/rewards.json -trans.en_US = public/language/en-US/admin/extend/rewards.json -trans.fa_IR = public/language/fa-IR/admin/extend/rewards.json -trans.he = public/language/he/admin/extend/rewards.json -trans.zh_TW = public/language/zh-TW/admin/extend/rewards.json -trans.lv = public/language/lv/admin/extend/rewards.json -trans.sl = public/language/sl/admin/extend/rewards.json -trans.cs = public/language/cs/admin/extend/rewards.json -trans.el = public/language/el/admin/extend/rewards.json -trans.et = public/language/et/admin/extend/rewards.json trans.rw = public/language/rw/admin/extend/rewards.json +trans.sc = public/language/sc/admin/extend/rewards.json +trans.sk = public/language/sk/admin/extend/rewards.json +trans.sl = public/language/sl/admin/extend/rewards.json +trans.sq_AL = public/language/sq-AL/admin/extend/rewards.json +trans.sr = public/language/sr/admin/extend/rewards.json trans.sv = public/language/sv/admin/extend/rewards.json trans.th = public/language/th/admin/extend/rewards.json -trans.de = public/language/de/admin/extend/rewards.json -trans.gl = public/language/gl/admin/extend/rewards.json -trans.hu = public/language/hu/admin/extend/rewards.json +trans.tr = public/language/tr/admin/extend/rewards.json +trans.uk = public/language/uk/admin/extend/rewards.json +trans.ur = public/language/ur/admin/extend/rewards.json +trans.vi = public/language/vi/admin/extend/rewards.json +trans.zh_CN = public/language/zh-CN/admin/extend/rewards.json +trans.zh_TW = public/language/zh-TW/admin/extend/rewards.json [o:nodebb:p:nodebb:r:admin-extend-widgets] file_filter = public/language//admin/extend/widgets.json source_file = public/language/en-GB/admin/extend/widgets.json source_lang = en_GB type = KEYVALUEJSON -trans.bn = public/language/bn/admin/extend/widgets.json -trans.el = public/language/el/admin/extend/widgets.json -trans.id = public/language/id/admin/extend/widgets.json -trans.nb = public/language/nb/admin/extend/widgets.json -trans.ro = public/language/ro/admin/extend/widgets.json -trans.rw = public/language/rw/admin/extend/widgets.json trans.ar = public/language/ar/admin/extend/widgets.json -trans.hy = public/language/hy/admin/extend/widgets.json -trans.lv = public/language/lv/admin/extend/widgets.json -trans.ru = public/language/ru/admin/extend/widgets.json -trans.sc = public/language/sc/admin/extend/widgets.json -trans.sr = public/language/sr/admin/extend/widgets.json -trans.tr = public/language/tr/admin/extend/widgets.json -trans.vi = public/language/vi/admin/extend/widgets.json -trans.fr = public/language/fr/admin/extend/widgets.json -trans.fa_IR = public/language/fa-IR/admin/extend/widgets.json -trans.ko = public/language/ko/admin/extend/widgets.json -trans.lt = public/language/lt/admin/extend/widgets.json -trans.sq_AL = public/language/sq-AL/admin/extend/widgets.json -trans.uk = public/language/uk/admin/extend/widgets.json +trans.az = public/language/az/admin/extend/widgets.json trans.bg = public/language/bg/admin/extend/widgets.json -trans.de = public/language/de/admin/extend/widgets.json -trans.ms = public/language/ms/admin/extend/widgets.json -trans.nl = public/language/nl/admin/extend/widgets.json -trans.pt_BR = public/language/pt-BR/admin/extend/widgets.json -trans.sk = public/language/sk/admin/extend/widgets.json -trans.zh_CN = public/language/zh-CN/admin/extend/widgets.json +trans.bn = public/language/bn/admin/extend/widgets.json +trans.cs = public/language/cs/admin/extend/widgets.json trans.da = public/language/da/admin/extend/widgets.json -trans.hu = public/language/hu/admin/extend/widgets.json -trans.ja = public/language/ja/admin/extend/widgets.json -trans.th = public/language/th/admin/extend/widgets.json +trans.de = public/language/de/admin/extend/widgets.json +trans.el = public/language/el/admin/extend/widgets.json +trans.en_US = public/language/en-US/admin/extend/widgets.json +trans.en@pirate = public/language/en-x-pirate/admin/extend/widgets.json +trans.es = public/language/es/admin/extend/widgets.json trans.et = public/language/et/admin/extend/widgets.json +trans.fa_IR = public/language/fa-IR/admin/extend/widgets.json +trans.fi = public/language/fi/admin/extend/widgets.json +trans.fr = public/language/fr/admin/extend/widgets.json trans.gl = public/language/gl/admin/extend/widgets.json trans.he = public/language/he/admin/extend/widgets.json -trans.it = public/language/it/admin/extend/widgets.json -trans.pl = public/language/pl/admin/extend/widgets.json -trans.zh_TW = public/language/zh-TW/admin/extend/widgets.json -trans.en@pirate = public/language/en-x-pirate/admin/extend/widgets.json -trans.fi = public/language/fi/admin/extend/widgets.json trans.hr = public/language/hr/admin/extend/widgets.json -trans.sl = public/language/sl/admin/extend/widgets.json -trans.sv = public/language/sv/admin/extend/widgets.json -trans.cs = public/language/cs/admin/extend/widgets.json -trans.es = public/language/es/admin/extend/widgets.json +trans.hu = public/language/hu/admin/extend/widgets.json +trans.hy = public/language/hy/admin/extend/widgets.json +trans.id = public/language/id/admin/extend/widgets.json +trans.it = public/language/it/admin/extend/widgets.json +trans.ja = public/language/ja/admin/extend/widgets.json +trans.ko = public/language/ko/admin/extend/widgets.json +trans.lt = public/language/lt/admin/extend/widgets.json +trans.lv = public/language/lv/admin/extend/widgets.json +trans.ms = public/language/ms/admin/extend/widgets.json +trans.nb = public/language/nb/admin/extend/widgets.json +trans.nl = public/language/nl/admin/extend/widgets.json +trans.nn_NO = public/language/nn-NO/admin/extend/widgets.json +trans.pl = public/language/pl/admin/extend/widgets.json +trans.pt_BR = public/language/pt-BR/admin/extend/widgets.json trans.pt_PT = public/language/pt-PT/admin/extend/widgets.json -trans.en_US = public/language/en-US/admin/extend/widgets.json +trans.ro = public/language/ro/admin/extend/widgets.json +trans.ru = public/language/ru/admin/extend/widgets.json +trans.rw = public/language/rw/admin/extend/widgets.json +trans.sc = public/language/sc/admin/extend/widgets.json +trans.sk = public/language/sk/admin/extend/widgets.json +trans.sl = public/language/sl/admin/extend/widgets.json +trans.sq_AL = public/language/sq-AL/admin/extend/widgets.json +trans.sr = public/language/sr/admin/extend/widgets.json +trans.sv = public/language/sv/admin/extend/widgets.json +trans.th = public/language/th/admin/extend/widgets.json +trans.tr = public/language/tr/admin/extend/widgets.json +trans.uk = public/language/uk/admin/extend/widgets.json +trans.ur = public/language/ur/admin/extend/widgets.json +trans.vi = public/language/vi/admin/extend/widgets.json +trans.zh_CN = public/language/zh-CN/admin/extend/widgets.json +trans.zh_TW = public/language/zh-TW/admin/extend/widgets.json [o:nodebb:p:nodebb:r:admin-manage-admins-mods] file_filter = public/language//admin/manage/admins-mods.json source_file = public/language/en-GB/admin/manage/admins-mods.json source_lang = en_GB type = KEYVALUEJSON -trans.hu = public/language/hu/admin/manage/admins-mods.json -trans.nb = public/language/nb/admin/manage/admins-mods.json -trans.ru = public/language/ru/admin/manage/admins-mods.json -trans.fr = public/language/fr/admin/manage/admins-mods.json -trans.he = public/language/he/admin/manage/admins-mods.json -trans.lv = public/language/lv/admin/manage/admins-mods.json -trans.sc = public/language/sc/admin/manage/admins-mods.json -trans.vi = public/language/vi/admin/manage/admins-mods.json -trans.es = public/language/es/admin/manage/admins-mods.json -trans.lt = public/language/lt/admin/manage/admins-mods.json -trans.de = public/language/de/admin/manage/admins-mods.json -trans.ja = public/language/ja/admin/manage/admins-mods.json -trans.pl = public/language/pl/admin/manage/admins-mods.json -trans.sq_AL = public/language/sq-AL/admin/manage/admins-mods.json -trans.sr = public/language/sr/admin/manage/admins-mods.json -trans.zh_TW = public/language/zh-TW/admin/manage/admins-mods.json -trans.id = public/language/id/admin/manage/admins-mods.json -trans.ko = public/language/ko/admin/manage/admins-mods.json -trans.gl = public/language/gl/admin/manage/admins-mods.json -trans.hr = public/language/hr/admin/manage/admins-mods.json -trans.hy = public/language/hy/admin/manage/admins-mods.json -trans.rw = public/language/rw/admin/manage/admins-mods.json -trans.bn = public/language/bn/admin/manage/admins-mods.json -trans.fi = public/language/fi/admin/manage/admins-mods.json -trans.ms = public/language/ms/admin/manage/admins-mods.json -trans.pt_BR = public/language/pt-BR/admin/manage/admins-mods.json -trans.pt_PT = public/language/pt-PT/admin/manage/admins-mods.json -trans.sv = public/language/sv/admin/manage/admins-mods.json -trans.th = public/language/th/admin/manage/admins-mods.json -trans.uk = public/language/uk/admin/manage/admins-mods.json trans.ar = public/language/ar/admin/manage/admins-mods.json +trans.az = public/language/az/admin/manage/admins-mods.json trans.bg = public/language/bg/admin/manage/admins-mods.json -trans.el = public/language/el/admin/manage/admins-mods.json -trans.en@pirate = public/language/en-x-pirate/admin/manage/admins-mods.json -trans.en_US = public/language/en-US/admin/manage/admins-mods.json -trans.it = public/language/it/admin/manage/admins-mods.json -trans.nl = public/language/nl/admin/manage/admins-mods.json -trans.ro = public/language/ro/admin/manage/admins-mods.json +trans.bn = public/language/bn/admin/manage/admins-mods.json trans.cs = public/language/cs/admin/manage/admins-mods.json trans.da = public/language/da/admin/manage/admins-mods.json -trans.zh_CN = public/language/zh-CN/admin/manage/admins-mods.json -trans.sk = public/language/sk/admin/manage/admins-mods.json -trans.sl = public/language/sl/admin/manage/admins-mods.json -trans.tr = public/language/tr/admin/manage/admins-mods.json +trans.de = public/language/de/admin/manage/admins-mods.json +trans.el = public/language/el/admin/manage/admins-mods.json +trans.en_US = public/language/en-US/admin/manage/admins-mods.json +trans.en@pirate = public/language/en-x-pirate/admin/manage/admins-mods.json +trans.es = public/language/es/admin/manage/admins-mods.json trans.et = public/language/et/admin/manage/admins-mods.json trans.fa_IR = public/language/fa-IR/admin/manage/admins-mods.json +trans.fi = public/language/fi/admin/manage/admins-mods.json +trans.fr = public/language/fr/admin/manage/admins-mods.json +trans.gl = public/language/gl/admin/manage/admins-mods.json +trans.he = public/language/he/admin/manage/admins-mods.json +trans.hr = public/language/hr/admin/manage/admins-mods.json +trans.hu = public/language/hu/admin/manage/admins-mods.json +trans.hy = public/language/hy/admin/manage/admins-mods.json +trans.id = public/language/id/admin/manage/admins-mods.json +trans.it = public/language/it/admin/manage/admins-mods.json +trans.ja = public/language/ja/admin/manage/admins-mods.json +trans.ko = public/language/ko/admin/manage/admins-mods.json +trans.lt = public/language/lt/admin/manage/admins-mods.json +trans.lv = public/language/lv/admin/manage/admins-mods.json +trans.ms = public/language/ms/admin/manage/admins-mods.json +trans.nb = public/language/nb/admin/manage/admins-mods.json +trans.nl = public/language/nl/admin/manage/admins-mods.json +trans.nn_NO = public/language/nn-NO/admin/manage/admins-mods.json +trans.pl = public/language/pl/admin/manage/admins-mods.json +trans.pt_BR = public/language/pt-BR/admin/manage/admins-mods.json +trans.pt_PT = public/language/pt-PT/admin/manage/admins-mods.json +trans.ro = public/language/ro/admin/manage/admins-mods.json +trans.ru = public/language/ru/admin/manage/admins-mods.json +trans.rw = public/language/rw/admin/manage/admins-mods.json +trans.sc = public/language/sc/admin/manage/admins-mods.json +trans.sk = public/language/sk/admin/manage/admins-mods.json +trans.sl = public/language/sl/admin/manage/admins-mods.json +trans.sq_AL = public/language/sq-AL/admin/manage/admins-mods.json +trans.sr = public/language/sr/admin/manage/admins-mods.json +trans.sv = public/language/sv/admin/manage/admins-mods.json +trans.th = public/language/th/admin/manage/admins-mods.json +trans.tr = public/language/tr/admin/manage/admins-mods.json +trans.uk = public/language/uk/admin/manage/admins-mods.json +trans.ur = public/language/ur/admin/manage/admins-mods.json +trans.vi = public/language/vi/admin/manage/admins-mods.json +trans.zh_CN = public/language/zh-CN/admin/manage/admins-mods.json +trans.zh_TW = public/language/zh-TW/admin/manage/admins-mods.json [o:nodebb:p:nodebb:r:admin-manage-categories] file_filter = public/language//admin/manage/categories.json source_file = public/language/en-GB/admin/manage/categories.json source_lang = en_GB type = KEYVALUEJSON -trans.es = public/language/es/admin/manage/categories.json -trans.gl = public/language/gl/admin/manage/categories.json -trans.pt_PT = public/language/pt-PT/admin/manage/categories.json -trans.sc = public/language/sc/admin/manage/categories.json -trans.zh_TW = public/language/zh-TW/admin/manage/categories.json -trans.bg = public/language/bg/admin/manage/categories.json -trans.hu = public/language/hu/admin/manage/categories.json -trans.hy = public/language/hy/admin/manage/categories.json -trans.sk = public/language/sk/admin/manage/categories.json -trans.uk = public/language/uk/admin/manage/categories.json -trans.vi = public/language/vi/admin/manage/categories.json -trans.bn = public/language/bn/admin/manage/categories.json -trans.en_US = public/language/en-US/admin/manage/categories.json -trans.fr = public/language/fr/admin/manage/categories.json -trans.it = public/language/it/admin/manage/categories.json -trans.nb = public/language/nb/admin/manage/categories.json -trans.ru = public/language/ru/admin/manage/categories.json -trans.sr = public/language/sr/admin/manage/categories.json -trans.fa_IR = public/language/fa-IR/admin/manage/categories.json -trans.id = public/language/id/admin/manage/categories.json -trans.ms = public/language/ms/admin/manage/categories.json -trans.pl = public/language/pl/admin/manage/categories.json -trans.tr = public/language/tr/admin/manage/categories.json -trans.zh_CN = public/language/zh-CN/admin/manage/categories.json -trans.lt = public/language/lt/admin/manage/categories.json -trans.sl = public/language/sl/admin/manage/categories.json -trans.sv = public/language/sv/admin/manage/categories.json -trans.rw = public/language/rw/admin/manage/categories.json -trans.el = public/language/el/admin/manage/categories.json -trans.et = public/language/et/admin/manage/categories.json -trans.fi = public/language/fi/admin/manage/categories.json -trans.he = public/language/he/admin/manage/categories.json -trans.ja = public/language/ja/admin/manage/categories.json -trans.ko = public/language/ko/admin/manage/categories.json -trans.ro = public/language/ro/admin/manage/categories.json -trans.cs = public/language/cs/admin/manage/categories.json -trans.sq_AL = public/language/sq-AL/admin/manage/categories.json -trans.th = public/language/th/admin/manage/categories.json -trans.pt_BR = public/language/pt-BR/admin/manage/categories.json trans.ar = public/language/ar/admin/manage/categories.json +trans.az = public/language/az/admin/manage/categories.json +trans.bg = public/language/bg/admin/manage/categories.json +trans.bn = public/language/bn/admin/manage/categories.json +trans.cs = public/language/cs/admin/manage/categories.json trans.da = public/language/da/admin/manage/categories.json trans.de = public/language/de/admin/manage/categories.json +trans.el = public/language/el/admin/manage/categories.json +trans.en_US = public/language/en-US/admin/manage/categories.json trans.en@pirate = public/language/en-x-pirate/admin/manage/categories.json +trans.es = public/language/es/admin/manage/categories.json +trans.et = public/language/et/admin/manage/categories.json +trans.fa_IR = public/language/fa-IR/admin/manage/categories.json +trans.fi = public/language/fi/admin/manage/categories.json +trans.fr = public/language/fr/admin/manage/categories.json +trans.gl = public/language/gl/admin/manage/categories.json +trans.he = public/language/he/admin/manage/categories.json trans.hr = public/language/hr/admin/manage/categories.json +trans.hu = public/language/hu/admin/manage/categories.json +trans.hy = public/language/hy/admin/manage/categories.json +trans.id = public/language/id/admin/manage/categories.json +trans.it = public/language/it/admin/manage/categories.json +trans.ja = public/language/ja/admin/manage/categories.json +trans.ko = public/language/ko/admin/manage/categories.json +trans.lt = public/language/lt/admin/manage/categories.json trans.lv = public/language/lv/admin/manage/categories.json +trans.ms = public/language/ms/admin/manage/categories.json +trans.nb = public/language/nb/admin/manage/categories.json trans.nl = public/language/nl/admin/manage/categories.json +trans.nn_NO = public/language/nn-NO/admin/manage/categories.json +trans.pl = public/language/pl/admin/manage/categories.json +trans.pt_BR = public/language/pt-BR/admin/manage/categories.json +trans.pt_PT = public/language/pt-PT/admin/manage/categories.json +trans.ro = public/language/ro/admin/manage/categories.json +trans.ru = public/language/ru/admin/manage/categories.json +trans.rw = public/language/rw/admin/manage/categories.json +trans.sc = public/language/sc/admin/manage/categories.json +trans.sk = public/language/sk/admin/manage/categories.json +trans.sl = public/language/sl/admin/manage/categories.json +trans.sq_AL = public/language/sq-AL/admin/manage/categories.json +trans.sr = public/language/sr/admin/manage/categories.json +trans.sv = public/language/sv/admin/manage/categories.json +trans.th = public/language/th/admin/manage/categories.json +trans.tr = public/language/tr/admin/manage/categories.json +trans.uk = public/language/uk/admin/manage/categories.json +trans.ur = public/language/ur/admin/manage/categories.json +trans.vi = public/language/vi/admin/manage/categories.json +trans.zh_CN = public/language/zh-CN/admin/manage/categories.json +trans.zh_TW = public/language/zh-TW/admin/manage/categories.json [o:nodebb:p:nodebb:r:admin-manage-digest] file_filter = public/language//admin/manage/digest.json source_file = public/language/en-GB/admin/manage/digest.json source_lang = en_GB type = KEYVALUEJSON -trans.sr = public/language/sr/admin/manage/digest.json -trans.fi = public/language/fi/admin/manage/digest.json -trans.gl = public/language/gl/admin/manage/digest.json -trans.fr = public/language/fr/admin/manage/digest.json -trans.hu = public/language/hu/admin/manage/digest.json -trans.id = public/language/id/admin/manage/digest.json -trans.lv = public/language/lv/admin/manage/digest.json -trans.pl = public/language/pl/admin/manage/digest.json -trans.sl = public/language/sl/admin/manage/digest.json -trans.da = public/language/da/admin/manage/digest.json -trans.fa_IR = public/language/fa-IR/admin/manage/digest.json -trans.sq_AL = public/language/sq-AL/admin/manage/digest.json -trans.en@pirate = public/language/en-x-pirate/admin/manage/digest.json -trans.en_US = public/language/en-US/admin/manage/digest.json -trans.he = public/language/he/admin/manage/digest.json -trans.hr = public/language/hr/admin/manage/digest.json -trans.hy = public/language/hy/admin/manage/digest.json -trans.it = public/language/it/admin/manage/digest.json +trans.ar = public/language/ar/admin/manage/digest.json +trans.az = public/language/az/admin/manage/digest.json trans.bg = public/language/bg/admin/manage/digest.json trans.bn = public/language/bn/admin/manage/digest.json -trans.ro = public/language/ro/admin/manage/digest.json -trans.th = public/language/th/admin/manage/digest.json -trans.uk = public/language/uk/admin/manage/digest.json -trans.vi = public/language/vi/admin/manage/digest.json -trans.ms = public/language/ms/admin/manage/digest.json -trans.pt_BR = public/language/pt-BR/admin/manage/digest.json -trans.rw = public/language/rw/admin/manage/digest.json +trans.cs = public/language/cs/admin/manage/digest.json +trans.da = public/language/da/admin/manage/digest.json trans.de = public/language/de/admin/manage/digest.json trans.el = public/language/el/admin/manage/digest.json -trans.nl = public/language/nl/admin/manage/digest.json -trans.ru = public/language/ru/admin/manage/digest.json -trans.sv = public/language/sv/admin/manage/digest.json -trans.zh_TW = public/language/zh-TW/admin/manage/digest.json +trans.en_US = public/language/en-US/admin/manage/digest.json +trans.en@pirate = public/language/en-x-pirate/admin/manage/digest.json trans.es = public/language/es/admin/manage/digest.json -trans.lt = public/language/lt/admin/manage/digest.json -trans.ko = public/language/ko/admin/manage/digest.json -trans.zh_CN = public/language/zh-CN/admin/manage/digest.json -trans.ar = public/language/ar/admin/manage/digest.json -trans.ja = public/language/ja/admin/manage/digest.json -trans.nb = public/language/nb/admin/manage/digest.json -trans.sk = public/language/sk/admin/manage/digest.json -trans.pt_PT = public/language/pt-PT/admin/manage/digest.json -trans.sc = public/language/sc/admin/manage/digest.json -trans.tr = public/language/tr/admin/manage/digest.json -trans.cs = public/language/cs/admin/manage/digest.json trans.et = public/language/et/admin/manage/digest.json +trans.fa_IR = public/language/fa-IR/admin/manage/digest.json +trans.fi = public/language/fi/admin/manage/digest.json +trans.fr = public/language/fr/admin/manage/digest.json +trans.gl = public/language/gl/admin/manage/digest.json +trans.he = public/language/he/admin/manage/digest.json +trans.hr = public/language/hr/admin/manage/digest.json +trans.hu = public/language/hu/admin/manage/digest.json +trans.hy = public/language/hy/admin/manage/digest.json +trans.id = public/language/id/admin/manage/digest.json +trans.it = public/language/it/admin/manage/digest.json +trans.ja = public/language/ja/admin/manage/digest.json +trans.ko = public/language/ko/admin/manage/digest.json +trans.lt = public/language/lt/admin/manage/digest.json +trans.lv = public/language/lv/admin/manage/digest.json +trans.ms = public/language/ms/admin/manage/digest.json +trans.nb = public/language/nb/admin/manage/digest.json +trans.nl = public/language/nl/admin/manage/digest.json +trans.nn_NO = public/language/nn-NO/admin/manage/digest.json +trans.pl = public/language/pl/admin/manage/digest.json +trans.pt_BR = public/language/pt-BR/admin/manage/digest.json +trans.pt_PT = public/language/pt-PT/admin/manage/digest.json +trans.ro = public/language/ro/admin/manage/digest.json +trans.ru = public/language/ru/admin/manage/digest.json +trans.rw = public/language/rw/admin/manage/digest.json +trans.sc = public/language/sc/admin/manage/digest.json +trans.sk = public/language/sk/admin/manage/digest.json +trans.sl = public/language/sl/admin/manage/digest.json +trans.sq_AL = public/language/sq-AL/admin/manage/digest.json +trans.sr = public/language/sr/admin/manage/digest.json +trans.sv = public/language/sv/admin/manage/digest.json +trans.th = public/language/th/admin/manage/digest.json +trans.tr = public/language/tr/admin/manage/digest.json +trans.uk = public/language/uk/admin/manage/digest.json +trans.ur = public/language/ur/admin/manage/digest.json +trans.vi = public/language/vi/admin/manage/digest.json +trans.zh_CN = public/language/zh-CN/admin/manage/digest.json +trans.zh_TW = public/language/zh-TW/admin/manage/digest.json [o:nodebb:p:nodebb:r:admin-manage-groups] file_filter = public/language//admin/manage/groups.json source_file = public/language/en-GB/admin/manage/groups.json source_lang = en_GB type = KEYVALUEJSON -trans.pt_PT = public/language/pt-PT/admin/manage/groups.json -trans.tr = public/language/tr/admin/manage/groups.json -trans.uk = public/language/uk/admin/manage/groups.json -trans.zh_TW = public/language/zh-TW/admin/manage/groups.json -trans.nb = public/language/nb/admin/manage/groups.json -trans.id = public/language/id/admin/manage/groups.json -trans.lt = public/language/lt/admin/manage/groups.json -trans.pl = public/language/pl/admin/manage/groups.json -trans.sc = public/language/sc/admin/manage/groups.json -trans.hy = public/language/hy/admin/manage/groups.json -trans.he = public/language/he/admin/manage/groups.json -trans.ko = public/language/ko/admin/manage/groups.json -trans.sv = public/language/sv/admin/manage/groups.json -trans.bn = public/language/bn/admin/manage/groups.json -trans.es = public/language/es/admin/manage/groups.json -trans.ja = public/language/ja/admin/manage/groups.json -trans.th = public/language/th/admin/manage/groups.json -trans.cs = public/language/cs/admin/manage/groups.json -trans.fi = public/language/fi/admin/manage/groups.json -trans.hr = public/language/hr/admin/manage/groups.json -trans.it = public/language/it/admin/manage/groups.json -trans.en@pirate = public/language/en-x-pirate/admin/manage/groups.json -trans.bg = public/language/bg/admin/manage/groups.json -trans.hu = public/language/hu/admin/manage/groups.json -trans.pt_BR = public/language/pt-BR/admin/manage/groups.json -trans.ro = public/language/ro/admin/manage/groups.json -trans.ru = public/language/ru/admin/manage/groups.json -trans.sq_AL = public/language/sq-AL/admin/manage/groups.json -trans.vi = public/language/vi/admin/manage/groups.json trans.ar = public/language/ar/admin/manage/groups.json -trans.et = public/language/et/admin/manage/groups.json -trans.fa_IR = public/language/fa-IR/admin/manage/groups.json -trans.fr = public/language/fr/admin/manage/groups.json -trans.nl = public/language/nl/admin/manage/groups.json -trans.rw = public/language/rw/admin/manage/groups.json -trans.sl = public/language/sl/admin/manage/groups.json -trans.zh_CN = public/language/zh-CN/admin/manage/groups.json +trans.az = public/language/az/admin/manage/groups.json +trans.bg = public/language/bg/admin/manage/groups.json +trans.bn = public/language/bn/admin/manage/groups.json +trans.cs = public/language/cs/admin/manage/groups.json trans.da = public/language/da/admin/manage/groups.json +trans.de = public/language/de/admin/manage/groups.json trans.el = public/language/el/admin/manage/groups.json trans.en_US = public/language/en-US/admin/manage/groups.json +trans.en@pirate = public/language/en-x-pirate/admin/manage/groups.json +trans.es = public/language/es/admin/manage/groups.json +trans.et = public/language/et/admin/manage/groups.json +trans.fa_IR = public/language/fa-IR/admin/manage/groups.json +trans.fi = public/language/fi/admin/manage/groups.json +trans.fr = public/language/fr/admin/manage/groups.json trans.gl = public/language/gl/admin/manage/groups.json +trans.he = public/language/he/admin/manage/groups.json +trans.hr = public/language/hr/admin/manage/groups.json +trans.hu = public/language/hu/admin/manage/groups.json +trans.hy = public/language/hy/admin/manage/groups.json +trans.id = public/language/id/admin/manage/groups.json +trans.it = public/language/it/admin/manage/groups.json +trans.ja = public/language/ja/admin/manage/groups.json +trans.ko = public/language/ko/admin/manage/groups.json +trans.lt = public/language/lt/admin/manage/groups.json trans.lv = public/language/lv/admin/manage/groups.json trans.ms = public/language/ms/admin/manage/groups.json +trans.nb = public/language/nb/admin/manage/groups.json +trans.nl = public/language/nl/admin/manage/groups.json +trans.nn_NO = public/language/nn-NO/admin/manage/groups.json +trans.pl = public/language/pl/admin/manage/groups.json +trans.pt_BR = public/language/pt-BR/admin/manage/groups.json +trans.pt_PT = public/language/pt-PT/admin/manage/groups.json +trans.ro = public/language/ro/admin/manage/groups.json +trans.ru = public/language/ru/admin/manage/groups.json +trans.rw = public/language/rw/admin/manage/groups.json +trans.sc = public/language/sc/admin/manage/groups.json trans.sk = public/language/sk/admin/manage/groups.json +trans.sl = public/language/sl/admin/manage/groups.json +trans.sq_AL = public/language/sq-AL/admin/manage/groups.json trans.sr = public/language/sr/admin/manage/groups.json -trans.de = public/language/de/admin/manage/groups.json +trans.sv = public/language/sv/admin/manage/groups.json +trans.th = public/language/th/admin/manage/groups.json +trans.tr = public/language/tr/admin/manage/groups.json +trans.uk = public/language/uk/admin/manage/groups.json +trans.ur = public/language/ur/admin/manage/groups.json +trans.vi = public/language/vi/admin/manage/groups.json +trans.zh_CN = public/language/zh-CN/admin/manage/groups.json +trans.zh_TW = public/language/zh-TW/admin/manage/groups.json [o:nodebb:p:nodebb:r:admin-manage-privileges] file_filter = public/language//admin/manage/privileges.json source_file = public/language/en-GB/admin/manage/privileges.json source_lang = en_GB type = KEYVALUEJSON +trans.ar = public/language/ar/admin/manage/privileges.json +trans.az = public/language/az/admin/manage/privileges.json trans.bg = public/language/bg/admin/manage/privileges.json -trans.es = public/language/es/admin/manage/privileges.json -trans.fa_IR = public/language/fa-IR/admin/manage/privileges.json -trans.ms = public/language/ms/admin/manage/privileges.json -trans.ro = public/language/ro/admin/manage/privileges.json -trans.sl = public/language/sl/admin/manage/privileges.json -trans.el = public/language/el/admin/manage/privileges.json -trans.lt = public/language/lt/admin/manage/privileges.json -trans.pt_BR = public/language/pt-BR/admin/manage/privileges.json -trans.pt_PT = public/language/pt-PT/admin/manage/privileges.json -trans.hu = public/language/hu/admin/manage/privileges.json -trans.pl = public/language/pl/admin/manage/privileges.json -trans.sc = public/language/sc/admin/manage/privileges.json -trans.uk = public/language/uk/admin/manage/privileges.json trans.bn = public/language/bn/admin/manage/privileges.json trans.cs = public/language/cs/admin/manage/privileges.json trans.da = public/language/da/admin/manage/privileges.json -trans.en@pirate = public/language/en-x-pirate/admin/manage/privileges.json -trans.vi = public/language/vi/admin/manage/privileges.json +trans.de = public/language/de/admin/manage/privileges.json +trans.el = public/language/el/admin/manage/privileges.json trans.en_US = public/language/en-US/admin/manage/privileges.json -trans.hy = public/language/hy/admin/manage/privileges.json -trans.sr = public/language/sr/admin/manage/privileges.json -trans.ja = public/language/ja/admin/manage/privileges.json -trans.nb = public/language/nb/admin/manage/privileges.json -trans.nl = public/language/nl/admin/manage/privileges.json -trans.sv = public/language/sv/admin/manage/privileges.json +trans.en@pirate = public/language/en-x-pirate/admin/manage/privileges.json +trans.es = public/language/es/admin/manage/privileges.json trans.et = public/language/et/admin/manage/privileges.json +trans.fa_IR = public/language/fa-IR/admin/manage/privileges.json +trans.fi = public/language/fi/admin/manage/privileges.json trans.fr = public/language/fr/admin/manage/privileges.json +trans.gl = public/language/gl/admin/manage/privileges.json trans.he = public/language/he/admin/manage/privileges.json trans.hr = public/language/hr/admin/manage/privileges.json -trans.th = public/language/th/admin/manage/privileges.json -trans.sq_AL = public/language/sq-AL/admin/manage/privileges.json -trans.gl = public/language/gl/admin/manage/privileges.json -trans.ko = public/language/ko/admin/manage/privileges.json -trans.lv = public/language/lv/admin/manage/privileges.json -trans.sk = public/language/sk/admin/manage/privileges.json -trans.tr = public/language/tr/admin/manage/privileges.json -trans.fi = public/language/fi/admin/manage/privileges.json +trans.hu = public/language/hu/admin/manage/privileges.json +trans.hy = public/language/hy/admin/manage/privileges.json trans.id = public/language/id/admin/manage/privileges.json trans.it = public/language/it/admin/manage/privileges.json -trans.rw = public/language/rw/admin/manage/privileges.json -trans.zh_TW = public/language/zh-TW/admin/manage/privileges.json -trans.ar = public/language/ar/admin/manage/privileges.json -trans.de = public/language/de/admin/manage/privileges.json +trans.ja = public/language/ja/admin/manage/privileges.json +trans.ko = public/language/ko/admin/manage/privileges.json +trans.lt = public/language/lt/admin/manage/privileges.json +trans.lv = public/language/lv/admin/manage/privileges.json +trans.ms = public/language/ms/admin/manage/privileges.json +trans.nb = public/language/nb/admin/manage/privileges.json +trans.nl = public/language/nl/admin/manage/privileges.json +trans.nn_NO = public/language/nn-NO/admin/manage/privileges.json +trans.pl = public/language/pl/admin/manage/privileges.json +trans.pt_BR = public/language/pt-BR/admin/manage/privileges.json +trans.pt_PT = public/language/pt-PT/admin/manage/privileges.json +trans.ro = public/language/ro/admin/manage/privileges.json trans.ru = public/language/ru/admin/manage/privileges.json +trans.rw = public/language/rw/admin/manage/privileges.json +trans.sc = public/language/sc/admin/manage/privileges.json +trans.sk = public/language/sk/admin/manage/privileges.json +trans.sl = public/language/sl/admin/manage/privileges.json +trans.sq_AL = public/language/sq-AL/admin/manage/privileges.json +trans.sr = public/language/sr/admin/manage/privileges.json +trans.sv = public/language/sv/admin/manage/privileges.json +trans.th = public/language/th/admin/manage/privileges.json +trans.tr = public/language/tr/admin/manage/privileges.json +trans.uk = public/language/uk/admin/manage/privileges.json +trans.ur = public/language/ur/admin/manage/privileges.json +trans.vi = public/language/vi/admin/manage/privileges.json trans.zh_CN = public/language/zh-CN/admin/manage/privileges.json +trans.zh_TW = public/language/zh-TW/admin/manage/privileges.json [o:nodebb:p:nodebb:r:admin-manage-registration] file_filter = public/language//admin/manage/registration.json source_file = public/language/en-GB/admin/manage/registration.json source_lang = en_GB type = KEYVALUEJSON -trans.pl = public/language/pl/admin/manage/registration.json -trans.ro = public/language/ro/admin/manage/registration.json -trans.sk = public/language/sk/admin/manage/registration.json -trans.fi = public/language/fi/admin/manage/registration.json -trans.hu = public/language/hu/admin/manage/registration.json -trans.ms = public/language/ms/admin/manage/registration.json -trans.ru = public/language/ru/admin/manage/registration.json -trans.sc = public/language/sc/admin/manage/registration.json -trans.sr = public/language/sr/admin/manage/registration.json -trans.th = public/language/th/admin/manage/registration.json -trans.zh_TW = public/language/zh-TW/admin/manage/registration.json -trans.da = public/language/da/admin/manage/registration.json -trans.et = public/language/et/admin/manage/registration.json -trans.it = public/language/it/admin/manage/registration.json -trans.nb = public/language/nb/admin/manage/registration.json -trans.pt_BR = public/language/pt-BR/admin/manage/registration.json -trans.hy = public/language/hy/admin/manage/registration.json -trans.uk = public/language/uk/admin/manage/registration.json -trans.sq_AL = public/language/sq-AL/admin/manage/registration.json trans.ar = public/language/ar/admin/manage/registration.json -trans.es = public/language/es/admin/manage/registration.json -trans.he = public/language/he/admin/manage/registration.json -trans.id = public/language/id/admin/manage/registration.json -trans.nl = public/language/nl/admin/manage/registration.json -trans.en@pirate = public/language/en-x-pirate/admin/manage/registration.json -trans.en_US = public/language/en-US/admin/manage/registration.json -trans.rw = public/language/rw/admin/manage/registration.json -trans.sv = public/language/sv/admin/manage/registration.json -trans.tr = public/language/tr/admin/manage/registration.json -trans.vi = public/language/vi/admin/manage/registration.json +trans.az = public/language/az/admin/manage/registration.json trans.bg = public/language/bg/admin/manage/registration.json -trans.cs = public/language/cs/admin/manage/registration.json -trans.fa_IR = public/language/fa-IR/admin/manage/registration.json -trans.fr = public/language/fr/admin/manage/registration.json -trans.lt = public/language/lt/admin/manage/registration.json -trans.ja = public/language/ja/admin/manage/registration.json -trans.ko = public/language/ko/admin/manage/registration.json -trans.lv = public/language/lv/admin/manage/registration.json trans.bn = public/language/bn/admin/manage/registration.json +trans.cs = public/language/cs/admin/manage/registration.json +trans.da = public/language/da/admin/manage/registration.json trans.de = public/language/de/admin/manage/registration.json trans.el = public/language/el/admin/manage/registration.json +trans.en_US = public/language/en-US/admin/manage/registration.json +trans.en@pirate = public/language/en-x-pirate/admin/manage/registration.json +trans.es = public/language/es/admin/manage/registration.json +trans.et = public/language/et/admin/manage/registration.json +trans.fa_IR = public/language/fa-IR/admin/manage/registration.json +trans.fi = public/language/fi/admin/manage/registration.json +trans.fr = public/language/fr/admin/manage/registration.json trans.gl = public/language/gl/admin/manage/registration.json +trans.he = public/language/he/admin/manage/registration.json trans.hr = public/language/hr/admin/manage/registration.json +trans.hu = public/language/hu/admin/manage/registration.json +trans.hy = public/language/hy/admin/manage/registration.json +trans.id = public/language/id/admin/manage/registration.json +trans.it = public/language/it/admin/manage/registration.json +trans.ja = public/language/ja/admin/manage/registration.json +trans.ko = public/language/ko/admin/manage/registration.json +trans.lt = public/language/lt/admin/manage/registration.json +trans.lv = public/language/lv/admin/manage/registration.json +trans.ms = public/language/ms/admin/manage/registration.json +trans.nb = public/language/nb/admin/manage/registration.json +trans.nl = public/language/nl/admin/manage/registration.json +trans.nn_NO = public/language/nn-NO/admin/manage/registration.json +trans.pl = public/language/pl/admin/manage/registration.json +trans.pt_BR = public/language/pt-BR/admin/manage/registration.json trans.pt_PT = public/language/pt-PT/admin/manage/registration.json +trans.ro = public/language/ro/admin/manage/registration.json +trans.ru = public/language/ru/admin/manage/registration.json +trans.rw = public/language/rw/admin/manage/registration.json +trans.sc = public/language/sc/admin/manage/registration.json +trans.sk = public/language/sk/admin/manage/registration.json trans.sl = public/language/sl/admin/manage/registration.json +trans.sq_AL = public/language/sq-AL/admin/manage/registration.json +trans.sr = public/language/sr/admin/manage/registration.json +trans.sv = public/language/sv/admin/manage/registration.json +trans.th = public/language/th/admin/manage/registration.json +trans.tr = public/language/tr/admin/manage/registration.json +trans.uk = public/language/uk/admin/manage/registration.json +trans.ur = public/language/ur/admin/manage/registration.json +trans.vi = public/language/vi/admin/manage/registration.json trans.zh_CN = public/language/zh-CN/admin/manage/registration.json +trans.zh_TW = public/language/zh-TW/admin/manage/registration.json [o:nodebb:p:nodebb:r:admin-manage-tags] file_filter = public/language//admin/manage/tags.json source_file = public/language/en-GB/admin/manage/tags.json source_lang = en_GB type = KEYVALUEJSON -trans.zh_TW = public/language/zh-TW/admin/manage/tags.json -trans.bg = public/language/bg/admin/manage/tags.json -trans.da = public/language/da/admin/manage/tags.json -trans.en_US = public/language/en-US/admin/manage/tags.json -trans.hu = public/language/hu/admin/manage/tags.json -trans.nb = public/language/nb/admin/manage/tags.json -trans.ru = public/language/ru/admin/manage/tags.json -trans.sq_AL = public/language/sq-AL/admin/manage/tags.json -trans.de = public/language/de/admin/manage/tags.json -trans.fi = public/language/fi/admin/manage/tags.json -trans.hr = public/language/hr/admin/manage/tags.json -trans.ko = public/language/ko/admin/manage/tags.json -trans.ms = public/language/ms/admin/manage/tags.json -trans.th = public/language/th/admin/manage/tags.json trans.ar = public/language/ar/admin/manage/tags.json -trans.el = public/language/el/admin/manage/tags.json -trans.es = public/language/es/admin/manage/tags.json -trans.hy = public/language/hy/admin/manage/tags.json -trans.ja = public/language/ja/admin/manage/tags.json -trans.cs = public/language/cs/admin/manage/tags.json -trans.pl = public/language/pl/admin/manage/tags.json -trans.ro = public/language/ro/admin/manage/tags.json -trans.rw = public/language/rw/admin/manage/tags.json +trans.az = public/language/az/admin/manage/tags.json +trans.bg = public/language/bg/admin/manage/tags.json trans.bn = public/language/bn/admin/manage/tags.json -trans.fa_IR = public/language/fa-IR/admin/manage/tags.json -trans.zh_CN = public/language/zh-CN/admin/manage/tags.json +trans.cs = public/language/cs/admin/manage/tags.json +trans.da = public/language/da/admin/manage/tags.json +trans.de = public/language/de/admin/manage/tags.json +trans.el = public/language/el/admin/manage/tags.json +trans.en_US = public/language/en-US/admin/manage/tags.json +trans.en@pirate = public/language/en-x-pirate/admin/manage/tags.json +trans.es = public/language/es/admin/manage/tags.json trans.et = public/language/et/admin/manage/tags.json +trans.fa_IR = public/language/fa-IR/admin/manage/tags.json +trans.fi = public/language/fi/admin/manage/tags.json trans.fr = public/language/fr/admin/manage/tags.json trans.gl = public/language/gl/admin/manage/tags.json +trans.he = public/language/he/admin/manage/tags.json +trans.hr = public/language/hr/admin/manage/tags.json +trans.hu = public/language/hu/admin/manage/tags.json +trans.hy = public/language/hy/admin/manage/tags.json trans.id = public/language/id/admin/manage/tags.json +trans.it = public/language/it/admin/manage/tags.json +trans.ja = public/language/ja/admin/manage/tags.json +trans.ko = public/language/ko/admin/manage/tags.json trans.lt = public/language/lt/admin/manage/tags.json -trans.sv = public/language/sv/admin/manage/tags.json -trans.tr = public/language/tr/admin/manage/tags.json -trans.uk = public/language/uk/admin/manage/tags.json trans.lv = public/language/lv/admin/manage/tags.json +trans.ms = public/language/ms/admin/manage/tags.json +trans.nb = public/language/nb/admin/manage/tags.json trans.nl = public/language/nl/admin/manage/tags.json +trans.nn_NO = public/language/nn-NO/admin/manage/tags.json +trans.pl = public/language/pl/admin/manage/tags.json trans.pt_BR = public/language/pt-BR/admin/manage/tags.json trans.pt_PT = public/language/pt-PT/admin/manage/tags.json +trans.ro = public/language/ro/admin/manage/tags.json +trans.ru = public/language/ru/admin/manage/tags.json +trans.rw = public/language/rw/admin/manage/tags.json trans.sc = public/language/sc/admin/manage/tags.json trans.sk = public/language/sk/admin/manage/tags.json trans.sl = public/language/sl/admin/manage/tags.json -trans.en@pirate = public/language/en-x-pirate/admin/manage/tags.json -trans.he = public/language/he/admin/manage/tags.json -trans.it = public/language/it/admin/manage/tags.json +trans.sq_AL = public/language/sq-AL/admin/manage/tags.json trans.sr = public/language/sr/admin/manage/tags.json +trans.sv = public/language/sv/admin/manage/tags.json +trans.th = public/language/th/admin/manage/tags.json +trans.tr = public/language/tr/admin/manage/tags.json +trans.uk = public/language/uk/admin/manage/tags.json +trans.ur = public/language/ur/admin/manage/tags.json trans.vi = public/language/vi/admin/manage/tags.json +trans.zh_CN = public/language/zh-CN/admin/manage/tags.json +trans.zh_TW = public/language/zh-TW/admin/manage/tags.json [o:nodebb:p:nodebb:r:admin-manage-uploads] file_filter = public/language//admin/manage/uploads.json source_file = public/language/en-GB/admin/manage/uploads.json source_lang = en_GB type = KEYVALUEJSON -trans.ms = public/language/ms/admin/manage/uploads.json -trans.nb = public/language/nb/admin/manage/uploads.json -trans.tr = public/language/tr/admin/manage/uploads.json +trans.ar = public/language/ar/admin/manage/uploads.json +trans.az = public/language/az/admin/manage/uploads.json trans.bg = public/language/bg/admin/manage/uploads.json trans.bn = public/language/bn/admin/manage/uploads.json -trans.en@pirate = public/language/en-x-pirate/admin/manage/uploads.json -trans.lt = public/language/lt/admin/manage/uploads.json -trans.sq_AL = public/language/sq-AL/admin/manage/uploads.json +trans.cs = public/language/cs/admin/manage/uploads.json +trans.da = public/language/da/admin/manage/uploads.json +trans.de = public/language/de/admin/manage/uploads.json trans.el = public/language/el/admin/manage/uploads.json trans.en_US = public/language/en-US/admin/manage/uploads.json -trans.fi = public/language/fi/admin/manage/uploads.json -trans.hr = public/language/hr/admin/manage/uploads.json -trans.sv = public/language/sv/admin/manage/uploads.json -trans.ar = public/language/ar/admin/manage/uploads.json -trans.de = public/language/de/admin/manage/uploads.json -trans.fr = public/language/fr/admin/manage/uploads.json -trans.he = public/language/he/admin/manage/uploads.json -trans.ro = public/language/ro/admin/manage/uploads.json -trans.rw = public/language/rw/admin/manage/uploads.json -trans.gl = public/language/gl/admin/manage/uploads.json -trans.nl = public/language/nl/admin/manage/uploads.json -trans.pl = public/language/pl/admin/manage/uploads.json -trans.pt_BR = public/language/pt-BR/admin/manage/uploads.json -trans.sc = public/language/sc/admin/manage/uploads.json -trans.th = public/language/th/admin/manage/uploads.json +trans.en@pirate = public/language/en-x-pirate/admin/manage/uploads.json trans.es = public/language/es/admin/manage/uploads.json trans.et = public/language/et/admin/manage/uploads.json -trans.lv = public/language/lv/admin/manage/uploads.json -trans.pt_PT = public/language/pt-PT/admin/manage/uploads.json -trans.sr = public/language/sr/admin/manage/uploads.json -trans.uk = public/language/uk/admin/manage/uploads.json -trans.vi = public/language/vi/admin/manage/uploads.json -trans.cs = public/language/cs/admin/manage/uploads.json -trans.ru = public/language/ru/admin/manage/uploads.json -trans.sk = public/language/sk/admin/manage/uploads.json -trans.sl = public/language/sl/admin/manage/uploads.json trans.fa_IR = public/language/fa-IR/admin/manage/uploads.json +trans.fi = public/language/fi/admin/manage/uploads.json +trans.fr = public/language/fr/admin/manage/uploads.json +trans.gl = public/language/gl/admin/manage/uploads.json +trans.he = public/language/he/admin/manage/uploads.json +trans.hr = public/language/hr/admin/manage/uploads.json trans.hu = public/language/hu/admin/manage/uploads.json trans.hy = public/language/hy/admin/manage/uploads.json -trans.zh_CN = public/language/zh-CN/admin/manage/uploads.json -trans.ko = public/language/ko/admin/manage/uploads.json -trans.zh_TW = public/language/zh-TW/admin/manage/uploads.json -trans.da = public/language/da/admin/manage/uploads.json trans.id = public/language/id/admin/manage/uploads.json trans.it = public/language/it/admin/manage/uploads.json trans.ja = public/language/ja/admin/manage/uploads.json +trans.ko = public/language/ko/admin/manage/uploads.json +trans.lt = public/language/lt/admin/manage/uploads.json +trans.lv = public/language/lv/admin/manage/uploads.json +trans.ms = public/language/ms/admin/manage/uploads.json +trans.nb = public/language/nb/admin/manage/uploads.json +trans.nl = public/language/nl/admin/manage/uploads.json +trans.nn_NO = public/language/nn-NO/admin/manage/uploads.json +trans.pl = public/language/pl/admin/manage/uploads.json +trans.pt_BR = public/language/pt-BR/admin/manage/uploads.json +trans.pt_PT = public/language/pt-PT/admin/manage/uploads.json +trans.ro = public/language/ro/admin/manage/uploads.json +trans.ru = public/language/ru/admin/manage/uploads.json +trans.rw = public/language/rw/admin/manage/uploads.json +trans.sc = public/language/sc/admin/manage/uploads.json +trans.sk = public/language/sk/admin/manage/uploads.json +trans.sl = public/language/sl/admin/manage/uploads.json +trans.sq_AL = public/language/sq-AL/admin/manage/uploads.json +trans.sr = public/language/sr/admin/manage/uploads.json +trans.sv = public/language/sv/admin/manage/uploads.json +trans.th = public/language/th/admin/manage/uploads.json +trans.tr = public/language/tr/admin/manage/uploads.json +trans.uk = public/language/uk/admin/manage/uploads.json +trans.ur = public/language/ur/admin/manage/uploads.json +trans.vi = public/language/vi/admin/manage/uploads.json +trans.zh_CN = public/language/zh-CN/admin/manage/uploads.json +trans.zh_TW = public/language/zh-TW/admin/manage/uploads.json + +[o:nodebb:p:nodebb:r:admin-manage-user-custom-reasons] +file_filter = public/language//admin/manage/custom-reasons.json +source_file = public/language/en-GB/admin/manage/custom-reasons.json +source_lang = en_GB +type = KEYVALUEJSON +trans.ar = public/language/ar/admin/manage/custom-reasons.json +trans.az = public/language/az/admin/manage/custom-reasons.json +trans.bg = public/language/bg/admin/manage/custom-reasons.json +trans.bn = public/language/bn/admin/manage/custom-reasons.json +trans.cs = public/language/cs/admin/manage/custom-reasons.json +trans.da = public/language/da/admin/manage/custom-reasons.json +trans.de = public/language/de/admin/manage/custom-reasons.json +trans.el = public/language/el/admin/manage/custom-reasons.json +trans.en_US = public/language/en-US/admin/manage/custom-reasons.json +trans.en@pirate = public/language/en-x-pirate/admin/manage/custom-reasons.json +trans.es = public/language/es/admin/manage/custom-reasons.json +trans.et = public/language/et/admin/manage/custom-reasons.json +trans.fa_IR = public/language/fa-IR/admin/manage/custom-reasons.json +trans.fi = public/language/fi/admin/manage/custom-reasons.json +trans.fr = public/language/fr/admin/manage/custom-reasons.json +trans.gl = public/language/gl/admin/manage/custom-reasons.json +trans.he = public/language/he/admin/manage/custom-reasons.json +trans.hr = public/language/hr/admin/manage/custom-reasons.json +trans.hu = public/language/hu/admin/manage/custom-reasons.json +trans.hy = public/language/hy/admin/manage/custom-reasons.json +trans.id = public/language/id/admin/manage/custom-reasons.json +trans.it = public/language/it/admin/manage/custom-reasons.json +trans.ja = public/language/ja/admin/manage/custom-reasons.json +trans.ko = public/language/ko/admin/manage/custom-reasons.json +trans.lt = public/language/lt/admin/manage/custom-reasons.json +trans.lv = public/language/lv/admin/manage/custom-reasons.json +trans.ms = public/language/ms/admin/manage/custom-reasons.json +trans.nb = public/language/nb/admin/manage/custom-reasons.json +trans.nl = public/language/nl/admin/manage/custom-reasons.json +trans.nn_NO = public/language/nn-NO/admin/manage/custom-reasons.json +trans.pl = public/language/pl/admin/manage/custom-reasons.json +trans.pt_BR = public/language/pt-BR/admin/manage/custom-reasons.json +trans.pt_PT = public/language/pt-PT/admin/manage/custom-reasons.json +trans.ro = public/language/ro/admin/manage/custom-reasons.json +trans.ru = public/language/ru/admin/manage/custom-reasons.json +trans.rw = public/language/rw/admin/manage/custom-reasons.json +trans.sc = public/language/sc/admin/manage/custom-reasons.json +trans.sk = public/language/sk/admin/manage/custom-reasons.json +trans.sl = public/language/sl/admin/manage/custom-reasons.json +trans.sq_AL = public/language/sq-AL/admin/manage/custom-reasons.json +trans.sr = public/language/sr/admin/manage/custom-reasons.json +trans.sv = public/language/sv/admin/manage/custom-reasons.json +trans.th = public/language/th/admin/manage/custom-reasons.json +trans.tr = public/language/tr/admin/manage/custom-reasons.json +trans.uk = public/language/uk/admin/manage/custom-reasons.json +trans.ur = public/language/ur/admin/manage/custom-reasons.json +trans.vi = public/language/vi/admin/manage/custom-reasons.json +trans.zh_CN = public/language/zh-CN/admin/manage/custom-reasons.json +trans.zh_TW = public/language/zh-TW/admin/manage/custom-reasons.json + +[o:nodebb:p:nodebb:r:admin-manage-user-custom-fields] +file_filter = public/language//admin/manage/user-custom-fields.json +source_file = public/language/en-GB/admin/manage/user-custom-fields.json +source_lang = en_GB +type = KEYVALUEJSON +trans.ar = public/language/ar/admin/manage/user-custom-fields.json +trans.az = public/language/az/admin/manage/user-custom-fields.json +trans.bg = public/language/bg/admin/manage/user-custom-fields.json +trans.bn = public/language/bn/admin/manage/user-custom-fields.json +trans.cs = public/language/cs/admin/manage/user-custom-fields.json +trans.da = public/language/da/admin/manage/user-custom-fields.json +trans.de = public/language/de/admin/manage/user-custom-fields.json +trans.el = public/language/el/admin/manage/user-custom-fields.json +trans.en_US = public/language/en-US/admin/manage/user-custom-fields.json +trans.en@pirate = public/language/en-x-pirate/admin/manage/user-custom-fields.json +trans.es = public/language/es/admin/manage/user-custom-fields.json +trans.et = public/language/et/admin/manage/user-custom-fields.json +trans.fa_IR = public/language/fa-IR/admin/manage/user-custom-fields.json +trans.fi = public/language/fi/admin/manage/user-custom-fields.json +trans.fr = public/language/fr/admin/manage/user-custom-fields.json +trans.gl = public/language/gl/admin/manage/user-custom-fields.json +trans.he = public/language/he/admin/manage/user-custom-fields.json +trans.hr = public/language/hr/admin/manage/user-custom-fields.json +trans.hu = public/language/hu/admin/manage/user-custom-fields.json +trans.hy = public/language/hy/admin/manage/user-custom-fields.json +trans.id = public/language/id/admin/manage/user-custom-fields.json +trans.it = public/language/it/admin/manage/user-custom-fields.json +trans.ja = public/language/ja/admin/manage/user-custom-fields.json +trans.ko = public/language/ko/admin/manage/user-custom-fields.json +trans.lt = public/language/lt/admin/manage/user-custom-fields.json +trans.lv = public/language/lv/admin/manage/user-custom-fields.json +trans.ms = public/language/ms/admin/manage/user-custom-fields.json +trans.nb = public/language/nb/admin/manage/user-custom-fields.json +trans.nl = public/language/nl/admin/manage/user-custom-fields.json +trans.nn_NO = public/language/nn-NO/admin/manage/user-custom-fields.json +trans.pl = public/language/pl/admin/manage/user-custom-fields.json +trans.pt_BR = public/language/pt-BR/admin/manage/user-custom-fields.json +trans.pt_PT = public/language/pt-PT/admin/manage/user-custom-fields.json +trans.ro = public/language/ro/admin/manage/user-custom-fields.json +trans.ru = public/language/ru/admin/manage/user-custom-fields.json +trans.rw = public/language/rw/admin/manage/user-custom-fields.json +trans.sc = public/language/sc/admin/manage/user-custom-fields.json +trans.sk = public/language/sk/admin/manage/user-custom-fields.json +trans.sl = public/language/sl/admin/manage/user-custom-fields.json +trans.sq_AL = public/language/sq-AL/admin/manage/user-custom-fields.json +trans.sr = public/language/sr/admin/manage/user-custom-fields.json +trans.sv = public/language/sv/admin/manage/user-custom-fields.json +trans.th = public/language/th/admin/manage/user-custom-fields.json +trans.tr = public/language/tr/admin/manage/user-custom-fields.json +trans.uk = public/language/uk/admin/manage/user-custom-fields.json +trans.ur = public/language/ur/admin/manage/user-custom-fields.json +trans.vi = public/language/vi/admin/manage/user-custom-fields.json +trans.zh_CN = public/language/zh-CN/admin/manage/user-custom-fields.json +trans.zh_TW = public/language/zh-TW/admin/manage/user-custom-fields.json [o:nodebb:p:nodebb:r:admin-manage-users] file_filter = public/language//admin/manage/users.json source_file = public/language/en-GB/admin/manage/users.json source_lang = en_GB type = KEYVALUEJSON -trans.uk = public/language/uk/admin/manage/users.json -trans.en@pirate = public/language/en-x-pirate/admin/manage/users.json +trans.ar = public/language/ar/admin/manage/users.json +trans.az = public/language/az/admin/manage/users.json +trans.bg = public/language/bg/admin/manage/users.json +trans.bn = public/language/bn/admin/manage/users.json +trans.cs = public/language/cs/admin/manage/users.json +trans.da = public/language/da/admin/manage/users.json +trans.de = public/language/de/admin/manage/users.json +trans.el = public/language/el/admin/manage/users.json trans.en_US = public/language/en-US/admin/manage/users.json +trans.en@pirate = public/language/en-x-pirate/admin/manage/users.json +trans.es = public/language/es/admin/manage/users.json +trans.et = public/language/et/admin/manage/users.json +trans.fa_IR = public/language/fa-IR/admin/manage/users.json +trans.fi = public/language/fi/admin/manage/users.json trans.fr = public/language/fr/admin/manage/users.json +trans.gl = public/language/gl/admin/manage/users.json +trans.he = public/language/he/admin/manage/users.json +trans.hr = public/language/hr/admin/manage/users.json +trans.hu = public/language/hu/admin/manage/users.json +trans.hy = public/language/hy/admin/manage/users.json +trans.id = public/language/id/admin/manage/users.json +trans.it = public/language/it/admin/manage/users.json +trans.ja = public/language/ja/admin/manage/users.json trans.ko = public/language/ko/admin/manage/users.json +trans.lt = public/language/lt/admin/manage/users.json +trans.lv = public/language/lv/admin/manage/users.json trans.ms = public/language/ms/admin/manage/users.json trans.nb = public/language/nb/admin/manage/users.json -trans.pt_BR = public/language/pt-BR/admin/manage/users.json -trans.zh_CN = public/language/zh-CN/admin/manage/users.json -trans.zh_TW = public/language/zh-TW/admin/manage/users.json -trans.cs = public/language/cs/admin/manage/users.json -trans.gl = public/language/gl/admin/manage/users.json -trans.rw = public/language/rw/admin/manage/users.json -trans.bg = public/language/bg/admin/manage/users.json -trans.de = public/language/de/admin/manage/users.json -trans.et = public/language/et/admin/manage/users.json -trans.id = public/language/id/admin/manage/users.json -trans.pt_PT = public/language/pt-PT/admin/manage/users.json -trans.ru = public/language/ru/admin/manage/users.json -trans.da = public/language/da/admin/manage/users.json -trans.he = public/language/he/admin/manage/users.json -trans.hu = public/language/hu/admin/manage/users.json -trans.ro = public/language/ro/admin/manage/users.json -trans.bn = public/language/bn/admin/manage/users.json -trans.es = public/language/es/admin/manage/users.json -trans.it = public/language/it/admin/manage/users.json trans.nl = public/language/nl/admin/manage/users.json -trans.sq_AL = public/language/sq-AL/admin/manage/users.json -trans.tr = public/language/tr/admin/manage/users.json -trans.vi = public/language/vi/admin/manage/users.json -trans.fi = public/language/fi/admin/manage/users.json -trans.sc = public/language/sc/admin/manage/users.json -trans.hy = public/language/hy/admin/manage/users.json -trans.ja = public/language/ja/admin/manage/users.json -trans.lt = public/language/lt/admin/manage/users.json -trans.th = public/language/th/admin/manage/users.json -trans.sl = public/language/sl/admin/manage/users.json -trans.ar = public/language/ar/admin/manage/users.json -trans.el = public/language/el/admin/manage/users.json -trans.fa_IR = public/language/fa-IR/admin/manage/users.json -trans.hr = public/language/hr/admin/manage/users.json -trans.lv = public/language/lv/admin/manage/users.json +trans.nn_NO = public/language/nn-NO/admin/manage/users.json trans.pl = public/language/pl/admin/manage/users.json +trans.pt_BR = public/language/pt-BR/admin/manage/users.json +trans.pt_PT = public/language/pt-PT/admin/manage/users.json +trans.ro = public/language/ro/admin/manage/users.json +trans.ru = public/language/ru/admin/manage/users.json +trans.rw = public/language/rw/admin/manage/users.json +trans.sc = public/language/sc/admin/manage/users.json trans.sk = public/language/sk/admin/manage/users.json +trans.sl = public/language/sl/admin/manage/users.json +trans.sq_AL = public/language/sq-AL/admin/manage/users.json trans.sr = public/language/sr/admin/manage/users.json trans.sv = public/language/sv/admin/manage/users.json +trans.th = public/language/th/admin/manage/users.json +trans.tr = public/language/tr/admin/manage/users.json +trans.uk = public/language/uk/admin/manage/users.json +trans.ur = public/language/ur/admin/manage/users.json +trans.vi = public/language/vi/admin/manage/users.json +trans.zh_CN = public/language/zh-CN/admin/manage/users.json +trans.zh_TW = public/language/zh-TW/admin/manage/users.json [o:nodebb:p:nodebb:r:admin-menu] file_filter = public/language//admin/menu.json source_file = public/language/en-GB/admin/menu.json source_lang = en_GB type = KEYVALUEJSON -trans.ru = public/language/ru/admin/menu.json -trans.th = public/language/th/admin/menu.json -trans.vi = public/language/vi/admin/menu.json -trans.zh_CN = public/language/zh-CN/admin/menu.json -trans.hr = public/language/hr/admin/menu.json -trans.ko = public/language/ko/admin/menu.json -trans.it = public/language/it/admin/menu.json -trans.lt = public/language/lt/admin/menu.json -trans.pl = public/language/pl/admin/menu.json -trans.sc = public/language/sc/admin/menu.json -trans.sv = public/language/sv/admin/menu.json -trans.en@pirate = public/language/en-x-pirate/admin/menu.json -trans.fr = public/language/fr/admin/menu.json -trans.de = public/language/de/admin/menu.json -trans.ms = public/language/ms/admin/menu.json -trans.sq_AL = public/language/sq-AL/admin/menu.json +trans.ar = public/language/ar/admin/menu.json +trans.az = public/language/az/admin/menu.json trans.bg = public/language/bg/admin/menu.json +trans.bn = public/language/bn/admin/menu.json +trans.cs = public/language/cs/admin/menu.json trans.da = public/language/da/admin/menu.json +trans.de = public/language/de/admin/menu.json +trans.el = public/language/el/admin/menu.json +trans.en_US = public/language/en-US/admin/menu.json +trans.en@pirate = public/language/en-x-pirate/admin/menu.json trans.es = public/language/es/admin/menu.json +trans.et = public/language/et/admin/menu.json +trans.fa_IR = public/language/fa-IR/admin/menu.json +trans.fi = public/language/fi/admin/menu.json +trans.fr = public/language/fr/admin/menu.json +trans.gl = public/language/gl/admin/menu.json +trans.he = public/language/he/admin/menu.json +trans.hr = public/language/hr/admin/menu.json +trans.hu = public/language/hu/admin/menu.json trans.hy = public/language/hy/admin/menu.json trans.id = public/language/id/admin/menu.json +trans.it = public/language/it/admin/menu.json trans.ja = public/language/ja/admin/menu.json -trans.ro = public/language/ro/admin/menu.json -trans.rw = public/language/rw/admin/menu.json -trans.ar = public/language/ar/admin/menu.json -trans.en_US = public/language/en-US/admin/menu.json -trans.sl = public/language/sl/admin/menu.json -trans.uk = public/language/uk/admin/menu.json -trans.he = public/language/he/admin/menu.json -trans.hu = public/language/hu/admin/menu.json -trans.sr = public/language/sr/admin/menu.json -trans.cs = public/language/cs/admin/menu.json -trans.fa_IR = public/language/fa-IR/admin/menu.json -trans.sk = public/language/sk/admin/menu.json -trans.tr = public/language/tr/admin/menu.json -trans.fi = public/language/fi/admin/menu.json -trans.nl = public/language/nl/admin/menu.json -trans.pt_BR = public/language/pt-BR/admin/menu.json -trans.zh_TW = public/language/zh-TW/admin/menu.json -trans.el = public/language/el/admin/menu.json -trans.gl = public/language/gl/admin/menu.json +trans.ko = public/language/ko/admin/menu.json +trans.lt = public/language/lt/admin/menu.json trans.lv = public/language/lv/admin/menu.json +trans.ms = public/language/ms/admin/menu.json trans.nb = public/language/nb/admin/menu.json +trans.nl = public/language/nl/admin/menu.json +trans.nn_NO = public/language/nn-NO/admin/menu.json +trans.pl = public/language/pl/admin/menu.json +trans.pt_BR = public/language/pt-BR/admin/menu.json trans.pt_PT = public/language/pt-PT/admin/menu.json -trans.bn = public/language/bn/admin/menu.json -trans.et = public/language/et/admin/menu.json +trans.ro = public/language/ro/admin/menu.json +trans.ru = public/language/ru/admin/menu.json +trans.rw = public/language/rw/admin/menu.json +trans.sc = public/language/sc/admin/menu.json +trans.sk = public/language/sk/admin/menu.json +trans.sl = public/language/sl/admin/menu.json +trans.sq_AL = public/language/sq-AL/admin/menu.json +trans.sr = public/language/sr/admin/menu.json +trans.sv = public/language/sv/admin/menu.json +trans.th = public/language/th/admin/menu.json +trans.tr = public/language/tr/admin/menu.json +trans.uk = public/language/uk/admin/menu.json +trans.ur = public/language/ur/admin/menu.json +trans.vi = public/language/vi/admin/menu.json +trans.zh_CN = public/language/zh-CN/admin/menu.json +trans.zh_TW = public/language/zh-TW/admin/menu.json [o:nodebb:p:nodebb:r:admin-settings-advanced] file_filter = public/language//admin/settings/advanced.json source_file = public/language/en-GB/admin/settings/advanced.json source_lang = en_GB type = KEYVALUEJSON -trans.ko = public/language/ko/admin/settings/advanced.json -trans.sc = public/language/sc/admin/settings/advanced.json trans.ar = public/language/ar/admin/settings/advanced.json -trans.bn = public/language/bn/admin/settings/advanced.json -trans.el = public/language/el/admin/settings/advanced.json -trans.fa_IR = public/language/fa-IR/admin/settings/advanced.json -trans.fr = public/language/fr/admin/settings/advanced.json -trans.hy = public/language/hy/admin/settings/advanced.json +trans.az = public/language/az/admin/settings/advanced.json trans.bg = public/language/bg/admin/settings/advanced.json -trans.lv = public/language/lv/admin/settings/advanced.json -trans.pt_BR = public/language/pt-BR/admin/settings/advanced.json +trans.bn = public/language/bn/admin/settings/advanced.json +trans.cs = public/language/cs/admin/settings/advanced.json +trans.da = public/language/da/admin/settings/advanced.json +trans.de = public/language/de/admin/settings/advanced.json +trans.el = public/language/el/admin/settings/advanced.json +trans.en_US = public/language/en-US/admin/settings/advanced.json trans.en@pirate = public/language/en-x-pirate/admin/settings/advanced.json trans.es = public/language/es/admin/settings/advanced.json -trans.id = public/language/id/admin/settings/advanced.json -trans.rw = public/language/rw/admin/settings/advanced.json -trans.sl = public/language/sl/admin/settings/advanced.json -trans.it = public/language/it/admin/settings/advanced.json -trans.nb = public/language/nb/admin/settings/advanced.json -trans.pt_PT = public/language/pt-PT/admin/settings/advanced.json -trans.sq_AL = public/language/sq-AL/admin/settings/advanced.json -trans.sr = public/language/sr/admin/settings/advanced.json -trans.zh_CN = public/language/zh-CN/admin/settings/advanced.json -trans.zh_TW = public/language/zh-TW/admin/settings/advanced.json -trans.cs = public/language/cs/admin/settings/advanced.json -trans.en_US = public/language/en-US/admin/settings/advanced.json -trans.hr = public/language/hr/admin/settings/advanced.json -trans.pl = public/language/pl/admin/settings/advanced.json -trans.ru = public/language/ru/admin/settings/advanced.json -trans.sv = public/language/sv/admin/settings/advanced.json -trans.vi = public/language/vi/admin/settings/advanced.json -trans.de = public/language/de/admin/settings/advanced.json trans.et = public/language/et/admin/settings/advanced.json +trans.fa_IR = public/language/fa-IR/admin/settings/advanced.json trans.fi = public/language/fi/admin/settings/advanced.json -trans.ro = public/language/ro/admin/settings/advanced.json -trans.sk = public/language/sk/admin/settings/advanced.json -trans.uk = public/language/uk/admin/settings/advanced.json -trans.da = public/language/da/admin/settings/advanced.json +trans.fr = public/language/fr/admin/settings/advanced.json trans.gl = public/language/gl/admin/settings/advanced.json trans.he = public/language/he/admin/settings/advanced.json +trans.hr = public/language/hr/admin/settings/advanced.json trans.hu = public/language/hu/admin/settings/advanced.json +trans.hy = public/language/hy/admin/settings/advanced.json +trans.id = public/language/id/admin/settings/advanced.json +trans.it = public/language/it/admin/settings/advanced.json trans.ja = public/language/ja/admin/settings/advanced.json -trans.tr = public/language/tr/admin/settings/advanced.json +trans.ko = public/language/ko/admin/settings/advanced.json trans.lt = public/language/lt/admin/settings/advanced.json +trans.lv = public/language/lv/admin/settings/advanced.json trans.ms = public/language/ms/admin/settings/advanced.json +trans.nb = public/language/nb/admin/settings/advanced.json trans.nl = public/language/nl/admin/settings/advanced.json +trans.nn_NO = public/language/nn-NO/admin/settings/advanced.json +trans.pl = public/language/pl/admin/settings/advanced.json +trans.pt_BR = public/language/pt-BR/admin/settings/advanced.json +trans.pt_PT = public/language/pt-PT/admin/settings/advanced.json +trans.ro = public/language/ro/admin/settings/advanced.json +trans.ru = public/language/ru/admin/settings/advanced.json +trans.rw = public/language/rw/admin/settings/advanced.json +trans.sc = public/language/sc/admin/settings/advanced.json +trans.sk = public/language/sk/admin/settings/advanced.json +trans.sl = public/language/sl/admin/settings/advanced.json +trans.sq_AL = public/language/sq-AL/admin/settings/advanced.json +trans.sr = public/language/sr/admin/settings/advanced.json +trans.sv = public/language/sv/admin/settings/advanced.json trans.th = public/language/th/admin/settings/advanced.json +trans.tr = public/language/tr/admin/settings/advanced.json +trans.uk = public/language/uk/admin/settings/advanced.json +trans.ur = public/language/ur/admin/settings/advanced.json +trans.vi = public/language/vi/admin/settings/advanced.json +trans.zh_CN = public/language/zh-CN/admin/settings/advanced.json +trans.zh_TW = public/language/zh-TW/admin/settings/advanced.json + +[o:nodebb:p:nodebb:r:admin-settings-activitypub] +file_filter = public/language//admin/settings/activitypub.json +source_file = public/language/en-GB/admin/settings/activitypub.json +source_lang = en_GB +type = KEYVALUEJSON +trans.ar = public/language/ar/admin/settings/activitypub.json +trans.az = public/language/az/admin/settings/activitypub.json +trans.bg = public/language/bg/admin/settings/activitypub.json +trans.bn = public/language/bn/admin/settings/activitypub.json +trans.cs = public/language/cs/admin/settings/activitypub.json +trans.da = public/language/da/admin/settings/activitypub.json +trans.de = public/language/de/admin/settings/activitypub.json +trans.el = public/language/el/admin/settings/activitypub.json +trans.en_US = public/language/en-US/admin/settings/activitypub.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/activitypub.json +trans.es = public/language/es/admin/settings/activitypub.json +trans.et = public/language/et/admin/settings/activitypub.json +trans.fa_IR = public/language/fa-IR/admin/settings/activitypub.json +trans.fi = public/language/fi/admin/settings/activitypub.json +trans.fr = public/language/fr/admin/settings/activitypub.json +trans.gl = public/language/gl/admin/settings/activitypub.json +trans.he = public/language/he/admin/settings/activitypub.json +trans.hr = public/language/hr/admin/settings/activitypub.json +trans.hu = public/language/hu/admin/settings/activitypub.json +trans.hy = public/language/hy/admin/settings/activitypub.json +trans.id = public/language/id/admin/settings/activitypub.json +trans.it = public/language/it/admin/settings/activitypub.json +trans.ja = public/language/ja/admin/settings/activitypub.json +trans.ko = public/language/ko/admin/settings/activitypub.json +trans.lt = public/language/lt/admin/settings/activitypub.json +trans.lv = public/language/lv/admin/settings/activitypub.json +trans.ms = public/language/ms/admin/settings/activitypub.json +trans.nb = public/language/nb/admin/settings/activitypub.json +trans.nl = public/language/nl/admin/settings/activitypub.json +trans.nn_NO = public/language/nn-NO/admin/settings/activitypub.json +trans.pl = public/language/pl/admin/settings/activitypub.json +trans.pt_BR = public/language/pt-BR/admin/settings/activitypub.json +trans.pt_PT = public/language/pt-PT/admin/settings/activitypub.json +trans.ro = public/language/ro/admin/settings/activitypub.json +trans.ru = public/language/ru/admin/settings/activitypub.json +trans.rw = public/language/rw/admin/settings/activitypub.json +trans.sc = public/language/sc/admin/settings/activitypub.json +trans.sk = public/language/sk/admin/settings/activitypub.json +trans.sl = public/language/sl/admin/settings/activitypub.json +trans.sq_AL = public/language/sq-AL/admin/settings/activitypub.json +trans.sr = public/language/sr/admin/settings/activitypub.json +trans.sv = public/language/sv/admin/settings/activitypub.json +trans.th = public/language/th/admin/settings/activitypub.json +trans.tr = public/language/tr/admin/settings/activitypub.json +trans.uk = public/language/uk/admin/settings/activitypub.json +trans.ur = public/language/ur/admin/settings/activitypub.json +trans.vi = public/language/vi/admin/settings/activitypub.json +trans.zh_CN = public/language/zh-CN/admin/settings/activitypub.json +trans.zh_TW = public/language/zh-TW/admin/settings/activitypub.json [o:nodebb:p:nodebb:r:admin-settings-api] file_filter = public/language//admin/settings/api.json source_file = public/language/en-GB/admin/settings/api.json source_lang = en_GB type = KEYVALUEJSON -trans.et = public/language/et/admin/settings/api.json -trans.lv = public/language/lv/admin/settings/api.json -trans.nl = public/language/nl/admin/settings/api.json -trans.rw = public/language/rw/admin/settings/api.json -trans.sl = public/language/sl/admin/settings/api.json +trans.ar = public/language/ar/admin/settings/api.json +trans.az = public/language/az/admin/settings/api.json +trans.bg = public/language/bg/admin/settings/api.json trans.bn = public/language/bn/admin/settings/api.json +trans.cs = public/language/cs/admin/settings/api.json +trans.da = public/language/da/admin/settings/api.json trans.de = public/language/de/admin/settings/api.json trans.el = public/language/el/admin/settings/api.json trans.en_US = public/language/en-US/admin/settings/api.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/api.json +trans.es = public/language/es/admin/settings/api.json +trans.et = public/language/et/admin/settings/api.json +trans.fa_IR = public/language/fa-IR/admin/settings/api.json trans.fi = public/language/fi/admin/settings/api.json +trans.fr = public/language/fr/admin/settings/api.json +trans.gl = public/language/gl/admin/settings/api.json trans.he = public/language/he/admin/settings/api.json trans.hr = public/language/hr/admin/settings/api.json +trans.hu = public/language/hu/admin/settings/api.json trans.hy = public/language/hy/admin/settings/api.json +trans.id = public/language/id/admin/settings/api.json +trans.it = public/language/it/admin/settings/api.json trans.ja = public/language/ja/admin/settings/api.json trans.ko = public/language/ko/admin/settings/api.json +trans.lt = public/language/lt/admin/settings/api.json +trans.lv = public/language/lv/admin/settings/api.json trans.ms = public/language/ms/admin/settings/api.json +trans.nb = public/language/nb/admin/settings/api.json +trans.nl = public/language/nl/admin/settings/api.json +trans.nn_NO = public/language/nn-NO/admin/settings/api.json +trans.pl = public/language/pl/admin/settings/api.json trans.pt_BR = public/language/pt-BR/admin/settings/api.json +trans.pt_PT = public/language/pt-PT/admin/settings/api.json +trans.ro = public/language/ro/admin/settings/api.json +trans.ru = public/language/ru/admin/settings/api.json +trans.rw = public/language/rw/admin/settings/api.json +trans.sc = public/language/sc/admin/settings/api.json +trans.sk = public/language/sk/admin/settings/api.json +trans.sl = public/language/sl/admin/settings/api.json +trans.sq_AL = public/language/sq-AL/admin/settings/api.json +trans.sr = public/language/sr/admin/settings/api.json +trans.sv = public/language/sv/admin/settings/api.json +trans.th = public/language/th/admin/settings/api.json +trans.tr = public/language/tr/admin/settings/api.json +trans.uk = public/language/uk/admin/settings/api.json +trans.ur = public/language/ur/admin/settings/api.json +trans.vi = public/language/vi/admin/settings/api.json trans.zh_CN = public/language/zh-CN/admin/settings/api.json trans.zh_TW = public/language/zh-TW/admin/settings/api.json -trans.cs = public/language/cs/admin/settings/api.json -trans.it = public/language/it/admin/settings/api.json -trans.nb = public/language/nb/admin/settings/api.json -trans.pt_PT = public/language/pt-PT/admin/settings/api.json -trans.ru = public/language/ru/admin/settings/api.json -trans.uk = public/language/uk/admin/settings/api.json -trans.vi = public/language/vi/admin/settings/api.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/api.json -trans.fr = public/language/fr/admin/settings/api.json -trans.lt = public/language/lt/admin/settings/api.json -trans.sr = public/language/sr/admin/settings/api.json -trans.fa_IR = public/language/fa-IR/admin/settings/api.json -trans.sq_AL = public/language/sq-AL/admin/settings/api.json -trans.th = public/language/th/admin/settings/api.json -trans.da = public/language/da/admin/settings/api.json -trans.gl = public/language/gl/admin/settings/api.json -trans.pl = public/language/pl/admin/settings/api.json -trans.ar = public/language/ar/admin/settings/api.json -trans.es = public/language/es/admin/settings/api.json -trans.hu = public/language/hu/admin/settings/api.json -trans.sc = public/language/sc/admin/settings/api.json -trans.bg = public/language/bg/admin/settings/api.json -trans.id = public/language/id/admin/settings/api.json -trans.ro = public/language/ro/admin/settings/api.json -trans.sk = public/language/sk/admin/settings/api.json -trans.sv = public/language/sv/admin/settings/api.json -trans.tr = public/language/tr/admin/settings/api.json [o:nodebb:p:nodebb:r:admin-settings-chat] file_filter = public/language//admin/settings/chat.json @@ -1411,50 +1712,53 @@ source_file = public/language/en-GB/admin/settings/chat.json source_lang = en_GB type = KEYVALUEJSON trans.ar = public/language/ar/admin/settings/chat.json -trans.es = public/language/es/admin/settings/chat.json -trans.et = public/language/et/admin/settings/chat.json -trans.ms = public/language/ms/admin/settings/chat.json -trans.sk = public/language/sk/admin/settings/chat.json -trans.sq_AL = public/language/sq-AL/admin/settings/chat.json +trans.az = public/language/az/admin/settings/chat.json +trans.bg = public/language/bg/admin/settings/chat.json +trans.bn = public/language/bn/admin/settings/chat.json +trans.cs = public/language/cs/admin/settings/chat.json trans.da = public/language/da/admin/settings/chat.json trans.de = public/language/de/admin/settings/chat.json -trans.en_US = public/language/en-US/admin/settings/chat.json -trans.fa_IR = public/language/fa-IR/admin/settings/chat.json -trans.fr = public/language/fr/admin/settings/chat.json -trans.id = public/language/id/admin/settings/chat.json -trans.ro = public/language/ro/admin/settings/chat.json trans.el = public/language/el/admin/settings/chat.json +trans.en_US = public/language/en-US/admin/settings/chat.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/chat.json +trans.es = public/language/es/admin/settings/chat.json +trans.et = public/language/et/admin/settings/chat.json +trans.fa_IR = public/language/fa-IR/admin/settings/chat.json +trans.fi = public/language/fi/admin/settings/chat.json +trans.fr = public/language/fr/admin/settings/chat.json +trans.gl = public/language/gl/admin/settings/chat.json +trans.he = public/language/he/admin/settings/chat.json trans.hr = public/language/hr/admin/settings/chat.json +trans.hu = public/language/hu/admin/settings/chat.json +trans.hy = public/language/hy/admin/settings/chat.json +trans.id = public/language/id/admin/settings/chat.json +trans.it = public/language/it/admin/settings/chat.json trans.ja = public/language/ja/admin/settings/chat.json trans.ko = public/language/ko/admin/settings/chat.json -trans.nb = public/language/nb/admin/settings/chat.json -trans.nl = public/language/nl/admin/settings/chat.json -trans.uk = public/language/uk/admin/settings/chat.json -trans.he = public/language/he/admin/settings/chat.json -trans.sl = public/language/sl/admin/settings/chat.json -trans.sr = public/language/sr/admin/settings/chat.json -trans.cs = public/language/cs/admin/settings/chat.json -trans.pl = public/language/pl/admin/settings/chat.json -trans.pt_BR = public/language/pt-BR/admin/settings/chat.json -trans.sv = public/language/sv/admin/settings/chat.json -trans.zh_CN = public/language/zh-CN/admin/settings/chat.json -trans.bg = public/language/bg/admin/settings/chat.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/chat.json -trans.hu = public/language/hu/admin/settings/chat.json -trans.ru = public/language/ru/admin/settings/chat.json -trans.rw = public/language/rw/admin/settings/chat.json -trans.tr = public/language/tr/admin/settings/chat.json -trans.bn = public/language/bn/admin/settings/chat.json -trans.hy = public/language/hy/admin/settings/chat.json trans.lt = public/language/lt/admin/settings/chat.json trans.lv = public/language/lv/admin/settings/chat.json -trans.th = public/language/th/admin/settings/chat.json -trans.fi = public/language/fi/admin/settings/chat.json -trans.gl = public/language/gl/admin/settings/chat.json -trans.it = public/language/it/admin/settings/chat.json +trans.ms = public/language/ms/admin/settings/chat.json +trans.nb = public/language/nb/admin/settings/chat.json +trans.nl = public/language/nl/admin/settings/chat.json +trans.nn_NO = public/language/nn-NO/admin/settings/chat.json +trans.pl = public/language/pl/admin/settings/chat.json +trans.pt_BR = public/language/pt-BR/admin/settings/chat.json trans.pt_PT = public/language/pt-PT/admin/settings/chat.json +trans.ro = public/language/ro/admin/settings/chat.json +trans.ru = public/language/ru/admin/settings/chat.json +trans.rw = public/language/rw/admin/settings/chat.json trans.sc = public/language/sc/admin/settings/chat.json +trans.sk = public/language/sk/admin/settings/chat.json +trans.sl = public/language/sl/admin/settings/chat.json +trans.sq_AL = public/language/sq-AL/admin/settings/chat.json +trans.sr = public/language/sr/admin/settings/chat.json +trans.sv = public/language/sv/admin/settings/chat.json +trans.th = public/language/th/admin/settings/chat.json +trans.tr = public/language/tr/admin/settings/chat.json +trans.uk = public/language/uk/admin/settings/chat.json +trans.ur = public/language/ur/admin/settings/chat.json trans.vi = public/language/vi/admin/settings/chat.json +trans.zh_CN = public/language/zh-CN/admin/settings/chat.json trans.zh_TW = public/language/zh-TW/admin/settings/chat.json [o:nodebb:p:nodebb:r:admin-settings-cookies] @@ -1462,832 +1766,660 @@ file_filter = public/language//admin/settings/cookies.json source_file = public/language/en-GB/admin/settings/cookies.json source_lang = en_GB type = KEYVALUEJSON -trans.sr = public/language/sr/admin/settings/cookies.json -trans.th = public/language/th/admin/settings/cookies.json -trans.zh_CN = public/language/zh-CN/admin/settings/cookies.json -trans.en_US = public/language/en-US/admin/settings/cookies.json -trans.lt = public/language/lt/admin/settings/cookies.json -trans.pl = public/language/pl/admin/settings/cookies.json -trans.ro = public/language/ro/admin/settings/cookies.json -trans.rw = public/language/rw/admin/settings/cookies.json -trans.sk = public/language/sk/admin/settings/cookies.json -trans.tr = public/language/tr/admin/settings/cookies.json trans.ar = public/language/ar/admin/settings/cookies.json -trans.da = public/language/da/admin/settings/cookies.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/cookies.json -trans.gl = public/language/gl/admin/settings/cookies.json -trans.hu = public/language/hu/admin/settings/cookies.json -trans.vi = public/language/vi/admin/settings/cookies.json -trans.el = public/language/el/admin/settings/cookies.json -trans.et = public/language/et/admin/settings/cookies.json -trans.lv = public/language/lv/admin/settings/cookies.json -trans.ru = public/language/ru/admin/settings/cookies.json -trans.uk = public/language/uk/admin/settings/cookies.json -trans.ko = public/language/ko/admin/settings/cookies.json -trans.sv = public/language/sv/admin/settings/cookies.json -trans.bn = public/language/bn/admin/settings/cookies.json -trans.de = public/language/de/admin/settings/cookies.json -trans.he = public/language/he/admin/settings/cookies.json -trans.hy = public/language/hy/admin/settings/cookies.json -trans.it = public/language/it/admin/settings/cookies.json -trans.cs = public/language/cs/admin/settings/cookies.json -trans.hr = public/language/hr/admin/settings/cookies.json -trans.ja = public/language/ja/admin/settings/cookies.json -trans.pt_PT = public/language/pt-PT/admin/settings/cookies.json -trans.nb = public/language/nb/admin/settings/cookies.json -trans.sc = public/language/sc/admin/settings/cookies.json +trans.az = public/language/az/admin/settings/cookies.json trans.bg = public/language/bg/admin/settings/cookies.json +trans.bn = public/language/bn/admin/settings/cookies.json +trans.cs = public/language/cs/admin/settings/cookies.json +trans.da = public/language/da/admin/settings/cookies.json +trans.de = public/language/de/admin/settings/cookies.json +trans.el = public/language/el/admin/settings/cookies.json +trans.en_US = public/language/en-US/admin/settings/cookies.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/cookies.json +trans.es = public/language/es/admin/settings/cookies.json +trans.et = public/language/et/admin/settings/cookies.json +trans.fa_IR = public/language/fa-IR/admin/settings/cookies.json trans.fi = public/language/fi/admin/settings/cookies.json trans.fr = public/language/fr/admin/settings/cookies.json +trans.gl = public/language/gl/admin/settings/cookies.json +trans.he = public/language/he/admin/settings/cookies.json +trans.hr = public/language/hr/admin/settings/cookies.json +trans.hu = public/language/hu/admin/settings/cookies.json +trans.hy = public/language/hy/admin/settings/cookies.json trans.id = public/language/id/admin/settings/cookies.json +trans.it = public/language/it/admin/settings/cookies.json +trans.ja = public/language/ja/admin/settings/cookies.json +trans.ko = public/language/ko/admin/settings/cookies.json +trans.lt = public/language/lt/admin/settings/cookies.json +trans.lv = public/language/lv/admin/settings/cookies.json trans.ms = public/language/ms/admin/settings/cookies.json -trans.zh_TW = public/language/zh-TW/admin/settings/cookies.json -trans.es = public/language/es/admin/settings/cookies.json -trans.fa_IR = public/language/fa-IR/admin/settings/cookies.json +trans.nb = public/language/nb/admin/settings/cookies.json trans.nl = public/language/nl/admin/settings/cookies.json +trans.nn_NO = public/language/nn-NO/admin/settings/cookies.json +trans.pl = public/language/pl/admin/settings/cookies.json +trans.pt_BR = public/language/pt-BR/admin/settings/cookies.json +trans.pt_PT = public/language/pt-PT/admin/settings/cookies.json +trans.ro = public/language/ro/admin/settings/cookies.json +trans.ru = public/language/ru/admin/settings/cookies.json +trans.rw = public/language/rw/admin/settings/cookies.json +trans.sc = public/language/sc/admin/settings/cookies.json +trans.sk = public/language/sk/admin/settings/cookies.json trans.sl = public/language/sl/admin/settings/cookies.json trans.sq_AL = public/language/sq-AL/admin/settings/cookies.json -trans.pt_BR = public/language/pt-BR/admin/settings/cookies.json +trans.sr = public/language/sr/admin/settings/cookies.json +trans.sv = public/language/sv/admin/settings/cookies.json +trans.th = public/language/th/admin/settings/cookies.json +trans.tr = public/language/tr/admin/settings/cookies.json +trans.uk = public/language/uk/admin/settings/cookies.json +trans.ur = public/language/ur/admin/settings/cookies.json +trans.vi = public/language/vi/admin/settings/cookies.json +trans.zh_CN = public/language/zh-CN/admin/settings/cookies.json +trans.zh_TW = public/language/zh-TW/admin/settings/cookies.json [o:nodebb:p:nodebb:r:admin-settings-email] file_filter = public/language//admin/settings/email.json source_file = public/language/en-GB/admin/settings/email.json source_lang = en_GB type = KEYVALUEJSON -trans.sv = public/language/sv/admin/settings/email.json -trans.tr = public/language/tr/admin/settings/email.json -trans.uk = public/language/uk/admin/settings/email.json trans.ar = public/language/ar/admin/settings/email.json -trans.ja = public/language/ja/admin/settings/email.json -trans.pt_PT = public/language/pt-PT/admin/settings/email.json -trans.sr = public/language/sr/admin/settings/email.json -trans.ms = public/language/ms/admin/settings/email.json -trans.nb = public/language/nb/admin/settings/email.json -trans.ru = public/language/ru/admin/settings/email.json -trans.sk = public/language/sk/admin/settings/email.json -trans.fr = public/language/fr/admin/settings/email.json -trans.he = public/language/he/admin/settings/email.json -trans.id = public/language/id/admin/settings/email.json -trans.it = public/language/it/admin/settings/email.json -trans.sl = public/language/sl/admin/settings/email.json -trans.sq_AL = public/language/sq-AL/admin/settings/email.json -trans.hr = public/language/hr/admin/settings/email.json -trans.hu = public/language/hu/admin/settings/email.json -trans.ko = public/language/ko/admin/settings/email.json -trans.zh_TW = public/language/zh-TW/admin/settings/email.json -trans.bn = public/language/bn/admin/settings/email.json -trans.fi = public/language/fi/admin/settings/email.json -trans.pt_BR = public/language/pt-BR/admin/settings/email.json -trans.es = public/language/es/admin/settings/email.json -trans.pl = public/language/pl/admin/settings/email.json -trans.ro = public/language/ro/admin/settings/email.json -trans.rw = public/language/rw/admin/settings/email.json +trans.az = public/language/az/admin/settings/email.json trans.bg = public/language/bg/admin/settings/email.json +trans.bn = public/language/bn/admin/settings/email.json trans.cs = public/language/cs/admin/settings/email.json -trans.el = public/language/el/admin/settings/email.json -trans.en_US = public/language/en-US/admin/settings/email.json -trans.zh_CN = public/language/zh-CN/admin/settings/email.json -trans.fa_IR = public/language/fa-IR/admin/settings/email.json -trans.gl = public/language/gl/admin/settings/email.json -trans.hy = public/language/hy/admin/settings/email.json -trans.lv = public/language/lv/admin/settings/email.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/email.json -trans.et = public/language/et/admin/settings/email.json -trans.lt = public/language/lt/admin/settings/email.json -trans.th = public/language/th/admin/settings/email.json -trans.vi = public/language/vi/admin/settings/email.json trans.da = public/language/da/admin/settings/email.json trans.de = public/language/de/admin/settings/email.json +trans.el = public/language/el/admin/settings/email.json +trans.en_US = public/language/en-US/admin/settings/email.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/email.json +trans.es = public/language/es/admin/settings/email.json +trans.et = public/language/et/admin/settings/email.json +trans.fa_IR = public/language/fa-IR/admin/settings/email.json +trans.fi = public/language/fi/admin/settings/email.json +trans.fr = public/language/fr/admin/settings/email.json +trans.gl = public/language/gl/admin/settings/email.json +trans.he = public/language/he/admin/settings/email.json +trans.hr = public/language/hr/admin/settings/email.json +trans.hu = public/language/hu/admin/settings/email.json +trans.hy = public/language/hy/admin/settings/email.json +trans.id = public/language/id/admin/settings/email.json +trans.it = public/language/it/admin/settings/email.json +trans.ja = public/language/ja/admin/settings/email.json +trans.ko = public/language/ko/admin/settings/email.json +trans.lt = public/language/lt/admin/settings/email.json +trans.lv = public/language/lv/admin/settings/email.json +trans.ms = public/language/ms/admin/settings/email.json +trans.nb = public/language/nb/admin/settings/email.json trans.nl = public/language/nl/admin/settings/email.json +trans.nn_NO = public/language/nn-NO/admin/settings/email.json +trans.pl = public/language/pl/admin/settings/email.json +trans.pt_BR = public/language/pt-BR/admin/settings/email.json +trans.pt_PT = public/language/pt-PT/admin/settings/email.json +trans.ro = public/language/ro/admin/settings/email.json +trans.ru = public/language/ru/admin/settings/email.json +trans.rw = public/language/rw/admin/settings/email.json trans.sc = public/language/sc/admin/settings/email.json +trans.sk = public/language/sk/admin/settings/email.json +trans.sl = public/language/sl/admin/settings/email.json +trans.sq_AL = public/language/sq-AL/admin/settings/email.json +trans.sr = public/language/sr/admin/settings/email.json +trans.sv = public/language/sv/admin/settings/email.json +trans.th = public/language/th/admin/settings/email.json +trans.tr = public/language/tr/admin/settings/email.json +trans.uk = public/language/uk/admin/settings/email.json +trans.ur = public/language/ur/admin/settings/email.json +trans.vi = public/language/vi/admin/settings/email.json +trans.zh_CN = public/language/zh-CN/admin/settings/email.json +trans.zh_TW = public/language/zh-TW/admin/settings/email.json [o:nodebb:p:nodebb:r:admin-settings-general] file_filter = public/language//admin/settings/general.json source_file = public/language/en-GB/admin/settings/general.json source_lang = en_GB type = KEYVALUEJSON -trans.ko = public/language/ko/admin/settings/general.json -trans.ro = public/language/ro/admin/settings/general.json -trans.sc = public/language/sc/admin/settings/general.json -trans.sk = public/language/sk/admin/settings/general.json -trans.sv = public/language/sv/admin/settings/general.json -trans.uk = public/language/uk/admin/settings/general.json +trans.ar = public/language/ar/admin/settings/general.json +trans.az = public/language/az/admin/settings/general.json +trans.bg = public/language/bg/admin/settings/general.json +trans.bn = public/language/bn/admin/settings/general.json +trans.cs = public/language/cs/admin/settings/general.json +trans.da = public/language/da/admin/settings/general.json +trans.de = public/language/de/admin/settings/general.json +trans.el = public/language/el/admin/settings/general.json +trans.en_US = public/language/en-US/admin/settings/general.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/general.json +trans.es = public/language/es/admin/settings/general.json +trans.et = public/language/et/admin/settings/general.json +trans.fa_IR = public/language/fa-IR/admin/settings/general.json +trans.fi = public/language/fi/admin/settings/general.json trans.fr = public/language/fr/admin/settings/general.json trans.gl = public/language/gl/admin/settings/general.json -trans.zh_CN = public/language/zh-CN/admin/settings/general.json -trans.lt = public/language/lt/admin/settings/general.json -trans.rw = public/language/rw/admin/settings/general.json -trans.th = public/language/th/admin/settings/general.json -trans.tr = public/language/tr/admin/settings/general.json -trans.zh_TW = public/language/zh-TW/admin/settings/general.json -trans.de = public/language/de/admin/settings/general.json -trans.ja = public/language/ja/admin/settings/general.json -trans.en_US = public/language/en-US/admin/settings/general.json -trans.et = public/language/et/admin/settings/general.json -trans.fi = public/language/fi/admin/settings/general.json +trans.he = public/language/he/admin/settings/general.json +trans.hr = public/language/hr/admin/settings/general.json +trans.hu = public/language/hu/admin/settings/general.json trans.hy = public/language/hy/admin/settings/general.json trans.id = public/language/id/admin/settings/general.json -trans.ru = public/language/ru/admin/settings/general.json -trans.cs = public/language/cs/admin/settings/general.json -trans.el = public/language/el/admin/settings/general.json -trans.sl = public/language/sl/admin/settings/general.json -trans.hu = public/language/hu/admin/settings/general.json trans.it = public/language/it/admin/settings/general.json -trans.nl = public/language/nl/admin/settings/general.json -trans.pl = public/language/pl/admin/settings/general.json -trans.es = public/language/es/admin/settings/general.json -trans.fa_IR = public/language/fa-IR/admin/settings/general.json +trans.ja = public/language/ja/admin/settings/general.json +trans.ko = public/language/ko/admin/settings/general.json +trans.lt = public/language/lt/admin/settings/general.json +trans.lv = public/language/lv/admin/settings/general.json trans.ms = public/language/ms/admin/settings/general.json trans.nb = public/language/nb/admin/settings/general.json -trans.sr = public/language/sr/admin/settings/general.json -trans.da = public/language/da/admin/settings/general.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/general.json -trans.pt_PT = public/language/pt-PT/admin/settings/general.json -trans.he = public/language/he/admin/settings/general.json -trans.lv = public/language/lv/admin/settings/general.json +trans.nl = public/language/nl/admin/settings/general.json +trans.nn_NO = public/language/nn-NO/admin/settings/general.json +trans.pl = public/language/pl/admin/settings/general.json trans.pt_BR = public/language/pt-BR/admin/settings/general.json -trans.bn = public/language/bn/admin/settings/general.json -trans.hr = public/language/hr/admin/settings/general.json +trans.pt_PT = public/language/pt-PT/admin/settings/general.json +trans.ro = public/language/ro/admin/settings/general.json +trans.ru = public/language/ru/admin/settings/general.json +trans.rw = public/language/rw/admin/settings/general.json +trans.sc = public/language/sc/admin/settings/general.json +trans.sk = public/language/sk/admin/settings/general.json +trans.sl = public/language/sl/admin/settings/general.json trans.sq_AL = public/language/sq-AL/admin/settings/general.json +trans.sr = public/language/sr/admin/settings/general.json +trans.sv = public/language/sv/admin/settings/general.json +trans.th = public/language/th/admin/settings/general.json +trans.tr = public/language/tr/admin/settings/general.json +trans.uk = public/language/uk/admin/settings/general.json +trans.ur = public/language/ur/admin/settings/general.json trans.vi = public/language/vi/admin/settings/general.json -trans.ar = public/language/ar/admin/settings/general.json -trans.bg = public/language/bg/admin/settings/general.json +trans.zh_CN = public/language/zh-CN/admin/settings/general.json +trans.zh_TW = public/language/zh-TW/admin/settings/general.json [o:nodebb:p:nodebb:r:admin-settings-group] file_filter = public/language//admin/settings/group.json source_file = public/language/en-GB/admin/settings/group.json source_lang = en_GB type = KEYVALUEJSON -trans.sc = public/language/sc/admin/settings/group.json -trans.en_US = public/language/en-US/admin/settings/group.json -trans.et = public/language/et/admin/settings/group.json -trans.fr = public/language/fr/admin/settings/group.json -trans.it = public/language/it/admin/settings/group.json -trans.nb = public/language/nb/admin/settings/group.json -trans.es = public/language/es/admin/settings/group.json -trans.fa_IR = public/language/fa-IR/admin/settings/group.json -trans.gl = public/language/gl/admin/settings/group.json -trans.rw = public/language/rw/admin/settings/group.json -trans.sr = public/language/sr/admin/settings/group.json -trans.sq_AL = public/language/sq-AL/admin/settings/group.json -trans.th = public/language/th/admin/settings/group.json -trans.vi = public/language/vi/admin/settings/group.json +trans.ar = public/language/ar/admin/settings/group.json +trans.az = public/language/az/admin/settings/group.json +trans.bg = public/language/bg/admin/settings/group.json trans.bn = public/language/bn/admin/settings/group.json +trans.cs = public/language/cs/admin/settings/group.json +trans.da = public/language/da/admin/settings/group.json +trans.de = public/language/de/admin/settings/group.json +trans.el = public/language/el/admin/settings/group.json +trans.en_US = public/language/en-US/admin/settings/group.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/group.json +trans.es = public/language/es/admin/settings/group.json +trans.et = public/language/et/admin/settings/group.json +trans.fa_IR = public/language/fa-IR/admin/settings/group.json trans.fi = public/language/fi/admin/settings/group.json +trans.fr = public/language/fr/admin/settings/group.json +trans.gl = public/language/gl/admin/settings/group.json +trans.he = public/language/he/admin/settings/group.json +trans.hr = public/language/hr/admin/settings/group.json +trans.hu = public/language/hu/admin/settings/group.json trans.hy = public/language/hy/admin/settings/group.json trans.id = public/language/id/admin/settings/group.json -trans.ms = public/language/ms/admin/settings/group.json -trans.de = public/language/de/admin/settings/group.json -trans.he = public/language/he/admin/settings/group.json -trans.lv = public/language/lv/admin/settings/group.json -trans.pt_PT = public/language/pt-PT/admin/settings/group.json -trans.sk = public/language/sk/admin/settings/group.json -trans.tr = public/language/tr/admin/settings/group.json -trans.uk = public/language/uk/admin/settings/group.json -trans.cs = public/language/cs/admin/settings/group.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/group.json -trans.hu = public/language/hu/admin/settings/group.json -trans.nl = public/language/nl/admin/settings/group.json -trans.ru = public/language/ru/admin/settings/group.json -trans.lt = public/language/lt/admin/settings/group.json -trans.ro = public/language/ro/admin/settings/group.json -trans.sl = public/language/sl/admin/settings/group.json -trans.ar = public/language/ar/admin/settings/group.json -trans.bg = public/language/bg/admin/settings/group.json -trans.da = public/language/da/admin/settings/group.json -trans.hr = public/language/hr/admin/settings/group.json -trans.ko = public/language/ko/admin/settings/group.json -trans.el = public/language/el/admin/settings/group.json -trans.sv = public/language/sv/admin/settings/group.json +trans.it = public/language/it/admin/settings/group.json trans.ja = public/language/ja/admin/settings/group.json +trans.ko = public/language/ko/admin/settings/group.json +trans.lt = public/language/lt/admin/settings/group.json +trans.lv = public/language/lv/admin/settings/group.json +trans.ms = public/language/ms/admin/settings/group.json +trans.nb = public/language/nb/admin/settings/group.json +trans.nl = public/language/nl/admin/settings/group.json +trans.nn_NO = public/language/nn-NO/admin/settings/group.json trans.pl = public/language/pl/admin/settings/group.json trans.pt_BR = public/language/pt-BR/admin/settings/group.json +trans.pt_PT = public/language/pt-PT/admin/settings/group.json +trans.ro = public/language/ro/admin/settings/group.json +trans.ru = public/language/ru/admin/settings/group.json +trans.rw = public/language/rw/admin/settings/group.json +trans.sc = public/language/sc/admin/settings/group.json +trans.sk = public/language/sk/admin/settings/group.json +trans.sl = public/language/sl/admin/settings/group.json +trans.sq_AL = public/language/sq-AL/admin/settings/group.json +trans.sr = public/language/sr/admin/settings/group.json +trans.sv = public/language/sv/admin/settings/group.json +trans.th = public/language/th/admin/settings/group.json +trans.tr = public/language/tr/admin/settings/group.json +trans.uk = public/language/uk/admin/settings/group.json +trans.ur = public/language/ur/admin/settings/group.json +trans.vi = public/language/vi/admin/settings/group.json trans.zh_CN = public/language/zh-CN/admin/settings/group.json trans.zh_TW = public/language/zh-TW/admin/settings/group.json -[o:nodebb:p:nodebb:r:admin-settings-guest] -file_filter = public/language//admin/settings/guest.json -source_file = public/language/en-GB/admin/settings/guest.json -source_lang = en_GB -type = KEYVALUEJSON -trans.cs = public/language/cs/admin/settings/guest.json -trans.da = public/language/da/admin/settings/guest.json -trans.en_US = public/language/en-US/admin/settings/guest.json -trans.lt = public/language/lt/admin/settings/guest.json -trans.ms = public/language/ms/admin/settings/guest.json -trans.nl = public/language/nl/admin/settings/guest.json -trans.ru = public/language/ru/admin/settings/guest.json -trans.sc = public/language/sc/admin/settings/guest.json -trans.sr = public/language/sr/admin/settings/guest.json -trans.th = public/language/th/admin/settings/guest.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/guest.json -trans.it = public/language/it/admin/settings/guest.json -trans.lv = public/language/lv/admin/settings/guest.json -trans.pt_BR = public/language/pt-BR/admin/settings/guest.json -trans.sk = public/language/sk/admin/settings/guest.json -trans.de = public/language/de/admin/settings/guest.json -trans.es = public/language/es/admin/settings/guest.json -trans.hr = public/language/hr/admin/settings/guest.json -trans.pt_PT = public/language/pt-PT/admin/settings/guest.json -trans.rw = public/language/rw/admin/settings/guest.json -trans.sq_AL = public/language/sq-AL/admin/settings/guest.json -trans.el = public/language/el/admin/settings/guest.json -trans.tr = public/language/tr/admin/settings/guest.json -trans.zh_CN = public/language/zh-CN/admin/settings/guest.json -trans.bg = public/language/bg/admin/settings/guest.json -trans.fi = public/language/fi/admin/settings/guest.json -trans.hu = public/language/hu/admin/settings/guest.json -trans.ja = public/language/ja/admin/settings/guest.json -trans.nb = public/language/nb/admin/settings/guest.json -trans.pl = public/language/pl/admin/settings/guest.json -trans.sl = public/language/sl/admin/settings/guest.json -trans.vi = public/language/vi/admin/settings/guest.json -trans.bn = public/language/bn/admin/settings/guest.json -trans.fa_IR = public/language/fa-IR/admin/settings/guest.json -trans.fr = public/language/fr/admin/settings/guest.json -trans.hy = public/language/hy/admin/settings/guest.json -trans.ro = public/language/ro/admin/settings/guest.json -trans.et = public/language/et/admin/settings/guest.json -trans.gl = public/language/gl/admin/settings/guest.json -trans.sv = public/language/sv/admin/settings/guest.json -trans.uk = public/language/uk/admin/settings/guest.json -trans.zh_TW = public/language/zh-TW/admin/settings/guest.json -trans.ar = public/language/ar/admin/settings/guest.json -trans.he = public/language/he/admin/settings/guest.json -trans.id = public/language/id/admin/settings/guest.json -trans.ko = public/language/ko/admin/settings/guest.json - -[o:nodebb:p:nodebb:r:admin-settings-homepage] -file_filter = public/language//admin/settings/homepage.json -source_file = public/language/en-GB/admin/settings/homepage.json -source_lang = en_GB -type = KEYVALUEJSON -trans.nb = public/language/nb/admin/settings/homepage.json -trans.tr = public/language/tr/admin/settings/homepage.json -trans.vi = public/language/vi/admin/settings/homepage.json -trans.et = public/language/et/admin/settings/homepage.json -trans.fi = public/language/fi/admin/settings/homepage.json -trans.hy = public/language/hy/admin/settings/homepage.json -trans.ru = public/language/ru/admin/settings/homepage.json -trans.sr = public/language/sr/admin/settings/homepage.json -trans.es = public/language/es/admin/settings/homepage.json -trans.id = public/language/id/admin/settings/homepage.json -trans.lt = public/language/lt/admin/settings/homepage.json -trans.sk = public/language/sk/admin/settings/homepage.json -trans.sq_AL = public/language/sq-AL/admin/settings/homepage.json -trans.th = public/language/th/admin/settings/homepage.json -trans.en_US = public/language/en-US/admin/settings/homepage.json -trans.lv = public/language/lv/admin/settings/homepage.json -trans.pt_PT = public/language/pt-PT/admin/settings/homepage.json -trans.sc = public/language/sc/admin/settings/homepage.json -trans.fa_IR = public/language/fa-IR/admin/settings/homepage.json -trans.he = public/language/he/admin/settings/homepage.json -trans.ms = public/language/ms/admin/settings/homepage.json -trans.cs = public/language/cs/admin/settings/homepage.json -trans.el = public/language/el/admin/settings/homepage.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/homepage.json -trans.gl = public/language/gl/admin/settings/homepage.json -trans.ko = public/language/ko/admin/settings/homepage.json -trans.ar = public/language/ar/admin/settings/homepage.json -trans.bg = public/language/bg/admin/settings/homepage.json -trans.bn = public/language/bn/admin/settings/homepage.json -trans.rw = public/language/rw/admin/settings/homepage.json -trans.zh_CN = public/language/zh-CN/admin/settings/homepage.json -trans.hr = public/language/hr/admin/settings/homepage.json -trans.it = public/language/it/admin/settings/homepage.json -trans.ja = public/language/ja/admin/settings/homepage.json -trans.nl = public/language/nl/admin/settings/homepage.json -trans.ro = public/language/ro/admin/settings/homepage.json -trans.da = public/language/da/admin/settings/homepage.json -trans.de = public/language/de/admin/settings/homepage.json -trans.fr = public/language/fr/admin/settings/homepage.json -trans.sv = public/language/sv/admin/settings/homepage.json -trans.hu = public/language/hu/admin/settings/homepage.json -trans.pt_BR = public/language/pt-BR/admin/settings/homepage.json -trans.sl = public/language/sl/admin/settings/homepage.json -trans.pl = public/language/pl/admin/settings/homepage.json -trans.uk = public/language/uk/admin/settings/homepage.json -trans.zh_TW = public/language/zh-TW/admin/settings/homepage.json - -[o:nodebb:p:nodebb:r:admin-settings-languages] -file_filter = public/language//admin/settings/languages.json -source_file = public/language/en-GB/admin/settings/languages.json -source_lang = en_GB -type = KEYVALUEJSON -trans.en@pirate = public/language/en-x-pirate/admin/settings/languages.json -trans.fa_IR = public/language/fa-IR/admin/settings/languages.json -trans.gl = public/language/gl/admin/settings/languages.json -trans.ro = public/language/ro/admin/settings/languages.json -trans.th = public/language/th/admin/settings/languages.json -trans.hr = public/language/hr/admin/settings/languages.json -trans.hy = public/language/hy/admin/settings/languages.json -trans.sc = public/language/sc/admin/settings/languages.json -trans.vi = public/language/vi/admin/settings/languages.json -trans.tr = public/language/tr/admin/settings/languages.json -trans.cs = public/language/cs/admin/settings/languages.json -trans.et = public/language/et/admin/settings/languages.json -trans.lv = public/language/lv/admin/settings/languages.json -trans.pl = public/language/pl/admin/settings/languages.json -trans.sr = public/language/sr/admin/settings/languages.json -trans.sv = public/language/sv/admin/settings/languages.json -trans.hu = public/language/hu/admin/settings/languages.json -trans.it = public/language/it/admin/settings/languages.json -trans.ja = public/language/ja/admin/settings/languages.json -trans.sl = public/language/sl/admin/settings/languages.json -trans.zh_TW = public/language/zh-TW/admin/settings/languages.json -trans.da = public/language/da/admin/settings/languages.json -trans.fr = public/language/fr/admin/settings/languages.json -trans.he = public/language/he/admin/settings/languages.json -trans.id = public/language/id/admin/settings/languages.json -trans.sq_AL = public/language/sq-AL/admin/settings/languages.json -trans.uk = public/language/uk/admin/settings/languages.json -trans.bn = public/language/bn/admin/settings/languages.json -trans.fi = public/language/fi/admin/settings/languages.json -trans.ko = public/language/ko/admin/settings/languages.json -trans.pt_BR = public/language/pt-BR/admin/settings/languages.json -trans.sk = public/language/sk/admin/settings/languages.json -trans.pt_PT = public/language/pt-PT/admin/settings/languages.json -trans.ru = public/language/ru/admin/settings/languages.json -trans.ar = public/language/ar/admin/settings/languages.json -trans.bg = public/language/bg/admin/settings/languages.json -trans.de = public/language/de/admin/settings/languages.json -trans.el = public/language/el/admin/settings/languages.json -trans.lt = public/language/lt/admin/settings/languages.json -trans.nl = public/language/nl/admin/settings/languages.json -trans.zh_CN = public/language/zh-CN/admin/settings/languages.json -trans.en_US = public/language/en-US/admin/settings/languages.json -trans.es = public/language/es/admin/settings/languages.json -trans.ms = public/language/ms/admin/settings/languages.json -trans.nb = public/language/nb/admin/settings/languages.json -trans.rw = public/language/rw/admin/settings/languages.json - [o:nodebb:p:nodebb:r:admin-settings-navigation] file_filter = public/language//admin/settings/navigation.json source_file = public/language/en-GB/admin/settings/navigation.json source_lang = en_GB type = KEYVALUEJSON -trans.uk = public/language/uk/admin/settings/navigation.json +trans.ar = public/language/ar/admin/settings/navigation.json +trans.az = public/language/az/admin/settings/navigation.json +trans.bg = public/language/bg/admin/settings/navigation.json trans.bn = public/language/bn/admin/settings/navigation.json -trans.es = public/language/es/admin/settings/navigation.json -trans.fa_IR = public/language/fa-IR/admin/settings/navigation.json -trans.nl = public/language/nl/admin/settings/navigation.json -trans.pt_BR = public/language/pt-BR/admin/settings/navigation.json -trans.rw = public/language/rw/admin/settings/navigation.json -trans.zh_CN = public/language/zh-CN/admin/settings/navigation.json +trans.cs = public/language/cs/admin/settings/navigation.json trans.da = public/language/da/admin/settings/navigation.json -trans.it = public/language/it/admin/settings/navigation.json -trans.ms = public/language/ms/admin/settings/navigation.json -trans.pt_PT = public/language/pt-PT/admin/settings/navigation.json -trans.vi = public/language/vi/admin/settings/navigation.json +trans.de = public/language/de/admin/settings/navigation.json +trans.el = public/language/el/admin/settings/navigation.json trans.en_US = public/language/en-US/admin/settings/navigation.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/navigation.json +trans.es = public/language/es/admin/settings/navigation.json +trans.et = public/language/et/admin/settings/navigation.json +trans.fa_IR = public/language/fa-IR/admin/settings/navigation.json +trans.fi = public/language/fi/admin/settings/navigation.json trans.fr = public/language/fr/admin/settings/navigation.json +trans.gl = public/language/gl/admin/settings/navigation.json +trans.he = public/language/he/admin/settings/navigation.json +trans.hr = public/language/hr/admin/settings/navigation.json trans.hu = public/language/hu/admin/settings/navigation.json trans.hy = public/language/hy/admin/settings/navigation.json -trans.ja = public/language/ja/admin/settings/navigation.json -trans.lt = public/language/lt/admin/settings/navigation.json -trans.ru = public/language/ru/admin/settings/navigation.json -trans.sk = public/language/sk/admin/settings/navigation.json -trans.sr = public/language/sr/admin/settings/navigation.json -trans.de = public/language/de/admin/settings/navigation.json -trans.et = public/language/et/admin/settings/navigation.json -trans.fi = public/language/fi/admin/settings/navigation.json -trans.gl = public/language/gl/admin/settings/navigation.json -trans.sc = public/language/sc/admin/settings/navigation.json -trans.sl = public/language/sl/admin/settings/navigation.json -trans.th = public/language/th/admin/settings/navigation.json -trans.bg = public/language/bg/admin/settings/navigation.json -trans.cs = public/language/cs/admin/settings/navigation.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/navigation.json -trans.ro = public/language/ro/admin/settings/navigation.json -trans.sq_AL = public/language/sq-AL/admin/settings/navigation.json -trans.tr = public/language/tr/admin/settings/navigation.json -trans.zh_TW = public/language/zh-TW/admin/settings/navigation.json -trans.ar = public/language/ar/admin/settings/navigation.json -trans.hr = public/language/hr/admin/settings/navigation.json trans.id = public/language/id/admin/settings/navigation.json +trans.it = public/language/it/admin/settings/navigation.json +trans.ja = public/language/ja/admin/settings/navigation.json trans.ko = public/language/ko/admin/settings/navigation.json -trans.nb = public/language/nb/admin/settings/navigation.json -trans.pl = public/language/pl/admin/settings/navigation.json -trans.sv = public/language/sv/admin/settings/navigation.json -trans.el = public/language/el/admin/settings/navigation.json -trans.he = public/language/he/admin/settings/navigation.json +trans.lt = public/language/lt/admin/settings/navigation.json trans.lv = public/language/lv/admin/settings/navigation.json +trans.ms = public/language/ms/admin/settings/navigation.json +trans.nb = public/language/nb/admin/settings/navigation.json +trans.nl = public/language/nl/admin/settings/navigation.json +trans.nn_NO = public/language/nn-NO/admin/settings/navigation.json +trans.pl = public/language/pl/admin/settings/navigation.json +trans.pt_BR = public/language/pt-BR/admin/settings/navigation.json +trans.pt_PT = public/language/pt-PT/admin/settings/navigation.json +trans.ro = public/language/ro/admin/settings/navigation.json +trans.ru = public/language/ru/admin/settings/navigation.json +trans.rw = public/language/rw/admin/settings/navigation.json +trans.sc = public/language/sc/admin/settings/navigation.json +trans.sk = public/language/sk/admin/settings/navigation.json +trans.sl = public/language/sl/admin/settings/navigation.json +trans.sq_AL = public/language/sq-AL/admin/settings/navigation.json +trans.sr = public/language/sr/admin/settings/navigation.json +trans.sv = public/language/sv/admin/settings/navigation.json +trans.th = public/language/th/admin/settings/navigation.json +trans.tr = public/language/tr/admin/settings/navigation.json +trans.uk = public/language/uk/admin/settings/navigation.json +trans.ur = public/language/ur/admin/settings/navigation.json +trans.vi = public/language/vi/admin/settings/navigation.json +trans.zh_CN = public/language/zh-CN/admin/settings/navigation.json +trans.zh_TW = public/language/zh-TW/admin/settings/navigation.json [o:nodebb:p:nodebb:r:admin-settings-notifications] file_filter = public/language//admin/settings/notifications.json source_file = public/language/en-GB/admin/settings/notifications.json source_lang = en_GB type = KEYVALUEJSON -trans.zh_TW = public/language/zh-TW/admin/settings/notifications.json -trans.fi = public/language/fi/admin/settings/notifications.json -trans.id = public/language/id/admin/settings/notifications.json -trans.pt_PT = public/language/pt-PT/admin/settings/notifications.json -trans.rw = public/language/rw/admin/settings/notifications.json trans.ar = public/language/ar/admin/settings/notifications.json +trans.az = public/language/az/admin/settings/notifications.json +trans.bg = public/language/bg/admin/settings/notifications.json trans.bn = public/language/bn/admin/settings/notifications.json +trans.cs = public/language/cs/admin/settings/notifications.json +trans.da = public/language/da/admin/settings/notifications.json +trans.de = public/language/de/admin/settings/notifications.json trans.el = public/language/el/admin/settings/notifications.json trans.en_US = public/language/en-US/admin/settings/notifications.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/notifications.json +trans.es = public/language/es/admin/settings/notifications.json +trans.et = public/language/et/admin/settings/notifications.json +trans.fa_IR = public/language/fa-IR/admin/settings/notifications.json +trans.fi = public/language/fi/admin/settings/notifications.json +trans.fr = public/language/fr/admin/settings/notifications.json +trans.gl = public/language/gl/admin/settings/notifications.json +trans.he = public/language/he/admin/settings/notifications.json +trans.hr = public/language/hr/admin/settings/notifications.json +trans.hu = public/language/hu/admin/settings/notifications.json +trans.hy = public/language/hy/admin/settings/notifications.json +trans.id = public/language/id/admin/settings/notifications.json +trans.it = public/language/it/admin/settings/notifications.json +trans.ja = public/language/ja/admin/settings/notifications.json +trans.ko = public/language/ko/admin/settings/notifications.json +trans.lt = public/language/lt/admin/settings/notifications.json +trans.lv = public/language/lv/admin/settings/notifications.json +trans.ms = public/language/ms/admin/settings/notifications.json +trans.nb = public/language/nb/admin/settings/notifications.json +trans.nl = public/language/nl/admin/settings/notifications.json +trans.nn_NO = public/language/nn-NO/admin/settings/notifications.json +trans.pl = public/language/pl/admin/settings/notifications.json +trans.pt_BR = public/language/pt-BR/admin/settings/notifications.json +trans.pt_PT = public/language/pt-PT/admin/settings/notifications.json +trans.ro = public/language/ro/admin/settings/notifications.json +trans.ru = public/language/ru/admin/settings/notifications.json +trans.rw = public/language/rw/admin/settings/notifications.json +trans.sc = public/language/sc/admin/settings/notifications.json trans.sk = public/language/sk/admin/settings/notifications.json +trans.sl = public/language/sl/admin/settings/notifications.json +trans.sq_AL = public/language/sq-AL/admin/settings/notifications.json trans.sr = public/language/sr/admin/settings/notifications.json trans.sv = public/language/sv/admin/settings/notifications.json trans.th = public/language/th/admin/settings/notifications.json -trans.cs = public/language/cs/admin/settings/notifications.json -trans.it = public/language/it/admin/settings/notifications.json -trans.ru = public/language/ru/admin/settings/notifications.json -trans.sq_AL = public/language/sq-AL/admin/settings/notifications.json -trans.vi = public/language/vi/admin/settings/notifications.json -trans.fr = public/language/fr/admin/settings/notifications.json -trans.hy = public/language/hy/admin/settings/notifications.json -trans.sl = public/language/sl/admin/settings/notifications.json -trans.uk = public/language/uk/admin/settings/notifications.json -trans.ms = public/language/ms/admin/settings/notifications.json -trans.nl = public/language/nl/admin/settings/notifications.json -trans.ro = public/language/ro/admin/settings/notifications.json -trans.sc = public/language/sc/admin/settings/notifications.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/notifications.json -trans.gl = public/language/gl/admin/settings/notifications.json -trans.he = public/language/he/admin/settings/notifications.json -trans.hu = public/language/hu/admin/settings/notifications.json trans.tr = public/language/tr/admin/settings/notifications.json +trans.uk = public/language/uk/admin/settings/notifications.json +trans.ur = public/language/ur/admin/settings/notifications.json +trans.vi = public/language/vi/admin/settings/notifications.json trans.zh_CN = public/language/zh-CN/admin/settings/notifications.json -trans.ko = public/language/ko/admin/settings/notifications.json -trans.lv = public/language/lv/admin/settings/notifications.json -trans.nb = public/language/nb/admin/settings/notifications.json -trans.pl = public/language/pl/admin/settings/notifications.json -trans.bg = public/language/bg/admin/settings/notifications.json -trans.da = public/language/da/admin/settings/notifications.json -trans.de = public/language/de/admin/settings/notifications.json -trans.hr = public/language/hr/admin/settings/notifications.json -trans.pt_BR = public/language/pt-BR/admin/settings/notifications.json -trans.et = public/language/et/admin/settings/notifications.json -trans.lt = public/language/lt/admin/settings/notifications.json -trans.es = public/language/es/admin/settings/notifications.json -trans.fa_IR = public/language/fa-IR/admin/settings/notifications.json -trans.ja = public/language/ja/admin/settings/notifications.json +trans.zh_TW = public/language/zh-TW/admin/settings/notifications.json [o:nodebb:p:nodebb:r:admin-settings-pagination] file_filter = public/language//admin/settings/pagination.json source_file = public/language/en-GB/admin/settings/pagination.json source_lang = en_GB type = KEYVALUEJSON -trans.sq_AL = public/language/sq-AL/admin/settings/pagination.json -trans.th = public/language/th/admin/settings/pagination.json +trans.ar = public/language/ar/admin/settings/pagination.json +trans.az = public/language/az/admin/settings/pagination.json +trans.bg = public/language/bg/admin/settings/pagination.json +trans.bn = public/language/bn/admin/settings/pagination.json +trans.cs = public/language/cs/admin/settings/pagination.json +trans.da = public/language/da/admin/settings/pagination.json trans.de = public/language/de/admin/settings/pagination.json +trans.el = public/language/el/admin/settings/pagination.json +trans.en_US = public/language/en-US/admin/settings/pagination.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/pagination.json +trans.es = public/language/es/admin/settings/pagination.json +trans.et = public/language/et/admin/settings/pagination.json +trans.fa_IR = public/language/fa-IR/admin/settings/pagination.json +trans.fi = public/language/fi/admin/settings/pagination.json +trans.fr = public/language/fr/admin/settings/pagination.json +trans.gl = public/language/gl/admin/settings/pagination.json +trans.he = public/language/he/admin/settings/pagination.json +trans.hr = public/language/hr/admin/settings/pagination.json +trans.hu = public/language/hu/admin/settings/pagination.json +trans.hy = public/language/hy/admin/settings/pagination.json +trans.id = public/language/id/admin/settings/pagination.json +trans.it = public/language/it/admin/settings/pagination.json +trans.ja = public/language/ja/admin/settings/pagination.json +trans.ko = public/language/ko/admin/settings/pagination.json +trans.lt = public/language/lt/admin/settings/pagination.json +trans.lv = public/language/lv/admin/settings/pagination.json +trans.ms = public/language/ms/admin/settings/pagination.json +trans.nb = public/language/nb/admin/settings/pagination.json +trans.nl = public/language/nl/admin/settings/pagination.json +trans.nn_NO = public/language/nn-NO/admin/settings/pagination.json +trans.pl = public/language/pl/admin/settings/pagination.json +trans.pt_BR = public/language/pt-BR/admin/settings/pagination.json +trans.pt_PT = public/language/pt-PT/admin/settings/pagination.json +trans.ro = public/language/ro/admin/settings/pagination.json trans.ru = public/language/ru/admin/settings/pagination.json trans.rw = public/language/rw/admin/settings/pagination.json trans.sc = public/language/sc/admin/settings/pagination.json trans.sk = public/language/sk/admin/settings/pagination.json -trans.lv = public/language/lv/admin/settings/pagination.json -trans.ar = public/language/ar/admin/settings/pagination.json -trans.el = public/language/el/admin/settings/pagination.json -trans.en_US = public/language/en-US/admin/settings/pagination.json -trans.et = public/language/et/admin/settings/pagination.json -trans.fr = public/language/fr/admin/settings/pagination.json -trans.bg = public/language/bg/admin/settings/pagination.json -trans.fi = public/language/fi/admin/settings/pagination.json -trans.ja = public/language/ja/admin/settings/pagination.json -trans.ms = public/language/ms/admin/settings/pagination.json -trans.uk = public/language/uk/admin/settings/pagination.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/pagination.json -trans.hu = public/language/hu/admin/settings/pagination.json -trans.ko = public/language/ko/admin/settings/pagination.json -trans.lt = public/language/lt/admin/settings/pagination.json -trans.nl = public/language/nl/admin/settings/pagination.json -trans.hr = public/language/hr/admin/settings/pagination.json -trans.pl = public/language/pl/admin/settings/pagination.json -trans.pt_BR = public/language/pt-BR/admin/settings/pagination.json -trans.cs = public/language/cs/admin/settings/pagination.json -trans.da = public/language/da/admin/settings/pagination.json -trans.es = public/language/es/admin/settings/pagination.json -trans.gl = public/language/gl/admin/settings/pagination.json -trans.he = public/language/he/admin/settings/pagination.json -trans.pt_PT = public/language/pt-PT/admin/settings/pagination.json -trans.ro = public/language/ro/admin/settings/pagination.json -trans.id = public/language/id/admin/settings/pagination.json -trans.tr = public/language/tr/admin/settings/pagination.json -trans.vi = public/language/vi/admin/settings/pagination.json -trans.fa_IR = public/language/fa-IR/admin/settings/pagination.json -trans.it = public/language/it/admin/settings/pagination.json trans.sl = public/language/sl/admin/settings/pagination.json -trans.zh_CN = public/language/zh-CN/admin/settings/pagination.json -trans.zh_TW = public/language/zh-TW/admin/settings/pagination.json -trans.bn = public/language/bn/admin/settings/pagination.json -trans.hy = public/language/hy/admin/settings/pagination.json -trans.nb = public/language/nb/admin/settings/pagination.json +trans.sq_AL = public/language/sq-AL/admin/settings/pagination.json trans.sr = public/language/sr/admin/settings/pagination.json trans.sv = public/language/sv/admin/settings/pagination.json +trans.th = public/language/th/admin/settings/pagination.json +trans.tr = public/language/tr/admin/settings/pagination.json +trans.uk = public/language/uk/admin/settings/pagination.json +trans.ur = public/language/ur/admin/settings/pagination.json +trans.vi = public/language/vi/admin/settings/pagination.json +trans.zh_CN = public/language/zh-CN/admin/settings/pagination.json +trans.zh_TW = public/language/zh-TW/admin/settings/pagination.json [o:nodebb:p:nodebb:r:admin-settings-post] file_filter = public/language//admin/settings/post.json source_file = public/language/en-GB/admin/settings/post.json source_lang = en_GB type = KEYVALUEJSON -trans.id = public/language/id/admin/settings/post.json +trans.ar = public/language/ar/admin/settings/post.json +trans.az = public/language/az/admin/settings/post.json +trans.bg = public/language/bg/admin/settings/post.json trans.bn = public/language/bn/admin/settings/post.json +trans.cs = public/language/cs/admin/settings/post.json trans.da = public/language/da/admin/settings/post.json trans.de = public/language/de/admin/settings/post.json -trans.en_US = public/language/en-US/admin/settings/post.json -trans.ms = public/language/ms/admin/settings/post.json -trans.ro = public/language/ro/admin/settings/post.json -trans.zh_TW = public/language/zh-TW/admin/settings/post.json -trans.cs = public/language/cs/admin/settings/post.json -trans.he = public/language/he/admin/settings/post.json -trans.ja = public/language/ja/admin/settings/post.json -trans.ko = public/language/ko/admin/settings/post.json -trans.hr = public/language/hr/admin/settings/post.json -trans.sq_AL = public/language/sq-AL/admin/settings/post.json -trans.lv = public/language/lv/admin/settings/post.json -trans.nl = public/language/nl/admin/settings/post.json -trans.pt_PT = public/language/pt-PT/admin/settings/post.json -trans.sr = public/language/sr/admin/settings/post.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/post.json -trans.et = public/language/et/admin/settings/post.json -trans.hu = public/language/hu/admin/settings/post.json -trans.it = public/language/it/admin/settings/post.json -trans.th = public/language/th/admin/settings/post.json -trans.gl = public/language/gl/admin/settings/post.json -trans.nb = public/language/nb/admin/settings/post.json -trans.sc = public/language/sc/admin/settings/post.json -trans.zh_CN = public/language/zh-CN/admin/settings/post.json -trans.rw = public/language/rw/admin/settings/post.json -trans.sv = public/language/sv/admin/settings/post.json -trans.vi = public/language/vi/admin/settings/post.json -trans.ar = public/language/ar/admin/settings/post.json trans.el = public/language/el/admin/settings/post.json +trans.en_US = public/language/en-US/admin/settings/post.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/post.json +trans.es = public/language/es/admin/settings/post.json +trans.et = public/language/et/admin/settings/post.json trans.fa_IR = public/language/fa-IR/admin/settings/post.json trans.fi = public/language/fi/admin/settings/post.json -trans.ru = public/language/ru/admin/settings/post.json -trans.bg = public/language/bg/admin/settings/post.json -trans.es = public/language/es/admin/settings/post.json +trans.fr = public/language/fr/admin/settings/post.json +trans.gl = public/language/gl/admin/settings/post.json +trans.he = public/language/he/admin/settings/post.json +trans.hr = public/language/hr/admin/settings/post.json +trans.hu = public/language/hu/admin/settings/post.json trans.hy = public/language/hy/admin/settings/post.json +trans.id = public/language/id/admin/settings/post.json +trans.it = public/language/it/admin/settings/post.json +trans.ja = public/language/ja/admin/settings/post.json +trans.ko = public/language/ko/admin/settings/post.json +trans.lt = public/language/lt/admin/settings/post.json +trans.lv = public/language/lv/admin/settings/post.json +trans.ms = public/language/ms/admin/settings/post.json +trans.nb = public/language/nb/admin/settings/post.json +trans.nl = public/language/nl/admin/settings/post.json +trans.nn_NO = public/language/nn-NO/admin/settings/post.json +trans.pl = public/language/pl/admin/settings/post.json trans.pt_BR = public/language/pt-BR/admin/settings/post.json +trans.pt_PT = public/language/pt-PT/admin/settings/post.json +trans.ro = public/language/ro/admin/settings/post.json +trans.ru = public/language/ru/admin/settings/post.json +trans.rw = public/language/rw/admin/settings/post.json +trans.sc = public/language/sc/admin/settings/post.json +trans.sk = public/language/sk/admin/settings/post.json trans.sl = public/language/sl/admin/settings/post.json +trans.sq_AL = public/language/sq-AL/admin/settings/post.json +trans.sr = public/language/sr/admin/settings/post.json +trans.sv = public/language/sv/admin/settings/post.json +trans.th = public/language/th/admin/settings/post.json trans.tr = public/language/tr/admin/settings/post.json trans.uk = public/language/uk/admin/settings/post.json -trans.fr = public/language/fr/admin/settings/post.json -trans.lt = public/language/lt/admin/settings/post.json -trans.pl = public/language/pl/admin/settings/post.json -trans.sk = public/language/sk/admin/settings/post.json +trans.ur = public/language/ur/admin/settings/post.json +trans.vi = public/language/vi/admin/settings/post.json +trans.zh_CN = public/language/zh-CN/admin/settings/post.json +trans.zh_TW = public/language/zh-TW/admin/settings/post.json [o:nodebb:p:nodebb:r:admin-settings-reputation] file_filter = public/language//admin/settings/reputation.json source_file = public/language/en-GB/admin/settings/reputation.json source_lang = en_GB type = KEYVALUEJSON -trans.fi = public/language/fi/admin/settings/reputation.json -trans.ja = public/language/ja/admin/settings/reputation.json -trans.lt = public/language/lt/admin/settings/reputation.json -trans.pl = public/language/pl/admin/settings/reputation.json -trans.ro = public/language/ro/admin/settings/reputation.json -trans.bg = public/language/bg/admin/settings/reputation.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/reputation.json -trans.fa_IR = public/language/fa-IR/admin/settings/reputation.json -trans.sl = public/language/sl/admin/settings/reputation.json -trans.sv = public/language/sv/admin/settings/reputation.json -trans.uk = public/language/uk/admin/settings/reputation.json -trans.sr = public/language/sr/admin/settings/reputation.json -trans.zh_CN = public/language/zh-CN/admin/settings/reputation.json trans.ar = public/language/ar/admin/settings/reputation.json -trans.el = public/language/el/admin/settings/reputation.json -trans.es = public/language/es/admin/settings/reputation.json -trans.sc = public/language/sc/admin/settings/reputation.json -trans.hr = public/language/hr/admin/settings/reputation.json -trans.ko = public/language/ko/admin/settings/reputation.json -trans.nb = public/language/nb/admin/settings/reputation.json +trans.az = public/language/az/admin/settings/reputation.json +trans.bg = public/language/bg/admin/settings/reputation.json trans.bn = public/language/bn/admin/settings/reputation.json -trans.de = public/language/de/admin/settings/reputation.json -trans.et = public/language/et/admin/settings/reputation.json -trans.rw = public/language/rw/admin/settings/reputation.json -trans.th = public/language/th/admin/settings/reputation.json -trans.zh_TW = public/language/zh-TW/admin/settings/reputation.json -trans.fr = public/language/fr/admin/settings/reputation.json -trans.it = public/language/it/admin/settings/reputation.json -trans.ru = public/language/ru/admin/settings/reputation.json -trans.pt_PT = public/language/pt-PT/admin/settings/reputation.json -trans.sk = public/language/sk/admin/settings/reputation.json -trans.id = public/language/id/admin/settings/reputation.json -trans.ms = public/language/ms/admin/settings/reputation.json -trans.nl = public/language/nl/admin/settings/reputation.json -trans.he = public/language/he/admin/settings/reputation.json -trans.sq_AL = public/language/sq-AL/admin/settings/reputation.json -trans.tr = public/language/tr/admin/settings/reputation.json trans.cs = public/language/cs/admin/settings/reputation.json trans.da = public/language/da/admin/settings/reputation.json +trans.de = public/language/de/admin/settings/reputation.json +trans.el = public/language/el/admin/settings/reputation.json trans.en_US = public/language/en-US/admin/settings/reputation.json -trans.lv = public/language/lv/admin/settings/reputation.json -trans.pt_BR = public/language/pt-BR/admin/settings/reputation.json -trans.vi = public/language/vi/admin/settings/reputation.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/reputation.json +trans.es = public/language/es/admin/settings/reputation.json +trans.et = public/language/et/admin/settings/reputation.json +trans.fa_IR = public/language/fa-IR/admin/settings/reputation.json +trans.fi = public/language/fi/admin/settings/reputation.json +trans.fr = public/language/fr/admin/settings/reputation.json trans.gl = public/language/gl/admin/settings/reputation.json +trans.he = public/language/he/admin/settings/reputation.json +trans.hr = public/language/hr/admin/settings/reputation.json trans.hu = public/language/hu/admin/settings/reputation.json trans.hy = public/language/hy/admin/settings/reputation.json - -[o:nodebb:p:nodebb:r:admin-settings-social] -file_filter = public/language//admin/settings/social.json -source_file = public/language/en-GB/admin/settings/social.json -source_lang = en_GB -type = KEYVALUEJSON -trans.nl = public/language/nl/admin/settings/social.json -trans.sc = public/language/sc/admin/settings/social.json -trans.sv = public/language/sv/admin/settings/social.json -trans.rw = public/language/rw/admin/settings/social.json -trans.bn = public/language/bn/admin/settings/social.json -trans.hr = public/language/hr/admin/settings/social.json -trans.id = public/language/id/admin/settings/social.json -trans.pt_PT = public/language/pt-PT/admin/settings/social.json -trans.de = public/language/de/admin/settings/social.json -trans.hu = public/language/hu/admin/settings/social.json -trans.pt_BR = public/language/pt-BR/admin/settings/social.json -trans.ja = public/language/ja/admin/settings/social.json -trans.sq_AL = public/language/sq-AL/admin/settings/social.json -trans.zh_TW = public/language/zh-TW/admin/settings/social.json -trans.cs = public/language/cs/admin/settings/social.json -trans.en_US = public/language/en-US/admin/settings/social.json -trans.fi = public/language/fi/admin/settings/social.json -trans.nb = public/language/nb/admin/settings/social.json -trans.pl = public/language/pl/admin/settings/social.json -trans.th = public/language/th/admin/settings/social.json -trans.bg = public/language/bg/admin/settings/social.json -trans.lt = public/language/lt/admin/settings/social.json -trans.lv = public/language/lv/admin/settings/social.json -trans.ko = public/language/ko/admin/settings/social.json -trans.es = public/language/es/admin/settings/social.json -trans.fr = public/language/fr/admin/settings/social.json -trans.he = public/language/he/admin/settings/social.json -trans.fa_IR = public/language/fa-IR/admin/settings/social.json -trans.hy = public/language/hy/admin/settings/social.json -trans.ms = public/language/ms/admin/settings/social.json -trans.ru = public/language/ru/admin/settings/social.json -trans.sk = public/language/sk/admin/settings/social.json -trans.ar = public/language/ar/admin/settings/social.json -trans.el = public/language/el/admin/settings/social.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/social.json -trans.uk = public/language/uk/admin/settings/social.json -trans.sl = public/language/sl/admin/settings/social.json -trans.sr = public/language/sr/admin/settings/social.json -trans.tr = public/language/tr/admin/settings/social.json -trans.it = public/language/it/admin/settings/social.json -trans.ro = public/language/ro/admin/settings/social.json -trans.vi = public/language/vi/admin/settings/social.json -trans.zh_CN = public/language/zh-CN/admin/settings/social.json -trans.da = public/language/da/admin/settings/social.json -trans.et = public/language/et/admin/settings/social.json -trans.gl = public/language/gl/admin/settings/social.json +trans.id = public/language/id/admin/settings/reputation.json +trans.it = public/language/it/admin/settings/reputation.json +trans.ja = public/language/ja/admin/settings/reputation.json +trans.ko = public/language/ko/admin/settings/reputation.json +trans.lt = public/language/lt/admin/settings/reputation.json +trans.lv = public/language/lv/admin/settings/reputation.json +trans.ms = public/language/ms/admin/settings/reputation.json +trans.nb = public/language/nb/admin/settings/reputation.json +trans.nl = public/language/nl/admin/settings/reputation.json +trans.nn_NO = public/language/nn-NO/admin/settings/reputation.json +trans.pl = public/language/pl/admin/settings/reputation.json +trans.pt_BR = public/language/pt-BR/admin/settings/reputation.json +trans.pt_PT = public/language/pt-PT/admin/settings/reputation.json +trans.ro = public/language/ro/admin/settings/reputation.json +trans.ru = public/language/ru/admin/settings/reputation.json +trans.rw = public/language/rw/admin/settings/reputation.json +trans.sc = public/language/sc/admin/settings/reputation.json +trans.sk = public/language/sk/admin/settings/reputation.json +trans.sl = public/language/sl/admin/settings/reputation.json +trans.sq_AL = public/language/sq-AL/admin/settings/reputation.json +trans.sr = public/language/sr/admin/settings/reputation.json +trans.sv = public/language/sv/admin/settings/reputation.json +trans.th = public/language/th/admin/settings/reputation.json +trans.tr = public/language/tr/admin/settings/reputation.json +trans.uk = public/language/uk/admin/settings/reputation.json +trans.ur = public/language/ur/admin/settings/reputation.json +trans.vi = public/language/vi/admin/settings/reputation.json +trans.zh_CN = public/language/zh-CN/admin/settings/reputation.json +trans.zh_TW = public/language/zh-TW/admin/settings/reputation.json [o:nodebb:p:nodebb:r:admin-settings-sockets] file_filter = public/language//admin/settings/sockets.json source_file = public/language/en-GB/admin/settings/sockets.json source_lang = en_GB type = KEYVALUEJSON -trans.uk = public/language/uk/admin/settings/sockets.json -trans.en_US = public/language/en-US/admin/settings/sockets.json -trans.gl = public/language/gl/admin/settings/sockets.json -trans.ja = public/language/ja/admin/settings/sockets.json -trans.pt_BR = public/language/pt-BR/admin/settings/sockets.json -trans.sc = public/language/sc/admin/settings/sockets.json -trans.tr = public/language/tr/admin/settings/sockets.json -trans.da = public/language/da/admin/settings/sockets.json -trans.lv = public/language/lv/admin/settings/sockets.json -trans.sk = public/language/sk/admin/settings/sockets.json -trans.sr = public/language/sr/admin/settings/sockets.json -trans.vi = public/language/vi/admin/settings/sockets.json trans.ar = public/language/ar/admin/settings/sockets.json -trans.cs = public/language/cs/admin/settings/sockets.json -trans.de = public/language/de/admin/settings/sockets.json -trans.hy = public/language/hy/admin/settings/sockets.json -trans.id = public/language/id/admin/settings/sockets.json -trans.rw = public/language/rw/admin/settings/sockets.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/sockets.json -trans.fi = public/language/fi/admin/settings/sockets.json -trans.it = public/language/it/admin/settings/sockets.json -trans.ro = public/language/ro/admin/settings/sockets.json -trans.nb = public/language/nb/admin/settings/sockets.json -trans.sq_AL = public/language/sq-AL/admin/settings/sockets.json +trans.az = public/language/az/admin/settings/sockets.json trans.bg = public/language/bg/admin/settings/sockets.json trans.bn = public/language/bn/admin/settings/sockets.json -trans.es = public/language/es/admin/settings/sockets.json -trans.fr = public/language/fr/admin/settings/sockets.json -trans.hr = public/language/hr/admin/settings/sockets.json -trans.ko = public/language/ko/admin/settings/sockets.json -trans.zh_TW = public/language/zh-TW/admin/settings/sockets.json +trans.cs = public/language/cs/admin/settings/sockets.json +trans.da = public/language/da/admin/settings/sockets.json +trans.de = public/language/de/admin/settings/sockets.json trans.el = public/language/el/admin/settings/sockets.json -trans.he = public/language/he/admin/settings/sockets.json -trans.ms = public/language/ms/admin/settings/sockets.json -trans.sv = public/language/sv/admin/settings/sockets.json +trans.en_US = public/language/en-US/admin/settings/sockets.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/sockets.json +trans.es = public/language/es/admin/settings/sockets.json trans.et = public/language/et/admin/settings/sockets.json -trans.pl = public/language/pl/admin/settings/sockets.json -trans.ru = public/language/ru/admin/settings/sockets.json -trans.zh_CN = public/language/zh-CN/admin/settings/sockets.json -trans.th = public/language/th/admin/settings/sockets.json trans.fa_IR = public/language/fa-IR/admin/settings/sockets.json +trans.fi = public/language/fi/admin/settings/sockets.json +trans.fr = public/language/fr/admin/settings/sockets.json +trans.gl = public/language/gl/admin/settings/sockets.json +trans.he = public/language/he/admin/settings/sockets.json +trans.hr = public/language/hr/admin/settings/sockets.json trans.hu = public/language/hu/admin/settings/sockets.json +trans.hy = public/language/hy/admin/settings/sockets.json +trans.id = public/language/id/admin/settings/sockets.json +trans.it = public/language/it/admin/settings/sockets.json +trans.ja = public/language/ja/admin/settings/sockets.json +trans.ko = public/language/ko/admin/settings/sockets.json trans.lt = public/language/lt/admin/settings/sockets.json +trans.lv = public/language/lv/admin/settings/sockets.json +trans.ms = public/language/ms/admin/settings/sockets.json +trans.nb = public/language/nb/admin/settings/sockets.json trans.nl = public/language/nl/admin/settings/sockets.json +trans.nn_NO = public/language/nn-NO/admin/settings/sockets.json +trans.pl = public/language/pl/admin/settings/sockets.json +trans.pt_BR = public/language/pt-BR/admin/settings/sockets.json trans.pt_PT = public/language/pt-PT/admin/settings/sockets.json +trans.ro = public/language/ro/admin/settings/sockets.json +trans.ru = public/language/ru/admin/settings/sockets.json +trans.rw = public/language/rw/admin/settings/sockets.json +trans.sc = public/language/sc/admin/settings/sockets.json +trans.sk = public/language/sk/admin/settings/sockets.json trans.sl = public/language/sl/admin/settings/sockets.json +trans.sq_AL = public/language/sq-AL/admin/settings/sockets.json +trans.sr = public/language/sr/admin/settings/sockets.json +trans.sv = public/language/sv/admin/settings/sockets.json +trans.th = public/language/th/admin/settings/sockets.json +trans.tr = public/language/tr/admin/settings/sockets.json +trans.uk = public/language/uk/admin/settings/sockets.json +trans.ur = public/language/ur/admin/settings/sockets.json +trans.vi = public/language/vi/admin/settings/sockets.json +trans.zh_CN = public/language/zh-CN/admin/settings/sockets.json +trans.zh_TW = public/language/zh-TW/admin/settings/sockets.json [o:nodebb:p:nodebb:r:admin-settings-sounds] file_filter = public/language//admin/settings/sounds.json source_file = public/language/en-GB/admin/settings/sounds.json source_lang = en_GB type = KEYVALUEJSON -trans.sv = public/language/sv/admin/settings/sounds.json +trans.ar = public/language/ar/admin/settings/sounds.json +trans.az = public/language/az/admin/settings/sounds.json +trans.bg = public/language/bg/admin/settings/sounds.json +trans.bn = public/language/bn/admin/settings/sounds.json +trans.cs = public/language/cs/admin/settings/sounds.json +trans.da = public/language/da/admin/settings/sounds.json trans.de = public/language/de/admin/settings/sounds.json trans.el = public/language/el/admin/settings/sounds.json -trans.es = public/language/es/admin/settings/sounds.json -trans.he = public/language/he/admin/settings/sounds.json -trans.it = public/language/it/admin/settings/sounds.json -trans.pt_BR = public/language/pt-BR/admin/settings/sounds.json -trans.sq_AL = public/language/sq-AL/admin/settings/sounds.json -trans.vi = public/language/vi/admin/settings/sounds.json -trans.hr = public/language/hr/admin/settings/sounds.json -trans.hu = public/language/hu/admin/settings/sounds.json -trans.bg = public/language/bg/admin/settings/sounds.json -trans.ja = public/language/ja/admin/settings/sounds.json -trans.lt = public/language/lt/admin/settings/sounds.json -trans.nl = public/language/nl/admin/settings/sounds.json -trans.ru = public/language/ru/admin/settings/sounds.json -trans.cs = public/language/cs/admin/settings/sounds.json +trans.en_US = public/language/en-US/admin/settings/sounds.json trans.en@pirate = public/language/en-x-pirate/admin/settings/sounds.json +trans.es = public/language/es/admin/settings/sounds.json +trans.et = public/language/et/admin/settings/sounds.json trans.fa_IR = public/language/fa-IR/admin/settings/sounds.json trans.fi = public/language/fi/admin/settings/sounds.json -trans.nb = public/language/nb/admin/settings/sounds.json -trans.th = public/language/th/admin/settings/sounds.json -trans.ar = public/language/ar/admin/settings/sounds.json -trans.da = public/language/da/admin/settings/sounds.json +trans.fr = public/language/fr/admin/settings/sounds.json trans.gl = public/language/gl/admin/settings/sounds.json +trans.he = public/language/he/admin/settings/sounds.json +trans.hr = public/language/hr/admin/settings/sounds.json +trans.hu = public/language/hu/admin/settings/sounds.json +trans.hy = public/language/hy/admin/settings/sounds.json +trans.id = public/language/id/admin/settings/sounds.json +trans.it = public/language/it/admin/settings/sounds.json +trans.ja = public/language/ja/admin/settings/sounds.json +trans.ko = public/language/ko/admin/settings/sounds.json +trans.lt = public/language/lt/admin/settings/sounds.json trans.lv = public/language/lv/admin/settings/sounds.json trans.ms = public/language/ms/admin/settings/sounds.json +trans.nb = public/language/nb/admin/settings/sounds.json +trans.nl = public/language/nl/admin/settings/sounds.json +trans.nn_NO = public/language/nn-NO/admin/settings/sounds.json +trans.pl = public/language/pl/admin/settings/sounds.json +trans.pt_BR = public/language/pt-BR/admin/settings/sounds.json +trans.pt_PT = public/language/pt-PT/admin/settings/sounds.json +trans.ro = public/language/ro/admin/settings/sounds.json +trans.ru = public/language/ru/admin/settings/sounds.json +trans.rw = public/language/rw/admin/settings/sounds.json trans.sc = public/language/sc/admin/settings/sounds.json -trans.sr = public/language/sr/admin/settings/sounds.json -trans.bn = public/language/bn/admin/settings/sounds.json -trans.en_US = public/language/en-US/admin/settings/sounds.json -trans.hy = public/language/hy/admin/settings/sounds.json trans.sk = public/language/sk/admin/settings/sounds.json trans.sl = public/language/sl/admin/settings/sounds.json -trans.uk = public/language/uk/admin/settings/sounds.json -trans.zh_CN = public/language/zh-CN/admin/settings/sounds.json -trans.et = public/language/et/admin/settings/sounds.json -trans.fr = public/language/fr/admin/settings/sounds.json -trans.ko = public/language/ko/admin/settings/sounds.json -trans.ro = public/language/ro/admin/settings/sounds.json -trans.zh_TW = public/language/zh-TW/admin/settings/sounds.json -trans.id = public/language/id/admin/settings/sounds.json -trans.pl = public/language/pl/admin/settings/sounds.json -trans.pt_PT = public/language/pt-PT/admin/settings/sounds.json -trans.rw = public/language/rw/admin/settings/sounds.json +trans.sq_AL = public/language/sq-AL/admin/settings/sounds.json +trans.sr = public/language/sr/admin/settings/sounds.json +trans.sv = public/language/sv/admin/settings/sounds.json +trans.th = public/language/th/admin/settings/sounds.json trans.tr = public/language/tr/admin/settings/sounds.json +trans.uk = public/language/uk/admin/settings/sounds.json +trans.ur = public/language/ur/admin/settings/sounds.json +trans.vi = public/language/vi/admin/settings/sounds.json +trans.zh_CN = public/language/zh-CN/admin/settings/sounds.json +trans.zh_TW = public/language/zh-TW/admin/settings/sounds.json [o:nodebb:p:nodebb:r:admin-settings-tags] file_filter = public/language//admin/settings/tags.json source_file = public/language/en-GB/admin/settings/tags.json source_lang = en_GB type = KEYVALUEJSON -trans.bg = public/language/bg/admin/settings/tags.json -trans.cs = public/language/cs/admin/settings/tags.json -trans.de = public/language/de/admin/settings/tags.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/tags.json -trans.lv = public/language/lv/admin/settings/tags.json -trans.th = public/language/th/admin/settings/tags.json -trans.zh_TW = public/language/zh-TW/admin/settings/tags.json -trans.hu = public/language/hu/admin/settings/tags.json -trans.it = public/language/it/admin/settings/tags.json -trans.pt_BR = public/language/pt-BR/admin/settings/tags.json -trans.rw = public/language/rw/admin/settings/tags.json -trans.sk = public/language/sk/admin/settings/tags.json -trans.sv = public/language/sv/admin/settings/tags.json trans.ar = public/language/ar/admin/settings/tags.json -trans.gl = public/language/gl/admin/settings/tags.json -trans.ja = public/language/ja/admin/settings/tags.json -trans.lt = public/language/lt/admin/settings/tags.json -trans.sc = public/language/sc/admin/settings/tags.json -trans.zh_CN = public/language/zh-CN/admin/settings/tags.json -trans.ro = public/language/ro/admin/settings/tags.json +trans.az = public/language/az/admin/settings/tags.json +trans.bg = public/language/bg/admin/settings/tags.json trans.bn = public/language/bn/admin/settings/tags.json -trans.hr = public/language/hr/admin/settings/tags.json -trans.ko = public/language/ko/admin/settings/tags.json -trans.nb = public/language/nb/admin/settings/tags.json -trans.el = public/language/el/admin/settings/tags.json -trans.et = public/language/et/admin/settings/tags.json -trans.he = public/language/he/admin/settings/tags.json -trans.ms = public/language/ms/admin/settings/tags.json -trans.nl = public/language/nl/admin/settings/tags.json -trans.sl = public/language/sl/admin/settings/tags.json -trans.tr = public/language/tr/admin/settings/tags.json -trans.es = public/language/es/admin/settings/tags.json -trans.fr = public/language/fr/admin/settings/tags.json -trans.hy = public/language/hy/admin/settings/tags.json -trans.pl = public/language/pl/admin/settings/tags.json -trans.ru = public/language/ru/admin/settings/tags.json -trans.sq_AL = public/language/sq-AL/admin/settings/tags.json -trans.sr = public/language/sr/admin/settings/tags.json -trans.uk = public/language/uk/admin/settings/tags.json +trans.cs = public/language/cs/admin/settings/tags.json trans.da = public/language/da/admin/settings/tags.json +trans.de = public/language/de/admin/settings/tags.json +trans.el = public/language/el/admin/settings/tags.json trans.en_US = public/language/en-US/admin/settings/tags.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/tags.json +trans.es = public/language/es/admin/settings/tags.json +trans.et = public/language/et/admin/settings/tags.json trans.fa_IR = public/language/fa-IR/admin/settings/tags.json trans.fi = public/language/fi/admin/settings/tags.json +trans.fr = public/language/fr/admin/settings/tags.json +trans.gl = public/language/gl/admin/settings/tags.json +trans.he = public/language/he/admin/settings/tags.json +trans.hr = public/language/hr/admin/settings/tags.json +trans.hu = public/language/hu/admin/settings/tags.json +trans.hy = public/language/hy/admin/settings/tags.json trans.id = public/language/id/admin/settings/tags.json +trans.it = public/language/it/admin/settings/tags.json +trans.ja = public/language/ja/admin/settings/tags.json +trans.ko = public/language/ko/admin/settings/tags.json +trans.lt = public/language/lt/admin/settings/tags.json +trans.lv = public/language/lv/admin/settings/tags.json +trans.ms = public/language/ms/admin/settings/tags.json +trans.nb = public/language/nb/admin/settings/tags.json +trans.nl = public/language/nl/admin/settings/tags.json +trans.nn_NO = public/language/nn-NO/admin/settings/tags.json +trans.pl = public/language/pl/admin/settings/tags.json +trans.pt_BR = public/language/pt-BR/admin/settings/tags.json trans.pt_PT = public/language/pt-PT/admin/settings/tags.json +trans.ro = public/language/ro/admin/settings/tags.json +trans.ru = public/language/ru/admin/settings/tags.json +trans.rw = public/language/rw/admin/settings/tags.json +trans.sc = public/language/sc/admin/settings/tags.json +trans.sk = public/language/sk/admin/settings/tags.json +trans.sl = public/language/sl/admin/settings/tags.json +trans.sq_AL = public/language/sq-AL/admin/settings/tags.json +trans.sr = public/language/sr/admin/settings/tags.json +trans.sv = public/language/sv/admin/settings/tags.json +trans.th = public/language/th/admin/settings/tags.json +trans.tr = public/language/tr/admin/settings/tags.json +trans.uk = public/language/uk/admin/settings/tags.json +trans.ur = public/language/ur/admin/settings/tags.json trans.vi = public/language/vi/admin/settings/tags.json +trans.zh_CN = public/language/zh-CN/admin/settings/tags.json +trans.zh_TW = public/language/zh-TW/admin/settings/tags.json [o:nodebb:p:nodebb:r:admin-settings-uploads] file_filter = public/language//admin/settings/uploads.json @@ -2295,985 +2427,1096 @@ source_file = public/language/en-GB/admin/settings/uploads.json source_lang = en_GB type = KEYVALUEJSON trans.ar = public/language/ar/admin/settings/uploads.json -trans.it = public/language/it/admin/settings/uploads.json -trans.ko = public/language/ko/admin/settings/uploads.json -trans.sk = public/language/sk/admin/settings/uploads.json -trans.sq_AL = public/language/sq-AL/admin/settings/uploads.json -trans.fa_IR = public/language/fa-IR/admin/settings/uploads.json -trans.he = public/language/he/admin/settings/uploads.json -trans.ja = public/language/ja/admin/settings/uploads.json -trans.nb = public/language/nb/admin/settings/uploads.json -trans.nl = public/language/nl/admin/settings/uploads.json -trans.zh_TW = public/language/zh-TW/admin/settings/uploads.json -trans.ro = public/language/ro/admin/settings/uploads.json -trans.sl = public/language/sl/admin/settings/uploads.json -trans.da = public/language/da/admin/settings/uploads.json -trans.es = public/language/es/admin/settings/uploads.json -trans.et = public/language/et/admin/settings/uploads.json -trans.hr = public/language/hr/admin/settings/uploads.json -trans.id = public/language/id/admin/settings/uploads.json -trans.pt_BR = public/language/pt-BR/admin/settings/uploads.json -trans.uk = public/language/uk/admin/settings/uploads.json -trans.vi = public/language/vi/admin/settings/uploads.json -trans.th = public/language/th/admin/settings/uploads.json +trans.az = public/language/az/admin/settings/uploads.json trans.bg = public/language/bg/admin/settings/uploads.json -trans.el = public/language/el/admin/settings/uploads.json -trans.hu = public/language/hu/admin/settings/uploads.json -trans.lv = public/language/lv/admin/settings/uploads.json -trans.ms = public/language/ms/admin/settings/uploads.json -trans.pt_PT = public/language/pt-PT/admin/settings/uploads.json -trans.lt = public/language/lt/admin/settings/uploads.json trans.bn = public/language/bn/admin/settings/uploads.json trans.cs = public/language/cs/admin/settings/uploads.json +trans.da = public/language/da/admin/settings/uploads.json +trans.de = public/language/de/admin/settings/uploads.json +trans.el = public/language/el/admin/settings/uploads.json +trans.en_US = public/language/en-US/admin/settings/uploads.json trans.en@pirate = public/language/en-x-pirate/admin/settings/uploads.json +trans.es = public/language/es/admin/settings/uploads.json +trans.et = public/language/et/admin/settings/uploads.json +trans.fa_IR = public/language/fa-IR/admin/settings/uploads.json trans.fi = public/language/fi/admin/settings/uploads.json trans.fr = public/language/fr/admin/settings/uploads.json -trans.hy = public/language/hy/admin/settings/uploads.json trans.gl = public/language/gl/admin/settings/uploads.json -trans.ru = public/language/ru/admin/settings/uploads.json -trans.sr = public/language/sr/admin/settings/uploads.json -trans.sv = public/language/sv/admin/settings/uploads.json -trans.zh_CN = public/language/zh-CN/admin/settings/uploads.json -trans.de = public/language/de/admin/settings/uploads.json -trans.en_US = public/language/en-US/admin/settings/uploads.json +trans.he = public/language/he/admin/settings/uploads.json +trans.hr = public/language/hr/admin/settings/uploads.json +trans.hu = public/language/hu/admin/settings/uploads.json +trans.hy = public/language/hy/admin/settings/uploads.json +trans.id = public/language/id/admin/settings/uploads.json +trans.it = public/language/it/admin/settings/uploads.json +trans.ja = public/language/ja/admin/settings/uploads.json +trans.ko = public/language/ko/admin/settings/uploads.json +trans.lt = public/language/lt/admin/settings/uploads.json +trans.lv = public/language/lv/admin/settings/uploads.json +trans.ms = public/language/ms/admin/settings/uploads.json +trans.nb = public/language/nb/admin/settings/uploads.json +trans.nl = public/language/nl/admin/settings/uploads.json +trans.nn_NO = public/language/nn-NO/admin/settings/uploads.json trans.pl = public/language/pl/admin/settings/uploads.json +trans.pt_BR = public/language/pt-BR/admin/settings/uploads.json +trans.pt_PT = public/language/pt-PT/admin/settings/uploads.json +trans.ro = public/language/ro/admin/settings/uploads.json +trans.ru = public/language/ru/admin/settings/uploads.json trans.rw = public/language/rw/admin/settings/uploads.json trans.sc = public/language/sc/admin/settings/uploads.json +trans.sk = public/language/sk/admin/settings/uploads.json +trans.sl = public/language/sl/admin/settings/uploads.json +trans.sq_AL = public/language/sq-AL/admin/settings/uploads.json +trans.sr = public/language/sr/admin/settings/uploads.json +trans.sv = public/language/sv/admin/settings/uploads.json +trans.th = public/language/th/admin/settings/uploads.json trans.tr = public/language/tr/admin/settings/uploads.json +trans.uk = public/language/uk/admin/settings/uploads.json +trans.ur = public/language/ur/admin/settings/uploads.json +trans.vi = public/language/vi/admin/settings/uploads.json +trans.zh_CN = public/language/zh-CN/admin/settings/uploads.json +trans.zh_TW = public/language/zh-TW/admin/settings/uploads.json [o:nodebb:p:nodebb:r:admin-settings-user] file_filter = public/language//admin/settings/user.json source_file = public/language/en-GB/admin/settings/user.json source_lang = en_GB type = KEYVALUEJSON -trans.da = public/language/da/admin/settings/user.json -trans.el = public/language/el/admin/settings/user.json -trans.he = public/language/he/admin/settings/user.json -trans.ro = public/language/ro/admin/settings/user.json -trans.sq_AL = public/language/sq-AL/admin/settings/user.json -trans.gl = public/language/gl/admin/settings/user.json -trans.hu = public/language/hu/admin/settings/user.json -trans.nb = public/language/nb/admin/settings/user.json -trans.sv = public/language/sv/admin/settings/user.json -trans.uk = public/language/uk/admin/settings/user.json -trans.cs = public/language/cs/admin/settings/user.json -trans.en_US = public/language/en-US/admin/settings/user.json -trans.fa_IR = public/language/fa-IR/admin/settings/user.json -trans.fi = public/language/fi/admin/settings/user.json -trans.lv = public/language/lv/admin/settings/user.json -trans.ms = public/language/ms/admin/settings/user.json -trans.pl = public/language/pl/admin/settings/user.json -trans.ru = public/language/ru/admin/settings/user.json -trans.zh_CN = public/language/zh-CN/admin/settings/user.json -trans.hr = public/language/hr/admin/settings/user.json -trans.id = public/language/id/admin/settings/user.json -trans.it = public/language/it/admin/settings/user.json -trans.sk = public/language/sk/admin/settings/user.json -trans.sl = public/language/sl/admin/settings/user.json -trans.sr = public/language/sr/admin/settings/user.json -trans.tr = public/language/tr/admin/settings/user.json -trans.vi = public/language/vi/admin/settings/user.json -trans.de = public/language/de/admin/settings/user.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/user.json -trans.hy = public/language/hy/admin/settings/user.json -trans.pt_PT = public/language/pt-PT/admin/settings/user.json -trans.th = public/language/th/admin/settings/user.json -trans.zh_TW = public/language/zh-TW/admin/settings/user.json -trans.bn = public/language/bn/admin/settings/user.json -trans.nl = public/language/nl/admin/settings/user.json -trans.pt_BR = public/language/pt-BR/admin/settings/user.json -trans.rw = public/language/rw/admin/settings/user.json -trans.bg = public/language/bg/admin/settings/user.json -trans.fr = public/language/fr/admin/settings/user.json -trans.ko = public/language/ko/admin/settings/user.json trans.ar = public/language/ar/admin/settings/user.json +trans.az = public/language/az/admin/settings/user.json +trans.bg = public/language/bg/admin/settings/user.json +trans.bn = public/language/bn/admin/settings/user.json +trans.cs = public/language/cs/admin/settings/user.json +trans.da = public/language/da/admin/settings/user.json +trans.de = public/language/de/admin/settings/user.json +trans.el = public/language/el/admin/settings/user.json +trans.en_US = public/language/en-US/admin/settings/user.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/user.json trans.es = public/language/es/admin/settings/user.json trans.et = public/language/et/admin/settings/user.json +trans.fa_IR = public/language/fa-IR/admin/settings/user.json +trans.fi = public/language/fi/admin/settings/user.json +trans.fr = public/language/fr/admin/settings/user.json +trans.gl = public/language/gl/admin/settings/user.json +trans.he = public/language/he/admin/settings/user.json +trans.hr = public/language/hr/admin/settings/user.json +trans.hu = public/language/hu/admin/settings/user.json +trans.hy = public/language/hy/admin/settings/user.json +trans.id = public/language/id/admin/settings/user.json +trans.it = public/language/it/admin/settings/user.json trans.ja = public/language/ja/admin/settings/user.json +trans.ko = public/language/ko/admin/settings/user.json trans.lt = public/language/lt/admin/settings/user.json +trans.lv = public/language/lv/admin/settings/user.json +trans.ms = public/language/ms/admin/settings/user.json +trans.nb = public/language/nb/admin/settings/user.json +trans.nl = public/language/nl/admin/settings/user.json +trans.nn_NO = public/language/nn-NO/admin/settings/user.json +trans.pl = public/language/pl/admin/settings/user.json +trans.pt_BR = public/language/pt-BR/admin/settings/user.json +trans.pt_PT = public/language/pt-PT/admin/settings/user.json +trans.ro = public/language/ro/admin/settings/user.json +trans.ru = public/language/ru/admin/settings/user.json +trans.rw = public/language/rw/admin/settings/user.json trans.sc = public/language/sc/admin/settings/user.json +trans.sk = public/language/sk/admin/settings/user.json +trans.sl = public/language/sl/admin/settings/user.json +trans.sq_AL = public/language/sq-AL/admin/settings/user.json +trans.sr = public/language/sr/admin/settings/user.json +trans.sv = public/language/sv/admin/settings/user.json +trans.th = public/language/th/admin/settings/user.json +trans.tr = public/language/tr/admin/settings/user.json +trans.uk = public/language/uk/admin/settings/user.json +trans.ur = public/language/ur/admin/settings/user.json +trans.vi = public/language/vi/admin/settings/user.json +trans.zh_CN = public/language/zh-CN/admin/settings/user.json +trans.zh_TW = public/language/zh-TW/admin/settings/user.json [o:nodebb:p:nodebb:r:admin-settings-web-crawler] file_filter = public/language//admin/settings/web-crawler.json source_file = public/language/en-GB/admin/settings/web-crawler.json source_lang = en_GB type = KEYVALUEJSON -trans.cs = public/language/cs/admin/settings/web-crawler.json -trans.es = public/language/es/admin/settings/web-crawler.json -trans.fr = public/language/fr/admin/settings/web-crawler.json -trans.ko = public/language/ko/admin/settings/web-crawler.json -trans.pl = public/language/pl/admin/settings/web-crawler.json -trans.tr = public/language/tr/admin/settings/web-crawler.json -trans.uk = public/language/uk/admin/settings/web-crawler.json +trans.ar = public/language/ar/admin/settings/web-crawler.json +trans.az = public/language/az/admin/settings/web-crawler.json trans.bg = public/language/bg/admin/settings/web-crawler.json -trans.el = public/language/el/admin/settings/web-crawler.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/web-crawler.json -trans.fa_IR = public/language/fa-IR/admin/settings/web-crawler.json -trans.ms = public/language/ms/admin/settings/web-crawler.json -trans.th = public/language/th/admin/settings/web-crawler.json -trans.gl = public/language/gl/admin/settings/web-crawler.json -trans.id = public/language/id/admin/settings/web-crawler.json -trans.sk = public/language/sk/admin/settings/web-crawler.json -trans.rw = public/language/rw/admin/settings/web-crawler.json +trans.bn = public/language/bn/admin/settings/web-crawler.json +trans.cs = public/language/cs/admin/settings/web-crawler.json trans.da = public/language/da/admin/settings/web-crawler.json +trans.de = public/language/de/admin/settings/web-crawler.json +trans.el = public/language/el/admin/settings/web-crawler.json +trans.en_US = public/language/en-US/admin/settings/web-crawler.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/web-crawler.json +trans.es = public/language/es/admin/settings/web-crawler.json +trans.et = public/language/et/admin/settings/web-crawler.json +trans.fa_IR = public/language/fa-IR/admin/settings/web-crawler.json +trans.fi = public/language/fi/admin/settings/web-crawler.json +trans.fr = public/language/fr/admin/settings/web-crawler.json +trans.gl = public/language/gl/admin/settings/web-crawler.json +trans.he = public/language/he/admin/settings/web-crawler.json trans.hr = public/language/hr/admin/settings/web-crawler.json trans.hu = public/language/hu/admin/settings/web-crawler.json -trans.ja = public/language/ja/admin/settings/web-crawler.json -trans.lv = public/language/lv/admin/settings/web-crawler.json -trans.nl = public/language/nl/admin/settings/web-crawler.json -trans.pt_BR = public/language/pt-BR/admin/settings/web-crawler.json -trans.vi = public/language/vi/admin/settings/web-crawler.json -trans.en_US = public/language/en-US/admin/settings/web-crawler.json -trans.et = public/language/et/admin/settings/web-crawler.json -trans.fi = public/language/fi/admin/settings/web-crawler.json -trans.sq_AL = public/language/sq-AL/admin/settings/web-crawler.json -trans.sv = public/language/sv/admin/settings/web-crawler.json -trans.ar = public/language/ar/admin/settings/web-crawler.json -trans.de = public/language/de/admin/settings/web-crawler.json trans.hy = public/language/hy/admin/settings/web-crawler.json -trans.nb = public/language/nb/admin/settings/web-crawler.json -trans.ro = public/language/ro/admin/settings/web-crawler.json -trans.sr = public/language/sr/admin/settings/web-crawler.json -trans.zh_TW = public/language/zh-TW/admin/settings/web-crawler.json -trans.he = public/language/he/admin/settings/web-crawler.json +trans.id = public/language/id/admin/settings/web-crawler.json trans.it = public/language/it/admin/settings/web-crawler.json +trans.ja = public/language/ja/admin/settings/web-crawler.json +trans.ko = public/language/ko/admin/settings/web-crawler.json trans.lt = public/language/lt/admin/settings/web-crawler.json -trans.ru = public/language/ru/admin/settings/web-crawler.json -trans.sl = public/language/sl/admin/settings/web-crawler.json -trans.zh_CN = public/language/zh-CN/admin/settings/web-crawler.json -trans.bn = public/language/bn/admin/settings/web-crawler.json +trans.lv = public/language/lv/admin/settings/web-crawler.json +trans.ms = public/language/ms/admin/settings/web-crawler.json +trans.nb = public/language/nb/admin/settings/web-crawler.json +trans.nl = public/language/nl/admin/settings/web-crawler.json +trans.nn_NO = public/language/nn-NO/admin/settings/web-crawler.json +trans.pl = public/language/pl/admin/settings/web-crawler.json +trans.pt_BR = public/language/pt-BR/admin/settings/web-crawler.json trans.pt_PT = public/language/pt-PT/admin/settings/web-crawler.json +trans.ro = public/language/ro/admin/settings/web-crawler.json +trans.ru = public/language/ru/admin/settings/web-crawler.json +trans.rw = public/language/rw/admin/settings/web-crawler.json trans.sc = public/language/sc/admin/settings/web-crawler.json +trans.sk = public/language/sk/admin/settings/web-crawler.json +trans.sl = public/language/sl/admin/settings/web-crawler.json +trans.sq_AL = public/language/sq-AL/admin/settings/web-crawler.json +trans.sr = public/language/sr/admin/settings/web-crawler.json +trans.sv = public/language/sv/admin/settings/web-crawler.json +trans.th = public/language/th/admin/settings/web-crawler.json +trans.tr = public/language/tr/admin/settings/web-crawler.json +trans.uk = public/language/uk/admin/settings/web-crawler.json +trans.ur = public/language/ur/admin/settings/web-crawler.json +trans.vi = public/language/vi/admin/settings/web-crawler.json +trans.zh_CN = public/language/zh-CN/admin/settings/web-crawler.json +trans.zh_TW = public/language/zh-TW/admin/settings/web-crawler.json [o:nodebb:p:nodebb:r:themes-harmony] file_filter = public/language//themes/harmony.json source_file = public/language/en-GB/themes/harmony.json source_lang = en_GB type = KEYVALUEJSON -trans.th = public/language/th/themes/harmony.json +trans.ar = public/language/ar/themes/harmony.json +trans.az = public/language/az/themes/harmony.json trans.bg = public/language/bg/themes/harmony.json +trans.bn = public/language/bn/themes/harmony.json +trans.cs = public/language/cs/themes/harmony.json +trans.da = public/language/da/themes/harmony.json +trans.de = public/language/de/themes/harmony.json +trans.el = public/language/el/themes/harmony.json +trans.en_US = public/language/en-US/themes/harmony.json +trans.en@pirate = public/language/en-x-pirate/themes/harmony.json +trans.es = public/language/es/themes/harmony.json +trans.et = public/language/et/themes/harmony.json +trans.fa_IR = public/language/fa-IR/themes/harmony.json +trans.fi = public/language/fi/themes/harmony.json +trans.fr = public/language/fr/themes/harmony.json +trans.gl = public/language/gl/themes/harmony.json +trans.he = public/language/he/themes/harmony.json trans.hr = public/language/hr/themes/harmony.json +trans.hu = public/language/hu/themes/harmony.json trans.hy = public/language/hy/themes/harmony.json +trans.id = public/language/id/themes/harmony.json +trans.it = public/language/it/themes/harmony.json +trans.ja = public/language/ja/themes/harmony.json +trans.ko = public/language/ko/themes/harmony.json +trans.lt = public/language/lt/themes/harmony.json +trans.lv = public/language/lv/themes/harmony.json +trans.ms = public/language/ms/themes/harmony.json +trans.nb = public/language/nb/themes/harmony.json +trans.nl = public/language/nl/themes/harmony.json +trans.nn_NO = public/language/nn-NO/themes/harmony.json +trans.pl = public/language/pl/themes/harmony.json +trans.pt_BR = public/language/pt-BR/themes/harmony.json +trans.pt_PT = public/language/pt-PT/themes/harmony.json +trans.ro = public/language/ro/themes/harmony.json +trans.ru = public/language/ru/themes/harmony.json +trans.rw = public/language/rw/themes/harmony.json +trans.sc = public/language/sc/themes/harmony.json trans.sk = public/language/sk/themes/harmony.json trans.sl = public/language/sl/themes/harmony.json trans.sq_AL = public/language/sq-AL/themes/harmony.json -trans.sv = public/language/sv/themes/harmony.json -trans.vi = public/language/vi/themes/harmony.json -trans.da = public/language/da/themes/harmony.json -trans.en_US = public/language/en-US/themes/harmony.json -trans.gl = public/language/gl/themes/harmony.json -trans.ko = public/language/ko/themes/harmony.json -trans.lt = public/language/lt/themes/harmony.json -trans.pt_BR = public/language/pt-BR/themes/harmony.json -trans.hu = public/language/hu/themes/harmony.json -trans.lv = public/language/lv/themes/harmony.json -trans.ro = public/language/ro/themes/harmony.json -trans.ru = public/language/ru/themes/harmony.json trans.sr = public/language/sr/themes/harmony.json -trans.bn = public/language/bn/themes/harmony.json -trans.he = public/language/he/themes/harmony.json -trans.nl = public/language/nl/themes/harmony.json -trans.sc = public/language/sc/themes/harmony.json -trans.zh_CN = public/language/zh-CN/themes/harmony.json -trans.fi = public/language/fi/themes/harmony.json -trans.ja = public/language/ja/themes/harmony.json -trans.nb = public/language/nb/themes/harmony.json -trans.pl = public/language/pl/themes/harmony.json -trans.zh_TW = public/language/zh-TW/themes/harmony.json -trans.ar = public/language/ar/themes/harmony.json -trans.cs = public/language/cs/themes/harmony.json -trans.fa_IR = public/language/fa-IR/themes/harmony.json -trans.ms = public/language/ms/themes/harmony.json -trans.pt_PT = public/language/pt-PT/themes/harmony.json +trans.sv = public/language/sv/themes/harmony.json +trans.th = public/language/th/themes/harmony.json trans.tr = public/language/tr/themes/harmony.json -trans.en@pirate = public/language/en-x-pirate/themes/harmony.json -trans.fr = public/language/fr/themes/harmony.json -trans.id = public/language/id/themes/harmony.json trans.uk = public/language/uk/themes/harmony.json -trans.de = public/language/de/themes/harmony.json -trans.el = public/language/el/themes/harmony.json -trans.es = public/language/es/themes/harmony.json -trans.et = public/language/et/themes/harmony.json -trans.it = public/language/it/themes/harmony.json -trans.rw = public/language/rw/themes/harmony.json +trans.ur = public/language/ur/themes/harmony.json +trans.vi = public/language/vi/themes/harmony.json +trans.zh_CN = public/language/zh-CN/themes/harmony.json +trans.zh_TW = public/language/zh-TW/themes/harmony.json [o:nodebb:p:nodebb:r:themes-persona] file_filter = public/language//themes/persona.json source_file = public/language/en-GB/themes/persona.json source_lang = en_GB type = KEYVALUEJSON -trans.th = public/language/th/themes/persona.json +trans.ar = public/language/ar/themes/persona.json +trans.az = public/language/az/themes/persona.json trans.bg = public/language/bg/themes/persona.json +trans.bn = public/language/bn/themes/persona.json +trans.cs = public/language/cs/themes/persona.json +trans.da = public/language/da/themes/persona.json +trans.de = public/language/de/themes/persona.json +trans.el = public/language/el/themes/persona.json +trans.en_US = public/language/en-US/themes/persona.json +trans.en@pirate = public/language/en-x-pirate/themes/persona.json +trans.es = public/language/es/themes/persona.json +trans.et = public/language/et/themes/persona.json +trans.fa_IR = public/language/fa-IR/themes/persona.json +trans.fi = public/language/fi/themes/persona.json +trans.fr = public/language/fr/themes/persona.json +trans.gl = public/language/gl/themes/persona.json +trans.he = public/language/he/themes/persona.json trans.hr = public/language/hr/themes/persona.json +trans.hu = public/language/hu/themes/persona.json trans.hy = public/language/hy/themes/persona.json +trans.id = public/language/id/themes/persona.json +trans.it = public/language/it/themes/persona.json +trans.ja = public/language/ja/themes/persona.json +trans.ko = public/language/ko/themes/persona.json +trans.lt = public/language/lt/themes/persona.json +trans.lv = public/language/lv/themes/persona.json +trans.ms = public/language/ms/themes/persona.json +trans.nb = public/language/nb/themes/persona.json +trans.nl = public/language/nl/themes/persona.json +trans.nn_NO = public/language/nn-NO/themes/persona.json +trans.pl = public/language/pl/themes/persona.json +trans.pt_BR = public/language/pt-BR/themes/persona.json +trans.pt_PT = public/language/pt-PT/themes/persona.json +trans.ro = public/language/ro/themes/persona.json +trans.ru = public/language/ru/themes/persona.json +trans.rw = public/language/rw/themes/persona.json +trans.sc = public/language/sc/themes/persona.json trans.sk = public/language/sk/themes/persona.json trans.sl = public/language/sl/themes/persona.json trans.sq_AL = public/language/sq-AL/themes/persona.json -trans.sv = public/language/sv/themes/persona.json -trans.vi = public/language/vi/themes/persona.json -trans.da = public/language/da/themes/persona.json -trans.en_US = public/language/en-US/themes/persona.json -trans.gl = public/language/gl/themes/persona.json -trans.ko = public/language/ko/themes/persona.json -trans.lt = public/language/lt/themes/persona.json -trans.pt_BR = public/language/pt-BR/themes/persona.json -trans.hu = public/language/hu/themes/persona.json -trans.lv = public/language/lv/themes/persona.json -trans.ro = public/language/ro/themes/persona.json -trans.ru = public/language/ru/themes/persona.json trans.sr = public/language/sr/themes/persona.json -trans.bn = public/language/bn/themes/persona.json -trans.he = public/language/he/themes/persona.json -trans.nl = public/language/nl/themes/persona.json -trans.sc = public/language/sc/themes/persona.json -trans.zh_CN = public/language/zh-CN/themes/persona.json -trans.fi = public/language/fi/themes/persona.json -trans.ja = public/language/ja/themes/persona.json -trans.nb = public/language/nb/themes/persona.json -trans.pl = public/language/pl/themes/persona.json -trans.zh_TW = public/language/zh-TW/themes/persona.json -trans.ar = public/language/ar/themes/persona.json -trans.cs = public/language/cs/themes/persona.json -trans.fa_IR = public/language/fa-IR/themes/persona.json -trans.ms = public/language/ms/themes/persona.json -trans.pt_PT = public/language/pt-PT/themes/persona.json +trans.sv = public/language/sv/themes/persona.json +trans.th = public/language/th/themes/persona.json trans.tr = public/language/tr/themes/persona.json -trans.en@pirate = public/language/en-x-pirate/themes/persona.json -trans.fr = public/language/fr/themes/persona.json -trans.id = public/language/id/themes/persona.json trans.uk = public/language/uk/themes/persona.json -trans.de = public/language/de/themes/persona.json -trans.el = public/language/el/themes/persona.json -trans.es = public/language/es/themes/persona.json -trans.et = public/language/et/themes/persona.json -trans.it = public/language/it/themes/persona.json -trans.rw = public/language/rw/themes/persona.json +trans.ur = public/language/ur/themes/persona.json +trans.vi = public/language/vi/themes/persona.json +trans.zh_CN = public/language/zh-CN/themes/persona.json +trans.zh_TW = public/language/zh-TW/themes/persona.json + +[o:nodebb:p:nodebb:r:aria] +file_filter = public/language//aria.json +source_file = public/language/en-GB/aria.json +source_lang = en_GB +type = KEYVALUEJSON +trans.ar = public/language/ar/aria.json +trans.az = public/language/az/aria.json +trans.bg = public/language/bg/aria.json +trans.bn = public/language/bn/aria.json +trans.cs = public/language/cs/aria.json +trans.da = public/language/da/aria.json +trans.de = public/language/de/aria.json +trans.el = public/language/el/aria.json +trans.en_US = public/language/en-US/aria.json +trans.en@pirate = public/language/en-x-pirate/aria.json +trans.es = public/language/es/aria.json +trans.et = public/language/et/aria.json +trans.fa_IR = public/language/fa-IR/aria.json +trans.fi = public/language/fi/aria.json +trans.fr = public/language/fr/aria.json +trans.gl = public/language/gl/aria.json +trans.he = public/language/he/aria.json +trans.hr = public/language/hr/aria.json +trans.hu = public/language/hu/aria.json +trans.hy = public/language/hy/aria.json +trans.id = public/language/id/aria.json +trans.it = public/language/it/aria.json +trans.ja = public/language/ja/aria.json +trans.ko = public/language/ko/aria.json +trans.lt = public/language/lt/aria.json +trans.lv = public/language/lv/aria.json +trans.ms = public/language/ms/aria.json +trans.nb = public/language/nb/aria.json +trans.nl = public/language/nl/aria.json +trans.nn_NO = public/language/nn-NO/aria.json +trans.pl = public/language/pl/aria.json +trans.pt_BR = public/language/pt-BR/aria.json +trans.pt_PT = public/language/pt-PT/aria.json +trans.ro = public/language/ro/aria.json +trans.ru = public/language/ru/aria.json +trans.rw = public/language/rw/aria.json +trans.sc = public/language/sc/aria.json +trans.sk = public/language/sk/aria.json +trans.sl = public/language/sl/aria.json +trans.sq_AL = public/language/sq-AL/aria.json +trans.sr = public/language/sr/aria.json +trans.sv = public/language/sv/aria.json +trans.th = public/language/th/aria.json +trans.tr = public/language/tr/aria.json +trans.uk = public/language/uk/aria.json +trans.ur = public/language/ur/aria.json +trans.vi = public/language/vi/aria.json +trans.zh_CN = public/language/zh-CN/aria.json +trans.zh_TW = public/language/zh-TW/aria.json [o:nodebb:p:nodebb:r:category] file_filter = public/language//category.json source_file = public/language/en-GB/category.json source_lang = en_GB type = KEYVALUEJSON -trans.th = public/language/th/category.json +trans.ar = public/language/ar/category.json +trans.az = public/language/az/category.json trans.bg = public/language/bg/category.json +trans.bn = public/language/bn/category.json +trans.cs = public/language/cs/category.json +trans.da = public/language/da/category.json +trans.de = public/language/de/category.json +trans.el = public/language/el/category.json +trans.en_US = public/language/en-US/category.json +trans.en@pirate = public/language/en-x-pirate/category.json +trans.es = public/language/es/category.json +trans.et = public/language/et/category.json +trans.fa_IR = public/language/fa-IR/category.json +trans.fi = public/language/fi/category.json +trans.fr = public/language/fr/category.json +trans.gl = public/language/gl/category.json +trans.he = public/language/he/category.json trans.hr = public/language/hr/category.json +trans.hu = public/language/hu/category.json trans.hy = public/language/hy/category.json +trans.id = public/language/id/category.json +trans.it = public/language/it/category.json +trans.ja = public/language/ja/category.json +trans.ko = public/language/ko/category.json +trans.lt = public/language/lt/category.json +trans.lv = public/language/lv/category.json +trans.ms = public/language/ms/category.json +trans.nb = public/language/nb/category.json +trans.nl = public/language/nl/category.json +trans.nn_NO = public/language/nn-NO/category.json +trans.pl = public/language/pl/category.json +trans.pt_BR = public/language/pt-BR/category.json +trans.pt_PT = public/language/pt-PT/category.json +trans.ro = public/language/ro/category.json +trans.ru = public/language/ru/category.json +trans.rw = public/language/rw/category.json +trans.sc = public/language/sc/category.json trans.sk = public/language/sk/category.json trans.sl = public/language/sl/category.json trans.sq_AL = public/language/sq-AL/category.json -trans.sv = public/language/sv/category.json -trans.vi = public/language/vi/category.json -trans.da = public/language/da/category.json -trans.en_US = public/language/en-US/category.json -trans.gl = public/language/gl/category.json -trans.ko = public/language/ko/category.json -trans.lt = public/language/lt/category.json -trans.pt_BR = public/language/pt-BR/category.json -trans.hu = public/language/hu/category.json -trans.lv = public/language/lv/category.json -trans.ro = public/language/ro/category.json -trans.ru = public/language/ru/category.json trans.sr = public/language/sr/category.json -trans.bn = public/language/bn/category.json -trans.he = public/language/he/category.json -trans.nl = public/language/nl/category.json -trans.sc = public/language/sc/category.json -trans.zh_CN = public/language/zh-CN/category.json -trans.fi = public/language/fi/category.json -trans.ja = public/language/ja/category.json -trans.nb = public/language/nb/category.json -trans.pl = public/language/pl/category.json -trans.zh_TW = public/language/zh-TW/category.json -trans.ar = public/language/ar/category.json -trans.cs = public/language/cs/category.json -trans.fa_IR = public/language/fa-IR/category.json -trans.ms = public/language/ms/category.json -trans.pt_PT = public/language/pt-PT/category.json +trans.sv = public/language/sv/category.json +trans.th = public/language/th/category.json trans.tr = public/language/tr/category.json -trans.en@pirate = public/language/en-x-pirate/category.json -trans.fr = public/language/fr/category.json -trans.id = public/language/id/category.json trans.uk = public/language/uk/category.json -trans.de = public/language/de/category.json -trans.el = public/language/el/category.json -trans.es = public/language/es/category.json -trans.et = public/language/et/category.json -trans.it = public/language/it/category.json -trans.rw = public/language/rw/category.json +trans.ur = public/language/ur/category.json +trans.vi = public/language/vi/category.json +trans.zh_CN = public/language/zh-CN/category.json +trans.zh_TW = public/language/zh-TW/category.json [o:nodebb:p:nodebb:r:email] file_filter = public/language//email.json source_file = public/language/en-GB/email.json source_lang = en_GB type = KEYVALUEJSON -trans.sk = public/language/sk/email.json -trans.zh_TW = public/language/zh-TW/email.json -trans.el = public/language/el/email.json -trans.fa_IR = public/language/fa-IR/email.json -trans.fi = public/language/fi/email.json -trans.id = public/language/id/email.json -trans.ko = public/language/ko/email.json -trans.en@pirate = public/language/en-x-pirate/email.json -trans.it = public/language/it/email.json -trans.lv = public/language/lv/email.json -trans.uk = public/language/uk/email.json -trans.zh_CN = public/language/zh-CN/email.json -trans.sv = public/language/sv/email.json +trans.ar = public/language/ar/email.json +trans.az = public/language/az/email.json +trans.bg = public/language/bg/email.json trans.bn = public/language/bn/email.json trans.cs = public/language/cs/email.json -trans.ms = public/language/ms/email.json -trans.ro = public/language/ro/email.json -trans.ru = public/language/ru/email.json +trans.da = public/language/da/email.json trans.de = public/language/de/email.json -trans.hu = public/language/hu/email.json -trans.hy = public/language/hy/email.json -trans.sl = public/language/sl/email.json -trans.th = public/language/th/email.json -trans.ar = public/language/ar/email.json +trans.el = public/language/el/email.json +trans.en_US = public/language/en-US/email.json +trans.en@pirate = public/language/en-x-pirate/email.json trans.es = public/language/es/email.json +trans.et = public/language/et/email.json +trans.fa_IR = public/language/fa-IR/email.json +trans.fi = public/language/fi/email.json +trans.fr = public/language/fr/email.json trans.gl = public/language/gl/email.json trans.he = public/language/he/email.json -trans.ja = public/language/ja/email.json -trans.bg = public/language/bg/email.json -trans.et = public/language/et/email.json trans.hr = public/language/hr/email.json -trans.pl = public/language/pl/email.json -trans.da = public/language/da/email.json -trans.fr = public/language/fr/email.json +trans.hu = public/language/hu/email.json +trans.hy = public/language/hy/email.json +trans.id = public/language/id/email.json +trans.it = public/language/it/email.json +trans.ja = public/language/ja/email.json +trans.ko = public/language/ko/email.json trans.lt = public/language/lt/email.json -trans.pt_PT = public/language/pt-PT/email.json -trans.sc = public/language/sc/email.json -trans.sq_AL = public/language/sq-AL/email.json -trans.sr = public/language/sr/email.json -trans.tr = public/language/tr/email.json -trans.en_US = public/language/en-US/email.json +trans.lv = public/language/lv/email.json +trans.ms = public/language/ms/email.json trans.nb = public/language/nb/email.json trans.nl = public/language/nl/email.json +trans.nn_NO = public/language/nn-NO/email.json +trans.pl = public/language/pl/email.json trans.pt_BR = public/language/pt-BR/email.json +trans.pt_PT = public/language/pt-PT/email.json +trans.ro = public/language/ro/email.json +trans.ru = public/language/ru/email.json trans.rw = public/language/rw/email.json +trans.sc = public/language/sc/email.json +trans.sk = public/language/sk/email.json +trans.sl = public/language/sl/email.json +trans.sq_AL = public/language/sq-AL/email.json +trans.sr = public/language/sr/email.json +trans.sv = public/language/sv/email.json +trans.th = public/language/th/email.json +trans.tr = public/language/tr/email.json +trans.uk = public/language/uk/email.json +trans.ur = public/language/ur/email.json trans.vi = public/language/vi/email.json +trans.zh_CN = public/language/zh-CN/email.json +trans.zh_TW = public/language/zh-TW/email.json [o:nodebb:p:nodebb:r:error] file_filter = public/language//error.json source_file = public/language/en-GB/error.json source_lang = en_GB type = KEYVALUEJSON -trans.de = public/language/de/error.json -trans.ko = public/language/ko/error.json -trans.lv = public/language/lv/error.json -trans.sk = public/language/sk/error.json -trans.cs = public/language/cs/error.json -trans.it = public/language/it/error.json -trans.nl = public/language/nl/error.json -trans.sc = public/language/sc/error.json -trans.sl = public/language/sl/error.json -trans.sq_AL = public/language/sq-AL/error.json -trans.tr = public/language/tr/error.json -trans.hu = public/language/hu/error.json -trans.fr = public/language/fr/error.json -trans.hy = public/language/hy/error.json -trans.zh_CN = public/language/zh-CN/error.json trans.ar = public/language/ar/error.json +trans.az = public/language/az/error.json +trans.bg = public/language/bg/error.json +trans.bn = public/language/bn/error.json +trans.cs = public/language/cs/error.json +trans.da = public/language/da/error.json +trans.de = public/language/de/error.json +trans.el = public/language/el/error.json +trans.en_US = public/language/en-US/error.json +trans.en@pirate = public/language/en-x-pirate/error.json +trans.es = public/language/es/error.json trans.et = public/language/et/error.json +trans.fa_IR = public/language/fa-IR/error.json trans.fi = public/language/fi/error.json +trans.fr = public/language/fr/error.json +trans.gl = public/language/gl/error.json trans.he = public/language/he/error.json trans.hr = public/language/hr/error.json +trans.hu = public/language/hu/error.json +trans.hy = public/language/hy/error.json +trans.id = public/language/id/error.json +trans.it = public/language/it/error.json +trans.ja = public/language/ja/error.json +trans.ko = public/language/ko/error.json trans.lt = public/language/lt/error.json +trans.lv = public/language/lv/error.json +trans.ms = public/language/ms/error.json +trans.nb = public/language/nb/error.json +trans.nl = public/language/nl/error.json +trans.nn_NO = public/language/nn-NO/error.json +trans.pl = public/language/pl/error.json +trans.pt_BR = public/language/pt-BR/error.json +trans.pt_PT = public/language/pt-PT/error.json +trans.ro = public/language/ro/error.json trans.ru = public/language/ru/error.json trans.rw = public/language/rw/error.json -trans.bn = public/language/bn/error.json -trans.vi = public/language/vi/error.json -trans.fa_IR = public/language/fa-IR/error.json -trans.gl = public/language/gl/error.json -trans.nb = public/language/nb/error.json -trans.pl = public/language/pl/error.json -trans.ro = public/language/ro/error.json -trans.uk = public/language/uk/error.json -trans.es = public/language/es/error.json -trans.el = public/language/el/error.json -trans.en@pirate = public/language/en-x-pirate/error.json -trans.en_US = public/language/en-US/error.json -trans.ms = public/language/ms/error.json -trans.pt_PT = public/language/pt-PT/error.json -trans.bg = public/language/bg/error.json -trans.pt_BR = public/language/pt-BR/error.json -trans.sv = public/language/sv/error.json -trans.zh_TW = public/language/zh-TW/error.json -trans.da = public/language/da/error.json -trans.ja = public/language/ja/error.json +trans.sc = public/language/sc/error.json +trans.sk = public/language/sk/error.json +trans.sl = public/language/sl/error.json +trans.sq_AL = public/language/sq-AL/error.json trans.sr = public/language/sr/error.json +trans.sv = public/language/sv/error.json trans.th = public/language/th/error.json -trans.id = public/language/id/error.json +trans.tr = public/language/tr/error.json +trans.uk = public/language/uk/error.json +trans.ur = public/language/ur/error.json +trans.vi = public/language/vi/error.json +trans.zh_CN = public/language/zh-CN/error.json +trans.zh_TW = public/language/zh-TW/error.json [o:nodebb:p:nodebb:r:flags] file_filter = public/language//flags.json source_file = public/language/en-GB/flags.json source_lang = en_GB type = KEYVALUEJSON -trans.nb = public/language/nb/flags.json -trans.ru = public/language/ru/flags.json -trans.sc = public/language/sc/flags.json -trans.fi = public/language/fi/flags.json -trans.hr = public/language/hr/flags.json -trans.lv = public/language/lv/flags.json -trans.ms = public/language/ms/flags.json -trans.ja = public/language/ja/flags.json -trans.nl = public/language/nl/flags.json -trans.pt_PT = public/language/pt-PT/flags.json -trans.th = public/language/th/flags.json +trans.ar = public/language/ar/flags.json +trans.az = public/language/az/flags.json +trans.bg = public/language/bg/flags.json +trans.bn = public/language/bn/flags.json +trans.cs = public/language/cs/flags.json +trans.da = public/language/da/flags.json +trans.de = public/language/de/flags.json trans.el = public/language/el/flags.json trans.en_US = public/language/en-US/flags.json -trans.gl = public/language/gl/flags.json -trans.hy = public/language/hy/flags.json -trans.vi = public/language/vi/flags.json -trans.rw = public/language/rw/flags.json -trans.sr = public/language/sr/flags.json -trans.zh_TW = public/language/zh-TW/flags.json -trans.sq_AL = public/language/sq-AL/flags.json -trans.sv = public/language/sv/flags.json -trans.fa_IR = public/language/fa-IR/flags.json -trans.id = public/language/id/flags.json -trans.ko = public/language/ko/flags.json -trans.pl = public/language/pl/flags.json -trans.de = public/language/de/flags.json trans.en@pirate = public/language/en-x-pirate/flags.json -trans.he = public/language/he/flags.json -trans.zh_CN = public/language/zh-CN/flags.json -trans.lt = public/language/lt/flags.json -trans.da = public/language/da/flags.json trans.es = public/language/es/flags.json trans.et = public/language/et/flags.json -trans.hu = public/language/hu/flags.json -trans.tr = public/language/tr/flags.json -trans.bn = public/language/bn/flags.json -trans.it = public/language/it/flags.json -trans.pt_BR = public/language/pt-BR/flags.json -trans.sk = public/language/sk/flags.json -trans.ro = public/language/ro/flags.json -trans.sl = public/language/sl/flags.json -trans.ar = public/language/ar/flags.json -trans.bg = public/language/bg/flags.json -trans.cs = public/language/cs/flags.json +trans.fa_IR = public/language/fa-IR/flags.json +trans.fi = public/language/fi/flags.json trans.fr = public/language/fr/flags.json +trans.gl = public/language/gl/flags.json +trans.he = public/language/he/flags.json +trans.hr = public/language/hr/flags.json +trans.hu = public/language/hu/flags.json +trans.hy = public/language/hy/flags.json +trans.id = public/language/id/flags.json +trans.it = public/language/it/flags.json +trans.ja = public/language/ja/flags.json +trans.ko = public/language/ko/flags.json +trans.lt = public/language/lt/flags.json +trans.lv = public/language/lv/flags.json +trans.ms = public/language/ms/flags.json +trans.nb = public/language/nb/flags.json +trans.nl = public/language/nl/flags.json +trans.nn_NO = public/language/nn-NO/flags.json +trans.pl = public/language/pl/flags.json +trans.pt_BR = public/language/pt-BR/flags.json +trans.pt_PT = public/language/pt-PT/flags.json +trans.ro = public/language/ro/flags.json +trans.ru = public/language/ru/flags.json +trans.rw = public/language/rw/flags.json +trans.sc = public/language/sc/flags.json +trans.sk = public/language/sk/flags.json +trans.sl = public/language/sl/flags.json +trans.sq_AL = public/language/sq-AL/flags.json +trans.sr = public/language/sr/flags.json +trans.sv = public/language/sv/flags.json +trans.th = public/language/th/flags.json +trans.tr = public/language/tr/flags.json +trans.vi = public/language/vi/flags.json +trans.zh_CN = public/language/zh-CN/flags.json +trans.zh_TW = public/language/zh-TW/flags.json [o:nodebb:p:nodebb:r:global] file_filter = public/language//global.json source_file = public/language/en-GB/global.json source_lang = en_GB type = KEYVALUEJSON -trans.ms = public/language/ms/global.json -trans.pl = public/language/pl/global.json -trans.ru = public/language/ru/global.json -trans.bn = public/language/bn/global.json -trans.fr = public/language/fr/global.json -trans.hr = public/language/hr/global.json -trans.hy = public/language/hy/global.json -trans.lv = public/language/lv/global.json -trans.fa_IR = public/language/fa-IR/global.json -trans.sl = public/language/sl/global.json -trans.uk = public/language/uk/global.json -trans.sc = public/language/sc/global.json -trans.sv = public/language/sv/global.json -trans.th = public/language/th/global.json -trans.zh_TW = public/language/zh-TW/global.json -trans.hu = public/language/hu/global.json -trans.sk = public/language/sk/global.json -trans.sr = public/language/sr/global.json -trans.tr = public/language/tr/global.json -trans.nb = public/language/nb/global.json -trans.pt_BR = public/language/pt-BR/global.json -trans.pt_PT = public/language/pt-PT/global.json +trans.ar = public/language/ar/global.json +trans.az = public/language/az/global.json trans.bg = public/language/bg/global.json +trans.bn = public/language/bn/global.json +trans.cs = public/language/cs/global.json trans.da = public/language/da/global.json -trans.fi = public/language/fi/global.json -trans.id = public/language/id/global.json -trans.lt = public/language/lt/global.json -trans.ro = public/language/ro/global.json trans.de = public/language/de/global.json trans.el = public/language/el/global.json -trans.vi = public/language/vi/global.json -trans.zh_CN = public/language/zh-CN/global.json trans.en_US = public/language/en-US/global.json -trans.et = public/language/et/global.json -trans.gl = public/language/gl/global.json -trans.he = public/language/he/global.json -trans.ko = public/language/ko/global.json -trans.ja = public/language/ja/global.json -trans.nl = public/language/nl/global.json -trans.rw = public/language/rw/global.json -trans.ar = public/language/ar/global.json -trans.cs = public/language/cs/global.json trans.en@pirate = public/language/en-x-pirate/global.json trans.es = public/language/es/global.json +trans.et = public/language/et/global.json +trans.fa_IR = public/language/fa-IR/global.json +trans.fi = public/language/fi/global.json +trans.fr = public/language/fr/global.json +trans.gl = public/language/gl/global.json +trans.he = public/language/he/global.json +trans.hr = public/language/hr/global.json +trans.hu = public/language/hu/global.json +trans.hy = public/language/hy/global.json +trans.id = public/language/id/global.json trans.it = public/language/it/global.json +trans.ja = public/language/ja/global.json +trans.ko = public/language/ko/global.json +trans.lt = public/language/lt/global.json +trans.lv = public/language/lv/global.json +trans.ms = public/language/ms/global.json +trans.nb = public/language/nb/global.json +trans.nl = public/language/nl/global.json +trans.nn_NO = public/language/nn-NO/global.json +trans.pl = public/language/pl/global.json +trans.pt_BR = public/language/pt-BR/global.json +trans.pt_PT = public/language/pt-PT/global.json +trans.ro = public/language/ro/global.json +trans.ru = public/language/ru/global.json +trans.rw = public/language/rw/global.json +trans.sc = public/language/sc/global.json +trans.sk = public/language/sk/global.json +trans.sl = public/language/sl/global.json trans.sq_AL = public/language/sq-AL/global.json +trans.sr = public/language/sr/global.json +trans.sv = public/language/sv/global.json +trans.th = public/language/th/global.json +trans.tr = public/language/tr/global.json +trans.uk = public/language/uk/global.json +trans.ur = public/language/ur/global.json +trans.vi = public/language/vi/global.json +trans.zh_CN = public/language/zh-CN/global.json +trans.zh_TW = public/language/zh-TW/global.json [o:nodebb:p:nodebb:r:groups] file_filter = public/language//groups.json source_file = public/language/en-GB/groups.json source_lang = en_GB type = KEYVALUEJSON -trans.zh_TW = public/language/zh-TW/groups.json -trans.de = public/language/de/groups.json -trans.es = public/language/es/groups.json -trans.sc = public/language/sc/groups.json -trans.sr = public/language/sr/groups.json -trans.da = public/language/da/groups.json -trans.en@pirate = public/language/en-x-pirate/groups.json -trans.hy = public/language/hy/groups.json -trans.pt_PT = public/language/pt-PT/groups.json -trans.ms = public/language/ms/groups.json -trans.nb = public/language/nb/groups.json -trans.ro = public/language/ro/groups.json -trans.vi = public/language/vi/groups.json -trans.fa_IR = public/language/fa-IR/groups.json -trans.he = public/language/he/groups.json -trans.hr = public/language/hr/groups.json -trans.lv = public/language/lv/groups.json +trans.ar = public/language/ar/groups.json +trans.az = public/language/az/groups.json trans.bg = public/language/bg/groups.json trans.bn = public/language/bn/groups.json -trans.ja = public/language/ja/groups.json -trans.tr = public/language/tr/groups.json -trans.zh_CN = public/language/zh-CN/groups.json -trans.ar = public/language/ar/groups.json trans.cs = public/language/cs/groups.json -trans.it = public/language/it/groups.json -trans.sk = public/language/sk/groups.json +trans.da = public/language/da/groups.json +trans.de = public/language/de/groups.json +trans.el = public/language/el/groups.json +trans.en_US = public/language/en-US/groups.json +trans.en@pirate = public/language/en-x-pirate/groups.json +trans.es = public/language/es/groups.json +trans.et = public/language/et/groups.json +trans.fa_IR = public/language/fa-IR/groups.json trans.fi = public/language/fi/groups.json trans.fr = public/language/fr/groups.json -trans.sq_AL = public/language/sq-AL/groups.json -trans.th = public/language/th/groups.json -trans.id = public/language/id/groups.json -trans.sl = public/language/sl/groups.json -trans.sv = public/language/sv/groups.json -trans.uk = public/language/uk/groups.json -trans.el = public/language/el/groups.json -trans.et = public/language/et/groups.json trans.gl = public/language/gl/groups.json +trans.he = public/language/he/groups.json +trans.hr = public/language/hr/groups.json trans.hu = public/language/hu/groups.json -trans.pl = public/language/pl/groups.json -trans.pt_BR = public/language/pt-BR/groups.json -trans.ru = public/language/ru/groups.json -trans.rw = public/language/rw/groups.json -trans.en_US = public/language/en-US/groups.json +trans.hy = public/language/hy/groups.json +trans.id = public/language/id/groups.json +trans.it = public/language/it/groups.json +trans.ja = public/language/ja/groups.json trans.ko = public/language/ko/groups.json trans.lt = public/language/lt/groups.json +trans.lv = public/language/lv/groups.json +trans.ms = public/language/ms/groups.json +trans.nb = public/language/nb/groups.json trans.nl = public/language/nl/groups.json +trans.nn_NO = public/language/nn-NO/groups.json +trans.pl = public/language/pl/groups.json +trans.pt_BR = public/language/pt-BR/groups.json +trans.pt_PT = public/language/pt-PT/groups.json +trans.ro = public/language/ro/groups.json +trans.ru = public/language/ru/groups.json +trans.rw = public/language/rw/groups.json +trans.sc = public/language/sc/groups.json +trans.sk = public/language/sk/groups.json +trans.sl = public/language/sl/groups.json +trans.sq_AL = public/language/sq-AL/groups.json +trans.sr = public/language/sr/groups.json +trans.sv = public/language/sv/groups.json +trans.th = public/language/th/groups.json +trans.tr = public/language/tr/groups.json +trans.uk = public/language/uk/groups.json +trans.ur = public/language/ur/groups.json +trans.vi = public/language/vi/groups.json +trans.zh_CN = public/language/zh-CN/groups.json +trans.zh_TW = public/language/zh-TW/groups.json [o:nodebb:p:nodebb:r:ip-blacklist] file_filter = public/language//ip-blacklist.json source_file = public/language/en-GB/ip-blacklist.json source_lang = en_GB type = KEYVALUEJSON -trans.sr = public/language/sr/ip-blacklist.json -trans.et = public/language/et/ip-blacklist.json -trans.fi = public/language/fi/ip-blacklist.json -trans.hr = public/language/hr/ip-blacklist.json -trans.hu = public/language/hu/ip-blacklist.json -trans.ru = public/language/ru/ip-blacklist.json -trans.sk = public/language/sk/ip-blacklist.json -trans.sq_AL = public/language/sq-AL/ip-blacklist.json -trans.zh_CN = public/language/zh-CN/ip-blacklist.json -trans.da = public/language/da/ip-blacklist.json -trans.en@pirate = public/language/en-x-pirate/ip-blacklist.json -trans.he = public/language/he/ip-blacklist.json -trans.hy = public/language/hy/ip-blacklist.json -trans.lv = public/language/lv/ip-blacklist.json -trans.pt_BR = public/language/pt-BR/ip-blacklist.json -trans.sc = public/language/sc/ip-blacklist.json trans.ar = public/language/ar/ip-blacklist.json +trans.az = public/language/az/ip-blacklist.json +trans.bg = public/language/bg/ip-blacklist.json +trans.bn = public/language/bn/ip-blacklist.json +trans.cs = public/language/cs/ip-blacklist.json +trans.da = public/language/da/ip-blacklist.json +trans.de = public/language/de/ip-blacklist.json +trans.el = public/language/el/ip-blacklist.json +trans.en_US = public/language/en-US/ip-blacklist.json +trans.en@pirate = public/language/en-x-pirate/ip-blacklist.json +trans.es = public/language/es/ip-blacklist.json +trans.et = public/language/et/ip-blacklist.json trans.fa_IR = public/language/fa-IR/ip-blacklist.json +trans.fi = public/language/fi/ip-blacklist.json trans.fr = public/language/fr/ip-blacklist.json trans.gl = public/language/gl/ip-blacklist.json -trans.nb = public/language/nb/ip-blacklist.json -trans.sv = public/language/sv/ip-blacklist.json -trans.th = public/language/th/ip-blacklist.json -trans.bn = public/language/bn/ip-blacklist.json -trans.en_US = public/language/en-US/ip-blacklist.json -trans.ja = public/language/ja/ip-blacklist.json -trans.ms = public/language/ms/ip-blacklist.json -trans.nl = public/language/nl/ip-blacklist.json -trans.pt_PT = public/language/pt-PT/ip-blacklist.json -trans.ro = public/language/ro/ip-blacklist.json -trans.es = public/language/es/ip-blacklist.json +trans.he = public/language/he/ip-blacklist.json +trans.hr = public/language/hr/ip-blacklist.json +trans.hu = public/language/hu/ip-blacklist.json +trans.hy = public/language/hy/ip-blacklist.json trans.id = public/language/id/ip-blacklist.json trans.it = public/language/it/ip-blacklist.json -trans.uk = public/language/uk/ip-blacklist.json -trans.vi = public/language/vi/ip-blacklist.json -trans.zh_TW = public/language/zh-TW/ip-blacklist.json -trans.bg = public/language/bg/ip-blacklist.json -trans.de = public/language/de/ip-blacklist.json -trans.sl = public/language/sl/ip-blacklist.json -trans.pl = public/language/pl/ip-blacklist.json -trans.rw = public/language/rw/ip-blacklist.json -trans.cs = public/language/cs/ip-blacklist.json -trans.el = public/language/el/ip-blacklist.json +trans.ja = public/language/ja/ip-blacklist.json trans.ko = public/language/ko/ip-blacklist.json trans.lt = public/language/lt/ip-blacklist.json +trans.lv = public/language/lv/ip-blacklist.json +trans.ms = public/language/ms/ip-blacklist.json +trans.nb = public/language/nb/ip-blacklist.json +trans.nl = public/language/nl/ip-blacklist.json +trans.nn_NO = public/language/nn-NO/ip-blacklist.json +trans.pl = public/language/pl/ip-blacklist.json +trans.pt_BR = public/language/pt-BR/ip-blacklist.json +trans.pt_PT = public/language/pt-PT/ip-blacklist.json +trans.ro = public/language/ro/ip-blacklist.json +trans.ru = public/language/ru/ip-blacklist.json +trans.rw = public/language/rw/ip-blacklist.json +trans.sc = public/language/sc/ip-blacklist.json +trans.sk = public/language/sk/ip-blacklist.json +trans.sl = public/language/sl/ip-blacklist.json +trans.sq_AL = public/language/sq-AL/ip-blacklist.json +trans.sr = public/language/sr/ip-blacklist.json +trans.sv = public/language/sv/ip-blacklist.json +trans.th = public/language/th/ip-blacklist.json trans.tr = public/language/tr/ip-blacklist.json +trans.uk = public/language/uk/ip-blacklist.json +trans.ur = public/language/ur/ip-blacklist.json +trans.vi = public/language/vi/ip-blacklist.json +trans.zh_CN = public/language/zh-CN/ip-blacklist.json +trans.zh_TW = public/language/zh-TW/ip-blacklist.json [o:nodebb:p:nodebb:r:language-1] file_filter = public/language//language.json source_file = public/language/en-GB/language.json source_lang = en_GB type = KEYVALUEJSON -trans.lt = public/language/lt/language.json -trans.vi = public/language/vi/language.json -trans.sr = public/language/sr/language.json -trans.tr = public/language/tr/language.json -trans.uk = public/language/uk/language.json -trans.bg = public/language/bg/language.json -trans.da = public/language/da/language.json -trans.en@pirate = public/language/en-x-pirate/language.json -trans.hr = public/language/hr/language.json -trans.rw = public/language/rw/language.json -trans.en_US = public/language/en-US/language.json -trans.et = public/language/et/language.json -trans.ja = public/language/ja/language.json -trans.nb = public/language/nb/language.json -trans.sk = public/language/sk/language.json -trans.el = public/language/el/language.json -trans.es = public/language/es/language.json -trans.fi = public/language/fi/language.json -trans.it = public/language/it/language.json -trans.pt_PT = public/language/pt-PT/language.json -trans.ro = public/language/ro/language.json -trans.th = public/language/th/language.json trans.ar = public/language/ar/language.json +trans.az = public/language/az/language.json +trans.bg = public/language/bg/language.json trans.bn = public/language/bn/language.json -trans.de = public/language/de/language.json -trans.ko = public/language/ko/language.json -trans.pl = public/language/pl/language.json -trans.gl = public/language/gl/language.json -trans.sq_AL = public/language/sq-AL/language.json -trans.zh_TW = public/language/zh-TW/language.json -trans.nl = public/language/nl/language.json -trans.ru = public/language/ru/language.json -trans.sc = public/language/sc/language.json trans.cs = public/language/cs/language.json -trans.fr = public/language/fr/language.json -trans.he = public/language/he/language.json -trans.id = public/language/id/language.json -trans.lv = public/language/lv/language.json -trans.sl = public/language/sl/language.json -trans.sv = public/language/sv/language.json -trans.zh_CN = public/language/zh-CN/language.json +trans.da = public/language/da/language.json +trans.de = public/language/de/language.json +trans.el = public/language/el/language.json +trans.en_US = public/language/en-US/language.json +trans.en@pirate = public/language/en-x-pirate/language.json +trans.es = public/language/es/language.json +trans.et = public/language/et/language.json trans.fa_IR = public/language/fa-IR/language.json +trans.fi = public/language/fi/language.json +trans.fr = public/language/fr/language.json +trans.gl = public/language/gl/language.json +trans.he = public/language/he/language.json +trans.hr = public/language/hr/language.json trans.hu = public/language/hu/language.json trans.hy = public/language/hy/language.json +trans.id = public/language/id/language.json +trans.it = public/language/it/language.json +trans.ja = public/language/ja/language.json +trans.ko = public/language/ko/language.json +trans.lt = public/language/lt/language.json +trans.lv = public/language/lv/language.json trans.ms = public/language/ms/language.json +trans.nb = public/language/nb/language.json +trans.nl = public/language/nl/language.json +trans.nn_NO = public/language/nn-NO/language.json +trans.pl = public/language/pl/language.json trans.pt_BR = public/language/pt-BR/language.json +trans.pt_PT = public/language/pt-PT/language.json +trans.ro = public/language/ro/language.json +trans.ru = public/language/ru/language.json +trans.rw = public/language/rw/language.json +trans.sc = public/language/sc/language.json +trans.sk = public/language/sk/language.json +trans.sl = public/language/sl/language.json +trans.sq_AL = public/language/sq-AL/language.json +trans.sr = public/language/sr/language.json +trans.sv = public/language/sv/language.json +trans.th = public/language/th/language.json +trans.tr = public/language/tr/language.json +trans.uk = public/language/uk/language.json +trans.ur = public/language/ur/language.json +trans.vi = public/language/vi/language.json +trans.zh_CN = public/language/zh-CN/language.json +trans.zh_TW = public/language/zh-TW/language.json [o:nodebb:p:nodebb:r:login] file_filter = public/language//login.json source_file = public/language/en-GB/login.json source_lang = en_GB type = KEYVALUEJSON +trans.ar = public/language/ar/login.json +trans.az = public/language/az/login.json +trans.bg = public/language/bg/login.json trans.bn = public/language/bn/login.json trans.cs = public/language/cs/login.json -trans.el = public/language/el/login.json -trans.ja = public/language/ja/login.json -trans.pt_BR = public/language/pt-BR/login.json -trans.ro = public/language/ro/login.json -trans.zh_TW = public/language/zh-TW/login.json -trans.bg = public/language/bg/login.json -trans.pt_PT = public/language/pt-PT/login.json -trans.sr = public/language/sr/login.json -trans.vi = public/language/vi/login.json -trans.zh_CN = public/language/zh-CN/login.json -trans.pl = public/language/pl/login.json -trans.gl = public/language/gl/login.json -trans.ko = public/language/ko/login.json -trans.lv = public/language/lv/login.json -trans.sl = public/language/sl/login.json -trans.sq_AL = public/language/sq-AL/login.json -trans.sv = public/language/sv/login.json -trans.tr = public/language/tr/login.json -trans.es = public/language/es/login.json -trans.sk = public/language/sk/login.json -trans.uk = public/language/uk/login.json -trans.it = public/language/it/login.json trans.da = public/language/da/login.json +trans.de = public/language/de/login.json +trans.el = public/language/el/login.json +trans.en_US = public/language/en-US/login.json +trans.en@pirate = public/language/en-x-pirate/login.json +trans.es = public/language/es/login.json +trans.et = public/language/et/login.json trans.fa_IR = public/language/fa-IR/login.json trans.fi = public/language/fi/login.json trans.fr = public/language/fr/login.json +trans.gl = public/language/gl/login.json trans.he = public/language/he/login.json trans.hr = public/language/hr/login.json -trans.ar = public/language/ar/login.json -trans.en_US = public/language/en-US/login.json trans.hu = public/language/hu/login.json -trans.ms = public/language/ms/login.json -trans.en@pirate = public/language/en-x-pirate/login.json trans.hy = public/language/hy/login.json trans.id = public/language/id/login.json +trans.it = public/language/it/login.json +trans.ja = public/language/ja/login.json +trans.ko = public/language/ko/login.json +trans.lt = public/language/lt/login.json +trans.lv = public/language/lv/login.json +trans.ms = public/language/ms/login.json trans.nb = public/language/nb/login.json +trans.nl = public/language/nl/login.json +trans.nn_NO = public/language/nn-NO/login.json +trans.pl = public/language/pl/login.json +trans.pt_BR = public/language/pt-BR/login.json +trans.pt_PT = public/language/pt-PT/login.json +trans.ro = public/language/ro/login.json trans.ru = public/language/ru/login.json trans.rw = public/language/rw/login.json -trans.th = public/language/th/login.json -trans.et = public/language/et/login.json -trans.lt = public/language/lt/login.json -trans.nl = public/language/nl/login.json trans.sc = public/language/sc/login.json -trans.de = public/language/de/login.json +trans.sk = public/language/sk/login.json +trans.sl = public/language/sl/login.json +trans.sq_AL = public/language/sq-AL/login.json +trans.sr = public/language/sr/login.json +trans.sv = public/language/sv/login.json +trans.th = public/language/th/login.json +trans.tr = public/language/tr/login.json +trans.uk = public/language/uk/login.json +trans.ur = public/language/ur/login.json +trans.vi = public/language/vi/login.json +trans.zh_CN = public/language/zh-CN/login.json +trans.zh_TW = public/language/zh-TW/login.json [o:nodebb:p:nodebb:r:modules] file_filter = public/language//modules.json source_file = public/language/en-GB/modules.json source_lang = en_GB type = KEYVALUEJSON -trans.sl = public/language/sl/modules.json -trans.sq_AL = public/language/sq-AL/modules.json -trans.da = public/language/da/modules.json -trans.et = public/language/et/modules.json -trans.fr = public/language/fr/modules.json -trans.lt = public/language/lt/modules.json -trans.ms = public/language/ms/modules.json -trans.sk = public/language/sk/modules.json -trans.vi = public/language/vi/modules.json -trans.fa_IR = public/language/fa-IR/modules.json -trans.hr = public/language/hr/modules.json -trans.lv = public/language/lv/modules.json -trans.nb = public/language/nb/modules.json -trans.ro = public/language/ro/modules.json -trans.sv = public/language/sv/modules.json -trans.en@pirate = public/language/en-x-pirate/modules.json -trans.tr = public/language/tr/modules.json -trans.cs = public/language/cs/modules.json -trans.de = public/language/de/modules.json -trans.fi = public/language/fi/modules.json -trans.he = public/language/he/modules.json -trans.hy = public/language/hy/modules.json -trans.sr = public/language/sr/modules.json -trans.el = public/language/el/modules.json -trans.hu = public/language/hu/modules.json -trans.ko = public/language/ko/modules.json -trans.es = public/language/es/modules.json -trans.id = public/language/id/modules.json -trans.nl = public/language/nl/modules.json -trans.sc = public/language/sc/modules.json -trans.th = public/language/th/modules.json -trans.zh_TW = public/language/zh-TW/modules.json +trans.ar = public/language/ar/modules.json +trans.az = public/language/az/modules.json trans.bg = public/language/bg/modules.json trans.bn = public/language/bn/modules.json +trans.cs = public/language/cs/modules.json +trans.da = public/language/da/modules.json +trans.de = public/language/de/modules.json +trans.el = public/language/el/modules.json trans.en_US = public/language/en-US/modules.json -trans.it = public/language/it/modules.json -trans.pl = public/language/pl/modules.json -trans.uk = public/language/uk/modules.json -trans.rw = public/language/rw/modules.json -trans.zh_CN = public/language/zh-CN/modules.json -trans.ar = public/language/ar/modules.json +trans.en@pirate = public/language/en-x-pirate/modules.json +trans.es = public/language/es/modules.json +trans.et = public/language/et/modules.json +trans.fa_IR = public/language/fa-IR/modules.json +trans.fi = public/language/fi/modules.json +trans.fr = public/language/fr/modules.json trans.gl = public/language/gl/modules.json +trans.he = public/language/he/modules.json +trans.hr = public/language/hr/modules.json +trans.hu = public/language/hu/modules.json +trans.hy = public/language/hy/modules.json +trans.id = public/language/id/modules.json +trans.it = public/language/it/modules.json trans.ja = public/language/ja/modules.json +trans.ko = public/language/ko/modules.json +trans.lt = public/language/lt/modules.json +trans.lv = public/language/lv/modules.json +trans.ms = public/language/ms/modules.json +trans.nb = public/language/nb/modules.json +trans.nl = public/language/nl/modules.json +trans.nn_NO = public/language/nn-NO/modules.json +trans.pl = public/language/pl/modules.json trans.pt_BR = public/language/pt-BR/modules.json trans.pt_PT = public/language/pt-PT/modules.json +trans.ro = public/language/ro/modules.json trans.ru = public/language/ru/modules.json +trans.rw = public/language/rw/modules.json +trans.sc = public/language/sc/modules.json +trans.sk = public/language/sk/modules.json +trans.sl = public/language/sl/modules.json +trans.sq_AL = public/language/sq-AL/modules.json +trans.sr = public/language/sr/modules.json +trans.sv = public/language/sv/modules.json +trans.th = public/language/th/modules.json +trans.tr = public/language/tr/modules.json +trans.uk = public/language/uk/modules.json +trans.ur = public/language/ur/modules.json +trans.vi = public/language/vi/modules.json +trans.zh_CN = public/language/zh-CN/modules.json +trans.zh_TW = public/language/zh-TW/modules.json [o:nodebb:p:nodebb:r:notifications] file_filter = public/language//notifications.json source_file = public/language/en-GB/notifications.json source_lang = en_GB type = KEYVALUEJSON -trans.ru = public/language/ru/notifications.json -trans.sq_AL = public/language/sq-AL/notifications.json +trans.ar = public/language/ar/notifications.json +trans.az = public/language/az/notifications.json +trans.bg = public/language/bg/notifications.json +trans.bn = public/language/bn/notifications.json +trans.cs = public/language/cs/notifications.json +trans.da = public/language/da/notifications.json +trans.de = public/language/de/notifications.json trans.el = public/language/el/notifications.json trans.en_US = public/language/en-US/notifications.json +trans.en@pirate = public/language/en-x-pirate/notifications.json +trans.es = public/language/es/notifications.json +trans.et = public/language/et/notifications.json +trans.fa_IR = public/language/fa-IR/notifications.json +trans.fi = public/language/fi/notifications.json +trans.fr = public/language/fr/notifications.json +trans.gl = public/language/gl/notifications.json +trans.he = public/language/he/notifications.json +trans.hr = public/language/hr/notifications.json +trans.hu = public/language/hu/notifications.json +trans.hy = public/language/hy/notifications.json +trans.id = public/language/id/notifications.json +trans.it = public/language/it/notifications.json trans.ja = public/language/ja/notifications.json +trans.ko = public/language/ko/notifications.json +trans.lt = public/language/lt/notifications.json +trans.lv = public/language/lv/notifications.json +trans.ms = public/language/ms/notifications.json +trans.nb = public/language/nb/notifications.json +trans.nl = public/language/nl/notifications.json +trans.nn_NO = public/language/nn-NO/notifications.json trans.pl = public/language/pl/notifications.json +trans.pt_BR = public/language/pt-BR/notifications.json +trans.pt_PT = public/language/pt-PT/notifications.json +trans.ro = public/language/ro/notifications.json +trans.ru = public/language/ru/notifications.json +trans.rw = public/language/rw/notifications.json +trans.sc = public/language/sc/notifications.json +trans.sk = public/language/sk/notifications.json +trans.sl = public/language/sl/notifications.json +trans.sq_AL = public/language/sq-AL/notifications.json trans.sr = public/language/sr/notifications.json +trans.sv = public/language/sv/notifications.json trans.th = public/language/th/notifications.json trans.tr = public/language/tr/notifications.json -trans.zh_CN = public/language/zh-CN/notifications.json -trans.cs = public/language/cs/notifications.json -trans.de = public/language/de/notifications.json -trans.fa_IR = public/language/fa-IR/notifications.json -trans.sl = public/language/sl/notifications.json -trans.sc = public/language/sc/notifications.json trans.uk = public/language/uk/notifications.json -trans.bn = public/language/bn/notifications.json -trans.fi = public/language/fi/notifications.json -trans.lt = public/language/lt/notifications.json -trans.pt_PT = public/language/pt-PT/notifications.json -trans.es = public/language/es/notifications.json -trans.gl = public/language/gl/notifications.json -trans.sv = public/language/sv/notifications.json -trans.zh_TW = public/language/zh-TW/notifications.json -trans.pt_BR = public/language/pt-BR/notifications.json -trans.rw = public/language/rw/notifications.json -trans.lv = public/language/lv/notifications.json -trans.bg = public/language/bg/notifications.json -trans.he = public/language/he/notifications.json -trans.hu = public/language/hu/notifications.json -trans.it = public/language/it/notifications.json -trans.nl = public/language/nl/notifications.json -trans.ro = public/language/ro/notifications.json -trans.sk = public/language/sk/notifications.json +trans.ur = public/language/ur/notifications.json trans.vi = public/language/vi/notifications.json -trans.et = public/language/et/notifications.json -trans.hy = public/language/hy/notifications.json -trans.ko = public/language/ko/notifications.json -trans.ms = public/language/ms/notifications.json -trans.hr = public/language/hr/notifications.json -trans.id = public/language/id/notifications.json -trans.nb = public/language/nb/notifications.json -trans.ar = public/language/ar/notifications.json -trans.da = public/language/da/notifications.json -trans.en@pirate = public/language/en-x-pirate/notifications.json -trans.fr = public/language/fr/notifications.json +trans.zh_CN = public/language/zh-CN/notifications.json +trans.zh_TW = public/language/zh-TW/notifications.json [o:nodebb:p:nodebb:r:pages] file_filter = public/language//pages.json source_file = public/language/en-GB/pages.json source_lang = en_GB type = KEYVALUEJSON -trans.he = public/language/he/pages.json -trans.nb = public/language/nb/pages.json -trans.sv = public/language/sv/pages.json -trans.pt_BR = public/language/pt-BR/pages.json -trans.tr = public/language/tr/pages.json -trans.zh_TW = public/language/zh-TW/pages.json -trans.bn = public/language/bn/pages.json -trans.gl = public/language/gl/pages.json -trans.hr = public/language/hr/pages.json -trans.id = public/language/id/pages.json -trans.lt = public/language/lt/pages.json -trans.zh_CN = public/language/zh-CN/pages.json +trans.ar = public/language/ar/pages.json +trans.az = public/language/az/pages.json trans.bg = public/language/bg/pages.json -trans.et = public/language/et/pages.json -trans.it = public/language/it/pages.json -trans.ro = public/language/ro/pages.json -trans.sl = public/language/sl/pages.json -trans.sk = public/language/sk/pages.json -trans.sr = public/language/sr/pages.json -trans.uk = public/language/uk/pages.json +trans.bn = public/language/bn/pages.json +trans.cs = public/language/cs/pages.json +trans.da = public/language/da/pages.json trans.de = public/language/de/pages.json -trans.en@pirate = public/language/en-x-pirate/pages.json +trans.el = public/language/el/pages.json trans.en_US = public/language/en-US/pages.json -trans.pt_PT = public/language/pt-PT/pages.json -trans.rw = public/language/rw/pages.json -trans.th = public/language/th/pages.json -trans.vi = public/language/vi/pages.json +trans.en@pirate = public/language/en-x-pirate/pages.json +trans.es = public/language/es/pages.json +trans.et = public/language/et/pages.json +trans.fa_IR = public/language/fa-IR/pages.json +trans.fi = public/language/fi/pages.json +trans.fr = public/language/fr/pages.json +trans.gl = public/language/gl/pages.json +trans.he = public/language/he/pages.json +trans.hr = public/language/hr/pages.json trans.hu = public/language/hu/pages.json trans.hy = public/language/hy/pages.json -trans.nl = public/language/nl/pages.json -trans.ru = public/language/ru/pages.json -trans.sc = public/language/sc/pages.json -trans.cs = public/language/cs/pages.json -trans.fi = public/language/fi/pages.json -trans.ko = public/language/ko/pages.json -trans.lv = public/language/lv/pages.json -trans.sq_AL = public/language/sq-AL/pages.json -trans.ar = public/language/ar/pages.json -trans.da = public/language/da/pages.json -trans.es = public/language/es/pages.json -trans.pl = public/language/pl/pages.json -trans.el = public/language/el/pages.json -trans.fa_IR = public/language/fa-IR/pages.json -trans.fr = public/language/fr/pages.json +trans.id = public/language/id/pages.json +trans.it = public/language/it/pages.json trans.ja = public/language/ja/pages.json +trans.ko = public/language/ko/pages.json +trans.lt = public/language/lt/pages.json +trans.lv = public/language/lv/pages.json trans.ms = public/language/ms/pages.json +trans.nb = public/language/nb/pages.json +trans.nl = public/language/nl/pages.json +trans.nn_NO = public/language/nn-NO/pages.json +trans.pl = public/language/pl/pages.json +trans.pt_BR = public/language/pt-BR/pages.json +trans.pt_PT = public/language/pt-PT/pages.json +trans.ro = public/language/ro/pages.json +trans.ru = public/language/ru/pages.json +trans.rw = public/language/rw/pages.json +trans.sc = public/language/sc/pages.json +trans.sk = public/language/sk/pages.json +trans.sl = public/language/sl/pages.json +trans.sq_AL = public/language/sq-AL/pages.json +trans.sr = public/language/sr/pages.json +trans.sv = public/language/sv/pages.json +trans.th = public/language/th/pages.json +trans.tr = public/language/tr/pages.json +trans.uk = public/language/uk/pages.json +trans.ur = public/language/ur/pages.json +trans.vi = public/language/vi/pages.json +trans.zh_CN = public/language/zh-CN/pages.json +trans.zh_TW = public/language/zh-TW/pages.json [o:nodebb:p:nodebb:r:post-queue] file_filter = public/language//post-queue.json source_file = public/language/en-GB/post-queue.json source_lang = en_GB type = KEYVALUEJSON -trans.it = public/language/it/post-queue.json -trans.ko = public/language/ko/post-queue.json -trans.lv = public/language/lv/post-queue.json -trans.nl = public/language/nl/post-queue.json -trans.rw = public/language/rw/post-queue.json +trans.ar = public/language/ar/post-queue.json +trans.az = public/language/az/post-queue.json +trans.bg = public/language/bg/post-queue.json +trans.bn = public/language/bn/post-queue.json +trans.cs = public/language/cs/post-queue.json trans.da = public/language/da/post-queue.json trans.de = public/language/de/post-queue.json trans.el = public/language/el/post-queue.json -trans.sk = public/language/sk/post-queue.json -trans.sc = public/language/sc/post-queue.json -trans.sr = public/language/sr/post-queue.json -trans.tr = public/language/tr/post-queue.json -trans.uk = public/language/uk/post-queue.json -trans.ja = public/language/ja/post-queue.json -trans.ms = public/language/ms/post-queue.json -trans.ru = public/language/ru/post-queue.json -trans.fr = public/language/fr/post-queue.json -trans.hu = public/language/hu/post-queue.json -trans.lt = public/language/lt/post-queue.json -trans.pl = public/language/pl/post-queue.json -trans.ro = public/language/ro/post-queue.json -trans.bn = public/language/bn/post-queue.json -trans.en@pirate = public/language/en-x-pirate/post-queue.json -trans.fa_IR = public/language/fa-IR/post-queue.json -trans.sl = public/language/sl/post-queue.json -trans.vi = public/language/vi/post-queue.json -trans.zh_CN = public/language/zh-CN/post-queue.json -trans.id = public/language/id/post-queue.json trans.en_US = public/language/en-US/post-queue.json -trans.sq_AL = public/language/sq-AL/post-queue.json -trans.sv = public/language/sv/post-queue.json -trans.zh_TW = public/language/zh-TW/post-queue.json -trans.ar = public/language/ar/post-queue.json -trans.bg = public/language/bg/post-queue.json -trans.cs = public/language/cs/post-queue.json -trans.hr = public/language/hr/post-queue.json -trans.pt_BR = public/language/pt-BR/post-queue.json -trans.th = public/language/th/post-queue.json +trans.en@pirate = public/language/en-x-pirate/post-queue.json trans.es = public/language/es/post-queue.json trans.et = public/language/et/post-queue.json -trans.gl = public/language/gl/post-queue.json -trans.hy = public/language/hy/post-queue.json -trans.pt_PT = public/language/pt-PT/post-queue.json +trans.fa_IR = public/language/fa-IR/post-queue.json trans.fi = public/language/fi/post-queue.json +trans.fr = public/language/fr/post-queue.json +trans.gl = public/language/gl/post-queue.json trans.he = public/language/he/post-queue.json +trans.hr = public/language/hr/post-queue.json +trans.hu = public/language/hu/post-queue.json +trans.hy = public/language/hy/post-queue.json +trans.id = public/language/id/post-queue.json +trans.it = public/language/it/post-queue.json +trans.ja = public/language/ja/post-queue.json +trans.ko = public/language/ko/post-queue.json +trans.lt = public/language/lt/post-queue.json +trans.lv = public/language/lv/post-queue.json +trans.ms = public/language/ms/post-queue.json trans.nb = public/language/nb/post-queue.json +trans.nl = public/language/nl/post-queue.json +trans.nn_NO = public/language/nn-NO/post-queue.json +trans.pl = public/language/pl/post-queue.json +trans.pt_BR = public/language/pt-BR/post-queue.json +trans.pt_PT = public/language/pt-PT/post-queue.json +trans.ro = public/language/ro/post-queue.json +trans.ru = public/language/ru/post-queue.json +trans.rw = public/language/rw/post-queue.json +trans.sc = public/language/sc/post-queue.json +trans.sk = public/language/sk/post-queue.json +trans.sl = public/language/sl/post-queue.json +trans.sq_AL = public/language/sq-AL/post-queue.json +trans.sr = public/language/sr/post-queue.json +trans.sv = public/language/sv/post-queue.json +trans.th = public/language/th/post-queue.json +trans.tr = public/language/tr/post-queue.json +trans.uk = public/language/uk/post-queue.json +trans.ur = public/language/ur/post-queue.json +trans.vi = public/language/vi/post-queue.json +trans.zh_CN = public/language/zh-CN/post-queue.json +trans.zh_TW = public/language/zh-TW/post-queue.json [o:nodebb:p:nodebb:r:recent] file_filter = public/language//recent.json source_file = public/language/en-GB/recent.json source_lang = en_GB type = KEYVALUEJSON -trans.sq_AL = public/language/sq-AL/recent.json -trans.sr = public/language/sr/recent.json -trans.sk = public/language/sk/recent.json -trans.uk = public/language/uk/recent.json +trans.ar = public/language/ar/recent.json +trans.az = public/language/az/recent.json trans.bg = public/language/bg/recent.json +trans.bn = public/language/bn/recent.json trans.cs = public/language/cs/recent.json trans.da = public/language/da/recent.json -trans.hy = public/language/hy/recent.json -trans.id = public/language/id/recent.json -trans.lv = public/language/lv/recent.json -trans.ar = public/language/ar/recent.json trans.de = public/language/de/recent.json -trans.es = public/language/es/recent.json -trans.fa_IR = public/language/fa-IR/recent.json -trans.gl = public/language/gl/recent.json -trans.hu = public/language/hu/recent.json -trans.lt = public/language/lt/recent.json -trans.pt_BR = public/language/pt-BR/recent.json -trans.ru = public/language/ru/recent.json -trans.vi = public/language/vi/recent.json -trans.rw = public/language/rw/recent.json -trans.sl = public/language/sl/recent.json trans.el = public/language/el/recent.json trans.en_US = public/language/en-US/recent.json +trans.en@pirate = public/language/en-x-pirate/recent.json +trans.es = public/language/es/recent.json +trans.et = public/language/et/recent.json +trans.fa_IR = public/language/fa-IR/recent.json +trans.fi = public/language/fi/recent.json +trans.fr = public/language/fr/recent.json +trans.gl = public/language/gl/recent.json trans.he = public/language/he/recent.json trans.hr = public/language/hr/recent.json -trans.ro = public/language/ro/recent.json -trans.tr = public/language/tr/recent.json -trans.zh_CN = public/language/zh-CN/recent.json -trans.bn = public/language/bn/recent.json -trans.en@pirate = public/language/en-x-pirate/recent.json +trans.hu = public/language/hu/recent.json +trans.hy = public/language/hy/recent.json +trans.id = public/language/id/recent.json +trans.it = public/language/it/recent.json trans.ja = public/language/ja/recent.json +trans.ko = public/language/ko/recent.json +trans.lt = public/language/lt/recent.json +trans.lv = public/language/lv/recent.json +trans.ms = public/language/ms/recent.json trans.nb = public/language/nb/recent.json trans.nl = public/language/nl/recent.json +trans.nn_NO = public/language/nn-NO/recent.json +trans.pl = public/language/pl/recent.json +trans.pt_BR = public/language/pt-BR/recent.json +trans.pt_PT = public/language/pt-PT/recent.json +trans.ro = public/language/ro/recent.json +trans.ru = public/language/ru/recent.json +trans.rw = public/language/rw/recent.json +trans.sc = public/language/sc/recent.json +trans.sk = public/language/sk/recent.json +trans.sl = public/language/sl/recent.json +trans.sq_AL = public/language/sq-AL/recent.json +trans.sr = public/language/sr/recent.json trans.sv = public/language/sv/recent.json trans.th = public/language/th/recent.json -trans.fr = public/language/fr/recent.json -trans.it = public/language/it/recent.json -trans.ms = public/language/ms/recent.json -trans.pl = public/language/pl/recent.json -trans.pt_PT = public/language/pt-PT/recent.json -trans.et = public/language/et/recent.json -trans.fi = public/language/fi/recent.json -trans.ko = public/language/ko/recent.json -trans.sc = public/language/sc/recent.json +trans.tr = public/language/tr/recent.json +trans.uk = public/language/uk/recent.json +trans.ur = public/language/ur/recent.json +trans.vi = public/language/vi/recent.json +trans.zh_CN = public/language/zh-CN/recent.json trans.zh_TW = public/language/zh-TW/recent.json [o:nodebb:p:nodebb:r:register] @@ -3281,674 +3524,767 @@ file_filter = public/language//register.json source_file = public/language/en-GB/register.json source_lang = en_GB type = KEYVALUEJSON -trans.sq_AL = public/language/sq-AL/register.json -trans.tr = public/language/tr/register.json -trans.et = public/language/et/register.json -trans.he = public/language/he/register.json -trans.lv = public/language/lv/register.json -trans.nl = public/language/nl/register.json -trans.sc = public/language/sc/register.json -trans.en@pirate = public/language/en-x-pirate/register.json -trans.es = public/language/es/register.json -trans.pl = public/language/pl/register.json -trans.sl = public/language/sl/register.json -trans.uk = public/language/uk/register.json -trans.pt_PT = public/language/pt-PT/register.json trans.ar = public/language/ar/register.json +trans.az = public/language/az/register.json trans.bg = public/language/bg/register.json -trans.de = public/language/de/register.json -trans.hr = public/language/hr/register.json -trans.nb = public/language/nb/register.json -trans.gl = public/language/gl/register.json -trans.sk = public/language/sk/register.json -trans.hy = public/language/hy/register.json -trans.ko = public/language/ko/register.json -trans.ms = public/language/ms/register.json -trans.ro = public/language/ro/register.json -trans.rw = public/language/rw/register.json -trans.zh_CN = public/language/zh-CN/register.json -trans.fi = public/language/fi/register.json -trans.it = public/language/it/register.json -trans.ru = public/language/ru/register.json -trans.sr = public/language/sr/register.json -trans.vi = public/language/vi/register.json -trans.sv = public/language/sv/register.json -trans.zh_TW = public/language/zh-TW/register.json trans.bn = public/language/bn/register.json trans.cs = public/language/cs/register.json -trans.fa_IR = public/language/fa-IR/register.json -trans.hu = public/language/hu/register.json -trans.lt = public/language/lt/register.json -trans.ja = public/language/ja/register.json -trans.pt_BR = public/language/pt-BR/register.json -trans.th = public/language/th/register.json trans.da = public/language/da/register.json +trans.de = public/language/de/register.json trans.el = public/language/el/register.json trans.en_US = public/language/en-US/register.json +trans.en@pirate = public/language/en-x-pirate/register.json +trans.es = public/language/es/register.json +trans.et = public/language/et/register.json +trans.fa_IR = public/language/fa-IR/register.json +trans.fi = public/language/fi/register.json trans.fr = public/language/fr/register.json +trans.gl = public/language/gl/register.json +trans.he = public/language/he/register.json +trans.hr = public/language/hr/register.json +trans.hu = public/language/hu/register.json +trans.hy = public/language/hy/register.json trans.id = public/language/id/register.json +trans.it = public/language/it/register.json +trans.ja = public/language/ja/register.json +trans.ko = public/language/ko/register.json +trans.lt = public/language/lt/register.json +trans.lv = public/language/lv/register.json +trans.ms = public/language/ms/register.json +trans.nb = public/language/nb/register.json +trans.nl = public/language/nl/register.json +trans.nn_NO = public/language/nn-NO/register.json +trans.pl = public/language/pl/register.json +trans.pt_BR = public/language/pt-BR/register.json +trans.pt_PT = public/language/pt-PT/register.json +trans.ro = public/language/ro/register.json +trans.ru = public/language/ru/register.json +trans.rw = public/language/rw/register.json +trans.sc = public/language/sc/register.json +trans.sk = public/language/sk/register.json +trans.sl = public/language/sl/register.json +trans.sq_AL = public/language/sq-AL/register.json +trans.sr = public/language/sr/register.json +trans.sv = public/language/sv/register.json +trans.th = public/language/th/register.json +trans.tr = public/language/tr/register.json +trans.uk = public/language/uk/register.json +trans.ur = public/language/ur/register.json +trans.vi = public/language/vi/register.json +trans.zh_CN = public/language/zh-CN/register.json +trans.zh_TW = public/language/zh-TW/register.json [o:nodebb:p:nodebb:r:reset_password] file_filter = public/language//reset_password.json source_file = public/language/en-GB/reset_password.json source_lang = en_GB type = KEYVALUEJSON -trans.bg = public/language/bg/reset_password.json -trans.fr = public/language/fr/reset_password.json -trans.hr = public/language/hr/reset_password.json -trans.hy = public/language/hy/reset_password.json -trans.ja = public/language/ja/reset_password.json -trans.pt_PT = public/language/pt-PT/reset_password.json -trans.zh_CN = public/language/zh-CN/reset_password.json -trans.sv = public/language/sv/reset_password.json -trans.de = public/language/de/reset_password.json -trans.fa_IR = public/language/fa-IR/reset_password.json -trans.gl = public/language/gl/reset_password.json -trans.hu = public/language/hu/reset_password.json -trans.id = public/language/id/reset_password.json -trans.rw = public/language/rw/reset_password.json -trans.sc = public/language/sc/reset_password.json -trans.vi = public/language/vi/reset_password.json -trans.bn = public/language/bn/reset_password.json -trans.he = public/language/he/reset_password.json -trans.ro = public/language/ro/reset_password.json -trans.sq_AL = public/language/sq-AL/reset_password.json trans.ar = public/language/ar/reset_password.json +trans.az = public/language/az/reset_password.json +trans.bg = public/language/bg/reset_password.json +trans.bn = public/language/bn/reset_password.json trans.cs = public/language/cs/reset_password.json -trans.ko = public/language/ko/reset_password.json -trans.ms = public/language/ms/reset_password.json -trans.pt_BR = public/language/pt-BR/reset_password.json -trans.sr = public/language/sr/reset_password.json -trans.tr = public/language/tr/reset_password.json -trans.ru = public/language/ru/reset_password.json -trans.zh_TW = public/language/zh-TW/reset_password.json trans.da = public/language/da/reset_password.json -trans.en@pirate = public/language/en-x-pirate/reset_password.json -trans.en_US = public/language/en-US/reset_password.json -trans.lt = public/language/lt/reset_password.json -trans.lv = public/language/lv/reset_password.json -trans.nb = public/language/nb/reset_password.json -trans.sk = public/language/sk/reset_password.json +trans.de = public/language/de/reset_password.json trans.el = public/language/el/reset_password.json +trans.en_US = public/language/en-US/reset_password.json +trans.en@pirate = public/language/en-x-pirate/reset_password.json trans.es = public/language/es/reset_password.json trans.et = public/language/et/reset_password.json -trans.uk = public/language/uk/reset_password.json +trans.fa_IR = public/language/fa-IR/reset_password.json trans.fi = public/language/fi/reset_password.json +trans.fr = public/language/fr/reset_password.json +trans.gl = public/language/gl/reset_password.json +trans.he = public/language/he/reset_password.json +trans.hr = public/language/hr/reset_password.json +trans.hu = public/language/hu/reset_password.json +trans.hy = public/language/hy/reset_password.json +trans.id = public/language/id/reset_password.json trans.it = public/language/it/reset_password.json +trans.ja = public/language/ja/reset_password.json +trans.ko = public/language/ko/reset_password.json +trans.lt = public/language/lt/reset_password.json +trans.lv = public/language/lv/reset_password.json +trans.ms = public/language/ms/reset_password.json +trans.nb = public/language/nb/reset_password.json trans.nl = public/language/nl/reset_password.json +trans.nn_NO = public/language/nn-NO/reset_password.json trans.pl = public/language/pl/reset_password.json +trans.pt_BR = public/language/pt-BR/reset_password.json +trans.pt_PT = public/language/pt-PT/reset_password.json +trans.ro = public/language/ro/reset_password.json +trans.ru = public/language/ru/reset_password.json +trans.rw = public/language/rw/reset_password.json +trans.sc = public/language/sc/reset_password.json +trans.sk = public/language/sk/reset_password.json trans.sl = public/language/sl/reset_password.json +trans.sq_AL = public/language/sq-AL/reset_password.json +trans.sr = public/language/sr/reset_password.json +trans.sv = public/language/sv/reset_password.json trans.th = public/language/th/reset_password.json +trans.tr = public/language/tr/reset_password.json +trans.uk = public/language/uk/reset_password.json +trans.ur = public/language/ur/reset_password.json +trans.vi = public/language/vi/reset_password.json +trans.zh_CN = public/language/zh-CN/reset_password.json +trans.zh_TW = public/language/zh-TW/reset_password.json [o:nodebb:p:nodebb:r:rewards] file_filter = public/language//rewards.json source_file = public/language/en-GB/rewards.json source_lang = en_GB type = KEYVALUEJSON -trans.bg = public/language/bg/rewards.json -trans.fr = public/language/fr/rewards.json -trans.hr = public/language/hr/rewards.json -trans.hy = public/language/hy/rewards.json -trans.ja = public/language/ja/rewards.json -trans.pt_PT = public/language/pt-PT/rewards.json -trans.zh_CN = public/language/zh-CN/rewards.json -trans.sv = public/language/sv/rewards.json -trans.de = public/language/de/rewards.json -trans.fa_IR = public/language/fa-IR/rewards.json -trans.gl = public/language/gl/rewards.json -trans.hu = public/language/hu/rewards.json -trans.id = public/language/id/rewards.json -trans.rw = public/language/rw/rewards.json -trans.sc = public/language/sc/rewards.json -trans.vi = public/language/vi/rewards.json -trans.bn = public/language/bn/rewards.json -trans.he = public/language/he/rewards.json -trans.ro = public/language/ro/rewards.json -trans.sq_AL = public/language/sq-AL/rewards.json trans.ar = public/language/ar/rewards.json +trans.az = public/language/az/rewards.json +trans.bg = public/language/bg/rewards.json +trans.bn = public/language/bn/rewards.json trans.cs = public/language/cs/rewards.json -trans.ko = public/language/ko/rewards.json -trans.ms = public/language/ms/rewards.json -trans.pt_BR = public/language/pt-BR/rewards.json -trans.sr = public/language/sr/rewards.json -trans.tr = public/language/tr/rewards.json -trans.ru = public/language/ru/rewards.json -trans.zh_TW = public/language/zh-TW/rewards.json trans.da = public/language/da/rewards.json -trans.en@pirate = public/language/en-x-pirate/rewards.json -trans.en_US = public/language/en-US/rewards.json -trans.lt = public/language/lt/rewards.json -trans.lv = public/language/lv/rewards.json -trans.nb = public/language/nb/rewards.json -trans.sk = public/language/sk/rewards.json +trans.de = public/language/de/rewards.json trans.el = public/language/el/rewards.json +trans.en_US = public/language/en-US/rewards.json +trans.en@pirate = public/language/en-x-pirate/rewards.json trans.es = public/language/es/rewards.json trans.et = public/language/et/rewards.json -trans.uk = public/language/uk/rewards.json +trans.fa_IR = public/language/fa-IR/rewards.json trans.fi = public/language/fi/rewards.json +trans.fr = public/language/fr/rewards.json +trans.gl = public/language/gl/rewards.json +trans.he = public/language/he/rewards.json +trans.hr = public/language/hr/rewards.json +trans.hu = public/language/hu/rewards.json +trans.hy = public/language/hy/rewards.json +trans.id = public/language/id/rewards.json trans.it = public/language/it/rewards.json +trans.ja = public/language/ja/rewards.json +trans.ko = public/language/ko/rewards.json +trans.lt = public/language/lt/rewards.json +trans.lv = public/language/lv/rewards.json +trans.ms = public/language/ms/rewards.json +trans.nb = public/language/nb/rewards.json trans.nl = public/language/nl/rewards.json +trans.nn_NO = public/language/nn-NO/rewards.json trans.pl = public/language/pl/rewards.json +trans.pt_BR = public/language/pt-BR/rewards.json +trans.pt_PT = public/language/pt-PT/rewards.json +trans.ro = public/language/ro/rewards.json +trans.ru = public/language/ru/rewards.json +trans.rw = public/language/rw/rewards.json +trans.sc = public/language/sc/rewards.json +trans.sk = public/language/sk/rewards.json trans.sl = public/language/sl/rewards.json +trans.sq_AL = public/language/sq-AL/rewards.json +trans.sr = public/language/sr/rewards.json +trans.sv = public/language/sv/rewards.json trans.th = public/language/th/rewards.json +trans.tr = public/language/tr/rewards.json +trans.uk = public/language/uk/rewards.json +trans.ur = public/language/ur/rewards.json +trans.vi = public/language/vi/rewards.json +trans.zh_CN = public/language/zh-CN/rewards.json +trans.zh_TW = public/language/zh-TW/rewards.json [o:nodebb:p:nodebb:r:search] file_filter = public/language//search.json source_file = public/language/en-GB/search.json source_lang = en_GB type = KEYVALUEJSON -trans.da = public/language/da/search.json -trans.en_US = public/language/en-US/search.json -trans.ms = public/language/ms/search.json -trans.hr = public/language/hr/search.json -trans.hu = public/language/hu/search.json -trans.id = public/language/id/search.json +trans.ar = public/language/ar/search.json +trans.az = public/language/az/search.json trans.bg = public/language/bg/search.json +trans.bn = public/language/bn/search.json +trans.cs = public/language/cs/search.json +trans.da = public/language/da/search.json trans.de = public/language/de/search.json +trans.el = public/language/el/search.json +trans.en_US = public/language/en-US/search.json trans.en@pirate = public/language/en-x-pirate/search.json +trans.es = public/language/es/search.json +trans.et = public/language/et/search.json trans.fa_IR = public/language/fa-IR/search.json trans.fi = public/language/fi/search.json +trans.fr = public/language/fr/search.json +trans.gl = public/language/gl/search.json +trans.he = public/language/he/search.json +trans.hr = public/language/hr/search.json +trans.hu = public/language/hu/search.json +trans.hy = public/language/hy/search.json +trans.id = public/language/id/search.json +trans.it = public/language/it/search.json +trans.ja = public/language/ja/search.json +trans.ko = public/language/ko/search.json +trans.lt = public/language/lt/search.json +trans.lv = public/language/lv/search.json +trans.ms = public/language/ms/search.json +trans.nb = public/language/nb/search.json +trans.nl = public/language/nl/search.json +trans.nn_NO = public/language/nn-NO/search.json +trans.pl = public/language/pl/search.json +trans.pt_BR = public/language/pt-BR/search.json +trans.pt_PT = public/language/pt-PT/search.json +trans.ro = public/language/ro/search.json +trans.ru = public/language/ru/search.json +trans.rw = public/language/rw/search.json trans.sc = public/language/sc/search.json trans.sk = public/language/sk/search.json trans.sl = public/language/sl/search.json trans.sq_AL = public/language/sq-AL/search.json trans.sr = public/language/sr/search.json -trans.bn = public/language/bn/search.json -trans.ja = public/language/ja/search.json -trans.ko = public/language/ko/search.json -trans.pl = public/language/pl/search.json -trans.ro = public/language/ro/search.json -trans.zh_TW = public/language/zh-TW/search.json -trans.cs = public/language/cs/search.json -trans.he = public/language/he/search.json -trans.nb = public/language/nb/search.json -trans.zh_CN = public/language/zh-CN/search.json -trans.lv = public/language/lv/search.json -trans.rw = public/language/rw/search.json trans.sv = public/language/sv/search.json -trans.ru = public/language/ru/search.json +trans.th = public/language/th/search.json trans.tr = public/language/tr/search.json trans.uk = public/language/uk/search.json -trans.el = public/language/el/search.json -trans.fr = public/language/fr/search.json -trans.gl = public/language/gl/search.json -trans.it = public/language/it/search.json -trans.pt_BR = public/language/pt-BR/search.json -trans.nl = public/language/nl/search.json -trans.pt_PT = public/language/pt-PT/search.json -trans.th = public/language/th/search.json +trans.ur = public/language/ur/search.json trans.vi = public/language/vi/search.json -trans.ar = public/language/ar/search.json -trans.es = public/language/es/search.json -trans.et = public/language/et/search.json -trans.hy = public/language/hy/search.json -trans.lt = public/language/lt/search.json +trans.zh_CN = public/language/zh-CN/search.json +trans.zh_TW = public/language/zh-TW/search.json [o:nodebb:p:nodebb:r:social] file_filter = public/language//social.json source_file = public/language/en-GB/social.json source_lang = en_GB type = KEYVALUEJSON -trans.da = public/language/da/social.json -trans.en_US = public/language/en-US/social.json -trans.ms = public/language/ms/social.json -trans.hr = public/language/hr/social.json -trans.hu = public/language/hu/social.json -trans.id = public/language/id/social.json +trans.ar = public/language/ar/social.json +trans.az = public/language/az/social.json trans.bg = public/language/bg/social.json +trans.bn = public/language/bn/social.json +trans.cs = public/language/cs/social.json +trans.da = public/language/da/social.json trans.de = public/language/de/social.json +trans.el = public/language/el/social.json +trans.en_US = public/language/en-US/social.json trans.en@pirate = public/language/en-x-pirate/social.json +trans.es = public/language/es/social.json +trans.et = public/language/et/social.json trans.fa_IR = public/language/fa-IR/social.json trans.fi = public/language/fi/social.json +trans.fr = public/language/fr/social.json +trans.gl = public/language/gl/social.json +trans.he = public/language/he/social.json +trans.hr = public/language/hr/social.json +trans.hu = public/language/hu/social.json +trans.hy = public/language/hy/social.json +trans.id = public/language/id/social.json +trans.it = public/language/it/social.json +trans.ja = public/language/ja/social.json +trans.ko = public/language/ko/social.json +trans.lt = public/language/lt/social.json +trans.lv = public/language/lv/social.json +trans.ms = public/language/ms/social.json +trans.nb = public/language/nb/social.json +trans.nl = public/language/nl/social.json +trans.nn_NO = public/language/nn-NO/social.json +trans.pl = public/language/pl/social.json +trans.pt_BR = public/language/pt-BR/social.json +trans.pt_PT = public/language/pt-PT/social.json +trans.ro = public/language/ro/social.json +trans.ru = public/language/ru/social.json +trans.rw = public/language/rw/social.json trans.sc = public/language/sc/social.json trans.sk = public/language/sk/social.json trans.sl = public/language/sl/social.json trans.sq_AL = public/language/sq-AL/social.json trans.sr = public/language/sr/social.json -trans.bn = public/language/bn/social.json -trans.ja = public/language/ja/social.json -trans.ko = public/language/ko/social.json -trans.pl = public/language/pl/social.json -trans.ro = public/language/ro/social.json -trans.zh_TW = public/language/zh-TW/social.json -trans.cs = public/language/cs/social.json -trans.he = public/language/he/social.json -trans.nb = public/language/nb/social.json -trans.zh_CN = public/language/zh-CN/social.json -trans.lv = public/language/lv/social.json -trans.rw = public/language/rw/social.json trans.sv = public/language/sv/social.json -trans.ru = public/language/ru/social.json +trans.th = public/language/th/social.json trans.tr = public/language/tr/social.json trans.uk = public/language/uk/social.json -trans.el = public/language/el/social.json -trans.fr = public/language/fr/social.json -trans.gl = public/language/gl/social.json -trans.it = public/language/it/social.json -trans.pt_BR = public/language/pt-BR/social.json -trans.nl = public/language/nl/social.json -trans.pt_PT = public/language/pt-PT/social.json -trans.th = public/language/th/social.json +trans.ur = public/language/ur/social.json trans.vi = public/language/vi/social.json -trans.ar = public/language/ar/social.json -trans.es = public/language/es/social.json -trans.et = public/language/et/social.json -trans.hy = public/language/hy/social.json -trans.lt = public/language/lt/social.json +trans.zh_CN = public/language/zh-CN/social.json +trans.zh_TW = public/language/zh-TW/social.json [o:nodebb:p:nodebb:r:success] file_filter = public/language//success.json source_file = public/language/en-GB/success.json source_lang = en_GB type = KEYVALUEJSON -trans.pt_BR = public/language/pt-BR/success.json +trans.ar = public/language/ar/success.json +trans.az = public/language/az/success.json +trans.bg = public/language/bg/success.json +trans.bn = public/language/bn/success.json +trans.cs = public/language/cs/success.json +trans.da = public/language/da/success.json +trans.de = public/language/de/success.json +trans.el = public/language/el/success.json +trans.en_US = public/language/en-US/success.json trans.en@pirate = public/language/en-x-pirate/success.json trans.es = public/language/es/success.json +trans.et = public/language/et/success.json +trans.fa_IR = public/language/fa-IR/success.json +trans.fi = public/language/fi/success.json +trans.fr = public/language/fr/success.json +trans.gl = public/language/gl/success.json trans.he = public/language/he/success.json +trans.hr = public/language/hr/success.json +trans.hu = public/language/hu/success.json trans.hy = public/language/hy/success.json +trans.id = public/language/id/success.json +trans.it = public/language/it/success.json trans.ja = public/language/ja/success.json trans.ko = public/language/ko/success.json -trans.pl = public/language/pl/success.json -trans.de = public/language/de/success.json -trans.fa_IR = public/language/fa-IR/success.json -trans.ro = public/language/ro/success.json -trans.en_US = public/language/en-US/success.json trans.lt = public/language/lt/success.json -trans.ru = public/language/ru/success.json -trans.sq_AL = public/language/sq-AL/success.json -trans.vi = public/language/vi/success.json -trans.bg = public/language/bg/success.json -trans.hr = public/language/hr/success.json -trans.ms = public/language/ms/success.json -trans.th = public/language/th/success.json -trans.zh_CN = public/language/zh-CN/success.json -trans.bn = public/language/bn/success.json -trans.fr = public/language/fr/success.json -trans.hu = public/language/hu/success.json -trans.id = public/language/id/success.json -trans.rw = public/language/rw/success.json -trans.sl = public/language/sl/success.json -trans.zh_TW = public/language/zh-TW/success.json -trans.ar = public/language/ar/success.json -trans.et = public/language/et/success.json -trans.it = public/language/it/success.json -trans.pt_PT = public/language/pt-PT/success.json -trans.sk = public/language/sk/success.json -trans.sv = public/language/sv/success.json -trans.tr = public/language/tr/success.json -trans.cs = public/language/cs/success.json -trans.fi = public/language/fi/success.json trans.lv = public/language/lv/success.json -trans.nl = public/language/nl/success.json -trans.sc = public/language/sc/success.json -trans.da = public/language/da/success.json -trans.el = public/language/el/success.json -trans.gl = public/language/gl/success.json +trans.ms = public/language/ms/success.json trans.nb = public/language/nb/success.json +trans.nl = public/language/nl/success.json +trans.nn_NO = public/language/nn-NO/success.json +trans.pl = public/language/pl/success.json +trans.pt_BR = public/language/pt-BR/success.json +trans.pt_PT = public/language/pt-PT/success.json +trans.ro = public/language/ro/success.json +trans.ru = public/language/ru/success.json +trans.rw = public/language/rw/success.json +trans.sc = public/language/sc/success.json +trans.sk = public/language/sk/success.json +trans.sl = public/language/sl/success.json +trans.sq_AL = public/language/sq-AL/success.json trans.sr = public/language/sr/success.json +trans.sv = public/language/sv/success.json +trans.th = public/language/th/success.json +trans.tr = public/language/tr/success.json trans.uk = public/language/uk/success.json +trans.ur = public/language/ur/success.json +trans.vi = public/language/vi/success.json +trans.zh_CN = public/language/zh-CN/success.json +trans.zh_TW = public/language/zh-TW/success.json [o:nodebb:p:nodebb:r:tags] file_filter = public/language//tags.json source_file = public/language/en-GB/tags.json source_lang = en_GB type = KEYVALUEJSON -trans.et = public/language/et/tags.json -trans.nl = public/language/nl/tags.json -trans.pt_BR = public/language/pt-BR/tags.json -trans.uk = public/language/uk/tags.json -trans.el = public/language/el/tags.json -trans.fa_IR = public/language/fa-IR/tags.json -trans.he = public/language/he/tags.json -trans.hr = public/language/hr/tags.json -trans.th = public/language/th/tags.json -trans.sl = public/language/sl/tags.json -trans.bg = public/language/bg/tags.json -trans.en_US = public/language/en-US/tags.json -trans.fi = public/language/fi/tags.json -trans.rw = public/language/rw/tags.json -trans.sc = public/language/sc/tags.json -trans.tr = public/language/tr/tags.json -trans.vi = public/language/vi/tags.json trans.ar = public/language/ar/tags.json -trans.de = public/language/de/tags.json -trans.es = public/language/es/tags.json -trans.pt_PT = public/language/pt-PT/tags.json -trans.ro = public/language/ro/tags.json -trans.ru = public/language/ru/tags.json -trans.sk = public/language/sk/tags.json -trans.sr = public/language/sr/tags.json +trans.az = public/language/az/tags.json +trans.bg = public/language/bg/tags.json +trans.bn = public/language/bn/tags.json trans.cs = public/language/cs/tags.json trans.da = public/language/da/tags.json +trans.de = public/language/de/tags.json +trans.el = public/language/el/tags.json +trans.en_US = public/language/en-US/tags.json trans.en@pirate = public/language/en-x-pirate/tags.json -trans.hu = public/language/hu/tags.json -trans.ja = public/language/ja/tags.json -trans.zh_CN = public/language/zh-CN/tags.json +trans.es = public/language/es/tags.json +trans.et = public/language/et/tags.json +trans.fa_IR = public/language/fa-IR/tags.json +trans.fi = public/language/fi/tags.json +trans.fr = public/language/fr/tags.json trans.gl = public/language/gl/tags.json +trans.he = public/language/he/tags.json +trans.hr = public/language/hr/tags.json +trans.hu = public/language/hu/tags.json +trans.hy = public/language/hy/tags.json +trans.id = public/language/id/tags.json +trans.it = public/language/it/tags.json +trans.ja = public/language/ja/tags.json +trans.ko = public/language/ko/tags.json +trans.lt = public/language/lt/tags.json trans.lv = public/language/lv/tags.json trans.ms = public/language/ms/tags.json trans.nb = public/language/nb/tags.json -trans.sv = public/language/sv/tags.json -trans.sq_AL = public/language/sq-AL/tags.json -trans.zh_TW = public/language/zh-TW/tags.json -trans.bn = public/language/bn/tags.json -trans.fr = public/language/fr/tags.json -trans.id = public/language/id/tags.json -trans.ko = public/language/ko/tags.json -trans.lt = public/language/lt/tags.json -trans.hy = public/language/hy/tags.json -trans.it = public/language/it/tags.json +trans.nl = public/language/nl/tags.json +trans.nn_NO = public/language/nn-NO/tags.json trans.pl = public/language/pl/tags.json +trans.pt_BR = public/language/pt-BR/tags.json +trans.pt_PT = public/language/pt-PT/tags.json +trans.ro = public/language/ro/tags.json +trans.ru = public/language/ru/tags.json +trans.rw = public/language/rw/tags.json +trans.sc = public/language/sc/tags.json +trans.sk = public/language/sk/tags.json +trans.sl = public/language/sl/tags.json +trans.sq_AL = public/language/sq-AL/tags.json +trans.sr = public/language/sr/tags.json +trans.sv = public/language/sv/tags.json +trans.th = public/language/th/tags.json +trans.tr = public/language/tr/tags.json +trans.uk = public/language/uk/tags.json +trans.ur = public/language/ur/tags.json +trans.vi = public/language/vi/tags.json +trans.zh_CN = public/language/zh-CN/tags.json +trans.zh_TW = public/language/zh-TW/tags.json [o:nodebb:p:nodebb:r:top] file_filter = public/language//top.json source_file = public/language/en-GB/top.json source_lang = en_GB type = KEYVALUEJSON -trans.hy = public/language/hy/top.json -trans.el = public/language/el/top.json -trans.fa_IR = public/language/fa-IR/top.json -trans.nl = public/language/nl/top.json -trans.cs = public/language/cs/top.json -trans.en_US = public/language/en-US/top.json -trans.fi = public/language/fi/top.json -trans.he = public/language/he/top.json -trans.lt = public/language/lt/top.json -trans.ms = public/language/ms/top.json -trans.sk = public/language/sk/top.json -trans.vi = public/language/vi/top.json -trans.bg = public/language/bg/top.json -trans.de = public/language/de/top.json -trans.hu = public/language/hu/top.json -trans.pl = public/language/pl/top.json -trans.pt_PT = public/language/pt-PT/top.json -trans.sl = public/language/sl/top.json -trans.en@pirate = public/language/en-x-pirate/top.json -trans.gl = public/language/gl/top.json -trans.rw = public/language/rw/top.json -trans.sq_AL = public/language/sq-AL/top.json -trans.zh_CN = public/language/zh-CN/top.json -trans.ko = public/language/ko/top.json -trans.ro = public/language/ro/top.json -trans.pt_BR = public/language/pt-BR/top.json -trans.bn = public/language/bn/top.json -trans.fr = public/language/fr/top.json -trans.et = public/language/et/top.json -trans.id = public/language/id/top.json -trans.ja = public/language/ja/top.json -trans.lv = public/language/lv/top.json -trans.ru = public/language/ru/top.json -trans.sc = public/language/sc/top.json trans.ar = public/language/ar/top.json +trans.az = public/language/az/top.json +trans.bg = public/language/bg/top.json +trans.bn = public/language/bn/top.json +trans.cs = public/language/cs/top.json trans.da = public/language/da/top.json -trans.uk = public/language/uk/top.json +trans.de = public/language/de/top.json +trans.el = public/language/el/top.json +trans.en_US = public/language/en-US/top.json +trans.en@pirate = public/language/en-x-pirate/top.json +trans.es = public/language/es/top.json +trans.et = public/language/et/top.json +trans.fa_IR = public/language/fa-IR/top.json +trans.fi = public/language/fi/top.json +trans.fr = public/language/fr/top.json +trans.gl = public/language/gl/top.json +trans.he = public/language/he/top.json +trans.hr = public/language/hr/top.json +trans.hu = public/language/hu/top.json +trans.hy = public/language/hy/top.json +trans.id = public/language/id/top.json +trans.it = public/language/it/top.json +trans.ja = public/language/ja/top.json +trans.ko = public/language/ko/top.json +trans.lt = public/language/lt/top.json +trans.lv = public/language/lv/top.json +trans.ms = public/language/ms/top.json +trans.nb = public/language/nb/top.json +trans.nl = public/language/nl/top.json +trans.nn_NO = public/language/nn-NO/top.json +trans.pl = public/language/pl/top.json +trans.pt_BR = public/language/pt-BR/top.json +trans.pt_PT = public/language/pt-PT/top.json +trans.ro = public/language/ro/top.json +trans.ru = public/language/ru/top.json +trans.rw = public/language/rw/top.json +trans.sc = public/language/sc/top.json +trans.sk = public/language/sk/top.json +trans.sl = public/language/sl/top.json +trans.sq_AL = public/language/sq-AL/top.json +trans.sr = public/language/sr/top.json trans.sv = public/language/sv/top.json trans.th = public/language/th/top.json -trans.it = public/language/it/top.json -trans.nb = public/language/nb/top.json -trans.sr = public/language/sr/top.json trans.tr = public/language/tr/top.json +trans.uk = public/language/uk/top.json +trans.ur = public/language/ur/top.json +trans.vi = public/language/vi/top.json +trans.zh_CN = public/language/zh-CN/top.json trans.zh_TW = public/language/zh-TW/top.json -trans.es = public/language/es/top.json -trans.hr = public/language/hr/top.json [o:nodebb:p:nodebb:r:topic] file_filter = public/language//topic.json source_file = public/language/en-GB/topic.json source_lang = en_GB type = KEYVALUEJSON -trans.et = public/language/et/topic.json -trans.hu = public/language/hu/topic.json -trans.nb = public/language/nb/topic.json -trans.nl = public/language/nl/topic.json -trans.sk = public/language/sk/topic.json trans.ar = public/language/ar/topic.json -trans.es = public/language/es/topic.json -trans.fr = public/language/fr/topic.json -trans.lv = public/language/lv/topic.json -trans.ms = public/language/ms/topic.json -trans.pl = public/language/pl/topic.json -trans.pt_PT = public/language/pt-PT/topic.json -trans.uk = public/language/uk/topic.json -trans.ru = public/language/ru/topic.json +trans.az = public/language/az/topic.json trans.bg = public/language/bg/topic.json +trans.bn = public/language/bn/topic.json +trans.cs = public/language/cs/topic.json +trans.da = public/language/da/topic.json +trans.de = public/language/de/topic.json +trans.el = public/language/el/topic.json +trans.en_US = public/language/en-US/topic.json trans.en@pirate = public/language/en-x-pirate/topic.json +trans.es = public/language/es/topic.json +trans.et = public/language/et/topic.json trans.fa_IR = public/language/fa-IR/topic.json trans.fi = public/language/fi/topic.json -trans.he = public/language/he/topic.json -trans.ja = public/language/ja/topic.json -trans.pt_BR = public/language/pt-BR/topic.json -trans.tr = public/language/tr/topic.json -trans.zh_TW = public/language/zh-TW/topic.json -trans.bn = public/language/bn/topic.json -trans.da = public/language/da/topic.json -trans.en_US = public/language/en-US/topic.json -trans.hr = public/language/hr/topic.json -trans.it = public/language/it/topic.json -trans.ro = public/language/ro/topic.json -trans.cs = public/language/cs/topic.json -trans.de = public/language/de/topic.json -trans.sr = public/language/sr/topic.json -trans.sv = public/language/sv/topic.json -trans.vi = public/language/vi/topic.json -trans.ko = public/language/ko/topic.json -trans.sl = public/language/sl/topic.json -trans.el = public/language/el/topic.json +trans.fr = public/language/fr/topic.json trans.gl = public/language/gl/topic.json -trans.id = public/language/id/topic.json -trans.lt = public/language/lt/topic.json -trans.sq_AL = public/language/sq-AL/topic.json -trans.th = public/language/th/topic.json +trans.he = public/language/he/topic.json +trans.hr = public/language/hr/topic.json +trans.hu = public/language/hu/topic.json trans.hy = public/language/hy/topic.json +trans.id = public/language/id/topic.json +trans.it = public/language/it/topic.json +trans.ja = public/language/ja/topic.json +trans.ko = public/language/ko/topic.json +trans.lt = public/language/lt/topic.json +trans.lv = public/language/lv/topic.json +trans.ms = public/language/ms/topic.json +trans.nb = public/language/nb/topic.json +trans.nl = public/language/nl/topic.json +trans.nn_NO = public/language/nn-NO/topic.json +trans.pl = public/language/pl/topic.json +trans.pt_BR = public/language/pt-BR/topic.json +trans.pt_PT = public/language/pt-PT/topic.json +trans.ro = public/language/ro/topic.json +trans.ru = public/language/ru/topic.json trans.rw = public/language/rw/topic.json trans.sc = public/language/sc/topic.json +trans.sk = public/language/sk/topic.json +trans.sl = public/language/sl/topic.json +trans.sq_AL = public/language/sq-AL/topic.json +trans.sr = public/language/sr/topic.json +trans.sv = public/language/sv/topic.json +trans.th = public/language/th/topic.json +trans.tr = public/language/tr/topic.json +trans.uk = public/language/uk/topic.json +trans.ur = public/language/ur/topic.json +trans.vi = public/language/vi/topic.json trans.zh_CN = public/language/zh-CN/topic.json +trans.zh_TW = public/language/zh-TW/topic.json [o:nodebb:p:nodebb:r:unread] file_filter = public/language//unread.json source_file = public/language/en-GB/unread.json source_lang = en_GB type = KEYVALUEJSON -trans.pt_BR = public/language/pt-BR/unread.json -trans.zh_TW = public/language/zh-TW/unread.json -trans.fa_IR = public/language/fa-IR/unread.json -trans.fr = public/language/fr/unread.json -trans.es = public/language/es/unread.json -trans.it = public/language/it/unread.json -trans.ms = public/language/ms/unread.json -trans.ro = public/language/ro/unread.json -trans.de = public/language/de/unread.json -trans.en@pirate = public/language/en-x-pirate/unread.json -trans.hr = public/language/hr/unread.json -trans.hu = public/language/hu/unread.json -trans.lt = public/language/lt/unread.json -trans.ru = public/language/ru/unread.json -trans.sl = public/language/sl/unread.json -trans.th = public/language/th/unread.json +trans.ar = public/language/ar/unread.json +trans.az = public/language/az/unread.json trans.bg = public/language/bg/unread.json -trans.gl = public/language/gl/unread.json -trans.uk = public/language/uk/unread.json -trans.vi = public/language/vi/unread.json -trans.ja = public/language/ja/unread.json -trans.lv = public/language/lv/unread.json -trans.nl = public/language/nl/unread.json -trans.sr = public/language/sr/unread.json -trans.zh_CN = public/language/zh-CN/unread.json -trans.hy = public/language/hy/unread.json -trans.id = public/language/id/unread.json -trans.da = public/language/da/unread.json -trans.en_US = public/language/en-US/unread.json -trans.sk = public/language/sk/unread.json trans.bn = public/language/bn/unread.json trans.cs = public/language/cs/unread.json -trans.nb = public/language/nb/unread.json -trans.rw = public/language/rw/unread.json -trans.sq_AL = public/language/sq-AL/unread.json -trans.tr = public/language/tr/unread.json -trans.ar = public/language/ar/unread.json +trans.da = public/language/da/unread.json +trans.de = public/language/de/unread.json trans.el = public/language/el/unread.json -trans.he = public/language/he/unread.json -trans.pt_PT = public/language/pt-PT/unread.json +trans.en_US = public/language/en-US/unread.json +trans.en@pirate = public/language/en-x-pirate/unread.json +trans.es = public/language/es/unread.json trans.et = public/language/et/unread.json +trans.fa_IR = public/language/fa-IR/unread.json trans.fi = public/language/fi/unread.json -trans.sc = public/language/sc/unread.json -trans.sv = public/language/sv/unread.json +trans.fr = public/language/fr/unread.json +trans.gl = public/language/gl/unread.json +trans.he = public/language/he/unread.json +trans.hr = public/language/hr/unread.json +trans.hu = public/language/hu/unread.json +trans.hy = public/language/hy/unread.json +trans.id = public/language/id/unread.json +trans.it = public/language/it/unread.json +trans.ja = public/language/ja/unread.json trans.ko = public/language/ko/unread.json +trans.lt = public/language/lt/unread.json +trans.lv = public/language/lv/unread.json +trans.ms = public/language/ms/unread.json +trans.nb = public/language/nb/unread.json +trans.nl = public/language/nl/unread.json +trans.nn_NO = public/language/nn-NO/unread.json trans.pl = public/language/pl/unread.json +trans.pt_BR = public/language/pt-BR/unread.json +trans.pt_PT = public/language/pt-PT/unread.json +trans.ro = public/language/ro/unread.json +trans.ru = public/language/ru/unread.json +trans.rw = public/language/rw/unread.json +trans.sc = public/language/sc/unread.json +trans.sk = public/language/sk/unread.json +trans.sl = public/language/sl/unread.json +trans.sq_AL = public/language/sq-AL/unread.json +trans.sr = public/language/sr/unread.json +trans.sv = public/language/sv/unread.json +trans.th = public/language/th/unread.json +trans.tr = public/language/tr/unread.json +trans.uk = public/language/uk/unread.json +trans.ur = public/language/ur/unread.json +trans.vi = public/language/vi/unread.json +trans.zh_CN = public/language/zh-CN/unread.json +trans.zh_TW = public/language/zh-TW/unread.json [o:nodebb:p:nodebb:r:uploads] file_filter = public/language//uploads.json source_file = public/language/en-GB/uploads.json source_lang = en_GB type = KEYVALUEJSON -trans.sv = public/language/sv/uploads.json +trans.ar = public/language/ar/uploads.json +trans.az = public/language/az/uploads.json +trans.bg = public/language/bg/uploads.json +trans.bn = public/language/bn/uploads.json trans.cs = public/language/cs/uploads.json +trans.da = public/language/da/uploads.json +trans.de = public/language/de/uploads.json trans.el = public/language/el/uploads.json +trans.en_US = public/language/en-US/uploads.json +trans.en@pirate = public/language/en-x-pirate/uploads.json +trans.es = public/language/es/uploads.json +trans.et = public/language/et/uploads.json +trans.fa_IR = public/language/fa-IR/uploads.json +trans.fi = public/language/fi/uploads.json +trans.fr = public/language/fr/uploads.json +trans.gl = public/language/gl/uploads.json +trans.he = public/language/he/uploads.json +trans.hr = public/language/hr/uploads.json trans.hu = public/language/hu/uploads.json trans.hy = public/language/hy/uploads.json +trans.id = public/language/id/uploads.json trans.it = public/language/it/uploads.json -trans.tr = public/language/tr/uploads.json -trans.uk = public/language/uk/uploads.json -trans.zh_CN = public/language/zh-CN/uploads.json -trans.en@pirate = public/language/en-x-pirate/uploads.json +trans.ja = public/language/ja/uploads.json +trans.ko = public/language/ko/uploads.json trans.lt = public/language/lt/uploads.json trans.lv = public/language/lv/uploads.json -trans.pt_BR = public/language/pt-BR/uploads.json -trans.sk = public/language/sk/uploads.json -trans.bn = public/language/bn/uploads.json -trans.hr = public/language/hr/uploads.json -trans.pl = public/language/pl/uploads.json -trans.zh_TW = public/language/zh-TW/uploads.json -trans.ru = public/language/ru/uploads.json -trans.sl = public/language/sl/uploads.json -trans.sq_AL = public/language/sq-AL/uploads.json -trans.et = public/language/et/uploads.json -trans.id = public/language/id/uploads.json trans.ms = public/language/ms/uploads.json trans.nb = public/language/nb/uploads.json -trans.pt_PT = public/language/pt-PT/uploads.json -trans.da = public/language/da/uploads.json -trans.es = public/language/es/uploads.json -trans.fr = public/language/fr/uploads.json -trans.th = public/language/th/uploads.json -trans.ar = public/language/ar/uploads.json -trans.en_US = public/language/en-US/uploads.json -trans.fi = public/language/fi/uploads.json -trans.gl = public/language/gl/uploads.json -trans.rw = public/language/rw/uploads.json -trans.ro = public/language/ro/uploads.json -trans.sr = public/language/sr/uploads.json -trans.vi = public/language/vi/uploads.json -trans.bg = public/language/bg/uploads.json -trans.de = public/language/de/uploads.json -trans.fa_IR = public/language/fa-IR/uploads.json -trans.ja = public/language/ja/uploads.json trans.nl = public/language/nl/uploads.json -trans.he = public/language/he/uploads.json -trans.ko = public/language/ko/uploads.json +trans.nn_NO = public/language/nn-NO/uploads.json +trans.pl = public/language/pl/uploads.json +trans.pt_BR = public/language/pt-BR/uploads.json +trans.pt_PT = public/language/pt-PT/uploads.json +trans.ro = public/language/ro/uploads.json +trans.ru = public/language/ru/uploads.json +trans.rw = public/language/rw/uploads.json trans.sc = public/language/sc/uploads.json +trans.sk = public/language/sk/uploads.json +trans.sl = public/language/sl/uploads.json +trans.sq_AL = public/language/sq-AL/uploads.json +trans.sr = public/language/sr/uploads.json +trans.sv = public/language/sv/uploads.json +trans.th = public/language/th/uploads.json +trans.tr = public/language/tr/uploads.json +trans.uk = public/language/uk/uploads.json +trans.ur = public/language/ur/uploads.json +trans.vi = public/language/vi/uploads.json +trans.zh_CN = public/language/zh-CN/uploads.json +trans.zh_TW = public/language/zh-TW/uploads.json [o:nodebb:p:nodebb:r:user] file_filter = public/language//user.json source_file = public/language/en-GB/user.json source_lang = en_GB type = KEYVALUEJSON -trans.ms = public/language/ms/user.json -trans.sr = public/language/sr/user.json -trans.lt = public/language/lt/user.json -trans.da = public/language/da/user.json -trans.it = public/language/it/user.json -trans.ru = public/language/ru/user.json -trans.sk = public/language/sk/user.json trans.ar = public/language/ar/user.json -trans.fr = public/language/fr/user.json -trans.he = public/language/he/user.json -trans.id = public/language/id/user.json -trans.es = public/language/es/user.json -trans.cs = public/language/cs/user.json -trans.et = public/language/et/user.json -trans.pt_BR = public/language/pt-BR/user.json -trans.zh_CN = public/language/zh-CN/user.json -trans.zh_TW = public/language/zh-TW/user.json +trans.az = public/language/az/user.json +trans.bg = public/language/bg/user.json trans.bn = public/language/bn/user.json +trans.cs = public/language/cs/user.json +trans.da = public/language/da/user.json trans.de = public/language/de/user.json trans.el = public/language/el/user.json -trans.en@pirate = public/language/en-x-pirate/user.json trans.en_US = public/language/en-US/user.json +trans.en@pirate = public/language/en-x-pirate/user.json +trans.es = public/language/es/user.json +trans.et = public/language/et/user.json trans.fa_IR = public/language/fa-IR/user.json +trans.fi = public/language/fi/user.json +trans.fr = public/language/fr/user.json trans.gl = public/language/gl/user.json +trans.he = public/language/he/user.json +trans.hr = public/language/hr/user.json +trans.hu = public/language/hu/user.json +trans.hy = public/language/hy/user.json +trans.id = public/language/id/user.json +trans.it = public/language/it/user.json +trans.ja = public/language/ja/user.json +trans.ko = public/language/ko/user.json +trans.lt = public/language/lt/user.json +trans.lv = public/language/lv/user.json +trans.ms = public/language/ms/user.json +trans.nb = public/language/nb/user.json +trans.nl = public/language/nl/user.json +trans.nn_NO = public/language/nn-NO/user.json trans.pl = public/language/pl/user.json -trans.bg = public/language/bg/user.json +trans.pt_BR = public/language/pt-BR/user.json +trans.pt_PT = public/language/pt-PT/user.json +trans.ro = public/language/ro/user.json +trans.ru = public/language/ru/user.json +trans.rw = public/language/rw/user.json +trans.sc = public/language/sc/user.json +trans.sk = public/language/sk/user.json +trans.sl = public/language/sl/user.json +trans.sq_AL = public/language/sq-AL/user.json +trans.sr = public/language/sr/user.json trans.sv = public/language/sv/user.json trans.th = public/language/th/user.json trans.tr = public/language/tr/user.json trans.uk = public/language/uk/user.json +trans.ur = public/language/ur/user.json trans.vi = public/language/vi/user.json -trans.fi = public/language/fi/user.json -trans.ko = public/language/ko/user.json -trans.lv = public/language/lv/user.json -trans.pt_PT = public/language/pt-PT/user.json -trans.rw = public/language/rw/user.json -trans.sl = public/language/sl/user.json -trans.sq_AL = public/language/sq-AL/user.json -trans.hr = public/language/hr/user.json -trans.hy = public/language/hy/user.json -trans.ja = public/language/ja/user.json -trans.nb = public/language/nb/user.json -trans.nl = public/language/nl/user.json -trans.ro = public/language/ro/user.json -trans.sc = public/language/sc/user.json -trans.hu = public/language/hu/user.json +trans.zh_CN = public/language/zh-CN/user.json +trans.zh_TW = public/language/zh-TW/user.json [o:nodebb:p:nodebb:r:users] file_filter = public/language//users.json source_file = public/language/en-GB/users.json source_lang = en_GB type = KEYVALUEJSON -trans.zh_TW = public/language/zh-TW/users.json -trans.de = public/language/de/users.json -trans.en@pirate = public/language/en-x-pirate/users.json -trans.ru = public/language/ru/users.json -trans.sc = public/language/sc/users.json -trans.en_US = public/language/en-US/users.json -trans.bn = public/language/bn/users.json -trans.hy = public/language/hy/users.json -trans.ro = public/language/ro/users.json -trans.fi = public/language/fi/users.json -trans.it = public/language/it/users.json -trans.pl = public/language/pl/users.json -trans.sk = public/language/sk/users.json trans.ar = public/language/ar/users.json +trans.az = public/language/az/users.json trans.bg = public/language/bg/users.json -trans.el = public/language/el/users.json -trans.fa_IR = public/language/fa-IR/users.json -trans.sq_AL = public/language/sq-AL/users.json +trans.bn = public/language/bn/users.json trans.cs = public/language/cs/users.json -trans.he = public/language/he/users.json -trans.ja = public/language/ja/users.json -trans.ko = public/language/ko/users.json -trans.nb = public/language/nb/users.json -trans.pt_PT = public/language/pt-PT/users.json -trans.sr = public/language/sr/users.json -trans.zh_CN = public/language/zh-CN/users.json trans.da = public/language/da/users.json -trans.id = public/language/id/users.json -trans.lt = public/language/lt/users.json -trans.ms = public/language/ms/users.json -trans.nl = public/language/nl/users.json -trans.rw = public/language/rw/users.json -trans.sl = public/language/sl/users.json -trans.th = public/language/th/users.json +trans.de = public/language/de/users.json +trans.el = public/language/el/users.json +trans.en_US = public/language/en-US/users.json +trans.en@pirate = public/language/en-x-pirate/users.json trans.es = public/language/es/users.json +trans.et = public/language/et/users.json +trans.fa_IR = public/language/fa-IR/users.json +trans.fi = public/language/fi/users.json trans.fr = public/language/fr/users.json trans.gl = public/language/gl/users.json +trans.he = public/language/he/users.json trans.hr = public/language/hr/users.json -trans.uk = public/language/uk/users.json -trans.vi = public/language/vi/users.json -trans.sv = public/language/sv/users.json -trans.tr = public/language/tr/users.json -trans.et = public/language/et/users.json trans.hu = public/language/hu/users.json +trans.hy = public/language/hy/users.json +trans.id = public/language/id/users.json +trans.it = public/language/it/users.json +trans.ja = public/language/ja/users.json +trans.ko = public/language/ko/users.json +trans.lt = public/language/lt/users.json trans.lv = public/language/lv/users.json +trans.ms = public/language/ms/users.json +trans.nb = public/language/nb/users.json +trans.nl = public/language/nl/users.json +trans.nn_NO = public/language/nn-NO/users.json +trans.pl = public/language/pl/users.json trans.pt_BR = public/language/pt-BR/users.json +trans.pt_PT = public/language/pt-PT/users.json +trans.ro = public/language/ro/users.json +trans.ru = public/language/ru/users.json +trans.rw = public/language/rw/users.json +trans.sc = public/language/sc/users.json +trans.sk = public/language/sk/users.json +trans.sl = public/language/sl/users.json +trans.sq_AL = public/language/sq-AL/users.json +trans.sr = public/language/sr/users.json +trans.sv = public/language/sv/users.json +trans.th = public/language/th/users.json +trans.tr = public/language/tr/users.json +trans.uk = public/language/uk/users.json +trans.ur = public/language/ur/users.json +trans.vi = public/language/vi/users.json +trans.zh_CN = public/language/zh-CN/users.json +trans.zh_TW = public/language/zh-TW/users.json +[o:nodebb:p:nodebb:r:world] +file_filter = public/language//world.json +source_file = public/language/en-GB/world.json +source_lang = en_GB +type = KEYVALUEJSON +trans.ar = public/language/ar/world.json +trans.az = public/language/az/world.json +trans.bg = public/language/bg/world.json +trans.bn = public/language/bn/world.json +trans.cs = public/language/cs/world.json +trans.da = public/language/da/world.json +trans.de = public/language/de/world.json +trans.el = public/language/el/world.json +trans.en_US = public/language/en-US/world.json +trans.en@pirate = public/language/en-x-pirate/world.json +trans.es = public/language/es/world.json +trans.et = public/language/et/world.json +trans.fa_IR = public/language/fa-IR/world.json +trans.fi = public/language/fi/world.json +trans.fr = public/language/fr/world.json +trans.gl = public/language/gl/world.json +trans.he = public/language/he/world.json +trans.hr = public/language/hr/world.json +trans.hu = public/language/hu/world.json +trans.hy = public/language/hy/world.json +trans.id = public/language/id/world.json +trans.it = public/language/it/world.json +trans.ja = public/language/ja/world.json +trans.ko = public/language/ko/world.json +trans.lt = public/language/lt/world.json +trans.lv = public/language/lv/world.json +trans.ms = public/language/ms/world.json +trans.nb = public/language/nb/world.json +trans.nl = public/language/nl/world.json +trans.nn_NO = public/language/nn-NO/world.json +trans.pl = public/language/pl/world.json +trans.pt_BR = public/language/pt-BR/world.json +trans.pt_PT = public/language/pt-PT/world.json +trans.ro = public/language/ro/world.json +trans.ru = public/language/ru/world.json +trans.rw = public/language/rw/world.json +trans.sc = public/language/sc/world.json +trans.sk = public/language/sk/world.json +trans.sl = public/language/sl/world.json +trans.sq_AL = public/language/sq-AL/world.json +trans.sr = public/language/sr/world.json +trans.sv = public/language/sv/world.json +trans.th = public/language/th/world.json +trans.tr = public/language/tr/world.json +trans.uk = public/language/uk/world.json +trans.ur = public/language/ur/world.json +trans.vi = public/language/vi/world.json +trans.zh_CN = public/language/zh-CN/world.json +trans.zh_TW = public/language/zh-TW/world.json diff --git a/.tx/fix.js b/.tx/fix.js new file mode 100644 index 0000000000..fd7ecc46f5 --- /dev/null +++ b/.tx/fix.js @@ -0,0 +1,22 @@ +'use strict'; + +const { readFile, writeFile } = require('fs').promises; + +(async () => { + const contents = await readFile('./config', { encoding: 'utf-8' }); + const blocks = contents + .split('\n\n') + .map((block) => { + block = block.split('\n').sort((a, b) => { + if (!a.startsWith('trans') || !b.startsWith('trans')) { + return 0; + } + + return a.localeCompare(b); + }) + + return block.join('\n'); + }); + + await writeFile('./config', blocks.join('\n\n'), { encoding: 'utf-8' }); +})(); \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 84078cf370..8058f2350d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,4494 @@ -#### v3.5.1 (2023-11-14) +#### v4.10.1 (2026-03-25) ##### Chores -* up mentions (b1b3dcb6) +* incrementing version number - v4.10.0 (5b703104) +* update changelog for v4.10.0 (c480df9e) +* incrementing version number - v4.9.2 (e6846052) +* incrementing version number - v4.9.1 (72e44c86) +* incrementing version number - v4.9.0 (3fdd1bef) +* incrementing version number - v4.8.1 (713ae0c0) +* incrementing version number - v4.8.0 (3fac737a) +* incrementing version number - v4.7.2 (cd419d8a) +* incrementing version number - v4.7.1 (afb88805) +* incrementing version number - v4.7.0 (e82d40f8) +* incrementing version number - v4.6.3 (9fc5b0f3) +* incrementing version number - v4.6.2 (f98747db) +* incrementing version number - v4.6.1 (f47aa678) +* incrementing version number - v4.6.0 (ee395bc5) +* incrementing version number - v4.5.2 (ad2da639) +* incrementing version number - v4.5.1 (69f4b61f) +* incrementing version number - v4.5.0 (f05c5d06) +* incrementing version number - v4.4.6 (074043ad) +* incrementing version number - v4.4.5 (6f106923) +* incrementing version number - v4.4.4 (d323af44) +* incrementing version number - v4.4.3 (d354c2eb) +* incrementing version number - v4.4.2 (55c510ae) +* incrementing version number - v4.4.1 (5ae79b4e) +* incrementing version number - v4.4.0 (0a75eee3) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### New Features + +* add email share (43e7f0ab) + +##### Bug Fixes + +* #14123, aria-hidden fixes (72f48fd9) +* #14121, use normalizedPath when uploading (a10471fc) +* key name (52e42685) +* #14108, reset filter on notif dropdown open (ad1433e1) +* #14116, don't return ban reason if login credentials are incorrect (9bcef6b5) +* share url for ap posts, fallback to window.location.href if pid doesnt exist (361134f9) + +##### Refactors + +* work with different line-clamp values (9b885162) + +#### v4.10.0 (2026-03-19) + +##### Chores + +* **deps:** + * update dependency lint-staged to v16.4.0 (#14099) (bea46026) + * update commitlint monorepo to v20.5.0 (#14098) (06c3b88b) + * update dependency jsdom to v29 (#14100) (3825c755) + * update commitlint monorepo to v20.4.4 (#14088) (02f8ea2c) + * update dependency lint-staged to v16.3.3 (#14075) (ac45b719) + * update dependency @stylistic/eslint-plugin to v5.10.0 (#14065) (9e2c6b67) + * update docker/build-push-action action to v7 (#14066) (6d8c4493) + * update docker/metadata-action action to v6 (#14067) (73b5bce5) + * update docker/setup-buildx-action action to v4 (#14060) (d7de8cf6) + * update docker/login-action action to v4 (#14054) (8c15096f) + * update dependency lint-staged to v16.3.2 (#14048) (ddd6db0f) + * update commitlint monorepo to v20.4.3 (#14047) (07881cbf) + * update dependency lint-staged to v16.3.1 (#14029) (2e4ee9f1) + * update dependency globals to v17.4.0 (#14035) (32864460) + * update github artifact actions (#14027) (aec68c6b) + * update postgres docker tag to v18.3 (#14023) (b69dbc38) + * update dependency nyc to v18 (#14011) (dc1ce5e1) +* up develop (4a01d55f) +* up mentions (168b17e8) +* up composer (73b023b4) +* up harmony (ec4e87ff) +* incrementing version number - v4.9.2 (e6846052) +* update changelog for v4.9.2 (2c00b137) +* incrementing version number - v4.9.1 (72e44c86) +* incrementing version number - v4.9.0 (3fdd1bef) +* incrementing version number - v4.8.1 (713ae0c0) +* incrementing version number - v4.8.0 (3fac737a) +* incrementing version number - v4.7.2 (cd419d8a) +* incrementing version number - v4.7.1 (afb88805) +* incrementing version number - v4.7.0 (e82d40f8) +* incrementing version number - v4.6.3 (9fc5b0f3) +* incrementing version number - v4.6.2 (f98747db) +* incrementing version number - v4.6.1 (f47aa678) +* incrementing version number - v4.6.0 (ee395bc5) +* incrementing version number - v4.5.2 (ad2da639) +* incrementing version number - v4.5.1 (69f4b61f) +* incrementing version number - v4.5.0 (f05c5d06) +* incrementing version number - v4.4.6 (074043ad) +* incrementing version number - v4.4.5 (6f106923) +* incrementing version number - v4.4.4 (d323af44) +* incrementing version number - v4.4.3 (d354c2eb) +* incrementing version number - v4.4.2 (55c510ae) +* incrementing version number - v4.4.1 (5ae79b4e) +* incrementing version number - v4.4.0 (0a75eee3) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) +* **i18n:** + * fallback strings for new resources: nodebb.admin-settings-activitypub (aeb53043) + * fallback strings for new resources: nodebb.world (e9063a63) + * fallback strings for new resources: nodebb.world (61414fa4) + * fallback strings for new resources: nodebb.world (702f7c62) + * fallback strings for new resources: nodebb.admin-settings-general (e3ba38f2) + * fallback strings for new resources: nodebb.admin-manage-users (a46f0136) + * fallback strings for new resources: nodebb.admin-advanced-jobs (8e050353) + * fallback strings for new resources: nodebb.admin-menu (5a8a1661) + * fallback strings for new resources: nodebb.error (a17cd6c7) + * fallback strings for new resources: nodebb.world (4d44e913) + * fallback strings for new resources: nodebb.admin-dashboard (49a21a1f) + * fallback strings for new resources: nodebb.admin-dashboard (858d84ff) + +##### Documentation Changes + +* wrong type for worldDefaultCid (895997b2) + +##### New Features + +* add /world as a potential home page route (58d3aa77) +* add category selector to /world quick composer (2f5021e5) +* ability to show only local posts in /world (44e65b8d) +* #14094, notification drawer UX improvements (6c01a5d8) +* allow 3 profile pics (#14092) (533ae69c) +* screenshot upload in ACP, send fallback brand icons in manifest, serve assets for richer PWA install UI (75a6dfff) +* category group actor outbox, #14083 (b317cdd3) +* new ap mocks, now publishing user outboxes (f848393e) +* show cronjobs in acp (#14068) (3c0a6540) +* redirect cold requests to remote resources to their canonical source, #14043 (2b12f8b5) +* include alt text in image/attachment property federating out (ca5aee10) + +##### Bug Fixes + +* improve idempotency of ap test (8ca34e74) +* call syncfollowcounts on unfollow as well (ebe709da) +* sync follow counts on local and remote follows, #14105 (44e78e47) +* cold load redirect should only affect guests (cc606677) +* schema fix for new api config value (7e2c7db3) +* close notif drawer on item click, fix crash in module (7c65471b) +* schema fix for new api config value (efaf8eb9) +* issue where initial quickcreate post wouldn't go to the right cid (35c03e5c) +* only show category selector on quickreply on /world (27b0fbe6) +* delete cid::privilegeMask on category.purge (902533db) +* bump themes (3aa8d5ba) +* removing topic tools/checkbox from /world for guests, reword guest CTA in /world (53286625) +* add back 'after' query param handling in /world that was removed accidentally (67a93da5) +* restrict contextmenu preventDefault to the checkbox only (2eb0964d) +* long-press support for topicSelect, #14045 (d1e1a008) +* debug log (58da9036) +* restore guest access to /world, default to latest(all) (1aa5ca88) +* bump harmony (10859455) +* restored popular calculation behaviour that was broken by e2131d1d2e1c6f14cb8867ac7e22840da3f4c63f, removed followingOnly arg passing for popular (1af83564) +* imagesLoaded integration for handleBack in world.js (38a1da46) +* merged chat notifications if all the messages are from the same user (26bb60ef) +* type (59dd22ca) +* type (40fecd01) +* merged chat notifications if all the messages are from the same user (6147a4d0) +* screenshot fallback (09c54127) +* buildRecipients to handle if local uids are passed in followers (a8f081c0) +* update Like/Dislike to have addressees in activity (c8e349ca) +* accidental hardcoded cid (464bc275) +* skip AP cache on context processing methods (a3ee7447) +* skip AP cache on context processing methods (10e4d579) +* cache key (9eea12ec) +* cache key (74fa77dd) +* missing orderedItems on category outbox index retrieval (8496e1ef) +* #14084, fix tags not getting properly removed from topics (0a94cecb) +* group badge on group details page (52e8ede8) +* return digest header only if it is set to something (aka not null) (1ad9ce5f) +* missing page parseInt (9978af59) +* dont add self username when clicking reply (9fcaad38) +* notifs (ed3a3672) +* also use tx.compile in chat notif merge (6d22e33a) +* publish id with user outbox, fixes #13478 (c08a45a5) +* merge with txArgs (e1d0e2a0) +* merged notification translations (34b68109) +* derped handleBack in world.js (ac483152) +* syntax error on undefined value (6b3b3e7e) +* filter out image attachments from remote data if they are already embedded in content (40b8544f) +* update thumbs loading logic to always include post attachments as part of thumbs (prior: was controlled by thumbsOnly flag orshowPostUploadsAsThumbnail setting) (c2d190e1) +* #14072, world to call thumbs with thumbsOnly filter (f1976168) +* promises in groups.leave (f826e629) +* #14071, duplicate items loaded via IS on /world (d29f1fbd) +* #14043, cold-load redirect should only affect guests (5a7316b1) +* hacking handleBack module to work with world page (971c8603) +* bump web-push (27e12a28) +* patch translateKey to wrap arguments in first string isolate (FSI) and Pop Directional Isolate (PDI) characters (59f19ba4) +* add missing db call (4d1d1c86) +* #14061, world.js show more buttons on infinite scroll (0aead782) +* update clamp-fade to use mask-image, add background to btn-link on Brite skin (9bc1b400) +* #14046, sneak in a mention to the community in mocked replies (b8ef027c) +* world page 'see more' bugs (cc733631) +* #13239, unescape custom user field values (9e69b9ad) +* restore `preview` as it is now supported by BridyFed (8a371d23) +* missing done (9604a0cd) +* bump harmony, #14042 (b02cdaa9) +* #14042, adopt plugin-feed's show-more/less logic/scss (43f2951a) +* update minimum title length default to zero to allow title-less topics via composer (6bfe3cd0) +* parent cid (f567d970) +* skip parsing of duplicate emoji tags (363cad29) +* **deps:** + * update dependency cronstrue to v3.14.0 (#14107) (f51e1b2a) + * update dependency nodemailer to v8.0.3 (#14104) (fa7c1a52) + * update dependency esbuild to v0.27.4 (#14090) (c26bfddf) + * update dependency lru-cache to v11.2.7 (#14096) (3765fb37) + * update dependency tough-cookie to v6.0.1 (#14097) (d5f4a370) + * update dependency nodebb-theme-peace to v2.2.57 (#14076) (cd08a5e4) + * update dependency nodemailer to v8.0.2 (#14077) (add3c651) + * update dependency satori to v0.25.0 (#14037) (817c38b9) + * update dependency postcss to v8.5.8 (#14051) (942619db) + * update dependency pg to v8.20.0 (#14058) (9cc2c2f9) + * update dependency pg-cursor to v2.19.0 (#14059) (045a7073) + * update dependency terser-webpack-plugin to v5.3.17 (#14052) (4410d884) + * update dependency multer to v2.1.1 (#14050) (de22b7a9) + * update dependency webpack to v5.105.4 (#14053) (3dc3b2e2) + * update dependency fs-extra to v11.3.4 (#14049) (cfb6145e) + * update dependency satori to v0.19.3 (#14036) (250911b7) + * update dependency nodebb-plugin-emoji to v6.0.6 (#14034) (7434103c) + * update dependency sitemap to v9.0.1 (#14028) (f97484c2) + * update dependency webpack to v5.105.3 (#14022) (38787a2d) + * update dependency multer to v2.1.0 (#14024) (9b65e316) + * update dependency pg-cursor to v2.18.0 (#14026) (54810cfd) + * update dependency pg to v8.19.0 (#14025) (badb57f2) + * update dependency autoprefixer to v10.4.27 (#14021) (054b4aa6) + +##### Other Changes + +* remove unused (19bb37ca) +* jobs.json (e1b6e617) +* remove unused (d6d3116e) +* remove unused (b50a10df) + +##### Performance Improvements + +* switch to set, remove parseFloat in redis (09de6fb9) +* move out nconf.get and isClientScript regex (4d55ee0a) +* move out nconf.get and isClientScript regex (f2bca332) +* make a single round trip for set(s)Remove (bcbb7bc4) +* cache groups:createtime (380d9895) + +##### Refactors + +* /world sorting logic to always use topics/sorted logic (e2131d1d) +* move to data (36bf3f16) +* get rid of cleanupUids use missing set (6569ea51) +* remove async.series, use batch.processSortedSet (894248e6) +* get rid of helper function (1cc77343) +* switch to cursor (1c7daf0d) +* use set (d9344140) +* pass in cid to rename/remove (fe4a22fb) +* remove admin.themes.getInstalled (92d72f67) + +##### Tests + +* add missing selectedCategory to world.yaml (779a372f) +* exclude uploadScreenshot from routeMap parsing test (ff1e1b92) +* make tests happy (08bed89b) +* fix test maybe (25f6088f) +* add one more topic to tag test (e01cb104) +* cleaner user.delete test (215d6440) +* set minimumtitlelength for test (7429b5d4) +* added test to ensure that Likes do not get processed when privilege is rescinded (8cba65cd) +* break apart inbox handling tests to its own file in test/activitypub (06e0bd6a) +* add debug test to see if failing test is due to race condition (e3119c76) +* fix spec (6dd9f734) + +#### v4.9.2 (2026-03-11) + +##### Chores + +* up deps (c1e1e4fd) +* up deps (bbdf8263) +* up harmony (c179a959) +* up themes (4173793b) +* up themes (a8bb0034) +* up themes (829d8230) +* up themes (4f8bb728) +* up themes (58336941) +* up widgets (95fcb392) +* up peace (9b22d144) +* incrementing version number - v4.9.1 (72e44c86) +* update changelog for v4.9.1 (dcc46707) +* incrementing version number - v4.9.0 (3fdd1bef) +* incrementing version number - v4.8.1 (713ae0c0) +* incrementing version number - v4.8.0 (3fac737a) +* incrementing version number - v4.7.2 (cd419d8a) +* incrementing version number - v4.7.1 (afb88805) +* incrementing version number - v4.7.0 (e82d40f8) +* incrementing version number - v4.6.3 (9fc5b0f3) +* incrementing version number - v4.6.2 (f98747db) +* incrementing version number - v4.6.1 (f47aa678) +* incrementing version number - v4.6.0 (ee395bc5) +* incrementing version number - v4.5.2 (ad2da639) +* incrementing version number - v4.5.1 (69f4b61f) +* incrementing version number - v4.5.0 (f05c5d06) +* incrementing version number - v4.4.6 (074043ad) +* incrementing version number - v4.4.5 (6f106923) +* incrementing version number - v4.4.4 (d323af44) +* incrementing version number - v4.4.3 (d354c2eb) +* incrementing version number - v4.4.2 (55c510ae) +* incrementing version number - v4.4.1 (5ae79b4e) +* incrementing version number - v4.4.0 (0a75eee3) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### New Features + +* add partial query help in acp manage users (330106e8) +* add mastodon share, closes #14069 (02b06492) +* clicking on timeago permalink of a nested reply (4bb281ae) + +##### Bug Fixes + +* mask-image to use line-heights instead of hardcoded 60% (2e21d214) +* closes #14074, only return url & name (92fcdd09) +* closes #14073, fix teasers from child categories (a391d01d) +* promises in groups.leave (8ec1cccc) +* hide unread anchor properly when close to bottom (457f6cf3) +* if quoting self, dont add @, but keep the username (304f89c0) +* unread count changes from 99+ to 123 (b9b63bf5) +* fix bottom sheet max-height so it doesn't push the top out of viewport (009be468) +* #14062 recipients is normal set (0be40810) +* add missing db call (d35c7455) +* closes #14062 (1fc3edf7) +* ghostscrollbar colors on dark skins (d6f5420b) +* #13239, unescape custom user field values (2f5fccdb) +* text-break on outgoing link (4f07b345) +* logic in checkRequired (2428602f) +* closes #14041, show specific error message (b2681646) +* dont crash if payload isnt Error (c98ef396) +* closes #14039, only keep chat input in view on the chats page (44434b0d) +* thumbs, send type for resize (30893a1a) +* #14033, fix gif profile images (06bf2abf) +* **deps:** + * update dependency multer to v2.1.1 (#14050) (8f960ff4) + * update dependency nodebb-plugin-emoji to v6.0.6 (#14034) (811344b8) + +##### Performance Improvements + +* make a single round trip for set(s)Remove (f6f51f83) +* cache groups:createtime (c4e9e1cb) + +##### Refactors + +* get rid of pop (4af03139) +* switch to cursor (4aea3a80) +* update upgrade script to scan for missing tid::recipients (75f52cad) +* move resolve flags and activitypub.out.remove.context (88b91c20) +* use includes (0c43e2da) + +##### Tests + +* fix spec (bdb91e82) +* fix btn tests (c8308718) + +#### v4.9.1 (2026-03-01) + +##### Chores + +* up harmony (643991ab) +* incrementing version number - v4.9.0 (3fdd1bef) +* update changelog for v4.9.0 (a39fa9fc) +* incrementing version number - v4.8.1 (713ae0c0) +* incrementing version number - v4.8.0 (3fac737a) +* incrementing version number - v4.7.2 (cd419d8a) +* incrementing version number - v4.7.1 (afb88805) +* incrementing version number - v4.7.0 (e82d40f8) +* incrementing version number - v4.6.3 (9fc5b0f3) +* incrementing version number - v4.6.2 (f98747db) +* incrementing version number - v4.6.1 (f47aa678) +* incrementing version number - v4.6.0 (ee395bc5) +* incrementing version number - v4.5.2 (ad2da639) +* incrementing version number - v4.5.1 (69f4b61f) +* incrementing version number - v4.5.0 (f05c5d06) +* incrementing version number - v4.4.6 (074043ad) +* incrementing version number - v4.4.5 (6f106923) +* incrementing version number - v4.4.4 (d323af44) +* incrementing version number - v4.4.3 (d354c2eb) +* incrementing version number - v4.4.2 (55c510ae) +* incrementing version number - v4.4.1 (5ae79b4e) +* incrementing version number - v4.4.0 (0a75eee3) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### New Features + +* allow callers to parse topic teasers (92c0bd8f) + +##### Bug Fixes + +* #14032, fix regression in room creation (2d49da78) +* parent cid (04477f07) +* ordering nested categories (a1b77fa0) +* text-nowrap on timestamps (117ae6aa) +* fullscreen acp graphs (f1fa8f12) +* skip parsing of duplicate emoji tags (6f129167) + +##### Other Changes + +* remove unused (08e94e35) + +##### Refactors + +* more cid parseInt changes (1b518f0e) +* show plus signs (c85e464b) + +##### Tests + +* fix spec (12122637) + +#### v4.9.0 (2026-02-27) + +##### Chores + +* up peace (cf0f2923) +* up peace (0b3dd38b) +* up peace (e4b15e05) +* up peace (64a3c822) +* up tdbsearch (50f5541e) +* up harmony (44f663b1) +* up harmony (fd2c9927) +* up harmony (066470b1) +* up harmony (bfa8d5aa) +* up harmony (df3de36c) +* up harmony (c1581a12) +* up mentions (537d3676) +* up harmony (41ef71fa) +* up themes (38680c3e) +* up harmony (6da00614) +* up persona (033f9198) +* up themes (84ec8ef9) +* up harmony (f818dd96) +* up themes (bac67399) +* up harmony (dd84a303) +* up composer (41bc49f7) +* up themes, add hide to alert (824a9b77) +* update harmony (b061d078) +* up composer (d0cc1c95) +* white space (3dfd9a43) +* up themes (97917103) +* up composer (1543650a) +* up themes (47217803) +* up composer (8423da04) +* up themes (a84464cf) +* up themes (bafd5db0) +* up mentions (bc1fd892) +* up mentions (0fd8200a) +* up mentions (9cd87fca) +* up mentions/composer (06f4f700) +* up link-preview (4aac6562) +* forcibly resetting all translations for custom-reason.json (c2695d89) +* up harmony (d6b7f27c) +* new fallbacks (1d17352f) +* up harmony (72510734) +* up harmony (2a5ab6dd) +* up harmony (7d4a440a) +* up markdown (86c62708) +* up composer (3de603f6) +* up deps (b3807656) +* up deps (a241c624) +* up composer (f06557b7) +* harmony (118ceb72) +* up harmony (f2795753) +* up harmony (5c3f2651) +* up composer & harmony (931ae67d) +* up harmony (e6737941) +* up harmony (8d6b6f6a) +* incrementing version number - v4.8.1 (713ae0c0) +* update changelog for v4.8.1 (f53aab43) +* incrementing version number - v4.8.0 (3fac737a) +* incrementing version number - v4.7.2 (cd419d8a) +* incrementing version number - v4.7.1 (afb88805) +* incrementing version number - v4.7.0 (e82d40f8) +* incrementing version number - v4.6.3 (9fc5b0f3) +* incrementing version number - v4.6.2 (f98747db) +* incrementing version number - v4.6.1 (f47aa678) +* incrementing version number - v4.6.0 (ee395bc5) +* incrementing version number - v4.5.2 (ad2da639) +* incrementing version number - v4.5.1 (69f4b61f) +* incrementing version number - v4.5.0 (f05c5d06) +* incrementing version number - v4.4.6 (074043ad) +* incrementing version number - v4.4.5 (6f106923) +* incrementing version number - v4.4.4 (d323af44) +* incrementing version number - v4.4.3 (d354c2eb) +* incrementing version number - v4.4.2 (55c510ae) +* incrementing version number - v4.4.1 (5ae79b4e) +* incrementing version number - v4.4.0 (0a75eee3) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) +* **i18n:** + * fallback strings for new resources: nodebb.admin-manage-categories (a797090f) + * fallback strings for new resources: nodebb.notifications, nodebb.admin-menu, nodebb.admin-settings-activitypub (bde5e0b4) + * fallback strings for new resources: nodebb.admin-menu, nodebb.admin-settings-activitypub (b43fadd0) + * fallback strings for new resources: nodebb.admin-menu (7b71252e) + * fallback strings for new resources: nodebb.admin-dashboard (3f5dafd0) + * fallback strings for new resources: nodebb.admin-settings-uploads (aa4f4808) + * fallback strings for new resources: nodebb.notifications (c84a86e4) + * fallback strings for new resources: nodebb.notifications, nodebb.user (41e7c144) + * fallback strings for new resources: nodebb.admin-manage-users (c3315063) + * fallback strings for new resources: nodebb.notifications (9524359d) + * fallback strings for new resources: nodebb.topic (a4369b93) + * fallback strings for new resources: nodebb.error, nodebb.user (0b9efa85) + * fallback strings for new resources: nodebb.admin-manage-privileges (7f6fcd05) + * fallback strings for new resources: nodebb.topic (781a900c) + * fallback strings for new resources: nodebb.admin-advanced-cache (64dad9db) + * fallback strings for new resources: nodebb.admin-advanced-cache (f0fb661c) + * fallback strings for new resources: nodebb.admin-settings-chat, nodebb.admin-settings-notifications (756e2434) + * fallback strings for new resources: nodebb.groups (d133f910) + * fallback strings for new resources: nodebb.groups (4bccc311) + * fallback strings for new resources: nodebb.admin-settings-web-crawler (e4455b1c) + * fallback strings for new resources: nodebb.world (b527cb5a) + * fallback strings for new resources: nodebb.admin-manage-users, nodebb.notifications (b04d2dbc) + * fallback strings for new resources: nodebb.admin-manage-users (2c0a60c4) + * fallback strings for new resources: nodebb.category, nodebb.world (5bf6b335) + * fallback strings for new resources: nodebb.notifications (2a8b6d44) + * fallback strings for new resources: nodebb.notifications (304a2ab1) + * fallback strings for new resources: nodebb.notifications (3c6804d4) + * fallback strings for new resources: nodebb.modules, nodebb.notifications (317bcd89) + * fallback strings for new resources: nodebb.admin-development-info (54743724) + * fallback strings for new resources: nodebb.admin-settings-uploads (f8d6c4e8) + * fallback strings for new resources: nodebb.topic (77eef491) + * fallback strings for new resources: nodebb.themes-harmony (cc2772ba) + * fallback strings for new resources: nodebb.admin-settings-email (c26698d6) + * fallback strings for new resources: nodebb.error (aaa9570e) + * fallback strings for new resources: nodebb.topic (dce82aae) +* **deps:** + * update redis docker tag to v8.6.1 (#14009) (898c3f1d) + * update commitlint monorepo to v20.4.2 (#14005) (1ae5041f) + * update dependency @stylistic/eslint-plugin to v5.9.0 (#14006) (efae106e) + * update dependency jsdom to v28.1.0 (#13992) (ec8e547c) + * update postgres docker tag to v18.2 (#13987) (25f866ca) + * update redis docker tag to v8.6.0 (#13976) (bb5e7118) + * update dependency @stylistic/eslint-plugin to v5.8.0 (#13965) (c61326df) + * update dependency jsdom to v28 (#13947) (b61fa426) + * update commitlint monorepo to v20.4.1 (#13945) (a9042602) + * update commitlint monorepo to v20.4.0 (#13938) (531b8374) + * update dependency smtp-server to v3.18.1 (#13936) (d8595d69) + * update dependency @stylistic/eslint-plugin to v5.7.1 (#13920) (b036034a) + * update dependency sass-embedded to v1.97.3 (#13921) (75a04aed) + +##### Documentation Changes + +* added new ACP routes (82b7f429) +* add missing privileges prop to world schema (4ef9d5fa) +* add bookmarks to postobject in /world (07f9eda9) +* add bookmarks to postobject (9a15b571) +* chat teasers are different (91323dce) +* add teaser to postobject schema (0178e4fb) +* OpenAPI schema for rules re-ordering route (072dd1ae) + +##### New Features + +* support the magic break string '[...]' in content, such that if found, outbound federation will use all content up to (and including) that string in its summary (cd357aaf) +* add a '[...]' to the end of the generated summary when federating out articles (fep-b2b8) (bf0f5228) +* prune topics remote cids, closes #13461 (20eb02f1) +* change notif controls to toggles (523e3b49) +* add invitedBy to user info page, closes #13972, closes #13997 (1dae3d22) +* quick create on world page (5df2b8b7) +* allow configuring unreadCutoff per user, closes #6811 (8c6ce198) +* introduce new topics:crosspost privilege (5c35dc86) +* add guest-cta.tpl and lang strings (9da67474) +* track all caches created in acp (9ac507e5) +* closes #5867, dont email if user already read notification (a55651d1) +* allow re-ordering of auto-categorization rules (fd43368a) +* add group tx key (45ff9f0d) +* eslint10 (#13967) (62d88555) +* closes #13968, add sitemap cache duration (fe35ad4f) +* add data-field values from tpl into search dict (abcfc1a5) +* closes https://github.com/NodeBB/NodeBB/pull/11970 (007efc21) +* closes #13961, rename ban-reasons to custom reasons (0eaf2bee) +* ban/mute reasons (#13960) (d086ed2c) +* show bodyLong in notifications, closes #4767 (30541a96) +* allow converting pasted images, closes #10352 (472a8fc1) +* add language key for untitled topic draft (0125ab55) +* add missing lang key for light/dark (870c6310) +* closes #13009, add dedicated test smtp button (c8488012) +* closes #13203, make users room owners on private chats (61662f19) +* topic crossposts generate topic events, #13908 (0c79eaa5) +* remote account banning, #13904 (560ad81f) +* opportunistic backfill, #13895 (33c2de9c) + +##### Bug Fixes + +* #14003, set ACAO header on webfinger responses (415602d8) +* restore coveralls script, update gh action to ignore failures (3fab2074) +* change && to ; (95ea376a) +* add `--no-fail` flag to coveralls invocation (c6ddef67) +* dont show /register page after req.session.forceLogin is set (0ef27187) +* escape fullname in chatWithMessage (64a072c9) +* send guests to login page if they access uncategorized topics without local posts (b4f8e20b) +* remove allowed check from notes.assert as it is already done downstream in topics.(post|reply), update privilege check to inherit world privs if passed-in cid is remote cid (64724629) +* NaN on ap post delete (53b208b7) +* guard against crash when malformed URL present in deliverees (6a0663cd) +* remove unused ACP route (f7d87ecb) +* remove unused ACP controller, add instance count to federation > safety (a35b7d73) +* allow break string and summary limits to be defined and applied (29111ba7) +* make tables responsive on relays/rules pages (0071216c) +* don't show magic break string in regularly parsed posts, tests for ap mocks lib (b460506e) +* remove `preview` in mocked note for now, due to lack of support (fep-b2b8) (31773694) +* topic purge (e484899d) +* upgrade script, dont remove while processing zset (7a23e291) +* dont store ap tids in topics:tid (e8ef2e5c) +* closes #14010 (003e6d07) +* hook name (d6cf5fba) +* add missing timestamp (68eba728) +* gate /world behind ensureLoggedIn middleware (bcfdbf7c) +* #14007, deny access for guests to topics in cid -1, unless a post from a local user exists (de4f016f) +* closes #7221 restrict cropperjs box to profileImageDimension form ACP (f2bbf369) +* category search shoudn't return results that match in the cid part (75477202) +* favicon url (1a35131a) +* allow passing a selected category markup (309d3003) +* overflowing images on /world (438b4f62) +* missing cb in world IS handler (ab62a8e4) +* closes #14002, add max-height (9c5ffe36) +* fallbacks and latest translations for nodebb.user (053ce073) +* keep chat input in view after adding new messages (2f88f776) +* #14001, regression from adjusted acceptable types list (80f61022) +* don't publish name on generated titles (9fbdc792) +* closes #13999, delay cache creation (42362ccf) +* when registering through an invite, prepopulate the email field on /register/complete with the email (2015777f) +* bump persona (a68311de) +* bump harmony for world page changes (e76f8a60) +* only call syncUserInboxes on post create if local uid creates post in cid -1 (45d2e628) +* schema... not sure why I need this all of a sudden (3e2070b2) +* minor cleanup of quick-reply args; opts.body (a9c2457f) +* render new post in feed when posting via quick create (eb0aa6d8) +* call syncUserInboxes asyncronously (5da35bda) +* update quickreply.init so that it can be passed an options parameter, generate proper draft id for world page (94df9738) +* lint, unused class (4bf0f61e) +* increase categories sent to 1k closes #12841 (3c08b730) +* #13993, encodeURICompoent pid since it can be AP url (b607a80a) +* wrong wrapping of route (bb9033af) +* dont call getInbox for /recent (1ca9841c) +* #13990, don't blindly set `user` field on notification objects (8c8782fd) +* unbans not triggering if user data is loaded wit 'banned' property only (0b7df274) +* #13894, buildCategoryLabel helper checks fa-nbb-none (4b9b3648) +* missing gap (e16c5677) +* gate crossposting behind new topics:crosspost privilege (fe8fd9d6) +* #13983, show only local categories in ACP privilege selector (c4411423) +* add example value for failing schema test (292e70f7) +* lint (1598004e) +* bad relative path (7eb49136) +* regression from refactor of uploadedpicture refactor (b95cd882) +* organize rules and relays logic to separate methods (78d7130c) +* #13969, bump mentions (4a38d67c) +* lint (9ebd8f4f) +* #13962, infinite scroll and pagination not working on world (9f1369a2) +* bump themes, l10n world sort label (76fe4bdd) +* rename translations as well (433d318f) +* cant store URL in nconf (6cb6cf7d) +* update tx config (1e109c2e) +* derpy api page (aef0bd97) +* guard against incomplete objects when building context/chain (13422bc8) +* closes #13953, show uid pic in post queue notification (a8a1089e) +* remote post notifs missing bodyLong (18c04d34) +* double-ajaxify on socket connect (381334f4) +* dont update teaser for public chats (149d649a) +* acp graph labels, dont use indices (17bfd73e) +* closes #8642, stricter username check (94885109) +* if there is no hr create one (f249699d) +* closes #13240, move the updatedTeaser to the top of the recent chat list (0a9c5d30) +* regression with updateHistory (b7ea2767) +* #13939, dont append / if url is empty (2dc49c82) +* acp category selector when category has image (ef75f1ba) +* pagination always getting set to default (eab4025b) +* folder name (f05f8b63) +* proper attachment generation on replies, fixed replies getting thumb attachment when it wasn't part of it (69c5f941) +* closes #13734, set process.env.NODE_ENV early using argv (252d1d09) +* update buildRecipents to add option to skip target creation step, update ap actors for note to not bother building targets (ad27347f) +* notes announce cache, use cache when retrieving tid posters (eb27b964) +* optimizations (e697d600) +* cache detection logic in context parseItem executing earlier than needed causing false positives (f9affbad) +* closes #12458, on socket.io reconnect (13bf64c9) +* restrict topic backfill to logged-in users when browsing to a category (0262bb83) +* replace attachment generation logic in notes.public (428b6e73) +* #13900, assertion re-index (6383bb58) +* simplicity tweak (39582cbd) +* export sendMessage as _sendMessage for use in ap jobs lib (4bab9fb4) +* #13892, logical flaw (8b7d350e) +* **i18n:** + * global fallbacks again (955579fa) + * 'global' resource fallbacks (c47acec9) +* **deps:** + * update dependency sanitize-html to v2.17.1 (#14004) (096e9a3e) + * update dependency redis to v5.11.0 (#13996) (63199ea7) + * update dependency rimraf to v6.1.3 (#13994) (b40f5c7b) + * update dependency qs to v6.15.0 (#13995) (5f82e56b) + * update dependency sortablejs to v1.15.7 (#13985) (71d4a6fc) + * update dependency nodebb-plugin-composer-default to v10.3.16 (#13991) (ff292f7d) + * update dependency webpack to v5.105.2 (#13986) (1020092b) + * update dependency qs to v6.14.2 (#13978) (6e4e02a6) + * update dependency lru-cache to v11.2.6 (#13970) (2cddaf86) + * update dependency satori to v0.19.2 (#13974) (c4420da3) + * update dependency webpack to v5.105.1 (#13975) (48929aae) + * update dependency esbuild to v0.27.3 (#13957) (15ba76e3) + * update dependency semver to v7.7.4 (#13958) (fe66c812) + * update dependency nodemailer to v8 (#13951) (ab60c39c) + * update dependency mongodb to v7.1.0 (#13950) (85e99d6b) + * update dependency webpack to v5.105.0 (#13949) (e7101330) + * update dependency commander to v14.0.3 (#13946) (765c1291) + * update dependency pg-cursor to v2.17.0 (#13942) (1f285293) + * update dependency pg to v8.18.0 (#13941) (4eb8854c) + * update dependency autoprefixer to v10.4.24 (#13940) (b837c253) + * update dependency nodebb-theme-harmony to v2.1.37 (#13935) (9ec96aec) + * update dependency nodemailer to v7.0.13 (#13934) (290198b1) + * update dependency express-useragent to v2.1.0 (#13929) (82d6f35b) + * update dependency lru-cache to v11.2.5 (#13932) (b4c5657a) + * update dependency ace-builds to v1.43.6 (#13922) (d911a736) + * update dependency sass to v1.97.3 (#13925) (87c4d416) + * update dependency express-session to v1.19.0 (#13926) (e0e7c5ea) + * update dependency nodebb-theme-harmony to v2.1.36 (#13923) (abfb10e3) + * update dependency pg-cursor to v2.16.2 (#13915) (14e20a32) + * update dependency lodash to v4.17.23 (#13916) (0b822c96) + * update dependency pg to v8.17.2 (#13914) (3f50d52a) + * update dependency pg to v8.17.1 (#13901) (271239d4) + * update dependency pg to v8.17.1 (#13893) (cc8b2db5) + * update dependency pg-cursor to v2.16.1 (#13894) (62498a3c) + * update dependency nodebb-theme-harmony to v2.1.35 (#13896) (5b5955d6) + * update dependency satori to v0.19.1 (#13898) (dd6fda81) + +##### Other Changes + +* fix lint errors (fc474238) +* remove unused (68acc059) +* remove useless assignment (652629df) +* #13982, dont use btn-group on dropdowns (803473ca) +* //github.com/NodeBB/NodeBB/issues/13982 (26af029a) +* remove unused regex (1747cf81) +* filter at the end of user.search (dcbbc187) +* invalid-username doesnt have params (fb460725) + +##### Performance Improvements + +* don't call getUids on every topic load (8a60d9c2) + +##### Refactors + +* add topic-await-review notif text (bac9f1f7) +* ActivityPub ACP page to its own top-level section with sub-pages (f0d2be35) +* allow passing an array to topics.purge and topics.purgePost… (#14018) (e4c945f6) +* dont store ap pids in posts:pid (de1f04d9) +* closes #7155, (bb7be8c5) +* shorter check (a70a62cc) +* isHookValid (63c9a6e0) +* add icons to selected/all (970a4204) +* users table (e3d7abe0) +* pass options to thumbs.load (0424728f) +* slugify isn't heavy anymore (fb95f8a3) +* don't create giant array, process in batches of 500 (ed8cbd6e) +* use opendir instead of loading all files (ce9bd0bb) +* teaser object schema to its own file (1869b807) +* privileges.global.can works with array of privileges (fd6984d2) +* shorter hook (a8a85bcb) +* updateTags to modern js (3756a8fe) +* shorter check (b0f2fead) +* cache page to table (7336c58c) +* emoji replacement code into helper function, remove use of regex on untrusted user input (9608cce6) +* add createFieldChecker (#13973) (c65af199) +* run searches in parallel (9a198c38) +* shorter (3f67a000) +* remove unused url (7f4d537d) +* get rid of url.parse in core (157959df) +* use translator.compile which escapes % and , (a2f4c185) +* shorter (b3dc7f43) +* remove log (ff1376b3) +* get rid of cache for tid posters, was never cleared (065abbf2) +* dont use module, explodes on latest webpack (a4e3fe10) +* use lru directly (c8cd34bf) +* format (070d77fd) +* shorter tpl (e2fc349d) +* get rid of global.env, use process.env.NODE_ENV (07d1f224) +* make custom user field icons fixed width in the acp (2ded6813) +* use local cache for plugin isActive check (7ac5446a) +* Actors.getLocalFollowers to Actors.getFollowers, can pass in both local and remote ids (fac31859) +* move username check to createOrQueue (37675689) +* checkUsername function https://github.com/NodeBB/NodeBB/issues/10864 (7e27da61) +* shorter params (05e76edd) +* move ap jobs to its own file (c595edb4) + +##### Tests + +* remove assert (872d7c74) +* remove old test (59f35e6f) +* update tests to allow title-less topics (b1c097f8) +* show topic data on test fail (6e6900ba) +* fix redis, from was string in map, but int in notif object (a8c68ddc) +* fix spec (0e2a42d5) +* fix missing priv in tests (5c73d338) +* add test to check picture!=uploadedpicture (0c2ab232) +* fix hasOwn (d52b1359) +* group members test (ffc4c0dd) +* add more info to failiing response (87fdca2a) +* fix spec, remove log (05dd46c3) +* favicon test (ca237e67) +* dont return cover:url if its not requested (e4d852b4) +* fix username test (db07456b) +* fix test that explodes on new URL (694b545c) +* another test fix (94873c33) +* fix file name (05d4d857) +* fix spec (d601847a) +* fix tests (0d19294a) +* fix tests, update mentions composer (d6c69465) +* fix typo in spec (43be594a) +* fix spec (d1a39554) +* add missing spec for admin page (30014f41) +* remove unused (018e1c5f) +* fix spec (bc1593b2) + +#### v4.8.1 (2026-01-28) + +##### Chores + +* fix progress (a82f18cc) +* fix typo in upgrade script name (619819de) +* up composer (871089da) +* up composer (a061672d) +* up themes (d2e1629f) +* up link-preview (f90c8649) +* up dbsearch (469a8ef9) +* up harmony (c1a92c47) +* up harmony (317be96f) +* incrementing version number - v4.8.0 (3fac737a) +* update changelog for v4.8.0 (a9fbcf2a) +* incrementing version number - v4.7.2 (cd419d8a) +* incrementing version number - v4.7.1 (afb88805) +* incrementing version number - v4.7.0 (e82d40f8) +* incrementing version number - v4.6.3 (9fc5b0f3) +* incrementing version number - v4.6.2 (f98747db) +* incrementing version number - v4.6.1 (f47aa678) +* incrementing version number - v4.6.0 (ee395bc5) +* incrementing version number - v4.5.2 (ad2da639) +* incrementing version number - v4.5.1 (69f4b61f) +* incrementing version number - v4.5.0 (f05c5d06) +* incrementing version number - v4.4.6 (074043ad) +* incrementing version number - v4.4.5 (6f106923) +* incrementing version number - v4.4.4 (d323af44) +* incrementing version number - v4.4.3 (d354c2eb) +* incrementing version number - v4.4.2 (55c510ae) +* incrementing version number - v4.4.1 (5ae79b4e) +* incrementing version number - v4.4.0 (0a75eee3) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### Bug Fixes + +* upgrade script to handle topics that were already pruned (03b7374c) +* closes #13899 (f98de3e9) +* #10682, fix all the other rss routes as well (385a4d03) +* protocol (da5605e0) +* closes #12986 (310e90c7) +* #13919 (b2c6fbed) +* use min (090b9f55) +* #13918, make arrayLimit configurable increase default to 50 (d25e7726) +* closes #13258, dont mark digest as delivered if it fails (f29c9f06) +* wrap fields in quotes in user csv export (1b08aef2) +* closes #13199 normalize accept header (ec4e7ef1) +* closes #10682, strip unicode control chars (d867d8ad) +* require (d3f653e6) +* remove bidi chars from displayname (07d2c946) +* closes #11499 (50c26dd5) +* remove lowercase bidi controls as well (512b1e72) +* #13909, show 413 error properly (39af8383) +* closes #11606, detect musl and use sass instead (442f9f1d) +* make translator.unescape stricter like escape (e505e369) +* closes #13887, make translator.escape stricter (b2fa7304) +* closes #13897, display group create errors properly (7d36c757) +* consider crossposts when building teasers, fixes #13891 (c494d002) +* #13892, logical flaw (98c0a3fe) + +##### Refactors + +* get rid of map, move parallel calls into promise.all (e231c010) +* dont include scheduled topics in unread (7bc9fe3b) +* remove chats.initialized, all events handlers are removed before being added (fffe039f) +* move chat page events to a new file (ab39e7f8) +* add guards against bad data & infi loops (6b3ec636) +* tags were moved into topic hash a while ago (2ba8907a) +* already checked inside user.isPasswordValid (635715ef) +* get rid of intersect and use a faster method to load recently created tids (1cbc128a) +* shorter params (bb6ed76e) +* use async/await for group search (fe4a4476) +* put alltime in query string for term (639ea42d) +* crossposts.get to support multiple tids (57a73c48) + +##### Tests + +* add missing awaits, change error message (918bb044) +* dont return cross posts (be5b36bc) + +#### v4.8.0 (2026-01-14) + +##### Chores + +* **deps:** + * update dependency @stylistic/eslint-plugin to v5.7.0 (#13879) (be0d43cf) + * update commitlint monorepo to v20.3.1 (#13876) (c88ce519) + * update dependency sass-embedded to v1.97.2 (#13870) (27d511ff) + * update commitlint monorepo to v20.3.0 (#13865) (447cfd03) + * update dependency smtp-server to v3.18.0 (#13858) (f35c77dd) + * update dependency jsdom to v27.4.0 (#13860) (37c052f4) + * update dependency sass-embedded to v1.97.1 (#13850) (d28866ab) + * update dependency sass-embedded to v1.97.0 (#13837) (168b6e63) + * update dependency smtp-server to v3.17.1 (#13829) (ad895efb) + * update dependency @eslint/js to v9.39.2 (#13830) (22fe83f0) + * update github artifact actions (#13831) (b1696218) + * update actions/cache action to v5 (#13828) (0fcc8543) + * update dependency smtp-server to v3.17.0 (#13824) (3adcbe0f) + * update dependency sass-embedded to v1.96.0 (#13821) (b992511b) + * update dependency sass-embedded to v1.95.1 (#13817) (a2f2c8c7) + * update dependency jsdom to v27.3.0 (#13814) (a35c326a) + * update commitlint monorepo to v20.2.0 (#13810) (e50edd52) + * update dependency lint-staged to v16.2.7 (#13785) (76b6b3b2) + * update actions/checkout action to v6 (#13802) (7f21a171) +* bump profile max upload size default (bed6ed3c) +* up themes (b323b5d8) +* up markdown (eb77c9bf) +* up mentions (648d9c78) +* incrementing version number - v4.7.2 (cd419d8a) +* update changelog for v4.7.2 (2f0526b8) +* incrementing version number - v4.7.1 (afb88805) +* allow direct testing in test/categories.js (29687722) +* incrementing version number - v4.7.0 (e82d40f8) +* incrementing version number - v4.6.3 (9fc5b0f3) +* incrementing version number - v4.6.2 (f98747db) +* incrementing version number - v4.6.1 (f47aa678) +* incrementing version number - v4.6.0 (ee395bc5) +* incrementing version number - v4.5.2 (ad2da639) +* incrementing version number - v4.5.1 (69f4b61f) +* incrementing version number - v4.5.0 (f05c5d06) +* incrementing version number - v4.4.6 (074043ad) +* incrementing version number - v4.4.5 (6f106923) +* incrementing version number - v4.4.4 (d323af44) +* incrementing version number - v4.4.3 (d354c2eb) +* incrementing version number - v4.4.2 (55c510ae) +* incrementing version number - v4.4.1 (5ae79b4e) +* incrementing version number - v4.4.0 (0a75eee3) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### Documentation Changes + +* update openapi schema for missing routes related to crossposting (d81b644d) + +##### New Features + +* user crossposts federate as:Announce (273bc68c) +* add missing files, minor changes to crossposts list modal (38fd1798) +* introduce new front-end UI button for cross-posting, hide move on topics in remote cids (0041cfe2) +* disallow moving topics to and from remote categories, + basic tests for topic moving (ea1e4c7d) +* API v3 calls to crosspost and uncrosspost a topic to and from a category (74172ecc) +* refactor out.announce.topic to allow user announces, refactor tests to accommodate (874ffd7b) +* stop extraneous vote and tids_read data from being saved for remote users (097d0802) +* support remote Dislike activity, federate out a Dislike on downvote, bwahahah (528cd258) +* expand postingRestrictedToMods mask testing, handle actor update for that prop (6a561050) +* setAddBulk (#13805) (7d5402fe) +* save privilege masking set when asserting group (f0a7a442) +* patch low-level privilege query calls to accept privilege masks at the cid level (4020e1be) +* federate out topic removal activities when topic is deleted and purged from a local category (3ab61615) + +##### Bug Fixes + +* i18n fallbacks (a73ab8ee) +* #13889, custom emoji from Piefed (0c75934a) +* #13888, decode html entities for AP category name and description (6eea4df5) +* derp (bcc204fa) +* bump themes (a4c470ff) +* guard against negative uids crossposting (2f96eed4) +* bump themes (943b53b0) +* calling sortedSetRemove to remove multiple values, instead of baking it into sortedSetRemoveBulk (82507c0f) +* unused values (b9b33f9f) +* typo, client-side handling of crossposts as pertains to uncategorized topics (7465762d) +* client-side handling of category selector when cross-posting so only local cids are sent to backend (ea417b06) +* update category sync logic to utilise crossposts instead (e5ee52e5) +* remove old remote user to remote category migration logic + tests (28249efb) +* update auto-categorization rules to also handle already-categorized topics via crosspost (148663c5) +* topic crosspost delete and purge handling (f6cc556d) +* bug where privileges users could not uncrosspost others' crossposts. Tests (0a0a7da9) +* allow non-mods to crosspost, move crosspost button out of topic tools, in-modal state updates (6daaad81) +* removed ajaxify refresh on crosspost commit, dynamically update post stats in template, logic fix (b981082d) +* nodeinfo route to publish federation.enabled in metadata section (14aa2bee) +* bump link-preview again (74e47820) +* bump link-preview (486e77c7) +* remove commented out require (ffc3d279) +* bump link-preview (cc1649e0) +* auto-enable post queue as default, adjust tests to compensate (9390ccb6) +* remove bidiControls from notification.bodyShort (b0679cad) +* author of boosted content was not targeted in the activity (b05199d8) +* closes #13872, use translator.compile for notification text (5a031d01) +* #13715, dont reduce hardcap if usersPerPage is < 50 (cb31e70e) +* dont use sass-embedded on freebsd, #13867 (b7de0cc7) +* wrong increment value (20918b52) +* increment progress on upgrade script (8abe0dfa) +* add join-lemmy context for outgoing category group actors context prop (f1d50c35) +* use setsAdd (d8e55d58) +* missing await (4a6dcf1a) +* admin privilege overrides only apply to local categories (7b194c69) +* have notes.assert call out.announce.topic only if uid is set (so, if note assertion is called via search; manual pull) (3b7bcba6) +* deep clone activity prop before execution; feps.announce (977a67f4) +* minor comment fix (411baa21) +* publish `postingRestrictedToMods` property in group actor (c365c1dc) +* **deps:** + * update dependency spdx-license-list to v6.11.0 (#13890) (9b1c32b1) + * update dependency diff to v8.0.3 (#13882) (974ab1f8) + * update dependency nodebb-theme-persona to v14.1.23 (#13878) (47074b3c) + * update dependency nodebb-theme-harmony to v2.1.31 (#13877) (125c8e58) + * update dependency body-parser to v2.2.2 (#13873) (e717f00e) + * update dependency sass to v1.97.2 (#13871) (5100cc4f) + * update dependency nodebb-plugin-markdown to v13.2.3 (#13869) (a8c18f8a) + * update dependency nodebb-theme-harmony to v2.1.30 (#13863) (49379e2e) + * update dependency nodebb-theme-persona to v14.1.22 (#13864) (e4435e52) + * update dependency @isaacs/ttlcache to v2.1.4 (#13861) (89abdca1) + * update socket.io packages to v4.8.3 (#13857) (6807f860) + * update dependency sass to v1.97.1 (#13856) (7325b995) + * update dependency nodebb-theme-persona to v14.1.20 (#13855) (b8f68fb4) + * update dependency nodebb-theme-harmony to v2.1.28 (#13854) (f98fd6dc) + * update dependency fs-extra to v11.3.3 (#13851) (160ce17f) + * update dependency nodemailer to v7.0.12 (#13853) (f6ef041c) + * update dependency nodebb-plugin-2factor to v7.6.1 (#13852) (abcb2382) + * update dependency validator to v13.15.26 (#13846) (2a10f904) + * update dependency nodebb-theme-persona to v14.1.19 (#13849) (b933d1a2) + * update dependency nodebb-theme-harmony to v2.1.27 (#13848) (61d8cba9) + * update dependency webpack to v5.104.1 (#13847) (bb5a90a3) + * update dependency esbuild to v0.27.2 (#13842) (5844e393) + * update dependency nodebb-plugin-mentions to v4.8.4 (#13845) (2ffa4383) + * update dependency webpack to v5.104.0 (#13839) (f16eec30) + * update dependency sass to v1.97.0 (#13838) (ab8dbb41) + * update dependency fetch-cookie to v3.2.0 (#13836) (0ef5cbbb) + * update dependency autoprefixer to v10.4.23 (#13835) (7c2e8330) + * update dependency terser-webpack-plugin to v5.3.16 (#13827) (da7c9b32) + * update dependency sass to v1.96.0 (#13822) (d4f53a62) + * update dependency winston to v3.19.0 (#13812) (81c232f1) + * update dependency cron to v4.4.0 (#13818) (f077c4ca) + * update dependency sass to v1.95.1 (#13816) (adedb7b6) + * update dependency sass to v1.95.0 (#13815) (eaa6e71a) + * update dependency terser-webpack-plugin to v5.3.15 (#13811) (10d2e929) + * update dependency esbuild to v0.27.1 (#13806) (6b1dcb4b) + * update dependency jsonwebtoken to v9.0.3 (#13807) (7b734cfd) + * update dependency ace-builds to v1.43.5 (#13797) (93057306) + * update dependency lru-cache to v11.2.4 (#13798) (731933a6) + * update dependency express to v4.22.1 (#13800) (38321220) + * update dependency ipaddr.js to v2.3.0 (#13801) (ad5cd27b) + * update dependency nodemailer to v7.0.11 (#13799) (ecec1f45) + * update dependency cron to v4.3.5 (#13796) (5ba6bea0) + * update dependency body-parser to v2.2.1 (#13795) (624ef616) + * update dependency @isaacs/ttlcache to v2.1.3 (#13791) (5f55ca85) + * update dependency sass to v1.94.2 (#13786) (1cb8b381) + * update dependency redis to v5.10.0 (#13787) (1bcfe3f0) + +##### Other Changes + +* fix... tests (d20906b5) +* still broken... more debug logs (a82e1f44) +* log mock results (8236b594) + +##### Refactors + +* check if tid is truthy (0e1ccfc9) +* crossposts.get to return limited category data (name, icon, etc.), fixed up crosspost modal to hide uncategorized and all categories options (349b0875) +* move crosspost methods into their own file in src/topics (1be88ca0) +* silence if-function deprecation on prod (403230cc) +* clear quick reply as soon as submitting (a331f8da) + +##### Tests + +* intify uid/cid if they are numbers (when getting crossposts) (47e37ed5) +* stop using partialDeepStrictEqual for now (0677689a) +* ensure auto-cat and cat sync logic properly integrates with crossposts (add163a4) +* crossposting behaviour and logic tests (947676ef) +* new test file for crossposts (3560b6a3) +* additional logic to allow multi-typing in schema type (4f1fa2d1) +* lowercase tags (81cac015) +* fix test to check for Secure in cookie string if test runner domain is https (5954015e) +* more out.announce tests (cfdbbb04) +* basic tests for activitypub.out (67912dc9) +* update activitypub._sent to save targets as well, updated tests to accommodate format change (41368ef8) +* test runs should not actually federate activities out (483ab083) +* check if tests pass without await (5414cf47) +* add back logs for failing test (301b5386) +* add a test for set db.exists (#13809) (69562704) +* fix failing test by adjusting the tests (c5292442) +* privilege masking tests (934e6be9) +* log label (22d3c523) +* log activities (e39c9149) +* on test fail show activities (841bd825) +* new mongodb deps (#13793) (287b2569) + +#### v4.7.2 (2025-12-24) + +##### Chores + +* up body-parser (59dd1ca6) +* up mentions (d505301f) +* incrementing version number - v4.7.1 (afb88805) +* update changelog for v4.7.1 (8668cfb3) +* incrementing version number - v4.7.0 (e82d40f8) +* incrementing version number - v4.6.3 (9fc5b0f3) +* incrementing version number - v4.6.2 (f98747db) +* incrementing version number - v4.6.1 (f47aa678) +* incrementing version number - v4.6.0 (ee395bc5) +* incrementing version number - v4.5.2 (ad2da639) +* incrementing version number - v4.5.1 (69f4b61f) +* incrementing version number - v4.5.0 (f05c5d06) +* incrementing version number - v4.4.6 (074043ad) +* incrementing version number - v4.4.5 (6f106923) +* incrementing version number - v4.4.4 (d323af44) +* incrementing version number - v4.4.3 (d354c2eb) +* incrementing version number - v4.4.2 (55c510ae) +* incrementing version number - v4.4.1 (5ae79b4e) +* incrementing version number - v4.4.0 (0a75eee3) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### Bug Fixes + +* update data-isowner when changing is ownership (1f9f2dff) +* bump 2factor (d0313712) + +##### Tests + +* change redis connection (#13844) (550411fb) +* add await to check tests (1305faa8) +* add back logs for failing test (9f8d5070) + +#### v4.7.1 (2025-12-17) + +##### Chores + +* up widget-essentials (9d666550) +* remove log (2142b680) +* up harmony (59f649b8) +* incrementing version number - v4.7.0 (e82d40f8) +* update changelog for v4.7.0 (1c0a43dc) +* incrementing version number - v4.6.3 (9fc5b0f3) +* incrementing version number - v4.6.2 (f98747db) +* incrementing version number - v4.6.1 (f47aa678) +* incrementing version number - v4.6.0 (ee395bc5) +* incrementing version number - v4.5.2 (ad2da639) +* incrementing version number - v4.5.1 (69f4b61f) +* incrementing version number - v4.5.0 (f05c5d06) +* incrementing version number - v4.4.6 (074043ad) +* incrementing version number - v4.4.5 (6f106923) +* incrementing version number - v4.4.4 (d323af44) +* incrementing version number - v4.4.3 (d354c2eb) +* incrementing version number - v4.4.2 (55c510ae) +* incrementing version number - v4.4.1 (5ae79b4e) +* incrementing version number - v4.4.0 (0a75eee3) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### Continuous Integration + +* drop ARM v7 from docker builds (#13808) (254370c5) + +##### New Features + +* stop extraneous vote and tids_read data from being saved for remote users (9f729964) +* add hreflang to buildLinkTag (ba85474d) +* #13790, allow ssl setup in psql (5bd1f7b7) + +##### Bug Fixes + +* wrong increment value (b1fc5bfd) +* increment progress on upgrade script (9f94a721) +* disallow inline viewing of unsafe files (#13833) (5ae8d553) +* moving topic to cid=-1 will remove it from list (90a15134) +* show errors when saving settings (f49f540b) +* closes #13666, update category label (193aaf55) +* respect user pagination settings in infinite scroll (#13765) (#13788) (ebf2a2c5) +* remove hardcoded name for sentinel, #13794 (53e22acf) + +##### Other Changes + +* fix missing comma (9fb41c69) + +##### Reverts + +* spec change (b19281b0) + +##### Tests + +* fix tests (11b01dfc) + +#### v4.7.0 (2025-11-26) + +##### Chores + +* incrementing version number - v4.6.3 (9fc5b0f3) +* update changelog for v4.6.3 (3fd193e3) +* incrementing version number - v4.6.2 (f98747db) +* up dbsearch (dfe53d29) +* up harmony, closes #13753 (4e33c1df) +* up express-useragent (b5ea2089) +* up ttlcache to 2.x (a0a10c8b) +* up themes (52c56bc5) +* incrementing version number - v4.6.1 (f47aa678) +* incrementing version number - v4.6.0 (ee395bc5) +* incrementing version number - v4.5.2 (ad2da639) +* incrementing version number - v4.5.1 (69f4b61f) +* incrementing version number - v4.5.0 (f05c5d06) +* incrementing version number - v4.4.6 (074043ad) +* incrementing version number - v4.4.5 (6f106923) +* incrementing version number - v4.4.4 (d323af44) +* incrementing version number - v4.4.3 (d354c2eb) +* incrementing version number - v4.4.2 (55c510ae) +* incrementing version number - v4.4.1 (5ae79b4e) +* incrementing version number - v4.4.0 (0a75eee3) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) +* **deps:** + * update dependency @stylistic/eslint-plugin to v5.6.1 (#13778) (894f1988) + * update redis docker tag to v8.4.0 (#13782) (e24d8c17) + * update postgres docker tag to v18.1 (#13771) (3ea029bd) + * update dependency jsdom to v27.2.0 (#13770) (899414f4) + * update dependency smtp-server to v3.16.1 (#13755) (bc64d27f) + * update dependency mocha to v11.7.5 (#13754) (e1bf80dc) + * update redis docker tag to v8.2.3 (#13750) (4c5f7f60) + * update github artifact actions (#13730) (13c23fdd) + * update dependency @eslint/js to v9.39.1 (#13747) (4e7867a9) + * update dependency sass-embedded to v1.93.3 (#13745) (cb96701b) + * update dependency jsdom to v27.1.0 (#13743) (4ce4e773) + * update mongo docker tag to v8.2 (#13738) (97e5aa1d) + * update dependency smtp-server to v3.16.0 (#13737) (07d169d2) + * update dependency lint-staged to v16.2.6 (#13725) (e3c55f76) + * update dependency lint-staged to v16.2.5 (#13721) (83a172c9) + * update dependency @stylistic/eslint-plugin to v5.5.0 (#13717) (93d46c84) + * update dependency jsdom to v27.0.1 (#13718) (9d2b83f5) + * update dependency @eslint/js to v9.38.0 (#13716) (7fd9e894) + * update actions/setup-node action to v6 (#13708) (febe0ae0) + * update dependency smtp-server to v3.15.0 (#13702) (238600a0) + * update dependency lint-staged to v16.2.4 (#13699) (f608c7c7) + * update postgres docker tag to v18 (#13679) (923ddbc1) + * update dependency @eslint/js to v9.37.0 (#13693) (d73892ae) + * update redis docker tag to v8.2.2 (#13692) (4640a63e) + * update dependency mocha to v11.7.4 (#13685) (c7696667) + * update dependency @commitlint/cli to v20.1.0 (#13686) (eb06bda8) +* **i18n:** + * fallback strings for new resources: nodebb.admin-manage-categories (49567c72) + * fallback strings for new resources: nodebb.admin-settings-uploads (e7498e8f) + +##### New Features + +* federate out undo(announce) when moving topics (832477f8) +* native image appending for remote private notes (822f4edc) +* add isNumber to client-side helpers (172aabcb) +* handle Move(Context) activity (8ca52c7e) +* update Remove(Context) to use target instead of origin, federate out Move(Context) on topic move between local cids (d02e188a) +* context removal logic (aka moving topics to uncategorized, and federating this to other NodeBBs) (34e95e6d) +* add new setting to control posts uploads being shown as thumbs (97e59fbe) +* handle Delete(Context) as a move to cid -1 if the remote context still exists (f98a7216) +* handle incoming Announce(Delete), closes #13712 (4d5005b9) +* execute 1b12 rebroadcast logic on all tids even if not posted to a local cid (9583f0d4) +* auto-enable link-preview plugin on new installations (b153941c) +* bundle link-preview plugin (e7bdf6bc) +* federate topic deletion on topic deletion as well as purge (4d24309a) +* federate Delete on post delete as well as purge, topic deletion federates Announce(Delete(Object)) (93b6cb59) + +##### Bug Fixes + +* **deps:** + * bump mentions to fix #13637 (e3ac9ccf) + * update dependency rimraf to v6.1.2 (#13784) (5ab8f877) + * update dependency @isaacs/ttlcache to v2.1.2 (#13780) (cecc0fee) + * update dependency workerpool to v10.0.1 (#13781) (bfffb4b9) + * update dependency webpack to v5.103.0 (#13783) (5acfd184) + * update dependency sass to v1.94.1 (#13777) (b0c9bb1e) + * update dependency mongodb to v6.21.0 (#13772) (111ae163) + * update dependency sass to v1.94.0 (#13773) (c95bfcbf) + * update dependency validator to v13.15.23 (#13769) (93c69f9d) + * update dependency express-useragent to v2.0.2 (#13767) (e14d3ac1) + * update dependency autoprefixer to v10.4.22 (#13768) (9271e267) + * update dependency @isaacs/ttlcache to v2.1.1 (#13763) (f24bb090) + * update dependency esbuild to v0.27.0 (#13766) (63789ebb) + * update dependency cron to v4.3.4 (#13762) (6ad93cd3) + * update dependency sharp to v0.34.5 (#13758) (5be0a630) + * update dependency bcryptjs to v3.0.3 (#13751) (a34284df) + * update dependency sitemap to v9 (#13752) (1921ccaa) + * update dependency esbuild to v0.25.12 (#13748) (090eb088) + * update dependency rimraf to v6.1.0 (#13744) (a36d89fc) + * update dependency sass to v1.93.3 (#13746) (ba123073) + * update dependency sitemap to v8.0.2 (#13736) (b5c1e8e7) + * update mentions (5c3b1261) + * update dependency validator to v13.15.20 (#13733) (6f448ce2) + * bump mentions to 4.8.0 (964a5388) + * update dependency commander to v14.0.2 (#13731) (a49efe49) + * update dependency redis to v5.9.0 (#13727) (418717fd) + * update dependency nodemailer to v7.0.10 (#13726) (c1f6e52b) + * update dependency workerpool to v10 (#13723) (5a6c2097) + * update dependency sitemap to v8.0.1 (#13720) (1d9d7fc5) + * update dependency ace-builds to v1.43.4 (#13714) (27a0dc73) + * bump dbsearch (c25c6290) + * update dependency esbuild to v0.25.11 (#13710) (41b7a91d) + * update dependency chart.js to v4.5.1 (#13704) (bf37c7bd) + * update dependency nodebb-theme-persona to v14.1.15 (#13701) (fa18287d) + * update dependency nodebb-theme-harmony to v2.1.21 (#13700) (49a29325) + * update dependency nodemailer to v7.0.9 (#13695) (5d3709f0) + * update dependency semver to v7.7.3 (#13697) (a2892f60) + * update dependency webpack to v5.102.1 (#13698) (bb7b65ea) + * update dependency nodemailer to v7.0.7 (#13694) (5dc9f2c5) + * update dependency redis to v5.8.3 (#13691) (9b6e9b2a) + * update dependency winston to v3.18.3 (#13687) (19dc1025) +* null check on attachments property in assertPrivate (9d83a3d0) +* update announce and undo(announce) so that their IDs don't use timestamps (24e17683) +* incorrect topic event added when topic moved out of cid -1 (used to be a share by the user; since removed.) (2b733e4a) +* #13654, improper OrderedCollectionPage ID (aa7e078f) +* IS logic when body.height < window.height (bdb45248) +* update markdown and web-push to latest versions (c51b7b65) +* bump mentions to 4.8.2 (2ce691cb) +* rename activitypub.out.announce.category, federate out Delete on topic move to cid -1 (9bb8a955) +* bump harmony and persona for #13756 (c616e657) +* renderOverride to not clobber url if already set in template data (2066727f) +* bump themes for cross-post support, #13396 (9d3e8179) +* add replies in parallel during note assertion (4858abe1) +* logic error in context generation (748cc5ee) +* relax toPid assertion checks so that it only checks that it is a number or uri (30b1212a) +* update logic so that purging a post does not remove toPid fields from children, updated addParentPosts so that post existence is checked (f6219d00) +* update category mock to save full handle (524df6e5) +* logic error in out.remove.context (ab9154aa) +* cross-check remove(context) target prop against cid (194cedb4) +* update logic re: federating out topic moves (4f2f872b) +* bad var (22868d3f) +* call api.topics method on topic move during note assertion, have category announce new topic on note assertion (3df4970c) +* do not include image or icon props if they are falsy values (603068ae) +* rebroadcasting logic should only execute for local tids if the remote cid is not addressed already (1d529473) +* move Announce(Delete) out of topics.move and into topics API method (fadac616) +* do not include actor from reflected activity when rebroadcasting remote cid (3fa74d4c) +* broken category urls in to, cc (d4695f10) +* update getPrivateKey to send application actor key when cid 0 (a45f6f9c) +* update targets in 1b12 rebroadcast when cid is remote (58a9e1c4) +* update 1b12 rebroadcast logic to send as application actor if post is in remote cid (79d08853) +* regression caused by d3b3720915f5846e8f5a8e0bee9c17b3ff233902 (af5efbd7) +* crash in tests (6c210068) +* add attachments to retrieved post data onNewPost (07bed55e) + +##### Other Changes + +* //github.com/NodeBB/NodeBB/issues/13713 (2425f3b6) + +##### Refactors + +* deleteOrRestore internal method to federate out a Delete on delete, not just purge; better adheres to FEP 4f05 (e6911be3) +* get rid of post.exists check, if post doesnt exist content is falsy (17944037) +* move all methods in src/api/activitypub.js to src/activitypub.out.js (3ede64d8) +* user announces no longer occur on topic move. Instead, the new category announces. Only occurs when topic moved to local categories. (e09bb8b6) +* inbox announce(delete) handling to also handle context deletion, #13712 (2b2028e4) +* move post attachment handling directly into posts.create (d3b37209) + +##### Reverts + +* remove `federatedDescription` category field, closes #13757 (ed83bc5b) + +##### Tests + +* update test for toPid logic to reflect that toPid stays even if parent is purged (98a1101d) + +#### v4.6.3 (2025-11-20) + +##### Chores + +* incrementing version number - v4.6.2 (f98747db) +* update changelog for v4.6.2 (8da3819c) +* incrementing version number - v4.6.1 (f47aa678) +* incrementing version number - v4.6.0 (ee395bc5) +* incrementing version number - v4.5.2 (ad2da639) +* incrementing version number - v4.5.1 (69f4b61f) +* incrementing version number - v4.5.0 (f05c5d06) +* incrementing version number - v4.4.6 (074043ad) +* incrementing version number - v4.4.5 (6f106923) +* incrementing version number - v4.4.4 (d323af44) +* incrementing version number - v4.4.3 (d354c2eb) +* incrementing version number - v4.4.2 (55c510ae) +* incrementing version number - v4.4.1 (5ae79b4e) +* incrementing version number - v4.4.0 (0a75eee3) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### Bug Fixes + +* update validator dep. to get fix for CVE-2025-56200 (af477d0c) +* missing logic in mocks.notes.private that precluded the use of emoji (76a07d59) +* tiny fix for IS when page is empty (12dab849) + +#### v4.6.2 (2025-11-19) + +##### Chores + +* up emoji (5bc5bb3d) +* up peace, closes #13774 (f764b791) +* incrementing version number - v4.6.1 (f47aa678) +* update changelog for v4.6.1 (655c858b) +* incrementing version number - v4.6.0 (ee395bc5) +* incrementing version number - v4.5.2 (ad2da639) +* incrementing version number - v4.5.1 (69f4b61f) +* incrementing version number - v4.5.0 (f05c5d06) +* incrementing version number - v4.4.6 (074043ad) +* incrementing version number - v4.4.5 (6f106923) +* incrementing version number - v4.4.4 (d323af44) +* incrementing version number - v4.4.3 (d354c2eb) +* incrementing version number - v4.4.2 (55c510ae) +* incrementing version number - v4.4.1 (5ae79b4e) +* incrementing version number - v4.4.0 (0a75eee3) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### Bug Fixes + +* #13779, svg uploads (e3002411) +* #13776, if plugin is in install/package.json use latest version from there (abfb6d13) +* category labels showing up on infinite scroll on category page (dece0628) +* crash in resolveInboxes (9900171f) +* log out user if session cookie resolves to non-existent uid (5d9da603) +* make i18n test failure message easier to read (3a81f903) +* wrong auto-categorization if group actor is explicitly included in `audience` (be4d0e81) +* order of operations when updating category handle (5cfec5b1) +* closes #13729, fix filename encoding (9410f466) + +##### Other Changes + +* fix lint (008e1ae4) + +##### Refactors + +* remove unused share (aacd27ee) + +##### Tests + +* add test for #13729 (430a3e81) + +#### v4.6.1 (2025-10-17) + +##### Chores + +* up persona (b309a672) +* up harmony (79327e6c) +* incrementing version number - v4.6.0 (ee395bc5) +* update changelog for v4.6.0 (c0d9bb07) +* incrementing version number - v4.5.2 (ad2da639) +* incrementing version number - v4.5.1 (69f4b61f) +* incrementing version number - v4.5.0 (f05c5d06) +* incrementing version number - v4.4.6 (074043ad) +* incrementing version number - v4.4.5 (6f106923) +* incrementing version number - v4.4.4 (d323af44) +* incrementing version number - v4.4.3 (d354c2eb) +* incrementing version number - v4.4.2 (55c510ae) +* incrementing version number - v4.4.1 (5ae79b4e) +* incrementing version number - v4.4.0 (0a75eee3) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### Bug Fixes + +* do not include image or icon props if they are falsy values (ecf95d18) +* #13705, don't cover link if preview is opening up (499c50a4) +* logic error in image mime type checking (623cec9d) +* omg what. (ec399897) + +#### v4.6.0 (2025-10-01) + +##### Chores + +* remove unneeded secureRandom require (3fcaa678) +* incrementing version number - v4.5.2 (ad2da639) +* update changelog for v4.5.2 (9a596d67) +* fix grammatical error in language string (cf3964be) +* remove formatApiResponse logging (feda629f) +* up eslint (a5ea4b40) +* incrementing version number - v4.5.1 (69f4b61f) +* update default settings (5d653571) +* incrementing version number - v4.5.0 (f05c5d06) +* incrementing version number - v4.4.6 (074043ad) +* incrementing version number - v4.4.5 (6f106923) +* incrementing version number - v4.4.4 (d323af44) +* incrementing version number - v4.4.3 (d354c2eb) +* incrementing version number - v4.4.2 (55c510ae) +* incrementing version number - v4.4.1 (5ae79b4e) +* incrementing version number - v4.4.0 (0a75eee3) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) +* **deps:** + * update dependency lint-staged to v16.2.3 (#13681) (d7e93a5d) + * update actions/download-artifact action to v5 (#13646) (30ca0000) + * update dependency @eslint/js to v9.36.0 (#13670) (a4d8619b) + * update commitlint monorepo to v20 (#13678) (6dab3f2e) + * update dependency @stylistic/eslint-plugin to v5.4.0 (#13671) (3370c064) + * update dependency lint-staged to v16.2.1 (#13672) (13ce106b) + * update dependency sass-embedded to v1.93.2 (#13673) (df9d637c) + * update dependency jsdom to v27 (#13653) (3238248e) + * update dependency sass-embedded to v1.92.1 (#13638) (15b0b540) + * update dependency lint-staged to v16.1.6 (#13635) (7147a2e3) + * update actions/setup-node action to v5 (#13647) (4f5e770c) + * update dependency mocha to v11.7.2 (#13636) (ac90ef8c) +* **i18n:** + * fallback strings for new resources: nodebb.admin-manage-categories (6055b345) + * fallback strings for new resources: nodebb.admin-manage-categories (8730073a) + * fallback strings for new resources: nodebb.admin-manage-categories (8d4e4652) + * fallback strings for new resources: nodebb.admin-settings-activitypub (89390101) + +##### Documentation Changes + +* update openapi schema to refer to try.nodebb.org instead of example.org (56a93366) + +##### New Features + +* ability to nickname remote categories, closes #13677 (bd80b77a) +* allow activities to be addressed to as:Public or Public to be treated as public content (5f4790a4) +* allow user auto-categorization rule (1d6a9fe7) +* add minor pre-processing step to better handle header elements in incoming html (15f9fbaa) + +##### Bug Fixes + +* login handler to handle if non-confirmed email is entered (5ed19ef8) +* allow quote-inline class in mocks sanitizer so quote-post fallback elements can be detected and removed during title generation, fixes #13688 (675178ac) +* force outgoing page on direct access to `/ap` handler (9cee7999) +* update outgoing page to match 404 design (954e7bc8) +* don\'t begin processing local login if the passed-in username isn't even valid (c3df68f2) +* #13667, record to instances:lastSeen instead of domains:lastSeen (7184507b) +* #13676, bug where nested remote categories could not be removed (175dc209) +* regression 218f5ea from via, stricter check on whether the calling user is a remote uid (8c553b18) +* #13668, privilege checking on topic create for remote users; was not properly checking against fediverse pseudo-user (218f5eab) +* update logic as to whether a post is served as an article or not (d122bf4a) +* update activitypubFilterList logic so that it is also checked on resolveInbox and ActivityPub.get methods, updated instances.isAllowed to no longer return a promise (be9212b5) +* add missing unlock in nested try/catch (9184a7a4) +* wrap majority of note assertion logic in try..catch to handle exceptions so that the lock is always released (95fb084c) +* use newline_boundaries param for tokenizer during title and summary generation, attempt to serve HTML in summary generation (2ea624fc) +* deprecated call to api.topics.move (0f9015f0) +* **deps:** + * update dependency webpack to v5.102.0 (#13683) (17dba0b0) + * update dependency mongodb to v6.20.0 (#13665) (9b00ff1e) + * update dependency lru-cache to v11.2.2 (#13669) (00d80616) + * update dependency sass to v1.93.2 (#13674) (1b5804e1) + * update fontsource monorepo (#13663) (6e84e35f) + * update dependency esbuild to v0.25.10 (#13664) (9b48bbd5) + * update dependency sharp to v0.34.4 (#13662) (c8680f30) + * update dependency satori to v0.18.3 (#13660) (b2d91dc3) + * update dependency nodebb-theme-harmony to v2.1.20 (#13659) (b845aa48) + * update dependency fs-extra to v11.3.2 (#13658) (8324be2d) + * update dependency @fontsource/inter to v5.2.7 (#13655) (db892509) + * update dependency commander to v14.0.1 (#13652) (19f39198) + * update dependency bootswatch to v5.3.8 (#13651) (1e82af66) + * update dependency sass to v1.92.1 (#13645) (10344c98) + * update dependency workerpool to v9.3.4 (#13650) (6a1e9e8a) + * update dependency lru-cache to v11.2.1 (#13644) (6adfbb24) + +##### Other Changes + +* disallow checkHeader from returning a URL from a different origin than the passed-in URL (4776d012) +* 'nickname' and 'descriptionParsed' use in categories controller (051043b6) + +##### Performance Improvements + +* update old upgrade scripts to use bulkSet/Add (2b987d09) + +##### Refactors + +* notes.assert to add finally block, update assertPayload to update instances:lastSeen via method instead of direct db call (559155da) + +##### Reverts + +* post queue changes to fix tests (10350ea6) + +##### Tests + +* fix message (d6e7e168) +* show tids on test fail (8614d825) +* more fixes for note vs. article (3bba9029) +* short OPs create Notes again (15878087) +* ap timeouts (8d6a0f02) +* disable post queue when testing posting logic (9bfce68b) + +#### v4.5.2 (2025-09-29) + +##### Chores + +* remove obsolete deprecation (52fec493) +* up persona (405d2172) +* incrementing version number - v4.5.1 (69f4b61f) +* update changelog for v4.5.1 (a9fffd7c) +* incrementing version number - v4.5.0 (f05c5d06) +* incrementing version number - v4.4.6 (074043ad) +* incrementing version number - v4.4.5 (6f106923) +* incrementing version number - v4.4.4 (d323af44) +* incrementing version number - v4.4.3 (d354c2eb) +* incrementing version number - v4.4.2 (55c510ae) +* incrementing version number - v4.4.1 (5ae79b4e) +* incrementing version number - v4.4.0 (0a75eee3) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### New Features + +* add a term param to recent controller so it can be controller without req.query.term (9c18c6fe) +* add a new hook to override generateUrl in navigator.js (68a8db85) +* add topic templates per category, closes #13649 (0311b98e) + +##### Bug Fixes + +* skip header checking during note assertion if test runner is active (7abdfd86) +* update note assertion topic members check to simpler posts.exists check (d0c05826) +* re-jig handling of ap tag values so that only hashtags are considered (not Piefed community tags, etc.) (4d68e3fe) +* missing actor assertion on 1b12 announced upboat (f9edb13f) +* use parameterized query for key lookup (6cca55e3) +* add pre-processing step to title generation logic so sbd doesn't fall over so badly (f7c47429) +* switch to action (f7bbec7c) +* handle cases where incoming ap object tag can be a non-array (b66c30a2) +* local pids not always converted to absolute URLs on topic actor controller (f67942ca) +* #13657, fix remote category data inconsistency in `sendNotificationToPostOwner` (225bf85e) +* don't show votes on unread if rep system disabled (dfe19a98) +* if reputation is disabled hide votes on /recent (8a786c71) +* favicon path (e2dc592c) +* check brand:touchIcon for correct path (56fad0be) +* remove .auth call (f9ddbeba) +* port the try/catch for notes.assert from develop (f9688b36) +* perform Link header check on note assertion only when skipChecks is falsy (953c051c) +* make auto-categorization logic case-insensitive (527f27af) +* closes #13641, log test email sending errors server side (b3ffa007) +* pass object to.auth (290a9395) +* **deps:** bump 2factor to 7.6.0 (d1f5060f) + +##### Other Changes + +* remove unused (a6674f67) +* fix (a37521b0) + +##### Performance Improvements + +* update upgrade script to use bulk methods (0a2fa45d) +* update old upgrade scripts to use bulkSet/Add (32d0ee48) + +#### v4.5.1 (2025-09-04) + +##### Chores + +* up dbsearch (c07e81d2) +* incrementing version number - v4.5.0 (f05c5d06) +* update changelog for v4.5.0 (86d03b1e) +* incrementing version number - v4.4.6 (074043ad) +* incrementing version number - v4.4.5 (6f106923) +* incrementing version number - v4.4.4 (d323af44) +* incrementing version number - v4.4.3 (d354c2eb) +* incrementing version number - v4.4.2 (55c510ae) +* incrementing version number - v4.4.1 (5ae79b4e) +* incrementing version number - v4.4.0 (0a75eee3) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### New Features + +* use _variables.scss overrides from acp in custom skins and bootswatch skins as well (0c48e0e9) + +##### Bug Fixes + +* remove unused dependency (8d7e3537) +* remove test for 1b12 announce on topic move (as this no longer occurs) (9221d34f) +* use existing id if checkHeader returns false (e6996846) +* regression that caused Piefed (or potentially others) content to be dropped on receipt (86d9016f) +* remove faulty code that tried to announce a remote object but couldn't as the ID was not a number (7adfe39e) + +#### v4.5.0 (2025-09-03) + +##### Chores + +* **deps:** + * pin dependency @stylistic/eslint-plugin to 5.3.1 (#13634) (4ade6007) + * update dependency sass-embedded to v1.91.0 (#13614) (e504ee34) + * update dependency @eslint/js to v9.34.0 (#13612) (dfc558cd) + * update redis docker tag to v8.2.1 (#13603) (02228c04) + * update dependency lint-staged to v16.1.5 (#13585) (f4f7953a) + * update postgres docker tag to v17.6 (#13599) (62d15a0e) + * update dependency @eslint/js to v9.33.0 (#13589) (bfdf47b6) + * update actions/checkout action to v5 (#13590) (311bbefa) + * update dependency sass-embedded to v1.90.0 (#13581) (c8694333) + * update dependency lint-staged to v16.1.4 (#13575) (34ecdf20) + * update redis docker tag to v8.2.0 (#13577) (25bc9ba0) + * update dependency @eslint/js to v9.31.0 (#13545) (97a5d543) + * update redis docker tag to v8.0.3 (#13539) (1b80910e) + * update dependency @eslint/js to v9.30.1 (#13524) (6d7df13f) + * update dependency @eslint/js to v9.30.0 (#13519) (15ea1233) + * update dependency smtp-server to v3.14.0 (#13515) (a41d2c0b) + * update dependency mocha to v11.7.1 (#13509) (bbacd8f6) + * update dependency mocha to v11.7.0 (#13502) (0a0dd1c1) + * update dependency @eslint/js to v9.29.0 (#13491) (2046ca72) + * update dependency lint-staged to v16.1.2 (#13492) (d6ba7930) + * update dependency sass-embedded to v1.89.2 (#13482) (f5651787) + * update dependency mocha to v11.6.0 (#13479) (9b4082dc) + * update dependency smtp-server to v3.13.8 (#13464) (d239125f) + * update redis docker tag to v8.0.2 (#13465) (166aaa7a) + * update dependency @eslint/js to v9.28.0 (#13469) (b3170c9c) + * update dependency sass-embedded to v1.89.1 (#13463) (32f13162) + * update dependency lint-staged to v16.1.0 (#13449) (6efe3fdd) + * update dependency mocha to v11.5.0 (#13442) (c1846475) + * update dependency smtp-server to v3.13.7 (#13437) (136e8814) + * update dependency sass-embedded to v1.89.0 (#13425) (aa977282) + * update dependency mocha to v11.4.0 (#13435) (5d017710) + * update dependency mocha to v11.3.0 (#13426) (650eeac9) + * update dependency @eslint/js to v9.27.0 (#13429) (475b0704) +* **i18n:** + * fallback strings for new resources: nodebb.admin-settings-activitypub (cb00fb3b) + * fallback strings for new resources: nodebb.admin-manage-categories, nodebb.admin-settings-activitypub (40bda8fc) + * fallback strings for new resources: nodebb.social (eeabc990) + * fallback strings for new resources: nodebb.admin-dashboard (5d16fdc9) + * fallback strings for new resources: nodebb.admin-development-info (59c1ce85) + * fallback strings for new resources: nodebb.admin-development-info (5b54e926) + * fallback strings for new resources: nodebb.modules (f5aca114) + * fallback strings for new resources: nodebb.error (efb14ead) + * fallback strings for new resources: nodebb.error (e1eb76fe) +* enable dbsearch on new installs (567f453b) +* up peace (fdd0152e) +* up harmony (6d60f945) +* use fontsource-utils/scss to get rid of deprecation warning (44c0413c) +* up eslibt (e68deaac) +* up widget essentials (e7b47995) +* incrementing version number - v4.4.6 (074043ad) +* update changelog for v4.4.6 (3895a059) +* incrementing version number - v4.4.5 (6f106923) +* up eslint (637373e3) +* up dbsearch (dae81b76) +* up eslint-plugin (18d6e5e1) +* up eslint (c056bf56) +* remove logs (0315e369) +* incrementing version number - v4.4.4 (d323af44) +* incrementing version number - v4.4.3 (d354c2eb) +* up eslint (536ae9d6) +* incrementing version number - v4.4.2 (55c510ae) +* eslint config (0d595008) +* incrementing version number - v4.4.1 (5ae79b4e) +* incrementing version number - v4.4.0 (0a75eee3) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### Continuous Integration + +* use native arm runners for building docker images (#13627) (931b7345) + +##### Documentation Changes + +* add missing routes to openapi schema (0f44034e) +* openapi typo (560cc2eb) +* update openapi schema for relays and rules (a9a12a9f) +* openapi schema fixes for auto-categorization commits (c0248ca5) + +##### New Features + +* use sbd to more intelligently put together a sub-500 character summary based on existing sentences in post content (35641f37) +* add sbd dependency to improve title generation (and for summary generation, later) (82686322) +* send local posts out to established relays (aa26dfb3) +* relay handshake logic, handle Follow/Accept, send back Accept. (f4d1df7c) +* adding and removing relays from AP settings page in ACP (1e0fb20d) +* apply auto-categorization logic (165af50d) +* ability to add/remove auto-categorization rules for incoming federated content (bdcf28a3) +* re-jigger 'add category' button to allow addition of remote category to main index (75639c86) +* add Urdu localisation, thank you! (8c6992f5) +* add wordpress (82037dee) +* add wordpress (c10656ec) +* only mark notifications read that match current filter (9d39ed51) +* closes #13578, increase uniquevisitors (e1423636) +* add new brite skin from bootswatch (e851a523) +* add filter:post.getDiffs (97d4994a) +* add filter:post.getDiffs (90a65129) +* add expose-gc flag to loader (bba18e31) +* add ap pageviews analytics (559a2d23) +* add heap snapshot (f88329db) +* add option to toggle chat join/leave message (92a3859f) +* add protection mechanism to request lib so that network requests to reserved IP ranges throw an error (9d3b8c3a) + +##### Bug Fixes + +* **deps:** + * update dependency satori to v0.18.2 (#13628) (2dc39f1e) + * update dependency ace-builds to v1.43.3 (#13633) (7adabd60) + * update dependency nodemailer to v7.0.6 (#13630) (07b9cd16) + * update dependency mongodb to v6.19.0 (#13619) (6d856545) + * update dependency sass to v1.91.0 (#13615) (08ea56bd) + * update dependency bootstrap to v5.3.8 (#13618) (29a7402f) + * update dependency nodebb-theme-harmony to v2.1.17 (#13607) (2f4cf26c) + * update dependency nodebb-theme-peace to v2.2.47 (#13608) (8af76f3c) + * update dependency redis to v5.8.2 (#13606) (138c6753) + * update dependency webpack to v5.101.3 (#13602) (996740bd) + * update dependency webpack to v5.101.2 (#13598) (90bddccb) + * update dependency nodebb-widget-essentials to v7.0.40 (#13597) (f5b0444b) + * update dependency tough-cookie to v6 (#13600) (ceb65d13) + * update dependency esbuild to v0.25.9 (#13593) (9ef4cfa2) + * update dependency redis to v5.8.1 (#13594) (0f72b8cd) + * update dependency webpack to v5.101.1 (#13588) (c67aa43f) + * update dependency sass to v1.90.0 (#13582) (abf7dd74) + * update dependency fs-extra to v11.3.1 (#13579) (5ce556d4) + * update dependency redis to v5.8.0 (#13580) (3c3e4486) + * update dependency redis to v5.7.0 (#13570) (27d60a19) + * update dependency cron to v4.3.3 (#13573) (0b4efa14) + * update dependency satori to v0.16.2 (#13569) (70d3a29c) + * update dependency webpack to v5.101.0 (#13567) (6fc8dfa9) + * update dependency satori to v0.16.1 (#13560) (2d1a5fea) + * update dependency redis to v5.6.1 (#13564) (1262aee8) + * update dependency mongodb to v6.18.0 (#13563) (8e9d3843) + * update dependency esbuild to v0.25.8 (#13559) (6a732e36) + * update dependency esbuild to v0.25.7 (#13557) (1697e36f) + * update dependency express-session to v1.18.2 (#13554) (0eb0a67a) + * update dependency morgan to v1.10.1 (#13555) (0e457f15) + * update dependency multer to v2.0.2 (#13556) (35ca0e3b) + * update dependency compression to v1.8.1 (#13553) (12b9f4c7) + * update dependency ace-builds to v1.43.2 (#13548) (57564190) + * update dependency webpack to v5.100.2 (#13549) (0b398bba) + * update dependency webpack to v5.100.1 (#13544) (d8c26bec) + * update dependency cron to v4.3.2 (#13546) (e838bb26) + * update dependency nodebb-theme-peace to v2.2.46 (#13542) (e4f56e83) + * update dependency webpack to v5.100.0 (#13541) (4a5a4fe6) + * update dependency redis to v5.6.0 (#13540) (a6cb933b) + * update dependency esbuild to v0.25.6 (#13538) (8960fdb3) + * update dependency nodemailer to v7.0.5 (#13537) (c6f4148b) + * update dependency nodebb-theme-peace to v2.2.45 (#13529) (991f518e) + * update dependency nodebb-plugin-web-push to v0.7.5 (#13523) (ceae2aa1) + * update dependency ace-builds to v1.43.1 (#13525) (aba2ddad) + * update dependency nodemailer to v7.0.4 (#13522) (f1fbea7b) + * update dependency pg to v8.16.3 (#13517) (fd82919e) + * update dependency workerpool to v9.3.3 (#13518) (655a3bd3) + * update dependency pg-cursor to v2.15.3 (#13516) (6e5083c2) + * update dependency pg to v8.16.2 (#13505) (d2f0944e) + * update dependency nodebb-theme-peace to v2.2.44 (#13514) (59090931) + * update dependency nodebb-theme-harmony to v2.1.16 (#13513) (4be2e82b) + * update dependency bootswatch to v5.3.7 (#13510) (1eefaf5c) + * update dependency pg-cursor to v2.15.2 (#13506) (10f7b49b) + * update dependency ace-builds to v1.43.0 (#13507) (e360f649) + * update dependency pg-cursor to v2.15.1 (#13504) (3b364ba1) + * update dependency pg to v8.16.1 (#13503) (819e2805) + * update dependency bootstrap to v5.3.7 (#13499) (e84fc739) + * update dependency connect-redis to v9 (#13497) (d3faff36) + * update dependency chart.js to v4.5.0 (#13495) (f36a5ac8) + * update dependency postcss to v8.5.6 (#13494) (703fcbbf) + * update dependency postcss to v8.5.5 (#13490) (c101d0d5) + * update dependency sass to v1.89.2 (#13487) (442c6e71) + * update dependency nodebb-plugin-emoji to v6.0.3 (#13486) (efcbbf29) + * update dependency serve-favicon to v2.5.1 (#13488) (d2a7eecb) + * update dependency @fontsource/inter to v5.2.6 (#13477) (c04bd7cc) + * update dependency satori to v0.15.2 (#13481) (78ebe298) + * update dependency satori to v0.14.0 (#13476) (29afcd36) + * update dependency workerpool to v9.3.2 (#13452) (6b33b1f4) + * update dependency satori to v0.13.2 (#13468) (44d1a17b) + * update dependency postcss to v8.5.4 (#13453) (1c432925) + * update dependency multer to v2.0.1 (#13466) (d0060e5d) + * update dependency sass to v1.89.1 (#13467) (602417d0) + * update dependency ace-builds to v1.42.0 (#13470) (c363b84e) + * update dependency mongodb to v6.17.0 (#13471) (a3cc99a2) + * update dependency cron to v4.3.1 (#13457) (3694f655) + * update dependency validator to v13.15.15 (#13451) (36f0cf25) + * update dependency esbuild to v0.25.5 (#13447) (6a5bbe92) + * update dependency nodebb-plugin-dbsearch to v6.2.18 (#13445) (3ca6a9bc) + * update dependency bootbox to v6.0.4 (#13443) (e3a7fb5c) + * update dependency diff to v8.0.2 (#13440) (76a624b9) + * update dependency commander to v14 (#13434) (1d624aad) + * update dependency webpack to v5.99.9 (#13438) (314a4ff0) + * update dependency connect-redis to v8.1.0 (#13433) (ee8e223f) + * update dependency nodebb-plugin-dbsearch to v6.2.17 (#13432) (42f16da5) + * update dependency sass to v1.89.0 (#13427) (2417a79b) +* display proper id if lock fails (19aa8a71) +* closes #13624, update post fields before schedule code (9d4a9b83) +* #13622, WordPress blog URLs not asserting properly (4ef605b1) +* closes #13625, fix utils.params so it works with relative_paths (a0e78ff8) +* remove webfinger error log (a0be4a28) +* urlencoded param in openapi spec example (5f7085f3) +* re-ordering dependencies because raisins (cbdc90a4) +* missed a tab character (788301a5) +* random hotkeys adding dependencies to my project smh (771b8dcb) +* parseAndTranslate bug (40973ca7) +* internationalize relay states (6576468e) +* minor fixes for yukimochi/Activity-Relay compatibility (28b63891) +* inbox.announce to not reject activities from relays (b1dbb19c) +* handle webfinger responses with subject missing scheme (4967492f) +* closes #13501 (bf279d71) +* closes #13620 (027d6f30) +* rare crash if queued item is no longer in db but id is in post:queue (e79dfeb7) +* jquery selector on post edit (f5ad7862) +* relative paths in openapi schema (a771b17f) +* add missing routes to write.yaml (e8401472) +* only process unique slugs (312df523) +* remove special-case logic that added a requested object to a topic if its defined context didn't actually contain it (70d7e329) +* return null if field is falsy (09898b94) +* mark-all read notifications button (c16f9d64) +* catch exceptions in assertPayload, closes #13611 (9bdf24f0) +* add missing files (057e3b79) +* add missing file to ur language folder (ecab347b) +* regression caused by cc6fd49c4d2ddc6970ea23011dece5ba91517ec0 (06c38247) +* protocol-relative URLs being accidentally munged, #13592 (cc6fd49c) +* cache lookup error when doing loopback calls (67389639) +* image handling when image url received is not a path with an extension (b4ff7906) +* readd retry items (c6889f08) +* set noindex tag on remote profiles as well (fe160160) +* duplicate canonical link header (c8ad0867) +* add rel canonical to remote user profiles (8ce5498f) +* ap queue id to use payload.type payload.id (a8bf4ea0) +* clearTimeout if item is evicted from cache (0997fbfa) +* sometimes summary is null/undefined (65364bfa) +* don't translate text on admin logs page (f6ed7ec2) +* change the client side reloginTimer to match setting (c43c3533) +* redis connect host/port (eac3d0a0) +* closes #13558, override/extend json opts from config.json (25c24298) +* add missing cache name (3f520c33) +* add missing ap pageview middleware (01f2effc) +* set to empty string if undefined (0ef98ec4) +* make clickable element anchor (dbed2db9) +* for attribute, remove upload trigger when click inputs (329f98d5) +* check topic and thumbs (72fec565) +* closes #13526, dont send multiple emails when user is invited (5a5ca8a5) +* pubsub on node-redis (f7f70468) +* typo (2280ea88) +* ensure check returns false if no addresses are looked up, fix bug where cached value got changed accidentally (6478532b) +* wrap cached returns for dns lookups in nextTick (010113a9) +* #13459, unread indicators for remote categories (6411c197) +* further guard against DNS rebinding attack (a8e613e1) +* undefined check, allow plugins to append to allow list (70c04f0c) +* simplify dns to use .lookup instead of .resolve4 and .resolve6, automatically allow requests to own hostname (df360216) +* return 200 for non-implemented activities instead of 501 (fcb3bfbc) +* remove null categories (28c021a0) +* patch ap .probe() so that it does not execute on requests for its own resources (a80edfa1) +* bring back auto-categorization if group and object are same-origin, handle Peertube putting channel names in `attributedTo` (8f933459) + +##### Other Changes + +* fix comma dangle (d4bf5f0c) +* fix lint issue (5dfd2413) +* remove unused url (076cc9e8) + +##### Refactors + +* revert, don't need to pass relative_path (f67265da) +* leaner utils.params for relative path (648c4543) +* remove invalid queued items (b73ee309) +* braces (f83d2536) +* add missing awaits (5ee1fd02) +* category listing logic to allow remote categories to be added, disabled, and re-arranged in main forum index (cb0b6092) +* show code/stack when dep check fails (f8733e06) +* dont del if cache disabled (bc40d79c) +* remove old arg (8305a742) +* if user.delete fails in actor prune (d5f6d158) +* use promise.all (472df3aa) +* use promise.all (6eab44a0) +* move ap retry queue from lru cache to db (#13568) (b3a4a128) +* log uid that failed (de71cc63) +* change default teaser to last-post (8ba230a2) +* copy session/headers when building req (e4a0160e) +* show both days and hours (1d7c32a5) +* add missing cache name (272008bb) +* another missing cache name (0fdde132) +* add names to caches, add max to request cache (a08551a5) +* closes #13547, process user uploads via batch (1ad97ac1) +* move post uploads to post hash (#13533) (24e7cf4a) +* parallel socket.io adapter (0b9bfc1c) +* use strings for cids (57a5de26) + +##### Reverts + +* remove heapdump (e74996fb) + +##### Tests + +* delete commented-out test (70bbed93) +* add timeout to ap.helpers.query (8f7411c3) +* more logs (8e160fe0) +* add more logs (f703a94b) +* add more logs (681ce8bf) +* debug timeout (029da6c5) +* more logs for failing test (79c6e72c) +* catch error in failing test (69a6c150) +* sharp invalid png (1ea10eff) +* latest sharp (3cdf28bd) +* add logs for test that's timing out (15155809) +* use protocol of test runner (04815497) +* fix notification tests (f8a0a7e1) +* one more fix (95f6688c) +* fix spec (7393bdd4) +* fix openapi (1071ac0c) +* fix meta test (1776bd1d) +* test fixes for default teaser change (8eedb38a) +* add openapi spec (020e0ad1) +* try timeout again (27aab921) +* disable timeout (930ff21f) +* psql fix (85e2d7d3) +* one more test fix (22d1972f) +* fix test, add joinLeaveMessages to newRoom (7acd63c2) +* increase timeout (fa31ba05) +* on more (1a85fafb) +* testing timeout on failing test (82c8034c) +* remove ci env (39d243b0) +* add a null field test (1fc91d5e) + +#### v4.4.6 (2025-08-06) + +##### Chores + +* incrementing version number - v4.4.5 (6f106923) +* update changelog for v4.4.5 (de05dad2) +* incrementing version number - v4.4.4 (d323af44) +* incrementing version number - v4.4.3 (d354c2eb) +* incrementing version number - v4.4.2 (55c510ae) +* incrementing version number - v4.4.1 (5ae79b4e) +* incrementing version number - v4.4.0 (0a75eee3) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### New Features + +* add new brite skin from bootswatch (567ed875) + +##### Bug Fixes + +* pass max-memory expose-gc as process args (d5f57af3) + +#### v4.4.5 (2025-07-31) + +##### Chores + +* **config:** migrate config renovate.json (#13565) (5a864150) +* incrementing version number - v4.4.4 (d323af44) +* update changelog for v4.4.4 (7b14e267) +* incrementing version number - v4.4.3 (d354c2eb) +* incrementing version number - v4.4.2 (55c510ae) +* incrementing version number - v4.4.1 (5ae79b4e) +* incrementing version number - v4.4.0 (0a75eee3) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### New Features + +* add filter:post.getDiffs (bbb9a460) + +##### Bug Fixes + +* clearTimeout if item is evicted from cache (5f696176) +* use sharp to convert svg to png, closes #13534 (b74c7898) +* use filename to check for svg, tempPath doesn't always have extension (5bcf078a) +* apply sanitizeSvg to regular uploads and uploads from manage uploads acp page (a8f4c5e6) + +##### Refactors + +* use promise.all (7c00e814) + +##### Tests + +* one more fix (5f5a6972) +* fix spec (3b609316) +* fix openapi (c7c83e0e) +* increase timeout of failing test (fe9b49e3) + +#### v4.4.4 (2025-06-18) + +##### Chores + +* incrementing version number - v4.4.3 (d354c2eb) +* update changelog for v4.4.3 (0c9297f8) +* incrementing version number - v4.4.2 (55c510ae) +* incrementing version number - v4.4.1 (5ae79b4e) +* incrementing version number - v4.4.0 (0a75eee3) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### New Features + +* link to post in preview timestamp (8c69c6a0) +* Add live reload functionality with Grunt watch and Socket.IO (#13489) (84d99a0f) +* closes #13484, post preview changes (14e30c4b) + +##### Bug Fixes + +* sanitize svg when uploading site-logo, default avatar and og:image (da2597f8) +* Revise package hash check in Docker entrypoint.sh (#13483) (6c5b2268) +* more edge cases (32faaba0) +* #13484, clear tooltip if cursor leaves link (0ebb31fe) + +##### Other Changes + +* fix lint (8ab034d8) + +##### Refactors + +* send single message (dc37789b) + +#### v4.4.3 (2025-06-09) + +##### Chores + +* up composer (5f51dfc4) +* incrementing version number - v4.4.2 (55c510ae) +* update changelog for v4.4.2 (6d40a211) +* incrementing version number - v4.4.1 (5ae79b4e) +* incrementing version number - v4.4.0 (0a75eee3) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### Bug Fixes + +* escape, query params (b02eb57d) +* closes #13475, don't store escaped username (806e54bf) + +#### v4.4.2 (2025-06-02) + +##### Chores + +* up eslint stylistic (fd2ae726) +* up dbsearch (e2de0ec2) +* up dbsearch (30aa0fe6) +* up harmony (99234b3f) +* up harmony (a16bc738) +* incrementing version number - v4.4.1 (5ae79b4e) +* update changelog for v4.4.1 (a686cf20) +* incrementing version number - v4.4.0 (0a75eee3) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### New Features + +* add action:post-queue.save (ebb88c12) +* restrict access to ap.probe method to registered users, add rate limiting protection (e70e990a) + +##### Bug Fixes + +* return 200 for non-implemented activities instead of 501 (524a1e8b) +* closes #13458, check if plugin is system (b1022566) +* add try..catch around topics.post in note assertion logic (cc927026) +* don't throw on unknown post on Undo(Like) (83a55f6a) +* add try..catch wrapper around Announce(Like) call to internal method so as to not return a 500 — just drop the Like activity (629eec7b) +* browser title translation (390f6428) +* allow guests to load topic tools if they have privilege to view them (78de8c6d) +* closes #13454, align dropdowns to opposite side on rtl (72417d82) +* send actor in undo(follow) (49b5268e) +* missed handling zset on ap unfollow (b20a6ed0) +* additional tests for remote privileges, enforcing privileges for remote edits and deletes (a888b868) + +##### Tests + +* fix groups:find webfinger test (0c1a6183) + +#### v4.4.1 (2025-05-16) + +##### Chores + +* up themes (61a63851) +* incrementing version number - v4.4.0 (0a75eee3) +* update changelog for v4.4.0 (09cc91d5) +* incrementing version number - v4.3.2 (b92b5d80) +* incrementing version number - v4.3.1 (308e6b9f) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### New Features + +* save width and height values into post attachment (3674fa57) +* use local date string for digest subject (3d96afb2) + +##### Bug Fixes + +* openapi schema to handle additional `attachments` field in postsobject (ce5ef1ab) +* group edit url (0a574d72) +* add attachments to getpostsummaries call in search, #13324 (8f9f3771) +* bring back auto-categorization if group and object are same-origin, handle Peertube putting channel names in `attributedTo` (a460a550) +* #13419, handle remote content with mediaType text/markdown (45a11d45) + +##### Refactors + +* create date once per digest.send (6c3e2a8e) + +##### Tests + +* fix tests to account for a460a55064e1280f36a0021e0510c7c557251030 (948bfe46) + +#### v4.4.0 (2025-05-14) + +##### Breaking Changes + +* removal of deprecated privilege hooks (8ea377a4) +* removal of `filter:flags.getFilters` (547fb482) +* removal of `filter:user.verify.code` (7e25946c) +* removal of `filter:post.purge` (df5c1a93) +* removal of `filter:post.purge` (c84b72fb) +* removal of `filter:router.page` (9d8061ea) +* removal of `filter:email.send` (b73a8d3e) + +##### Chores + +* **deps:** + * update redis docker tag to v8.0.1 (#13415) (fbe97b4e) + * update redis docker tag to v8 (#13387) (1df7313c) + * update postgres docker tag to v17.5 (#13398) (d319b0aa) + * update dependency sass-embedded to v1.88.0 (#13402) (694c79bc) + * update dependency lint-staged to v16 (#13404) (9d877481) + * update commitlint monorepo to v19.8.1 (#13394) (7a7a4f0a) + * update dependency lint-staged to v15.5.2 (#13383) (96dc5c89) + * update dependency @eslint/js to v9.26.0 (#13371) (450ce3b8) + * update dependency mocha to v11.2.2 (#13366) (e958010f) +* incrementing version number - v4.3.2 (b92b5d80) +* update changelog for v4.3.2 (0aa9c187) +* incrementing version number - v4.3.1 (308e6b9f) +* remove unused require (15b6a2c1) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### Documentation Changes + +* remove since-removed `labels` property from api (860ac895) + +##### Bug Fixes + +* adjust Peertube-specific handling to shove mp4 into post attachments, #13324 (799b08db) +* #13081, don't add mention when you are replying to yourself (d5865613) +* add `announces` to postdataobject schema (0f576a42) +* #13375, plus additional tests (fe13c755) +* missing awaits, more comprehensive 1b12 tests (5802c7dd) +* another case (6bfe4e62) +* handle missing orderedItems property in followers route (e042201f) +* missing await (651ebaaf) +* handle missing orderedItems (53bb0bbc) +* extra `orderedItems` property in generated paginated OrderedCollection, #13153 (f83b1fbf) +* #13153, follower and following collections to use generateCollection helper (a2de7aae) +* #13374, updates to posts.edit to handle remote content updates better (b4338489) +* leftover `handle` var (625ce96f) +* AP inbox update handling for non-note objects (f8d012c8) +* 1b12 creates being dropped (9f80d10d) +* update AP api (un)follow ids to be url encoded id instead of handle (7cf61ab0) +* **deps:** + * update dependency diff to v8 (#13409) (919d62ab) + * update dependency sanitize-html to v2.17.0 (#13418) (3e18af1e) + * update dependency satori to v0.13.1 (#13408) (f176d6b2) + * update dependency pg-cursor to v2.15.0 (#13414) (7320a858) + * update dependency nodebb-plugin-markdown to v13.2.1 (#13416) (84b8ecc7) + * update dependency semver to v7.7.2 (#13410) (366651d6) + * update dependency pg to v8.16.0 (#13411) (0825c569) + * update dependency nodebb-plugin-mentions to v4.7.6 (#13417) (383a7ce5) + * update dependency lru-cache to v11 (#12685) (23374fd7) + * update dependency rimraf to v6 (#12686) (6a4ffe02) + * update dependency bootswatch to v5.3.6 (#13400) (7a7cf830) + * update dependency csrf-sync to v4.2.1 (#13401) (ecce9998) + * update dependency sass to v1.88.0 (#13403) (7ffba218) + * update dependency nodemailer to v7.0.3 (#13395) (af3afba0) + * update dependency nodemailer to v7 (#13381) (0b4d403c) + * update dependency csrf-sync to v4.2.0 (#13364) (4f0f67a4) + * update dependency webpack to v5.99.8 (#13390) (c7a164ae) + * update dependency bootstrap to v5.3.6 (#13384) (e6a19612) + * update dependency esbuild to v0.25.4 (#13385) (b6f4de5b) + * update dependency @fontsource/poppins to v5.2.6 (#13376) (e2a8cf98) + * update dependency nodebb-plugin-mentions to v4.7.5 (#13386) (2c0aba02) + * update dependency nodebb-widget-essentials to v7.0.38 (#13380) (7f757615) + * update dependency nodebb-theme-persona to v14.1.11 (#13379) (954aa541) + * update dependency nodebb-theme-peace to v2.2.42 (#13378) (2aa0bfc5) + * update dependency nodebb-theme-harmony to v2.1.12 (#13377) (72b3a215) + * update dependency ace-builds to v1.41.0 (#13372) (4b78710b) + * bump markdown (f3bd8590) + +##### Other Changes + +* //github.com/NodeBB/NodeBB/issues/13367 (39953ee1) + +##### Refactors + +* use a single until (1b0b1da6) +* Helpers.generateCollection so that total count and a bound function can be passed in, #13153 (7f59238d) + +##### Tests + +* a few additional tests for announce handling (61f6806b) +* fix regression from 5802c7ddd9506a4e296f6dbdf2d9a32621c7f4ef (5b118904) +* fix broken test due to adjusted note assertion relation logic (9dc91f11) +* update filter:router.page tests to response:router.page (a819d39c) +* adjustment for now-removed labels property (52df41b9) + +#### v4.3.2 (2025-05-12) + +##### Chores + +* up mentions (fcf9e8b7) +* incrementing version number - v4.3.1 (308e6b9f) +* update changelog for v4.3.1 (2310a7b8) +* incrementing version number - v4.3.0 (bff291db) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### Bug Fixes + +* sql injection in sortedSetScan (16504bad) +* escape flag filters (285d438c) +* #13407, don't restart user jobs (31be083e) +* closes #13405, catch errors in ap.verify (8174578c) +* send proper accept header for outgoing webfinger requests (20ab9069) +* wrap generateCollection calls in try..catch to send 404 if thrown (64fdf91b) +* #13397, null values in category sync list (26e6a222) +* #13392, regression from c6f2c87, unable to unfollow from pending follows (401ff797) +* #13397, update getCidByHandle to work with remote categories, fix sync with handles causing issues with null entries (a9a5ab5e) +* correct stage name in dev dockerfile (#13393) (10077d0f) + +##### Refactors + +* wrap ap routes in try/catch (00668bdc) +* call verify if request is POST (dfa21329) + +#### v4.3.1 (2025-05-07) + +##### Chores + +* node 18 eol (800426d6) +* up widgets (ee2f91ad) +* up themes (18867fb1) +* update bundled plugins to use eslint9 (343f13e1) +* incrementing version number - v4.3.0 (bff291db) +* update changelog for v4.3.0 (76c03019) +* incrementing version number - v4.2.2 (17fecc24) +* incrementing version number - v4.2.1 (852a270c) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### Other Changes + +* //github.com/NodeBB/NodeBB/issues/13367 (d35aad31) + +##### Tests + +* fix android test (31af05c7) +* fix android test (25979294) +* fix a test (7ef79981) + +#### v4.3.0 (2025-05-01) + +##### Chores + +* **i18n:** + * fallback strings for new resources: nodebb.category, nodebb.world (2827498d) + * fallback strings for new resources: nodebb.error (c889d60c) + * fallback strings for new resources: nodebb.admin-settings-user, nodebb.user (d3409b40) + * fallback strings for new resources: nodebb.global (6c163f7c) + * fallback strings for new resources: nodebb.notifications (dcf34e3d) + * fallback strings for new resources: nodebb.error (b1e95bc6) +* v4.3.0-beta.2 (e3e78445) +* v4.3.0-beta.1 (0689da81) +* cut 4.3.0-alpha.3 (2e3e675b) +* cut v4.3.0-alpha.2 (c4690392) +* cut v4.3.0-alpha (4379df68) +* up pg, pg-cursor (#13351) (b57ce29d) +* incrementing version number - v4.2.2 (17fecc24) +* update changelog for v4.2.2 (ce196589) +* up eslint-nodebb (853244a1) +* up themes (4301bf97) +* incrementing version number - v4.2.1 (852a270c) +* up dbsearch (bc8126c7) +* up dbsearch (4b9331d9) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) +* **deps:** + * update redis docker tag to v7.4.3 (#13358) (7800016f) + * update dependency sass-embedded to v1.87.0 (#13347) (bee79784) + * update dependency @eslint/js to v9.25.1 (#13344) (25e4e844) + * update dependency eslint-config-nodebb to v1.1.3 (#13343) (d687fe60) + * update dependency @eslint/js to v9.25.0 (#13342) (0cc492c6) + * update dependency lint-staged to v15.5.1 (#13319) (9046acea) + * update dependency jsdom to v26.1.0 (#13330) (3f000ed6) + * update dependency @eslint/js to v9.24.0 (#13310) (41be539f) + * update dependency sass-embedded to v1.86.3 (#13301) (0bd43940) + * update dependency sass-embedded to v1.86.2 (#13291) (fdcd2a84) + * update dependency @apidevtools/swagger-parser to v10.1.1 (#13037) (3305c7b0) + +##### Documentation Changes + +* update openapi spec with new (missing) properties (b32b7fcc) + +##### New Features + +* upgrade script to remote duplicate remote users and categories as per #13352 (5aee2f26) +* add new mixin clamp-fade, and handler for expanding it in category description (decc9cf1) +* handle Announce(Update(Note)) as well, #13320 (04473669) +* #13255, proper handling of upvotes shared by group actors (74e32a17) +* send the whole post content in `summary` as well (5c5fd3d4) +* show/hide categories on world page, #13255 (804208b7) +* notice on remote categories that have no local followers, #13255 (93a5b35f) +* add new option to categorySearch module, `defaultCategories`, use to populate the category list when you don't want to poll backend for the main category list (a487d5f6) +* category quick search on world page, theme version updates, #13255 (17909516) +* show tracked/watched remote categories in world page, #13255 (34ab6771) +* remote user to category migration should also migrate local user follows into category watches (ac7b7f81) +* allowing manual group assertion via category search input (23b3148c) +* remote group actors migrated to categories if they were previous asserted as remote users (d19f692b) +* #13255 new topics in remote category addresses remote category, tests, fixes to tests (b8c531d5) +* #13255, deliver asserted topics to remote category followers (9c1d5cd3) +* #13255, add category name and handle to category search zset (876d1b04) +* integrate remote category pruning into actor pruning logic (9b5855f7) +* migration of group-as-user to group-as-category, remote category purging, more tests (4be0f73a) +* asserted topics and posts to remote categories will notify and add to unread based on remote category watch state (f483e883) +* also include category in `to` field when mocking post for federation (f73f727d) +* chat allow/deny list, closes #13359 (a5afad27) +* show topic follower counts (#13326) (bf2d4c46) +* federate out as:Article with `preview` for root-level posts in a topic, instead of `as:Note` (3c4be773) +* body-parser-2.x test (#13278) (389bc062) +* upgrade commander, get rid of custom color & wrapping code (485562d5) +* testing eslint9 (#13266) (68136641) + +##### Bug Fixes + +* bump harmony (2bf2e556) +* #13352, also do the webfinger backreference check when calling assertGroup (2572cbf5) +* regression that caused non-public content with source.content to fail parsing (e9b3306e) +* closes #13360, catch error in buildAccountData middleware (537a7428) +* bug where disparate ids all claiming to be the same handle were causing duplicate remote users due to collisions, #13352 (c2a3ef81) +* posts incorrectly excluded from results if result pid is in a remote category (a0a8c462) +* ap helpers.makeSet to handle undefined property values (d020e334) +* add back localCategories to categorySearch when defaultCategories is supplied (d58d5861) +* remote bare hash for remote users on prune as well (f02d9661) +* missing teasers for remote categories on /world (695312f1) +* remove superfluous privilege filter in markAllRead (0fab4255) +* reversed image and icon for remote categories, omit fa icon if remote category has icon property set, #13255 (dabcefaf) +* closes #13289, id can be null (f1d1d082) +* marking remote category topics as read (4a7111d0) +* markAllRead to get tids based on same logic as unread page, instead of marking all recent posts read (b0236735) +* key ownership cross-check to also work with remote categories, #13255 (6dee3e56) +* #13255, assert all recipients of the main post when asserting a note, so that remote categories can be discovered (1f046782) +* remote categories should not show up in a user's follow lists (4d1d7c3d) +* #13255, remote user-to-category migration should not move shares that are already in an existing cid (3213da1c) +* proper handling of actors.qualify response (f2e0ba21) +* missing dep (2cb6d10d) +* topics in remote categories showing up in /recent (c4274a3d) +* regression that caused resolveInboxes to always return empty, added tests for resolveInboxes (0246c146) +* spread fail, @julianlam (c1b71964) +* filter out non-asserted targets when sending ap messages, diff. getter method when passed-in ID is a remote category (309deb0d) +* tag whitelist check socket call for remote categories (c5901e0d) +* migrate topics as system user instead of uid 0 (ee34396c) +* do not send out ap (undo:)follow if local user or category is (not)already following (c6f2c874) +* allow category controller to respond also by remote category id (0b333fb7) +* #13255, update category search logic to allow for remote categories (6e23de46) +* delete shares zset on account deletion (7ccd6b73) +* persona tooltip so it doesn't appear when dropdowns are open (ea9f7903) +* lang keys (4277765b) +* closes #13353, don't use index for finding plugin data (ed92ffaf) +* regression on search query that is a url, via 3526c937ccec843d4637efa894f49efc9bac5493 (41252197) +* closes #13313, add error:post-deleted (b49a4586) +* upgrade script (52ca086b) +* tag urls getting double escaped (#13306) (3526c937) +* notifications.markAllRead (bf243e07) +* posts.uploads.usage since paths changed (c41c7e8a) +* req.body can be undefined (cd70e6c6) +* closes #13298, catch exceptions in webfinger and nodeinfo (bbfd6445) +* closes #13205, make parent post font-size small until expanded (ef98f8f9) +* closes #13275, set 'announces' after adding to zset to prevent race condition (2c59007b) +* use slug instead of groupname in acp for groups (d9f33204) +* do not await the batch call to sendMessage (aa4f23bf) +* commenting out outward federation of Add activity, pending forumwg discussion (4b22f297) +* on user deletion during assertion (due to 410), if delete fails, just run ap post-deletion to clean up (4bbe27d4) +* race condition in test (807a8c66) +* **deps:** + * update dependency pg to v8.15.6 (#13362) (7f533167) + * update dependency pg-cursor to v2.14.6 (#13363) (03e06784) + * update dependency webpack to v5.99.7 (#13361) (0a3e4d61) + * update dependency pg to v8.15.5 (#13356) (74558b0f) + * update dependency ace-builds to v1.40.1 (#13354) (4eec053a) + * update dependency esbuild to v0.25.3 (#13355) (43d7d47f) + * update dependency pg-cursor to v2.14.5 (#13350) (00be573d) + * update dependency pg to v8.15.2 (#13349) (b49436de) + * update dependency sass to v1.87.0 (#13348) (50a58bbc) + * update dependency connect-redis to v8.0.3 (#13345) (8d84206f) + * update dependency mongodb to v6.16.0 (#13346) (3c24810d) + * update dependency chart.js to v4.4.9 (#13328) (0c5ef0e8) + * update dependency nconf to v0.13.0 (#13333) (6f8c7aba) + * update dependency ace-builds to v1.40.0 (#13331) (5d461f04) + * update dependency nodemailer to v6.10.1 (#13329) (6fbb2b4b) + * update dependency ioredis to v5.6.1 (#13318) (74d9806d) + * update dependency cron to v4.3.0 (#13332) (f96ce25a) + * update dependency sanitize-html to v2.16.0 (#13339) (24a5f407) + * update dependency webpack to v5.99.6 (#13341) (cac1c37b) + * update dependency bootbox to v6.0.3 (#13327) (8f784bb3) + * update dependency nodebb-theme-harmony to v2.1.6 (#13314) (1bd12622) + * update dependency nodebb-theme-persona to v14.1.5 (#13316) (6de89952) + * update dependency webpack to v5.99.5 (#13312) (140440cc) + * update dependency cron to v4.1.4 (#13307) (5fa09a67) + * update dependency nodebb-theme-persona to v14.1.2 (#13311) (6f3e9853) + * update dependency nodebb-theme-harmony to v2.1.3 (#13309) (9905e6aa) + * update dependency bootswatch to v5.3.5 (#13308) (4b511546) + * update dependency bootstrap to v5.3.5 (#13304) (22b3dc65) + * update dependency sass to v1.86.3 (#13302) (70e788ba) + * update dependency spdx-license-list to v6.10.0 (#13303) (cd2ed209) + * update dependency bootstrap to v5.3.4 (#13299) (d9074dbc) + * update dependency nodebb-plugin-mentions to v4.7.3 (#13294) (dd3d1917) + * update dependency bootbox to v6.0.2 (#13293) (dfd2621e) + * update dependency sass to v1.86.2 (#13295) (1a763cbb) + * update dependency benchpressjs to v2.5.5 (#13292) (311cbec2) + * update dependency nodebb-theme-harmony to v2.1.0 (#13296) (5caadd2d) + * update dependency esbuild to v0.25.2 (#13284) (e6a02176) + * update dependency cron to v4.1.3 (#13282) (c46c2623) + * update dependency cron to v4.1.2 (#13281) (11f7b42c) + * update dependency satori to v0.12.2 (#13280) (28ec8a79) + * update dependency cron to v4.1.1 (#13276) (57819810) + * update dependency nodebb-plugin-composer-default to v10.2.49 (#13272) (40ecffa0) + * update dependency nodebb-theme-harmony to v2.0.42 (#13274) (5b40c149) + * bump mentions (7d32cdac) + * update dependency validator to v13.15.0 (#13273) (d275af60) + * update dependency csrf-sync to v4.1.0 (#13268) (92caab97) + * update dependency nodebb-theme-persona to v14.0.17 (#13263) (ca479efc) + * update dependency nodebb-theme-harmony to v2.0.41 (#13262) (33c25ce6) + * update dependency nodebb-plugin-composer-default to v10.2.48 (#13261) (5b98af9f) + * update dependency sanitize-html to v2.15.0 (#13264) (e17163ad) + * update dependency ace-builds to v1.39.1 (#13260) (532fea99) + +##### Other Changes + +* yup. (28b7a203) +* fix tabs (4cdfcf95) +* fix typo (352c42d8) + +##### Refactors + +* use promise.all (74661381) +* categories.sortTidsBySet to not take cid, retrieve from tids themselves (bfc7daf2) +* allow topics to be asserted directly into a remote category, or -1 otherwise (0fa98237) +* ability to browse to remote categories, group actor assertion logic, etc. -- no logic to assign topics to remote categories yet (1f40995f) +* remove datepicker (be7959e5) +* add sping/ping into openapi (8ffbc359) +* moved these rules to nodebb-config (e184c910) +* switch eslint configs to esm (92d6e022) +* move topic/post menu lists to core (9f93cc9b) +* show topic tools if plugins add them (87aacc89) +* remove reply icons (b73fb67b) +* remove debug log (021b3af0) +* break long line (c93dc589) +* only write to db on runJobs processes (a6839b61) +* use bulk increment (667367a6) +* remove spammy error log (9637abca) + +##### Reverts + +* use of vanity domains, needs rethinking. Originally added in 709a02d97ae7acbab08c7fa1fecfd01e0dcadcc7 (55c89969) + +##### Tests + +* article for new topic, note for replies (3e508d6c) +* missing clear ap send cache (512f889e) +* additional test for ensuring handle:uid is continually set even after re-assertion (39fc9bae) +* additional test for remote category topic assertion when ignoring category (c2f77cee) +* #13255, reply to topic in remote category addresses remote category (85e7c1a2) +* remote user pruning tests (53dc79a1) +* introduce overrides into person and group mocks (4f748158) +* have ap helper mocks for person and group auto-save to ap cache (80069a19) +* add failing tests for actor/group assertion via wrong method, remote user to category migration (afc47643) +* add tests for topics slotting into remote categories if addressed (804052f2) +* group actor assertion tests (ca9a5b6d) +* shorter test (e0235a1e) +* eslint for tests (f864a5a4) +* fix tests (321defb9) +* fix test expecting Note when it is now Article (5d94f2ca) + +#### v4.2.2 (2025-04-22) + +##### Chores + +* incrementing version number - v4.2.1 (852a270c) +* update changelog for v4.2.1 (4cee37b9) +* incrementing version number - v4.2.0 (87581958) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### Bug Fixes + +* escape displayname in topic events (42a5a127) +* closes #13336, allow main post deletion from "delete posts" tool (4f13eb03) +* bug where generateHandle would throw when passed in an invalid slug (2a98a9b3) + +##### Other Changes + +* fix semi (6832541c) +* fix missing comma (d59a5728) + +##### Refactors + +* use sortedSetsCard (46ed56cf) + +#### v4.2.1 (2025-04-10) + +##### Chores + +* up harmony (d161eb6f) +* up persona (2237e17a) +* up persona (75f1f6fb) +* incrementing version number - v4.2.0 (87581958) +* update changelog for v4.2.0 (c9e0198d) +* incrementing version number - v4.1.1 (b2afbb16) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### Bug Fixes + +* closes #13317, fix email confirm for changing email (33d50637) +* check if latestversion is valid before using semver.gt (6fe066ce) +* closes #13256, allow keyboard access to icon colors (c6620170) + +##### Refactors + +* get rid of async.parallel (e722e869) +* remove pointless true (747457d7) +* make register intro heading (c258f597) + +#### v4.2.0 (2025-03-19) + +##### Chores + +* **deps:** + * update commitlint monorepo to v19.8.0 (#13244) (ee3c0bf4) + * update dependency lint-staged to v15.5.0 (#13245) (f4fe3f5f) + * update dependency sass-embedded to v1.86.0 (#13251) (3bb861ae) +* up widgets (ed57f896) +* incrementing version number - v4.1.1 (b2afbb16) +* update changelog for v4.1.1 (2c3f8561) +* add missing file to az lang (d7116adc) +* language labels for az/pl (61d17c95) +* alphabetize transifex config file languages (b7bb35f8) +* incrementing version number - v4.1.0 (36c80850) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) +* **i18n:** + * fallback strings for new resources: nodebb.admin-settings-email (866cd539) + * fallback strings for new resources: nodebb.error (b4dfd7fe) + * fallback strings for new resources: nodebb.admin-settings-chat (2f957655) + * fallback strings for new resources: nodebb.user (78a2c087) + * fallback strings for new resources: nodebb.admin-manage-categories (c3993018) + * fallback strings for new resources: nodebb.admin-manage-categories (efdb416c) + * fallback strings for new resources: nodebb.category (8314d8ba) + +##### Documentation Changes + +* openapi schema for admin/extend/plugins (f2a16422) +* update openapi schema from 6c26d9f4a3c398b4d7add0a2d9c91685a0336a74 (128dd2d3) + +##### New Features + +* 1b12 category announce on post move to a new tid, #13236 (254f0738) +* add Azerbaijani localisations, təşəkkür edirəm! (825e4c70) +* if an incoming remote message is too long, don't create the room, but notify the local recipients instead (885b83e5) +* new ACP config for max length of remote chat messages, #13174 (81509b13) +* add `federatedDescription` property to a category. (dfabadbe) +* add link to category edit page in acp category sidebar (fa8216f2) +* add additional logic that checks whether a cid follows the activity actor, and asserts note into that category if so (3589c570) +* move category sidebar to ACP partial, add sidebar to category-federation (dc2dcaf1) +* add line to description exposing a category's handle if accessible by fediverse pseudo-user, closes #13126 (6c26d9f4) +* call announceObject on topic fork, #13215 (e3edfef8) + +##### Bug Fixes + +* wrong property name used (08796a0a) +* #13254, configurable ap content prune (80e03c85) +* only 1b12 announce topic fork if OP is local, fix race condition in tests (945617cb) +* bug where remote post was attempted to be announced on post move (291af926) +* handling of `href` in remote object attachments, #13169 (44354dac) +* #13100, direct access to a tag page no longer excludes cid -1 (14fd33ce) +* expose remote url in user object (78c9239b) +* hide disable and purge buttons from category-federation.tpl (43248578) +* show 'copy settings from' button in acp category sidebar only on category.tpl (1f6871e5) +* improper cc and object fields in announceObject (deb5ee5e) +* move AP send logging earlier (dca3c35d) +* #13224, handle note attributedTo when it is of type object (d9483347) +* allow actor assertion of loopback actors depending on ACP setting (73aaa990) +* **deps:** + * update dependency mongodb to v6.15.0 (#13253) (1c23d0cf) + * update dependency pg to v8.14.1 (#13247) (4d6d71d8) + * update dependency nodebb-widget-essentials to v7.0.36 (#13250) (dbd0fd22) + * update dependency sass to v1.86.0 (#13252) (a1465268) + * update dependency esbuild to v0.25.1 (#13243) (ce3bb8b5) + * update dependency ioredis to v5.6.0 (#13246) (b96f532b) + * update dependency connect-redis to v8.0.2 (#13242) (e90a8b26) + * update dependency autoprefixer to v10.4.21 (#13241) (4e69ed56) + * update dependency pg-cursor to v2.13.1 (#13248) (92727549) + * update fontsource monorepo to v5.2.5 (#13226) (8ca1d6e6) + * update dependency mongodb to v6.14.2 (#13229) (b39e4d19) + * update dependency terser-webpack-plugin to v5.3.14 (#13230) (7b40e210) + * update dependency mongodb to v6.14.1 (#13225) (a58af228) + * update dependency tough-cookie to v5.1.2 (#13217) (e19109ad) + * update dependency mongodb to v6.14.0 (#13214) (ad680d6a) + * update dependency terser-webpack-plugin to v5.3.12 (#13213) (4c22af8c) + * update dependency cron to v4.1.0 (#13200) (f56838a3) + +##### Refactors + +* remove announceObject in favour of feps.announce, added create activity mock to support (74443c3b) +* move all input note normalization into helper method, have assertPrivate mock a message object (with said normalization) before sending message (4ec7552c) + +##### Tests + +* add url/statusCode to failing test (8982923e) +* fix remoteUrl property generation, tests for topic moving (0e1006fb) +* fix actor tests (537880d2) +* openapi schema for remoteUrl (fc64e89f) +* add failing test for #13215 (feb94215) +* adjust test runner detection in AP code (7ceb6d69) +* new test file for feps (e510e826) +* log outgoing AP messages for local test runner (6e872b5f) +* allow ap/notes tests to be run in isolation (98aafaaf) + +#### v4.1.1 (2025-03-12) + +##### Chores + +* up themes (34414f16) +* up mentions (39ff5dde) +* up markdown (1d4be475) +* incrementing version number - v4.1.0 (36c80850) +* update changelog for v4.1.0 (3292a858) +* incrementing version number - v4.0.6 (4a52fb2e) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### New Features + +* allow self-signed certs, closes #13238 (de502cd2) + +##### Bug Fixes + +* lang typo (fc9cc8d6) +* check if folder exists when uploading files in acp (76896859) +* sanitize category svg image files (810e8dbb) +* #13094, update unread chats on reconnect (1e6c6f4e) +* don't update topic lastposttime by announce (6b9f166c) +* closes #13078, toggle /world navItem when AP is toggled (bef17920) +* closes #13231, add some text-truncate, match width (bb13ea30) +* #13228, use timestamp from mainpost/lastpost (48f0f47a) +* add starterPlan check (40a5314e) +* closes #13219, only delete local user folder (8dbd50d4) +* don't crash if there are exceptions in action hooks (30068245) + +##### Other Changes + +* missing semi (c4e31395) +* fix ) (9549f1fa) + +##### Refactors + +* prevent following symlinks (e775564f) +* show simple error if path doesn't exist (6d74ee2f) +* use navAdmin (b517f05e) +* dont generate UUID if no email (c83f91bd) +* show warning if there is no email for validation (84d3fe79) + +##### Tests + +* fix inf loop if dirname results in same dir, ie \ (1ca7b7ec) +* #13078, add nav test (04279718) + +#### v4.1.0 (2025-02-27) + +##### Chores + +* incrementing version number - v4.0.6 (4a52fb2e) +* update changelog for v4.0.6 (78bbea30) +* comment out testing helper call (bad0a4c2) +* incrementing version number - v4.0.5 (1792a62b) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* up harmony (ea110a0e) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* bump emoji for #13077 as well (ff0de097) +* fix ap dev helper (b14494b0) +* add helper method to ease in dev (d7d64a14) +* add helper method to ease in dev (7d5482b2) +* incrementing version number - v4.0.0 (c1eaee45) +* **deps:** + * update dependency sass-embedded to v1.85.1 (#13208) (3907e6c8) + * update postgres docker tag to v17.4 (#13196) (cba2bc5e) + * update postgres docker tag to v17.3 (#13162) (47e28a0e) + * update dependency sass-embedded to v1.85.0 (#13161) (2258e145) + * update commitlint monorepo to v19.7.1 (#13123) (ca6734b3) + * update coverallsapp/github-action action to v2.3.6 (#13089) (84b28fae) + * update dependency lint-staged to v15.4.3 (#13079) (1d846134) + * update dependency mocha to v11.1.0 (#13069) (8e99c97a) + * update dependency lint-staged to v15.4.1 (#13060) (153e65bc) + * update dependency lint-staged to v15.4.1 (#13060) (37b2b83d) +* **i18n:** + * fallback strings for new resources: nodebb.category (00253821) + * fallback strings for new resources: nodebb.error (589be143) + * fallback strings for new resources: nodebb.themes-harmony (25049714) + * fallback strings for new resources: nodebb.admin-settings-advanced (ad6b6132) + * fallback strings for new resources: nodebb.themes-harmony (fc063bb0) + * fallback strings for new resources: nodebb.admin-settings-general (d41109a0) + +##### New Features + +* support remote "Video" type objects in note assertion, #13120 (95f2c4ed) +* 1b12 compatibility (7dc1e8ab) +* remove activities older than a week (d9e86c7b) +* federate out Announce of a tid's mainPid if the tid is moved out of cid -1 (b7f9983a) +* syncUserInboxes to take into account remote topic tags, closes #13074 (637addc4) +* allow search bar to load remote 7888 Conversations, aka nodebb topics (7687da00) +* introduce new 'markdown' post parsing type, closes #13077 (b386e4a6) +* #13066, report canonical URL in user agent for outgoing requests (c3e9cb68) +* changes to how a topic is presented via ActivityPub; conformance with upcoming changes to 7888 (4fd7a9dc) +* changes to how a topic is presented via ActivityPub; conformance with upcoming changes to 7888 (adeaff4b) + +##### Bug Fixes + +* scheduled topics and posts should return 404 on AP request (428300de) +* tag handling when remote objects contain tags without leading # symbol (5c3f1cfe) +* handle multiple types in remote actor payload (65895651) +* missing db (058befb3) +* remove handle on category purge (adb430f2) +* restrict feps methods to real cids (8b717d54) +* restore old behaviour of 1b12 federating both object and activity (f0ee43dc) +* send `actor` with 1b12 announce, fixes #13072 again (86b0e591) +* isArray check (5f3ed76d) +* delete from payload instead of setting null (489c5ce2) +* send `actor` with 1b12 announce, fixes #13072 (3cd87f1b) +* #13139, payload.version can be null (be1598d1) +* tidChanged (bfd4e68b) +* bad logic that invisibly broke outgoing user follows completely (334be721) +* #13076, allow pulling in of topics by their topic URL fix: reapply fixes that were part of since-reverted 4fd7a9dc59b65e8654d704c493f2254793e8d6a9 (c6e6ab43) +* call relativeToAbsolute helper when generating markdown source content in mocks.notes.public/private (02fb99eb) +* extend remoteAnchorToLocalProfile ap helper to handle markdown content (db1f8959) +* incorrect `posts` url in topic posts collection (812ec73e) +* incorrect `posts` url in topic posts collection (b2530e61) +* **deps:** + * update dependency sass to v1.85.1 (#13209) (386ab89f) + * update dependency bcryptjs to v3 (#13160) (6ea65678) + * update dependency cron to v4 (#13184) (41eec8d7) + * update dependency xregexp to v5.1.2 (#13195) (23621eca) + * update dependency ace-builds to v1.39.0 (#13197) (a3f5721a) + * update dependency chart.js to v4.4.8 (#13182) (474d267e) + * update dependency postcss to v8.5.3 (#13183) (5fc4c806) + * update dependency mongodb to v6.13.1 (#13187) (77b0160c) + * update dependency nodebb-plugin-web-push to v0.7.3 (#13178) (000ceee4) + * update dependency sass to v1.85.0 (#13163) (75a7188a) + * update dependency pg to v8.13.3 (#13157) (f3c156e9) + * update dependency pg-cursor to v2.12.3 (#13158) (6b8e4b39) + * update dependency webpack to v5.98.0 (#13159) (db74c1e8) + * update dependency nodebb-widget-essentials to v7.0.33 (#13156) (af7f4242) + * update dependency pg-cursor to v2.12.2 (#13150) (b5ce9e14) + * update dependency compression to v1.8.0 (#13152) (1e52cf34) + * update dependency ace-builds to v1.38.0 (#13151) (db0b816c) + * update dependency pg to v8.13.2 (#13149) (bea1367d) + * update dependency postcss to v8.5.2 (#13144) (3449e76d) + * update dependency benchpressjs to v2.5.3 (#13098) (6688edde) + * update dependency esbuild to v0.25.0 (#13141) (d7fdd80c) + * update dependency tough-cookie to v5.1.1 (#13140) (33ce7239) + * update dependency ioredis to v5.5.0 (#13138) (b337e999) + * update dependency sass to v1.84.0 (#13128) (f872a768) + * update dependency semver to v7.7.1 (#13122) (5f3c5a55) + * update dependency mongodb to v6.13.0 (#13106) (31ff6c2e) + * update dependency semver to v7.7.0 (#13099) (a348e808) + * update dependency nodemailer to v6.10.0 (#13073) (8ab71e4f) + * update dependency nodebb-theme-persona to v14.0.2 (#13064) (8ec3ceae) + * update dependency nodebb-theme-harmony to v2.0.3 (#13063) (b98d047a) + +##### Other Changes + +* remove unused db (06b3d9ad) +* remove tab (54bc54e1) +* fix tab (397d28e3) + +##### Performance Improvements + +* closes #13145, reduce calls in actors.prune (676acb7e) + +##### Refactors + +* remove cid:-1:tids (and variants) from intersection in /world, fixes #13125 (d0561a60) +* single remove (0784e11b) +* move 1b12 announce logic out of inbox and into separate feps module (9fd6ac6b) +* acceptable types in context.js to index.js, allow searching for remote topis by topic url (d644c0f4) +* 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 (f64e6f0f) + +##### Tests + +* moved AP actor tests to separate actors.js file, added failing test for scheduled topics (01be4d79) +* update test to assert the note assertion itself (c6ba56a5) +* update bcrypt hash for 3.x (bfffbfbe) +* update pwd test for bcrypt3.x (ca0fa1d3) +* add sourceContent to spec (d1d55461) +* adjust webfinger test for updated 404 status code (59afd193) + +#### v4.0.6 (2025-02-27) + +##### Chores + +* up dbsearch (9e1a0a13) +* add sourceContent to schema (b2cdd5fd) +* up harmony (f94cf5ce) +* up deps (a9563d75) +* up harmony (08014e7c) +* up harmony (8385d4ae) +* up harmony (0a9d28d5) +* up harmony (c920836a) +* up esbuild (2ab6a368) +* up widgets (02a8d9b6) +* up harmony (05bbefd1) +* incrementing version number - v4.0.5 (1792a62b) +* update changelog for v4.0.5 (f84b9fc7) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### New Features + +* match events and parent style (e38d1531) +* merge consecutive share events (9153f8cf) +* **config:** add `acpPluginInstallDisabled` option (#13189) (577eee2f) + +##### Bug Fixes + +* add missing file (04d5edbb) +* #13202, private note assertion failure when cc property is missing (c65e1ebb) +* tests for public and private note assertion, failing test for private note assertion with missing cc prop (efb27ce0) +* closes #13206, truncate long usernames (51872d54) +* closes #13207, add localComments (13a13e1d) +* handle multiple types in remote actor payload (d91b80d2) +* don't send validation email for pending emails (07957e82) +* missing db (52b23313) +* #13198, use email from confirmObj (b4dfc48b) +* summary post parse (e9d4c7b9) +* add sourceContent to getPostSummaryByPids (ad92e931) +* #13193, add lang strings (2c830567) +* #13194, dont notify about cid=-1 (b8c8ae09) +* old upgrade script so it doesn't create settings objects (fe980688) +* escape confirm email in acp manage users (9bfa8853) +* add missing await on filter:user.logout (c6b8256f) +* relaxing strict allowedTags configuration for incoming AP content (allowing picture, source, and additional attributes for img) (2ad48f17) + +##### Other Changes + +* fix (ec11b0c2) + +##### Refactors + +* use sortedSetRemoveBulk (349084d8) +* don't make db request if there is no code (53a2be9d) + +##### Tests + +* remove extra .only, add basic tests for public note assertion (64267f7d) + +#### v4.0.5 (2025-02-20) + +##### Chores + +* bump composer to 10.2.46 for #13132 (7520e4f6) +* up harmony (f82f00e5) +* up widgets (e23a14c1) +* up harmony (c0996a80) +* up dbsearch (d0a9ddea) +* up dbsearch (310fab65) +* add test helper to activitypub file (4bc0031f) +* incrementing version number - v4.0.4 (b1125cce) +* update changelog for v4.0.4 (d3b69a39) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### New Features + +* add upload button to quickreply (f67a0a12) +* remove activities older than a week (9997189a) + +##### Bug Fixes + +* typo (e63f1234) +* #13136, do not log 404s for AP requests (93f48409) +* #13129, serve category backgroundImage as actor `icon`, not `image` (b8200095) +* escape ip blacklist rules (625f4751) +* closes #13180, don't execute cron jobs if ap disabled (a410587c) +* #13172, Topics.addParentPosts not sending sourceContent in calling parsePosts (bb9687bd) +* #13179, fix context resolution failure bug with frequency (6245e33d) +* add back chronological sorting of asserted notes (de6e63bb) +* #13170, remove mime-type and regex test for "Emoji" attachment, wrap tag name in colons if not provided (92708d2f) +* closes #13176, check if uid is number when creating tokens (80cc1d34) +* notes.assertPrivate sanity checks (5e71d597) +* page index for single page, closes #13173 (b0e8058f) +* remove handle on category purge (4134a075) + +##### Tests + +* dont clear local when testing (669755d1) +* show objects on fail (f2824073) +* wait after post request (64318242) + +#### v4.0.4 (2025-02-17) + +##### Chores + +* up harmony (0fed9a76) +* up harmony (ef2c606d) +* up harmony (f1da510f) +* up deps (fa366095) +* up harmony (df07fcfa) +* up harmony (de5caf8f) +* up harmony (d1f78295) +* incrementing version number - v4.0.3 (2b65c735) +* update changelog for v4.0.3 (123e1635) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) +* **i18n:** fallback strings for new resources: nodebb.themes-harmony (99210918) + +##### Bug Fixes + +* clear parsed post cache when updating a post's attachments, #13164 (33d7b9b3) +* logic failure causing remote posts with image to not parse properly, #13164 (d936d5c0) +* change the passed-in notificatiom id for `notifyTagFollowers` to contain the list of matched tags (04f51cc6) +* actor.prune, dont try deleting same users (ffbe4b7b) +* getLocalFollowCounts, show non existing deletes (cfbb8ff8) +* return null if field isn't in hash (70a9f6d3) +* getUserField so that it always returns null (e85662a5) +* isArray check (224910b1) +* sanity-check the id when mocking a post (5cbf3dd7) +* missing actor on some local activities when federating out (040584f0) + +##### Performance Improvements + +* closes #13145, reduce calls in actors.prune (d590c2af) + +##### Refactors + +* single remove (77dd6dd0) +* cleanup ip:recent (d8724708) +* hooks button (c4b01330) + +#### v4.0.3 (2025-02-09) + +##### Chores + +* up harmony (2ee0cda2) +* update persona (b6b76639) +* bump persona to fix theme description issue (cd88cce0) +* up harmony (a01bf73e) +* forgot to remove bad code (865c09a5) +* up harmony (c3f8222f) +* up harmony (f07f3801) +* up harmony (67a789ad) +* up themes (c1c5cc6e) +* up themes (b2b0ed35) +* up peace (55eedcbe) +* up themes (38a21e29) +* up harmony (58e551fe) +* incrementing version number - v4.0.2 (73fe5fcf) +* update changelog for v4.0.2 (75588ffe) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### Bug Fixes + +* delete from payload instead of setting null (1b4e0c87) +* regression :tmi: (f5328aa8) +* #13139, payload.version can be null (bfe6d9d8) +* tidChanged (1f8e2f9a) +* #13135, tids are not numeric for ap topics (d687f081) +* handle cases where url passed to mime does not pass because url contained a query string (5baa46d0) +* isDraft logic, closes #13119 (21156673) +* path on windows, #13119 (36063d1f) +* #13115, prevent messages from getting duplicated (1ff8e1e4) +* #13115, limit bodyLength length (8e9fdb5f) + +##### Other Changes + +* remove log (a8e7bf35) + +##### Refactors + +* events are returned inside post objects (3ab22c2c) +* move dropdown search inputs into dropdown (b993be6f) +* server.destroy (72091ec4) +* remove deprecated methods (265e44f0) + +##### Tests + +* search endpoint with start & end (c1b630d4) + +#### v4.0.2 (2025-02-02) + +##### Chores + +* up persona (0298a3af) +* up harmony (d77d2055) +* up themes, closes #13102 (6672de00) +* incrementing version number - v4.0.1 (a461b758) +* update changelog for v4.0.1 (3dbd2b30) +* incrementing version number - v4.0.0 (c1eaee45) + +##### New Features + +* allow selecting empty for custom selects (be62ae24) +* add uid to post.parent (4d733590) +* add description and keywords to api/config (933c18f4) + +##### Bug Fixes + +* bad logic that invisibly broke outgoing user follows completely (51e660d5) +* closes #13096, fix regression from renaming language files (0b92d525) + +##### Refactors + +* remove old comment (d4a1b4da) + +##### Tests + +* fix schema (ef5ae006) +* fix schema (47734d4c) + +#### v4.0.1 (2025-01-29) + +##### Chores + +* up dbsearch (88fa4553) +* up benchpress (c9584800) +* up harmony (10409e0e) +* up themes (6918c3f3) +* up themes (050effe2) +* up harmony (90e0a2d6) +* incrementing version number - v4.0.0 (c1eaee45) +* update changelog for v4.0.0 (ae8f58d6) + +##### New Features + +* use text-danger if chat over limit (2f5b4b29) + +##### Bug Fixes + +* #13087, disallow following cid -1 (ddb6e0f3) +* encoding of pid in notifyCategoryFollowers, #13087 (6d88dcb2) +* #13084 bump persona (4feda224) +* closes #13091, dont show world category (4c66eed9) +* #13088, up dbsearch (8644565a) +* #13090, update themes fix selector (822bff62) +* #13086 move rateLimit check (487d9f73) +* null checks for category sync and actor assertions (b3b8b9e9) +* #13067, add sourceContent to teasers (679fcb71) +* #13065, send missing `actor` property when 1b12 announcing local posts (e61df4de) +* closes #13068, encodeURIComponent X-Redirect (f3b8ed27) +* #13062 add displayname to email tpl data (f0c2090d) + +##### Other Changes + +* missing ; (8b38cb3a) +* reduce image size (#12702) (a95a51c6) + +##### Refactors + +* 🤡 (4ba01d18) + +##### Tests + +* adjust webfinger test for updated 404 status code (4a827b7e) +* fix x-redirect tests (b80440aa) +* add sourceContent to spec (526a9521) +* change test to 404 (52f7f0a7) +* remove only (0ba4ba65) + +#### v4.0.0 (2025-01-20) + +##### Breaking Changes + +* add new `escape` option to getPostSummaryByPids [breaking] (16c8a652) +* core html stripping on plaintext, remove 'filter:teasers.configureStripTags' hook, remove html stripping from teaser generation (c01f1549) + +##### Chores + +* **i18n:** + * fallback strings for new resources: nodebb.error (e53b3737) + * fallback strings for new resources: nodebb.aria (d04bdd9d) +* update changelog for v3.12.4 (e7e682ed) +* bump persona (3e08eb39) +* bump markdown, harmony, and persona to new major versions (499df8ab) +* remove now-unneeded v4 upgrade scripts (487e7be5) +* add type to webpack config file (#12072) (d79dfd03) +* rc4 (aa1f65e9) +* bump harmony for #12938 (8ec388af) +* rc3 (754ef9b2) +* upgrade script to fix outdated slugs for users with periods in their usernames (d1c27b4d) +* bump to rc.2 (e2b653b0) +* bump version to rc.1 (5aab151e) +* up persona (b25aa336) +* beta.4 (c1079356) +* up harmony (098836c1) +* beta.3 (27fb01f7) +* up harmony (34353bdb) +* beta.2 (cc267714) +* beta tag (86f624f8) +* up themes (471fbd3a) +* up themes (d4cf5e7e) +* restore activity history check in AP inbox middleware now that NodeBB sends unique IDs with applicable activities (7e23e192) +* up harmony (16fe85e2) +* up themes (789520e4) +* up harmony (7a5588da) +* bump version to 4.0.0-alpha (b691d2a9) +* up harmony (aae0b5b0) +* up harmony (b540ecd3) +* up harmony (18f9baff) +* info -> verbose logging in ap inbox.js (931a0f0a) +* make getParentChain logging verbose (6069bee0) +* lint (f6d4d563) +* up mentions (68c91650) +* up mentions (2b6e31a6) +* commenting out logic that drops requests if the id has already been seen, due to a regression in interoperability between NodeBB instances (bb0360bf) +* up mentions (2c87c6e8) +* up mentions (bad094e8) +* up markdown (58668b46) +* up markdown (dbd901d3) +* update ap cron job config (c680fa67) +* up mentions (c4c3c207) +* bump harmony (4cec6783) +* bump mentions (5ec24977) +* bump markdown (4fd0d27e) +* up mentions (78e11d6e) +* bump harmony (228c9173) +* some linting (fdba6840) +* debug log (3636dec7) +* up widgets (1ce986f7) +* lint (5e776088) +* minor cleanup (1253ded7) +* add verbose logging to middleware.validate (719bb0a0) +* up harmony (550e522f) +* move assertTopic to top of file, rename to assert (4ee8519d) +* up harmony (a84dba27) +* lint (c5c0c473) +* remove now-unused notes.assert (c6624b63) +* up harmony (66b4dc2c) +* up harmony (d31978b3) +* lint (0c2cfbe7) +* removed unused requires (911177ce) +* remove debug log (92c990f2) +* remove debug log (403bf3e1) +* update log verbiage (9c15b02a) +* additional logging (641a94d6) +* move assertNote to separate file in preparation for additional note-based methods (2b3b6e56) +* small var rename (8a5fb86d) +* minor re-shuffling of code (5e693702) +* reorganize controllers for clarity (2e899008) +* update AP helpers export, 404 logic reversal, no slugify in userslug in mock profile from remote instance (0cbbce8c) +* **deps:** + * update dependency lint-staged to v15.4.0 (#13059) (1c4c4f57) + * update dependency sass-embedded to v1.83.4 (#13045) (be2098d8) + * update dependency @commitlint/config-angular to v19.7.0 (#13030) (03432960) + * update dependency jsdom to v26 (#13040) (d12d9efb) + * update redis docker tag to v7.4.2 (#13033) (fd6f3ee6) + * update dependency lint-staged to v15.3.0 (#13031) (3340d984) + * update dependency sass-embedded to v1.83.1 (#13025) (b9364de2) + +##### Documentation Changes + +* add `resizeImageWidth` to openapi definition for /api/config route (7c1b9000) +* fix comment (e5331b84) +* schema update for activitypub acp route (3a05171f) +* update comment to reflect new behaviour (2cbd63dc) + +##### New Features + +* fix activitypub toggler to be more complete; tests. #13054 (af4d07fb) +* add activitypub file to translations (74831034) +* save audience into post hash (for remote posts) (b537437c) +* add `filter:topics.hasThumbs` filter hook (f4835695) +* append uploaded images into thumbnail set (cc65214d) +* #12976, shares collection (e83036a9) +* pending follows and logic for remote users, #12938 (2851e56b) +* #12935, show 'shared this to x' in topic event when moving topics out of cid -1 (fcf0f799) +* support for FEP fb2a (new-style account metadata) (549a6b7d) +* #12924, parse incoming custom fields from remote users (0f351ba7) +* #12924, custom user fields for local users now federating out (62fe70f2) +* add title property to custom emoji markup (3968c822) +* #12683, parse incoming emoji tags and replace in content prior to storage in database (09b1e119) +* fire new hook `filter:activitypub.mocks.note` on note mocking (4ba41a68) +* handle receipt of `Add` activity #12707 (3023b251) +* associate new topics created from asserted notes with their originating context, if that context is resolvable (6f237c57) +* #12822, send all outgoing links to `/ap` first to see if it's activitypub enabled, parse if able, otherwise redirect as normal (069c8228) +* normalization middleware to ensure incoming objects' data types are as expected (simplifies later logic) (13c048a5) +* send Update(Note) on chat message deletion and restoration, serving Tombstone if deleted (61445d3d) +* handle Update(Note) when object has limited visibility, #12834 (e5948464) +* check room counts on actor prune, #12834 (e0e2051d) +* federate on chat message edit, #12834 (1659015c) +* notify users on new message from remote users, fix use of parseInt in generating chat notification (2464d13c) +* handle incoming non-public activities as chat message, #12834 (b82e20df) +* federating out chat messages (2ab5ea39) +* update mdidleware.assert.message so roomId is optional (2b71434e) +* #12647, federate out `Add` activity on inbox.create and local post creation (bd44783e) +* send 308 when activitypub request for remote post comes in, #12831 (7f1f4859) +* dynamic category icon generation (edff3394) +* enable web-push plugin on first install (34c4cefe) +* service worker icon and badge support (4ae86145) +* update `buildRecipients` to include all topic participants and their followers, #12735 (6752a541) +* notification rescind support (d6bab253) +* update service worker to handle push and notificationclick (5109b539) +* add onmessage handler for service worker (40fe4d88) +* extend activitypubApi.create.note to accept a post object to reduce unnecessary calls to retrieve post summary (b63440cb) +* moving a topic out of cid -1 federates an Announce activity, #12734 (daa665eb) +* additional copy re: editing remote posts, #12732 (c3e14912) +* allow use of vanity domains pointing to an account hosted elsewhere (709a02d9) +* show local users who follow (or are followed) by a remote user, on a remote user's profile (a884681a) +* additional logic to handle special case where a queried object id reports a context, but it is not actually contained in the resolved context's collection (f9937a84) +* #12695 Topic Synchronization via resolvable `context` (ff0c289e) +* activitypub.get; allow the passing-in of custom headers via existing `options` parameter (da25fd21) +* add post attachments to topic thumbnails (2aeabce5) +* icon replacing user status for remote users, denoting that they are from outside the local instance, #12688 (a81ef609) +* allow activitypub request cache to be ignored (485b7758) +* send join date in local actor mock (3c9337b7) +* AP note replies collection, closes #12675 (26a7c51a) +* topic backfill logic via resolvable context #12647 (e75ec39b) +* send out `Update(Actor)` when a category is edited (09d8fbf9) +* instance-level allow andd deny list for federatioN (6e2178b0) +* store encountered instances by last seen date (d0a1ebcf) +* sending out 1b12-style Announce activities on incoming Create/Update/Like/Delete/Undo(Like) activities, when they pertain to notes (6569066e) +* assert actors when mocking post (f5b856f4) +* check to/cc/audience for local category and put topic there instead (overrides passed-in cid) (b6ffc47c) +* plumb audience into _activitypub when mocking posts (d9f1fa3a) +* send cause to ap.get error handler, delete local account representation if assertion fails with a 410 (3567f55a) +* #12589, add nodeinfo endpoint (578a53dd) +* add timestamp to most activity ids (42f514b7) +* show category followers in category federation ACP page (7313d5c6) +* logic for remote user deletion, cronjob, and ACP options for pruning options (4bb2c1a8) +* remote user deletion logic, #12611 (539300ff) +* allow user.exists to respond to requests for remote uids too (3dca79dd) +* pruning of stale notes older than 30 days with no engagement (709c9132) +* save remote user urls backreference (ff53f3c0) +* add another sanitization round before federating to remove classes from all tags in output html, closes #12573 (7c79e231) +* passing in types to parsePost for more specific handling by plugins (8cf96176) +* track incoming requests by id, analytics increment for some metrics, ignore repeated requests by id (4e9cd8ef) +* added analytics.peek (b106a6a0) +* Note deletion logic and refactoring, #12551 (ccd187e0) +* handle receipt of Update(Tombstone) (f4043959) +* on post delete, federate out an Update(Tombstone) (96db519b) +* serve Tombstone objects for soft deleted posts (5e9d47a1) +* ability to query remote users by webfinger handle (97615267) +* support the ability to search for posts and users by url (4cbb1f2a) +* basic retry queue (50bc9a37) +* on post edit, also target anyone who announced the post and their followers (807c3eac) +* add id to reject activity (32d1adf6) +* openapi spec for acp category federation page (fc3f3a78) +* support rescinding user flags (61a595de) +* slightly better title generation (b9d6aa46) +* help modal for world page (cf291a51) +* remove `/world/all` route, add intro header to `/world` (af324dae) +* add id to Like (ab055a77) +* handle 1b14 announce for remote content too (2ce3a116) +* resolve Crate and Announce activities (f802564e) +* utility functions to get local followers/counts given a remote actor uri, plumb cid into notes.assert via inbox.announce if a local cid is following the sending actor (452cb0a9) +* send id back during accepts (b7629c6e) +* handle Undo(Flag) (a1a7fb77) +* send undo when rescinding/deleting a report (c1dfa8d2) +* federate flag creation (2a2b855f) +* bulk purge flags (7bacbf76) +* rescind post flags (9ab1a2d1) +* integrate post uploads into attachments for outgoing note mocks (fdbd30dc) +* add id to profile updates (4d07ca4c) +* noremalize actor property in middleware (18ba2e38) +* save remote post url into hash for use (525b7c2c) +* note attachments via link preview plugin (6fc6cc33) +* add ids for undoing follows (3cc09d20) +* send back follow id in Accept (66b0d81c) +* add id to follows and verify accepts (72dbcfe3) +* resolve objects from ids in middleware (102c174e) +* filter out topics in cid -1 from tagged topics page, closes #12489 (d437d969) +* sign public key requests (fcd5447c) +* populate and send link tag/header respectively for activitypub-enabled content (4e0d7dd3) +* basic AP Flag support (d9eba6d2) +* send unique identifiers for note activities (9fc194e3) +* upgrade script to re-assert all known actors to save URL into hash, and bump mentions (943cef6d) +* sorting an filtering in /world (d1fa6a59) +* make the /api/world data more category-like (e266b447) +* add more properties from /category to /world (3c6966fb) +* follow redirects in API (e0138cbe) +* add checks to only continue with topic assertion if there is a relation to existing content, #12442 (55e947a0) +* add assertion lock on activitypub.notes.assert (2688b6bb) +* have category actor send Announce(Note) on remote replies to topics in a cid (04c743eb) +* have category actor send Announce(Note) activity on posts from that cid (7df5cabb) +* ability to update category handles (9dc20d0c) +* category handles, #12434 (3cc99a17) +* rename 'world' category to 'uncategorized' (9a5d4ffb) +* plumb pid into return data from posts.loadPostTools, add link to view original post, for remote content (17f62f24) +* add TTL cache for Actors.assert (d75894eb) +* log all post edits to the event log, return eid when logging events, plumb eid into Update(Note) to federate out as a unique id (83392f3c) +* if Update(Note) is received for a post that does not already exist, assert it (0bfdbb6a) +* return count of new notes in assertTopic (519e025e) +* add /world and /world/all to available nav items (f31d8c2e) +* mentions support (e4c1ca1e) +* allow user.search to handle remote handles, beginning of mentions support (1b64fdb5) +* integrate notifications for remote likes, follows, and announces. (c707a32a) +* federate tags out on new post (if new topic) (e1c43112) +* restrict loopback calls (77a3efb4) +* fine-grained privileges integration for fediverse users and world pseudo-category (1bd8f9a1) +* temporarily deny handling non-public notes (eaba2aa3) +* shared inbox (49c69a0f) +* security, cross-check key ownership against received actor (a94341f4) +* attachments support (e5b6ee97) +* save tids to individual user inboxes based on recipient list, new /world/all route (89128634) +* save actor follower URL backreference and sorted set backreference (da085b0e) +* infinite scrolling for /world (874b24cb) +* record remote Announce(Note) (6508287d) +* handle Announce(Note) when Note is a piece of remote content (94dcd29e) +* Announce(Note) and Undo(Announce) (415b4fe1) +* exposed method to find topic events based on a subset of saved info, returns topic event ids (b9821c52) +* topic and category S2S get responses (a461e5dd) +* send proper content-type on AP S2S responses (d18e65c4) +* category actors, stub outbox (88733a51) +* returning following and follower collections upon request (ae042ce3) +* Like(Note) and Undo(Like); federating likes (607c4623) +* origin checking on received Update activities (6930973d) +* Update(Note) (0e59f312) +* Update(Person) (6e87cf57) +* activitypub response to note retrieval via pid (6b517252) +* added mocks.actor and Update(Person) activity on profile update (8453b83e) +* Create(Note) on new topic or reply (0e016c6e) +* proper webfinger response for instance actor (da0211b1) +* application actor + public key for uid 0 signs, moved homepage route to after core routes are generated (9885f94a) +* native parsing of title for topics (981b4f14) +* beginnings of the /world route (04423232) +* handle Update(note) (ac672f08) +* handle Create(note) (f7477536) +* flesh out more topic info, fix navigator (7e89eadb) +* some additional work to properly save and retrieve remote topic data (4bd7a574) +* ability to browse to any ActivityPub note and have the entire topic chain render (485cf200) +* add activitypub request cache (326bb995) +* assertNotes method (ab40ba61) +* ability to load remote post data in a topic (3ce84b39) +* plumb uid into .addParentPosts() so .assertNotes() can be properly called (0d478b2c) +* stub lib for retrieving and mocking posts (f1e5e5a0) +* send name property in getActor response (5e1e8099) +* ability to browse follower/following lists of remote accounts (2a77ae55) +* expose following/follower counts in actor response (7fd15d66) +* show remote followers/following in user profile pages (739b0548) +* update mockProfile to accept actor uris as well as actor objects (672c7014) +* accept and undo support (4c1b2b3f) +* update activitypub helper resolveLocalUid to accept both webfinger name and full URL as input (1f79f542) +* follow/unfollow logic and receipt (c02271c7) +* actor cache, method to resolve inboxes, stub code for sending requests. Now base64 encoding digest as expected by Mastodon (cdc4275f) +* http signatures support, .sign() and .verify() AP helper methods (e7184eb8) +* add webfinger ttl cache (4f5f025d) +* add .has() call to cache/ttl (57895b72) +* ability to view federated profiles via url manipulation (a05b674e) +* followers and following endpoints (7e1dac39) +* inbox and outbox routes, stub controllers (81b6260f) +* global switch for disabling federation, + test (099124c4) +* activitypub actor endpoint for user accounts (2dec357a) +* **activitypub:** show world category in selectors (953231fc) + +##### Bug Fixes + +* ap webfinger test (3e33e1a3) +* if user is logged in after registration don't go back to /login (23b37f62) +* closes #13056, guard against undefined keyid,compare (6073a25b) +* bug where newly create cids were not responding via webfinger, 404 on webfinger errors, not 400 (c17809e4) +* #12990, local references via remote posts are not linkified properly, + tests for helper (98280d30) +* #12984, fix pids numeric sorting, handle non-integers (4dc740a2) +* add deprecation note re: as:audience (3cf3f93a) +* #13021, save details of follow request before sending the follow, avoid race condition (16616814) +* handle ap send errors with object body (450322d1) +* thumbs.get to handle null case from mime.getType (50b510e3) +* post upload sync duplication bug (cfeb49dd) +* language fallbacks for activitypub-related strings (37a4fd7c) +* add sourceContent prop to posts API; fix other tests (e1db9642) +* add sourceContent prop to posts API (8ebe6de1) +* add missing file for openapi tests (e6b20ed3) +* activitypub tests (12fb205b) +* broken tests (9c78255e) +* #13014, possible fix for peertube incompatibility: strip hash value from key IDs during check (0ad8ed9d) +* #12996, invalid title generation when remote post content has markdown source (1d36ab6d) +* #13017, probe redirection if url is identical to id (39705a17) +* #13016, remote account deletion frontend UI bug (2005a02a) +* add missing catch, closes #13012 (45021b5b) +* check if url is undefined (fa81078a) +* #12941, inherit audience from earlier posts in the chain so as to send a coherent value to Lemmy instances, re: lemmynet/lemmy#5278 (97384b2c) +* add 10s timeout for AP message send (25d6ef43) +* ignore subsequent shares of the same topic by that user (d734ce49) +* #12972, allow bridgyfed accounts to pass isWebfinger regex validation (a7e6cfe8) +* bump harmony (ee8ec61e) +* fix double thumb due to post attachments (755b9855) +* lemmy integration, handle `image` property as topic thumb (b15a684a) +* wrap try..catch around topics.reply in note assertion to output errors (b551abce) +* have options.update also trigger handle and search updates on actor assertion (050acb4f) +* separate out removals vs. additions in actor assertion in order to hopefully resolve #12959 (546ffed2) +* openapi schema for ap routes (c86b6f24) +* get version directly from package.json (3340720e) +* set linkValue for remote user fields (3d653cbb) +* crash due to missing param when calling getCustomUserFields (e5fdf9f1) +* set a user-agent when sending requests (64339e61) +* persist `sourceContent` into post hash when ingesting remote posts, update markdown so that field is parsed instead of ignoring content (1839388b) +* use fediverse pseudo-user for webfinger privilege checks (f32184b2) +* regression on remote deletes, received object is not always a simple id (d7fe3558) +* thrown exception from failed note assertion (830aab66) +* one more (304fa554) +* another fix re: 3780fdc6ff9fb23048266b43ceae86646fb795cc (69d5544a) +* thrown exception from failed note assertion (f7a294a7) +* additional fixes re: 3780fdc6ff9fb23048266b43ceae86646fb795cc (97861dd1) +* regression on remote deletes, received object is not always a simple id (3780fdc6) +* #12939 convert custom emoji in actor summary into images (78a9e86c) +* translate custom field names and values when federating out (e6edcefd) +* bump emoji-android version (552298f8) +* bump harmony and re-tag (593a1933) +* bump emoji to 6.0.1 (efa0cac3) +* bump harmony (00b2dd49) +* strip html from remote custom fields, linkify if url detected in now-plaintext field value (065f84b6) +* handling of empty custom user fields from remote users (1bebb82b) +* don't send custom fields in remote user actor object if no value is entered (09f00f8e) +* hotfix for empty user fields (ce1efd39) +* bump mentions (e5f804ff) +* #12928, topic showing wrong queued posts in-topic when topic is remote (7b747c8f) +* replace parseInt that was excluding remote pids from calculation (93bb73c1) +* #12923, inability to start chat with remote users via profile (b6a2520f) +* inability to directly post to a nodebb category from the fediverse (55ab85ac) +* #12919, handle when buildTopicsSortedSet returns a non-array (e4e6b1d2) +* #12912, strip custom emoji from remote content titles (7adc3140) +* don't chop off colons when generating titles as they could interfere with emoji (f449fafc) +* #12893, topic with pages returning OrderedCollectionPage instead of OrderedCollection. (d685b20e) +* missing return (cf3555fa) +* #12887, strip target attribute from remote posts' html (3eb0a0ed) +* #12866 again, more tests (a59dae3f) +* raise probe timeout to 2s (94e34907) +* topic count not showing up on category page (dd363446) +* #12882, view original post circles back to same topic (93844321) +* #12883, activitypub probe timeout (f8729571) +* errant mention detection via actors.note (22dbf15e) +* #12880, refactored ap controller.list to use `buildTopicsSortedSet`, moved out poor man's intersect to internal method (05c8ee9f) +* don't trust timestamps on received items (b1d779ca) +* use `categories.getTopicIds` instead of duplicating existing logic to get world tids (7bf41138) +* #12866, improve title generator, refactor tests (beb85604) +* one more fix (eccad588) +* debug return not restored back (0e982fcf) +* #12865, crash on liking a chat message (fc3243d6) +* possible fix to escaped emoji in titles (f5324501) +* #12707 ensure actor matches context attributedTo (998273cd) +* federate out an Add on post creation even if there are no category followers (15516862) +* accidental sending of Set to ActivityPub.send (3030a720) +* #12857 byebye cheerio (8492b5f4) +* inputIndex check (cac4f8e7) +* convert some more verbose logging to use ap logging helper (6208ab8d) +* regression introduced by 903d03891941902ddac80b380552530e1853c306 (d451adaf) +* lint (c34407d8) +* errant parseInt in canEditDelete (0f1b1164) +* guard against missing to/cc (1d5f490d) +* object not array (873d033b) +* backend logic fixes for #12853 (b472c589) +* groups not showing up on new reply (1bf09907) +* re-enable logging only for dev mode (a226ee9e) +* defer postdata retrieval (9062691a) +* `inReplyTo` incorrectly including system messages, #12834 (7ad7bc47) +* remote debug log (e9a27db2) +* error on replying to remote mids #12834 (adf33cfa) +* proper urls in `to`, #12834 (94ac57ea) +* simplify uid logic, explicitly mention all participants, even local users, #12834 (70fe8689) +* adjust timestamp after message creation instead of passing timestamp in, #12834 (0346e92b) +* limited visibility remote posts with greater scope than asserted roomId should add those users to the chat room, #12834 (22931be1) +* empty mid on frontend for remote posts (8abfd951) +* recent chats string generation to handle remote users #12834 (0a17a0b9) +* inReplyTo bug, #12834 (fc1d064d) +* remove sender from recipients, #12834 (8f7d0499) +* private note `inReplyTo` url, #12834 (f3045309) +* `inReplyTo` for private notes so that refer to the immediately previous message if not explicitly defined (f4a02d9c) +* duplicate logic and double-parsing issue, #12834 (8a1abe68) +* federate out a Create(Note) instead of just the note... doi... (74d5ced2) +* chat room kicking of remote users, (un)read logic for remote users (there is none), sendNotification to only apply to local uids (52080ba2) +* restrict the ability to make a remote user a chat room owner (b610b520) +* display of remote users in chat room search (f5129017) +* also ignore non-public notes on Update activity (2713d13c) +* bump web-push (f57758b9) +* logic tweak (15f60b24) +* fall back to inReplyTo traversal on context resolution failure (903d0389) +* tests (45a0b818) +* null defense (3d25a079) +* #12821, improvements to search bar and search logic (0b83e5b8) +* lint (c265666c) +* parse aboutme when mocking a user (c5e10c1a) +* remove superfluous service-worker code (90cc7e61) +* explicitly set `updated` property when federating notes out (6fe4d446) +* buttons for general settings (5bc907a0) +* bump mentions (e0c410cd) +* actors.assert attempting to process things that aren't actors, #12809 (6b4b4b1a) +* carry out mime-type guessing on incoming attachments (71ce3089) +* re-use already parsed html in api.posts.edit's call to getPostSummaryByPids, delay federating out edit activity for 5s to give link preview a chance to resolve (b04a1105) +* id on 1b12 announces (047d5992) +* better handling for remote posts that do not contain content (3c55d102) +* #12799 add externally linked images to `attachment` (1a0a2cd1) +* remove includeUncontrolled as we are posting messages, and that only works with windows you control lol (028b6d74) +* add logic to automatically take over clients from old service workers (1fbf9114) +* closes #12787, filter null topics (c2600b12) +* remove use of jquery $(this) in ajaxify (176f4d0d) +* crash when AP S2S call made to retrieve a remote user account (not allowed); now returning 404 (d42d3b1c) +* prevent crash if items is undefined (a80e3141) +* regression that caused replies to not get federated (652d6c6e) +* #12760, add proper security context for application actor (045e16d3) +* on topic move out of cid -1, also federate to the public address (909437c3) +* bump harmony (6ed32f67) +* type casting in user block logic (0f63f67b) +* restrict announce activity to topic moving OUT of cid -1 (f3eb6d50) +* #12751, topics:recent zset not updated when tid moved in/out of cid -1 (76551c71) +* bump mentions (e6d8e059) +* bump composer (22952c54) +* bump composer (e2879563) +* #12732 editing of remote post content (25bf97ae) +* #12733, html present in generated title for remote topics (34747122) +* #12729, replies to existing topics from Pixelfed not asserting properly due to incorrect `toPid` (f481cde1) +* move topic reply call in notes.assert to its own line (95e6d2b4) +* #12510, blocking of a single remote user causes content from all remote users to be blocked (53aee401) +* serve category actor image instead of nothing, serve brand logo in icon (cbe0a0ad) +* lint (d33fb92d) +* have note federation call .parsePost instead of firing plugin hook (93536386) +* always send replies uri instead of null if no replies exist, @trwnh (ff08fbb7) +* send `null` instead of empty array in `replies` property if mocked note has no replies (9bd6896d) +* bug that caused remote replies to other remote content to not always assert (2ced3502) +* bugs in user searching causing remote lookups to fail (1f896fb6) +* `audience` property in topic actor response (9a54f6bc) +* updating of post counts for remote users (3e494dc7) +* add privilege check to user follows (399d4103) +* accidental passing of string instead of constant (7bf349b6) +* lint (fc5a829c) +* update upgrade script date (b9f37c5c) +* include follower sets for reassertion (be393d57) +* missing await (5c9ac5d3) +* null check for note attachments for thumbs view (2aa04837) +* incorrect parsing of context items during note assertion, logic error with slicing (60408f23) +* logging in topic actor logic (bc00835c) +* issue with topic actors not returning proper json (609035b5) +* off by one error @barisusakli (cfbaf145) +* map to actual mainPid value (7bdf3769) +* skip topic retrieval when cid is -1, as it is done again later (92191995) +* flawed logic in generating topic context collection (31c7226e) +* rename announcers to shares (3c0d7616) +* catch thrown errors in src/api/activitypub (fdc0d670) +* federating category mentions (00a26679) +* send html in category description (f605e188) +* Update activity handling for non-Person actors (5e343a83) +* remove await from category update federation call (bacbfba9) +* issue where incrementing user hash fields didn't use the right key name for remote announce @barisusakli (e84cfd8c) +* lint (b0eec67d) +* send back empty array if no direct replies, bug with reply generation (af6ae6ee) +* accidental passing-in of an array into getUserField, breaks in pgsql? (8e1fccf0) +* hardcoded tid in topic thumbs test (78a6c60c) +* tighten up logic in checkToPid internal method (f629b20f) +* partial revert to fix url_parsed not being available at top of file @barisusakli (8ecbb5cc) +* removal of topics from applicable user inboxes when synced (46341673) +* tweak logic for topic counters sorted sets, #12642 (0d549f1d) +* #12667; handle cases where received id is not a URL (d92efb8a) +* #12673 fullname not defined in some remote actors (f662a606) +* only send Update(Actor) to followers, #12674 (26946c7f) +* missing sorted set member removal on category unfollow (a748068c) +* add timestamp to follow activity to make it unique (eab231ee) +* additional logging for activities with no context property (cb5e5b4b) +* update handling of Announce(Create(Note)) to also handle non-note types (600b1a86) +* push instead of unshift, now that order is reversed (cc0bbcb7) +* wrong property name for OrderedCollection items (a2fb939b) +* improper sourceContent in mocks (615aaa01) +* #12662, add original activity actor to Announced activity's cc (d6f44d8e) +* remove duplicate 1b12 announce in notes.assert (already handled in inbox) (4dbb73a4) +* #12652, incorrect user, post, topic counters with AP enabled (fe70a2b8) +* incorrect activity id sent out on 1b12 announce (ef97a784) +* #12654, incorrect location of `sharedInbox` property (b66d998d) +* regression that caused new notes to have undefined cid and fail privilege check (a371c9fc) +* move call to retrieve cid followers out of loop (89dd2fb0) +* do not retrieve remote outbox count when asserting actor (16f8f536) +* double sanitization (d9ac7f49) +* dont load cid=-1 in tag filter dropdown (7d679db2) +* change setImmediate to a 5s timeout to give plugins (or anything waiting for the return value of the API call) a chance to finish execution (7fada44b) +* openapi spec for v3 posts get (4b86b378) +* wrap ap note creation in setImmediate to let internal hooks have a chance to wrap up first (a3c6c872) +* improper sanitization and parsing in mocks.note (59818031) +* remove parseInt on users controller (5a2fa52c) +* send additional @context entry for `publicKey` support, fixes #12604 (4eb998d5) +* null case handling (e6e6c2a2) +* category follow schema test (4b8a9e58) +* getCidByPid call returning improper values because a remote url to a local post was passed in (4030c09e) +* 1b12 conformance for inbox.create as well (c8bc6e55) +* re-add sending of Announce(Note) for microblog support, #12434 (89d2363d) +* FEP 1b12 conformance, federate Announce(Create(Note)) instead of Announce(Note), #12434 (be95b5b1) +* missing openapi schema change (e9a0d495) +* eliminate infinite loop in actors.assert via user.getUsersFields (18e58318) +* minor adjustment in logic to work around relation logic (1219d7d3) +* introduce artificial 5s delay for 1b12 announces (101062cb) +* move logic to move topic on note assertion earlier in the flow so it actually runs (acd1630b) +* post count (badb7e2c) +* skip follower count check if cid follower is found (f29214e0) +* don't crash process on error in cronjobs (89465ec6) +* handle missing fullname in actor removal logic (ae3fa85f) +* guard against infinite loop during topic purge batch call (6272d059) +* unintentional parseInt during post purge (bcfac00b) +* pid in api call (70625133) +* missing await on topic purge (6ecc791d) +* don't attempt user reset token cleaning if uid is not a number (8d790964) +* set (f83a3672) +* incorrect use of .map on a Set (c6f2155f) +* another crash (f8d9f644) +* closes #12618, handle missing selector (35eb2d0d) +* crash in mocks.profile (6f37825b) +* bug that stopped remote users with dashes in their handle from being properly asserted (76290e37) +* parse incoming HTML to remove useless classes too (47406d13) +* update post cache clearing logic to call helper function (547fc17d) +* have replies provide `name` when mocked (b6653d15) +* lint (f93b237e) +* remove .only (a0054400) +* minor cleanup (129017f7) +* Notes.delete to delete announcer zsets too (b5b89038) +* rename api.activitypub.create.post to .note() (2d7ca48d) +* canPurge logic fault (d40d0b06) +* allow remote content to skip isReady check on topic creation/reply (5bfde4c4) +* Topic.isOwner check to handle remote users (0a1ad87d) +* special handling for privsTopics.canPurge for remote posts (b67a7c3c) +* Posts.isMain cast pid to String instead (9fbd48b1) +* special logic for purge privilege checks (9f44e99f) +* unnecessary parseInt in post purge api method (eda97da1) +* type error in attachment emptying method (336ea1ee) +* tag notification if pid is not int (baada2fc) +* encode most uses of pid to avoid more bugs like #12545 (c973a9ca) +* allow quoting AP posts, fixes #12545 (43dfb60f) +* Update(Note) federation should only apply to local content (6f9fa660) +* attach announcers and their followers to cc, not to targets, only attach announcers to targets (51089a34) +* bump harmony (2cd9088c) +* inability to query local content via remote url (ac74d9c5) +* ensure consistent return type from notes.assert (a7aeabc8) +* remove unnecessary check and guard against unsupported URIs before fetching (af986758) +* handle retry queue invalidation across a cluster (22b42f11) +* use batch.processArray properly (729f0fca) +* if an unknown post is navigated to by a logged-in user, automatically assert the post and add it to their inbox (4e7b12b9) +* bump harmony (e341a5d8) +* bump composer-default (4e006adb) +* save followersUrl to remote user hashes (738d47c7) +* notifications for tag followers not being sent if author is a remote user (8de2352e) +* send topic title in context object (05cdb7d9) +* partOf and type (109f4232) +* if post count is less than posts per page, don't paginate in ordered collection (1a21c8ad) +* send id for category announces (0336e8f0) +* post deletion of remote posts (5e203197) +* update title generator to include the punctuation, and also take into account question marks and exclamation marks (6ac5a779) +* remove unneeded `flagged` property in favour of flagId, use existing language key for rescind-report (449ffd66) +* have category sync routes return full api response, openapi schema for that pair of routes (b7ad4317) +* update signature parsing logic to handle values with equal signs in them, closes #12538 (596a5e4b) +* unintentional object pollution by buildForSelectCategories (40b9dabd) +* better logic for choosing webfinger lookups (ed84eed8) +* don't look up webfinger when it's not necessary (dd71340a) +* update hasRelation condition to be true if cid is passed in in options (6964b1fd) +* handle requests to URI IDs correctly (1ecbf02a) +* handle URI actor IDs (70001664) +* percent-encode outgoing webfinger requests (3d1e2cde) +* bump harmony (59021d8a) +* icon:text and icon:bgColor for remote users (3721f819) +* handle Announce(Create(Note)) (a9a7fd1e) +* use system pseudo-user for topic move call (dce33446) +* if the topic already existed in -1, move it to another category if one was passed in options (49a64dc7) +* add back reverse lookup for notes assertion checking via cids (407dda78) +* actors.assert should return false if webfinger cannot resolve to an id (b7ff7be2) +* support reporting remote content in Flag (026449dc) +* #12505, convert relative urls in links and images into absolute urls, uses same logic as for emails (7c4ae8eb) +* #12502, improper decrement (6befff5e) +* send userslug in preferredUsername (64258dac) +* wrong variable name (50f31b23) +* change default attachment type to Link, or Image if mediaType matches (bb4e418d) +* save modified actor back to req.body (c3365908) +* you scurvy cur! (52271cae) +* handle (created) and (expires) in http signatures (4d23a837) +* #12496, url in schema (f7833386) +* handle remote userslugs with non-lowercase letters (f5ea470d) +* send hs2019 as algo (to match cavage-12, handle incoming algorithm value (8d0876b8) +* bump harmony (b8daa02f) +* throw errors when local objects don't exist (959e1820) +* #12493, send unescaped fullname through via AP if displayname is set/used (e0f542c9) +* send only the id into actors.assert (465a46f2) +* use a slightly better error code to indicate object resolution failure (c92b5e07) +* assume object is full object and not just id everywhere (e0166ccc) +* use resolved object in likes (962c6351) +* reject accepts of invalid follows and return when already following (b6168202) +* handle resolved objects in flag (41f77f8f) +* additional verbose logging for signature verification (464dd806) +* bump mentions (6b169e04) +* default to showing alternate as link to the post object (86107535) +* pid via index calculation (de83d6b0) +* support ldjson with ActivityStreams profile in actor queries (c30c1288) +* early return on invalid actor (2d1524ee) +* use actor id in flags (e25f0621) +* make sort work with world filters (cd8a91fe) +* uppercase digest algorithm name for compatibility reasons (5c1c1d21) +* better handle null return from notes.assert (cbfc8d25) +* bump mentions (86caf237) +* actor assertion logic to ignore loopback urls (f40df387) +* lol (983153fb) +* maybe last tweak (42bdffdc) +* tweak upgrade script again (ae146024) +* tweak upgrade script again (166e3e2f) +* add timeout on activitypub.get, tweak upgrade script (442e98e4) +* tests, save actor URL into userRemote hash (59709a3c) +* show locally captured remote posts when browsing remote profiles (1084f21d) +* have getCidsByPrivilege include cid -1 when set is categories:cid (e828e87e) +* updateLastOnlineTime for remote uids (893788a2) +* bump harmony (2cbc3913) +* adjust world schema (a3dce463) +* redirect to /api/world for API requests (495d5435) +* lint (f078e1e2) +* skip notes.assert checks for Announce(Note) if it's a remote object, do our own checks; #12442 (4fcd2bb2) +* getSortedTopics; filter out topics in cid -1 unless explicitly asked for (dff5d1c6) +* #12444 add uncategorized topics counted stats to separate sorted set (8dcdf8ef) +* undefined object in notes.assert (1fb3c4fd) +* typo (bab41d12) +* restore userOrGroupExists, as alias to slugTaken (e0f6b707) +* send handle as category actor's preferredUsername, #12434 (803975fd) +* use CategoryObject in admins-mods schema def (aafdefa7) +* only send activitypub+json links via webfinger if activitypub is global enabled (65bb8666) +* bump harmony (9c03e6e9) +* resolve interoperability issues with Misskey, et al. (003c6469) +* bump harmony (da2a1e20) +* issue where cid -1 appeared in all category searches (8f131b71) +* bump harmony (2756aae7) +* post urls to use prefix instead of linking out directly to origin server, exposed encodeURIComponent as a template helper for themes (2408ecd8) +* regression that caused S2S calls to topics to return with a 404 (5a2d17df) +* restore accidentally removed calls to updateLocalRecipients and saveAttachments (5f60f75f) +* properly handle empty fields param (c76d4018) +* circular object ref. (7af07151) +* tweak maxTags handling (ccd9c7ed) +* bump mentions (ff6cc90c) +* send topic notif on reply (1a92239c) +* typo (44a183dd) +* double-OP issue when remote reply comes in to local mainPid (0a2482cf) +* filter out system tags and prune extra tags beyond number allowed, when creating topic from remote data (7aa56c72) +* resolve toPid to local pid if able (ebd750b4) +* tweak user.search to better handle local usernames with colons in them (c346177b) +* accidental saving of ephemeral _activitypub object into db, should plumb into hooks only (81b319f4) +* handle actor assertion failure if mocked profile does not have a fullname (338c568c) +* template helper (52c143aa) +* tests (4b2495b5) +* remove unused param in addParentPosts (01f7af92) +* only dereference id if it doesn't exist locally — fewer calls (eb8ff75b) +* specify param for api test for /world (b1491ca3) +* AP S2S handling for /user/:userslug route (9cd6b496) +* handle fetch failures on helpers.query (5768a437) +* more duplicate detection in to/cc (ceab77e4) +* markAsRead to handle remote topics (17c55922) +* parse questions like a post (90e7d3a1) +* properly build recipients... old logic was just plain wrong :shipit: (1e663239) +* reallow topic:read privilege for fediverse group (97e5b0fd) +* only serve local posts via S2S when queried (00101d9e) +* note not federated out to mentioned users' inboxes (6423d514) +* update styling of available nav items in ACP (6aece689) +* remove unresolvable actors from parsing prior to mocking profile (39da3ab6) +* send explicitly empty array for attachment prop in mocks.note (4a8b06e8) +* remove some privs from fediverse in world category (6999bd68) +* inability to retrieve previously-unknown remote users via url manipulation (28f38b26) +* tags received via AP should only be of type Hashtag (as mentions are also in tag prop (81b81e54) +* data schema of reject activities (beaedc86) +* fallbacks for if preferredUsername is not set (9f8c706f) +* pass proper uid to privilege check in AP note federation (95427c4a) +* remove console logging (4c2cbb5b) +* move fallback 0 return in parseIntFields to other side of ternary conditional (5b74f6da) +* remove intFields hack and update db.parseIntFields to only parseInt if field value is a number (f368a1a8) +* truthy check in notes.assert (6671b511) +* remote user avatars in notifications (aef1215f) +* bump mentions (ae09aa20) +* properly handle if mainPid is not a number (1ca9994f) +* mainPid detection in unprocessed ids in assertTopic (b529610b) +* redir on bad world filter (0cf6af9b) +* serve fallback images on category actor (8cb984d4) +* bump markdown (44452a3b) +* missing invocation of generatePostUrl in generateRepliedTo helper (a08b2efb) +* unable to process Update(Person) (96a3a746) +* crash in resolveLocalId if Number is passed in (d51f5e59) +* missing await, and handle local posts with no toPid (i.e. reply to OP) (0b6b86d1) +* don't overwrite title if present, on assertTopic (a3368a69) +* bump markdown (b1894276) +* copy fixes, rename upgrade script, disable federation on upgrades (281e9d6e) +* update ap-related deps to prerelease versions (10abb82e) +* defer federation of new topics when topic is scheduled, tie activitypub api module to global enable toggle (5f85e700) +* lint (563db78f) +* put postcount retrieval behind try..catch so errors are handled appropriately (28370b10) +* side-effects from adding toPid to post intFields (now removed) (b0115951) +* revert introduction of toPid into post intFields, manually cast toPid as int in getPostSummaryByPids if present and numeric (3a870360) +* check origin only if object is a string (92a8951b) +* send string to validator (893dd523) +* regression re: attachment handling (53d1c10e) +* parseIntFields for tids (31fd135f) +* handle undo(Announce) of remote notes (cfbbf4ca) +* assert actors on note assertion, resolve crash if announcing something that's already been announced (6a7f8f14) +* don't crash when no attachment, oops (0edaf17c) +* sanitize post remote post content regardless (8b0ccc80) +* wrong id parsed in announce (068c4fa9) +* accidental overwrite of hoisted internal variable (56cfae07) +* include mainPid in topic counts calculation (5c04e805) +* guests visiting /world should see all remote topics (19d017b9) +* timestamp calculation (6a11c89b) +* better handling of missing of invalid to, cc, timestamp values (76d5feb7) +* remote announces not showing up in local inboxes (814c4794) +* handle inaccessible boosts (9439987e) +* remove invalid/inaccessible object from parent traversal chain on get error (672a907d) +* handle invalid score (609a9a37) +* mainPid accidental int (22da3a6a) +* getParentChain error handling (69f1ace3) +* take mainPid into account in syncUserInboxes (d13980c8) +* typo (de71b733) +* stringify error body in ap.send (401b4c5f) +* activitypub.get failure handling (12968b62) +* only log warning on ap.send failure (ce4b5679) +* rejig some tertiary conditionals, fix broken inReplyTo when toPid is not defined and mainPid is a remote post (5fee4e33) +* resolveLocalId to return null values instead of throwing for no resolution (11dba85d) +* don't crash on activitypub.send non-2xx, better logging for successful sends (ac56289f) +* replies to remote content overriding mainPid in topic (2b1a3477) +* assertTopic incorrectly creating new id if passed-in id did not match the actual object's id (f1b8f3fe) +* urls in posts and announces (4fb6574c) +* remove now unused world/:tid route and assoc. controller (a61e7fe7) +* cast cids passed in to getCategoriesFields as ints (aafdebd2) +* logic error (80377599) +* logic derp (9795abbf) +* new language source file for activitypub text (21a2876e) +* getUserInfo internal method in topic events to not filter out uids because getUsersFields already does it (f7259ccb) +* category following and acceptance logic (25f0d484) +* properly assert resources in AP router (d2f14c36) +* update preferredUsername in category actor to match webfinger representation (d213ce79) +* follower calls to return empty item list unless a page is explicitly passed in (94361721) +* move all actor object urls to immutable variants (86a607ce) +* send proper @context value for posts (was missing) (457bfe16) +* remote follows, yet again (fef18824) +* a bunch of broken things, added test for Create(Note) (a3a0edb7) +* error handling for actor.assert (fa1c5490) +* missing break statement (2c834263) +* reject spiders on remote profile GETs (a355c05d) +* send back correct actor id on webfinger calls (25434d2a) +* parseInt on timestamp from post (ddf17ee5) +* /uid/:uid route to return actor (0b3ca8e3) +* the id of an actor should be its immutable uri (/uid/:uid) and not userslug (e07c3131) +* unused require, tests (3c24cfb4) +* send full as:Image object for icon and image in mocked actor object (0af97dd4) +* clear post cache on Update(Note) (f51bbe91) +* webfinger loopback (1ee03f2b) +* revert home page routing change and moved instance actor endpoint to (e00a03bb) +* restore avatars in topic list (3bdaa8a8) +* send preferredUsername in application actor response (f8cfe64c) +* note assertion on Create(Note) and Update(Note) to use instance key instead of uid 1's user key (4cc7ee65) +* add workaround for nodejs/undici#1305 required to remove sec-fetch-mode header (2cb37088) +* response, not res (9e58b04c) +* automatically reject unsigned POSTs to inbox (a3e1a666) +* handle case where pubKey cannot be found (33f3da8a) +* user data in /world (518169fe) +* bookmark in topic data is nullable now (970a5a6e) +* saving teaserPid, timestamp, lastposttime in topic, fixed post index issue in loading topics (60bc27ec) +* preserve cid if set (e038eb05) +* incorrect author uid saved in topic (75654852) +* infinite scroll for posts (8cd3ff1a) +* reply expansion (5ac02765) +* issues related to adding new reply chains to an existing topic, resolveId method in notes module (2981f663) +* simplify increasePostCount logic by combining methods (81d81098) +* have mocks.posts return same number of items as received (d992239d) +* show full names for remote users (d1cdb8f8) +* improper params sent to get and getActor (9221506b) +* restore hostname prop in getActor method (ec3c6b67) +* ActivityPub.get now throws on failure, handle in getActor (7ec75f58) +* send in mocked profile data in follow routes as well (942a9b7e) +* tests (c66b1867) +* isUri helper so that it passes ci tests (27e256d2) +* frontend follow logic, as uid is no longer webfinger slug (fcca9259) +* use simpler getSortedSetRevRange instead of unnecessary zunion call (283e460a) +* accept and undo logic saving improper id into database, updated follow logic so remote follow is not added to collection until an accept is received (759d69e0) +* relax activity-failed condition (3339baac) +* additional refactors and updates to follow/unfollow logic (6a54e009) +* bug where body wasn't properly sent on ap-style content-types (ac344011) +* send actor uris in follow instead of webfinger ids (543daee8) +* some wip code regarding handling a follow activity, remove unfollow activity as that does not exist (f3b0794d) +* accidental double-hash in sign/verify (0eadad84) +* incorrect logic (71e3d26b) +* update proceedOnActivityPub middleware to handle how Mastodon doesn't send the 'Accepts' header (dd480aa4) +* another bad call to request lib (88527884) +* broken call to request lib, tests (8d796170) +* update isJSON test in request lib (510763af) +* handle null actor uri in helpers.query (a21110fd) +* unused require (7f46f07c) +* store remote followed users count separately from local (e794f1d2) +* icon text and bgColor in remote profiles (4324f09c) +* add basic sanity-checking to middleware.validateActivity (99cc60c8) +* incorrect host/hostname usage in well-known test (bcee1c8d) +* save remote follower count separately from local follower count (4218ecc4) +* missing req.body when parsing ActivityPub requests (e6753ce5) +* bugs, more prep to start making calls to self (5d95765e) +* moved .well-known assets to separate router file, added basic webfinger implementation (51d8f3b1) +* **deps:** + * update dependency ace-builds to v1.37.5 (#13058) (76a14de3) + * update dependency fs-extra to v11.3.0 (#13055) (9a401b5b) + * update dependency postcss to v8.5.1 (#13050) (3ba1d264) + * update dependency nodebb-plugin-web-push to v0.7.2 (#13049) (e9a4c42b) + * update dependency nodebb-plugin-2factor to v7.5.8 (#13048) (3827f438) + * update dependency sass to v1.83.4 (#13046) (8e62800b) + * update dependency postcss to v8.5.0 (#13044) (c4c89116) + * update dependency cron to v3.5.0 (#13042) (5e5d920b) + * pin dependencies (#12987) (430d1479) + * update dependency satori to ^0.12.0 (#12995) (05f7b58c) + * update dependency tough-cookie to v5.1.0 (#13039) (34b0cf6b) + * update fontsource monorepo to v5.1.1 (#13029) (b1e87aa9) + * update dependency fetch-cookie to v3.1.0 (#13006) (df69b399) + * update dependency ace-builds to v1.37.4 (#12988) (3a33cd5b) + * update dependency esbuild to v0.24.2 (#12989) (701780fe) + * update dependency sanitize-html to v2.14.0 (#12994) (bfc962b9) + * update dependency ioredis to v5.4.2 (#12993) (7943fcde) + * update dependency cron to v3.4.0 (#13026) (de571d24) + * update dependency sass to v1.83.1 (#13028) (438f4e0a) + * update dependency nodebb-widget-essentials to v7.0.32 (#13027) (de076a21) + * #12683 bump emoji plugin to v6 (e8fda4c0) + * swap ntfy for web-push plugin (aa060d31) + * persona v4 support (83993cad) + * bump markdown (daed7413) + +##### Other Changes + +* fix paranthesis (8fd8079a) +* remove unused utils (7e450e1d) +* remove unused function (26765fe9) +* remove unused (530241e0) +* comment out actor assertion call in Users.getUsersFields (691f6917) +* fix some but not all tests (76453650) +* fix privileges in test runner (aadac705) +* unused requires, linting fixes (3e02efcd) +* additional logging (08f8babd) +* fix eslint errors (47b3ffb9) + +##### Performance Improvements + +* ~18x speedup of /world route (f6f01ba3) +* get rid of exists call, load all attachments in one call (9b8c834e) +* use batch in resolveInboxes (644bcec5) +* get rid of getPidByIndex, use postAtIndex (ad22b54e) +* '-inf' faster (c95075e1) +* move attachments to post hash (291bf7db) + +##### Refactors + +* use helpers.log (40257663) +* add `thumbsOnly` option to thumbs retrieval method so that embeds/attachments don't show up in composer thumbnail modal (51fd65ab) +* split (and remove) activitypub.json file and move strings to more appropriate locations (e4e10636) +* topic thumb logic so that `isDraft` is based on topic existence, and not whether it is a UUID, as remote topics are also UUIDs. (3439fdb6) +* post object schema to its own reference object, added sourceContent as optional value in post data (3073abd9) +* prolly dont need exists check (a42c9a6b) +* buildTopicsSortedSet (c1093c92) +* expose buildRecipients as a main activitypub lib method, call buildReceipients in ap controller actors for notes (5e47b194) +* followers url filtering logic, #12834 (ca683c6d) +* check HTTP signatures on all activitypub requests (8ef0df57) +* simplified ajaxify.check and likely made it equally more confusing (cf6c4c52) +* split out logic to determine ajaxification into exported method (fc4f6a4c) +* standardization; onNewPost internal method to return a superset of post summary (9357e718) +* follow/accept/undo logic to pass the same timestamp throughout the follow's lifetime (e015339c) +* store local follow backreferences for remote users (both followers and following), update actor pruning to take local follow counts into consideration, fixes #12701 (39f92eac) +* collection logic out to an activitypub helper (352857cf) +* context item retrieval logic (20aee8e9) +* announces (c021e7e8) +* single db call (c231ab78) +* actor pruning logic (6227ab90) +* catch errors (f76a5863) +* add method from mentions into core (3eca9785) +* dont need exist check, if post doesnt exist getPostData returns null (b2d03da9) +* User.getUidsByUserslugs, so it works with multiple slugs (eb6fe339) +* suggest topics, use strings for tids (3488a4bf) +* unused winston (869df3c2) +* change to info (d1625d5f) +* remove verbose logs, (2ae58570) +* comment out verbose logs (ba2d1841) +* get rid of noop (eaf43541) +* single cache.del call (9868a728) +* #12553, buildRecipients so that it is separate from addressing in mocks.js (1fa93465) +* use batch.processArray for sending AP messages (ea6e15bf) +* context actor to serve an as:OrderedCollection instead of as:Page, and added context property (as per FEP-7888) to refer to it, changed audience to point to category (4b29a1b9) +* post announce logic to save to separate zset instead of to topic events, closes #12536 (119800d9) +* remove unnecessary flag routes added in 9ab1a2d (53b352d0) +* split activitypub tests to subfolder files (94eafe1d) +* use URLSearchParams instead of multiple encodeURIComponent (844d1402) +* stub routes for category synchronization, refactor remote follow logic to allow categories to conduct follows as well (59a9dd84) +* use a helper to resolve actor URI (b921f8d1) +* use getSortedSetUnion in syncUserInboxes instead (6c1a0fb1) +* use one internal rejection method (ac765f1e) +* use topics.post, topics.reply, and posts.edit in Create(Note), Create(Note), and Update(Note), respectively (f7c8967e) +* use topics.create internal method instead of directly setting topic hash, handle incoming tags for OP (f5a61079) +* assertTopic to only call setObject when it is a new topic (bdcd862c) +* resolveId method, add hostname verification (ed4ccbfc) +* use existing sets for topics (instead of topicRemote, etc.) (ec2b375a) +* activitypub sending to handle signed requests from categories (35819cc9) +* replace JIT actor retrieval with actor assertion and storage logic (ef8cd34b) +* added mocks.note in preparation for AP note retrieval logic, inReplyTo is always populated now, unless new topic (5de4f084) +* simplify remote (un)follow controller (c9feb925) +* guard dispatcher definition so non-Node runtimes won't have issues (2ce14f50) +* generate a topic id when asserting a new topic (2ff70fdd) +* move activitypub-related middlewares to their own file (538776f9) +* simplify mocks.post as it only needs minimal data for saving into db (2bd9e984) +* move mockProfile and mockPost to separate mocks.js (06e15834) +* update ActivityPub.get and all methods calling it to take a uid so that requests can be signed (a1c8c3a0) +* validator check to helper method (2e330d8b) +* move profile mocking logic to discrete method in main activitypub lib (8d4fd9c0) +* update ap libs to use core request lib (5c881d3f) +* update activitypub.getActor to accept either url or webfinger id (68d5e4a8) +* minor restructure to move logic out of main controller file to src/api (c803b212) +* acp tpl + config option (ab3ff320) + +##### Code Style Changes + +* remove unused variable (9f94653b) + +##### Tests + +* fix spec (b80f0dab) +* missing ; (866588f7) +* fix guest handles in onNewPost (81f7371a) +* have actor assertion always use cache for tests (ad05f06b) +* fix broken test in category follows (4949d6c4) +* add attachments (6042f4a7) +* refactor tests to support additional Note tests (0c0f01b5) +* use encoded parameters in webfinger tests (8fd4ae2d) +* fix well-known error code repsonse (175521ba) +* refactor AP tests (42a09241) +* fix tests (e138b915) +* fix tests to reflect new immutable IDs, and added new tests for resource retrieval (42bb3c33) +* fix error copy (91a509c4) +* allow http proto on ci (24c1dfac) +* fixed improper signed_string reconstruction in `.verify()` (cc0d1886) +* fix webfinger test (9dfa1b72) +* added passing test cases for .sign() and .verify() (a10df987) +* updated activitypub test suite (1c8e13bb) +* added test cases for activitypub integration, WIP (4bd8d28a) + +#### v3.12.4 (2025-01-20) + +##### Chores + +* up harmony (cfb22da1) +* up harmony (d0715ca4) +* incrementing version number - v3.12.3 (abb2417e) +* update changelog for v3.12.3 (0cc94bbe) +* incrementing version number - v3.12.2 (a1269b39) +* incrementing version number - v3.12.1 (944c4e66) +* incrementing version number - v3.12.0 (052c195e) +* incrementing version number - v3.11.1 (0c0dd480) +* incrementing version number - v3.11.0 (acf27e85) +* incrementing version number - v3.10.3 (57d54224) +* incrementing version number - v3.10.2 (2f15f464) +* incrementing version number - v3.10.1 (cca3a644) +* incrementing version number - v3.10.0 (b60a9b4e) +* incrementing version number - v3.9.1 (f120c91c) +* incrementing version number - v3.9.0 (4880f32d) +* incrementing version number - v3.8.4 (4833f9a6) +* incrementing version number - v3.8.3 (97ce2c44) +* incrementing version number - v3.8.2 (72d91251) +* incrementing version number - v3.8.1 (527326f7) +* incrementing version number - v3.8.0 (e228a6eb) +* incrementing version number - v3.7.5 (6882894d) +* incrementing version number - v3.7.4 (6678744c) +* incrementing version number - v3.7.3 (2d62b6f6) +* incrementing version number - v3.7.2 (cc257e7e) +* incrementing version number - v3.7.1 (712365a5) +* incrementing version number - v3.7.0 (9a6153d7) +* incrementing version number - v3.6.7 (86a17e38) +* incrementing version number - v3.6.6 (6604bf37) +* incrementing version number - v3.6.5 (6c653625) +* incrementing version number - v3.6.4 (83d131b4) +* incrementing version number - v3.6.3 (fc7d2bfd) +* incrementing version number - v3.6.2 (0f577a57) +* incrementing version number - v3.6.1 (f1a69468) +* incrementing version number - v3.6.0 (4cdf85f8) +* incrementing version number - v3.5.3 (ed0e8783) +* incrementing version number - v3.5.2 (52fbb2da) +* incrementing version number - v3.5.1 (4c543488) * incrementing version number - v3.5.0 (d06fb4f0) -* update changelog for v3.5.0 (5d7c10f1) * incrementing version number - v3.4.3 (5c984250) * incrementing version number - v3.4.2 (3f0dac38) * incrementing version number - v3.4.1 (01e69574) @@ -33,6 +4517,1865 @@ * incrementing version number - v3.0.1 (26f6ea49) * incrementing version number - v3.0.0 (224e08cd) +##### Bug Fixes + +* 404 request if payload invalid (de021bda) +* add HEAD check to unsub route (205bf477) + +#### v3.12.3 (2025-01-15) + +##### Chores + +* up harmony (5120d117) +* up 2factor (c6eaea30) +* incrementing version number - v3.12.2 (a1269b39) +* update changelog for v3.12.2 (98e5d1b5) +* incrementing version number - v3.12.1 (944c4e66) +* incrementing version number - v3.12.0 (052c195e) +* incrementing version number - v3.11.1 (0c0dd480) +* incrementing version number - v3.11.0 (acf27e85) +* incrementing version number - v3.10.3 (57d54224) +* incrementing version number - v3.10.2 (2f15f464) +* incrementing version number - v3.10.1 (cca3a644) +* incrementing version number - v3.10.0 (b60a9b4e) +* incrementing version number - v3.9.1 (f120c91c) +* incrementing version number - v3.9.0 (4880f32d) +* incrementing version number - v3.8.4 (4833f9a6) +* incrementing version number - v3.8.3 (97ce2c44) +* incrementing version number - v3.8.2 (72d91251) +* incrementing version number - v3.8.1 (527326f7) +* incrementing version number - v3.8.0 (e228a6eb) +* incrementing version number - v3.7.5 (6882894d) +* incrementing version number - v3.7.4 (6678744c) +* incrementing version number - v3.7.3 (2d62b6f6) +* incrementing version number - v3.7.2 (cc257e7e) +* incrementing version number - v3.7.1 (712365a5) +* incrementing version number - v3.7.0 (9a6153d7) +* incrementing version number - v3.6.7 (86a17e38) +* incrementing version number - v3.6.6 (6604bf37) +* incrementing version number - v3.6.5 (6c653625) +* incrementing version number - v3.6.4 (83d131b4) +* incrementing version number - v3.6.3 (fc7d2bfd) +* incrementing version number - v3.6.2 (0f577a57) +* incrementing version number - v3.6.1 (f1a69468) +* incrementing version number - v3.6.0 (4cdf85f8) +* incrementing version number - v3.5.3 (ed0e8783) +* incrementing version number - v3.5.2 (52fbb2da) +* incrementing version number - v3.5.1 (4c543488) +* incrementing version number - v3.5.0 (d06fb4f0) +* incrementing version number - v3.4.3 (5c984250) +* incrementing version number - v3.4.2 (3f0dac38) +* incrementing version number - v3.4.1 (01e69574) +* incrementing version number - v3.4.0 (fd9247c5) +* incrementing version number - v3.3.9 (5805e770) +* incrementing version number - v3.3.8 (a5603565) +* incrementing version number - v3.3.7 (b26f1744) +* incrementing version number - v3.3.6 (7fb38792) +* incrementing version number - v3.3.4 (a67f84ea) +* incrementing version number - v3.3.3 (f94d239b) +* incrementing version number - v3.3.2 (ec9dac97) +* incrementing version number - v3.3.1 (151cc68f) +* incrementing version number - v3.3.0 (fc1ad70f) +* incrementing version number - v3.2.3 (b06d3e63) +* incrementing version number - v3.2.2 (758ecfcd) +* incrementing version number - v3.2.1 (20145074) +* incrementing version number - v3.2.0 (9ecac38e) +* incrementing version number - v3.1.7 (0b4e81ab) +* incrementing version number - v3.1.6 (b3a3b130) +* incrementing version number - v3.1.5 (ec19343a) +* incrementing version number - v3.1.4 (2452783c) +* incrementing version number - v3.1.3 (3b4e9d3f) +* incrementing version number - v3.1.2 (40fa3489) +* incrementing version number - v3.1.1 (40250733) +* incrementing version number - v3.1.0 (0cb386bd) +* incrementing version number - v3.0.1 (26f6ea49) +* incrementing version number - v3.0.0 (224e08cd) + +##### Bug Fixes + +* closes #13051, catch errors from widget render (168e6b2c) +* for attribute label (e89b7ec8) +* don't confirm emails on HEAD request (45eabbf5) + +##### Performance Improvements + +* closes #13052, only call loadConfig once per page (539693a4) + +#### v3.12.2 (2025-01-08) + +##### Chores + +* remove log (2f5effda) +* up markdown (0a135d88) +* up deps (48944a86) +* up composer-default (80ddc03a) +* up harmony (5b2dfd74) +* incrementing version number - v3.12.1 (944c4e66) +* update changelog for v3.12.1 (22606767) +* incrementing version number - v3.12.0 (052c195e) +* incrementing version number - v3.11.1 (0c0dd480) +* incrementing version number - v3.11.0 (acf27e85) +* incrementing version number - v3.10.3 (57d54224) +* incrementing version number - v3.10.2 (2f15f464) +* incrementing version number - v3.10.1 (cca3a644) +* incrementing version number - v3.10.0 (b60a9b4e) +* incrementing version number - v3.9.1 (f120c91c) +* incrementing version number - v3.9.0 (4880f32d) +* incrementing version number - v3.8.4 (4833f9a6) +* incrementing version number - v3.8.3 (97ce2c44) +* incrementing version number - v3.8.2 (72d91251) +* incrementing version number - v3.8.1 (527326f7) +* incrementing version number - v3.8.0 (e228a6eb) +* incrementing version number - v3.7.5 (6882894d) +* incrementing version number - v3.7.4 (6678744c) +* incrementing version number - v3.7.3 (2d62b6f6) +* incrementing version number - v3.7.2 (cc257e7e) +* incrementing version number - v3.7.1 (712365a5) +* incrementing version number - v3.7.0 (9a6153d7) +* incrementing version number - v3.6.7 (86a17e38) +* incrementing version number - v3.6.6 (6604bf37) +* incrementing version number - v3.6.5 (6c653625) +* incrementing version number - v3.6.4 (83d131b4) +* incrementing version number - v3.6.3 (fc7d2bfd) +* incrementing version number - v3.6.2 (0f577a57) +* incrementing version number - v3.6.1 (f1a69468) +* incrementing version number - v3.6.0 (4cdf85f8) +* incrementing version number - v3.5.3 (ed0e8783) +* incrementing version number - v3.5.2 (52fbb2da) +* incrementing version number - v3.5.1 (4c543488) +* incrementing version number - v3.5.0 (d06fb4f0) +* incrementing version number - v3.4.3 (5c984250) +* incrementing version number - v3.4.2 (3f0dac38) +* incrementing version number - v3.4.1 (01e69574) +* incrementing version number - v3.4.0 (fd9247c5) +* incrementing version number - v3.3.9 (5805e770) +* incrementing version number - v3.3.8 (a5603565) +* incrementing version number - v3.3.7 (b26f1744) +* incrementing version number - v3.3.6 (7fb38792) +* incrementing version number - v3.3.4 (a67f84ea) +* incrementing version number - v3.3.3 (f94d239b) +* incrementing version number - v3.3.2 (ec9dac97) +* incrementing version number - v3.3.1 (151cc68f) +* incrementing version number - v3.3.0 (fc1ad70f) +* incrementing version number - v3.2.3 (b06d3e63) +* incrementing version number - v3.2.2 (758ecfcd) +* incrementing version number - v3.2.1 (20145074) +* incrementing version number - v3.2.0 (9ecac38e) +* incrementing version number - v3.1.7 (0b4e81ab) +* incrementing version number - v3.1.6 (b3a3b130) +* incrementing version number - v3.1.5 (ec19343a) +* incrementing version number - v3.1.4 (2452783c) +* incrementing version number - v3.1.3 (3b4e9d3f) +* incrementing version number - v3.1.2 (40fa3489) +* incrementing version number - v3.1.1 (40250733) +* incrementing version number - v3.1.0 (0cb386bd) +* incrementing version number - v3.0.1 (26f6ea49) +* incrementing version number - v3.0.0 (224e08cd) + +##### New Features + +* add -y flag to upgrade, closes #13023 (4f682a31) +* add missing default notification settings (d155da3c) +* closes #13001, allow keyboard to change cover position (45c5351f) +* use displayname for user image titles (52366101) + +##### Bug Fixes + +* closes #13036, if image isn't loaded yet width is 0 (d05c203b) +* closes #13024, on register dont auto login with user doesn't have local:login privilege (238a3ed5) +* closes #13022, don't do anything if notif setting isnt set to email (fcf50a3c) +* closes #13019, use displayname in vote tooltip (dcc2342c) +* overflow on dashboard/searches (1b13cce2) +* #13011, catch errors (25655d5a) +* truncate popular search terms, closes #13010 (2f72e32d) +* #13007, replace $ with \uFF04, like . (c60cee59) +* dont stripEXIF from gifs (f478adac) +* closes #13008, catch errors in post redirect (77521494) +* test on redis (a6f0eba5) +* convert to str than filter (c69fa811) +* closes #13002, make chats keyboard focusable (e71feeec) +* js error when clicking a notification (d40762b7) +* don't close search if children have focus, closes #13004 (1cb7bb6a) +* #12991, switch to nodemailer address object (a489abc7) +* make fork/move dropdowns go up (89b8de50) + +##### Other Changes + +* whitespace (27e945fd) +* index.js (7bfca7ba) +* //github.com/NodeBB/NodeBB/issues/13018 (68f73fd0) + +##### Refactors + +* silence deprecations in prod (d75b169c) +* check if useragent exists firt (a0e66816) +* get rid of RegExp (e4dd697a) +* remove debug (646b9ea7) + +##### Tests + +* fix spec (23298060) +* remove resizeImageWidth (25f1fa67) +* editor tests (82538ca3) +* missing service worker test (e845afc1) +* add last one (54233dcd) +* custom fields tests (ae2bd5ab) +* fix controller tests (b129c6c0) +* missing translator tests (0d3a8757) +* fix relative path in tests (127e0e22) +* add translateInPlace test (225c91ed) +* subfolder in category link (407b0cc6) +* add helper tests (95b42f83) +* debounce/throttle (d5ae91a3) +* add back disabled test since node 18 is minimum (8864e658) +* fix user picture test (29804a10) +* fix thumb test (fa24f1dd) + +#### v3.12.1 (2024-12-20) + +##### Chores + +* up harmony (18904bbb) +* up persona (b4ec3a6a) +* incrementing version number - v3.12.0 (052c195e) +* update changelog for v3.12.0 (5395062d) +* incrementing version number - v3.11.1 (0c0dd480) +* incrementing version number - v3.11.0 (acf27e85) +* incrementing version number - v3.10.3 (57d54224) +* incrementing version number - v3.10.2 (2f15f464) +* incrementing version number - v3.10.1 (cca3a644) +* incrementing version number - v3.10.0 (b60a9b4e) +* incrementing version number - v3.9.1 (f120c91c) +* incrementing version number - v3.9.0 (4880f32d) +* incrementing version number - v3.8.4 (4833f9a6) +* incrementing version number - v3.8.3 (97ce2c44) +* incrementing version number - v3.8.2 (72d91251) +* incrementing version number - v3.8.1 (527326f7) +* incrementing version number - v3.8.0 (e228a6eb) +* incrementing version number - v3.7.5 (6882894d) +* incrementing version number - v3.7.4 (6678744c) +* incrementing version number - v3.7.3 (2d62b6f6) +* incrementing version number - v3.7.2 (cc257e7e) +* incrementing version number - v3.7.1 (712365a5) +* incrementing version number - v3.7.0 (9a6153d7) +* incrementing version number - v3.6.7 (86a17e38) +* incrementing version number - v3.6.6 (6604bf37) +* incrementing version number - v3.6.5 (6c653625) +* incrementing version number - v3.6.4 (83d131b4) +* incrementing version number - v3.6.3 (fc7d2bfd) +* incrementing version number - v3.6.2 (0f577a57) +* incrementing version number - v3.6.1 (f1a69468) +* incrementing version number - v3.6.0 (4cdf85f8) +* incrementing version number - v3.5.3 (ed0e8783) +* incrementing version number - v3.5.2 (52fbb2da) +* incrementing version number - v3.5.1 (4c543488) +* incrementing version number - v3.5.0 (d06fb4f0) +* incrementing version number - v3.4.3 (5c984250) +* incrementing version number - v3.4.2 (3f0dac38) +* incrementing version number - v3.4.1 (01e69574) +* incrementing version number - v3.4.0 (fd9247c5) +* incrementing version number - v3.3.9 (5805e770) +* incrementing version number - v3.3.8 (a5603565) +* incrementing version number - v3.3.7 (b26f1744) +* incrementing version number - v3.3.6 (7fb38792) +* incrementing version number - v3.3.4 (a67f84ea) +* incrementing version number - v3.3.3 (f94d239b) +* incrementing version number - v3.3.2 (ec9dac97) +* incrementing version number - v3.3.1 (151cc68f) +* incrementing version number - v3.3.0 (fc1ad70f) +* incrementing version number - v3.2.3 (b06d3e63) +* incrementing version number - v3.2.2 (758ecfcd) +* incrementing version number - v3.2.1 (20145074) +* incrementing version number - v3.2.0 (9ecac38e) +* incrementing version number - v3.1.7 (0b4e81ab) +* incrementing version number - v3.1.6 (b3a3b130) +* incrementing version number - v3.1.5 (ec19343a) +* incrementing version number - v3.1.4 (2452783c) +* incrementing version number - v3.1.3 (3b4e9d3f) +* incrementing version number - v3.1.2 (40fa3489) +* incrementing version number - v3.1.1 (40250733) +* incrementing version number - v3.1.0 (0cb386bd) +* incrementing version number - v3.0.1 (26f6ea49) +* incrementing version number - v3.0.0 (224e08cd) + +##### Bug Fixes + +* check install.values, it can be undefined (9bb8002a) + +#### v3.12.0 (2024-12-18) + +##### Chores + +* **deps:** + * update dependency @commitlint/cli to v19.6.1 (#12981) (f25312a8) + * update dependency sass-embedded to v1.83.0 (#12974) (c4399dd0) + * update dependency lint-staged to v15.2.11 (#12964) (607d1895) + * update dependency sass-embedded to v1.82.0 (#12951) (6e2b33b7) + * update dependency mocha to v11 (#12954) (55ad7af8) +* up harmony (831422d0) +* up peace, refactor widgets (0f5e1457) +* up themes (a79426f9) +* up harmony (5045a1ae) +* up harmony (03b9df08) +* remove lines re: incrementing version number, in changelog (cc6963f2) +* up themes (e0c345b2) +* up persona (2a085cdb) +* incrementing version number - v3.11.1 (0c0dd480) +* update changelog for v3.11.1 (fee57816) +* up themes (e532dcb4) +* up spam-be-gone (3a7e9733) +* up peace (a72c067f) +* up themes (a4a752bb) +* up mentions (4db5a5b6) +* incrementing version number - v3.11.0 (acf27e85) +* incrementing version number - v3.10.3 (57d54224) +* incrementing version number - v3.10.2 (2f15f464) +* incrementing version number - v3.10.1 (cca3a644) +* incrementing version number - v3.10.0 (b60a9b4e) +* incrementing version number - v3.9.1 (f120c91c) +* incrementing version number - v3.9.0 (4880f32d) +* incrementing version number - v3.8.4 (4833f9a6) +* incrementing version number - v3.8.3 (97ce2c44) +* incrementing version number - v3.8.2 (72d91251) +* incrementing version number - v3.8.1 (527326f7) +* incrementing version number - v3.8.0 (e228a6eb) +* incrementing version number - v3.7.5 (6882894d) +* incrementing version number - v3.7.4 (6678744c) +* incrementing version number - v3.7.3 (2d62b6f6) +* incrementing version number - v3.7.2 (cc257e7e) +* incrementing version number - v3.7.1 (712365a5) +* incrementing version number - v3.7.0 (9a6153d7) +* incrementing version number - v3.6.7 (86a17e38) +* incrementing version number - v3.6.6 (6604bf37) +* incrementing version number - v3.6.5 (6c653625) +* incrementing version number - v3.6.4 (83d131b4) +* incrementing version number - v3.6.3 (fc7d2bfd) +* incrementing version number - v3.6.2 (0f577a57) +* incrementing version number - v3.6.1 (f1a69468) +* incrementing version number - v3.6.0 (4cdf85f8) +* incrementing version number - v3.5.3 (ed0e8783) +* incrementing version number - v3.5.2 (52fbb2da) +* incrementing version number - v3.5.1 (4c543488) +* incrementing version number - v3.5.0 (d06fb4f0) +* incrementing version number - v3.4.3 (5c984250) +* incrementing version number - v3.4.2 (3f0dac38) +* incrementing version number - v3.4.1 (01e69574) +* incrementing version number - v3.4.0 (fd9247c5) +* incrementing version number - v3.3.9 (5805e770) +* incrementing version number - v3.3.8 (a5603565) +* incrementing version number - v3.3.7 (b26f1744) +* incrementing version number - v3.3.6 (7fb38792) +* incrementing version number - v3.3.4 (a67f84ea) +* incrementing version number - v3.3.3 (f94d239b) +* incrementing version number - v3.3.2 (ec9dac97) +* incrementing version number - v3.3.1 (151cc68f) +* incrementing version number - v3.3.0 (fc1ad70f) +* incrementing version number - v3.2.3 (b06d3e63) +* incrementing version number - v3.2.2 (758ecfcd) +* incrementing version number - v3.2.1 (20145074) +* incrementing version number - v3.2.0 (9ecac38e) +* incrementing version number - v3.1.7 (0b4e81ab) +* incrementing version number - v3.1.6 (b3a3b130) +* incrementing version number - v3.1.5 (ec19343a) +* incrementing version number - v3.1.4 (2452783c) +* incrementing version number - v3.1.3 (3b4e9d3f) +* incrementing version number - v3.1.2 (40fa3489) +* incrementing version number - v3.1.1 (40250733) +* incrementing version number - v3.1.0 (0cb386bd) +* incrementing version number - v3.0.1 (26f6ea49) +* incrementing version number - v3.0.0 (224e08cd) +* **i18n:** + * fallback strings for new resources: nodebb.admin-extend-plugins (6b5b9a4e) + * fallback strings for new resources: nodebb.admin-extend-plugins (26a1a2f1) + * fallback strings for new resources: nodebb.admin-settings-uploads (0c665342) + * fallback strings for new resources: nodebb.admin-manage-user-custom-fields (1c33285a) + +##### New Features + +* add support for saas_plan (68198e8a) +* add some missing canonical tags, closes #12961 (e6bdbb6b) +* use displayname in chat teasers/userlist, in digest email (69a08c0f) +* add "keep original image after resize" option (9a635870) +* add visibility option to, closes #12942 (77382e3b) + +##### Bug Fixes + +* **deps:** + * update dependency ace-builds to v1.37.0 (#12983) (808e483e) + * update dependency @fortawesome/fontawesome-free to v6.7.2 (#12982) (69214d79) + * update dependency terser-webpack-plugin to v5.3.11 (#12973) (a054cbd7) + * update dependency sass to v1.83.0 (#12975) (7f020037) + * update dependency nodebb-theme-peace to v2.2.30 (#12970) (645bddb8) + * update dependency cron to v3.3.1 (#12969) (b8a0a502) + * update dependency jsesc to v3.1.0 (#12968) (3a8ae12c) + * update dependency cron to v3.3.0 (#12965) (0913c307) + * update dependency mongodb to v6.12.0 (#12966) (3d33c5cb) + * update dependency nodebb-theme-peace to v2.2.29 (#12967) (6b77441b) + * update dependency express to v4.21.2 (#12955) (55a07bcb) + * update dependency chart.js to v4.4.7 (#12950) (300ca704) + * update dependency sass to v1.82.0 (#12952) (3bd447be) + * update dependency webpack to v5.97.1 (#12953) (122d3841) + * update dependency connect-redis to v8.0.1 (#12944) (38d904b2) + * update dependency sortablejs to v1.15.6 (#12943) (694827cf) +* closes #12980, properly reset all plugins with `./nodebb reset -a` (f0aa960c) +* chat header line-height (8883eaf7) +* make sure theme screenshot starts with themeDir (3b713afe) +* closes #12963, change translation to general (04eb9e1a) +* race condition that results in 2x localReset call the same process (c25fd40a) +* closes #12962, fix js error for guests on /users (4568ec3e) +* closes #12957, don't overflow thumbs modal if filename is too long (c8a38667) +* escape about me on user flags (26026fb2) +* issue where clicking on a topic thumb caused a page nav, fixes #12948 (5b60aee6) +* users page QoL improvements (2e0a1751) + +##### Other Changes + +* missing semi (0495842f) +* long line (c69765e3) +* update connect-redis to 8 (8c5d7c4d) + +##### Refactors + +* closes #12979, show plugin id/version on semver error (abcb200f) +* move to saas plugin (27867d77) +* check if caches have the requested cache name (38520769) +* add csrf protection to webinstall POST route (8f465afc) +* explicit settings/appearance routes (bb0ff6d6) +* only send required fields in query (76caa92c) +* replace math.random with crypto (9d2af7e1) +* remove "password" in comments (fe811537) + +##### Tests + +* fix spec (68f87ccf) +* add missing field (456373c5) +* add missing spec files (6eb28077) +* remove routes that no longer exist (468d930a) +* fix test (b05dc7f7) + +#### v3.11.1 (2024-12-09) + +##### Chores + +* **config:** migrate config renovate.json (#12960) (14f698f9) +* up spam-be-gone (e5c8deb8) +* update changelog for v3.11.0 (0333d263) + +##### Bug Fixes + +* escape about me on user flags (4e69bff7) + +#### v3.11.0 (2024-11-27) + +##### Chores + +* **i18n:** + * fallback strings for new resources: nodebb.admin-settings-reputation, nodebb.error (985e5e3d) + * fallback strings for new resources: nodebb.admin-manage-user-custom-fields, nodebb.error (174be398) + * fallback strings for new resources: nodebb.error (b676c220) + * fallback strings for new resources: nodebb.admin-manage-user-custom-fields (b89036cd) + * fallback strings for new resources: nodebb.admin-settings-uploads (e3ef858b) + * fallback strings for new resources: nodebb.admin-manage-users, nodebb.error (15e16704) + * fallback strings for new resources: nodebb.topic (9fd5ca27) + * fallback strings for new resources: nodebb.pages, nodebb.user (1c26048f) +* migrate admin/settings/social.json into admin/settings/general.json (206613dd) +* migrate admin/settings/languages.json into admin/settings/general.json (ab143b1d) +* migrate admin/settings/homepage.json into admin/settings/general.json (a7678185) +* combine admin/settings/guest.json language file into admin/settings/user.json (3f14373c) +* up themes (388a156d) +* up harmony (2324a5bf) +* up harmony (03cea237) +* up themes (2ec3d1af) +* up themes (965ca636) +* up persona (1a4a9d08) +* up peace (acd42c23) +* up peace (7179a280) +* up peace (bcf8dee2) +* up peace (524b2b76) +* up themes (4ad082b4) +* up peace (953ea609) +* up widgets (6a71fd24) +* up harmony (f13b7f8d) +* up persona (6f89bf6b) +* up persona (79c93c85) +* up themes (d63a828d) +* up themes (6aa8f1b6) +* up peace (a4d8baf3) +* up themes (24e9adf6) +* up persona (baff68b4) +* up peace (c4b50607) +* up lavender (c32c63aa) +* up lavender (66214bea) +* update tx config (4ce387b9) +* up themes (65f64eba) +* up themes (280e7613) +* up widgets (b13bd803) +* update changelog for v3.10.3 (83965385) +* up harmony (f6f1d906) +* up harmony (9426fd1a) +* **deps:** + * update commitlint monorepo to v19.6.0 (#12920) (151e0164) + * update postgres docker tag to v17.2 (#12931) (036f4564) + * update postgres docker tag to v17.1 (#12915) (0d0f9144) + * update dependency sass-embedded to v1.81.0 (#12914) (ff258028) + * update dependency sass-embedded to v1.80.6 (#12894) (37f877b3) + * update dependency sass-embedded to v1.80.5 (#12889) (383f332c) + * update dependency mocha to v10.8.2 (#12884) (d86bedf8) + * update coverallsapp/github-action action to v2.3.4 (#12867) (351bcdbf) + * update dependency sass-embedded to v1.80.4 (#12861) (be0c92ec) + * update dependency smtp-server to v3.13.6 (#12859) (a0804485) + * update coverallsapp/github-action action to v2.3.3 (#12854) (48b09f1d) + * update coverallsapp/github-action action to v2.3.2 (#12846) (c16192dc) + * update dependency sass-embedded to v1.79.5 (#12850) (6f227264) + * update dependency eslint-plugin-import to v2.31.0 (#12832) (cc2e0e9f) + * update redis docker tag to v7.4.1 (#12836) (e7cba341) + * update mongo docker tag to v8 (#12810) (2fd89558) + * update dependency sass-embedded to v1.79.4 (#12825) (24928b17) + * update postgres docker tag to v17 (#12829) (d7299f90) + +##### New Features + +* use displayname in chat system messages, closes #12937 (e6f78d25) +* move website/location fields into custom user fields (669c9c50) +* add pagination to groups page, api routes (49e0e1ab) +* add date and multiselect custom fields (9cf85ced) +* new language file for user custom fields (05fb8aa5) +* closes #12902, allow adding users as post editors (bc00df3c) +* added nn_NO, takk\! (b9eff72d) +* add read topics route (757d7101) + +##### Bug Fixes + +* update acp template to use new lang keys (bc5b91aa) +* spec, dont show registered-users, verified-users, unverified-users in manage groups (8605584f) +* #12927, give more right padding on FF (5b3b003d) +* dont show chat upload btn if maxFileSize is 0, #12926 (14125858) +* dont allow core user fields to be used as custom fields (836e8458) +* button to match category dropdown (5e9b7b44) +* filter undefined posts/topics (db291ecd) +* don't crash if post is undefined (d4770908) +* spec (d5c9c0ba) +* block search showing old matches (a9fc13dd) +* missing template (008ad1e3) +* naive checking to handle uploaded images whose filenames end with '-resized' (1268ed50) +* update copy to reflect real default value of 2000px for `resizeImageWidthThreshold` (4614958b) +* editor removal (977d80c1) +* add warning txt file for nn-NO (23b3a64a) +* incorrect folder syntax for nn_NO (396c7766) +* use postData.topic.title instead of topicData.title (d24bc5c5) +* another missing await (10a85e94) +* **deps:** + * update dependency sortablejs to v1.15.4 (#12934) (2db5b815) + * update dependency nodebb-plugin-2factor to v7.5.7 (#12930) (f9c4815a) + * update dependency @fortawesome/fontawesome-free to v6.7.1 (#12929) (80b4d10b) + * update dependency mongodb to v6.11.0 (#12932) (c3b42c85) + * update dependency @fortawesome/fontawesome-free to v6.7.0 (#12921) (a3042479) + * update dependency ace-builds to v1.36.5 (#12913) (68637633) + * update dependency sass to v1.81.0 (#12916) (ee91e516) + * update dependency cron to v3.2.1 (#12911) (42791287) + * update dependency postcss to v8.4.49 (#12910) (85f55695) + * update dependency winston to v3.17.0 (#12906) (87c276dd) + * update dependency postcss to v8.4.48 (#12907) (aa57b248) + * update dependency nodebb-theme-peace to v2.2.8 (#12901) (8af37a7d) + * update dependency cron to v3.1.9 (#12899) (87ec8637) + * update dependency ace-builds to v1.36.4 (#12898) (3aa0fa61) + * update dependency winston to v3.16.0 (#12896) (a4f75ca1) + * update dependency compression to v1.7.5 (#12890) (f5439d95) + * update dependency webpack to v5.96.1 (#12895) (3d847a5a) + * update dependency sass to v1.80.6 (#12892) (c5dd8b67) + * update dependency jquery-ui to v1.14.1 (#12891) (3fb6587a) + * update dependency nodebb-plugin-composer-default to v10.2.42 (#12888) (2cb2ac3a) + * update dependency cron to v3.1.8 (#12881) (8ae2f503) + * update dependency chart.js to v4.4.6 (#12876) (89bd1a24) + * update dependency nodemailer to v6.9.16 (#12874) (51cb249e) + * update dependency pg-cursor to v2.12.1 (#12870) (e3203b66) + * update dependency pg to v8.13.1 (#12869) (b628013d) + * update socket.io packages to v4.8.1 (#12871) (cdd9caa7) + * update dependency nodebb-theme-harmony to v1.2.77 (#12868) (d30e1f91) + * update dependency mongodb to v6.10.0 (#12862) (6da24583) + * update dependency ace-builds to v1.36.3 (#12860) (8d8243c4) + * update dependency sass to v1.80.4 (#12855) (80034ae8) + * update socket.io packages to v4.8.0 (#12815) (4788e2a3) + * update dependency chart.js to v4.4.5 (#12852) (c504b49f) + * update dependency workerpool to v9.2.0 (#12851) (8dfb2237) + * update dependency sass to v1.79.5 (#12847) (ab859aec) + * update dependency cookie-parser to v1.4.7 (#12842) (526faf07) + * update dependency express to v4.21.1 (#12843) (0e7f11bd) + * update dependency express-session to v1.18.1 (#12844) (38c1072f) + * update dependency sanitize-html to v2.13.1 (#12839) (5159552d) + * update dependency winston to v3.15.0 (#12840) (29826cf2) + * update dependency webpack to v5.95.0 (#12828) (55faa8a2) + * update dependency sass to v1.79.4 (#12826) (376ac905) + * update dependency helmet to v7.2.0 (#12827) (5acf0398) + * update dependency nodebb-theme-harmony to v1.2.71 (#12820) (b1993ff0) + +##### Other Changes + +* remove unused utils (0e4fc531) +* remove unused utils (b6a79365) +* //github.com/NodeBB/NodeBB/issues/12824 (c4a60dbb) + +##### Refactors + +* shorter check for showfullname (6ebff2e1) +* remove unused uids (20da7148) +* no category sharing for a long time (6af5cef7) +* move flags into core (3dff083d) +* add some margin bottom to bs tags (40758b32) +* post queue btn and dropdown (038fb71e) +* search logic to use switch..case (bd76ccf0) + +##### Tests + +* fix tests (173c604a) +* fix crash due to excludeGroups (61d43ee1) +* fix spec (70d99501) +* fix spec (c586854a) +* update spec on plugins (f9178a39) + +#### v3.10.3 (2024-10-23) + +##### Chores + +* update changelog for v3.10.2 (e780120a) + +##### Bug Fixes + +* add missing await (0082ac98) +* closes #12858 (e6ab4b07) +* don't crash if profile folder doesn't exist (8a89c5d7) + +#### v3.10.2 (2024-10-18) + +##### Chores + +* update changelog for v3.10.1 (d63a8cca) + +##### Bug Fixes + +* closes #12848, add missing purge class (64779352) + +##### Performance Improvements + +* make unread faster if there are 60k+ unread topics (f53f1394) + +##### Refactors + +* single line (120b184e) +* hide modal and show alert on success (a309918e) +* more immediate feedback on category purge (72ccb870) + +#### v3.10.1 (2024-10-09) + +##### Chores + +* up composer (a5f3d097) +* update changelog for v3.10.0 (a9da495d) + +##### Bug Fixes + +* **deps:** bump 2factor (712767f6) + +##### Refactors + +* don't block ./nodebb upgrade if suggested modules are not loaded (39f57f9e) + +#### v3.10.0 (2024-09-25) + +##### Chores + +* move service worker generation code to its own controller file (c153c469) +* **deps:** + * update dependency jsdom to v25.0.1 (#12816) (9a24eb7e) + * update dependency sass-embedded to v1.79.3 (#12813) (e0cb1d26) + * update dependency sass-embedded to v1.79.2 (#12811) (8a6ced2d) + * update dependency nyc to v17.1.0 (#12806) (d55c3f03) + +##### New Features + +* port updated service worker code to `develop`, allow plugins to define scripts to import into service worker (979954c2) + +##### Bug Fixes + +* **deps:** + * update dependency esbuild to v0.24.0 (#12817) (8c148bc4) + * update dependency commander to v12.1.0 (#12587) (c7d4db8c) + * update dependency sass to v1.79.3 (#12814) (f0cdc249) + * update dependency sass to v1.79.2 (#12812) (2a5d481f) + * update dependency nodebb-widget-essentials to v7.0.29 (#12805) (86c2caed) + +##### Refactors + +* silence saas deprecations on prod (3fdec51a) + +#### v3.9.1 (2024-09-25) + +##### Chores + +* up themes (8bca9768) +* up widgets (41c73de5) +* update changelog for v3.9.0 (c3d97c6c) + +##### Bug Fixes + +* closes #12819, add helper to escape tx strings (7d0c2cb6) +* closes #12807, fix quick reply js error (06ac0c99) + +##### Refactors + +* silence saas deprecations on prod (05e4307e) +* remove deprecation warnings, still used from widgets (3cee59f9) + +#### v3.9.0 (2024-09-18) + +##### Chores + +* **deps:** + * update dependency sass-embedded to v1.79.1 (#12803) (fa75a7e0) + * update dependency eslint to v8.57.1 (#12800) (fc9f0e8c) + * update commitlint monorepo to v19.5.0 (#12790) (b25e7639) + * update dependency smtp-server to v3.13.5 (#12781) (98957726) + * update dependency eslint-plugin-import to v2.30.0 (#12771) (2460b050) + * update redis docker tag to v7.4.0 (#12712) (a2a30ebd) + * update dependency sass-embedded to v1.78.0 (#12772) (fde0a65a) + * update dependency lint-staged to v15.2.10 (#12767) (a55b985e) + * update commitlint monorepo to v19.4.1 (#12762) (f608f786) + * update dependency jsdom to v25 (#12756) (e8abf502) + * update dependency jsdom to v24.1.3 (#12755) (07151f8a) + * update dependency lint-staged to v15.2.9 (#12730) (1b6572bb) + * update dependency mocha to v10.7.3 (#12723) (e0850ef7) + * update postgres docker tag to v16.4 (#12726) (948d3080) + * update dependency @commitlint/cli to v19.4.0 (#12725) (bf5c1855) + * update dependency lint-staged to v15.2.8 (#12717) (d0e6cd8f) + * update dependency jsdom to v24.1.1 (#12705) (f35068e6) + * update dependency mocha to v10.7.0 (#12704) (4609083e) + * update dependency sass-embedded to v1.77.8 (#12691) (39bcc903) + * update dependency mocha to v10.6.0 (#12672) (8ea9b4a8) + * update dependency mocha to v10.5.2 (#12657) (1933b765) + * update dependency mocha to v10.5.1 (#12651) (35053887) + * update docker/build-push-action action to v6 (#12641) (a78cd1b4) + * update dependency lint-staged to v15.2.7 (#12638) (d023933d) + * update dependency nyc to v17 (#12627) (31186b8c) + * update dependency sass-embedded to v1.77.5 (#12639) (66f66ede) + * update dependency jsdom to v24.1.0 (#12601) (91e79c22) + * update dependency lint-staged to v15.2.5 (#12598) (3f904986) + * update postgres docker tag to v16.3 (#12576) (8f6ef987) + * update dependency lint-staged to v15.2.4 (#12592) (0b004b4b) + * update redis docker tag to v7.2.5 (#12588) (fc29ea85) + * update dependency sass-embedded to v1.77.2 (#12583) (42754e39) +* up harmony (5cd68c0b) +* up composer (b0d9664b) +* up themes (3e5a8d1c) +* up deps (5220503c) +* up persona (8af4a184) +* up persona (1abececa) +* up themes (35e92d6d) +* up persona (c9cadbad) +* up persona (db84d04a) +* up widget essentials (675ea0f9) +* up widgets (a4aea98c) +* up widgets (a6a99553) +* up widgets (9e673a41) +* up widgets (f759a07d) +* up widgets (bf6be3ef) +* up widgets (32d4ac84) +* up harmony (780db9e2) +* update changelog for v3.8.4 (693bac5b) +* **i18n:** + * fallback strings for new resources: nodebb.users (d348d1df) + * fallback strings for new resources: nodebb.admin-extend-widgets (16ee1ad7) + * fallback strings for new resources: nodebb.themes-harmony (90e0013c) + * fallback strings for new resources: nodebb.modules (3531617d) + * fallback strings for new resources: nodebb.admin-settings-reputation (28c0abf9) + * fallback strings for new resources: nodebb.notifications (6fbc6040) + * fallback strings for new resources: nodebb.post-queue (b46a82db) + * fallback strings for new resources: nodebb.admin-development-info (cfedfc2d) + * fallback strings for new resources: nodebb.admin-settings-reputation (1bb47280) + +##### New Features + +* give category selector input min-width for mobile (2a15856b) +* add action:topics.scheduled.notify (705796f6) +* add followed users lang string (d6643160) +* add a new widget container (1c2afcc1) +* show a friendly message on invalid or expired code, closes #12738 (01a2f0e7) +* allow chat rooms in widgets (f80b7b87) +* migrate topic move socket call to api v3 (2d14a798) +* add allow and frameborder to allow attrs (c3f02b74) +* add missing event type (334c8c9d) +* send topic title into user-posted-topic-with-tag notification type, unbold tags in copy (1611b17b) + +##### Bug Fixes + +* **deps:** + * update dependency sass to v1.79.1 (#12804) (ff77a7ab) + * update dependency pg to v8.13.0 (#12801) (1ad1e0ba) + * update dependency pg-cursor to v2.12.0 (#12802) (c8627f05) + * update dependency connect-pg-simple to v10 (#12798) (64b21674) + * update dependency postcss to v8.4.47 (#12797) (2473e57d) + * update dependency nodebb-plugin-ntfy to v1.7.7 (#12796) (d67ebafe) + * update dependency mongodb to v6.9.0 (#12792) (edc468d4) + * update dependency nodebb-plugin-2factor to v7.5.5 (#12794) (63589d50) + * update dependency tough-cookie to v5 (#12782) (396dd38b) + * update dependency express to v4.21.0 (#12784) (1d9812e0) + * update fontsource monorepo to v5.1.0 (#12791) (03f13433) + * update fontsource monorepo (#12779) (6dc58177) + * update dependency body-parser to v1.20.3 (#12783) (8943a54d) + * update dependency diff to v7 (#12778) (e97e1373) + * update dependency mongodb to v6.8.1 (#12777) (0784683d) + * update dependency diff to v6 (#12774) (0dda1f34) + * update dependency nodemailer to v6.9.15 (#12768) (70f01acb) + * update dependency sortablejs to v1.15.3 (#12770) (84b483c6) + * update dependency postcss to v8.4.45 (#12769) (81757595) + * update dependency sass to v1.78.0 (#12773) (e8cc695d) + * update dependency ace-builds to v1.36.2 (#12765) (25deb062) + * update dependency ace-builds to v1.36.1 (#12764) (ee715f36) + * update dependency rtlcss to v4.3.0 (#12759) (da61bd49) + * update dependency webpack to v5.94.0 (#12752) (1f88b551) + * update dependency ace-builds to v1.36.0 (#12750) (fbd09b2a) + * update dependency nodebb-widget-essentials to v7.0.21 (#12749) (23eb3538) + * update dependency chart.js to v4.4.4 (#12748) (dc24e5ba) + * update dependency async to v3.2.6 (#12747) (e578dfca) + * update dependency ace-builds to v1.35.5 (#12746) (3d0e55d5) + * update dependency esbuild to v0.23.1 (#12745) (6297322c) + * update dependency @fontsource/poppins to v5.0.15 (#12744) (51b9c5b4) + * update dependency winston to v3.14.2 (#12741) (6300d849) + * update dependency nodebb-plugin-ntfy to v1.7.6 (#12724) (42aa8786) + * update dependency winston to v3.14.1 (#12727) (0e547405) + * update dependency postcss to v8.4.41 (#12718) (f54519f1) + * update dependency jquery-ui to v1.14.0 (#12719) (4e97a091) + * update dependency autoprefixer to v10.4.20 (#12716) (89c87f51) + * update dependency rimraf to v5.0.10 (#12715) (7b1dc6a7) + * update dependency @fontsource/inter to v5.0.20 (#12714) (703951d3) + * update dependency postcss to v8.4.40 (#12710) (48d52840) + * update dependency rtlcss to v4.2.0 (#12709) (5aa4c219) + * update dependency ace-builds to v1.35.4 (#12706) (405264d9) + * update dependency @fortawesome/fontawesome-free to v6.6.0 (#12696) (7723e4af) + * update dependency ace-builds to v1.35.3 (#12700) (ee8fd06e) + * update dependency semver to v7.6.3 (#12697) (2bcf7f79) + * update dependency compare-versions to v6.1.1 (#12693) (c52364a5) + * update dependency webpack to v5.93.0 (#12692) (710bf2f8) + * update dependency sass to v1.77.8 (#12687) (50030473) + * update dependency winston to v3.13.1 (#12690) (5678430e) + * update dependency lru-cache to v10.4.3 (#12681) (38e9bbba) + * update dependency rimraf to v5.0.9 (#12684) (335bc685) + * update dependency lru-cache to v10.3.1 (#12678) (fcfe1f57) + * update dependency nodebb-theme-persona to v13.3.25 (#12679) (871367c1) + * update dependency rimraf to v5.0.8 (#12680) (48bd5519) + * update dependency webpack-merge to v6 (#12670) (d39c05ab) + * update dependency @fontsource/inter to v5.0.19 (#12677) (540a05d2) + * update dependency esbuild to v0.23.0 (#12668) (088217f3) + * update dependency ace-builds to v1.35.2 (#12669) (18f9b1d6) + * update dependency postcss to v8.4.39 (#12666) (ba65f193) + * update dependency workerpool to v9.1.3 (#12665) (cba80283) + * update dependency mongodb to v6.8.0 (#12663) (48f8e464) + * update dependency lru-cache to v10.3.0 (#12664) (12e0aecb) + * update dependency ace-builds to v1.35.1 (#12659) (3c46c5f4) + * update dependency nodemailer to v6.9.14 (#12643) (94691372) + * update dependency webpack to v5.92.1 (#12644) (115f236f) + * update dependency sass to v1.77.6 (#12640) (b80a8dec) + * update dependency webpack to v5.92.0 (#12631) (21e061a0) + * update dependency esbuild to v0.21.5 (#12626) (e29bcbce) + * update dependency ace-builds to v1.35.0 (#12630) (0053c788) + * update dependency nodebb-plugin-markdown to v12.2.8 (#12624) (c3ff16e5) + * update dependency pg-cursor to v2.11.0 (#12617) (24d0999f) + * update dependency pg to v8.12.0 (#12616) (bee05fe2) + * update dependency workerpool to v9.1.2 (#12612) (bff0f0e8) + * update dependency sass to v1.77.4 (#12608) (eba8179e) + * update dependency mongodb to v6.7.0 (#12603) (606342c5) + * update dependency sass to v1.77.3 (#12605) (f783ce30) + * update dependency esbuild to v0.21.4 (#12600) (c1a6293f) + * update dependency ace-builds to v1.34.2 (#12599) (5595a35e) + * update dependency nodebb-plugin-2factor to v7.5.2 (#12577) (72a0fe93) + * update dependency sitemap to v8 (#12595) (9ebd96e8) + * update dependency nodebb-plugin-markdown to v12.2.7 (#12590) (333ebd9b) + * update dependency ace-builds to v1.34.1 (#12591) (7a6b70f0) + * update dependency chart.js to v4.4.3 (#12585) (95023355) + * update dependency sass to v1.77.2 (#12584) (f6509266) + * update dependency mongodb to v6.6.2 (#12579) (984717a8) + * update dependency esbuild to v0.21.3 (#12580) (d66118bb) + * update dependency nodebb-theme-harmony to v1.2.56 (#12581) (2dd6b148) +* closes #12795, don't crash if there is an error in auto approve from queue (6ccf40bf) +* closes #12780, 404 in api/v3 if topic doesn't exist (220af706) +* vague description for harmony settings.enableBreadcrumbs, help text (17029952) +* closes #12758, show different error message for block (c0b30ea4) +* reset form/invalid code style (20053af6) +* #12754, throw if currentPwd == newPwd (f361df01) +* #12736, merged notifications use username instead of displayname (ad68809b) +* #12728, don't display unread badge if nav link doesn't exist (6f7eecd1) +* bump composer (a7934f36) +* closes #12721, export all users (6e1c6436) +* bump 2factor and ntfy (79c4eadd) +* crash if error objecft passed to handleErrors contains no message (e630f006) +* don't allow joining topic_ & category_ (503a97e5) +* sanitize-html configuration passed in src/posts/parse.js (db30834e) +* handle unhandled exception at handleErrors (598c10c6) + +##### Other Changes + +* up themes fix btn-ghost-sm (106291fa) + +##### Performance Improvements + +* don't load unread page again if everything already loaded (4aad6019) + +##### Refactors + +* change the path of follow notif to go to the user (cf405b18) +* move textcomplete to core (20fd75bf) +* don't use composer directly, use the post hook (da7044e4) +* fix whitespace (609a9878) +* fix btn-ghost usage to match bootstrap (c58e09f9) +* remove unused (feefd733) +* remove log (c5b2f988) +* #12713, update chat teasers even if chat notifications are disabled (ac644ac2) + +##### Tests + +* fix spec (5fa8ddbc) +* since admin pwd changes in test, login with new pwd (be32cf44) +* add logs for test failures (33587358) +* create topic for socket.io tests (ed2f3b75) + +#### v3.8.4 (2024-08-01) + +##### Chores + +* up widgets (d1663ac2) +* up widgets (cb4bf9dd) +* up persona (324610de) +* update changelog for v3.8.3 (2a239a79) + +##### New Features + +* update chat teasers when a new chat starts, closes #12713 (0204f2aa) +* add downvoteVisibility setting, closes #12698 (269fc068) + +##### Bug Fixes + +* prevent category filter to go to selected cid (10c5cd4c) +* add sizes to maskable so it doesnt crash chrome application tab (ccc86825) +* post preview not working on parent post (a28dd70f) + +##### Refactors + +* hooks page design (cea18d0c) +* closes #12699, allow boolean false for log-colorize (42ac1f9d) + +##### Tests + +* test fix maybe (a73f269f) + +#### v3.8.3 (2024-06-27) + +##### Chores + +* up themes (b15a5894) +* up harmony (3eb69c58) +* up harmony (b98333f3) +* up dbsearch (8a42db6f) +* use nodebb fork of spider-detector (3a1b39c9) +* up 2factor (142de2ca) +* update changelog for v3.8.2 (3854a434) + +##### New Features + +* closes #12656, only send required meta/link tags on /api calls (64875b3f) +* show links in post queue (500e3342) +* show connetion count on /info (60b4bc66) +* make upload scores descending for ordering (3ec44d64) +* add isACP to config, closes #12623 (c51b772f) +* allow passing min,max to sortedSetsCardSum (70b4a0e2) +* add voters/upvoters v3 routes (1aaa6cbb) + +##### Bug Fixes + +* wront topic events showing up in topic (54b01395) +* dont show self in suggested topics (381bbb04) +* #12645, use titleRaw like reply button (3332480c) +* update follower/following counts after removing uid from zsets (6f6cfb1a) +* suggested topic tid (351ee71d) +* #12633, don't check post index (6e3b012b) +* recent chat pagination, closes #12637 (f7c9b7ae) +* info.tpl table (6f79d305) +* closes #12632, dont load data twice (66adfa29) +* don't error if file required too early (4430de8c) +* require of spider-detector (be86d8ef) +* return early for guests/spiders (8d56e097) +* dont show error alert when user user mouse overs votes (6bbe3d1c) +* dont load chat rooms for quests/spiders (ca4a7751) +* set uid in case its spider(-1), closes #12621 (9d74539a) +* dont add spiders to online_guests room (bcd4997d) +* dont autoconnect for spiders, closes #12620 (b6671d16) +* #12614 fix html markup for widget containers (56b5850a) + +##### Other Changes + +* remove unused winston (69ce3bf0) +* remove unused (adb0566f) +* fix semicolons (795a0daa) +* fix whitespace (b4db2f7f) + +##### Performance Improvements + +* cleanup sessions every 30 seconds (26feb2bb) +* change revokeSession to work with an array of sids (172bc249) +* dont make db call if posts is already loaded client side (461e95d8) +* if sigs disabled dont filter uids (73241bd5) +* cache isAdmin, isGlobalMod checks (fedfce7b) +* get rid of async call in user load for expiring bans (023d52a3) +* call getIconbackgrounds once (1dadd16f) +* get rid of more calls, fix other profile pages #12632 (5c6a853e) + +##### Refactors + +* sessionUUID (#12658) (d6c946cf) +* move delete call (65a91ea5) +* use array.some (85b329af) +* add placeholders on demand (8f486b1b) +* move getTopicData call to avoid db calls when its not in cache (252d0df7) +* remove exits check (74dd2844) +* move als requires, move autoLocale to api/page routes (3356022a) +* move requires down (8eccdb48) +* posts cache to get rid of require in functions (236ac323) +* closes #12629, allow passing arrays to meta.userOrGroupExists (bad15643) +* suggest topics, use strings for tids (8ded36f2) +* #12623, add filter:config.get.admin (2d86552b) +* add sanity checks to sio (e98f1848) + +##### Tests + +* dont track session for api/v3 (#12660) (61e5293a) +* move set (9108c900) +* spec (41f1cd69) +* spec (b148d0fc) +* fix path replace (9ecee782) +* update openapi spec (9af3a2da) +* fix tests (c2f63090) +* return empty array on db.exists([]); (1b283ccc) +* fix test only set for spiders (7c2a3a6e) +* fix post test (42230300) + +#### v3.8.2 (2024-05-29) + +##### Chores + +* up composer (83facb7d) +* up harmony (17ea61a0) +* update changelog for v3.8.1 (5ef3e0f3) + +##### New Features + +* show ignored/watched topics in topic list, closes #10974 (29dbe92d) +* convert "All Votes Are Public" toggle to vote visibility (e0515080) + +##### Bug Fixes + +* wrong var for ignored (7969e62d) +* reduce docker image size again and speed up build (56ef2bdd) +* update thumb count when removing thumbs (6214336c) + +##### Refactors + +* render (2c0f8c91) + +#### v3.8.1 (2024-05-15) + +##### Chores + +* update changelog for v3.8.0 (2ef2750d) + +##### Bug Fixes + +* wrong mention version (1d1f499b) + +##### Tests + +* use node 20 (a40f54aa) +* remove node 18 (6bd22e53) + +#### v3.8.0 (2024-05-15) + +##### Chores + +* **deps:** + * update redis docker tag to v7.2.4 (#12272) (7a8116a4) + * update actions/cache action to v4 (#12563) (88ff9f9d) + * update postgres docker tag to v16.3 (#12560) (339f6267) + * update dependency sass-embedded to v1.77.1 (#12565) (07160062) + * update postgres docker tag to v16.3 (#12555) (b8a52863) + * update dependency sass-embedded to v1.77.0 (#12548) (0fa11561) + * update coverallsapp/github-action action to v2.3.0 (#12554) (b4023ff9) + * update dependency sass-embedded to v1.76.0 (#12542) (7ee42724) + * update commitlint monorepo to v19.3.0 (#12526) (dad57e04) + * update commitlint monorepo to v19.2.2 (#12515) (97519ca4) + * update dependency smtp-server to v3.13.4 (#12516) (4c468b5c) + * update dependency sass-embedded to v1.75.0 (#12499) (a2229e71) + * update dependency sass-embedded to v1.74.1 (#12468) (97a649e3) + * update dependency mocha to v10.4.0 (#12445) (449c0fcd) + * update dependency @commitlint/cli to v19.2.1 (#12420) (dc19c840) + * update dependency @commitlint/cli to v19.2.0 (#12412) (41212e8f) + * update dependency sass-embedded to v1.72.0 (#12406) (6d62e592) + * update commitlint monorepo to v19.1.0 (#12403) (3d095a6b) +* up themes (1e3a321d) +* update changelog for v3.7.5 (febeede5) +* up harmony (80a1a0e0) +* up harmony (1a000eae) +* **i18n:** + * fallback strings for new resources: nodebb.flags, nodebb.user (19f8a77c) + * fallback strings for new resources: nodebb.user (7ad477af) + * fallback strings for new resources: nodebb.admin-settings-navigation (18eec147) + * fallback strings for new resources: nodebb.admin-advanced-events (213db951) + * fallback strings for new resources: nodebb.admin-manage-users (43f52737) + +##### New Features + +* track uid for email/username changes, closes #12454 (325d00ea) +* closes #12477, allow editing moderation notes (af205cc4) +* parse moderation notes as markdown (7d24b04b) +* closes #12490, show profile flags on account info page (b429045f) +* closes #12491, add unban & unmute history (985663fa) +* new client-side hook to allow plugins to modify relogin url (c778f6eb) +* closes #12453, filter events by user/group (4030f18a) +* move all user profile pics to folder, closes #12449 (#12450) (8f9ac5c1) +* allow customizing uploads.upload socket methods (dc67f54e) +* allow custom fields in user csv export, closes #12401 (83ca23ca) + +##### Bug Fixes + +* **deps:** + * update dependency ace-builds to v1.33.2 (#12572) (19602dcd) + * update dependency esbuild to v0.21.2 (#12569) (dc4f32af) + * update dependency rimraf to v5.0.7 (#12568) (035ced85) + * update dependency sass to v1.77.1 (#12566) (7a64410a) + * update dependency rimraf to v5.0.6 (#12562) (185d61fc) + * update dependency validator to v13.12.0 (#12556) (7a009445) + * update dependency sass to v1.77.0 (#12550) (d3840280) + * update dependency mongodb to v6.6.1 (#12547) (751a143e) + * update dependency esbuild to v0.21.1 (#12549) (ed07cfcc) + * update dependency semver to v7.6.2 (#12552) (5264deca) + * update dependency mongodb to v6.6.0 (#12544) (4813772c) + * update dependency nodebb-plugin-composer-default to v10.2.35 (#12546) (8fcfb181) + * update dependency sass to v1.76.0 (#12541) (8f60603b) + * update dependency tough-cookie to v4.1.4 (#12540) (ad708c9f) + * update dependency lru-cache to v10.2.2 (#12532) (c036786c) + * update dependency jquery-ui to v1.13.3 (#12534) (3f62b892) + * update dependency nodebb-widget-essentials to v7.0.16 (#12535) (d5bfe32e) + * update dependency nodebb-plugin-composer-default to v10.2.34 (#12530) (bc51968e) + * update dependency ace-builds to v1.33.1 (#12527) (18a843bc) + * update fontsource monorepo (#12523) (bde9136b) + * update dependency ipaddr.js to v2.2.0 (#12522) (d6d0ebd5) + * update dependency cropperjs to v1.6.2 (#12524) (5e7ec5b6) + * update dependency ioredis to v5.4.1 (#12520) (66a35490) + * update dependency ioredis to v5.4.0 (#12519) (da0888e6) + * update dependency nodebb-plugin-spam-be-gone to v2.2.2 (#12518) (5b4471bf) + * update dependency nodebb-plugin-emoji to v5.1.15 (#12517) (20f8ba78) + * update dependency nodebb-theme-harmony to v1.2.49 (#12497) (c4cb9d36) + * update dependency nodebb-plugin-mentions to v4.5.2 (#12470) (37bdf753) + * update dependency ace-builds to v1.33.0 (#12501) (83a932e6) + * update dependency sass to v1.75.0 (#12500) (f5c3d4e1) + * update dependency nodebb-theme-harmony to v1.2.47 (#12487) (2bcd5239) + * update dependency cron to v3.1.7 (#12484) (6237d5fe) + * update dependency workerpool to v9.1.1 (#12475) (b6193629) + * update dependency nodebb-theme-persona to v13.3.13 (#12479) (01b3a06a) + * update dependency nodebb-theme-harmony to v1.2.46 (#12478) (499514a8) + * update dependency nodebb-theme-persona to v13.3.12 (#12467) (0f209fa4) + * update dependency nodebb-theme-harmony to v1.2.45 (#12466) (1fef883b) + * update dependency sass to v1.74.1 (#12469) (8f771b6f) + * update dependency pg-cursor to v2.10.5 (#12462) (dde7a498) + * update dependency pg to v8.11.5 (#12461) (623ccc53) + * update dependency @fortawesome/fontawesome-free to v6.5.2 (#12460) (1953277b) + * update dependency nodebb-plugin-mentions to v4.4.3 (#12463) (d24c4148) + * update dependency pg to v8.11.4 (#12455) (a7d9811e) + * update dependency @fontsource/poppins to v5.0.13 (#12457) (5c214930) + * update dependency pg-cursor to v2.10.4 (#12456) (af10aaaa) + * update dependency ace-builds to v1.32.9 (#12451) (deacf366) + * update dependency express to v4.19.2 (#12441) (263ca1ca) + * update dependency winston to v3.13.0 (#12440) (08be8f3c) + * update dependency webpack to v5.91.0 (#12426) (ca82d020) + * update dependency ace-builds to v1.32.8 (#12439) (23f46345) + * update dependency sanitize-html to v2.13.0 (#12427) (2550f26f) + * update dependency postcss to v8.4.38 (#12429) (ace6f12f) + * update dependency express to v4.19.1 (#12425) (a27b999f) + * update dependency autoprefixer to v10.4.19 (#12428) (fa57b81f) + * update dependency nodebb-theme-lavender to v7.1.8 (15c7691c) + * update dependency nodebb-plugin-mentions to v4.4.2 (#12410) (a8b631dd) + * update dependency postcss to v8.4.37 (#12417) (9c91f093) + * update dependency nodemailer to v6.9.13 (#12424) (c7a506a8) + * update dependency nodebb-plugin-ntfy to v1.7.4 (#12414) (4e119783) + * update dependency esbuild to v0.20.2 (#12411) (93fb1e0f) + * update socket.io packages to v4.7.5 (#12409) (6a730312) + * update dependency @socket.io/redis-adapter to v8.3.0 (#12405) (05219412) + * update dependency sass to v1.72.0 (#12407) (89684786) + * update dependency mongodb to v6.5.0 (#12402) (b163264e) + * update dependency archiver to v7.0.1 (#12400) (817a5468) + * update dependency nodemailer to v6.9.12 (#12398) (27d5aaa5) + * update dependency nodebb-theme-harmony to v1.2.38 (#12397) (b9a1fc3f) + * update fontsource monorepo (#12390) (8d6ef3d5) + * update dependency nodebb-plugin-mentions to v4.4.1 (#12393) (4d18c38b) + * update dependency winston to v3.12.0 (#12391) (98ff47ec) +* chat message search, closes #12571 (49a510e9) +* chat message search, closes #12571 (d926d9dd) +* some issues with "small" docker improvements (#12564) (bc807c46) +* use reference object for post summary v3 api call (2a58d099) +* unintentional object pollution by buildForSelectCategories (88a5dfb7) +* getCategoryById to return shallow clone of object (dc35bf8b) +* #12533, go to post after changing owner (983a35e6) +* topic selection in merge (f2892385) +* closes #12474, fix search dropdown on mobile for merge (ce03680f) +* #12481, remove priv groups from groupslug:groupname mapping (#12482) (7033d11e) +* bump 2factor (4d2c95ca) +* date on upgrade script (73f98568) +* use CategoryObject in admins-mods schema def (4da1e9c4) +* missing uid for modify event, closes #12394 (7c37f32d) +* **docker:** support all previously used env variables correctly (#12567) (995b2de5) + +##### Refactors + +* add missing form-label class (36016ee1) +* use groupslug:groupname for search and acp page (ee5c021c) + +##### Tests + +* fix schema (5eb8c90b) +* fix redis tests (57422420) +* fix moderation note test (fed5165f) +* add back timestamp (c73f759c) + +#### v3.7.5 (2024-05-03) + +##### Chores + +* update changelog for v3.7.4 (8a1b281b) + +##### Bug Fixes + +* #12543, use PATCH (420c8999) + +#### v3.7.4 (2024-04-17) + +##### Chores + +* up harmony (18990795) +* up harmony (c2465a16) +* up themes (ba86740a) +* up themes (5d8a5571) +* update changelog for v3.7.3 (8d450eea) + +##### New Features + +* #12495, add unblock button to users on /blocks (afe597a2) + +##### Bug Fixes + +* zipObject (110ce66a) +* index should be cid (8410cec7) +* uniqCids (de0176ef) +* if votes are not public, dont show upvoter names in tooltip (5af69dbc) +* add canView check to /api/v3/users/:uid (5bee324c) +* is user doesnt have view:users privilege (14f5774f) +* copy dropdown closing on copy ip/text/link (48281f96) +* align teaser avatar (5fcd1a8a) +* if you have chat:privileged the chat icons should show up (ca07e517) +* #12485, resolve flags on a topics posts on topic delete (d7256796) +* #12471, remove readable strings (0b1f2546) + +##### Refactors + +* add new hooks for notifications/websockets (d2e042d1) +* move parseInt to filter (52e71522) +* better label for show to groups (cfd29db0) + +##### Tests + +* update spec (6816e39b) +* fix tests and use action (acab46e6) + +#### v3.7.3 (2024-04-03) + +##### Chores + +* up ntfy (0058ca68) +* update changelog for v3.7.2 (277e1787) + +##### Bug Fixes + +* change digest to use posts sorting first (3aae9234) +* #12452, fix admin/mod image change (c206ccdd) + +#### v3.7.2 (2024-03-27) + +##### Chores + +* up harmony (0171e73a) +* up harmony (c6915398) +* update changelog for v3.7.1 (07640389) + +##### New Features + +* add hook to modify sorting options/fields (168419cf) +* add playsinline video attribute (#12419) (5924a6eb) + +##### Bug Fixes + +* #12446, fix groups.ownership.rescind (ed41e416) +* #12415, fix notification escaping for queued posts (4787d013) + +##### Refactors + +* remove log (3b2d8551) + +##### Tests + +* add test for #12446 (bf4e257c) + +#### v3.7.1 (2024-03-14) + +##### Chores + +* up harmony (1b24b337) +* up harmony (b6c3a9d2) +* up harmony (f107a7ff) +* update changelog for v3.7.0 (f1f81b17) + +##### New Features + +* allow setting max-old-space-size in config (d1ce594c) + +##### Bug Fixes + +* #12408, fix mem leak due to mongodb 6.4.0 (285293c4) +* tids:create on topic post (3b48695b) + +#### v3.7.0 (2024-03-06) + +##### Chores + +* **i18n:** + * fallback strings for new resources: nodebb.admin-settings-post, nodebb.topic (0bd0a740) + * fallback strings for new resources: nodebb.themes-harmony (8fb0ed82) + * fallback strings for new resources: nodebb.aria (a55fb29e) + * fallback strings for new resources: nodebb.aria (e6a358ed) + * fallback strings for new resources: nodebb.user (c88811a9) + * fallback strings for new resources: nodebb.topic (7e862a78) + * fallback strings for new resources: nodebb.topic, nodebb.unread (53ea10a7) + * fallback strings for new resources: nodebb.global (73e7d467) + * fallback strings for new resources: nodebb.topic (72f1e515) + * fallback strings for new resources: nodebb.global (642cd8e2) + * fallback strings for new resources: nodebb.global, nodebb.user (a998136c) + * fallback strings for new resources: nodebb.tags (4d35cb4e) + * fallback strings for new resources: nodebb.global, nodebb.themes-harmony (0bc9ac74) + * fallback strings for new resources: nodebb.global, nodebb.topic (a2819e9e) + * fallback strings for new resources: nodebb.error (9d5702f8) + * fallback strings for new resources: nodebb.admin-settings-reputation, nodebb.error (1230d22d) + * fallback strings for new resources: nodebb.admin-dashboard (f3974c0b) + * fallback strings for new resources: nodebb.search (43bf1f9b) +* up harmony (25ef62dc) +* up peace (3aaa0727) +* up peace (65f3c734) +* update changelog for v3.6.7 (caf8722f) +* up harmony (22cd80b9) +* up themes (96fc20a3) +* up themes (421c7fc5) +* closes #12355 (fadee8d7) +* up themes (9ee864ce) +* up composer (8324adc5) +* up composer (0ff7adb4) +* up themes (43a02c89) +* up themes (69342342) +* up harmony (9bbaef84) +* up harmony (35e98a9f) +* up harmony (22398d47) +* up themes (5cbb8bb1) +* up harmony (3f3f0d66) +* up harmony (4f42172d) +* up harmony (c0db10af) +* up harmony (0743cb3c) +* up harmony (09414efa) +* up harmony (bbdefad3) +* up themes (79ebbee5) +* up composer (c31e321b) +* **deps:** + * update commitlint monorepo to v19 (#12369) (516c8d04) + * update dependency smtp-server to v3.13.3 (#12378) (0ab1982c) + * update dependency eslint to v8.57.0 (#12362) (6c33c01d) + * update dependency sass-embedded to v1.71.1 (#12350) (99ad9d38) + * update dependency sass-embedded to v1.71.0 (#12344) (920f787f) + * update postgres docker tag to v16.2 (#12338) (254bad89) + * update commitlint monorepo to v18.6.1 (#12339) (92ef8548) + * update dependency mocha to v10.3.0 (#12334) (9cd299db) + * update dependency smtp-server to v3.13.2 (#12324) (048e664c) + * update dependency lint-staged to v15.2.2 (#12327) (a7008fb3) + * update dependency lint-staged to v15.2.1 (#12319) (264e71d2) + * update commitlint monorepo to v18.6.0 (#12305) (7e7bbfa4) + * update dependency jsdom to v24 (#12294) (45f02ff0) + * update commitlint monorepo to v18.5.0 (#12296) (5a776f9f) + * update dependency sass-embedded to v1.70.0 (#12286) (0063dd45) + * update dependency jsdom to v23.2.0 (#12269) (7cc69df0) + * update dependency jsdom to v23.1.0 (#12265) (12aeb6f7) + * update commitlint monorepo to v18.4.4 (#12261) (b25dfd47) + * update dependency sass-embedded to v1.69.7 (#12257) (ce78cb0e) + * update dependency sass-embedded to v1.69.6 (#12249) (1777ec4b) + +##### New Features + +* add new sorting option to categories (2a9b0a3c) +* add chat widget areas, closes #12375 (53b3c5d6) +* add hook into user.posts.isReady (7207814b) +* refactor group title editing (112493fa) +* cli command for maintenance mode closes #12293 (80960296) +* fallbacks for aria.json (19bc442b) +* add new lang keys for a11y (3ce89d1e) +* add missing aria/role attributes to dropdown elements (7917fd82) +* add lang keys for hidden labels (e298fb6b) +* show unread categories based on unread topics (#12317) (45cfb369) +* limit post/user flags per day closes #12274 (2b1fdc56) +* search in bookmarks on search page (5213e22a) +* #12247 (c5730b36) + +##### Bug Fixes + +* #12389, update privilege group check (87a79059) +* dupe id (f4b63790) +* #12357, properly update lists and counters (f34ebcc9) +* use lang key for user avatar label (863f5d0a) +* spec (4bcbf759) +* move winston logging for plugin hook firing to debug level (e240d0f9) +* closes #12326 (9302d9b4) +* some layout fixes for group details page (301eee17) +* bookmark in topic data is nullable now (d500ebb1) +* bug where body wasn't properly sent on ap-style content-types (4b87c30f) +* dont send topic notification to poster (c2239e48) +* **deps:** + * update dependency nodebb-theme-harmony to v1.2.36 (#12392) (db2f7c03) + * update dependency nodebb-theme-peace to v2.2.4 (#12381) (073a79eb) + * update dependency mongodb to v6.4.0 (#12382) (716482b2) + * update dependency nodebb-plugin-mentions to v4.4.0 (#12385) (6f04859e) + * update dependency ace-builds to v1.32.7 (#12386) (9eb54394) + * update dependency autoprefixer to v10.4.18 (#12387) (339e2cfa) + * update dependency nodebb-theme-harmony to v1.2.35 (#12388) (7b1b4510) + * update dependency nodebb-theme-harmony to v1.2.34 (#12383) (430c6b6c) + * update dependency nodemailer to v6.9.11 (#12380) (aa6859df) + * update dependency express to v4.18.3 (#12379) (2c3540b2) + * update dependency nodebb-plugin-markdown to v12.2.6 (#12371) (fb98dc05) + * update dependency archiver to v7 (#12374) (9de0ab31) + * update dependency chart.js to v4.4.2 (#12376) (131d2fe7) + * update dependency bootswatch to v5.3.3 (#12373) (1ed4d763) + * update dependency fetch-cookie to v3.0.1 (#12363) (835820a0) + * update dependency sanitize-html to v2.12.1 (#12360) (00bcf935) + * update dependency spdx-license-list to v6.9.0 (#12354) (b58dde1c) + * update dependency sass to v1.71.1 (#12351) (3094996b) + * update dependency sanitize-html to v2.12.0 (#12353) (ee90866a) + * update dependency nodemailer to v6.9.10 (#12356) (80ea6eb9) + * update dependency bootstrap to v5.3.3 (#12348) (4007882b) + * update dependency sass to v1.71.0 (#12345) (faf5a9c8) + * update dependency esbuild to v0.20.1 (#12346) (a0021b1d) + * update dependency webpack to v5.90.3 (#12347) (748bbab0) + * update dependency nodebb-plugin-spam-be-gone to v2.2.1 (#12343) (acad7317) + * update dependency webpack to v5.90.2 (#12341) (cb6fe9c7) + * update dependency nodebb-theme-harmony to v1.2.25 (#12340) (99474a7e) + * update dependency commander to v12 (#12325) (b61486eb) + * update dependency diff to v5.2.0 (#12337) (d0f6f0cc) + * update dependency postcss to v8.4.35 (#12333) (3bc506f6) + * update dependency ace-builds to v1.32.6 (#12332) (523f7ace) + * update dependency postcss to v8.4.34 (#12330) (9d036be3) + * update dependency semver to v7.6.0 (#12328) (3af04956) + * update dependency fetch-cookie to v2.2.0 (#12323) (b56d6a88) + * update dependency nodebb-theme-harmony to v1.2.12 (#12318) (65fead81) + * update dependency webpack to v5.90.1 (#12322) (98b455ce) + * update dependency nodemailer to v6.9.9 (#12321) (3f74cca3) + * update dependency ace-builds to v1.32.5 (#12316) (ef06be6d) + * update dependency nodebb-theme-harmony to v1.2.10 (#12314) (d648972c) + * update dependency ace-builds to v1.32.4 (#12313) (9fb7c163) + * update dependency express-session to v1.18.0 (#12311) (6444eeb9) + * update dependency esbuild to v0.20.0 (#12309) (aa1344fc) + * update dependency nodebb-theme-harmony to v1.2.8 (#12310) (fd20e3a5) + * update dependency nodebb-theme-harmony to v1.2.7 (#12307) (eabbf195) + * update dependency lru-cache to v10.2.0 (#12306) (400a1aa3) + * update dependency webpack to v5.90.0 (#12303) (44a798bc) + * update dependency esbuild to v0.19.12 (#12302) (72bb81f0) + * update dependency connect-redis to v7.1.1 (#12298) (575f072a) + * update dependency nodebb-theme-harmony to v1.2.6 (#12300) (e1adf5b3) + * update dependency nodebb-widget-essentials to v7.0.15 (#12295) (876fa4a7) + * update dependency nodebb-theme-persona to v13.3.3 (#12290) (f8893cd8) + * update dependency nodebb-theme-harmony to v1.2.4 (#12292) (e33e9dea) + * update dependency autoprefixer to v10.4.17 (#12285) (9e11b927) + * update dependency workerpool to v9.1.0 (#12288) (7a24961d) + * update dependency sass to v1.70.0 (#12287) (a1cdec08) + * update dependency sortablejs to v1.15.2 (#12283) (cc93caff) + * update dependency nodebb-theme-persona to v13.3.2 (#12284) (91ce17c7) + * update dependency nodebb-theme-harmony to v1.2.3 (#12280) (34a8069b) + * update dependency nodebb-theme-persona to v13.3.1 (#12281) (fe0845b9) + * update dependency nodebb-theme-harmony to v1.2.2 (#12279) (fc78b00c) + * update socket.io packages to v4.7.4 (#12278) (16598f7f) + * update dependency postcss to v8.4.33 (#12264) (3a32fc8f) + * update dependency nodebb-theme-harmony to v1.1.108 (#12263) (4924d170) + * update socket.io packages to v4.7.3 (#12259) (eb7a3091) + * update dependency sass to v1.69.7 (#12258) (d5dc4655) + * update dependency nodemailer to v6.9.8 (#12254) (1953a635) + * update dependency esbuild to v0.19.11 (#12253) (c8007bf6) + * update dependency ace-builds to v1.32.3 (#12252) (c40b2322) + * update dependency sass to v1.69.6 (#12250) (f8a0cb9e) + * update dependency terser-webpack-plugin to v5.3.10 (#12248) (9101caff) + * update dependency workerpool to v9.0.4 (#12244) (8165f454) + * update dependency workerpool to v9.0.3 (#12238) (3e08ef81) + * update dependency esbuild to v0.19.10 (#12237) (6ef8e767) + +##### Other Changes + +* fix (f5586968) + +##### Refactors + +* move tomap inside (5e89dfad) +* shorter tag translation (a9e8c184) +* search stats (82f6721d) + +##### Tests + +* fix test (c8a5e24a) +* update test (5afc735b) + +#### v3.6.7 (2024-02-28) + +##### Chores + +* update changelog for v3.6.6 (debaa2b9) + +##### Bug Fixes + +* #12372, fix manual digest buttons (107f5613) +* closes #12365, staticHooks with callbacks (00e29403) +* #12359, fix api call (c61b3bbd) +* closes #12358, only load pending/invited for owners (3960d370) +* retry setAdd on e11000 error (4a405ce0) + +##### Tests + +* better test for #12352 (4e51bf81) + +#### v3.6.6 (2024-02-14) + +##### Chores + +* update changelog for v3.6.5 (04039f76) + +##### Bug Fixes + +* closes #12329, fix default value of categoryWatchState (88e9fa37) + +##### Tests + +* fix spec (5fec8b23) + +#### v3.6.5 (2024-01-31) + +##### Chores + +* update changelog for v3.6.4 (6e6c3974) + +##### Bug Fixes + +* #12320, .text() gets \n\t characters (67c8bd99) + +#### v3.6.4 (2024-01-24) + +##### Chores + +* update changelog for v3.6.3 (92ffc57c) + +##### New Features + +* add success hook to quick reply (cb21f28b) + +##### Bug Fixes + +* if there is no bookmarkThreshold dont init unread indicator (cf40d681) +* remove leftover code from 2.x, closes #12301 (d5f445f1) +* copy single line code blocks, closes #12297 (06269cdf) +* validate plugin id in toggleActive (76f3efff) + +##### Tests + +* add plugin id tests (e8befbcc) + +#### v3.6.3 (2024-01-12) + +##### Chores + +* update changelog for v3.6.2 (82a936c3) + +##### Bug Fixes + +* #12275, pin sharp to 0.32.6 (f3927ce7) +* topic event translations closes #12273 (5f91cc83) + +#### v3.6.2 (2024-01-10) + +##### Chores + +* up composer (ef8f8db7) +* up harmony (2bed405c) +* up harmony (b6dbe1a6) +* up lavender (16f0affa) +* up themes (980bfee8) +* update changelog for v3.6.1 (1e4abdbf) + +##### New Features + +* #12247 (0af19afd) + +##### Bug Fixes + +* recent loading (d3d6d77d) +* closes #12246, direction is passed in as string as query param with new api call (8867f243) +* stricter selector for sort (a74b5141) + +##### Performance Improvements + +* dont load all followed tids on unread/recent?filter=watched (563e03b6) + +#### v3.6.1 (2023-12-22) + +##### Chores + +* update changelog for v3.6.0 (eb92cee6) + +##### Bug Fixes + +* #12243, don' set process.env.config if it doesnt exist (788404c1) +* lang key for move notification closes #12241 (48a2b5f7) +* dont send topic notification to poster (e72b26f5) + +#### v3.6.0 (2023-12-20) + +##### Chores + +* **i18n:** + * fallback strings for new resources: nodebb.error (d3cfa1b7) + * fallback strings for new resources: nodebb.post-queue (64fe1278) + * fallback strings for new resources: nodebb.post-queue (f98205c1) + * fallback strings for new resources: nodebb.social (081352b6) + * fallback strings for new resources: nodebb.modules (4fe84ae8) + * fallback strings for new resources: nodebb.admin-settings-chat, nodebb.admin-settings-post, nodebb.admin-settings-user (94777927) + * fallback strings for new resources: nodebb.admin-settings-user, nodebb.category, nodebb.notifications (29b3a403) + * fallback strings for new resources: nodebb.error (7d8f700f) + * fallback strings for new resources: nodebb.modules (83931138) +* make error:email-taken slightly more descriptive (dd0743d3) +* up harmony (250cc771) +* up harmony (9324a75c) +* update changelog for v3.5.3 (e49ddaf8) +* up harmony (dbbf3a2c) +* up harmony (e4656bd4) +* up themes (0ec9d4c3) +* added missing deprecation warning for .getTopics (9079ad0b) +* update note at top of file (2de534fa) +* up dbsearch (b6981693) +* up themes (9a1f8e9b) +* up themes (ed10dda2) +* up composer (22d7e92f) +* up themes (fcdd3737) +* v4 note for deprecations (f4c36b84) +* minor re-order of routes/controllers in admin api v3 router/controller (181a9399) +* add in note at top of files ready for deletion in v4 (54a08087) +* up harmony (1b8dcbc2) +* **deps:** + * update dependency eslint-plugin-import to v2.29.1 (#12229) (055b7597) + * update dependency eslint to v8.56.0 (#12231) (a7dd0f92) + * update dependency eslint to v8.55.0 (#12203) (32a403b2) + * update dependency lint-staged to v15.2.0 (#12210) (9763e97f) + * update dependency jsdom to v23.0.1 (#12196) (a50b141f) + * update dependency jsdom to v23 (#12186) (8c0472a0) + * update commitlint monorepo to v18.4.3 (#12177) (fd5d7b65) + * update dependency eslint to v8.54.0 (#12172) (b6275453) + * update commitlint monorepo to v18.4.2 (#12169) (d6a92d4c) + * update postgres docker tag to v16.1 (#12167) (616ff573) + * update mongo docker tag to v7 (#12166) (5f8a4f3a) + * update redis docker tag to v7.2.3 (#12165) (c41f9a75) + * update dependency lint-staged to v15.1.0 (#12161) (1796ed2b) + * update dependency @commitlint/cli to v18.4.1 (#12162) (be3d3393) + * update commitlint monorepo to v18.4.0 (#12159) (128c24f2) + * update dependency eslint to v8.53.0 (#12151) (d1a7ba35) + * update redis docker tag to v7.2.3 (#12152) (2eff6912) + * update commitlint monorepo to v18 (#12105) (97016f47) + * update dependency sass-embedded to v1.69.5 (#12127) (9e8a2116) +* **socket.io:** deprecate categories.(isModerator|ignore|watch|getSelectCategories|getMoveCategories|getCategoriesByPrivilege) (f1dbfaa2) + +##### Documentation Changes + +* fix improper verbiage in category watch schema (f8cc8548) +* openapi schema for api.search.categories (4ffe0417) +* **socket.io:** + * openapi schema for remaining added routes (5399e86a) + * added schema for new routes (f279bca0) + +##### New Features + +* add 500 page for missing tpls, closes #12230 (06221a0d) +* remove gif exif stripping exception (f8219aa6) +* update groups.leave to allow global mods to kick users out of groups (2c6024e0) +* better layout for manage chat room modal (f4faa0b7) +* update Messaging.toggleOwner to optionally take a third `state` argument (932bd292) +* new language strings for post-queue page (5d03321e) +* add some new social share buttons (ace171a6) +* docker improvements (#12031) (7f3a9968) +* closes #12158, add sortable rewards (5ea7dec9) +* add copy text (4b2491be) +* closes #12154, add exempt groups (fdff165e) +* update moved keys (119c3362) +* move new user restrrictions (3d505c5c) +* add tracking categories and make watching send notifications (#12147) (84fed97b) +* add new lang string for minutes (d8d26c9f) +* add direct message link (#12138) (4c4f3ac9) +* closes #5584, setup winston to output to file (87a859aa) +* batch.processSortedSet min/max (#12129) (6c7e6144) + +##### Bug Fixes + +* fix display post history (dc975838) +* update isJSON test in request lib (506d7be5) +* 503 rendering on ajaxify (f7e0fd0b) +* #12227, fix crash in redirect (2dc1def5) +* deprecated emailer hook (565ca3cc) +* extract all pages when stripping metadata (0b3eb6c0) +* incorrect call to load additional group members (78835ebb) +* closes #12185, fix cli user password reset (b9050139) +* don't require login for listing categories (50a90f8e) +* #12183, remove ensureLoggedIn middleware (0a4f3c8a) +* remove unused requires (b5940a5d) +* remove lodash require (f9c471a0) +* #12171, bump harmony (89a1134c) +* update design of post-queue (41bdc9e8) +* update post-queue template for #12171 (63ba4986) +* language key (4c7c46f3) +* another missing state (f4bbc5bd) +* add missing tracking (3b91e8e2) +* bump harmony (a5e3754b) +* #12133 dropdown menus on mobile stay open during ajaxify (4601a6f7) +* update ajaxifyTimer logic to only drop the request if the URL is the same as the one it's already processing (b4297cd8) +* #12141, use apiv3 for category search module (cefd4061) +* made parentCid optional in api.search.categories (581516c8) +* don't count internal links towards link count when restricting new users from posting links (022fa0e7) +* closes #12126, fix language keys (075cd598) +* param (e5a60dc8) +* handle public chat rooms too (6a696c43) +* suppress chat message notifications for users who are known to be in the chat room (uid is present in the corresponding socket.io room) (18c27d1a) +* **deps:** + * update dependency workerpool to v9 (#12234) (2cccbcf6) + * update dependency sharp to v0.33.1 (#12233) (45143000) + * update dependency csrf-sync to v4.0.3 (#12232) (9e2a6f86) + * update dependency ace-builds to v1.32.2 (#12228) (b6ca117a) + * update dependency ace-builds to v1.32.1 (#12226) (6036d144) + * update dependency esbuild to v0.19.9 (#12224) (d96d4d09) + * update dependency @fontsource/inter to v5.0.16 (#12219) (e32eb8b3) + * update dependency chart.js to v4.4.1 (#12217) (b6b569c0) + * update dependency nodebb-theme-persona to v13.2.49 (#12218) (6dab99fd) + * update dependency postcss to v8.4.32 (#12204) (da879704) + * update dependency @fortawesome/fontawesome-free to v6.5.1 (#12198) (b41c7f2a) + * update dependency nodebb-theme-harmony to v1.1.101 (#12199) (72d6a4b1) + * update dependency sortablejs to v1.15.1 (#12200) (cd625705) + * update dependency ace-builds to v1.32.0 (#12197) (75f063ba) + * update dependency @fortawesome/fontawesome-free to v6.5.0 (#12193) (a94f4a48) + * update dependency sharp to v0.33.0 (#12194) (1f287c74) + * update dependency fs-extra to v11.2.0 (#12191) (4eaf2320) + * update dependency passport to v0.7.0 (#12190) (bbf7c5e1) + * update dependency esbuild to v0.19.8 (#12187) (bc59856e) + * update dependency lru-cache to v10.1.0 (#12181) (22932bdb) + * update dependency esbuild to v0.19.7 (#12176) (00cb5839) + * update dependency lru-cache to v10.0.3 (#12175) (c404ef73) + * update dependency ace-builds to v1.31.2 (#12168) (b4a41af9) + * update dependency mongodb to v6.3.0 (#12170) (85936a59) + * update dependency lru-cache to v10.0.2 (#12160) (9d18d3c7) + * update dependency helmet to v7.1.0 (#12155) (50aa1a7c) + * update dependency async to v3.2.5 (#12150) (0e9eafa1) + * update dependency nodebb-theme-persona to v13.2.44 (#12149) (b489af06) + * update dependency nodebb-theme-harmony to v1.1.95 (#12148) (77b0baea) + * update dependency connect-pg-simple to v9.0.1 (#12144) (4e23d0d1) + * update dependency nodebb-theme-persona to v13.2.43 (#12140) (91e45fa2) + * update dependency nodebb-theme-harmony to v1.1.92 (#12131) (a3452c8f) + * update dependency nodebb-theme-peace to v2.1.24 (#12139) (29a59b90) + * update dependency spdx-license-list to v6.8.0 (2337d641) + * update dependency nodebb-plugin-composer-default to v10.2.25 (#12136) (cdb40719) + * update dependency cron to v3.1.6 (#12132) (2fb3af3c) + * update dependency ace-builds to v1.31.1 (#12135) (6b28f1dc) + * update dependency workerpool to v8 (#12121) (9bed7646) + * update dependency sass to v1.69.5 (#12128) (b351c00a) +* **socket.io:** update getPosts controller to return object containing posts instead of straight array (54000aab) + +##### Other Changes + +* **socket.io:** deprecate socketGroups.getChatGroups in favour of api.admin.listGroups (dc4cc74f) + +##### Refactors + +* line breaks good (4e560ade) +* replace deprecated call with api call (f91b823e) +* move async call to parallel (dabc282d) +* **socket.io:** + * deprecate SocketModules.chats.typing in favour of api.chats.toggleTyping (c1e6be77) + * deprecate SocketModules.chats.loadPinnedMessages in favour of api.chats.getPinnedMessages" (401e8636) + * deprecate SocketModules.chats.searchMessages in favour of api.search.roomMessages (f9dc3502) + * deprecate SocketModules.chats.setNotificationSetting in favour of api.chats.watch (75c8cda1) + * deprecated SocketModules.chats.toggleOwner in favour of api.chats.toggleOwner (b13c6ee4) + * deprecated SocketModules.chats.searchMembers in favour of api.search.roomUsers (6e952263) + * deprecate SocketModules.sortPublicRooms in favour of api.chats.sortPublicRooms (62b7dfd4) + * deprecate SocketModules.chat.getUnreadCount in favour of api.chats.getUnread (5eaffb42) + * deprecate SocketModules.chats.getIP in favour of api.chats.getIpAddress (214989a8) + * deprecate SocketModules.chats.hasPrivateChat in favour of api.users.getPrivateRoomId (0d3c94e6) + * deprecate SocketModules.chats.canMessage and .markAllRead with no alternative. deprecate .getRecentChats in favour of api.chats.list (a4133500) + * deprecate SocketModules.chats.isDnD in favour of api.users.getStatus (eebea4df) + * deprecate SocketModules.chats.getRaw in favour of api.chats.getRawMessage (c4b4e79b) + * deprecate socketGroups.loadMoreMembers in favour of api.groups.listMembers (807d778c) + * deprecate socketGroups.searchMembers in favour of api.groups.listMembers (d2f3333a) + * deprecate socketGroups.loadMore in favour of api.groups.list (b61e8147) + * deprecate categories.categorySearch in favour of api.search.categories (00de9d5b) + * deprecate categories.loadMore in favour of api.categories.getTopics (1ce4ca54) + * deprecate categories.loadMoreSubCategories in favour of api.categories.getChildren (010727f5) + * deprecate categories.setWatchState in favour of api.categories.setWatchState (d7c6b3d6) + * deprecate categories.getTopicCount in favour of api.categories.getTopicCount (c442b6e6) + * deprecate categories.get in favour of api.categories.list (96046373) + * deprecate categories.getRecentReplies in favour of api.categories.getPosts (52b78e83) + +##### Tests + +* migrate socket modules tests to v3 api (445b70de) +* migrate socket.io groups tests to use api v3 (2c1c4dfe) + +#### v3.5.3 (2023-12-13) + +##### Chores + +* up composer (245e5df3) +* up composer default (c1f82b78) +* update changelog for v3.5.2 (e2e85053) + +##### Bug Fixes + +* change translator escape (c434262e) + +##### Other Changes + +* add types for database abstration layer (#10762) (17cd19c7) + +#### v3.5.2 (2023-11-29) + +##### Chores + +* up composer (49013f81) +* update changelog for v3.5.1 (48f7ae99) + +##### Bug Fixes + +* closes #12185, fix cli user password reset (6790000d) +* thumb width (a9ef58a5) + +#### v3.5.1 (2023-11-14) + +##### Chores + +* up mentions (b1b3dcb6) +* update changelog for v3.5.0 (5d7c10f1) + ##### New Features * closes #12123, allow setting hh:mm for pin expiry (1f800747) @@ -76,7 +6419,6 @@ * up persona (cc5e9d9c) * up harmony (769f879e) * up themes (46530337) -* incrementing version number - v3.4.3 (5c984250) * update changelog for v3.4.3 (08949be9) * up themes (e0b29ba9) * up emoji (00dd0cb3) @@ -86,38 +6428,12 @@ * up emoji (7568be3c) * up themes (b7d8fd1e) * up themes (d0682905) -* incrementing version number - v3.4.2 (3f0dac38) * up deps (f1021542) * up composer (45b9803a) * up composer (7e5d9b71) * up harmony (13ea14f1) * up engines (0f9f875b) -* incrementing version number - v3.4.1 (01e69574) * up dbsearch (b4775b18) -* incrementing version number - v3.4.0 (fd9247c5) -* incrementing version number - v3.3.9 (5805e770) -* incrementing version number - v3.3.8 (a5603565) -* incrementing version number - v3.3.7 (b26f1744) -* incrementing version number - v3.3.6 (7fb38792) -* incrementing version number - v3.3.4 (a67f84ea) -* incrementing version number - v3.3.3 (f94d239b) -* incrementing version number - v3.3.2 (ec9dac97) -* incrementing version number - v3.3.1 (151cc68f) -* incrementing version number - v3.3.0 (fc1ad70f) -* incrementing version number - v3.2.3 (b06d3e63) -* incrementing version number - v3.2.2 (758ecfcd) -* incrementing version number - v3.2.1 (20145074) -* incrementing version number - v3.2.0 (9ecac38e) -* incrementing version number - v3.1.7 (0b4e81ab) -* incrementing version number - v3.1.6 (b3a3b130) -* incrementing version number - v3.1.5 (ec19343a) -* incrementing version number - v3.1.4 (2452783c) -* incrementing version number - v3.1.3 (3b4e9d3f) -* incrementing version number - v3.1.2 (40fa3489) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) * **deps:** * update actions/setup-node action to v4 (#12114) (762ad161) * update dependency eslint-plugin-import to v2.29.0 (#12112) (2ae031ed) @@ -330,33 +6646,7 @@ ##### Chores -* incrementing version number - v3.4.2 (3f0dac38) * update changelog for v3.4.2 (f9323de6) -* incrementing version number - v3.4.1 (01e69574) -* incrementing version number - v3.4.0 (fd9247c5) -* incrementing version number - v3.3.9 (5805e770) -* incrementing version number - v3.3.8 (a5603565) -* incrementing version number - v3.3.7 (b26f1744) -* incrementing version number - v3.3.6 (7fb38792) -* incrementing version number - v3.3.4 (a67f84ea) -* incrementing version number - v3.3.3 (f94d239b) -* incrementing version number - v3.3.2 (ec9dac97) -* incrementing version number - v3.3.1 (151cc68f) -* incrementing version number - v3.3.0 (fc1ad70f) -* incrementing version number - v3.2.3 (b06d3e63) -* incrementing version number - v3.2.2 (758ecfcd) -* incrementing version number - v3.2.1 (20145074) -* incrementing version number - v3.2.0 (9ecac38e) -* incrementing version number - v3.1.7 (0b4e81ab) -* incrementing version number - v3.1.6 (b3a3b130) -* incrementing version number - v3.1.5 (ec19343a) -* incrementing version number - v3.1.4 (2452783c) -* incrementing version number - v3.1.3 (3b4e9d3f) -* incrementing version number - v3.1.2 (40fa3489) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) ##### Bug Fixes @@ -383,32 +6673,7 @@ * up harmony (512c44d5) * up harmony (319d3b1f) * up themes (d7a7c355) -* incrementing version number - v3.4.1 (01e69574) * update changelog for v3.4.1 (f24a334c) -* incrementing version number - v3.4.0 (fd9247c5) -* incrementing version number - v3.3.9 (5805e770) -* incrementing version number - v3.3.8 (a5603565) -* incrementing version number - v3.3.7 (b26f1744) -* incrementing version number - v3.3.6 (7fb38792) -* incrementing version number - v3.3.4 (a67f84ea) -* incrementing version number - v3.3.3 (f94d239b) -* incrementing version number - v3.3.2 (ec9dac97) -* incrementing version number - v3.3.1 (151cc68f) -* incrementing version number - v3.3.0 (fc1ad70f) -* incrementing version number - v3.2.3 (b06d3e63) -* incrementing version number - v3.2.2 (758ecfcd) -* incrementing version number - v3.2.1 (20145074) -* incrementing version number - v3.2.0 (9ecac38e) -* incrementing version number - v3.1.7 (0b4e81ab) -* incrementing version number - v3.1.6 (b3a3b130) -* incrementing version number - v3.1.5 (ec19343a) -* incrementing version number - v3.1.4 (2452783c) -* incrementing version number - v3.1.3 (3b4e9d3f) -* incrementing version number - v3.1.2 (40fa3489) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) ##### Bug Fixes @@ -432,31 +6697,7 @@ ##### Chores * up dbsearch (8357bb2e) -* incrementing version number - v3.4.0 (fd9247c5) * update changelog for v3.4.0 (5c023025) -* incrementing version number - v3.3.9 (5805e770) -* incrementing version number - v3.3.8 (a5603565) -* incrementing version number - v3.3.7 (b26f1744) -* incrementing version number - v3.3.6 (7fb38792) -* incrementing version number - v3.3.4 (a67f84ea) -* incrementing version number - v3.3.3 (f94d239b) -* incrementing version number - v3.3.2 (ec9dac97) -* incrementing version number - v3.3.1 (151cc68f) -* incrementing version number - v3.3.0 (fc1ad70f) -* incrementing version number - v3.2.3 (b06d3e63) -* incrementing version number - v3.2.2 (758ecfcd) -* incrementing version number - v3.2.1 (20145074) -* incrementing version number - v3.2.0 (9ecac38e) -* incrementing version number - v3.1.7 (0b4e81ab) -* incrementing version number - v3.1.6 (b3a3b130) -* incrementing version number - v3.1.5 (ec19343a) -* incrementing version number - v3.1.4 (2452783c) -* incrementing version number - v3.1.3 (3b4e9d3f) -* incrementing version number - v3.1.2 (40fa3489) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) ##### Bug Fixes @@ -475,44 +6716,21 @@ * up themes (10d11924) * up harmony (0334b389) * up harmony (32c870f4) -* incrementing version number - v3.3.9 (5805e770) * update changelog for v3.3.9 (50d44777) * up composer (ffd6ea5a) * up composer (c2534287) * up composer (540b9f18) * up composer (87015e9b) * up themes (dd3647ed) -* incrementing version number - v3.3.8 (a5603565) -* incrementing version number - v3.3.7 (b26f1744) * markdown dep (03f11a24) * up markdown (f399db9d) -* incrementing version number - v3.3.6 (7fb38792) * up deps (a7843a40) * up composer (05a7c761) * up themes (c4b865e1) * up themes (7d9ff9bf) -* incrementing version number - v3.3.4 (a67f84ea) -* incrementing version number - v3.3.3 (f94d239b) -* incrementing version number - v3.3.2 (ec9dac97) -* incrementing version number - v3.3.1 (151cc68f) * up themes (5c14438d) * up themes (cb3252be) * up harmony (c7df93b4) -* incrementing version number - v3.3.0 (fc1ad70f) -* incrementing version number - v3.2.3 (b06d3e63) -* incrementing version number - v3.2.2 (758ecfcd) -* incrementing version number - v3.2.1 (20145074) -* incrementing version number - v3.2.0 (9ecac38e) -* incrementing version number - v3.1.7 (0b4e81ab) -* incrementing version number - v3.1.6 (b3a3b130) -* incrementing version number - v3.1.5 (ec19343a) -* incrementing version number - v3.1.4 (2452783c) -* incrementing version number - v3.1.3 (3b4e9d3f) -* incrementing version number - v3.1.2 (40fa3489) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) * **deps:** * update coverallsapp/github-action action to v2.2.2 (#11977) (15c6fd6b) * update dependency jquery to v3.7.1 (#11963) (94f07c14) @@ -609,29 +6827,7 @@ ##### Chores * up mentions (4ec3a480) -* incrementing version number - v3.3.8 (a5603565) * update changelog for v3.3.8 (65e16e9f) -* incrementing version number - v3.3.7 (b26f1744) -* incrementing version number - v3.3.6 (7fb38792) -* incrementing version number - v3.3.4 (a67f84ea) -* incrementing version number - v3.3.3 (f94d239b) -* incrementing version number - v3.3.2 (ec9dac97) -* incrementing version number - v3.3.1 (151cc68f) -* incrementing version number - v3.3.0 (fc1ad70f) -* incrementing version number - v3.2.3 (b06d3e63) -* incrementing version number - v3.2.2 (758ecfcd) -* incrementing version number - v3.2.1 (20145074) -* incrementing version number - v3.2.0 (9ecac38e) -* incrementing version number - v3.1.7 (0b4e81ab) -* incrementing version number - v3.1.6 (b3a3b130) -* incrementing version number - v3.1.5 (ec19343a) -* incrementing version number - v3.1.4 (2452783c) -* incrementing version number - v3.1.3 (3b4e9d3f) -* incrementing version number - v3.1.2 (40fa3489) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) ##### Bug Fixes @@ -645,28 +6841,7 @@ ##### Chores -* incrementing version number - v3.3.7 (b26f1744) * update changelog for v3.3.7 (1193fa04) -* incrementing version number - v3.3.6 (7fb38792) -* incrementing version number - v3.3.4 (a67f84ea) -* incrementing version number - v3.3.3 (f94d239b) -* incrementing version number - v3.3.2 (ec9dac97) -* incrementing version number - v3.3.1 (151cc68f) -* incrementing version number - v3.3.0 (fc1ad70f) -* incrementing version number - v3.2.3 (b06d3e63) -* incrementing version number - v3.2.2 (758ecfcd) -* incrementing version number - v3.2.1 (20145074) -* incrementing version number - v3.2.0 (9ecac38e) -* incrementing version number - v3.1.7 (0b4e81ab) -* incrementing version number - v3.1.6 (b3a3b130) -* incrementing version number - v3.1.5 (ec19343a) -* incrementing version number - v3.1.4 (2452783c) -* incrementing version number - v3.1.3 (3b4e9d3f) -* incrementing version number - v3.1.2 (40fa3489) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) ##### Bug Fixes @@ -677,27 +6852,7 @@ ##### Chores -* incrementing version number - v3.3.6 (7fb38792) * update changelog for v3.3.6 (a43354c0) -* incrementing version number - v3.3.4 (a67f84ea) -* incrementing version number - v3.3.3 (f94d239b) -* incrementing version number - v3.3.2 (ec9dac97) -* incrementing version number - v3.3.1 (151cc68f) -* incrementing version number - v3.3.0 (fc1ad70f) -* incrementing version number - v3.2.3 (b06d3e63) -* incrementing version number - v3.2.2 (758ecfcd) -* incrementing version number - v3.2.1 (20145074) -* incrementing version number - v3.2.0 (9ecac38e) -* incrementing version number - v3.1.7 (0b4e81ab) -* incrementing version number - v3.1.6 (b3a3b130) -* incrementing version number - v3.1.5 (ec19343a) -* incrementing version number - v3.1.4 (2452783c) -* incrementing version number - v3.1.3 (3b4e9d3f) -* incrementing version number - v3.1.2 (40fa3489) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) ##### Bug Fixes @@ -708,49 +6863,12 @@ ##### Chores * up deps (db55f18a) -* incrementing version number - v3.3.4 (a67f84ea) -* incrementing version number - v3.3.3 (f94d239b) -* incrementing version number - v3.3.2 (ec9dac97) -* incrementing version number - v3.3.1 (151cc68f) -* incrementing version number - v3.3.0 (fc1ad70f) -* incrementing version number - v3.2.3 (b06d3e63) -* incrementing version number - v3.2.2 (758ecfcd) -* incrementing version number - v3.2.1 (20145074) -* incrementing version number - v3.2.0 (9ecac38e) -* incrementing version number - v3.1.7 (0b4e81ab) -* incrementing version number - v3.1.6 (b3a3b130) -* incrementing version number - v3.1.5 (ec19343a) -* incrementing version number - v3.1.4 (2452783c) -* incrementing version number - v3.1.3 (3b4e9d3f) -* incrementing version number - v3.1.2 (40fa3489) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) #### v3.3.4 (2023-08-20) ##### Chores -* incrementing version number - v3.3.3 (f94d239b) * update changelog for v3.3.3 (38149a57) -* incrementing version number - v3.3.2 (ec9dac97) -* incrementing version number - v3.3.1 (151cc68f) -* incrementing version number - v3.3.0 (fc1ad70f) -* incrementing version number - v3.2.3 (b06d3e63) -* incrementing version number - v3.2.2 (758ecfcd) -* incrementing version number - v3.2.1 (20145074) -* incrementing version number - v3.2.0 (9ecac38e) -* incrementing version number - v3.1.7 (0b4e81ab) -* incrementing version number - v3.1.6 (b3a3b130) -* incrementing version number - v3.1.5 (ec19343a) -* incrementing version number - v3.1.4 (2452783c) -* incrementing version number - v3.1.3 (3b4e9d3f) -* incrementing version number - v3.1.2 (40fa3489) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) ##### Bug Fixes @@ -760,24 +6878,7 @@ ##### Chores -* incrementing version number - v3.3.2 (ec9dac97) * update changelog for v3.3.2 (2ecf15c4) -* incrementing version number - v3.3.1 (151cc68f) -* incrementing version number - v3.3.0 (fc1ad70f) -* incrementing version number - v3.2.3 (b06d3e63) -* incrementing version number - v3.2.2 (758ecfcd) -* incrementing version number - v3.2.1 (20145074) -* incrementing version number - v3.2.0 (9ecac38e) -* incrementing version number - v3.1.7 (0b4e81ab) -* incrementing version number - v3.1.6 (b3a3b130) -* incrementing version number - v3.1.5 (ec19343a) -* incrementing version number - v3.1.4 (2452783c) -* incrementing version number - v3.1.3 (3b4e9d3f) -* incrementing version number - v3.1.2 (40fa3489) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) ##### Bug Fixes @@ -793,23 +6894,7 @@ ##### Chores -* incrementing version number - v3.3.1 (151cc68f) * update changelog for v3.3.1 (6f961f9c) -* incrementing version number - v3.3.0 (fc1ad70f) -* incrementing version number - v3.2.3 (b06d3e63) -* incrementing version number - v3.2.2 (758ecfcd) -* incrementing version number - v3.2.1 (20145074) -* incrementing version number - v3.2.0 (9ecac38e) -* incrementing version number - v3.1.7 (0b4e81ab) -* incrementing version number - v3.1.6 (b3a3b130) -* incrementing version number - v3.1.5 (ec19343a) -* incrementing version number - v3.1.4 (2452783c) -* incrementing version number - v3.1.3 (3b4e9d3f) -* incrementing version number - v3.1.2 (40fa3489) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) ##### Bug Fixes @@ -820,22 +6905,7 @@ ##### Chores * up themes (62231baa) -* incrementing version number - v3.3.0 (fc1ad70f) * update changelog for v3.3.0 (46f7405d) -* incrementing version number - v3.2.3 (b06d3e63) -* incrementing version number - v3.2.2 (758ecfcd) -* incrementing version number - v3.2.1 (20145074) -* incrementing version number - v3.2.0 (9ecac38e) -* incrementing version number - v3.1.7 (0b4e81ab) -* incrementing version number - v3.1.6 (b3a3b130) -* incrementing version number - v3.1.5 (ec19343a) -* incrementing version number - v3.1.4 (2452783c) -* incrementing version number - v3.1.3 (3b4e9d3f) -* incrementing version number - v3.1.2 (40fa3489) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) ##### New Features @@ -899,7 +6969,6 @@ * up harmony (ee0128d7) * up harmony (ba03e223) * up themes (6fc80f9f) -* incrementing version number - v3.2.3 (b06d3e63) * update changelog for v3.2.3 (afb38c71) * up mentions (4b92df75) * up composer (48a04eb7) @@ -917,20 +6986,7 @@ * up themes (62429252) * remove log (954db1ee) * up themes (9fda8dce) -* incrementing version number - v3.2.2 (758ecfcd) -* incrementing version number - v3.2.1 (20145074) * up markdown (f23cda10) -* incrementing version number - v3.2.0 (9ecac38e) -* incrementing version number - v3.1.7 (0b4e81ab) -* incrementing version number - v3.1.6 (b3a3b130) -* incrementing version number - v3.1.5 (ec19343a) -* incrementing version number - v3.1.4 (2452783c) -* incrementing version number - v3.1.3 (3b4e9d3f) -* incrementing version number - v3.1.2 (40fa3489) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) * **i18n:** * fallback strings for new resources: nodebb.admin-dashboard (80ea4eb0) * fallback strings for new resources: nodebb.admin-settings-chat, nodebb.error (e27d1743) @@ -1106,20 +7162,7 @@ ##### Chores * downgrade harmony to correct version (7c94506b) -* incrementing version number - v3.2.2 (758ecfcd) * update changelog for v3.2.2 (91a432ad) -* incrementing version number - v3.2.1 (20145074) -* incrementing version number - v3.2.0 (9ecac38e) -* incrementing version number - v3.1.7 (0b4e81ab) -* incrementing version number - v3.1.6 (b3a3b130) -* incrementing version number - v3.1.5 (ec19343a) -* incrementing version number - v3.1.4 (2452783c) -* incrementing version number - v3.1.3 (3b4e9d3f) -* incrementing version number - v3.1.2 (40fa3489) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) ##### Bug Fixes @@ -1137,19 +7180,7 @@ * up themes (f1170b18) * up spam-be-gone (eed34d04) * remove log (509faa5e) -* incrementing version number - v3.2.1 (20145074) * update changelog for v3.2.1 (c7f8cee9) -* incrementing version number - v3.2.0 (9ecac38e) -* incrementing version number - v3.1.7 (0b4e81ab) -* incrementing version number - v3.1.6 (b3a3b130) -* incrementing version number - v3.1.5 (ec19343a) -* incrementing version number - v3.1.4 (2452783c) -* incrementing version number - v3.1.3 (3b4e9d3f) -* incrementing version number - v3.1.2 (40fa3489) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) ##### Bug Fixes @@ -1163,18 +7194,7 @@ * up harmony (9fc5ae08) * up composer (82d37702) * up spider-detector (97d8f858) -* incrementing version number - v3.2.0 (9ecac38e) * update changelog for v3.2.0 (080f9e75) -* incrementing version number - v3.1.7 (0b4e81ab) -* incrementing version number - v3.1.6 (b3a3b130) -* incrementing version number - v3.1.5 (ec19343a) -* incrementing version number - v3.1.4 (2452783c) -* incrementing version number - v3.1.3 (3b4e9d3f) -* incrementing version number - v3.1.2 (40fa3489) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) ##### Bug Fixes @@ -1212,7 +7232,6 @@ * up harmony (777c7d09) * up deps (7f465006) * up harmony (f9e37829) -* incrementing version number - v3.1.7 (0b4e81ab) * update changelog for v3.1.7 (8744e412) * up persona (7a0e5c6d) * up harmony (be474fb4) @@ -1223,14 +7242,12 @@ * up themes (b2f70a2e) * up composer (21919524) * up harmony (64441602) -* incrementing version number - v3.1.6 (b3a3b130) * up themes (61420fdc) * up themes (f9990cab) * bump themes for da02361b13d064763223533368f9b71d998ecf37 (c97977f8) * up harmony (0f84f597) * up emoji (4b0d3940) * up emoji (291aa58e) -* incrementing version number - v3.1.5 (ec19343a) * up harmony (56ac610b) * up themes (0bfe361c) * up themes (67ab222d) @@ -1251,17 +7268,10 @@ * up themes (14c93cd5) * up harmony (6188d8be) * up harmony (9e416d7f) -* incrementing version number - v3.1.4 (2452783c) * up persona (78c2e29c) * up markdown (7f5ec0ef) * up themes (cdfc1bfe) * up harmony (fd80b612) -* incrementing version number - v3.1.3 (3b4e9d3f) -* incrementing version number - v3.1.2 (40fa3489) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) * **i18n:** * fallback strings for new resources: nodebb.admin-appearance-skins (7ca85c60) * fallback strings for new resources: nodebb.admin-advanced-cache, nodebb.admin-advanced-errors, nodebb.admin-development-logger (fa8e656d) @@ -1490,16 +7500,7 @@ ##### Chores -* incrementing version number - v3.1.6 (b3a3b130) * update changelog for v3.1.6 (f10a2d2e) -* incrementing version number - v3.1.5 (ec19343a) -* incrementing version number - v3.1.4 (2452783c) -* incrementing version number - v3.1.3 (3b4e9d3f) -* incrementing version number - v3.1.2 (40fa3489) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) ##### Bug Fixes @@ -1511,15 +7512,7 @@ ##### Chores -* incrementing version number - v3.1.5 (ec19343a) * update changelog for v3.1.5 (b0d16861) -* incrementing version number - v3.1.4 (2452783c) -* incrementing version number - v3.1.3 (3b4e9d3f) -* incrementing version number - v3.1.2 (40fa3489) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) ##### Bug Fixes @@ -1532,14 +7525,7 @@ * fix persona (74174414) * up themes (97ff1f11) -* incrementing version number - v3.1.4 (2452783c) * update changelog for v3.1.4 (633dc2de) -* incrementing version number - v3.1.3 (3b4e9d3f) -* incrementing version number - v3.1.2 (40fa3489) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) ##### New Features @@ -1567,13 +7553,7 @@ ##### Chores * up markdown (51bf5e95) -* incrementing version number - v3.1.3 (3b4e9d3f) * update changelog for v3.1.3 (9924fde6) -* incrementing version number - v3.1.2 (40fa3489) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) ##### Bug Fixes @@ -1595,12 +7575,7 @@ ##### Chores -* incrementing version number - v3.1.2 (40fa3489) * update changelog for v3.1.2 (5b398782) -* incrementing version number - v3.1.1 (40250733) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) ##### Continuous Integration @@ -1621,11 +7596,7 @@ ##### Chores -* incrementing version number - v3.1.1 (40250733) * update changelog for v3.1.1 (ccd6f48c) -* incrementing version number - v3.1.0 (0cb386bd) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) ##### Bug Fixes @@ -1635,10 +7606,7 @@ ##### Chores -* incrementing version number - v3.1.0 (0cb386bd) * update changelog for v3.1.0 (2c515dc3) -* incrementing version number - v3.0.1 (26f6ea49) -* incrementing version number - v3.0.0 (224e08cd) ##### Documentation Changes @@ -1668,7 +7636,6 @@ * up harmony (eab2679f) * up harmony (7f19913b) * up themes (832fe95a) -* incrementing version number - v3.0.1 (26f6ea49) * update changelog for v3.0.1 (fd30af10) * whopps (ec0da196) * up harmony (2caf4afc) @@ -1680,7 +7647,6 @@ * up widgets (2588853b) * up harmony (01669fa5) * up harmony (c58d07f4) -* incrementing version number - v3.0.0 (224e08cd) * **i18n:** * fallback strings for new resources: nodebb.themes-harmony, nodebb.themes-persona (48a4fd50) * fallback strings for new resources: nodebb.admin-settings-email (489163aa) @@ -1822,7 +7788,6 @@ ##### Chores -* incrementing version number - v3.0.0 (224e08cd) * update changelog for v3.0.0 (56ad381f) ##### Bug Fixes @@ -2216,39 +8181,7 @@ ##### Chores * removing superfluous changelog items (5343d2a0) -* incrementing version number - v2.8.11 (2ec81eff) * update changelog for v2.8.11 (f2ca93f6) -* incrementing version number - v2.8.10 (5b7c3671) -* incrementing version number - v2.8.9 (57f14e41) -* incrementing version number - v2.8.8 (b331b942) -* incrementing version number - v2.8.7 (3f8248d6) -* incrementing version number - v2.8.6 (af6ce447) -* incrementing version number - v2.8.5 (bff5ce2d) -* incrementing version number - v2.8.4 (a46b2bbc) -* incrementing version number - v2.8.3 (c20b20a7) -* incrementing version number - v2.8.2 (050e43f8) -* incrementing version number - v2.8.1 (727f879e) -* incrementing version number - v2.8.0 (8e77673d) -* incrementing version number - v2.7.0 (96cc0617) -* incrementing version number - v2.6.1 (7e52a7a5) -* incrementing version number - v2.6.0 (e7fcf482) -* incrementing version number - v2.5.8 (dec0e7de) -* incrementing version number - v2.5.7 (5836bf4a) -* incrementing version number - v2.5.6 (c7bd7dbf) -* incrementing version number - v2.5.5 (3509ed94) -* incrementing version number - v2.5.4 (e83260ca) -* incrementing version number - v2.5.3 (7e922936) -* incrementing version number - v2.5.2 (babcd17e) -* incrementing version number - v2.5.1 (ce3aa950) -* incrementing version number - v2.5.0 (01d276cb) -* incrementing version number - v2.4.5 (dd3e1a28) -* incrementing version number - v2.4.4 (d5525c87) -* incrementing version number - v2.4.3 (9c647c6c) -* incrementing version number - v2.4.2 (3aa7b855) -* incrementing version number - v2.4.1 (60cbd148) -* incrementing version number - v2.4.0 (4834cde3) -* incrementing version number - v2.3.1 (d2425942) -* incrementing version number - v2.3.0 (046ea120) ##### New Features @@ -2268,7 +8201,6 @@ ##### Chores -* incrementing version number - v2.8.10 (5b7c3671) * update changelog for v2.8.10 (188ec62f) ##### Continuous Integration @@ -2293,7 +8225,6 @@ ##### Chores * up composer-default (e9a8e195) -* incrementing version number - v2.8.9 (57f14e41) * update changelog for v2.8.9 (18b2150e) ##### Bug Fixes @@ -2312,7 +8243,6 @@ ##### Chores * up cron (73a50d17) -* incrementing version number - v2.8.8 (b331b942) * update changelog for v2.8.8 (c03d5db7) ##### Bug Fixes @@ -2334,7 +8264,6 @@ ##### Chores -* incrementing version number - v2.8.7 (3f8248d6) * update changelog for v2.8.7 (2ca38e7b) ##### Bug Fixes @@ -2349,7 +8278,6 @@ ##### Chores -* incrementing version number - v2.8.6 (af6ce447) * update changelog for v2.8.6 (f3306d03) ##### Documentation Changes @@ -2377,7 +8305,6 @@ ##### Chores * **i18n:** fallback strings for new resources: nodebb.error (8335f90a) -* incrementing version number - v2.8.5 (bff5ce2d) * update changelog for v2.8.5 (24e58c28) ##### New Features @@ -2402,7 +8329,6 @@ ##### Chores -* incrementing version number - v2.8.4 (a46b2bbc) * update changelog for v2.8.4 (c13f0e21) ##### Bug Fixes @@ -2413,7 +8339,6 @@ ##### Chores -* incrementing version number - v2.8.3 (c20b20a7) * update changelog for v2.8.3 (eb2841ee) #### v2.8.3 (2023-01-25) @@ -2421,7 +8346,6 @@ ##### Chores * remove extraneous lines from changelog (48c9f447) -* incrementing version number - v2.8.2 (050e43f8) * update changelog for v2.8.2 (66aa3169) ##### Bug Fixes @@ -2449,7 +8373,6 @@ ##### Chores -* incrementing version number - v2.8.1 (727f879e) * update changelog for v2.8.1 (d17d4ec0) ##### Bug Fixes @@ -2462,7 +8385,6 @@ * fallbacks for new language string (8a69e740) * remove extraneous lines from changelog (bbaf26ce) -* incrementing version number - v2.8.0 (8e77673d) * update changelog for v2.8.0 (a5c2edb9) ##### Bug Fixes @@ -2480,7 +8402,6 @@ * update dependency mocha to v10.2.0 (#11094) (c4cc1e61) * up jquery (3e8f5378) * remove extraneous lines from changelog (e213dbc3) -* incrementing version number - v2.7.0 (96cc0617) * update changelog for v2.7.0 (4701c96d) * **i18n:** * fallback strings for new resources: nodebb.admin-settings-email (717b3612) @@ -2561,25 +8482,7 @@ ##### Chores -* incrementing version number - v2.6.0 (e7fcf482) * update changelog for v2.6.0 (eedd84ae) -* incrementing version number - v2.5.8 (dec0e7de) -* incrementing version number - v2.5.7 (5836bf4a) -* incrementing version number - v2.5.6 (c7bd7dbf) -* incrementing version number - v2.5.5 (3509ed94) -* incrementing version number - v2.5.4 (e83260ca) -* incrementing version number - v2.5.3 (7e922936) -* incrementing version number - v2.5.2 (babcd17e) -* incrementing version number - v2.5.1 (ce3aa950) -* incrementing version number - v2.5.0 (01d276cb) -* incrementing version number - v2.4.5 (dd3e1a28) -* incrementing version number - v2.4.4 (d5525c87) -* incrementing version number - v2.4.3 (9c647c6c) -* incrementing version number - v2.4.2 (3aa7b855) -* incrementing version number - v2.4.1 (60cbd148) -* incrementing version number - v2.4.0 (4834cde3) -* incrementing version number - v2.3.1 (d2425942) -* incrementing version number - v2.3.0 (046ea120) ##### Documentation Changes @@ -2620,7 +8523,6 @@ * update postgres docker tag to v14 (#10829) (5aa55d29) * update dependency eslint to v8.23.1 (#10885) (0c6fb6e3) * remove derpy extra changelog bits (445f09f0) -* incrementing version number - v2.5.8 (dec0e7de) * update changelog for v2.5.8 (c9cd8975) ##### New Features @@ -2745,7 +8647,6 @@ * really fix indents this time (c2024f34) * fix indents (d50512e7) * add bootstrap5 to test runner for now (be5d6d29) -* incrementing version number - v2.5.7 (5836bf4a) * update changelog for v2.5.7 (17e948ab) ##### New Features @@ -2780,7 +8681,6 @@ ##### Chores -* incrementing version number - v2.5.6 (c7bd7dbf) * update changelog for v2.5.6 (e92238d0) ##### Performance Improvements @@ -2791,7 +8691,6 @@ ##### Chores -* incrementing version number - v2.5.5 (3509ed94) * update changelog for v2.5.5 (e7d0040d) ##### Bug Fixes @@ -2804,7 +8703,6 @@ ##### Chores * up plugins (b91ef6dd) -* incrementing version number - v2.5.4 (e83260ca) * update changelog for v2.5.4 (aabf073c) #### v2.5.4 (2022-10-11) @@ -2812,7 +8710,6 @@ ##### Chores * 🤔 (7240e8ce) -* incrementing version number - v2.5.3 (7e922936) * update changelog for v2.5.3 (fdf240f6) ##### Continuous Integration @@ -2834,7 +8731,6 @@ * remove duplicate version increment lines in changelog (5dbcfef9) * bring back treding plugins (8aa1596d) -* incrementing version number - v2.5.2 (babcd17e) * update changelog for v2.5.2 (84b6a7c7) ##### New Features @@ -2864,7 +8760,6 @@ ##### Chores -* incrementing version number - v2.5.1 (ce3aa950) * update changelog for v2.5.1 (2b2fd4f3) ##### Bug Fixes @@ -2883,7 +8778,6 @@ ##### Chores -* incrementing version number - v2.5.0 (01d276cb) * update changelog for v2.5.0 (1076285d) ##### Bug Fixes @@ -2905,7 +8799,6 @@ * fallback strings for new resources: nodebb.admin-advanced-cache (90fc50e1) * move @textcomplete and its modules to composer-default (3cbb7a3d) * remove client-side js file for tpl that no longer exists (bc2ea860) -* incrementing version number - v2.4.5 (dd3e1a28) * update changelog for v2.4.5 (d505cc47) * **deps:** @@ -2968,7 +8861,6 @@ ##### Chores -* incrementing version number - v2.4.4 (d5525c87) * update changelog for v2.4.4 (77e492b8) ##### Bug Fixes @@ -2980,7 +8872,6 @@ ##### Chores -* incrementing version number - v2.4.3 (9c647c6c) * update changelog for v2.4.3 (06da15a5) ##### Bug Fixes @@ -2991,7 +8882,6 @@ ##### Chores -* incrementing version number - v2.4.2 (3aa7b855) * update changelog for v2.4.2 (ba7a3466) ##### Bug Fixes @@ -3002,7 +8892,6 @@ ##### Chores -* incrementing version number - v2.4.1 (60cbd148) * update changelog for v2.4.1 (4b6baabb) ##### Documentation Changes @@ -3026,7 +8915,6 @@ * update docker/build-push-action action to v3 (bfd6318c) * update docker/login-action action to v2 (3d68accf) * update docker/setup-buildx-action action to v2 (371ac032) -* incrementing version number - v2.4.0 (4834cde3) * update changelog for v2.4.0 (c4714ff7) ##### Bug Fixes @@ -3043,7 +8931,6 @@ * update to new transifex project url (659cfe85) * re-order interstitial tests so email and gdpr tests are in sub-blocks (342cca35) * opt-out of dependabot, due to conflicts with renovate (70d60289) -* incrementing version number - v2.3.1 (d2425942) * update changelog for v2.3.1 (2f487175) * **i18n:** * fallback strings for new resources: nodebb.admin-settings-email (cdaa8f21) @@ -3104,7 +8991,6 @@ * bump sanitize-html from 2.7.0 to 2.7.1 in /install (7b606d2e) * bump webpack from 5.73.0 to 5.74.0 in /install (a9900625) * **i18n:** fallback strings for new resources: nodebb.admin-settings-advanced, nodebb.admin-menu, nodebb.error (17120e03) -* incrementing version number - v2.3.0 (046ea120) * update changelog for v2.3.0 (a6f7fff0) ##### New Features @@ -3166,12 +9052,7 @@ * bump jquery-ui from 1.13.1 to 1.13.2 in /install (abb19e98) * bump nodebb-theme-persona in /install (9e52b8c6) * bump ioredis from 5.1.0 to 5.2.0 in /install (8c20fdad) -* incrementing version number - v2.2.4 (d1d63e6b) * update changelog for v2.2.4 (52f7ed64) -* incrementing version number - v2.2.3 (f80476b9) -* incrementing version number - v2.2.2 (343ffa66) -* incrementing version number - v2.2.1 (efc77b2a) -* incrementing version number - v2.2.0 (eecb836d) ##### Bug Fixes @@ -3192,11 +9073,7 @@ * **deps-dev:** * bump @commitlint/cli from 17.0.2 to 17.0.3 in /install (9e44cdad) * bump eslint from 8.18.0 to 8.19.0 in /install (7139ad5f) -* incrementing version number - v2.2.3 (f80476b9) * update changelog for v2.2.3 (8719a93f) -* incrementing version number - v2.2.2 (343ffa66) -* incrementing version number - v2.2.1 (efc77b2a) -* incrementing version number - v2.2.0 (eecb836d) ##### Bug Fixes @@ -3209,10 +9086,7 @@ ##### Chores -* incrementing version number - v2.2.2 (343ffa66) * update changelog for v2.2.2 (f59ddc34) -* incrementing version number - v2.2.1 (efc77b2a) -* incrementing version number - v2.2.0 (eecb836d) ##### Bug Fixes @@ -3230,9 +9104,7 @@ * **deps-dev:** * bump eslint from 8.17.0 to 8.18.0 in /install (bfd626b0) * bump jsdom from 19.0.0 to 20.0.0 in /install (d037c2c9) -* incrementing version number - v2.2.1 (efc77b2a) * update changelog for v2.2.1 (667780cf) -* incrementing version number - v2.2.0 (eecb836d) ##### Bug Fixes @@ -3251,7 +9123,6 @@ * fallback strings for new resources: nodebb.admin-settings-uploads (da481163) * fallback strings for new resources: nodebb.admin-settings-advanced (34d75e96) * add in warning in language directories about not editing files directly (06074e8c) -* incrementing version number - v2.2.0 (eecb836d) * update changelog for v2.2.0 (bb3766df) ##### Documentation Changes @@ -3327,7 +9198,6 @@ * **deps-dev:** * bump @commitlint/config-angular in /install (e5e788d2) * bump eslint from 8.16.0 to 8.17.0 in /install (52c86dba) -* incrementing version number - v2.1.0 (a3114d33) * update changelog for v2.1.0 (7121949d) ##### Documentation Changes @@ -3347,15 +9217,12 @@ ##### Chores * update changelog for v2.1.0 (7121949d) -* incrementing version number - v2.1.0 (987045c3) * bump persona (91f32487) * update changelog for v2.0.1 (abd8e216) -* incrementing version number - v2.0.1 (768427d4) * remove optional `middleware` parameter from setupPageRoute and setupAdminPageRoute calls (54ff768f) * add note re: sort module (5aca106b) * up emoji (265a0139) * update changelog for v2.0.0 (60fc3f5d) -* incrementing version number - v2.0.0 (f23c3ff5) * **deps:** * bump nodebb-plugin-2factor from 4.0.1 to 5.0.0 in /install (6e95e5c5) * update dependency lint-staged to v12.5.0 (01f607a5) @@ -3463,7 +9330,6 @@ ##### Chores -* incrementing version number - v2.0.0 (f23c3ff5) * update changelog for v1.19.7 (a764df52) * **deps:** * update dependency mocha to v10 (a7986773) @@ -3509,7 +9375,6 @@ ##### Chores -* incrementing version number - v1.19.7 (0c4850e2) * update changelog for v1.19.6 (acca7811) * **deps:** * update commitlint monorepo to v16.2.4 (0d9179f7) @@ -3556,7 +9421,6 @@ ##### Chores -* incrementing version number - v1.19.6 (283a0072) * update changelog for v1.19.5 (05032ca2) * **deps:** * bump semver from 7.3.6 to 7.3.7 in /install (#10493) (65cec8d0) @@ -3639,7 +9503,6 @@ ##### Chores -* incrementing version number - v1.19.5 (48d6eb4f) * update changelog for v1.19.4 (0e6e49b2) * **deps:** * bump less from 3.13.1 to 4.1.2 in /install (#9856) (d33485f6) @@ -3692,10 +9555,8 @@ ##### Chores -* incrementing version number - v1.19.4 (67282057) * delay `filter:email.send` removal to v2.0.0 (83fd4311) * up persona (c23b2089) -* incrementing version number - v1.19.3 (09cb11c8) * update changelog for v1.19.3 (0b48ec54) * **deps:** * bump postcss from 8.4.7 to 8.4.8 in /install (#10372) (d7a4ae1f) @@ -3793,7 +9654,6 @@ * update commitlint monorepo to v16.2.1 (2290cee5) * update dependency eslint to v8.9.0 (763cd193) * remove punycode dep (e9cb1452) -* incrementing version number - v1.19.2 (e49b31f0) * update changelog for v1.19.2 (f012984d) ##### New Features @@ -3869,7 +9729,6 @@ * up persona (f29bed27) * up packages (b4a4e60e) * up persona (3e30b6cd) -* incrementing version number - v1.19.1 (7f450268) * update changelog for v1.19.1 (55df683a) * **deps:** * bump ioredis from 4.28.4 to 4.28.5 in /install (#10254) (b496ad44) @@ -4014,7 +9873,6 @@ * add test.sh to gitignore (d7796f0b) * delete test script (250274c7) * remove unused lang key #10180 (2fe91e36) -* incrementing version number - v1.19.0 (18b0a29f) * update changelog for v1.19.0 (c8f1bc53) * **i18n:** * fallback strings for new resources: nodebb.admin-settings-user (78cd6de7) @@ -4109,7 +9967,6 @@ * right dropdown (7aa85882) * right dropdown (a998cc1c) * update readme mongodb version (af5393ec) -* incrementing version number - v1.18.6 (3a78a151) * update changelog for v1.18.6 (3c8109e2) * **deps:** * update commitlint monorepo (56d134c3) @@ -4417,7 +10274,6 @@ * up mentions (98b98a11) * up mentions (3e4d477e) * fix type.yaml example and summary (591424ce) -* incrementing version number - v1.18.5 (1e418f5b) * update changelog for v1.18.5 (82eda23a) * remove .opacity() mixin as it is supported cross-browser (28efcb59) * **deps:** @@ -4525,7 +10381,6 @@ * remove .opacity() mixin as it is supported cross-browser (28efcb59) * up themes (463b2076) * up persona (1438f409) -* incrementing version number - v1.18.4 (945c2b0b) * update changelog for v1.18.4 (7cbcb521) * **deps:** * update dependency lint-staged to v11.2.6 (8d4bb8bb) @@ -4678,7 +10533,6 @@ ##### Chores * up persona (f4e62fb1) -* incrementing version number - v1.18.3 (57358743) * update changelog for v1.18.3 (f066ddb8) * **deps:** * update dependency lint-staged to v11.2.0 (840b49b9) @@ -4754,7 +10608,6 @@ ##### Chores * **deps:** update docker/build-push-action action to v2.7.0 (ee027719) -* incrementing version number - v1.18.2 (0a56158b) * update changelog for v1.18.2 (27e9282a) ##### New Features @@ -4829,7 +10682,6 @@ ##### Chores * **deps:** update commitlint monorepo to v13 (87ba768f) -* incrementing version number - v1.18.1 (f8f80e4f) * update changelog for v1.18.1 (0713475d) ##### New Features @@ -4872,7 +10724,6 @@ ##### Chores * found some hooks that don't play well docgen (ae793b4a) -* incrementing version number - v1.18.0 (1e436ae7) * update changelog for v1.18.0 (2fd9c095) * **deps:** update dependency mocha to v9.1.1 (64bac178) @@ -4942,7 +10793,6 @@ * update dependency eslint to v7.31.0 (f5a53b7f) * update dependency lint-staged to v11.0.1 (02101315) * up markdown/composer-default, fixes: #9708 (b74eefac) -* incrementing version number - v1.17.2 (46be2046) * update changelog for v1.17.2 (5c9c0605) ##### Documentation Changes @@ -5095,7 +10945,6 @@ * lint (2b42e7ed) * fix indentation (d07229aa) * up rewards (ca9ca876) -* incrementing version number - v1.17.1 (0aad1312) * update changelog for v1.17.1 (1e6ed0ad) ##### Documentation Changes @@ -5207,7 +11056,6 @@ * update dependency mocha to v8.4.0 (461e187b) * update dependency eslint to v7.25.0 (32c20806) * update dependency grunt to v1.4.0 (a30deef3) -* incrementing version number - v1.17.0 (75f7972b) * update changelog for v1.17.0 (4c441a1b) ##### Documentation Changes @@ -5350,23 +11198,16 @@ * update dependency husky to v5 (d89ccf26) * update dependency lint-staged to v10.5.4 (030ecffa) * update dependency eslint to v7.19.0 (3696a199) -* incrementing version number - v1.17.0-beta.5 (42c4f963) * fix indent (6406e527) * benchpress 2.4.1 (3403635c) * remove log (a1ee1a2a) -* incrementing version number - v1.17.0-beta.4 (91992240) * bump composer-default (289bfc0b) * up themes (d14ba1f4) * remove node 10 (8d3ec234) * bump composer-default to 6.5.20 (33fbfdfe) -* incrementing version number - v1.17.0-beta.3 (6e8b1bb9) * add multiparty dep (ef3ec96a) -* incrementing version number - v1.17.0-beta.2 (0c1945dc) -* incrementing version number - v1.17.0-beta.1 (31872aac) * bump composer (30954789) * bump deps (#9335) (b9fd2c87) -* incrementing version number - v1.17.0-beta.0 (b61257ef) -* incrementing version number - v1.16.3-beta.0 (477157cc) * extra console.log (1ae8dda8) * up composer (1c9acef6) * eslint max-len (cc9d6fd0) @@ -5385,7 +11226,6 @@ * fallbacks (74be1a59) * deprecation notices for plugins using plugin old hook methods (3052256d) * add deprecation notice in comments for ajaxify.loadExtraScripts (8b09292e) -* incrementing version number - v1.16.2 (ea7f8381) * update changelog for v1.16.2 (d3883d4b) ##### Documentation Changes @@ -5929,8 +11769,6 @@ * update dependency husky to v4.3.8 (a6f5de86) * update dependency eslint to v7.18.0 (afbef95f) * update dependency husky to v4.3.7 (d3e041e2) -* incrementing version number - v1.16.2-beta.0 (43ff8e41) -* incrementing version number - v1.16.1 (e3cd7a23) * update changelog for v1.16.1 (b6d71710) ##### New Features @@ -6008,10 +11846,8 @@ ##### Chores * increase test timeout (0d7dfeeb) -* incrementing version number - v1.16.1-beta.0 (5fcf3ea6) * add deprecation notice to topic thumb tpl value (05d8b3c3) * minor reordering of lines (8e5a413e) -* incrementing version number - v1.16.0 (6d01fd50) * update changelog for v1.16.0 (1437c62f) * **deps:** * update dependency eslint to v7.17.0 (18ae7cf7) @@ -6134,7 +11970,6 @@ * update dependency lint-staged to v10.5.3 (3e6f7359) * appease codeclimate (9f62df15) * add comment for clarification (6037f5ee) -* incrementing version number - v1.15.5 (57cd1343) * update changelog for v1.15.5 (b0299326) * **i18n:** fallbacks for new topic thumb keys (15f1a089) @@ -6259,7 +12094,6 @@ ##### Chores * up persona (c111bde1) -* incrementing version number - v1.15.4 (a1b658d9) * update changelog for v1.15.4 (252dddfc) ##### New Features @@ -6284,7 +12118,6 @@ * fallbacks for nodebb.error (82ca3760) * fallbacks for nodebb.topic (5b269bc5) * remove test code (07fe959c) -* incrementing version number - v1.15.3 (d1ae08fa) * update changelog for v1.15.3 (cf157c9b) ##### New Features @@ -6412,10 +12245,8 @@ * up persona (5c9ff18e) * add missing plugin hook deprecation warning (98a05e4d) * pin autoprefixer to latest (46eb7701) -* incrementing version number - v1.15.3-beta.0 (28fa03bd) * up persona (81984285) * up slick (5f2fe883) -* incrementing version number - v1.15.2 (5867a5b9) * update changelog for v1.15.2 (37965d45) * **spec:** replace ugly hack with another hack for optional properties (45a4f136) * **deps:** @@ -6494,9 +12325,7 @@ ##### Chores -* incrementing version number - v1.15.2-beta.1 (20c05e80) * remove debug log (0a0b4661) -* incrementing version number - v1.15.2-beta.0 (996174a1) * **deps:** update dependency smtp-server to v3.8.0 (5f5f0edb) ##### Documentation Changes @@ -6571,7 +12400,6 @@ ##### Chores -* incrementing version number - v1.15.1-beta.0 (e033da8a) * fallback l10n for admin-settings-api (8368c25b) * **deps:** * update dependency eslint to v7.13.0 (bcbc0854) @@ -6647,40 +12475,27 @@ ##### Chores * update changelog for v1.15.0-rc.5 (69f4d5ac) -* incrementing version number - v1.15.0-rc.5 (4bd2788b) * add info log into tests (b6d86878) * update renovate config to automatically merge non-major version bumps #yolo (1c8b8ce1) * update changelog for v1.15.0-rc.4 (16882941) -* incrementing version number - v1.15.0-rc.4 (57b49320) * update changelog for v1.15.0-rc.3 (2738041b) -* incrementing version number - v1.15.0-rc.3 (6de7760a) * bump persona (e0b67817) * update changelog for v1.15.0-rc.2 (c3a7ab54) -* incrementing version number - v1.15.0-rc.2 (7c084134) * update changelog for v1.15.0-rc.1 (4f49b3da) -* incrementing version number - v1.15.0-rc.1 (943424b5) * update changelog for v1.15.0-rc.0 (aab5f018) -* incrementing version number - v1.15.0-rc.0 (8d48455b) * update changelog for v1.15.0-beta.30 (39648722) -* incrementing version number - v1.15.0-beta.30 (2dd3c962) * some optimizations for codeclimate (4a63c20a) * update changelog for v1.15.0-beta.29 (63696c40) -* incrementing version number - v1.15.0-beta.29 (fca176d2) * refactor src/emailer.js (75459517) * update changelog for v1.15.0-beta.28 (fd975a66) -* incrementing version number - v1.15.0-beta.28 (57f83162) * update changelog for v1.15.0-beta.27 (70673824) -* incrementing version number - v1.15.0-beta.27 (78fad240) * lint notifications.js (4fc84e9f) * update changelog for v1.15.0-beta.26 (5e01d288) -* incrementing version number - v1.15.0-beta.26 (62c44095) * up persona (ff8a833a) * up persona (4a0f54ae) * update changelog for v1.15.0-beta.25 (240a04b4) -* incrementing version number - v1.15.0-beta.25 (1124d4ee) * up persona (032e6001) * update changelog for v1.15.0-beta.24 (72ab5ba1) -* incrementing version number - v1.15.0-beta.24 (23ba071d) * up persona (5407bf48) * up persona (4c2eab4b) * up persona (91133b0f) @@ -6688,72 +12503,30 @@ * up persona (9dc4db1f) * up persona (ba70a1bf) * update changelog for v1.15.0-beta.23 (e6ea208c) -* incrementing version number - v1.15.0-beta.23 (61a04eb9) * update changelog for v1.15.0-beta.22 (59ee74c2) -* incrementing version number - v1.15.0-beta.22 (9c9329ee) * update changelog for v1.15.0-beta.21 (8089542e) -* incrementing version number - v1.15.0-beta.21 (966cdc13) * update changelog for v1.15.0-beta.20 (1650f303) -* incrementing version number - v1.15.0-beta.20 (c8e57ec1) * update changelog for v1.15.0-beta.19 (9cde5105) -* incrementing version number - v1.15.0-beta.19 (2eb7c284) * update changelog for v1.15.0-beta.18 (b2ca9686) -* incrementing version number - v1.15.0-beta.18 (e096791e) * update changelog for v1.15.0-beta.17 (d6178158) -* incrementing version number - v1.15.0-beta.17 (f1c28092) * update changelog for v1.15.0-beta.16 (e08297ff) -* incrementing version number - v1.15.0-beta.16 (6043c9cb) * update changelog for v1.15.0-beta.15 (f878b92c) -* incrementing version number - v1.15.0-beta.15 (10b94f9b) * update changelog for v1.15.0-beta.14 (5e60d092) -* incrementing version number - v1.15.0-beta.14 (6ca4b86f) * update commitlint config (61a8c6f0) * update changelog for v1.15.0-beta.13 (ca8d492b) -* incrementing version number - v1.15.0-beta.13 (bdd71c51) * update changelog for v1.15.0-beta.12 (0a242605) -* incrementing version number - v1.15.0-beta.12 (b852c9b7) * update changelog for v1.15.0-beta.11 (f07ba866) -* incrementing version number - v1.15.0-beta.11 (c1ce7391) * update changelog for v1.15.0-beta.10 (9c34eced) -* incrementing version number - v1.15.0-beta.10 (f252d4d7) * update changelog for v1.15.0-beta.9 (affc7927) -* incrementing version number - v1.15.0-beta.9 (8dc513da) * update changelog for v1.15.0-beta.8 (3b960c3b) -* incrementing version number - v1.15.0-beta.8 (34bb869c) * update changelog for v1.15.0-beta.7 (e449ff9a) -* incrementing version number - v1.15.0-beta.7 (fd917b8e) * update changelog for v1.15.0-beta.6 (a7f03b64) -* incrementing version number - v1.15.0-beta.6 (a9019cbe) * update changelog for v1.15.0-beta.5 (0e90064e) -* incrementing version number - v1.15.0-beta.5 (81e4c4df) * update changelog for v1.15.0-beta.4 (6c4aed8c) -* incrementing version number - v1.15.0-beta.4 (f2726a6d) * update changelog for v1.15.0-beta.3 (11e2ccab) -* incrementing version number - v1.15.0-beta.3 (39178c2d) * update changelog for v1.15.0-beta.2 (d8a9f1c3) -* incrementing version number - v1.15.0-beta.2 (59b50d0a) * update changelog for v1.15.0-beta.1 (aeca19d5) -* incrementing version number - v1.15.0-beta.1 (4fa57fbb) -* incrementing version number - v1.15.0-beta.0 (bff80983) -* incrementing version number - v1.14.3-beta.16 (d9a05035) -* incrementing version number - v1.14.3-beta.15 (e2a253f2) -* incrementing version number - v1.14.3-beta.14 (9500871e) -* incrementing version number - v1.14.3-beta.13 (b5a2e4b6) -* incrementing version number - v1.14.3-beta.12 (f4c986a7) -* incrementing version number - v1.14.3-beta.11 (8618c32a) -* incrementing version number - v1.14.3-beta.10 (fa341714) -* incrementing version number - v1.14.3-beta.9 (9945c409) -* incrementing version number - v1.14.3-beta.8 (b5dcce9c) -* incrementing version number - v1.14.3-beta.7 (2531c44c) -* incrementing version number - v1.14.3-beta.6 (97088f68) -* incrementing version number - v1.14.3-beta.5 (a33a8a5a) -* incrementing version number - v1.14.3-beta.4 (55b3e376) -* incrementing version number - v1.14.3-beta.3 (5a5abf3c) -* incrementing version number - v1.14.3-beta.2 (bbab183f) -* incrementing version number - v1.14.3-beta.1 (2c06f6ac) -* incrementing version number - v1.14.3-beta.0 (3f87d5f9) * update changelog for v1.14.2 (cd94c24a) -* incrementing version number - v1.14.2 (1e4d683f) * update changelog for v1.14.2 (488e69fd) * **deps:** * update dependency mocha to v8.2.1 (35e725d1) @@ -7536,14 +13309,10 @@ ##### Chores -* incrementing version number - v1.14.2 (1e4d683f) * update changelog for v1.14.2 (488e69fd) * up theme (63fb2ad7) -* incrementing version number - v1.14.2-beta.1 (9d1465d0) * up theme (15aabfd3) * up theme (599c5015) -* incrementing version number - v1.14.2-beta.0 (fca4ee31) -* incrementing version number - v1.14.1 (31203b16) * update changelog for v1.14.1 (d4c16086) * **deps:** update commitlint monorepo to v9.1.1 (0ca7e28a) @@ -7584,13 +13353,7 @@ ##### Chores -* incrementing version number - v1.14.1 (31203b16) * update changelog for v1.14.1 (d4c16086) -* incrementing version number - v1.14.1-beta.3 (e8ecef6b) -* incrementing version number - v1.14.1-beta.2 (b8d9b6b1) -* incrementing version number - v1.14.1-beta.1 (be85123a) -* incrementing version number - v1.14.1-beta.0 (c279875a) -* incrementing version number - v1.14.0 (bb73d6a4) * update changelog for v1.14.0 (cffae0f1) ##### New Features @@ -7651,13 +13414,10 @@ ##### Chores -* incrementing version number - v1.14.0 (bb73d6a4) * update changelog for v1.14.0 (cffae0f1) * bump persona (19f9af94) * latest translations and fallbacks (22879633) -* incrementing version number - v1.13.3 (ee583e80) * bump persona (d2bd746c) -* incrementing version number - v1.13.2 (beafd613) * **deps:** * update dependency smtp-server to v3.7.0 (e80100b5) * update dependency eslint to v7.3.1 (#8417) (33492744) @@ -8146,9 +13906,7 @@ ##### Chores -* incrementing version number - v1.13.3 (ee583e80) * bump persona (d2bd746c) -* incrementing version number - v1.13.2 (beafd613) * **deps:** * update dependency coveralls to v3.1.0 (5ed4a108) * pin dependency @apidevtools/swagger-parser to 9.0.1 (51eccef5) @@ -8379,11 +14137,9 @@ ##### Chores -* incrementing version number - v1.13.2 (71f4607d) * bump themes (027f3f22) * bump vanilla (236a1730) * bump persona (82ace391) -* incrementing version number - v1.13.1 (cc6758a0) * **deps:** * update dependency eslint to v6.8.0 (#8062) (15783213) * update dependency nyc to v15 (#8094) (976e26a9) @@ -8475,8 +14231,6 @@ ##### Chores -* incrementing version number - v1.13.1 (d1e0672f) -* incrementing version number - v1.13.0 (c38b2d23) * **deps:** * update dependency husky to v3.1.0 (#8046) (c3418c26) * update dependency coveralls to v3.0.9 (#8067) (0aeee144) @@ -8546,8 +14300,6 @@ ##### Chores -* incrementing version number - v1.13.0 (c38b2d23) -* incrementing version number - v1.12.2 (810e2c0b) * **deps:** * update dependency jsdom to v15.2.1 (9d946d1c) * update dependency eslint to v6.6.0 (d0e428e9) @@ -9159,12 +14911,10 @@ ##### Chores -* incrementing version number - v1.12.2 (22db818e) * bump themes #7576 (d349754d) * bump themes (59bdc970) * bump themes (abcca134) * bump themes (551b18cd) -* incrementing version number - v1.12.1 (dd973abe) * **deps:** * update dependency lint-staged to v8.1.7 (dc6b49ca) * update commitlint monorepo (9998e86b) @@ -9243,11 +14993,9 @@ ##### Chores -* incrementing version number - v1.12.1 (dd973abe) * comment cleanup (6bed51ef) * bump persona (1f4db132) * bump themes, fix: https://github.com/NodeBB/NodeBB/issues/7446 (0d19bb3d) -* incrementing version number - v1.12.0 (d87f8c52) * **deps:** * update dependency lint-staged to v8.1.5 (ae17481d) * update node:8.15.1 docker digest to 918f0be (5f787d73) @@ -9348,8 +15096,6 @@ ##### Chores -* incrementing version number - v1.12.0 (d87f8c52) -* incrementing version number - v1.11.2 (757bff27) * **deps:** * update node:8.15.1 docker digest to 287b8a5 (0b8d1833) * update node.js to v8.15.1 (ae89db28) @@ -9498,8 +15244,6 @@ ##### Chores -* incrementing version number - v1.11.2 (757bff27) -* incrementing version number - v1.11.1 (2104877c) * **deps:** * update node:8.15.0 docker digest to cb66110 (1719cd77) * update dependency eslint-plugin-import to v2.15.0 (f7191eb9) @@ -9809,7 +15553,6 @@ ##### Chores -* incrementing version number - v1.11.1 (2104877c) * **deps:** * update dependency husky to v1.2.1 (63f4b569) * update node:8.14.0 docker digest to dd2381f (7449ae3e) diff --git a/Dockerfile b/Dockerfile index 14f61d3ada..ceb707c374 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,51 +1,76 @@ -FROM --platform=$BUILDPLATFORM node:lts as npm +FROM node:lts as build -RUN mkdir -p /usr/src/build && \ - chown -R node:node /usr/src/build -WORKDIR /usr/src/build +ENV NODE_ENV=production \ + DAEMON=false \ + SILENT=false \ + USER=nodebb \ + UID=1001 \ + GID=1001 -ARG NODE_ENV -ENV NODE_ENV $NODE_ENV +WORKDIR /usr/src/app/ -COPY --chown=node:node install/package.json /usr/src/build/package.json +COPY . /usr/src/app/ -USER node +# Install corepack to allow usage of other package managers +RUN corepack enable -RUN npm install --omit=dev +# Removing unnecessary files for us +RUN find . -mindepth 1 -maxdepth 1 -name '.*' ! -name '.' ! -name '..' -exec bash -c 'echo "Deleting {}"; rm -rf {}' \; -FROM node:lts as rebuild +# Prepage package.json +RUN cp /usr/src/app/install/package.json /usr/src/app/ -ARG BUILDPLATFORM -ARG TARGETPLATFORM +RUN apt-get update \ + && DEBIAN_FRONTEND=noninteractive \ + apt-get -y --no-install-recommends install \ + tini -RUN mkdir -p /usr/src/build && \ - chown -R node:node /usr/src/build +RUN groupadd --gid ${GID} ${USER} \ + && useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \ + && chown -R ${USER}:${USER} /usr/src/app/ -COPY --from=npm /usr/src/build /usr/src/build +USER ${USER} -RUN if [ $BUILDPLATFORM != $TARGETPLATFORM ]; then \ - npm rebuild && \ - npm cache clean --force; fi +RUN npm install --omit=dev \ + && rm -rf .npm + # TODO: generate lockfiles for each package manager + ## pnpm import \ -FROM node:lts-slim as run +FROM node:lts-slim AS final -ARG NODE_ENV -ENV NODE_ENV=$NODE_ENV \ - daemon=false \ - silent=false +ENV NODE_ENV=production \ + DAEMON=false \ + SILENT=false \ + USER=nodebb \ + UID=1001 \ + GID=1001 -RUN mkdir -p /usr/src/app && \ - chown -R node:node /usr/src/app +WORKDIR /usr/src/app/ -COPY --chown=node:node --from=rebuild /usr/src/build /usr/src/app +RUN corepack enable \ + && groupadd --gid ${GID} ${USER} \ + && useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \ + && mkdir -p /usr/src/app/logs/ /opt/config/ \ + && chown -R ${USER}:${USER} /usr/src/app/ /opt/config/ +COPY --from=build --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/install/docker/setup.json /usr/src/app/ +COPY --from=build --chown=${USER}:${USER} /usr/bin/tini /usr/src/app/install/docker/entrypoint.sh /usr/local/bin/ -WORKDIR /usr/src/app +RUN chmod +x /usr/local/bin/entrypoint.sh \ + && chmod +x /usr/local/bin/tini -USER node +# TODO: Have docker-compose use environment variables to create files like setup.json and config.json. +# COPY --from=hairyhenderson/gomplate:stable /gomplate /usr/local/bin/gomplate -COPY --chown=node:node . /usr/src/app +USER ${USER} EXPOSE 4567 -VOLUME ["/usr/src/app/node_modules", "/usr/src/app/build", "/usr/src/app/public/uploads", "/opt/config"] -ENTRYPOINT ["./install/docker/entrypoint.sh"] \ No newline at end of file + +VOLUME ["/usr/src/app/node_modules", "/usr/src/app/build", "/usr/src/app/public/uploads", "/opt/config/"] + +# Utilising tini as our init system within the Docker container for graceful start-up and termination. +# Tini serves as an uncomplicated init system, adept at managing the reaping of zombie processes and forwarding signals. +# This approach is crucial to circumvent issues with unmanaged subprocesses and signal handling in containerised environments. +# By integrating tini, we enhance the reliability and stability of our Docker containers. +# Ensures smooth start-up and shutdown processes, and reliable, safe handling of signal processing. +ENTRYPOINT ["tini", "--", "entrypoint.sh"] \ No newline at end of file diff --git a/Gruntfile.js b/Gruntfile.js index dcfa831cd6..60d8f8b23e 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -173,7 +173,10 @@ module.exports = function (grunt) { winston.error(err.stack); } if (worker) { - worker.send({ compiling: compiling }); + worker.send({ + compiling: compiling, + livereload: true, // Send livereload event via Socket.IO for instant browser refresh + }); } }); }); diff --git a/README.md b/README.md index 307d90cca2..dbf2ff306f 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![Workflow](https://github.com/NodeBB/NodeBB/actions/workflows/test.yaml/badge.svg)](https://github.com/NodeBB/NodeBB/actions/workflows/test.yaml) [![Coverage Status](https://coveralls.io/repos/github/NodeBB/NodeBB/badge.svg?branch=master)](https://coveralls.io/github/NodeBB/NodeBB?branch=master) [![Code Climate](https://codeclimate.com/github/NodeBB/NodeBB/badges/gpa.svg)](https://codeclimate.com/github/NodeBB/NodeBB) -[![](https://dcbadge.vercel.app/api/server/p6YKPXu7er?style=flat)](https://discord.gg/p6YKPXu7er) +[![](https://dcbadge.limes.pink/api/server/S2aAweHwDc?style=flat)](https://discord.gg/S2aAweHwDc) [**NodeBB Forum Software**](https://nodebb.org) is powered by Node.js and supports either Redis, MongoDB, or a PostgreSQL database. It utilizes web sockets for instant interactions and real-time notifications. NodeBB takes the best of the modern web: real-time streaming discussions, mobile responsiveness, and rich RESTful read/write APIs, while staying true to the original bulletin board/forum format → categorical hierarchies, local user accounts, and asynchronous messaging. @@ -39,8 +39,8 @@ Our minimalist "Harmony" theme gets you going right away, no coding experience r NodeBB requires the following software to be installed: -* A version of Node.js at least 16 or greater ([installation/upgrade instructions](https://github.com/nodesource/distributions)) -* MongoDB, version 3.6 or greater **or** Redis, version 2.8.9 or greater +* A version of Node.js at least 20 or greater ([installation/upgrade instructions](https://github.com/nodesource/distributions)) +* MongoDB, version 5 or greater **or** Redis, version 7.2 or greater * If you are using [clustering](https://docs.nodebb.org/configuring/scaling/) you need Redis installed and configured. * nginx, version 1.3.13 or greater (**only if** intending to use nginx to proxy requests to a NodeBB) diff --git a/app.js b/app.js index b6067d726b..c493817491 100644 --- a/app.js +++ b/app.js @@ -33,7 +33,6 @@ const path = require('path'); const file = require('./src/file'); process.env.NODE_ENV = process.env.NODE_ENV || 'production'; -global.env = process.env.NODE_ENV || 'production'; // Alternate configuration file support const configFile = path.resolve(__dirname, nconf.any(['config', 'CONFIG']) || 'config.json'); diff --git a/dev.Dockerfile b/dev.Dockerfile new file mode 100644 index 0000000000..b02384558a --- /dev/null +++ b/dev.Dockerfile @@ -0,0 +1,78 @@ +FROM node:lts AS git + +ENV USER=nodebb \ + UID=1001 \ + GID=1001 + +WORKDIR /usr/src/app/ + +RUN groupadd --gid ${GID} ${USER} \ + && useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \ + && chown -R ${USER}:${USER} /usr/src/app/ + +RUN apt-get update \ + && apt-get -y --no-install-recommends install tini + +USER ${USER} + +# Change to the git branch you want to test +RUN git clone --recurse-submodules -j8 --depth 1 https://github.com/NodeBB/NodeBB.git . + +RUN find . -mindepth 1 -maxdepth 1 -name '.*' ! -name '.' ! -name '..' -exec bash -c 'echo "Deleting {}"; rm -rf {}' \; + +FROM node:lts AS node_modules_touch + +ENV NODE_ENV=development \ + USER=nodebb \ + UID=1001 \ + GID=1001 + +WORKDIR /usr/src/app/ + +RUN corepack enable \ + && groupadd --gid ${GID} ${USER} \ + && useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \ + && chown -R ${USER}:${USER} /usr/src/app/ + +COPY --from=git --chown=${USER}:${USER} /usr/src/app/install/package.json /usr/src/app/ + +USER ${USER} + +RUN npm install \ + && rm -rf .npm + +FROM node:lts-slim AS final + +ENV NODE_ENV=development \ + DAEMON=false \ + SILENT=false \ + USER=nodebb \ + UID=1001 \ + GID=1001 + +WORKDIR /usr/src/app/ + +RUN corepack enable \ + && groupadd --gid ${GID} ${USER} \ + && useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \ + && mkdir -p /usr/src/app/logs/ /opt/config/ \ + && chown -R ${USER}:${USER} /usr/src/app/ /opt/config/ + +COPY --from=git --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/install/docker/setup.json /usr/src/app/ +COPY --from=git --chown=${USER}:${USER} /usr/bin/tini /usr/src/app/install/docker/entrypoint.sh /usr/local/bin/ +COPY --from=node_modules_touch --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/ +COPY --from=git --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/ + +RUN chmod +x /usr/local/bin/entrypoint.sh \ + && chmod +x /usr/local/bin/tini + +# TODO: Have docker-compose use environment variables to create files like setup.json and config.json. +# COPY --from=hairyhenderson/gomplate:stable /gomplate /usr/local/bin/gomplate + +USER ${USER} + +EXPOSE 4567 + +VOLUME ["/usr/src/app/node_modules", "/usr/src/app/build", "/usr/src/app/public/uploads", "/opt/config/"] + +ENTRYPOINT ["tini", "--", "entrypoint.sh"] \ No newline at end of file diff --git a/docker-compose-pgsql.yml b/docker-compose-pgsql.yml new file mode 100644 index 0000000000..618f571f5c --- /dev/null +++ b/docker-compose-pgsql.yml @@ -0,0 +1,70 @@ +version: '3.8' + +services: + nodebb: + build: . + # image: ghcr.io/nodebb/nodebb:latest + restart: unless-stopped + ports: + - '4567:4567' # comment this out if you don't want to expose NodeBB to the host, or change the first number to any port you want + volumes: + - nodebb-build:/usr/src/app/build + - nodebb-uploads:/usr/src/app/public/uploads + - nodebb-config:/opt/config + - ./install/docker/setup.json:/usr/src/app/setup.json + + postgres: + image: postgres:18.3-alpine + restart: unless-stopped + environment: + POSTGRES_USER: nodebb + POSTGRES_PASSWORD: nodebb + POSTGRES_DB: nodebb + volumes: + - postgres-data:/var/lib/postgresql/data + + redis: + image: redis:8.6.2-alpine + restart: unless-stopped + command: ['redis-server', '--appendonly', 'yes', '--loglevel', 'warning'] + # command: ["redis-server", "--save", "60", "1", "--loglevel", "warning"] # uncomment if you want to use snapshotting instead of AOF + volumes: + - redis-data:/data + profiles: + - redis + +volumes: + postgres-data: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/database/postgresql/data + + redis-data: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/database/redis + + nodebb-build: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/build + + nodebb-uploads: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/public/uploads + + nodebb-config: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/config diff --git a/docker-compose-redis.yml b/docker-compose-redis.yml new file mode 100644 index 0000000000..67e5fc4acc --- /dev/null +++ b/docker-compose-redis.yml @@ -0,0 +1,51 @@ +version: '3.8' + +services: + nodebb: + build: . + # image: ghcr.io/nodebb/nodebb:latest + restart: unless-stopped + ports: + - '4567:4567' # comment this out if you don't want to expose NodeBB to the host, or change the first number to any port you want + volumes: + - nodebb-build:/usr/src/app/build + - nodebb-uploads:/usr/src/app/public/uploads + - nodebb-config:/opt/config + - ./install/docker/setup.json:/usr/src/app/setup.json + + redis: + image: redis:8.6.2-alpine + restart: unless-stopped + command: ['redis-server', '--appendonly', 'yes', '--loglevel', 'warning'] + # command: ["redis-server", "--save", "60", "1", "--loglevel", "warning"] # uncomment if you want to use snapshotting instead of AOF + volumes: + - redis-data:/data + +volumes: + redis-data: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/database/redis + + nodebb-build: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/build + + nodebb-uploads: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/public/uploads + + nodebb-config: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/config diff --git a/docker-compose.yml b/docker-compose.yml index cca3deb496..7f00a1a549 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,55 +1,89 @@ -version: '3.8' - services: nodebb: build: . + # image: ghcr.io/nodebb/nodebb:latest restart: unless-stopped ports: - - "4567:4567/tcp" # comment this out if you don't want to expose NodeBB to the host, or change the first number to any port you want - # uncomment if you want to use another container as a reverse proxy - # expose: - # - 4567 + - '4567:4567' # comment this out if you don't want to expose NodeBB to the host, or change the first number to any port you want volumes: - - ./.docker/build:/usr/src/app/build - - ./.docker/public/uploads:/usr/src/app/public/uploads - - ./.docker:/opt/config + - nodebb-build:/usr/src/app/build + - nodebb-uploads:/usr/src/app/public/uploads + - nodebb-config:/opt/config - ./install/docker/setup.json:/usr/src/app/setup.json + mongo: - image: "mongo:7-jammy" + image: 'mongo:7-jammy' restart: unless-stopped - expose: - - "27017" + ports: + - '27017:27017' environment: MONGO_INITDB_ROOT_USERNAME: nodebb MONGO_INITDB_ROOT_PASSWORD: nodebb MONGO_INITDB_DATABASE: nodebb volumes: - - ./.docker/database/mongo/config:/etc/mongo - - ./.docker/database/mongo/data:/data/db + - mongo-data:/data/db - ./install/docker/mongodb-user-init.js:/docker-entrypoint-initdb.d/user-init.js - profiles: - - mongo - postgres: - image: postgres:16.1-alpine + redis: + image: redis:8.6.2-alpine + restart: unless-stopped + command: ['redis-server', '--appendonly', 'yes', '--loglevel', 'warning'] + # command: ['redis-server', '--save', '60', '1', '--loglevel', 'warning'] # uncomment if you want to use snapshotting instead of AOF + volumes: + - redis-data:/data + profiles: + - redis + + postgres: + image: postgres:18.3-alpine restart: unless-stopped - expose: - - "5432" environment: POSTGRES_USER: nodebb POSTGRES_PASSWORD: nodebb POSTGRES_DB: nodebb volumes: - - ./.docker/database/postgresql/data:/var/lib/postgresql/data + - postgres-data:/var/lib/postgresql/data profiles: - postgres - redis: - image: redis:7.2.3-alpine - restart: unless-stopped - command: ["redis-server", "--appendonly", "yes", "--loglevel", "warning"] - # command: ["redis-server", "--save", "60", "1", "--loglevel", "warning"] # uncomment if you want to use snapshotting instead of AOF - expose: - - "6379" - volumes: - - ./.docker/database/redis:/data - profiles: - - redis \ No newline at end of file + +volumes: + mongo-data: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/database/mongo/data + + redis-data: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/database/redis + + postgres-data: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/database/postgresql/data + + nodebb-build: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/build + + nodebb-uploads: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/public/uploads + + nodebb-config: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/config diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000000..5b3c417f7d --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,70 @@ +'use strict'; + +import serverConfig from 'eslint-config-nodebb'; +import publicConfig from 'eslint-config-nodebb/public'; +import commonRules from 'eslint-config-nodebb/common'; + +import { defineConfig } from 'eslint/config'; +import stylisticJs from '@stylistic/eslint-plugin' +import js from '@eslint/js'; +import globals from 'globals'; + +export default defineConfig([ + { + ignores: [ + 'node_modules/', + '.project', + '.vagrant', + '.DS_Store', + '.tx', + 'logs/', + 'public/uploads/', + 'public/vendor/', + '.idea/', + '.vscode/', + '*.ipr', + '*.iws', + 'coverage/', + 'build/', + 'test/files/', + '*.min.js', + 'install/docker/', + ], + }, + // tests + { + plugins: { + js, + '@stylistic/js': stylisticJs, + }, + extends: ['js/recommended'], + files: ['test/**/*.js'], + languageOptions: { + ecmaVersion: 2020, + sourceType: 'commonjs', + globals: { + ...globals.node, + ...globals.browser, + it: 'readonly', + describe: 'readonly', + before: 'readonly', + beforeEach: 'readonly', + after: 'readonly', + afterEach: 'readonly', + }, + }, + rules: { + ...commonRules, + 'no-unused-vars': 'off', + 'no-prototype-builtins': 'off', + } + }, + ...publicConfig, + ...serverConfig, + { + rules: { + 'preserve-caught-error': 'off' + } + } +]); + diff --git a/install/data/defaults.json b/install/data/defaults.json index d60984e99e..a6b25a2732 100644 --- a/install/data/defaults.json +++ b/install/data/defaults.json @@ -24,8 +24,8 @@ "newbieChatMessageDelay": 120000, "notificationSendDelay": 60, "newbieReputationThreshold": 3, - "postQueue": 0, - "postQueueReputationThreshold": 0, + "postQueue": 1, + "postQueueReputationThreshold": 1, "groupsExemptFromPostQueue": ["administrators", "Global Moderators"], "groupsExemptFromNewUserRestrictions": ["administrators", "Global Moderators"], "groupsExemptFromMaintenanceMode": ["administrators", "Global Moderators"], @@ -36,27 +36,30 @@ "maximumTagsPerTopic": 5, "minimumTagLength": 3, "maximumTagLength": 15, - "undoTimeout": 10000, + "undoTimeout": 0, "allowTopicsThumbnail": 1, + "showPostUploadsAsThumbnails": 1, "registrationType": "normal", "registrationApprovalType": "normal", "allowAccountDelete": 1, "privateUploads": 0, - "allowedFileExtensions": "png,jpg,bmp,txt", + "allowedFileExtensions": "png,jpg,bmp,txt,webp,webm,mp4,gif", "uploadRateLimitThreshold": 10, "uploadRateLimitCooldown": 60, "allowUserHomePage": 1, - "allowMultipleBadges": 0, + "allowMultipleBadges": 1, "maximumFileSize": 2048, "stripEXIFData": 1, "orphanExpiryDays": 0, "resizeImageWidthThreshold": 2000, "resizeImageWidth": 760, + "resizeImageKeepOriginal": 1, "rejectImageWidth": 5000, "rejectImageHeight": 5000, "resizeImageQuality": 80, + "convertPastedImageTo": "image/jpeg", "topicThumbSize": 512, - "minimumTitleLength": 3, + "minimumTitleLength": 0, "maximumTitleLength": 255, "minimumUsernameLength": 2, "maximumUsernameLength": 16, @@ -66,15 +69,16 @@ "maximumAboutMeLength": 1000, "maximumUsersInChatRoom": 0, "maximumChatMessageLength": 1000, + "maximumRemoteChatMessageLength": 5000, "maximumChatRoomNameLength": 50, - "maximumProfileImageSize": 256, + "maximumProfileImageSize": 2048, "maximumCoverImageSize": 2048, "profileImageDimension": 200, "profile:convertProfileImageToPNG": 0, "profile:keepAllUserImages": 0, "gdpr_enabled": 1, "allowProfileImageUploads": 1, - "teaserPost": "last-reply", + "teaserPost": "last-post", "showPostPreviewsOnHover": 1, "allowPrivateGroups": 1, "unreadCutoff": 2, @@ -99,16 +103,21 @@ "min:rep:aboutme": 0, "min:rep:signature": 0, "flags:limitPerTarget": 0, + "flags:postFlagsPerDay": 10, + "flags:userFlagsPerDay": 10, "flags:autoFlagOnDownvoteThreshold": 0, "flags:actionOnResolve": "rescind", "flags:actionOnReject": "rescind", "notificationType_upvote": "notification", "notificationType_new-topic": "notification", + "notificationType_new-topic-with-tag": "notification", + "notificationType_new-topic-in-category": "notification", "notificationType_new-reply": "notification", "notificationType_post-edit": "notification", "notificationType_follow": "notification", "notificationType_new-chat": "notification", "notificationType_new-group-chat": "notification", + "notificationType_new-public-chat": "none", "notificationType_group-invite": "notification", "notificationType_group-leave": "notification", "notificationType_group-request-membership": "notification", @@ -133,13 +142,16 @@ "feeds:disableSitemap": 0, "feeds:disableRSS": 0, "sitemapTopics": 500, + "sitemapCacheDurationHours": 24, "maintenanceMode": 0, "maintenanceModeStatus": 503, - "votesArePublic": 0, + "upvoteVisibility": "all", + "downvoteVisibility": "privileged", "maximumInvites": 0, "username:disableEdit": 0, "email:disableEdit": 0, "email:smtpTransport:pool": 0, + "email:smtpTransport:allow-self-signed": 0, "hideFullname": 0, "hideEmail": 0, "showFullnameAsDisplayName": 0, @@ -176,7 +188,7 @@ "onlineCutoff": 30, "timeagoCutoff": 30, "necroThreshold": 7, - "categoryWatchState": "watching", + "categoryWatchState": "tracking", "submitPluginUsage": 1, "showAverageApprovalTime": 1, "autoApproveTime": 0, @@ -187,5 +199,15 @@ "composer:allowPluginHelp": 1, "maxReconnectionAttempts": 5, "reconnectionDelay": 1500, - "disableCustomUserSkins": 0 -} \ No newline at end of file + "disableCustomUserSkins": 0, + "activitypubEnabled": 1, + "activitypubAllowLoopback": 0, + "activitypubProbe": 1, + "activitypubProbeTimeout": 2000, + "activitypubContentPruneDays": 30, + "activitypubUserPruneDays": 7, + "activitypubFilter": 0, + "activitypubSummaryLimit": 500, + "activitypubBreakString": "[...]", + "activitypubWorldDefaultCid": -1 +} diff --git a/install/data/navigation.json b/install/data/navigation.json index 5a744dbdf7..0532dae545 100644 --- a/install/data/navigation.json +++ b/install/data/navigation.json @@ -41,6 +41,14 @@ "textClass": "d-lg-none", "text": "[[global:header.popular]]" }, + { + "route": "/world", + "title": "[[global:header.world]]", + "enabled": true, + "iconClass": "fa-globe", + "textClass": "d-lg-none", + "text": "[[global:header.world]]" + }, { "route": "/users", "title": "[[global:header.users]]", diff --git a/install/docker/entrypoint.sh b/install/docker/entrypoint.sh index e5b2036321..98579fd68c 100755 --- a/install/docker/entrypoint.sh +++ b/install/docker/entrypoint.sh @@ -1,46 +1,238 @@ #!/bin/bash -export CONFIG_DIR="${CONFIG_DIR:-/opt/config}" -export CONFIG=$CONFIG_DIR/config.json -export FORCE_BUILD_BEFORE_START="${FORCE_BUILD_BEFORE_START:-false}" +set -e -# Supported verbs: install (web install), setup (interactive CLI session). Default: web install -# TODO: constraint it using a hash set (or hash table) -export NODEBB_INIT_VERB="${NODEBB_INIT_VERB:-install}" -# Setup variable for backward compatibility, default: -export SETUP="${SETUP:-}" +# Function to set default values for environment variables +set_defaults() { + export CONFIG_DIR="${CONFIG_DIR:-/opt/config}" + export CONFIG="$CONFIG_DIR/config.json" + export NODEBB_INIT_VERB="${NODEBB_INIT_VERB:-install}" + export NODEBB_BUILD_VERB="${NODEBB_BUILD_VERB:-build}" + export START_BUILD="${START_BUILD:-${FORCE_BUILD_BEFORE_START:-false}}" + export SETUP="${SETUP:-}" + export PACKAGE_MANAGER="${PACKAGE_MANAGER:-npm}" + export OVERRIDE_UPDATE_LOCK="${OVERRIDE_UPDATE_LOCK:-false}" + export NODEBB_ADDITIONAL_PLUGINS="${NODEBB_ADDITIONAL_PLUGINS:-}" +} -mkdir -p $CONFIG_DIR - -# if the folder is mounted as a volume this can fail, the check below is to ensure there is still write access -chmod -fR 760 $CONFIG_DIR 2> /dev/null - -if [[ ! -w $CONFIG_DIR ]]; then - echo "panic: no write permission for $CONFIG_DIR" - exit 1 -fi - -[[ -f $CONFIG_DIR/package.json ]] || cp install/package.json $CONFIG_DIR/package.json -[[ -f $CONFIG_DIR/package-lock.json ]] || touch $CONFIG_DIR/package-lock.json - -ln -fs $CONFIG_DIR/package.json package.json -ln -fs $CONFIG_DIR/package-lock.json package-lock.json - -npm install --omit=dev - -if [[ -n $SETUP ]]; then - echo "Setup environmental variable detected" - echo "Starting setup session" - ./nodebb setup --config=$CONFIG -elif [ -f $CONFIG ]; then - echo "Config file exist at $CONFIG, assuming it is a valid config" - echo "Starting forum" - if [ "$FORCE_BUILD_BEFORE_START" = true ]; then - ./nodebb build --config=$CONFIG +# Function to check if a directory exists and is writable +check_directory() { + local dir="$1" + if [ ! -d "$dir" ]; then + echo "Error: Directory $dir does not exist. Creating..." + mkdir -p "$dir" || { + echo "Error: Failed to create directory $dir" + exit 1 + } fi - ./nodebb start --config=$CONFIG -else - echo "Config file not found at $CONFIG" + if [ ! -w "$dir" ]; then + echo "Warning: No write permission for directory $dir, attempting to fix..." + chown -R $USER:$USER "$dir" || true # attempt to change ownership, do not exit on failure + chmod -R 760 "$dir" || true # attempt to change permissions, do not exit on failure + if [ ! -w "$dir" ]; then + echo "Error: No write permission for directory $dir. Exiting..." + exit 1 + fi + fi +} + +# Function to copy or link package.json and lock files based on package manager +copy_or_link_files() { + local src_dir="$1" + local dest_dir="$2" + local package_manager="$3" + local lock_file + + case "$package_manager" in + yarn) lock_file="yarn.lock" ;; + npm) lock_file="package-lock.json" ;; + pnpm) lock_file="pnpm-lock.yaml" ;; + *) + echo "Unknown package manager: $package_manager" + exit 1 + ;; + esac + + # Check if source and destination files are the same + if [ "$(realpath "$src_dir/package.json")" != "$(realpath "$dest_dir/package.json")" ] || [ "$OVERRIDE_UPDATE_LOCK" = true ]; then + cp "$src_dir/package.json" "$dest_dir/package.json" + fi + + if [ "$(realpath "$src_dir/$lock_file")" != "$(realpath "$dest_dir/$lock_file")" ] || [ "$OVERRIDE_UPDATE_LOCK" = true ]; then + cp "$src_dir/$lock_file" "$dest_dir/$lock_file" + fi + + # Remove unnecessary lock files in src_dir + rm -f "$src_dir/"{yarn.lock,package-lock.json,pnpm-lock.yaml} + + # Symbolically link the copied files in src_dir to dest_dir + ln -fs "$dest_dir/package.json" "$src_dir/package.json" + ln -fs "$dest_dir/$lock_file" "$src_dir/$lock_file" +} + +# Function to install dependencies using npm/yarn/pnpm +install_dependencies() { + case "$PACKAGE_MANAGER" in + yarn) yarn install || { + echo "Failed to install dependencies with yarn" + exit 1 + } ;; + npm) npm install || { + echo "Failed to install dependencies with npm" + exit 1 + } ;; + pnpm) pnpm install || { + echo "Failed to install dependencies with pnpm" + exit 1 + } ;; + *) + echo "Unknown package manager: $PACKAGE_MANAGER" + exit 1 + ;; + esac +} + +# Function to start setup session +start_setup_session() { + local config="$1" + echo "Starting setup session" + exec /usr/src/app/nodebb setup --config="$config" +} + +# Handle building and upgrading NodeBB +build_forum() { + local config="$1" + local start_build="$2" + local package_hash=$(md5sum install/package.json | head -c 32) + if [ "$package_hash" != "$(cat $CONFIG_DIR/install_hash.md5 || true)" ]; then + echo "package.json was updated. Upgrading..." + /usr/src/app/nodebb upgrade --config="$config" || { + echo "Failed to build NodeBB. Exiting..." + exit 1 + } + elif [ "$start_build" = true ]; then + echo "Build before start is enabled. Building..." + /usr/src/app/nodebb "${NODEBB_BUILD_VERB}" --config="$config" || { + echo "Failed to build NodeBB. Exiting..." + exit 1 + } + else + echo "No changes in package.json. Skipping build..." + return + fi + echo -n $package_hash > $CONFIG_DIR/install_hash.md5 +} + + +# Function to start forum +start_forum() { + local config="$1" + local start_build="$2" + + build_forum "$config" "$start_build" + + case "$PACKAGE_MANAGER" in + yarn) + yarn start --config="$config" --no-silent --no-daemon || { + echo "Failed to start forum with yarn" + exit 1 + } + ;; + npm) + npm start -- --config="$config" --no-silent --no-daemon || { + echo "Failed to start forum with npm" + exit 1 + } + ;; + pnpm) + pnpm start -- --config="$config" --no-silent --no-daemon || { + echo "Failed to start forum with pnpm" + exit 1 + } + ;; + *) + echo "Unknown package manager: $PACKAGE_MANAGER" + exit 1 + ;; + esac +} + +# Function to start installation session +start_installation_session() { + local nodebb_init_verb="$1" + local config="$2" + + echo "Config file not found at $config" echo "Starting installation session" - ./nodebb "${NODEBB_INIT_VERB}" --config=$CONFIG -fi \ No newline at end of file + exec /usr/src/app/nodebb "$nodebb_init_verb" --config="$config" +} + +# Function for debugging and logging +debug_log() { + local message="$1" + echo "DEBUG: $message" +} + +install_additional_plugins() { + if [[ -n ${NODEBB_ADDITIONAL_PLUGINS} ]]; then + # Create a local array to work with + local plugins_to_install=() + + # check if NODEBB_ADDITIONAL_PLUGINS is an array or a space-separated string + if [[ "$(declare -p NODEBB_ADDITIONAL_PLUGINS 2>/dev/null)" == "declare -a"* ]]; then + plugins_to_install=("${NODEBB_ADDITIONAL_PLUGINS[@]}") + else + plugins_to_install=(${NODEBB_ADDITIONAL_PLUGINS}) + fi + + export START_BUILD="true" + for plugin in "${plugins_to_install[@]}"; do + echo "Installing additional plugin ${plugin}..." + case "$PACKAGE_MANAGER" in + yarn) yarn add "${plugin}" || { + echo "Failed to install plugin ${plugin} with yarn" + exit 1 + } ;; + npm) npm install "${plugin}" || { + echo "Failed to install plugin ${plugin} with npm" + exit 1 + } ;; + pnpm) pnpm add "${plugin}" || { + echo "Failed to install plugin ${plugin} with pnpm" + exit 1 + } ;; + *) + echo "Unknown package manager: $PACKAGE_MANAGER" + exit 1 + ;; + esac + done + fi +} + +# Main function +main() { + set_defaults + check_directory "$CONFIG_DIR" + copy_or_link_files /usr/src/app "$CONFIG_DIR" "$PACKAGE_MANAGER" + install_dependencies + + debug_log "PACKAGE_MANAGER: $PACKAGE_MANAGER" + debug_log "CONFIG location: $CONFIG" + debug_log "START_BUILD: $START_BUILD" + debug_log "NODEBB_ADDITIONAL_PLUGINS: ${NODEBB_ADDITIONAL_PLUGINS}" + + if [ -n "$SETUP" ]; then + start_setup_session "$CONFIG" + fi + + if [ -f "$CONFIG" ]; then + install_additional_plugins + start_forum "$CONFIG" "$START_BUILD" + else + start_installation_session "$NODEBB_INIT_VERB" "$CONFIG" + fi +} + +# Execute main function +main "$@" diff --git a/install/docker/setup.json b/install/docker/setup.json index 3fad840593..a9fa9017bb 100644 --- a/install/docker/setup.json +++ b/install/docker/setup.json @@ -1,21 +1,23 @@ { - "mongo": { - "host": "mongo", - "port": 27017, - "database": "nodebb", - "username": "nodebb", - "password": "nodebb" - }, - "redis": { - "host": "redis", - "port": 6379, - "database": 0 - }, - "postgres": { - "host": "postgres", - "port": 5432, - "database": "nodebb", - "username": "nodebb", - "password": "nodebb" + "defaults": { + "mongo": { + "host": "mongo", + "port": 27017, + "database": "nodebb", + "username": "nodebb", + "password": "nodebb" + }, + "redis": { + "host": "redis", + "port": 6379, + "database": 0 + }, + "postgres": { + "host": "postgres", + "port": 5432, + "database": "nodebb", + "username": "nodebb", + "password": "nodebb" + } } } \ No newline at end of file diff --git a/install/package.json b/install/package.json index fcab369b69..a25861a599 100644 --- a/install/package.json +++ b/install/package.json @@ -2,7 +2,7 @@ "name": "nodebb", "license": "GPL-3.0", "description": "NodeBB Forum", - "version": "3.5.1", + "version": "4.10.1", "homepage": "https://www.nodebb.org", "repository": { "type": "git", @@ -29,150 +29,160 @@ }, "dependencies": { "@adactive/bootstrap-tagsinput": "0.8.2", - "@fontsource/inter": "5.0.15", - "@fontsource/poppins": "5.0.8", - "@fortawesome/fontawesome-free": "6.4.2", - "@isaacs/ttlcache": "1.4.1", + "@fontsource-utils/scss": "0.2.2", + "@fontsource/inter": "5.2.8", + "@fontsource/poppins": "5.2.7", + "@fortawesome/fontawesome-free": "6.7.2", + "@isaacs/ttlcache": "2.1.4", + "@nodebb/spider-detector": "2.0.3", "@popperjs/core": "2.11.8", - "ace-builds": "1.31.2", - "archiver": "6.0.1", - "async": "3.2.5", - "autoprefixer": "10.4.16", - "bcryptjs": "2.4.3", - "benchpressjs": "2.5.1", - "body-parser": "1.20.2", - "bootbox": "6.0.0", - "bootstrap": "5.3.2", - "bootswatch": "5.3.2", + "@textcomplete/contenteditable": "0.1.13", + "@textcomplete/core": "0.1.13", + "@textcomplete/textarea": "0.1.13", + "ace-builds": "1.43.6", + "archiver": "7.0.1", + "async": "3.2.6", + "autoprefixer": "10.4.27", + "bcryptjs": "3.0.3", + "benchpressjs": "2.5.5", + "body-parser": "2.2.2", + "bootbox": "6.0.4", + "bootstrap": "5.3.8", + "bootswatch": "5.3.8", "chalk": "4.1.2", - "chart.js": "4.4.0", + "chart.js": "4.5.1", "cli-graph": "3.2.2", "clipboard": "2.0.11", - "colors": "1.4.0", - "commander": "11.1.0", - "compare-versions": "6.1.0", - "compression": "1.7.4", + "commander": "14.0.3", + "compare-versions": "6.1.1", + "compression": "1.8.1", "connect-flash": "0.1.1", - "connect-mongo": "5.1.0", - "connect-multiparty": "2.2.0", - "connect-pg-simple": "9.0.1", - "connect-redis": "7.1.0", - "cookie-parser": "1.4.6", - "cron": "3.1.6", - "cropperjs": "1.6.1", - "csrf-sync": "4.0.1", + "connect-mongo": "6.0.0", + "connect-pg-simple": "10.0.0", + "connect-redis": "9.0.0", + "cookie-parser": "1.4.7", + "cron": "4.4.0", + "cronstrue": "3.14.0", + "cropperjs": "1.6.2", + "csrf-sync": "4.2.1", + "csv-parse": "6.2.1", "daemon": "1.1.0", - "diff": "5.1.0", - "esbuild": "0.19.5", - "express": "4.18.2", - "express-session": "1.17.3", - "express-useragent": "1.0.15", + "diff": "8.0.4", + "esbuild": "0.27.4", + "express": "4.22.1", + "express-session": "1.19.0", + "express-useragent": "2.1.0", + "fetch-cookie": "3.2.0", "file-loader": "6.2.0", - "fs-extra": "11.1.1", + "fs-extra": "11.3.4", "graceful-fs": "4.2.11", - "helmet": "7.1.0", + "helmet": "7.2.0", "html-to-text": "9.0.5", "imagesloaded": "5.0.0", - "ipaddr.js": "2.1.0", + "ipaddr.js": "2.3.0", "jquery": "3.7.1", "jquery-deserialize": "2.0.0", "jquery-form": "4.3.0", "jquery-serializeobject": "1.0.0", - "jquery-ui": "1.13.2", - "jsesc": "3.0.2", + "jquery-ui": "1.14.1", + "jsesc": "3.1.0", "json2csv": "5.0.7", - "jsonwebtoken": "9.0.2", - "lodash": "4.17.21", + "jsonwebtoken": "9.0.3", + "lodash": "4.17.23", "logrotate-stream": "0.2.9", - "lru-cache": "10.0.2", + "lru-cache": "11.2.7", "mime": "3.0.0", "mkdirp": "3.0.1", - "mongodb": "6.3.0", - "morgan": "1.10.0", + "mongodb": "7.1.1", + "morgan": "1.10.1", "mousetrap": "1.6.5", - "multiparty": "4.2.3", - "nconf": "0.12.1", - "nodebb-plugin-2factor": "7.4.0", - "nodebb-plugin-composer-default": "10.2.27", - "nodebb-plugin-dbsearch": "6.2.3", - "nodebb-plugin-emoji": "5.1.13", - "nodebb-plugin-emoji-android": "4.0.0", - "nodebb-plugin-markdown": "12.2.5", - "nodebb-plugin-mentions": "4.3.7", - "nodebb-plugin-ntfy": "1.7.3", - "nodebb-plugin-spam-be-gone": "2.2.0", - "nodebb-rewards-essentials": "1.0.0", - "nodebb-theme-harmony": "1.1.99", - "nodebb-theme-lavender": "7.1.5", - "nodebb-theme-peace": "2.1.25", - "nodebb-theme-persona": "13.2.47", - "nodebb-widget-essentials": "7.0.14", - "nodemailer": "6.9.7", + "multer": "2.1.1", + "nconf": "0.13.0", + "nodebb-plugin-2factor": "7.6.1", + "nodebb-plugin-composer-default": "10.3.28", + "nodebb-plugin-dbsearch": "6.4.1", + "nodebb-plugin-emoji": "6.0.6", + "nodebb-plugin-emoji-android": "4.1.1", + "nodebb-plugin-link-preview": "2.2.3", + "nodebb-plugin-markdown": "13.2.4", + "nodebb-plugin-mentions": "4.8.18", + "nodebb-plugin-spam-be-gone": "2.3.2", + "nodebb-plugin-web-push": "0.7.7", + "nodebb-rewards-essentials": "1.0.2", + "nodebb-theme-harmony": "2.2.63", + "nodebb-theme-lavender": "7.1.21", + "nodebb-theme-peace": "2.2.58", + "nodebb-theme-persona": "14.2.34", + "nodebb-widget-essentials": "7.0.43", + "nodemailer": "8.0.4", "nprogress": "0.2.0", - "passport": "0.6.0", + "passport": "0.7.0", "passport-http-bearer": "1.0.1", "passport-local": "1.0.0", - "pg": "8.11.3", - "pg-cursor": "2.10.3", - "postcss": "8.4.31", + "pg": "8.20.0", + "pg-cursor": "2.19.0", + "postcss": "8.5.8", "postcss-clean": "1.2.0", + "pretty": "^2.0.0", "progress-webpack-plugin": "1.0.16", "prompt": "1.3.0", - "ioredis": "5.3.2", - "request": "2.88.2", - "request-promise-native": "1.0.9", - "rimraf": "5.0.5", + "qs": "6.15.0", + "redis": "5.11.0", + "rimraf": "6.1.3", "rss": "1.2.2", - "rtlcss": "4.1.1", - "sanitize-html": "2.11.0", - "sass": "1.69.5", - "semver": "7.5.4", - "serve-favicon": "2.5.0", - "sharp": "0.32.6", - "sitemap": "7.1.1", - "socket.io": "4.7.2", - "socket.io-client": "4.7.2", - "@socket.io/redis-adapter": "8.2.1", - "sortablejs": "1.15.0", - "spdx-license-list": "6.8.0", - "spider-detector": "2.0.1", - "terser-webpack-plugin": "5.3.9", + "rtlcss": "4.3.0", + "sanitize-html": "2.17.2", + "sass": "1.98.0", + "satori": "0.26.0", + "sbd": "^1.0.19", + "semver": "7.7.4", + "serve-favicon": "2.5.1", + "sharp": "0.34.5", + "sitemap": "9.0.1", + "socket.io": "4.8.3", + "socket.io-client": "4.8.3", + "@socket.io/redis-adapter": "8.3.0", + "sortablejs": "1.15.7", + "spdx-license-list": "6.11.0", + "terser-webpack-plugin": "5.4.0", "textcomplete": "0.18.2", "textcomplete.contenteditable": "0.1.1", "timeago": "1.6.7", "tinycon": "0.6.8", "toobusy-js": "0.5.1", - "validator": "13.11.0", - "webpack": "5.89.0", - "webpack-merge": "5.10.0", - "winston": "3.11.0", - "workerpool": "8.0.0", + "tough-cookie": "6.0.1", + "undici": "^7.10.0", + "validator": "13.15.26", + "webpack": "5.105.4", + "webpack-merge": "6.0.1", + "winston": "3.19.0", + "workerpool": "10.0.1", "xml": "1.0.1", - "xregexp": "5.1.1", "yargs": "17.7.2", "zxcvbn": "4.4.2" }, "devDependencies": { "@apidevtools/swagger-parser": "10.1.0", - "@commitlint/cli": "18.4.2", - "@commitlint/config-angular": "18.4.2", + "@commitlint/cli": "20.5.0", + "@commitlint/config-angular": "20.5.0", "coveralls": "3.1.1", - "eslint": "8.54.0", - "eslint-config-nodebb": "0.2.1", - "eslint-plugin-import": "2.29.0", + "@eslint/js": "10.0.1", + "@stylistic/eslint-plugin": "5.10.0", + "eslint-config-nodebb": "2.0.1", + "globals": "17.4.0", "grunt": "1.6.1", "grunt-contrib-watch": "1.1.0", "husky": "8.0.3", - "jsdom": "22.1.0", - "lint-staged": "15.1.0", - "mocha": "10.2.0", + "jsdom": "29.0.1", + "lint-staged": "16.4.0", + "mocha": "11.7.5", "mocha-lcov-reporter": "1.3.0", "mockdate": "3.0.5", - "nyc": "15.1.0", - "smtp-server": "3.13.0" + "nyc": "18.0.0", + "smtp-server": "3.18.3" }, "optionalDependencies": { - "sass-embedded": "1.69.5" + "sass-embedded": "1.98.0" }, "resolutions": { "*/jquery": "3.7.1" @@ -181,7 +191,7 @@ "url": "https://github.com/NodeBB/NodeBB/issues" }, "engines": { - "node": ">=16" + "node": ">=20" }, "maintainers": [ { @@ -195,4 +205,4 @@ "url": "https://github.com/barisusakli" } ] -} +} \ No newline at end of file diff --git a/install/web.js b/install/web.js index 92fe675c22..cd38c3be6e 100644 --- a/install/web.js +++ b/install/web.js @@ -2,6 +2,7 @@ const winston = require('winston'); const express = require('express'); +const session = require('express-session'); const bodyParser = require('body-parser'); const fs = require('fs'); const path = require('path'); @@ -13,7 +14,10 @@ const nconf = require('nconf'); const Benchpress = require('benchpressjs'); const { mkdirp } = require('mkdirp'); const { paths } = require('../src/constants'); -const sass = require('../src/utils').getSass(); +const utils = require('../src/utils'); + +const sass = utils.getSass(); +const { generateToken, csrfSynchronisedProtection } = require('../src/middleware/csrf'); const app = express(); let server; @@ -73,6 +77,13 @@ web.install = async function (port) { app.use(bodyParser.urlencoded({ extended: true, })); + + app.use(session({ + secret: utils.generateUUID(), + resave: false, + saveUninitialized: false, + })); + try { await Promise.all([ compileTemplate(), @@ -103,8 +114,8 @@ function launchExpress(port) { } function setupRoutes() { - app.get('/', welcome); - app.post('/', install); + app.get('/', csrfSynchronisedProtection, welcome); + app.post('/', csrfSynchronisedProtection, install); app.get('/testdb', testDatabase); app.get('/ping', ping); app.get('/sping', ping); @@ -160,6 +171,7 @@ function welcome(req, res) { minimumPasswordStrength: defaults.minimumPasswordStrength, installing: installing, percentInstalled: installing ? ((Date.now() - timeStart) / totalTime * 100).toFixed(2) : 0, + csrf_token: generateToken(req), }); } diff --git a/loader.js b/loader.js index a960327208..334e156192 100644 --- a/loader.js +++ b/loader.js @@ -2,7 +2,6 @@ const nconf = require('nconf'); const fs = require('fs'); -const url = require('url'); const path = require('path'); const { fork } = require('child_process'); const logrotate = require('logrotate-stream'); @@ -26,7 +25,7 @@ if (!fs.existsSync(logDir)) { mkdirp.sync(path.dirname(outputLogFilePath)); } -const output = logrotate({ file: outputLogFilePath, size: '1m', keep: 3, compress: true }); +const output = logrotate({ file: outputLogFilePath, size: '10m', keep: 3, compress: true }); const silent = nconf.get('silent') === 'false' ? false : nconf.get('silent') !== false; let numProcs; const workers = []; @@ -99,6 +98,13 @@ Loader.start = function () { function forkWorker(index, isPrimary) { const ports = getPorts(); const args = []; + const execArgv = []; + if (nconf.get('max-memory')) { + execArgv.push(`--max-old-space-size=${nconf.get('max-memory')}`); + } + if (nconf.get('expose-gc')) { + execArgv.push('--expose-gc'); + } if (!ports[index]) { return console.log(`[cluster] invalid port for worker : ${index} ports: ${ports.length}`); @@ -107,10 +113,10 @@ function forkWorker(index, isPrimary) { process.env.isPrimary = isPrimary; process.env.isCluster = nconf.get('isCluster') || ports.length > 1; process.env.port = ports[index]; - const worker = fork(appPath, args, { silent: silent, env: process.env, + execArgv: execArgv, }); worker.index = index; @@ -133,7 +139,7 @@ function getPorts() { console.log('[cluster] url is undefined, please check your config.json'); process.exit(); } - const urlObject = url.parse(_url); + const urlObject = new URL(_url); let port = nconf.get('PORT') || nconf.get('port') || urlObject.port || 4567; if (!Array.isArray(port)) { port = [port]; diff --git a/public/.eslintrc b/public/.eslintrc deleted file mode 100644 index a3ce8297a6..0000000000 --- a/public/.eslintrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "nodebb/public" -} diff --git a/public/500.html b/public/500.html new file mode 100644 index 0000000000..eec0e49f7a --- /dev/null +++ b/public/500.html @@ -0,0 +1,41 @@ + + + Internal Server Error + + + + + + +
+
+

500

+

+ Internal server error. +

+

+ {message} +

+

+  Alright. You can stop clicking... it's not going to make the site come back sooner! +

+
+
+ + diff --git a/public/503.html b/public/503.html index 43d1e648d9..51d0e52d53 100644 --- a/public/503.html +++ b/public/503.html @@ -2,147 +2,12 @@ Excessive Load Warning - + + + + + + + + {{{ end }}} + \ No newline at end of file diff --git a/src/views/partials/chats/message.tpl b/src/views/partials/chats/message.tpl new file mode 100644 index 0000000000..3d2e0ce122 --- /dev/null +++ b/src/views/partials/chats/message.tpl @@ -0,0 +1,76 @@ +
  • + + {{{ if messages.parent }}} + + {{{ end }}} + +
    + {buildAvatar(messages.fromUser, "18px", true, "not-responsive")} + {messages.fromUser.displayname} + {{{ if messages.fromUser.banned }}} + [[user:banned]] + {{{ end }}} + {{{ if messages.fromUser.deleted }}} + [[user:deleted]] + {{{ end }}} + + +
    +
    +
    +
    + {messages.content} +
    + +
    +
    + + + +
    + + +
    +
    +
    +
    +
  • \ No newline at end of file diff --git a/src/views/partials/chats/messages.tpl b/src/views/partials/chats/messages.tpl new file mode 100644 index 0000000000..d59cce50a5 --- /dev/null +++ b/src/views/partials/chats/messages.tpl @@ -0,0 +1,7 @@ +{{{each messages}}} + {{{ if !./system }}} + + {{{ else }}} + + {{{ end }}} +{{{end}}} \ No newline at end of file diff --git a/src/views/partials/chats/options.tpl b/src/views/partials/chats/options.tpl new file mode 100644 index 0000000000..88deba08d2 --- /dev/null +++ b/src/views/partials/chats/options.tpl @@ -0,0 +1,100 @@ +
    + + + + + + + + + + + + + + + + {{{ if users.length }}} +
    +
    + {{{ if ./users.0 }}} + {buildAvatar(./users.0, "24px", true)} + {{{ end }}} + {{{ if ./users.1 }}} + {buildAvatar(./users.1, "24px", true)} + {{{ end }}} + {{{ if ./users.2 }}} + {buildAvatar(./users.2, "24px", true)} + {{{ end }}} +
    + {formattedNumber(./userCount)} +
    + {{{ end }}} +
    diff --git a/src/views/partials/chats/parent.tpl b/src/views/partials/chats/parent.tpl new file mode 100644 index 0000000000..81e566a6d4 --- /dev/null +++ b/src/views/partials/chats/parent.tpl @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/src/views/partials/chats/pinned-messages-list.tpl b/src/views/partials/chats/pinned-messages-list.tpl new file mode 100644 index 0000000000..7fbe978328 --- /dev/null +++ b/src/views/partials/chats/pinned-messages-list.tpl @@ -0,0 +1,32 @@ +{{{ each messages }}} +
  • + + {{{ if messages.parent }}} + + {{{ end }}} + + +
    +
    + {messages.content} +
    +
    +
    + {{{ if (isAdminOrGlobalMod || (!config.disableChatMessageEditing && messages.self)) }}} + + {{{ end }}} + {{{ if (isAdminOrGlobalMod || isOwner )}}} + + + {{{ end }}} +
    +
    +
    +
  • +{{{ end }}} \ No newline at end of file diff --git a/src/views/partials/chats/pinned-messages.tpl b/src/views/partials/chats/pinned-messages.tpl new file mode 100644 index 0000000000..20d33f9c1d --- /dev/null +++ b/src/views/partials/chats/pinned-messages.tpl @@ -0,0 +1,12 @@ + diff --git a/src/views/partials/chats/reactions.tpl b/src/views/partials/chats/reactions.tpl new file mode 100644 index 0000000000..c8f127e786 --- /dev/null +++ b/src/views/partials/chats/reactions.tpl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/views/partials/chats/recent_room.tpl b/src/views/partials/chats/recent_room.tpl new file mode 100644 index 0000000000..2ba8314a0f --- /dev/null +++ b/src/views/partials/chats/recent_room.tpl @@ -0,0 +1,51 @@ +{{{ if (loadingMore && @first)}}} +
    +{{{ end }}} + +{{{ if !@last }}} +
    +{{{ else }}} +{{{ if showBottomHr }}} +
    +{{{ end }}} +{{{ end }}} diff --git a/src/views/partials/chats/room-teaser.tpl b/src/views/partials/chats/room-teaser.tpl new file mode 100644 index 0000000000..ee5aa856d8 --- /dev/null +++ b/src/views/partials/chats/room-teaser.tpl @@ -0,0 +1,10 @@ +
    + {{{ if ./teaser }}} +
    + {buildAvatar(./teaser.user, "14px", true, "align-middle")} + {./teaser.user.displayname}: + {./teaser.content} +
    +
    {{{ if ./teaser.timeagoLong }}}{./teaser.timeagoLong}{{{ else }}}{{{ end }}}
    + {{{ end }}} +
    \ No newline at end of file diff --git a/src/views/partials/chats/scroll-up-alert.tpl b/src/views/partials/chats/scroll-up-alert.tpl new file mode 100644 index 0000000000..52601bfa47 --- /dev/null +++ b/src/views/partials/chats/scroll-up-alert.tpl @@ -0,0 +1,3 @@ +
    + +
    \ No newline at end of file diff --git a/src/views/partials/chats/system-message.tpl b/src/views/partials/chats/system-message.tpl new file mode 100644 index 0000000000..04cbfcf588 --- /dev/null +++ b/src/views/partials/chats/system-message.tpl @@ -0,0 +1,7 @@ +
  • +
    +
    + [[modules:chat.system.{messages.content}, {messages.fromUser.displayname}, {messages.timestampISO}]] +
    +
    +
  • \ No newline at end of file diff --git a/src/views/partials/chats/user-list.tpl b/src/views/partials/chats/user-list.tpl new file mode 100644 index 0000000000..5825ab7874 --- /dev/null +++ b/src/views/partials/chats/user-list.tpl @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/src/views/partials/chats/user.tpl b/src/views/partials/chats/user.tpl new file mode 100644 index 0000000000..9ed5b71fbf --- /dev/null +++ b/src/views/partials/chats/user.tpl @@ -0,0 +1 @@ +{buildAvatar(rooms.users, "32px", true)} \ No newline at end of file diff --git a/src/views/partials/custom-reason.tpl b/src/views/partials/custom-reason.tpl new file mode 100644 index 0000000000..50af17294b --- /dev/null +++ b/src/views/partials/custom-reason.tpl @@ -0,0 +1,20 @@ +
    +
    + + {{{ if reasons.length }}} + + {{{ end }}} +
    + + +
    \ No newline at end of file diff --git a/src/views/partials/data/topic.tpl b/src/views/partials/data/topic.tpl index 4c3b70640c..846d17eb40 100644 --- a/src/views/partials/data/topic.tpl +++ b/src/views/partials/data/topic.tpl @@ -1 +1 @@ -data-index="{posts.index}" data-pid="{posts.pid}" data-uid="{posts.uid}" data-timestamp="{posts.timestamp}" data-username="{posts.user.username}" data-userslug="{posts.user.userslug}"{{{ if posts.allowDupe }}} data-allow-dupe="1"{{{ end }}}{{{ if posts.navigatorIgnore }}} data-navigator-ignore="1"{{{ end }}} itemscope itemtype="http://schema.org/Comment" \ No newline at end of file +data-index="{posts.index}" data-pid="{posts.pid}" data-uid="{posts.uid}" data-timestamp="{posts.timestamp}" data-username="{posts.user.username}" data-userslug="{posts.user.userslug}"{{{ if posts.allowDupe }}} data-allow-dupe="1"{{{ end }}}{{{ if posts.navigatorIgnore }}} data-navigator-ignore="1"{{{ end }}} itemprop="comment" itemtype="http://schema.org/Comment" itemscope \ No newline at end of file diff --git a/src/views/partials/feed/item.tpl b/src/views/partials/feed/item.tpl new file mode 100644 index 0000000000..daf69dfd44 --- /dev/null +++ b/src/views/partials/feed/item.tpl @@ -0,0 +1,94 @@ +
  • + {{{ if (showThumbs && ./topic.thumbs.length)}}} +
    +
    + + + +
    + +
    + {{{ each ./topic.thumbs }}} + {{{ if (@index != 0) }}} + + {{{ end }}} + {{{ end }}} + {{{ if greaterthan(./topic.thumbs.length, "4") }}} +
    +{increment(./topic.thumbs.length, "-3")}
    + {{{ end }}} +
    +
    + {{{ end }}} + +
    + +
    + + +
    + + {./content} +
    + +
    + + {{{ if ./topic.teaser }}} +
    + {{{ if (./replies && (./replies != "1")) }}} + [[global:read-more]] → + {{{ end }}} + +
    + {{{ end }}} +
    + +
    +
    +
    +
  • \ No newline at end of file diff --git a/src/views/partials/flags/bulk-actions.tpl b/src/views/partials/flags/bulk-actions.tpl new file mode 100644 index 0000000000..31a6242a9e --- /dev/null +++ b/src/views/partials/flags/bulk-actions.tpl @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/src/views/partials/flags/filters.tpl b/src/views/partials/flags/filters.tpl new file mode 100644 index 0000000000..d0f91243e6 --- /dev/null +++ b/src/views/partials/flags/filters.tpl @@ -0,0 +1,189 @@ +
    + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    \ No newline at end of file diff --git a/src/views/partials/flags/results.tpl b/src/views/partials/flags/results.tpl new file mode 100644 index 0000000000..f8c319eacf --- /dev/null +++ b/src/views/partials/flags/results.tpl @@ -0,0 +1,38 @@ +
    + [[flags:x-flags-found, {count}]] +
    + + + + + + + + + + + + + {{{ each flags }}} + + + + + + + + {{{end}}} + +
    [[flags:reports]][[flags:first-reported]][[flags:state]] + +
    + + {./target_readable} + + + {./heat} + [[flags:state-{./state}]] + +
    + + \ No newline at end of file diff --git a/src/views/partials/gdpr_consent.tpl b/src/views/partials/gdpr_consent.tpl index 21ec19074c..1759d39589 100644 --- a/src/views/partials/gdpr_consent.tpl +++ b/src/views/partials/gdpr_consent.tpl @@ -2,7 +2,7 @@

    [[user:consent.lead]]

    [[user:consent.intro]]

    - +
    @@ -16,7 +16,7 @@

    - +
    \ No newline at end of file diff --git a/src/views/partials/groups/filter-dropdown-content.tpl b/src/views/partials/groups/filter-dropdown-content.tpl new file mode 100644 index 0000000000..1243bed751 --- /dev/null +++ b/src/views/partials/groups/filter-dropdown-content.tpl @@ -0,0 +1,25 @@ + \ No newline at end of file diff --git a/src/views/partials/reconnect-alert.tpl b/src/views/partials/reconnect-alert.tpl index 90ab679fde..b8eba8b67e 100644 --- a/src/views/partials/reconnect-alert.tpl +++ b/src/views/partials/reconnect-alert.tpl @@ -1,4 +1,4 @@ -
    - + \ No newline at end of file diff --git a/src/views/partials/tags/filter-dropdown-content.tpl b/src/views/partials/tags/filter-dropdown-content.tpl new file mode 100644 index 0000000000..acdfbbfc15 --- /dev/null +++ b/src/views/partials/tags/filter-dropdown-content.tpl @@ -0,0 +1,38 @@ + + + \ No newline at end of file diff --git a/src/views/partials/tags/filter-dropdown-left.tpl b/src/views/partials/tags/filter-dropdown-left.tpl index b80f290a56..37bfc4b293 100644 --- a/src/views/partials/tags/filter-dropdown-left.tpl +++ b/src/views/partials/tags/filter-dropdown-left.tpl @@ -1,3 +1,3 @@ -