mirror of
https://github.com/ether/etherpad-lite.git
synced 2026-01-22 18:28:57 +00:00
Merge branch 'develop'
This commit is contained in:
commit
e1161e5eec
56 changed files with 2680 additions and 1627 deletions
16
.github/workflows/backend-tests.yml
vendored
16
.github/workflows/backend-tests.yml
vendored
|
|
@ -31,8 +31,8 @@ jobs:
|
|||
steps:
|
||||
-
|
||||
name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
- uses: actions/cache@v4
|
||||
uses: actions/checkout@v6
|
||||
- uses: actions/cache@v5
|
||||
name: Setup gnpm cache
|
||||
if: always()
|
||||
with:
|
||||
|
|
@ -87,8 +87,8 @@ jobs:
|
|||
steps:
|
||||
-
|
||||
name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
- uses: actions/cache@v4
|
||||
uses: actions/checkout@v6
|
||||
- uses: actions/cache@v5
|
||||
name: Setup pnpm cache
|
||||
if: always()
|
||||
with:
|
||||
|
|
@ -156,8 +156,8 @@ jobs:
|
|||
steps:
|
||||
-
|
||||
name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
- uses: actions/cache@v4
|
||||
uses: actions/checkout@v6
|
||||
- uses: actions/cache@v5
|
||||
name: Setup pnpm cache
|
||||
if: always()
|
||||
with:
|
||||
|
|
@ -209,8 +209,8 @@ jobs:
|
|||
steps:
|
||||
-
|
||||
name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
- uses: actions/cache@v4
|
||||
uses: actions/checkout@v6
|
||||
- uses: actions/cache@v5
|
||||
name: Setup pnpm cache
|
||||
if: always()
|
||||
with:
|
||||
|
|
|
|||
4
.github/workflows/build-and-deploy-docs.yml
vendored
4
.github/workflows/build-and-deploy-docs.yml
vendored
|
|
@ -32,8 +32,8 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v5
|
||||
- uses: actions/cache@v4
|
||||
uses: actions/checkout@v6
|
||||
- uses: actions/cache@v5
|
||||
name: Setup gnpm cache
|
||||
if: always()
|
||||
with:
|
||||
|
|
|
|||
2
.github/workflows/codeql-analysis.yml
vendored
2
.github/workflows/codeql-analysis.yml
vendored
|
|
@ -25,7 +25,7 @@ jobs:
|
|||
steps:
|
||||
-
|
||||
name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
# We must fetch at least the immediate parents so that if this is
|
||||
# a pull request then we can checkout the head.
|
||||
|
|
|
|||
2
.github/workflows/dependency-review.yml
vendored
2
.github/workflows/dependency-review.yml
vendored
|
|
@ -15,6 +15,6 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: 'Checkout Repository'
|
||||
uses: actions/checkout@v5
|
||||
uses: actions/checkout@v6
|
||||
- name: 'Dependency Review'
|
||||
uses: actions/dependency-review-action@v4
|
||||
|
|
|
|||
6
.github/workflows/docker.yml
vendored
6
.github/workflows/docker.yml
vendored
|
|
@ -23,7 +23,7 @@ jobs:
|
|||
steps:
|
||||
-
|
||||
name: Check out
|
||||
uses: actions/checkout@v5
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: etherpad
|
||||
|
||||
|
|
@ -44,7 +44,7 @@ jobs:
|
|||
tags: ${{ env.TEST_TAG }}
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
- uses: actions/cache@v4
|
||||
- uses: actions/cache@v5
|
||||
name: Setup gnpm cache
|
||||
if: always()
|
||||
with:
|
||||
|
|
@ -120,7 +120,7 @@ jobs:
|
|||
enable-url-completion: true
|
||||
- name: Check out
|
||||
if: github.event_name == 'push' && github.ref == 'refs/heads/develop'
|
||||
uses: actions/checkout@v5
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: ether-charts
|
||||
repository: ether/ether-charts
|
||||
|
|
|
|||
8
.github/workflows/frontend-admin-tests.yml
vendored
8
.github/workflows/frontend-admin-tests.yml
vendored
|
|
@ -30,8 +30,8 @@ jobs:
|
|||
printf %s\\n '::set-output name=tunnel_id::${{ github.run_id }}-${{ github.run_number }}-${{ github.job }}-node${{ matrix.node }}'
|
||||
-
|
||||
name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
- uses: actions/cache@v4
|
||||
uses: actions/checkout@v6
|
||||
- uses: actions/cache@v5
|
||||
name: Setup gnpm cache
|
||||
if: always()
|
||||
with:
|
||||
|
|
@ -48,7 +48,7 @@ jobs:
|
|||
with:
|
||||
version: 0.0.12
|
||||
- name: Cache playwright binaries
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v5
|
||||
id: playwright-cache
|
||||
with:
|
||||
path: |
|
||||
|
|
@ -141,7 +141,7 @@ jobs:
|
|||
gnpm exec playwright install --runtimeVersion="${{ matrix.node }}"
|
||||
gnpm exec playwright install-deps --runtimeVersion="${{ matrix.node }}"
|
||||
gnpm run test-admin --runtimeVersion="${{ matrix.node }}"
|
||||
- uses: actions/upload-artifact@v5
|
||||
- uses: actions/upload-artifact@v6
|
||||
if: always()
|
||||
with:
|
||||
name: playwright-report-${{ matrix.node }}
|
||||
|
|
|
|||
18
.github/workflows/frontend-tests.yml
vendored
18
.github/workflows/frontend-tests.yml
vendored
|
|
@ -24,8 +24,8 @@ jobs:
|
|||
printf %s\\n '::set-output name=tunnel_id::${{ github.run_id }}-${{ github.run_number }}-${{ github.job }}'
|
||||
-
|
||||
name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
- uses: actions/cache@v4
|
||||
uses: actions/checkout@v6
|
||||
- uses: actions/cache@v5
|
||||
name: Setup gnpm cache
|
||||
if: always()
|
||||
with:
|
||||
|
|
@ -69,7 +69,7 @@ jobs:
|
|||
cd src
|
||||
gnpm exec playwright install chromium --with-deps
|
||||
gnpm run test-ui --project=chromium
|
||||
- uses: actions/upload-artifact@v5
|
||||
- uses: actions/upload-artifact@v6
|
||||
if: always()
|
||||
with:
|
||||
name: playwright-report-${{ matrix.node }}-chrome
|
||||
|
|
@ -87,8 +87,8 @@ jobs:
|
|||
printf %s\\n '::set-output name=name::${{ github.workflow }} - ${{ github.job }}'
|
||||
printf %s\\n '::set-output name=tunnel_id::${{ github.run_id }}-${{ github.run_number }}-${{ github.job }}'
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
- uses: actions/cache@v4
|
||||
uses: actions/checkout@v6
|
||||
- uses: actions/cache@v5
|
||||
name: Setup gnpm cache
|
||||
if: always()
|
||||
with:
|
||||
|
|
@ -129,7 +129,7 @@ jobs:
|
|||
cd src
|
||||
gnpm exec playwright install firefox --with-deps
|
||||
gnpm run test-ui --project=firefox
|
||||
- uses: actions/upload-artifact@v5
|
||||
- uses: actions/upload-artifact@v6
|
||||
if: always()
|
||||
with:
|
||||
name: playwright-report-${{ matrix.node }}-firefox
|
||||
|
|
@ -149,8 +149,8 @@ jobs:
|
|||
printf %s\\n '::set-output name=tunnel_id::${{ github.run_id }}-${{ github.run_number }}-${{ github.job }}'
|
||||
-
|
||||
name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
- uses: actions/cache@v4
|
||||
uses: actions/checkout@v6
|
||||
- uses: actions/cache@v5
|
||||
name: Setup gnpm cache
|
||||
if: always()
|
||||
with:
|
||||
|
|
@ -193,7 +193,7 @@ jobs:
|
|||
cd src
|
||||
gnpm exec playwright install webkit --with-deps
|
||||
gnpm run test-ui --project=webkit || true
|
||||
- uses: actions/upload-artifact@v5
|
||||
- uses: actions/upload-artifact@v6
|
||||
if: always()
|
||||
with:
|
||||
name: playwright-report-${{ matrix.node }}-webkit
|
||||
|
|
|
|||
4
.github/workflows/handleRelease.yml
vendored
4
.github/workflows/handleRelease.yml
vendored
|
|
@ -27,8 +27,8 @@ jobs:
|
|||
steps:
|
||||
-
|
||||
name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
- uses: actions/cache@v4
|
||||
uses: actions/checkout@v6
|
||||
- uses: actions/cache@v5
|
||||
name: Setup gnpm cache
|
||||
if: always()
|
||||
with:
|
||||
|
|
|
|||
12
.github/workflows/load-test.yml
vendored
12
.github/workflows/load-test.yml
vendored
|
|
@ -28,8 +28,8 @@ jobs:
|
|||
steps:
|
||||
-
|
||||
name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
- uses: actions/cache@v4
|
||||
uses: actions/checkout@v6
|
||||
- uses: actions/cache@v5
|
||||
name: Setup gnpm cache
|
||||
if: always()
|
||||
with:
|
||||
|
|
@ -71,8 +71,8 @@ jobs:
|
|||
steps:
|
||||
-
|
||||
name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
- uses: actions/cache@v4
|
||||
uses: actions/checkout@v6
|
||||
- uses: actions/cache@v5
|
||||
name: Setup gnpm cache
|
||||
if: always()
|
||||
with:
|
||||
|
|
@ -139,8 +139,8 @@ jobs:
|
|||
steps:
|
||||
-
|
||||
name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
- uses: actions/cache@v4
|
||||
uses: actions/checkout@v6
|
||||
- uses: actions/cache@v5
|
||||
name: Setup gnpm cache
|
||||
if: always()
|
||||
with:
|
||||
|
|
|
|||
4
.github/workflows/perform-type-check.yml
vendored
4
.github/workflows/perform-type-check.yml
vendored
|
|
@ -24,8 +24,8 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
- uses: actions/cache@v4
|
||||
uses: actions/checkout@v6
|
||||
- uses: actions/cache@v5
|
||||
name: Setup gnpm cache
|
||||
if: always()
|
||||
with:
|
||||
|
|
|
|||
4
.github/workflows/rate-limit.yml
vendored
4
.github/workflows/rate-limit.yml
vendored
|
|
@ -27,8 +27,8 @@ jobs:
|
|||
steps:
|
||||
-
|
||||
name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
- uses: actions/cache@v4
|
||||
uses: actions/checkout@v6
|
||||
- uses: actions/cache@v5
|
||||
name: Setup gnpm cache
|
||||
if: always()
|
||||
with:
|
||||
|
|
|
|||
6
.github/workflows/release.yml
vendored
6
.github/workflows/release.yml
vendored
|
|
@ -22,7 +22,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
repository: ether/etherpad-lite
|
||||
path: etherpad
|
||||
|
|
@ -42,12 +42,12 @@ jobs:
|
|||
git checkout develop
|
||||
git reset --hard origin/develop
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
repository: ether/ether.github.com
|
||||
path: ether.github.com
|
||||
token: '${{ secrets.ETHER_RELEASE_TOKEN }}'
|
||||
- uses: actions/cache@v4
|
||||
- uses: actions/cache@v5
|
||||
name: Setup gnpm cache
|
||||
if: always()
|
||||
with:
|
||||
|
|
|
|||
4
.github/workflows/releaseEtherpad.yml
vendored
4
.github/workflows/releaseEtherpad.yml
vendored
|
|
@ -12,12 +12,12 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
uses: actions/checkout@v6
|
||||
- name: Get pnpm store directory
|
||||
shell: bash
|
||||
run: |
|
||||
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
|
||||
- uses: actions/cache@v4
|
||||
- uses: actions/cache@v5
|
||||
name: Setup pnpm cache
|
||||
if: always()
|
||||
with:
|
||||
|
|
|
|||
|
|
@ -31,10 +31,10 @@ jobs:
|
|||
steps:
|
||||
-
|
||||
name: Check out latest release
|
||||
uses: actions/checkout@v5
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: develop #FIXME change to master when doing release
|
||||
- uses: actions/cache@v4
|
||||
- uses: actions/cache@v5
|
||||
name: Setup gnpm cache
|
||||
if: always()
|
||||
with:
|
||||
|
|
@ -90,7 +90,7 @@ jobs:
|
|||
-
|
||||
name: Install all dependencies and symlink for ep_etherpad-lite
|
||||
run: gnpm install --frozen-lockfile --runtimeVersion="${{ matrix.node }}"
|
||||
# Because actions/checkout@v5 is called with "ref: master" and without
|
||||
# Because actions/checkout@v6 is called with "ref: master" and without
|
||||
# "fetch-depth: 0", the local clone does not have the ${GITHUB_SHA}
|
||||
# commit. Fetch ${GITHUB_REF} to get the ${GITHUB_SHA} commit. Note that a
|
||||
# plain "git fetch" only fetches "normal" references (refs/heads/* and
|
||||
|
|
|
|||
|
|
@ -1,3 +1,12 @@
|
|||
# 2.6.0
|
||||
|
||||
### Notable enhancements and fixes
|
||||
|
||||
- Added native option to transfer your Etherpad session between browsers. If you use multiple browsers or different PC for Etherpad they are different sessions. Meaning typing on one PC and then switching to another one in the same pad will result in different authorship colors. With this new feature you can now transfer your session to another browser or PC. To do so, open the home page and click on the wheel icon in the top right corner. After that click through the first dialog prompting you to copy a code to your clipboard. On your second browser open the same dialog and switch to "Receive Session" tab. There you can paste the code you copied before and click on "Receive Session". After that your session is transferred, and you can continue editing with the same authorship color as before. Just be aware that you can't have two active sessions at once in a pad.
|
||||
- Updated to oidc provider v2.6.0 after resolving compatibility issues.
|
||||
|
||||
🎉 For all the people celebrating: Have a happy and awesome new year! 🎉 There is something big on the horizon for Etherpad in 2026. Stay tuned!
|
||||
|
||||
# 2.5.3
|
||||
|
||||
### Notable enhancements and fixes
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "admin",
|
||||
"private": true,
|
||||
"version": "2.5.3",
|
||||
"version": "2.6.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
|
|
@ -16,31 +16,31 @@
|
|||
"devDependencies": {
|
||||
"@radix-ui/react-dialog": "^1.1.15",
|
||||
"@radix-ui/react-toast": "^1.2.15",
|
||||
"@types/react": "^19.2.2",
|
||||
"@types/react-dom": "^19.2.2",
|
||||
"@typescript-eslint/eslint-plugin": "^8.46.2",
|
||||
"@typescript-eslint/parser": "^8.46.2",
|
||||
"@vitejs/plugin-react": "^5.1.0",
|
||||
"@types/react": "^19.2.7",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"@typescript-eslint/eslint-plugin": "^8.50.1",
|
||||
"@typescript-eslint/parser": "^8.50.1",
|
||||
"@vitejs/plugin-react": "^5.1.2",
|
||||
"babel-plugin-react-compiler": "19.1.0-rc.3",
|
||||
"eslint": "^9.38.0",
|
||||
"eslint": "^9.39.2",
|
||||
"eslint-plugin-react-hooks": "^7.0.1",
|
||||
"eslint-plugin-react-refresh": "^0.4.24",
|
||||
"i18next": "^25.6.0",
|
||||
"eslint-plugin-react-refresh": "^0.4.26",
|
||||
"i18next": "^25.7.3",
|
||||
"i18next-browser-languagedetector": "^8.2.0",
|
||||
"lucide-react": "^0.552.0",
|
||||
"react": "^19.2.0",
|
||||
"react-dom": "^19.2.0",
|
||||
"react-hook-form": "^7.65.0",
|
||||
"react-i18next": "^16.2.3",
|
||||
"react-router-dom": "^7.9.5",
|
||||
"socket.io-client": "^4.8.1",
|
||||
"lucide-react": "^0.562.0",
|
||||
"react": "^19.2.3",
|
||||
"react-dom": "^19.2.3",
|
||||
"react-hook-form": "^7.69.0",
|
||||
"react-i18next": "^16.5.0",
|
||||
"react-router-dom": "^7.11.0",
|
||||
"socket.io-client": "^4.8.3",
|
||||
"typescript": "^5.9.3",
|
||||
"vite": "npm:rolldown-vite@latest",
|
||||
"vite": "npm:rolldown-vite@7.2.10",
|
||||
"vite-plugin-babel": "^1.3.2",
|
||||
"vite-plugin-static-copy": "^3.1.4",
|
||||
"zustand": "^5.0.8"
|
||||
"zustand": "^5.0.9"
|
||||
},
|
||||
"overrides": {
|
||||
"vite": "npm:rolldown-vite@latest"
|
||||
"vite": "npm:rolldown-vite@7.2.10"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ export const SettingsPage = ()=>{
|
|||
settingsSocket!.emit('saveSettings', settings!);
|
||||
useStore.getState().setToastState({
|
||||
open: true,
|
||||
title: "Succesfully saved settings",
|
||||
title: "Successfully saved settings",
|
||||
success: true
|
||||
})
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "bin",
|
||||
"version": "2.5.3",
|
||||
"version": "2.6.0",
|
||||
"description": "",
|
||||
"main": "checkAllPads.js",
|
||||
"directories": {
|
||||
|
|
@ -11,11 +11,11 @@
|
|||
"ep_etherpad-lite": "workspace:../src",
|
||||
"log4js": "^6.9.1",
|
||||
"semver": "^7.7.3",
|
||||
"tsx": "^4.20.6",
|
||||
"ueberdb2": "^5.0.22"
|
||||
"tsx": "^4.21.0",
|
||||
"ueberdb2": "^5.0.23"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^24.9.2",
|
||||
"@types/node": "^25.0.3",
|
||||
"@types/semver": "^7.7.1",
|
||||
"typescript": "^5.9.3"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"devDependencies": {
|
||||
"vitepress": "^2.0.0-alpha.12"
|
||||
"vitepress": "^2.0.0-alpha.15"
|
||||
},
|
||||
"scripts": {
|
||||
"docs:dev": "vitepress dev",
|
||||
|
|
@ -11,6 +11,6 @@
|
|||
"search-insights": "^2.17.3"
|
||||
},
|
||||
"overrides": {
|
||||
"vite": "npm:rolldown-vite@latest"
|
||||
"vite": "npm:rolldown-vite@7.2.10"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,6 +49,6 @@
|
|||
"url": "https://github.com/ether/etherpad-lite.git"
|
||||
},
|
||||
"engineStrict": true,
|
||||
"version": "2.5.3",
|
||||
"version": "2.6.0",
|
||||
"license": "Apache-2.0"
|
||||
}
|
||||
|
|
|
|||
3449
pnpm-lock.yaml
generated
3449
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load diff
|
|
@ -58,6 +58,12 @@
|
|||
"expressCreateServer": "ep_etherpad-lite/node/hooks/express/padurlsanitize"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "transferToken",
|
||||
"hooks": {
|
||||
"expressCreateServer": "ep_etherpad-lite/node/hooks/express/tokenTransfer"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "pwa",
|
||||
"hooks": {
|
||||
|
|
|
|||
|
|
@ -49,6 +49,18 @@
|
|||
"admin_settings.current_save.value": "حفظ الإعدادات",
|
||||
"admin_settings.page-title": "الإعدادات - Etherpad",
|
||||
"index.newPad": "باد جديد",
|
||||
"index.settings": "إعدادات",
|
||||
"index.transferSessionTitle": "جلسة النقل",
|
||||
"index.receiveSessionTitle": "تلقي الجلسة",
|
||||
"index.receiveSessionDescription": "هنا يمكنك استقبال جلسة Etherpad من متصفح أو جهاز آخر. مع ذلك، يُرجى العلم أن هذا سيؤدي إلى حذف جلستك الحالية، إن وُجدت.",
|
||||
"index.transferSession": "1. جلسة النقل",
|
||||
"index.transferSessionNow": "نقل الجلسة الآن",
|
||||
"index.copyLink": "2. نسخ الرابط",
|
||||
"index.copyLinkDescription": "انقر على الزر أدناه لنسخ الرابط إلى الحافظة الخاصة بك.",
|
||||
"index.copyLinkButton": "نسخ الرابط إلى الحافظة",
|
||||
"index.transferToSystem": "3. نسخ الجلسة إلى النظام الجديد",
|
||||
"index.transferToSystemDescription": "افتح الرابط المنسوخ في المتصفح أو الجهاز المستهدف لنقل جلستك.",
|
||||
"index.transferSessionDescription": "انقل جلستك الحالية إلى المتصفح أو الجهاز بالنقر على الزر أدناه. سيؤدي هذا إلى نسخ رابط لصفحة ستنقل جلستك عند فتحها في المتصفح أو الجهاز المستهدف.",
|
||||
"index.createOpenPad": "افتح الوسادة حسب الاسم",
|
||||
"index.openPad": "افتح باد موجودة بالاسم:",
|
||||
"index.recentPads": "الوسادات الأخيرة",
|
||||
|
|
|
|||
|
|
@ -49,8 +49,27 @@
|
|||
"admin_settings.current_save.value": "Uložit nastavení",
|
||||
"admin_settings.page-title": "Nastavení - Etherpad",
|
||||
"index.newPad": "Založ nový Pad",
|
||||
"index.createOpenPad": "nebo vytvoř/otevři Pad s názvem:",
|
||||
"index.settings": "Nastavení",
|
||||
"index.transferSessionTitle": "relace Přenosu",
|
||||
"index.receiveSessionTitle": "Přijmout relaci",
|
||||
"index.receiveSessionDescription": "Zde můžete přijímat relaci Etherpad z jiného prohlížeče nebo zařízení. Upozorňujeme však, že tím se smaže vaše aktuální relace, pokud nějaká existuje.",
|
||||
"index.transferSession": "1. Přenos relace",
|
||||
"index.transferSessionNow": "Přenést relaci nyní",
|
||||
"index.copyLink": "2. Zkopírovat odkaz",
|
||||
"index.copyLinkDescription": "Kliknutím na tlačítko níže zkopírujete odkaz do schránky.",
|
||||
"index.copyLinkButton": "Kopírovat odkaz do schránky",
|
||||
"index.transferToSystem": "3. Zkopírujte relaci do nového systému",
|
||||
"index.transferToSystemDescription": "Otevřete zkopírovaný odkaz v cílovém prohlížeči nebo zařízení a přeneste svou relaci.",
|
||||
"index.transferSessionDescription": "Přeneste svou aktuální relaci do prohlížeče nebo zařízení kliknutím na tlačítko níže. Tím se zkopíruje odkaz na stránku, která přenese vaši relaci po otevření v cílovém prohlížeči nebo zařízení.",
|
||||
"index.createOpenPad": "Otevřít pad podle jména",
|
||||
"index.openPad": "otevřít existující Pad se jménem:",
|
||||
"index.recentPads": "Poslední Pady",
|
||||
"index.recentPadsEmpty": "Nebyly nalezeny žádné nedávné pady.",
|
||||
"index.generateNewPad": "Generovat náhodný název padu",
|
||||
"index.labelPad": "Název Padu (volitelné)",
|
||||
"index.placeholderPadEnter": "Zadejte prosím název padu...",
|
||||
"index.createAndShareDocuments": "Vytvářejte a sdílejte dokumenty v reálném čase",
|
||||
"index.createAndShareDocumentsDescription": "Etherpad umožňuje kolaborativní úpravu dokumentů v reálném čase, podobně jako živý multiplayerový editor, který běží ve vašem prohlížeči.",
|
||||
"pad.toolbar.bold.title": "Tučný text (Ctrl-B)",
|
||||
"pad.toolbar.italic.title": "Kurzíva (Ctrl-I)",
|
||||
"pad.toolbar.underline.title": "Podtržené písmo (Ctrl-U)",
|
||||
|
|
@ -67,6 +86,7 @@
|
|||
"pad.toolbar.savedRevision.title": "Uložit revizi",
|
||||
"pad.toolbar.settings.title": "Nastavení",
|
||||
"pad.toolbar.embed.title": "Sdílet a umístit tento Pad",
|
||||
"pad.toolbar.home.title": "Zpět domů",
|
||||
"pad.toolbar.showusers.title": "Zobrazit uživatele u tohoto Padu",
|
||||
"pad.colorpicker.save": "Uložit",
|
||||
"pad.colorpicker.cancel": "Zrušit",
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
"@metadata": {
|
||||
"authors": [
|
||||
"Bjarncraft",
|
||||
"Brettchenweber",
|
||||
"Dom",
|
||||
"Justman10000",
|
||||
"Killarnee",
|
||||
|
|
@ -53,6 +54,18 @@
|
|||
"admin_settings.current_save.value": "Einstellungen speichern",
|
||||
"admin_settings.page-title": "Einstellungen - Etherpad",
|
||||
"index.newPad": "Neues Pad",
|
||||
"index.settings": "Einstellungen",
|
||||
"index.transferSessionTitle": "Sitzung übertragen",
|
||||
"index.receiveSessionTitle": "Sitzung empfangen",
|
||||
"index.receiveSessionDescription": "Hier kannst du eine Etherpad-Sitzung aus einem anderen Browser oder Gerät empfangen. Bedenke allerdings, dass dadurch deine aktuelle Sitzung, falls vorhanden, gelöscht wird.",
|
||||
"index.transferSession": "1. Sitzung übertragen",
|
||||
"index.transferSessionNow": "Jetzt übertragen",
|
||||
"index.copyLink": "2. Link kopieren",
|
||||
"index.copyLinkDescription": "Klicke auf den untenstehenden Button, um den Übertragungscode in deine Zwischenablage zu kopieren.",
|
||||
"index.copyLinkButton": "Übertragungscode kopieren",
|
||||
"index.transferToSystem": "3. Sitzung einfügen",
|
||||
"index.transferToSystemDescription": "Öffne den kopierten Link in dem neuen Browser oder Gerät, um deine aktuelle Etherpad-Sitzung zu übertragen.",
|
||||
"index.transferSessionDescription": "Übertrage deine aktuelle Etherpad-Sitzung zu einem anderen Browser oder Gerät, indem du den untenstehenden Button klickst. Dabei wird ein Link in deine Zwischenablage kopiert, den du im neuen Browser oder Gerät öffnen kannst, um deine Sitzung zu übertragen.",
|
||||
"index.createOpenPad": "Pad öffnen",
|
||||
"index.openPad": "Öffne ein vorhandenes Pad mit folgendem Namen:",
|
||||
"index.recentPads": "Zuletzt bearbeitete Pads",
|
||||
|
|
|
|||
|
|
@ -38,8 +38,27 @@
|
|||
"admin_settings.current_save.value": "Nastajenja składowaś",
|
||||
"admin_settings.page-title": "Nastajenja – Etherpad",
|
||||
"index.newPad": "Nowy zapisnik",
|
||||
"index.createOpenPad": "abo napóraj/wócyń zapisnik z mjenim:",
|
||||
"index.settings": "Nastajenja",
|
||||
"index.transferSessionTitle": "Pósejźenje pśenosowaś",
|
||||
"index.receiveSessionTitle": "Pósejźenje dostaś",
|
||||
"index.receiveSessionDescription": "How móžoš póseźenje Etherpad z drugego wobglědowaka abo rěda dostaś. Pšosym źiwaj na to, až to wašo aktualne pósejźenje wulašujo, jolic take eksistěrujo.",
|
||||
"index.transferSession": "1. Pósejźenje pśenosowaś",
|
||||
"index.transferSessionNow": "Pósejźenje něnto pśenosowaś",
|
||||
"index.copyLink": "2. Wótkaz kopěrowaś",
|
||||
"index.copyLinkDescription": "Klikni na slědujucy tłocašk, aby wótkaz do mjazywótkłada kopěrował.",
|
||||
"index.copyLinkButton": "Wótkaz do mjazywótkłada kopěrowaś",
|
||||
"index.transferToSystem": "3. Pósejźenje do nowego systema kopěrowaś",
|
||||
"index.transferToSystemDescription": "Wócyń kopěrowany wótkaz w celowem wobglědowaku abo rěźe, aby swóje pósejźenje pśenosował.",
|
||||
"index.transferSessionDescription": "Klikni na slědujucy tłocašk, aby swójo aktualne pósejźenje do wobglědowaka abo rěda pśenosował. To buźo wótkaz do boka kopěrowaś, kótaryž buźo wašo pósejźenje pśenosowaś, gaž se w celowem wobglědowaku abo rěźe woócynja.",
|
||||
"index.createOpenPad": "Zapisnik pó mjenju wócyniś",
|
||||
"index.openPad": "wócyńśo eksistěrujucy Pad z mjenim:",
|
||||
"index.recentPads": "Nejnowše zapisniki",
|
||||
"index.recentPadsEmpty": "Žedne nejnowše zapisniki namakane.",
|
||||
"index.generateNewPad": "Pśipadne mě zapisnika generěrowaś",
|
||||
"index.labelPad": "Mě zapisnika (pó žycenju)",
|
||||
"index.placeholderPadEnter": "Pšosym zapódaj mě zapisnika…",
|
||||
"index.createAndShareDocuments": "Napóraj a źěl dokumenty w napšawdnem casu",
|
||||
"index.createAndShareDocumentsDescription": "Etherpad wam zmóžnja, dokumenty zgromadnje w napšawdnem casu wobźěłaś, kaž editor live multi-player, kótaryž we wašom wobglědowaku běžy.",
|
||||
"pad.toolbar.bold.title": "Tucny (Strg-B)",
|
||||
"pad.toolbar.italic.title": "Kursiwny (Strg-I)",
|
||||
"pad.toolbar.underline.title": "Pódšmarnuś (Strg-U)",
|
||||
|
|
@ -56,6 +75,7 @@
|
|||
"pad.toolbar.savedRevision.title": "Wersiju składowaś",
|
||||
"pad.toolbar.settings.title": "Nastajenja",
|
||||
"pad.toolbar.embed.title": "Toś ten zapisnik źěliś a zasajźiś",
|
||||
"pad.toolbar.home.title": "Slědk k startowemu bokoju",
|
||||
"pad.toolbar.showusers.title": "Wužywarje na toś tom zapisniku pokazaś",
|
||||
"pad.colorpicker.save": "Składowaś",
|
||||
"pad.colorpicker.cancel": "Pśetergnuś",
|
||||
|
|
|
|||
|
|
@ -34,6 +34,18 @@
|
|||
"admin_settings.page-title": "Settings - Etherpad",
|
||||
|
||||
"index.newPad": "New Pad",
|
||||
"index.settings": "Settings",
|
||||
"index.transferSessionTitle": "Transfer session",
|
||||
"index.receiveSessionTitle": "Receive session",
|
||||
"index.receiveSessionDescription": "Here you can receive an Etherpad session from another browser or device. Please note, however, that this will delete your current session, if any.",
|
||||
"index.transferSession": "1. Transfer session",
|
||||
"index.transferSessionNow": "Transfer session now",
|
||||
"index.copyLink": "2. Copy link",
|
||||
"index.copyLinkDescription": "Click on the button below to copy the link to your clipboard.",
|
||||
"index.copyLinkButton": "Copy link to clipboard",
|
||||
"index.transferToSystem": "3. Copy session to new system",
|
||||
"index.transferToSystemDescription": "Open the copied link in the target browser or device to transfer your session.",
|
||||
"index.transferSessionDescription": "Transfer your current session to browser or device by clicking the button below. This will copy a link to a page that will transfer your session when opened in the target browser or device.",
|
||||
"index.createOpenPad": "Open pad by name",
|
||||
"index.openPad": "open an existing Pad with the name:",
|
||||
"index.recentPads": "Recent Pads",
|
||||
|
|
|
|||
|
|
@ -67,6 +67,18 @@
|
|||
"admin_settings.current_save.value": "Enregistrer les paramètres",
|
||||
"admin_settings.page-title": "Paramètres — Etherpad",
|
||||
"index.newPad": "Nouveau bloc-notes",
|
||||
"index.settings": "Paramètres",
|
||||
"index.transferSessionTitle": "Session de transfert",
|
||||
"index.receiveSessionTitle": "Résumé de la séance",
|
||||
"index.receiveSessionDescription": "Vous pouvez ici recevoir une session Etherpad depuis un autre navigateur ou appareil. Veuillez noter toutefois que cela supprimera votre session actuelle, le cas échéant.",
|
||||
"index.transferSession": "1. Séance de transfert",
|
||||
"index.transferSessionNow": "Séance de transfert maintenant",
|
||||
"index.copyLink": "Copier le lien",
|
||||
"index.copyLinkDescription": "Cliquez sur le bouton ci-dessous pour copier le lien dans votre presse-papiers.",
|
||||
"index.copyLinkButton": "Copier le lien dans le presse-papiers",
|
||||
"index.transferToSystem": "3. Copier la séance sur le nouveau système",
|
||||
"index.transferToSystemDescription": "Ouvrir le lien copié dans le navigateur ou l'appareil cible pour transférer votre séance.",
|
||||
"index.transferSessionDescription": "Transférez votre session actuelle vers le navigateur ou l'appareil en cliquant sur le bouton ci-dessous. Cela copiera un lien vers une page qui transférera votre session lors de l'ouverture dans le navigateur ou l'appareil cible.",
|
||||
"index.createOpenPad": "Ouvrir le bloc-notes par son nom",
|
||||
"index.openPad": "ouvrir un bloc-note existant avec le nom :",
|
||||
"index.recentPads": "Bloc-notes récents",
|
||||
|
|
|
|||
|
|
@ -40,6 +40,18 @@
|
|||
"admin_settings.current_save.value": "Gardar axustes",
|
||||
"admin_settings.page-title": "Axustes - Etherpad",
|
||||
"index.newPad": "Novo documento",
|
||||
"index.settings": "Axustes",
|
||||
"index.transferSessionTitle": "Transferir a sesión",
|
||||
"index.receiveSessionTitle": "Recibir a sesión",
|
||||
"index.receiveSessionDescription": "Aquí podes recibir unha sesión de Etherpad desde outro navegador ou dispositivo. Ten en conta, non obstante, que isto eliminará a túa sesión actual, se a houbese.",
|
||||
"index.transferSession": "1. Transfire a sesión",
|
||||
"index.transferSessionNow": "Transfire a sesión agora",
|
||||
"index.copyLink": "2. Copia a ligazón",
|
||||
"index.copyLinkDescription": "Fai clic no botón de embaixo para copiar a ligazón no portapapeis.",
|
||||
"index.copyLinkButton": "Copiar a ligazón no portapapeis",
|
||||
"index.transferToSystem": "3. Copia a sesión no novo sistema",
|
||||
"index.transferToSystemDescription": "Abre a ligazón copiada no navegador ou dispositivo de destino para transferir a túa sesión.",
|
||||
"index.transferSessionDescription": "Transfire a túa sesión actual ao navegador ou dispositivo facendo clic no botón de embaixo. Isto copiará unha ligazón cara a unha páxina que transferirá a túa sesión cando se abra no navegador ou dispositivo de destino.",
|
||||
"index.createOpenPad": "Abrir un documento por nome",
|
||||
"index.openPad": "abrir un documento existente co nome:",
|
||||
"index.recentPads": "Documentos recentes",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,18 @@
|
|||
"admin_settings.current_save.value": "שמירת הגדרות",
|
||||
"admin_settings.page-title": "הגדרות - Etherpad",
|
||||
"index.newPad": "פנקס חדש",
|
||||
"index.settings": "הגדרות",
|
||||
"index.transferSessionTitle": "העברת הפעלה",
|
||||
"index.receiveSessionTitle": "קבלת הפעלה",
|
||||
"index.receiveSessionDescription": "כאן אפשר לקבל הפעלת Etherpad מדפדפן או מכשיר אחרים. נא לשים לב, שזה עלול למחוק את ההפעלה הנוכחית שלך, אם יש כזאת.",
|
||||
"index.transferSession": "1. העברת הפעלה",
|
||||
"index.transferSessionNow": "העברת הפעלה כעת",
|
||||
"index.copyLink": "2. להעתיק קישור",
|
||||
"index.copyLinkDescription": "לחיצה על הכפתור להלן תעתיק את הקישור ללוח הגזירים שלך.",
|
||||
"index.copyLinkButton": "העתקת קישור ללוח",
|
||||
"index.transferToSystem": "3. העתקת הפעלה למערכת חדשה",
|
||||
"index.transferToSystemDescription": "יש לפתוח את הקישור שהועתק בדפדפן או מכשיר היעד כדי להעביר את ההפעלה שלך.",
|
||||
"index.transferSessionDescription": "אפשר להעביר את ההתחברות הנוכחית שלך לדפדפן או למכשיר בלחיצה על הכפתור שלהלן. הפעולה הזאת תעתיק את הקישור לדף שיעביר את ההפעלה שלך כשייפתח בדפדפן או מכשיר היעד.",
|
||||
"index.createOpenPad": "פתיחת פנקס לפי שם",
|
||||
"index.openPad": "פתיחת פנקס קיים עם השם:",
|
||||
"index.recentPads": "פנקסים אחרונים",
|
||||
|
|
|
|||
|
|
@ -38,6 +38,18 @@
|
|||
"admin_settings.current_save.value": "Nastajenja składować",
|
||||
"admin_settings.page-title": "Nastajenja – Etherpad",
|
||||
"index.newPad": "Nowy zapisnik",
|
||||
"index.settings": "Nastajenja",
|
||||
"index.transferSessionTitle": "Posedźenje přenošować",
|
||||
"index.receiveSessionTitle": "Posedźenje přijeć",
|
||||
"index.receiveSessionDescription": "Tu móžeš posedźenje Etherpad z druheho wobhladowaka abo grata přijeć. Prošu dźiwaj na to, zo to waše aktualne posedźenje zhaša, jeli tajke eksistuje.",
|
||||
"index.transferSession": "1. Posedźenje přenošować",
|
||||
"index.transferSessionNow": "Posedźenje nětko přenošować",
|
||||
"index.copyLink": "2. Wotkaz kopěrować",
|
||||
"index.copyLinkDescription": "Klikń na slědowace tłóčatko, zo by wotkaz do mjezyskłada kopěrował.",
|
||||
"index.copyLinkButton": "Wotkaz do mjezyskłada kopěrować",
|
||||
"index.transferToSystem": "3. Posedźenje do noweho systema kopěrować",
|
||||
"index.transferToSystemDescription": "Wočiń kopěrowany wotkaz w cilowym wobhladowaku abo graće, zo by swoje posedźenje přenošował.",
|
||||
"index.transferSessionDescription": "Klikń na slědowace tłóčatko, zo by swoje aktualne posedźenje do wobhladowaka abo grata přenošował. To budźe wotkaz do strony kopěrować, kotraž budźe waše posedźenje přenošować, hdyž so w cilowym wobhladowaku abo graće wočinja.",
|
||||
"index.createOpenPad": "Zapisnik po mjenje wočinić",
|
||||
"index.openPad": "wočińće eksistowacy Pad z mjenom:",
|
||||
"index.recentPads": "Najnowše zapisniki",
|
||||
|
|
|
|||
|
|
@ -6,11 +6,12 @@
|
|||
"Bennylin",
|
||||
"IvanLanin",
|
||||
"Marwan Mohamad",
|
||||
"Penyuwangi",
|
||||
"Veracious"
|
||||
]
|
||||
},
|
||||
"admin.page-title": "Dasbor Pengurus - Etherpad",
|
||||
"admin_plugins": "Manajer plugin",
|
||||
"admin_plugins": "Pengelola plugin",
|
||||
"admin_plugins.available": "Plugin yang tersedia",
|
||||
"admin_plugins.available_not-found": "Tidak ada plugin yang ditemukan.",
|
||||
"admin_plugins.available_fetching": "Mengambil…",
|
||||
|
|
@ -23,12 +24,12 @@
|
|||
"admin_plugins.installed_uninstall.value": "Uninstal",
|
||||
"admin_plugins.last-update": "Pembaruan terakhir",
|
||||
"admin_plugins.name": "Nama",
|
||||
"admin_plugins.page-title": "Manajer plugin - Etherpad",
|
||||
"admin_plugins.page-title": "Pengelola plugin - Etherpad",
|
||||
"admin_plugins.version": "Versi",
|
||||
"admin_plugins_info": "Informasi penelusuran masalah",
|
||||
"admin_plugins_info.hooks": "Kait terpasang",
|
||||
"admin_plugins_info.hooks_client": "Kait sisi klien",
|
||||
"admin_plugins_info.hooks_server": "Kait sisi server",
|
||||
"admin_plugins_info.hooks_server": "Kait sisi peladen",
|
||||
"admin_plugins_info.parts": "Bagian terpasang",
|
||||
"admin_plugins_info.plugins": "Plugin terpasang",
|
||||
"admin_plugins_info.page-title": "Informasi plugin - Etherpad",
|
||||
|
|
@ -106,21 +107,21 @@
|
|||
"pad.modals.initsocketfail": "Peladen tidak dapat dihubungi.",
|
||||
"pad.modals.initsocketfail.explanation": "Peladen sinkronisasi tidak dapat dihubungi.",
|
||||
"pad.modals.initsocketfail.cause": "Ini mungkin disebabkan oleh masalah dengan peramban atau sambungan internet Anda.",
|
||||
"pad.modals.slowcommit.explanation": "Peladen tidak merespons.",
|
||||
"pad.modals.slowcommit.explanation": "Peladen tidak menanggapi.",
|
||||
"pad.modals.slowcommit.cause": "Ini mungkin disebabkan oleh masalah dengan sambungan jaringan Anda.",
|
||||
"pad.modals.badChangeset.explanation": "Suntingan yang Anda lakukan dianggap ilegal oleh server sinkronisasi.",
|
||||
"pad.modals.badChangeset.cause": "Hal ini mungkin disebabkan oleh konfigurasi peladen salah atau sesuatu perilaku yang tidak diperkirakan. Silahkan hubungi administrator Anda jika Anda merasakan ini adalah satu kesalahan. Coba sambungkan kembali untuk terus menyunting.",
|
||||
"pad.modals.badChangeset.explanation": "Suntingan yang telah Anda buat digolongkan ilegal oleh peladen sinkronisasi.",
|
||||
"pad.modals.badChangeset.cause": "Ini mungkin disebabkan oleh konfigurasi peladen salah atau perilaku tak terduga lainnya. Harap hubungi pengurus layanan Anda jika Anda merasakan ini adalah satu kesalahan. Coba sambungkan kembali untuk terus menyunting.",
|
||||
"pad.modals.corruptPad.explanation": "Pad yang Anda coba akses telah korup.",
|
||||
"pad.modals.corruptPad.cause": "Hal ini mungkin disebabkan oleh konfigurasi peladen salah atau sesuatu perilaku yang tidak diperkirakan. Silahkan hubungi administrator Anda jika Anda merasakan ini adalah satu kesalahan.",
|
||||
"pad.modals.corruptPad.cause": "Ini mungkin disebabkan oleh konfigurasi peladen salah atau perilaku tak terduga lainnya. Harap hubungi pengurus layanan.",
|
||||
"pad.modals.deleted": "Dihapus",
|
||||
"pad.modals.deleted.explanation": "Pad ini telah dibuang.",
|
||||
"pad.modals.rateLimited": "Laju Dibatasi.",
|
||||
"pad.modals.rateLimited.explanation": "Anda mengirim terlalu banyak pesan ke pad ini sehingga itu memutus Anda.",
|
||||
"pad.modals.rejected.explanation": "Server menolak suatu pesan yang dikirim oleh peramban Anda.",
|
||||
"pad.modals.rejected.cause": "Server mungkin telah diperbarui ketika Anda sedang melihat pad, atau mungkin ada bug dalam Etherpad. Cobalah memuat ulang halaman.",
|
||||
"pad.modals.rejected.explanation": "Peladen menolak suatu pesan yang dikirim oleh peramban Anda.",
|
||||
"pad.modals.rejected.cause": "Peladen mungkin telah diperbarui ketika Anda sedang melihat pad, atau mungkin ada kekutu dalam Etherpad. Coba muat ulang halaman.",
|
||||
"pad.modals.disconnected": "Sambungan Anda telah diputuskan.",
|
||||
"pad.modals.disconnected.explanation": "Sambungan ke peladen terputus",
|
||||
"pad.modals.disconnected.cause": "Peladen ini mungkin tidak tersedia. Silakan beritahu administrator jika masalah ini berkelanjutan.",
|
||||
"pad.modals.disconnected.cause": "Peladen ini mungkin tak tersedia. Silakan beritahukan pengurus jika masalah ini berlanjut.",
|
||||
"pad.share": "Bagikan pad ini",
|
||||
"pad.share.readonly": "Baca saja",
|
||||
"pad.share.link": "Pranala",
|
||||
|
|
@ -169,6 +170,6 @@
|
|||
"pad.impexp.uploadFailed": "Penunggahan gagal, silakan mencoba lagi",
|
||||
"pad.impexp.importfailed": "Impor gagal",
|
||||
"pad.impexp.copypaste": "Silahkan salin tempel",
|
||||
"pad.impexp.exportdisabled": "Mengekspor dalam format {{type}} dilarang. Silakan hubungi administrator untuk detilnya.",
|
||||
"pad.impexp.maxFileSize": "Berkas terlalu besar. Hubungi administrator situs Anda untuk menaikkan ukuran berkas yang diizinkan untuk impor"
|
||||
"pad.impexp.exportdisabled": "Mengekspor dalam format {{type}} dimatikan. Silakan hubungi pengurus sistem Anda untuk rincian.",
|
||||
"pad.impexp.maxFileSize": "Berkas terlalu besar. Hubungi pengurus situs Anda untuk menaikkan ukuran berkas yang diizinkan untuk impor"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
"authors": [
|
||||
"Ajeje Brazorf",
|
||||
"Albano",
|
||||
"Ayub Abdulla",
|
||||
"Beta16",
|
||||
"Gianfranco",
|
||||
"Jack",
|
||||
|
|
@ -47,6 +48,18 @@
|
|||
"admin_settings.current_save.value": "Salva impostazioni",
|
||||
"admin_settings.page-title": "Impostazioni - Etherpad",
|
||||
"index.newPad": "Nuovo pad",
|
||||
"index.settings": "Impostazioni",
|
||||
"index.transferSessionTitle": "Sessione di trasferimento",
|
||||
"index.receiveSessionTitle": "Ricevi sessione",
|
||||
"index.receiveSessionDescription": "Qui puoi ricevere una sessione Etherpad da un altro browser o dispositivo. Tieni presente, tuttavia, che questa operazione eliminerà la sessione corrente, se presente.",
|
||||
"index.transferSession": "1. Sessione di trasferimento",
|
||||
"index.transferSessionNow": "Trasferisci sessione ora",
|
||||
"index.copyLink": "2. Copia il collegamento",
|
||||
"index.copyLinkDescription": "Clicca sul pulsante qui sotto per copiare il link negli appunti.",
|
||||
"index.copyLinkButton": "Copia link negli appunti",
|
||||
"index.transferToSystem": "3. Copia la sessione sul nuovo sistema",
|
||||
"index.transferToSystemDescription": "Apri il collegamento copiato nel browser o nel dispositivo di destinazione per trasferire la sessione",
|
||||
"index.transferSessionDescription": "Trasferisci la tua sessione corrente al browser o al dispositivo cliccando sul pulsante qui sotto. Verrà copiato un link a una pagina che trasferirà la tua sessione quando verrà aperta nel browser o dispositivo di destinazione.",
|
||||
"index.createOpenPad": "Apri pad per nome",
|
||||
"index.openPad": "apri un Pad esistente col nome:",
|
||||
"index.recentPads": "Pad recenti",
|
||||
|
|
|
|||
|
|
@ -19,6 +19,9 @@
|
|||
"admin_settings.current_save.value": "Astellunge späicheren",
|
||||
"admin_settings.page-title": "Astellungen - Etherpad",
|
||||
"index.newPad": "Neie Pad",
|
||||
"index.settings": "Astellungen",
|
||||
"index.copyLink": "2. Link kopéieren",
|
||||
"index.copyLinkButton": "Link an den Tëschespäicher kopéieren",
|
||||
"index.createOpenPad": "oder maacht ee Pad mat dësem Numm op:",
|
||||
"pad.toolbar.bold.title": "Fett (Strg-B)",
|
||||
"pad.toolbar.italic.title": "Schréi (Ctrl+I)",
|
||||
|
|
|
|||
|
|
@ -1,36 +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"
|
||||
}
|
||||
|
|
@ -40,13 +40,25 @@
|
|||
"admin_settings.current_save.value": "Зачувај нагодувања",
|
||||
"admin_settings.page-title": "Нагодувања — Etherpad",
|
||||
"index.newPad": "Нова тетратка",
|
||||
"index.settings": "Нагодувања",
|
||||
"index.transferSessionTitle": "Префрли седница",
|
||||
"index.receiveSessionTitle": "Прими седница",
|
||||
"index.receiveSessionDescription": "Тука можете да примите седница на Etherpad од друг прелистувач или уред. Но имајте на ум дека ова ќе ја избрише вашата тековна седница, ако ја има.",
|
||||
"index.transferSession": "1. Префрли седница",
|
||||
"index.transferSessionNow": "Префрли седница сега",
|
||||
"index.copyLink": "2. Копирај врска",
|
||||
"index.copyLinkDescription": "Стиснете на копчето подолу за да ја прекопирајте врската во вашиот меѓусклад",
|
||||
"index.copyLinkButton": "Копирај врска во меѓускладот",
|
||||
"index.transferToSystem": "3. Копирај седница во нов систем",
|
||||
"index.transferToSystemDescription": "Отворете ја ископираната врска во целниот прелистувач или уред за да ја префрлите вашата седница.",
|
||||
"index.transferSessionDescription": "Префрлете ја вашата тековна седница на прелистувач или уред стискајќи на копчето подолу. Ова ќе ја прекопира врската во страница која ќе ви ја префрли седницата кога ќе се отвори во целниот прелистувач или уред.",
|
||||
"index.createOpenPad": "Отвори тетратка по име",
|
||||
"index.openPad": "отвори постоечка тетратка наречена:",
|
||||
"index.recentPads": "Скорешни тетратки",
|
||||
"index.recentPadsEmpty": "Не најдов скорешни тетратки.",
|
||||
"index.generateNewPad": "Создај случајно име на тетратка",
|
||||
"index.labelPad": "Име на тетратка (незадолжително)",
|
||||
"index.placeholderPadEnter": "Внесете го името на тетратката...",
|
||||
"index.placeholderPadEnter": "Внесете име на тетратката...",
|
||||
"index.createAndShareDocuments": "Создавајте и споделувајте документи во живо",
|
||||
"index.createAndShareDocumentsDescription": "Etherpad ви овозможува соработно уредување на документи во живо, слично како уредувачот за повеќе играчи во живо што работи во вашиот пречистувач.",
|
||||
"pad.toolbar.bold.title": "Задебелено (Ctrl-B)",
|
||||
|
|
|
|||
|
|
@ -13,7 +13,9 @@
|
|||
},
|
||||
"admin_plugins.description": "विवरण",
|
||||
"admin_plugins.name": "नाम",
|
||||
"admin_plugins.version": "संस्करण",
|
||||
"index.newPad": "नयाँ प्याड",
|
||||
"index.settings": "अभिरुचिहरू",
|
||||
"index.createOpenPad": "नाम सहितको नयाँ प्याड सिर्जना गर्ने / खोल्ने :",
|
||||
"pad.toolbar.bold.title": "मोटो (Ctrl-B)",
|
||||
"pad.toolbar.italic.title": "ढल्के (Ctrl-I)",
|
||||
|
|
@ -25,13 +27,13 @@
|
|||
"pad.toolbar.unindent.title": "आउटडेन्ट (Shift+TAB)",
|
||||
"pad.toolbar.undo.title": "रद्द (Ctrl-Z)",
|
||||
"pad.toolbar.redo.title": "पुन:लागु (Ctrl-Y)",
|
||||
"pad.toolbar.clearAuthorship.title": "लेखकीय रङ्ग हटाउने (Ctrl+Shift+C)",
|
||||
"pad.toolbar.clearAuthorship.title": "लेखकत्व रङहरू खाली गर्नुहोस् (Ctrl + Shift + C)",
|
||||
"pad.toolbar.timeslider.title": "टाइमस्लाइडर",
|
||||
"pad.toolbar.savedRevision.title": "पुनरावलोकन संग्रहगर्ने",
|
||||
"pad.toolbar.settings.title": "अभिरुचिहरू",
|
||||
"pad.toolbar.embed.title": "यस प्याडलाई बाड्ने या इम्बेड गर्ने",
|
||||
"pad.toolbar.showusers.title": "यस प्याडमा रहेका प्रयोगकर्ता देखाउने",
|
||||
"pad.colorpicker.save": "सङ्ग्रह गर्ने",
|
||||
"pad.colorpicker.save": "सङ्ग्रह गर्नुहोस्",
|
||||
"pad.colorpicker.cancel": "रद्द गर्नुहोस्",
|
||||
"pad.loading": "खुल्दै छ…",
|
||||
"pad.permissionDenied": "तपाईंलाई यो प्याड खोल्न अनुमति छैन",
|
||||
|
|
@ -39,7 +41,7 @@
|
|||
"pad.settings.myView": "मेरो दृष्य",
|
||||
"pad.settings.stickychat": "पर्दामा सधै च्याट गर्ने",
|
||||
"pad.settings.chatandusers": "वार्ता तथा प्रयोगकर्ताहरू देखाउने",
|
||||
"pad.settings.colorcheck": "लेखकीय रङ्ग",
|
||||
"pad.settings.colorcheck": "लेखकका रङहरू",
|
||||
"pad.settings.linenocheck": "हरफ संख्या",
|
||||
"pad.settings.rtlcheck": "के सामग्री दाहिने देखि देब्रे पढ्ने हो ?",
|
||||
"pad.settings.fontType": "लिपि प्रकार:",
|
||||
|
|
|
|||
|
|
@ -52,6 +52,18 @@
|
|||
"admin_settings.current_save.value": "Bewaar instellingen",
|
||||
"admin_settings.page-title": "Instellingen - Etherpad",
|
||||
"index.newPad": "Nieuwe notitie",
|
||||
"index.settings": "Instellingen",
|
||||
"index.transferSessionTitle": "Sessie overzetten",
|
||||
"index.receiveSessionTitle": "Sessie ontvangen",
|
||||
"index.receiveSessionDescription": "Hier kunt u een Etherpad-sessie ontvangen vanaf een andere browser of een ander apparaat. Houd er echter rekening mee dat hiermee uw huidige sessie, indien aanwezig, wordt verwijderd.",
|
||||
"index.transferSession": "1. Sessie overzetten",
|
||||
"index.transferSessionNow": "Sessie nu overzetten",
|
||||
"index.copyLink": "2. Koppeling kopiëren",
|
||||
"index.copyLinkDescription": "Klik op de onderstaande knop om de koppeling naar uw klembord te kopiëren.",
|
||||
"index.copyLinkButton": "Koppeling naar klembord kopiëren",
|
||||
"index.transferToSystem": "3. Kopieer de sessie naar het nieuwe systeem",
|
||||
"index.transferToSystemDescription": "Open de gekopieerde koppeling in de doelbrowser of het doelapparaat om uw sessie over te zetten.",
|
||||
"index.transferSessionDescription": "Zet uw huidige sessie over naar uw browser of apparaat door op de onderstaande knop te klikken. Hiermee wordt een koppeling naar een pagina gekopieerd die uw sessie overzet wanneer deze in de gewenste browser of op het gewenste apparaat wordt geopend.",
|
||||
"index.createOpenPad": "Open een notitie met de naam",
|
||||
"index.openPad": "open een bestaande notitie met de naam:",
|
||||
"index.recentPads": "Recente notities",
|
||||
|
|
|
|||
|
|
@ -38,6 +38,18 @@
|
|||
"admin_settings.current_save.value": "Argistré ij paràmeter",
|
||||
"admin_settings.page-title": "Paràmeter - Etherpad",
|
||||
"index.newPad": "Feuj neuv",
|
||||
"index.settings": "Paràmeter",
|
||||
"index.transferSessionTitle": "Tramudé la session",
|
||||
"index.receiveSessionTitle": "Arsèive na session",
|
||||
"index.receiveSessionDescription": "Ambelessì a peul arsèive na session Etherpad da n'àutr navigador o angign. Për piasì, ch'a armarca che, an tute le manere, sòn a dëscancelërà soa session corent, s'a-i na j'é.",
|
||||
"index.transferSession": "1. Tramudé la session",
|
||||
"index.transferSessionNow": "Tramudé la session adess",
|
||||
"index.copyLink": "2. Copié la liura",
|
||||
"index.copyLinkDescription": "Ch'a sgnaca an sël boton sì-sota për copié la liura su soa taulëtta.",
|
||||
"index.copyLinkButton": "Copié la liura an sla taulëtta",
|
||||
"index.transferToSystem": "3. Copié la session ant ël neuv sistema",
|
||||
"index.transferToSystemDescription": "Duverté la liura copià ant ël navigador o angign ëd destinassion për tramudé soa session.",
|
||||
"index.transferSessionDescription": "Tramudé soa session corenta a 'n navigador o n'angign an ësgnacand ël boton sota. Sòn a copiërà na liura a na pàgina che a tramudërà soa session cand a sarà duvertà ant ël navigador o l'angign ëd destinassion.",
|
||||
"index.createOpenPad": "Duverté ël blochèt con sò nòm",
|
||||
"index.openPad": "duverté un Pad esistent con ël nòm:",
|
||||
"index.recentPads": "Blochèt recent",
|
||||
|
|
|
|||
|
|
@ -6,12 +6,13 @@
|
|||
"ImGelu",
|
||||
"MSClaudiu",
|
||||
"Minisarm",
|
||||
"SZ475",
|
||||
"Strainu",
|
||||
"Wintereu"
|
||||
]
|
||||
},
|
||||
"index.newPad": "Pad nou",
|
||||
"index.createOpenPad": "sau creează/deschide un Pad cu numele:",
|
||||
"index.createOpenPad": "Deschideți pad-ul după nume",
|
||||
"index.openPad": "deschide un Pad existent cu numele:",
|
||||
"pad.toolbar.bold.title": "Aldin (Ctrl + B)",
|
||||
"pad.toolbar.italic.title": "Cursiv (Ctrl + I)",
|
||||
|
|
@ -20,7 +21,7 @@
|
|||
"pad.toolbar.ol.title": "Listă ordonată (Ctrl+Shift+N)",
|
||||
"pad.toolbar.ul.title": "Listă neordonată (Ctrl+Shift+L)",
|
||||
"pad.toolbar.indent.title": "Cursiv (TAB)",
|
||||
"pad.toolbar.unindent.title": "Fără cursiv (Shift+TAB)",
|
||||
"pad.toolbar.unindent.title": "Outdent (Shift+TAB)",
|
||||
"pad.toolbar.undo.title": "Anulează (Ctrl+Z)",
|
||||
"pad.toolbar.redo.title": "Refă (Ctrl+Y)",
|
||||
"pad.toolbar.clearAuthorship.title": "Curăță culorile autorilor (Ctrl+Shift+C)",
|
||||
|
|
@ -57,7 +58,7 @@
|
|||
"pad.importExport.exportopen": "ODF (Open Document Format)",
|
||||
"pad.importExport.abiword.innerHTML": "Puteți importa doar din format simplu sau HTML. Pentru funcții de import mai avansate, vă rugăm <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">instalați AbiWord sau LibreOffice</a>.",
|
||||
"pad.modals.connected": "Conectat.",
|
||||
"pad.modals.reconnecting": "Se reconectează la pad-ul dumneavoastră..",
|
||||
"pad.modals.reconnecting": "Se reconectează la pad…",
|
||||
"pad.modals.forcereconnect": "Forțează reconectarea",
|
||||
"pad.modals.reconnecttimer": "Încercați să vă reconectați în",
|
||||
"pad.modals.cancel": "Anulează",
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
"Eleferen",
|
||||
"Facenapalm",
|
||||
"Kareyac",
|
||||
"Lvova",
|
||||
"MSClaudiu",
|
||||
"Megakott",
|
||||
"Movses",
|
||||
|
|
@ -53,6 +54,18 @@
|
|||
"admin_settings.current_save.value": "Сохранить настройки",
|
||||
"admin_settings.page-title": "Настройки — Etherpad",
|
||||
"index.newPad": "Создать",
|
||||
"index.settings": "Настройки",
|
||||
"index.transferSessionTitle": "Передача сеанса",
|
||||
"index.receiveSessionTitle": "Приём сеанса",
|
||||
"index.receiveSessionDescription": "Здесь вы можете принять сеанс Etherpad из другого браузера или устройства. Обратите внимание, что это удалит ваш текущий сеанс, если он есть.",
|
||||
"index.transferSession": "1. Перенос сеанса",
|
||||
"index.transferSessionNow": "Перенести сеанс сейчас",
|
||||
"index.copyLink": "2. Скопировать ссылку",
|
||||
"index.copyLinkDescription": "Нажмите на кнопку ниже, чтобы скопировать ссылку в буфер обмена.",
|
||||
"index.copyLinkButton": "Скопировать в буфер обмена",
|
||||
"index.transferToSystem": "3. Копировать сеанс в новую систему",
|
||||
"index.transferToSystemDescription": "Откройте скопированную ссылку в нужном браузере или устройстве, чтобы перенести сеанс.",
|
||||
"index.transferSessionDescription": "Перенесите текущий сеанс в браузер или на устройство, нажав кнопку ниже. Будет скопирована ссылка на страницу, которая перенесёт ваш сеанс при открытии в целевом браузере или на целевом устройстве.",
|
||||
"index.createOpenPad": "Открыть документ по имени",
|
||||
"index.openPad": "откройте существующий документ с именем:",
|
||||
"index.recentPads": "Последние документы",
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@
|
|||
"pad.settings.about": "Mbi",
|
||||
"pad.settings.poweredBy": "Bazuar në",
|
||||
"pad.importExport.import_export": "Import/Eksport",
|
||||
"pad.importExport.import": "Ngarko çdo skedar teksti ose dokument",
|
||||
"pad.importExport.import": "Ngarkoni cilëndo kartelë tekst ose dokument",
|
||||
"pad.importExport.importSuccessful": "Me sukses!",
|
||||
"pad.importExport.export": "Eksportojeni bllokun e tanishëm si:",
|
||||
"pad.importExport.exportetherpad": "Etherpad",
|
||||
|
|
|
|||
|
|
@ -42,8 +42,27 @@
|
|||
"admin_settings.current_save.value": "Spara inställningar",
|
||||
"admin_settings.page-title": "Inställningar - Etherpad",
|
||||
"index.newPad": "Nytt block",
|
||||
"index.createOpenPad": "eller skapa/öppna ett block med namnet:",
|
||||
"index.settings": "Inställningar",
|
||||
"index.transferSessionTitle": "Överför session",
|
||||
"index.receiveSessionTitle": "Ta emot session",
|
||||
"index.receiveSessionDescription": "Här kan du ta emot en Etherpad-session från en annan webbläsare eller enhet. Observera att detta kommer att radera din aktuella session, om en sådan finns.",
|
||||
"index.transferSession": "1. Överför session",
|
||||
"index.transferSessionNow": "Överför session nu",
|
||||
"index.copyLink": "2. Kopiera länk",
|
||||
"index.copyLinkDescription": "Klicka på knappen nedan för att kopiera länken till urklipp.",
|
||||
"index.copyLinkButton": "Kopiera länk till urklipp",
|
||||
"index.transferToSystem": "3. Kopiera sessionen till det nya systemet",
|
||||
"index.transferToSystemDescription": "Öppna den kopierade länken i målwebbläsaren eller -enheten för att överföra din session.",
|
||||
"index.transferSessionDescription": "Överför din nuvarande session till webbläsaren eller enheten genom att klicka på knappen nedan. Detta kopierar en länk till en sida som överför din session när den öppnas i målwebbläsaren eller -enheten.",
|
||||
"index.createOpenPad": "Öppna block med namn",
|
||||
"index.openPad": "öppna ett befintligt block med namnet:",
|
||||
"index.recentPads": "Senaste block",
|
||||
"index.recentPadsEmpty": "Inga senaste block hittades.",
|
||||
"index.generateNewPad": "Generera slumpat blocknamn",
|
||||
"index.labelPad": "Blocknamn (valfritt)",
|
||||
"index.placeholderPadEnter": "Ange ett blocknamn...",
|
||||
"index.createAndShareDocuments": "Skapa och dela dokument i realtid",
|
||||
"index.createAndShareDocumentsDescription": "Med Etherpad kan ni redigera dokument tillsammans i realtid, ungefär som en live-redigerare för flera spelare som körs i din webbläsare.",
|
||||
"pad.toolbar.bold.title": "Fet (Ctrl+B)",
|
||||
"pad.toolbar.italic.title": "Kursiv (Ctrl+I)",
|
||||
"pad.toolbar.underline.title": "Understruken (Ctrl+U)",
|
||||
|
|
@ -60,6 +79,7 @@
|
|||
"pad.toolbar.savedRevision.title": "Spara version",
|
||||
"pad.toolbar.settings.title": "Inställningar",
|
||||
"pad.toolbar.embed.title": "Dela och bädda in detta block",
|
||||
"pad.toolbar.home.title": "Tillbaka till hemsidan",
|
||||
"pad.toolbar.showusers.title": "Visa användarna på detta block",
|
||||
"pad.colorpicker.save": "Spara",
|
||||
"pad.colorpicker.cancel": "Avbryt",
|
||||
|
|
|
|||
|
|
@ -59,6 +59,18 @@
|
|||
"admin_settings.current_save.value": "保存设置",
|
||||
"admin_settings.page-title": "设置 - Etherpad",
|
||||
"index.newPad": "新记事本",
|
||||
"index.settings": "设置",
|
||||
"index.transferSessionTitle": "转移会话",
|
||||
"index.receiveSessionTitle": "接收会话",
|
||||
"index.receiveSessionDescription": "您可以在此处从其他浏览器或设备接收Etherpad会话。但请注意,这会删除您目前的会话(如有)。",
|
||||
"index.transferSession": "1. 转移会话",
|
||||
"index.transferSessionNow": "现在进行转移会话",
|
||||
"index.copyLink": "2. 复制链接",
|
||||
"index.copyLinkDescription": "点击下方按钮,将链接复制到剪贴板。",
|
||||
"index.copyLinkButton": "复制链接到剪贴板",
|
||||
"index.transferToSystem": "3. 将会话复制到新系统",
|
||||
"index.transferToSystemDescription": "在目标浏览器或设备上打开复制的链接,即可转移您的会话。",
|
||||
"index.transferSessionDescription": "点击下方按钮,即可将目前的会话转移到浏览器或设备。这将复制一个指向某页面的链接,当该页面在目标浏览器或设备上打开时,将会转移您的会话。",
|
||||
"index.createOpenPad": "按名称打开记事本",
|
||||
"index.openPad": "打开一个现有的记事本,名称为:",
|
||||
"index.recentPads": "最近的记事本",
|
||||
|
|
|
|||
|
|
@ -48,13 +48,25 @@
|
|||
"admin_settings.current_save.value": "儲存設定",
|
||||
"admin_settings.page-title": "設定 - Etherpad",
|
||||
"index.newPad": "新記事本",
|
||||
"index.settings": "設定",
|
||||
"index.transferSessionTitle": "轉移連線階段",
|
||||
"index.receiveSessionTitle": "接收連線階段",
|
||||
"index.receiveSessionDescription": "您可以在此處從其他瀏覽器或裝置接收 Etherpad 的連線階段。但請留意,這會刪除您目前的連線階段(如有)。",
|
||||
"index.transferSession": "1. 轉移連線階段",
|
||||
"index.transferSessionNow": "現在進行轉移連線階段",
|
||||
"index.copyLink": "2. 複製連結",
|
||||
"index.copyLinkDescription": "點擊下方按鈕,將連結複製到您的剪貼簿。",
|
||||
"index.copyLinkButton": "複製連結到剪貼簿",
|
||||
"index.transferToSystem": "3. 將連線階段複製到新系統",
|
||||
"index.transferToSystemDescription": "在目標瀏覽器或裝置上開啟複製的連結,即可轉移您的連線階段。",
|
||||
"index.transferSessionDescription": "點擊下方按鈕,即可將您目前的連線階段轉移到瀏覽器或裝置。這將複製一個指向到一個頁面的連結,當該頁面在目標瀏覽器或設備上打開時,會轉移您的連線階段。",
|
||||
"index.createOpenPad": "依照名稱開啟記事本",
|
||||
"index.openPad": "開啟一個現有的記事本,名稱為:",
|
||||
"index.recentPads": "近期記事本",
|
||||
"index.recentPadsEmpty": "找不到近期的記事本。",
|
||||
"index.generateNewPad": "產生隨機記事本名稱",
|
||||
"index.labelPad": "記事本名稱(可選)",
|
||||
"index.placeholderPadEnter": "輸入記事本名稱…",
|
||||
"index.placeholderPadEnter": "請輸入記事本名稱…",
|
||||
"index.createAndShareDocuments": "即時建立和共享文件",
|
||||
"index.createAndShareDocumentsDescription": "Etherpad 允許您即時協作編輯文件,就像在瀏覽器中運作的即時多人編輯器一樣。",
|
||||
"pad.toolbar.bold.title": "粗體(Ctrl+B)",
|
||||
|
|
@ -78,7 +90,7 @@
|
|||
"pad.colorpicker.save": "儲存",
|
||||
"pad.colorpicker.cancel": "取消",
|
||||
"pad.loading": "載入中...",
|
||||
"pad.noCookie": "無法找到 Cookie。請在您的瀏覽器中允許cookie!您的 session 和設定未在訪問期間保存下來。這可能是由於 Etherpad 包含在某些瀏覽器的 iFrame 中。請確保 Etherpad 與父層級 iFrame 位於同一子網域/網域中",
|
||||
"pad.noCookie": "無法找到 Cookie。請在您的瀏覽器中允許 cookie!您的連線階段和設定未在訪問期間保存下來。這可能是由於 Etherpad 包含在某些瀏覽器的 iFrame 中。請確保 Etherpad 與父層級 iFrame 位於同一子網域/網域中",
|
||||
"pad.permissionDenied": "你沒有存取這個記事本的權限",
|
||||
"pad.settings.padSettings": "記事本設定",
|
||||
"pad.settings.myView": "我的視窗",
|
||||
|
|
|
|||
45
src/node/hooks/express/tokenTransfer.ts
Normal file
45
src/node/hooks/express/tokenTransfer.ts
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
import {ArgsExpressType} from "../../types/ArgsExpressType";
|
||||
const db = require('../../db/DB');
|
||||
import crypto from 'crypto'
|
||||
|
||||
|
||||
type TokenTransferRequest = {
|
||||
token: string;
|
||||
prefsHttp: string,
|
||||
createdAt?: number;
|
||||
}
|
||||
|
||||
const tokenTransferKey = "tokenTransfer:";
|
||||
|
||||
export const expressCreateServer = (hookName:string, {app}:ArgsExpressType) => {
|
||||
app.post('/tokenTransfer', async (req, res) => {
|
||||
const token = req.body as TokenTransferRequest;
|
||||
if (!token || !token.token) {
|
||||
return res.status(400).send({error: 'Invalid request'});
|
||||
}
|
||||
|
||||
const id = crypto.randomUUID()
|
||||
token.createdAt = Date.now();
|
||||
|
||||
await db.set(`${tokenTransferKey}:${id}`, token)
|
||||
res.send({id});
|
||||
})
|
||||
|
||||
app.get('/tokenTransfer/:token', async (req, res) => {
|
||||
const id = req.params.token;
|
||||
if (!id) {
|
||||
return res.status(400).send({error: 'Invalid request'});
|
||||
}
|
||||
|
||||
const tokenData = await db.get(`${tokenTransferKey}:${id}`);
|
||||
if (!tokenData) {
|
||||
return res.status(404).send({error: 'Token not found'});
|
||||
}
|
||||
|
||||
const token = await db.get(`${tokenTransferKey}:${id}`)
|
||||
|
||||
res.cookie('token', tokenData.token, {path: '/', maxAge: 1000*60*60*24*365});
|
||||
res.cookie('prefsHttp', tokenData.prefsHttp, {path: '/', maxAge: 1000*60*60*24*365});
|
||||
res.send(token);
|
||||
})
|
||||
}
|
||||
|
|
@ -96,7 +96,7 @@ const State = {
|
|||
|
||||
let state = State.INITIAL;
|
||||
|
||||
const removeSignalListener = (signal: NodeJS.Signals, listener: NodeJS.SignalsListener) => {
|
||||
const removeSignalListener = (signal: NodeJS.Signals, listener: any) => {
|
||||
logger.debug(`Removing ${signal} listener because it might interfere with shutdown tasks. ` +
|
||||
`Function code:\n${listener.toString()}\n` +
|
||||
`Current stack:\n${new Error()!.stack!.split('\n').slice(1).join('\n')}`);
|
||||
|
|
|
|||
|
|
@ -36,44 +36,44 @@
|
|||
"cross-env": "^10.1.0",
|
||||
"cross-spawn": "^7.0.6",
|
||||
"ejs": "^3.1.10",
|
||||
"esbuild": "^0.25.12",
|
||||
"express": "^5.1.0",
|
||||
"esbuild": "^0.27.2",
|
||||
"express": "^5.2.1",
|
||||
"express-rate-limit": "^8.2.1",
|
||||
"express-session": "^1.18.2",
|
||||
"find-root": "1.1.0",
|
||||
"formidable": "^3.5.4",
|
||||
"http-errors": "^2.0.0",
|
||||
"jose": "^6.1.0",
|
||||
"http-errors": "^2.0.1",
|
||||
"jose": "^6.1.3",
|
||||
"js-cookie": "^3.0.5",
|
||||
"jsdom": "^27.1.0",
|
||||
"jsdom": "^27.4.0",
|
||||
"jsonminify": "0.4.2",
|
||||
"jsonwebtoken": "^9.0.2",
|
||||
"jsonwebtoken": "^9.0.3",
|
||||
"jwt-decode": "^4.0.0",
|
||||
"languages4translatewiki": "0.1.3",
|
||||
"live-plugin-manager": "^1.1.0",
|
||||
"lodash.clonedeep": "4.5.0",
|
||||
"log4js": "^6.9.1",
|
||||
"lru-cache": "^11.2.2",
|
||||
"lru-cache": "^11.2.4",
|
||||
"measured-core": "^2.0.0",
|
||||
"mime-types": "^3.0.1",
|
||||
"oidc-provider": "9.5.1",
|
||||
"mime-types": "^3.0.2",
|
||||
"oidc-provider": "9.6.0",
|
||||
"openapi-backend": "^5.15.0",
|
||||
"prom-client": "^15.1.3",
|
||||
"proxy-addr": "^2.0.7",
|
||||
"rate-limiter-flexible": "^8.1.0",
|
||||
"rate-limiter-flexible": "^9.0.1",
|
||||
"rehype": "^13.0.2",
|
||||
"rehype-minify-whitespace": "^6.0.2",
|
||||
"resolve": "1.22.11",
|
||||
"rusty-store-kv": "^1.3.1",
|
||||
"security": "1.0.0",
|
||||
"semver": "^7.7.3",
|
||||
"socket.io": "^4.8.1",
|
||||
"socket.io-client": "^4.8.1",
|
||||
"socket.io": "^4.8.3",
|
||||
"socket.io-client": "^4.8.3",
|
||||
"superagent": "10.2.3",
|
||||
"swagger-ui-express": "^5.0.1",
|
||||
"tinycon": "0.6.8",
|
||||
"tsx": "4.20.6",
|
||||
"ueberdb2": "^5.0.22",
|
||||
"tsx": "4.21.0",
|
||||
"ueberdb2": "^5.0.23",
|
||||
"underscore": "1.13.7",
|
||||
"unorm": "1.6.0",
|
||||
"wtfnode": "^0.10.1"
|
||||
|
|
@ -83,12 +83,12 @@
|
|||
"etherpad-lite": "node/server.ts"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@playwright/test": "^1.56.1",
|
||||
"@playwright/test": "^1.57.0",
|
||||
"@types/async": "^3.2.25",
|
||||
"@types/cookie-parser": "^1.4.10",
|
||||
"@types/cross-spawn": "^6.0.6",
|
||||
"@types/ejs": "^3.1.5",
|
||||
"@types/express": "^5.0.5",
|
||||
"@types/express": "^5.0.6",
|
||||
"@types/express-session": "^1.18.2",
|
||||
"@types/formidable": "^3.4.6",
|
||||
"@types/http-errors": "^2.0.5",
|
||||
|
|
@ -99,28 +99,28 @@
|
|||
"@types/jsonwebtoken": "^9.0.10",
|
||||
"@types/mime-types": "^3.0.1",
|
||||
"@types/mocha": "^10.0.9",
|
||||
"@types/node": "^24.9.2",
|
||||
"@types/node": "^25.0.3",
|
||||
"@types/oidc-provider": "^9.5.0",
|
||||
"@types/semver": "^7.7.1",
|
||||
"@types/sinon": "^17.0.3",
|
||||
"@types/sinon": "^21.0.0",
|
||||
"@types/supertest": "^6.0.2",
|
||||
"@types/swagger-ui-express": "^4.1.8",
|
||||
"@types/underscore": "^1.13.0",
|
||||
"@types/whatwg-mimetype": "^3.0.2",
|
||||
"chokidar": "^4.0.3",
|
||||
"eslint": "^9.38.0",
|
||||
"chokidar": "^5.0.0",
|
||||
"eslint": "^9.39.2",
|
||||
"eslint-config-etherpad": "^4.0.4",
|
||||
"etherpad-cli-client": "^3.0.5",
|
||||
"mocha": "^11.7.4",
|
||||
"mocha": "^11.7.5",
|
||||
"mocha-froth": "^0.2.10",
|
||||
"nodeify": "^1.0.1",
|
||||
"openapi-schema-validation": "^0.4.2",
|
||||
"set-cookie-parser": "^2.7.2",
|
||||
"sinon": "^21.0.0",
|
||||
"sinon": "^21.0.1",
|
||||
"split-grid": "^1.0.11",
|
||||
"supertest": "^7.1.3",
|
||||
"typescript": "^5.9.3",
|
||||
"vitest": "^4.0.6"
|
||||
"vitest": "^4.0.16"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.18.2",
|
||||
|
|
@ -147,6 +147,6 @@
|
|||
"debug:socketio": "cross-env DEBUG=socket.io* node --require tsx/cjs node/server.ts",
|
||||
"test:vitest": "vitest"
|
||||
},
|
||||
"version": "2.5.3",
|
||||
"version": "2.6.0",
|
||||
"license": "Apache-2.0"
|
||||
}
|
||||
|
|
|
|||
116
src/static/js/welcome.ts
Normal file
116
src/static/js/welcome.ts
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
const checkmark = '<svg width="28" height="28" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="3" stroke="currentColor"><path vector-effect="non-scaling-stroke" stroke-linecap="round" stroke-linejoin="round" d="m4.5 12.75 6 6 9-13.5"/></svg>';
|
||||
|
||||
function getCookie(name: string) {
|
||||
const value = `; ${document.cookie}`;
|
||||
const parts = value.split(`; ${name}=`);
|
||||
if (parts.length === 2) { // @ts-ignore
|
||||
return parts.pop().split(';').shift();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function handleTransferOfSession() {
|
||||
const transferNowButton = document.querySelector('[data-l10n-id="index.transferSessionNow"]')! as HTMLButtonElement;
|
||||
|
||||
transferNowButton.addEventListener('click', async () => {
|
||||
transferNowButton.style.display = 'inline-flex';
|
||||
transferNowButton.style.alignItems = 'center';
|
||||
transferNowButton.style.justifyContent = 'center';
|
||||
transferNowButton.innerHTML = `${checkmark}`;
|
||||
transferNowButton.disabled = true;
|
||||
|
||||
const responseWithId = await fetch("./tokenTransfer", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
body: JSON.stringify({
|
||||
prefsHttp: getCookie('prefsHttp'),
|
||||
token: getCookie('token'),
|
||||
})
|
||||
})
|
||||
|
||||
const copyLinkSection = document.getElementById('copy-link-section')
|
||||
if (!copyLinkSection) return;
|
||||
copyLinkSection.style.display = 'block';
|
||||
|
||||
const copyButton = document.querySelector('#copy-link-section .btn-secondary') as HTMLButtonElement
|
||||
const responseData = await responseWithId.json();
|
||||
copyButton.addEventListener('click', async ()=>{
|
||||
await navigator.clipboard.writeText(responseData.id);
|
||||
copyButton.style.display = 'inline-flex';
|
||||
copyButton.style.alignItems = 'center';
|
||||
copyButton.style.justifyContent = 'center';
|
||||
copyButton.innerHTML = `${checkmark}`;
|
||||
copyButton.disabled = true;
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
const handleSettingsButtonClick = () => {
|
||||
const settingsButton = document.querySelector('.settings-button')!;
|
||||
const settingsDialog = document.getElementById('settings-dialog') as HTMLDialogElement;
|
||||
let initialSettingsHtml: string;
|
||||
|
||||
settingsDialog.addEventListener('click', (e) => {
|
||||
if (e.target === settingsDialog) {
|
||||
settingsDialog.close();
|
||||
settingsDialog.innerHTML = initialSettingsHtml;
|
||||
handleMenuBarClicked();
|
||||
handleTransferOfSession();
|
||||
}
|
||||
});
|
||||
|
||||
settingsButton.addEventListener('click', () => {
|
||||
initialSettingsHtml = settingsDialog.innerHTML;
|
||||
settingsDialog.showModal();
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
const handleMenuBarClicked = () => {
|
||||
const menuBar = document.getElementById('button-bar')!;
|
||||
menuBar.querySelectorAll('button').forEach((button, index)=>{
|
||||
button.addEventListener('click', ()=>{
|
||||
menuBar.querySelectorAll('button').forEach((btn)=>btn.classList.remove('active-btn'));
|
||||
button.classList.add('active-btn');
|
||||
|
||||
const sections: NodeListOf<HTMLDivElement> = document.querySelectorAll('#settings-dialog > div');
|
||||
sections.forEach((section, index)=>index >= 1 && (section.style.display = 'none'));
|
||||
(sections[index +1] as HTMLElement).style.display = 'block';
|
||||
});
|
||||
})
|
||||
|
||||
const transferSessionButton = document.getElementById('transferSessionButton')
|
||||
const codeInputField = document.getElementById('codeInput') as HTMLInputElement
|
||||
if (transferSessionButton) {
|
||||
transferSessionButton.addEventListener('click', ()=>{
|
||||
const code = codeInputField.value
|
||||
fetch("./tokenTransfer/"+code, {
|
||||
method: 'GET'
|
||||
})
|
||||
.then(res => res.json())
|
||||
.then(()=>{
|
||||
window.location.reload()
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
if (codeInputField) {
|
||||
codeInputField.addEventListener('input', (e)=>{
|
||||
if ((e.target as HTMLInputElement).value?.length === 36) {
|
||||
transferSessionButton?.removeAttribute('disabled');
|
||||
} else {
|
||||
transferSessionButton?.setAttribute('disabled', 'true');
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
window.addEventListener('load', () => {
|
||||
handleSettingsButtonClick();
|
||||
handleMenuBarClicked();
|
||||
handleTransferOfSession();
|
||||
});
|
||||
|
|
@ -1,3 +1,5 @@
|
|||
@import url("./src/components/buttons.css");
|
||||
|
||||
:root {
|
||||
--etherpad-color: #64d29b;
|
||||
--etherpad-color-dark: #4a5d5c;
|
||||
|
|
@ -100,7 +102,7 @@ h1 {
|
|||
border-radius: 5px;
|
||||
}
|
||||
|
||||
#button, #button:hover, #go2Name [type="submit"] {
|
||||
#button, #button:hover, #go2Name [type="submit"], #transferSessionButton {
|
||||
order: 2;
|
||||
margin-top: 0.5rem;
|
||||
line-height: 1.25rem;
|
||||
|
|
@ -115,10 +117,14 @@ h1 {
|
|||
cursor: pointer;
|
||||
}
|
||||
|
||||
#go2Name [type="submit"]:hover {
|
||||
#go2Name [type="submit"]:hover, #transferSessionButton {
|
||||
background-color: oklch(52.7% 0.154 150.069)
|
||||
}
|
||||
|
||||
#transferSessionButton:disabled {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
#button, #button:hover {
|
||||
order: 2;
|
||||
}
|
||||
|
|
@ -132,7 +138,7 @@ h1 {
|
|||
}
|
||||
|
||||
|
||||
#go2Name [type="submit"] {
|
||||
#go2Name [type="submit"], #transferSessionButton {
|
||||
display: block;
|
||||
background-color: var(--ep-color);
|
||||
color: white;
|
||||
|
|
@ -234,10 +240,25 @@ a, a:visited, a:hover, a:active {
|
|||
border-bottom-color: #e5e7eb;
|
||||
}
|
||||
|
||||
#settings-dialog::backdrop {
|
||||
background: rgba(0, 0, 0, 0.45);
|
||||
backdrop-filter: blur(2px);
|
||||
}
|
||||
|
||||
.card-content {
|
||||
padding: 1.5rem;
|
||||
}
|
||||
|
||||
#codeInput {
|
||||
height: auto;
|
||||
position: static;
|
||||
border: 1px solid var(--muted-border);
|
||||
border-radius: 0.375rem;
|
||||
font-size: 1rem;
|
||||
outline: none;
|
||||
transition: border 0.2s;
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
#inner {
|
||||
max-width: 100%;
|
||||
|
|
|
|||
|
|
@ -11,24 +11,25 @@ window.addEventListener('pageshow', (event) => {
|
|||
});
|
||||
|
||||
window.customStart = () => {
|
||||
document.getElementById('recent-pads').replaceChildren()
|
||||
const recentPadList = document.getElementById('recent-pads');
|
||||
if (recentPadList) {
|
||||
recentPadList.replaceChildren();
|
||||
}
|
||||
// define your javascript here
|
||||
// jquery is available - except index.js
|
||||
// you can load extra scripts with $.getScript http://api.jquery.com/jQuery.getScript/
|
||||
const divHoldingPlaceHolderLabel = document
|
||||
.querySelector('[data-l10n-id="index.placeholderPadEnter"]');
|
||||
.querySelector('[data-l10n-id="index.placeholderPadEnter"]');
|
||||
|
||||
const observer = new MutationObserver(() => {
|
||||
document.querySelector('#go2Name input')
|
||||
.setAttribute('placeholder', divHoldingPlaceHolderLabel.textContent);
|
||||
.setAttribute('placeholder', divHoldingPlaceHolderLabel.textContent);
|
||||
});
|
||||
|
||||
observer
|
||||
.observe(divHoldingPlaceHolderLabel, {childList: true, subtree: true, characterData: true});
|
||||
.observe(divHoldingPlaceHolderLabel, {childList: true, subtree: true, characterData: true});
|
||||
|
||||
|
||||
const recentPadList = document.getElementById('recent-pads');
|
||||
const parentStyle = recentPadList.parentElement.style;
|
||||
const recentPadListHeading = document.querySelector('[data-l10n-id="index.recentPads"]');
|
||||
const recentPadsFromLocalStorage = localStorage.getItem('recentPads');
|
||||
let recentPadListData = [];
|
||||
|
|
@ -38,18 +39,18 @@ window.customStart = () => {
|
|||
|
||||
// Remove duplicates based on pad name and sort by timestamp
|
||||
recentPadListData = recentPadListData.filter(
|
||||
(pad, index, self) =>
|
||||
index === self.findIndex((p) => p.name === pad.name)
|
||||
(pad, index, self) => index === self.findIndex((p) => p.name === pad.name)
|
||||
).sort((a, b) => new Date(a.timestamp) > new Date(b.timestamp) ? -1 : 1);
|
||||
|
||||
if (recentPadListData.length === 0) {
|
||||
if (recentPadList && recentPadListData.length === 0) {
|
||||
const parentStyle = recentPadList.parentElement.style;
|
||||
recentPadListHeading.setAttribute('data-l10n-id', 'index.recentPadsEmpty');
|
||||
parentStyle.display = 'flex';
|
||||
parentStyle.justifyContent = 'center';
|
||||
parentStyle.alignItems = 'center';
|
||||
parentStyle.maxHeight = '100%';
|
||||
recentPadList.remove();
|
||||
} else {
|
||||
} else if (recentPadList) {
|
||||
/**
|
||||
* @typedef {Object} Pad
|
||||
* @property {string} name
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ button, .btn
|
|||
width: auto;
|
||||
border: none;
|
||||
font-weight: bold;
|
||||
text-transform: uppercase;
|
||||
position: relative;
|
||||
background: none;
|
||||
cursor: pointer;
|
||||
|
|
@ -23,3 +22,36 @@ button, .btn
|
|||
color: #485365;
|
||||
color: var(--text-color);
|
||||
}
|
||||
|
||||
/* Sekundär (outlined) */
|
||||
.btn-secondary {
|
||||
background: transparent;
|
||||
color: #1f8a3e;
|
||||
border: 2px solid #1f8a3e;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.active-btn {
|
||||
text-underline-offset: 10px;
|
||||
text-decoration: underline;
|
||||
text-decoration-style: solid;
|
||||
text-decoration-thickness: 2px;
|
||||
text-decoration-color: #1f8a3e;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
||||
.btn-secondary:hover {
|
||||
background: #1f8a3e;
|
||||
color: #fff;
|
||||
box-shadow: inset 0 1px 0 rgba(255,255,255,0.08), 0 1px 2px rgba(0,0,0,0.12);
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.btn-secondary:disabled {
|
||||
background: transparent;
|
||||
color: #aaa;
|
||||
border-color: #aaa;
|
||||
box-shadow: none;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@
|
|||
#padname{
|
||||
max-width:280px;
|
||||
}
|
||||
form {
|
||||
#go2Name {
|
||||
height: 38px;
|
||||
background: #fff;
|
||||
border: 1px solid #bbb;
|
||||
|
|
@ -109,13 +109,32 @@
|
|||
display: none;
|
||||
}
|
||||
|
||||
@media only screen and (min-device-width: 320px) and (max-device-width: 800px) {
|
||||
.settings-button {
|
||||
color: inherit;
|
||||
border: none;
|
||||
padding: 0;
|
||||
font: inherit;
|
||||
cursor: pointer;
|
||||
outline: inherit;
|
||||
}
|
||||
|
||||
#settings-dialog {
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 4px 8px rgba(0,0,0,0.2);
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
@media (min-device-width: 320px) and (min-device-width: 800px) {
|
||||
body {
|
||||
background: #bbb;
|
||||
background: -webkit-linear-gradient(#aaa,#eee 60%) center fixed;
|
||||
background: -moz-linear-gradient(#aaa,#eee 60%) center fixed;
|
||||
background: -ms-linear-gradient(#aaa,#eee 60%) center fixed;
|
||||
}
|
||||
#settings-dialog {
|
||||
max-width: 50%;
|
||||
}
|
||||
#wrapper {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
|
@ -136,9 +155,54 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-file-text w-5 h-5 text-white"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"></path><path d="M14 2v4a2 2 0 0 0 2 2h4"></path><path d="M10 9H8"></path><path d="M16 13H8"></path><path d="M16 17H8"></path></svg>
|
||||
</div>
|
||||
<h1>Etherpad</h1>
|
||||
<div style="flex-grow: 1"></div>
|
||||
<button class="settings-button" aria-label="Settings">
|
||||
<svg width="30px" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="settings-icon">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z" />
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" />
|
||||
</svg>
|
||||
</button>
|
||||
</nav>
|
||||
|
||||
|
||||
<!-- Settings menu-->
|
||||
<dialog id="settings-dialog">
|
||||
<div id="button-bar">
|
||||
<button data-l10n-id="index.transferSessionTitle" class="active-btn"></button>
|
||||
<button data-l10n-id="index.receiveSessionTitle"></button>
|
||||
</div>
|
||||
<div>
|
||||
|
||||
<!-- Initial link button -->
|
||||
<h3 data-l10n-id="index.transferSession"></h3>
|
||||
<div data-l10n-id="index.transferSessionDescription"></div>
|
||||
<button type="button" class="btn-secondary" style="margin-top: 20px" data-l10n-id="index.transferSessionNow"></button>
|
||||
|
||||
<!-- Copy link button -->
|
||||
<div style="display: none" id="copy-link-section">
|
||||
<h3 data-l10n-id="index.copyLink"></h3>
|
||||
<div data-l10n-id="index.copyLinkDescription"></div>
|
||||
<button type="button" class="btn-secondary" style="margin-top: 20px" data-l10n-id="index.copyLinkButton"></button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="transfer-to-system-section" style="display: none; margin-top: 30px;">
|
||||
<h3 data-l10n-id="index.transferToSystem"></h3>
|
||||
<div data-l10n-id="index.transferToSystemDescription"></div>
|
||||
<p data-l10n-id="index.receiveSessionDescription"></p>
|
||||
<div>
|
||||
<label for="codeInput" data-l10n-id="index.code"></label>
|
||||
<input type="text" id="codeInput"/>
|
||||
</div>
|
||||
|
||||
<button data-l10n-id="index.transferSessionTitle" id="transferSessionButton" disabled></button>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
|
||||
</div>
|
||||
|
||||
</dialog>
|
||||
|
||||
<div class="body">
|
||||
<div class="mission-statement">
|
||||
<h2 data-l10n-id="index.createAndShareDocuments"></h2>
|
||||
|
|
|
|||
|
|
@ -3,4 +3,5 @@
|
|||
window.$ = window.jQuery = require('ep_etherpad-lite/static/js/rjquery').jQuery;
|
||||
require('ep_etherpad-lite/static/js/l10n')
|
||||
require('ep_etherpad-lite/static/js/index')
|
||||
require('ep_etherpad-lite/static/js/welcome')
|
||||
})()
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@
|
|||
"devDependencies": {
|
||||
"ep_etherpad-lite": "workspace:../src",
|
||||
"typescript": "^5.9.3",
|
||||
"vite": "npm:rolldown-vite@latest"
|
||||
"vite": "npm:rolldown-vite@7.2.10"
|
||||
},
|
||||
"overrides": {
|
||||
"vite": "npm:rolldown-vite@latest"
|
||||
"vite": "npm:rolldown-vite@7.2.10"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,9 +5,6 @@ import { defineConfig } from 'vite'
|
|||
export default defineConfig({
|
||||
base: '/views/',
|
||||
build: {
|
||||
commonjsOptions:{
|
||||
transformMixedEsModules: true,
|
||||
},
|
||||
outDir: resolve(__dirname, '../src/static/oidc'),
|
||||
rolldownOptions: {
|
||||
input: {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue