Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
451acb1c30 | ||
|
|
d7c663819c | ||
|
|
63d933a51d | ||
|
|
0afe8abdb8 | ||
|
|
413f91d0c8 | ||
|
|
fbb98e23c3 | ||
|
|
c4ea7457dc | ||
|
|
d0083d37da | ||
|
|
6f18a75e5c |
No files matched your search
@@ -1,3 +1,21 @@
|
||||
# v4.81 2021-01-18 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Global Search: Use translated color names](https://github.com/wekan/wekan/pull/3440).
|
||||
Thanks to jrsupplee and xet7.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Restore original working Dockerfile](https://github.com/wekan/wekan/commit/c4ea7457dcf1db200c87784c35b7d3c390e94d80).
|
||||
Thanks to gpalyu and xet7.
|
||||
- [Reverted Cards, custom fields are displayed in alphabetic order from Wekan v4.71
|
||||
https://github.com/wekan/wekan/pulls/3417 because it caused board not
|
||||
loading](https://github.com/wekan/wekan/commit/413f91d0c8f2d3f9df9bf036bb20551dba29bc2e).
|
||||
Thanks to olivierlambert and xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v4.80 2021-01-18 Wekan release
|
||||
|
||||
This release adds the following improvements:
|
||||
|
||||
+193
-45
@@ -1,46 +1,26 @@
|
||||
FROM quay.io/wekan/node:12.20.1-buster AS builder
|
||||
# This is our builder image. It will take the Wekan meteor code and
|
||||
# build it into a standalone NodeJS package
|
||||
|
||||
FROM quay.io/wekan/ubuntu:groovy-20201125.2
|
||||
LABEL maintainer="wekan"
|
||||
|
||||
# Allow Meteor to run inside the container as container runs as root
|
||||
ENV METEOR_ALLOW_SUPERUSER=true
|
||||
# 2020-12-03:
|
||||
# - Above Ubuntu base image copied from Docker Hub ubuntu:groovy-20201125.2
|
||||
# to Quay to avoid Docker Hub rate limits.
|
||||
|
||||
# Copy our source code into the container
|
||||
COPY . /usr/src/app
|
||||
# Set the environment variables (defaults where required)
|
||||
# DOES NOT WORK: paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
|
||||
# ENV BUILD_DEPS="paxctl"
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# Allow the user accounts package to work with more Meteor versions
|
||||
RUN sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' /usr/src/app/packages/meteor-useraccounts-core/package.js
|
||||
|
||||
# Move our current working directory
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
# Install our NPM packages
|
||||
RUN npm install
|
||||
|
||||
# Install Meteor
|
||||
RUN curl "https://install.meteor.com/" | sh
|
||||
|
||||
# Build our Meteor package into a standalone NodeJS package
|
||||
RUN meteor build --directory /build
|
||||
|
||||
# Include the fix for CFS
|
||||
RUN cp /usr/src/app/fix-download-unicode/cfs_access-point.txt /build/bundle/programs/server/packages/cfs_access-point.js
|
||||
|
||||
# Install server side NPM depedencies
|
||||
RUN cd /build/bundle/programs/server/ && \
|
||||
npm install
|
||||
|
||||
# Remove the legacy web browser bundle, so that Wekan works in Android Firefox, iOS Safari, etc.
|
||||
RUN rm -rf /build/bundle/programs/web.browser.legacy
|
||||
|
||||
|
||||
FROM quay.io/wekan/node:12.20.1-buster-slim as app
|
||||
# This is our runtime image. It takes the built NodeJS package and runs it using
|
||||
# the lighter Alpine NodeJS base image to keep image size down
|
||||
|
||||
ENV WITH_API=true \
|
||||
ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-essential git ca-certificates python3" \
|
||||
DEBUG=false \
|
||||
NODE_VERSION=v12.20.1 \
|
||||
METEOR_RELEASE=1.10.2 \
|
||||
USE_EDGE=false \
|
||||
METEOR_EDGE=1.5-beta.17 \
|
||||
NPM_VERSION=latest \
|
||||
FIBERS_VERSION=4.0.1 \
|
||||
ARCHITECTURE=linux-x64 \
|
||||
SRC_PATH=./ \
|
||||
WITH_API=true \
|
||||
ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=3 \
|
||||
ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD=60 \
|
||||
ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW=15 \
|
||||
@@ -158,14 +138,182 @@ ENV WITH_API=true \
|
||||
SAML_ATTRIBUTES="" \
|
||||
ORACLE_OIM_ENABLED=false
|
||||
|
||||
# Copy our built NodeJS package to this image
|
||||
COPY --from=builder /build/bundle /bundle
|
||||
# Copy the app to the image
|
||||
COPY ${SRC_PATH} /home/wekan/app
|
||||
|
||||
WORKDIR /bundle
|
||||
RUN \
|
||||
set -o xtrace && \
|
||||
# Add non-root user wekan
|
||||
useradd --user-group --system --home-dir /home/wekan wekan && \
|
||||
\
|
||||
# OS dependencies
|
||||
apt-get update -y && apt-get install -y --no-install-recommends ${BUILD_DEPS} && \
|
||||
#pip3 install -U pip setuptools wheel && \
|
||||
\
|
||||
# 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) && \
|
||||
\
|
||||
# Download nodejs
|
||||
wget https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
|
||||
wget https://nodejs.org/dist/${NODE_VERSION}/SHASUMS256.txt.asc && \
|
||||
#---------------------------------------------------------------------------------------------
|
||||
# Node Fibers 100% CPU usage issue:
|
||||
# https://github.com/wekan/wekan-mongodb/issues/2#issuecomment-381453161
|
||||
# https://github.com/meteor/meteor/issues/9796#issuecomment-381676326
|
||||
# https://github.com/sandstorm-io/sandstorm/blob/0f1fec013fe7208ed0fd97eb88b31b77e3c61f42/shell/server/00-startup.js#L99-L129
|
||||
# Also see beginning of wekan/server/authentication.js
|
||||
# import Fiber from "fibers";
|
||||
# Fiber.poolSize = 1e9;
|
||||
# OLD: Download node version 8.12.0 prerelease that has fix included, => Official 8.12.0 has been released
|
||||
# Description at https://releases.wekan.team/node.txt
|
||||
#wget https://releases.wekan.team/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
|
||||
#echo "1ed54adb8497ad8967075a0b5d03dd5d0a502be43d4a4d84e5af489c613d7795 node-v8.12.0-linux-x64.tar.gz" >> SHASUMS256.txt.asc && \
|
||||
\
|
||||
# Verify nodejs authenticity
|
||||
grep ${NODE_VERSION}-${ARCHITECTURE}.tar.gz SHASUMS256.txt.asc | shasum -a 256 -c - && \
|
||||
#export GNUPGHOME="$(mktemp -d)" && \
|
||||
#\
|
||||
# Try other key servers if ha.pool.sks-keyservers.net is unreachable
|
||||
# Code from https://github.com/chorrell/docker-node/commit/2b673e17547c34f17f24553db02beefbac98d23c
|
||||
# gpg keys listed at https://github.com/nodejs/node#release-team
|
||||
# and keys listed here from previous version of this Dockerfile
|
||||
#for key in \
|
||||
#9554F04D7259F04124DE6B476D5A82AC7E37093B \
|
||||
#94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
|
||||
#FD3A5288F042B6850C66B31F09FE44734EB7990E \
|
||||
#71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
|
||||
#DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
|
||||
#C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
|
||||
#B9AE9905FFD7803F25714661B63B535A4C206CA9 \
|
||||
#; do \
|
||||
#gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key" || \
|
||||
#gpg --keyserver pgp.mit.edu --recv-keys "$key" || \
|
||||
#gpg --keyserver keyserver.pgp.com --recv-keys "$key" ; \
|
||||
#done && \
|
||||
#gpg --verify SHASUMS256.txt.asc && \
|
||||
# Ignore socket files then delete files then delete directories
|
||||
#find "$GNUPGHOME" -type f | xargs rm -f && \
|
||||
#find "$GNUPGHOME" -type d | xargs rm -fR && \
|
||||
rm -f SHASUMS256.txt.asc && \
|
||||
\
|
||||
# Install Node
|
||||
tar xvzf node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
|
||||
rm node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
|
||||
mv node-${NODE_VERSION}-${ARCHITECTURE} /opt/nodejs && \
|
||||
ln -s /opt/nodejs/bin/node /usr/bin/node && \
|
||||
ln -s /opt/nodejs/bin/npm /usr/bin/npm && \
|
||||
mkdir -p /opt/nodejs/lib/node_modules/fibers/.node-gyp /root/.node-gyp/8.16.1 /home/wekan/.config && \
|
||||
chown wekan --recursive /home/wekan/.config && \
|
||||
\
|
||||
#DOES NOT WORK: paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
|
||||
#paxctl -mC `which node` && \
|
||||
\
|
||||
# Install Node dependencies. Python path for node-gyp.
|
||||
npm install -g npm@${NPM_VERSION} && \
|
||||
#npm config set python python2.7 && \
|
||||
#npm install -g node-gyp && \
|
||||
#npm install -g fibers@${FIBERS_VERSION} && \
|
||||
\
|
||||
# Change user to wekan and install meteor
|
||||
cd /home/wekan/ && \
|
||||
chown wekan --recursive /home/wekan && \
|
||||
#curl "https://install.meteor.com" -o /home/wekan/install_meteor.sh && \
|
||||
#curl "https://install.meteor.com/?release=${METEOR_RELEASE}" -o /home/wekan/install_meteor.sh && \
|
||||
# OLD: sed -i "s|RELEASE=.*|RELEASE=${METEOR_RELEASE}\"\"|g" ./install_meteor.sh && \
|
||||
# Install Meteor forcing its progress
|
||||
#sed -i 's/VERBOSITY="--silent"/VERBOSITY="--progress-bar"/' ./install_meteor.sh && \
|
||||
echo "Starting meteor ${METEOR_RELEASE} installation... \n" && \
|
||||
gosu wekan:wekan curl https://install.meteor.com/ | /bin/sh && \
|
||||
mv /root/.meteor /home/wekan/ && \
|
||||
chown wekan --recursive /home/wekan/.meteor && \
|
||||
\
|
||||
# Check if opting for a release candidate instead of major release
|
||||
#if [ "$USE_EDGE" = false ]; then \
|
||||
#gosu wekan:wekan sh /home/wekan/install_meteor.sh; \
|
||||
# gosu wekan:wekan curl https://install.meteor.com/ | sh; \
|
||||
#else \
|
||||
# gosu wekan:wekan git clone --recursive --depth 1 -b release/METEOR@${METEOR_EDGE} https://github.com/meteor/meteor.git /home/wekan/.meteor; \
|
||||
#fi; \
|
||||
#\
|
||||
# Get additional packages
|
||||
#mkdir -p /home/wekan/app/packages && \
|
||||
#chown wekan:wekan --recursive /home/wekan && \
|
||||
# REPOS BELOW ARE INCLUDED TO WEKAN REPO
|
||||
#cd /home/wekan/app/packages && \
|
||||
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/wekan/flow-router.git kadira-flow-router && \
|
||||
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/meteor-useraccounts/core.git meteor-useraccounts-core && \
|
||||
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-cas.git && \
|
||||
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/wekan/wekan-ldap.git && \
|
||||
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/wekan/wekan-scrollbar.git && \
|
||||
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-oidc.git && \
|
||||
#gosu wekan:wekan git clone --depth 1 -b master --recurse-submodules https://github.com/wekan/markdown.git && \
|
||||
#gosu wekan:wekan mv meteor-accounts-oidc/packages/switch_accounts-oidc wekan-accounts-oidc && \
|
||||
#gosu wekan:wekan mv meteor-accounts-oidc/packages/switch_oidc wekan-oidc && \
|
||||
#gosu wekan:wekan rm -rf meteor-accounts-oidc && \
|
||||
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; \
|
||||
\
|
||||
# extract the OpenAPI specification
|
||||
#npm install -g api2html@0.3.3 && \
|
||||
#mkdir -p /home/wekan/python && \
|
||||
#chown wekan --recursive /home/wekan/python && \
|
||||
#cd /home/wekan/python && \
|
||||
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/Kronuz/esprima-python && \
|
||||
#cd /home/wekan/python/esprima-python && \
|
||||
#python3 setup.py install --record files.txt && \
|
||||
#cd /home/wekan/app && \
|
||||
#mkdir -p /home/wekan/app/public/api && \
|
||||
#chown wekan --recursive /home/wekan/app && \
|
||||
#gosu wekan:wekan python3 ./openapi/generate_openapi.py --release $(git describe --tags --abbrev=0) > ./public/api/wekan.yml && \
|
||||
#gosu wekan:wekan /opt/nodejs/bin/api2html -c ./public/logo-header.png -o ./public/api/wekan.html ./public/api/wekan.yml; \
|
||||
# Build app
|
||||
cd /home/wekan/app && \
|
||||
mkdir -p /home/wekan/.npm && \
|
||||
chown wekan --recursive /home/wekan/.npm /home/wekan/.config /home/wekan/.meteor && \
|
||||
#gosu wekan:wekan /home/wekan/.meteor/meteor add standard-minifier-js && \
|
||||
gosu wekan:wekan npm install && \
|
||||
gosu wekan:wekan /home/wekan/.meteor/meteor build --directory /home/wekan/app_build && \
|
||||
cp /home/wekan/app/fix-download-unicode/cfs_access-point.txt /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
|
||||
#rm /home/wekan/app_build/bundle/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs && \
|
||||
chown wekan /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
|
||||
#Removed binary version of bcrypt because of security vulnerability that is not fixed yet.
|
||||
#https://github.com/wekan/wekan/commit/4b2010213907c61b0e0482ab55abb06f6a668eac
|
||||
#https://github.com/wekan/wekan/commit/7eeabf14be3c63fae2226e561ef8a0c1390c8d3c
|
||||
#cd /home/wekan/app_build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt && \
|
||||
#gosu wekan:wekan rm -rf node_modules/bcrypt && \
|
||||
#gosu wekan:wekan npm install bcrypt && \
|
||||
#
|
||||
# Delete phantomjs
|
||||
#cd /home/wekan/app_build/bundle && \
|
||||
#find . -name "*phantomjs*" | xargs rm -rf && \
|
||||
#
|
||||
cd /home/wekan/app_build/bundle/programs/server/ && \
|
||||
gosu wekan:wekan npm install && \
|
||||
#gosu wekan:wekan npm install bcrypt && \
|
||||
# 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 -y ${BUILD_DEPS} && \
|
||||
apt-get autoremove -y && \
|
||||
npm uninstall -g api2html &&\
|
||||
rm -R /var/lib/apt/lists/* && \
|
||||
rm -R /home/wekan/.meteor && \
|
||||
rm -R /home/wekan/app && \
|
||||
rm -R /home/wekan/app_build
|
||||
#cat /home/wekan/python/esprima-python/files.txt | xargs rm -R && \
|
||||
#rm -R /home/wekan/python
|
||||
#rm /home/wekan/install_meteor.sh
|
||||
|
||||
ENV PORT=8080
|
||||
EXPOSE $PORT
|
||||
USER wekan
|
||||
|
||||
USER node
|
||||
|
||||
CMD ["node", "/bundle/main.js"]
|
||||
CMD ["node", "/build/main.js"]
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
|
||||
appVersion: "v4.80.0"
|
||||
appVersion: "v4.81.0"
|
||||
files:
|
||||
userUploads:
|
||||
- README.md
|
||||
|
||||
@@ -144,6 +144,33 @@ BlazeComponent.extendComponent({
|
||||
const reText = /^(?<text>\S+)(\s+|$)/;
|
||||
const reQuotedText = /^(?<quote>["'])(?<text>\w+)\k<quote>(\s+|$)/;
|
||||
|
||||
const colorMap = {};
|
||||
colorMap[TAPi18n.__('color-black')] = 'black';
|
||||
colorMap[TAPi18n.__('color-blue')] = 'blue';
|
||||
colorMap[TAPi18n.__('color-crimson')] = 'crimson';
|
||||
colorMap[TAPi18n.__('color-darkgreen')] = 'darkgreen';
|
||||
colorMap[TAPi18n.__('color-gold')] = 'gold';
|
||||
colorMap[TAPi18n.__('color-gray')] = 'gray';
|
||||
colorMap[TAPi18n.__('color-green')] = 'green';
|
||||
colorMap[TAPi18n.__('color-indigo')] = 'indigo';
|
||||
colorMap[TAPi18n.__('color-lime')] = 'lime';
|
||||
colorMap[TAPi18n.__('color-magenta')] = 'magenta';
|
||||
colorMap[TAPi18n.__('color-mistyrose')] = 'mistyrose';
|
||||
colorMap[TAPi18n.__('color-navy')] = 'navy';
|
||||
colorMap[TAPi18n.__('color-orange')] = 'orange';
|
||||
colorMap[TAPi18n.__('color-paleturquoise')] = 'paleturquoise';
|
||||
colorMap[TAPi18n.__('color-peachpuff')] = 'peachpuff';
|
||||
colorMap[TAPi18n.__('color-pink')] = 'pink';
|
||||
colorMap[TAPi18n.__('color-plum')] = 'plum';
|
||||
colorMap[TAPi18n.__('color-purple')] = 'purple';
|
||||
colorMap[TAPi18n.__('color-red')] = 'red';
|
||||
colorMap[TAPi18n.__('color-saddlebrown')] = 'saddlebrown';
|
||||
colorMap[TAPi18n.__('color-silver')] = 'silver';
|
||||
colorMap[TAPi18n.__('color-sky')] = 'sky';
|
||||
colorMap[TAPi18n.__('color-slateblue')] = 'slateblue';
|
||||
colorMap[TAPi18n.__('color-white')] = 'white';
|
||||
colorMap[TAPi18n.__('color-yellow')] = 'yellow';
|
||||
|
||||
const operatorMap = {};
|
||||
operatorMap[TAPi18n.__('operator-board')] = 'boards';
|
||||
operatorMap[TAPi18n.__('operator-board-abbrev')] = 'boards';
|
||||
@@ -193,7 +220,13 @@ BlazeComponent.extendComponent({
|
||||
op = m.groups.abbrev;
|
||||
}
|
||||
if (op in operatorMap) {
|
||||
params[operatorMap[op]].push(m.groups.value);
|
||||
let value = m.groups.value;
|
||||
if (operatorMap[op] === 'labels') {
|
||||
if (value in colorMap) {
|
||||
value = colorMap[value];
|
||||
}
|
||||
}
|
||||
params[operatorMap[op]].push(value);
|
||||
} else {
|
||||
this.parsingErrors.push({
|
||||
tag: 'operator-unknown-error',
|
||||
|
||||
+8
-8
@@ -887,7 +887,7 @@
|
||||
"operator-user-abbrev": "@",
|
||||
"operator-member": "Mitglied",
|
||||
"operator-member-abbrev": "m",
|
||||
"operator-assignee": "Beauftragter",
|
||||
"operator-assignee": "Zugewiesener",
|
||||
"operator-assignee-abbrev": "a",
|
||||
"operator-is": "wird",
|
||||
"operator-unknown-error": "„%s“ ist kein Operator",
|
||||
@@ -900,14 +900,14 @@
|
||||
"globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:Titel` – Karten in Swimlanes, auf die der angegebene Titel passt",
|
||||
"globalSearch-instructions-operator-label": "`__operator_label__:Farbe` `__operator_label__:Name` – Karten, die ein Label haben, auf das die angegebene Farbe oder Name passt",
|
||||
"globalSearch-instructions-operator-hash": "`__operator_label_abbrev__Label` – Kurzform von `__operator_label__:Label`",
|
||||
"globalSearch-instructions-operator-user": "`__operator_user__:Nutzername` – Karten, für die der angegebene Nutzer ein *Mitglied* oder ein *Beauftragter* ist",
|
||||
"globalSearch-instructions-operator-user": "`__operator_user__:Nutzername` – Karten, für die der angegebene Nutzer ein *Mitglied* oder ein *Zugewiesener* ist",
|
||||
"globalSearch-instructions-operator-at": "`__operator_user_abbrev__Nutzername` – Kurzform von `user:Nutzername`",
|
||||
"globalSearch-instructions-operator-member": "`__operator_member__:Nutzername` – Karten, für die der angegebene Nutzer ein *Mitglied* ist",
|
||||
"globalSearch-instructions-operator-assignee": "`__operator_member__:Nutzername` – Karten, für die der angegebene Nutzer ein *Beauftragter* ist",
|
||||
"globalSearch-instructions-operator-assignee": "`__operator_member__:Nutzername` – Karten, für die der angegebene Nutzer ein *Zugewiesener* ist",
|
||||
"globalSearch-instructions-notes-1": "Mehrere Operatoren können angegeben werden.",
|
||||
"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.\n`__operator_list__:Available __operator_label__:red` returns only cards in the list *Available* with a *red* label.",
|
||||
"globalSearch-instructions-notes-4": "Text searches are case insensitive.",
|
||||
"globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
|
||||
"link-to-search": "Link to this search"
|
||||
"globalSearch-instructions-notes-2": "Gleichartige Operatoren werden Oder-verknüpft. Karten, für die eine Bedingung zutrifft, werden ausgegeben.\n`__operator_list__:Verfügbar __operator_list__:Blockiert` würde alle Karten ausgeben, die in irgendwelchen Listen mit den Namen *Verfügbar* oder *Blockiert* stehen.",
|
||||
"globalSearch-instructions-notes-3": "Verschiedenartige Operatoren werden Und-verknüpft. Karten, für die alle Bedingungen zutreffen, werden ausgegeben.\n`__operator_list__:Verfügbar __operator_label__:red` würde alle Karten ausgeben, die in der Liste *Verfügbar* mit einem *roten* Label stehen.",
|
||||
"globalSearch-instructions-notes-4": "Bei Suchen in Texten ist die Groß-/Kleinschreibung egal.",
|
||||
"globalSearch-instructions-notes-5": "Zur Zeit werden keine archivierten Karten gefunden.",
|
||||
"link-to-search": "Link auf diese Suche"
|
||||
}
|
||||
+1
-1
@@ -906,7 +906,7 @@
|
||||
"globalSearch-instructions-operator-assignee": "`__operator_assignee__:käyttäjänimi` - kortit joilla määritelty käyttäjä on *käsittelijä*",
|
||||
"globalSearch-instructions-notes-1": "On mahdollista määritellä useita operaattoreita.",
|
||||
"globalSearch-instructions-notes-2": "Samankaltaiset operaattorit on *TAI* yhteen. Kortit jotka täsmää mihin tahansa ehtoon palautetaan.\n`__operator_list__:Saatavilla __operator_list__:Blokattu` palauttaisi kortit jotka sisältää minkä tahansa listan nimeltä *Blokattu* tai *Saatavilla*.",
|
||||
"globalSearch-instructions-notes-3": "Erilaiset operaattorit ovat *JA* yhteen. Vain kortit jotka täsmää kaikkiin erilaisiin operaattoreihin palautetaan.\n`__operator_list__:Saatavilla __operator_label__:red` palauttaa vain kortit listassa *Saatavilla* jolla *red* punainen nimilappu.",
|
||||
"globalSearch-instructions-notes-3": "Erilaiset operaattorit ovat *JA* yhteen. Vain kortit jotka täsmää kaikkiin erilaisiin operaattoreihin palautetaan.\n`__operator_list__:Saatavilla __operator_label__:punainen` palauttaa vain kortit listassa *Saatavilla* jolla *punainen* nimilappu.",
|
||||
"globalSearch-instructions-notes-4": "Tekstihaut ovat kirjainkoosta riippumattomia.",
|
||||
"globalSearch-instructions-notes-5": "Arkistoiduista korteista ei etsitä.",
|
||||
"link-to-search": "Linkki tähän hakuun"
|
||||
|
||||
+5
-5
@@ -893,17 +893,17 @@
|
||||
"operator-unknown-error": "'%s' n'est pas un opérateur",
|
||||
"heading-notes": "Remarques",
|
||||
"globalSearch-instructions-heading": "Instructions de recherche",
|
||||
"globalSearch-instructions-description": "Les recherches peuvent inclure des opérateurs pour affiner le résultat. Les opérateurs sont précisés en écrivant l'opérateur suivi d'une valeur séparé par un deux-point. Par exemple, une spécification comme `liste:Bloqué` limiterait le résultat aux cartes qui contiennent une liste appelée *Bloqué*. Si la valeur contient des espaces ou des caractères spéciaux, elle doit être entourée d'apostrophes (par ex. `__operator_list__:\"À valider\"). ",
|
||||
"globalSearch-instructions-description": "Les recherches peuvent inclure des opérateurs pour affiner le résultat. Les opérateurs sont précisés en écrivant l'opérateur suivi d'une valeur séparé par un deux-point. Par exemple, une spécification comme `liste:Bloqué` limiterait le résultat aux cartes qui contiennent une liste appelée *Bloqué*. Si la valeur contient des espaces ou des caractères spéciaux, elle doit être entourée d'apostrophes (par ex. `__operator_list__:\"À valider\"`). ",
|
||||
"globalSearch-instructions-operators": "Opérateurs disponibles :",
|
||||
"globalSearch-instructions-operator-board": "`__operator_board__:titre` - cartes dont le tableau correspond à titre",
|
||||
"globalSearch-instructions-operator-list": "`__operator_list__:titre` - cartes ayant le titre spécifié",
|
||||
"globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:titre` - cartes dans les couloirs correspondant au titre spécifié",
|
||||
"globalSearch-instructions-operator-label": "`__operator_label__:couleur` `__operator_label__:nom` - cartes qui ont une étiquette correspondant à la couleur ou au nom donné.",
|
||||
"globalSearch-instructions-operator-hash": "`__operator_label_abbrev__label` - raccourci pour `__operator_label__:étiquette`",
|
||||
"globalSearch-instructions-operator-user": "`__operator_user__:utilisateur` - cartes *assignées* à cet utilisateur ou pour laquelle l'utilisateur spécifié est un *participant*.",
|
||||
"globalSearch-instructions-operator-at": "`__operator_user_abbrev__utilisateur` - raccourci pour `user:utilisateur`",
|
||||
"globalSearch-instructions-operator-member": "`__operator_member__:utilisateur` - cartes pour lesquelles l'utilisateur donné est *participant*",
|
||||
"globalSearch-instructions-operator-assignee": "`__operator_assignee__:utilisateur` - cartes *assignées* à l'utilisateur spécifié",
|
||||
"globalSearch-instructions-operator-user": "`__operator_user__:nom` - cartes *assignées* à cet utilisateur ou pour laquelle l'utilisateur spécifié est un *participant*.",
|
||||
"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 donné est *participant*",
|
||||
"globalSearch-instructions-operator-assignee": "`__operator_assignee__:nom` - cartes *assignées* à l'utilisateur spécifié",
|
||||
"globalSearch-instructions-notes-1": "Il est possible d'utiliser plusieurs opérateurs.",
|
||||
"globalSearch-instructions-notes-2": "Les opérateurs similaires deviennent *optionnels*. Les cartes correspondant à n'importe quelle condition sont retournées.\n`__operator_list__:Disponible __operator_list__:Bloquée` retournera les cartes contenues dans la liste *Disponible* ou dans la liste *Bloquée*.",
|
||||
"globalSearch-instructions-notes-3": "Les opérateurs différents sont *combinés*. Seules les cartes correspondant à tous les critères sont retournées.\n`__operator_list__:Disponible __operator_label__:rouge` ne retourne que les cartes dans la liste *Disponible* avec une étiquette *rouge*.",
|
||||
|
||||
+2
-4
@@ -689,11 +689,11 @@ Cards.helpers({
|
||||
|
||||
// match right definition to each field
|
||||
if (!this.customFields) return [];
|
||||
const ret = this.customFields.map(customField => {
|
||||
return this.customFields.map(customField => {
|
||||
const definition = definitions.find(definition => {
|
||||
return definition._id === customField._id;
|
||||
});
|
||||
if (definition === undefined) {
|
||||
if (!definition) {
|
||||
return {};
|
||||
}
|
||||
//search for "True Value" which is for DropDowns other then the Value (which is the id)
|
||||
@@ -715,8 +715,6 @@ Cards.helpers({
|
||||
definition,
|
||||
};
|
||||
});
|
||||
ret.sort((a, b) => a.definition.name.localeCompare(b.definition.name));
|
||||
return ret;
|
||||
},
|
||||
|
||||
colorClass() {
|
||||
|
||||
Generated
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "wekan",
|
||||
"version": "v4.80.0",
|
||||
"version": "v4.81.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "wekan",
|
||||
"version": "v4.80.0",
|
||||
"version": "v4.81.0",
|
||||
"description": "Open-Source kanban",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
||||
@@ -1524,7 +1524,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
|
||||
<ul class="toc-list-h1">
|
||||
|
||||
<li>
|
||||
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v4.80">Wekan REST API v4.80</a>
|
||||
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v4.81">Wekan REST API v4.81</a>
|
||||
|
||||
</li>
|
||||
|
||||
@@ -2037,7 +2037,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
|
||||
<div class="page-wrapper">
|
||||
<div class="dark-box"></div>
|
||||
<div class="content">
|
||||
<h1 id="wekan-rest-api">Wekan REST API v4.80</h1>
|
||||
<h1 id="wekan-rest-api">Wekan REST API v4.81</h1>
|
||||
<blockquote>
|
||||
<p>Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.</p>
|
||||
</blockquote>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
swagger: '2.0'
|
||||
info:
|
||||
title: Wekan REST API
|
||||
version: v4.80
|
||||
version: v4.81
|
||||
description: |
|
||||
The REST API allows you to control and extend Wekan with ease.
|
||||
|
||||
|
||||
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
|
||||
appTitle = (defaultText = "Wekan"),
|
||||
# The name of the app as it is displayed to the user.
|
||||
|
||||
appVersion = 480,
|
||||
appVersion = 481,
|
||||
# Increment this for every release.
|
||||
|
||||
appMarketingVersion = (defaultText = "4.80.0~2021-01-18"),
|
||||
appMarketingVersion = (defaultText = "4.81.0~2021-01-18"),
|
||||
# Human-readable presentation of the app version.
|
||||
|
||||
minUpgradableAppVersion = 0,
|
||||
|
||||
Reference in new issue
Block a user