Compare commits

...
9 Commits
Author SHA1 Message Date
Lauri Ojansivu 451acb1c30 v4.81 2021-01-18 22:05:26 +02:00
Lauri Ojansivu d7c663819c Update ChangeLog. 2021-01-18 22:00:38 +02:00
Lauri Ojansivu 63d933a51d Update translations. 2021-01-18 21:57:08 +02:00
Lauri Ojansivu 0afe8abdb8 Update ChangeLog. 2021-01-18 21:51:29 +02:00
Lauri Ojansivu 413f91d0c8 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.

Thanks to olivierlambert and xet7 !

Fixes #3367
2021-01-18 21:46:39 +02:00
Lauri Ojansivu fbb98e23c3 Update ChangeLog. 2021-01-18 19:20:27 +02:00
Lauri Ojansivu c4ea7457dc Restore original working Dockerfile.
Thanks to xet7 !

Related #2762,
fixes #3441
2021-01-18 19:14:52 +02:00
Lauri Ojansivu d0083d37da Merge pull request #3440 from jrsupplee/search
Global Search: translate color names
2021-01-18 17:28:04 +02:00
John R. Supplee 6f18a75e5c Global Search: translate color names 2021-01-18 17:17:44 +02:00
13 changed files with 269 additions and 72 deletions

No files matched your search

+18
View File
@@ -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
View File
@@ -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
View File
@@ -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
+34 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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() {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "wekan",
"version": "v4.80.0",
"version": "v4.81.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "wekan",
"version": "v4.80.0",
"version": "v4.81.0",
"description": "Open-Source kanban",
"private": true,
"scripts": {
+2 -2
View File
@@ -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 -1
View File
@@ -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.
+2 -2
View File
@@ -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,