Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c5fefc1414 | ||
|
|
c825895ceb | ||
|
|
9488972ed8 | ||
|
|
1f4bed38f7 | ||
|
|
747112957a | ||
|
|
18228096f9 | ||
|
|
d0ea5bf500 | ||
|
|
74fe91fa3a | ||
|
|
d4e3075fcc | ||
|
|
413ae5f20e | ||
|
|
e23f86f542 | ||
|
|
b3c47dbe84 | ||
|
|
b10c2b9a15 | ||
|
|
bb6910acd1 | ||
|
|
76b000820e | ||
|
|
50b874629c | ||
|
|
4d145ab4ad | ||
|
|
4d67a4641f | ||
|
|
bc2eab6f9d | ||
|
|
3ccce75863 | ||
|
|
b390b266e2 | ||
|
|
561af8926c | ||
|
|
5717dc2cf4 | ||
|
|
d0e64ad6d2 | ||
|
|
8e1a735ec7 | ||
|
|
1301d67295 | ||
|
|
7c239f5218 | ||
|
|
61235c953c | ||
|
|
ea65a0308d | ||
|
|
f840b07c02 | ||
|
|
8af719d39e | ||
|
|
c1a4250bd2 | ||
|
|
b4b442f8a8 | ||
|
|
b7e76fcfa1 | ||
|
|
01950cc796 | ||
|
|
14f2022e21 | ||
|
|
23bac73559 | ||
|
|
2de9b94b01 | ||
|
|
05d1736f5f | ||
|
|
db5346fc5c | ||
|
|
f09f5bd737 | ||
|
|
d96a1a5c9e | ||
|
|
ad3cc9c087 | ||
|
|
d0c7bf65a4 | ||
|
|
bb6ac70f63 | ||
|
|
c38b9da7d6 | ||
|
|
19153ca489 | ||
|
|
8e7a5e8cb5 | ||
|
|
1407059937 | ||
|
|
a2911bc9c3 | ||
|
|
f99b735746 | ||
|
|
4510ddda15 | ||
|
|
028ec46f46 | ||
|
|
c0e4e01deb | ||
|
|
cfcf682134 | ||
|
|
27bd9817d7 | ||
|
|
dc389a68ab | ||
|
|
6d982cdfd9 | ||
|
|
827ee615c1 | ||
|
|
f5f0ba721e | ||
|
|
1344f85986 | ||
|
|
e7462ada12 | ||
|
|
11199b6225 | ||
|
|
345aece0f2 | ||
|
|
912c84422b | ||
|
|
b402676079 | ||
|
|
908a5fc60d | ||
|
|
38e57d3635 | ||
|
|
14167b19b9 | ||
|
|
fc548b426d | ||
|
|
094f13934c | ||
|
|
71acd9603e | ||
|
|
341f655ab7 | ||
|
|
0c5323c106 | ||
|
|
7f871fdf30 | ||
|
|
6347b40a02 | ||
|
|
bce84a432a | ||
|
|
b6fc4deb63 | ||
|
|
6b48f9e259 | ||
|
|
44b7666426 | ||
|
|
ef70ed76a2 | ||
|
|
a1a1b3d1ee | ||
|
|
0326757399 | ||
|
|
edbc8ed92b | ||
|
|
07e9ec0617 | ||
|
|
18d0fa4327 | ||
|
|
666ee84033 | ||
|
|
120642f47d | ||
|
|
148b81262d | ||
|
|
c41467f76e | ||
|
|
c83e83b8b1 | ||
|
|
563a508e26 | ||
|
|
1d8347cc23 | ||
|
|
874abf2c41 | ||
|
|
3e18f820ea | ||
|
|
b571f1c953 | ||
|
|
fd69c7ceb8 | ||
|
|
d15faa1890 | ||
|
|
0c7e12c5e7 | ||
|
|
36a3077853 | ||
|
|
51bc23dbd9 | ||
|
|
0b1e0bd395 | ||
|
|
151aafd114 | ||
|
|
16c8a65a1c | ||
|
|
f3133e9cd8 | ||
|
|
de84aa7674 | ||
|
|
1bdbfe86bb | ||
|
|
397b9f439e | ||
|
|
261e0aee0f | ||
|
|
a6d9bde658 | ||
|
|
8d0a07e1a8 | ||
|
|
659615e6f2 | ||
|
|
9f0b82c0d5 | ||
|
|
9a23dcc991 | ||
|
|
980d345305 | ||
|
|
41f76ee974 | ||
|
|
83a60e6303 | ||
|
|
7b23c85117 | ||
|
|
ff3900d100 | ||
|
|
e5e4b8ebfb | ||
|
|
9516b75d65 |
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@9780b0c442fbb1117ed29e0efdff1e18412f7567
|
||||
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
@@ -48,14 +48,14 @@ jobs:
|
||||
# https://github.com/docker/metadata-action
|
||||
- name: Extract Docker metadata
|
||||
id: meta
|
||||
uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96
|
||||
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
|
||||
# Build and push Docker image with Buildx (don't push on PR)
|
||||
# https://github.com/docker/build-push-action
|
||||
- name: Build and push Docker image
|
||||
uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355
|
||||
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4
|
||||
with:
|
||||
context: .
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
|
||||
@@ -25,6 +25,6 @@ jobs:
|
||||
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
|
||||
|
||||
- name: Run chart-releaser
|
||||
uses: helm/chart-releaser-action@v1.6.0
|
||||
uses: helm/chart-releaser-action@v1.7.0
|
||||
env:
|
||||
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
|
||||
+173
@@ -15,6 +15,179 @@ Fixing other platforms In Progress.
|
||||
|
||||
[How to upgrade WeKan](https://github.com/wekan/wekan/issues/4585)
|
||||
|
||||
# v7.88 2025-04-25 WeKan ® release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Reverted translation fix that sometimes did not work](https://github.com/wekan/wekan/commit/c825895cebd24355d076741512c9aa16844393d9).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v7.87 2025-04-25 WeKan ® release
|
||||
|
||||
Note: This release does not work, there is bugs. Use newest release.
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Fix typos](https://github.com/wekan/wekan/commit/d0ea5bf50067fd76359330986edbad8dd1fbcdcc).
|
||||
Thanks to xet7.
|
||||
- [Fix more contrasting issues](https://github.com/wekan/wekan/pull/5750).
|
||||
Thanks to walster001.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v7.86 2025-04-25 WeKan ® release
|
||||
|
||||
Note: This release does not work, there is typos. Use newest release.
|
||||
|
||||
This release adds the following updates:
|
||||
|
||||
- [Improve impersonate user documentation in docs/Admin/Impersonate-user.md](https://github.com/wekan/wekan/pull/5746).
|
||||
Thanks to nourguidara.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Add toggle watch icon on card. Add questions are you sure to duplicate board and archive board](https://github.com/wekan/wekan/pull/5745).
|
||||
Thanks to Rayene123.
|
||||
- [Fix translations not working](https://github.com/wekan/wekan/pull/5748).
|
||||
Thanks to nourguidara.
|
||||
- [Fix contrast issue checkbox at Exodark theme](https://github.com/wekan/wekan/pull/5749).
|
||||
Thanks to walster001.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v7.85 2025-04-21 WeKan ® release
|
||||
|
||||
This release adds the following updates:
|
||||
|
||||
- Updated Browser compatibility matrix, adding Iris browser at RISC OS Direct, and fixing links.
|
||||
[Part1](https://github.com/wekan/wekan/commit/db5346fc5c7407160f381c0fcf4a87204206ed55),
|
||||
[Part2](https://github.com/wekan/wekan/commit/05d1736f5f21e93e83b2e25029c6cab6c5106398).
|
||||
Thanks to xet7.
|
||||
- [Updated to MongoDB 6.0.22](https://github.com/wekan/wekan/commit/c1a4250bd2e26be5549704234a3cfb5306120352).
|
||||
Thanks to MongoDB developers.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Fix board sidebar menu doesn't open in mobile](https://github.com/wekan/wekan/commit/01950cc796697fa201ac9e4376cb204d308e8181).
|
||||
Thanks to mimZD and xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v7.84 2025-03-23 WeKan ® release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Time on minicard for Start/End/Due Date](https://github.com/wekan/wekan/pull/5712).
|
||||
Thanks to Rayene123.
|
||||
|
||||
and adds the following updates:
|
||||
|
||||
- [Added developer docs about Login code](https://github.com/wekan/wekan/commit/c0e4e01deb936653df69b4fd21598ac27cd349a0).
|
||||
Thanks to xet7.
|
||||
- Updated dependencies.
|
||||
[Part 1](https://github.com/wekan/wekan/pull/5718),
|
||||
[Part 2](https://github.com/wekan/wekan/commit/bb6ac70f63b6f3568b7c943417c698615936a956).
|
||||
Thanks to developers of dependencies.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Fixed typo at Shortcuts, now became visible translations of assignees visibility 1-9 shortcuts](https://github.com/wekan/wekan/commit/4510ddda1507bc775b9523d3673adba48d7a8385).
|
||||
Thanks to xet7.
|
||||
- [Fixed building OpenAPI docs](https://github.com/wekan/wekan/commit/a2911bc9c3bd94ef583388931d2cd354cc8657e3).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v7.83 2025-03-08 WeKan ® release
|
||||
|
||||
This release adds the following updates:
|
||||
|
||||
- [Adding Development information to readme](https://github.com/wekan/wekan/pull/5702).
|
||||
Thanks to adam-fu.
|
||||
- Updated GitHub actions.
|
||||
[Part 1](https://github.com/wekan/wekan/pull/5703),
|
||||
[Part 2](https://github.com/wekan/wekan/pull/5704).
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Removed siteurl from manifest to fix browser console error about not matching URL](https://github.com/wekan/wekan/commit/b402676079517e463ed291285f69c04126a00975).
|
||||
Thanks to xet7.
|
||||
- [Exception while invoking method 'copyCard' TypeError: Cannot read property 'name' of undefined](https://github.com/wekan/wekan/pull/5711).
|
||||
Thanks to Firas-Git.
|
||||
- [Comment out error message of non-existing Custom Field](https://github.com/wekan/wekan/commit/908a5fc60d5d574a36d4bfd496d3a16fd267ae75).
|
||||
Thanks to xet7.
|
||||
- [Reverted Docker changes of WeKan v7.68 to get WeKan Docker version working](https://github.com/wekan/wekan/commit/e7462ada12ec8edfd08d6c3b3a97a034211d51eb).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v7.82 2025-02-24 WeKan ® release
|
||||
|
||||
v7.82 Docker version is broken: https://github.com/wekan/wekan/issues/5697 . Snap Candidate works.
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Add possibility to use a token in place of ipaddress to access metrics route](https://github.com/wekan/wekan/pull/5682).
|
||||
Thanks to salleman33.
|
||||
|
||||
and adds the following updates:
|
||||
|
||||
- [Updated dependencies](https://github.com/wekan/wekan/pull/5691).
|
||||
Thanks to dependabot.
|
||||
- [Updated requirements at docs](https://github.com/wekan/wekan/commit/148b81262d0d143460e881d645fefa6740aae40d).
|
||||
Thanks to mueller-ma.
|
||||
- [Updated dependencies](https://github.com/wekan/wekan/commit/666ee8403388f7d5e1a30cf0e53bc46a70bf1c40).
|
||||
Thanks to developes of dependencies.
|
||||
- [Fixed building WeKan. Updated dompurify. Forked Meteor 2.14 version of meteor-node-stubs to update elliptic](https://github.com/wekan/wekan/commit/18d0fa43275cd2955dd6416213e316ca08a62255).
|
||||
Thanks to developers of depedencies and xet7.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Added missing ) character](https://github.com/wekan/wekan/commit/563a508e269be87eb713e2888409525e1ba82001).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v7.81 2025-02-07 WeKan ® release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Helm Chart: Added secretManaged value for enabling or disabling the creation of secret by Helm](https://github.com/wekan/charts/pull/39).
|
||||
Thanks to salleman33.
|
||||
|
||||
and adds the following updates:
|
||||
|
||||
- [Updated Docker Actions](https://github.com/wekan/wekan/pull/5670).
|
||||
Thanks to dependabot.
|
||||
- [Added Meteor 3.1 learning course to docs](https://github.com/wekan/wekan/commit/0c7e12c5e7f322bdbaaa61100e66153dd0b92e4d).
|
||||
Thanks to producer of learning course.
|
||||
- [Upgraded to MongoDB 6.0.20 at Snap Candidate](https://github.com/wekan/wekan/commit/b571f1c9530b899db75bf28a03c18277a9b77cb8).
|
||||
Thanks to MongoDB developers.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Fixed env variable METRICS_ACCEPTED_IP_ADDRESS to be same as at docs](https://github.com/wekan/wekan/commit/0b1e0bd39569175668c195b63dde91bf0e6f1b24).
|
||||
Thanks to salleman33.
|
||||
- [Fixed misspelling of hours at env variable setting LDAP_BACKGROUND_SYNC_INTERVAL](https://github.com/wekan/wekan/commit/36a307785369337a788499065f64175971878930).
|
||||
Thanks to hubermam.
|
||||
- [Helm Chart: Restore pod security context in deployment](https://github.com/wekan/charts/pull/40).
|
||||
Thanks to adalinesimonian.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v7.80 2025-01-12 WeKan ® release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Fix card updating issues with ReactiveCache when using keyboard shortcuts](https://github.com/wekan/wekan/pull/5654).
|
||||
Thanks to NadavTasher.
|
||||
- [Fix assignee toggling keyboard shortcut to only toggle current board members](https://github.com/wekan/wekan/pull/5655).
|
||||
Thanks to NadavTasher.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v7.79 2025-01-02 WeKan ® release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
+133
-95
@@ -1,76 +1,31 @@
|
||||
FROM scratch AS downloads
|
||||
|
||||
# Download NodeJS bundle
|
||||
ADD https://static.meteor.com/dev-bundle-node-os/v14.21.4/node-v14.21.4-linux-x64.tar.gz node.tar.gz
|
||||
|
||||
# Download Meteor bundle
|
||||
ADD https://static.meteor.com/packages-bootstrap/2.16/meteor-bootstrap-os.linux.x86_64.tar.gz meteor.tar.gz
|
||||
|
||||
FROM ubuntu:24.04 AS build
|
||||
|
||||
# Install node from official archive
|
||||
RUN --mount=type=bind,from=downloads,source=node.tar.gz,target=node.tar.gz \
|
||||
tar xzf node.tar.gz --strip-components=1 --keep-old-files --no-same-owner
|
||||
|
||||
# Install meteor from official archive
|
||||
RUN --mount=type=bind,from=downloads,source=meteor.tar.gz,target=meteor.tar.gz \
|
||||
tar xzf meteor.tar.gz -C $HOME --no-same-owner
|
||||
|
||||
# Update the npm version
|
||||
RUN npm install -g npm@6.14.17
|
||||
|
||||
# Install several build dependencies
|
||||
RUN apt update && \
|
||||
apt install --yes --no-install-suggests --no-install-recommends ssh git g++ curl ca-certificates && \
|
||||
rm -r /var/lib/apt/lists
|
||||
|
||||
# Change to temporary working directory
|
||||
WORKDIR /workdir
|
||||
|
||||
# Copy package.json and package-lock.json to install application dependencies
|
||||
COPY package.json .
|
||||
COPY package-lock.json .
|
||||
|
||||
# Install build dependencies
|
||||
RUN $HOME/.meteor/meteor npm install --production
|
||||
|
||||
# Copy meteor application configurations
|
||||
COPY .meteor .meteor
|
||||
|
||||
# Copy application sources
|
||||
COPY packages packages
|
||||
COPY imports imports
|
||||
COPY config config
|
||||
COPY models models
|
||||
COPY public public
|
||||
COPY server server
|
||||
COPY client client
|
||||
|
||||
# Build the application
|
||||
RUN $HOME/.meteor/meteor build --directory /build --allow-superuser
|
||||
|
||||
# Enter server bundle directory
|
||||
WORKDIR /build/bundle/programs/server
|
||||
|
||||
# Install server dependencies
|
||||
RUN $HOME/.meteor/meteor npm install --production
|
||||
|
||||
# Enter installation directory of fibers
|
||||
WORKDIR /build/bundle/programs/server/node_modules/fibers
|
||||
|
||||
# Build fibers integrations
|
||||
RUN node build.js
|
||||
|
||||
FROM ubuntu:24.04 AS wekan
|
||||
|
||||
# Add metadata to image
|
||||
FROM ubuntu:24.04
|
||||
LABEL maintainer="wekan"
|
||||
LABEL org.opencontainers.image.ref.name="ubuntu"
|
||||
LABEL org.opencontainers.image.version="24.04"
|
||||
LABEL org.opencontainers.image.source="https://github.com/wekan/wekan"
|
||||
|
||||
# Set default environment variables
|
||||
ENV WITH_API=true \
|
||||
# 2022-04-25:
|
||||
# - gyp does not yet work with Ubuntu 22.04 ubuntu:rolling,
|
||||
# so changing to 21.10. https://github.com/wekan/wekan/issues/4488
|
||||
|
||||
# 2021-09-18:
|
||||
# - Above Ubuntu base image copied from Docker Hub ubuntu:hirsute-20210825
|
||||
# to Quay to avoid Docker Hub rate limits.
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
ENV BUILD_DEPS="apt-utils gnupg gosu wget bzip2 g++ curl libarchive-tools build-essential git ca-certificates python3"
|
||||
|
||||
ENV \
|
||||
DEBUG=false \
|
||||
NODE_VERSION=v14.21.4 \
|
||||
METEOR_RELEASE=METEOR@2.14 \
|
||||
USE_EDGE=false \
|
||||
METEOR_EDGE=1.5-beta.17 \
|
||||
NPM_VERSION=6.14.17 \
|
||||
FIBERS_VERSION=4.0.1 \
|
||||
ARCHITECTURE=linux-x64 \
|
||||
SRC_PATH=./ \
|
||||
WITH_API=true \
|
||||
RESULTS_PER_PAGE="" \
|
||||
DEFAULT_BOARD_ID="" \
|
||||
ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=3 \
|
||||
@@ -203,36 +158,119 @@ ENV WITH_API=true \
|
||||
WRITABLE_PATH=/data \
|
||||
S3=""
|
||||
|
||||
# Install node and application sources from build stage
|
||||
RUN --mount=type=bind,from=downloads,source=node.tar.gz,target=node.tar.gz \
|
||||
--mount=type=bind,from=build,source=/build,target=/build \
|
||||
# Install NodeJS
|
||||
tar xzf node.tar.gz --strip-components=1 --keep-old-files --no-same-owner && \
|
||||
# Add the wekan user
|
||||
useradd --uid 999 --user-group --system wekan && \
|
||||
# Copy wekan bundle
|
||||
cp -r /build/bundle /wekan && \
|
||||
# Remove the web.browser.legacy platform
|
||||
rm -r /wekan/programs/web.browser.legacy && \
|
||||
# Change ownership of wekan directory
|
||||
chown wekan:wekan -R /wekan && \
|
||||
# Create the data directory
|
||||
mkdir /data && \
|
||||
# Change ownership of data directory
|
||||
chown wekan:root -R /data
|
||||
# NODE_OPTIONS="--max_old_space_size=4096"
|
||||
|
||||
#---------------------------------------------
|
||||
# == at docker-compose.yml: AUTOLOGIN WITH OIDC/OAUTH2 ====
|
||||
# https://github.com/wekan/wekan/wiki/autologin
|
||||
#- OIDC_REDIRECTION_ENABLED=true
|
||||
#---------------------------------------------------------------------
|
||||
|
||||
# Copy the app to the image
|
||||
COPY ${SRC_PATH} /home/wekan/app
|
||||
|
||||
# Install OS
|
||||
RUN <<EOR
|
||||
set -o xtrace
|
||||
|
||||
# Add non-root user wekan
|
||||
useradd --user-group --system --home-dir /home/wekan wekan
|
||||
# OS dependencies
|
||||
apt-get update --assume-yes
|
||||
apt-get install --assume-yes --no-install-recommends ${BUILD_DEPS}
|
||||
|
||||
# Meteor installer doesn't work with the default tar binary, so using bsdtar while installing.
|
||||
# https://github.com/coreos/bugs/issues/1095#issuecomment-350574389
|
||||
cp $(which tar) $(which tar)~
|
||||
ln -sf $(which bsdtar) $(which tar)
|
||||
|
||||
# Install NodeJS
|
||||
cd /tmp
|
||||
|
||||
# Download nodejs
|
||||
wget "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz"
|
||||
wget "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/SHASUMS256.txt"
|
||||
|
||||
# Verify nodejs authenticity
|
||||
grep "node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz" "SHASUMS256.txt" | shasum -a 256 -c -
|
||||
rm -f "SHASUMS256.txt"
|
||||
|
||||
# Install Node
|
||||
tar xzf "node-$NODE_VERSION-$ARCHITECTURE.tar.gz" -C /usr/local --strip-components=1 --no-same-owner
|
||||
rm "node-$NODE_VERSION-$ARCHITECTURE.tar.gz" "SHASUMS256.txt"
|
||||
ln -s "/usr/local/bin/node" "/usr/local/bin/nodejs"
|
||||
mkdir -p "/opt/nodejs/lib/node_modules/fibers/.node-gyp" "/root/.node-gyp/${NODE_VERSION} /home/wekan/.config"
|
||||
|
||||
# Install node dependencies
|
||||
npm install -g npm@${NPM_VERSION} --production
|
||||
chown --recursive wekan:wekan /home/wekan/.config
|
||||
|
||||
# Install Meteor
|
||||
cd /home/wekan
|
||||
chown --recursive wekan:wekan /home/wekan
|
||||
echo "Starting meteor ${METEOR_RELEASE} installation... \n"
|
||||
gosu wekan:wekan curl https://install.meteor.com/ | /bin/sh
|
||||
mv /root/.meteor /home/wekan/
|
||||
chown --recursive wekan:wekan /home/wekan/.meteor
|
||||
|
||||
sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' /home/wekan/app/packages/meteor-useraccounts-core/package.js
|
||||
cd /home/wekan/.meteor
|
||||
gosu wekan:wekan /home/wekan/.meteor/meteor -- help
|
||||
|
||||
# Build app (Production)
|
||||
cd /home/wekan/app
|
||||
mkdir -p /home/wekan/.npm
|
||||
chown --recursive wekan:wekan /home/wekan/.npm
|
||||
chmod u+w *.json
|
||||
gosu wekan:wekan meteor npm install --production
|
||||
gosu wekan:wekan /home/wekan/.meteor/meteor build --directory /home/wekan/app_build
|
||||
cd /home/wekan/app_build/bundle/programs/server/
|
||||
chmod u+w *.json
|
||||
gosu wekan:wekan meteor npm install --production
|
||||
cd node_modules/fibers
|
||||
node build.js
|
||||
cd ../..
|
||||
# Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
|
||||
rm -rf /home/wekan/app_build/bundle/programs/web.browser.legacy
|
||||
mv /home/wekan/app_build/bundle /build
|
||||
|
||||
# Put back the original tar
|
||||
mv $(which tar)~ $(which tar)
|
||||
|
||||
# Cleanup
|
||||
apt-get remove --purge --assume-yes ${BUILD_DEPS}
|
||||
npm uninstall -g api2html
|
||||
apt-get autoremove --assume-yes
|
||||
apt-get clean --assume-yes
|
||||
rm -Rf /tmp/*
|
||||
rm -Rf /var/lib/apt/lists/*
|
||||
rm -Rf /var/cache/apt
|
||||
rm -Rf /var/lib/apt/lists
|
||||
rm -Rf /home/wekan/app_build
|
||||
rm -Rf /home/wekan/app
|
||||
rm -Rf /home/wekan/.meteor
|
||||
|
||||
mkdir /data
|
||||
chown wekan --recursive /data
|
||||
EOR
|
||||
|
||||
# Change to the wekan user
|
||||
USER wekan
|
||||
|
||||
# Set the port to listen on
|
||||
ENV PORT=8080
|
||||
EXPOSE ${PORT}
|
||||
EXPOSE $PORT
|
||||
|
||||
# Define the stop signal for node
|
||||
STOPSIGNAL SIGINT
|
||||
STOPSIGNAL SIGKILL
|
||||
WORKDIR /home/wekan/app
|
||||
|
||||
# Declare a volume on /data
|
||||
VOLUME /data
|
||||
|
||||
# Set startup command
|
||||
CMD ["node", "/wekan/main.js"]
|
||||
#---------------------------------------------------------------------
|
||||
# https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132
|
||||
# Add more Node heap:
|
||||
# NODE_OPTIONS="--max_old_space_size=4096"
|
||||
# Add more stack:
|
||||
# bash -c "ulimit -s 65500; exec node --stack-size=65500 main.js"
|
||||
#---------------------------------------------------------------------
|
||||
#
|
||||
# CMD ["node", "/build/main.js"]
|
||||
# CMD ["bash", "-c", "ulimit -s 65500; exec node --stack-size=65500 /build/main.js"]
|
||||
# CMD ["bash", "-c", "ulimit -s 65500; exec node --stack-size=65500 --max-old-space-size=8192 /build/main.js"]
|
||||
CMD ["bash", "-c", "ulimit -s 65500; exec node /build/main.js"]
|
||||
@@ -107,6 +107,14 @@ that by providing one-click installation on various platforms.
|
||||
We also welcome sponsors for features and bugfixes.
|
||||
By working directly with WeKan ® you get the benefit of active maintenance and new features added by growing WeKan ® developer community.
|
||||
|
||||
## Getting Started with Development
|
||||
|
||||
The default branch uses [Meteor 2 with Node.js 14](https://wekan.github.io/install/).
|
||||
|
||||
To contribute, [create a fork](https://github.com/wekan/wekan/wiki/Emoji#2-create-fork-of-httpsgithubcomwekanwekan-at-github-web-page) and run `./rebuild-wekan.sh` (or `./rebuild-wekan.bat` on Windows) as detailed [here](https://github.com/wekan/wekan/wiki/Emoji#3-select-option-1-to-install-dependencies-and-then-enter). Once you're ready, please test your code and [submit a pull request (PR)](https://github.com/wekan/wekan/wiki/Emoji#7-test).
|
||||
|
||||
Please refer to the [developer documentation](https://github.com/wekan/wekan/wiki/Developer-Documentation) for more information.
|
||||
|
||||
## Screenshot
|
||||
|
||||
[More screenshots at Features page](https://github.com/wekan/wekan/wiki/Features)
|
||||
|
||||
@@ -0,0 +1,113 @@
|
||||
# 🔐 WeKan — Login System Overview
|
||||
|
||||
This document provides a detailed overview of WeKan’s **login and authentication system**, covering client-side UI, server-side logic, external authentication methods, and potential upgrade paths.
|
||||
|
||||
---
|
||||
|
||||
## 🖥️ Login Web UI
|
||||
|
||||
WeKan's login interface is implemented using a combination of:
|
||||
|
||||
- `layouts.jade` – Login HTML structure
|
||||
- `layouts.js` – Login logic and interactivity
|
||||
- `layouts.css` – Styling and layout
|
||||
|
||||
📁 Source: [`client/components/main`](https://github.com/wekan/wekan/tree/main/client/components/main)
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Server-Side Authentication
|
||||
|
||||
Server-side login functionality is handled in:
|
||||
|
||||
- [`server/authentication.js`](https://github.com/wekan/wekan/blob/main/server/authentication.js)
|
||||
|
||||
Other related configurations:
|
||||
|
||||
- 🔧 Account config: [`config/accounts.js`](https://github.com/wekan/wekan/blob/main/config/accounts.js)
|
||||
- 📨 Sign-up invitations: [`models/settings.js#L275`](https://github.com/wekan/wekan/blob/main/models/settings.js#L275)
|
||||
- 👤 User creation logic: [`models/users.js#L1339`](https://github.com/wekan/wekan/blob/main/models/users.js#L1339)
|
||||
|
||||
---
|
||||
|
||||
## 👥 Meteor User Accounts
|
||||
|
||||
WeKan utilizes Meteor’s `accounts` system. Relevant resources:
|
||||
|
||||
- 📚 Meteor 2.x Accounts Docs: [v2-docs.meteor.com/api/accounts](https://v2-docs.meteor.com/api/accounts)
|
||||
- 🔍 Meteor Packages:
|
||||
- [`packages`](https://github.com/wekan/wekan/blob/main/.meteor/packages)
|
||||
- [`versions`](https://github.com/wekan/wekan/blob/main/.meteor/versions)
|
||||
- 📦 Meteor 2.14 core packages: [Meteor 2.14 packages](https://github.com/meteor/meteor/tree/release/METEOR%402.14/packages)
|
||||
|
||||
---
|
||||
|
||||
## 🔐 External Authentication (OIDC, LDAP, etc.)
|
||||
|
||||
WeKan supports external authentication methods via internal packages.
|
||||
|
||||
📁 See [`packages/`](https://github.com/wekan/wekan/tree/main/packages) for:
|
||||
- OpenID Connect (OIDC)
|
||||
- LDAP
|
||||
- OAuth and other integrations
|
||||
|
||||
---
|
||||
|
||||
## 📦 NPM & AtmosphereJS Dependencies
|
||||
|
||||
- 🔗 `package.json`: [Dependencies list](https://github.com/wekan/wekan/blob/main/package.json)
|
||||
- 🧩 WekanTeam scoped NPM packages: [@wekanteam on npm](https://www.npmjs.com/search?q=%40wekanteam)
|
||||
- ☁️ AtmosphereJS Meteor packages: [atmospherejs.com](https://atmospherejs.com)
|
||||
|
||||
---
|
||||
|
||||
## 🚧 Meteor Version & Upgrade Notes
|
||||
|
||||
- 📌 Current Version: **Meteor 2.14**
|
||||
- [`.meteor/release`](https://github.com/wekan/wekan/blob/main/.meteor/release)
|
||||
- 🔧 Maintained with only **critical fixes** until ~Summer 2025
|
||||
- 🚀 Migration to **Meteor 3** or a new framework is under consideration
|
||||
|
||||
📘 Meteor 3 API: [docs.meteor.com/api/accounts](https://docs.meteor.com/api/accounts)
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Prototypes & Examples
|
||||
|
||||
### 🐘 PHP Prototype Sign-Up
|
||||
|
||||
Used in experimental versions:
|
||||
|
||||
- Step 1: [`sign-up1.php`](https://github.com/wekan/php/blob/main/page/sign-up1.php)
|
||||
- Step 2: [`sign-up2.php`](https://github.com/wekan/php/blob/main/page/sign-up2.php)
|
||||
- Main entry: [`index.php#L72-L83`](https://github.com/wekan/php/blob/main/public/index.php#L72-L83)
|
||||
|
||||
---
|
||||
|
||||
### 🎨 WeKan Studio Prototype
|
||||
|
||||
Sign-up logic in the **WeKan Studio** version:
|
||||
|
||||
- [`signUp.fmt`](https://github.com/wekan/wekanstudio/blob/main/srv/templates/login/signUp.fmt)
|
||||
|
||||
---
|
||||
|
||||
## 📎 Future Considerations
|
||||
|
||||
- Upgrading to **Meteor 3.x**
|
||||
- Refactoring frontend logic to fix translation rendering order
|
||||
- Exploring **simplified authentication systems** in future prototypes
|
||||
|
||||
---
|
||||
|
||||
## 🔗 Project Links
|
||||
|
||||
- 🔧 Main Repo: [github.com/wekan/wekan](https://github.com/wekan/wekan)
|
||||
- 🌐 Website: [wekan.github.io](https://wekan.github.io)
|
||||
- 📚 Documentation: [Wekan Wiki](https://github.com/wekan/wekan/wiki)
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
---
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
|
||||
appVersion: "v7.79.0"
|
||||
appVersion: "v7.88.0"
|
||||
files:
|
||||
userUploads:
|
||||
- README.md
|
||||
|
||||
@@ -2544,8 +2544,8 @@ THEME - Exodark
|
||||
background: #1b1b1b;
|
||||
}
|
||||
.board-color-exodark .materialCheckBox.is-checked {
|
||||
border-bottom: 2px solid #222;
|
||||
border-right: 2px solid #222;
|
||||
border-bottom: 2px solid #dbdbdb!important;/*Fix contrast of checkbox*/
|
||||
border-right: 2px solid #dbdbdb!important;
|
||||
}
|
||||
.board-color-exodark .is-multiselection-active .multi-selection-checkbox.is-checked + .minicard {
|
||||
background: #e9e9e9;
|
||||
@@ -3179,10 +3179,17 @@ THEME - Clean Dark
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.board-color-cleandark.background-box {
|
||||
background-color:#23232B;
|
||||
} /*Fixes contrast issues with background box in theme selection list*/
|
||||
/* ===============
|
||||
THEME - Clean Light
|
||||
=================*/
|
||||
/* Please note Clean Light theme elements also contain references to some cleandark theme elements so if unable to find code you're looking for under CleanDark it might be here. This should probably be cleaned up*/
|
||||
.board-color-cleanlight.background-box {
|
||||
background-color:#e0e0e0;
|
||||
color:#010101!important;
|
||||
} /*Fixes issues with text colour/background box being similar no contrast */
|
||||
|
||||
.board-color-cleanlight {
|
||||
background: #E0E0E0;
|
||||
|
||||
@@ -239,34 +239,40 @@ BlazeComponent.extendComponent({
|
||||
evt.preventDefault();
|
||||
},
|
||||
'click .js-clone-board'(evt) {
|
||||
let title = getSlug(ReactiveCache.getBoard(this.currentData()._id).title) || 'cloned-board';
|
||||
Meteor.call(
|
||||
'copyBoard',
|
||||
this.currentData()._id,
|
||||
{
|
||||
sort: ReactiveCache.getBoards({ archived: false }).length,
|
||||
type: 'board',
|
||||
title: ReactiveCache.getBoard(this.currentData()._id).title,
|
||||
},
|
||||
(err, res) => {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
} else {
|
||||
Session.set('fromBoard', null);
|
||||
subManager.subscribe('board', res, false);
|
||||
FlowRouter.go('board', {
|
||||
id: res,
|
||||
slug: title,
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
evt.preventDefault();
|
||||
if (confirm(TAPi18n.__('duplicate-board-confirm'))) {
|
||||
let title =
|
||||
getSlug(ReactiveCache.getBoard(this.currentData()._id).title) ||
|
||||
'cloned-board';
|
||||
Meteor.call(
|
||||
'copyBoard',
|
||||
this.currentData()._id,
|
||||
{
|
||||
sort: ReactiveCache.getBoards({ archived: false }).length,
|
||||
type: 'board',
|
||||
title: ReactiveCache.getBoard(this.currentData()._id).title,
|
||||
},
|
||||
(err, res) => {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
} else {
|
||||
Session.set('fromBoard', null);
|
||||
subManager.subscribe('board', res, false);
|
||||
FlowRouter.go('board', {
|
||||
id: res,
|
||||
slug: title,
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
evt.preventDefault();
|
||||
}
|
||||
},
|
||||
'click .js-archive-board'(evt) {
|
||||
const boardId = this.currentData()._id;
|
||||
Meteor.call('archiveBoard', boardId);
|
||||
evt.preventDefault();
|
||||
if (confirm(TAPi18n.__('archive-board-confirm'))) {
|
||||
const boardId = this.currentData()._id;
|
||||
Meteor.call('archiveBoard', boardId);
|
||||
evt.preventDefault();
|
||||
}
|
||||
},
|
||||
'click .js-accept-invite'() {
|
||||
const boardId = this.currentData()._id;
|
||||
|
||||
@@ -11,7 +11,7 @@ import { DatePicker } from '/client/lib/datepicker';
|
||||
}
|
||||
|
||||
_storeDate(date) {
|
||||
this.card.setReceived(date);
|
||||
this.card.setReceived(moment(date).format('YYYY-MM-DD HH:mm'));
|
||||
}
|
||||
|
||||
_deleteDate() {
|
||||
@@ -37,7 +37,7 @@ import { DatePicker } from '/client/lib/datepicker';
|
||||
}
|
||||
|
||||
_storeDate(date) {
|
||||
this.card.setStart(date);
|
||||
this.card.setStart(moment(date).format('YYYY-MM-DD HH:mm'));
|
||||
}
|
||||
|
||||
_deleteDate() {
|
||||
@@ -60,7 +60,7 @@ import { DatePicker } from '/client/lib/datepicker';
|
||||
}
|
||||
|
||||
_storeDate(date) {
|
||||
this.card.setDue(date);
|
||||
this.card.setDue(moment(date).format('YYYY-MM-DD HH:mm'));
|
||||
}
|
||||
|
||||
_deleteDate() {
|
||||
@@ -83,7 +83,7 @@ import { DatePicker } from '/client/lib/datepicker';
|
||||
}
|
||||
|
||||
_storeDate(date) {
|
||||
this.card.setEnd(date);
|
||||
this.card.setEnd(moment(date).format('YYYY-MM-DD HH:mm'));
|
||||
}
|
||||
|
||||
_deleteDate() {
|
||||
@@ -322,19 +322,19 @@ CardCustomFieldDate.register('cardCustomFieldDate');
|
||||
|
||||
(class extends CardStartDate {
|
||||
showDate() {
|
||||
return this.date.get().format('L');
|
||||
return this.date.get().format('YYYY-MM-DD HH:mm');
|
||||
}
|
||||
}.register('minicardStartDate'));
|
||||
|
||||
(class extends CardDueDate {
|
||||
showDate() {
|
||||
return this.date.get().format('L');
|
||||
return this.date.get().format('YYYY-MM-DD HH:mm');
|
||||
}
|
||||
}.register('minicardDueDate'));
|
||||
|
||||
(class extends CardEndDate {
|
||||
showDate() {
|
||||
return this.date.get().format('L');
|
||||
return this.date.get().format('YYYY-MM-DD HH:mm');
|
||||
}
|
||||
}.register('minicardEndDate'));
|
||||
|
||||
|
||||
@@ -225,3 +225,12 @@ template(name="minicardDetailsActionsPopup")
|
||||
a.js-link
|
||||
i.fa.fa-link
|
||||
| {{_ 'link-card'}}
|
||||
li
|
||||
a.js-toggle-watch-card
|
||||
if isWatching
|
||||
i.fa.fa-eye
|
||||
| {{_ 'unwatch'}}
|
||||
else
|
||||
i.fa.fa-eye-slash
|
||||
| {{_ 'watch'}}
|
||||
|
||||
@@ -46,6 +46,10 @@ BlazeComponent.extendComponent({
|
||||
}
|
||||
return ret;
|
||||
},
|
||||
isWatching() {
|
||||
const card = this.currentData();
|
||||
return card.findWatcher(Meteor.userId());
|
||||
},
|
||||
|
||||
showMembers() {
|
||||
// cache "board" to reduce the mini-mongodb access
|
||||
@@ -125,6 +129,9 @@ Template.minicard.helpers({
|
||||
? Meteor.connection._lastSessionId
|
||||
: null;
|
||||
},
|
||||
isWatching() {
|
||||
return this.findWatcher(Meteor.userId());
|
||||
}
|
||||
});
|
||||
|
||||
BlazeComponent.extendComponent({
|
||||
@@ -178,4 +185,11 @@ Template.minicardDetailsActionsPopup.events({
|
||||
this.archive();
|
||||
Utils.goBoardId(this.boardId);
|
||||
}),
|
||||
'click .js-toggle-watch-card'() {
|
||||
const currentCard = this;
|
||||
const level = currentCard.findWatcher(Meteor.userId()) ? null : 'watching';
|
||||
Meteor.call('watch', 'card', currentCard._id, level, (err, ret) => {
|
||||
if (!err && ret) Popup.back();
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -177,7 +177,7 @@
|
||||
@media screen and (max-width: 800px) {
|
||||
.board-sidebar {
|
||||
width: 100%;
|
||||
right: -100%;
|
||||
left: 0;
|
||||
}
|
||||
.board-sidebar .sidebar-content .hide-btn {
|
||||
width: 40px;
|
||||
|
||||
+14
-12
@@ -133,7 +133,7 @@ Mousetrap.bind(numbArray, (evt, key) => {
|
||||
const cardIds = MultiSelection.getSelectedCardIds();
|
||||
for (const cardId of cardIds)
|
||||
{
|
||||
card = ReactiveCache.getCard(cardId);
|
||||
card = Cards.findOne(cardId);
|
||||
if(num <= board.labels.length)
|
||||
{
|
||||
card.removeLabel(labels[num-1]["_id"]);
|
||||
@@ -157,7 +157,7 @@ Mousetrap.bind(numArray, (evt, key) => {
|
||||
const cardIds = MultiSelection.getSelectedCardIds();
|
||||
for (const cardId of cardIds)
|
||||
{
|
||||
card = ReactiveCache.getCard(cardId);
|
||||
card = Cards.findOne(cardId);
|
||||
if(num <= board.labels.length)
|
||||
{
|
||||
card.addLabel(labels[num-1]["_id"]);
|
||||
@@ -171,7 +171,7 @@ Mousetrap.bind(numArray, (evt, key) => {
|
||||
return;
|
||||
}
|
||||
if (ReactiveCache.getCurrentUser().isBoardMember()) {
|
||||
const card = ReactiveCache.getCard(cardId);
|
||||
const card = Cards.findOne(cardId);
|
||||
if(num <= board.labels.length)
|
||||
{
|
||||
card.toggleLabel(labels[num-1]["_id"]);
|
||||
@@ -190,21 +190,23 @@ Mousetrap.bind(_.range(1, 10).map(x => `ctrl+alt+${x}`), (evt, key) => {
|
||||
|
||||
const memberIndex = parseInt(key.split("+").pop()) - 1;
|
||||
const currentBoard = Utils.getCurrentBoard();
|
||||
const boardMembers = currentBoard.memberUsers();
|
||||
const validBoardMembers = currentBoard.memberUsers().filter(member => member.isBoardMember());
|
||||
|
||||
if (memberIndex >= boardMembers.length)
|
||||
if (memberIndex >= validBoardMembers.length)
|
||||
return;
|
||||
|
||||
const memberId = validBoardMembers[memberIndex]._id;
|
||||
|
||||
if (MultiSelection.isActive()) {
|
||||
for (const cardId of MultiSelection.getSelectedCardIds())
|
||||
ReactiveCache.getCard(cardId).toggleAssignee(boardMembers[memberIndex]._id);
|
||||
Cards.findOne(cardId).toggleAssignee(memberId);
|
||||
} else {
|
||||
const cardId = getSelectedCardId();
|
||||
|
||||
if (!cardId)
|
||||
return;
|
||||
|
||||
ReactiveCache.getCard(cardId).toggleAssignee(boardMembers[memberIndex]._id);
|
||||
Cards.findOne(cardId).toggleAssignee(memberId);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -220,7 +222,7 @@ Mousetrap.bind('m', evt => {
|
||||
}
|
||||
|
||||
if (ReactiveCache.getCurrentUser().isBoardMember()) {
|
||||
const card = ReactiveCache.getCard(cardId);
|
||||
const card = Cards.findOne(cardId);
|
||||
card.toggleAssignee(currentUserId);
|
||||
// We should prevent scrolling in card when spacebar is clicked
|
||||
// This should do it according to Mousetrap docs, but it doesn't
|
||||
@@ -240,7 +242,7 @@ Mousetrap.bind('space', evt => {
|
||||
}
|
||||
|
||||
if (ReactiveCache.getCurrentUser().isBoardMember()) {
|
||||
const card = ReactiveCache.getCard(cardId);
|
||||
const card = Cards.findOne(cardId);
|
||||
card.toggleMember(currentUserId);
|
||||
// We should prevent scrolling in card when spacebar is clicked
|
||||
// This should do it according to Mousetrap docs, but it doesn't
|
||||
@@ -260,7 +262,7 @@ const archiveCard = evt => {
|
||||
}
|
||||
|
||||
if (Utils.canModifyBoard()) {
|
||||
const card = ReactiveCache.getCard(cardId);
|
||||
const card = Cards.findOne(cardId);
|
||||
card.archive();
|
||||
// We should prevent scrolling in card when spacebar is clicked
|
||||
// This should do it according to Mousetrap docs, but it doesn't
|
||||
@@ -289,7 +291,7 @@ Mousetrap.bind('n', evt => {
|
||||
|
||||
if (Utils.canModifyBoard()) {
|
||||
// Find the current hovered card
|
||||
const card = ReactiveCache.getCard(cardId);
|
||||
const card = Cards.findOne(cardId);
|
||||
|
||||
// Find the button and click it
|
||||
$(`#js-list-${card.listId} .list-body .minicards .open-minicard-composer`).click();
|
||||
@@ -364,7 +366,7 @@ Template.keyboardShortcuts.helpers({
|
||||
},
|
||||
{
|
||||
keys: ['ctrl + alt + number keys 1-9'],
|
||||
action: 'toggle-asignees'
|
||||
action: 'toggle-assignees'
|
||||
},
|
||||
],
|
||||
});
|
||||
+6
-2
@@ -577,10 +577,14 @@ services:
|
||||
# If the sync of the users should be done in the background
|
||||
#- LDAP_BACKGROUND_SYNC=false
|
||||
#
|
||||
# At which interval does the background task sync.
|
||||
# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
|
||||
# The format must be as specified in:
|
||||
# https://bunkat.github.io/later/parsers.html#text
|
||||
#- LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hour
|
||||
#- LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hours
|
||||
# At which interval does the background task sync in milliseconds.
|
||||
# Leave this unset, so it uses default, and does not crash.
|
||||
# https://github.com/wekan/wekan/issues/2354#issuecomment-515305722
|
||||
- LDAP_BACKGROUND_SYNC_INTERVAL=''
|
||||
#
|
||||
#- LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false
|
||||
#
|
||||
|
||||
@@ -575,10 +575,14 @@ services:
|
||||
# If the sync of the users should be done in the background
|
||||
#- LDAP_BACKGROUND_SYNC=false
|
||||
#
|
||||
# At which interval does the background task sync.
|
||||
# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
|
||||
# The format must be as specified in:
|
||||
# https://bunkat.github.io/later/parsers.html#text
|
||||
#- LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hour
|
||||
#- LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hours
|
||||
# At which interval does the background task sync in milliseconds.
|
||||
# Leave this unset, so it uses default, and does not crash.
|
||||
# https://github.com/wekan/wekan/issues/2354#issuecomment-515305722
|
||||
- LDAP_BACKGROUND_SYNC_INTERVAL=''
|
||||
#
|
||||
#- LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false
|
||||
#
|
||||
|
||||
@@ -1,8 +1,21 @@
|
||||
Admin Panel / People / Click at right side of usename `...` button that is User Settings / Impersonate user.
|
||||
## Impersonate a User
|
||||
|
||||
You will be switched to logged in as that user.
|
||||
To impersonate another user in the Admin Panel:
|
||||
|
||||
To switch back to your original user, at your webbrowser click `Reload open webpage` round arrow button.
|
||||
1. Go to **Admin Panel** → **People**.
|
||||
2. Find the user you want to impersonate.
|
||||
3. Click the **`...` (three dots)** menu on the right side of the username.
|
||||
4. Select **User Settings** → **Impersonate User**.
|
||||
|
||||
You will now be logged in as that user.
|
||||
|
||||
### How to Switch Back
|
||||
To return to your original admin account:
|
||||
|
||||
- Click the **Reload** (🔄) button in your web browser to refresh the page.
|
||||
|
||||
---
|
||||
|
||||
📝 **Note:**
|
||||
This feature was added to Wekan v4.39 at https://github.com/wekan/wekan/pull/3280
|
||||
|
||||
@@ -10,6 +10,7 @@ There edit Browser-compatibility-matrix.md and attach it with .txt extension or
|
||||
Browser | [PWA](PWA) | Mobile | Desktop | OS
|
||||
------- | ----| ------ | ------- | -------
|
||||
Safari | iOS Yes | iOS Newest | Newest | iOS, macOS
|
||||
Iris | No | No | Newest | [Iris browser news](https://www.riscosopen.org/forum/forums/1/topics/19545), Download [RISC OS Direct](https://www.riscosdev.com/direct/) for Raspberry Pi etc. [Other versions of RISC OS for many ARM CPU devices](https://www.riscosopen.org/content/downloads) do not have Iris browser yet, but there could be some way to transfer Iris browser files from RISC OS Direct.
|
||||
|
||||
## Firefox based
|
||||
|
||||
@@ -17,10 +18,8 @@ Any telemetry at any Firefox based browser can be additionally most locked down
|
||||
|
||||
Browser | [PWA](PWA) | Mobile | Desktop | OS
|
||||
------- | ----| ------ | ------- | -------
|
||||
[Mypal](https://releases.wekan.team/mypal/) | No | No | Newest | For 32bit ReactOS/WinXP/Win7/etc [issue](https://github.com/wekan/wekan/issues/3132), Other 32bit browsers probably not
|
||||
Firefox | Android Yes | Android Newest | Newest | Win/Mac/Linux/BSD/RasPi. [Haiku](https://discuss.haiku-os.org/t/progress-on-porting-firefox/13493/143) not tested yet - [HN](https://news.ycombinator.com/item?id=41214762).
|
||||
Morph Browser | No | Yes | Yes | [Ubuntu Touch](https://ubports.com) (based on Ubuntu 16.04) on PinePhone, OnePlus 3, [RasPi3](https://ci.ubports.com/job/rootfs/job/rootfs-rpi/) (not RasPi4 yet). Works best with bluetooth or USB mouse and keyboard. [Repo](https://gitlab.com/ubports/development/core/morph-browser)
|
||||
[OpenStore App](https://open-store.io/app/wekan.wekanteam) | Yes | Yes | Yes | Based on [Wekan PWA](https://boards.wekan.team/b/D2SzJKZDS4Z48yeQH/wekan-open-source-kanban-board-with-mit-license/s7SkzYviC2e963FkT), [Ubuntu Touch](https://ubports.com) app at [OpenStore](https://open-store.io/app/wekan.wekanteam) using Morph browser with Wekan demo & development server https://boards.wekan.team . Tested on [RasPi3](https://ci.ubports.com/job/rootfs/job/rootfs-rpi/). PWA URL is configured here https://github.com/wekan/wekan-openstore/blob/master/wekan.desktop#L3
|
||||
[Mypal](https://github.com/reactosapps/apps/releases/download/0.01/mypal-27.9.4.win32.installer.exe) | No | No | Newest | For 32bit ReactOS/WinXP/Win7/etc [issue](https://github.com/wekan/wekan/issues/3132)
|
||||
Firefox | No | Newest | Newest | iOS/Android/Win/Mac/Linux/BSD/RasPi. At iOS uses Safari engine, elsewhere Firefox engine. [Haiku](https://discuss.haiku-os.org/t/progress-on-porting-firefox/13493/143) not tested yet - [HN](https://news.ycombinator.com/item?id=41214762).
|
||||
[Waterfox](https://www.waterfox.net) | No | No | Yes | Win/Mac/Linux, more private than Firefox, no tracking. [Repo](https://github.com/BrowserWorks/Waterfox)
|
||||
[Floorp](https://floorp.app) | No | No | Yes | [Win/Mac/Linux](https://github.com/Floorp-Projects/Floorp/releases), more private than Firefox, [Repo](https://github.com/Floorp-Projects/Floorp)
|
||||
[Mercury](https://thorium.rocks/mercury) | No | No | Yes | [Win/Linux](https://github.com/Alex313031/Mercury/releases), more private than Firefox, [Repo](https://github.com/Alex313031/Mercury)
|
||||
@@ -38,6 +37,8 @@ Brave | Android Yes | Android Newest | Newest | Win/Mac/Linux/RasPi
|
||||
Vivaldi | Android Yes | Android Newest | Newest | Win/Mac/Linux
|
||||
Opera | Android Yes | Android Newest | Newest | Win/Mac/Linux
|
||||
Credge, Chromium Edge | Android Yes | Android | Newest | Win/Mac/Linux/Mobile
|
||||
Morph Browser | No | Yes | Yes | [Ubuntu Touch](https://ubports.com) based on Ubuntu 16.04 and 20.04 at all Ubuntu Touch devices, [RasPi3](https://ci.ubports.com/job/rootfs/job/rootfs-rpi/) (not RasPi4 yet). [Repo](https://gitlab.com/ubports/development/core/morph-browser)
|
||||
[OpenStore App](https://open-store.io/app/wekan.wekanteam) | Yes | Yes | Yes | [Ubuntu Touch](https://ubports.com) app at [OpenStore](https://open-store.io/app/wekan.wekanteam) using Morph browser with Wekan demo & development server https://boards.wekan.team . App source code for Ubuntu 16.04 at https://github.com/wekan/wekan-openstore and Ubuntu 20.04 at https://github.com/wekan/wekan-openstore2
|
||||
[Microsoft Store App](https://www.microsoft.com/fi-fi/p/wekan/9p2mrxvd087r#activetab=pivot:overviewtab) | Yes | Yes | Yes | At Microsoft Store of Windows 10/11 desktop, made with [PWABuilder](https://www.pwabuilder.com/). Based on [Wekan PWA](https://boards.wekan.team/b/D2SzJKZDS4Z48yeQH/wekan-open-source-kanban-board-with-mit-license/s7SkzYviC2e963FkT), changed app from EdgeHTML to Credge based with Wekan demo & development server https://boards.wekan.team
|
||||
[Android Play Store App](https://play.google.com/store/apps/details?id=team.wekan.boards.twa) | Yes | Yes | Yes | Based on [Wekan PWA](https://boards.wekan.team/b/D2SzJKZDS4Z48yeQH/wekan-open-source-kanban-board-with-mit-license/s7SkzYviC2e963FkT), made with [PWABuilder](https://www.pwabuilder.com/), uses Android Chrome browser with Wekan demo & development server https://boards.wekan.team
|
||||
[Thorium](https://thorium.rocks) | No | Yes | Yes | [Win/Win7/Mac/Linux/Android/RasPi](https://thorium.rocks), speed optimized
|
||||
@@ -60,7 +61,7 @@ Internet Explorer | No | No | No | No | No
|
||||
- Apache 2.0 or MIT license
|
||||
- Repo: https://github.com/versotile-org/verso
|
||||
|
||||
## Ladybird based, not tested yet:
|
||||
## Ladybird based, not yet compatible with WeKan
|
||||
|
||||
- BSD-2-Clause license
|
||||
- Website: https://ladybird.org
|
||||
@@ -76,7 +77,7 @@ Benefits:
|
||||
|
||||
## Desktop app with Meteor
|
||||
|
||||
https://forums.meteor.com/t/desktop-electron-meteor-app-with-todesktop/60904
|
||||
- https://forums.meteor.com/t/desktop-electron-meteor-app-with-todesktop/60904
|
||||
|
||||
## Optional Payments
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
- 2024-08 Design discussion here: https://github.com/wekan/wekan/discussions/5507
|
||||
- Original WeKan Design:
|
||||
- Uses WeKan style confirm popups `Popup.afterConfirm(` , translations etc. Please look at existing code to keep same style.
|
||||
- Kanban, the good parts. Like was done when figuring out best design for Swimlanes https://github.com/wekan/wekan/issues/955
|
||||
- Intuitive, easy to figure out, prevent messing up something https://github.com/wekan/wekan/wiki/Monkey-Proof-Software
|
||||
- Polished UI/UX
|
||||
|
||||
@@ -6,6 +6,7 @@ Please read the meteor style guide before making any significant contribution.
|
||||
|
||||
# Stories about how Wekan works, and developing Wekan
|
||||
|
||||
- [Login code](https://github.com/wekan/wekan/issues/5714)
|
||||
- https://www.mongodb.com/docs/drivers/node/v3.7/fundamentals/promises/
|
||||
- [Do not use code formatters like Prettier and ESLint](https://github.com/wekan/wekan/pull/4633#issuecomment-1214214591)
|
||||
- [How realtime board updates work](https://github.com/wekan/wekan/issues/3788#issuecomment-834649553)
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
## Learning Course: Your First Meteor 3.1 Application
|
||||
|
||||
- https://www.youtube.com/watch?v=aFZzBb2oRi8&list=PLKKckIyt2nF863eP16mvVgWKR4JDyJoKy
|
||||
|
||||
## Meteor 3 Example Code
|
||||
|
||||
- https://github.com/fredmaiaarantes/simpletasks
|
||||
|
||||
@@ -4,15 +4,35 @@
|
||||
- Bun Javascript Engine https://bun.sh
|
||||
- MongoDB 5.x and newer https://github.com/turnkeylinux/tracker/issues/1724#issuecomment-2351544191
|
||||
- Does not work at s390x
|
||||
- V programming language https://github.com/vlang/v/issues/18737
|
||||
- Bun Javascript Engine https://github.com/oven-sh/bun/issues/2632
|
||||
- Deno Javascript Engine https://github.com/denoland/deno/issues/20212#issuecomment-1756663943
|
||||
- Lazarus IDE https://www.lazarus-ide.org
|
||||
- FreePascal programming language https://www.freepascal.org
|
||||
- TigerBeetle database https://github.com/tigerbeetle/tigerbeetle/issues/2241
|
||||
- GUI requires porting to other OS
|
||||
|
||||
## What is Cross-Platform
|
||||
|
||||
- Works at s390x
|
||||
- Programming languages
|
||||
- Node.js https://nodejs.org https://github.com/wekan/ferretdb/tree/main/node-deno-bun (not Deno or Bun)
|
||||
- C89 https://github.com/xet7/darkesthour
|
||||
- PHP https://github.com/wekan/php
|
||||
- Go https://github.com/wekan/wekango
|
||||
- Tcl/Tk
|
||||
- Web Frameworks
|
||||
- V veb https://github.com/vlang/v/issues/18737
|
||||
- Gambas https://github.com/wekan/hx/tree/main/prototypes/ui/gambas
|
||||
- Python Py4Web https://py4web.com
|
||||
- Ruby on Rails https://github.com/werot
|
||||
- WeKan Studio https://github.com/wekan/wekanstudio
|
||||
- Works at AmigaOS 3.x/4.x/MorphOS/AROS, Win/Mac/Linux
|
||||
- Web frameworks
|
||||
- FreePascal https://github.com/wekan/wami
|
||||
- GUI
|
||||
- BBC Basic https://www.bbcbasic.net/wiki/doku.php?id=converting_20programs_20from_20risc_20os_20to_20windows
|
||||
- Tcl/Tk GUI does works at most OS
|
||||
- Godot https://godotengine.org , https://github.com/godotengine/godot
|
||||
- Redot https://www.redotengine.org , https://github.com/Redot-Engine/redot-engine
|
||||
- HaxeUI https://haxeui.org
|
||||
|
||||
## Prototype Strategy
|
||||
|
||||
@@ -251,7 +271,7 @@ https://github.com/wekan/php/blob/main/page/allboardschar.php
|
||||
- Only test webpage. No actual features.
|
||||
|
||||
### Node.js 20, Bun and Deno
|
||||
- Repo https://github.com/wekan/wekan-node20
|
||||
- Repo https://github.com/wekan/ferretdb/tree/main/node-deno-bun
|
||||
- Features:
|
||||
- main.js makes database queries to many databases
|
||||
- Database drivers:
|
||||
@@ -282,7 +302,7 @@ https://github.com/wekan/php/blob/main/page/allboardschar.php
|
||||
### FreePascal
|
||||
|
||||
- Repo https://github.com/wekan/wami
|
||||
- Some static pages
|
||||
- Some static pages. At upload page, uploading file now works.
|
||||
- Previous:
|
||||
- Repo https://github.com/wekan/hx/tree/main/prototypes/code/webserver/works/freepascal-router
|
||||
- Router and some webpage
|
||||
@@ -345,4 +365,8 @@ https://github.com/wekan/php/blob/main/page/allboardschar.php
|
||||
### Swap microframework, vs HTMX
|
||||
|
||||
- https://github.com/josephernest/Swap
|
||||
- https://news.ycombinator.com/item?id=35991783
|
||||
- https://news.ycombinator.com/item?id=35991783
|
||||
|
||||
### Ruby on Rails
|
||||
|
||||
- https://github.com/wekan/weror . Password register and login works, there is workspaces and dragging cards, but no user management etc features yet.
|
||||
@@ -1,8 +1 @@
|
||||
Wekan works on x64. There is not yet version for [Raspberry Pi](https://github.com/wekan/wekan/issues/1053).
|
||||
|
||||
Wekan requires MongoDB 3.2.x . For other requirements and versions see [VirtualBox scripts](https://github.com/wekan/wekan-maintainer/tree/master/virtualbox) or [Dockerfile](https://github.com/wekan/wekan/blob/main/Dockerfile).
|
||||
|
||||
Known bugs with other versions:
|
||||
- Node 6.x: 100% CPU usage.
|
||||
- MongoDB 3.4.x: Wekan crashes when uploading attachment.
|
||||
- [Hardened kernel prevents creating new Wekan boards at Sandstorm](https://github.com/wekan/wekan/issues/1398)
|
||||
WeKan Requiremens are at https://wekan.github.io/install/
|
||||
@@ -0,0 +1,23 @@
|
||||
## Multiple lines to Checklist
|
||||
|
||||
1. Click Add new Checklist
|
||||
2. Click Add new Checklist Item
|
||||
3. Toggle `One line of text = one checklist item`
|
||||
4. Paste multiple lines of text
|
||||
5. Click Save
|
||||
|
||||
<img src="https://wekan.github.io/multiline/multiline1.png" width="60%" alt="Multiple lines to Checklist" />
|
||||
|
||||
## Card ☰ Menu / Copy Checklist Template to Many Cards
|
||||
|
||||
<img src="https://wekan.github.io/multiline/multiline2.png" width="60%" alt="Checklist Template to Many Cards 1" />
|
||||
|
||||
## Edit titles and descriptions of Many Cards
|
||||
```
|
||||
[ {"title": "First card title", "description":"First card description"},
|
||||
{"title":"Second card title","description":"Second card description"},
|
||||
{"title":"Last card title","description":"Last card description"} ]
|
||||
```
|
||||
|
||||
<img src="https://wekan.github.io/multiline/multiline3.png" width="60%" alt="Checklist Template to Many Cards 2" />
|
||||
|
||||
+35
-7
@@ -52,7 +52,15 @@ sudo snap set wekan ldap-authentication-userdn='CN=LDAP-User,OU=Service Accounts
|
||||
sudo snap set wekan ldap-authentication-password='<password>'
|
||||
sudo snap set wekan ldap-log-enabled='true'
|
||||
sudo snap set wekan ldap-background-sync='true'
|
||||
sudo snap set wekan ldap-background-sync-interval='every 1 minute'
|
||||
# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
|
||||
# The format must be as specified in:
|
||||
# https://bunkat.github.io/later/parsers.html#text
|
||||
#sudo snap set wekan ldap-background-sync-interval='every 1 hours'
|
||||
# At which interval does the background task sync in milliseconds.
|
||||
# If not in use, Leave this unset, so it uses default, and does not crash.
|
||||
# https://github.com/wekan/wekan/issues/2354#issuecomment-515305722
|
||||
#sudo snap set wekan ldap-background-sync-interval=''
|
||||
sudo snap set wekan ldap-background-sync-interval='every 1 hours'
|
||||
sudo snap set wekan ldap-background-sync-keep-existant-users-updated='true'
|
||||
sudo snap set wekan ldap-background-sync-import-new-users='true'
|
||||
sudo snap set wekan ldap-encryption='false'
|
||||
@@ -100,7 +108,15 @@ snap set wekan ldap-basedn='dc=example,dc=com'
|
||||
snap set wekan ldap-background-sync='true'
|
||||
snap set wekan ldap-background-sync-keep-existant-users-updated='true'
|
||||
snap set wekan ldap-background-sync-import-new-users='true'
|
||||
snap set wekan ldap-background-sync-interval='Every 1 minute'
|
||||
# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
|
||||
# The format must be as specified in:
|
||||
# https://bunkat.github.io/later/parsers.html#text
|
||||
#sudo snap set wekan ldap-background-sync-interval='every 1 hours'
|
||||
# At which interval does the background task sync in milliseconds.
|
||||
# If not in use, Leave this unset, so it uses default, and does not crash.
|
||||
# https://github.com/wekan/wekan/issues/2354#issuecomment-515305722
|
||||
#sudo snap set wekan ldap-background-sync-interval=''
|
||||
snap set wekan ldap-background-sync-interval='every 1 hours'
|
||||
snap set wekan ldap-merge-existing-users='true'
|
||||
snap set wekan ldap-user-search-field='uid'
|
||||
snap set wekan ldap-user-search-filter='(&(objectclass=person))'
|
||||
@@ -121,7 +137,15 @@ sudo snap set wekan ldap-authentication-password='********'
|
||||
sudo snap set wekan ldap-authentication-userdn='cn=admin,dc=*******,dc=lan'
|
||||
sudo snap set wekan ldap-background-sync='true'
|
||||
sudo snap set wekan ldap-background-sync-import-new-users='true'
|
||||
sudo snap set wekan ldap-background-sync-interval='Every 1 minute'
|
||||
# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
|
||||
# The format must be as specified in:
|
||||
# https://bunkat.github.io/later/parsers.html#text
|
||||
#sudo snap set wekan ldap-background-sync-interval='every 1 hours'
|
||||
# At which interval does the background task sync in milliseconds.
|
||||
# If not in use, Leave this unset, so it uses default, and does not crash.
|
||||
# https://github.com/wekan/wekan/issues/2354#issuecomment-515305722
|
||||
#sudo snap set wekan ldap-background-sync-interval=''
|
||||
sudo snap set wekan ldap-background-sync-interval='every 1 hours'
|
||||
sudo snap set wekan ldap-basedn='dc=*****,dc=lan'
|
||||
sudo snap set wekan ldap-email-field='mail'
|
||||
sudo snap set wekan ldap-enable='true'
|
||||
@@ -316,10 +340,14 @@ services:
|
||||
# LDAP_BACKGROUND_SYNC : If the sync of the users should be done in the background
|
||||
# example : LDAP_BACKGROUND_SYNC=true
|
||||
- LDAP_BACKGROUND_SYNC=false
|
||||
# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync
|
||||
# example : LDAP_BACKGROUND_SYNC_INTERVAL='every 15 minutes'
|
||||
# for more info: http://bunkat.github.io/later/parsers.html#text
|
||||
- LDAP_BACKGROUND_SYNC_INTERVAL='every 1 hour'
|
||||
# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
|
||||
# The format must be as specified in:
|
||||
# https://bunkat.github.io/later/parsers.html#text
|
||||
#- LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hours
|
||||
# At which interval does the background task sync in milliseconds.
|
||||
# Leave this unset, so it uses default, and does not crash.
|
||||
# https://github.com/wekan/wekan/issues/2354#issuecomment-515305722
|
||||
- LDAP_BACKGROUND_SYNC_INTERVAL=''
|
||||
# LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED :
|
||||
# example : LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=true
|
||||
- LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false
|
||||
|
||||
+19
-1
@@ -46,4 +46,22 @@ Wekan clientside code is at `wekan/client/components/main/layouts.*`
|
||||
|
||||
Wekan serverside code is at:
|
||||
- `wekan/server/authentication.js` at bottom
|
||||
- `wekan/packages/meteor-accounts-saml/*`
|
||||
- `wekan/packages/meteor-accounts-saml/*`
|
||||
|
||||
## Gitea
|
||||
|
||||
- https://github.com/crewjam/saml
|
||||
- https://github.com/go-gitea/gitea/pull/29403
|
||||
- https://docs.gitea.com/enterprise/features/saml-auth
|
||||
|
||||
## Laravel
|
||||
|
||||
- https://github.com/24Slides/laravel-saml2
|
||||
|
||||
## ruby-saml/omniauth/RoR: Sign in as anyone: Bypassing SAML SSO authentication with parser differentials
|
||||
|
||||
- https://github.blog/security/sign-in-as-anyone-bypassing-saml-sso-authentication-with-parser-differentials/
|
||||
- https://news.ycombinator.com/item?id=43349634
|
||||
- https://github.com/github/securitylab
|
||||
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
- At some cases [Hardened kernel may prevent creating new Wekan boards at Sandstorm](https://github.com/wekan/wekan/issues/1398)
|
||||
|
||||
# Sandstorm at Debian and Ubuntu
|
||||
|
||||
### Sandstorm CloudFlare DNS settings
|
||||
|
||||
Sandstorm works when configured to full domain, with CloudFlare SSL/TLS, with Caddy.
|
||||
Not subdomain, not sub-url, and not with Let's Encrypt that AFAIK does not support wildcard SSL/TLS.
|
||||
|
||||
Source: https://github.com/sandstorm-io/sandstorm/issues/3714#issuecomment-2366866243
|
||||
|
||||
For me, it works at CloudFlare DNS using TLS Strict checking and DNS setting clicking to orange cloud icon to make TLS proxy with Origin certificate, that is at /etc/caddy/certs/example.com.pem with above private key and below cert.
|
||||
@@ -13,17 +18,52 @@ DNS records:
|
||||
```
|
||||
Caddyfile, proxy to KVM VM that is running Debian and Sandstorm:
|
||||
```
|
||||
# Full domain where Sandstorm login is. Not subdomain. Not sub-url.
|
||||
*.example.com example.com {
|
||||
tls {
|
||||
load /etc/caddy/certs
|
||||
alpn http/1.1
|
||||
}
|
||||
# If KVM VM, it's IP address:
|
||||
#reverse_proxy 123.123.123.123:80
|
||||
# Localhost port 81, when not in KVM VM
|
||||
reverse_proxy 127.0.0.1:81
|
||||
}
|
||||
|
||||
reverse_proxy 123.123.123.123:80
|
||||
blog.somecompany.com {
|
||||
tls {
|
||||
load /etc/caddy/certs
|
||||
alpn http/1.1
|
||||
}
|
||||
# Blog hosted at Sandstorm WordPress
|
||||
reverse_proxy 127.0.0.1:81
|
||||
}
|
||||
|
||||
othercompany.com {
|
||||
tls {
|
||||
load /etc/caddy/certs
|
||||
alpn http/1.1
|
||||
}
|
||||
# Website hosted at Sandstorm Hacker CMS
|
||||
reverse_proxy 127.0.0.1:81
|
||||
}
|
||||
```
|
||||
At /opt/sandstorm/sandstorm.conf is domain, http port etc.
|
||||
If having Sandstorm inside of KVM VM: https://github.com/wekan/wekan/blob/main/docs/Platforms/FOSS/Snap/Many-Snaps-on-LXC.md
|
||||
|
||||
At /opt/sandstorm/sandstorm.conf is domain where Sandstorm login is, http port etc.
|
||||
```
|
||||
SERVER_USER=sandstorm
|
||||
PORT=81
|
||||
MONGO_PORT=6081
|
||||
BIND_IP=127.0.0.1
|
||||
BASE_URL=https://example.com
|
||||
WILDCARD_HOST=*.example.com
|
||||
UPDATE_CHANNEL=dev
|
||||
ALLOW_DEV_ACCOUNTS=false
|
||||
SMTP_LISTEN_PORT=25
|
||||
#SANDCATS_BASE_DOMAIN=sandcats.io
|
||||
#HTTPS_PORT=443
|
||||
```
|
||||
Some related info at:
|
||||
|
||||
https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config
|
||||
|
||||
@@ -520,6 +520,15 @@ services:
|
||||
# https://bunkat.github.io/later/parsers.html#text
|
||||
#- LDAP_BACKGROUND_SYNC_INTERVAL='every 1 hour'
|
||||
#
|
||||
# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
|
||||
# The format must be as specified in:
|
||||
# https://bunkat.github.io/later/parsers.html#text
|
||||
#- LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hours
|
||||
# At which interval does the background task sync in milliseconds.
|
||||
# Leave this unset, so it uses default, and does not crash.
|
||||
# https://github.com/wekan/wekan/issues/2354#issuecomment-515305722
|
||||
- LDAP_BACKGROUND_SYNC_INTERVAL=''
|
||||
#
|
||||
# LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED :
|
||||
# example : LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=true
|
||||
#- LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false
|
||||
|
||||
@@ -10,19 +10,19 @@ This is without container (without Docker or Snap).
|
||||
|
||||
Right click and download files 1-4:
|
||||
|
||||
1. [wekan-7.79-amd64-windows.zip](https://github.com/wekan/wekan/releases/download/v7.79/wekan-7.79-amd64-windows.zip)
|
||||
1. [wekan-7.88-amd64-windows.zip](https://github.com/wekan/wekan/releases/download/v7.88/wekan-7.88-amd64-windows.zip)
|
||||
|
||||
2. [node.exe](https://nodejs.org/dist/latest-v14.x/win-x64/node.exe)
|
||||
|
||||
3. [mongodb-windows-x86_64-6.0.19-signed.msi](https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-6.0.19-signed.msi)
|
||||
3. [mongodb-windows-x86_64-6.0.22-signed.msi](https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-6.0.22-signed.msi)
|
||||
|
||||
4. [start-wekan.bat](https://raw.githubusercontent.com/wekan/wekan/main/start-wekan.bat)
|
||||
|
||||
5. Copy files from steps 1-4 with USB stick or DVD to offline Windows computer
|
||||
|
||||
6. Double click `mongodb-windows-x86_64-6.0.19-signed.msi` . In installer, uncheck downloading MongoDB compass.
|
||||
6. Double click `mongodb-windows-x86_64-6.0.22-signed.msi` . In installer, uncheck downloading MongoDB compass.
|
||||
|
||||
7. Unzip `wekan-7.79-amd64-windows.zip` , inside it is directory `bundle`, to it copy other files:
|
||||
7. Unzip `wekan-7.88-amd64-windows.zip` , inside it is directory `bundle`, to it copy other files:
|
||||
|
||||
```
|
||||
bundle (directory)
|
||||
|
||||
@@ -129,6 +129,7 @@
|
||||
|
||||
# <a name="Features"></a>Features
|
||||
|
||||
* [Multiline](Multiline)
|
||||
* [Linked Cards](Linked-Cards)
|
||||
* [Drag Drop](https://github.com/wekan/wekan/wiki/Drag-Drop) on Mobile and Desktop
|
||||
* [Rclone: Store attachments to cloud storage like S3, MinIO, etc](Rclone)
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
"activity-archived": "%s انتقل الى الارشيف",
|
||||
"activity-attached": "إرفاق %s ل %s",
|
||||
"activity-created": "أنشأ %s",
|
||||
"activity-changedListTitle": "renamed list to %s",
|
||||
"activity-changedListTitle": "إعادة تسمية القائمة إلى ",
|
||||
"activity-customfield-created": "%s احدت حقل مخصص",
|
||||
"activity-excluded": "استبعاد %s عن %s",
|
||||
"activity-imported": "imported %s into %s from %s",
|
||||
@@ -86,9 +86,9 @@
|
||||
"add-card": "إضافة بطاقة",
|
||||
"add-card-to-top-of-list": "Add Card to Top of List",
|
||||
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
|
||||
"setListWidthPopup-title": "Set Widths",
|
||||
"set-list-width": "Set Widths",
|
||||
"set-list-width-value": "Set Min & Max Widths (pixels)",
|
||||
"setListWidthPopup-title": "تعيين العرض",
|
||||
"set-list-width": "تعيين العرض",
|
||||
"set-list-width-value": "تعيين الحد الأدنى والأقصى للعرض (بالبكسل)",
|
||||
"list-width-error-message": "List widths must be integers greater than 100",
|
||||
"keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.",
|
||||
"keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.",
|
||||
@@ -411,10 +411,10 @@
|
||||
"user-can-not-export-card-to-pdf": "User can not export card to PDF",
|
||||
"exportBoardPopup-title": "Export board",
|
||||
"exportCardPopup-title": "Export card",
|
||||
"sort": "Sort",
|
||||
"sorted": "Sorted",
|
||||
"remove-sort": "Remove sort",
|
||||
"sort-desc": "Click to Sort List",
|
||||
"sort": "رتب",
|
||||
"sorted": "مرتبة",
|
||||
"remove-sort": "إزالة الفرز\n ",
|
||||
"sort-desc": "انقر لفرز القائمة\n ",
|
||||
"list-sort-by": "Sort the List By:",
|
||||
"list-label-modifiedAt": "Last Access Time",
|
||||
"list-label-title": "Name of the List",
|
||||
@@ -1207,7 +1207,7 @@
|
||||
"newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items",
|
||||
"newLineNewItem": "One line of text = one checklist item",
|
||||
"newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order",
|
||||
"originOrder": "original order",
|
||||
"originOrder": "النظام الأصلي\n ",
|
||||
"copyChecklist": "Copy Checklist",
|
||||
"copyChecklistPopup-title": "Copy Checklist",
|
||||
"card-show-lists": "Card Show Lists",
|
||||
|
||||
@@ -319,7 +319,7 @@
|
||||
"copy-card-link-to-clipboard": "Copy card link to clipboard",
|
||||
"copy-text-to-clipboard": "Copy text to clipboard",
|
||||
"linkCardPopup-title": "Link Card",
|
||||
"searchElementPopup-title": "Search",
|
||||
"searchElementPopup-title": "Klask",
|
||||
"copyCardPopup-title": "Copy Card",
|
||||
"copyManyCardsPopup-title": "Copy Template to Many Cards",
|
||||
"copyManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
|
||||
@@ -572,7 +572,7 @@
|
||||
"rescue-card-description": "Show rescue dialogue before closing for unsaved card descriptions",
|
||||
"rescue-card-description-dialogue": "Overwrite current card description with your changes?",
|
||||
"save": "Save",
|
||||
"search": "Search",
|
||||
"search": "Klask",
|
||||
"rules": "Rules",
|
||||
"search-cards": "Search from card/list titles, descriptions and custom fields on this board",
|
||||
"search-example": "Write text you search and press Enter",
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -49,7 +49,7 @@
|
||||
"activity-archived": "hat %s ins Archiv verschoben",
|
||||
"activity-attached": "hat %s an %s angehängt",
|
||||
"activity-created": "hat %s erstellt",
|
||||
"activity-changedListTitle": "Die Liste wurde umbenannt zu",
|
||||
"activity-changedListTitle": "Liste umbenannt zu %s",
|
||||
"activity-customfield-created": "hat das benutzerdefinierte Feld %s erstellt",
|
||||
"activity-excluded": "hat %s von %s ausgeschlossen",
|
||||
"activity-imported": "hat %s in %s von %s importiert",
|
||||
@@ -1257,16 +1257,16 @@
|
||||
"text": "Text",
|
||||
"translation-text": "Übersetzungstext",
|
||||
"show-subtasks-field": "Teilaufgaben Feld anzeigen",
|
||||
"show-week-of-year": "Show week of year (ISO 8601)",
|
||||
"show-week-of-year": "Kalenderwoche anzeigen (ISO 8601)",
|
||||
"convert-to-markdown": "Als Markdown konvertieren",
|
||||
"import-board-zip": "Erstelle .zip Datei, die Board JSON Dateien und Board Unterverzeichnisse mit Boardname inklusive Anhängen enthält",
|
||||
"collapse": "Einklappen",
|
||||
"uncollapse": "Aufklappen",
|
||||
"hideCheckedChecklistItems": "Erledigte Checklisteneinträge ausblenden",
|
||||
"hideAllChecklistItems": "Verberge alle Checklisteneinträge",
|
||||
"support": "Unterstützung",
|
||||
"supportPopup-title": "Unterstützung",
|
||||
"accessibility-page-enabled": "Barrierefreie Seite freigeschaltet",
|
||||
"accessibility-title": "Barrierefreies Thema",
|
||||
"accessibility-content": "Barrierefreie Inhalte"
|
||||
"support": "Support",
|
||||
"supportPopup-title": "Support",
|
||||
"accessibility-page-enabled": "Bedienungshilfe Seite freigeschaltet",
|
||||
"accessibility-title": "Bedienungshilfe Titel",
|
||||
"accessibility-content": "Bedienungshilfe Inhalt"
|
||||
}
|
||||
@@ -90,8 +90,8 @@
|
||||
"set-list-width": "Setze Breite",
|
||||
"set-list-width-value": "Setze min & max Breite (Pixels)",
|
||||
"list-width-error-message": "Breite der Liste muss eine Ganzzahl größer als 100 sein",
|
||||
"keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.",
|
||||
"keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.",
|
||||
"keyboard-shortcuts-enabled": "Tastaturkürzel sind aktiviert. Klicke, um sie zu deaktivieren.",
|
||||
"keyboard-shortcuts-disabled": "Tastaturkürzel sind deaktiviert. Klicke, um sie zu aktivieren.",
|
||||
"setSwimlaneHeightPopup-title": "Stelle die Höhe der Swimlane ein",
|
||||
"set-swimlane-height": "Stelle die Höhe der Swimlane ein",
|
||||
"set-swimlane-height-value": "Höhe der Swimlane (Pixel)",
|
||||
@@ -266,9 +266,9 @@
|
||||
"checklists": "Checklisten",
|
||||
"click-to-star": "Klicken Sie, um das Board mit einem Stern zu markieren.",
|
||||
"click-to-unstar": "Klicken Sie, um den Stern vom Board zu entfernen.",
|
||||
"click-to-enable-auto-width": "Auto list width disabled. Click to enable.",
|
||||
"click-to-disable-auto-width": "Auto list width enabled. Click to disable.",
|
||||
"auto-list-width": "Auto list width",
|
||||
"click-to-enable-auto-width": "Automatische Listenbreite ist deaktiviert. Klicke, um sie zu aktivieren.",
|
||||
"click-to-disable-auto-width": "Automatische Listenbreite ist aktiviert. Klicke, um sie zu deaktivieren.",
|
||||
"auto-list-width": "Automatische Listenbreite",
|
||||
"clipboard": "Zwischenablage oder Drag & Drop",
|
||||
"close": "Schließen",
|
||||
"close-board": "Board schließen",
|
||||
@@ -383,7 +383,7 @@
|
||||
"email-sent": "E-Mail gesendet",
|
||||
"email-verifyEmail-subject": "Bestätigen Sie ihre E-Mail-Adresse auf __siteName__",
|
||||
"email-verifyEmail-text": "Hallo __user__,\n\num ihre E-Mail-Adresse zu bestätigen, klicken Sie bitte auf folgenden Link:\n\n__url__\n\nDanke.",
|
||||
"enable-vertical-scrollbars": "Enable vertical scrollbars",
|
||||
"enable-vertical-scrollbars": "Vertikale Bildlaufleisten aktivieren",
|
||||
"enable-wip-limit": "WIP-Limit einschalten",
|
||||
"error-board-doesNotExist": "Dieses Board existiert nicht",
|
||||
"error-board-notAdmin": "Um das zu tun, müssen Sie Administrator dieses Boards sein",
|
||||
@@ -610,7 +610,7 @@
|
||||
"has-spenttime-cards": "Hat Karten mit aufgewendeten Zeiten",
|
||||
"time": "Zeit",
|
||||
"title": "Titel",
|
||||
"toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).",
|
||||
"toggle-assignees": "Schalte Zugewiesene 1-9 für die Karte um (in der Reihenfolge der Hinzufügung zum Board).",
|
||||
"toggle-labels": "Label 1-9 zur Karte hinzufügen. Bei Mehrfachauswahl Label 1-9 hinzufügen",
|
||||
"remove-labels-multiselect": "Labels 1-9 bei Karten-Mehrfachauswahl entfernen",
|
||||
"tracking": "Folgen",
|
||||
@@ -1257,7 +1257,7 @@
|
||||
"text": "Text",
|
||||
"translation-text": "Übersetzungstext",
|
||||
"show-subtasks-field": "Teilaufgaben Feld anzeigen",
|
||||
"show-week-of-year": "Show week of year (ISO 8601)",
|
||||
"show-week-of-year": "Kalenderwoche anzeigen (ISO 8601)",
|
||||
"convert-to-markdown": "Als Markdown konvertieren",
|
||||
"import-board-zip": "Erstelle .zip Datei mit JSON Board Dateien und die Unterverzeichnisse des Boardnamen mit Anhängen",
|
||||
"collapse": "Einklappen",
|
||||
|
||||
@@ -125,6 +125,7 @@
|
||||
"archive": "Move to Archive",
|
||||
"archive-all": "Move All to Archive",
|
||||
"archive-board": "Move Board to Archive",
|
||||
"archive-board-confirm": "Are you sure you want to archive this board?",
|
||||
"archive-card": "Move Card to Archive",
|
||||
"archive-list": "Move List to Archive",
|
||||
"archive-swimlane": "Move Swimlane to Archive",
|
||||
@@ -896,6 +897,7 @@
|
||||
"oidc-button-text": "Customize the OIDC button text",
|
||||
"default-authentication-method": "Default Authentication Method",
|
||||
"duplicate-board": "Duplicate Board",
|
||||
"duplicate-board-confirm": "Are you sure you want to duplicate this board?",
|
||||
"org-number": "The number of organizations is: ",
|
||||
"team-number": "The number of teams is: ",
|
||||
"people-number": "The number of people is: ",
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -300,7 +300,7 @@
|
||||
"color-white": "white",
|
||||
"color-yellow": "flava",
|
||||
"unset-color": "Unset",
|
||||
"comments": "Comments",
|
||||
"comments": "Komentoj",
|
||||
"comment": "Komento",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-only": "Comment only",
|
||||
@@ -1253,7 +1253,7 @@
|
||||
"newTranslationPopup-title": "New custom translation string",
|
||||
"editTranslationPopup-title": "Edit custom translation string",
|
||||
"settingsTranslationPopup-title": "Delete this custom translation string?",
|
||||
"translation": "Translation",
|
||||
"translation": "Traduko",
|
||||
"text": "Teksto",
|
||||
"translation-text": "Translation text",
|
||||
"show-subtasks-field": "Show subtasks field",
|
||||
|
||||
+135
-135
@@ -16,9 +16,9 @@
|
||||
"act-uncheckedItem": "desmarcado el elemento __checklistItem__ de la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
|
||||
"act-completeChecklist": "completada la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
|
||||
"act-uncompleteChecklist": "no completada la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
|
||||
"act-addComment": "comentario en la tarjeta__card__: __comment__ de la lista __list__ del carril __swimlane__ del tablero __board__",
|
||||
"act-editComment": "comentario editado en la tarjeta __card__: __comment__ de la lista __list__ del carril __swimlane__ del tablero __board__",
|
||||
"act-deleteComment": "comentario eliminado en la tarjeta __card__: __comment__ de la lista __list__ del carril __swimlane__ del tablero __board__",
|
||||
"act-addComment": "ha comentado en la tarjeta__card__: __comment__ de la lista __list__ del carril __swimlane__ del tablero __board__",
|
||||
"act-editComment": "ha editado la tarjeta __card__: __comment__ de la lista __list__ del carril __swimlane__ del tablero __board__",
|
||||
"act-deleteComment": "ha borrado el comentario en la tarjeta __card__: __comment__ de la lista __list__ del carril __swimlane__ del tablero __board__",
|
||||
"act-createBoard": "creó el tablero __board__",
|
||||
"act-createSwimlane": "creó el carril de flujo __swimlane__ en el tablero __board__",
|
||||
"act-createCard": "creada la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
|
||||
@@ -49,7 +49,7 @@
|
||||
"activity-archived": "%s se ha archivado",
|
||||
"activity-attached": "adjuntado(s) %s a %s",
|
||||
"activity-created": "ha creado %s",
|
||||
"activity-changedListTitle": "renamed list to %s",
|
||||
"activity-changedListTitle": "lista renombrada como %s",
|
||||
"activity-customfield-created": "creó el campo personalizado %s",
|
||||
"activity-excluded": "ha excluido %s de %s",
|
||||
"activity-imported": "ha importado %s en %s desde %s",
|
||||
@@ -86,27 +86,27 @@
|
||||
"add-card": "Añadir una tarjeta",
|
||||
"add-card-to-top-of-list": "Subir la tarjeta al principio de la lista",
|
||||
"add-card-to-bottom-of-list": "Bajar la tarjeta al final de la lista",
|
||||
"setListWidthPopup-title": "Set Widths",
|
||||
"set-list-width": "Set Widths",
|
||||
"set-list-width-value": "Set Min & Max Widths (pixels)",
|
||||
"list-width-error-message": "List widths must be integers greater than 100",
|
||||
"keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.",
|
||||
"keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.",
|
||||
"setSwimlaneHeightPopup-title": "Set Swimlane Height",
|
||||
"set-swimlane-height": "Set Swimlane Height",
|
||||
"set-swimlane-height-value": "Swimlane Height (pixels)",
|
||||
"swimlane-height-error-message": "Swimlane height must be a positive integer",
|
||||
"setListWidthPopup-title": "Ajustar anchuras",
|
||||
"set-list-width": "Ajustar anchuras",
|
||||
"set-list-width-value": "Establecer anchos mín. y máx. (píxeles)",
|
||||
"list-width-error-message": "Las anchuras de las listas deben ser enteros mayores de 100",
|
||||
"keyboard-shortcuts-enabled": "Atajos de teclado habilitados. Haz clic para deshabilitarlos.",
|
||||
"keyboard-shortcuts-disabled": "Atajos de teclado deshabilitados. Haz clic para habilitarlos.",
|
||||
"setSwimlaneHeightPopup-title": "Ajustar la altura del carril",
|
||||
"set-swimlane-height": "Ajustar la altura del carril",
|
||||
"set-swimlane-height-value": "Altura de carril (píxeles)",
|
||||
"swimlane-height-error-message": "La altura de carril debe ser un entero positivo",
|
||||
"add-swimlane": "Añadir un carril de flujo",
|
||||
"add-subtask": "Añadir subtarea",
|
||||
"add-checklist": "Añadir una lista de verificación",
|
||||
"add-checklist-item": "Añadir un elemento a la lista de verificación",
|
||||
"close-add-checklist-item": "Close add an item to checklist form",
|
||||
"close-edit-checklist-item": "Close edit an item to checklist form",
|
||||
"close-add-checklist-item": "Cerrar el formulario para añadir un elemento a la lista de verificación",
|
||||
"close-edit-checklist-item": "Cerrar el formulario de edición de un elemento de la lista de verificación",
|
||||
"convertChecklistItemToCardPopup-title": "Convertir en tarjeta",
|
||||
"add-cover": "Add cover image to minicard",
|
||||
"add-cover": "Añadir imagen de portada a la minitarjeta",
|
||||
"add-label": "Añadir una etiqueta",
|
||||
"add-list": "Añadir una lista",
|
||||
"add-after-list": "Add After List",
|
||||
"add-after-list": "Añadir después de la lista",
|
||||
"add-members": "Añadir miembros",
|
||||
"added": "Añadida el",
|
||||
"addMemberPopup-title": "Miembros",
|
||||
@@ -120,7 +120,7 @@
|
||||
"and-n-other-card": "y __count__ tarjeta más",
|
||||
"and-n-other-card_plural": "y otras __count__ tarjetas",
|
||||
"apply": "Aplicar",
|
||||
"app-is-offline": "Cargando, espera por favor. Refrescar esta página causará pérdida de datos. Si la carga no funciona, por favor comprueba que el servidor no se ha parado.",
|
||||
"app-is-offline": "Cargando, espera por favor. Refrescar esta página causará la pérdida de datos. Si la carga no funciona, por favor comprueba que el servidor no se ha parado.",
|
||||
"app-try-reconnect": "Intente reconectar.",
|
||||
"archive": "Archivar",
|
||||
"archive-all": "Archivar todo",
|
||||
@@ -149,10 +149,10 @@
|
||||
"avatar-too-big": "El avatar es demasiado grande (__size__ máx)",
|
||||
"back": "Atrás",
|
||||
"board-change-color": "Cambiar el color",
|
||||
"board-change-background-image": "Change Background Image",
|
||||
"board-background-image-url": "Background Image URL",
|
||||
"add-background-image": "Add Background Image",
|
||||
"remove-background-image": "Remove Background Image",
|
||||
"board-change-background-image": "Cambiar imagen de fondo",
|
||||
"board-background-image-url": "URL de la imagen de fondo",
|
||||
"add-background-image": "Añadir imagen de fondo",
|
||||
"remove-background-image": "Quitar imagen de fondo",
|
||||
"show-at-all-boards-page" : "Mostrar todos los tableros",
|
||||
"board-info-on-my-boards" : "Configuración de todos los tableros",
|
||||
"boardInfoOnMyBoardsPopup-title" : "Configuración de todos los tableros",
|
||||
@@ -163,11 +163,11 @@
|
||||
"board-not-found": "Tablero no encontrado",
|
||||
"board-private-info": "Este tablero será <strong>privado</strong>.",
|
||||
"board-public-info": "Este tablero será <strong>público</strong>.",
|
||||
"board-drag-drop-reorder-or-click-open": "Mueve y posiciona para reordenar los iconos de los tableros. Click en el icono del tablero para abrirlo",
|
||||
"board-drag-drop-reorder-or-click-open": "Arrastra y suelta para reordenar los iconos del tablero. Click en el icono del tablero para abrirlo",
|
||||
"boardChangeColorPopup-title": "Cambiar el fondo del tablero",
|
||||
"boardChangeBackgroundImagePopup-title": "Change Background Image",
|
||||
"boardChangeBackgroundImagePopup-title": "Cambiar imagen de fondo",
|
||||
"allBoardsChangeColorPopup-title": "Cambiar el color",
|
||||
"allBoardsChangeBackgroundImagePopup-title": "Change Background Image",
|
||||
"allBoardsChangeBackgroundImagePopup-title": "Cambiar imagen de fondo",
|
||||
"boardChangeTitlePopup-title": "Renombrar el tablero",
|
||||
"boardChangeVisibilityPopup-title": "Cambiar visibilidad",
|
||||
"boardChangeWatchPopup-title": "Cambiar vigilancia",
|
||||
@@ -217,10 +217,10 @@
|
||||
"vote-against": "contrarios",
|
||||
"deleteVotePopup-title": "¿Borrar voto?",
|
||||
"vote-delete-pop": "El Borrado es permanente. Perderá todas las acciones asociadas con este voto.",
|
||||
"cardStartPlanningPokerPopup-title": "Comenzar una Planning Poker",
|
||||
"card-edit-planning-poker": "Editar la planificación del Poker",
|
||||
"editPokerEndDatePopup-title": "Cambiar la fecha final para la planificación del Poker",
|
||||
"poker-question": "Planificación del Poker",
|
||||
"cardStartPlanningPokerPopup-title": "Comenzar un Planning Poker",
|
||||
"card-edit-planning-poker": "Editar el Planning Poker",
|
||||
"editPokerEndDatePopup-title": "Cambiar la fecha final de voto del Planning Poker",
|
||||
"poker-question": "Planning Poker",
|
||||
"poker-one": "1",
|
||||
"poker-two": "2",
|
||||
"poker-three": "3",
|
||||
@@ -236,8 +236,8 @@
|
||||
"poker-result-who": "¿Quien?",
|
||||
"poker-replay": "Reproducir",
|
||||
"set-estimation": "Fijar estimación",
|
||||
"deletePokerPopup-title": "¿Borrar el póquer de planificación?",
|
||||
"poker-delete-pop": "El borrado es permanente. Perderás todas las acciones asociadas a este póker de planificación.",
|
||||
"deletePokerPopup-title": "¿Borrar el Planning Poker?",
|
||||
"poker-delete-pop": "El borrado es permanente. Perderás todas las acciones asociadas a este Planning Poker.",
|
||||
"cardDeletePopup-title": "¿Eliminar la tarjeta?",
|
||||
"cardArchivePopup-title": "¿Archivar tarjeta?",
|
||||
"cardDetailsActionsPopup-title": "Acciones de la tarjeta",
|
||||
@@ -266,9 +266,9 @@
|
||||
"checklists": "Lista de verificación",
|
||||
"click-to-star": "Haz clic para destacar este tablero.",
|
||||
"click-to-unstar": "Haz clic para dejar de destacar este tablero.",
|
||||
"click-to-enable-auto-width": "Auto list width disabled. Click to enable.",
|
||||
"click-to-disable-auto-width": "Auto list width enabled. Click to disable.",
|
||||
"auto-list-width": "Auto list width",
|
||||
"click-to-enable-auto-width": "Ancho de lista automático deshabilitado. Haz clic para habilitarlo.",
|
||||
"click-to-disable-auto-width": "Ancho de lista automático habilitado. Haz clic para deshabilitarlo.",
|
||||
"auto-list-width": "Ancho de lista automático",
|
||||
"clipboard": "el portapapeles o con arrastrar y soltar",
|
||||
"close": "Cerrar",
|
||||
"close-board": "Cerrar el tablero",
|
||||
@@ -300,7 +300,7 @@
|
||||
"color-white": "blanco",
|
||||
"color-yellow": "amarilla",
|
||||
"unset-color": "Desmarcar",
|
||||
"comments": "Comments",
|
||||
"comments": "Comentarios",
|
||||
"comment": "Comentar",
|
||||
"comment-placeholder": "Escribir comentario",
|
||||
"comment-only": "Sólo comentarios",
|
||||
@@ -313,7 +313,7 @@
|
||||
"worker-desc": "Solo puede mover tarjetas, asignarse a la tarjeta y comentar.",
|
||||
"computer": "el ordenador",
|
||||
"confirm-subtask-delete-popup": "¿Seguro que quieres eliminar la subtarea?",
|
||||
"confirm-checklist-delete-popup": "¿Está seguro de que quiere eliminar la lista de tareas?",
|
||||
"confirm-checklist-delete-popup": "¿Está seguro de querer eliminar la lista de tareas?",
|
||||
"subtaskDeletePopup-title": "¿Borrar subtarea?",
|
||||
"checklistDeletePopup-title": "¿Borrar la lista de tareas?",
|
||||
"copy-card-link-to-clipboard": "Copiar el enlace de la tarjeta al portapapeles",
|
||||
@@ -338,7 +338,7 @@
|
||||
"custom-field-date": "Fecha",
|
||||
"custom-field-dropdown": "Lista desplegable",
|
||||
"custom-field-dropdown-none": "(nada)",
|
||||
"custom-field-dropdown-options": "Opciones de la lista",
|
||||
"custom-field-dropdown-options": "Opciones de listas",
|
||||
"custom-field-dropdown-options-placeholder": "Pulsa Intro para añadir más opciones",
|
||||
"custom-field-dropdown-unknown": "(desconocido)",
|
||||
"custom-field-number": "Número",
|
||||
@@ -383,7 +383,7 @@
|
||||
"email-sent": "Correo enviado",
|
||||
"email-verifyEmail-subject": "Verifica tu dirección de correo en __siteName__",
|
||||
"email-verifyEmail-text": "Hola __user__,\n\nPara verificar tu cuenta de correo electrónico, haz clic en el siguiente enlace.\n\n__url__\n\nGracias.",
|
||||
"enable-vertical-scrollbars": "Enable vertical scrollbars",
|
||||
"enable-vertical-scrollbars": "Habilitar barras de desplazamiento verticales",
|
||||
"enable-wip-limit": "Habilitar el límite del trabajo en proceso",
|
||||
"error-board-doesNotExist": "El tablero no existe",
|
||||
"error-board-notAdmin": "Es necesario ser administrador de este tablero para hacer eso",
|
||||
@@ -414,7 +414,7 @@
|
||||
"sort": "Ordenar",
|
||||
"sorted": "Ordenado",
|
||||
"remove-sort": "Eliminar el ordenamiento",
|
||||
"sort-desc": "Click para ordenar la lista",
|
||||
"sort-desc": "Clic para ordenar la lista",
|
||||
"list-sort-by": "Ordenar la lista por:",
|
||||
"list-label-modifiedAt": "Hora de último acceso",
|
||||
"list-label-title": "Nombre de la lista",
|
||||
@@ -451,7 +451,7 @@
|
||||
"advanced-filter-description": "El filtrado avanzado permite escribir una cadena que contiene los siguientes operadores: == != <= >= && || ( ) Se utiliza un espacio como separador entre los operadores. Se pueden filtrar todos los campos personalizados escribiendo sus nombres y valores. Por ejemplo: Campo1 == Valor1. Nota: Si los campos o valores contienen espacios, deben encapsularse entre comillas simples. Por ejemplo: 'Campo 1' == 'Valor 1'. Para omitir los caracteres de control único (' \\\\/), se usa \\\\. Por ejemplo: Campo1 = I\\\\'m. También se pueden combinar múltiples condiciones. Por ejemplo: C1 == V1 || C1 == V2. Normalmente todos los operadores se interpretan de izquierda a derecha. Se puede cambiar el orden colocando paréntesis. Por ejemplo: C1 == V1 && ( C2 == V2 || C2 == V3 ). También se puede buscar en campos de texto usando expresiones regulares: C1 == /Tes.*/i",
|
||||
"fullname": "Nombre completo",
|
||||
"header-logo-title": "Volver a tu página de tableros",
|
||||
"show-activities": "Show Activities",
|
||||
"show-activities": "Mostrar actividades",
|
||||
"headerBarCreateBoardPopup-title": "Crear tablero",
|
||||
"home": "Inicio",
|
||||
"import": "Importar",
|
||||
@@ -500,7 +500,7 @@
|
||||
"list-move-cards": "Mover todas las tarjetas de esta lista",
|
||||
"list-select-cards": "Seleccionar todas las tarjetas de esta lista",
|
||||
"set-color-list": "Cambiar el color",
|
||||
"listActionPopup-title": "Acciones de la lista",
|
||||
"listActionPopup-title": "Acciones de listas",
|
||||
"settingsUserPopup-title": "Preferencias de usuario",
|
||||
"settingsTeamPopup-title": "Configuración del Equipo",
|
||||
"settingsOrgPopup-title": "Configuración de la Organización",
|
||||
@@ -510,7 +510,7 @@
|
||||
"listImportCardsTsvPopup-title": "Importar CSV/TSV",
|
||||
"listMorePopup-title": "Más",
|
||||
"link-list": "Enlazar a esta lista",
|
||||
"list-delete-pop": "Todas las acciones serán eliminadas del historial de actividades y no se podrá recuperar la lista. Esta acción no puede deshacerse.",
|
||||
"list-delete-pop": "Se eliminarán todas las acciones del historial de actividades y no se podrá volver a abrir la lista. Esta acción no puede deshacerse.",
|
||||
"list-delete-suggest-archive": "Puedes mover una lista al Archivo para quitarla del tablero y preservar la actividad.",
|
||||
"lists": "Listas",
|
||||
"swimlanes": "Carriles",
|
||||
@@ -540,7 +540,7 @@
|
||||
"normal": "Normal",
|
||||
"normal-desc": "Puedes ver y editar tarjetas. No puedes cambiar la configuración.",
|
||||
"not-accepted-yet": "La invitación no ha sido aceptada aún",
|
||||
"notify-participate": "Receive updates to any cards you participate as creator or member",
|
||||
"notify-participate": "Recibir actualizaciones de cualquier tarjeta en la que participes como creador o miembro",
|
||||
"notify-watch": "Recibir actuaizaciones de cualquier tablero, lista o tarjeta que estés vigilando",
|
||||
"optional": "opcional",
|
||||
"or": "o",
|
||||
@@ -558,7 +558,7 @@
|
||||
"public": "Público",
|
||||
"public-desc": "Este tablero es público. Es visible para cualquiera a través del enlace, y se mostrará en los buscadores como Google. Sólo las personas añadidas al tablero pueden editarlo.",
|
||||
"quick-access-description": "Destaca un tablero para añadir un acceso directo en esta barra.",
|
||||
"remove-cover": "Remove cover image from minicard",
|
||||
"remove-cover": "Quitar imagen de portada de la minitarjeta",
|
||||
"remove-from-board": "Desvincular del tablero",
|
||||
"remove-label": "Eliminar la etiqueta",
|
||||
"listDeletePopup-title": "¿Eliminar la lista?",
|
||||
@@ -580,14 +580,14 @@
|
||||
"select-board": "Seleccionar tablero",
|
||||
"set-wip-limit-value": "Cambiar el límite para el número máximo de tareas en esta lista.",
|
||||
"setWipLimitPopup-title": "Establecer el límite del trabajo en proceso",
|
||||
"shortcut-add-self": "Add yourself to current card",
|
||||
"shortcut-add-self": "Añadirte a ti mismo a la tarjeta actual",
|
||||
"shortcut-assign-self": "Asignarte a ti mismo a la tarjeta actual",
|
||||
"shortcut-autocomplete-emoji": "Autocompletar emoji",
|
||||
"shortcut-autocomplete-members": "Autocompletar miembros",
|
||||
"shortcut-clear-filters": "Limpiar todos los filtros",
|
||||
"shortcut-close-dialog": "Cerrar el cuadro de diálogo",
|
||||
"shortcut-filter-my-cards": "Filtrar mis tarjetas",
|
||||
"shortcut-filter-my-assigned-cards": "Filter my assigned cards",
|
||||
"shortcut-filter-my-assigned-cards": "Filtrar mis tarjetas asignadas",
|
||||
"shortcut-show-shortcuts": "Mostrar esta lista de atajos",
|
||||
"shortcut-toggle-filterbar": "Conmutar la barra lateral del filtro",
|
||||
"shortcut-toggle-searchbar": "Conmutar la barra lateral de búsqueda",
|
||||
@@ -604,13 +604,13 @@
|
||||
"this-board": "este tablero",
|
||||
"this-card": "esta tarjeta",
|
||||
"spent-time-hours": "Tiempo consumido (horas)",
|
||||
"overtime-hours": "Tiempo excesivo (horas)",
|
||||
"overtime-hours": "Horas extras",
|
||||
"overtime": "Tiempo excesivo",
|
||||
"has-overtime-cards": "Hay tarjetas con el tiempo excedido",
|
||||
"has-spenttime-cards": "Se ha excedido el tiempo de las tarjetas",
|
||||
"time": "Hora",
|
||||
"title": "Título",
|
||||
"toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).",
|
||||
"toggle-assignees": "Alternar asignados 1-9 para la tarjeta (por orden de adición al tablero).",
|
||||
"toggle-labels": "Alterna las etiquetas 1-9 para la tarjeta. La selección múltiple añade las etiquetas 1-9",
|
||||
"remove-labels-multiselect": "La selección múltiple elimina las etiquetas 1-9",
|
||||
"tracking": "Siguiendo",
|
||||
@@ -624,12 +624,12 @@
|
||||
"uploaded-avatar": "Avatar cargado",
|
||||
"custom-top-left-corner-logo-image-url": "Personalizar la URL del logotipo en la esquina superior izquierda",
|
||||
"custom-top-left-corner-logo-link-url": "Personalizar el enlace del logotipo de la esquina superior izquierda",
|
||||
"custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27",
|
||||
"custom-top-left-corner-logo-height": "Altura personalizada del logo de la esquina superior izquierda. Por defecto: 27",
|
||||
"custom-login-logo-image-url": "Custom Login Logo Image URL",
|
||||
"custom-login-logo-link-url": "Custom Login Logo Link URL",
|
||||
"custom-help-link-url": "Custom Help Link URL",
|
||||
"custom-help-link-url": "Enlace URL de ayuda personalizada",
|
||||
"text-below-custom-login-logo": "Text below Custom Login Logo",
|
||||
"automatic-linked-url-schemes": "Custom URL Schemes which should automatically be clickable. One URL Scheme per line",
|
||||
"automatic-linked-url-schemes": "Esquemas de URL personalizados que deberían ser clicables automáticamente. Un esquema de URL por línea.",
|
||||
"username": "Nombre de usuario",
|
||||
"import-usernames": "Importar Usuarios",
|
||||
"view-it": "Verla",
|
||||
@@ -656,7 +656,7 @@
|
||||
"disable-forgot-password": "Disable Forgot Password",
|
||||
"invite": "Invitar",
|
||||
"invite-people": "Invitar a personas",
|
||||
"to-boards": "A el(los) tablero(s)",
|
||||
"to-boards": "Al (A los) tablero(s)",
|
||||
"email-addresses": "Direcciones de correo electrónico",
|
||||
"smtp-host-description": "Dirección del servidor SMTP para gestionar tus correos",
|
||||
"smtp-port-description": "Puerto usado por el servidor SMTP para mandar correos",
|
||||
@@ -731,7 +731,7 @@
|
||||
"setListColorPopup-title": "Elegir un color",
|
||||
"assigned-by": "Asignado por",
|
||||
"requested-by": "Solicitado por",
|
||||
"card-sorting-by-number": "Card sorting by number",
|
||||
"card-sorting-by-number": "Orden de tarjetas por número",
|
||||
"board-delete-notice": "Se eliminarán todas las listas, tarjetas y acciones asociadas a este tablero. Esta acción no puede deshacerse.",
|
||||
"delete-board-confirm-popup": "Se eliminarán todas las listas, tarjetas, etiquetas y actividades, y no podrás recuperar los contenidos del tablero. Esta acción no puede deshacerse.",
|
||||
"boardDeletePopup-title": "¿Eliminar el tablero?",
|
||||
@@ -742,7 +742,7 @@
|
||||
"queue": "Cola",
|
||||
"subtask-settings": "Preferencias de las subtareas",
|
||||
"card-settings": "Preferencias de la tarjeta",
|
||||
"minicard-settings": "Minicard Settings",
|
||||
"minicard-settings": "Configuración de minitarjeta",
|
||||
"boardSubtaskSettingsPopup-title": "Preferencias de las subtareas del tablero",
|
||||
"boardCardSettingsPopup-title": "Preferencias de la tarjeta",
|
||||
"boardMinicardSettingsPopup-title": "Minicard Settings",
|
||||
@@ -750,9 +750,9 @@
|
||||
"deposit-subtasks-list": "Lista de destino para subtareas depositadas aquí:",
|
||||
"show-parent-in-minicard": "Mostrar el padre en una minitarjeta:",
|
||||
"description-on-minicard": "Description on minicard",
|
||||
"cover-attachment-on-minicard": "Cover image on minicard",
|
||||
"badge-attachment-on-minicard": "Count of attachments on minicard",
|
||||
"card-sorting-by-number-on-minicard": "Card sorting by number on minicard",
|
||||
"cover-attachment-on-minicard": "Imagen de portada de la minitarjeta",
|
||||
"badge-attachment-on-minicard": "Contador de adjuntos en la minitarjeta",
|
||||
"card-sorting-by-number-on-minicard": "Orden de tarjetas por número de minitarjeta",
|
||||
"prefix-with-full-path": "Prefijo con ruta completa",
|
||||
"prefix-with-parent": "Prefijo con el padre",
|
||||
"subtext-with-full-path": "Subtexto con ruta completa",
|
||||
@@ -786,7 +786,7 @@
|
||||
"r-added-to": "Añadido a",
|
||||
"r-removed-from": "eliminado de",
|
||||
"r-the-board": "el tablero",
|
||||
"r-list": "la lista",
|
||||
"r-list": "lista",
|
||||
"set-filter": "Filtrar",
|
||||
"r-moved-to": "Movido a",
|
||||
"r-moved-from": "Movido desde",
|
||||
@@ -861,12 +861,12 @@
|
||||
"r-d-remove-checklist": "Eliminar lista de verificación",
|
||||
"r-by": "por",
|
||||
"r-add-checklist": "Añadir una lista de verificación",
|
||||
"r-with-items": "con items",
|
||||
"r-with-items": "con elementos",
|
||||
"r-items-list": "item1,item2,item3",
|
||||
"r-add-swimlane": "Agregar el carril",
|
||||
"r-swimlane-name": "nombre del carril",
|
||||
"r-board-note": "Nota: deje un campo vacío para que coincida con todos los valores posibles",
|
||||
"r-checklist-note": "Nota: los ítems de la lista tienen que escribirse como valores separados por coma.",
|
||||
"r-checklist-note": "Nota: los elementos de la lista tienen que escribirse como valores separados por coma.",
|
||||
"r-when-a-card-is-moved": "Cuando una tarjeta es movida a otra lista",
|
||||
"r-set": "Cambiar",
|
||||
"r-update": "Actualizar",
|
||||
@@ -877,7 +877,7 @@
|
||||
"r-df-received-at": "recibido",
|
||||
"r-to-current-datetime": "a la fecha/hora actual",
|
||||
"r-remove-value-from": "Eliminar el valor de",
|
||||
"r-link-card": "Link card to",
|
||||
"r-link-card": "Enlazar tarjeta a",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
@@ -890,7 +890,7 @@
|
||||
"hide-board-member-list": "Hide board member list on All Boards",
|
||||
"add-custom-html-after-body-start": "Añade HTML personalizado después de <body>",
|
||||
"add-custom-html-before-body-end": "Añade HTML personalizado después de </body>",
|
||||
"error-undefined": "Algo no está bien",
|
||||
"error-undefined": "Algo ha salido mal",
|
||||
"error-ldap-login": "Ocurrió un error al intentar acceder",
|
||||
"display-authentication-method": "Mostrar el método de autenticación",
|
||||
"oidc-button-text": "Customize the OIDC button text",
|
||||
@@ -916,15 +916,15 @@
|
||||
"almostdue": "está próxima la hora de vencimiento actual %s",
|
||||
"pastdue": "se sobrepasó la hora de vencimiento actual%s",
|
||||
"duenow": "la hora de vencimiento actual %s es hoy",
|
||||
"act-newDue": "__list__/__card__ tiene una 1ra notificación de vencimiento [__board__]",
|
||||
"act-newDue": "__list__/__card__ tiene una primera notificación de vencimiento [__board__]",
|
||||
"act-withDue": "__list__/__card__ notificaciones de vencimiento [__board__]",
|
||||
"act-almostdue": "se ha notificado que el vencimiento actual (__timeValue__) de __card__ está próximo",
|
||||
"act-pastdue": "se ha notificado que el vencimiento actual (__timeValue__) de __card__ se sobrepasó",
|
||||
"act-duenow": "se ha notificado que el vencimiento actual (__timeValue__) de __card__ es ahora",
|
||||
"act-atUserComment": "Se te mencionó en [__board__] __list__/__card__",
|
||||
"delete-user-confirm-popup": "¿Seguro que quieres eliminar esta cuenta? Esta acción no puede deshacerse.",
|
||||
"delete-team-confirm-popup": "Are you sure you want to delete this team? There is no undo.",
|
||||
"delete-org-confirm-popup": "Are you sure you want to delete this organization? There is no undo.",
|
||||
"delete-user-confirm-popup": "¿Estás seguro de querer eliminar esta cuenta? Esta acción no puede deshacerse.",
|
||||
"delete-team-confirm-popup": "¿Estás seguro de querer eliminar este equipo? Esta acción no puede deshacerse",
|
||||
"delete-org-confirm-popup": "¿Estás seguro de querer eliminar esta organización? Esta acción no puede deshacerse.",
|
||||
"accounts-allowUserDelete": "Permitir a los usuarios eliminar su cuenta",
|
||||
"hide-minicard-label-text": "Ocultar el texto de la etiqueta de la minitarjeta",
|
||||
"show-desktop-drag-handles": "Mostrar los controles de arrastre del escritorio",
|
||||
@@ -966,7 +966,7 @@
|
||||
"delete-linked-card-before-this-card": "No puede borrar esta tarjeta antes de borrar la tarjeta enlazada que tiene",
|
||||
"delete-linked-cards-before-this-list": "No puede borrar esta lista antes de borrar las tarjetas enlazadas que apuntan a tarjetas en esta lista",
|
||||
"hide-checked-items": "Ocultar elementos marcados",
|
||||
"hide-finished-checklist": "Hide finished checklist",
|
||||
"hide-finished-checklist": "Esconder la lista de tareas finalizada",
|
||||
"task": "Tarea",
|
||||
"create-task": "Crear Tarea",
|
||||
"ok": "Vale",
|
||||
@@ -974,7 +974,7 @@
|
||||
"teams": "Equipos",
|
||||
"displayName": "Mostrar Nombre",
|
||||
"shortName": "Nombre Corto",
|
||||
"autoAddUsersWithDomainName": "Automatically add users with the domain name",
|
||||
"autoAddUsersWithDomainName": "Añadir automáticamente usuarios con el nombre del dominio",
|
||||
"website": "Sitio web",
|
||||
"person": "Persona",
|
||||
"my-cards": "Mis Tarjetas",
|
||||
@@ -998,13 +998,13 @@
|
||||
"dueCardsViewChange-choice-all-description": "Shows all incomplete cards with a *Due* date from boards for which the user has permission.",
|
||||
"broken-cards": "Tarjetas Rotas",
|
||||
"board-title-not-found": "Tablero '%s' no encontrado.",
|
||||
"swimlane-title-not-found": "Swimlane '%s' not found.",
|
||||
"swimlane-title-not-found": "Carril '%s' no encontrado.",
|
||||
"list-title-not-found": "Lista '%s' no encontrada.",
|
||||
"label-not-found": "Etiqueta '%s' no encontrada.",
|
||||
"label-color-not-found": "Label color %s not found.",
|
||||
"user-username-not-found": "Usuario '%s' no encontrado.",
|
||||
"comment-not-found": "Card with comment containing text '%s' not found.",
|
||||
"org-name-not-found": "Organization '%s' not found.",
|
||||
"org-name-not-found": "Organización '%s' no encontrada.",
|
||||
"team-name-not-found": "Team '%s' not found.",
|
||||
"globalSearch-title": "Buscar todas las tarjetas",
|
||||
"no-cards-found": "Ninguna tarjeta encontrada",
|
||||
@@ -1013,9 +1013,9 @@
|
||||
"n-n-of-n-cards-found": "__start__-__end__ of __total__ Cards Found",
|
||||
"operator-board": "tablero",
|
||||
"operator-board-abbrev": "b",
|
||||
"operator-swimlane": "swimlane",
|
||||
"operator-swimlane": "carril",
|
||||
"operator-swimlane-abbrev": "s",
|
||||
"operator-list": "la lista",
|
||||
"operator-list": "lista",
|
||||
"operator-list-abbrev": "l",
|
||||
"operator-label": "etiqueta",
|
||||
"operator-label-abbrev": "#",
|
||||
@@ -1041,7 +1041,7 @@
|
||||
"predicate-open": "abierto",
|
||||
"predicate-ended": "finalizó",
|
||||
"predicate-all": "todo",
|
||||
"predicate-overdue": "overdue",
|
||||
"predicate-overdue": "atrasado",
|
||||
"predicate-week": "semana",
|
||||
"predicate-month": "mes",
|
||||
"predicate-quarter": "cuarto",
|
||||
@@ -1064,45 +1064,45 @@
|
||||
"operator-number-expected": "operator __operator__ expected a number, got '__value__'",
|
||||
"operator-sort-invalid": "sort of '%s' is invalid",
|
||||
"operator-status-invalid": "'%s' no es un estado válido",
|
||||
"operator-has-invalid": "%s is not a valid existence check",
|
||||
"operator-has-invalid": "%s no es una comprobación de existencia válida",
|
||||
"operator-limit-invalid": "%s no es un límite válido. El límite ha de ser un entero positivo.",
|
||||
"operator-debug-invalid": "%s is not a valid debug predicate",
|
||||
"next-page": "Página Siguiente",
|
||||
"previous-page": "Página Anterior",
|
||||
"heading-notes": "Notas",
|
||||
"globalSearch-instructions-heading": "Buscar instrucciones.",
|
||||
"globalSearch-instructions-description": "Searches can include operators to refine the search. Operators are specified by writing the operator name and value separated by a colon. For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*. If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
|
||||
"globalSearch-instructions-heading": "Instrucciones de búsqueda",
|
||||
"globalSearch-instructions-description": "Se pueden usar operadores para refinar la búsqueda. Los operadores se especifican escribiendo el nombre del operador y su valor separado por dos puntos. Por ejemplo, especificar `lista:Bloqueada` limitaría la búsqueda a tarjetas que conengan una lista llamada *Bloqueada*. Si el valor contiene espacios o caracteres especiales, debe escribirse entre comillas (por ejemplo: `__operator_list__:\"To Review\"`).",
|
||||
"globalSearch-instructions-operators": "Operadores disponibles:",
|
||||
"globalSearch-instructions-operator-board": "`__operator_board__:<title>` - cards in boards matching the specified *<title>*",
|
||||
"globalSearch-instructions-operator-board": "`__operator_board__:<title>` - tarjetas en tableros que coincidan con *<title>*",
|
||||
"globalSearch-instructions-operator-list": "`__operator_list__:<title>` - cards in lists matching the specified *<title>*",
|
||||
"globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:<title>` - cards in swimlanes matching the specified *<title>*",
|
||||
"globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - cards with a comment containing *<text>*.",
|
||||
"globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - tarjetas con comentarios que contengan *<text>*.",
|
||||
"globalSearch-instructions-operator-label": "`__operator_label__:<color>` `__operator_label__:<name>` - cards that have a label matching *<color>* or *<name>",
|
||||
"globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name|color>` - shorthand for `__operator_label__:<color>` or `__operator_label__:<name>`",
|
||||
"globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name|color>` - abreviatura para `__operator_label__:<color>` o `__operator_label__:<name>`",
|
||||
"globalSearch-instructions-operator-user": "`__operator_user__:<username>` - cards where *<username>* is a *member* or *assignee*",
|
||||
"globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - shorthand for `user:<username>`",
|
||||
"globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - abreviatura para `user:<username>`",
|
||||
"globalSearch-instructions-operator-member": "`__operator_member__:<username>` - cards where *<username>* is a *member*",
|
||||
"globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - cards where *<username>* is an *assignee*",
|
||||
"globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` - cards where *<username>* is the card's creator",
|
||||
"globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` - tarjetas donde *<username>* es el creador de la tarjeta",
|
||||
"globalSearch-instructions-operator-org": "`__operator_org__:<display name|short name>` - cards belonging to a board assigned to organization *<name>*",
|
||||
"globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - cards belonging to a board assigned to team *<name>*",
|
||||
"globalSearch-instructions-operator-due": "`__operator_due__:<n>` - cards which are due up to *<n>* days from now. `__operator_due__:__predicate_overdue__ lists all cards past their due date.",
|
||||
"globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - las tarjetas pertenecientes al tablero asignadas al equipo *<name>*",
|
||||
"globalSearch-instructions-operator-due": "`__operator_due__:<n>` - tarjetas que vencen dentro de *<n>* days. `__operator_due__:__predicate_overdue__ lista todas las tarjetas que han vencido.",
|
||||
"globalSearch-instructions-operator-created": "`__operator_created__:<n>` - cards which were created *<n>* days ago or less",
|
||||
"globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - cards which were modified *<n>* days ago or less",
|
||||
"globalSearch-instructions-operator-status": "`__operator_status__:<status>` - where *<status>* is one of the following:",
|
||||
"globalSearch-instructions-operator-status": "`__operator_status__:<status>` - donde *<status>* puede ser uno de los siguientes:",
|
||||
"globalSearch-instructions-status-archived": "`__predicate_archived__` - archived cards",
|
||||
"globalSearch-instructions-status-all": "`__predicate_all__` - all archived and unarchived cards",
|
||||
"globalSearch-instructions-status-all": "`__predicate_all__` - todas las tarjetas archivadas o no archivadas",
|
||||
"globalSearch-instructions-status-ended": "`__predicate_ended__` - cards with an end date",
|
||||
"globalSearch-instructions-status-public": "`__predicate_public__` - cards only in public boards",
|
||||
"globalSearch-instructions-status-private": "`__predicate_private__` - cards only in private boards",
|
||||
"globalSearch-instructions-operator-has": "`__operator_has__:<field>` - where *<field>* is one of `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` or `__predicate_member__`. Placing a `-` in front of *<field>* searches for the absence of a value in that field (e.g. `has:-due` searches for cards without a due date).",
|
||||
"globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - where *<sort-name>* is one of `__predicate_due__`, `__predicate_created__` or `__predicate_modified__`. For a descending sort, place a `-` in front of the sort name.",
|
||||
"globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - where *<n>* is a positive integer expressing the number of cards to be displayed per page.",
|
||||
"globalSearch-instructions-notes-1": "Múltiple operadores pueden ser seleccionados.",
|
||||
"globalSearch-instructions-notes-2": "Similar operators are *OR*ed together. Cards that match any of the conditions will be returned.\n`__operator_list__:Available __operator_list__:Blocked` would return cards contained in any list named *Blocked* or *Available*.",
|
||||
"globalSearch-instructions-notes-3": "Differing operators are *AND*ed together. Only cards that match all of the differing operators are returned. `__operator_list__:Available __operator_label__:red` returns only cards in the list *Available* with a *red* label.",
|
||||
"globalSearch-instructions-status-private": "`__predicate_private__` - solo tarjetas de tableros privados",
|
||||
"globalSearch-instructions-operator-has": "`__operator_has__:<field>` - donde *<field>* puede ser `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` o `__predicate_member__`. Colocando un `-` delante de *<field>* busca la ausencia del valor en ese campo (por ejemplo, `has:-due` busca tarjetas sin fecha de vencimiento).",
|
||||
"globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - donde *<sort-name>* puede ser `__predicate_due__`, `__predicate_created__` o `__predicate_modified__`. Para ordenar descendentemente, coloca un `-` delante del tipo de orden.",
|
||||
"globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - donde *<n>* es un entero positivo que expresa el número de tarjetas que se mostrarán por página.",
|
||||
"globalSearch-instructions-notes-1": "Se pueden especificar múltiples operadores.",
|
||||
"globalSearch-instructions-notes-2": "Múltiples condiciones de operadores parecidos se tratan internamente con el operador lógico OR. Es decir, la búsqueda devolverá las tarjetas que coincidan con alguna de las condiciones:\n`__operator_list__:Disponible __operator_list__:Bloqueada` devolverá tarjetas contenidas en cualquier lista nombrada *Bloqueada* o *Disponible*.",
|
||||
"globalSearch-instructions-notes-3": "Múltiples condiciones de operadores distintos se tratan internamente con el operador lógico AND. Es decir, la búsqueda devolverá las tarjetas que coincidan con TODAS las condiciones:\n`__operator_list__:Disponible __operator_label__:rojo` devuelve sólo las tarjetas en la lista *Disponible* con una etiqueta *roja*.",
|
||||
"globalSearch-instructions-notes-3-2": "Days can be specified as a positive or negative integer or using `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` or `__predicate_year__` for the current period.",
|
||||
"globalSearch-instructions-notes-4": "La búsqueda de texto distingue entre mayúsculas y minúsculas.",
|
||||
"globalSearch-instructions-notes-4": "Las búsquedas de texto no distinguen entre mayúsculas y minúsculas.",
|
||||
"globalSearch-instructions-notes-5": "Por defecto no se buscan las tarjetas archivadas.",
|
||||
"link-to-search": "Enlazar a esta búsqueda",
|
||||
"excel-font": "Arial",
|
||||
@@ -1111,32 +1111,32 @@
|
||||
"label-names": "Nombres de las etiquetas",
|
||||
"archived-at": "archivado el",
|
||||
"sort-cards": "Ordenar tarjetas",
|
||||
"sort-is-on": "Sort is on",
|
||||
"sort-is-on": "Ordenamiento activado",
|
||||
"cardsSortPopup-title": "Ordenar tarjetas",
|
||||
"due-date": "Fecha de Vencimiento",
|
||||
"server-error": "Error del Servidor",
|
||||
"server-error-troubleshooting": "Please submit the error generated by the server.\nFor a snap installation, run: `sudo snap logs wekan.wekan`\nFor a Docker installation, run: `sudo docker logs wekan-app`",
|
||||
"server-error-troubleshooting": "Por favor, envíe el error generado por el servidor.\nPara la instalación con snap, ejecute: `sudo snap logs wekan.wekan`\nPara la instalación con docker, ejecute: `sudo docker logs wekan-app`",
|
||||
"title-alphabetically": "Título (Alfabéticamente)",
|
||||
"created-at-newest-first": "Creación (Nuevos Primero)",
|
||||
"created-at-oldest-first": "Creación (Antiguos Primero)",
|
||||
"links-heading": "Enlaces",
|
||||
"hide-activities-of-all-boards": "Don't show the board activities on all boards",
|
||||
"now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden",
|
||||
"hide-activities-of-all-boards": "No mostrar las actividades del tablero en todos los tableros",
|
||||
"now-activities-of-all-boards-are-hidden": "Todas las actividades de todos los tableros están ahora ocultas",
|
||||
"move-swimlane": "Move Swimlane",
|
||||
"moveSwimlanePopup-title": "Move Swimlane",
|
||||
"custom-field-stringtemplate": "String Template",
|
||||
"custom-field-stringtemplate": "Plantilla de cadenas",
|
||||
"custom-field-stringtemplate-format": "Format (use %{value} as placeholder)",
|
||||
"custom-field-stringtemplate-separator": "Separator (use   or for a space)",
|
||||
"custom-field-stringtemplate-item-placeholder": "Pulsa intro para añadir más elementos",
|
||||
"creator": "Creador",
|
||||
"creator-on-minicard": "Creator on minicard",
|
||||
"creator-on-minicard": "Creador en minitarjeta",
|
||||
"filesReportTitle": "Informe sobre los archivos",
|
||||
"reports": "Informes",
|
||||
"rulesReportTitle": "Informe sobre las Reglas",
|
||||
"boardsReportTitle": "Informe sobre los Tableros",
|
||||
"cardsReportTitle": "Informe sobre las Tarjetas",
|
||||
"copy-swimlane": "Copy Swimlane",
|
||||
"copySwimlanePopup-title": "Copy Swimlane",
|
||||
"copySwimlanePopup-title": "Copiar carril",
|
||||
"display-card-creator": "Mostrar Creador de la Tarjeta",
|
||||
"wait-spinner": "Wait Spinner",
|
||||
"Bounce": "Bounce Wait Spinner",
|
||||
@@ -1150,7 +1150,7 @@
|
||||
"maximize-card": "Maximizar Tarjeta",
|
||||
"minimize-card": "Minimizar Tarjeta",
|
||||
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
|
||||
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it",
|
||||
"delete-team-warning-message": "No se puede eliminar este equipo, hay al menos un usuario que pertenece a este equipo.",
|
||||
"subject": "Asunto",
|
||||
"details": "Detalles",
|
||||
"carbon-copy": "Carbon Copy (Cc:)",
|
||||
@@ -1175,9 +1175,9 @@
|
||||
"remove-btn": "Eliminar",
|
||||
"filter-card-title-label": "Filtrar por el título de la tarjeta",
|
||||
"invite-people-success": "Invitation to register sent with success",
|
||||
"invite-people-error": "Error while sending invitation to register",
|
||||
"invite-people-error": "Error al enviar la invitación para registrarse",
|
||||
"can-invite-if-same-mailDomainName": "Email domain name",
|
||||
"to-create-teams-contact-admin": "To create teams, please contact the administrator.",
|
||||
"to-create-teams-contact-admin": "Para crear equipos, por favor contacte con el administrador.",
|
||||
"Node_heap_total_heap_size": "Node heap: total heap size",
|
||||
"Node_heap_total_heap_size_executable": "Node heap: total heap size executable",
|
||||
"Node_heap_total_physical_size": "Node heap: total physical size",
|
||||
@@ -1195,7 +1195,7 @@
|
||||
"Node_memory_usage_external": "Node memory usage: external",
|
||||
"add-organizations": "Añadir organizaciones",
|
||||
"add-organizations-label": "Added organizations are displayed below:",
|
||||
"remove-organization-from-board": "Are you sure you want to remove this organization from this board ?",
|
||||
"remove-organization-from-board": "¿Estás seguro de querer quitar esta organización del tablero?",
|
||||
"to-create-organizations-contact-admin": "Para crear organizaciones, póngase en contacto con el administrador.",
|
||||
"custom-legal-notice-link-url": "URL personalizada de la página de aviso legal",
|
||||
"acceptance_of_our_legalNotice": "Al continuar, usted acepta nuestra",
|
||||
@@ -1204,25 +1204,25 @@
|
||||
"checklistActionsPopup-title": "Acciones de la Lista de Tareas",
|
||||
"moveChecklist": "Mover Lista de Tareas",
|
||||
"moveChecklistPopup-title": "Mover Lista de Tareas",
|
||||
"newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items",
|
||||
"newLineNewItem": "One line of text = one checklist item",
|
||||
"newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order",
|
||||
"originOrder": "original order",
|
||||
"newlineBecomesNewChecklistItem": "Cada línea de texto se convierte en un nuevo elemento de la lista de verificación",
|
||||
"newLineNewItem": "Una línea de texto = un elemento de la lista de verificación",
|
||||
"newlineBecomesNewChecklistItemOriginOrder": "Cada línea de texto se convierte en un nuevo elemento de la lista de verificación, orden original",
|
||||
"originOrder": "orden original",
|
||||
"copyChecklist": "Copiar Lista de Tareas",
|
||||
"copyChecklistPopup-title": "Copiar Lista de Tareas",
|
||||
"card-show-lists": "Mostrar Listas de Tarjetas",
|
||||
"subtaskActionsPopup-title": "Acciones de la Subtarea",
|
||||
"attachmentActionsPopup-title": "Acciones de Adhesión",
|
||||
"attachment-move-storage-fs": "Mover el archivo adjunto al sistema de archivos",
|
||||
"attachment-move-storage-gridfs": "Move attachment to GridFS",
|
||||
"attachment-move-storage-gridfs": "Mover adjunto a GridFS",
|
||||
"attachment-move-storage-s3": "Move attachment to S3",
|
||||
"attachment-move": "Mover el Adjunto",
|
||||
"move-all-attachments-to-fs": "Mover todos los archivos adjuntos al sistema de archivos",
|
||||
"move-all-attachments-to-gridfs": "Move all attachments to GridFS",
|
||||
"move-all-attachments-to-gridfs": "Mover todos los adjuntos a GridFS",
|
||||
"move-all-attachments-to-s3": "Move all attachments to S3",
|
||||
"move-all-attachments-of-board-to-fs": "Move all attachments of board to filesystem",
|
||||
"move-all-attachments-of-board-to-fs": "Mover todos los adjuntos del tablero al sistema de archivos",
|
||||
"move-all-attachments-of-board-to-gridfs": "Move all attachments of board to GridFS",
|
||||
"move-all-attachments-of-board-to-s3": "Move all attachments of board to S3",
|
||||
"move-all-attachments-of-board-to-s3": "Mover todos los adjuntos del tablero a S3",
|
||||
"path": "Ruta",
|
||||
"version-name": "Nombre de la versión",
|
||||
"size": "Tamaño",
|
||||
@@ -1234,7 +1234,7 @@
|
||||
"remaining_time": "Tiempo restante",
|
||||
"speed": "Velocidad",
|
||||
"progress": "Progreso",
|
||||
"password-again": "Password (again)",
|
||||
"password-again": "Contraseña (repetir)",
|
||||
"if-you-already-have-an-account": "If you already have an account",
|
||||
"register": "Register",
|
||||
"forgot-password": "Forgot password",
|
||||
@@ -1246,27 +1246,27 @@
|
||||
"max-avatar-filesize": "Máximo tamaño de archivo de avatar en bytes:",
|
||||
"allowed-avatar-filetypes": "Tipos de archivo permitidos para el avatar:",
|
||||
"invalid-file": "Si el nombre de archivo no es válido, la carga o el cambio de nombre es cancelado.",
|
||||
"preview-pdf-not-supported": "Your device does not support previewing PDF. Try downloading instead.",
|
||||
"drag-board": "Drag board",
|
||||
"translation-number": "The number of custom translation strings is:",
|
||||
"delete-translation-confirm-popup": "Are you sure you want to delete this custom translation string? There is no undo.",
|
||||
"newTranslationPopup-title": "New custom translation string",
|
||||
"editTranslationPopup-title": "Edit custom translation string",
|
||||
"settingsTranslationPopup-title": "Delete this custom translation string?",
|
||||
"translation": "Translation",
|
||||
"preview-pdf-not-supported": "Tu dispositivo no permite previsualizar PDF. Intenta descargarlo.",
|
||||
"drag-board": "Arrastrar tablero",
|
||||
"translation-number": "El número de cadenas de traducción personalizadas es:",
|
||||
"delete-translation-confirm-popup": "¿Estás seguro de querer eliminar esta cadena de traducción personalizada? Esta acción no puede deshacerse.",
|
||||
"newTranslationPopup-title": "Nueva cadena de traducción personalizada",
|
||||
"editTranslationPopup-title": "Editar cadena de traducción personalizada",
|
||||
"settingsTranslationPopup-title": "¿Borrar esta cadena de traducción personalizada?",
|
||||
"translation": "Traducción",
|
||||
"text": "Texto",
|
||||
"translation-text": "Translation text",
|
||||
"show-subtasks-field": "Show subtasks field",
|
||||
"show-week-of-year": "Show week of year (ISO 8601)",
|
||||
"convert-to-markdown": "Convert to markdown",
|
||||
"import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments",
|
||||
"translation-text": "Texto de traducción",
|
||||
"show-subtasks-field": "Mostrar campo de subtareas",
|
||||
"show-week-of-year": "Mostrar semana del año (ISO 8601)",
|
||||
"convert-to-markdown": "Convertir en Markdown",
|
||||
"import-board-zip": "Añadir archivo .zip que contenga los archivos JSON del tablero y los nombres de las subcarpetas con adjuntos del tablero",
|
||||
"collapse": "Contraer",
|
||||
"uncollapse": "Uncollapse",
|
||||
"hideCheckedChecklistItems": "Hide checked checklist items",
|
||||
"hideAllChecklistItems": "Hide all checklist items",
|
||||
"support": "Support",
|
||||
"supportPopup-title": "Support",
|
||||
"accessibility-page-enabled": "Accessibility page enabled",
|
||||
"accessibility-title": "Accessibility topic",
|
||||
"accessibility-content": "Accessibility content"
|
||||
"uncollapse": "Expandir",
|
||||
"hideCheckedChecklistItems": "Ocultar elementos marcados de la lista de verificación",
|
||||
"hideAllChecklistItems": "Ocultar todos los elementos de la lista de verificación",
|
||||
"support": "Soporte",
|
||||
"supportPopup-title": "Soporte",
|
||||
"accessibility-page-enabled": "Página de accesibilidad habilitada",
|
||||
"accessibility-title": "Temas de accesibilidad",
|
||||
"accessibility-content": "Contenido de accesibilidad"
|
||||
}
|
||||
@@ -90,8 +90,8 @@
|
||||
"set-list-width": "Ezarri zabalerak",
|
||||
"set-list-width-value": "Ezarri gutxieneko eta gehieneko zabalerak (pixel)",
|
||||
"list-width-error-message": "Zerrenden zabalerak 100 baino handiagoak izan behar dira",
|
||||
"keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.",
|
||||
"keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.",
|
||||
"keyboard-shortcuts-enabled": "Laster-teklak gaituta. Egin klik desgaitzeko.",
|
||||
"keyboard-shortcuts-disabled": "Laster-teklak desgaituta. Egin klik gaitzeko.",
|
||||
"setSwimlaneHeightPopup-title": "Errailaren altuera ezarri",
|
||||
"set-swimlane-height": "Errailaren altuera ezarri",
|
||||
"set-swimlane-height-value": "Errailaren altuera (pixelak)",
|
||||
@@ -266,9 +266,9 @@
|
||||
"checklists": "Kontrol-zerrendak",
|
||||
"click-to-star": "Egin klik arbel honi izarra jartzeko",
|
||||
"click-to-unstar": "Egin klik arbel honi izarra kentzeko",
|
||||
"click-to-enable-auto-width": "Auto list width disabled. Click to enable.",
|
||||
"click-to-disable-auto-width": "Auto list width enabled. Click to disable.",
|
||||
"auto-list-width": "Auto list width",
|
||||
"click-to-enable-auto-width": "Zerrenda zabalera automatikoa desgaituta dago. Egin klik gaitzeko.",
|
||||
"click-to-disable-auto-width": "Zerrenda zabalera automatikoa gaituta dago. Egin klik desgaitzeko.",
|
||||
"auto-list-width": "Zerrenda zabalera automatikoa",
|
||||
"clipboard": "Kopiatu eta itsatsi edo arrastatu eta jaregin",
|
||||
"close": "Itxi",
|
||||
"close-board": "Itxi arbela",
|
||||
@@ -383,7 +383,7 @@
|
||||
"email-sent": "E-posta bidali da",
|
||||
"email-verifyEmail-subject": "Egiaztatu __siteName__ guneko zure e-posta helbidea.",
|
||||
"email-verifyEmail-text": "Kaixo __user__,\n\nZure e-posta kontua egiaztatzeko, egin klik beheko loturan.\n\n__url__\n\nEskerrik asko.",
|
||||
"enable-vertical-scrollbars": "Enable vertical scrollbars",
|
||||
"enable-vertical-scrollbars": "Gaitu korritze barra bertikalak",
|
||||
"enable-wip-limit": "WIP muga gaitu",
|
||||
"error-board-doesNotExist": "Arbel hau ez da existitzen",
|
||||
"error-board-notAdmin": "Arbel honetako kudeatzailea izan behar zara hori egin ahal izateko",
|
||||
@@ -1257,7 +1257,7 @@
|
||||
"text": "Testua",
|
||||
"translation-text": "itzulpenaren testua",
|
||||
"show-subtasks-field": "azpi-zereginen eremua bezala",
|
||||
"show-week-of-year": "Show week of year (ISO 8601)",
|
||||
"show-week-of-year": "Erakutsi rrteko aste zenbakia (ISO 8601)",
|
||||
"convert-to-markdown": "Bihurtu markdown-era",
|
||||
"import-board-zip": "Gehitu taula JSON fitxategiak dituen .zip fitxategia eta eranskinak dituzten taularen izenen azpidirektorioak",
|
||||
"collapse": "Tolestu",
|
||||
|
||||
@@ -86,12 +86,12 @@
|
||||
"add-card": "Ajouter une carte",
|
||||
"add-card-to-top-of-list": "Ajouter la carte en haut de la liste",
|
||||
"add-card-to-bottom-of-list": "Ajouter la carte en bas de la liste",
|
||||
"setListWidthPopup-title": "Set Widths",
|
||||
"set-list-width": "Set Widths",
|
||||
"set-list-width-value": "Set Min & Max Widths (pixels)",
|
||||
"list-width-error-message": "List widths must be integers greater than 100",
|
||||
"keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.",
|
||||
"keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.",
|
||||
"setListWidthPopup-title": "Définir les largeurs",
|
||||
"set-list-width": "Définir les largeurs",
|
||||
"set-list-width-value": "Définir les largeurs mini. & maxi. (pixels)",
|
||||
"list-width-error-message": "Les largeurs de liste doivent être des entiers supérieurs à 100",
|
||||
"keyboard-shortcuts-enabled": "Raccourcis clavier activés. Cliquer pour désactiver.",
|
||||
"keyboard-shortcuts-disabled": "Raccourcis clavier désactivés. Cliquer pour activer.",
|
||||
"setSwimlaneHeightPopup-title": "Définir la hauteur du couloir",
|
||||
"set-swimlane-height": "Définir la hauteur du couloir",
|
||||
"set-swimlane-height-value": "Hauteur du couloir (pixels)",
|
||||
@@ -107,7 +107,7 @@
|
||||
"add-label": "Ajouter une étiquette",
|
||||
"add-list": "Ajouter une liste",
|
||||
"add-after-list": "Ajouter après la liste",
|
||||
"add-members": "Assigner des participants",
|
||||
"add-members": "Ajouter des participants",
|
||||
"added": "Ajouté le",
|
||||
"addMemberPopup-title": "Participants",
|
||||
"memberPopup-title": "Préférence du participant",
|
||||
@@ -139,7 +139,7 @@
|
||||
"templates": "Modèles",
|
||||
"template-container": "Conteneur de modèles",
|
||||
"add-template-container": "Ajouter un conteneur de modèles",
|
||||
"assign-member": "Affecter un participant",
|
||||
"assign-member": "Attribuer à un participant",
|
||||
"attached": "joint",
|
||||
"attachment": "Pièce jointe",
|
||||
"attachment-delete-pop": "La suppression d'une pièce jointe est définitive. Cela est irréversible.",
|
||||
@@ -199,7 +199,7 @@
|
||||
"card-edit-labels": "Gérer les étiquettes",
|
||||
"card-edit-members": "Gérer les participants",
|
||||
"card-labels-title": "Modifier les étiquettes de la carte.",
|
||||
"card-members-title": "Assigner ou supprimer des participants à la carte.",
|
||||
"card-members-title": "Ajouter ou supprimer des participants du tableau à la carte.",
|
||||
"card-start": "Début",
|
||||
"card-start-on": "Commence le",
|
||||
"cardAttachmentsPopup-title": "Ajouter depuis",
|
||||
@@ -266,9 +266,9 @@
|
||||
"checklists": "Check-lists",
|
||||
"click-to-star": "Cliquez pour ajouter ce tableau aux favoris.",
|
||||
"click-to-unstar": "Cliquez pour retirer ce tableau des favoris.",
|
||||
"click-to-enable-auto-width": "Auto list width disabled. Click to enable.",
|
||||
"click-to-disable-auto-width": "Auto list width enabled. Click to disable.",
|
||||
"auto-list-width": "Auto list width",
|
||||
"click-to-enable-auto-width": "Largeur de liste auto. désactivée. Cliquer pour activer.",
|
||||
"click-to-disable-auto-width": "Largeur de liste auto. activée. Cliquer pour désactiver.",
|
||||
"auto-list-width": "Largeur de liste auto.",
|
||||
"clipboard": "Presse-papier ou glisser-déposer",
|
||||
"close": "Fermer",
|
||||
"close-board": "Fermer le tableau",
|
||||
@@ -310,7 +310,7 @@
|
||||
"no-comments": "Aucun commentaire",
|
||||
"no-comments-desc": "Ne peut pas voir les commentaires et les activités.",
|
||||
"worker": "Travailleur",
|
||||
"worker-desc": "Peut seulement déplacer des cartes, s'assigner à une carte et la commenter.",
|
||||
"worker-desc": "Peut seulement déplacer des cartes, s'attribuer une carte et la commenter.",
|
||||
"computer": "Ordinateur",
|
||||
"confirm-subtask-delete-popup": "Êtes-vous sûr de vouloir supprimer la sous-tâche ?",
|
||||
"confirm-checklist-delete-popup": "Êtes-vous sûr de vouloir supprimer la check-list ?",
|
||||
@@ -383,7 +383,7 @@
|
||||
"email-sent": "Courriel envoyé",
|
||||
"email-verifyEmail-subject": "Vérifier votre adresse de courriel sur __siteName__",
|
||||
"email-verifyEmail-text": "Bonjour __user__,\n\nPour vérifier votre compte courriel, il suffit de cliquer sur le lien ci-dessous.\n\n__url__\n\nMerci.",
|
||||
"enable-vertical-scrollbars": "Enable vertical scrollbars",
|
||||
"enable-vertical-scrollbars": "Activer les barres de défilement verticales",
|
||||
"enable-wip-limit": "Activer la limite WIP",
|
||||
"error-board-doesNotExist": "Ce tableau n'existe pas",
|
||||
"error-board-notAdmin": "Vous devez être administrateur de ce tableau pour faire cela",
|
||||
@@ -437,8 +437,8 @@
|
||||
"filter-no-label": "Aucune étiquette",
|
||||
"filter-member-label": "Filtrer par participant",
|
||||
"filter-no-member": "Aucun participant",
|
||||
"filter-assignee-label": "Filtrer par personne assignée",
|
||||
"filter-no-assignee": "Pas de personne assignée",
|
||||
"filter-assignee-label": "Filtrer par intervenant",
|
||||
"filter-no-assignee": "Pas d'intervenant",
|
||||
"filter-custom-fields-label": "Filtrer par champs personnalisés",
|
||||
"filter-no-custom-fields": "Pas de champs personnalisés",
|
||||
"filter-show-archive": "Montrer les listes archivées",
|
||||
@@ -471,9 +471,9 @@
|
||||
"import-board-instruction-about-errors": "Si une erreur survient en important le tableau, il se peut que l'import ait fonctionné, et que le tableau se trouve sur la page \"Tous les tableaux\".",
|
||||
"import-json-placeholder": "Collez ici les données JSON valides",
|
||||
"import-csv-placeholder": "Déposez ici vos données valides CSV/TSV",
|
||||
"import-map-members": "Assigner des participants",
|
||||
"import-members-map": "Le tableau que vous venez d'importer contient des participants. Veuillez assigner les participants que vous souhaitez importer à vos utilisateurs.",
|
||||
"import-members-map-note": "Note: les participants ne concordant pas seront assignés à l'utilisateur courant.",
|
||||
"import-map-members": "Faire correspondre les participants",
|
||||
"import-members-map": "Le tableau que vous venez d'importer contient des participants. Veuillez faire correspondre les participants que vous souhaitez importer à vos utilisateurs.",
|
||||
"import-members-map-note": "Note: les participants ne concordant pas seront attribués à l'utilisateur courant.",
|
||||
"import-show-user-mapping": "Contrôler l'assignation des participants",
|
||||
"import-user-select": "Sélectionnez l'utilisateur existant que vous voulez associer à ce participant",
|
||||
"importMapMembersAddPopup-title": "Sélectionner le participant",
|
||||
@@ -581,13 +581,13 @@
|
||||
"set-wip-limit-value": "Définit une limite maximale au nombre de cartes de cette liste",
|
||||
"setWipLimitPopup-title": "Définir la limite WIP",
|
||||
"shortcut-add-self": "S'ajouter à la carte courante",
|
||||
"shortcut-assign-self": "Affecter cette carte à vous-même",
|
||||
"shortcut-assign-self": "S'attribuer cette carte",
|
||||
"shortcut-autocomplete-emoji": "Auto-complétion des emoji",
|
||||
"shortcut-autocomplete-members": "Auto-complétion des participants",
|
||||
"shortcut-clear-filters": "Retirer tous les filtres",
|
||||
"shortcut-close-dialog": "Fermer la boîte de dialogue",
|
||||
"shortcut-filter-my-cards": "Filtrer mes cartes",
|
||||
"shortcut-filter-my-assigned-cards": "Filtrer mes cartes assignées",
|
||||
"shortcut-filter-my-assigned-cards": "Filtrer mes cartes attribuées",
|
||||
"shortcut-show-shortcuts": "Afficher cette liste de raccourcis",
|
||||
"shortcut-toggle-filterbar": "Afficher/Masquer la barre latérale des filtres",
|
||||
"shortcut-toggle-searchbar": "Afficher/Masquer la barre latérale de recherche",
|
||||
@@ -610,8 +610,8 @@
|
||||
"has-spenttime-cards": "A des cartes avec du temps passé",
|
||||
"time": "Temps",
|
||||
"title": "Titre",
|
||||
"toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).",
|
||||
"toggle-labels": "Bascule les étiquettes 1-9 pour les cartes. La sélection multiple ajoute les étiquettes 1-9",
|
||||
"toggle-assignees": "Changer les intervenants 1-9 sur une carte (par ordre d'ajout au tableau)",
|
||||
"toggle-labels": "Afficher/Masquer les étiquettes 1-9 sur les cartes. La sélection multiple ajoute les étiquettes 1-9",
|
||||
"remove-labels-multiselect": "La multi-sélection supprime les étiquettes 1-9",
|
||||
"tracking": "Suivi",
|
||||
"tracking-info": "Vous serez notifié de toute modification concernant les cartes pour lesquelles vous êtes impliqué en tant que créateur ou participant.",
|
||||
@@ -729,7 +729,7 @@
|
||||
"setCardActionsColorPopup-title": "Choisissez une couleur",
|
||||
"setSwimlaneColorPopup-title": "Choisissez une couleur",
|
||||
"setListColorPopup-title": "Choisissez une couleur",
|
||||
"assigned-by": "Assigné par",
|
||||
"assigned-by": "Attribué par",
|
||||
"requested-by": "Demandé par",
|
||||
"card-sorting-by-number": "Tri numérique des cartes",
|
||||
"board-delete-notice": "La suppression est définitive. Vous perdrez toutes les listes, cartes et actions associées à ce tableau.",
|
||||
@@ -928,8 +928,8 @@
|
||||
"accounts-allowUserDelete": "Autoriser les utilisateurs à supprimer leur compte",
|
||||
"hide-minicard-label-text": "Cacher l'étiquette de la mini-carte",
|
||||
"show-desktop-drag-handles": "Voir les poignées de déplacement du bureau",
|
||||
"assignee": "Personne assignée",
|
||||
"cardAssigneesPopup-title": "Personne assignée",
|
||||
"assignee": "Intervenant",
|
||||
"cardAssigneesPopup-title": "Intervenant",
|
||||
"addmore-detail": "Ajouter une description plus détaillée",
|
||||
"show-on-card": "Afficher sur la carte",
|
||||
"show-on-minicard": "Afficher sur la mini-carte",
|
||||
@@ -1023,7 +1023,7 @@
|
||||
"operator-user-abbrev": "@",
|
||||
"operator-member": "participant",
|
||||
"operator-member-abbrev": "m",
|
||||
"operator-assignee": "personne assignée",
|
||||
"operator-assignee": "intervenant",
|
||||
"operator-assignee-abbrev": "a",
|
||||
"operator-creator": "créateur",
|
||||
"operator-status": "statut",
|
||||
@@ -1054,7 +1054,7 @@
|
||||
"predicate-checklist": "check-list",
|
||||
"predicate-start": "début",
|
||||
"predicate-end": "fin",
|
||||
"predicate-assignee": "personne assignée",
|
||||
"predicate-assignee": "intervenant",
|
||||
"predicate-member": "participant",
|
||||
"predicate-public": "public",
|
||||
"predicate-private": "privé",
|
||||
@@ -1079,13 +1079,13 @@
|
||||
"globalSearch-instructions-operator-comment": "`__operator_comment__:<texte>` - cartes dont le commentaire contient *<texte>*.",
|
||||
"globalSearch-instructions-operator-label": "`__operator_label__:<couleur>` `__operator_label__:<nom>` - cartes qui ont une étiquette correspondant à *<couleur>* ou à *<nom>*.",
|
||||
"globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<nom|couleur>` - raccourci pour `__operator_label__:<couleur>` ou `__operator_label__:<nom>`",
|
||||
"globalSearch-instructions-operator-user": "`__operator_user__:<nom>` - cartes où l'utilisateur <nom> est *assigné* ou est un *participant*.",
|
||||
"globalSearch-instructions-operator-user": "`__operator_user__:<nom>` - cartes où l'utilisateur <nom> est *participant* ou *intervenant*.",
|
||||
"globalSearch-instructions-operator-at": "`__operator_user_abbrev__nom` - raccourci pour `__operator_user__:<nom>`",
|
||||
"globalSearch-instructions-operator-member": "`__operator_member__:<nom>` - cartes pour lesquelles l'utilisateur *<nom>* est *participant*",
|
||||
"globalSearch-instructions-operator-assignee": "`__operator_assignee__:<nom>` - cartes *assignées* à l'utilisateur *<nom>*",
|
||||
"globalSearch-instructions-operator-assignee": "`__operator_assignee__:<nom>` - cartes *attribuées* à l'utilisateur *<nom>*",
|
||||
"globalSearch-instructions-operator-creator": "`__operator_creator__:<utilisateur>` - cartes dont le créateur est *<utilisateur>*",
|
||||
"globalSearch-instructions-operator-org": "`__operator_org__:<display name|short name>` - cartes appartenant à un tableau assigné à l'organisation *<name>*",
|
||||
"globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - cartes appartenant à un tableau assigné à l'équipe *<name>*",
|
||||
"globalSearch-instructions-operator-org": "`__operator_org__:<display name|short name>` - cartes appartenant à un tableau attribué à l'organisation *<name>*",
|
||||
"globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - cartes appartenant à un tableau attribué à l'équipe *<name>*",
|
||||
"globalSearch-instructions-operator-due": "`__operator_due__:<n>` - cartes qui arrive à échéance dans moins de *<n>* jours à partir d'aujourd'hui.\n`__operator_due__:__predicate_overdue__` liste toutes les cartes ayant passé la date d'échéance.",
|
||||
"globalSearch-instructions-operator-created": "`__operator_created__:<n>` - cartes qui ont été créées il y a *<n>* jours ou moins",
|
||||
"globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - cartes qui ont été modifiées il y a *<n>* jours ou moins",
|
||||
@@ -1257,7 +1257,7 @@
|
||||
"text": "Texte",
|
||||
"translation-text": "Texte traduit",
|
||||
"show-subtasks-field": "Afficher le champ des sous-tâches",
|
||||
"show-week-of-year": "Show week of year (ISO 8601)",
|
||||
"show-week-of-year": "Afficher la semaine de l'année (ISO 8601)",
|
||||
"convert-to-markdown": "Convertir en markdown",
|
||||
"import-board-zip": "Ajouter un fichier .zip qui contient les fichiers JSON du tableau et les noms de sous-répertoires avec les pièces jointes",
|
||||
"collapse": "Réduire",
|
||||
@@ -1266,7 +1266,7 @@
|
||||
"hideAllChecklistItems": "Cacher tous les éléments de la check-list",
|
||||
"support": "Support",
|
||||
"supportPopup-title": "Support",
|
||||
"accessibility-page-enabled": "Accessibility page enabled",
|
||||
"accessibility-title": "Accessibility topic",
|
||||
"accessibility-content": "Accessibility content"
|
||||
"accessibility-page-enabled": "Page d'accessibilité activée",
|
||||
"accessibility-title": "Sujet d'accessibilité",
|
||||
"accessibility-content": "Contenu d'accessibilité"
|
||||
}
|
||||
@@ -610,7 +610,7 @@
|
||||
"has-spenttime-cards": "יש כרטיסי זמן שהושקע",
|
||||
"time": "זמן",
|
||||
"title": "כותרת",
|
||||
"toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).",
|
||||
"toggle-assignees": "הצגת/הסרת מוקצים 1-9 בכרטיסים (לפי סדר ההוספה ללוח).",
|
||||
"toggle-labels": "החלפת מצב תוויות 1-9 לכרטיס. בחירה מרוכזת מוסיפה תוויות 1-9",
|
||||
"remove-labels-multiselect": "בחירה מרוכזת מסירה תוויות 1-9",
|
||||
"tracking": "מעקב",
|
||||
@@ -1257,7 +1257,7 @@
|
||||
"text": "טקסט",
|
||||
"translation-text": "טקסט תרגום",
|
||||
"show-subtasks-field": "הצגת שדה תת־משימות",
|
||||
"show-week-of-year": "Show week of year (ISO 8601)",
|
||||
"show-week-of-year": "הצגת שבוע בשנה (ISO 8601)",
|
||||
"convert-to-markdown": "המרה ל־Markdown",
|
||||
"import-board-zip": "הוספת קובץ .zip עם קובצי JSON של לוח, ותת־תיקיות בשם הלוח עם קבצים מצורפים",
|
||||
"collapse": "צמצום",
|
||||
|
||||
@@ -1257,7 +1257,7 @@
|
||||
"text": "テキスト",
|
||||
"translation-text": "翻訳テキスト",
|
||||
"show-subtasks-field": "サブタスクフィールドを表示",
|
||||
"show-week-of-year": "Show week of year (ISO 8601)",
|
||||
"show-week-of-year": "年内の暦週番号(ISO 8601準拠)",
|
||||
"convert-to-markdown": "マークダウンに変換",
|
||||
"import-board-zip": "ボードJSONファイルを含む zip ファイルと、添付ファイルを含むボード名サブディレクトリを追加する",
|
||||
"collapse": "Collapse",
|
||||
|
||||
@@ -1257,7 +1257,7 @@
|
||||
"text": "テキスト",
|
||||
"translation-text": "翻訳テキスト",
|
||||
"show-subtasks-field": "サブタスクフィールドを表示",
|
||||
"show-week-of-year": "Show week of year (ISO 8601)",
|
||||
"show-week-of-year": "年内の暦週番号(ISO 8601準拠)",
|
||||
"convert-to-markdown": "マークダウンに変換",
|
||||
"import-board-zip": "ボードJSONファイルを含む zip ファイルと、添付ファイルを含むボード名サブディレクトリを追加する",
|
||||
"collapse": "折りたたむ",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"accept": "Accept",
|
||||
"accept": "Terima",
|
||||
"act-activity-notify": "Activity Notification",
|
||||
"act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
@@ -49,7 +49,7 @@
|
||||
"activity-archived": "%s moved to Archive",
|
||||
"activity-attached": "attached %s to %s",
|
||||
"activity-created": "created %s",
|
||||
"activity-changedListTitle": "renamed list to %s",
|
||||
"activity-changedListTitle": "Namakan semula senarai kepada %s",
|
||||
"activity-customfield-created": "created custom field %s",
|
||||
"activity-excluded": "excluded %s from %s",
|
||||
"activity-imported": "imported %s into %s from %s",
|
||||
@@ -86,9 +86,9 @@
|
||||
"add-card": "Add Card",
|
||||
"add-card-to-top-of-list": "Add Card to Top of List",
|
||||
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
|
||||
"setListWidthPopup-title": "Set Widths",
|
||||
"set-list-width": "Set Widths",
|
||||
"set-list-width-value": "Set Min & Max Widths (pixels)",
|
||||
"setListWidthPopup-title": "Tetapkan Lebar",
|
||||
"set-list-width": "Tetapkan Lebar",
|
||||
"set-list-width-value": "Tetapkan lebar minimum dan maksimum (piksel)",
|
||||
"list-width-error-message": "List widths must be integers greater than 100",
|
||||
"keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.",
|
||||
"keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.",
|
||||
@@ -105,20 +105,20 @@
|
||||
"convertChecklistItemToCardPopup-title": "Convert to Card",
|
||||
"add-cover": "Add cover image to minicard",
|
||||
"add-label": "Add Label",
|
||||
"add-list": "Add List",
|
||||
"add-list": "Tambah Senarai",
|
||||
"add-after-list": "Add After List",
|
||||
"add-members": "Add Members",
|
||||
"added": "Added",
|
||||
"addMemberPopup-title": "Members",
|
||||
"memberPopup-title": "Member Settings",
|
||||
"admin": "Admin",
|
||||
"add-members": "Tambah Ahli",
|
||||
"added": "Ditambah",
|
||||
"addMemberPopup-title": "Ahli-ahli",
|
||||
"memberPopup-title": "Tetapan Ahli",
|
||||
"admin": "Pentadbir",
|
||||
"admin-desc": "Can view and edit cards, remove members, and change settings for the board.",
|
||||
"admin-announcement": "Announcement",
|
||||
"admin-announcement": "Pengumuman",
|
||||
"admin-announcement-active": "Active System-Wide Announcement",
|
||||
"admin-announcement-title": "Announcement from Administrator",
|
||||
"all-boards": "All Boards",
|
||||
"and-n-other-card": "And __count__ other card",
|
||||
"and-n-other-card_plural": "And __count__ other cards",
|
||||
"admin-announcement-title": "Pengumuman dari Pentadbir",
|
||||
"all-boards": "Semua Papan",
|
||||
"and-n-other-card": "Dan __count__ kad lain",
|
||||
"and-n-other-card_plural": "Dan __count__ kad-kad lain",
|
||||
"apply": "Apply",
|
||||
"app-is-offline": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.",
|
||||
"app-try-reconnect": "Try to reconnect.",
|
||||
@@ -451,7 +451,7 @@
|
||||
"advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i",
|
||||
"fullname": "Full Name",
|
||||
"header-logo-title": "Go back to your boards page.",
|
||||
"show-activities": "Show Activities",
|
||||
"show-activities": "Tunjukkan Aktiviti",
|
||||
"headerBarCreateBoardPopup-title": "Create Board",
|
||||
"home": "Home",
|
||||
"import": "Import",
|
||||
@@ -972,20 +972,20 @@
|
||||
"ok": "OK",
|
||||
"organizations": "Organizations",
|
||||
"teams": "Teams",
|
||||
"displayName": "Display Name",
|
||||
"shortName": "Short Name",
|
||||
"displayName": "Nama Paparan",
|
||||
"shortName": "Nama Ringkas",
|
||||
"autoAddUsersWithDomainName": "Automatically add users with the domain name",
|
||||
"website": "Website",
|
||||
"website": "Laman Sesawang",
|
||||
"person": "Person",
|
||||
"my-cards": "My Cards",
|
||||
"card": "Card",
|
||||
"list": "List",
|
||||
"board": "Board",
|
||||
"my-cards": "Kad Saya",
|
||||
"card": "Kad",
|
||||
"list": "Senarai",
|
||||
"board": "Papan",
|
||||
"context-separator": "/",
|
||||
"myCardsViewChange-title": "My Cards View",
|
||||
"myCardsViewChangePopup-title": "My Cards View",
|
||||
"myCardsViewChange-choice-boards": "Boards",
|
||||
"myCardsViewChange-choice-table": "Table",
|
||||
"myCardsViewChange-choice-boards": "Papan",
|
||||
"myCardsViewChange-choice-table": "Jadual",
|
||||
"myCardsSortChange-title": "My Cards Sort",
|
||||
"myCardsSortChangePopup-title": "My Cards Sort",
|
||||
"myCardsSortChange-choice-board": "By Board",
|
||||
@@ -993,8 +993,8 @@
|
||||
"dueCards-title": "Due Cards",
|
||||
"dueCardsViewChange-title": "Due Cards View",
|
||||
"dueCardsViewChangePopup-title": "Due Cards View",
|
||||
"dueCardsViewChange-choice-me": "Me",
|
||||
"dueCardsViewChange-choice-all": "All Users",
|
||||
"dueCardsViewChange-choice-me": "Saya",
|
||||
"dueCardsViewChange-choice-all": "Semua Pengguna",
|
||||
"dueCardsViewChange-choice-all-description": "Shows all incomplete cards with a *Due* date from boards for which the user has permission.",
|
||||
"broken-cards": "Broken Cards",
|
||||
"board-title-not-found": "Board '%s' not found.",
|
||||
@@ -1004,27 +1004,27 @@
|
||||
"label-color-not-found": "Label color %s not found.",
|
||||
"user-username-not-found": "Username '%s' not found.",
|
||||
"comment-not-found": "Card with comment containing text '%s' not found.",
|
||||
"org-name-not-found": "Organization '%s' not found.",
|
||||
"team-name-not-found": "Team '%s' not found.",
|
||||
"globalSearch-title": "Search All Boards",
|
||||
"no-cards-found": "No Cards Found",
|
||||
"one-card-found": "One Card Found",
|
||||
"n-cards-found": "%s Cards Found",
|
||||
"org-name-not-found": "Organisasi '%s' tidak ditemui.",
|
||||
"team-name-not-found": "Pasukan '%s' tidak ditemui.",
|
||||
"globalSearch-title": "Cari di Semua Papan",
|
||||
"no-cards-found": "Tiada Kad Ditemui",
|
||||
"one-card-found": "Satu Kad Ditemui",
|
||||
"n-cards-found": "%s Kad Ditemui",
|
||||
"n-n-of-n-cards-found": "__start__-__end__ of __total__ Cards Found",
|
||||
"operator-board": "board",
|
||||
"operator-board-abbrev": "b",
|
||||
"operator-board": "papan",
|
||||
"operator-board-abbrev": "p",
|
||||
"operator-swimlane": "swimlane",
|
||||
"operator-swimlane-abbrev": "s",
|
||||
"operator-list": "list",
|
||||
"operator-list-abbrev": "l",
|
||||
"operator-list": "senarai",
|
||||
"operator-list-abbrev": "s",
|
||||
"operator-label": "label",
|
||||
"operator-label-abbrev": "#",
|
||||
"operator-user": "user",
|
||||
"operator-user": "pengguna",
|
||||
"operator-user-abbrev": "@",
|
||||
"operator-member": "member",
|
||||
"operator-member-abbrev": "m",
|
||||
"operator-assignee": "assignee",
|
||||
"operator-assignee-abbrev": "a",
|
||||
"operator-member": "ahli",
|
||||
"operator-member-abbrev": "a",
|
||||
"operator-assignee": "pemberi tugas",
|
||||
"operator-assignee-abbrev": "pt",
|
||||
"operator-creator": "creator",
|
||||
"operator-status": "status",
|
||||
"operator-due": "due",
|
||||
@@ -1033,31 +1033,31 @@
|
||||
"operator-sort": "sort",
|
||||
"operator-comment": "comment",
|
||||
"operator-has": "has",
|
||||
"operator-limit": "limit",
|
||||
"operator-limit": "had",
|
||||
"operator-debug": "debug",
|
||||
"operator-org": "org",
|
||||
"operator-team": "team",
|
||||
"predicate-archived": "archived",
|
||||
"predicate-open": "open",
|
||||
"predicate-ended": "ended",
|
||||
"predicate-all": "all",
|
||||
"predicate-all": "semua",
|
||||
"predicate-overdue": "overdue",
|
||||
"predicate-week": "week",
|
||||
"predicate-month": "month",
|
||||
"predicate-quarter": "quarter",
|
||||
"predicate-year": "year",
|
||||
"predicate-week": "minggu",
|
||||
"predicate-month": "bulan",
|
||||
"predicate-quarter": "suku",
|
||||
"predicate-year": "tahun",
|
||||
"predicate-due": "due",
|
||||
"predicate-modified": "modified",
|
||||
"predicate-created": "created",
|
||||
"predicate-attachment": "attachment",
|
||||
"predicate-description": "description",
|
||||
"predicate-description": "huraian",
|
||||
"predicate-checklist": "checklist",
|
||||
"predicate-start": "start",
|
||||
"predicate-end": "end",
|
||||
"predicate-start": "mula",
|
||||
"predicate-end": "akhir",
|
||||
"predicate-assignee": "assignee",
|
||||
"predicate-member": "member",
|
||||
"predicate-public": "public",
|
||||
"predicate-private": "private",
|
||||
"predicate-public": "umum",
|
||||
"predicate-private": "peribadi",
|
||||
"predicate-selector": "selector",
|
||||
"predicate-projection": "projection",
|
||||
"operator-unknown-error": "%s is not an operator",
|
||||
@@ -1067,10 +1067,10 @@
|
||||
"operator-has-invalid": "%s is not a valid existence check",
|
||||
"operator-limit-invalid": "%s is not a valid limit. Limit should be a positive integer.",
|
||||
"operator-debug-invalid": "%s is not a valid debug predicate",
|
||||
"next-page": "Next Page",
|
||||
"previous-page": "Previous Page",
|
||||
"heading-notes": "Notes",
|
||||
"globalSearch-instructions-heading": "Search Instructions",
|
||||
"next-page": "Halaman Seterusnya",
|
||||
"previous-page": "Halaman Sebelumnya",
|
||||
"heading-notes": "Nota-nota",
|
||||
"globalSearch-instructions-heading": "Cari arahan",
|
||||
"globalSearch-instructions-description": "Searches can include operators to refine the search. Operators are specified by writing the operator name and value separated by a colon. For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*. If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
|
||||
"globalSearch-instructions-operators": "Available operators:",
|
||||
"globalSearch-instructions-operator-board": "`__operator_board__:<title>` - cards in boards matching the specified *<title>*",
|
||||
@@ -1106,7 +1106,7 @@
|
||||
"globalSearch-instructions-notes-5": "By default archived cards are not searched.",
|
||||
"link-to-search": "Link to this search",
|
||||
"excel-font": "Arial",
|
||||
"number": "Number",
|
||||
"number": "Nombor",
|
||||
"label-colors": "Label Colors",
|
||||
"label-names": "Label Names",
|
||||
"archived-at": "archived at",
|
||||
@@ -1128,8 +1128,8 @@
|
||||
"custom-field-stringtemplate-format": "Format (use %{value} as placeholder)",
|
||||
"custom-field-stringtemplate-separator": "Separator (use   or for a space)",
|
||||
"custom-field-stringtemplate-item-placeholder": "Press enter to add more items",
|
||||
"creator": "Creator",
|
||||
"creator-on-minicard": "Creator on minicard",
|
||||
"creator": "Pencipta",
|
||||
"creator-on-minicard": "Pencipta pada kad mini",
|
||||
"filesReportTitle": "Files Report",
|
||||
"reports": "Reports",
|
||||
"rulesReportTitle": "Rules Report",
|
||||
@@ -1152,27 +1152,27 @@
|
||||
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
|
||||
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it",
|
||||
"subject": "Subject",
|
||||
"details": "Details",
|
||||
"details": "Maklumat",
|
||||
"carbon-copy": "Carbon Copy (Cc:)",
|
||||
"ticket": "Ticket",
|
||||
"tickets": "Tickets",
|
||||
"ticket-number": "Ticket Number",
|
||||
"open": "Open",
|
||||
"ticket": "Tiket",
|
||||
"tickets": "Tiket-tiket",
|
||||
"ticket-number": "Nombor Tiket",
|
||||
"open": "Dibuka",
|
||||
"pending": "Pending",
|
||||
"closed": "Closed",
|
||||
"resolved": "Resolved",
|
||||
"cancelled": "Cancelled",
|
||||
"history": "History",
|
||||
"closed": "Ditutup",
|
||||
"resolved": "Selesai",
|
||||
"cancelled": "Batalkan",
|
||||
"history": "Sejarah",
|
||||
"request": "Request",
|
||||
"requests": "Requests",
|
||||
"help-request": "Help Request",
|
||||
"editCardSortOrderPopup-title": "Change Sorting",
|
||||
"cardDetailsPopup-title": "Card Details",
|
||||
"add-teams": "Add teams",
|
||||
"cardDetailsPopup-title": "Maklumat Kad",
|
||||
"add-teams": "Tambahkan Kumpulan",
|
||||
"add-teams-label": "Added teams are displayed below:",
|
||||
"remove-team-from-table": "Are you sure you want to remove this team from the board ?",
|
||||
"confirm-btn": "Confirm",
|
||||
"remove-btn": "Remove",
|
||||
"confirm-btn": "Sahkan",
|
||||
"remove-btn": "Hapus",
|
||||
"filter-card-title-label": "Filter by card title",
|
||||
"invite-people-success": "Invitation to register sent with success",
|
||||
"invite-people-error": "Error while sending invitation to register",
|
||||
@@ -1200,14 +1200,14 @@
|
||||
"custom-legal-notice-link-url": "Custom legal notice page URL",
|
||||
"acceptance_of_our_legalNotice": "By continuing, you accept our",
|
||||
"legalNotice": "legal notice",
|
||||
"copied": "Copied!",
|
||||
"copied": "Disalin!",
|
||||
"checklistActionsPopup-title": "Checklist Actions",
|
||||
"moveChecklist": "Move Checklist",
|
||||
"moveChecklistPopup-title": "Move Checklist",
|
||||
"newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items",
|
||||
"newLineNewItem": "One line of text = one checklist item",
|
||||
"newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order",
|
||||
"originOrder": "original order",
|
||||
"originOrder": "aturan asal",
|
||||
"copyChecklist": "Copy Checklist",
|
||||
"copyChecklistPopup-title": "Copy Checklist",
|
||||
"card-show-lists": "Card Show Lists",
|
||||
@@ -1223,21 +1223,21 @@
|
||||
"move-all-attachments-of-board-to-fs": "Move all attachments of board to filesystem",
|
||||
"move-all-attachments-of-board-to-gridfs": "Move all attachments of board to GridFS",
|
||||
"move-all-attachments-of-board-to-s3": "Move all attachments of board to S3",
|
||||
"path": "Path",
|
||||
"version-name": "Version-Name",
|
||||
"size": "Size",
|
||||
"storage": "Storage",
|
||||
"action": "Action",
|
||||
"board-title": "Board Title",
|
||||
"attachmentRenamePopup-title": "Rename",
|
||||
"uploading": "Uploading",
|
||||
"remaining_time": "Remaining time",
|
||||
"path": "Haluan",
|
||||
"version-name": "Versi-Nama",
|
||||
"size": "Saiz",
|
||||
"storage": "Simpanan",
|
||||
"action": "Tindakan",
|
||||
"board-title": "Tajuk Papan",
|
||||
"attachmentRenamePopup-title": "Namakan Semula",
|
||||
"uploading": "Memuat Naik",
|
||||
"remaining_time": "Masa yang tersisa",
|
||||
"speed": "Speed",
|
||||
"progress": "Progress",
|
||||
"password-again": "Password (again)",
|
||||
"if-you-already-have-an-account": "If you already have an account",
|
||||
"register": "Register",
|
||||
"forgot-password": "Forgot password",
|
||||
"progress": "Perkembangan",
|
||||
"password-again": "Kata laluan (semula)",
|
||||
"if-you-already-have-an-account": "Jika anda sudah mempunyai akaun",
|
||||
"register": "Daftar",
|
||||
"forgot-password": "Lupa kata laluan",
|
||||
"minicardDetailsActionsPopup-title": "Card Details",
|
||||
"Mongo_sessions_count": "Mongo sessions count",
|
||||
"change-visibility": "Change Visibility",
|
||||
@@ -1253,9 +1253,9 @@
|
||||
"newTranslationPopup-title": "New custom translation string",
|
||||
"editTranslationPopup-title": "Edit custom translation string",
|
||||
"settingsTranslationPopup-title": "Delete this custom translation string?",
|
||||
"translation": "Translation",
|
||||
"text": "Text",
|
||||
"translation-text": "Translation text",
|
||||
"translation": "Terjemahan",
|
||||
"text": "Teks",
|
||||
"translation-text": "Teks terjemahan",
|
||||
"show-subtasks-field": "Show subtasks field",
|
||||
"show-week-of-year": "Show week of year (ISO 8601)",
|
||||
"convert-to-markdown": "Convert to markdown",
|
||||
|
||||
@@ -1257,7 +1257,7 @@
|
||||
"text": "Tekst",
|
||||
"translation-text": "Te vertalen tekst",
|
||||
"show-subtasks-field": "Toon subtakenveld",
|
||||
"show-week-of-year": "Show week of year (ISO 8601)",
|
||||
"show-week-of-year": "Toon weeknummers (ISO 8601)",
|
||||
"convert-to-markdown": "Converteer naar markdown",
|
||||
"import-board-zip": "Voeg .zip bestand toe met bord JSON bestanden, en bordnaam subdirectories met bijlagen.",
|
||||
"collapse": "Inklappen",
|
||||
|
||||
@@ -610,7 +610,7 @@
|
||||
"has-spenttime-cards": "Gastou cartões de tempo",
|
||||
"time": "Tempo",
|
||||
"title": "Título",
|
||||
"toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).",
|
||||
"toggle-assignees": "Alternar administradores 1-9 para cartão (Por ordem de adição no quadro)",
|
||||
"toggle-labels": "Alternar etiquetas 1-9 para cartão. Multi-seleção adiciona etiquetas 1-9",
|
||||
"remove-labels-multiselect": "Multi-seleção remove etiquetas 1-9",
|
||||
"tracking": "Rastreamento",
|
||||
@@ -1257,7 +1257,7 @@
|
||||
"text": "Texto",
|
||||
"translation-text": "Texto de tradução",
|
||||
"show-subtasks-field": "Mostrar campo subtarefas",
|
||||
"show-week-of-year": "Show week of year (ISO 8601)",
|
||||
"show-week-of-year": "Mostrar semana do ano (ISO8601)",
|
||||
"convert-to-markdown": "Converter para markdown",
|
||||
"import-board-zip": "Adicione o arquivo .zip que contém arquivos JSON do quadro e subdiretórios de nomes do quadro com anexos",
|
||||
"collapse": "Expandir",
|
||||
|
||||
@@ -610,7 +610,7 @@
|
||||
"has-spenttime-cards": "Har spenderat tidkort",
|
||||
"time": "Tid",
|
||||
"title": "Titel",
|
||||
"toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).",
|
||||
"toggle-assignees": "Växla tilldelade personer 1-9 för kort (I den ordning de lades till i tavlan).",
|
||||
"toggle-labels": "Toggle-etiketter 1-9 för kortet. Multi-Selection lägger till etiketter 1-9.",
|
||||
"remove-labels-multiselect": "Multi-Selection raderar etikett 1-9",
|
||||
"tracking": "Spåra",
|
||||
@@ -1257,7 +1257,7 @@
|
||||
"text": "Text",
|
||||
"translation-text": "Översatt text",
|
||||
"show-subtasks-field": "Visa underuppgiftsfält",
|
||||
"show-week-of-year": "Show week of year (ISO 8601)",
|
||||
"show-week-of-year": "Visa veckonummer (ISO 8601)",
|
||||
"convert-to-markdown": "Konvertera till markdown",
|
||||
"import-board-zip": "Lägga till .zip-filen till tavlans JSON filer, och tavla",
|
||||
"collapse": "Fäll ihop",
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
"activity-archived": "%s Arşive taşındı",
|
||||
"activity-attached": "%s içine %s ekledi",
|
||||
"activity-created": "%s öğesini oluşturdu",
|
||||
"activity-changedListTitle": "renamed list to %s",
|
||||
"activity-changedListTitle": "Liste adı %syapıldı",
|
||||
"activity-customfield-created": "%s adlı özel alan yaratıldı",
|
||||
"activity-excluded": "%s içinden %s çıkarttı",
|
||||
"activity-imported": "%s kaynağından %s öğesini %s öğesinin içine taşıdı",
|
||||
@@ -86,10 +86,10 @@
|
||||
"add-card": "Kart Ekle",
|
||||
"add-card-to-top-of-list": "Listenin Başına Kart Ekle",
|
||||
"add-card-to-bottom-of-list": "Listenin Sonuna Kart Ekle",
|
||||
"setListWidthPopup-title": "Set Widths",
|
||||
"set-list-width": "Set Widths",
|
||||
"set-list-width-value": "Set Min & Max Widths (pixels)",
|
||||
"list-width-error-message": "List widths must be integers greater than 100",
|
||||
"setListWidthPopup-title": "Genişlik Ata",
|
||||
"set-list-width": "Genişlik Ata",
|
||||
"set-list-width-value": "En Az & En Çok Genişlik (piksel) Ata ",
|
||||
"list-width-error-message": "Liste genişliği 100'den büyük sayısal bir değer olmalı",
|
||||
"keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.",
|
||||
"keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.",
|
||||
"setSwimlaneHeightPopup-title": "Kulvar Uzunluğunu Ayarla",
|
||||
@@ -300,7 +300,7 @@
|
||||
"color-white": "beyaz",
|
||||
"color-yellow": "sarı",
|
||||
"unset-color": "Seçilmemiş",
|
||||
"comments": "Comments",
|
||||
"comments": "Yorumlar",
|
||||
"comment": "Yorum",
|
||||
"comment-placeholder": "Yorum Yaz",
|
||||
"comment-only": "Sadece yorum",
|
||||
|
||||
@@ -383,7 +383,7 @@
|
||||
"email-sent": "Email відправлений",
|
||||
"email-verifyEmail-subject": "Підтвердіть вашу email адресу на __siteName__",
|
||||
"email-verifyEmail-text": "Привіт __user__,\n\nЩоб підтвердити ваш акаунт email, просто натисніть на посилання нижче.\n\n__url__\n\nДякуємо.",
|
||||
"enable-vertical-scrollbars": "Enable vertical scrollbars",
|
||||
"enable-vertical-scrollbars": "Увімкнути вертикальні скроллбари",
|
||||
"enable-wip-limit": "Увімкнути ліміт WIP",
|
||||
"error-board-doesNotExist": "Ця дошка не існує",
|
||||
"error-board-notAdmin": "Вам потрібно бути адміністратором цієї дошки, щоб зробити це",
|
||||
@@ -610,7 +610,7 @@
|
||||
"has-spenttime-cards": "Має картки з витраченим часом",
|
||||
"time": "Час",
|
||||
"title": "Назва",
|
||||
"toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).",
|
||||
"toggle-assignees": "Перемикання призначень 1-9 для картки (за порядком додавання на дошку)",
|
||||
"toggle-labels": "Перемкнути мітки 1-9 для картки. Мультивибір додає мітки 1-9",
|
||||
"remove-labels-multiselect": "Мультивибір видаляє мітки 1-9",
|
||||
"tracking": "Відстеження",
|
||||
@@ -1257,7 +1257,7 @@
|
||||
"text": "Текст",
|
||||
"translation-text": "Перекласти текст",
|
||||
"show-subtasks-field": "Показати поле підзавдань",
|
||||
"show-week-of-year": "Show week of year (ISO 8601)",
|
||||
"show-week-of-year": "Показати тиждень року (ISO 8601)",
|
||||
"convert-to-markdown": "Конвертувати в Markdown",
|
||||
"import-board-zip": "Додати файл .zip, який містить файли JSON дошки та підкаталоги з назвами дошок і вкладеннями",
|
||||
"collapse": "Згорнути",
|
||||
|
||||
@@ -86,12 +86,12 @@
|
||||
"add-card": "Додати картку",
|
||||
"add-card-to-top-of-list": "Додати картку на початок списку",
|
||||
"add-card-to-bottom-of-list": "Додати картку у кінець списку",
|
||||
"setListWidthPopup-title": "Set Widths",
|
||||
"set-list-width": "Set Widths",
|
||||
"set-list-width-value": "Set Min & Max Widths (pixels)",
|
||||
"list-width-error-message": "List widths must be integers greater than 100",
|
||||
"keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.",
|
||||
"keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.",
|
||||
"setListWidthPopup-title": "Встановити ширину",
|
||||
"set-list-width": "Встановити ширину",
|
||||
"set-list-width-value": "Встановити мін. та макс. ширину (у пікселях)",
|
||||
"list-width-error-message": "Ширина списку має бути цілим числом, більшим за 100",
|
||||
"keyboard-shortcuts-enabled": "Комбінації клавіш увімкнено. Натисніть, щоб вимкнути.",
|
||||
"keyboard-shortcuts-disabled": "Комбінації клавіш вимкнено. Натисніть, щоб увімкнути.",
|
||||
"setSwimlaneHeightPopup-title": "Встановити довжину доріжки",
|
||||
"set-swimlane-height": "Встановити довжину доріжки",
|
||||
"set-swimlane-height-value": "Висота доріжки (у пікселях)",
|
||||
@@ -266,9 +266,9 @@
|
||||
"checklists": "Контрольні списки",
|
||||
"click-to-star": "Натисніть, щоб відзначити цю дошку зірочкою.",
|
||||
"click-to-unstar": "Натисніть, щоб видалити зірочку з цієї дошки.",
|
||||
"click-to-enable-auto-width": "Auto list width disabled. Click to enable.",
|
||||
"click-to-disable-auto-width": "Auto list width enabled. Click to disable.",
|
||||
"auto-list-width": "Auto list width",
|
||||
"click-to-enable-auto-width": "Автоматична ширина списку вимкнена. Натисніть, щоб увімкнути.",
|
||||
"click-to-disable-auto-width": "Автоматична ширина списку увімкнена. Натисніть, щоб вимкнути.",
|
||||
"auto-list-width": "Автоматична ширина списку",
|
||||
"clipboard": "Буфер обміну або перетягнути і відпустити",
|
||||
"close": "Закрити",
|
||||
"close-board": "Закрити дошку",
|
||||
@@ -383,7 +383,7 @@
|
||||
"email-sent": "Email відправлений",
|
||||
"email-verifyEmail-subject": "Підтвердіть вашу email адресу на __siteName__",
|
||||
"email-verifyEmail-text": "Привіт __user__,\n\nЩоб підтвердити ваш акаунт email, просто натисніть на посилання нижче.\n\n__url__\n\nДякуємо.",
|
||||
"enable-vertical-scrollbars": "Enable vertical scrollbars",
|
||||
"enable-vertical-scrollbars": "Увімкнути вертикальні скроллбари",
|
||||
"enable-wip-limit": "Увімкнути ліміт WIP",
|
||||
"error-board-doesNotExist": "Ця дошка не існує",
|
||||
"error-board-notAdmin": "Вам потрібно бути адміністратором цієї дошки, щоб зробити це",
|
||||
@@ -610,7 +610,7 @@
|
||||
"has-spenttime-cards": "Має картки з витраченим часом",
|
||||
"time": "Час",
|
||||
"title": "Назва",
|
||||
"toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).",
|
||||
"toggle-assignees": "Перемикання призначень 1-9 для картки (за порядком додавання на дошку)",
|
||||
"toggle-labels": "Перемкнути мітки 1-9 для картки. Мультивибір додає мітки 1-9",
|
||||
"remove-labels-multiselect": "Мультивибір видаляє мітки 1-9",
|
||||
"tracking": "Відстеження",
|
||||
@@ -1257,7 +1257,7 @@
|
||||
"text": "Текст",
|
||||
"translation-text": "Перекласти текст",
|
||||
"show-subtasks-field": "Показати поле підзавдань",
|
||||
"show-week-of-year": "Show week of year (ISO 8601)",
|
||||
"show-week-of-year": "Показати тиждень року (ISO 8601)",
|
||||
"convert-to-markdown": "Конвертувати в Markdown",
|
||||
"import-board-zip": "Додати файл .zip, який містить файли JSON дошки та підкаталоги з назвами дошок і вкладеннями",
|
||||
"collapse": "Згорнути",
|
||||
@@ -1266,7 +1266,7 @@
|
||||
"hideAllChecklistItems": "Приховати всі пункти чек-листа",
|
||||
"support": "Підтримка",
|
||||
"supportPopup-title": "Підтримка",
|
||||
"accessibility-page-enabled": "Accessibility page enabled",
|
||||
"accessibility-title": "Accessibility topic",
|
||||
"accessibility-content": "Accessibility content"
|
||||
"accessibility-page-enabled": "Увімкнено сторінку доступності",
|
||||
"accessibility-title": "Тема доступності",
|
||||
"accessibility-content": "Доступність контенту"
|
||||
}
|
||||
@@ -610,7 +610,7 @@
|
||||
"has-spenttime-cards": "耗時卡",
|
||||
"time": "時間",
|
||||
"title": "標題",
|
||||
"toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).",
|
||||
"toggle-assignees": "切換卡片的代理人 1-9(按加入看板的順序)。",
|
||||
"toggle-labels": "切換卡片的標籤 1-9。多重選擇新增標籤 1-9",
|
||||
"remove-labels-multiselect": "多重選擇移除標籤 1-9",
|
||||
"tracking": "訂閱相關通知",
|
||||
@@ -1079,10 +1079,10 @@
|
||||
"globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - 卡片評論包含 *<text>*.",
|
||||
"globalSearch-instructions-operator-label": "`__operator_label__:<color>` `__operator_label__:<name>` - 卡片標籤要符合 *<color>* 或 *<name>",
|
||||
"globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name|color>` - 的簡寫 `__operator_label__:<color>` 或 `__operator_label__:<name>`",
|
||||
"globalSearch-instructions-operator-user": "`__operator_user__:<username>` - 卡片,其中 *<username>* 是 *成員* 或 *分配者*",
|
||||
"globalSearch-instructions-operator-user": "`__operator_user__:<username>` - 卡片,其中 *<username>* 是 *成員* 或 *代理人*",
|
||||
"globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - `user:<username>` 的簡寫",
|
||||
"globalSearch-instructions-operator-member": "`__operator_member__:<username>` - 卡片,其中 *<username>* 是i *成員*",
|
||||
"globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - 卡片,其中 *<username>* 是 *分配者*",
|
||||
"globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - 卡片,其中 *<username>* 是 *代理人*",
|
||||
"globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` - 卡片,其中 *<username>* 是卡片的建立者",
|
||||
"globalSearch-instructions-operator-org": "`__operator_org__:<display name|short name>` - 屬於分配給組織 *<name>* 看板的卡片",
|
||||
"globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - 屬於分配給團隊 *<name>* 看板的卡片",
|
||||
@@ -1257,7 +1257,7 @@
|
||||
"text": "文字",
|
||||
"translation-text": "翻譯文字",
|
||||
"show-subtasks-field": "顯示子工作項目欄位",
|
||||
"show-week-of-year": "Show week of year (ISO 8601)",
|
||||
"show-week-of-year": "顯示年度週數 (ISO 8601)",
|
||||
"convert-to-markdown": "轉換為 Markdown",
|
||||
"import-board-zip": "新增包含看板 JSON 檔案與帶有附件的看板名稱子目錄的 .zip 檔案",
|
||||
"collapse": "損毀",
|
||||
|
||||
+23
-13
@@ -531,20 +531,30 @@ Cards.helpers({
|
||||
mapCustomFieldsToBoard(boardId) {
|
||||
// Map custom fields to new board
|
||||
return this.customFields.map(cf => {
|
||||
const oldCf = ReactiveCache.getCustomField(cf._id);
|
||||
const newCf = ReactiveCache.getCustomField({
|
||||
boardIds: boardId,
|
||||
name: oldCf.name,
|
||||
type: oldCf.type,
|
||||
});
|
||||
if (newCf) {
|
||||
cf._id = newCf._id;
|
||||
} else if (!_.contains(oldCf.boardIds, boardId)) {
|
||||
oldCf.addBoard(boardId);
|
||||
}
|
||||
return cf;
|
||||
const oldCf = ReactiveCache.getCustomField(cf._id);
|
||||
|
||||
// Check if oldCf is undefined or null
|
||||
if (!oldCf) {
|
||||
//console.error(`Custom field with ID ${cf._id} not found.`);
|
||||
return cf; // Skip this field if oldCf is not found
|
||||
}
|
||||
|
||||
const newCf = ReactiveCache.getCustomField({
|
||||
boardIds: boardId,
|
||||
name: oldCf.name,
|
||||
type: oldCf.type,
|
||||
});
|
||||
|
||||
if (newCf) {
|
||||
cf._id = newCf._id;
|
||||
} else if (!_.contains(oldCf.boardIds, boardId)) {
|
||||
oldCf.addBoard(boardId);
|
||||
}
|
||||
|
||||
return cf;
|
||||
});
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
copy(boardId, swimlaneId, listId) {
|
||||
const oldId = this._id;
|
||||
|
||||
@@ -2,13 +2,38 @@ import { Meteor } from 'meteor/meteor';
|
||||
import Users from '../users';
|
||||
|
||||
function acceptedIpAddress(ipAddress) {
|
||||
const trustedIpAddress = process.env.WEKAN_METRICS_ACCEPTED_IP_ADDRESS;
|
||||
const trustedIpAddress = process.env.METRICS_ACCEPTED_IP_ADDRESS;
|
||||
return (
|
||||
trustedIpAddress !== undefined &&
|
||||
trustedIpAddress.split(',').includes(ipAddress)
|
||||
);
|
||||
}
|
||||
|
||||
function accessToken(req) {
|
||||
const valid_token = process.env.METRICS_ACCESS_TOKEN;
|
||||
let token;
|
||||
if (req.headers && req.headers.authorization) {
|
||||
var parts = req.headers.authorization.split(" ");
|
||||
|
||||
if (parts.length === 2) {
|
||||
var scheme = parts[0];
|
||||
var credentials = parts[1];
|
||||
|
||||
if (/^Bearer$/i.test(scheme)) {
|
||||
token = credentials;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!token && req.query && req.query.access_token) {
|
||||
token = req.query.access_token;
|
||||
}
|
||||
return (
|
||||
token !== undefined &&
|
||||
valid_token !== undefined &&
|
||||
token == valid_token
|
||||
);
|
||||
}
|
||||
|
||||
const getBoardTitleWithMostActivities = (dateWithXdaysAgo, nbLimit) => {
|
||||
return Promise.await(
|
||||
Activities.rawCollection()
|
||||
@@ -48,8 +73,8 @@ Meteor.startup(() => {
|
||||
// const ipAddress = req.socket.remoteAddress
|
||||
// }
|
||||
|
||||
// List of trusted ip adress will be found in environment variable "WEKAN_METRICS_ACCEPTED_IP_ADDRESS" (separeted with commas)
|
||||
if (acceptedIpAddress(ipAddress)) {
|
||||
// List of trusted ip adress will be found in environment variable "METRICS_ACCEPTED_IP_ADDRESS" (separeted with commas)
|
||||
if (acceptedIpAddress(ipAddress) || (accessToken(req))) {
|
||||
let metricsRes = '';
|
||||
let resCount = 0;
|
||||
//connected users
|
||||
@@ -170,12 +195,12 @@ Meteor.startup(() => {
|
||||
|
||||
metricsRes +=
|
||||
'# Top 10 boards with most activities dated 30 days ago\n';
|
||||
//Get top 10 table with most activities in current month
|
||||
//Get top 10 table with most activities in current month
|
||||
const boardTitleWithMostActivities = getBoardTitleWithMostActivities(
|
||||
dateWithXdaysAgo,
|
||||
xdays,
|
||||
);
|
||||
|
||||
|
||||
const boardWithMostActivities = boardTitleWithMostActivities.map(
|
||||
(board) => board.lookup[0].title,
|
||||
);
|
||||
@@ -185,7 +210,7 @@ Meteor.startup(() => {
|
||||
`wekan_top10BoardsWithMostActivities{n="${title}"} ${
|
||||
index + 1
|
||||
}` + '\n';
|
||||
});
|
||||
});
|
||||
|
||||
res.writeHead(200); // HTTP status
|
||||
res.end(metricsRes);
|
||||
|
||||
@@ -65,6 +65,8 @@ def get_req_body_elems(obj, elems):
|
||||
elif obj.type in ('LogicalExpression', 'BinaryExpression', 'AssignmentExpression'):
|
||||
get_req_body_elems(obj.left, elems)
|
||||
get_req_body_elems(obj.right, elems)
|
||||
elif obj.type == 'ChainExpression':
|
||||
get_req_body_elems(obj.expression, elems)
|
||||
elif obj.type in ('ReturnStatement', 'UnaryExpression'):
|
||||
if obj.argument is not None:
|
||||
get_req_body_elems(obj.argument, elems)
|
||||
|
||||
Generated
+80
-159
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"name": "wekan",
|
||||
"version": "v7.79.0",
|
||||
"version": "v7.88.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.25.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz",
|
||||
"integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==",
|
||||
"version": "7.26.10",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz",
|
||||
"integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.14.0"
|
||||
}
|
||||
@@ -108,6 +108,12 @@
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz",
|
||||
"integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ=="
|
||||
},
|
||||
"@types/trusted-types": {
|
||||
"version": "2.0.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
|
||||
"integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
|
||||
"optional": true
|
||||
},
|
||||
"@wekanteam/dragscroll": {
|
||||
"version": "git+https://github.com/wekan/dragscroll.git#6ea215c8cdbde9362ecba8ffb72ce9f9fde842d2",
|
||||
"from": "git+https://github.com/wekan/dragscroll.git"
|
||||
@@ -600,9 +606,12 @@
|
||||
}
|
||||
},
|
||||
"dompurify": {
|
||||
"version": "2.5.6",
|
||||
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz",
|
||||
"integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ=="
|
||||
"version": "3.2.4",
|
||||
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.4.tgz",
|
||||
"integrity": "sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==",
|
||||
"requires": {
|
||||
"@types/trusted-types": "^2.0.7"
|
||||
}
|
||||
},
|
||||
"domutils": {
|
||||
"version": "2.8.0",
|
||||
@@ -1373,16 +1382,15 @@
|
||||
"integrity": "sha512-SBbbYWvFYvsxHVL+q6ZB8lT3rp2LSvfALD2V52H+MGH2IgJsevy0VtXRkRG0EsUewwOaDTIKBn9DlD8HQ3GSwg=="
|
||||
},
|
||||
"meteor-node-stubs": {
|
||||
"version": "1.2.12",
|
||||
"resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-1.2.12.tgz",
|
||||
"integrity": "sha512-mzp3KI2aGNDhFlCVXPd0pfMr2z9A5vl1AqEgV13/z7AgKwcbd2X+ymE6tpSAMkrrQb40PU9PC2B59bCb6XkAaw==",
|
||||
"version": "git+https://github.com/wekan/meteor-node-stubs.git#4f2609bc4d9d700ff79424ad4ed8dbf1f06666cb",
|
||||
"from": "git+https://github.com/wekan/meteor-node-stubs.git",
|
||||
"requires": {
|
||||
"@meteorjs/crypto-browserify": "^3.12.1",
|
||||
"assert": "^2.1.0",
|
||||
"browserify-zlib": "^0.2.0",
|
||||
"buffer": "^5.7.1",
|
||||
"console-browserify": "^1.2.0",
|
||||
"constants-browserify": "^1.0.0",
|
||||
"crypto-browserify": "^3.12.0",
|
||||
"domain-browser": "^4.23.0",
|
||||
"elliptic": "^6.6.0",
|
||||
"events": "^3.3.0",
|
||||
@@ -1398,46 +1406,19 @@
|
||||
"string_decoder": "^1.3.0",
|
||||
"timers-browserify": "^2.0.12",
|
||||
"tty-browserify": "0.0.1",
|
||||
"url": "^0.11.4",
|
||||
"url": "^0.11.3",
|
||||
"util": "^0.12.5",
|
||||
"vm-browserify": "^1.1.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"@meteorjs/crypto-browserify": {
|
||||
"version": "3.12.1",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"browserify-cipher": "^1.0.1",
|
||||
"browserify-sign": "^4.2.3",
|
||||
"create-ecdh": "^4.0.4",
|
||||
"create-hash": "^1.2.0",
|
||||
"create-hmac": "^1.1.7",
|
||||
"diffie-hellman": "^5.0.3",
|
||||
"hash-base": "~3.0.4",
|
||||
"inherits": "^2.0.4",
|
||||
"pbkdf2": "^3.1.2",
|
||||
"public-encrypt": "^4.0.3",
|
||||
"randombytes": "^2.1.0",
|
||||
"randomfill": "^1.0.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"hash-base": {
|
||||
"version": "3.0.4",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"inherits": "^2.0.1",
|
||||
"safe-buffer": "^5.0.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"asn1.js": {
|
||||
"version": "4.10.1",
|
||||
"version": "5.4.1",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"bn.js": "^4.0.0",
|
||||
"inherits": "^2.0.1",
|
||||
"minimalistic-assert": "^1.0.0"
|
||||
"minimalistic-assert": "^1.0.0",
|
||||
"safer-buffer": "^2.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"bn.js": {
|
||||
@@ -1513,64 +1494,23 @@
|
||||
}
|
||||
},
|
||||
"browserify-sign": {
|
||||
"version": "4.2.3",
|
||||
"version": "4.2.2",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"bn.js": "^5.2.1",
|
||||
"browserify-rsa": "^4.1.0",
|
||||
"create-hash": "^1.2.0",
|
||||
"create-hmac": "^1.1.7",
|
||||
"elliptic": "^6.5.5",
|
||||
"hash-base": "~3.0",
|
||||
"elliptic": "^6.5.4",
|
||||
"inherits": "^2.0.4",
|
||||
"parse-asn1": "^5.1.7",
|
||||
"readable-stream": "^2.3.8",
|
||||
"parse-asn1": "^5.1.6",
|
||||
"readable-stream": "^3.6.2",
|
||||
"safe-buffer": "^5.2.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"bn.js": {
|
||||
"version": "5.2.1",
|
||||
"bundled": true
|
||||
},
|
||||
"hash-base": {
|
||||
"version": "3.0.4",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"inherits": "^2.0.1",
|
||||
"safe-buffer": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "2.3.8",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"core-util-is": "~1.0.0",
|
||||
"inherits": "~2.0.3",
|
||||
"isarray": "~1.0.0",
|
||||
"process-nextick-args": "~2.0.0",
|
||||
"safe-buffer": "~5.1.1",
|
||||
"string_decoder": "~1.1.1",
|
||||
"util-deprecate": "~1.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"bundled": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"string_decoder": {
|
||||
"version": "1.1.1",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"safe-buffer": "~5.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"bundled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -1598,14 +1538,12 @@
|
||||
"bundled": true
|
||||
},
|
||||
"call-bind": {
|
||||
"version": "1.0.7",
|
||||
"version": "1.0.5",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"es-define-property": "^1.0.0",
|
||||
"es-errors": "^1.3.0",
|
||||
"function-bind": "^1.1.2",
|
||||
"get-intrinsic": "^1.2.4",
|
||||
"set-function-length": "^1.2.1"
|
||||
"get-intrinsic": "^1.2.1",
|
||||
"set-function-length": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"cipher-base": {
|
||||
@@ -1624,10 +1562,6 @@
|
||||
"version": "1.0.0",
|
||||
"bundled": true
|
||||
},
|
||||
"core-util-is": {
|
||||
"version": "1.0.3",
|
||||
"bundled": true
|
||||
},
|
||||
"create-ecdh": {
|
||||
"version": "4.0.4",
|
||||
"bundled": true,
|
||||
@@ -1665,13 +1599,30 @@
|
||||
"sha.js": "^2.4.8"
|
||||
}
|
||||
},
|
||||
"define-data-property": {
|
||||
"version": "1.1.4",
|
||||
"crypto-browserify": {
|
||||
"version": "3.12.0",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"es-define-property": "^1.0.0",
|
||||
"es-errors": "^1.3.0",
|
||||
"gopd": "^1.0.1"
|
||||
"browserify-cipher": "^1.0.0",
|
||||
"browserify-sign": "^4.0.0",
|
||||
"create-ecdh": "^4.0.0",
|
||||
"create-hash": "^1.1.0",
|
||||
"create-hmac": "^1.1.0",
|
||||
"diffie-hellman": "^5.0.0",
|
||||
"inherits": "^2.0.1",
|
||||
"pbkdf2": "^3.0.3",
|
||||
"public-encrypt": "^4.0.0",
|
||||
"randombytes": "^2.0.0",
|
||||
"randomfill": "^1.0.3"
|
||||
}
|
||||
},
|
||||
"define-data-property": {
|
||||
"version": "1.1.1",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"get-intrinsic": "^1.2.1",
|
||||
"gopd": "^1.0.1",
|
||||
"has-property-descriptors": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"define-properties": {
|
||||
@@ -1711,7 +1662,7 @@
|
||||
"bundled": true
|
||||
},
|
||||
"elliptic": {
|
||||
"version": "6.6.0",
|
||||
"version": "6.6.1",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"bn.js": "^4.11.9",
|
||||
@@ -1724,22 +1675,11 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"bn.js": {
|
||||
"version": "4.12.0",
|
||||
"version": "4.12.1",
|
||||
"bundled": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"es-define-property": {
|
||||
"version": "1.0.0",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"get-intrinsic": "^1.2.4"
|
||||
}
|
||||
},
|
||||
"es-errors": {
|
||||
"version": "1.3.0",
|
||||
"bundled": true
|
||||
},
|
||||
"events": {
|
||||
"version": "3.3.0",
|
||||
"bundled": true
|
||||
@@ -1764,10 +1704,9 @@
|
||||
"bundled": true
|
||||
},
|
||||
"get-intrinsic": {
|
||||
"version": "1.2.4",
|
||||
"version": "1.2.2",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"es-errors": "^1.3.0",
|
||||
"function-bind": "^1.1.2",
|
||||
"has-proto": "^1.0.1",
|
||||
"has-symbols": "^1.0.3",
|
||||
@@ -1782,10 +1721,10 @@
|
||||
}
|
||||
},
|
||||
"has-property-descriptors": {
|
||||
"version": "1.0.2",
|
||||
"version": "1.0.1",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"es-define-property": "^1.0.0"
|
||||
"get-intrinsic": "^1.2.2"
|
||||
}
|
||||
},
|
||||
"has-proto": {
|
||||
@@ -1882,10 +1821,6 @@
|
||||
"which-typed-array": "^1.1.11"
|
||||
}
|
||||
},
|
||||
"isarray": {
|
||||
"version": "1.0.0",
|
||||
"bundled": true
|
||||
},
|
||||
"md5.js": {
|
||||
"version": "1.3.5",
|
||||
"bundled": true,
|
||||
@@ -1918,7 +1853,7 @@
|
||||
"bundled": true
|
||||
},
|
||||
"object-inspect": {
|
||||
"version": "1.13.2",
|
||||
"version": "1.13.1",
|
||||
"bundled": true
|
||||
},
|
||||
"object-is": {
|
||||
@@ -1952,25 +1887,14 @@
|
||||
"bundled": true
|
||||
},
|
||||
"parse-asn1": {
|
||||
"version": "5.1.7",
|
||||
"version": "5.1.6",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"asn1.js": "^4.10.1",
|
||||
"browserify-aes": "^1.2.0",
|
||||
"evp_bytestokey": "^1.0.3",
|
||||
"hash-base": "~3.0",
|
||||
"pbkdf2": "^3.1.2",
|
||||
"safe-buffer": "^5.2.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"hash-base": {
|
||||
"version": "3.0.4",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"inherits": "^2.0.1",
|
||||
"safe-buffer": "^5.0.1"
|
||||
}
|
||||
}
|
||||
"asn1.js": "^5.2.0",
|
||||
"browserify-aes": "^1.0.0",
|
||||
"evp_bytestokey": "^1.0.0",
|
||||
"pbkdf2": "^3.0.3",
|
||||
"safe-buffer": "^5.1.1"
|
||||
}
|
||||
},
|
||||
"path-browserify": {
|
||||
@@ -1992,10 +1916,6 @@
|
||||
"version": "0.11.10",
|
||||
"bundled": true
|
||||
},
|
||||
"process-nextick-args": {
|
||||
"version": "2.0.1",
|
||||
"bundled": true
|
||||
},
|
||||
"public-encrypt": {
|
||||
"version": "4.0.3",
|
||||
"bundled": true,
|
||||
@@ -2019,10 +1939,10 @@
|
||||
"bundled": true
|
||||
},
|
||||
"qs": {
|
||||
"version": "6.13.0",
|
||||
"version": "6.11.2",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"side-channel": "^1.0.6"
|
||||
"side-channel": "^1.0.4"
|
||||
}
|
||||
},
|
||||
"querystring-es3": {
|
||||
@@ -2065,16 +1985,18 @@
|
||||
"version": "5.2.1",
|
||||
"bundled": true
|
||||
},
|
||||
"safer-buffer": {
|
||||
"version": "2.1.2",
|
||||
"bundled": true
|
||||
},
|
||||
"set-function-length": {
|
||||
"version": "1.2.2",
|
||||
"version": "1.1.1",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"define-data-property": "^1.1.4",
|
||||
"es-errors": "^1.3.0",
|
||||
"function-bind": "^1.1.2",
|
||||
"get-intrinsic": "^1.2.4",
|
||||
"define-data-property": "^1.1.1",
|
||||
"get-intrinsic": "^1.2.1",
|
||||
"gopd": "^1.0.1",
|
||||
"has-property-descriptors": "^1.0.2"
|
||||
"has-property-descriptors": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"setimmediate": {
|
||||
@@ -2090,13 +2012,12 @@
|
||||
}
|
||||
},
|
||||
"side-channel": {
|
||||
"version": "1.0.6",
|
||||
"version": "1.0.4",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"call-bind": "^1.0.7",
|
||||
"es-errors": "^1.3.0",
|
||||
"get-intrinsic": "^1.2.4",
|
||||
"object-inspect": "^1.13.1"
|
||||
"call-bind": "^1.0.0",
|
||||
"get-intrinsic": "^1.0.2",
|
||||
"object-inspect": "^1.9.0"
|
||||
}
|
||||
},
|
||||
"stream-browserify": {
|
||||
@@ -2136,11 +2057,11 @@
|
||||
"bundled": true
|
||||
},
|
||||
"url": {
|
||||
"version": "0.11.4",
|
||||
"version": "0.11.3",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"punycode": "^1.4.1",
|
||||
"qs": "^6.12.3"
|
||||
"qs": "^6.11.2"
|
||||
}
|
||||
},
|
||||
"util": {
|
||||
|
||||
+4
-4
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "wekan",
|
||||
"version": "v7.79.0",
|
||||
"version": "v7.88.0",
|
||||
"description": "Open-Source kanban",
|
||||
"private": true,
|
||||
"repository": {
|
||||
@@ -17,7 +17,7 @@
|
||||
"sinon": "^13.0.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.25.0",
|
||||
"@babel/runtime": "^7.26.10",
|
||||
"@mapbox/node-pre-gyp": "^1.0.10",
|
||||
"@rwap/jquery-ui-touch-punch": "^1.0.11",
|
||||
"@wekanteam/dragscroll": "https://github.com/wekan/dragscroll.git",
|
||||
@@ -28,7 +28,7 @@
|
||||
"ajv": "^6.12.6",
|
||||
"bcryptjs": "^2.4.3",
|
||||
"bson": "^4.5.2",
|
||||
"dompurify": "^2.5.6",
|
||||
"dompurify": "^3.2.4",
|
||||
"es6-promise": "^4.2.4",
|
||||
"escape-string-regexp": "^5.0.0",
|
||||
"fibers": "^5.0.3",
|
||||
@@ -44,7 +44,7 @@
|
||||
"markdown-it-emoji": "^2.0.0",
|
||||
"markdown-it-mathjax3": "^4.3.2",
|
||||
"meteor-accounts-t9n": "^2.6.0",
|
||||
"meteor-node-stubs": "^1.2.12",
|
||||
"meteor-node-stubs": "https://github.com/wekan/meteor-node-stubs.git",
|
||||
"minio": "^7.1.3",
|
||||
"moment": "^2.29.4",
|
||||
"os": "^0.1.2",
|
||||
|
||||
+3229
-8254
File diff suppressed because it is too large.
Load diff
@@ -1,7 +1,7 @@
|
||||
swagger: '2.0'
|
||||
info:
|
||||
title: Wekan REST API
|
||||
version: v7.79
|
||||
version: v7.88
|
||||
description: |
|
||||
The REST API allows you to control and extend Wekan with ease.
|
||||
|
||||
|
||||
@@ -0,0 +1,524 @@
|
||||
{
|
||||
"name": "Wekan",
|
||||
"short_name": "Wekan",
|
||||
"icons": [
|
||||
{
|
||||
"src": "svg-etc/wekan-logo-512.svg",
|
||||
"sizes": "any",
|
||||
"type": "image/svg"
|
||||
},
|
||||
{
|
||||
"src": "android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "android-chrome-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "Square150x150Logo.scale-100.png",
|
||||
"sizes": "150x150",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "Square44x44Logo.scale-100.png",
|
||||
"sizes": "44x44",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "StoreLogo.scale-100.png",
|
||||
"sizes": "50x50",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "maskable_icon.png",
|
||||
"sizes": "474x474",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "monochrome-icon-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "monochrome"
|
||||
},
|
||||
{
|
||||
"src": "windows11/SmallTile.scale-100.png",
|
||||
"sizes": "71x71"
|
||||
},
|
||||
{
|
||||
"src": "windows11/SmallTile.scale-125.png",
|
||||
"sizes": "89x89"
|
||||
},
|
||||
{
|
||||
"src": "windows11/SmallTile.scale-150.png",
|
||||
"sizes": "107x107"
|
||||
},
|
||||
{
|
||||
"src": "windows11/SmallTile.scale-200.png",
|
||||
"sizes": "142x142"
|
||||
},
|
||||
{
|
||||
"src": "windows11/SmallTile.scale-400.png",
|
||||
"sizes": "284x284"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square150x150Logo.scale-100.png",
|
||||
"sizes": "150x150"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square150x150Logo.scale-125.png",
|
||||
"sizes": "188x188"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square150x150Logo.scale-150.png",
|
||||
"sizes": "225x225"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square150x150Logo.scale-200.png",
|
||||
"sizes": "300x300"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square150x150Logo.scale-400.png",
|
||||
"sizes": "600x600"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Wide310x150Logo.scale-100.png",
|
||||
"sizes": "310x150"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Wide310x150Logo.scale-125.png",
|
||||
"sizes": "388x188"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Wide310x150Logo.scale-150.png",
|
||||
"sizes": "465x225"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Wide310x150Logo.scale-200.png",
|
||||
"sizes": "620x300"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Wide310x150Logo.scale-400.png",
|
||||
"sizes": "1240x600"
|
||||
},
|
||||
{
|
||||
"src": "windows11/LargeTile.scale-100.png",
|
||||
"sizes": "310x310"
|
||||
},
|
||||
{
|
||||
"src": "windows11/LargeTile.scale-125.png",
|
||||
"sizes": "388x388"
|
||||
},
|
||||
{
|
||||
"src": "windows11/LargeTile.scale-150.png",
|
||||
"sizes": "465x465"
|
||||
},
|
||||
{
|
||||
"src": "windows11/LargeTile.scale-200.png",
|
||||
"sizes": "620x620"
|
||||
},
|
||||
{
|
||||
"src": "windows11/LargeTile.scale-400.png",
|
||||
"sizes": "1240x1240"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.scale-100.png",
|
||||
"sizes": "44x44"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.scale-125.png",
|
||||
"sizes": "55x55"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.scale-150.png",
|
||||
"sizes": "66x66"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.scale-200.png",
|
||||
"sizes": "88x88"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.scale-400.png",
|
||||
"sizes": "176x176"
|
||||
},
|
||||
{
|
||||
"src": "windows11/StoreLogo.scale-100.png",
|
||||
"sizes": "50x50"
|
||||
},
|
||||
{
|
||||
"src": "windows11/StoreLogo.scale-125.png",
|
||||
"sizes": "63x63"
|
||||
},
|
||||
{
|
||||
"src": "windows11/StoreLogo.scale-150.png",
|
||||
"sizes": "75x75"
|
||||
},
|
||||
{
|
||||
"src": "windows11/StoreLogo.scale-200.png",
|
||||
"sizes": "100x100"
|
||||
},
|
||||
{
|
||||
"src": "windows11/StoreLogo.scale-400.png",
|
||||
"sizes": "200x200"
|
||||
},
|
||||
{
|
||||
"src": "windows11/SplashScreen.scale-100.png",
|
||||
"sizes": "620x300"
|
||||
},
|
||||
{
|
||||
"src": "windows11/SplashScreen.scale-125.png",
|
||||
"sizes": "775x375"
|
||||
},
|
||||
{
|
||||
"src": "windows11/SplashScreen.scale-150.png",
|
||||
"sizes": "930x450"
|
||||
},
|
||||
{
|
||||
"src": "windows11/SplashScreen.scale-200.png",
|
||||
"sizes": "1240x600"
|
||||
},
|
||||
{
|
||||
"src": "windows11/SplashScreen.scale-400.png",
|
||||
"sizes": "2480x1200"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.targetsize-16.png",
|
||||
"sizes": "16x16"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.targetsize-20.png",
|
||||
"sizes": "20x20"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.targetsize-24.png",
|
||||
"sizes": "24x24"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.targetsize-30.png",
|
||||
"sizes": "30x30"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.targetsize-32.png",
|
||||
"sizes": "32x32"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.targetsize-36.png",
|
||||
"sizes": "36x36"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.targetsize-40.png",
|
||||
"sizes": "40x40"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.targetsize-44.png",
|
||||
"sizes": "44x44"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.targetsize-48.png",
|
||||
"sizes": "48x48"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.targetsize-60.png",
|
||||
"sizes": "60x60"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.targetsize-64.png",
|
||||
"sizes": "64x64"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.targetsize-72.png",
|
||||
"sizes": "72x72"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.targetsize-80.png",
|
||||
"sizes": "80x80"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.targetsize-96.png",
|
||||
"sizes": "96x96"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.targetsize-256.png",
|
||||
"sizes": "256x256"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-16.png",
|
||||
"sizes": "16x16"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-20.png",
|
||||
"sizes": "20x20"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-24.png",
|
||||
"sizes": "24x24"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-30.png",
|
||||
"sizes": "30x30"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-32.png",
|
||||
"sizes": "32x32"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-36.png",
|
||||
"sizes": "36x36"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-40.png",
|
||||
"sizes": "40x40"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-44.png",
|
||||
"sizes": "44x44"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-48.png",
|
||||
"sizes": "48x48"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-60.png",
|
||||
"sizes": "60x60"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-64.png",
|
||||
"sizes": "64x64"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-72.png",
|
||||
"sizes": "72x72"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-80.png",
|
||||
"sizes": "80x80"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-96.png",
|
||||
"sizes": "96x96"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-256.png",
|
||||
"sizes": "256x256"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-16.png",
|
||||
"sizes": "16x16"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-20.png",
|
||||
"sizes": "20x20"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-24.png",
|
||||
"sizes": "24x24"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png",
|
||||
"sizes": "30x30"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-32.png",
|
||||
"sizes": "32x32"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-36.png",
|
||||
"sizes": "36x36"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-40.png",
|
||||
"sizes": "40x40"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png",
|
||||
"sizes": "44x44"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png",
|
||||
"sizes": "48x48"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-60.png",
|
||||
"sizes": "60x60"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png",
|
||||
"sizes": "64x64"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-72.png",
|
||||
"sizes": "72x72"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png",
|
||||
"sizes": "80x80"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png",
|
||||
"sizes": "96x96"
|
||||
},
|
||||
{
|
||||
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png",
|
||||
"sizes": "256x256"
|
||||
},
|
||||
{
|
||||
"src": "android/android-launchericon-512-512.png",
|
||||
"sizes": "512x512"
|
||||
},
|
||||
{
|
||||
"src": "android/android-launchericon-192-192.png",
|
||||
"sizes": "192x192"
|
||||
},
|
||||
{
|
||||
"src": "android/android-launchericon-144-144.png",
|
||||
"sizes": "144x144"
|
||||
},
|
||||
{
|
||||
"src": "android/android-launchericon-96-96.png",
|
||||
"sizes": "96x96"
|
||||
},
|
||||
{
|
||||
"src": "android/android-launchericon-72-72.png",
|
||||
"sizes": "72x72"
|
||||
},
|
||||
{
|
||||
"src": "android/android-launchericon-48-48.png",
|
||||
"sizes": "48x48"
|
||||
},
|
||||
{
|
||||
"src": "ios/16.png",
|
||||
"sizes": "16x16"
|
||||
},
|
||||
{
|
||||
"src": "ios/20.png",
|
||||
"sizes": "20x20"
|
||||
},
|
||||
{
|
||||
"src": "ios/29.png",
|
||||
"sizes": "29x29"
|
||||
},
|
||||
{
|
||||
"src": "ios/32.png",
|
||||
"sizes": "32x32"
|
||||
},
|
||||
{
|
||||
"src": "ios/40.png",
|
||||
"sizes": "40x40"
|
||||
},
|
||||
{
|
||||
"src": "ios/50.png",
|
||||
"sizes": "50x50"
|
||||
},
|
||||
{
|
||||
"src": "ios/57.png",
|
||||
"sizes": "57x57"
|
||||
},
|
||||
{
|
||||
"src": "ios/58.png",
|
||||
"sizes": "58x58"
|
||||
},
|
||||
{
|
||||
"src": "ios/60.png",
|
||||
"sizes": "60x60"
|
||||
},
|
||||
{
|
||||
"src": "ios/64.png",
|
||||
"sizes": "64x64"
|
||||
},
|
||||
{
|
||||
"src": "ios/72.png",
|
||||
"sizes": "72x72"
|
||||
},
|
||||
{
|
||||
"src": "ios/76.png",
|
||||
"sizes": "76x76"
|
||||
},
|
||||
{
|
||||
"src": "ios/80.png",
|
||||
"sizes": "80x80"
|
||||
},
|
||||
{
|
||||
"src": "ios/87.png",
|
||||
"sizes": "87x87"
|
||||
},
|
||||
{
|
||||
"src": "ios/100.png",
|
||||
"sizes": "100x100"
|
||||
},
|
||||
{
|
||||
"src": "ios/114.png",
|
||||
"sizes": "114x114"
|
||||
},
|
||||
{
|
||||
"src": "ios/120.png",
|
||||
"sizes": "120x120"
|
||||
},
|
||||
{
|
||||
"src": "ios/128.png",
|
||||
"sizes": "128x128"
|
||||
},
|
||||
{
|
||||
"src": "ios/144.png",
|
||||
"sizes": "144x144"
|
||||
},
|
||||
{
|
||||
"src": "ios/152.png",
|
||||
"sizes": "152x152"
|
||||
},
|
||||
{
|
||||
"src": "ios/167.png",
|
||||
"sizes": "167x167"
|
||||
},
|
||||
{
|
||||
"src": "ios/180.png",
|
||||
"sizes": "180x180"
|
||||
},
|
||||
{
|
||||
"src": "ios/192.png",
|
||||
"sizes": "192x192"
|
||||
},
|
||||
{
|
||||
"src": "ios/256.png",
|
||||
"sizes": "256x256"
|
||||
},
|
||||
{
|
||||
"src": "ios/512.png",
|
||||
"sizes": "512x512"
|
||||
},
|
||||
{
|
||||
"src": "ios/1024.png",
|
||||
"sizes": "1024x1024"
|
||||
}
|
||||
],
|
||||
"screenshots": [
|
||||
{
|
||||
"src": "screenshot1.webp",
|
||||
"sizes": "1280x720",
|
||||
"type": "image/webp"
|
||||
},
|
||||
{
|
||||
"src": "screenshot2.webp",
|
||||
"sizes": "1280x720",
|
||||
"type": "image/webp"
|
||||
}
|
||||
],
|
||||
"theme_color": "#000000",
|
||||
"background_color": "#000000",
|
||||
"start_url": "sign-in",
|
||||
"display": "standalone",
|
||||
"orientation": "any",
|
||||
"categories": [
|
||||
"productivity"
|
||||
],
|
||||
"iarc_rating_id": "70d7c4a4-3e5a-4714-a7dc-fa006613ba96",
|
||||
"description": "Open Source kanban with MIT license",
|
||||
"dir": "auto",
|
||||
"scope": "https://boards.wekan.team",
|
||||
"prefer_related_applications": false,
|
||||
"display_override": [
|
||||
"standalone"
|
||||
]
|
||||
}
|
||||
@@ -513,10 +513,8 @@
|
||||
"categories": [
|
||||
"productivity"
|
||||
],
|
||||
"iarc_rating_id": "70d7c4a4-3e5a-4714-a7dc-fa006613ba96",
|
||||
"description": "Open Source kanban with MIT license",
|
||||
"dir": "auto",
|
||||
"scope": "https://boards.wekan.team",
|
||||
"prefer_related_applications": false,
|
||||
"display_override": [
|
||||
"standalone"
|
||||
|
||||
@@ -15,7 +15,8 @@ fi
|
||||
|
||||
if [ ! -d ~/python/esprima-python ]; then
|
||||
sudo apt-get -y install python3-pip python3-swagger-spec-validator python3-wheel python3-setuptools
|
||||
sudo npm install -g api2html
|
||||
# Install older version of api2html that works with Node.js 14
|
||||
sudo npm install -g api2html@0.3.0 || sudo npm install -g swagger-ui-watcher
|
||||
(mkdir -p ~/python && cd ~/python && git clone --depth 1 -b master https://github.com/Kronuz/esprima-python)
|
||||
(cd ~/python/esprima-python && git fetch origin pull/20/head:delete_fix && git checkout delete_fix && sudo python3 setup.py install --record files.txt)
|
||||
#(cd ~/python/esprima-python && git fetch origin pull/20/head:delete_fix && git checkout delete_fix && sudo pip3 install .)
|
||||
@@ -38,10 +39,11 @@ if [ ! -d public/api ]; then
|
||||
mkdir -p public/api
|
||||
fi
|
||||
|
||||
# 4) Generate docs.
|
||||
#python3 ./openapi/generate_openapi.py --release $(git describe --tags --abbrev=0) > ./public/api/wekan.yml
|
||||
# 4) Generate docs with api2html or fallback to swagger-ui-watcher
|
||||
python3 ./openapi/generate_openapi.py --release v$1 > ./public/api/wekan.yml
|
||||
api2html -c ./public/logo-header.png -o ./public/api/wekan.html ./public/api/wekan.yml
|
||||
if ! api2html -c ./public/logo-header.png -o ./public/api/wekan.html ./public/api/wekan.yml; then
|
||||
swagger-ui-watcher ./public/api/wekan.yml -p 8080
|
||||
fi
|
||||
|
||||
# Copy docs to bundle
|
||||
#cp -pR ./public/api ~/repos/wekan/.build/bundle/programs/web.browser/app/
|
||||
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
|
||||
appTitle = (defaultText = "Wekan"),
|
||||
# The name of the app as it is displayed to the user.
|
||||
|
||||
appVersion = 779,
|
||||
appVersion = 788,
|
||||
# Increment this for every release.
|
||||
|
||||
appMarketingVersion = (defaultText = "7.79.0~2025-01-02"),
|
||||
appMarketingVersion = (defaultText = "7.88.0~2025-04-25"),
|
||||
# Human-readable presentation of the app version.
|
||||
|
||||
minUpgradableAppVersion = 0,
|
||||
|
||||
+5
-5
@@ -1,5 +1,5 @@
|
||||
name: wekan
|
||||
version: '7.79'
|
||||
version: '7.88'
|
||||
base: core20
|
||||
summary: Open Source kanban
|
||||
description: |
|
||||
@@ -65,7 +65,7 @@ apps:
|
||||
|
||||
parts:
|
||||
mongodb:
|
||||
source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-6.0.19.tgz
|
||||
source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-6.0.22.tgz
|
||||
plugin: dump
|
||||
stage-packages:
|
||||
- libssl1.1
|
||||
@@ -170,9 +170,9 @@ parts:
|
||||
# Cleanup
|
||||
mkdir .build
|
||||
cd .build
|
||||
wget https://github.com/wekan/wekan/releases/download/v7.79/wekan-7.79-amd64.zip
|
||||
unzip wekan-7.79-amd64.zip
|
||||
rm wekan-7.79-amd64.zip
|
||||
wget https://github.com/wekan/wekan/releases/download/v7.88/wekan-7.88-amd64.zip
|
||||
unzip wekan-7.88-amd64.zip
|
||||
rm wekan-7.88-amd64.zip
|
||||
cd ..
|
||||
##cd .build/bundle
|
||||
##find . -type d -name '*-garbage*' | xargs rm -rf
|
||||
|
||||
@@ -459,6 +459,9 @@ REM # example : LDAP_BACKGROUND_SYNC=true
|
||||
REM SET LDAP_BACKGROUND_SYNC=false
|
||||
|
||||
REM # LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
|
||||
REM # The format must be as specified in:
|
||||
REM # https://bunkat.github.io/later/parsers.html#text
|
||||
REM SET LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hours
|
||||
REM # At which interval does the background task sync in milliseconds.
|
||||
REM # Leave this unset, so it uses default, and does not crash.
|
||||
REM # https://github.com/wekan/wekan/issues/2354#issuecomment-515305722
|
||||
|
||||
@@ -385,6 +385,9 @@
|
||||
#export LDAP_BACKGROUND_SYNC=false
|
||||
#
|
||||
# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
|
||||
# The format must be as specified in:
|
||||
# https://bunkat.github.io/later/parsers.html#text
|
||||
#export LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hours
|
||||
# At which interval does the background task sync in milliseconds.
|
||||
# Leave this unset, so it uses default, and does not crash.
|
||||
# https://github.com/wekan/wekan/issues/2354#issuecomment-515305722
|
||||
|
||||
Reference in new issue
Block a user