mirror of
https://github.com/wekan/wekan.git
synced 2026-11-08 21:44:59 -05:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8572cbd761 | ||
|
|
1c0b91c5f4 | ||
|
|
2ebefdd0bf | ||
|
|
29f1384945 | ||
|
|
334e569fda | ||
|
|
2d4170a9bf | ||
|
|
6b2759f97d | ||
|
|
adf4312e5a | ||
|
|
b1707b8691 | ||
|
|
25dff3f2da | ||
|
|
bc88c0dfc2 | ||
|
|
1ca2dfd1b1 | ||
|
|
bdb9274485 | ||
|
|
14f9ac39ad | ||
|
|
d4b52f7de9 | ||
|
|
bdc65ec6f4 | ||
|
|
7fb31cecd5 | ||
|
|
317c82a9f0 | ||
|
|
9b5c89d235 | ||
|
|
c23e190e8e | ||
|
|
4a73371499 | ||
|
|
6f8af55489 | ||
|
|
2a05f62bf9 | ||
|
|
d6eb1eb76f | ||
|
|
27542f3a51 | ||
|
|
0328e70d5f | ||
|
|
c46932ee30 | ||
|
|
c7408ad8d1 | ||
|
|
05dc8f8f93 | ||
|
|
aea8c285c2 | ||
|
|
a859137971 | ||
|
|
08ebad0fe4 | ||
|
|
d54ebfa0e1 | ||
|
|
304a007d07 | ||
|
|
b6b58c9d95 | ||
|
|
7f0c42cca5 | ||
|
|
9508d46ebd | ||
|
|
bcbf4771ea | ||
|
|
9da5ec25c6 | ||
|
|
028b404377 | ||
|
|
8da0f34ee6 | ||
|
|
cac2628b19 | ||
|
|
9c69530256 | ||
|
|
6e108358d7 | ||
|
|
87f592c67f | ||
|
|
fc95abd587 | ||
|
|
ce3e51b147 | ||
|
|
bb48b23266 | ||
|
|
fdf00e06f5 | ||
|
|
950b246da8 | ||
|
|
6ac0df8448 | ||
|
|
80ae3a18a8 | ||
|
|
972bfb9677 | ||
|
|
b1149e4d6e | ||
|
|
3cd2ba847b | ||
|
|
8bf869654c | ||
|
|
3b98f862bc |
No files matched your search
@@ -38,7 +38,7 @@ jobs:
|
||||
# https://github.com/docker/login-action
|
||||
- name: Log into registry ${{ env.REGISTRY }}
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2
|
||||
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
|
||||
@@ -60,12 +60,12 @@ jobs:
|
||||
echo "GHEOF" >> $GITHUB_OUTPUT
|
||||
|
||||
# ─── 2. Build amd64 bundle (full Meteor 3 build) ────────────────────────────
|
||||
# Meteor 3.4 installer supports only: Linux x86_64, Linux aarch64, macOS, Windows.
|
||||
# Meteor 3.5-beta.7 installer supports only: Linux x86_64, Linux aarch64, macOS, Windows.
|
||||
# It explicitly rejects armhf, s390x, and ppc64le at install time.
|
||||
# Therefore the full Meteor build always runs here on x86_64.
|
||||
# All other Linux architectures then rebuild only the native npm modules
|
||||
# from this bundle (much faster than a full Meteor build).
|
||||
# Node.js version must match what Meteor 3.4 bundles: 22.22.2 (ABI 127).
|
||||
# Node.js version must match what Meteor 3.5-beta.7 bundles: 24.14.1 (ABI 143).
|
||||
build-amd64:
|
||||
needs: prepare
|
||||
runs-on: ubuntu-24.04
|
||||
@@ -76,14 +76,14 @@ jobs:
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Cache Meteor installation
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ~/.meteor
|
||||
key: meteor-${{ hashFiles('.meteor/release') }}-${{ hashFiles('.meteor/packages') }}
|
||||
restore-keys: meteor-
|
||||
|
||||
- name: Cache npm packages
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ~/.npm
|
||||
key: npm-${{ hashFiles('package-lock.json') }}
|
||||
@@ -93,11 +93,11 @@ jobs:
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y build-essential g++ make python3 curl wget zip unzip
|
||||
|
||||
# Pin to Node 22.22.2 — the exact version bundled by Meteor 3.4.
|
||||
# Pin to Node 24.14.1 — the exact version bundled by Meteor 3.5-beta.7.
|
||||
# Using the same version for build and npm rebuild ensures consistent native module ABI.
|
||||
- uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: '22.22.2'
|
||||
node-version: '24.14.1'
|
||||
|
||||
- name: Install Meteor
|
||||
run: |
|
||||
@@ -109,27 +109,22 @@ jobs:
|
||||
- name: Build WeKan bundle
|
||||
run: |
|
||||
rm -rf .build node_modules .meteor/local
|
||||
meteor npm install
|
||||
meteor build .build --directory --platforms=web.browser
|
||||
|
||||
- name: Install dependencies in bundle
|
||||
run: |
|
||||
cd .build/bundle/programs/server
|
||||
npm install
|
||||
(meteor update --npm 2>/dev/null || true) && meteor npm install
|
||||
meteor build .build --directory
|
||||
|
||||
- name: Create amd64 zip
|
||||
run: |
|
||||
cd .build
|
||||
zip -r wekan-${VERSION}-amd64.zip bundle
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: bundle-amd64
|
||||
path: .build/wekan-${{ needs.prepare.outputs.version }}-amd64.zip
|
||||
retention-days: 1
|
||||
|
||||
# ─── 3. Build arm64 bundle (rebuild native modules natively) ─────────────────
|
||||
# Meteor 3.4 does support Linux aarch64, but running a full Meteor build a
|
||||
# Meteor 3.5-beta.7 does support Linux aarch64, but running a full Meteor build a
|
||||
# second time would double the build time for the same result. npm rebuild on
|
||||
# the native arm64 GitHub Actions runner is much faster and produces the same
|
||||
# platform-specific native modules.
|
||||
@@ -147,16 +142,30 @@ jobs:
|
||||
|
||||
- uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: '22.22.2'
|
||||
node-version: '24.14.1'
|
||||
|
||||
- name: Download amd64 bundle
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: bundle-amd64
|
||||
|
||||
- name: Rebuild native modules for arm64
|
||||
run: |
|
||||
unzip wekan-${VERSION}-amd64.zip
|
||||
# Fix: bcrypt 5.0.1 (Meteor accounts-password) ships node-addon-api@3
|
||||
# which fails to compile on Node.js 24. Replace with bcrypt 6.0.0.
|
||||
BCRYPT_DIR="$(pwd)/bundle/programs/server/npm/node_modules/meteor/accounts-password/node_modules/bcrypt"
|
||||
if [ -d "$BCRYPT_DIR" ]; then
|
||||
rm -rf "$BCRYPT_DIR"
|
||||
TMP=$(mktemp -d)
|
||||
pushd "$TMP" > /dev/null
|
||||
npm pack bcrypt@6.0.0
|
||||
mkdir bcrypt && tar xzf bcrypt-*.tgz --strip-components=1 -C bcrypt
|
||||
cd bcrypt && npm install --ignore-scripts && cd ..
|
||||
cp -a bcrypt "$BCRYPT_DIR"
|
||||
popd > /dev/null
|
||||
rm -rf "$TMP"
|
||||
fi
|
||||
cd bundle/programs/server
|
||||
rm -rf node_modules
|
||||
npm install
|
||||
@@ -166,17 +175,17 @@ jobs:
|
||||
run: |
|
||||
zip -r wekan-${VERSION}-arm64.zip bundle
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: bundle-arm64
|
||||
path: wekan-${{ needs.prepare.outputs.version }}-arm64.zip
|
||||
retention-days: 1
|
||||
|
||||
# ─── 4. Build s390x bundle (rebuild native modules via QEMU container) ───────
|
||||
# Meteor 3.4 does NOT support s390x (installer exits with error on that arch).
|
||||
# Meteor 3.5-beta.7 does NOT support s390x (installer exits with error on that arch).
|
||||
# GitHub Actions has no native s390x runners.
|
||||
# Solution: QEMU emulation + node:22.22.2-slim (s390x variant) for npm rebuild.
|
||||
# node:22.22.2-slim is pinned to match Meteor 3.4's bundled Node.js version exactly.
|
||||
# Solution: QEMU emulation + node:24.14.1-slim (s390x variant) for npm rebuild.
|
||||
# node:24.14.1-slim is pinned to match Meteor 3.5-beta.7's bundled Node.js version exactly.
|
||||
build-s390x:
|
||||
needs: [prepare, build-amd64]
|
||||
runs-on: ubuntu-latest
|
||||
@@ -193,7 +202,7 @@ jobs:
|
||||
run: sudo apt-get update && sudo apt-get install -y unzip zip
|
||||
|
||||
- name: Download amd64 bundle
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: bundle-amd64
|
||||
|
||||
@@ -201,27 +210,41 @@ jobs:
|
||||
run: |
|
||||
unzip wekan-${VERSION}-amd64.zip
|
||||
rm -rf bundle/programs/server/node_modules
|
||||
# node:22.22.2-slim s390x — same Node.js version as Meteor 3.4 bundled
|
||||
# Fix: bcrypt 5.0.1 (Meteor accounts-password) ships node-addon-api@3
|
||||
# which fails to compile on Node.js 24. Replace with bcrypt 6.0.0.
|
||||
BCRYPT_DIR="$(pwd)/bundle/programs/server/npm/node_modules/meteor/accounts-password/node_modules/bcrypt"
|
||||
if [ -d "$BCRYPT_DIR" ]; then
|
||||
rm -rf "$BCRYPT_DIR"
|
||||
TMP=$(mktemp -d)
|
||||
pushd "$TMP" > /dev/null
|
||||
npm pack bcrypt@6.0.0
|
||||
mkdir bcrypt && tar xzf bcrypt-*.tgz --strip-components=1 -C bcrypt
|
||||
cd bcrypt && npm install --ignore-scripts && cd ..
|
||||
cp -a bcrypt "$BCRYPT_DIR"
|
||||
popd > /dev/null
|
||||
rm -rf "$TMP"
|
||||
fi
|
||||
# node:24.14.1-slim s390x — same Node.js version as Meteor 3.5-beta.7 bundled
|
||||
docker run --rm --platform linux/s390x \
|
||||
-v "$(pwd)/bundle:/bundle" \
|
||||
-w /bundle/programs/server \
|
||||
node:22.22.2-slim \
|
||||
node:24.14.1-slim \
|
||||
sh -c "apt-get update -qq && apt-get install -y -q build-essential python3 && npm install"
|
||||
|
||||
- name: Clean up and create s390x zip
|
||||
run: |
|
||||
zip -r wekan-${VERSION}-s390x.zip bundle
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: bundle-s390x
|
||||
path: wekan-${{ needs.prepare.outputs.version }}-s390x.zip
|
||||
retention-days: 1
|
||||
|
||||
# ─── 4b. Build ppc64le bundle (rebuild native modules via QEMU container) ────
|
||||
# Meteor 3.4 does NOT support ppc64le (installer exits with error on that arch).
|
||||
# Meteor 3.5-beta.7 does NOT support ppc64le (installer exits with error on that arch).
|
||||
# GitHub Actions has no native ppc64le runners.
|
||||
# Solution: QEMU emulation + node:22.22.2-slim (ppc64le variant) for npm rebuild.
|
||||
# Solution: QEMU emulation + node:24.14.1-slim (ppc64le variant) for npm rebuild.
|
||||
build-ppc64le:
|
||||
needs: [prepare, build-amd64]
|
||||
runs-on: ubuntu-latest
|
||||
@@ -238,7 +261,7 @@ jobs:
|
||||
run: sudo apt-get update && sudo apt-get install -y unzip zip
|
||||
|
||||
- name: Download amd64 bundle
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: bundle-amd64
|
||||
|
||||
@@ -246,27 +269,41 @@ jobs:
|
||||
run: |
|
||||
unzip wekan-${VERSION}-amd64.zip
|
||||
rm -rf bundle/programs/server/node_modules
|
||||
# node:22.22.2-slim ppc64le — same Node.js version as Meteor 3.4 bundled
|
||||
# Fix: bcrypt 5.0.1 (Meteor accounts-password) ships node-addon-api@3
|
||||
# which fails to compile on Node.js 24. Replace with bcrypt 6.0.0.
|
||||
BCRYPT_DIR="$(pwd)/bundle/programs/server/npm/node_modules/meteor/accounts-password/node_modules/bcrypt"
|
||||
if [ -d "$BCRYPT_DIR" ]; then
|
||||
rm -rf "$BCRYPT_DIR"
|
||||
TMP=$(mktemp -d)
|
||||
pushd "$TMP" > /dev/null
|
||||
npm pack bcrypt@6.0.0
|
||||
mkdir bcrypt && tar xzf bcrypt-*.tgz --strip-components=1 -C bcrypt
|
||||
cd bcrypt && npm install --ignore-scripts && cd ..
|
||||
cp -a bcrypt "$BCRYPT_DIR"
|
||||
popd > /dev/null
|
||||
rm -rf "$TMP"
|
||||
fi
|
||||
# node:24.14.1-slim ppc64le — same Node.js version as Meteor 3.5-beta.7 bundled
|
||||
docker run --rm --platform linux/ppc64le \
|
||||
-v "$(pwd)/bundle:/bundle" \
|
||||
-w /bundle/programs/server \
|
||||
node:22.22.2-slim \
|
||||
node:24.14.1-slim \
|
||||
sh -c "apt-get update -qq && apt-get install -y -q build-essential python3 && npm install"
|
||||
|
||||
- name: Clean up and create ppc64le zip
|
||||
run: |
|
||||
zip -r wekan-${VERSION}-ppc64le.zip bundle
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: bundle-ppc64le
|
||||
path: wekan-${{ needs.prepare.outputs.version }}-ppc64le.zip
|
||||
retention-days: 1
|
||||
|
||||
# ─── 4c. Build armhf bundle (rebuild native modules via QEMU container) ──────
|
||||
# Meteor 3.4 does NOT support arm/v7 (armhf). Installer explicitly rejects it.
|
||||
# Meteor 3.5-beta.7 does NOT support arm/v7 (armhf). Installer explicitly rejects it.
|
||||
# GitHub Actions has no native arm/v7 runners.
|
||||
# Solution: QEMU emulation + node:22.22.2-slim (arm/v7 variant) for npm rebuild.
|
||||
# Solution: QEMU emulation + node:24.14.1-slim (arm/v7 variant) for npm rebuild.
|
||||
# arm/v7 under QEMU is slowest — timeout set to 120 min.
|
||||
build-armhf:
|
||||
needs: [prepare, build-amd64]
|
||||
@@ -284,7 +321,7 @@ jobs:
|
||||
run: sudo apt-get update && sudo apt-get install -y unzip zip
|
||||
|
||||
- name: Download amd64 bundle
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: bundle-amd64
|
||||
|
||||
@@ -292,18 +329,32 @@ jobs:
|
||||
run: |
|
||||
unzip wekan-${VERSION}-amd64.zip
|
||||
rm -rf bundle/programs/server/node_modules
|
||||
# node:22.22.2-slim arm/v7 — same Node.js version as Meteor 3.4 bundled
|
||||
# Fix: bcrypt 5.0.1 (Meteor accounts-password) ships node-addon-api@3
|
||||
# which fails to compile on Node.js 24. Replace with bcrypt 6.0.0.
|
||||
BCRYPT_DIR="$(pwd)/bundle/programs/server/npm/node_modules/meteor/accounts-password/node_modules/bcrypt"
|
||||
if [ -d "$BCRYPT_DIR" ]; then
|
||||
rm -rf "$BCRYPT_DIR"
|
||||
TMP=$(mktemp -d)
|
||||
pushd "$TMP" > /dev/null
|
||||
npm pack bcrypt@6.0.0
|
||||
mkdir bcrypt && tar xzf bcrypt-*.tgz --strip-components=1 -C bcrypt
|
||||
cd bcrypt && npm install --ignore-scripts && cd ..
|
||||
cp -a bcrypt "$BCRYPT_DIR"
|
||||
popd > /dev/null
|
||||
rm -rf "$TMP"
|
||||
fi
|
||||
# node:24.14.1-slim arm/v7 — same Node.js version as Meteor 3.5-beta.7 bundled
|
||||
docker run --rm --platform linux/arm/v7 \
|
||||
-v "$(pwd)/bundle:/bundle" \
|
||||
-w /bundle/programs/server \
|
||||
node:22.22.2-slim \
|
||||
node:24.14.1-slim \
|
||||
sh -c "apt-get update -qq && apt-get install -y -q build-essential python3 && npm install"
|
||||
|
||||
- name: Clean up and create armhf zip
|
||||
run: |
|
||||
zip -r wekan-${VERSION}-armhf.zip bundle
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: bundle-armhf
|
||||
path: wekan-${{ needs.prepare.outputs.version }}-armhf.zip
|
||||
@@ -319,24 +370,43 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: '22.22.2'
|
||||
node-version: '24.14.1'
|
||||
|
||||
- name: Install node-gyp and build tools
|
||||
run: |
|
||||
npm install -g windows-build-tools --vs2019 2>$null; exit 0
|
||||
## With Node 24 these are already preinstalled at GitHub Windows runners
|
||||
#- name: Install node-gyp and build tools
|
||||
# run: |
|
||||
# npm install -g windows-build-tools --vs2019 2>$null; exit 0
|
||||
|
||||
- name: Install 7-zip
|
||||
run: choco install -y 7zip
|
||||
|
||||
- name: Download amd64 bundle
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: bundle-amd64
|
||||
|
||||
- name: Fix bcrypt for Node.js 24
|
||||
shell: bash
|
||||
run: |
|
||||
7z x wekan-${VERSION}-amd64.zip
|
||||
# Fix: bcrypt 5.0.1 (Meteor accounts-password) ships node-addon-api@3
|
||||
# which fails to compile on Node.js 24. Replace with bcrypt 6.0.0.
|
||||
BCRYPT_DIR="$(pwd)/bundle/programs/server/npm/node_modules/meteor/accounts-password/node_modules/bcrypt"
|
||||
if [ -d "$BCRYPT_DIR" ]; then
|
||||
rm -rf "$BCRYPT_DIR"
|
||||
TMP=$(mktemp -d)
|
||||
pushd "$TMP" > /dev/null
|
||||
npm pack bcrypt@6.0.0
|
||||
mkdir bcrypt && tar xzf bcrypt-*.tgz --strip-components=1 -C bcrypt
|
||||
cd bcrypt && npm install --ignore-scripts && cd ..
|
||||
cp -r bcrypt "$BCRYPT_DIR"
|
||||
popd > /dev/null
|
||||
rm -rf "$TMP"
|
||||
fi
|
||||
|
||||
- name: Rebuild native modules for Windows
|
||||
shell: cmd
|
||||
run: |
|
||||
7z x wekan-%VERSION%-amd64.zip
|
||||
cd bundle\programs\server
|
||||
rmdir /s /q node_modules
|
||||
npm install
|
||||
@@ -346,7 +416,7 @@ jobs:
|
||||
shell: cmd
|
||||
run: 7z a wekan-%VERSION%-win64.zip bundle
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: bundle-win64
|
||||
path: wekan-${{ needs.prepare.outputs.version }}-win64.zip
|
||||
@@ -360,7 +430,7 @@ jobs:
|
||||
VERSION: ${{ needs.prepare.outputs.version }}
|
||||
steps:
|
||||
- name: Download all bundles
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
pattern: bundle-*
|
||||
merge-multiple: true
|
||||
@@ -456,7 +526,7 @@ jobs:
|
||||
# --launchpad-accept-public-upload
|
||||
#
|
||||
# - name: Upload all snap files as artifacts
|
||||
# uses: actions/upload-artifact@v4
|
||||
# uses: actions/upload-artifact@v7
|
||||
# with:
|
||||
# name: snaps-all-arches
|
||||
# path: "*.snap"
|
||||
|
||||
@@ -127,12 +127,12 @@ jobs:
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: '22.22.2'
|
||||
node-version: '24.14.1'
|
||||
|
||||
- name: Setup meteor
|
||||
uses: meteorengineer/setup-meteor@v3
|
||||
with:
|
||||
meteor-release: '3.4'
|
||||
meteor-release: '3.5-beta.7'
|
||||
|
||||
- name: Install NPM Dependencies
|
||||
run: meteor npm install
|
||||
|
||||
+20
-20
@@ -3,12 +3,12 @@
|
||||
# 'meteor add' and 'meteor remove' will edit this file for you,
|
||||
# but you can also edit it by hand.
|
||||
|
||||
meteor-base
|
||||
meteor-base@1.5.2
|
||||
|
||||
# Build system
|
||||
ecmascript
|
||||
standard-minifier-js
|
||||
rspack
|
||||
ecmascript@0.17.0
|
||||
standard-minifier-js@3.2.0
|
||||
rspack@1.0.0
|
||||
|
||||
blaze@3.0.2
|
||||
|
||||
@@ -16,7 +16,7 @@ blaze@3.0.2
|
||||
aldeed:collection2
|
||||
aldeed:schema-index@4.0.0-beta.5
|
||||
reywood:publish-composite
|
||||
mongo
|
||||
mongo@2.3.0-beta350.7
|
||||
|
||||
# The holy trifecta - this is a replacement for subs-manager
|
||||
# for IndexedDB persistence and auto-sync
|
||||
@@ -27,7 +27,7 @@ jam:method
|
||||
jam:pub-sub
|
||||
|
||||
# Account system
|
||||
accounts-password
|
||||
accounts-password@3.2.3-beta350.7
|
||||
communitypackages:core
|
||||
communitypackages:unstyled
|
||||
communitypackages:flow-routing
|
||||
@@ -41,19 +41,19 @@ wekan-oidc
|
||||
wekan-accounts-oidc
|
||||
|
||||
# Utilities
|
||||
check
|
||||
random
|
||||
reactive-dict
|
||||
session
|
||||
tracker
|
||||
audit-argument-checks
|
||||
check@1.5.0
|
||||
random@1.2.2
|
||||
reactive-dict@1.3.2
|
||||
session@1.2.2
|
||||
tracker@1.3.4
|
||||
audit-argument-checks@1.0.8
|
||||
|
||||
# UI components
|
||||
ostrio:i18n
|
||||
reactive-var
|
||||
shell-server
|
||||
email
|
||||
dynamic-import
|
||||
reactive-var@1.0.13
|
||||
shell-server@0.7.0
|
||||
email@3.2.0-beta350.7
|
||||
dynamic-import@0.7.4
|
||||
wekan-markdown
|
||||
quave:synced-cron
|
||||
ostrio:cookies
|
||||
@@ -61,9 +61,9 @@ ostrio:files
|
||||
# lmieulet:meteor-coverage
|
||||
meteortesting:mocha
|
||||
matb33:collection-hooks
|
||||
service-configuration
|
||||
minifier-css
|
||||
ejson
|
||||
logging
|
||||
service-configuration@1.3.5
|
||||
minifier-css@2.0.1
|
||||
ejson@1.2.0-beta350.7
|
||||
logging@1.3.6
|
||||
wekan-fullcalendar
|
||||
wekan-fontawesome
|
||||
+1
-1
@@ -1 +1 @@
|
||||
METEOR@3.4
|
||||
METEOR@3.5-beta.7
|
||||
+12
-12
@@ -1,6 +1,6 @@
|
||||
accounts-base@3.2.0
|
||||
accounts-base@3.3.0-beta350.7
|
||||
accounts-oauth@1.4.6
|
||||
accounts-password@3.2.2
|
||||
accounts-password@3.2.3-beta350.7
|
||||
aldeed:collection2@4.1.5
|
||||
aldeed:schema-index@4.0.0
|
||||
aldeed:simple-schema@1.13.1
|
||||
@@ -23,18 +23,18 @@ communitypackages:flow-routing@2.1.0
|
||||
communitypackages:unstyled@2.0.1
|
||||
core-runtime@1.0.0
|
||||
ddp@1.4.2
|
||||
ddp-client@3.1.1
|
||||
ddp-client@3.2.0-beta350.7
|
||||
ddp-common@1.4.4
|
||||
ddp-rate-limiter@1.2.2
|
||||
ddp-server@3.1.2
|
||||
ddp-rate-limiter@1.3.0-beta350.7
|
||||
ddp-server@3.2.0-beta350.7
|
||||
diff-sequence@1.1.3
|
||||
dynamic-import@0.7.4
|
||||
ecmascript@0.17.0
|
||||
ecmascript-runtime@0.8.3
|
||||
ecmascript-runtime-client@0.12.3
|
||||
ecmascript-runtime-server@0.11.1
|
||||
ejson@1.1.5
|
||||
email@3.1.2
|
||||
ejson@1.2.0-beta350.7
|
||||
email@3.2.0-beta350.7
|
||||
es5-shim@4.8.1
|
||||
facts-base@1.0.2
|
||||
fetch@0.1.6
|
||||
@@ -60,11 +60,11 @@ meteortesting:mocha@2.1.0
|
||||
meteortesting:mocha-core@8.0.1
|
||||
minifier-css@2.0.1
|
||||
minifier-js@3.1.0
|
||||
minimongo@2.0.5
|
||||
minimongo@2.1.0-beta350.7
|
||||
modern-browsers@0.2.3
|
||||
modules@0.20.3
|
||||
modules-runtime@0.13.2
|
||||
mongo@2.2.0
|
||||
mongo@2.3.0-beta350.7
|
||||
mongo-decimal@0.2.0
|
||||
mongo-dev-server@1.1.1
|
||||
mongo-id@1.0.9
|
||||
@@ -82,7 +82,7 @@ promise@1.0.0
|
||||
quave:synced-cron@2.4.0
|
||||
raix:eventemitter@1.0.0
|
||||
random@1.2.2
|
||||
rate-limit@1.1.2
|
||||
rate-limit@1.2.0-beta350.7
|
||||
react-fast-refresh@0.3.0
|
||||
reactive-dict@1.3.2
|
||||
reactive-var@1.0.13
|
||||
@@ -95,7 +95,7 @@ service-configuration@1.3.5
|
||||
session@1.2.2
|
||||
sha@1.0.10
|
||||
shell-server@0.7.0
|
||||
socket-stream-client@0.6.1
|
||||
socket-stream-client@0.7.0-beta350.7
|
||||
spacebars@2.0.0
|
||||
spacebars-compiler@2.0.0
|
||||
standard-minifier-js@3.2.0
|
||||
@@ -107,7 +107,7 @@ tools-core@1.0.0
|
||||
tracker@1.3.4
|
||||
typescript@5.9.3
|
||||
url@1.3.5
|
||||
webapp@2.1.0
|
||||
webapp@2.2.0-beta350.7
|
||||
webapp-hashing@1.1.2
|
||||
wekan-accounts-cas@0.2.0
|
||||
wekan-accounts-lockout@1.1.0
|
||||
|
||||
+111
-11
@@ -2,6 +2,7 @@
|
||||
|
||||
Newest WeKan at these platforms:
|
||||
|
||||
- [Upgrade WeKan](https://wekan.fi/upgrade/)
|
||||
- [bundle zip at releases](https://github.com/wekan/wekan/releases), docs at
|
||||
- [Linux amd64, arm64, s390x](https://github.com/wekan/wekan/blob/main/docs/Platforms/FOSS/RaspberryPi/Raspberry-Pi.md)
|
||||
- [Windows amd64, works also at Windows arm64](https://github.com/wekan/wekan/blob/main/docs/Platforms/Propietary/Windows/Offline.md)
|
||||
@@ -11,24 +12,123 @@ Newest WeKan at these platforms:
|
||||
- Docker amd64/arm64/s390x
|
||||
- Kubernetes Docker amd64
|
||||
- Bitnami MongoDB Docker images do not exist anymore. [MongoDump/MongoRestore to groundhog2k MongoDB images](https://github.com/wekan/charts/issues/45)
|
||||
- Fixing other platforms In Progress.
|
||||
|
||||
Fixing other platforms In Progress.
|
||||
Versions:
|
||||
|
||||
- [Node.js 22.x](https://nodejs.org/dist/latest-v22.x/)
|
||||
- MongoDB 6.x and 7.x, or [FerretDB2/PostgreSQL](https://github.com/wekan/wekan/blob/main/docs/Databases/FerretDB2-PostgreSQL.md)
|
||||
- WeKan 8.75 and newer uses Meteor 3.5-beta.7, [Node.js 24.x](https://nodejs.org/dist/latest-v24.x/),
|
||||
MongoDB 7.x (or 6.x), or [FerretDB2/PostgreSQL](https://github.com/wekan/wekan/blob/main/docs/Databases/FerretDB2-PostgreSQL.md)
|
||||
- WeKan 8.43 upgraded to Meteor 3.x, huge thanks to harryadel:
|
||||
- https://harryadel.com/dev-diary-24/
|
||||
- https://harryadel.com/dev-diary-25/
|
||||
- https://harryadel.com/dev-diary-26/
|
||||
- WeKan 8.00-8.24 used Colorful Unicode Emoji Icons, versions before and after use mostly Font Awesome 4.7 icons.
|
||||
- WeKan 8.00-8.06 had wrong raw database directory setting /var/snap/wekan/common/wekan and some cards were not visible,
|
||||
it was fixed at WeKan 8.07 where database directory is back to /var/snap/wekan/common and all cards are visible.
|
||||
|
||||
[Upgrade WeKan](https://wekan.fi/upgrade/)
|
||||
# v8.80 2026-04-10 WeKan ® release
|
||||
|
||||
WeKan 8.00-8.06 had wrong raw database directory setting /var/snap/wekan/common/wekan and some cards were not visible.
|
||||
Those are fixed at WeKan 8.07 where database directory is back to /var/snap/wekan/common and all cards are visible.
|
||||
This release fixes the following bugs:
|
||||
|
||||
WeKan 8.00-8.24 used Colorful Unicode Emoji Icons, versions before and after use mostly Font Awesome 4.7 icons.
|
||||
- [Try to fix GitHub Actions builds with custom newer bcrypt](https://github.com/wekan/wekan/commit/2ebefdd0bf1cf482548319e130baf2b633ba259b).
|
||||
Thanks to xet7.
|
||||
|
||||
WeKan 8.43 and newer uses Meteor 3.x, Node.js 22.x and MongoDB 7.x, huge thanks to harryadel:
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
- https://harryadel.com/dev-diary-24/
|
||||
- https://harryadel.com/dev-diary-25/
|
||||
- https://harryadel.com/dev-diary-26/
|
||||
# v8.79 2026-04-09 WeKan ® release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Fix 8.78: WeKan build Error: Could not find rspack config. Using MongoDB Change Streams
|
||||
at start-wekan.sh start-wekan.bat bundle, docker-compose.yml and Snap Candidate](https://github.com/wekan/wekan/commit/2d4170a9bfc58b8e6504abf122aea505e55802ef).
|
||||
Thanks to nachocodoner and xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v8.78 2026-04-09 WeKan ® release
|
||||
|
||||
This release adds the the following updates:
|
||||
|
||||
- Upgraded to Meteor 3.5-beta.7 and Node.js 24.14.1. Now prefers MongoDB Change Streams at Snap Candidate and docker-compose.yml.
|
||||
[Part 1](https://github.com/wekan/wekan/commit/14f9ac39ad93db4f7c06721f1efd4c18e53cc5f8),
|
||||
[Part 2](https://github.com/wekan/wekan/commit/b1707b8691d0ba5f355e78e250765c8a7657c3d7).
|
||||
Thanks to Meteor developers.
|
||||
- [Enhance translations with new key:value pairs](https://github.com/wekan/wekan/pull/6259).
|
||||
Thanks to KhaoulaMaleh.
|
||||
- [Refine translations](https://github.com/wekan/wekan/pull/6261).
|
||||
Thanks to KhaoulaMaleh.
|
||||
- [Updated to Node.js 24.x at release scripts](https://github.com/wekan/wekan/commit/bdb92744854cc211866631746c63d748d4a93cfa).
|
||||
Thanks to xet7.
|
||||
- [Fix GitHub Actions builds](https://github.com/wekan/wekan/commit/bc88c0dfc2742154e94861201d239bc4b3c51cef).
|
||||
Thanks to xet7.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Fixed Card settings checkboxes](https://github.com/wekan/wekan/pull/6260).
|
||||
Thanks to KhaoulaMaleh.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v8.74 2026-04-08 WeKan ® release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Fix can not save Card Data. Part 2](https://github.com/wekan/wekan/commit/0328e70d5f4a277722635e3fd9ea78312d1359cf).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v8.73 2026-04-07 WeKan ® release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Fix Link to Windows release doesn't work](https://github.com/wekan/wekan/commit/9c695302565073b971a3521c0a94a380641cc436).
|
||||
Thanks to hmeunier95 and xet7.
|
||||
- [Fix 8.72 Bug: Can not save Card Date](https://github.com/wekan/wekan/commit/8da0f34ee6ca66884ab8a2dcdf1a724a0c9fcc81).
|
||||
Thanks to xet7.
|
||||
- [Removed exclude-archs from rebuild-wekan.sh, it is not necessary anymore](https://github.com/wekan/wekan/commit/028b404377651d34e334b048ecc960d3ff5b2eab).
|
||||
Thanks to xet7.
|
||||
- [Fix 8.72 Bug: LDAP login does not work. ReactiveCache is not defined](https://github.com/wekan/wekan/commit/bcbf4771ea88fb617ddc44650c8ac139b0cfc998).
|
||||
Thanks to poc-sm and xet7.
|
||||
- [Fix Error in choosing member or assignee in a card](https://github.com/wekan/wekan/commit/7f0c42cca555dd2dca04d3b6413c0080ea75e96e).
|
||||
Thanks to hmeunier95 and xet7.
|
||||
- [Fix Search All Boards result opened card missing Copy Card Link etc that can be used to open correct card](https://github.com/wekan/wekan/commit/304a007d078c04dac7de5074a856c4f0cc2c0aa7).
|
||||
Thanks bcook-konza and xet7.
|
||||
- [Fix Checklists add and Subtasks reorder. Fix Board Activity part 1](https://github.com/wekan/wekan/commit/08ebad0fe4a2b8a7b93d75a9a9c2317ce9374fea).
|
||||
Thanks bcook-konza and xet7.
|
||||
- [Fix Change list inside or card](https://github.com/wekan/wekan/commit/aea8c285c246b490ac259ceafe7d9f733681c20f).
|
||||
Thanks to mimZD and xet7.
|
||||
- [Fix board and card activities. Part 2](https://github.com/wekan/wekan/commit/c7408ad8d147f36cfdbb71089af688bef91c3ecf).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v8.72 2026-04-07 WeKan ® release
|
||||
|
||||
This release adds the following new features and fixes:
|
||||
|
||||
- [Fix Impersonate User. Show/Edit Avatar at Admin Panel/People/People](https://github.com/wekan/wekan/commit/3ac7c9057e1e53da9f285149ce832ad430b3bc30).
|
||||
Thanks to ahlgrimma, DnT1mmer, robbagithub, norrig and xet7.
|
||||
|
||||
and adds the following updates:
|
||||
|
||||
- [Bump actions/download-artifact from 4 to 8](https://github.com/wekan/wekan/pull/6247).
|
||||
Thanks to dependabot.
|
||||
- [Bump actions/upload-artifact from 4 to 7](https://github.com/wekan/wekan/pull/6248).
|
||||
Thanks to dependabot.
|
||||
- [Bump actions/cache from 4 to 5](https://github.com/wekan/wekan/pull/6249).
|
||||
Thanks to dependabot.
|
||||
- [Bump docker/login-action from 4.0.0 to 4.1.0](https://github.com/wekan/wekan/pull/6250).
|
||||
Thanks to dependabot.
|
||||
- [Updated release scripts](https://github.com/wekan/wekan/commit/87f592c67ffb1962ec8acb0d1676b8df6ac42a5d).
|
||||
Thanks to xet7.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Fix Admin Panel / Version not showing name of MongoDB storage engine and status of MongoDB Oplog enabled](https://github.com/wekan/wekan/commit/3b98f862bcda3e8a9b0d0131b91cdfa59986c2d8).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v8.71 2026-04-06 WeKan ® release
|
||||
|
||||
|
||||
+4
-5
@@ -7,18 +7,17 @@ LABEL org.opencontainers.image.source="https://github.com/wekan/wekan"
|
||||
# TARGETARCH and TARGETVARIANT are automatically provided by Docker Buildx
|
||||
ARG TARGETARCH
|
||||
ARG TARGETVARIANT
|
||||
ARG VERSION=8.71
|
||||
ARG VERSION=8.80
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
ENV BUILD_DEPS="apt-utils gnupg wget bzip2 g++ curl libarchive-tools build-essential git ca-certificates python3 unzip"
|
||||
|
||||
ENV \
|
||||
DEBUG=false \
|
||||
NODE_VERSION=v22.22.2 \
|
||||
METEOR_RELEASE=METEOR@3.4 \
|
||||
NODE_VERSION=v24.14.1 \
|
||||
METEOR_RELEASE=METEOR@3.5-beta.7 \
|
||||
USE_EDGE=false \
|
||||
METEOR_EDGE=1.5-beta.17 \
|
||||
NPM_VERSION=10.9.2 \
|
||||
NPM_VERSION=11.11.0 \
|
||||
SRC_PATH=./ \
|
||||
WITH_API=true \
|
||||
MONGO_OPLOG_URL="" \
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
|
||||
appVersion: "v8.71.0"
|
||||
appVersion: "v8.80.0"
|
||||
files:
|
||||
userUploads:
|
||||
- README.md
|
||||
|
||||
@@ -9,11 +9,11 @@ template(name="activities")
|
||||
+cardActivities
|
||||
|
||||
template(name="boardActivities")
|
||||
each activityData in currentBoard.activities
|
||||
each activityData in boardActivitiesList
|
||||
+activity(activity=activityData card=card mode=mode)
|
||||
|
||||
template(name="cardActivities")
|
||||
each activityData in activities
|
||||
each activityData in cardActivitiesList
|
||||
+activity(activity=activityData card=card mode=mode)
|
||||
|
||||
template(name="activity")
|
||||
|
||||
@@ -76,7 +76,9 @@ function _showActivities(data) {
|
||||
const currentCard = Utils.getCurrentCard();
|
||||
ret = currentCard.showActivities ?? false;
|
||||
} else if (mode === 'card') {
|
||||
ret = data?.card?.showActivities ?? false;
|
||||
// For card mode, get showActivities from data context or fallback to current card
|
||||
const card = data?.card || Utils.getCurrentCard();
|
||||
ret = card?.showActivities ?? false;
|
||||
} else {
|
||||
ret = Utils.getCurrentBoard().showActivities ?? false;
|
||||
}
|
||||
@@ -85,8 +87,31 @@ function _showActivities(data) {
|
||||
}
|
||||
|
||||
Template.activities.helpers({
|
||||
showActivities() {
|
||||
const data = Template.currentData();
|
||||
return _showActivities(data);
|
||||
},
|
||||
|
||||
activities() {
|
||||
return this.card.activities();
|
||||
const activities = this.card?.activities?.();
|
||||
return activities || [];
|
||||
},
|
||||
});
|
||||
|
||||
Template.boardActivities.helpers({
|
||||
boardActivitiesList() {
|
||||
const board = Utils.getCurrentBoard();
|
||||
const activities = board?.activities?.();
|
||||
return activities || [];
|
||||
},
|
||||
});
|
||||
|
||||
Template.cardActivities.helpers({
|
||||
cardActivitiesList() {
|
||||
const data = Template.currentData();
|
||||
const card = data?.card;
|
||||
const activities = card?.activities?.();
|
||||
return activities || [];
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ Template.editCardReceivedDatePopup.helpers(datePickerHelpers());
|
||||
|
||||
Template.editCardReceivedDatePopup.events(datePickerEvents({
|
||||
storeDate(date) {
|
||||
this.datePicker.card.setReceived(formatDateTime(date));
|
||||
this.datePicker.card.setReceived(date);
|
||||
},
|
||||
deleteDate() {
|
||||
this.datePicker.card.unsetReceived();
|
||||
@@ -72,7 +72,7 @@ Template.editCardStartDatePopup.helpers(datePickerHelpers());
|
||||
|
||||
Template.editCardStartDatePopup.events(datePickerEvents({
|
||||
storeDate(date) {
|
||||
this.datePicker.card.setStart(formatDateTime(date));
|
||||
this.datePicker.card.setStart(date);
|
||||
},
|
||||
deleteDate() {
|
||||
this.datePicker.card.unsetStart();
|
||||
@@ -96,7 +96,7 @@ Template.editCardDueDatePopup.helpers(datePickerHelpers());
|
||||
|
||||
Template.editCardDueDatePopup.events(datePickerEvents({
|
||||
storeDate(date) {
|
||||
this.datePicker.card.setDue(formatDateTime(date));
|
||||
this.datePicker.card.setDue(date);
|
||||
},
|
||||
deleteDate() {
|
||||
this.datePicker.card.unsetDue();
|
||||
@@ -120,7 +120,7 @@ Template.editCardEndDatePopup.helpers(datePickerHelpers());
|
||||
|
||||
Template.editCardEndDatePopup.events(datePickerEvents({
|
||||
storeDate(date) {
|
||||
this.datePicker.card.setEnd(formatDateTime(date));
|
||||
this.datePicker.card.setEnd(date);
|
||||
},
|
||||
deleteDate() {
|
||||
this.datePicker.card.unsetEnd();
|
||||
|
||||
@@ -11,31 +11,30 @@ template(name="cardDetails")
|
||||
+editCardTitleForm
|
||||
else
|
||||
unless isMiniScreen
|
||||
unless isPopup
|
||||
span.card-collapse-toggle.js-card-collapse-toggle(title="{{_ 'collapse-card'}}")
|
||||
if cardCollapsed
|
||||
i.fa.fa-caret-right
|
||||
else
|
||||
i.fa.fa-caret-down
|
||||
a.close-card-details.js-close-card-details(title="{{_ 'close-card'}}")
|
||||
i.fa.fa-times-thin
|
||||
if cardMaximized
|
||||
a.fa.fa-window-minimize.minimize-card-details.js-minimize-card-details(title="{{_ 'minimize-card'}}")
|
||||
span.card-collapse-toggle.js-card-collapse-toggle(title="{{_ 'collapse-card'}}")
|
||||
if cardCollapsed
|
||||
i.fa.fa-caret-right
|
||||
else
|
||||
a.fa.fa-window-maximize.maximize-card-details.js-maximize-card-details(title="{{_ 'maximize-card'}}")
|
||||
a.card-details-menu.js-open-card-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}")
|
||||
i.fa.fa-bars
|
||||
a.card-copy-button.js-copy-link(
|
||||
id="cardURL_copy"
|
||||
title="{{_ 'copy-card-link-to-clipboard'}}"
|
||||
href="{{ originRelativeUrl }}"
|
||||
)
|
||||
span.emoji-icon
|
||||
i.fa.fa-link
|
||||
if canModifyCard
|
||||
span.card-drag-handle.js-card-drag-handle(title="Drag card")
|
||||
i.fa.fa-arrows
|
||||
span.copied-tooltip {{_ 'copied'}}
|
||||
i.fa.fa-caret-down
|
||||
a.close-card-details.js-close-card-details(title="{{_ 'close-card'}}")
|
||||
i.fa.fa-times-thin
|
||||
if cardMaximized
|
||||
a.fa.fa-window-minimize.minimize-card-details.js-minimize-card-details(title="{{_ 'minimize-card'}}")
|
||||
else
|
||||
a.fa.fa-window-maximize.maximize-card-details.js-maximize-card-details(title="{{_ 'maximize-card'}}")
|
||||
a.card-details-menu.js-open-card-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}")
|
||||
i.fa.fa-bars
|
||||
a.card-copy-button.js-copy-link(
|
||||
id="cardURL_copy"
|
||||
title="{{_ 'copy-card-link-to-clipboard'}}"
|
||||
href="{{ originRelativeUrl }}"
|
||||
)
|
||||
span.emoji-icon
|
||||
i.fa.fa-link
|
||||
if canModifyCard
|
||||
span.card-drag-handle.js-card-drag-handle(title="Drag card")
|
||||
i.fa.fa-arrows
|
||||
span.copied-tooltip {{_ 'copied'}}
|
||||
else
|
||||
a.close-card-details.js-close-card-details(title="{{_ 'close-card'}}")
|
||||
i.fa.fa-times-thin
|
||||
|
||||
@@ -207,22 +207,22 @@ Template.cardDetails.onRendered(function () {
|
||||
EscapeActions.executeUpTo('popup-close');
|
||||
},
|
||||
stop(evt, ui) {
|
||||
let prevChecklist = ui.item.prev('.js-subtasks').get(0);
|
||||
if (prevChecklist) {
|
||||
prevChecklist = Blaze.getData(prevChecklist).subtask;
|
||||
let prevSubtask = ui.item.prev('.js-subtasks').get(0);
|
||||
if (prevSubtask) {
|
||||
prevSubtask = Blaze.getData(prevSubtask).subtask;
|
||||
}
|
||||
let nextChecklist = ui.item.next('.js-subtasks').get(0);
|
||||
if (nextChecklist) {
|
||||
nextChecklist = Blaze.getData(nextChecklist).subtask;
|
||||
let nextSubtask = ui.item.next('.js-subtasks').get(0);
|
||||
if (nextSubtask) {
|
||||
nextSubtask = Blaze.getData(nextSubtask).subtask;
|
||||
}
|
||||
const sortIndex = calculateIndexData(prevChecklist, nextChecklist, 1);
|
||||
const sortIndex = calculateIndexData(prevSubtask, nextSubtask, 1);
|
||||
|
||||
$subtasksDom.sortable('cancel');
|
||||
const subtask = Blaze.getData(ui.item.get(0)).subtask;
|
||||
|
||||
Subtasks.update(subtask._id, {
|
||||
Cards.updateAsync(subtask._id, {
|
||||
$set: {
|
||||
subtaskSort: sortIndex.base,
|
||||
sort: sortIndex.base,
|
||||
},
|
||||
});
|
||||
},
|
||||
@@ -272,8 +272,8 @@ Template.cardDetails.helpers({
|
||||
},
|
||||
|
||||
showActivities() {
|
||||
const user = ReactiveCache.getCurrentUser();
|
||||
return user && user.hasShowActivities();
|
||||
const card = Template.currentData();
|
||||
return card && card.showActivities;
|
||||
},
|
||||
|
||||
cardCollapsed() {
|
||||
@@ -337,7 +337,12 @@ Template.cardDetails.helpers({
|
||||
},
|
||||
|
||||
isCurrentListId(listId) {
|
||||
const data = Template.currentData();
|
||||
// When called from within 'each currentBoard.lists' block, we need the card from parent context
|
||||
let data = Template.currentData();
|
||||
if (!data || typeof data.listId === 'undefined') {
|
||||
// Try parent context (for use within each loops)
|
||||
data = Template.parentData(1);
|
||||
}
|
||||
if (!data || typeof data.listId === 'undefined') return false;
|
||||
return data.listId == listId;
|
||||
},
|
||||
@@ -556,9 +561,8 @@ Template.cardDetails.events({
|
||||
}
|
||||
},
|
||||
async 'change .js-select-card-details-lists'(event, tpl) {
|
||||
const listId = event.target.value;
|
||||
let card = Template.currentData();
|
||||
const listSelect = tpl.$('.js-select-card-details-lists')[0];
|
||||
const listId = listSelect.options[listSelect.selectedIndex].value;
|
||||
|
||||
const minOrder = await card.getMinSort(listId, card.swimlaneId);
|
||||
await card.move(card.boardId, card.swimlaneId, listId, minOrder - 1);
|
||||
@@ -602,6 +606,10 @@ Template.cardDetails.events({
|
||||
const card = Template.currentData();
|
||||
await card.toggleHideCheckedChecklistItems();
|
||||
},
|
||||
async 'change #toggleShowActivitiesCard'() {
|
||||
const card = Template.currentData();
|
||||
await card.toggleShowActivities();
|
||||
},
|
||||
'click #toggleCustomFieldsGridButton'() {
|
||||
Meteor.call('toggleCustomFieldsGrid');
|
||||
},
|
||||
@@ -1096,14 +1104,21 @@ const filterMembers = (filterTerm) => {
|
||||
let members = currBoard.activeMembers();
|
||||
|
||||
if (filterTerm) {
|
||||
const searchTerm = filterTerm.toLowerCase();
|
||||
members = members
|
||||
.map(member => ({
|
||||
member,
|
||||
user: ReactiveCache.getUser(member.userId)
|
||||
}))
|
||||
.filter(({ user }) =>
|
||||
(user.profile.fullname !== undefined && user.profile.fullname.toLowerCase().indexOf(filterTerm.toLowerCase()) !== -1)
|
||||
|| user.profile.fullname === undefined && user.profile.username !== undefined && user.profile.username.toLowerCase().indexOf(filterTerm.toLowerCase()) !== -1)
|
||||
.filter(({ user }) => {
|
||||
// Check if user data is available
|
||||
if (!user || !user.profile) {
|
||||
return false;
|
||||
}
|
||||
const fullname = (user.profile.fullname || '').toLowerCase();
|
||||
const username = (user.username || '').toLowerCase();
|
||||
return fullname.indexOf(searchTerm) !== -1 || username.indexOf(searchTerm) !== -1;
|
||||
})
|
||||
.map(({ member }) => member);
|
||||
}
|
||||
return members;
|
||||
|
||||
@@ -223,7 +223,7 @@ Template.checklists.events({
|
||||
event.preventDefault();
|
||||
Template.currentData().card.toggleHideFinishedChecklist();
|
||||
},
|
||||
keydown(event) {
|
||||
'keydown textarea.js-add-checklist-item'(event) {
|
||||
//If user press enter key inside a form, submit it
|
||||
//Unless the user is also holding down the 'shift' key
|
||||
if (event.keyCode === 13 && !event.shiftKey) {
|
||||
|
||||
@@ -11,17 +11,21 @@ template(name="minicard")
|
||||
a.minicard-details-menu-with-handle.js-open-minicard-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}")
|
||||
i.fa.fa-bars
|
||||
.dates
|
||||
if getReceived
|
||||
.date
|
||||
+minicardReceivedDate
|
||||
if getStart
|
||||
.date
|
||||
+minicardStartDate
|
||||
if getDue
|
||||
.date
|
||||
+minicardDueDate
|
||||
if getEnd
|
||||
+minicardEndDate
|
||||
if showReceived
|
||||
if getReceived
|
||||
.date
|
||||
+minicardReceivedDate
|
||||
if showStart
|
||||
if getStart
|
||||
.date
|
||||
+minicardStartDate
|
||||
if showDue
|
||||
if getDue
|
||||
.date
|
||||
+minicardDueDate
|
||||
if showEnd
|
||||
if getEnd
|
||||
+minicardEndDate
|
||||
if getSpentTime
|
||||
.date
|
||||
+cardSpentTime
|
||||
@@ -68,19 +72,20 @@ template(name="minicard")
|
||||
span.linked-icon.linked-archived
|
||||
i.fa.fa-archive
|
||||
+viewer
|
||||
if currentBoard.allowsCardNumber
|
||||
if showCardNumber
|
||||
span.card-number
|
||||
| ##{getCardNumber}
|
||||
= getTitle
|
||||
if labels
|
||||
.minicard-labels(class="{{#if hiddenMinicardLabelText}}minicard-labels-no-text{{/if}}")
|
||||
each labels
|
||||
unless hiddenMinicardLabelText
|
||||
span.js-card-label.card-label(class="card-label-{{color}}" title=name)
|
||||
+viewer
|
||||
= name
|
||||
if hiddenMinicardLabelText
|
||||
.minicard-label(class="card-label-{{color}}" title="{{name}}")
|
||||
if showLabels
|
||||
if labels
|
||||
.minicard-labels(class="{{#if hiddenMinicardLabelText}}minicard-labels-no-text{{/if}}")
|
||||
each labels
|
||||
unless hiddenMinicardLabelText
|
||||
span.js-card-label.card-label(class="card-label-{{color}}" title=name)
|
||||
+viewer
|
||||
= name
|
||||
if hiddenMinicardLabelText
|
||||
.minicard-label(class="card-label-{{color}}" title="{{name}}")
|
||||
|
||||
.minicard-custom-fields
|
||||
each customFieldsWD
|
||||
@@ -179,12 +184,13 @@ template(name="minicard")
|
||||
span.badge-icon
|
||||
i.fa.fa-paperclip
|
||||
span.badge-text= attachments.length
|
||||
if allSubtasks.count
|
||||
.badge
|
||||
span.badge-icon
|
||||
i.fa.fa-globe
|
||||
span.badge-text.check-list-text {{subtasksFinishedCount}}/{{allSubtasksCount}}
|
||||
//{{subtasksFinishedCount}}/{{subtasksCount}} does not work because when a subtaks is archived, the count goes down
|
||||
if showSubtasks
|
||||
if allSubtasks.count
|
||||
.badge
|
||||
span.badge-icon
|
||||
i.fa.fa-globe
|
||||
span.badge-text.check-list-text {{subtasksFinishedCount}}/{{allSubtasksCount}}
|
||||
//{{subtasksFinishedCount}}/{{subtasksCount}} does not work because when a subtaks is archived, the count goes down
|
||||
if currentBoard.allowsCardSortingByNumber
|
||||
if currentBoard.allowsCardSortingByNumberOnMinicard
|
||||
.badge
|
||||
|
||||
@@ -50,32 +50,50 @@ Template.minicard.helpers({
|
||||
},
|
||||
|
||||
showMembers() {
|
||||
// cache "board" to reduce the mini-mongodb access
|
||||
const board = this.board();
|
||||
let ret = false;
|
||||
if (board) {
|
||||
ret =
|
||||
board.allowsMembers === null ||
|
||||
board.allowsMembers === undefined ||
|
||||
board.allowsMembers
|
||||
;
|
||||
ret = board.allowsMembersOnMinicard ?? false;
|
||||
}
|
||||
return ret;
|
||||
},
|
||||
|
||||
showAssignee() {
|
||||
// cache "board" to reduce the mini-mongodb access
|
||||
const board = this.board();
|
||||
let ret = false;
|
||||
if (board) {
|
||||
ret =
|
||||
board.allowsAssignee === null ||
|
||||
board.allowsAssignee === undefined ||
|
||||
board.allowsAssignee
|
||||
;
|
||||
ret = board.allowsAssigneeOnMinicard ?? false;
|
||||
}
|
||||
return ret;
|
||||
},
|
||||
showReceived() {
|
||||
const board = this.board();
|
||||
return board ? board.allowsReceivedDateOnMinicard : false;
|
||||
},
|
||||
showStart() {
|
||||
const board = this.board();
|
||||
return board ? board.allowsStartDateOnMinicard : false;
|
||||
},
|
||||
showDue() {
|
||||
const board = this.board();
|
||||
return board ? board.allowsDueDateOnMinicard : false;
|
||||
},
|
||||
showEnd() {
|
||||
const board = this.board();
|
||||
return board ? board.allowsEndDateOnMinicard : false;
|
||||
},
|
||||
showLabels() {
|
||||
const board = this.board();
|
||||
return board ? board.allowsLabelsOnMinicard : false;
|
||||
},
|
||||
showCardNumber() {
|
||||
const board = this.board();
|
||||
return board ? board.allowsCardNumberOnMinicard : false;
|
||||
},
|
||||
showSubtasks() {
|
||||
const board = this.board();
|
||||
return board ? board.allowsSubtasksOnMinicard : false;
|
||||
},
|
||||
|
||||
hiddenMinicardLabelText() {
|
||||
const currentUser = ReactiveCache.getCurrentUser();
|
||||
|
||||
@@ -15,7 +15,7 @@ textarea.js-edit-subtask-item {
|
||||
color: #8c8c8c;
|
||||
text-decoration: underline;
|
||||
word-wrap: break-word;
|
||||
float: right;
|
||||
flex-shrink: 0;
|
||||
padding-top: 6px;
|
||||
}
|
||||
.delete-text:hover,
|
||||
@@ -24,8 +24,13 @@ textarea.js-edit-subtask-item {
|
||||
.js-delete-subtask-item:hover {
|
||||
color: inherit;
|
||||
}
|
||||
.subtask-title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
}
|
||||
.subtask-title .checkbox {
|
||||
float: left;
|
||||
flex-shrink: 0;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
font-size: 18px;
|
||||
@@ -34,10 +39,12 @@ textarea.js-edit-subtask-item {
|
||||
.subtask-title .title {
|
||||
font-size: 18px;
|
||||
line-height: 25px;
|
||||
flex: 1;
|
||||
order: 1;
|
||||
}
|
||||
.subtask-title .subtasks-stat {
|
||||
margin: 0 0.5em;
|
||||
float: right;
|
||||
flex-shrink: 0;
|
||||
padding-top: 6px;
|
||||
}
|
||||
.subtask-title .subtasks-stat.is-finished {
|
||||
@@ -46,6 +53,9 @@ textarea.js-edit-subtask-item {
|
||||
.subtask-title .js-delete-subtask {
|
||||
margin: 0 0.5em;
|
||||
}
|
||||
.subtask-title .js-view-subtask {
|
||||
margin: 0 0.5em;
|
||||
}
|
||||
.js-confirm-subtask-delete {
|
||||
background-color: #f7f7f7;
|
||||
position: absolute;
|
||||
@@ -175,6 +185,7 @@ body.grey-icons-enabled .subtasks-item .check-box-unicode {
|
||||
display: inline-block;
|
||||
}
|
||||
.subtask-details-menu {
|
||||
float: right;
|
||||
flex-shrink: 0;
|
||||
padding: 6px 10px 6px 10px;
|
||||
order: 2;
|
||||
}
|
||||
@@ -4,7 +4,14 @@ import Cards from '/models/cards';
|
||||
import { Filter } from '/client/lib/filter';
|
||||
|
||||
Template.subtasks.events({
|
||||
'click .js-open-subtask-details-menu': Popup.open('subtaskActions'),
|
||||
'click .js-open-subtask-details-menu'(event) {
|
||||
// Close any existing popup first to avoid accumulating content
|
||||
if (Popup.isOpen()) {
|
||||
Popup.close();
|
||||
}
|
||||
// Now open the popup for this specific subtask
|
||||
Popup.open('subtaskActions').call(this, event);
|
||||
},
|
||||
async 'submit .js-add-subtask'(event, tpl) {
|
||||
event.preventDefault();
|
||||
const textarea = tpl.find('textarea.js-add-subtask-item');
|
||||
@@ -30,10 +37,12 @@ Template.subtasks.events({
|
||||
_id: card.swimlaneId,
|
||||
});
|
||||
//find the swimlane of the same name in the target board.
|
||||
const targetSwimlane = ReactiveCache.getSwimlane({
|
||||
boardId: targetBoard._id,
|
||||
title: parentSwimlane.title,
|
||||
});
|
||||
const targetSwimlane = parentSwimlane
|
||||
? ReactiveCache.getSwimlane({
|
||||
boardId: targetBoard._id,
|
||||
title: parentSwimlane.title,
|
||||
})
|
||||
: undefined;
|
||||
//If no swimlane with a matching title exists in the target board, fall back to the default swimlane.
|
||||
const swimlaneId =
|
||||
targetSwimlane === undefined
|
||||
|
||||
@@ -37,7 +37,7 @@ template(name='statistics')
|
||||
td {{statistics.mongo.mongoStorageEngine}}
|
||||
tr
|
||||
th {{_ 'MongoDB_Oplog_enabled'}}
|
||||
td {{statistics.mongo.mongoOplogEnabled}}
|
||||
td {{formatBoolean statistics.mongo.mongoOplogEnabled}}
|
||||
tr
|
||||
th {{_ 'OS_Type'}}
|
||||
td {{statistics.os.type}}
|
||||
|
||||
@@ -47,4 +47,8 @@ Template.statistics.helpers({
|
||||
}
|
||||
return ret;
|
||||
},
|
||||
|
||||
formatBoolean(value) {
|
||||
return value ? TAPi18n.__('yes') : TAPi18n.__('no');
|
||||
},
|
||||
});
|
||||
@@ -311,3 +311,46 @@ table td:first-child {
|
||||
text-align: center;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
/* Avatar styling - removed people-avatar column */
|
||||
|
||||
/* Username column styling - displays avatar inline with username */
|
||||
.username a.js-edit-people-avatar {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
margin-right: 8px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.username a.js-edit-people-avatar:hover {
|
||||
background-color: rgba(0, 0, 0, 0.05);
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.username .avatar {
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
border-radius: 50%;
|
||||
display: inline-block;
|
||||
flex-shrink: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.username .avatar.avatar-initials {
|
||||
background-color: #dbdbdb;
|
||||
color: #444;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 12px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.username .avatar img.avatar-image {
|
||||
object-fit: cover;
|
||||
object-position: center;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
@@ -114,7 +114,7 @@ template(name="orgGeneral")
|
||||
th {{_ 'shortName'}}
|
||||
th {{_ 'website'}}
|
||||
th {{_ 'createdAt'}}
|
||||
th {{_ 'active'}}
|
||||
th {{_ 'active-org'}}
|
||||
tbody
|
||||
tr
|
||||
each org in orgList
|
||||
@@ -137,7 +137,7 @@ template(name="teamGeneral")
|
||||
th {{_ 'shortName'}}
|
||||
th {{_ 'website'}}
|
||||
th {{_ 'createdAt'}}
|
||||
th {{_ 'active'}}
|
||||
th {{_ 'active-team'}}
|
||||
tbody
|
||||
tr
|
||||
each team in teamList
|
||||
@@ -160,7 +160,7 @@ template(name="peopleGeneral")
|
||||
th {{_ 'username'}}
|
||||
th {{_ 'email'}}
|
||||
th {{_ 'admin'}}
|
||||
th {{_ 'admin-people-active-status'}}
|
||||
th {{_ 'active-person'}}
|
||||
th {{_ 'accounts-lockout-status'}}
|
||||
th {{_ 'createdAt'}}
|
||||
th
|
||||
@@ -260,17 +260,38 @@ template(name="teamRow")
|
||||
template(name="peopleRow")
|
||||
tr
|
||||
td
|
||||
a.edit-user
|
||||
a.edit-user(data-user-id=userData._id)
|
||||
i.fa.fa-pencil-square-o
|
||||
| {{_ 'edit'}}
|
||||
a.more-settings-user
|
||||
a.more-settings-user(data-user-id=userData._id)
|
||||
| ⋯
|
||||
if userData.loginDisabled
|
||||
td.username <s>{{ userData.username }}</s>
|
||||
td.username
|
||||
a.js-edit-people-avatar(data-user-id=userData._id)
|
||||
if hasAvatarUrl
|
||||
.avatar
|
||||
img.avatar-image(src="{{userData.profile.avatarUrl}}", alt="{{userData.username}}", title="{{_ 'change-avatar'}}")
|
||||
else
|
||||
+userAvatarInitials(userId=userData._id)
|
||||
<s>{{ userData.username }}</s>
|
||||
else if isUserLocked
|
||||
td.username {{ userData.username }}
|
||||
td.username
|
||||
a.js-edit-people-avatar(data-user-id=userData._id)
|
||||
if hasAvatarUrl
|
||||
.avatar
|
||||
img.avatar-image(src="{{userData.profile.avatarUrl}}", alt="{{userData.username}}", title="{{_ 'change-avatar'}}")
|
||||
else
|
||||
+userAvatarInitials(userId=userData._id)
|
||||
| {{ userData.username }}
|
||||
else
|
||||
td.username {{ userData.username }}
|
||||
td.username
|
||||
a.js-edit-people-avatar(data-user-id=userData._id)
|
||||
if hasAvatarUrl
|
||||
.avatar
|
||||
img.avatar-image(src="{{userData.profile.avatarUrl}}", alt="{{userData.username}}", title="{{_ 'change-avatar'}}")
|
||||
else
|
||||
+userAvatarInitials(userId=userData._id)
|
||||
| {{ userData.username }}
|
||||
if userData.loginDisabled
|
||||
td <s>{{ userData.emails.[0].address }}</s>
|
||||
else
|
||||
@@ -333,7 +354,7 @@ template(name="editOrgPopup")
|
||||
| {{_ 'website'}}
|
||||
input.js-orgWebsite(type="text" value=org.orgWebsite)
|
||||
label
|
||||
| {{_ 'active'}}
|
||||
| {{_ 'active-org'}}
|
||||
select.select-active.js-org-isactive
|
||||
option(value="false") {{_ 'no'}}
|
||||
option(value="true" selected="{{org.orgIsActive}}") {{_ 'yes'}}
|
||||
@@ -359,7 +380,7 @@ template(name="editTeamPopup")
|
||||
| {{_ 'website'}}
|
||||
input.js-teamWebsite(type="text" value=team.teamWebsite)
|
||||
label
|
||||
| {{_ 'active'}}
|
||||
| {{_ 'active-team'}}
|
||||
select.select-active.js-team-isactive
|
||||
option(value="false") {{_ 'no'}}
|
||||
option(value="true" selected="{{team.teamIsActive}}") {{_ 'yes'}}
|
||||
@@ -406,7 +427,7 @@ template(name="editUserPopup")
|
||||
option(value="false") {{_ 'no'}}
|
||||
option(value="true" selected="{{userData.emails.[0].verified}}") {{_ 'yes'}}
|
||||
label
|
||||
| {{_ 'active'}}
|
||||
| {{_ 'active-person'}}
|
||||
select.select-active.js-profile-isactive
|
||||
option(value="false") {{_ 'yes'}}
|
||||
option(value="true" selected="{{user.loginDisabled}}") {{_ 'no'}}
|
||||
@@ -469,7 +490,7 @@ template(name="newOrgPopup")
|
||||
| {{_ 'website'}}
|
||||
input.js-orgWebsite(type="text" value="" required)
|
||||
label
|
||||
| {{_ 'active'}}
|
||||
| {{_ 'active-org'}}
|
||||
select.select-active.js-org-isactive
|
||||
option(value="false" selected="selected") {{_ 'no'}}
|
||||
option(value="true") {{_ 'yes'}}
|
||||
@@ -493,7 +514,7 @@ template(name="newTeamPopup")
|
||||
| {{_ 'website'}}
|
||||
input.js-teamWebsite(type="text" value="")
|
||||
label
|
||||
| {{_ 'active'}}
|
||||
| {{_ 'active-team'}}
|
||||
select.select-active.js-team-isactive
|
||||
option(value="false" selected="selected") {{_ 'no'}}
|
||||
option(value="true") {{_ 'yes'}}
|
||||
@@ -555,7 +576,7 @@ template(name="newUserPopup")
|
||||
option(value="false" selected="selected") {{_ 'no'}}
|
||||
option(value="true") {{_ 'yes'}}
|
||||
label
|
||||
| {{_ 'active'}}
|
||||
| {{_ 'active-person'}}
|
||||
select.select-active.js-profile-isactive
|
||||
option(value="false" selected="selected") {{_ 'yes'}}
|
||||
option(value="true") {{_ 'no'}}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { ReactiveCache } from '/imports/reactiveCache';
|
||||
import { avatarUpdateCounter } from '/client/components/users/avatarUpdateCounter';
|
||||
import { InfiniteScrolling } from '/client/lib/infiniteScrolling';
|
||||
import LockoutSettings from '/models/lockoutSettings';
|
||||
import { FlowRouter } from 'meteor/ostrio:flow-router-extra';
|
||||
@@ -536,7 +537,39 @@ Template.teamRow.helpers({
|
||||
|
||||
Template.peopleRow.helpers({
|
||||
userData() {
|
||||
return this.user || ReactiveCache.getUser(this.userId);
|
||||
// Depend on global avatar update counter to reactively update when avatars change
|
||||
avatarUpdateCounter.get();
|
||||
// Get the user ID from either this._id or this.user._id
|
||||
let userId;
|
||||
if (this.user && this.user._id) {
|
||||
userId = this.user._id;
|
||||
} else if (this._id) {
|
||||
userId = this._id;
|
||||
}
|
||||
// Always fetch from ReactiveCache to ensure latest data
|
||||
if (userId) {
|
||||
return ReactiveCache.getUser(userId);
|
||||
}
|
||||
return this.user || this;
|
||||
},
|
||||
hasAvatarUrl() {
|
||||
// Depend on global avatar update counter to reactively update when avatars change
|
||||
avatarUpdateCounter.get();
|
||||
// Get the user ID from either this._id or this.user._id
|
||||
let userId;
|
||||
if (this.user && this.user._id) {
|
||||
userId = this.user._id;
|
||||
} else if (this._id) {
|
||||
userId = this._id;
|
||||
}
|
||||
let user;
|
||||
if (userId) {
|
||||
user = ReactiveCache.getUser(userId);
|
||||
} else {
|
||||
user = this.user || this;
|
||||
}
|
||||
if (!user || !user.profile) return false;
|
||||
return !!user.profile.avatarUrl;
|
||||
},
|
||||
isUserLocked() {
|
||||
const user = this.user || ReactiveCache.getUser(this.userId);
|
||||
@@ -726,8 +759,20 @@ Template.teamRow.events({
|
||||
});
|
||||
|
||||
Template.peopleRow.events({
|
||||
'click a.edit-user': Popup.open('editUser'),
|
||||
'click a.more-settings-user': Popup.open('settingsUser'),
|
||||
'click a.edit-user'(event) {
|
||||
// Get the user ID from the data attribute
|
||||
const userId = event.currentTarget.getAttribute('data-user-id');
|
||||
if (userId) {
|
||||
Popup.open('editUser').call({ userId: userId }, event);
|
||||
}
|
||||
},
|
||||
'click a.more-settings-user'(event) {
|
||||
// Get the user ID from the data attribute
|
||||
const userId = event.currentTarget.getAttribute('data-user-id');
|
||||
if (userId) {
|
||||
Popup.open('settingsUser').call({ userId: userId }, event);
|
||||
}
|
||||
},
|
||||
'click .selectUserChkBox': function(ev){
|
||||
if(ev.currentTarget){
|
||||
if(ev.currentTarget.checked){
|
||||
@@ -791,6 +836,18 @@ Template.peopleRow.events({
|
||||
// For now, we'll leave this as a no-op
|
||||
}
|
||||
},
|
||||
'click a.js-edit-people-avatar'(event) {
|
||||
// Extract the user ID from the data attribute
|
||||
const userId = event.currentTarget.getAttribute('data-user-id');
|
||||
if (userId) {
|
||||
// Get the user from cache to pass correct context
|
||||
const user = ReactiveCache.getUser(userId);
|
||||
if (user) {
|
||||
// Call Popup.open with the correct user data context
|
||||
Popup.open('adminChangeAvatar').call({ _id: userId, user: user }, event);
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Template.modifyTeamsUsers.helpers({
|
||||
@@ -1462,19 +1519,23 @@ Template.settingsTeamPopup.events({
|
||||
Template.settingsUserPopup.events({
|
||||
'click .impersonate-user'(event) {
|
||||
event.preventDefault();
|
||||
const userId = this.userId || this.user?._id;
|
||||
|
||||
Meteor.call('impersonate', this.userId, (err) => {
|
||||
Meteor.call('impersonate', userId, (err) => {
|
||||
if (!err) {
|
||||
// Meteor.connection.setUserId() triggers automatic cache invalidation
|
||||
// No need to manually invalidate - let Meteor handle the user data refresh
|
||||
Meteor.connection.setUserId(userId);
|
||||
FlowRouter.go('/');
|
||||
Meteor.connection.setUserId(this.userId);
|
||||
}
|
||||
});
|
||||
},
|
||||
'click #deleteButton'(event) {
|
||||
event.preventDefault();
|
||||
const userId = this.userId || this.user?._id;
|
||||
|
||||
// Use secure server method instead of direct client-side removal
|
||||
Meteor.call('removeUser', this.userId, (error, result) => {
|
||||
Meteor.call('removeUser', userId, (error, result) => {
|
||||
if (error) {
|
||||
if (process.env.DEBUG === 'true') {
|
||||
console.error('Error removing user:', error);
|
||||
@@ -1501,19 +1562,24 @@ Template.settingsUserPopup.events({
|
||||
|
||||
Template.settingsUserPopup.helpers({
|
||||
user() {
|
||||
return ReactiveCache.getUser(this.userId);
|
||||
const userId = this.userId || this.user?._id;
|
||||
return ReactiveCache.getUser(userId);
|
||||
},
|
||||
authentications() {
|
||||
return Template.instance().authenticationMethods.get();
|
||||
},
|
||||
isSelected(match) {
|
||||
const userId = Template.instance().data.userId;
|
||||
const selected = ReactiveCache.getUser(userId).authenticationMethod;
|
||||
const userId = Template.instance().data.userId || Template.instance().data.user?._id;
|
||||
const user = ReactiveCache.getUser(userId);
|
||||
if (!user) return false;
|
||||
const selected = user.authenticationMethod;
|
||||
return selected === match;
|
||||
},
|
||||
isLdap() {
|
||||
const userId = Template.instance().data.userId;
|
||||
const selected = ReactiveCache.getUser(userId).authenticationMethod;
|
||||
const userId = Template.instance().data.userId || Template.instance().data.user?._id;
|
||||
const user = ReactiveCache.getUser(userId);
|
||||
if (!user) return false;
|
||||
const selected = user.authenticationMethod;
|
||||
return selected === 'ldap';
|
||||
},
|
||||
errorMessage() {
|
||||
|
||||
@@ -177,8 +177,8 @@ template(name="boardCardSettingsPopup")
|
||||
a.flex.js-field-has-receiveddate(title="{{_ 'card-received'}}" class="{{#if allowsReceivedDate}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsReceivedDate}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
a.flex.js-field-has-receiveddate(title="{{_ 'card-received'}}" class="{{#if allowsReceivedDate}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsReceivedDate}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
a.flex.js-field-has-receiveddate-on-minicard(title="{{_ 'card-received'}}" class="{{#if allowsReceivedDateOnMinicard}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsReceivedDateOnMinicard}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
span
|
||||
i.fa.fa-sign-in
|
||||
@@ -188,8 +188,8 @@ template(name="boardCardSettingsPopup")
|
||||
a.flex.js-field-has-startdate(title="{{_ 'card-start'}}" class="{{#if allowsStartDate}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsStartDate}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
a.flex.js-field-has-startdate(title="{{_ 'card-start'}}" class="{{#if allowsStartDate}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsStartDate}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
a.flex.js-field-has-startdate-on-minicard(title="{{_ 'card-start'}}" class="{{#if allowsStartDateOnMinicard}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsStartDateOnMinicard}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
span
|
||||
i.fa.fa-hourglass
|
||||
@@ -199,8 +199,8 @@ template(name="boardCardSettingsPopup")
|
||||
a.flex.js-field-has-duedate(title="{{_ 'card-due'}}" class="{{#if allowsDueDate}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsDueDate}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
a.flex.js-field-has-duedate(title="{{_ 'card-due'}}" class="{{#if allowsDueDate}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsDueDate}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
a.flex.js-field-has-duedate-on-minicard(title="{{_ 'card-due'}}" class="{{#if allowsDueDateOnMinicard}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsDueDateOnMinicard}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
span
|
||||
i.fa.fa-sign-in
|
||||
@@ -210,8 +210,8 @@ template(name="boardCardSettingsPopup")
|
||||
a.flex.js-field-has-enddate(title="{{_ 'card-end'}}" class="{{#if allowsEndDate}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsEndDate}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
a.flex.js-field-has-enddate(title="{{_ 'card-end'}}" class="{{#if allowsEndDate}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsEndDate}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
a.flex.js-field-has-enddate-on-minicard(title="{{_ 'card-end'}}" class="{{#if allowsEndDateOnMinicard}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsEndDateOnMinicard}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
span
|
||||
i.fa.fa-clock-o
|
||||
@@ -221,8 +221,8 @@ template(name="boardCardSettingsPopup")
|
||||
a.flex.js-field-has-members(title="{{_ 'members'}}" class="{{#if allowsMembers}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsMembers}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
a.flex.js-field-has-members(title="{{_ 'members'}}" class="{{#if allowsMembers}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsMembers}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
a.flex.js-field-has-members-on-minicard(title="{{_ 'members'}}" class="{{#if allowsMembersOnMinicard}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsMembersOnMinicard}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
span
|
||||
i.fa.fa-users
|
||||
@@ -252,8 +252,8 @@ template(name="boardCardSettingsPopup")
|
||||
a.flex.js-field-has-assignee(title="{{_ 'assignee'}}" class="{{#if allowsAssignee}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsAssignee}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
a.flex.js-field-has-assignee(title="{{_ 'assignee'}}" class="{{#if allowsAssignee}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsAssignee}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
a.flex.js-field-has-assignee-on-minicard(title="{{_ 'assignee'}}" class="{{#if allowsAssigneeOnMinicard}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsAssigneeOnMinicard}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
span
|
||||
i.fa.fa-user
|
||||
@@ -263,8 +263,8 @@ template(name="boardCardSettingsPopup")
|
||||
a.flex.js-field-has-assigned-by(title="{{_ 'assigned-by'}}" class="{{#if allowsAssignedBy}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsAssignedBy}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
a.flex.js-field-has-assigned-by(title="{{_ 'assigned-by'}}" class="{{#if allowsAssignedBy}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsAssignedBy}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
a.flex.js-field-has-assigned-by-on-minicard(title="{{_ 'assigned-by'}}" class="{{#if allowsAssignedByOnMinicard}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsAssignedByOnMinicard}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
span
|
||||
i.fa.fa-shopping-cart
|
||||
@@ -274,8 +274,8 @@ template(name="boardCardSettingsPopup")
|
||||
a.flex.js-field-has-requested-by(title="{{_ 'requested-by'}}" class="{{#if allowsRequestedBy}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsRequestedBy}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
a.flex.js-field-has-requested-by(title="{{_ 'requested-by'}}" class="{{#if allowsRequestedBy}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsRequestedBy}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
a.flex.js-field-has-requested-by-on-minicard(title="{{_ 'requested-by'}}" class="{{#if allowsRequestedByOnMinicard}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsRequestedByOnMinicard}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
span
|
||||
i.fa.fa-user
|
||||
@@ -316,8 +316,8 @@ template(name="boardCardSettingsPopup")
|
||||
a.flex.js-field-has-labels(title="{{_ 'labels'}}" class="{{#if allowsLabels}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsLabels}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
a.flex.js-field-has-labels(title="{{_ 'labels'}}" class="{{#if allowsLabels}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsLabels}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
a.flex.js-field-has-labels-on-minicard(title="{{_ 'labels'}}" class="{{#if allowsLabelsOnMinicard}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsLabelsOnMinicard}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
span
|
||||
i.fa.fa-tag
|
||||
@@ -337,8 +337,8 @@ template(name="boardCardSettingsPopup")
|
||||
a.flex.js-field-has-card-number(title="{{_ 'card'}} {{_ 'number'}}" class="{{#if allowsCardNumber}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsCardNumber}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
a.flex.js-field-has-card-number(title="{{_ 'card'}} {{_ 'number'}}" class="{{#if allowsCardNumber}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsCardNumber}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
a.flex.js-field-has-card-number-on-minicard(title="{{_ 'card'}} {{_ 'number'}}" class="{{#if allowsCardNumberOnMinicard}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsCardNumberOnMinicard}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
span
|
||||
| #️⃣
|
||||
@@ -349,8 +349,8 @@ template(name="boardCardSettingsPopup")
|
||||
a.flex.js-field-has-description-title(title="{{_ 'description'}} {{_ 'title'}}" class="{{#if allowsDescriptionTitle}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsDescriptionTitle}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
a.flex.js-field-has-description-title(title="{{_ 'description'}} {{_ 'title'}}" class="{{#if allowsDescriptionTitle}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsDescriptionTitle}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
a.flex.js-field-has-description-title-on-minicard(title="{{_ 'description'}} {{_ 'title'}}" class="{{#if allowsDescriptionTitleOnMinicard}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsDescriptionTitleOnMinicard}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
span
|
||||
i.fa.fa-file-text-o
|
||||
@@ -361,8 +361,8 @@ template(name="boardCardSettingsPopup")
|
||||
a.flex.js-field-has-description-text(title="{{_ 'description'}} {{_ 'custom-field-text'}}" class="{{#if allowsDescriptionText}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsDescriptionText}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
a.flex.js-field-has-description-text(title="{{_ 'description'}} {{_ 'custom-field-text'}}" class="{{#if allowsDescriptionText}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsDescriptionText}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
a.flex.js-field-has-description-text-on-minicard(title="{{_ 'description'}} {{_ 'custom-field-text'}}" class="{{#if allowsDescriptionTextOnMinicard}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsDescriptionTextOnMinicard}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
span
|
||||
i.fa.fa-file-text-o
|
||||
@@ -383,8 +383,8 @@ template(name="boardCardSettingsPopup")
|
||||
a.flex.js-field-has-checklists(title="{{_ 'checklists'}}" class="{{#if allowsChecklists}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsChecklists}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
a.flex.js-field-has-checklists(title="{{_ 'checklists'}}" class="{{#if allowsChecklists}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsChecklists}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
a.flex.js-field-has-checklists-on-minicard(title="{{_ 'checklists'}}" class="{{#if allowsChecklistsOnMinicard}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsChecklistsOnMinicard}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
span
|
||||
i.fa.fa-check
|
||||
@@ -394,8 +394,8 @@ template(name="boardCardSettingsPopup")
|
||||
a.flex.js-field-has-subtasks(title="{{_ 'subtasks'}}" class="{{#if allowsSubtasks}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsSubtasks}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
a.flex.js-field-has-subtasks(title="{{_ 'subtasks'}}" class="{{#if allowsSubtasks}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsSubtasks}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
a.flex.js-field-has-subtasks-on-minicard(title="{{_ 'subtasks'}}" class="{{#if allowsSubtasksOnMinicard}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsSubtasksOnMinicard}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
span
|
||||
i.fa.fa-globe
|
||||
@@ -405,8 +405,8 @@ template(name="boardCardSettingsPopup")
|
||||
a.flex.js-field-has-attachments(title="{{_ 'attachments'}}" class="{{#if allowsAttachments}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsAttachments}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
a.flex.js-field-has-attachments(title="{{_ 'attachments'}}" class="{{#if allowsAttachments}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsAttachments}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
a.flex.js-field-has-attachments-on-minicard(title="{{_ 'attachments'}}" class="{{#if allowsAttachmentsOnMinicard}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsAttachmentsOnMinicard}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
span
|
||||
i.fa.fa-paperclip
|
||||
|
||||
@@ -235,8 +235,8 @@ Template.homeSidebar.helpers({
|
||||
});
|
||||
|
||||
Template.homeSidebar.events({
|
||||
'click .js-toggle-show-activities'() {
|
||||
Utils.getCurrentBoard().toggleShowActivities();
|
||||
async 'click .js-toggle-show-activities'() {
|
||||
await Utils.getCurrentBoard().toggleShowActivities();
|
||||
},
|
||||
});
|
||||
|
||||
@@ -1029,26 +1029,51 @@ Template.boardCardSettingsPopup.helpers({
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsReceivedDate : false;
|
||||
},
|
||||
allowsReceivedDateOnMinicard() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsReceivedDateOnMinicard : false;
|
||||
},
|
||||
allowsStartDate() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsStartDate : false;
|
||||
},
|
||||
allowsStartDateOnMinicard() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsStartDateOnMinicard : false;
|
||||
},
|
||||
allowsDueDate() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsDueDate : false;
|
||||
},
|
||||
allowsDueDateOnMinicard() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsDueDateOnMinicard : false;
|
||||
},
|
||||
allowsEndDate() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsEndDate : false;
|
||||
},
|
||||
allowsEndDateOnMinicard() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsEndDateOnMinicard : false;
|
||||
},
|
||||
allowsSubtasks() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsSubtasks : false;
|
||||
},
|
||||
allowsSubtasksOnMinicard() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsSubtasksOnMinicard : false;
|
||||
},
|
||||
allowsCreator() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
@@ -1064,21 +1089,41 @@ Template.boardCardSettingsPopup.helpers({
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsMembers : false;
|
||||
},
|
||||
allowsMembersOnMinicard() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsMembersOnMinicard : false;
|
||||
},
|
||||
allowsAssignee() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsAssignee : false;
|
||||
},
|
||||
allowsAssigneeOnMinicard() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsAssigneeOnMinicard : false;
|
||||
},
|
||||
allowsAssignedBy() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsAssignedBy : false;
|
||||
},
|
||||
allowsAssignedByOnMinicard() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsAssignedByOnMinicard : false;
|
||||
},
|
||||
allowsRequestedBy() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsRequestedBy : false;
|
||||
},
|
||||
allowsRequestedByOnMinicard() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsRequestedByOnMinicard : false;
|
||||
},
|
||||
allowsCardSortingByNumber() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
@@ -1094,6 +1139,11 @@ Template.boardCardSettingsPopup.helpers({
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsLabels : false;
|
||||
},
|
||||
allowsLabelsOnMinicard() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsLabelsOnMinicard : false;
|
||||
},
|
||||
allowsShowListsOnMinicard() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
@@ -1104,11 +1154,21 @@ Template.boardCardSettingsPopup.helpers({
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsChecklists : false;
|
||||
},
|
||||
allowsChecklistsOnMinicard() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsChecklistsOnMinicard : false;
|
||||
},
|
||||
allowsAttachments() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsAttachments : false;
|
||||
},
|
||||
allowsAttachmentsOnMinicard() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsAttachmentsOnMinicard : false;
|
||||
},
|
||||
allowsComments() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
@@ -1119,11 +1179,21 @@ Template.boardCardSettingsPopup.helpers({
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsCardNumber : false;
|
||||
},
|
||||
allowsCardNumberOnMinicard() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsCardNumberOnMinicard : false;
|
||||
},
|
||||
allowsDescriptionTitle() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsDescriptionTitle : false;
|
||||
},
|
||||
allowsDescriptionTitleOnMinicard() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsDescriptionTitleOnMinicard : false;
|
||||
},
|
||||
allowsDescriptionText() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
@@ -1213,26 +1283,51 @@ Template.boardCardSettingsPopup.events({
|
||||
const newValue = !tpl.currentBoard.allowsReceivedDate;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsReceivedDate: newValue } });
|
||||
},
|
||||
'click .js-field-has-receiveddate-on-minicard'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsReceivedDateOnMinicard;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsReceivedDateOnMinicard: newValue } });
|
||||
},
|
||||
'click .js-field-has-startdate'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsStartDate;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsStartDate: newValue } });
|
||||
},
|
||||
'click .js-field-has-startdate-on-minicard'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsStartDateOnMinicard;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsStartDateOnMinicard: newValue } });
|
||||
},
|
||||
'click .js-field-has-enddate'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsEndDate;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsEndDate: newValue } });
|
||||
},
|
||||
'click .js-field-has-enddate-on-minicard'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsEndDateOnMinicard;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsEndDateOnMinicard: newValue } });
|
||||
},
|
||||
'click .js-field-has-duedate'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsDueDate;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsDueDate: newValue } });
|
||||
},
|
||||
'click .js-field-has-duedate-on-minicard'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsDueDateOnMinicard;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsDueDateOnMinicard: newValue } });
|
||||
},
|
||||
'click .js-field-has-subtasks'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsSubtasks;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsSubtasks: newValue } });
|
||||
},
|
||||
'click .js-field-has-subtasks-on-minicard'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsSubtasksOnMinicard;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsSubtasksOnMinicard: newValue } });
|
||||
},
|
||||
'click .js-field-has-creator'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsCreator;
|
||||
@@ -1248,21 +1343,41 @@ Template.boardCardSettingsPopup.events({
|
||||
const newValue = !tpl.currentBoard.allowsMembers;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsMembers: newValue } });
|
||||
},
|
||||
'click .js-field-has-members-on-minicard'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsMembersOnMinicard;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsMembersOnMinicard: newValue } });
|
||||
},
|
||||
'click .js-field-has-assignee'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsAssignee;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsAssignee: newValue } });
|
||||
},
|
||||
'click .js-field-has-assignee-on-minicard'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsAssigneeOnMinicard;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsAssigneeOnMinicard: newValue } });
|
||||
},
|
||||
'click .js-field-has-assigned-by'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsAssignedBy;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsAssignedBy: newValue } });
|
||||
},
|
||||
'click .js-field-has-assigned-by-on-minicard'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsAssignedByOnMinicard;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsAssignedByOnMinicard: newValue } });
|
||||
},
|
||||
'click .js-field-has-requested-by'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsRequestedBy;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsRequestedBy: newValue } });
|
||||
},
|
||||
'click .js-field-has-requested-by-on-minicard'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsRequestedByOnMinicard;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsRequestedByOnMinicard: newValue } });
|
||||
},
|
||||
'click .js-field-has-card-sorting-by-number'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsCardSortingByNumber;
|
||||
@@ -1278,6 +1393,11 @@ Template.boardCardSettingsPopup.events({
|
||||
const newValue = !tpl.currentBoard.allowsLabels;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsLabels: newValue } });
|
||||
},
|
||||
'click .js-field-has-labels-on-minicard'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsLabelsOnMinicard;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsLabelsOnMinicard: newValue } });
|
||||
},
|
||||
'click .js-field-has-card-show-lists-on-minicard'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
tpl.currentBoard.allowsShowListsOnMinicard = !tpl.currentBoard
|
||||
@@ -1310,6 +1430,11 @@ Template.boardCardSettingsPopup.events({
|
||||
tpl.currentBoard.allowsDescriptionTitle,
|
||||
);
|
||||
},
|
||||
'click .js-field-has-description-title-on-minicard'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsDescriptionTitleOnMinicard;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsDescriptionTitleOnMinicard: newValue } });
|
||||
},
|
||||
'click .js-field-has-card-number'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
tpl.currentBoard.allowsCardNumber = !tpl.currentBoard
|
||||
@@ -1326,6 +1451,11 @@ Template.boardCardSettingsPopup.events({
|
||||
tpl.currentBoard.allowsCardNumber,
|
||||
);
|
||||
},
|
||||
'click .js-field-has-card-number-on-minicard'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsCardNumberOnMinicard;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsCardNumberOnMinicard: newValue } });
|
||||
},
|
||||
'click .js-field-has-description-text-on-minicard'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
tpl.currentBoard.allowsDescriptionTextOnMinicard = !tpl.currentBoard
|
||||
@@ -1374,6 +1504,11 @@ Template.boardCardSettingsPopup.events({
|
||||
tpl.currentBoard.allowsChecklists,
|
||||
);
|
||||
},
|
||||
'click .js-field-has-checklists-on-minicard'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsChecklistsOnMinicard;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsChecklistsOnMinicard: newValue } });
|
||||
},
|
||||
'click .js-field-has-attachments'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
tpl.currentBoard.allowsAttachments = !tpl.currentBoard
|
||||
@@ -1390,6 +1525,11 @@ Template.boardCardSettingsPopup.events({
|
||||
tpl.currentBoard.allowsAttachments,
|
||||
);
|
||||
},
|
||||
'click .js-field-has-attachments-on-minicard'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsAttachmentsOnMinicard;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsAttachmentsOnMinicard: newValue } });
|
||||
},
|
||||
'click .js-field-has-comments'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
tpl.currentBoard.allowsComments = !tpl.currentBoard.allowsComments;
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
import { ReactiveVar } from 'meteor/reactive-var';
|
||||
|
||||
// Reactive source for invalidating people row when avatars change
|
||||
export const avatarUpdateCounter = new ReactiveVar(0);
|
||||
@@ -70,11 +70,11 @@ template(name="changeAvatarPopup")
|
||||
each uploadedAvatars
|
||||
li: a.js-select-avatar
|
||||
.member
|
||||
img.avatar.avatar-image(src="{{link}}")
|
||||
img.avatar.avatar-image(src="{{avatarLink}}")
|
||||
if isSelected
|
||||
i.fa.fa-check
|
||||
p.sub-name
|
||||
a.js-delete-avatar {{_ 'delete'}}
|
||||
a.js-delete-avatar(data-avatar-id="{{_id}}") {{_ 'delete'}}
|
||||
| -
|
||||
= name
|
||||
li: a.js-select-initials
|
||||
@@ -100,6 +100,41 @@ template(name="deleteAvatarPopup")
|
||||
p {{_ 'delete-avatar-confirm'}}
|
||||
button.js-confirm.negate.full(type="submit") {{_ 'delete'}}
|
||||
|
||||
template(name="adminChangeAvatarPopup")
|
||||
.admin-change-avatar-header
|
||||
h3 {{_ 'change-avatar'}} - {{ username }}
|
||||
if error.get
|
||||
.warning {{_ error.get}}
|
||||
ul.pop-over-list
|
||||
each uploadedAvatars
|
||||
li: a.js-select-avatar
|
||||
.member
|
||||
img.avatar.avatar-image(src="{{avatarLink}}")
|
||||
if isSelected
|
||||
i.fa.fa-check
|
||||
p.sub-name
|
||||
a.js-delete-avatar(data-avatar-id="{{_id}}") {{_ 'delete'}}
|
||||
| -
|
||||
= name
|
||||
li: a.js-select-initials
|
||||
.member
|
||||
+userAvatarInitials(userData=userData)
|
||||
| {{_ 'initials' }}
|
||||
if noAvatarUrl
|
||||
i.fa.fa-check
|
||||
p.sub-name {{_ 'default-avatar'}}
|
||||
input.hide.js-upload-avatar-input(accept="image/*;capture=camera" type="file")
|
||||
if Meteor.settings.public.avatarsUploadMaxSize
|
||||
| {{_ 'max-avatar-filesize'}} {{Meteor.settings.public.avatarsUploadMaxSize}}
|
||||
br
|
||||
if Meteor.settings.public.avatarsUploadMimeTypes
|
||||
| {{_ 'allowed-avatar-filetypes'}} {{Meteor.settings.public.avatarsUploadMimeTypes}}
|
||||
br
|
||||
| {{_ 'invalid-file'}}
|
||||
button.full.js-upload-avatar
|
||||
i.fa.fa-upload
|
||||
| {{_ 'upload-avatar' }}
|
||||
|
||||
template(name="cardMemberPopup")
|
||||
.board-member-menu
|
||||
.mini-profile-info
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
import { ReactiveCache } from '/imports/reactiveCache';
|
||||
import { ReactiveVar } from 'meteor/reactive-var';
|
||||
import { avatarUpdateCounter } from '/client/components/users/avatarUpdateCounter';
|
||||
import Avatars from '/models/avatars';
|
||||
import Presences from '/models/presences';
|
||||
import { Utils } from '/client/lib/utils';
|
||||
@@ -164,6 +166,7 @@ Template.boardTeamName.helpers({
|
||||
|
||||
Template.changeAvatarPopup.onCreated(function () {
|
||||
this.error = new ReactiveVar('');
|
||||
this.avatarUpdateCounter = new ReactiveVar(0); // Trigger to force helper re-evaluation
|
||||
Meteor.subscribe('my-avatars');
|
||||
});
|
||||
|
||||
@@ -172,16 +175,28 @@ Template.changeAvatarPopup.helpers({
|
||||
return Template.instance().error;
|
||||
},
|
||||
uploadedAvatars() {
|
||||
Template.instance().avatarUpdateCounter.get(); // Create dependency on update counter
|
||||
const ret = ReactiveCache.getAvatars({ userId: Meteor.userId() }, {}, true);
|
||||
return ret;
|
||||
},
|
||||
avatarLink() {
|
||||
if (this && typeof this.link === 'function') {
|
||||
return this.link();
|
||||
}
|
||||
return '';
|
||||
},
|
||||
isSelected() {
|
||||
Template.instance().avatarUpdateCounter.get(); // Create dependency on update counter
|
||||
const userProfile = ReactiveCache.getCurrentUser().profile;
|
||||
const avatarUrl = userProfile && userProfile.avatarUrl;
|
||||
const currentAvatarUrl = Template.currentData().link();
|
||||
return avatarUrl === currentAvatarUrl;
|
||||
const currentAvatarUrl = this.link && typeof this.link === 'function' ? this.link() : '';
|
||||
// Normalize URLs by removing query parameters for comparison
|
||||
// (they may be added for boardId but shouldn't affect selection comparison)
|
||||
const normalizeUrl = (url) => url ? url.split('?')[0] : '';
|
||||
return normalizeUrl(avatarUrl) === normalizeUrl(currentAvatarUrl);
|
||||
},
|
||||
noAvatarUrl() {
|
||||
Template.instance().avatarUpdateCounter.get(); // Create dependency on update counter
|
||||
const userProfile = ReactiveCache.getCurrentUser().profile;
|
||||
const avatarUrl = userProfile && userProfile.avatarUrl;
|
||||
return !avatarUrl;
|
||||
@@ -192,6 +207,14 @@ function changeAvatarSetAvatar(tpl, avatarUrl) {
|
||||
Meteor.call('setAvatarUrl', avatarUrl, (err) => {
|
||||
if (err) {
|
||||
tpl.error.set(err.reason || 'Error setting avatar');
|
||||
} else {
|
||||
// Trigger a re-evaluation of helpers to show updated avatar selection
|
||||
const counter = tpl.avatarUpdateCounter.get();
|
||||
tpl.avatarUpdateCounter.set(counter + 1);
|
||||
// Also increment global counter for admin people list updates
|
||||
avatarUpdateCounter.set(avatarUpdateCounter.get() + 1);
|
||||
// Clear input for next upload
|
||||
tpl.$('.js-upload-avatar-input').val('');
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -212,15 +235,25 @@ Template.changeAvatarPopup.events({
|
||||
uploader.on('error', (error, fileData) => {
|
||||
tpl.error.set(error.reason);
|
||||
});
|
||||
uploader.on('uploaded', (error, fileRef) => {
|
||||
if (!error) {
|
||||
// Trigger a re-evaluation of helpers to show new uploaded avatar
|
||||
const counter = tpl.avatarUpdateCounter.get();
|
||||
tpl.avatarUpdateCounter.set(counter + 1);
|
||||
// Also increment global counter for admin people list updates
|
||||
avatarUpdateCounter.set(avatarUpdateCounter.get() + 1);
|
||||
} else {
|
||||
tpl.error.set(error.reason);
|
||||
}
|
||||
});
|
||||
uploader.start();
|
||||
}
|
||||
},
|
||||
'click .js-select-avatar'(event, tpl) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
const data = Blaze.getData(event.currentTarget);
|
||||
if (data && typeof data.link === 'function') {
|
||||
const avatarUrl = data.link();
|
||||
if (this && typeof this.link === 'function') {
|
||||
const avatarUrl = this.link();
|
||||
changeAvatarSetAvatar(tpl, avatarUrl);
|
||||
}
|
||||
},
|
||||
@@ -229,10 +262,13 @@ Template.changeAvatarPopup.events({
|
||||
event.stopPropagation();
|
||||
changeAvatarSetAvatar(tpl, '');
|
||||
},
|
||||
'click .js-delete-avatar': Popup.afterConfirm('deleteAvatar', async function (event) {
|
||||
await Avatars.removeAsync(this._id);
|
||||
'click .js-delete-avatar': Popup.afterConfirm('deleteAvatar', async function() {
|
||||
// Inside the each loop, 'this' is the avatar object
|
||||
const avatarId = this._id;
|
||||
if (avatarId) {
|
||||
await Avatars.removeAsync(avatarId);
|
||||
}
|
||||
Popup.back();
|
||||
event.stopPropagation();
|
||||
}),
|
||||
});
|
||||
|
||||
@@ -249,3 +285,146 @@ Template.cardMemberPopup.events({
|
||||
},
|
||||
'click .js-edit-profile': Popup.open('editProfile'),
|
||||
});
|
||||
|
||||
Template.adminChangeAvatarPopup.onCreated(function () {
|
||||
this.error = new ReactiveVar('');
|
||||
this.avatarUpdateCounter = new ReactiveVar(0);
|
||||
const userId = this.data._id || (this.data.user && this.data.user._id);
|
||||
this.targetUserId = userId;
|
||||
if (userId) {
|
||||
Meteor.subscribe('avatars-for-user', userId);
|
||||
}
|
||||
});
|
||||
|
||||
Template.adminChangeAvatarPopup.helpers({
|
||||
error() {
|
||||
return Template.instance().error;
|
||||
},
|
||||
userId() {
|
||||
const instance = Template.instance();
|
||||
return instance.targetUserId || (this._id || (this.user && this.user._id));
|
||||
},
|
||||
userData() {
|
||||
return this.user || this;
|
||||
},
|
||||
uploadedAvatars() {
|
||||
Template.instance().avatarUpdateCounter.get();
|
||||
const instance = Template.instance();
|
||||
const userId = instance.targetUserId || (this._id || (this.user && this.user._id));
|
||||
if (!userId) return [];
|
||||
const ret = ReactiveCache.getAvatars({ userId: userId }, {}, true);
|
||||
return ret;
|
||||
},
|
||||
avatarLink() {
|
||||
if (this && typeof this.link === 'function') {
|
||||
return this.link();
|
||||
}
|
||||
return '';
|
||||
},
|
||||
currentEditingUser() {
|
||||
Template.instance().avatarUpdateCounter.get();
|
||||
const instance = Template.instance();
|
||||
const userId = instance.targetUserId;
|
||||
if (!userId) return null;
|
||||
return ReactiveCache.getUser(userId);
|
||||
},
|
||||
isSelected() {
|
||||
Template.instance().avatarUpdateCounter.get();
|
||||
const instance = Template.instance();
|
||||
const userId = instance.targetUserId;
|
||||
if (!userId) return false;
|
||||
const user = ReactiveCache.getUser(userId);
|
||||
if (!user) return false;
|
||||
const userProfile = user.profile;
|
||||
const avatarUrl = userProfile && userProfile.avatarUrl;
|
||||
const currentAvatarUrl = this.link && typeof this.link === 'function' ? this.link() : '';
|
||||
const normalizeUrl = (url) => url ? url.split('?')[0] : '';
|
||||
return normalizeUrl(avatarUrl) === normalizeUrl(currentAvatarUrl);
|
||||
},
|
||||
noAvatarUrl() {
|
||||
Template.instance().avatarUpdateCounter.get();
|
||||
const instance = Template.instance();
|
||||
const userId = instance.targetUserId;
|
||||
if (!userId) return true;
|
||||
const user = ReactiveCache.getUser(userId);
|
||||
if (!user) return true;
|
||||
const userProfile = user.profile;
|
||||
const avatarUrl = userProfile && userProfile.avatarUrl;
|
||||
return !avatarUrl;
|
||||
},
|
||||
});
|
||||
|
||||
function adminChangeAvatarSetAvatar(tpl, avatarUrl) {
|
||||
const userId = tpl.targetUserId || (Template.currentData()._id || (Template.currentData().user && Template.currentData().user._id));
|
||||
if (!userId) {
|
||||
console.error('Cannot set avatar: no userId found');
|
||||
return;
|
||||
}
|
||||
Meteor.call('adminSetAvatarUrl', userId, avatarUrl, (err) => {
|
||||
if (err) {
|
||||
tpl.error.set(err.reason || 'Error setting avatar');
|
||||
} else {
|
||||
const counter = tpl.avatarUpdateCounter.get();
|
||||
tpl.avatarUpdateCounter.set(counter + 1);
|
||||
// Also increment global counter to update admin people list
|
||||
avatarUpdateCounter.set(avatarUpdateCounter.get() + 1);
|
||||
tpl.$('.js-upload-avatar-input').val('');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Template.adminChangeAvatarPopup.events({
|
||||
'click .js-upload-avatar'(event, tpl) {
|
||||
tpl.$('.js-upload-avatar-input').click();
|
||||
},
|
||||
async 'change .js-upload-avatar-input'(event, tpl) {
|
||||
if (event.currentTarget.files && event.currentTarget.files[0]) {
|
||||
const userId = tpl.targetUserId || (this._id || (this.user && this.user._id));
|
||||
const uploader = await Avatars.insertAsync(
|
||||
{
|
||||
file: event.currentTarget.files[0],
|
||||
chunkSize: 'dynamic',
|
||||
meta: {
|
||||
adminUploadForUserId: userId,
|
||||
},
|
||||
},
|
||||
false,
|
||||
);
|
||||
uploader.on('error', (error, fileData) => {
|
||||
tpl.error.set(error.reason);
|
||||
});
|
||||
uploader.on('uploaded', (error, fileRef) => {
|
||||
if (!error) {
|
||||
const counter = tpl.avatarUpdateCounter.get();
|
||||
tpl.avatarUpdateCounter.set(counter + 1);
|
||||
// Also increment global counter to update admin people list
|
||||
avatarUpdateCounter.set(avatarUpdateCounter.get() + 1);
|
||||
} else {
|
||||
tpl.error.set(error.reason);
|
||||
}
|
||||
});
|
||||
uploader.start();
|
||||
}
|
||||
},
|
||||
'click .js-select-avatar'(event, tpl) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
if (this && typeof this.link === 'function') {
|
||||
const avatarUrl = this.link();
|
||||
adminChangeAvatarSetAvatar(tpl, avatarUrl);
|
||||
}
|
||||
},
|
||||
'click .js-select-initials'(event, tpl) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
adminChangeAvatarSetAvatar(tpl, '');
|
||||
},
|
||||
'click .js-delete-avatar': Popup.afterConfirm('deleteAvatar', async function() {
|
||||
// Inside the each loop, 'this' is the avatar object
|
||||
const avatarId = this._id;
|
||||
if (avatarId) {
|
||||
await Avatars.removeAsync(avatarId);
|
||||
}
|
||||
Popup.back();
|
||||
}),
|
||||
});
|
||||
+373
-69
@@ -18,8 +18,9 @@ window.ExportHtml = Popup => {
|
||||
}
|
||||
};
|
||||
|
||||
const getPageHtmlString = () => {
|
||||
return `<!doctype html>${window.document.querySelector('html').outerHTML}`;
|
||||
const getPageHtmlString = (clonedElement = null) => {
|
||||
const element = clonedElement || window.document.querySelector('html');
|
||||
return `<!doctype html>${element.outerHTML}`;
|
||||
};
|
||||
|
||||
const removeAnchors = htmlString => {
|
||||
@@ -30,74 +31,161 @@ window.ExportHtml = Popup => {
|
||||
return replaceOpenAnchor.replace(new RegExp('</a', 'gim'), '</span');
|
||||
};
|
||||
|
||||
const ensureSidebarRemoved = () => {
|
||||
document.querySelector('.board-sidebar.sidebar').remove();
|
||||
const ensureSidebarRemoved = (element = null) => {
|
||||
const target = element || document;
|
||||
const sidebar = target.querySelector('.board-sidebar.sidebar');
|
||||
if (sidebar) {
|
||||
sidebar.remove();
|
||||
}
|
||||
};
|
||||
|
||||
const addJsonExportToZip = async (zip, boardSlug) => {
|
||||
const downloadJSONLink = document.querySelector('.download-json-link');
|
||||
const downloadJSONURL = downloadJSONLink.href;
|
||||
const response = await fetch(downloadJSONURL);
|
||||
const responseBody = await response.text();
|
||||
zip.file(`data/${boardSlug}.json`, responseBody);
|
||||
};
|
||||
|
||||
const closeSidebar = () => {
|
||||
document.querySelector('.board-header-btn.js-toggle-sidebar').click();
|
||||
};
|
||||
|
||||
const cleanBoardHtml = () => {
|
||||
Array.from(document.querySelectorAll('script')).forEach(elem =>
|
||||
const cleanBoardHtmlClone = (clonedElement) => {
|
||||
// Work on cloned element only, not live DOM
|
||||
Array.from(clonedElement.querySelectorAll('script')).forEach(elem =>
|
||||
elem.remove(),
|
||||
);
|
||||
Array.from(
|
||||
document.querySelectorAll('link:not([rel="stylesheet"])'),
|
||||
clonedElement.querySelectorAll('link:not([rel="stylesheet"])'),
|
||||
).forEach(elem => elem.remove());
|
||||
document.querySelector('#header-quick-access').remove();
|
||||
|
||||
const headerQuickAccess = clonedElement.querySelector('#header-quick-access');
|
||||
if (headerQuickAccess) headerQuickAccess.remove();
|
||||
|
||||
Array.from(
|
||||
document.querySelectorAll('#header-main-bar .board-header-btns'),
|
||||
clonedElement.querySelectorAll('#header-main-bar .board-header-btns'),
|
||||
).forEach(elem => elem.remove());
|
||||
Array.from(
|
||||
document.querySelectorAll('.js-pop-over, .pop-over'),
|
||||
clonedElement.querySelectorAll('.js-pop-over, .pop-over'),
|
||||
).forEach(elem => elem.remove());
|
||||
Array.from(document.querySelectorAll('.list-composer')).forEach(elem =>
|
||||
Array.from(clonedElement.querySelectorAll('.list-composer')).forEach(elem =>
|
||||
elem.remove(),
|
||||
);
|
||||
Array.from(
|
||||
document.querySelectorAll(
|
||||
clonedElement.querySelectorAll(
|
||||
'.list-composer,.js-card-composer, .js-add-card',
|
||||
),
|
||||
).forEach(elem => elem.remove());
|
||||
Array.from(document.querySelectorAll('[href]:not(link)')).forEach(elem =>
|
||||
|
||||
// Remove edit/action buttons from cards but keep card content
|
||||
Array.from(clonedElement.querySelectorAll('.js-edit, .js-delete, .js-open-card')).forEach(elem =>
|
||||
elem.remove(),
|
||||
);
|
||||
|
||||
// Keep card details structure for viewing - don't remove or hide
|
||||
// The interactive script will handle showing/hiding them
|
||||
|
||||
Array.from(clonedElement.querySelectorAll('[href]:not(link)')).forEach(elem =>
|
||||
elem.attributes.removeNamedItem('href'),
|
||||
);
|
||||
Array.from(document.querySelectorAll('[href]')).forEach(elem => {
|
||||
Array.from(clonedElement.querySelectorAll('[href]')).forEach(elem => {
|
||||
// eslint-disable-next-line no-self-assign
|
||||
elem.href = elem.href;
|
||||
// eslint-disable-next-line no-self-assign
|
||||
elem.src = elem.src;
|
||||
});
|
||||
Array.from(document.querySelectorAll('.is-editable')).forEach(elem => {
|
||||
Array.from(clonedElement.querySelectorAll('.is-editable')).forEach(elem => {
|
||||
elem.classList.remove('is-editable');
|
||||
});
|
||||
};
|
||||
|
||||
const addJsonExportToZip = async (zip, boardSlug, zipDirName) => {
|
||||
const downloadJSONLink = document.querySelector('.download-json-link');
|
||||
const downloadJSONURL = downloadJSONLink.href;
|
||||
const response = await fetch(downloadJSONURL);
|
||||
const responseBody = await response.text();
|
||||
zip.file(`${zipDirName}/data/${boardSlug}.json`, responseBody);
|
||||
};
|
||||
|
||||
const getBoardSlug = () => {
|
||||
// Use board ID from session instead of URL slug to keep filenames short
|
||||
const boardId = Session.get('currentBoard');
|
||||
if (boardId) {
|
||||
return boardId;
|
||||
}
|
||||
// Fallback to URL slug if session is not available
|
||||
return window.location.href.split('/').pop();
|
||||
};
|
||||
|
||||
const getBoardTitle = () => {
|
||||
// Extract from page header - most reliable method
|
||||
const headerTitle = document.querySelector('h1.header-board-menu');
|
||||
if (headerTitle && headerTitle.textContent) {
|
||||
const title = headerTitle.textContent.trim();
|
||||
// Filter out translation keys like "{{_ 'templates'}}"
|
||||
if (title && !title.includes('{{')) {
|
||||
return title;
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback: use board slug if header title extraction fails
|
||||
return getBoardSlug();
|
||||
};
|
||||
|
||||
const sanitizeFilename = (filename) => {
|
||||
// Remove or replace invalid filename characters
|
||||
// Keep alphanumeric, hyphens, underscores, and spaces
|
||||
return filename
|
||||
.replace(/[^a-zA-Z0-9\s\-_]/g, '') // Remove special chars
|
||||
.replace(/\s+/g, '-') // Replace spaces with hyphens
|
||||
.replace(/-+/g, '-') // Replace multiple hyphens with single
|
||||
.substring(0, 100) // Limit to 100 chars
|
||||
.trim();
|
||||
};
|
||||
|
||||
const getStylesheetList = () => {
|
||||
return Array.from(
|
||||
document.querySelectorAll('link[href][rel="stylesheet"]'),
|
||||
);
|
||||
};
|
||||
|
||||
const downloadStylesheets = async (stylesheets, zip) => {
|
||||
const getSrcAttached = () => {
|
||||
return Array.from(document.querySelectorAll('[src]'));
|
||||
};
|
||||
|
||||
const downloadStylesheets = async (stylesheets, zip, clonedHtmlElement, zipDirName) => {
|
||||
await asyncForEach(stylesheets, async elem => {
|
||||
const response = await fetch(elem.href);
|
||||
const responseBody = await response.text();
|
||||
let responseBody = await response.text();
|
||||
|
||||
const finalResponse = responseBody.replace(
|
||||
// Check if this is a Font Awesome CSS file
|
||||
const isFontAwesomeCSS = elem.href && (
|
||||
elem.href.includes('fontawesome') ||
|
||||
elem.href.includes('font-awesome') ||
|
||||
elem.href.includes('fa-') ||
|
||||
elem.href.includes('wekan-fontawesome')
|
||||
);
|
||||
|
||||
if (isFontAwesomeCSS) {
|
||||
// For Font Awesome: preserve @font-face but update paths to local files
|
||||
responseBody = responseBody.replace(
|
||||
/url\(["']?(?:\.\.\/)?webfonts\/([^"')]+)["']?\)/gi,
|
||||
'url("../webfonts/$1")'
|
||||
);
|
||||
// Also handle upstream package paths for Font Awesome
|
||||
responseBody = responseBody.replace(
|
||||
/url\(["']?[^"']*packages\/[^/]+\/upstream\/webfonts\/([^"')]+)["']?\)/gi,
|
||||
'url("../webfonts/$1")'
|
||||
);
|
||||
} else {
|
||||
// For non-Font-Awesome CSS: remove @font-face rules to eliminate external font dependencies
|
||||
responseBody = responseBody.replace(
|
||||
/@font-face\s*\{[^}]*\}/gi,
|
||||
''
|
||||
);
|
||||
|
||||
// Replace non-Font-Awesome font families with system fonts (sans-serif)
|
||||
// But preserve Font Awesome families
|
||||
responseBody = responseBody.replace(
|
||||
/font-family\s*:\s*[^;]*(?:Roboto|Lato|Open Sans)[^;]*;/gi,
|
||||
'font-family: sans-serif;'
|
||||
);
|
||||
}
|
||||
|
||||
// Fix relative paths for assets
|
||||
let finalResponse = responseBody;
|
||||
|
||||
// Replace upstream package paths
|
||||
finalResponse = finalResponse.replace(
|
||||
new RegExp('packages/[^/]+/upstream/', 'gim'),
|
||||
'../',
|
||||
);
|
||||
@@ -107,17 +195,20 @@ window.ExportHtml = Popup => {
|
||||
.pop()
|
||||
.split('?')
|
||||
.shift();
|
||||
const fileFullPath = `style/${filename}`;
|
||||
const fileFullPath = `${zipDirName}/style/${filename}`;
|
||||
zip.file(fileFullPath, finalResponse);
|
||||
elem.href = `../${fileFullPath}`;
|
||||
|
||||
// Update the cloned HTML element, not the live one
|
||||
if (clonedHtmlElement) {
|
||||
const clonedElements = clonedHtmlElement.querySelectorAll(`link[href="${elem.href}"]`);
|
||||
clonedElements.forEach(clonedElem => {
|
||||
clonedElem.href = `./style/${filename}`;
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const getSrcAttached = () => {
|
||||
return Array.from(document.querySelectorAll('[src]'));
|
||||
};
|
||||
|
||||
const downloadSrcAttached = async (elements, zip, boardSlug) => {
|
||||
const downloadSrcAttached = async (elements, zip, boardSlug, clonedHtmlElement, zipDirName) => {
|
||||
await asyncForEach(elements, async elem => {
|
||||
const response = await fetch(elem.src);
|
||||
const responseBody = await response.blob();
|
||||
@@ -126,9 +217,16 @@ window.ExportHtml = Popup => {
|
||||
.pop()
|
||||
.split('?')
|
||||
.shift();
|
||||
const fileFullPath = `${boardSlug}/${elem.tagName.toLowerCase()}/${filename}`;
|
||||
const fileFullPath = `${zipDirName}/${elem.tagName.toLowerCase()}/${filename}`;
|
||||
zip.file(fileFullPath, responseBody);
|
||||
elem.src = `./${elem.tagName.toLowerCase()}/${filename}`;
|
||||
|
||||
// Update the cloned HTML element, not the live one
|
||||
if (clonedHtmlElement) {
|
||||
const clonedElements = clonedHtmlElement.querySelectorAll(`[src="${elem.src}"]`);
|
||||
clonedElements.forEach(clonedElem => {
|
||||
clonedElem.src = `./${elem.tagName.toLowerCase()}/${filename}`;
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -156,7 +254,7 @@ window.ExportHtml = Popup => {
|
||||
};
|
||||
|
||||
const getWebFonts = () => {
|
||||
let fontUrls = [];
|
||||
let fonts = [];
|
||||
|
||||
for (let sheet of document.styleSheets) {
|
||||
// Get the base URL of the stylesheet
|
||||
@@ -169,10 +267,14 @@ window.ExportHtml = Popup => {
|
||||
let urlMatch = src.match(/url\(["']?(.+?)["']?\)/);
|
||||
if (urlMatch) {
|
||||
let fontUrl = urlMatch[1];
|
||||
let fontFamily = rule.style.getPropertyValue('font-family').replace(/["']/g, '');
|
||||
|
||||
// Resolve the URL relative to the stylesheet's base URL
|
||||
let resolvedUrl = new URL(fontUrl, baseUrl);
|
||||
fontUrls.push(resolvedUrl.href); // Using .href to get the absolute URL
|
||||
fonts.push({
|
||||
url: resolvedUrl.href,
|
||||
family: fontFamily
|
||||
}); // Using .href to get the absolute URL
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -181,25 +283,114 @@ window.ExportHtml = Popup => {
|
||||
}
|
||||
}
|
||||
|
||||
return fontUrls;
|
||||
return fonts;
|
||||
};
|
||||
|
||||
const downloadFonts = async(elements, zip) => {
|
||||
await asyncForEach(elements, async elem => {
|
||||
const downloadFonts = async(elements, zip, zipDirName) => {
|
||||
let fontIndex = 1;
|
||||
await asyncForEach(elements, async (fontObj, idx) => {
|
||||
const elem = fontObj.url;
|
||||
const fontFamily = fontObj.family || `font${fontIndex}`;
|
||||
|
||||
const response = await fetch(elem);
|
||||
const responseBody = await response.blob();
|
||||
const filename = elem.split('/')
|
||||
.pop()
|
||||
.split('?')
|
||||
.shift()
|
||||
.split('#')
|
||||
.shift();
|
||||
const fileFullPath = `webfonts/${filename}`;
|
||||
zip.file(fileFullPath, responseBody);
|
||||
|
||||
// Try to extract a better filename
|
||||
let filename = fontFamily.replace(/[^a-z0-9-]/gi, '').substring(0, 50) || `font${fontIndex++}`;
|
||||
|
||||
// If filename is empty after sanitization, use index
|
||||
if (!filename || filename.length === 0) {
|
||||
filename = `font${fontIndex++}`;
|
||||
}
|
||||
|
||||
// First, try to extract filename from URL path (for normal URLs)
|
||||
if (!elem.startsWith('data:')) {
|
||||
const pathname = new URL(elem).pathname;
|
||||
const urlFilename = pathname.split('/').pop().split('?')[0].split('#')[0];
|
||||
if (urlFilename && urlFilename.length > 0 && !urlFilename.match(/^[a-f0-9]+$/i)) {
|
||||
// Only use URL filename if it's not a hash
|
||||
filename = urlFilename;
|
||||
}
|
||||
}
|
||||
|
||||
// Detect format from content-type or file extension
|
||||
let extension = 'woff2';
|
||||
const contentType = response.headers.get('content-type');
|
||||
if (contentType) {
|
||||
if (contentType.includes('font/woff')) extension = 'woff';
|
||||
else if (contentType.includes('font/ttf')) extension = 'ttf';
|
||||
else if (contentType.includes('application/x-font-ttf')) extension = 'ttf';
|
||||
else if (contentType.includes('application/x-font-opentype')) extension = 'otf';
|
||||
}
|
||||
|
||||
// Ensure filename has extension
|
||||
if (!filename.includes('.')) {
|
||||
filename = `${filename}.${extension}`;
|
||||
}
|
||||
|
||||
const fileFullPath = `${zipDirName}/webfonts/${filename}`;
|
||||
zip.file(fileFullPath, responseBody);
|
||||
});
|
||||
}
|
||||
|
||||
const downloadCardCovers = async (elements, zip, boardSlug) => {
|
||||
const downloadFontAwesomeFonts = async (zip, zipDirName) => {
|
||||
// List of Font Awesome webfont files to include
|
||||
const fontAwesomeFiles = [
|
||||
'fa-solid-900.woff2',
|
||||
'fa-solid-900.ttf',
|
||||
'fa-brands-400.woff2',
|
||||
'fa-brands-400.ttf',
|
||||
'fa-regular-400.woff2',
|
||||
'fa-regular-400.ttf',
|
||||
'fa-v4compatibility.woff2',
|
||||
'fa-v4compatibility.ttf',
|
||||
];
|
||||
|
||||
try {
|
||||
await asyncForEach(fontAwesomeFiles, async (filename) => {
|
||||
try {
|
||||
// Try to fetch from the Meteor bundle webfont location
|
||||
const fontUrls = [
|
||||
`/packages/wekan-fontawesome/webfonts/${filename}`,
|
||||
`/webfonts/${filename}`,
|
||||
`./webfonts/${filename}`,
|
||||
`../packages/wekan-fontawesome/webfonts/${filename}`,
|
||||
];
|
||||
|
||||
let response = null;
|
||||
let fetchedUrl = null;
|
||||
|
||||
for (const url of fontUrls) {
|
||||
try {
|
||||
response = await fetch(url);
|
||||
if (response.ok) {
|
||||
fetchedUrl = url;
|
||||
break;
|
||||
}
|
||||
} catch (e) {
|
||||
// Try next URL
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (response && response.ok) {
|
||||
const responseBody = await response.blob();
|
||||
const fileFullPath = `${zipDirName}/webfonts/${filename}`;
|
||||
zip.file(fileFullPath, responseBody);
|
||||
console.log(`✓ Font Awesome font included: ${filename} from ${fetchedUrl}`);
|
||||
} else {
|
||||
console.log(`✗ Font Awesome font not found: ${filename}`);
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(`Error downloading Font Awesome font ${filename}:`, e);
|
||||
}
|
||||
});
|
||||
} catch (e) {
|
||||
console.log('Error in downloadFontAwesomeFonts:', e);
|
||||
}
|
||||
}
|
||||
|
||||
const downloadCardCovers = async (elements, zip, boardSlug, clonedHtmlElement, zipDirName) => {
|
||||
await asyncForEach(elements, async elem => {
|
||||
const response = await fetch(
|
||||
removeCssUrlSurround(elem.style['background-image']),
|
||||
@@ -212,18 +403,117 @@ window.ExportHtml = Popup => {
|
||||
.shift()
|
||||
.split('#')
|
||||
.shift();
|
||||
const fileFullPath = `${boardSlug}/covers/${filename}`;
|
||||
const fileFullPath = `${zipDirName}/covers/${filename}`;
|
||||
zip.file(fileFullPath, responseBody);
|
||||
elem.style = "background-image: url('" + `covers/${filename}` + "')";
|
||||
|
||||
// Update the cloned HTML element, not the live one
|
||||
if (clonedHtmlElement) {
|
||||
const bgImage = removeCssUrlSurround(elem.style['background-image']);
|
||||
const clonedElements = clonedHtmlElement.querySelectorAll('.minicard-cover');
|
||||
clonedElements.forEach(clonedElem => {
|
||||
if (removeCssUrlSurround(clonedElem.style['background-image']) === bgImage) {
|
||||
clonedElem.style.backgroundImage = `url('./covers/${filename}')`;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const addBoardHTMLToZip = (boardSlug, zip) => {
|
||||
ensureSidebarRemoved();
|
||||
const htmlOutputPath = `${boardSlug}/index.html`;
|
||||
const addBoardHTMLToZip = (boardSlug, zip, clonedElement, zipDirName) => {
|
||||
ensureSidebarRemoved(clonedElement);
|
||||
|
||||
// Get the HTML string
|
||||
let htmlString = removeAnchors(getPageHtmlString(clonedElement));
|
||||
|
||||
// Inject font styling with Font Awesome exception
|
||||
// Apply sans-serif to most elements, but preserve Font Awesome icon fonts
|
||||
const fontStyleTag = `<style>
|
||||
* { font-family: sans-serif !important; }
|
||||
body { font-family: sans-serif !important; }
|
||||
.fa, .fas, .far, .fab, .fa-solid, .fa-regular, .fa-brands, [class*="fa-"] {
|
||||
font-family: 'Font Awesome 6 Free', 'Font Awesome 6 Brands' !important;
|
||||
}
|
||||
</style>`;
|
||||
htmlString = htmlString.replace(
|
||||
/<\/head>/i,
|
||||
`${fontStyleTag}</head>`
|
||||
);
|
||||
|
||||
// Inject interactive script into the HTML before closing body tag
|
||||
const scriptContent = `
|
||||
// Make cards interactive in exported HTML
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
console.log('Initializing card interactions...');
|
||||
|
||||
// Create modal/popup for card details
|
||||
let modal = document.getElementById('card-details-modal');
|
||||
if (!modal) {
|
||||
modal = document.createElement('div');
|
||||
modal.id = 'card-details-modal';
|
||||
modal.style.cssText = 'display:none;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:white;border:1px solid #ccc;border-radius:8px;padding:20px;max-width:600px;width:90%;max-height:80vh;overflow-y:auto;z-index:10000;box-shadow:0 4px 20px rgba(0,0,0,0.3);';
|
||||
document.body.appendChild(modal);
|
||||
}
|
||||
|
||||
// Add click handlers to cards to show/hide details
|
||||
const cards = document.querySelectorAll('.minicard');
|
||||
console.log('Found ' + cards.length + ' cards');
|
||||
|
||||
cards.forEach((card, idx) => {
|
||||
card.style.cursor = 'pointer';
|
||||
card.dataset.cardIndex = idx;
|
||||
|
||||
card.addEventListener('click', function(e) {
|
||||
// Ignore clicks on buttons or action elements
|
||||
if (e.target.closest('button, a, .js-') || e.target.closest('[role="button"]')) {
|
||||
return;
|
||||
}
|
||||
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
// Extract card title
|
||||
const title = this.querySelector('.card-title, .minicard-title, [class*="title"]');
|
||||
const titleText = title ? title.textContent.trim() : 'Card ' + this.dataset.cardIndex;
|
||||
|
||||
// Get all text content from the card
|
||||
const allText = this.textContent.trim();
|
||||
|
||||
// Show modal with card details
|
||||
modal.innerHTML = '<button style="position:absolute;top:10px;right:10px;padding:5px 10px;background:#f0f0f0;border:1px solid #ccc;border-radius:4px;cursor:pointer;">Close</button>';
|
||||
modal.querySelector('button').onclick = () => { modal.style.display = 'none'; document.body.style.overflow = 'auto'; };
|
||||
|
||||
const content = document.createElement('div');
|
||||
content.innerHTML = '<h2 style="margin-bottom:10px;">' + titleText + '</h2><hr style="margin:10px 0;"><div style="white-space:pre-wrap;word-wrap:break-word;font-family:sans-serif;font-size:13px;max-height:400px;overflow-y:auto;line-height:1.4;">' + allText + '</div><p style="color:#666;font-size:12px;margin-top:20px;"><em>Card #' + this.dataset.cardIndex + ' from exported board</em></p>';
|
||||
modal.appendChild(content);
|
||||
|
||||
modal.style.display = 'block';
|
||||
document.body.style.overflow = 'hidden';
|
||||
|
||||
console.log('Showing card details for card ' + this.dataset.cardIndex);
|
||||
});
|
||||
});
|
||||
|
||||
// Add style for cards
|
||||
if (!document.getElementById('card-open-styles')) {
|
||||
const style = document.createElement('style');
|
||||
style.id = 'card-open-styles';
|
||||
style.textContent = '* { font-family: sans-serif !important; } body { font-family: sans-serif !important; } .minicard { transition: all 0.3s ease; cursor: pointer; } .minicard:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.15) !important; transform: translateY(-2px); }';
|
||||
document.head.appendChild(style);
|
||||
console.log('Added card styles and sans-serif font');
|
||||
}
|
||||
});
|
||||
`;
|
||||
|
||||
// Inject script before closing body tag
|
||||
htmlString = htmlString.replace(
|
||||
/<\/body>/i,
|
||||
`<script>${scriptContent}</script></body>`
|
||||
);
|
||||
|
||||
const htmlOutputPath = `${zipDirName}/index.html`;
|
||||
zip.file(
|
||||
htmlOutputPath,
|
||||
new Blob([removeAnchors(getPageHtmlString())], {
|
||||
new Blob([htmlString], {
|
||||
type: 'application/html',
|
||||
}),
|
||||
);
|
||||
@@ -232,21 +522,35 @@ window.ExportHtml = Popup => {
|
||||
return async () => {
|
||||
const zip = new JSZip();
|
||||
const boardSlug = getBoardSlug();
|
||||
const boardTitle = sanitizeFilename(getBoardTitle());
|
||||
const zipFilename = boardTitle || boardSlug;
|
||||
const zipDirName = zipFilename; // Directory name inside the ZIP
|
||||
|
||||
await addJsonExportToZip(zip, boardSlug);
|
||||
// Clone the HTML element to process for export without modifying live DOM
|
||||
const htmlElement = window.document.querySelector('html');
|
||||
const clonedHtmlElement = htmlElement.cloneNode(true);
|
||||
|
||||
await addJsonExportToZip(zip, boardSlug, zipDirName);
|
||||
Popup.back();
|
||||
closeSidebar();
|
||||
cleanBoardHtml();
|
||||
|
||||
await downloadStylesheets(getStylesheetList(), zip);
|
||||
await downloadSrcAttached(getSrcAttached(), zip, boardSlug);
|
||||
await downloadCardCovers(getCardCovers(), zip, boardSlug);
|
||||
await downloadFonts(getWebFonts(), zip);
|
||||
// Process the cloned element only
|
||||
cleanBoardHtmlClone(clonedHtmlElement);
|
||||
|
||||
addBoardHTMLToZip(boardSlug, zip);
|
||||
// Pass cloned element and zipDirName to all download functions so they update the clone, not the live DOM
|
||||
await downloadStylesheets(getStylesheetList(), zip, clonedHtmlElement, zipDirName);
|
||||
await downloadSrcAttached(getSrcAttached(), zip, boardSlug, clonedHtmlElement, zipDirName);
|
||||
await downloadCardCovers(getCardCovers(), zip, boardSlug, clonedHtmlElement, zipDirName);
|
||||
|
||||
// Download Font Awesome webfont files for icon support in exported HTML
|
||||
await downloadFontAwesomeFonts(zip, zipDirName);
|
||||
|
||||
// Note: General fonts are not exported to keep export lightweight
|
||||
// downloadFonts(getWebFonts(), zip, zipDirName); -- skipped
|
||||
|
||||
addBoardHTMLToZip(boardSlug, zip, clonedHtmlElement, zipDirName);
|
||||
|
||||
const content = await zip.generateAsync({ type: 'blob' });
|
||||
saveAs(content, `${boardSlug}.zip`);
|
||||
window.location.reload();
|
||||
saveAs(content, `${zipFilename}.zip`);
|
||||
// No page reload - impersonation session is preserved!
|
||||
};
|
||||
};
|
||||
+7
-1
@@ -171,7 +171,7 @@ services:
|
||||
# Leave it unset or empty to skip migration.
|
||||
#-------------------------------------------------------------------------------------
|
||||
#wekan-migrate:
|
||||
# image: node:22.22.2-slim
|
||||
# image: node:24.14.1-slim
|
||||
# container_name: wekan-migrate
|
||||
# restart: "no"
|
||||
# networks:
|
||||
@@ -289,6 +289,12 @@ services:
|
||||
# remove port mapping if you use nginx reverse proxy, port 8080 is already exposed to wekan-tier network
|
||||
- 80:8080
|
||||
environment:
|
||||
#-------------------- USING MONGODB CHANGE STREAMS WITH REPLICA SETS AT CURRENT DATABASE --------------------
|
||||
# If you would not like to use Change Streams and replica set for improving speed, change to use polling:
|
||||
#- METEOR_REACTIVITY_ORDER=polling
|
||||
# https://forums.meteor.com/t/meteor-3-5-beta-change-streams-performance-improvements/64461#change-streams-setup-3
|
||||
# https://github.com/meteor/meteor/blob/release-3.5/v3-docs/docs/performance/change-streams-observer-driver.md#choosing-the-reactivity-driver-order
|
||||
- METEOR_REACTIVITY_ORDER=changeStreams,oplog,polling
|
||||
#-----------------------------------------------------------------
|
||||
# ==== WRITEABLE PATH FOR FILE UPLOADS ====
|
||||
- WRITABLE_PATH=/data
|
||||
|
||||
@@ -10,9 +10,8 @@ This is without container (without Docker or Snap).
|
||||
|
||||
Right click and download files 1-4:
|
||||
|
||||
1. [wekan-8.71-amd64-windows.zip](https://github.com/wekan/wekan/releases/download/v8.71/wekan-8.71-amd64-windows.zip)
|
||||
|
||||
2. [node.exe](https://nodejs.org/dist/latest-v22.x/win-x64/node.exe)
|
||||
1. [wekan-8.80-win64.zip](https://github.com/wekan/wekan/releases/download/v8.80/wekan-8.80-win64.zip)
|
||||
2. [node.exe](https://nodejs.org/dist/latest-v24.x/win-x64/node.exe)
|
||||
|
||||
3. [mongodb-windows-x86_64-7.0.31-signed.msi](https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-7.0.31-signed.msi)
|
||||
|
||||
@@ -22,7 +21,7 @@ Right click and download files 1-4:
|
||||
|
||||
6. Double click `mongodb-windows-x86_64-7.0.31-signed.msi` . In installer, uncheck downloading MongoDB compass.
|
||||
|
||||
7. Unzip `wekan-8.71-amd64-windows.zip` , inside it is directory `bundle`, to it copy other files:
|
||||
7. Unzip `wekan-8.80-win64.zip` , inside it is directory `bundle`, to it copy other files:
|
||||
|
||||
```
|
||||
bundle (directory)
|
||||
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "غير محدد",
|
||||
"comments": "تعليقات",
|
||||
"comment": "تعليق",
|
||||
"comment-placeholder": "أكتب تعليق",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "التعليق فقط",
|
||||
"comment-only-desc": "يمكن التعليق على بطاقات فقط.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "نشط",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Премахни",
|
||||
"comments": "Comments",
|
||||
"comment": "Коментирай",
|
||||
"comment-placeholder": "Напиши коментар",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Само коментар",
|
||||
"comment-only-desc": "Може да коментира само в карти.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Потвърден",
|
||||
"active": "Активен",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Получена",
|
||||
"card-received-on": "Получена на",
|
||||
"card-end": "Завършена",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Desactivat",
|
||||
"comments": "Comments",
|
||||
"comment": "Comentari",
|
||||
"comment-placeholder": "Escriu un comentari",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Només comentaris",
|
||||
"comment-only-desc": "Només pots fer comentaris a les fitxes",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modificat a",
|
||||
"verified": "Verificat",
|
||||
"active": "Actiu",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Rebut",
|
||||
"card-received-on": "Rebut el",
|
||||
"card-end": "Final",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Nenastaveno",
|
||||
"comments": "Comments",
|
||||
"comment": "Komentář",
|
||||
"comment-placeholder": "Text komentáře",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Pouze komentáře",
|
||||
"comment-only-desc": "Může přidávat komentáře pouze do karet.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modifikováno",
|
||||
"verified": "Ověřen",
|
||||
"active": "Aktivní",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Přijato",
|
||||
"card-received-on": "Přijaté v",
|
||||
"card-end": "Konec",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Nenastaveno",
|
||||
"comments": "Comments",
|
||||
"comment": "Komentář",
|
||||
"comment-placeholder": "Text komentáře",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Pouze komentáře",
|
||||
"comment-only-desc": "Může přidávat komentáře pouze do karet.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modifikováno",
|
||||
"verified": "Ověřen",
|
||||
"active": "Aktivní",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Přijato",
|
||||
"card-received-on": "Přijaté v",
|
||||
"card-end": "Konec",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Nulstil",
|
||||
"comments": "Comments",
|
||||
"comment": "Kommentér",
|
||||
"comment-placeholder": "Skriv kommentar",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Kun kommentarer",
|
||||
"comment-only-desc": "Kan kun kommentere på kort.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verificeret",
|
||||
"active": "Aktiv",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Modtaget",
|
||||
"card-received-on": "Modtaget per",
|
||||
"card-end": "Slut",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Nicht festgelegt",
|
||||
"comments": "Comments",
|
||||
"comment": "Kommentar",
|
||||
"comment-placeholder": "Kommentar schreiben",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Nur Kommentare",
|
||||
"comment-only-desc": "Kann Karten nur kommentieren.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Geändert am",
|
||||
"verified": "Geprüft",
|
||||
"active": "Aktiv",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Empfangen",
|
||||
"card-received-on": "Empfangen am",
|
||||
"card-end": "Ende",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Nicht festgelegt",
|
||||
"comments": "Comments",
|
||||
"comment": "Kommentar speichern",
|
||||
"comment-placeholder": "Kommentar schreiben",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Nur Kommentare",
|
||||
"comment-only-desc": "Kann Karten nur kommentieren.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Geändert am",
|
||||
"verified": "Geprüft",
|
||||
"active": "Aktiv",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Empfangen",
|
||||
"card-received-on": "Empfangen am",
|
||||
"card-end": "Ende",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -78,21 +78,21 @@
|
||||
"activity-deleteComment": "löschte Kommentar %s",
|
||||
"activity-receivedDate": "hat Empfangsdatum zu %s geändert auf %s",
|
||||
"activity-startDate": "hat Startdatum zu %s geändert auf %s",
|
||||
"allboards.starred": "Starred",
|
||||
"allboards.starred": "Markiert",
|
||||
"allboards.templates": "Vorlagen",
|
||||
"allboards.remaining": "Remaining",
|
||||
"allboards.workspaces": "Workspaces",
|
||||
"allboards.add-workspace": "Add Workspace",
|
||||
"allboards.add-workspace-prompt": "Workspace name",
|
||||
"allboards.add-subworkspace": "Add Subworkspace",
|
||||
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||
"allboards.edit-workspace": "Edit workspace",
|
||||
"allboards.edit-workspace-name": "Workspace name",
|
||||
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||
"allboards.remaining": "Verbleibend",
|
||||
"allboards.workspaces": "Arbeitsplatz",
|
||||
"allboards.add-workspace": "Arbeitsplatz hinzufügen",
|
||||
"allboards.add-workspace-prompt": "Name des Arbeitsplatzes",
|
||||
"allboards.add-subworkspace": "Teilarbeitsplatz hinzufügen",
|
||||
"allboards.add-subworkspace-prompt": "Name des Teilarbeitsplatz",
|
||||
"allboards.edit-workspace": "Arbeitsplatz ändern",
|
||||
"allboards.edit-workspace-name": "Name des Arbeitsplatzes",
|
||||
"allboards.edit-workspace-icon": "Arbeitsplatzsymbol (markdown)",
|
||||
"allboards.workspace-menu": "Workspace menu",
|
||||
"workspace-settings": "Workspace Settings",
|
||||
"workspaceActionsPopup-title": "Workspace Settings",
|
||||
"allboards.workspace-color": "Color",
|
||||
"workspace-settings": "Arbeitsplatz-Einstellungen",
|
||||
"workspaceActionsPopup-title": "Arbeitsplatz-Einstellungen",
|
||||
"allboards.workspace-color": "Farbe",
|
||||
"allboards.delete-workspace-confirm": "Are you sure you want to delete this workspace?",
|
||||
"allboards.delete-workspace-confirm-check": "Confirm workspace deletion",
|
||||
"multi-selection-active": "Click checkboxes to select boards",
|
||||
@@ -215,8 +215,8 @@
|
||||
"board-view-gantt": "Gantt",
|
||||
"board-view-lists": "Listen",
|
||||
"bucket-example": "Like \"Bucket List\" for example",
|
||||
"calendar-previous-month-label": "Previous Month",
|
||||
"calendar-next-month-label": "Next Month",
|
||||
"calendar-previous-month-label": "Letzter Monat",
|
||||
"calendar-next-month-label": "Nächster Monat",
|
||||
"cancel": "Abbrechen",
|
||||
"card-archived": "Diese Karte wurde ins Archiv verschoben",
|
||||
"board-archived": "Dieses Board wurde ins Archiv verschoben.",
|
||||
@@ -228,7 +228,7 @@
|
||||
"card-archive-suggest-cancel": "Sie können die Karte später aus dem Archiv wiederherstellen.",
|
||||
"list-archive-pop": "List will not be visible on the board after archiving.",
|
||||
"list-archive-suggest": "You can later restore the list from the Archive in Board Settings.",
|
||||
"listArchivePopup-title": "Archive List?",
|
||||
"listArchivePopup-title": "Liste archivieren?",
|
||||
"swimlane-archive-pop": "Swimlane will not be visible on the board after archiving.",
|
||||
"swimlane-archive-suggest": "You can later restore the swimlane from the Archive in Board Settings.",
|
||||
"swimlaneArchivePopup-title": "Archive Swimlane?",
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Nicht festgelegt",
|
||||
"comments": "Kommentare",
|
||||
"comment": "Kommentar speichern",
|
||||
"comment-placeholder": "Kommentar schreiben",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Nur Kommentare",
|
||||
"comment-only-desc": "Kann Karten nur kommentieren.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -372,7 +372,7 @@
|
||||
"linkCardPopup-title": "Karte verknüpfen",
|
||||
"searchElementPopup-title": "Suche",
|
||||
"copyCardPopup-title": "Karte kopieren",
|
||||
"copyListPopup-title": "Copy List",
|
||||
"copyListPopup-title": "Liste kopieren",
|
||||
"copyManyCardsPopup-title": "Kopiere die Vorlage zu mehreren Karten",
|
||||
"copyManyCardsPopup-instructions": "Titel und Beschreibungen der Zielkarten im folgenden JSON-Format",
|
||||
"copyManyCardsPopup-format": "[ {\"title\": \"Titel der ersten Karte\", \"description\":\"Beschreibung der ersten Karte\"}, {\"title\":\"Titel der zweiten Karte\",\"description\":\"Beschreibung der zweiten Karte\"},{\"title\":\"Titel der letzten Karte\",\"description\":\"Beschreibung der letzten Karte\"} ]",
|
||||
@@ -399,9 +399,9 @@
|
||||
"custom-fields": "Benutzerdefinierte Felder",
|
||||
"date": "Datum",
|
||||
"date-format": "Date Format",
|
||||
"date-format-yyyy-mm-dd": "YYYY-MM-DD",
|
||||
"date-format-dd-mm-yyyy": "DD-MM-YYYY",
|
||||
"date-format-mm-dd-yyyy": "MM-DD-YYYY",
|
||||
"date-format-yyyy-mm-dd": "JJJJ-MM-TT",
|
||||
"date-format-dd-mm-yyyy": "TT-MM-JJJJ",
|
||||
"date-format-mm-dd-yyyy": "MM-TT-JJJJ",
|
||||
"decline": "Ablehnen",
|
||||
"default-avatar": "Standard Profilbild",
|
||||
"delete": "Löschen",
|
||||
@@ -427,7 +427,7 @@
|
||||
"editNotificationPopup-title": "Benachrichtigung ändern",
|
||||
"editProfilePopup-title": "Profil ändern",
|
||||
"email": "E-Mail",
|
||||
"email-address": "Email Address",
|
||||
"email-address": "E-Mail Adresse",
|
||||
"email-enrollAccount-subject": "Ihr Benutzerkonto auf __siteName__ wurde erstellt",
|
||||
"email-enrollAccount-text": "Hallo __user__,\n\num den Dienst nutzen zu können, klicken Sie bitte auf folgenden Link:\n\n__url__\n\nDanke.",
|
||||
"email-fail": "Senden der E-Mail fehlgeschlagen",
|
||||
@@ -475,10 +475,10 @@
|
||||
"export-card-field-people": "People (Creator, Owner, Members, Assignees)",
|
||||
"export-card-field-board-info": "Board Info (Board, List, Swimlane)",
|
||||
"export-card-field-dates": "Dates (Created, Received, Start, Due, End)",
|
||||
"export-card-attachment-filename": "Filename",
|
||||
"export-card-attachment-filename": "Dateiname",
|
||||
"export-card-attachment-size": "Größe",
|
||||
"export-card-attachment-type": "Typ",
|
||||
"export-card-attachment-uploaded-by": "Uploaded By",
|
||||
"export-card-attachment-uploaded-by": "Hochgeladen von",
|
||||
"export-card-attachment-uploaded-at": "Uploaded At",
|
||||
"export-card-attachment-image-previews": "Image Previews",
|
||||
"export-card-excel-no-disk-space": "Cannot export to Excel: not enough free disk space",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Geändert am",
|
||||
"verified": "Geprüft",
|
||||
"active": "Aktiv",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Empfangen",
|
||||
"card-received-on": "Empfangen am",
|
||||
"card-end": "Ende",
|
||||
@@ -1090,9 +1093,9 @@
|
||||
"my-cards": "Meine Karten",
|
||||
"card": "Karte",
|
||||
"today": "Today",
|
||||
"day": "Day",
|
||||
"week": "Week",
|
||||
"month": "Month",
|
||||
"day": "Tag",
|
||||
"week": "Woche",
|
||||
"month": "Monat",
|
||||
"list": "Liste",
|
||||
"board": "Board",
|
||||
"context-separator": "/",
|
||||
@@ -1153,7 +1156,7 @@
|
||||
"operator-debug": "Debug",
|
||||
"operator-org": "Organisation",
|
||||
"operator-team": "Team",
|
||||
"operator-title": "title",
|
||||
"operator-title": "Titel",
|
||||
"operator-description": "Beschreibung",
|
||||
"operator-customfield": "customfield",
|
||||
"operator-attachment-text": "Anhang",
|
||||
@@ -1460,7 +1463,7 @@
|
||||
"cron-error-time": "Zeit",
|
||||
"cron-error-message": "Error Message",
|
||||
"cron-error-details": "Details",
|
||||
"cron-clear-errors": "Clear All Errors",
|
||||
"cron-clear-errors": "Alle Fehlermeldungen löschen",
|
||||
"cron-retry-failed": "Retry Failed Migrations",
|
||||
"cron-resume-paused": "Resume Paused Migrations",
|
||||
"cron-errors-cleared": "All errors cleared successfully",
|
||||
@@ -1473,7 +1476,7 @@
|
||||
"filesystem-path-description": "Base path for file storage",
|
||||
"gridfs-enabled": "GridFS Enabled",
|
||||
"gridfs-enabled-description": "Use MongoDB GridFS for file storage",
|
||||
"all-migrations": "All Migrations",
|
||||
"all-migrations": "Alle Migrations",
|
||||
"select-migration": "Select Migration",
|
||||
"start": "Start",
|
||||
"pause": "Pause",
|
||||
@@ -1486,7 +1489,7 @@
|
||||
"migration-progress": "Migration Progress",
|
||||
"migration-start-failed": "Failed to start migrations",
|
||||
"migration-started": "Migrations started successfully",
|
||||
"migration-not-needed": "No migration needed",
|
||||
"migration-not-needed": "Keine Migration notwendig",
|
||||
"migration-status": "Migration Status",
|
||||
"migration-stop-confirm": "Are you sure you want to stop all migrations?",
|
||||
"migration-stop-failed": "Failed to stop migrations",
|
||||
@@ -1540,13 +1543,13 @@
|
||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||
"delete-duplicate-empty-lists-migration": "Lösche doppelte leere Listen",
|
||||
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||
"lost-cards": "Lost Cards",
|
||||
"lost-cards-list": "Restored Items",
|
||||
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||
"restore-all-archived-migration": "Restore All Archived",
|
||||
"restore-all-archived-migration": "Alles Archivierte wiederherstellen",
|
||||
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||
@@ -1556,33 +1559,31 @@
|
||||
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||
"migration-needed": "Migration Needed",
|
||||
"migration-complete": "Abgeschlossen",
|
||||
"migration-running": "Running...",
|
||||
"migration-successful": "Migration completed successfully",
|
||||
"migration-failed": "Migration failed",
|
||||
"migrations": "Migrations",
|
||||
"migration-running": "Läuft...",
|
||||
"migration-successful": "Migration erfolgreich abgeschlossen",
|
||||
"migration-failed": "Migration fehlgeschlagen",
|
||||
"migrations": "Migrationen",
|
||||
"migrations-admin-only": "Only board administrators can run migrations",
|
||||
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||
"no-issues-found": "No issues found",
|
||||
"run-migration": "Run Migration",
|
||||
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||
"run-comprehensive-migration-confirm": "Dadurch wird eine umfassende Migration durchgeführt, um die Integrität der Board-Daten zu überprüfen und gegebenenfalls zu korrigieren. Dies kann einen Moment dauern. Möchten Sie fortfahren?",
|
||||
"run-delete-duplicate-empty-lists-migration-confirm": "Dadurch werden zunächst alle gemeinsam genutzten Listen in Listen pro Swimlane umgewandelt und anschließend leere Listen gelöscht, für die es eine doppelte Liste mit demselben Titel gibt, die Karten enthält. Es werden nur wirklich überflüssige leere Listen entfernt. Möchten Sie fortfahren?",
|
||||
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
"migration-progress-current-step": "Aktueller Schritt",
|
||||
"migration-progress-status": "Status",
|
||||
"migration-progress-details": "Details",
|
||||
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"steps": "Schritte",
|
||||
"view": "Ansicht",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1594,11 +1595,11 @@
|
||||
"step-create-missing-lists": "Create Missing Lists",
|
||||
"step-update-cards": "Update Cards",
|
||||
"step-finalize": "Finalize",
|
||||
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||
"step-delete-duplicate-empty-lists": "Lösche doppelte leere Listen",
|
||||
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||
"step-restore-lists": "Restore Lists",
|
||||
"step-restore-cards": "Restore Cards",
|
||||
"step-restore-swimlanes": "Restore Swimlanes",
|
||||
"step-restore-lists": "Listen wiederherstellen",
|
||||
"step-restore-cards": "Karten wiederherstellen",
|
||||
"step-restore-swimlanes": "Swimlanes wiederherstellen",
|
||||
"step-fix-missing-ids": "Fix Missing IDs",
|
||||
"step-scan-users": "Checking board member avatars",
|
||||
"step-scan-files": "Checking board file attachments",
|
||||
@@ -1697,10 +1698,10 @@
|
||||
"unmigrated-boards": "Unmigrated Boards",
|
||||
"weight": "Gewicht",
|
||||
"cron": "Zeitplan",
|
||||
"current-step": "Current Step",
|
||||
"current-step": "Aktueller Schritt",
|
||||
"otp": "OTP Code",
|
||||
"create-account": "Create Account",
|
||||
"already-account": "Already have an account? Sign in",
|
||||
"create-account": "Konto erstellen",
|
||||
"already-account": "Hast du schon ein Konto? Anmelden",
|
||||
"available-repositories": "Available Repositories",
|
||||
"repositories": "Repositories",
|
||||
"repository": "Repository",
|
||||
@@ -1712,21 +1713,21 @@
|
||||
"upload-repository": "Upload/Update Repository",
|
||||
"api-endpoints": "API Endpoints",
|
||||
"sign-in-to-upload": "Sign In to upload repositories",
|
||||
"account-locked": "Account is temporarily locked due to too many failed login attempts. Please try again later.",
|
||||
"account-locked": "Das Konto wurde aufgrund zu vieler fehlgeschlagener Anmeldeversuche vorübergehend gesperrt. Bitte versuche es später erneut.",
|
||||
"otp-required": "OTP code required",
|
||||
"invalid-credentials": "Invalid username or password",
|
||||
"username-password-required": "Username and password are required",
|
||||
"password-mismatch": "Passwords do not match",
|
||||
"username-too-short": "Username must be at least 3 characters",
|
||||
"user-exists": "User already exists",
|
||||
"invalid-credentials": "Ungültiger Benutzername oder Passwort",
|
||||
"username-password-required": "Benutzername und Passwort sind erforderlich",
|
||||
"password-mismatch": "Die Passwörter stimmen nicht überein",
|
||||
"username-too-short": "Der Benutzername muss mindestens 3 Zeichen lang sein",
|
||||
"user-exists": "Der Benutzer existiert bereits",
|
||||
"account-created": "Account created! You can now sign in.",
|
||||
"account-creation-failed": "Failed to create account",
|
||||
"login": "Login",
|
||||
"confirm": "Bestätigen",
|
||||
"error": "Error",
|
||||
"file": "File",
|
||||
"error": "Fehler",
|
||||
"file": "Datei",
|
||||
"log": "Log",
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
"protocol": "Protokoll"
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Nicht festgelegt",
|
||||
"comments": "Kommentare",
|
||||
"comment": "Kommentar speichern",
|
||||
"comment-placeholder": "Kommentar schreiben",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Nur Kommentare",
|
||||
"comment-only-desc": "Kann Karten nur kommentieren.",
|
||||
"comment-assigned-only": "Nur zugewiesener Kommentar",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Geändert am",
|
||||
"verified": "Geprüft",
|
||||
"active": "Aktiv",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Empfangen",
|
||||
"card-received-on": "Empfangen am",
|
||||
"card-end": "Ende",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Gesamtfortschritt",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Σχόλιο",
|
||||
"comment-placeholder": "Συγγραφή Σχολίου",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Μόνο σχόλιο",
|
||||
"comment-only-desc": "Μπορεί μόνο να σχολιάζει σε κάρτες.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Επιβεβαιώθηκε",
|
||||
"active": "Ενεργό",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Ελήφθη",
|
||||
"card-received-on": "Ελήφθη στις",
|
||||
"card-end": "Τέλος",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Σχόλιο",
|
||||
"comment-placeholder": "Συγγραφή Σχολίου",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Μόνο σχόλιο",
|
||||
"comment-only-desc": "Μπορεί μόνο να σχολιάζει σε κάρτες.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Επιβεβαιώθηκε",
|
||||
"active": "Ενεργό",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Ελήφθη",
|
||||
"card-received-on": "Ελήφθη στις",
|
||||
"card-end": "Τέλος",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Komentoj",
|
||||
"comment": "Komento",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Deseleccionado",
|
||||
"comments": "Comments",
|
||||
"comment": "Comentario",
|
||||
"comment-placeholder": "Comentar",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comentar solamente",
|
||||
"comment-only-desc": "Puede comentar en tarjetas solamente.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verificado",
|
||||
"active": "Activo",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Recibido",
|
||||
"card-received-on": "Recibido en",
|
||||
"card-end": "Termino",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Desmarcar",
|
||||
"comments": "Comments",
|
||||
"comment": "Comentar",
|
||||
"comment-placeholder": "Escribir comentario",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Sólo comentarios",
|
||||
"comment-only-desc": "Solo puedes comentar en las tarjetas.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verificado",
|
||||
"active": "Activo",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Recibido",
|
||||
"card-received-on": "Recibido el",
|
||||
"card-end": "Finalizado",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Desmarcar",
|
||||
"comments": "Comments",
|
||||
"comment": "Comentar",
|
||||
"comment-placeholder": "Escribir comentario",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Sólo comentarios",
|
||||
"comment-only-desc": "Sólo puede comentar en las tarjetas.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verificado",
|
||||
"active": "Activo",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Recibido",
|
||||
"card-received-on": "Recibido el",
|
||||
"card-end": "Finalizado",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Desmarcar",
|
||||
"comments": "Comentarios",
|
||||
"comment": "Comentar",
|
||||
"comment-placeholder": "Escribir comentario",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Sólo comentarios",
|
||||
"comment-only-desc": "Solo puedes comentar en las tarjetas.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verificado",
|
||||
"active": "Activo",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Recibido",
|
||||
"card-received-on": "Recibido el",
|
||||
"card-end": "Finalizado",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Kuidas",
|
||||
"comment-placeholder": "Kirjutage kommentaar",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Ainult kommentaar",
|
||||
"comment-only-desc": "Saab kommenteerida ainult kaarte.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Muudetud aadressil",
|
||||
"verified": "Kinnitatud",
|
||||
"active": "Aktiivne",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Saabunud",
|
||||
"card-received-on": "Saabunud",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Zehaztu gabea",
|
||||
"comments": "Iruzkinak",
|
||||
"comment": "Iruzkina",
|
||||
"comment-placeholder": "Idatzi iruzkin bat",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Iruzkinak besterik ez",
|
||||
"comment-only-desc": "Iruzkinak txarteletan soilik egin daitezke",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Egiaztatuta",
|
||||
"active": "Gaituta",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Jasota",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Aztertu arbelaren egitura",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "بازنشانی",
|
||||
"comments": "نظرها",
|
||||
"comment": "نظر",
|
||||
"comment-placeholder": "درج نظر",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "فقط نظر",
|
||||
"comment-only-desc": "فقط میتواند روی کارتها نظر دهد.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "تغییر یافته در",
|
||||
"verified": "معتبر",
|
||||
"active": "فعال",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "رسیده",
|
||||
"card-received-on": "رسیده در",
|
||||
"card-end": "پایان",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "بازنشانی",
|
||||
"comments": "Comments",
|
||||
"comment": "نظر",
|
||||
"comment-placeholder": "درج نظر",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "فقط نظر",
|
||||
"comment-only-desc": "فقط میتواند روی کارتها نظر دهد.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "تغییر یافته در",
|
||||
"verified": "معتبر",
|
||||
"active": "فعال",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "رسیده",
|
||||
"card-received-on": "رسیده در",
|
||||
"card-end": "پایان",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Poista asetus",
|
||||
"comments": "Kommentit",
|
||||
"comment": "Kommentti",
|
||||
"comment-placeholder": "Kirjoita kommentti",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Vain kommentointi",
|
||||
"comment-only-desc": "Voi vain kommentoida kortteja",
|
||||
"comment-assigned-only": "Vain käsittelijän kommentti",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Muokattu",
|
||||
"verified": "Varmistettu",
|
||||
"active": "Aktiivinen",
|
||||
"active-team": "Aktiivinen tiimi",
|
||||
"active-org": "Aktiivinen organisaatio",
|
||||
"active-person": "Aktiivinen henkilö",
|
||||
"card-received": "Vastaanotettu",
|
||||
"card-received-on": "Vastaanotettu",
|
||||
"card-end": "Loppuu",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "Tämä päivittää taulun jäsenten avatar-URL-osoitteet käyttämään oikeaa tallennustilaa. Jatketaanko?",
|
||||
"run-fix-all-file-urls-migration-confirm": "Tämä päivittää kaikkien tällä taululla olevien tiedostoliitteiden URL-osoitteet käyttämään oikeaa tallennuspalvelinta. Jatketaanko?",
|
||||
"restore-lost-cards-nothing-to-restore": "Ei kadonneita uintikaistoja, listoja tai kortteja palautettavaksi",
|
||||
|
||||
"migration-progress-title": "Taulu siirto meneillään",
|
||||
"migration-progress-overall": "Kokonaisedistyminen",
|
||||
"migration-progress-current-step": "Nykyinen vaihe",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "askelta",
|
||||
"view": "Näkymä",
|
||||
"has-swimlanes": "Sisältää uimaratoja",
|
||||
|
||||
"step-analyze-board-structure": "Analysoi taulun rakennetta",
|
||||
"step-fix-orphaned-cards": "Korjaa orvot kortit",
|
||||
"step-convert-shared-lists": "Muunna jaetut listat",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Kirjaudu ulos",
|
||||
"server": "Palvelin",
|
||||
"protocol": "Protokolla"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Enlever",
|
||||
"comments": "Comments",
|
||||
"comment": "Commenter",
|
||||
"comment-placeholder": "Écrire un commentaire",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Commentaire uniquement",
|
||||
"comment-only-desc": "Ne peut que commenter des cartes.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modifié le",
|
||||
"verified": "Vérifié",
|
||||
"active": "Actif",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Reçue",
|
||||
"card-received-on": "Reçue le",
|
||||
"card-end": "Fin",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Enlever",
|
||||
"comments": "Commentaires",
|
||||
"comment": "Commenter",
|
||||
"comment-placeholder": "Écrire un commentaire",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Commentaire uniquement",
|
||||
"comment-only-desc": "Ne peut que commenter des cartes.",
|
||||
"comment-assigned-only": "Commentaire assigné uniquement",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modifié le",
|
||||
"verified": "Vérifié",
|
||||
"active": "Actif",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Reçue",
|
||||
"card-received-on": "Reçue le",
|
||||
"card-end": "Fin",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "Cette opération mettra à jour les URL des avatars des participants du tableau pour utiliser le bon backend de stockage. Continuer ?",
|
||||
"run-fix-all-file-urls-migration-confirm": "Cette opération mettra à jour toutes les URL des pièces jointes de ce tableau pour utiliser le bon backend de stockage. Continuer ?",
|
||||
"restore-lost-cards-nothing-to-restore": "Aucun couloir, liste ou carte perdu à restaurer",
|
||||
|
||||
"migration-progress-title": "Migration du tableau en cours",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Étape courante",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "Étapes",
|
||||
"view": "Vue",
|
||||
"has-swimlanes": "A des couloirs",
|
||||
|
||||
"step-analyze-board-structure": "Analyser la structure du tableau",
|
||||
"step-fix-orphaned-cards": "Corriger les cartes orphelines",
|
||||
"step-convert-shared-lists": "Convertir les listes partagées",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Déconnexion",
|
||||
"server": "Serveur",
|
||||
"protocol": "Protocole"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comentario",
|
||||
"comment-placeholder": "Escribir un comentario",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comentario",
|
||||
"comment-placeholder": "Escribir un comentario",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "בטל הגדרה",
|
||||
"comments": "הערות",
|
||||
"comment": "לפרסם",
|
||||
"comment-placeholder": "כתיבת הערה",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "תגובות בלבד",
|
||||
"comment-only-desc": "ניתן להגיב על כרטיסים בלבד.",
|
||||
"comment-assigned-only": "רק תגובה מוקצית",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "נערך ב־",
|
||||
"verified": "עבר אימות",
|
||||
"active": "פעיל",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "התקבל",
|
||||
"card-received-on": "התקבל במועד",
|
||||
"card-end": "סיום",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "הפעולה הזאת תעדכן את כתובות התמונות הייצוגיות לחברי הלוח כך שישתמשו במנגנון האחסון הנכון. להמשיך?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "מתבצעת הסבת לוח",
|
||||
"migration-progress-overall": "סך כל ההתקדמות",
|
||||
"migration-progress-current-step": "השלב הנוכחי",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "שלבים",
|
||||
"view": "תצוגה",
|
||||
"has-swimlanes": "יש מסלולים",
|
||||
|
||||
"step-analyze-board-structure": "ניתוח מבנה לוח",
|
||||
"step-fix-orphaned-cards": "תיקון כרטיסים יתומים",
|
||||
"step-convert-shared-lists": "המרת רשימות משותפות",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "יציאה",
|
||||
"server": "שרת",
|
||||
"protocol": "פרוטוקול"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "टिप्पणियाँ",
|
||||
"comment": "टिप्पणी",
|
||||
"comment-placeholder": "टिप्पणी लिखें",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "केवल टिप्पणी करें",
|
||||
"comment-only-desc": "केवल कार्ड पर टिप्पणी कर सकते हैं।",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "टिप्पणियाँ",
|
||||
"comment": "टिप्पणी",
|
||||
"comment-placeholder": "टिप्पणी लिखें",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "केवल टिप्पणी करें",
|
||||
"comment-only-desc": "केवल कार्ड पर टिप्पणी कर सकते हैं।",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comment": "Komentiraj",
|
||||
"comment-placeholder": "Napiši komentar",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
"card-end": "End",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,7 @@
|
||||
"unset-color": "Nincs megadva",
|
||||
"comments": "Comments",
|
||||
"comment": "Megjegyzés",
|
||||
"comment-placeholder": "Megjegyzés írása",
|
||||
"comment-placeholder": "",
|
||||
"comment-only": "Csak megjegyzés",
|
||||
"comment-only-desc": "Csak megjegyzést írhat a kártyákhoz.",
|
||||
"comment-assigned-only": "Only Assigned Comment",
|
||||
@@ -808,6 +808,9 @@
|
||||
"modifiedAt": "Módosult",
|
||||
"verified": "Ellenőrizve",
|
||||
"active": "Aktív",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Érkezett",
|
||||
"card-received-on": "Ekkor érkezett",
|
||||
"card-end": "Befejezés",
|
||||
@@ -1572,7 +1575,6 @@
|
||||
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||
|
||||
"migration-progress-title": "Board Migration in Progress",
|
||||
"migration-progress-overall": "Overall Progress",
|
||||
"migration-progress-current-step": "Current Step",
|
||||
@@ -1582,7 +1584,6 @@
|
||||
"steps": "steps",
|
||||
"view": "View",
|
||||
"has-swimlanes": "Has Swimlanes",
|
||||
|
||||
"step-analyze-board-structure": "Analyze Board Structure",
|
||||
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||
"step-convert-shared-lists": "Convert Shared Lists",
|
||||
@@ -1729,4 +1730,4 @@
|
||||
"logout": "Logout",
|
||||
"server": "Server",
|
||||
"protocol": "Protocol"
|
||||
}
|
||||
}
|
||||
Loaded 100 of 202 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user