Compare commits

..

No commits in common. "develop" and "2.2.6" have entirely different histories.

59 changed files with 3269 additions and 3927 deletions

View file

@ -24,7 +24,7 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
node: [20, 22, 23] node: [18, 20, 22]
steps: steps:
- -
name: Checkout repository name: Checkout repository
@ -53,7 +53,7 @@ jobs:
run: pnpm config set auto-install-peers false run: pnpm config set auto-install-peers false
- -
name: Install libreoffice name: Install libreoffice
uses: awalsh128/cache-apt-pkgs-action@v1.5.0 uses: awalsh128/cache-apt-pkgs-action@v1.4.2
with: with:
packages: libreoffice libreoffice-pdfimport packages: libreoffice libreoffice-pdfimport
version: 1.0 version: 1.0
@ -84,7 +84,7 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
node: [20, 22, 23] node: [18, 20, 22]
steps: steps:
- -
name: Checkout repository name: Checkout repository
@ -113,7 +113,7 @@ jobs:
run: pnpm config set auto-install-peers false run: pnpm config set auto-install-peers false
- -
name: Install libreoffice name: Install libreoffice
uses: awalsh128/cache-apt-pkgs-action@v1.5.0 uses: awalsh128/cache-apt-pkgs-action@v1.4.2
with: with:
packages: libreoffice libreoffice-pdfimport packages: libreoffice libreoffice-pdfimport
version: 1.0 version: 1.0

View file

@ -22,9 +22,6 @@ jobs:
- -
name: Check out name: Check out
uses: actions/checkout@v4 uses: actions/checkout@v4
with:
path: etherpad
- -
name: Set up QEMU name: Set up QEMU
if: github.event_name == 'push' if: github.event_name == 'push'
@ -36,7 +33,7 @@ jobs:
name: Build and export to Docker name: Build and export to Docker
uses: docker/build-push-action@v6 uses: docker/build-push-action@v6
with: with:
context: ./etherpad context: .
target: production target: production
load: true load: true
tags: ${{ env.TEST_TAG }} tags: ${{ env.TEST_TAG }}
@ -65,7 +62,6 @@ jobs:
${{ runner.os }}-pnpm-store- ${{ runner.os }}-pnpm-store-
- -
name: Test name: Test
working-directory: etherpad
run: | run: |
docker run --rm -d -p 9001:9001 --name test ${{ env.TEST_TAG }} docker run --rm -d -p 9001:9001 --name test ${{ env.TEST_TAG }}
./bin/installDeps.sh ./bin/installDeps.sh
@ -102,11 +98,10 @@ jobs:
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKERHUB_TOKEN }}
- -
name: Build and push name: Build and push
id: build-docker
if: github.event_name == 'push' if: github.event_name == 'push'
uses: docker/build-push-action@v6 uses: docker/build-push-action@v6
with: with:
context: ./etherpad context: .
target: production target: production
platforms: linux/amd64,linux/arm64 platforms: linux/amd64,linux/arm64
push: true push: true
@ -116,28 +111,7 @@ jobs:
uses: peter-evans/dockerhub-description@v4 uses: peter-evans/dockerhub-description@v4
if: github.ref == 'refs/heads/master' if: github.ref == 'refs/heads/master'
with: with:
readme-filepath: ./etherpad/README.md
username: ${{ secrets.DOCKERHUB_USERNAME }} username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKERHUB_TOKEN }}
repository: etherpad/etherpad repository: etherpad/etherpad
enable-url-completion: true enable-url-completion: true
- name: Check out
uses: actions/checkout@v4
with:
path: ether-charts
repository: ether/ether-charts
token: ${{ secrets.ETHER_CHART_TOKEN }}
- name: Update tag in values-dev.yaml
if: success() && github.ref == 'refs/heads/develop'
working-directory: ether-charts
run: |
sed -i 's/tag: ".*"/tag: "${{ steps.build-docker.outputs.digest }}"/' values-dev.yaml
- name: Commit and push changes
working-directory: ether-charts
if: success() && github.ref == 'refs/heads/develop'
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
git add values-dev.yaml
git commit -m 'Update develop image tag'
git push

View file

@ -17,7 +17,7 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
node: [20, 22, 23] node: [20, 22]
steps: steps:
- -

View file

@ -24,7 +24,7 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
node: [20, 22, 23] node: [18, 20, 22]
steps: steps:
- -
name: Check out latest release name: Check out latest release
@ -43,7 +43,7 @@ jobs:
- name: Only install direct dependencies - name: Only install direct dependencies
run: pnpm config set auto-install-peers false run: pnpm config set auto-install-peers false
- name: Install libreoffice - name: Install libreoffice
uses: awalsh128/cache-apt-pkgs-action@v1.5.0 uses: awalsh128/cache-apt-pkgs-action@v1.4.2
with: with:
packages: libreoffice libreoffice-pdfimport packages: libreoffice libreoffice-pdfimport
version: 1.0 version: 1.0
@ -62,7 +62,7 @@ jobs:
run: pnpm config set auto-install-peers false run: pnpm config set auto-install-peers false
- -
name: Install libreoffice name: Install libreoffice
uses: awalsh128/cache-apt-pkgs-action@v1.5.0 uses: awalsh128/cache-apt-pkgs-action@v1.4.2
with: with:
packages: libreoffice libreoffice-pdfimport packages: libreoffice libreoffice-pdfimport
version: 1.0 version: 1.0

View file

@ -1,31 +1,3 @@
# 2.3.0
### Notable enhancements and fixes
- Added possibility to cluster Etherpads behind reverse proxy. There is now a new reverse proxy designed for Etherpads that handles multiple Etherpads and the created pads in them. It will assign the pad assignement to an Etherpad at random but once the choice was made it will always reverse proxy the same backend. This allows to host multiple concurrent Etherpads and benefit from multi core systems even though one Etherpad is singlethreaded.
- Added reverse proxy configuration for replacing Nginx. In the past there were some issues with nginx and its configuration. This reverse proxy allows you to handle your configuration with ease.
If you want to find out more about the reverse proxy method check out the repository https://github.com/ether/etherpad-proxy . It also contains a sample docker-compose file with three Etherpads and one etherpad-proxy. Of course you need to adapt the settings.json.template to your liking and map it into the reverse proxy image before you are ready :).
- Added client authorization to work with Etherpad. Before it would get blocked because it doesn't have the required claim. As this is now fixed etherpad-proxy can also work with your new OAuth2 configuration and retrieve a token via client credentials flow.
# 2.2.7
### Notable enhancements and fixes
- We migrated all important pages to React 19 and React Router v7
Besides that only dependency updates.
-> Have a merry Christmas and a happy new year. 🎄 🎁
# 2.2.6 # 2.2.6
### Notable enhancements and fixes ### Notable enhancements and fixes

View file

@ -3,10 +3,9 @@
# https://github.com/ether/etherpad-lite # https://github.com/ether/etherpad-lite
# #
# Author: muxator # Author: muxator
ARG BUILD_ENV=git
FROM node:alpine AS adminbuild FROM node:alpine AS adminbuild
RUN npm install -g pnpm@latest RUN npm install -g pnpm@9.0.4
WORKDIR /opt/etherpad-lite WORKDIR /opt/etherpad-lite
COPY . . COPY . .
RUN pnpm install RUN pnpm install
@ -100,7 +99,7 @@ RUN mkdir -p "${EP_DIR}" && chown etherpad:etherpad "${EP_DIR}"
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=863199 # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=863199
RUN \ RUN \
mkdir -p /usr/share/man/man1 && \ mkdir -p /usr/share/man/man1 && \
npm install pnpm@latest -g && \ npm install pnpm@9.0.4 -g && \
apk update && apk upgrade && \ apk update && apk upgrade && \
apk add --no-cache \ apk add --no-cache \
ca-certificates \ ca-certificates \
@ -114,49 +113,26 @@ USER etherpad
WORKDIR "${EP_DIR}" WORKDIR "${EP_DIR}"
# etherpads version feature requires this. Only copy what is really needed # etherpads version feature requires this. Only copy what is really needed
COPY --chown=etherpad:etherpad ./.git/HEA[D] ./.git/HEAD
COPY --chown=etherpad:etherpad ./.git/ref[s] ./.git/refs
COPY --chown=etherpad:etherpad ${SETTINGS} ./settings.json COPY --chown=etherpad:etherpad ${SETTINGS} ./settings.json
COPY --chown=etherpad:etherpad ./var ./var COPY --chown=etherpad:etherpad ./var ./var
COPY --chown=etherpad:etherpad ./bin ./bin COPY --chown=etherpad:etherpad ./bin ./bin
COPY --chown=etherpad:etherpad ./pnpm-workspace.yaml ./package.json ./ COPY --chown=etherpad:etherpad ./pnpm-workspace.yaml ./package.json ./
FROM build AS development
FROM build AS build_git
ONBUILD COPY --chown=etherpad:etherpad ./.git/HEA[D] ./.git/HEAD
ONBUILD COPY --chown=etherpad:etherpad ./.git/ref[s] ./.git/refs
FROM build AS build_copy
FROM build_${BUILD_ENV} AS development
ARG ETHERPAD_PLUGINS=
ARG ETHERPAD_LOCAL_PLUGINS=
ARG ETHERPAD_LOCAL_PLUGINS_ENV=
ARG ETHERPAD_GITHUB_PLUGINS=
COPY --chown=etherpad:etherpad ./src/ ./src/ COPY --chown=etherpad:etherpad ./src/ ./src/
COPY --chown=etherpad:etherpad --from=adminbuild /opt/etherpad-lite/src/ templates/admin./src/templates/admin COPY --chown=etherpad:etherpad --from=adminbuild /opt/etherpad-lite/src/ templates/admin./src/templates/admin
COPY --chown=etherpad:etherpad --from=adminbuild /opt/etherpad-lite/src/static/oidc ./src/static/oidc COPY --chown=etherpad:etherpad --from=adminbuild /opt/etherpad-lite/src/static/oidc ./src/static/oidc
COPY --chown=etherpad:etherpad ./local_plugin[s] ./local_plugins/
RUN bash -c ./bin/installLocalPlugins.sh
RUN bin/installDeps.sh && \ RUN bin/installDeps.sh && \
if [ ! -z "${ETHERPAD_PLUGINS}" ] || [ ! -z "${ETHERPAD_GITHUB_PLUGINS}" ]; then \ if [ ! -z "${ETHERPAD_PLUGINS}" ] || [ ! -z "${ETHERPAD_LOCAL_PLUGINS}" ] || [ ! -z "${ETHERPAD_GITHUB_PLUGINS}" ]; then \
pnpm run plugins i ${ETHERPAD_PLUGINS} ${ETHERPAD_GITHUB_PLUGINS:+--github ${ETHERPAD_GITHUB_PLUGINS}}; \ pnpm run plugins i ${ETHERPAD_PLUGINS} ${ETHERPAD_LOCAL_PLUGINS:+--path ${ETHERPAD_LOCAL_PLUGINS}} ${ETHERPAD_GITHUB_PLUGINS:+--github ${ETHERPAD_GITHUB_PLUGINS}}; \
fi fi
FROM build_${BUILD_ENV} AS production FROM build AS production
ARG ETHERPAD_PLUGINS=
ARG ETHERPAD_LOCAL_PLUGINS=
ARG ETHERPAD_LOCAL_PLUGINS_ENV=
ARG ETHERPAD_GITHUB_PLUGINS=
ENV NODE_ENV=production ENV NODE_ENV=production
ENV ETHERPAD_PRODUCTION=true ENV ETHERPAD_PRODUCTION=true
@ -165,13 +141,9 @@ COPY --chown=etherpad:etherpad ./src ./src
COPY --chown=etherpad:etherpad --from=adminbuild /opt/etherpad-lite/src/templates/admin ./src/templates/admin COPY --chown=etherpad:etherpad --from=adminbuild /opt/etherpad-lite/src/templates/admin ./src/templates/admin
COPY --chown=etherpad:etherpad --from=adminbuild /opt/etherpad-lite/src/static/oidc ./src/static/oidc COPY --chown=etherpad:etherpad --from=adminbuild /opt/etherpad-lite/src/static/oidc ./src/static/oidc
COPY --chown=etherpad:etherpad ./local_plugin[s] ./local_plugins/ RUN bin/installDeps.sh && rm -rf ~/.npm && rm -rf ~/.local && rm -rf ~/.cache && \
if [ ! -z "${ETHERPAD_PLUGINS}" ] || [ ! -z "${ETHERPAD_LOCAL_PLUGINS}" ] || [ ! -z "${ETHERPAD_GITHUB_PLUGINS}" ]; then \
RUN bash -c ./bin/installLocalPlugins.sh pnpm run plugins i ${ETHERPAD_PLUGINS} ${ETHERPAD_LOCAL_PLUGINS:+--path ${ETHERPAD_LOCAL_PLUGINS}} ${ETHERPAD_GITHUB_PLUGINS:+--github ${ETHERPAD_GITHUB_PLUGINS}}; \
RUN bin/installDeps.sh && \
if [ ! -z "${ETHERPAD_PLUGINS}" ] || [ ! -z "${ETHERPAD_GITHUB_PLUGINS}" ]; then \
pnpm run plugins i ${ETHERPAD_PLUGINS} ${ETHERPAD_GITHUB_PLUGINS:+--github ${ETHERPAD_GITHUB_PLUGINS}}; \
fi fi
# Copy the configuration file. # Copy the configuration file.

View file

@ -90,7 +90,7 @@ services:
# ports: # ports:
# - "5432:5432" # - "5432:5432"
volumes: volumes:
- postgres_data:/var/lib/postgresql/data - postgres_data:/var/lib/postgresql/data/pgdata
volumes: volumes:
postgres_data: postgres_data:

View file

@ -1,7 +1,7 @@
{ {
"name": "admin", "name": "admin",
"private": true, "private": true,
"version": "2.3.0", "version": "2.2.6",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
@ -11,32 +11,32 @@
"preview": "vite preview" "preview": "vite preview"
}, },
"dependencies": { "dependencies": {
"@radix-ui/react-switch": "^1.1.4" "@radix-ui/react-switch": "^1.1.1"
}, },
"devDependencies": { "devDependencies": {
"@radix-ui/react-dialog": "^1.1.7", "@radix-ui/react-dialog": "^1.1.2",
"@radix-ui/react-toast": "^1.2.7", "@radix-ui/react-toast": "^1.2.2",
"@types/react": "^19.1.2", "@types/react": "^18.3.12",
"@types/react-dom": "^19.1.2", "@types/react-dom": "^18.3.1",
"@typescript-eslint/eslint-plugin": "^8.30.1", "@typescript-eslint/eslint-plugin": "^8.11.0",
"@typescript-eslint/parser": "^8.30.1", "@typescript-eslint/parser": "^8.11.0",
"@vitejs/plugin-react-swc": "^3.9.0", "@vitejs/plugin-react-swc": "^3.7.1",
"eslint": "^9.23.0", "eslint": "^9.13.0",
"eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-hooks": "^5.0.0",
"eslint-plugin-react-refresh": "^0.4.19", "eslint-plugin-react-refresh": "^0.4.13",
"i18next": "^25.0.0", "i18next": "^23.16.2",
"i18next-browser-languagedetector": "^8.0.5", "i18next-browser-languagedetector": "^8.0.0",
"lucide-react": "^0.501.0", "lucide-react": "^0.453.0",
"react": "^19.1.0", "react": "^18.2.0",
"react-dom": "^19.1.0", "react-dom": "^18.2.0",
"react-hook-form": "^7.55.0", "react-hook-form": "^7.53.1",
"react-i18next": "^15.4.1", "react-i18next": "^15.1.0",
"react-router-dom": "^7.5.1", "react-router-dom": "^6.27.0",
"socket.io-client": "^4.8.1", "socket.io-client": "^4.8.0",
"typescript": "^5.8.2", "typescript": "^5.6.3",
"vite": "^6.3.2", "vite": "^5.4.10",
"vite-plugin-static-copy": "^2.3.1", "vite-plugin-static-copy": "^2.0.0",
"vite-plugin-svgr": "^4.3.0", "vite-plugin-svgr": "^4.2.0",
"zustand": "^5.0.3" "zustand": "^5.0.0"
} }
} }

View file

@ -1,4 +1,4 @@
import {FC, JSX, ReactElement} from "react"; import {FC, ReactElement} from "react";
export type IconButtonProps = { export type IconButtonProps = {
icon: JSX.Element, icon: JSX.Element,

View file

@ -1,51 +0,0 @@
#!/bin/bash
set -euo pipefail
IFS=$'\n\t'
trim() {
local var="$*"
# remove leading whitespace characters
var="${var#"${var%%[![:space:]]*}"}"
# remove trailing whitespace characters
var="${var%"${var##*[![:space:]]}"}"
printf '%s' "$var"
}
# Move to the Etherpad base directory.
MY_DIR=$(cd "${0%/*}" && pwd -P) || exit 1
cd "${MY_DIR}/.." || exit 1
# Source constants and useful functions
. bin/functions.sh
PNPM_OPTIONS=
if [ ! -z "${NODE_ENV-}" ]; then
if [ "$NODE_ENV" == 'production' ]; then
PNPM_OPTIONS='--prod'
fi
fi
if [ ! -z "${ETHERPAD_LOCAL_PLUGINS_ENV-}" ]; then
if [ "$ETHERPAD_LOCAL_PLUGINS_ENV" == 'production' ]; then
PNPM_OPTIONS='--prod'
elif [ "$ETHERPAD_LOCAL_PLUGINS_ENV" == 'development' ]; then
PNPM_OPTIONS='-D'
fi
fi
if [ ! -z "${ETHERPAD_LOCAL_PLUGINS}" ]; then
readarray -d ' ' plugins <<< "${ETHERPAD_LOCAL_PLUGINS}"
for plugin in "${plugins[@]}"; do
plugin=$(trim "$plugin")
if [ -d "local_plugins/${plugin}" ]; then
echo "Installing plugin: '${plugin}'"
pnpm install -w ${PNPM_OPTIONS:-} "local_plugins/${plugin}/"
else
( echo "Error. Directory 'local_plugins/${plugin}' for local plugin " \
"'${plugin}' missing" >&2 )
exit 1
fi
done
else
echo 'No local plugings to install.'
fi

View file

@ -1,23 +1,23 @@
{ {
"name": "bin", "name": "bin",
"version": "2.3.0", "version": "2.2.6",
"description": "", "description": "",
"main": "checkAllPads.js", "main": "checkAllPads.js",
"directories": { "directories": {
"doc": "doc" "doc": "doc"
}, },
"dependencies": { "dependencies": {
"axios": "^1.8.4", "axios": "^1.7.7",
"ep_etherpad-lite": "workspace:../src", "ep_etherpad-lite": "workspace:../src",
"log4js": "^6.9.1", "log4js": "^6.9.1",
"semver": "^7.7.1", "semver": "^7.6.3",
"tsx": "^4.19.3", "tsx": "^4.19.1",
"ueberdb2": "^5.0.6" "ueberdb2": "^5.0.6"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^22.14.1", "@types/node": "^22.7.9",
"@types/semver": "^7.7.0", "@types/semver": "^7.5.8",
"typescript": "^5.8.2" "typescript": "^5.6.3"
}, },
"scripts": { "scripts": {
"makeDocs": "node --import tsx make_docs.ts", "makeDocs": "node --import tsx make_docs.ts",

View file

@ -1,6 +1,6 @@
{ {
"devDependencies": { "devDependencies": {
"vitepress": "^1.6.3" "vitepress": "^1.4.1"
}, },
"scripts": { "scripts": {
"docs:dev": "vitepress dev", "docs:dev": "vitepress dev",

View file

@ -1,3 +0,0 @@
# ignore everything
*
!.gitignore

View file

@ -50,6 +50,6 @@
"type": "git", "type": "git",
"url": "https://github.com/ether/etherpad-lite.git" "url": "https://github.com/ether/etherpad-lite.git"
}, },
"version": "2.3.0", "version": "2.2.6",
"license": "Apache-2.0" "license": "Apache-2.0"
} }

6457
pnpm-lock.yaml generated

File diff suppressed because it is too large Load diff

View file

@ -4,7 +4,3 @@ packages:
- bin - bin
- doc - doc
- ui - ui
onlyBuiltDependencies:
- '@scarf/scarf'
- '@swc/core'
- esbuild

View file

@ -96,7 +96,7 @@
* 3) if you want to use newlines in the default value of a string parameter, * 3) if you want to use newlines in the default value of a string parameter,
* use "\n" as usual. * use "\n" as usual.
* *
* "defaultPadText" : "${DEFAULT_PAD_TEXT:Line 1\nLine 2}" * "defaultPadText" : "${DEFAULT_PAD_TEXT}Line 1\nLine 2"
*/ */
{ {
/* /*

View file

@ -87,7 +87,7 @@
* 3) if you want to use newlines in the default value of a string parameter, * 3) if you want to use newlines in the default value of a string parameter,
* use "\n" as usual. * use "\n" as usual.
* *
* "defaultPadText" : "${DEFAULT_PAD_TEXT:Line 1\nLine 2}" * "defaultPadText" : "${DEFAULT_PAD_TEXT}Line 1\nLine 2"
*/ */
{ {
/* /*

View file

@ -83,8 +83,6 @@
"pad.settings.fontType": "نوع الخط:", "pad.settings.fontType": "نوع الخط:",
"pad.settings.fontType.normal": "عادي", "pad.settings.fontType.normal": "عادي",
"pad.settings.language": "اللغة:", "pad.settings.language": "اللغة:",
"pad.settings.deletePad": "حذف الوسادة",
"pad.delete.confirm": "هل تريد حقا حذف هذه الوسادة؟",
"pad.settings.about": "حول", "pad.settings.about": "حول",
"pad.settings.poweredBy": "مدعوم من", "pad.settings.poweredBy": "مدعوم من",
"pad.importExport.import_export": "استيراد/تصدير", "pad.importExport.import_export": "استيراد/تصدير",

View file

@ -1,49 +0,0 @@
{
"@metadata": {
"authors": [
"Умар"
]
},
"admin.page-title": "Администраторан панель — Etherpad",
"admin_plugins": "Плагинийн менеджер",
"admin_plugins.available": "ТӀекхочуш йолу плагинаш",
"admin_plugins.available_not-found": "Плагинаш ца карийна.",
"admin_plugins.available_fetching": "Схьаоьцуш...",
"admin_plugins.available_install.value": "ДӀахӀоттайе",
"admin_plugins.installed_uninstall.value": "ДӀайаккха",
"admin_plugins.last-update": "ТӀаьххьара карлайаккхар",
"admin_plugins.name": "ЦӀе",
"admin_plugins.page-title": "Плагинийн менеджер — Etherpad",
"admin_plugins.version": "Верси",
"admin_plugins_info.version_number": "Версин лоьмар",
"admin_settings": "Нисдаран гӀирс",
"admin_settings.current": "Карара конфигураци",
"pad.colorpicker.save": "Ӏалашйан",
"pad.colorpicker.cancel": "Йухайаккхар",
"pad.loading": "Чуйолуш…",
"pad.permissionDenied": "Хьан бакъонаш йац тӀекхача",
"pad.settings.padSettings": "Документан нисдаран гӀирс",
"pad.settings.myView": "Сан васт",
"pad.settings.stickychat": "Гуттара а гайта чат",
"pad.settings.language": "Мотт:",
"pad.settings.about": "Проектах лаьцна",
"pad.importExport.importSuccessful": "Кхиамца!",
"pad.modals.cancel": "Йухайаккхар",
"pad.share.link": "Хьажорг",
"pad.chat": "Чат",
"timeslider.toolbar.authors": "Авторш:",
"timeslider.toolbar.exportlink.title": "Экспорт",
"timeslider.month.january": "январь",
"timeslider.month.february": "февраль",
"timeslider.month.march": "март",
"timeslider.month.april": "апрель",
"timeslider.month.may": "май",
"timeslider.month.june": "июнь",
"timeslider.month.july": "июль",
"timeslider.month.august": "август",
"timeslider.month.september": "сентябрь",
"timeslider.month.october": "октябрь",
"timeslider.month.november": "ноябрь",
"timeslider.month.december": "декабрь",
"pad.impexp.importing": "Импорт йар..."
}

View file

@ -11,7 +11,6 @@
"Predatorix", "Predatorix",
"SamTV", "SamTV",
"Sebastian Wallroth", "Sebastian Wallroth",
"Ssgl",
"Thargon", "Thargon",
"Tim.krieger", "Tim.krieger",
"Wikinaut", "Wikinaut",
@ -83,11 +82,11 @@
"pad.settings.colorcheck": "Autorenfarben anzeigen", "pad.settings.colorcheck": "Autorenfarben anzeigen",
"pad.settings.linenocheck": "Zeilennummern", "pad.settings.linenocheck": "Zeilennummern",
"pad.settings.rtlcheck": "Inhalt von rechts nach links lesen?", "pad.settings.rtlcheck": "Inhalt von rechts nach links lesen?",
"pad.settings.delete": "Pad löschen",
"pad.delete.confirm": "Möchtest du dieses Pad wirklich löschen?",
"pad.settings.fontType": "Schriftart:", "pad.settings.fontType": "Schriftart:",
"pad.settings.fontType.normal": "Normal", "pad.settings.fontType.normal": "Normal",
"pad.settings.language": "Sprache:", "pad.settings.language": "Sprache:",
"pad.settings.deletePad": "Pad löschen",
"pad.delete.confirm": "Möchtest du dieses Pad wirklich löschen?",
"pad.settings.about": "Über", "pad.settings.about": "Über",
"pad.settings.poweredBy": "Betrieben von", "pad.settings.poweredBy": "Betrieben von",
"pad.importExport.import_export": "Import/Export", "pad.importExport.import_export": "Import/Export",

View file

@ -3,7 +3,6 @@
"authors": [ "authors": [
"1917 Ekim Devrimi", "1917 Ekim Devrimi",
"Erdemaslancan", "Erdemaslancan",
"GolyatGeri",
"Gorizon", "Gorizon",
"Gırd", "Gırd",
"Kumkumuk", "Kumkumuk",
@ -79,8 +78,6 @@
"pad.settings.fontType": "Babeta nuşti:", "pad.settings.fontType": "Babeta nuşti:",
"pad.settings.fontType.normal": "Normal", "pad.settings.fontType.normal": "Normal",
"pad.settings.language": "Zıwan:", "pad.settings.language": "Zıwan:",
"pad.settings.deletePad": "Defteri bıesterê",
"pad.delete.confirm": ıma raşti wazenê ke nê defteri bıesterên?",
"pad.settings.about": "Heqa", "pad.settings.about": "Heqa",
"pad.settings.poweredBy": "Pheştidayoğ", "pad.settings.poweredBy": "Pheştidayoğ",
"pad.importExport.import_export": "Zerredayış/Teberdayış", "pad.importExport.import_export": "Zerredayış/Teberdayış",

View file

@ -72,8 +72,6 @@
"pad.settings.fontType": "Pismowa družyna:", "pad.settings.fontType": "Pismowa družyna:",
"pad.settings.fontType.normal": "Normalny", "pad.settings.fontType.normal": "Normalny",
"pad.settings.language": "Rěc:", "pad.settings.language": "Rěc:",
"pad.settings.deletePad": "Zapisnik lašowaś",
"pad.delete.confirm": "Cośo napšawdu toś ten zapisnik lašowaś?",
"pad.settings.about": "Wó", "pad.settings.about": "Wó",
"pad.settings.poweredBy": "Pódpěrany wót", "pad.settings.poweredBy": "Pódpěrany wót",
"pad.importExport.import_export": "Import/Eksport", "pad.importExport.import_export": "Import/Eksport",

View file

@ -14,12 +14,10 @@
"admin_plugins": "Διαχειριστής πρόσθετων", "admin_plugins": "Διαχειριστής πρόσθετων",
"admin_plugins.available": "Διαθέσιμα πρόσθετα", "admin_plugins.available": "Διαθέσιμα πρόσθετα",
"admin_plugins.available_not-found": "Δεν βρέθηκαν πρόσθετα.", "admin_plugins.available_not-found": "Δεν βρέθηκαν πρόσθετα.",
"admin_plugins.available_fetching": "Ανακτάται...",
"admin_plugins.available_install.value": "Εγκατάσταση", "admin_plugins.available_install.value": "Εγκατάσταση",
"admin_plugins.available_search.placeholder": "Αναζητήστε πρόσθετα για εγκατάσταση", "admin_plugins.available_search.placeholder": "Αναζητήστε πρόσθετα για εγκατάσταση",
"admin_plugins.description": "Περιγραφή", "admin_plugins.description": "Περιγραφή",
"admin_plugins.installed": "Εγκατεστημένα πρόσθετα", "admin_plugins.installed": "Εγκατεστημένα πρόσθετα",
"admin_plugins.installed_fetching": "Ανάκτηση εγκατεστημένων προσθηκών…",
"admin_plugins.installed_nothing": "Δεν έχετε εγκαταστήσει πρόσθετα ακόμη.", "admin_plugins.installed_nothing": "Δεν έχετε εγκαταστήσει πρόσθετα ακόμη.",
"admin_plugins.installed_uninstall.value": "Απεγκατάσταση", "admin_plugins.installed_uninstall.value": "Απεγκατάσταση",
"admin_plugins.last-update": "Τελευταία ενημέρωση", "admin_plugins.last-update": "Τελευταία ενημέρωση",
@ -77,8 +75,6 @@
"pad.settings.fontType": "Τύπος γραμματοσειράς:", "pad.settings.fontType": "Τύπος γραμματοσειράς:",
"pad.settings.fontType.normal": "Κανονική", "pad.settings.fontType.normal": "Κανονική",
"pad.settings.language": "Γλώσσα:", "pad.settings.language": "Γλώσσα:",
"pad.settings.deletePad": "Διαγραφή Pad",
"pad.delete.confirm": "Θέλετε πραγματικά να διαγράψετε αυτό το pad;",
"pad.settings.about": "Σχετικά", "pad.settings.about": "Σχετικά",
"pad.settings.poweredBy": "Υποστηρίζεται από", "pad.settings.poweredBy": "Υποστηρίζεται από",
"pad.importExport.import_export": "Εισαγωγή/Εξαγωγή", "pad.importExport.import_export": "Εισαγωγή/Εξαγωγή",
@ -93,7 +89,7 @@
"pad.importExport.exportopen": "ODF (Open Document Format)", "pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.abiword.innerHTML": "Μπορείτε να εισάγετε απλό κείμενο ή HTML. Για προηγμένες δυνατότητες εισαγωγής παρακαλούμε <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">εγκαταστήστε το AbiWord ή το LibreOffice</a>.", "pad.importExport.abiword.innerHTML": "Μπορείτε να εισάγετε απλό κείμενο ή HTML. Για προηγμένες δυνατότητες εισαγωγής παρακαλούμε <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">εγκαταστήστε το AbiWord ή το LibreOffice</a>.",
"pad.modals.connected": "Συνδεμένοι.", "pad.modals.connected": "Συνδεμένοι.",
"pad.modals.reconnecting": "Επανασύνδεση στο pad σας", "pad.modals.reconnecting": "Επανασύνδεση στο pad σας...",
"pad.modals.forcereconnect": "Επιβολή επανασύνδεσης", "pad.modals.forcereconnect": "Επιβολή επανασύνδεσης",
"pad.modals.reconnecttimer": "Προσπάθεια επανασύνδεσης σε", "pad.modals.reconnecttimer": "Προσπάθεια επανασύνδεσης σε",
"pad.modals.cancel": "Ακύρωση", "pad.modals.cancel": "Ακύρωση",
@ -115,9 +111,7 @@
"pad.modals.corruptPad.cause": "Αυτό μπορεί να οφείλεται σε ένα λάθος στη ρύθμιση του διακομιστή ή κάποια άλλη απρόβλεπτη συμπεριφορά. Παρακαλώ επικοινωνήστε με τον διαχειριστή της υπηρεσίας.", "pad.modals.corruptPad.cause": "Αυτό μπορεί να οφείλεται σε ένα λάθος στη ρύθμιση του διακομιστή ή κάποια άλλη απρόβλεπτη συμπεριφορά. Παρακαλώ επικοινωνήστε με τον διαχειριστή της υπηρεσίας.",
"pad.modals.deleted": "Διεγράφη.", "pad.modals.deleted": "Διεγράφη.",
"pad.modals.deleted.explanation": "Αυτό το pad έχει καταργηθεί.", "pad.modals.deleted.explanation": "Αυτό το pad έχει καταργηθεί.",
"pad.modals.rateLimited.explanation": "Στείλατε πάρα πολλά μηνύματα σε αυτό το pad, επομένως σας αποσύνδεσε.",
"pad.modals.rejected.explanation": "Ο διακομιστής απέρριψε ένα μήνυμα που στάλθηκε από το πρόγραμμα περιήγησής σας.", "pad.modals.rejected.explanation": "Ο διακομιστής απέρριψε ένα μήνυμα που στάλθηκε από το πρόγραμμα περιήγησής σας.",
"pad.modals.rejected.cause": "Ο διακομιστής μπορεί να έχει ενημερωθεί ενώ προβάλλατε το pad ή ίσως υπάρχει σφάλμα στο Etherpad. Δοκιμάστε να φορτώσετε ξανά τη σελίδα.",
"pad.modals.disconnected": "Είστε αποσυνδεδεμένοι.", "pad.modals.disconnected": "Είστε αποσυνδεδεμένοι.",
"pad.modals.disconnected.explanation": "Χάθηκε η σύνδεση με τον διακομιστή", "pad.modals.disconnected.explanation": "Χάθηκε η σύνδεση με τον διακομιστή",
"pad.modals.disconnected.cause": "Ο διακομιστής μπορεί να μην είναι διαθέσιμος. Παρακαλούμε ειδοποιήστε τον διαχειριστή της υπηρεσίας εάν εξακολουθεί να συμβαίνει αυτό.", "pad.modals.disconnected.cause": "Ο διακομιστής μπορεί να μην είναι διαθέσιμος. Παρακαλούμε ειδοποιήστε τον διαχειριστή της υπηρεσίας εάν εξακολουθεί να συμβαίνει αυτό.",
@ -130,7 +124,6 @@
"pad.chat.loadmessages": "Φόρτωση περισσότερων μηνυμάτων", "pad.chat.loadmessages": "Φόρτωση περισσότερων μηνυμάτων",
"pad.chat.stick.title": "Κρατήστε τη συνομιλία στην οθόνη", "pad.chat.stick.title": "Κρατήστε τη συνομιλία στην οθόνη",
"pad.chat.writeMessage.placeholder": "Γράψτε το μήνυμα σας εδώ", "pad.chat.writeMessage.placeholder": "Γράψτε το μήνυμα σας εδώ",
"timeslider.followContents": "Ακολουθήστε τις ενημερώσεις περιεχομένου του pad",
"timeslider.pageTitle": "{{appTitle}} Χρονοδιάγραμμα", "timeslider.pageTitle": "{{appTitle}} Χρονοδιάγραμμα",
"timeslider.toolbar.returnbutton": "Επιστροφή στο pad", "timeslider.toolbar.returnbutton": "Επιστροφή στο pad",
"timeslider.toolbar.authors": "Συντάκτες:", "timeslider.toolbar.authors": "Συντάκτες:",

View file

@ -87,8 +87,6 @@
"pad.settings.fontType": "Fonttityyppi:", "pad.settings.fontType": "Fonttityyppi:",
"pad.settings.fontType.normal": "normaali", "pad.settings.fontType.normal": "normaali",
"pad.settings.language": "Kieli:", "pad.settings.language": "Kieli:",
"pad.settings.deletePad": "Poista muistio",
"pad.delete.confirm": "Haluatko todella poistaa tämän muistion?",
"pad.settings.about": "Tietoja", "pad.settings.about": "Tietoja",
"pad.settings.poweredBy": "Palvelun mahdollistaa", "pad.settings.poweredBy": "Palvelun mahdollistaa",
"pad.importExport.import_export": "Tuonti/vienti", "pad.importExport.import_export": "Tuonti/vienti",

View file

@ -14,7 +14,6 @@
"Jean-Frédéric", "Jean-Frédéric",
"Leviathan", "Leviathan",
"Macofe", "Macofe",
"Mahabarata",
"Maxim21", "Maxim21",
"McDutchie", "McDutchie",
"Metroitendo", "Metroitendo",
@ -99,8 +98,6 @@
"pad.settings.fontType": "Type de police:", "pad.settings.fontType": "Type de police:",
"pad.settings.fontType.normal": "Normal", "pad.settings.fontType.normal": "Normal",
"pad.settings.language": "Langue:", "pad.settings.language": "Langue:",
"pad.settings.deletePad": "Supprimer le bloc-notes",
"pad.delete.confirm": "Voulez-vous vraiment supprimer ce bloc-notes ?",
"pad.settings.about": "À propos", "pad.settings.about": "À propos",
"pad.settings.poweredBy": "Propulsé par", "pad.settings.poweredBy": "Propulsé par",
"pad.importExport.import_export": "Importer/Exporter", "pad.importExport.import_export": "Importer/Exporter",

View file

@ -42,9 +42,9 @@
"index.newPad": "Novo documento", "index.newPad": "Novo documento",
"index.createOpenPad": "ou crea/abre un documento co nome:", "index.createOpenPad": "ou crea/abre un documento co nome:",
"index.openPad": "abrir un Pad existente co nome:", "index.openPad": "abrir un Pad existente co nome:",
"pad.toolbar.bold.title": "Grosa (Ctrl+B)", "pad.toolbar.bold.title": "Resaltado (Ctrl-B)",
"pad.toolbar.italic.title": "Cursiva (Ctrl+I)", "pad.toolbar.italic.title": "Cursiva (Ctrl-I)",
"pad.toolbar.underline.title": "Subliñar (Ctrl+U)", "pad.toolbar.underline.title": "Subliñar (Ctrl-U)",
"pad.toolbar.strikethrough.title": "Riscar (Ctrl+5)", "pad.toolbar.strikethrough.title": "Riscar (Ctrl+5)",
"pad.toolbar.ol.title": "Lista ordenada (Ctrl+Shift+N)", "pad.toolbar.ol.title": "Lista ordenada (Ctrl+Shift+N)",
"pad.toolbar.ul.title": "Lista sen ordenar (Ctrl+Shift+L)", "pad.toolbar.ul.title": "Lista sen ordenar (Ctrl+Shift+L)",
@ -74,8 +74,6 @@
"pad.settings.fontType": "Tipo de letra:", "pad.settings.fontType": "Tipo de letra:",
"pad.settings.fontType.normal": "Normal", "pad.settings.fontType.normal": "Normal",
"pad.settings.language": "Lingua:", "pad.settings.language": "Lingua:",
"pad.settings.deletePad": "Borrar o documento",
"pad.delete.confirm": "Queres borrar este documento?",
"pad.settings.about": "Acerca de", "pad.settings.about": "Acerca de",
"pad.settings.poweredBy": "Grazas a", "pad.settings.poweredBy": "Grazas a",
"pad.importExport.import_export": "Importar/Exportar", "pad.importExport.import_export": "Importar/Exportar",
@ -90,7 +88,7 @@
"pad.importExport.exportopen": "ODF (Open Document Format)", "pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.abiword.innerHTML": "Só podes importar texto simple ou formatos HTML. Para obter máis información sobre as características de importación avanzadas <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">instala AbiWord</a>.", "pad.importExport.abiword.innerHTML": "Só podes importar texto simple ou formatos HTML. Para obter máis información sobre as características de importación avanzadas <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">instala AbiWord</a>.",
"pad.modals.connected": "Conectado.", "pad.modals.connected": "Conectado.",
"pad.modals.reconnecting": "Reconectando co teu documento...", "pad.modals.reconnecting": "Reconectando co seu documento...",
"pad.modals.forcereconnect": "Forzar a reconexión", "pad.modals.forcereconnect": "Forzar a reconexión",
"pad.modals.reconnecttimer": "Intentarase reconectar en", "pad.modals.reconnecttimer": "Intentarase reconectar en",
"pad.modals.cancel": "Cancelar", "pad.modals.cancel": "Cancelar",

View file

@ -76,8 +76,6 @@
"pad.settings.fontType": "סוג גופן:", "pad.settings.fontType": "סוג גופן:",
"pad.settings.fontType.normal": "רגיל", "pad.settings.fontType.normal": "רגיל",
"pad.settings.language": "שפה:", "pad.settings.language": "שפה:",
"pad.settings.deletePad": "מחיקת פנקס",
"pad.delete.confirm": "למחוק את הפנקס הזה?",
"pad.settings.about": "על אודות", "pad.settings.about": "על אודות",
"pad.settings.poweredBy": "מופעל על גבי", "pad.settings.poweredBy": "מופעל על גבי",
"pad.importExport.import_export": "יבוא/יצוא", "pad.importExport.import_export": "יבוא/יצוא",

View file

@ -72,8 +72,6 @@
"pad.settings.fontType": "Pismowa družina:", "pad.settings.fontType": "Pismowa družina:",
"pad.settings.fontType.normal": "Normalny", "pad.settings.fontType.normal": "Normalny",
"pad.settings.language": "Rěč:", "pad.settings.language": "Rěč:",
"pad.settings.deletePad": "Zapisnik zhašeć",
"pad.delete.confirm": "Chceće woprawdźe tutón zapisnik zhašeć?",
"pad.settings.about": "Wo", "pad.settings.about": "Wo",
"pad.settings.poweredBy": "Spěchowany wot", "pad.settings.poweredBy": "Spěchowany wot",
"pad.importExport.import_export": "Import/Eksport", "pad.importExport.import_export": "Import/Eksport",

View file

@ -72,8 +72,6 @@
"pad.settings.fontType": "Typo de litteras:", "pad.settings.fontType": "Typo de litteras:",
"pad.settings.fontType.normal": "Normal", "pad.settings.fontType.normal": "Normal",
"pad.settings.language": "Lingua:", "pad.settings.language": "Lingua:",
"pad.settings.deletePad": "Deler pad",
"pad.delete.confirm": "Es tu secur de voler deler iste pad?",
"pad.settings.about": "A proposito", "pad.settings.about": "A proposito",
"pad.settings.poweredBy": "Actionate per", "pad.settings.poweredBy": "Actionate per",
"pad.importExport.import_export": "Importar/Exportar", "pad.importExport.import_export": "Importar/Exportar",

View file

@ -1,7 +1,6 @@
{ {
"@metadata": { "@metadata": {
"authors": [ "authors": [
"Akmaie Ajam",
"Atriwidada", "Atriwidada",
"Bennylin", "Bennylin",
"IvanLanin", "IvanLanin",
@ -20,7 +19,6 @@
"admin_plugins.installed": "Plugin terpasang", "admin_plugins.installed": "Plugin terpasang",
"admin_plugins.installed_fetching": "Mengambil plugin yang terpasang…", "admin_plugins.installed_fetching": "Mengambil plugin yang terpasang…",
"admin_plugins.installed_nothing": "Anda belum memasang plugin apa pun.", "admin_plugins.installed_nothing": "Anda belum memasang plugin apa pun.",
"admin_plugins.installed_uninstall.value": "Uninstal",
"admin_plugins.last-update": "Pembaruan terakhir", "admin_plugins.last-update": "Pembaruan terakhir",
"admin_plugins.name": "Nama", "admin_plugins.name": "Nama",
"admin_plugins.page-title": "Manajer plugin - Etherpad", "admin_plugins.page-title": "Manajer plugin - Etherpad",
@ -76,8 +74,6 @@
"pad.settings.rtlcheck": "Membaca dari kanan ke kiri?", "pad.settings.rtlcheck": "Membaca dari kanan ke kiri?",
"pad.settings.fontType": "Jenis fonta:", "pad.settings.fontType": "Jenis fonta:",
"pad.settings.language": "Bahasa:", "pad.settings.language": "Bahasa:",
"pad.settings.deletePad": "Hapus Pad",
"pad.delete.confirm": "Apakah Anda benar-benar ingin menghapus pad ini?",
"pad.settings.about": "Tentang", "pad.settings.about": "Tentang",
"pad.settings.poweredBy": "Ditenagai oleh", "pad.settings.poweredBy": "Ditenagai oleh",
"pad.importExport.import_export": "Impor/Ekspor", "pad.importExport.import_export": "Impor/Ekspor",

View file

@ -82,8 +82,6 @@
"pad.settings.fontType": "글꼴 종류:", "pad.settings.fontType": "글꼴 종류:",
"pad.settings.fontType.normal": "보통", "pad.settings.fontType.normal": "보통",
"pad.settings.language": "언어:", "pad.settings.language": "언어:",
"pad.settings.deletePad": "패드 삭제",
"pad.delete.confirm": "이 패드를 삭제하시겠습니까?",
"pad.settings.about": "소개", "pad.settings.about": "소개",
"pad.settings.poweredBy": "제공:", "pad.settings.poweredBy": "제공:",
"pad.importExport.import_export": "가져오기/내보내기", "pad.importExport.import_export": "가져오기/내보내기",

View file

@ -82,7 +82,7 @@
"timeslider.toolbar.exportlink.title": "Exportéieren", "timeslider.toolbar.exportlink.title": "Exportéieren",
"timeslider.exportCurrent": "Exportéiert déi aktuell Versioun als:", "timeslider.exportCurrent": "Exportéiert déi aktuell Versioun als:",
"timeslider.version": "Versioun {{version}}", "timeslider.version": "Versioun {{version}}",
"timeslider.saved": "Gespäichert de(n) {{day}}. {{month}} {{year}}", "timeslider.saved": "Gespäichert de(n) {{day}} {{month}} {{year}}",
"timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}",
"timeslider.month.january": "Januar", "timeslider.month.january": "Januar",
"timeslider.month.february": "Februar", "timeslider.month.february": "Februar",

View file

@ -1,61 +0,0 @@
{
"@metadata": {
"authors": [
"BOKOBA VEROLY"
]
},
"admin.page-title": "Admin Dashboard - Etherpad",
"admin_plugins": "Mokambi ya plug-in",
"admin_plugins.available": "Ba plugins oyo ezali",
"admin_plugins.available_not-found": "Ba plugins ezwamaki te.",
"admin_plugins.available_fetching": "Kozwa...",
"admin_plugins.available_install.value": "Kotya",
"admin_plugins.available_search.placeholder": "Bolukiluki ya ba plugins mpo na kotya",
"admin_plugins.description": "Ndimbola",
"admin_plugins.installed": "Ba plugins oyo etyamaki",
"admin_plugins.installed_fetching": "Kozwa ba plugins oyo etyamaki...",
"admin_plugins.installed_nothing": "Otikaki naino ba plugins te.",
"admin_plugins.installed_uninstall.value": "Kofungola esika",
"admin_plugins.last-update": "Makambo ya sika ya suka",
"admin_plugins.name": "Nkombo na yango",
"admin_plugins.page-title": "Gestionnaire de greffons — Etherpad",
"admin_plugins.version": "Libongoli",
"admin_plugins_info": "Informations de résolution de problème",
"admin_plugins_info.hooks": "Crochets installés",
"admin_plugins_info.hooks_client": "Crochets côté client",
"admin_plugins_info.hooks_server": "Crochets côté serveur",
"admin_plugins_info.parts": "Biteni oyo batye",
"admin_plugins_info.plugins": "Ba plugins oyo etyamaki",
"admin_plugins_info.page-title": "Makambo etali ordinatɛrɛ - Etherpad",
"admin_plugins_info.version": "Libongoli ya Etherpad",
"admin_plugins_info.version_latest": "Libongoli ya sika",
"admin_plugins_info.version_number": "Numero ya version",
"admin_settings": "Ndenge ya kobongisa yango",
"admin_settings.current": "Configuration ya lelo",
"admin_settings.current_example-devel": "Ndakisa modèle ya paramètres ya développement",
"admin_settings.current_example-prod": "Ndakisa modèle ya paramètres ya production",
"admin_settings.current_restart.value": "Bobandi lisusu Etherpad",
"admin_settings.current_save.value": "Bomba ba Paramètres",
"admin_settings.page-title": "Paramètres - Etherpad ya kosala",
"index.newPad": "Pad ya sika",
"index.createOpenPad": "to kosala/kofungola Pad na nkombo:",
"index.openPad": "kofungola Pad oyo ezali na nkombo:",
"pad.toolbar.bold.title": "Makomi ya moindo makasi (Ctrl+B)",
"pad.toolbar.underline.title": "Mokanda ya nse (Ctrl+U)",
"pad.toolbar.strikethrough.title": "Strikethrough (Ctrl+5)",
"pad.toolbar.ol.title": "Liste oyo esɛngami (Ctrl+Shift+N)",
"pad.toolbar.ul.title": "Liste oyo etyami na molongo te (Ctrl+Shift+L)",
"pad.toolbar.indent.title": "Indent (TAB)",
"pad.toolbar.unindent.title": "Mikuwa ya libándá (Shift+TAB)",
"pad.toolbar.undo.title": "Undo (Ctrl+Z)",
"pad.toolbar.redo.title": "Redo (Ctrl+Y)",
"pad.toolbar.clearAuthorship.title": "Langi ya polele ya mokomi (Ctrl+Shift+C)",
"pad.toolbar.import_export.title": "Kokotisa/kobimisa na/na ba formats ya ba fichiers ndenge na ndenge",
"pad.toolbar.timeslider.title": "Mokambi ya ntango",
"pad.toolbar.savedRevision.title": "Kobomba lisusu",
"pad.toolbar.settings.title": "Ndenge ya kobongisa yango",
"pad.toolbar.embed.title": "Kopesa mpe kobakisa yango",
"pad.toolbar.showusers.title": "Tyá bato oyo basalelaka yango",
"pad.colorpicker.save": "Kobikisa",
"pad.colorpicker.cancel": "Kolongola"
}

View file

@ -63,7 +63,7 @@
"pad.colorpicker.save": "Išsaugoti", "pad.colorpicker.save": "Išsaugoti",
"pad.colorpicker.cancel": "Atšaukti", "pad.colorpicker.cancel": "Atšaukti",
"pad.loading": "Įkraunama...", "pad.loading": "Įkraunama...",
"pad.noCookie": "Slapuko rasti nepavyko. Prašome leisti slapukus savo naršyklėje! Jūsų sesija ir nustatymai nebus išsaugoti tarp apsilankymų. Taip gali būti dėl to, kad kai kuriose naršyklėse Etherpad yra įtrauktas į iFrame. Įsitikinkite, kad Etherpad yra tame pačiame padomenyje / domene kaip ir pirminis iFrame.", "pad.noCookie": "Slapuko nepavyko rasti. Prašome leisti slapukus interneto naršyklėje!",
"pad.permissionDenied": "Jūs neturite leidimo patekti į šį bloknotą", "pad.permissionDenied": "Jūs neturite leidimo patekti į šį bloknotą",
"pad.settings.padSettings": "Bloknoto nustatymai", "pad.settings.padSettings": "Bloknoto nustatymai",
"pad.settings.myView": "Mano Vaizdas", "pad.settings.myView": "Mano Vaizdas",
@ -75,8 +75,6 @@
"pad.settings.fontType": "Šrifto tipas:", "pad.settings.fontType": "Šrifto tipas:",
"pad.settings.fontType.normal": "Normalus", "pad.settings.fontType.normal": "Normalus",
"pad.settings.language": "Kalba:", "pad.settings.language": "Kalba:",
"pad.settings.deletePad": "Ištrinti bloką",
"pad.delete.confirm": "Ar tikrai norite ištrinti šį bloką?",
"pad.settings.about": "Apie", "pad.settings.about": "Apie",
"pad.settings.poweredBy": "Palaiko", "pad.settings.poweredBy": "Palaiko",
"pad.importExport.import_export": "Importuoti/Eksportuoti", "pad.importExport.import_export": "Importuoti/Eksportuoti",

View file

@ -74,8 +74,6 @@
"pad.settings.fontType": "Тип на фонт:", "pad.settings.fontType": "Тип на фонт:",
"pad.settings.fontType.normal": "Нормален", "pad.settings.fontType.normal": "Нормален",
"pad.settings.language": "Јазик:", "pad.settings.language": "Јазик:",
"pad.settings.deletePad": "Избриши тетратка",
"pad.delete.confirm": "Дали навистина сакате да ја избришете тетраткава?",
"pad.settings.about": "За додатоков", "pad.settings.about": "За додатоков",
"pad.settings.poweredBy": "Овозможено од", "pad.settings.poweredBy": "Овозможено од",
"pad.importExport.import_export": "Увоз/Извоз", "pad.importExport.import_export": "Увоз/Извоз",

View file

@ -85,8 +85,6 @@
"pad.settings.fontType": "Lettertype:", "pad.settings.fontType": "Lettertype:",
"pad.settings.fontType.normal": "Normaal", "pad.settings.fontType.normal": "Normaal",
"pad.settings.language": "Taal:", "pad.settings.language": "Taal:",
"pad.settings.deletePad": "Pad verwijderen",
"pad.delete.confirm": "Wilt u dit pad echt verwijderen?",
"pad.settings.about": "Over", "pad.settings.about": "Over",
"pad.settings.poweredBy": "Aangedreven door", "pad.settings.poweredBy": "Aangedreven door",
"pad.importExport.import_export": "Importeren/exporteren", "pad.importExport.import_export": "Importeren/exporteren",

View file

@ -9,16 +9,6 @@
"ਪ੍ਰਚਾਰਕ" "ਪ੍ਰਚਾਰਕ"
] ]
}, },
"admin_plugins.available_fetching": "ਲਿਆਉਣਾ ਪਿਆਂ...",
"admin_plugins.available_install.value": "ਜੜੋ",
"admin_plugins.description": "ਵੇਰਵਾ",
"admin_plugins.last-update": "ਆਖਰੀ ਵਾਰ ਨਵਿਆਈਆ ਗਿਆ",
"admin_plugins.name": "ਨਾਂ",
"admin_plugins_info": "ਸਮੱਸਿਆ ਨਿਵਾਰਣ ਜਾਣਕਾਰੀ",
"admin_settings": "ਤਰਜੀਹਾਂ",
"admin_settings.current": "ਮੌਜੂਦਾ ਬਣਤਰ",
"admin_settings.current_save.value": "ਤਰਜੀਹਾਂ ਸੰਭਾਲੋ",
"admin_settings.page-title": "ਤਰਜੀਹਾਂ - ਈਥਰਪੈਡ",
"index.newPad": "ਨਵਾਂ ਪੈਡ", "index.newPad": "ਨਵਾਂ ਪੈਡ",
"index.createOpenPad": "ਜਾਂ ਨਾਂ ਨਾਲ ਨਵਾਂ ਪੈਡ ਬਣਾਓ/ਖੋਲ੍ਹੋ:", "index.createOpenPad": "ਜਾਂ ਨਾਂ ਨਾਲ ਨਵਾਂ ਪੈਡ ਬਣਾਓ/ਖੋਲ੍ਹੋ:",
"pad.toolbar.bold.title": "ਗੂੜ੍ਹਾ (Ctrl-B)", "pad.toolbar.bold.title": "ਗੂੜ੍ਹਾ (Ctrl-B)",
@ -50,11 +40,10 @@
"pad.settings.colorcheck": "ਲੇਖਕੀ ਰੰਗ", "pad.settings.colorcheck": "ਲੇਖਕੀ ਰੰਗ",
"pad.settings.linenocheck": "ਲਕੀਰ ਨੰਬਰ", "pad.settings.linenocheck": "ਲਕੀਰ ਨੰਬਰ",
"pad.settings.rtlcheck": "ਸਮੱਗਰੀ ਸੱਜੇ ਤੋਂ ਖੱਬੇ ਪੜ੍ਹਨੀ ਹੈ?", "pad.settings.rtlcheck": "ਸਮੱਗਰੀ ਸੱਜੇ ਤੋਂ ਖੱਬੇ ਪੜ੍ਹਨੀ ਹੈ?",
"pad.settings.fontType": "ਅੱਖਰ ਦੀ ਕਿਸਮ:", "pad.settings.fontType": "ਫੋਂਟ ਕਿਸਮ:",
"pad.settings.fontType.normal": "ਆਮ", "pad.settings.fontType.normal": "ਆਮ",
"pad.settings.language": "ਭਾਸ਼ਾ:", "pad.settings.language": "ਭਾਸ਼ਾ:",
"pad.settings.about": "ਬਾਬਤ", "pad.importExport.import_export": "ਇੰਪੋਰਟ/ਐਕਸਪੋਰਟ",
"pad.importExport.import_export": "ਦਰਾਮਦ/ਬਰਾਮਦ",
"pad.importExport.import": "ਕੋਈ ਵੀ ਟੈਕਸਟ ਫਾਇਲ ਜਾਂ ਦਸਤਾਵੇਜ਼ ਅੱਪਲੋਡ ਕਰੋ", "pad.importExport.import": "ਕੋਈ ਵੀ ਟੈਕਸਟ ਫਾਇਲ ਜਾਂ ਦਸਤਾਵੇਜ਼ ਅੱਪਲੋਡ ਕਰੋ",
"pad.importExport.importSuccessful": "ਸਫ਼ਲ!", "pad.importExport.importSuccessful": "ਸਫ਼ਲ!",
"pad.importExport.export": "ਮੌਜੂਦਾ ਪੈਡ ਨੂੰ ਐਕਸਪੋਰਟ ਕਰੋ:", "pad.importExport.export": "ਮੌਜੂਦਾ ਪੈਡ ਨੂੰ ਐਕਸਪੋਰਟ ਕਰੋ:",
@ -68,7 +57,6 @@
"pad.modals.connected": "ਕੁਨੈਕਟ ਹੈ।", "pad.modals.connected": "ਕੁਨੈਕਟ ਹੈ।",
"pad.modals.reconnecting": "..ਤੁਹਾਡੇ ਪੈਡ ਨਾਲ ਮੁੜ-ਕੁਨੈਕਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ", "pad.modals.reconnecting": "..ਤੁਹਾਡੇ ਪੈਡ ਨਾਲ ਮੁੜ-ਕੁਨੈਕਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ",
"pad.modals.forcereconnect": "ਧੱਕੇ ਨਾਲ ਮੁੜ-ਕੁਨੈਕਟ ਕਰੋ", "pad.modals.forcereconnect": "ਧੱਕੇ ਨਾਲ ਮੁੜ-ਕੁਨੈਕਟ ਕਰੋ",
"pad.modals.cancel": "ਰੱਦ ਕਰੋ",
"pad.modals.userdup": "ਹੋਰ ਵਿੰਡੋ ਵਿੱਚ ਖੁੱਲ੍ਹਿਆ ਹੈ", "pad.modals.userdup": "ਹੋਰ ਵਿੰਡੋ ਵਿੱਚ ਖੁੱਲ੍ਹਿਆ ਹੈ",
"pad.modals.userdup.explanation": "ਇਹ ਪੈਡ ਇਸ ਕੰਪਿਊਟਰ 'ਤੇ ਇੱਕ ਤੋਂ ਵੱਧ ਫਰੋਲੂ ਬਾਰੀ ਵਿੱਚ ਖੁੱਲ੍ਹਿਆ ਜਾਪਦਾ ਹੈ।", "pad.modals.userdup.explanation": "ਇਹ ਪੈਡ ਇਸ ਕੰਪਿਊਟਰ 'ਤੇ ਇੱਕ ਤੋਂ ਵੱਧ ਫਰੋਲੂ ਬਾਰੀ ਵਿੱਚ ਖੁੱਲ੍ਹਿਆ ਜਾਪਦਾ ਹੈ।",
"pad.modals.userdup.advice": "ਸਗੋਂ ਇਹ ਬਾਰੀ ਵਰਤਣ ਵਾਸਤੇ ਮੁੜ ਜੁੜੋ।", "pad.modals.userdup.advice": "ਸਗੋਂ ਇਹ ਬਾਰੀ ਵਰਤਣ ਵਾਸਤੇ ਮੁੜ ਜੁੜੋ।",
@ -97,7 +85,6 @@
"pad.chat": "ਗੱਲਬਾਤ", "pad.chat": "ਗੱਲਬਾਤ",
"pad.chat.title": "ਇਹ ਪੈਡ ਲਈ ਗੱਲਬਾਤ ਖੋਲ੍ਹੋ।", "pad.chat.title": "ਇਹ ਪੈਡ ਲਈ ਗੱਲਬਾਤ ਖੋਲ੍ਹੋ।",
"pad.chat.loadmessages": "ਹੋਰ ਸੁਨੇਹੇ ਲੱਦੋ", "pad.chat.loadmessages": "ਹੋਰ ਸੁਨੇਹੇ ਲੱਦੋ",
"pad.chat.writeMessage.placeholder": "ਆਪਣਾ ਸੁਨੇਹਾ ਇੱਥੇ ਲਿਖੋ",
"timeslider.pageTitle": "{{appTitle}} ਸਮਾਂ-ਲਕੀਰ", "timeslider.pageTitle": "{{appTitle}} ਸਮਾਂ-ਲਕੀਰ",
"timeslider.toolbar.returnbutton": "ਪੈਡ ਉੱਤੇ ਵਾਪਸ", "timeslider.toolbar.returnbutton": "ਪੈਡ ਉੱਤੇ ਵਾਪਸ",
"timeslider.toolbar.authors": "ਲੇਖਕ:", "timeslider.toolbar.authors": "ਲੇਖਕ:",
@ -123,18 +110,18 @@
"timeslider.month.november": "ਨਵੰਬਰ", "timeslider.month.november": "ਨਵੰਬਰ",
"timeslider.month.december": "ਦਸੰਬਰ", "timeslider.month.december": "ਦਸੰਬਰ",
"timeslider.unnamedauthors": "{{num}} ਬੇਨਾਮ {[plural(num) one: ਲੇਖਕ, other: ਲੇਖਕ ]}", "timeslider.unnamedauthors": "{{num}} ਬੇਨਾਮ {[plural(num) one: ਲੇਖਕ, other: ਲੇਖਕ ]}",
"pad.savedrevs.marked": "ਇਹ ਦੁਹਰਾਅ ਨੂੰ ਹੁਣ ਸੰਭਾਲੇ ਹੋਏ ਦੁਹਰਾਅ ਵਜੋਂ ਮੰਨਿਆ ਗਿਆ ਹੈ", "pad.savedrevs.marked": "ਇਹ ਰੀਵਿਜ਼ਨ ਨੂੰ ਹੁਣ ਸੰਭਾਲੇ ਹੋਏ ਰੀਵਿਜ਼ਨ ਵਜੋਂ ਮੰਨਿਆ ਗਿਆ ਹੈ",
"pad.savedrevs.timeslider": "ਤੁਸੀੰ ਸਾੰਭੀਆੰ ਹੋਈਆੰ ਵਰਜਨਾੰ ਸਮਾੰਸਲਾਈਡਰ ਤੇ ਜਾ ਕੇ ਵੇਖ ਸਕਦੇ ਹੋ", "pad.savedrevs.timeslider": "ਤੁਸੀੰ ਸਾੰਭੀਆੰ ਹੋਈਆੰ ਵਰਜਨਾੰ ਸਮਾੰਸਲਾਈਡਰ ਤੇ ਜਾ ਕੇ ਵੇਖ ਸਕਦੇ ਹੋ",
"pad.userlist.entername": "ਆਪਣਾ ਨਾਂ ਦਿਉ", "pad.userlist.entername": "ਆਪਣਾ ਨਾਂ ਦਿਉ",
"pad.userlist.unnamed": "ਬੇਨਾਮ", "pad.userlist.unnamed": "ਬੇਨਾਮ",
"pad.editbar.clearcolors": "ਪੂਰੇ ਦਸਾਤਵੇਜ਼ ਉੱਤੇ ਪਰਮਾਣਕਿਤਾ ਰੰਗ ਸਾਫ਼ ਕਰਨੇ ਹਨ?", "pad.editbar.clearcolors": "ਪੂਰੇ ਦਸਾਤਵੇਜ਼ ਉੱਤੇ ਪਰਮਾਣਕਿਤਾ ਰੰਗ ਸਾਫ਼ ਕਰਨੇ ਹਨ?",
"pad.impexp.importbutton": "ਹੁਣੇ ਦਰਾਮਦ ਕਰੋ", "pad.impexp.importbutton": "ਹੁਣੇ ਇੰਪੋਰਟ ਕਰੋ",
"pad.impexp.importing": "...ਇੰਪੋਰਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ", "pad.impexp.importing": "...ਇੰਪੋਰਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ",
"pad.impexp.confirmimport": "ਕੋਈ ਫ਼ਾਈਲ ਦਰਾਮਦ ਕਾਰਨ ਨਾਲ਼ ਪੈਡ ਦੀ ਮੌਜੂਦਾ ਲਿਖਤ ਉੱਤੇ ਲਿਖਿਆ ਜਾਵੇਗਾ। ਕੀ ਤੁਸੀਂ ਸੱਚੀਂ ਇਹ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?", "pad.impexp.confirmimport": "ਕੋਈ ਫ਼ਾਈਲ ਦਰਾਮਦ ਕਾਰਨ ਨਾਲ਼ ਪੈਡ ਦੀ ਮੌਜੂਦਾ ਲਿਖਤ ਉੱਤੇ ਲਿਖਿਆ ਜਾਵੇਗਾ। ਕੀ ਤੁਸੀਂ ਸੱਚੀਂ ਇਹ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?",
"pad.impexp.convertFailed": "ਅਸੀਂ ਇਸ ਫ਼ਾਈਲ ਦੀ ਦਰਾਮਦ ਨਹੀਂ ਕਰ ਸਕੇ। ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਕੋਈ ਵੱਖਰੀ ਦਸਤਾਵੇਜ਼ੀ ਰੂਪ-ਰੇਖਾ ਵਰਤੋ ਜਾਂ ਹੱਥੀਂ ਨਕਲ-ਚੇਪੀ ਕਰੋ।", "pad.impexp.convertFailed": "ਅਸੀਂ ਇਸ ਫ਼ਾਈਲ ਦੀ ਦਰਾਮਦ ਨਹੀਂ ਕਰ ਸਕੇ। ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਕੋਈ ਵੱਖਰੀ ਦਸਤਾਵੇਜ਼ੀ ਰੂਪ-ਰੇਖਾ ਵਰਤੋ ਜਾਂ ਹੱਥੀਂ ਨਕਲ-ਚੇਪੀ ਕਰੋ।",
"pad.impexp.padHasData": "ਅਸੀ ਇਸ ਫਾਈਲ ਨੂੰ ਦਰਾਮਦ ਨਹੀੰ ਕਰ ਸਕੇ ਕਿਉੰਕਿ ਇਸ ਕਾਗਜ਼ ਉੱਤੇ ਪਹਿਲਾਂ ਹੀ ਤਬਦੀਲੀਆਂ ਕੀਤੀਆਂ ਜਾ ਚੁਕੀਆਂ ਹਨ, ਕਿਰਪਾ ਕਰਕੇ ਨਵੇਂ ਕਾਗਜ਼ ਵਿਚ ਦਰਾਮਦ ਕਰੋ", "pad.impexp.padHasData": "ਅਸੀ ਇਸ ਫਾਈਲ ਨੂੰ ਆਯਾਤ ਨਹੀੰ ਕਰ ਸਕੇ ਕਿਉੰਕਿ ਇਸ ਪੈਡ ਉੱਤੇ ਪਹਿਲਾੰ ਹੀ ਤਬਦੀਲੀਆੰ ਕੀਤੀਆੰ ਜਾ ਚੁਕੀਆੰ ਹਨ, ਕਿਰਪਾ ਕਰਕੇ ਨਵੇੰ ਪੈਡ ਵਿਚ ਆਯਾਤ ਕਰੋ",
"pad.impexp.uploadFailed": "ਅੱਪਲੋਡ ਲਈ ਫੇਲ੍ਹ ਹੈ, ਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ।", "pad.impexp.uploadFailed": "ਅੱਪਲੋਡ ਲਈ ਫੇਲ੍ਹ ਹੈ, ਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ।",
"pad.impexp.importfailed": "ਦਰਾਮਦ ਨਾਕਾਮ", "pad.impexp.importfailed": "ਇੰਪੋਰਟ ਫੇਲ੍ਹ ਹੈ",
"pad.impexp.copypaste": "ਕਾਪੀ ਕਰੋ ਚੇਪੋ ਜੀ", "pad.impexp.copypaste": "ਕਾਪੀ ਕਰੋ ਚੇਪੋ ਜੀ",
"pad.impexp.exportdisabled": "{{type}} ਫਾਰਮੈਟ ਵਜੋਂ ਬਰਾਮਦ ਕਰਨਾ ਬੰਦ ਹੈ। ਵੇਰਵੇ ਵਾਸਤੇ ਆਪਣੇ ਸਿਸਟਮ ਦੇ ਪਰਬੰਧਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।" "pad.impexp.exportdisabled": "{{type}} ਫਾਰਮੈਟ ਵਜੋਂ ਬਰਾਮਦ ਕਰਨਾ ਬੰਦ ਹੈ। ਵੇਰਵੇ ਵਾਸਤੇ ਆਪਣੇ ਸਿਸਟਮ ਦੇ ਪਰਬੰਧਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"
} }

View file

@ -71,8 +71,6 @@
"pad.settings.rtlcheck": "Ël contnù, dev-lo esse lesù da drita a snistra?", "pad.settings.rtlcheck": "Ël contnù, dev-lo esse lesù da drita a snistra?",
"pad.settings.fontType": "Sòrt ëd caràter:", "pad.settings.fontType": "Sòrt ëd caràter:",
"pad.settings.language": "Lenga:", "pad.settings.language": "Lenga:",
"pad.settings.deletePad": "Eliminé ël blochet",
"pad.delete.confirm": "Veul-lo për da bon eliminé cost blochet?",
"pad.settings.about": "A propòsit", "pad.settings.about": "A propòsit",
"pad.settings.poweredBy": "Potensià da", "pad.settings.poweredBy": "Potensià da",
"pad.importExport.import_export": "Amporté/Esporté", "pad.importExport.import_export": "Amporté/Esporté",

View file

@ -23,22 +23,22 @@
] ]
}, },
"admin.page-title": "Painel administrativo - Etherpad", "admin.page-title": "Painel administrativo - Etherpad",
"admin_plugins": "Gerenciador de complementos", "admin_plugins": "Gerente de complementos",
"admin_plugins.available": "Plugins disponíveis", "admin_plugins.available": "Plugins disponíveis",
"admin_plugins.available_not-found": "Nenhum plugin encontrado.", "admin_plugins.available_not-found": "Nenhuma complementos encontrado.",
"admin_plugins.available_fetching": "Buscando…", "admin_plugins.available_fetching": "Buscando…",
"admin_plugins.available_install.value": "Instalar", "admin_plugins.available_install.value": "Instalar",
"admin_plugins.available_search.placeholder": "Procure plugins para instalar", "admin_plugins.available_search.placeholder": "Procure por plug-ins para instalar",
"admin_plugins.description": "Descrição", "admin_plugins.description": "Descrição",
"admin_plugins.installed": "Plugins instalados", "admin_plugins.installed": "Complementos instalados",
"admin_plugins.installed_fetching": "Buscando plugins instalados…", "admin_plugins.installed_fetching": "Buscando plug-ins instalados…",
"admin_plugins.installed_nothing": "Você ainda não instalou nenhum plugin.", "admin_plugins.installed_nothing": "Você ainda não instalou nenhum plug-in.",
"admin_plugins.installed_uninstall.value": "Desinstalar", "admin_plugins.installed_uninstall.value": "Desinstalar",
"admin_plugins.last-update": "Última atualização", "admin_plugins.last-update": "Última atualização",
"admin_plugins.name": "Nome", "admin_plugins.name": "Nome",
"admin_plugins.page-title": "Gerenciador de plugins - Etherpad", "admin_plugins.page-title": "Gerenciador de plug-ins - Etherpad",
"admin_plugins.version": "Versão", "admin_plugins.version": "Versão",
"admin_plugins_info": "Resolução de problemas", "admin_plugins_info": "Informações sobre solução",
"admin_plugins_info.hooks": "Ganchos instalados", "admin_plugins_info.hooks": "Ganchos instalados",
"admin_plugins_info.hooks_client": "Ganchos do lado do cliente", "admin_plugins_info.hooks_client": "Ganchos do lado do cliente",
"admin_plugins_info.hooks_server": "Ganchos do lado do servidor", "admin_plugins_info.hooks_server": "Ganchos do lado do servidor",
@ -90,8 +90,6 @@
"pad.settings.fontType": "Tipo de fonte:", "pad.settings.fontType": "Tipo de fonte:",
"pad.settings.fontType.normal": "Normal", "pad.settings.fontType.normal": "Normal",
"pad.settings.language": "Idioma:", "pad.settings.language": "Idioma:",
"pad.settings.deletePad": "Apagar Pad",
"pad.delete.confirm": "Tem certeza de que quer deletar este pad?",
"pad.settings.about": "Sobre", "pad.settings.about": "Sobre",
"pad.settings.poweredBy": "Fornecido por", "pad.settings.poweredBy": "Fornecido por",
"pad.importExport.import_export": "Importar/Exportar", "pad.importExport.import_export": "Importar/Exportar",
@ -129,7 +127,7 @@
"pad.modals.deleted": "Excluído.", "pad.modals.deleted": "Excluído.",
"pad.modals.deleted.explanation": "Esta nota foi removida.", "pad.modals.deleted.explanation": "Esta nota foi removida.",
"pad.modals.rateLimited": "Limitado.", "pad.modals.rateLimited": "Limitado.",
"pad.modals.rateLimited.explanation": "Você enviou muitas mensagens para esta nota por isso será desconectado.", "pad.modals.rateLimited.explanation": "Você enviou muitas mensagens para este pad por isso será desconectado.",
"pad.modals.rejected.explanation": "O servidor rejeitou uma mensagem que foi enviada pelo seu navegador.", "pad.modals.rejected.explanation": "O servidor rejeitou uma mensagem que foi enviada pelo seu navegador.",
"pad.modals.rejected.cause": "O server pode ter sido atualizado enquanto visualizava esta nota, ou talvez seja apenas um bug do Etherpad. Tenta recarregar a página.", "pad.modals.rejected.cause": "O server pode ter sido atualizado enquanto visualizava esta nota, ou talvez seja apenas um bug do Etherpad. Tenta recarregar a página.",
"pad.modals.disconnected": "Você foi desconectado.", "pad.modals.disconnected": "Você foi desconectado.",
@ -144,7 +142,7 @@
"pad.chat.loadmessages": "Carregar mais mensagens", "pad.chat.loadmessages": "Carregar mais mensagens",
"pad.chat.stick.title": "Cole o bate-papo na tela", "pad.chat.stick.title": "Cole o bate-papo na tela",
"pad.chat.writeMessage.placeholder": "Escreva sua mensagem aqui", "pad.chat.writeMessage.placeholder": "Escreva sua mensagem aqui",
"timeslider.followContents": "Siga as atualizações de conteúdo da nota", "timeslider.followContents": "Siga as atualizações de conteúdo do pad",
"timeslider.pageTitle": "Linha do tempo de {{appTitle}}", "timeslider.pageTitle": "Linha do tempo de {{appTitle}}",
"timeslider.toolbar.returnbutton": "Retornar para a nota", "timeslider.toolbar.returnbutton": "Retornar para a nota",
"timeslider.toolbar.authors": "Autores:", "timeslider.toolbar.authors": "Autores:",
@ -153,9 +151,9 @@
"timeslider.exportCurrent": "Exportar a versão atual em formato:", "timeslider.exportCurrent": "Exportar a versão atual em formato:",
"timeslider.version": "Versão {{version}}", "timeslider.version": "Versão {{version}}",
"timeslider.saved": "Salvo em {{day}} de {{month}} de {{year}}", "timeslider.saved": "Salvo em {{day}} de {{month}} de {{year}}",
"timeslider.playPause": "Reproduzir / Pausar conteúdos da Nota", "timeslider.playPause": "Reproduzir / Pausar conteúdo no Pad",
"timeslider.backRevision": "Voltar a uma revisão anterior nesta Nota", "timeslider.backRevision": "Voltar a uma revisão anterior neste Pad",
"timeslider.forwardRevision": "Ir a uma revisão posterior nesta Nota", "timeslider.forwardRevision": "Ir a uma revisão posterior neste Pad",
"timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}",
"timeslider.month.january": "Janeiro", "timeslider.month.january": "Janeiro",
"timeslider.month.february": "Fevereiro", "timeslider.month.february": "Fevereiro",

View file

@ -87,8 +87,6 @@
"pad.settings.fontType": "Тип шрифта:", "pad.settings.fontType": "Тип шрифта:",
"pad.settings.fontType.normal": "Обычный", "pad.settings.fontType.normal": "Обычный",
"pad.settings.language": "Язык:", "pad.settings.language": "Язык:",
"pad.settings.deletePad": "Удалить документ",
"pad.delete.confirm": "Вы действительно хотите удалить этот документ?",
"pad.settings.about": "О проекте", "pad.settings.about": "О проекте",
"pad.settings.poweredBy": "Проект основан на", "pad.settings.poweredBy": "Проект основан на",
"pad.importExport.import_export": "Импорт/экспорт", "pad.importExport.import_export": "Импорт/экспорт",

View file

@ -77,8 +77,6 @@
"pad.settings.fontType": "Vrsta pisave:", "pad.settings.fontType": "Vrsta pisave:",
"pad.settings.fontType.normal": "Normalno", "pad.settings.fontType.normal": "Normalno",
"pad.settings.language": "Jezik:", "pad.settings.language": "Jezik:",
"pad.settings.deletePad": "Izbriši ploščico",
"pad.delete.confirm": "Res želite izbrisati to ploščico?",
"pad.settings.about": "Kolofon", "pad.settings.about": "Kolofon",
"pad.settings.poweredBy": "Omogoča", "pad.settings.poweredBy": "Omogoča",
"pad.importExport.import_export": "Uvoz/Izvoz", "pad.importExport.import_export": "Uvoz/Izvoz",

View file

@ -76,8 +76,6 @@
"pad.settings.fontType": "Typsnitt:", "pad.settings.fontType": "Typsnitt:",
"pad.settings.fontType.normal": "Normal", "pad.settings.fontType.normal": "Normal",
"pad.settings.language": "Språk:", "pad.settings.language": "Språk:",
"pad.settings.deletePad": "Radera block",
"pad.delete.confirm": "Vill du verkligen radera detta block?",
"pad.settings.about": "Om", "pad.settings.about": "Om",
"pad.settings.poweredBy": "Drivs av", "pad.settings.poweredBy": "Drivs av",
"pad.importExport.import_export": "Importera/Exportera", "pad.importExport.import_export": "Importera/Exportera",

View file

@ -16,7 +16,6 @@
"Shangkuanlc", "Shangkuanlc",
"Shizhao", "Shizhao",
"Stang", "Stang",
"TFX202X",
"VulpesVulpes825", "VulpesVulpes825",
"Yfdyh000", "Yfdyh000",
"乌拉跨氪", "乌拉跨氪",
@ -93,8 +92,6 @@
"pad.settings.fontType": "字体类型:", "pad.settings.fontType": "字体类型:",
"pad.settings.fontType.normal": "正常", "pad.settings.fontType.normal": "正常",
"pad.settings.language": "语言:", "pad.settings.language": "语言:",
"pad.settings.deletePad": "删除记事本",
"pad.delete.confirm": "您确定要删除此记事本吗?",
"pad.settings.about": "关于", "pad.settings.about": "关于",
"pad.settings.poweredBy": "技术支持来自", "pad.settings.poweredBy": "技术支持来自",
"pad.importExport.import_export": "导入/导出", "pad.importExport.import_export": "导入/导出",

View file

@ -82,8 +82,6 @@
"pad.settings.fontType": "字型類型:", "pad.settings.fontType": "字型類型:",
"pad.settings.fontType.normal": "正常", "pad.settings.fontType.normal": "正常",
"pad.settings.language": "語言:", "pad.settings.language": "語言:",
"pad.settings.deletePad": "刪除記事本",
"pad.delete.confirm": "您確定要刪除此記事本?",
"pad.settings.about": "關於", "pad.settings.about": "關於",
"pad.settings.poweredBy": "技術支援來自", "pad.settings.poweredBy": "技術支援來自",
"pad.importExport.import_export": "導入/匯出", "pad.importExport.import_export": "導入/匯出",

View file

@ -20,10 +20,9 @@
*/ */
import {MapArrayType} from "../types/MapType"; import {MapArrayType} from "../types/MapType";
import { jwtDecode } from "jwt-decode";
const api = require('../db/API'); const api = require('../db/API');
const padManager = require('../db/PadManager'); const padManager = require('../db/PadManager');
const settings = require('../utils/Settings');
import createHTTPError from 'http-errors'; import createHTTPError from 'http-errors';
import {Http2ServerRequest} from "node:http2"; import {Http2ServerRequest} from "node:http2";
import {publicKeyExported} from "../security/OAuth2Provider"; import {publicKeyExported} from "../security/OAuth2Provider";
@ -183,17 +182,8 @@ exports.handle = async function (apiVersion: string, functionName: string, field
throw new createHTTPError.Unauthorized('no or wrong API Key'); throw new createHTTPError.Unauthorized('no or wrong API Key');
} }
try { try {
const clientIds: string[] = settings.sso.clients?.map((client: {client_id: string}) => client.client_id); await jwtVerify(req.headers.authorization!.replace("Bearer ", ""), publicKeyExported!, {algorithms: ['RS256'],
const jwtToCheck = req.headers.authorization.replace("Bearer ", "")
const payload = jwtDecode(jwtToCheck)
// client_credentials
if (clientIds.includes(<string>payload.sub)) {
await jwtVerify(jwtToCheck, publicKeyExported!, {algorithms: ['RS256']})
} else {
// authorization_code
await jwtVerify(jwtToCheck, publicKeyExported!, {algorithms: ['RS256'],
requiredClaims: ["admin"]}) requiredClaims: ["admin"]})
}
} catch (e) { } catch (e) {
throw new createHTTPError.Unauthorized('no or wrong OAuth token'); throw new createHTTPError.Unauthorized('no or wrong OAuth token');
} }

View file

@ -5,10 +5,9 @@ import {ErrorCaused} from "../../types/ErrorCaused";
import {QueryType} from "../../types/QueryType"; import {QueryType} from "../../types/QueryType";
import {getAvailablePlugins, install, search, uninstall} from "../../../static/js/pluginfw/installer"; import {getAvailablePlugins, install, search, uninstall} from "../../../static/js/pluginfw/installer";
import {PackageData, PackageInfo} from "../../types/PackageInfo"; import {PackageData} from "../../types/PackageInfo";
import semver from 'semver'; import semver from 'semver';
import log4js from 'log4js'; import log4js from 'log4js';
import {MapArrayType} from "../../types/MapType";
const pluginDefs = require('../../../static/js/pluginfw/plugin_defs'); const pluginDefs = require('../../../static/js/pluginfw/plugin_defs');
const logger = log4js.getLogger('adminPlugins'); const logger = log4js.getLogger('adminPlugins');
@ -22,13 +21,7 @@ exports.socketio = (hookName:string, args:ArgsExpressType, cb:Function) => {
if (!isAdmin) return; if (!isAdmin) return;
const checkPluginForUpdates = async () => { const checkPluginForUpdates = async () => {
let results: MapArrayType<PackageInfo> const results = await getAvailablePlugins(/* maxCacheAge:*/ 60 * 10);
try {
results = await getAvailablePlugins(/* maxCacheAge:*/ 60 * 10);
} catch (error) {
console.error('Error checking for plugin updates:', error);
return [];
}
return Object.keys(pluginDefs.plugins).filter((plugin) => { return Object.keys(pluginDefs.plugins).filter((plugin) => {
if (!results[plugin]) return false; if (!results[plugin]) return false;

View file

@ -244,7 +244,7 @@ const convertTypescriptWatched = (content: string, cb: (output:string, hash: str
}) })
} }
exports.expressCreateServer = async (_hookName: string, args: ArgsExpressType, cb: Function) => { exports.expressCreateServer = async (hookName: string, args: ArgsExpressType, cb: Function) => {
const padString = eejs.require('ep_etherpad-lite/templates/padBootstrap.js', { const padString = eejs.require('ep_etherpad-lite/templates/padBootstrap.js', {
pluginModules: (() => { pluginModules: (() => {
const pluginModules = new Set(); const pluginModules = new Set();
@ -295,20 +295,32 @@ exports.expressCreateServer = async (_hookName: string, args: ArgsExpressType, c
fileNamePad = `padbootstrap-${padSliderWrite.hash}.min.js` fileNamePad = `padbootstrap-${padSliderWrite.hash}.min.js`
fileNameTimeSlider = `timeSliderBootstrap-${timeSliderWrite.hash}.min.js` fileNameTimeSlider = `timeSliderBootstrap-${timeSliderWrite.hash}.min.js`
fileNameIndex = `indexBootstrap-${indexWrite.hash}.min.js` fileNameIndex = `indexBootstrap-${indexWrite.hash}.min.js`
const pathNamePad = path.join(outdir, fileNamePad)
const pathNameTimeSlider = path.join(outdir, fileNameTimeSlider)
const pathNameIndex = path.join(outdir, 'index.js')
args.app.get("/"+fileNamePad, (_req, res) => { if (!fs.existsSync(pathNamePad)) {
res.header('Content-Type', 'application/javascript'); fs.writeFileSync(pathNamePad, padSliderWrite.output);
res.send(padSliderWrite.output) }
if (!fs.existsSync(pathNameIndex)) {
fs.writeFileSync(pathNameIndex, indexWrite.output);
}
if (!fs.existsSync(pathNameTimeSlider)) {
fs.writeFileSync(pathNameTimeSlider,timeSliderWrite.output)
}
args.app.get("/"+fileNamePad, (req: any, res: any) => {
res.sendFile(pathNamePad)
}) })
args.app.get("/"+fileNameIndex, (_req, res) => { args.app.get("/"+fileNameIndex, (req: any, res: any) => {
res.header('Content-Type', 'application/javascript'); res.sendFile(pathNameIndex)
res.send(indexWrite.output)
}) })
args.app.get("/"+fileNameTimeSlider, (_req, res) => { args.app.get("/"+fileNameTimeSlider, (req: any, res: any) => {
res.header('Content-Type', 'application/javascript'); res.sendFile(pathNameTimeSlider)
res.send(timeSliderWrite.output)
}) })
// serve index.html under / // serve index.html under /

View file

@ -49,21 +49,8 @@ exports.userCanModify = (padId: string, req: SocketClientRequest) => {
// Exported so that tests can set this to 0 to avoid unnecessary test slowness. // Exported so that tests can set this to 0 to avoid unnecessary test slowness.
exports.authnFailureDelayMs = 1000; exports.authnFailureDelayMs = 1000;
const staticResources = [
/^\/padbootstrap-[a-zA-Z0-9]+\.min\.js$/,
/^\/timeSliderBootstrap-[a-zA-Z0-9]+\.min\.js$/,
/^\/manifest.json$/
]
const checkAccess = async (req:any, res:any, next: Function) => { const checkAccess = async (req:any, res:any, next: Function) => {
const requireAdmin = req.path.toLowerCase().startsWith('/admin-auth'); const requireAdmin = req.path.toLowerCase().startsWith('/admin-auth');
for (const staticResource of staticResources) {
if (req.path.match(staticResource)) {
console.log(`Loading [${staticResource}] ${req.path}`);
return next()
}
}
// /////////////////////////////////////////////////////////////////////////////////////////////// // ///////////////////////////////////////////////////////////////////////////////////////////////
// Step 1: Check the preAuthorize hook for early permit/deny (permit is only allowed for non-admin // Step 1: Check the preAuthorize hook for early permit/deny (permit is only allowed for non-admin

View file

@ -30,7 +30,7 @@ const configuration: Configuration = {
if(account === undefined) { if(account === undefined) {
return undefined return undefined
} }
if (account.is_admin ) { if (account.is_admin) {
return { return {
accountId: id, accountId: id,
claims: () => ({ claims: () => ({

View file

@ -42,10 +42,6 @@ if (settings.dumpOnUncleanExit) {
const addProxyToAxios = (url: URL) => { const addProxyToAxios = (url: URL) => {
axios.defaults.proxy = { axios.defaults.proxy = {
host: url.hostname, host: url.hostname,
auth: {
username: url.username,
password: url.password,
},
port: Number(url.port), port: Number(url.port),
protocol: url.protocol, protocol: url.protocol,
} }

View file

@ -32,90 +32,89 @@
"dependencies": { "dependencies": {
"@etherpad/express-session": "^1.18.4", "@etherpad/express-session": "^1.18.4",
"async": "^3.2.6", "async": "^3.2.6",
"axios": "^1.8.4", "axios": "^1.7.7",
"cookie-parser": "^1.4.7", "cookie-parser": "^1.4.7",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"cross-spawn": "^7.0.6", "cross-spawn": "^7.0.3",
"ejs": "^3.1.10", "ejs": "^3.1.10",
"esbuild": "^0.25.2", "esbuild": "^0.24.0",
"express": "4.21.2", "express": "4.21.1",
"express-rate-limit": "^7.5.0", "express-rate-limit": "^7.4.1",
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"find-root": "1.1.0", "find-root": "1.1.0",
"formidable": "^3.5.2", "formidable": "^3.5.2",
"http-errors": "^2.0.0", "http-errors": "^2.0.0",
"jose": "^5.10.0", "jose": "^5.9.6",
"js-cookie": "^3.0.5", "js-cookie": "^3.0.5",
"jsdom": "^26.0.0", "jsdom": "^25.0.1",
"jsonminify": "0.4.2", "jsonminify": "0.4.2",
"jsonwebtoken": "^9.0.2", "jsonwebtoken": "^9.0.2",
"jwt-decode": "^4.0.0",
"languages4translatewiki": "0.1.3", "languages4translatewiki": "0.1.3",
"live-plugin-manager": "^1.0.0", "live-plugin-manager": "^1.0.0",
"lodash.clonedeep": "4.5.0", "lodash.clonedeep": "4.5.0",
"log4js": "^6.9.1", "log4js": "^6.9.1",
"lru-cache": "^11.1.0", "lru-cache": "^11.0.1",
"measured-core": "^2.0.0", "measured-core": "^2.0.0",
"mime-types": "^3.0.1", "mime-types": "^2.1.35",
"oidc-provider": "^8.8.1", "oidc-provider": "^8.5.2",
"openapi-backend": "^5.11.1", "openapi-backend": "^5.11.0",
"proxy-addr": "^2.0.7", "proxy-addr": "^2.0.7",
"rate-limiter-flexible": "^7.0.0", "rate-limiter-flexible": "^5.0.4",
"rehype": "^13.0.2", "rehype": "^13.0.2",
"rehype-minify-whitespace": "^6.0.2", "rehype-minify-whitespace": "^6.0.2",
"resolve": "1.22.10", "resolve": "1.22.8",
"rusty-store-kv": "^1.3.1", "rusty-store-kv": "^1.3.1",
"security": "1.0.0", "security": "1.0.0",
"semver": "^7.7.1", "semver": "^7.6.3",
"socket.io": "^4.8.1", "socket.io": "^4.8.0",
"socket.io-client": "^4.8.1", "socket.io-client": "^4.8.0",
"superagent": "10.2.0", "superagent": "10.1.1",
"swagger-ui-express": "^5.0.1", "swagger-ui-express": "^5.0.1",
"tinycon": "0.6.8", "tinycon": "0.6.8",
"tsx": "4.19.3", "tsx": "4.19.1",
"ueberdb2": "^5.0.6", "ueberdb2": "^5.0.6",
"underscore": "1.13.7", "underscore": "1.13.7",
"unorm": "1.6.0", "unorm": "1.6.0",
"wtfnode": "^0.10.0" "wtfnode": "^0.9.3"
}, },
"bin": { "bin": {
"etherpad-healthcheck": "../bin/etherpad-healthcheck", "etherpad-healthcheck": "../bin/etherpad-healthcheck",
"etherpad-lite": "node/server.ts" "etherpad-lite": "node/server.ts"
}, },
"devDependencies": { "devDependencies": {
"@playwright/test": "^1.52.0", "@playwright/test": "^1.48.1",
"@types/async": "^3.2.24", "@types/async": "^3.2.24",
"@types/express": "^4.17.21", "@types/express": "4.17.21",
"@types/formidable": "^3.4.5", "@types/formidable": "^3.4.5",
"@types/http-errors": "^2.0.4", "@types/http-errors": "^2.0.4",
"@types/jquery": "^3.5.32", "@types/jquery": "^3.5.32",
"@types/js-cookie": "^3.0.6", "@types/js-cookie": "^3.0.6",
"@types/jsdom": "^21.1.7", "@types/jsdom": "^21.1.7",
"@types/jsonwebtoken": "^9.0.9", "@types/jsonwebtoken": "^9.0.7",
"@types/mime-types": "^2.1.4", "@types/mime-types": "^2.1.4",
"@types/mocha": "^10.0.9", "@types/mocha": "^10.0.9",
"@types/node": "^22.14.1", "@types/node": "^22.7.9",
"@types/oidc-provider": "^8.8.1", "@types/oidc-provider": "^8.5.2",
"@types/semver": "^7.7.0", "@types/semver": "^7.5.8",
"@types/sinon": "^17.0.3", "@types/sinon": "^17.0.3",
"@types/supertest": "^6.0.2", "@types/supertest": "^6.0.2",
"@types/swagger-ui-express": "^4.1.8", "@types/swagger-ui-express": "^4.1.6",
"@types/underscore": "^1.13.0", "@types/underscore": "^1.13.0",
"@types/whatwg-mimetype": "^3.0.2", "@types/whatwg-mimetype": "^3.0.2",
"chokidar": "^4.0.3", "chokidar": "^4.0.1",
"eslint": "^9.23.0", "eslint": "^9.13.0",
"eslint-config-etherpad": "^4.0.4", "eslint-config-etherpad": "^4.0.4",
"etherpad-cli-client": "^3.0.2", "etherpad-cli-client": "^3.0.2",
"mocha": "^11.1.0", "mocha": "^10.7.3",
"mocha-froth": "^0.2.10", "mocha-froth": "^0.2.10",
"nodeify": "^1.0.1", "nodeify": "^1.0.1",
"openapi-schema-validation": "^0.4.2", "openapi-schema-validation": "^0.4.2",
"set-cookie-parser": "^2.7.1", "set-cookie-parser": "^2.7.1",
"sinon": "^20.0.0", "sinon": "^19.0.2",
"split-grid": "^1.0.11", "split-grid": "^1.0.11",
"supertest": "^7.1.0", "supertest": "^7.0.0",
"typescript": "^5.8.2", "typescript": "^5.6.3",
"vitest": "^3.1.1" "vitest": "^2.1.3"
}, },
"engines": { "engines": {
"node": ">=18.18.2", "node": ">=18.18.2",
@ -142,6 +141,6 @@
"debug:socketio": "cross-env DEBUG=socket.io* node --require tsx/cjs node/server.ts", "debug:socketio": "cross-env DEBUG=socket.io* node --require tsx/cjs node/server.ts",
"test:vitest": "vitest" "test:vitest": "vitest"
}, },
"version": "2.3.0", "version": "2.2.6",
"license": "Apache-2.0" "license": "Apache-2.0"
} }

View file

@ -3475,7 +3475,7 @@ function Ace2Inner(editorInfo, cssManagers) {
// use that for displaying the side div line number inline with the first line // use that for displaying the side div line number inline with the first line
// of content -- This is used in ep_headings, ep_font_size etc. where the line // of content -- This is used in ep_headings, ep_font_size etc. where the line
// height is increased. // height is increased.
const elementStyle = window.getComputedStyle(docLine.firstElementChild); const elementStyle = window.getComputedStyle(docLine.firstChild);
const lineHeight = parseInt(elementStyle.getPropertyValue('line-height')); const lineHeight = parseInt(elementStyle.getPropertyValue('line-height'));
const marginBottom = parseInt(elementStyle.getPropertyValue('margin-bottom')); const marginBottom = parseInt(elementStyle.getPropertyValue('margin-bottom'));
lineHeights.push(lineHeight + marginBottom); lineHeights.push(lineHeight + marginBottom);

View file

@ -186,7 +186,7 @@ const paduserlist = (() => {
const tr = input.closest('tr'); const tr = input.closest('tr');
if (tr.length > 0) { if (tr.length > 0) {
const index = tr.parent().children().index(tr); const index = tr.parent().children().index(tr);
if (index >= 0 && rowsPresent.length > index) { if (index >= 0) {
const userId = rowsPresent[index].data.id; const userId = rowsPresent[index].data.id;
rowManagerMakeNameEditor($(this), userId); rowManagerMakeNameEditor($(this), userId);
} }

View file

@ -162,18 +162,23 @@ export const install = async (pluginName: string, cb:Function|null = null) => {
export let availablePlugins:MapArrayType<PackageInfo>|null = null; export let availablePlugins:MapArrayType<PackageInfo>|null = null;
let cacheTimestamp = 0; let cacheTimestamp = 0;
export const getAvailablePlugins = async (maxCacheAge: number | false) => { export const getAvailablePlugins = (maxCacheAge: number|false) => {
const nowTimestamp = Math.round(Date.now() / 1000); const nowTimestamp = Math.round(Date.now() / 1000);
return new Promise<MapArrayType<PackageInfo>>(async (resolve, reject) => {
// check cache age before making any request // check cache age before making any request
if (availablePlugins && maxCacheAge && (nowTimestamp - cacheTimestamp) <= maxCacheAge) { if (availablePlugins && maxCacheAge && (nowTimestamp - cacheTimestamp) <= maxCacheAge) {
return availablePlugins; return resolve(availablePlugins);
} }
const pluginsLoaded: AxiosResponse<MapArrayType<PackageInfo>> = await axios.get(`${settings.updateServer}/plugins.json`, {headers}) await axios.get(`${settings.updateServer}/plugins.json`, {headers})
.then((pluginsLoaded:AxiosResponse<MapArrayType<PackageInfo>>) => {
availablePlugins = pluginsLoaded.data; availablePlugins = pluginsLoaded.data;
cacheTimestamp = nowTimestamp; cacheTimestamp = nowTimestamp;
return availablePlugins; resolve(availablePlugins);
})
.catch(async (err) => reject(err));
});
}; };
@ -206,7 +211,4 @@ export const search = (searchTerm: string, maxCacheAge: number) => getAvailableP
return res; return res;
} }
).catch((err)=>{ );
logger.error(`Error searching plugins: ${err}`);
return {} as MapArrayType<PackageInfo>;
});

View file

@ -24,7 +24,7 @@ const connect = (etherpadBaseUrl, namespace = '/', options = {}) => {
let socketOptions = { let socketOptions = {
path: socketioUrl.pathname, path: socketioUrl.pathname,
upgrade: true, upgrade: true,
transports: ['polling', 'websocket'], transports: ['websocket'],
}; };
socketOptions = Object.assign(options, socketOptions); socketOptions = Object.assign(options, socketOptions);

View file

@ -538,7 +538,7 @@ export class Html10n {
for (let i=0, n=langs.length; i < n; i++) { for (let i=0, n=langs.length; i < n; i++) {
lang = langs[i] lang = langs[i]
if(!lang) continue; if(!lang) continue;
if(!langs.includes(lang)) {// uh, we don't have this lang availbable.. if(!(lang in langs)) {// uh, we don't have this lang availbable..
// then check for related langs // then check for related langs
if(~lang.indexOf('-') != -1) { if(~lang.indexOf('-') != -1) {
lang = lang.split('-')[0]; lang = lang.split('-')[0];

View file

@ -11,7 +11,7 @@
}, },
"devDependencies": { "devDependencies": {
"ep_etherpad-lite": "workspace:../src", "ep_etherpad-lite": "workspace:../src",
"typescript": "^5.8.2", "typescript": "^5.6.3",
"vite": "^6.3.2" "vite": "^5.4.10"
} }
} }

2
var/js/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
*.js
*.map