summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.devcontainer/Dockerfile162
-rw-r--r--.devcontainer/build.sh12
-rw-r--r--.devcontainer/devcontainer.json17
-rw-r--r--.devcontainer/docker-compose.yml50
-rw-r--r--.gitattributes3
-rw-r--r--.github/FUNDING.yml3
-rw-r--r--.github/ISSUE_TEMPLATE.md8
-rw-r--r--.gitignore2
-rw-r--r--.meteor/packages9
-rw-r--r--.meteor/release2
-rw-r--r--.meteor/versions43
-rw-r--r--.travis.yml8
-rw-r--r--.tx/config2
-rw-r--r--.vscode/launch.json28
-rw-r--r--CHANGELOG.md440
-rw-r--r--Dockerfile6
-rw-r--r--README.md36
-rw-r--r--Stackerfile.yml2
-rw-r--r--client/components/activities/activities.js2
-rw-r--r--client/components/boards/boardBody.js141
-rw-r--r--client/components/boards/boardBody.styl78
-rw-r--r--client/components/boards/boardHeader.jade88
-rw-r--r--client/components/boards/boardHeader.js166
-rw-r--r--client/components/cards/attachments.js2
-rw-r--r--client/components/cards/cardDate.js16
-rw-r--r--client/components/cards/cardDetails.jade69
-rw-r--r--client/components/cards/cardDetails.js174
-rw-r--r--client/components/cards/cardDetails.styl90
-rw-r--r--client/components/cards/minicard.jade17
-rw-r--r--client/components/cards/minicard.js35
-rw-r--r--client/components/cards/minicard.styl16
-rw-r--r--client/components/lists/list.js66
-rw-r--r--client/components/lists/list.styl26
-rw-r--r--client/components/lists/listBody.js46
-rw-r--r--client/components/lists/listHeader.jade7
-rw-r--r--client/components/lists/listHeader.js63
-rwxr-xr-xclient/components/main/editor.js50
-rw-r--r--client/components/main/layouts.styl4
-rw-r--r--client/components/main/popup.styl6
-rw-r--r--client/components/settings/peopleBody.js4
-rw-r--r--client/components/settings/settingBody.jade8
-rw-r--r--client/components/settings/settingBody.js3
-rw-r--r--client/components/sidebar/sidebar.jade36
-rw-r--r--client/components/sidebar/sidebar.js112
-rw-r--r--client/components/sidebar/sidebarFilters.jade4
-rw-r--r--client/components/sidebar/sidebarFilters.js4
-rw-r--r--client/components/sidebar/sidebarSearches.jade4
-rw-r--r--client/components/sidebar/sidebarSearches.js5
-rw-r--r--client/components/swimlanes/swimlaneHeader.jade5
-rw-r--r--client/components/swimlanes/swimlaneHeader.js17
-rw-r--r--client/components/swimlanes/swimlanes.jade53
-rw-r--r--client/components/swimlanes/swimlanes.js138
-rw-r--r--client/components/swimlanes/swimlanes.styl78
-rw-r--r--client/components/users/userHeader.jade5
-rw-r--r--client/components/users/userHeader.js88
-rw-r--r--client/lib/datepicker.js13
-rw-r--r--client/lib/filter.js14
-rw-r--r--client/lib/textComplete.js1
-rw-r--r--client/lib/utils.js72
-rw-r--r--docker-compose.yml18
-rw-r--r--i18n/ar.i18n.json31
-rw-r--r--i18n/bg.i18n.json31
-rw-r--r--i18n/br.i18n.json31
-rw-r--r--i18n/ca.i18n.json31
-rw-r--r--i18n/cs.i18n.json39
-rw-r--r--i18n/da.i18n.json31
-rw-r--r--i18n/de.i18n.json31
-rw-r--r--i18n/el.i18n.json31
-rw-r--r--i18n/en-GB.i18n.json31
-rw-r--r--i18n/en.i18n.json31
-rw-r--r--i18n/eo.i18n.json31
-rw-r--r--i18n/es-AR.i18n.json31
-rw-r--r--i18n/es.i18n.json29
-rw-r--r--i18n/eu.i18n.json31
-rw-r--r--i18n/fa.i18n.json31
-rw-r--r--i18n/fi.i18n.json31
-rw-r--r--i18n/fr.i18n.json31
-rw-r--r--i18n/gl.i18n.json31
-rw-r--r--i18n/he.i18n.json31
-rw-r--r--i18n/hi.i18n.json31
-rw-r--r--i18n/hu.i18n.json31
-rw-r--r--i18n/hy.i18n.json31
-rw-r--r--i18n/id.i18n.json31
-rw-r--r--i18n/ig.i18n.json31
-rw-r--r--i18n/it.i18n.json61
-rw-r--r--i18n/ja.i18n.json59
-rw-r--r--i18n/ka.i18n.json31
-rw-r--r--i18n/km.i18n.json31
-rw-r--r--i18n/ko.i18n.json37
-rw-r--r--i18n/lv.i18n.json31
-rw-r--r--i18n/mk.i18n.json31
-rw-r--r--i18n/mn.i18n.json53
-rw-r--r--i18n/nb.i18n.json157
-rw-r--r--i18n/nl.i18n.json813
-rw-r--r--i18n/oc.i18n.json37
-rw-r--r--i18n/pl.i18n.json31
-rw-r--r--i18n/pt-BR.i18n.json31
-rw-r--r--i18n/pt.i18n.json31
-rw-r--r--i18n/ro.i18n.json31
-rw-r--r--i18n/ru.i18n.json37
-rw-r--r--i18n/sl.i18n.json755
-rw-r--r--i18n/sr.i18n.json31
-rw-r--r--i18n/sv.i18n.json41
-rw-r--r--i18n/sw.i18n.json31
-rw-r--r--i18n/ta.i18n.json31
-rw-r--r--i18n/th.i18n.json31
-rw-r--r--i18n/tr.i18n.json41
-rw-r--r--i18n/uk.i18n.json43
-rw-r--r--i18n/vi.i18n.json31
-rw-r--r--i18n/zh-CN.i18n.json39
-rw-r--r--i18n/zh-HK.i18n.json31
-rw-r--r--i18n/zh-TW.i18n.json607
-rw-r--r--models/accountSettings.js2
-rw-r--r--models/actions.js10
-rw-r--r--models/activities.js70
-rw-r--r--models/announcements.js2
-rw-r--r--models/boards.js30
-rw-r--r--models/cardComments.js2
-rw-r--r--models/cards.js230
-rw-r--r--models/checklistItems.js2
-rw-r--r--models/checklists.js15
-rw-r--r--models/customFields.js2
-rw-r--r--models/export.js17
-rw-r--r--models/integrations.js24
-rw-r--r--models/invitationCodes.js2
-rw-r--r--models/lists.js28
-rw-r--r--models/org.js2
-rw-r--r--models/orgUser.js2
-rw-r--r--models/rules.js2
-rw-r--r--models/settings.js2
-rw-r--r--models/swimlanes.js21
-rw-r--r--models/triggers.js10
-rw-r--r--models/unsavedEdits.js2
-rw-r--r--models/users.js85
-rw-r--r--openapi/generate_openapi.py184
-rw-r--r--package-lock.json5184
-rw-r--r--package.json8
-rw-r--r--packages/wekan-scrollbar/jquery.mCustomScrollbar.js2
-rw-r--r--public/api/wekan.html98
-rw-r--r--public/api/wekan.yml48
-rw-r--r--rebuild-wekan.bat6
-rwxr-xr-xrebuild-wekan.sh8
-rwxr-xr-xreleases/rebuild-docs.sh2
-rwxr-xr-xreleases/rebuild-wekan.sh2
-rwxr-xr-xreleases/translations/pull-translations.sh3
-rwxr-xr-xreleases/virtualbox/rebuild-wekan.sh111
-rwxr-xr-xreleases/virtualbox/start-wekan.sh11
-rw-r--r--sandstorm-pkgdef.capnp5
-rw-r--r--server/migrations.js122
-rw-r--r--server/notifications/email.js9
-rw-r--r--server/notifications/outgoing.js141
-rw-r--r--server/publications/boards.js4
-rw-r--r--server/publications/people.js34
-rw-r--r--server/publications/settings.js6
-rwxr-xr-xsnap-src/bin/config6
-rwxr-xr-xsnap-src/bin/wekan-help14
-rw-r--r--snapcraft.yaml6
-rwxr-xr-xstacksmith/user-scripts/build.sh2
-rwxr-xr-xstart-wekan.bat15
-rwxr-xr-xstart-wekan.sh18
-rw-r--r--torodb-postgresql/docker-compose.yml60
161 files changed, 11558 insertions, 1754 deletions
diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
new file mode 100644
index 00000000..c2be3595
--- /dev/null
+++ b/.devcontainer/Dockerfile
@@ -0,0 +1,162 @@
+FROM ubuntu:disco
+LABEL maintainer="sgr"
+
+ENV BUILD_DEPS="gnupg gosu bsdtar wget curl bzip2 g++ build-essential python git ca-certificates iproute2"
+ENV DEBIAN_FRONTEND=noninteractive
+
+ENV \
+ DEBUG=false \
+ NODE_VERSION=8.16.2 \
+ METEOR_RELEASE=1.8.1 \
+ 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 \
+ ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE=3 \
+ ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60 \
+ ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15 \
+ RICHER_CARD_COMMENT_EDITOR=true \
+ MAX_IMAGE_PIXEL="" \
+ IMAGE_COMPRESS_RATIO="" \
+ BIGEVENTS_PATTERN="" \
+ NOTIFY_DUE_DAYS_BEFORE_AND_AFTER="" \
+ NOTIFY_DUE_AT_HOUR_OF_DAY="" \
+ EMAIL_NOTIFICATION_TIMEOUT=30000 \
+ MATOMO_ADDRESS="" \
+ MATOMO_SITE_ID="" \
+ MATOMO_DO_NOT_TRACK=true \
+ MATOMO_WITH_USERNAME=false \
+ BROWSER_POLICY_ENABLED=true \
+ TRUSTED_URL="" \
+ WEBHOOKS_ATTRIBUTES="" \
+ OAUTH2_ENABLED=false \
+ OAUTH2_LOGIN_STYLE=redirect \
+ OAUTH2_CLIENT_ID="" \
+ OAUTH2_SECRET="" \
+ OAUTH2_SERVER_URL="" \
+ OAUTH2_AUTH_ENDPOINT="" \
+ OAUTH2_USERINFO_ENDPOINT="" \
+ OAUTH2_TOKEN_ENDPOINT="" \
+ OAUTH2_ID_MAP="" \
+ OAUTH2_USERNAME_MAP="" \
+ OAUTH2_FULLNAME_MAP="" \
+ OAUTH2_ID_TOKEN_WHITELIST_FIELDS="" \
+ OAUTH2_REQUEST_PERMISSIONS='openid profile email' \
+ OAUTH2_EMAIL_MAP="" \
+ LDAP_ENABLE=false \
+ LDAP_PORT=389 \
+ LDAP_HOST="" \
+ LDAP_BASEDN="" \
+ LDAP_LOGIN_FALLBACK=false \
+ LDAP_RECONNECT=true \
+ LDAP_TIMEOUT=10000 \
+ LDAP_IDLE_TIMEOUT=10000 \
+ LDAP_CONNECT_TIMEOUT=10000 \
+ LDAP_AUTHENTIFICATION=false \
+ LDAP_AUTHENTIFICATION_USERDN="" \
+ LDAP_AUTHENTIFICATION_PASSWORD="" \
+ LDAP_LOG_ENABLED=false \
+ LDAP_BACKGROUND_SYNC=false \
+ LDAP_BACKGROUND_SYNC_INTERVAL="" \
+ LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false \
+ LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=false \
+ LDAP_ENCRYPTION=false \
+ LDAP_CA_CERT="" \
+ LDAP_REJECT_UNAUTHORIZED=false \
+ LDAP_USER_AUTHENTICATION=false \
+ LDAP_USER_AUTHENTICATION_FIELD=uid \
+ LDAP_USER_SEARCH_FILTER="" \
+ LDAP_USER_SEARCH_SCOPE="" \
+ LDAP_USER_SEARCH_FIELD="" \
+ LDAP_SEARCH_PAGE_SIZE=0 \
+ LDAP_SEARCH_SIZE_LIMIT=0 \
+ LDAP_GROUP_FILTER_ENABLE=false \
+ LDAP_GROUP_FILTER_OBJECTCLASS="" \
+ LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE="" \
+ LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE="" \
+ LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT="" \
+ LDAP_GROUP_FILTER_GROUP_NAME="" \
+ LDAP_UNIQUE_IDENTIFIER_FIELD="" \
+ LDAP_UTF8_NAMES_SLUGIFY=true \
+ LDAP_USERNAME_FIELD="" \
+ LDAP_FULLNAME_FIELD="" \
+ LDAP_MERGE_EXISTING_USERS=false \
+ LDAP_EMAIL_FIELD="" \
+ LDAP_EMAIL_MATCH_ENABLE=false \
+ LDAP_EMAIL_MATCH_REQUIRE=false \
+ LDAP_EMAIL_MATCH_VERIFIED=false \
+ LDAP_SYNC_USER_DATA=false \
+ LDAP_SYNC_USER_DATA_FIELDMAP="" \
+ LDAP_SYNC_GROUP_ROLES="" \
+ LDAP_DEFAULT_DOMAIN="" \
+ LDAP_SYNC_ADMIN_STATUS="" \
+ LDAP_SYNC_ADMIN_GROUPS="" \
+ HEADER_LOGIN_ID="" \
+ HEADER_LOGIN_FIRSTNAME="" \
+ HEADER_LOGIN_LASTNAME="" \
+ HEADER_LOGIN_EMAIL="" \
+ LOGOUT_WITH_TIMER=false \
+ LOGOUT_IN="" \
+ LOGOUT_ON_HOURS="" \
+ LOGOUT_ON_MINUTES="" \
+ CORS="" \
+ CORS_ALLOW_HEADERS="" \
+ CORS_EXPOSE_HEADERS="" \
+ DEFAULT_AUTHENTICATION_METHOD=""
+
+# Install OS
+RUN set -o xtrace \
+ && useradd --user-group -m --system --home-dir /home/wekan wekan \
+ && apt-get update \
+ && apt-get install --assume-yes --no-install-recommends apt-utils apt-transport-https ca-certificates 2>&1 \
+ && apt-get install --assume-yes --no-install-recommends ${BUILD_DEPS}
+
+# Install NodeJS
+RUN set -o xtrace \
+ && cd /tmp \
+ && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-$ARCHITECTURE.tar.xz" \
+ && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
+ && grep " node-v$NODE_VERSION-$ARCHITECTURE.tar.xz\$" SHASUMS256.txt.asc | sha256sum -c - \
+ && tar -xJf "node-v$NODE_VERSION-$ARCHITECTURE.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
+ && rm "node-v$NODE_VERSION-$ARCHITECTURE.tar.xz" SHASUMS256.txt.asc \
+ && ln -s /usr/local/bin/node /usr/local/bin/nodejs \
+ && mkdir -p /usr/local/lib/node_modules/fibers/.node-gyp /root/.node-gyp/${NODE_VERSION} /home/wekan/.config \
+ && npm install -g npm@${NPM_VERSION} \
+ && chown wekan:wekan --recursive /home/wekan/.config
+
+ENV DEBIAN_FRONTEND=dialog
+
+USER wekan
+
+# Install Meteor
+RUN set -o xtrace \
+ && cd /home/wekan \
+ && curl https://install.meteor.com/?release=$METEOR_VERSION --output /home/wekan/install-meteor.sh \
+ # Replace tar with bsdtar in the install script; https://github.com/jshimko/meteor-launchpad/issues/39
+ && sed --in-place "s/tar -xzf.*/bsdtar -xf \"\$TARBALL_FILE\" -C \"\$INSTALL_TMPDIR\"/g" /home/wekan/install-meteor.sh \
+ && sed --in-place 's/VERBOSITY="--silent"/VERBOSITY="--progress-bar"/' /home/wekan/install-meteor.sh \
+ && printf "\n[-] Installing Meteor $METEOR_VERSION...\n\n" \
+ && sh /home/wekan/install-meteor.sh
+
+ENV PATH=$PATH:/home/wekan/.meteor/
+
+# Copy source dir
+USER root
+
+RUN echo "export PATH=$PATH" >> /etc/environment
+
+RUN set -o xtrace \
+ && mkdir /home/wekan/app
+
+COPY ${SRC_PATH} /home/wekan/app/
+
+RUN set -o xtrace \
+ && chown -R wekan:wekan /home/wekan/app /home/wekan/.meteor
+
+USER wekan
diff --git a/.devcontainer/build.sh b/.devcontainer/build.sh
new file mode 100644
index 00000000..e5343cab
--- /dev/null
+++ b/.devcontainer/build.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+cd /home/wekan/app
+rm -rf node_modules
+/home/wekan/.meteor/meteor npm install
+rm -rf .build
+/home/wekan/.meteor/meteor build .build --directory
+cp -f fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/packages/cfs_access-point.js
+cd .build/bundle/programs/server
+rm -rf node_modules
+/home/wekan/.meteor/meteor npm install
+cd /home/wekan/app
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
new file mode 100644
index 00000000..432e7c19
--- /dev/null
+++ b/.devcontainer/devcontainer.json
@@ -0,0 +1,17 @@
+// See https://aka.ms/vscode-remote/devcontainer.json for format details.
+{
+ "dockerComposeFile": ["docker-compose.yml", "docker-compose.extend.yml"],
+ "service": "wekan-dev",
+ "workspaceFolder": "/home/wekan/app",
+ "extensions": [
+ "mutantdino.resourcemonitor",
+ "editorconfig.editorconfig",
+ "dbaeumer.vscode-eslint",
+ "codezombiech.gitignore",
+ "eamodio.gitlens",
+ "gruntfuggly.todo-tree",
+ "dotjoshjohnson.xml",
+ "redhat.vscode-yaml",
+ "vuhrmeister.vscode-meteor"
+ ]
+}
diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml
new file mode 100644
index 00000000..fab77056
--- /dev/null
+++ b/.devcontainer/docker-compose.yml
@@ -0,0 +1,50 @@
+version: '3.7'
+
+services:
+
+ wekandb-dev:
+ image: mongo:4.0.12
+ container_name: wekan-dev-db
+ restart: unless-stopped
+ command: mongod --smallfiles --oplogSize 128
+ networks:
+ - wekan-dev-tier
+ expose:
+ - 27017
+ volumes:
+ - wekan-dev-db:/data/db
+ - wekan-dev-db-dump:/dump
+
+ wekan-dev:
+ container_name: wekan-dev-app
+ restart: always
+ networks:
+ - wekan-dev-tier
+ build:
+ context: ..
+ dockerfile: .devcontainer/Dockerfile
+ ports:
+ - 3000:3000
+ - 9229:9229
+ environment:
+ - MONGO_URL=mongodb://wekandb-dev:27017/wekan
+ - ROOT_URL=http://localhost:3000
+ - WITH_API=true
+ - RICHER_CARD_COMMENT_EDITOR=true
+ - BROWSER_POLICY_ENABLED=true
+ depends_on:
+ - wekandb-dev
+ volumes:
+ - ..:/app:delegated
+ command:
+ sleep infinity
+
+volumes:
+ wekan-dev-db:
+ driver: local
+ wekan-dev-db-dump:
+ driver: local
+
+networks:
+ wekan-dev-tier:
+ driver: bridge
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 00000000..5dc46e6b
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,3 @@
+* text=auto eol=lf
+*.{cmd,[cC][mM][dD]} text eol=crlf
+*.{bat,[bB][aA][tT]} text eol=crlf \ No newline at end of file
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 00000000..277cc9a6
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,3 @@
+# These are supported funding model platforms
+
+custom: ['https://wekan.team/commercial-support/']
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index 1c80c2b0..0b810905 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -7,8 +7,9 @@ Other Wekan issues can be added here.
**Server Setup Information**:
+* Note: Please anonymize info, and do not add to this public issue any of your Wekan board URLs, passwords, API tokens etc, do you understand?:
* Did you test in newest Wekan?:
-* For new Wekan install, did you configure root-url correctly https://github.com/wekan/wekan/wiki/Settings ?
+* For new Wekan install, did you configure root-url correctly so Wekan cards open correctly https://github.com/wekan/wekan/wiki/Settings ?
* Wekan version:
* If this is about old version of Wekan, what upgrade problem you have?:
* Operating System:
@@ -16,13 +17,12 @@ Other Wekan issues can be added here.
* Http frontend if any (Caddy, Nginx, Apache, see config examples from Wekan GitHub wiki first):
* Node Version:
* MongoDB Version:
-* ROOT_URL environment variable http(s)://(subdomain).example.com(/suburl):
* Wekan only works on newest desktop Firefox/Chromium/Chrome/Edge/Chromium Edge and mobile Chrome. What webbrowser version are you using?
**Problem description**:
- *REQUIRED: Add recorded animated gif about how it works currently, and screenshot mockups how it should work. Use peek to record animgif in Linux https://github.com/phw/peek*
- *Explain steps how to reproduce*
- *In webbrowser, what does show Right Click / Inspect / Console ? Chrome shows more detailed info than Firefox.*
-- *If using Snap, what does show command `sudo snap logs wekan.wekan` ?*
-- *If using Docker, what does show command `sudo docker logs wekan-app` ?*
+- *If using Snap, what does show command `sudo snap logs wekan.wekan` ? Please anonymize logs.*
+- *If using Docker, what does show command `sudo docker logs wekan-app` ? Please anonymize logs.*
- *If logs are very long, attach them in .zip file*
diff --git a/.gitignore b/.gitignore
index 8b469ed6..519d5d97 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,6 +29,6 @@ versions.json
Thumbs.db
ehthumbs.db
.eslintcache
-package-lock.json
.meteor/local
.meteor-1.6-snap/.meteor/local
+.devcontainer/docker-compose.extend.yml
diff --git a/.meteor/packages b/.meteor/packages
index f234baea..7fa85bee 100644
--- a/.meteor/packages
+++ b/.meteor/packages
@@ -6,9 +6,9 @@
meteor-base@1.4.0
# Build system
-ecmascript@0.12.4
-standard-minifier-css@1.5.3
-standard-minifier-js@2.4.1
+ecmascript@0.13.0
+standard-minifier-css@1.5.4
+standard-minifier-js@2.5.0
mquandalle:jade
# Polyfills
@@ -22,7 +22,7 @@ dburles:collection-helpers
idmontie:migrations
matb33:collection-hooks
matteodem:easy-search
-mongo@1.6.2
+mongo@1.7.0
mquandalle:collection-mutations
# Account system
@@ -96,3 +96,4 @@ konecty:mongo-counter
percolate:synced-cron
easylogic:summernote
cfs:filesystem
+ostrio:cookies
diff --git a/.meteor/release b/.meteor/release
index 97064e19..250a263b 100644
--- a/.meteor/release
+++ b/.meteor/release
@@ -1 +1 @@
-METEOR@1.8.1
+METEOR@1.8.2
diff --git a/.meteor/versions b/.meteor/versions
index dbfe84ae..2b21c42e 100644
--- a/.meteor/versions
+++ b/.meteor/versions
@@ -1,5 +1,5 @@
3stack:presence@1.1.2
-accounts-base@1.4.4
+accounts-base@1.4.5
accounts-oauth@1.1.16
accounts-password@1.5.1
aldeed:collection2@2.10.0
@@ -12,8 +12,8 @@ allow-deny@1.1.0
arillo:flow-router-helpers@0.5.2
audit-argument-checks@1.0.7
autoupdate@1.6.0
-babel-compiler@7.3.4
-babel-runtime@1.3.0
+babel-compiler@7.4.0
+babel-runtime@1.4.0
base64@1.0.12
binary-heap@1.0.11
blaze@2.3.3
@@ -23,7 +23,7 @@ browser-policy-common@1.0.11
browser-policy-framing@1.1.0
caching-compiler@1.2.1
caching-html-compiler@1.1.3
-callback-hook@1.1.0
+callback-hook@1.2.0
cfs:access-point@0.1.49
cfs:base-package@0.0.30
cfs:collection@0.5.5
@@ -57,10 +57,10 @@ deps@1.0.12
diff-sequence@1.1.1
dynamic-import@0.5.1
easylogic:summernote@0.8.8
-ecmascript@0.12.7
+ecmascript@0.13.0
ecmascript-runtime@0.7.0
-ecmascript-runtime-client@0.8.0
-ecmascript-runtime-server@0.7.1
+ecmascript-runtime-client@0.9.0
+ecmascript-runtime-server@0.8.0
ejson@1.1.0
email@1.2.3
es5-shim@4.8.0
@@ -82,14 +82,14 @@ kadira:dochead@1.5.0
kadira:flow-router@2.12.1
kenton:accounts-sandstorm@0.7.0
konecty:mongo-counter@0.0.5_3
-lamhieu:meteorx@2.0.1
+lamhieu:meteorx@2.1.1
lamhieu:unblock@1.0.0
launch-screen@1.1.1
livedata@1.0.18
localstorage@1.2.0
logging@1.1.20
lucasantoniassi:accounts-lockout@1.0.0
-matb33:collection-hooks@0.8.4
+matb33:collection-hooks@0.9.1
matteodem:easy-search@1.6.4
mdg:meteor-apm-agent@3.2.3
mdg:validation-error@0.5.1
@@ -101,16 +101,16 @@ meteorhacks:collection-utils@1.2.0
meteorhacks:picker@1.0.3
meteorhacks:subs-manager@1.6.4
meteorspark:util@0.2.0
-minifier-css@1.4.2
-minifier-js@2.4.1
+minifier-css@1.4.3
+minifier-js@2.5.0
minifiers@1.1.8-faster-rebuild.0
minimongo@1.4.5
mobile-status-bar@1.0.14
modern-browsers@0.1.4
-modules@0.13.0
-modules-runtime@0.10.3
+modules@0.14.0
+modules-runtime@0.11.0
momentjs:moment@2.24.0
-mongo@1.6.3
+mongo@1.7.0
mongo-decimal@0.1.1
mongo-dev-server@1.1.0
mongo-id@1.0.7
@@ -127,17 +127,18 @@ mquandalle:mousetrap-bindglobal@0.0.1
mquandalle:perfect-scrollbar@0.6.5_2
msavin:usercache@1.8.0
npm-bcrypt@0.9.3
-npm-mongo@3.1.2
+npm-mongo@3.2.0
oauth@1.2.8
oauth2@1.2.1
observe-sequence@1.0.16
ongoworks:speakingurl@1.1.0
ordered-dict@1.1.0
-peerlibrary:assert@0.2.5
+ostrio:cookies@2.5.0
+peerlibrary:assert@0.3.0
peerlibrary:base-component@0.16.0
peerlibrary:blaze-components@0.15.1
-peerlibrary:computed-field@0.9.0
-peerlibrary:reactive-field@0.5.0
+peerlibrary:computed-field@0.10.0
+peerlibrary:reactive-field@0.6.0
percolate:synced-cron@1.3.2
promise@0.11.2
raix:eventemitter@0.1.3
@@ -166,8 +167,8 @@ softwarerero:accounts-t9n@1.3.11
spacebars@1.0.15
spacebars-compiler@1.1.3
srp@1.0.12
-standard-minifier-css@1.5.3
-standard-minifier-js@2.4.1
+standard-minifier-css@1.5.4
+standard-minifier-js@2.5.0
staringatlights:fast-render@3.2.0
staringatlights:inject-data@2.3.0
tap:i18n@1.8.2
@@ -185,7 +186,7 @@ useraccounts:core@1.14.2
useraccounts:flow-routing@1.14.2
useraccounts:unstyled@1.14.2
verron:autosize@3.0.8
-webapp@1.7.4
+webapp@1.7.5
webapp-hashing@1.0.9
wekan-accounts-cas@0.1.0
wekan-accounts-oidc@1.0.10
diff --git a/.travis.yml b/.travis.yml
index cde2bf33..6f0a9e0a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,10 +1,10 @@
-dist: trusty
+dist: disco
sudo: required
env:
- TRAVIS_DOCKER_COMPOSE_VERSION: 1.17.0
- TRAVIS_NODE_VERSION: 8.9.3
- TRAVIS_NPM_VERSION: 5.5.1
+ TRAVIS_DOCKER_COMPOSE_VERSION: 1.24.0
+ TRAVIS_NODE_VERSION: 8.16.2
+ TRAVIS_NPM_VERSION: latest
before_install:
- sudo apt-get update -y
diff --git a/.tx/config b/.tx/config
index 347e88cd..57b3ba40 100644
--- a/.tx/config
+++ b/.tx/config
@@ -39,7 +39,7 @@ host = https://www.transifex.com
# tap:i18n requires us to use `-` separator in the language identifiers whereas
# Transifex uses a `_` separator, without an option to customize it on one side
# or the other, so we need to do a Manual mapping.
-lang_map = bg_BG:bg, en_GB:en-GB, es_AR:es-AR, el_GR:el, fi_FI:fi, hu_HU:hu, id_ID:id, mn_MN:mn, no:nb, lv_LV:lv, pt_BR:pt-BR, ro_RO:ro, zh_CN:zh-CN, zh_TW:zh-TW, zh_HK:zh-HK
+lang_map = bg_BG:bg, en_GB:en-GB, es_AR:es-AR, el_GR:el, fi_FI:fi, hu_HU:hu, id_ID:id, mn_MN:mn, no:nb, lv_LV:lv, pt_BR:pt-BR, ro_RO:ro, sl_SI:sl, zh_CN:zh-CN, zh_TW:zh-TW, zh_HK:zh-HK
[wekan.application]
file_filter = i18n/<lang>.i18n.json
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 00000000..243eeb20
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,28 @@
+{
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "type": "chrome",
+ "request": "launch",
+ "name": "Meteor: Chrome",
+ "url": "http://localhost:3000",
+ "webRoot": "${workspaceFolder}"
+ },
+ {
+ "type": "node",
+ "request": "launch",
+ "name": "Meteor: Node",
+ "runtimeExecutable": "/home/wekan/.meteor/meteor",
+ "runtimeArgs": ["run", "--inspect-brk=9229"],
+ "outputCapture": "std",
+ "port": 9229,
+ "timeout": 60000
+ }
+ ],
+ "compounds": [
+ {
+ "name": "Meteor: All",
+ "configurations": ["Meteor: Node", "Meteor: Chrome"]
+ }
+ ]
+}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2f0c2eb4..b05fa3d1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,443 @@
+# Upcoming Wekan release
+
+This release adds the following updates:
+
+- [Update to Meteor 1.8.2. Update dependencies](https://github.com/wekan/wekan/commit/38dfe0b9a71a083adc2de1a81170fea0e4a8e53f).
+ Thanks to xet7.
+- [Fix lint errors and update travis NPM version](https://github.com/wekan/wekan/commit/b0f345ba21830b033c9edcc8ee5252b280111ae7).
+ Thanks to xet7.
+
+and fixes the following bugs:
+
+- Fix slow scroll on card detail by setting scrollInertia to 0](https://github.com/wekan/wekan/commit/599ace1db7918df41d9708d14b0351acb0f8688e).
+ Thanks to cafeoh.
+- [Fix lint errors](https://github.com/wekan/wekan/commit/788dd0a81a06efee165007a92780f9e8c2c754ac).
+ Thanks to xet7.
+- [Remove eslint option that does not work](https://github.com/wekan/wekan/commit/a06daff92e5f7cca55d1698252e3aa6526877c8b).
+ Thanks to xet7.
+- [Try to fix lint errors](https://github.com/wekan/wekan/commit/58e505f79a0617011576bdded9427b0d448d6107).
+ Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.55 2019-11-19 Wekan release
+
+This release fixes the following bugs:
+
+- [When logged in, use database for setting, so that changes are immediate. Only on public board use cookies.
+ Comment out Collapse CSS that is not in use](https://github.com/wekan/wekan/commit/351d4767d7e93c90ac798769d6071da8730d834f).
+ Thanks to xet7.
+- [Use database when logged in. Part 2](https://github.com/wekan/wekan/commit/4786b0c18ddeb8f48525216eabebdced7159467d).
+ Thanks to xet7.
+- [Use database when logged in. Part 3](https://github.com/wekan/wekan/commit/115d23f9293cad8a93f18f75a47a8a65756f71ce).
+ Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.54 2019-11-18 Wekan release
+
+This release adds the following new features:
+
+- [New feature: Now there is popup selection of Lists/Swimlanes/Calendar/Roles](https://github.com/wekan/wekan/commit/96abe3c6914ce37d9fb44da8fda375e40ad65c9e).
+ Thanks to xet7.
+- [New feature, not set visible yet, because switching to it does not
+ work properly yet: Collapsible Swimlanes](https://github.com/wekan/wekan/issues/2804).
+ Thanks to xet7.
+
+and fixes the following bugs:
+
+- [Fix: Public board now loads correctly. When you select one of Lists/Swimlanes/Calendar view and
+ reload webbrowser page, it can change view](https://github.com/wekan/wekan/issues/2311).
+ Thanks to xet7.
+- [Fix: List sorting commented out](https://github.com/wekan/wekan/issues/2800).
+ Thanks to xet7.
+- [Fix: Errors hasHiddenMinicardText, hasShowDragHandles, showSort, hasSortBy, profile,
+ FirefoxAndroid/IE11/Vivaldi/Chromium browsers not working by using cookies instead of
+ database](https://github.com/wekan/wekan/issues/2643#issuecomment-554907955).
+ Note: Cookie changes are not always immediate, if there is no effect, you may need to
+ reload webbrowser page. This could be improved later.
+ Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.53 2019-11-14 Wekan release
+
+This release fixes the following bugs:
+
+- [Revert list sorting change of Wekan v3.51 because it reversed alphabetical sorting of
+ lists](https://github.com/wekan/wekan/commit/ab2a721a1443b903cdbbbe275f41ffd3269012c6).
+ Thanks to Dalisay and xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.52 2019-11-14 Wekan release
+
+This release fixes the following bugs:
+
+- [Add database migration for assignee](https://github.com/wekan/wekan/commit/5b41d72e8de93833e1788962427422cff62c09a2).
+ Thanks to ocdtrekkie and xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.51 2019-11-14 Wekan release
+
+This release fixes the following bugs:
+
+- [Change sorting lists to work on desktop drag handle page instead,
+ where it seems to work better](https://github.com/wekan/wekan/commit/bbc3ab3f994c5a61a4414bc64b05f5a03d259e46).
+ Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.50 2019-11-13 Wekan release
+
+This release adds the following new features:
+
+- [Allowing lists to be sorted by modifiedAt when not in draggable
+ mode](https://github.com/wekan/wekan/commits/77f8b76d4e13c35ea3451622176bbb69a4d39a32).
+ Thanks to whowillcare.
+- Allow user to sort Lists in Board by his own preference boardadmin can star
+ list [1](https://github.com/wekan/wekan/commit/bc2a20f04e32607f8488a9cecd815647fb43e40e),
+ [2](https://github.com/wekan/wekan/commit/bc2a20f04e32607f8488a9cecd815647fb43e40e).
+ Thanks to whowillcare.
+- [Allowing user to filter list in Filter function not just cards
+ commit](https://github.com/wekan/wekan/commit/d2d4840758b0f5aed7feb4f6a459bb2b2d1a3f0b).
+ Thanks to whowillcare.
+- [Allow user to search Lists in Board](https://github.com/wekan/wekan/commit/32f50e16586696ec7d100ce0438d1030ae1f606e).
+ Thanks to whowillcare.
+- Enhancement: [Set card times more sensible using the 'Today' button in
+ datepicker](https://github.com/wekan/wekan/pull/2747).
+ Thanks to liske.
+- [At card, added Assignee field like Jira, and REST API for it](https://github.com/wekan/wekan/issues/2452).
+ Parts:
+ [Add assignee](https://github.com/wekan/wekan/commit/9e1aaf163f3bd0b3c2d2aee8225d111f83b3d421),
+ [Remove Assignee. Avatar icon is at card and assignee details](https://github.com/wekan/wekan/commit/3e8f9ef1a5275a5e9b691c7e74dc73b97a43689a),
+ [When selecting new assignee (+) icon, list shows names who to add](https://github.com/wekan/wekan/commit/32ce2b51d8bff5e8851732394a8bae3c56f8b0b6),
+ [More progress](https://github.com/wekan/wekan/commit/ea823ab68fd5243c8485177e44a074be836836b8),
+ [In add assignee popup, avatars are now visible](https://github.com/wekan/wekan/commit/56efb5c41075151eeb259d99990a7e86695b2b69),
+ [Add assignee popup title](https://github.com/wekan/wekan/commit/31dbdc835d5a092b8360a4dbe93e9fbcce068855),
+ [Prevent more than one assignee](https://github.com/wekan/wekan/commit/1728298659521ee8e6fc94fedad3160030b9a2c3),
+ [When there is one selected assignee on card, don't show + button for adding more assignees, because there can only be one
+ assignee](https://github.com/wekan/wekan/commit/3cf09efb13438d66db6cf739591c679ea538d812),
+ [Now assignee is visible also at minicard](https://github.com/wekan/wekan/commit/9fd14f7ecb593d3debf5adff8f6c61adb0c3feca),
+ [Update REST API docs, there can only be one assignee in array](https://github.com/wekan/wekan/commit/de7509dc60257667192054e320b381f9dd0f0a31).
+ Thanks to xet7.
+- [More mobile drag handles, and optional desktop drag handles](https://github.com/wekan/wekan/issues/2081): In Progress.
+ Parts:
+ [Some drag handle fixes](https://github.com/wekan/wekan/commit/6a8960547729148bd3085cb469f9e93d510ed66c),
+ [Fix desktop swimlane drag handle position](https://github.com/wekan/wekan/commit/2ec15602d284122fce1a45bed352d0d4050162e2),
+ [Fix card, list and swimlane move. Allow moving cards in multiselect mode](https://github.com/wekan/wekan/commit/537a48bede250155b30ec264904ba320625bab73).
+ Thanks to xet7.
+
+and adds the following updates:
+
+- [Update Node.js to v8.16.2](https://github.com/wekan/wekan/commit/1eb3d25b40797fdab41d7dd59405cfcea81dcc61).
+ Thanks to xet7.
+
+and fixes the following bugs:
+
+- Bug Fix [#2093](https://github.com/wekan/wekan/issues/2093), need to [clean up the
+ temporary file](https://github.com/wekan/wekan/commit/2737d6b23f3a0fd2314236a85fbdee536df745a2).
+ Thanks to whowillcare.
+- Bug Fix [#2093](https://github.com/wekan/wekan/issues/2093): the broken [should be prior to file attachment feature introduced](https://github.com/wekan/wekan/commit/f53c624b0f6c6ebcc20c378a153e5cda8d73463c).
+ Thanks to whowillcare.
+- [Fix typo on exporting subtasks](https://github.com/wekan/wekan/commit/00d581245c1fe6a01ef372ca87d8a25bc7b937e4).
+ Thanks to xiorcala.
+- [Change the radom to random typo in export.js](https://github.com/wekan/wekan/commit/e195c731de88aba4026c239f4552ae821d522ec7).
+ Thanks to whowillcare.
+- Fix: [List last modify time will be affected by cards dueAt, endAt](https://github.com/wekan/wekan/commit/3308d90a3a6a1ddeed33966767937cd2c2c90cb5).
+ Thanks to whowillcare.
+- Revert creating new list to left, now creates again to right. Thanks to whowillcare.
+ Revert New List item moved from right to left. Thanks to derbolle and xet7.
+ [1](https://github.com/wekan/wekan/commit/806df30ba3499cef193eaf1b437cdef65282510f).
+- REST API: [Fix deletion of a single board card](https://github.com/wekan/wekan/pull/2778).
+ Thanks to liske.
+- [cardDate: endDate coloring change](https://github.com/wekan/wekan/pull/2779).
+ If no due-date timestamp is set => Gray.
+ If end-date timestamp is younger than due-date timestamp => Green.
+ If end-date timestamp is older than due-date timestamp => Red.
+ Thanks to bandresen.
+- [Fixed Card Open Webhook Error](https://github.com/wekan/wekan/issues/2780).
+ Thanks to jymcheong.
+- [Fixed OpenAPI docs generation](https://github.com/wekan/wekan/pull/2783).
+ Thanks to bentiss.
+- [Fixed close card button not visible on mobile web](https://github.com/wekan/wekan/36b5965dd07e3f0fd90069353310739c394c220f).
+ Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.49 2019-10-09 Wekan release
+
+This release fixes the following bugs:
+
+- [Fix prettier errors](https://github.com/wekan/wekan/commits/36e006fa4e78fe94e627625d1cc589654668f22a).
+ Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.48 2019-10-09 Wekan release
+
+This release fixes the following bugs:
+
+- [Make possible to upload attachments using drag-and-drop or Ctrl+V without setting the environmental-variable MAX_IMAGE_PIXEL](https://github.com/wekan/wekan/pull/2754).
+ Thanks to moserben16.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.47 2019-10-09 Wekan release
+
+This release fixes the following bugs:
+
+- [REST API: fix handling of members property on card creation](https://github.com/wekan/wekan/pull/2751).
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.46 2019-10-07 Wekan release
+
+This release fixes the following bugs:
+
+- [More black minicard badges](https://github.com/wekan/wekan/commit/68be12d166b21a41b4e2c4021b0966807e5ed1e6).
+ Thanks to sfahrenholz and xet7.
+- [REST API: fix creation of Checklists](https://github.com/wekan/wekan/pull/2747).
+ Thanks to liske.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.45 2019-10-03 Wekan release
+
+This release adds the following new features:
+
+- [Cards due timeline will be shown in Calendar view](https://github.com/wekan/wekan/pull/2738).
+ Thanks to whowillcare.
+- [Modified due day reminders in cards.js, so wekan server admin can control the reminder more flexibly](https://github.com/wekan/wekan/pull/2738).
+ i.e. NOTIFY_DUE_DAYS_BEFORE_AND_AFTER = 0 notification will be sent on due day only.
+ NOTIFY_DUE_DAYS_BEFORE_AND_AFTER = 2,0 it means notification will be sent on both due day and two days before.
+ Thanks to whowillcare.
+- [Added modifications the help files, related to NOTIFY_DUE_DAYS_BEFORE_AND_AFTER](https://github.com/wekan/wekan/pull/2740).
+ Thanks to whowillcare.
+
+and fixes the following bugs:
+
+- [Modified list.style regarding .list-header-name when in mobile mode. It was too close to left arrow](https://github.com/wekan/wekan/pull/2740).
+ Thanks to whowillcare.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.44 2019-09-17 Wekan release
+
+This release adds the following languages:
+
+- [Add language: Slovenian](https://github.com/wekan/wekan/commit/125231beff0fb84a18a46fe246fa12e098246985).
+ Thanks to translators.
+
+and fixes the following bugs:
+
+- [Fix: in richer editor @ autocomplete doesn't really insert the username properly](https://github.com/wekan/wekan/pull/2717).
+ Thanks to whowillcare.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.43 2019-09-17 Wekan release
+
+This release fixes the following bugs:
+
+- [In richer editor, @user might not get pickup correctly, if it's formated](https://github.com/wekan/wekan/pull/2715).
+ Thanks to whowillcare.
+- [Table content should have word-wrap](https://github.com/wekan/wekan/pull/2715).
+ Thanks to whowillcare.
+- [Two-way hooks locking mechanism will fail sometime, therefore, change all comment insert or update to direct, which means it won't invoke any hook](https://github.com/wekan/wekan/pull/2715).
+ Thanks to whowillcare.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.42 2019-09-14 Wekan release
+
+This release removed the following new features:
+
+- [Revert drag handle changes of Wekan v3.41](https://github.com/wekan/wekan/commit/57119868bbb49f47c7d0b51b9952df9bd83d46f5).
+ Thanks to Keelan.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.41 2019-09-13 Wekan release
+
+This release adds the following new features:
+
+- [More Mobile and Desktop drag handles for Swimlanes/Lists/Cards. Part 1](https://github.com/wekan/wekan/commit/ff550e91103115e7b731dd80c4588b93b2d4c64f).
+ Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.40 2019-09-11 Wekan release
+
+This release fixes the following bugs:
+
+- [Fix subcard selector](https://github.com/wekan/wekan/pull/2697).
+ Thanks to justinr1234.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.39 2019-09-11 Wekan release
+
+This release fixes the following bugs:
+
+- [To load all boards, revert Wekan v3.37 Fix Linked cards make load all cards of database](https://github.com/wekan/wekan/commit/6ce8eeee6c477cd39b684c47bf122b5872818ada).
+ Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.38 2019-09-11 Wekan release
+
+- Update translations. Thanks to translators.
+
+# v3.37 2019-09-07 Wekan release
+
+This release fixes the following bugs:
+
+- LDAP: [Fix USERDN example, when parameters contain spaces](https://github.com/wekan/wekan/commit/6cbd4cabc716c755e547abb798f657fe5476ed04).
+ LDAP_AUTHENTIFICATION_USERDN="CN=ldap admin,CN=users,DC=domainmatter,DC=lan" .
+ Thanks to compumatter.
+- [Fix: Linked cards make load all cards of database](https://github.com/wekan/wekan/commit/a56988c487745b2879cebe1943e7a987016e8bef).
+ Thanks to Akuket.
+- [Fix Unable to drag select text without closing card details](https://github.com/wekan/wekan/pull/2690).
+ Thanks to justinr1234.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.36 2019-09-05 Wekan release
+
+This release adds the following new features:
+
+- [Complete the original author's webhook functions and add two-way webhook type](https://github.com/wekan/wekan/pull/2665):
+ 1. Make webhook function more complete by allowing user to specify name and token of
+ a webhook to increase security.
+ 1. Allow wekan admin to sepcify a global webhook.
+ 3. Add new type of two-way webhook that can act on the JSON webhook return payload:
+ 3.1. If the payload data contains cardId, boardId, and comment key words,
+ 3.2. If it has commentId, an existing comment will be modified
+ 3.3. If it doesn't have commentId, then a new comment will be added, otherwise, does nothing.
+ Thanks to whowillcare.
+- [Patch admin search feature to Search in all users, not just "loaded" users
+ in the client](https://github.com/wekan/wekan/pull/2667).
+ Thanks to Akuket.
+- [Devcontainer: Moved MAIL-Vars to not-committed file, and added PATH with meteor to
+ Environment](https://github.com/wekan/wekan/pull/2672).
+ Thanks to road42.
+
+and fixes the following bugs:
+
+- [Fix incorrect date types for created and updated, so now newest card comments are at top](https://github.com/wekan/wekan/pull/2679).
+ Thanks to justinr1234.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.35 2019-08-29 Wekan release
+
+This release fixes the following bugs:
+
+- [Try to fix Snap](https://github.com/wekan/wekan/commit/71d32c6bc8e6affd345026797ff31e94a0a10d77).
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.34 2019-08-29 Wekan release
+
+This release fixes the following bugs:
+
+- [Snap: Delete all .swp files](https://github.com/wekan/wekan/commit/d5403bbfc53390aeaaf68eb452bc24d88f1e0942).
+ Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.33 2019-08-29 Wekan release
+
+This release adds the following new features:
+
+- [Add card color to calendar event. The color of the calendar event will match the card
+ color](https://github.com/wekan/wekan/pull/2664).
+ Thanks to grmpfhmbl.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.32 2019-08-29 Wekan release
+
+This release fixes the following bugs:
+
+- [Fix Snap adopt-info](https://github.com/wekan/wekan/commit/79d4cd83b1fa83bb814230683b7449ed7f3e1ede).
+ Thanks to [popey at Snapcraft forum](https://forum.snapcraft.io/t/dirty-snap-release/12975/12).
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.31 2019-08-29 Wekan release
+
+This release fixes the following bugs:
+
+- [Try](https://github.com/wekan/wekan/commit/be5f435bc5f500b24bc838ac1dc8bf3bb9a33a22) to
+ [fix adopt-info](https://forum.snapcraft.io/t/dirty-snap-release/12975/8).
+ Thanks to ogra at Snapcraft forum.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.30 2019-08-29 Wekan release
+
+This release fixes the following bugs:
+
+- Snap: [Change version-script to adopt-info](https://github.com/wekan/wekan/commit/0ff5ce8fde6cc9a05a3c8b93e18ebce7282d3a67)
+ to [fix dirty](https://forum.snapcraft.io/t/dirty-snap-release/12975/4).
+ Thanks to popey and daniel at Snapcraft forum.
+- [Delete another phantomjs binary from Snap](https://github.com/wekan/wekan/commit/5084102e6e17fa2cb3bc8c1180745e15379fab5f).
+ Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.29 2019-08-29 Wekan release
+
+This release fixes the following bugs:
+
+- [Fix Snap](https://github.com/wekan/wekan/commit/7761a22bb4e88ad9a5a39ed84e1ff244015c3a58).
+ Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.28 2019-08-29 Wekan release
+
+This release fixes the following bugs:
+
+- Fix broken Sandstorm release by reverting upgrading MongoDB.
+ Thanks to xet7
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.27 2019-08-29 Wekan release
+
+This release adds the following upgrades:
+
+- [Upgrade Node, Mongo, fibers and qs](https://github.com/wekan/wekan/commit/e21c47d3cfe0f228ce5ab394142c6ec6ee090d65).
+ Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.26 2019-08-28 Wekan release
+
+This release adds the following new features:
+
+- [Add devcontainer](https://github.com/wekan/wekan/pull/2659) and some [related fixes](https://github.com/wekan/wekan/pull/2660).
+ Thanks to road42.
+
+and fixes the following bugs:
+
+- [Add missing modules](https://github.com/wekan/wekan/pull/2653).
+ Thanks to GhassenRjab.
+- [Add package-lock.json](https://github.com/wekan/wekan/commit/ad01526124216abcc8b3c8230599c4eda331a86d).
+ Thanks to GhassenRjab and xet7.
+- [Fix last label undefined](https://github.com/wekan/wekan/pull/2657).
+ Thanks to justinr1234.
+- [Default to BIGEVENTS_PATTERN=NONE so that Wekan sends less email notifications](https://github.com/wekan/wekan/commit/0083215ea3955a950d345d44a8663e5b05e8f00f).
+ Thanks to rinnaz and xet7.
+- [Fix app hang when Meteor.user() is null and list spinner is loaded bug](https://github.com/wekan/wekan/pull/2654).
+ Thanks to urakagi.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
# v3.25 2019-08-23 Wekan release
This release adds the following new features:
diff --git a/Dockerfile b/Dockerfile
index 2b74eb2d..31e12a47 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -6,7 +6,7 @@ LABEL maintainer="wekan"
# ENV BUILD_DEPS="paxctl"
ENV BUILD_DEPS="apt-utils bsdtar gnupg gosu wget curl bzip2 g++ build-essential git ca-certificates" \
DEBUG=false \
- NODE_VERSION=v8.16.0 \
+ NODE_VERSION=v8.16.2 \
METEOR_RELEASE=1.8.1 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
@@ -26,7 +26,7 @@ ENV BUILD_DEPS="apt-utils bsdtar gnupg gosu wget curl bzip2 g++ build-essential
ATTACHMENTS_STORE_PATH="" \
MAX_IMAGE_PIXEL="" \
IMAGE_COMPRESS_RATIO="" \
- BIGEVENTS_PATTERN="" \
+ BIGEVENTS_PATTERN=NONE \
NOTIFY_DUE_DAYS_BEFORE_AND_AFTER="" \
NOTIFY_DUE_AT_HOUR_OF_DAY="" \
EMAIL_NOTIFICATION_TIMEOUT=30000 \
@@ -178,7 +178,7 @@ RUN \
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.0 /home/wekan/.config && \
+ 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
diff --git a/README.md b/README.md
index 22634bc7..338156af 100644
--- a/README.md
+++ b/README.md
@@ -54,13 +54,12 @@ that by providing one-click installation on various platforms.
- [Features][features]: Wekan has real-time user interface.
- [Platforms][platforms]: Wekan supports many platforms.
Wekan is critical part of new platforms Wekan is currently being integrated to.
-- [Integrations][integrations]: Current possible integrations and future plans.
## Requirements
- 64bit: Linux [Snap](https://github.com/wekan/wekan-snap/wiki/Install) or [Sandstorm](https://sandstorm.io) /
[Mac](https://github.com/wekan/wekan/wiki/Mac) / [Windows](https://github.com/wekan/wekan/wiki/Install-Wekan-from-source-on-Windows).
- [More Platforms](https://github.com/wekan/wekan/wiki/Platforms). [ARM progress](https://github.com/wekan/wekan/issues/1053#issuecomment-410919264).
+ [More Platforms](https://github.com/wekan/wekan/wiki/Platforms), bundle for RasPi3 ARM and other CPUs where Node.js and MongoDB exists.
- 1 GB RAM minimum free for Wekan. Production server should have minimum total 4 GB RAM.
For thousands of users, for example with [Docker](https://github.com/wekan/wekan/blob/devel/docker-compose.yml): 3 frontend servers,
each having 2 CPU and 2 wekan-app containers. One backend wekan-db server with many CPUs.
@@ -74,41 +73,25 @@ that by providing one-click installation on various platforms.
Bugs, updates, users deleting list or card, harddrive full, harddrive crash etc can eat your data. There is no undo yet.
Some bug can cause Wekan board to not load at all, requiring manual fixing of database content.
-## Roadmap
+## Roadmap and Demo
-[Roadmap Milestones](https://github.com/wekan/wekan/milestones)
+[Roadmap][roadmap_wekan] - Public read-only board at Wekan demo.
[Developer Documentation][dev_docs]
- There is many companies and individuals contributing code to Wekan, to add features and bugfixes
[many times a day](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md).
- [Please add Add new Feature Requests and Bug Reports immediately](https://github.com/wekan/wekan/issues).
-- [Commercial Support](https://wekan.team).
-- [Bounties](https://wekan.team/bounties/index.html).
+- [Commercial Support](https://wekan.team/commercial-support/).
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.
-## Demo
-
-[Wekan demo][roadmap_wefork]
-
## Screenshot
[More screenshots at Features page](https://github.com/wekan/wekan/wiki/Features)
-[![Screenshot of Wekan][screenshot_wefork]][roadmap_wefork]
-
-## Stable
-
-- master+devel branch. At release, devel is merged to master.
-- Receives fixes and features that have been tested at edge that they work.
-- If you want automatic updates, [use Snap](https://github.com/wekan/wekan-snap/wiki/Install).
-- If you want to test before update, [use Docker quay.io release tags](https://github.com/wekan/wekan/wiki/Docker).
-
-## Edge
-
-- edge branch. All new fixes and features are added to here first. [Testing Edge](https://github.com/wekan/wekan-snap/wiki/Snap-Developer-Docs).
+[![Screenshot of Wekan][screenshot_wekan]][roadmap_wekan]
## License
@@ -117,14 +100,11 @@ with [Meteor](https://www.meteor.com).
[platforms]: https://github.com/wekan/wekan/wiki/Platforms
[dev_docs]: https://github.com/wekan/wekan/wiki/Developer-Documentation
-[screenshot_wekan]: http://i.imgur.com/cI4jW2h.png
-[screenshot_wefork]: https://wekan.github.io/wekan-markdown.png
+[screenshot_wekan]: https://wekan.github.io/wekan-markdown.png
[features]: https://github.com/wekan/wekan/wiki/Features
-[integrations]: https://github.com/wekan/wekan/wiki/Integrations
-[roadmap_wekan]: http://try.wekan.io/b/MeSsFJaSqeuo9M6bs/wekan-roadmap
-[roadmap_wefork]: https://wekan.indie.host/b/t2YaGmyXgNkppcFBq/wekan-fork-roadmap
+[roadmap_wekan]: https://boards.wekan.team/b/D2SzJKZDS4Z48yeQH/wekan-open-source-kanban-board-with-mit-license
+[wekan_issues]: https://github.com/wekan/wekan/issues
[wekan_issues]: https://github.com/wekan/wekan/issues
-[wefork_issues]: https://github.com/wefork/wekan/issues
[docker_image]: https://hub.docker.com/r/wekanteam/wekan/
[travis_badge]: https://travis-ci.org/wekan/wekan.svg?branch=devel
[travis_status]: https://travis-ci.org/wekan/wekan
diff --git a/Stackerfile.yml b/Stackerfile.yml
index 437d0a97..77c6c328 100644
--- a/Stackerfile.yml
+++ b/Stackerfile.yml
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
-appVersion: "v3.25.0"
+appVersion: "v3.55.0"
files:
userUploads:
- README.md
diff --git a/client/components/activities/activities.js b/client/components/activities/activities.js
index 05149826..b082273a 100644
--- a/client/components/activities/activities.js
+++ b/client/components/activities/activities.js
@@ -85,7 +85,7 @@ BlazeComponent.extendComponent({
const lastLabel = Boards.findOne(Session.get('currentBoard')).getLabelById(
lastLabelId,
);
- if (lastLabel.name === undefined || lastLabel.name === '') {
+ if (lastLabel && (lastLabel.name === undefined || lastLabel.name === '')) {
return lastLabel.color;
} else {
return lastLabel.name;
diff --git a/client/components/boards/boardBody.js b/client/components/boards/boardBody.js
index 6cff5ab1..41b6f4ef 100644
--- a/client/components/boards/boardBody.js
+++ b/client/components/boards/boardBody.js
@@ -89,7 +89,6 @@ BlazeComponent.extendComponent({
helper.append(list.clone());
return helper;
},
- handle: '.js-swimlane-header',
items: '.swimlane:not(.placeholder)',
placeholder: 'swimlane placeholder',
distance: 7,
@@ -193,11 +192,42 @@ BlazeComponent.extendComponent({
// ugly touch event hotfix
enableClickOnTouch('.js-swimlane:not(.placeholder)');
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+
+ this.autorun(() => {
+ let showDesktopDragHandles = false;
+ currentUser = Meteor.user();
+ if (currentUser) {
+ showDesktopDragHandles = (currentUser.profile || {})
+ .showDesktopDragHandles;
+ } else if (cookies.has('showDesktopDragHandles')) {
+ showDesktopDragHandles = true;
+ } else {
+ showDesktopDragHandles = false;
+ }
+ if (
+ Utils.isMiniScreen()
+ || (!Utils.isMiniScreen() && showDesktopDragHandles)
+ ) {
+ $swimlanesDom.sortable({
+ handle: '.js-swimlane-header-handle',
+ });
+ } else {
+ $swimlanesDom.sortable({
+ handle: '.swimlane-header',
+ });
+ }
+
+ // Disable drag-dropping if the current user is not a board member or is comment only
+ $swimlanesDom.sortable('option', 'disabled', !userIsMember());
+ });
+
function userIsMember() {
return (
- Meteor.user() &&
- Meteor.user().isBoardMember() &&
- !Meteor.user().isCommentOnly()
+ Meteor.user()
+ && Meteor.user().isBoardMember()
+ && !Meteor.user().isCommentOnly()
);
}
@@ -210,21 +240,36 @@ BlazeComponent.extendComponent({
},
isViewSwimlanes() {
- const currentUser = Meteor.user();
- if (!currentUser) return false;
- return (currentUser.profile || {}).boardView === 'board-view-swimlanes';
+ currentUser = Meteor.user();
+ if (currentUser) {
+ return (currentUser.profile || {}).boardView === 'board-view-swimlanes';
+ } else {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ return cookies.get('boardView') === 'board-view-swimlanes';
+ }
},
isViewLists() {
- const currentUser = Meteor.user();
- if (!currentUser) return true;
- return (currentUser.profile || {}).boardView === 'board-view-lists';
+ currentUser = Meteor.user();
+ if (currentUser) {
+ return (currentUser.profile || {}).boardView === 'board-view-lists';
+ } else {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ return cookies.get('boardView') === 'board-view-lists';
+ }
},
isViewCalendar() {
- const currentUser = Meteor.user();
- if (!currentUser) return false;
- return (currentUser.profile || {}).boardView === 'board-view-cal';
+ currentUser = Meteor.user();
+ if (currentUser) {
+ return (currentUser.profile || {}).boardView === 'board-view-cal';
+ } else {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ return cookies.get('boardView') === 'board-view-cal';
+ }
},
openNewListForm() {
@@ -261,16 +306,16 @@ BlazeComponent.extendComponent({
scrollLeft(position = 0) {
const swimlanes = this.$('.js-swimlanes');
- swimlanes &&
- swimlanes.animate({
+ swimlanes
+ && swimlanes.animate({
scrollLeft: position,
});
},
scrollTop(position = 0) {
const swimlanes = this.$('.js-swimlanes');
- swimlanes &&
- swimlanes.animate({
+ swimlanes
+ && swimlanes.animate({
scrollTop: position,
});
},
@@ -309,25 +354,46 @@ BlazeComponent.extendComponent({
events(start, end, timezone, callback) {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
const events = [];
+ const pushEvent = function(card, title, start, end, extraCls) {
+ start = start || card.startAt;
+ end = end || card.endAt;
+ title = title || card.title;
+ const className =
+ (extraCls ? `${extraCls} ` : '')
+ + (card.color ? `calendar-event-${card.color}` : '');
+ events.push({
+ id: card._id,
+ title,
+ start,
+ end: end || card.endAt,
+ allDay:
+ Math.abs(end.getTime() - start.getTime()) / 1000 === 24 * 3600,
+ url: FlowRouter.url('card', {
+ boardId: currentBoard._id,
+ slug: currentBoard.slug,
+ cardId: card._id,
+ }),
+ className,
+ });
+ };
currentBoard
.cardsInInterval(start.toDate(), end.toDate())
.forEach(function(card) {
- events.push({
- id: card._id,
- title: card.title,
- start: card.startAt,
- end: card.endAt,
- allDay:
- Math.abs(card.endAt.getTime() - card.startAt.getTime()) /
- 1000 ===
- 24 * 3600,
- url: FlowRouter.url('card', {
- boardId: currentBoard._id,
- slug: currentBoard.slug,
- cardId: card._id,
- }),
- });
+ pushEvent(card);
+ });
+ currentBoard
+ .cardsDueInBetween(start.toDate(), end.toDate())
+ .forEach(function(card) {
+ pushEvent(
+ card,
+ `${card.title} ${TAPi18n.__('card-due')}`,
+ card.dueAt,
+ new Date(card.dueAt.getTime() + 36e5),
+ );
});
+ events.sort(function(first, second) {
+ return first.id > second.id ? 1 : -1;
+ });
callback(events);
},
eventResize(event, delta, revertFunc) {
@@ -360,8 +426,13 @@ BlazeComponent.extendComponent({
};
},
isViewCalendar() {
- const currentUser = Meteor.user();
- if (!currentUser) return false;
- return (currentUser.profile || {}).boardView === 'board-view-cal';
+ currentUser = Meteor.user();
+ if (currentUser) {
+ return (currentUser.profile || {}).boardView === 'board-view-cal';
+ } else {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ return cookies.get('boardView') === 'board-view-cal';
+ }
},
}).register('calendarView');
diff --git a/client/components/boards/boardBody.styl b/client/components/boards/boardBody.styl
index dfaaa050..32207d82 100644
--- a/client/components/boards/boardBody.styl
+++ b/client/components/boards/boardBody.styl
@@ -53,3 +53,81 @@ position()
padding: 0 0px 0px 0
overflow-x: hidden
overflow-y: auto
+
+calendar-event-color(background, borderColor, color...)
+ background: background !important
+ border-color: borderColor
+ if color
+ color: color !important //overwrite text for better visibility
+
+.calendar-event-green
+ calendar-event-color(#3cb500, #2a8000, #ffffff) //White text for better visibility
+
+.calendar-event-yellow
+ calendar-event-color(#fad900, #c7ac00, #000) //Black text for better visibility
+
+.calendar-event-orange
+ calendar-event-color(#ff9f19, #cc7c14, #000) //Black text for better visibility
+
+.calendar-event-red
+ calendar-event-color(#eb4646, #b83737, #ffffff) //White text for better visibility
+
+.calendar-event-purple
+ calendar-event-color(#a632db, #7d26a6, #ffffff) //White text for better visibility
+
+.calendar-event-blue
+ calendar-event-color(#0079bf, #005a8a, #ffffff) //White text for better visibility
+
+.calendar-event-pink
+ calendar-event-color(#ff78cb, #cc62a3, #000) //Black text for better visibility
+
+.calendar-event-sky
+ calendar-event-color(#00c2e0, #0094ab, #ffffff) //White text for better visibility
+
+.calendar-event-black
+ calendar-event-color(#4d4d4d, #1a1a1a, #ffffff) //White text for better visibility
+
+.calendar-event-lime
+ calendar-event-color(#51e898, #3eb375, #000) //Black text for better visibility
+
+.calendar-event-silver
+ calendar-event-color(#c0c0c0, #8c8c8c, #000) //Black text for better visibility
+
+.calendar-event-peachpuff
+ calendar-event-color(#ffdab9, #ccaf95, #000) //Black text for better visibility
+
+.calendar-event-crimson
+ calendar-event-color(#dc143c, #a8112f, #ffffff) //White text for better visibility
+
+.calendar-event-plum
+ calendar-event-color(#dda0dd, #a87ba8, #000) //Black text for better visibility
+
+.calendar-event-darkgreen
+ calendar-event-color(#006400, #003000, #ffffff) //White text for better visibility
+
+.calendar-event-slateblue
+ calendar-event-color(#6a5acd, #4f4399, #ffffff) //White text for better visibility
+
+.calendar-event-magenta
+ calendar-event-color(#ff00ff, #cc00cc, #ffffff) //White text for better visibility
+
+.calendar-event-gold
+ calendar-event-color(#ffd700, #ccaa00, #000) //Black text for better visibility
+
+.calendar-event-navy
+ calendar-event-color(#000080, #000033, #ffffff) //White text for better visibility
+
+.calendar-event-gray
+ calendar-event-color(#808080, #333333, #ffffff) //White text for better visibility
+
+.calendar-event-saddlebrown
+ calendar-event-color(#8b4513, #572b0c, #ffffff) //White text for better visibility
+
+.calendar-event-paleturquoise
+ calendar-event-color(#afeeee, #8ababa, #000) //Black text for better visibility
+
+.calendar-event-mistyrose
+ calendar-event-color(#ffe4e1, #ccb8b6, #000) //Black text for better visibility
+
+.calendar-event-indigo
+ calendar-event-color(#4b0082, #2b004d, #ffffff) //White text for better visibility
diff --git a/client/components/boards/boardHeader.jade b/client/components/boards/boardHeader.jade
index fe533f95..39221778 100644
--- a/client/components/boards/boardHeader.jade
+++ b/client/components/boards/boardHeader.jade
@@ -77,6 +77,11 @@ template(name="boardHeaderBar")
i.fa.fa-archive
span {{_ 'archives'}}
+ //if showSort
+ // a.board-header-btn.js-open-sort-view(title="{{_ 'sort-desc'}}")
+ // i.fa(class="{{directionClass}}")
+ // span {{_ 'sort'}}{{_ listSortShortDesc}}
+
a.board-header-btn.js-open-filter-view(
title="{{#if Filter.isActive}}{{_ 'filter-on-desc'}}{{else}}{{_ 'filter'}}{{/if}}"
class="{{#if Filter.isActive}}emphasis{{/if}}")
@@ -85,15 +90,6 @@ template(name="boardHeaderBar")
if Filter.isActive
a.board-header-btn-close.js-filter-reset(title="{{_ 'filter-clear'}}")
i.fa.fa-times-thin
-
- if currentUser.isAdmin
- a.board-header-btn.js-open-rules-view(title="{{_ 'rules'}}")
- i.fa.fa-magic
- span {{_ 'rules'}}
- else if currentUser.isBoardAdmin
- a.board-header-btn.js-open-rules-view(title="{{_ 'rules'}}")
- i.fa.fa-magic
- span {{_ 'rules'}}
a.board-header-btn.js-open-search-view(title="{{_ 'search'}}")
i.fa.fa-search
@@ -102,8 +98,19 @@ template(name="boardHeaderBar")
unless currentBoard.isTemplatesBoard
a.board-header-btn.js-toggle-board-view(
title="{{_ 'board-view'}}")
- i.fa.fa-th-large
- span {{#if currentUser.profile.boardView}}{{_ currentUser.profile.boardView}}{{else}}{{_ 'board-view-lists'}}{{/if}}
+ i.fa.fa-caret-down
+ if $eq boardView 'board-view-lists'
+ i.fa.fa-trello
+ if $eq boardView 'board-view-swimlanes'
+ i.fa.fa-th-large
+ // unless collapseSwimlane
+ // i.fa.fa-th-large
+ // if collapseSwimlane
+ // i.fa.fa-play
+ if $eq boardView 'board-view-cal'
+ i.fa.fa-calendar
+ span {{#if boardView}}{{_ boardView}}{{else}}{{_ 'board-view-lists'}}{{/if}}
+ //span {{#if collapseSwimlane}}{{_ 'board-view-collapse'}}{{else}}{{#if boardView}}{{_ boardView}}{{else}}{{_ 'board-view-lists'}}{{/if}}{{/if}}
if canModifyBoard
a.board-header-btn.js-multiselection-activate(
@@ -168,6 +175,51 @@ template(name="boardChangeWatchPopup")
i.fa.fa-check
span.sub-name {{_ 'muted-info'}}
+template(name="boardChangeViewPopup")
+ ul.pop-over-list
+ li
+ with "board-view-lists"
+ a.js-open-lists-view
+ i.fa.fa-trello.colorful
+ | {{_ 'board-view-lists'}}
+ if $eq Utils.boardView "board-view-lists"
+ i.fa.fa-check
+ li
+ with "board-view-swimlanes"
+ a.js-open-swimlanes-view
+ i.fa.fa-th-large.colorful
+ | {{_ 'board-view-swimlanes'}}
+ if $eq Utils.boardView "board-view-swimlanes"
+ i.fa.fa-check
+ //li
+ // with "board-view-collapse"
+ // a.js-open-collapse-view
+ // i.fa.fa-play.colorful
+ // | {{_ 'board-view-collapse'}}
+ // if $eq Utils.boardView "board-view-collapse"
+ // i.fa.fa-check
+ li
+ with "board-view-cal"
+ a.js-open-cal-view
+ i.fa.fa-calendar.colorful
+ | {{_ 'board-view-cal'}}
+ if $eq Utils.boardView "board-view-cal"
+ i.fa.fa-check
+ if currentUser.isAdmin
+ hr
+ li
+ with "board-view-rules"
+ a.js-open-rules-view(title="{{_ 'rules'}}")
+ i.fa.fa-magic
+ | {{_ 'rules'}}
+ else if currentUser.isBoardAdmin
+ hr
+ li
+ with "board-view-rules"
+ a.js-open-rules-view(title="{{_ 'rules'}}")
+ i.fa.fa-magic
+ | {{_ 'rules'}}
+
template(name="createBoard")
form
label
@@ -194,6 +246,20 @@ template(name="createBoard")
| /
a.js-board-template {{_ 'template'}}
+//template(name="listsortPopup")
+// h2
+// | {{_ 'list-sort-by'}}
+// hr
+// ul.pop-over-list
+// each value in allowedSortValues
+// li
+// a.js-sort-by(name="{{value.name}}")
+// if $eq sortby value.name
+// i(class="fa {{Direction}}")
+// | {{_ value.label }}{{_ value.shortLabel}}
+// if $eq sortby value.name
+// i(class="fa fa-check")
+
template(name="boardChangeTitlePopup")
form
label
diff --git a/client/components/boards/boardHeader.js b/client/components/boards/boardHeader.js
index cb84c233..ffbb9b72 100644
--- a/client/components/boards/boardHeader.js
+++ b/client/components/boards/boardHeader.js
@@ -1,3 +1,7 @@
+/*
+const DOWNCLS = 'fa-sort-down';
+const UPCLS = 'fa-sort-up';
+*/
Template.boardMenuPopup.events({
'click .js-rename-board': Popup.open('boardChangeTitle'),
'click .js-custom-fields'() {
@@ -80,7 +84,27 @@ BlazeComponent.extendComponent({
const currentBoard = Boards.findOne(Session.get('currentBoard'));
return currentBoard && currentBoard.stars >= 2;
},
-
+ /*
+ showSort() {
+ return Meteor.user().hasSortBy();
+ },
+ directionClass() {
+ return this.currentDirection() === -1 ? DOWNCLS : UPCLS;
+ },
+ changeDirection() {
+ const direction = 0 - this.currentDirection() === -1 ? '-' : '';
+ Meteor.call('setListSortBy', direction + this.currentListSortBy());
+ },
+ currentDirection() {
+ return Meteor.user().getListSortByDirection();
+ },
+ currentListSortBy() {
+ return Meteor.user().getListSortBy();
+ },
+ listSortShortDesc() {
+ return `list-label-short-${this.currentListSortBy()}`;
+ },
+ */
events() {
return [
{
@@ -94,30 +118,25 @@ BlazeComponent.extendComponent({
'click .js-open-archived-board'() {
Modal.open('archivedBoards');
},
- 'click .js-toggle-board-view'() {
- const currentUser = Meteor.user();
- if (
- (currentUser.profile || {}).boardView === 'board-view-swimlanes'
- ) {
- currentUser.setBoardView('board-view-cal');
- } else if (
- (currentUser.profile || {}).boardView === 'board-view-lists'
- ) {
- currentUser.setBoardView('board-view-swimlanes');
- } else if (
- (currentUser.profile || {}).boardView === 'board-view-cal'
- ) {
- currentUser.setBoardView('board-view-lists');
- } else {
- currentUser.setBoardView('board-view-swimlanes');
- }
- },
+ 'click .js-toggle-board-view': Popup.open('boardChangeView'),
'click .js-toggle-sidebar'() {
Sidebar.toggle();
},
'click .js-open-filter-view'() {
Sidebar.setView('filter');
},
+ /*
+ 'click .js-open-sort-view'(evt) {
+ const target = evt.target;
+ if (target.tagName === 'I') {
+ // click on the text, popup choices
+ this.changeDirection();
+ } else {
+ // change the sort order
+ Popup.open('listsort')(evt);
+ }
+ },
+ */
'click .js-filter-reset'(event) {
event.stopPropagation();
Sidebar.setView();
@@ -126,9 +145,6 @@ BlazeComponent.extendComponent({
'click .js-open-search-view'() {
Sidebar.setView('search');
},
- 'click .js-open-rules-view'() {
- Modal.openWide('rulesMain');
- },
'click .js-multiselection-activate'() {
const currentCard = Session.get('currentCard');
MultiSelection.activate();
@@ -156,6 +172,40 @@ Template.boardHeaderBar.helpers({
!Meteor.user().isCommentOnly()
);
},
+ boardView() {
+ return Utils.boardView();
+ },
+ //collapseSwimlane() {
+ // import { Cookies } from 'meteor/ostrio:cookies';
+ // const cookies = new Cookies();
+ // if (cookies.has('collapseSwimlane')) {
+ // return true;
+ // } else {
+ // return false;
+ // }
+ //},
+});
+
+Template.boardChangeViewPopup.events({
+ 'click .js-open-lists-view'() {
+ Utils.setBoardView('board-view-lists');
+ Popup.close();
+ },
+ 'click .js-open-swimlanes-view'() {
+ Utils.setBoardView('board-view-swimlanes');
+ Popup.close();
+ },
+ //'click .js-open-collapse-view'() {
+ // Utils.setBoardView('board-view-collapse');
+ //Popup.close();
+ 'click .js-open-cal-view'() {
+ Utils.setBoardView('board-view-cal');
+ Popup.close();
+ },
+ 'click .js-open-rules-view'() {
+ Modal.openWide('rulesMain');
+ Popup.close();
+ },
});
const CreateBoard = BlazeComponent.extendComponent({
@@ -277,3 +327,75 @@ BlazeComponent.extendComponent({
];
},
}).register('boardChangeWatchPopup');
+
+/*
+BlazeComponent.extendComponent({
+ onCreated() {
+ //this.sortBy = new ReactiveVar();
+ ////this.sortDirection = new ReactiveVar();
+ //this.setSortBy();
+ this.downClass = DOWNCLS;
+ this.upClass = UPCLS;
+ },
+ allowedSortValues() {
+ const types = [];
+ const pushed = {};
+ Meteor.user()
+ .getListSortTypes()
+ .forEach(type => {
+ const key = type.replace(/^-/, '');
+ if (pushed[key] === undefined) {
+ types.push({
+ name: key,
+ label: `list-label-${key}`,
+ shortLabel: `list-label-short-${key}`,
+ });
+ pushed[key] = 1;
+ }
+ });
+ return types;
+ },
+ Direction() {
+ return Meteor.user().getListSortByDirection() === -1
+ ? this.downClass
+ : this.upClass;
+ },
+ sortby() {
+ return Meteor.user().getListSortBy();
+ },
+
+ setSortBy(type = null) {
+ const user = Meteor.user();
+ if (type === null) {
+ type = user._getListSortBy();
+ } else {
+ let value = '';
+ if (type.map) {
+ // is an array
+ value = (type[1] === -1 ? '-' : '') + type[0];
+ }
+ Meteor.call('setListSortBy', value);
+ }
+ //this.sortBy.set(type[0]);
+ //this.sortDirection.set(type[1]);
+ },
+
+ events() {
+ return [
+ {
+ 'click .js-sort-by'(evt) {
+ evt.preventDefault();
+ const target = evt.target;
+ const sortby = target.getAttribute('name');
+ const down = !!target.querySelector(`.${this.upClass}`);
+ const direction = down ? -1 : 1;
+ this.setSortBy([sortby, direction]);
+ if (Utils.isMiniScreen) {
+ Popup.close();
+ }
+ },
+ },
+ ];
+ },
+}).register('listsortPopup');
+*/
diff --git a/client/components/cards/attachments.js b/client/components/cards/attachments.js
index 843f1eb7..e4439155 100644
--- a/client/components/cards/attachments.js
+++ b/client/components/cards/attachments.js
@@ -131,6 +131,8 @@ Template.previewClipboardImagePopup.onRendered(() => {
direct(results);
},
});
+ } else {
+ direct(results);
}
}
};
diff --git a/client/components/cards/cardDate.js b/client/components/cards/cardDate.js
index 91205f1c..cb54b033 100644
--- a/client/components/cards/cardDate.js
+++ b/client/components/cards/cardDate.js
@@ -105,7 +105,7 @@ Template.dateBadge.helpers({
// editCardReceivedDatePopup
(class extends DatePicker {
onCreated() {
- super.onCreated();
+ super.onCreated(moment().format('YYYY-MM-DD HH:mm'));
this.data().getReceived() &&
this.date.set(moment(this.data().getReceived()));
}
@@ -122,7 +122,7 @@ Template.dateBadge.helpers({
// editCardStartDatePopup
(class extends DatePicker {
onCreated() {
- super.onCreated();
+ super.onCreated(moment().format('YYYY-MM-DD HH:mm'));
this.data().getStart() && this.date.set(moment(this.data().getStart()));
}
@@ -148,7 +148,7 @@ Template.dateBadge.helpers({
// editCardDueDatePopup
(class extends DatePicker {
onCreated() {
- super.onCreated();
+ super.onCreated('1970-01-01 17:00:00');
this.data().getDue() && this.date.set(moment(this.data().getDue()));
}
@@ -171,7 +171,7 @@ Template.dateBadge.helpers({
// editCardEndDatePopup
(class extends DatePicker {
onCreated() {
- super.onCreated();
+ super.onCreated(moment().format('YYYY-MM-DD HH:mm'));
this.data().getEnd() && this.date.set(moment(this.data().getEnd()));
}
@@ -237,7 +237,7 @@ class CardReceivedDate extends CardDate {
const theDate = this.date.get();
// if dueAt, endAt and startAt exist & are > receivedAt, receivedAt doesn't need to be flagged
if (
- (startAt && theDate.isAfter(dueAt)) ||
+ (startAt && theDate.isAfter(startAt)) ||
(endAt && theDate.isAfter(endAt)) ||
(dueAt && theDate.isAfter(dueAt))
)
@@ -344,9 +344,9 @@ class CardEndDate extends CardDate {
let classes = 'end-date' + ' ';
const dueAt = this.data().getDue();
const theDate = this.date.get();
- if (theDate.diff(dueAt, 'days') >= 2) classes += 'long-overdue';
- else if (theDate.diff(dueAt, 'days') >= 0) classes += 'due';
- else if (theDate.diff(dueAt, 'days') >= -2) classes += 'almost-due';
+ if (!dueAt) classes += '';
+ else if (theDate.isBefore(dueAt)) classes += 'current';
+ else if (theDate.isAfter(dueAt)) classes += 'due';
return classes;
}
diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade
index 13b6bd13..2b4f44b9 100644
--- a/client/components/cards/cardDetails.jade
+++ b/client/components/cards/cardDetails.jade
@@ -4,9 +4,14 @@ template(name="cardDetails")
+inlinedForm(classNames="js-card-details-title")
+editCardTitleForm
else
- a.fa.fa-times-thin.close-card-details.js-close-card-details
- if currentUser.isBoardMember
- a.fa.fa-navicon.card-details-menu.js-open-card-details-menu
+ unless isMiniScreen
+ a.fa.fa-times-thin.close-card-details.js-close-card-details
+ if currentUser.isBoardMember
+ a.fa.fa-navicon.card-details-menu.js-open-card-details-menu
+ if isMiniScreen
+ a.fa.fa-times-thin.close-card-details-mobile-web.js-close-card-details
+ if currentUser.isBoardMember
+ a.fa.fa-navicon.card-details-menu-mobile-web.js-open-card-details-menu
h2.card-details-title.js-card-title(
class="{{#if canModifyCard}}js-open-inlined-form is-editable{{/if}}")
+viewer
@@ -73,6 +78,16 @@ template(name="cardDetails")
a.member.add-member.card-details-item-add-button.js-add-members(title="{{_ 'card-members-title'}}")
i.fa.fa-plus
+ .card-details-item.card-details-item-assignees
+ h3.card-details-item-title {{_ 'assignee'}}
+ each getAssignees
+ +userAvatarAssignee(userId=this cardId=../_id)
+ | {{! XXX Hack to hide syntaxic coloration /// }}
+ if canModifyCard
+ unless assigneeSelected
+ a.assignee.add-assignee.card-details-item-add-button.js-add-assignees(title="{{_ 'assignee'}}")
+ i.fa.fa-plus
+
.card-details-item.card-details-item-labels
h3.card-details-item-title {{_ 'labels'}}
a(class="{{#if canModifyCard}}js-add-labels{{else}}is-disabled{{/if}}" title="{{_ 'card-labels-title'}}")
@@ -296,6 +311,54 @@ template(name="cardMembersPopup")
if isCardMember
i.fa.fa-check
+template(name="cardAssigneesPopup")
+ ul.pop-over-list.js-card-assignee-list
+ each board.activeMembers
+ li.item(class="{{#if isCardAssignee}}active{{/if}}")
+ a.name.js-select-assignee(href="#")
+ +userAvatar(userId=user._id)
+ span.full-name
+ = user.profile.fullname
+ | (<span class="username">{{ user.username }}</span>)
+ if isCardAssignee
+ i.fa.fa-check
+
+template(name="userAvatarAssignee")
+ a.assignee.js-assignee(title="{{userData.profile.fullname}} ({{userData.username}})")
+ if userData.profile.avatarUrl
+ img.avatar.avatar-image(src="{{userData.profile.avatarUrl}}")
+ else
+ +userAvatarAssigneeInitials(userId=userData._id)
+
+ if showStatus
+ span.assignee-presence-status(class=presenceStatusClassName)
+ span.member-type(class=memberType)
+
+ unless isSandstorm
+ if showEdit
+ if $eq currentUser._id userData._id
+ a.edit-avatar.js-change-avatar
+ i.fa.fa-pencil
+
+template(name="cardAssigneePopup")
+ .board-assignee-menu
+ .mini-profile-info
+ +userAvatar(userId=user._id showEdit=true)
+ .info
+ h3= user.profile.fullname
+ p.quiet @{{ user.username }}
+ ul.pop-over-list
+ if currentUser.isNotCommentOnly
+ li: a.js-remove-assignee {{_ 'remove-member-from-card'}}
+
+ if $eq currentUser._id user._id
+ with currentUser
+ li: a.js-edit-profile {{_ 'edit-profile'}}
+
+template(name="userAvatarAssigneeInitials")
+ svg.avatar.avatar-assignee-initials(viewBox="0 0 {{viewPortWidth}} 15")
+ text(x="50%" y="13" text-anchor="middle")= initials
+
template(name="cardMorePopup")
p.quiet
span.clearfix
diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js
index cd8813f5..7bb54223 100644
--- a/client/components/cards/cardDetails.js
+++ b/client/components/cards/cardDetails.js
@@ -121,11 +121,6 @@ BlazeComponent.extendComponent({
// Send Webhook but not create Activities records ---
const card = this.currentData();
const userId = Meteor.userId();
- //console.log(`userId: ${userId}`);
- //console.log(`cardId: ${card._id}`);
- //console.log(`boardId: ${card.boardId}`);
- //console.log(`listId: ${card.listId}`);
- //console.log(`swimlaneId: ${card.swimlaneId}`);
const params = {
userId,
cardId: card._id,
@@ -134,16 +129,25 @@ BlazeComponent.extendComponent({
user: Meteor.user().username,
url: '',
};
- //console.log('looking for integrations...');
+
const integrations = Integrations.find({
- boardId: card.boardId,
- type: 'outgoing-webhooks',
+ boardId: { $in: [card.boardId, Integrations.Const.GLOBAL_WEBHOOK_ID] },
enabled: true,
activities: { $in: ['CardDetailsRendered', 'all'] },
}).fetch();
- //console.log(`Investigation length: ${integrations.length}`);
+
if (integrations.length > 0) {
- Meteor.call('outgoingWebhooks', integrations, 'CardSelected', params);
+ integrations.forEach(integration => {
+ Meteor.call(
+ 'outgoingWebhooks',
+ integration,
+ 'CardSelected',
+ params,
+ () => {
+ return;
+ },
+ );
+ });
}
//-------------
}
@@ -309,6 +313,8 @@ BlazeComponent.extendComponent({
},
'click .js-member': Popup.open('cardMember'),
'click .js-add-members': Popup.open('cardMembers'),
+ 'click .js-assignee': Popup.open('cardAssignee'),
+ 'click .js-add-assignees': Popup.open('cardAssignees'),
'click .js-add-labels': Popup.open('cardLabels'),
'click .js-received-date': Popup.open('editCardReceivedDate'),
'click .js-start-date': Popup.open('editCardStartDate'),
@@ -321,6 +327,19 @@ BlazeComponent.extendComponent({
parentComponent.showOverlay.set(true);
parentComponent.mouseHasEnterCardDetails = true;
},
+ 'mousedown .js-card-details'() {
+ Session.set('cardDetailsIsDragging', false);
+ Session.set('cardDetailsIsMouseDown', true);
+ },
+ 'mousemove .js-card-details'() {
+ if (Session.get('cardDetailsIsMouseDown')) {
+ Session.set('cardDetailsIsDragging', true);
+ }
+ },
+ 'mouseup .js-card-details'() {
+ Session.set('cardDetailsIsDragging', false);
+ Session.set('cardDetailsIsMouseDown', false);
+ },
'click #toggleButton'() {
Meteor.call('toggleSystemMessages');
},
@@ -329,6 +348,58 @@ BlazeComponent.extendComponent({
},
}).register('cardDetails');
+Template.cardDetails.helpers({
+ userData() {
+ // We need to handle a special case for the search results provided by the
+ // `matteodem:easy-search` package. Since these results gets published in a
+ // separate collection, and not in the standard Meteor.Users collection as
+ // expected, we use a component parameter ("property") to distinguish the
+ // two cases.
+ const userCollection = this.esSearch ? ESSearchResults : Users;
+ return userCollection.findOne(this.userId, {
+ fields: {
+ profile: 1,
+ username: 1,
+ },
+ });
+ },
+
+ assigneeSelected() {
+ if (this.getAssignees().length === 0) {
+ return false;
+ } else {
+ return true;
+ }
+ },
+
+ memberType() {
+ const user = Users.findOne(this.userId);
+ return user && user.isBoardAdmin() ? 'admin' : 'normal';
+ },
+
+ presenceStatusClassName() {
+ const user = Users.findOne(this.userId);
+ const userPresence = presences.findOne({ userId: this.userId });
+ if (user && user.isInvitedTo(Session.get('currentBoard'))) return 'pending';
+ else if (!userPresence) return 'disconnected';
+ else if (Session.equals('currentBoard', userPresence.state.currentBoardId))
+ return 'active';
+ else return 'idle';
+ },
+});
+
+Template.userAvatarAssigneeInitials.helpers({
+ initials() {
+ const user = Users.findOne(this.userId);
+ return user && user.getInitials();
+ },
+
+ viewPortWidth() {
+ const user = Users.findOne(this.userId);
+ return ((user && user.getInitials().length) || 1) * 12;
+ },
+});
+
// We extends the normal InlinedForm component to support UnsavedEdits draft
// feature.
(class extends InlinedForm {
@@ -386,6 +457,7 @@ Template.cardDetailsActionsPopup.helpers({
Template.cardDetailsActionsPopup.events({
'click .js-members': Popup.open('cardMembers'),
+ 'click .js-assignees': Popup.open('cardAssignees'),
'click .js-labels': Popup.open('cardLabels'),
'click .js-attachments': Popup.open('cardAttachments'),
'click .js-custom-fields': Popup.open('cardCustomFields'),
@@ -777,7 +849,14 @@ BlazeComponent.extendComponent({
EscapeActions.register(
'detailsPane',
() => {
- Utils.goBoardId(Session.get('currentBoard'));
+ if (Session.get('cardDetailsIsDragging')) {
+ // Reset dragging status as the mouse landed outside the cardDetails template area and this will prevent a mousedown event from firing
+ Session.set('cardDetailsIsDragging', false);
+ Session.set('cardDetailsIsMouseDown', false);
+ } else {
+ // Prevent close card when the user is selecting text and moves the mouse cursor outside the card detail area
+ Utils.goBoardId(Session.get('currentBoard'));
+ }
},
() => {
return !Session.equals('currentCard', null);
@@ -786,3 +865,76 @@ EscapeActions.register(
noClickEscapeOn: '.js-card-details,.board-sidebar,#header',
},
);
+
+Template.cardAssigneesPopup.events({
+ 'click .js-select-assignee'(event) {
+ const card = Cards.findOne(Session.get('currentCard'));
+ const assigneeId = this.userId;
+ card.toggleAssignee(assigneeId);
+ event.preventDefault();
+ },
+});
+
+Template.cardAssigneesPopup.helpers({
+ isCardAssignee() {
+ const card = Template.parentData();
+ const cardAssignees = card.getAssignees();
+
+ return _.contains(cardAssignees, this.userId);
+ },
+
+ user() {
+ return Users.findOne(this.userId);
+ },
+});
+
+Template.cardAssigneePopup.helpers({
+ userData() {
+ // We need to handle a special case for the search results provided by the
+ // `matteodem:easy-search` package. Since these results gets published in a
+ // separate collection, and not in the standard Meteor.Users collection as
+ // expected, we use a component parameter ("property") to distinguish the
+ // two cases.
+ const userCollection = this.esSearch ? ESSearchResults : Users;
+ return userCollection.findOne(this.userId, {
+ fields: {
+ profile: 1,
+ username: 1,
+ },
+ });
+ },
+
+ memberType() {
+ const user = Users.findOne(this.userId);
+ return user && user.isBoardAdmin() ? 'admin' : 'normal';
+ },
+
+ presenceStatusClassName() {
+ const user = Users.findOne(this.userId);
+ const userPresence = presences.findOne({ userId: this.userId });
+ if (user && user.isInvitedTo(Session.get('currentBoard'))) return 'pending';
+ else if (!userPresence) return 'disconnected';
+ else if (Session.equals('currentBoard', userPresence.state.currentBoardId))
+ return 'active';
+ else return 'idle';
+ },
+
+ isCardAssignee() {
+ const card = Template.parentData();
+ const cardAssignees = card.getAssignees();
+
+ return _.contains(cardAssignees, this.userId);
+ },
+
+ user() {
+ return Users.findOne(this.userId);
+ },
+});
+
+Template.cardAssigneePopup.events({
+ 'click .js-remove-assignee'() {
+ Cards.findOne(this.cardId).unassignAssignee(this.userId);
+ Popup.close();
+ },
+ 'click .js-edit-profile': Popup.open('editProfile'),
+});
diff --git a/client/components/cards/cardDetails.styl b/client/components/cards/cardDetails.styl
index cd475072..3fc4d047 100644
--- a/client/components/cards/cardDetails.styl
+++ b/client/components/cards/cardDetails.styl
@@ -1,5 +1,80 @@
@import 'nib'
+// Assignee, code copied from wekan/client/users/userAvatar.styl
+
+avatar-radius = 50%
+
+.assignee
+ border-radius: 3px
+ display: block
+ position: relative
+ float: left
+ height: 30px
+ width: @height
+ margin: 0 4px 4px 0
+ cursor: pointer
+ user-select: none
+ z-index: 1
+ text-decoration: none
+ border-radius: avatar-radius
+
+ .avatar
+ overflow: hidden
+ border-radius: avatar-radius
+
+ &.avatar-assignee-initials
+ height: 70%
+ width: @height
+ padding: 15%
+ background-color: #dbdbdb
+ color: #444444
+ position: absolute
+
+ &.avatar-image
+ height: 100%
+ width: @height
+
+ .assignee-presence-status
+ background-color: #b3b3b3
+ border: 1px solid #fff
+ border-radius: 50%
+ height: 7px
+ width: @height
+ position: absolute
+ right: -1px
+ bottom: -1px
+ border: 1px solid white
+ z-index: 15
+
+ &.active
+ background: #64c464
+ border-color: #daf1da
+
+ &.idle
+ background: #e4e467
+ border-color: #f7f7d4
+
+ &.disconnected
+ background: #bdbdbd
+ border-color: #ededed
+
+ &.pending
+ background: #e44242
+ border-color: #f1dada
+
+
+
+ &.add-assignee
+ display: flex
+ align-items: center
+ justify-content: center
+ box-shadow: 0 0 0 2px darken(white, 25%) inset
+
+ &:hover, &.is-active
+ box-shadow: 0 0 0 2px darken(white, 60%) inset
+
+// Other card details
+
.card-details
padding: 0
flex-shrink: 0
@@ -32,7 +107,9 @@
border-bottom: 1px solid darken(white, 14%)
.close-card-details,
- .card-details-menu
+ .card-details-menu,
+ .close-card-details-mobile-web,
+ .card-details-menu-mobile-web
float: right
.close-card-details
@@ -40,10 +117,20 @@
padding: 5px
margin-right: -8px
+ .close-card-details-mobile-web
+ font-size: 24px
+ padding: 5px
+ margin-right: 40px
+
.card-details-menu
font-size: 17px
padding: 10px
+ .card-details-menu-mobile-web
+ font-size: 17px
+ padding: 10px
+ margin-right: 30px
+
.card-details-watch
font-size: 17px
padding-left: 7px
@@ -93,6 +180,7 @@
margin-right: 0
&.card-details-item-labels,
&.card-details-item-members,
+ &.card-details-item-assignees,
&.card-details-item-received,
&.card-details-item-start,
&.card-details-item-due,
diff --git a/client/components/cards/minicard.jade b/client/components/cards/minicard.jade
index 3806ce41..79672f8c 100644
--- a/client/components/cards/minicard.jade
+++ b/client/components/cards/minicard.jade
@@ -3,6 +3,13 @@ template(name="minicard")
class="{{#if isLinkedCard}}linked-card{{/if}}"
class="{{#if isLinkedBoard}}linked-board{{/if}}"
class="minicard-{{colorClass}}")
+ if isMiniScreen
+ .handle
+ .fa.fa-arrows
+ unless isMiniScreen
+ if showDesktopDragHandles
+ .handle
+ .fa.fa-arrows
if cover
.minicard-cover(style="background-image: url('{{cover.url}}');")
if labels
@@ -15,8 +22,6 @@ template(name="minicard")
if hiddenMinicardLabelText
.minicard-label(class="card-label-{{color}}" title="{{name}}")
.minicard-title
- .handle
- .fa.fa-arrows
if $eq 'prefix-with-full-path' currentBoard.presentParentTask
.parent-prefix
| {{ parentString ' > ' }}
@@ -53,6 +58,8 @@ template(name="minicard")
if getDue
.date
+minicardDueDate
+ if getEnd
+ +minicardEndDate
if getSpentTime
.date
+cardSpentTime
@@ -69,6 +76,12 @@ template(name="minicard")
+viewer
= trueValue
+ if getAssignees
+ .minicard-assignees.js-minicard-assignees
+ each getAssignees
+ +userAvatar(userId=this)
+ hr
+
if getMembers
.minicard-members.js-minicard-members
each getMembers
diff --git a/client/components/cards/minicard.js b/client/components/cards/minicard.js
index 4c25c11d..a9f92dec 100644
--- a/client/components/cards/minicard.js
+++ b/client/components/cards/minicard.js
@@ -18,7 +18,13 @@ BlazeComponent.extendComponent({
},
{
'click .js-toggle-minicard-label-text'() {
- Meteor.call('toggleMinicardLabelText');
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ if (cookies.has('hiddenMinicardLabelText')) {
+ cookies.remove('hiddenMinicardLabelText'); //true
+ } else {
+ cookies.set('hiddenMinicardLabelText', 'true'); //true
+ }
},
},
];
@@ -26,7 +32,32 @@ BlazeComponent.extendComponent({
}).register('minicard');
Template.minicard.helpers({
+ showDesktopDragHandles() {
+ currentUser = Meteor.user();
+ if (currentUser) {
+ return (currentUser.profile || {}).showDesktopDragHandles;
+ } else {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ if (cookies.has('showDesktopDragHandles')) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ },
hiddenMinicardLabelText() {
- return Meteor.user().hasHiddenMinicardLabelText();
+ currentUser = Meteor.user();
+ if (currentUser) {
+ return (currentUser.profile || {}).hiddenMinicardLabelText;
+ } else {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ if (cookies.has('hiddenMinicardLabelText')) {
+ return true;
+ } else {
+ return false;
+ }
+ }
},
});
diff --git a/client/components/cards/minicard.styl b/client/components/cards/minicard.styl
index c4172572..8607e118 100644
--- a/client/components/cards/minicard.styl
+++ b/client/components/cards/minicard.styl
@@ -105,7 +105,7 @@
right: 5px;
top: 5px;
display:none;
- @media only screen and (max-width: 1199px) {
+ @media only screen {
display:block;
}
.fa-arrows
@@ -160,9 +160,10 @@
padding-left: 0px
line-height: 12px
- .minicard-members
+ .minicard-members,
+ .minicard-assignees
float: right
- margin: 2px -8px -2px 0
+ margin: 2px -8px 12px 0
.member
float: right
@@ -170,10 +171,17 @@
height: 28px
width: @height
+ .assignee
+ float: right
+ border-radius: 50%
+ height: 28px
+ width: @height
+
+ .badges
margin-top: 10px
- .minicard-members:empty
+ .minicard-members:empty,
+ .minicard-assignees:empty
display: none
&.minicard-composer
diff --git a/client/components/lists/list.js b/client/components/lists/list.js
index c2b39be9..e58ea430 100644
--- a/client/components/lists/list.js
+++ b/client/components/lists/list.js
@@ -22,21 +22,15 @@ BlazeComponent.extendComponent({
function userIsMember() {
return (
- Meteor.user() &&
- Meteor.user().isBoardMember() &&
- !Meteor.user().isCommentOnly()
+ Meteor.user()
+ && Meteor.user().isBoardMember()
+ && !Meteor.user().isCommentOnly()
);
}
const itemsSelector = '.js-minicard:not(.placeholder, .js-card-composer)';
const $cards = this.$('.js-minicards');
- if (window.matchMedia('(max-width: 1199px)').matches) {
- $('.js-minicards').sortable({
- handle: '.handle',
- });
- }
-
$cards.sortable({
connectWith: '.js-minicards:not(.js-list-full)',
tolerance: 'pointer',
@@ -79,16 +73,15 @@ BlazeComponent.extendComponent({
const listId = Blaze.getData(ui.item.parents('.list').get(0))._id;
const currentBoard = Boards.findOne(Session.get('currentBoard'));
let swimlaneId = '';
- const boardView = (Meteor.user().profile || {}).boardView;
if (
- boardView === 'board-view-swimlanes' ||
- currentBoard.isTemplatesBoard()
+ Utils.boardView() === 'board-view-swimlanes'
+ || currentBoard.isTemplatesBoard()
)
swimlaneId = Blaze.getData(ui.item.parents('.swimlane').get(0))._id;
else if (
- boardView === 'board-view-lists' ||
- boardView === 'board-view-cal' ||
- !boardView
+ Utils.boardView() === 'board-view-lists'
+ || Utils.boardView() === 'board-view-cal'
+ || !Utils.boardView
)
swimlaneId = currentBoard.getDefaultSwimline()._id;
@@ -122,8 +115,32 @@ BlazeComponent.extendComponent({
// ugly touch event hotfix
enableClickOnTouch(itemsSelector);
- // Disable drag-dropping if the current user is not a board member or is comment only
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+
this.autorun(() => {
+ let showDesktopDragHandles = false;
+ currentUser = Meteor.user();
+ if (currentUser) {
+ showDesktopDragHandles = (currentUser.profile || {})
+ .showDesktopDragHandles;
+ } else if (cookies.has('showDesktopDragHandles')) {
+ showDesktopDragHandles = true;
+ } else {
+ showDesktopDragHandles = false;
+ }
+
+ if (!Utils.isMiniScreen() && showDesktopDragHandles) {
+ $cards.sortable({
+ handle: '.handle',
+ });
+ } else {
+ $cards.sortable({
+ handle: '.minicard',
+ });
+ }
+
+ // Disable drag-dropping if the current user is not a board member or is comment only
$cards.sortable('option', 'disabled', !userIsMember());
});
@@ -155,6 +172,23 @@ BlazeComponent.extendComponent({
},
}).register('list');
+Template.list.helpers({
+ showDesktopDragHandles() {
+ currentUser = Meteor.user();
+ if (currentUser) {
+ return (currentUser.profile || {}).showDesktopDragHandles;
+ } else {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ if (cookies.has('showDesktopDragHandles')) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ },
+});
+
Template.miniList.events({
'click .js-select-list'() {
const listId = this._id;
diff --git a/client/components/lists/list.styl b/client/components/lists/list.styl
index 81938c1a..27cf678c 100644
--- a/client/components/lists/list.styl
+++ b/client/components/lists/list.styl
@@ -84,17 +84,16 @@
padding-left: 10px
color: #a6a6a6
-
.list-header-menu
position: absolute
padding: 27px 19px
margin-top: 1px
top: -7px
- right: -7px
+ right: 3px
.list-header-plus-icon
color: #a6a6a6
- margin-right: 10px
+ margin-right: 15px
.highlight
color: #ce1414
@@ -165,7 +164,16 @@
@media screen and (max-width: 800px)
.list-header-menu
- margin-right: 30px
+ position: absolute
+ padding: 27px 19px
+ margin-top: 1px
+ top: -7px
+ margin-right: 7px
+ right: -3px
+
+ .list-header
+ .list-header-name
+ margin-left: 1.4rem
.mini-list
flex: 0 0 60px
@@ -221,9 +229,17 @@
padding: 7px
top: 50%
transform: translateY(-50%)
- right: 17px
+ right: 47px
font-size: 20px
+ .list-header-handle
+ position: absolute
+ padding: 7px
+ top: 50%
+ transform: translateY(-50%)
+ right: 10px
+ font-size: 24px
+
.link-board-wrapper
display: flex
align-items: baseline
diff --git a/client/components/lists/listBody.js b/client/components/lists/listBody.js
index a1a4c11a..b0974705 100644
--- a/client/components/lists/listBody.js
+++ b/client/components/lists/listBody.js
@@ -48,7 +48,6 @@ BlazeComponent.extendComponent({
const board = this.data().board();
let linkedId = '';
let swimlaneId = '';
- const boardView = (Meteor.user().profile || {}).boardView;
let cardType = 'cardType-card';
if (title) {
if (board.isTemplatesBoard()) {
@@ -71,14 +70,14 @@ BlazeComponent.extendComponent({
});
cardType = 'cardType-linkedBoard';
}
- } else if (boardView === 'board-view-swimlanes')
+ } else if (Utils.boardView() === 'board-view-swimlanes')
swimlaneId = this.parentComponent()
.parentComponent()
.data()._id;
else if (
- boardView === 'board-view-lists' ||
- boardView === 'board-view-cal' ||
- !boardView
+ Utils.boardView() === 'board-view-lists' ||
+ Utils.boardView() === 'board-view-cal' ||
+ !Utils.boardView
)
swimlaneId = board.getDefaultSwimline()._id;
@@ -157,9 +156,8 @@ BlazeComponent.extendComponent({
},
idOrNull(swimlaneId) {
- const currentUser = Meteor.user();
if (
- (currentUser.profile || {}).boardView === 'board-view-swimlanes' ||
+ Utils.boardView() === 'board-view-swimlanes' ||
this.data()
.board()
.isTemplatesBoard()
@@ -397,10 +395,9 @@ BlazeComponent.extendComponent({
'.js-swimlane',
);
this.swimlaneId = '';
- const boardView = (Meteor.user().profile || {}).boardView;
- if (boardView === 'board-view-swimlanes')
+ if (Utils.boardView() === 'board-view-swimlanes')
this.swimlaneId = Blaze.getData(swimlane[0])._id;
- else if (boardView === 'board-view-lists' || !boardView)
+ else if (Utils.boardView() === 'board-view-lists' || !Utils.boardView)
this.swimlaneId = Swimlanes.findOne({ boardId: this.boardId })._id;
},
@@ -580,7 +577,7 @@ BlazeComponent.extendComponent({
const swimlane = $(Popup._getTopStack().openerElement).parents(
'.js-swimlane',
);
- if ((Meteor.user().profile || {}).boardView === 'board-view-swimlanes')
+ if (Utils.boardView() === 'board-view-swimlanes')
this.swimlaneId = Blaze.getData(swimlane[0])._id;
else this.swimlaneId = Swimlanes.findOne({ boardId: this.boardId })._id;
// List where to insert card
@@ -701,15 +698,26 @@ BlazeComponent.extendComponent({
this.listId = this.parentComponent().data()._id;
this.swimlaneId = '';
- let user = Meteor.user();
- if (user) {
- const boardView = (Meteor.user().profile || {}).boardView;
- if (boardView === 'board-view-swimlanes') {
- this.swimlaneId = this.parentComponent()
- .parentComponent()
- .parentComponent()
- .data()._id;
+ const isSandstorm =
+ Meteor.settings &&
+ Meteor.settings.public &&
+ Meteor.settings.public.sandstorm;
+
+ if (isSandstorm) {
+ const user = Meteor.user();
+ if (user) {
+ if (Utils.boardView() === 'board-view-swimlanes') {
+ this.swimlaneId = this.parentComponent()
+ .parentComponent()
+ .parentComponent()
+ .data()._id;
+ }
}
+ } else if (Utils.boardView() === 'board-view-swimlanes') {
+ this.swimlaneId = this.parentComponent()
+ .parentComponent()
+ .parentComponent()
+ .data()._id;
}
},
diff --git a/client/components/lists/listHeader.jade b/client/components/lists/listHeader.jade
index f930e57a..631f68a0 100644
--- a/client/components/lists/listHeader.jade
+++ b/client/components/lists/listHeader.jade
@@ -9,6 +9,7 @@ template(name="listHeader")
if currentList
a.list-header-left-icon.fa.fa-angle-left.js-unselect-list
h2.list-header-name(
+ title="{{ moment modifiedAt 'LLL' }}"
class="{{#if currentUser.isBoardMember}}{{#unless currentUser.isCommentOnly}}js-open-inlined-form is-editable{{/unless}}{{/if}}")
+viewer
= title
@@ -29,16 +30,22 @@ template(name="listHeader")
if canSeeAddCard
a.js-add-card.fa.fa-plus.list-header-plus-icon
a.fa.fa-navicon.js-open-list-menu
+ a.list-header-handle.handle.fa.fa-arrows.js-list-handle
else
a.list-header-menu-icon.fa.fa-angle-right.js-select-list
+ a.list-header-handle.handle.fa.fa-arrows.js-list-handle
else if currentUser.isBoardMember
if isWatching
i.list-header-watch-icon.fa.fa-eye
div.list-header-menu
unless currentUser.isCommentOnly
+ //if isBoardAdmin
+ // a.fa.js-list-star.list-header-plus-icon(class="fa-star{{#unless starred}}-o{{/unless}}")
if canSeeAddCard
a.js-add-card.fa.fa-plus.list-header-plus-icon
a.fa.fa-navicon.js-open-list-menu
+ if showDesktopDragHandles
+ a.list-header-handle.handle.fa.fa-arrows.js-list-handle
template(name="editListTitleForm")
.list-composer
diff --git a/client/components/lists/listHeader.js b/client/components/lists/listHeader.js
index e8a82499..34322fa9 100644
--- a/client/components/lists/listHeader.js
+++ b/client/components/lists/listHeader.js
@@ -7,12 +7,26 @@ BlazeComponent.extendComponent({
canSeeAddCard() {
const list = Template.currentData();
return (
- !list.getWipLimit('enabled') ||
- list.getWipLimit('soft') ||
- !this.reachedWipLimit()
+ !list.getWipLimit('enabled')
+ || list.getWipLimit('soft')
+ || !this.reachedWipLimit()
);
},
+ isBoardAdmin() {
+ return Meteor.user().isBoardAdmin();
+ },
+ starred(check = undefined) {
+ const list = Template.currentData();
+ const status = list.isStarred();
+ if (check === undefined) {
+ // just check
+ return status;
+ } else {
+ list.star(!status);
+ return !status;
+ }
+ },
editTitle(event) {
event.preventDefault();
const newTitle = this.childComponents('inlinedForm')[0]
@@ -30,14 +44,18 @@ BlazeComponent.extendComponent({
},
limitToShowCardsCount() {
- return Meteor.user().getLimitToShowCardsCount();
+ const currentUser = Meteor.user();
+ if (currentUser) {
+ return Meteor.user().getLimitToShowCardsCount();
+ } else {
+ return false;
+ }
},
cardsCount() {
const list = Template.currentData();
let swimlaneId = '';
- const boardView = (Meteor.user().profile || {}).boardView;
- if (boardView === 'board-view-swimlanes')
+ if (Utils.boardView() === 'board-view-swimlanes')
swimlaneId = this.parentComponent()
.parentComponent()
.data()._id;
@@ -48,8 +66,8 @@ BlazeComponent.extendComponent({
reachedWipLimit() {
const list = Template.currentData();
return (
- list.getWipLimit('enabled') &&
- list.getWipLimit('value') <= list.cards().count()
+ list.getWipLimit('enabled')
+ && list.getWipLimit('value') <= list.cards().count()
);
},
@@ -61,6 +79,10 @@ BlazeComponent.extendComponent({
events() {
return [
{
+ 'click .js-list-star'(event) {
+ event.preventDefault();
+ this.starred(!this.starred());
+ },
'click .js-open-list-menu': Popup.open('listAction'),
'click .js-add-card'(event) {
const listDom = $(event.target).parents(
@@ -80,6 +102,23 @@ BlazeComponent.extendComponent({
},
}).register('listHeader');
+Template.listHeader.helpers({
+ showDesktopDragHandles() {
+ currentUser = Meteor.user();
+ if (currentUser) {
+ return (currentUser.profile || {}).showDesktopDragHandles;
+ } else {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ if (cookies.has('showDesktopDragHandles')) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ },
+});
+
Template.listActionPopup.helpers({
isWipLimitEnabled() {
return Template.currentData().getWipLimit('enabled');
@@ -138,8 +177,8 @@ BlazeComponent.extendComponent({
const list = Template.currentData();
if (
- list.getWipLimit('soft') &&
- list.getWipLimit('value') < list.cards().count()
+ list.getWipLimit('soft')
+ && list.getWipLimit('value') < list.cards().count()
) {
list.setWipLimit(list.cards().count());
}
@@ -150,8 +189,8 @@ BlazeComponent.extendComponent({
const list = Template.currentData();
// Prevent user from using previously stored wipLimit.value if it is less than the current number of cards in the list
if (
- !list.getWipLimit('enabled') &&
- list.getWipLimit('value') < list.cards().count()
+ !list.getWipLimit('enabled')
+ && list.getWipLimit('value') < list.cards().count()
) {
list.setWipLimit(list.cards().count());
}
diff --git a/client/components/main/editor.js b/client/components/main/editor.js
index 91403086..39c03aa9 100755
--- a/client/components/main/editor.js
+++ b/client/components/main/editor.js
@@ -94,7 +94,13 @@ Template.editor.onRendered(() => {
currentBoard
.activeMembers()
.map(member => {
- const username = Users.findOne(member.userId).username;
+ const user = Users.findOne(member.userId);
+ if (user._id === Meteor.userId()) {
+ return null;
+ }
+ const value = user.username;
+ const username =
+ value && value.match(/\s+/) ? `"${value}"` : value;
return username.includes(term) ? username : null;
})
.filter(Boolean),
@@ -120,9 +126,10 @@ Template.editor.onRendered(() => {
? [
['view', ['fullscreen']],
['table', ['table']],
- ['font', ['bold', 'underline']],
- //['fontsize', ['fontsize']],
+ ['font', ['bold']],
['color', ['color']],
+ ['insert', ['video']], // iframe tag will be sanitized TODO if iframe[class=note-video-clip] can be added into safe list, insert video can be enabled
+ //['fontsize', ['fontsize']],
]
: [
['style', ['style']],
@@ -156,25 +163,45 @@ Template.editor.onRendered(() => {
}
return undefined;
};
+ let popupShown = false;
inputs.each(function(idx, input) {
mSummernotes[idx] = $(input).summernote({
placeholder,
callbacks: {
+ onKeydown(e) {
+ if (popupShown) {
+ e.preventDefault();
+ }
+ },
+ onKeyup(e) {
+ if (popupShown) {
+ e.preventDefault();
+ }
+ },
onInit(object) {
const originalInput = this;
+ const setAutocomplete = function(jEditor) {
+ if (jEditor !== undefined) {
+ jEditor.escapeableTextComplete(mentions).on({
+ 'textComplete:show'() {
+ popupShown = true;
+ },
+ 'textComplete:hide'() {
+ popupShown = false;
+ },
+ });
+ }
+ };
$(originalInput).on('submitted', function() {
// resetCommentInput has been called
if (!this.value) {
const sn = getSummernote(this);
- sn && sn.summernote('reset');
- object && object.editingArea.find('.note-placeholder').show();
+ sn && sn.summernote('code', '');
}
});
const jEditor = object && object.editable;
const toolbar = object && object.toolbar;
- if (jEditor !== undefined) {
- jEditor.escapeableTextComplete(mentions);
- }
+ setAutocomplete(jEditor);
if (toolbar !== undefined) {
const fBtn = toolbar.find('.btn-fullscreen');
fBtn.on('click', function() {
@@ -264,7 +291,7 @@ Template.editor.onRendered(() => {
const someNote = getSummernote(object);
const original = someNote.summernote('code');
const cleaned = cleanPastedHTML(original); //this is where to call whatever clean function you want. I have mine in a different file, called CleanPastedHTML.
- someNote.summernote('reset'); //clear original
+ someNote.summernote('code', ''); //clear original
someNote.summernote('pasteHTML', cleaned); //this sets the displayed content editor to the cleaned pasted code.
};
setTimeout(function() {
@@ -325,11 +352,12 @@ Blaze.Template.registerHelper(
}
return member;
});
- const mentionRegex = /\B@([\w.]*)/gi;
+ const mentionRegex = /\B@(?:(?:"([\w.\s]*)")|([\w.]+))/gi; // including space in username
let currentMention;
while ((currentMention = mentionRegex.exec(content)) !== null) {
- const [fullMention, username] = currentMention;
+ const [fullMention, quoteduser, simple] = currentMention;
+ const username = quoteduser || simple;
const knowedUser = _.findWhere(knowedUsers, { username });
if (!knowedUser) {
continue;
diff --git a/client/components/main/layouts.styl b/client/components/main/layouts.styl
index 56c35284..01ce2f16 100644
--- a/client/components/main/layouts.styl
+++ b/client/components/main/layouts.styl
@@ -381,6 +381,10 @@ a
display: block
word-wrap: break-word
+ table
+ word-wrap: normal
+ word-break: normal
+
ol
list-style-type: decimal
padding-left: 20px
diff --git a/client/components/main/popup.styl b/client/components/main/popup.styl
index ff00eef3..023cba3d 100644
--- a/client/components/main/popup.styl
+++ b/client/components/main/popup.styl
@@ -130,7 +130,8 @@ $popupWidth = 300px
.popup-container-depth-{depth}
transform: translateX(- depth * $popupWidth)
-.select-members-list
+.select-members-list,
+.select-avatars-list
margin-bottom: 8px
.pop-over-list
@@ -230,7 +231,8 @@ $popupWidth = 300px
min-height: 56px
position: relative
- .member
+ .member,
+ .avatar
position: absolute
top: 2px
left: 2px
diff --git a/client/components/settings/peopleBody.js b/client/components/settings/peopleBody.js
index a9f2247c..8610034e 100644
--- a/client/components/settings/peopleBody.js
+++ b/client/components/settings/peopleBody.js
@@ -17,7 +17,7 @@ BlazeComponent.extendComponent({
this.autorun(() => {
const limit = this.page.get() * usersPerPage;
- this.subscribe('people', limit, () => {
+ this.subscribe('people', this.findUsersOptions.get(), limit, () => {
this.loadNextPageLocked = false;
const nextPeakBefore = this.callFirstWith(null, 'getNextPeak');
this.calculateNextPeak();
@@ -85,7 +85,7 @@ BlazeComponent.extendComponent({
const users = Users.find(this.findUsersOptions.get(), {
fields: { _id: true },
});
- this.number.set(users.count());
+ this.number.set(users.count(false));
return users;
},
peopleNumber() {
diff --git a/client/components/settings/settingBody.jade b/client/components/settings/settingBody.jade
index 8eb584dc..04b635e8 100644
--- a/client/components/settings/settingBody.jade
+++ b/client/components/settings/settingBody.jade
@@ -18,6 +18,8 @@ template(name="setting")
a.js-setting-menu(data-id="announcement-setting") {{_ 'admin-announcement'}}
li
a.js-setting-menu(data-id="layout-setting") {{_ 'layout'}}
+ li
+ a.js-setting-menu(data-id="webhook-setting") {{_ 'global-webhook'}}
.main-body
if loading.get
+spinner
@@ -31,6 +33,12 @@ template(name="setting")
+announcementSettings
else if layoutSetting.get
+layoutSettings
+ else if webhookSetting.get
+ +webhookSettings
+
+template(name="webhookSettings")
+ span
+ +outgoingWebhooksPopup
template(name="general")
ul#registration-setting.setting-detail
diff --git a/client/components/settings/settingBody.js b/client/components/settings/settingBody.js
index f9b5c08d..4ff5aedd 100644
--- a/client/components/settings/settingBody.js
+++ b/client/components/settings/settingBody.js
@@ -7,11 +7,13 @@ BlazeComponent.extendComponent({
this.accountSetting = new ReactiveVar(false);
this.announcementSetting = new ReactiveVar(false);
this.layoutSetting = new ReactiveVar(false);
+ this.webhookSetting = new ReactiveVar(false);
Meteor.subscribe('setting');
Meteor.subscribe('mailServer');
Meteor.subscribe('accountSettings');
Meteor.subscribe('announcements');
+ Meteor.subscribe('globalwebhooks');
},
setError(error) {
@@ -83,6 +85,7 @@ BlazeComponent.extendComponent({
this.accountSetting.set('account-setting' === targetID);
this.announcementSetting.set('announcement-setting' === targetID);
this.layoutSetting.set('layout-setting' === targetID);
+ this.webhookSetting.set('webhook-setting' === targetID);
}
},
diff --git a/client/components/sidebar/sidebar.jade b/client/components/sidebar/sidebar.jade
index 2dfe41b3..ccfadc0c 100644
--- a/client/components/sidebar/sidebar.jade
+++ b/client/components/sidebar/sidebar.jade
@@ -135,22 +135,30 @@ template(name="archiveBoardPopup")
template(name="outgoingWebhooksPopup")
each integrations
form.integration-form
- if title
- h4 {{title}}
- else
- h4 {{_ 'no-name'}}
- label
- | URL
- input.js-outgoing-webhooks-url(type="text" name="url" value=url)
- input(type="hidden" value=_id name="id")
+ a.flex
+ span {{_ 'disable-webhook'}}
+ b &nbsp;
+ .materialCheckBox(class="{{#unless enabled}}is-checked{{/unless}}")
+ input.js-outgoing-webhooks-title(placeholder="{{_ 'webhook-title'}}" type="text" name="title" value=title)
+ input.js-outgoing-webhooks-url(type="text" name="url" value=url autofocus)
+ input.js-outgoing-webhooks-token(placeholder="{{_ 'webhook-token' }}" type="text" value=token name="token")
+ select.js-outgoing-webhooks-type(name="type")
+ each _type in types
+ if($eq _type this.type)
+ option(value=_type selected="selected") {{_ _type}}
+ else
+ option(value=_type) {{_ _type}}
+ input(type="hidden" value=this.type name="_type")
+ input(type="hidden" value=_id name="id")
input.primary.wide(type="submit" value="{{_ 'save'}}")
form.integration-form
- h4
- | {{_ 'new-outgoing-webhook'}}
- label
- | URL
- input.js-outgoing-webhooks-url(type="text" name="url" autofocus)
- input.primary.wide(type="submit" value="{{_ 'save'}}")
+ input.js-outgoing-webhooks-title(placeholder="{{_ 'webhook-title'}}" type="text" name="title" autofocus)
+ input.js-outgoing-webhooks-url(placeholder="{{_ 'URL' }}" type="text" name="url")
+ input.js-outgoing-webhooks-token(placeholder="{{_ 'webhook-token' }}" type="text" name="token")
+ select.js-outgoing-webhooks-type(name="type")
+ each _type in types
+ option(value=_type) {{_ _type}}
+ input.primary.wide(type="submit" value="{{_ 'create'}}")
template(name="boardMenuPopup")
ul.pop-over-list
diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js
index f7efb1e8..6bb22f39 100644
--- a/client/components/sidebar/sidebar.js
+++ b/client/components/sidebar/sidebar.js
@@ -1,6 +1,8 @@
Sidebar = null;
const defaultView = 'home';
+const MCB = '.materialCheckBox';
+const CKCLS = 'is-checked';
const viewTitles = {
filter: 'filter-cards',
@@ -105,7 +107,18 @@ BlazeComponent.extendComponent({
'click .js-toggle-sidebar': this.toggle,
'click .js-back-home': this.setView,
'click .js-toggle-minicard-label-text'() {
- Meteor.call('toggleMinicardLabelText');
+ currentUser = Meteor.user();
+ if (currentUser) {
+ Meteor.call('toggleMinicardLabelText');
+ } else {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ if (cookies.has('hiddenMinicardLabelText')) {
+ cookies.remove('hiddenMinicardLabelText');
+ } else {
+ cookies.set('hiddenMinicardLabelText', 'true');
+ }
+ }
},
'click .js-shortcuts'() {
FlowRouter.go('shortcuts');
@@ -119,7 +132,18 @@ Blaze.registerHelper('Sidebar', () => Sidebar);
Template.homeSidebar.helpers({
hiddenMinicardLabelText() {
- return Meteor.user().hasHiddenMinicardLabelText();
+ currentUser = Meteor.user();
+ if (currentUser) {
+ return (currentUser.profile || {}).hiddenMinicardLabelText;
+ } else {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ if (cookies.has('hiddenMinicardLabelText')) {
+ return true;
+ } else {
+ return false;
+ }
+ }
},
});
@@ -280,44 +304,71 @@ Template.membersWidget.events({
});
BlazeComponent.extendComponent({
+ boardId() {
+ return Session.get('currentBoard') || Integrations.Const.GLOBAL_WEBHOOK_ID;
+ },
integrations() {
- const boardId = Session.get('currentBoard');
+ const boardId = this.boardId();
return Integrations.find({ boardId: `${boardId}` }).fetch();
},
-
- integration(id) {
- const boardId = Session.get('currentBoard');
- return Integrations.findOne({ _id: id, boardId: `${boardId}` });
+ types() {
+ return Integrations.Const.WEBHOOK_TYPES;
+ },
+ integration(cond) {
+ const boardId = this.boardId();
+ const condition = { boardId, ...cond };
+ for (const k in condition) {
+ if (!condition[k]) delete condition[k];
+ }
+ return Integrations.findOne(condition);
+ },
+ onCreated() {
+ this.disabled = new ReactiveVar(false);
},
-
events() {
return [
{
+ 'click a.flex'(evt) {
+ this.disabled.set(!this.disabled.get());
+ $(evt.target).toggleClass(CKCLS, this.disabled.get());
+ },
submit(evt) {
evt.preventDefault();
const url = evt.target.url.value;
- const boardId = Session.get('currentBoard');
+ const boardId = this.boardId();
let id = null;
let integration = null;
+ const title = evt.target.title.value;
+ const token = evt.target.token.value;
+ const type = evt.target.type.value;
+ const enabled = !this.disabled.get();
+ let remove = false;
+ const values = {
+ url,
+ type,
+ token,
+ title,
+ enabled,
+ };
if (evt.target.id) {
id = evt.target.id.value;
- integration = this.integration(id);
- if (url) {
- Integrations.update(integration._id, {
- $set: {
- url: `${url}`,
- },
- });
- } else {
- Integrations.remove(integration._id);
- }
+ integration = this.integration({ _id: id });
+ remove = !url;
+ } else if (url) {
+ integration = this.integration({ url, token });
+ }
+ if (remove) {
+ Integrations.remove(integration._id);
+ } else if (integration && integration._id) {
+ Integrations.update(integration._id, {
+ $set: values,
+ });
} else if (url) {
Integrations.insert({
+ ...values,
userId: Meteor.userId(),
enabled: true,
- type: 'outgoing-webhooks',
- url: `${url}`,
- boardId: `${boardId}`,
+ boardId,
activities: ['all'],
});
}
@@ -474,12 +525,12 @@ BlazeComponent.extendComponent({
evt.preventDefault();
this.currentBoard.allowsSubtasks = !this.currentBoard.allowsSubtasks;
this.currentBoard.setAllowsSubtasks(this.currentBoard.allowsSubtasks);
- $('.js-field-has-subtasks .materialCheckBox').toggleClass(
- 'is-checked',
+ $(`.js-field-has-subtasks ${MCB}`).toggleClass(
+ CKCLS,
this.currentBoard.allowsSubtasks,
);
$('.js-field-has-subtasks').toggleClass(
- 'is-checked',
+ CKCLS,
this.currentBoard.allowsSubtasks,
);
$('.js-field-deposit-board').prop(
@@ -515,15 +566,12 @@ BlazeComponent.extendComponent({
];
options.forEach(function(element) {
if (element !== value) {
- $(`#${element} .materialCheckBox`).toggleClass(
- 'is-checked',
- false,
- );
- $(`#${element}`).toggleClass('is-checked', false);
+ $(`#${element} ${MCB}`).toggleClass(CKCLS, false);
+ $(`#${element}`).toggleClass(CKCLS, false);
}
});
- $(`#${value} .materialCheckBox`).toggleClass('is-checked', true);
- $(`#${value}`).toggleClass('is-checked', true);
+ $(`#${value} ${MCB}`).toggleClass(CKCLS, true);
+ $(`#${value}`).toggleClass(CKCLS, true);
this.currentBoard.setPresentParentTask(value);
evt.preventDefault();
},
diff --git a/client/components/sidebar/sidebarFilters.jade b/client/components/sidebar/sidebarFilters.jade
index 55ab213a..5f929cb9 100644
--- a/client/components/sidebar/sidebarFilters.jade
+++ b/client/components/sidebar/sidebarFilters.jade
@@ -5,6 +5,10 @@
template(name="filterSidebar")
ul.sidebar-list
+ span {{_ 'list-filter-label'}}
+ form.js-list-filter
+ input(type="text")
+ ul.sidebar-list
li(class="{{#if Filter.labelIds.isSelected undefined}}active{{/if}}")
a.name.js-toggle-label-filter
span.sidebar-list-item-description
diff --git a/client/components/sidebar/sidebarFilters.js b/client/components/sidebar/sidebarFilters.js
index 3483d00c..ee0176b9 100644
--- a/client/components/sidebar/sidebarFilters.js
+++ b/client/components/sidebar/sidebarFilters.js
@@ -4,6 +4,10 @@ BlazeComponent.extendComponent({
events() {
return [
{
+ 'submit .js-list-filter'(evt) {
+ evt.preventDefault();
+ Filter.lists.set(this.find('.js-list-filter input').value.trim());
+ },
'click .js-toggle-label-filter'(evt) {
evt.preventDefault();
Filter.labelIds.toggle(this.currentData()._id);
diff --git a/client/components/sidebar/sidebarSearches.jade b/client/components/sidebar/sidebarSearches.jade
index 96877c50..4ee7fc9c 100644
--- a/client/components/sidebar/sidebarSearches.jade
+++ b/client/components/sidebar/sidebarSearches.jade
@@ -2,6 +2,10 @@ template(name="searchSidebar")
form.js-search-term-form
input(type="text" name="searchTerm" placeholder="{{_ 'search-example'}}" autofocus dir="auto")
.list-body.js-perfect-scrollbar
+ .minilists.clearfix.js-minilists
+ each (lists)
+ a.minilist-wrapper.js-minilist(href=absoluteUrl)
+ +minilist(this)
.minicards.clearfix.js-minicards
each (results)
a.minicard-wrapper.js-minicard(href=absoluteUrl)
diff --git a/client/components/sidebar/sidebarSearches.js b/client/components/sidebar/sidebarSearches.js
index 8944c04e..02677260 100644
--- a/client/components/sidebar/sidebarSearches.js
+++ b/client/components/sidebar/sidebarSearches.js
@@ -8,6 +8,11 @@ BlazeComponent.extendComponent({
return currentBoard.searchCards(this.term.get());
},
+ lists() {
+ const currentBoard = Boards.findOne(Session.get('currentBoard'));
+ return currentBoard.searchLists(this.term.get());
+ },
+
events() {
return [
{
diff --git a/client/components/swimlanes/swimlaneHeader.jade b/client/components/swimlanes/swimlaneHeader.jade
index 8c6aa5a3..72a7f054 100644
--- a/client/components/swimlanes/swimlaneHeader.jade
+++ b/client/components/swimlanes/swimlaneHeader.jade
@@ -16,6 +16,11 @@ template(name="swimlaneFixedHeader")
unless currentUser.isCommentOnly
a.fa.fa-plus.js-open-add-swimlane-menu.swimlane-header-plus-icon
a.fa.fa-navicon.js-open-swimlane-menu
+ unless isMiniScreen
+ if showDesktopDragHandles
+ a.swimlane-header-handle.handle.fa.fa-arrows.js-swimlane-header-handle
+ if isMiniScreen
+ a.swimlane-header-miniscreen-handle.handle.fa.fa-arrows.js-swimlane-header-handle
template(name="editSwimlaneTitleForm")
.list-composer
diff --git a/client/components/swimlanes/swimlaneHeader.js b/client/components/swimlanes/swimlaneHeader.js
index ee21d100..69971b05 100644
--- a/client/components/swimlanes/swimlaneHeader.js
+++ b/client/components/swimlanes/swimlaneHeader.js
@@ -28,6 +28,23 @@ BlazeComponent.extendComponent({
},
}).register('swimlaneHeader');
+Template.swimlaneHeader.helpers({
+ showDesktopDragHandles() {
+ currentUser = Meteor.user();
+ if (currentUser) {
+ return (currentUser.profile || {}).showDesktopDragHandles;
+ } else {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ if (cookies.has('showDesktopDragHandles')) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ },
+});
+
Template.swimlaneActionPopup.events({
'click .js-set-swimlane-color': Popup.open('setSwimlaneColor'),
'click .js-close-swimlane'(event) {
diff --git a/client/components/swimlanes/swimlanes.jade b/client/components/swimlanes/swimlanes.jade
index 3ad43777..b2e03afe 100644
--- a/client/components/swimlanes/swimlanes.jade
+++ b/client/components/swimlanes/swimlanes.jade
@@ -1,24 +1,47 @@
template(name="swimlane")
.swimlane
+swimlaneHeader
- .swimlane.js-lists.js-swimlane
- if isMiniScreen
- if currentListIsInThisSwimlane _id
- +list(currentList)
- unless currentList
+ unless collapseSwimlane
+ .swimlane.js-lists.js-swimlane
+ if isMiniScreen
+ if currentListIsInThisSwimlane _id
+ +list(currentList)
+ unless currentList
+ each lists
+ +miniList(this)
+ if currentUser.isBoardMember
+ unless currentUser.isCommentOnly
+ +addListForm
+ else
each lists
- +miniList(this)
+ +list(this)
+ if currentCardIsInThisList _id ../_id
+ +cardDetails(currentCard)
if currentUser.isBoardMember
unless currentUser.isCommentOnly
+addListForm
- else
- each lists
- +list(this)
- if currentCardIsInThisList _id ../_id
- +cardDetails(currentCard)
- if currentUser.isBoardMember
- unless currentUser.isCommentOnly
- +addListForm
+ //if collapseSwimlane
+ // // Minimize swimlanes next 2 lines below https://www.w3schools.com/howto/howto_js_accordion.asp
+ // button(class="accordion")
+ // div(class="panel")
+ // .swimlane.js-lists.js-swimlane
+ // if isMiniScreen
+ // if currentListIsInThisSwimlane _id
+ // +list(currentList)
+ // unless currentList
+ // each lists
+ // +miniList(this)
+ // if currentUser.isBoardMember
+ // unless currentUser.isCommentOnly
+ // +addListForm
+ // else
+ // each lists
+ // +list(this)
+ // if currentCardIsInThisList _id ../_id
+ // +cardDetails(currentCard)
+ // if currentUser.isBoardMember
+ // unless currentUser.isCommentOnly
+ // +addListForm
template(name="listsGroup")
.swimlane.list-group.js-lists
@@ -42,7 +65,7 @@ template(name="listsGroup")
+addListForm
template(name="addListForm")
- .list.list-composer.js-list-composer
+ .list.list-composer.js-list-composer(class="{{#if isMiniScreen}}mini-list{{/if}}")
.list-header-add
+inlinedForm(autoclose=false)
input.list-name-input.full-line(type="text" placeholder="{{_ 'add-list'}}"
diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js
index e0857003..9bc093be 100644
--- a/client/components/swimlanes/swimlanes.js
+++ b/client/components/swimlanes/swimlanes.js
@@ -3,8 +3,8 @@ const { calculateIndex, enableClickOnTouch } = Utils;
function currentListIsInThisSwimlane(swimlaneId) {
const currentList = Lists.findOne(Session.get('currentList'));
return (
- currentList &&
- (currentList.swimlaneId === swimlaneId || currentList.swimlaneId === '')
+ currentList
+ && (currentList.swimlaneId === swimlaneId || currentList.swimlaneId === '')
);
}
@@ -12,14 +12,14 @@ function currentCardIsInThisList(listId, swimlaneId) {
const currentCard = Cards.findOne(Session.get('currentCard'));
const currentUser = Meteor.user();
if (
- currentUser &&
- currentUser.profile &&
- currentUser.profile.boardView === 'board-view-swimlanes'
+ currentUser
+ && currentUser.profile
+ && Utils.boardView() === 'board-view-swimlanes'
)
return (
- currentCard &&
- currentCard.listId === listId &&
- currentCard.swimlaneId === swimlaneId
+ currentCard
+ && currentCard.listId === listId
+ && currentCard.swimlaneId === swimlaneId
);
// Default view: board-view-lists
else return currentCard && currentCard.listId === listId;
@@ -56,7 +56,6 @@ function initSortable(boardComponent, $listsDom) {
$listsDom.sortable({
tolerance: 'pointer',
helper: 'clone',
- handle: '.js-list-header',
items: '.js-list:not(.js-list-composer)',
placeholder: 'list placeholder',
distance: 7,
@@ -91,21 +90,47 @@ function initSortable(boardComponent, $listsDom) {
function userIsMember() {
return (
- Meteor.user() &&
- Meteor.user().isBoardMember() &&
- !Meteor.user().isCommentOnly()
+ Meteor.user()
+ && Meteor.user().isBoardMember()
+ && !Meteor.user().isCommentOnly()
);
}
- // Disable drag-dropping while in multi-selection mode, or if the current user
- // is not a board member
boardComponent.autorun(() => {
+ let showDesktopDragHandles = false;
+ currentUser = Meteor.user();
+ if (currentUser) {
+ showDesktopDragHandles = (currentUser.profile || {})
+ .showDesktopDragHandles;
+ } else {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ if (cookies.has('showDesktopDragHandles')) {
+ showDesktopDragHandles = true;
+ } else {
+ showDesktopDragHandles = false;
+ }
+ }
+
+ if (!Utils.isMiniScreen() && showDesktopDragHandles) {
+ $listsDom.sortable({
+ handle: '.js-list-handle',
+ });
+ } else {
+ $listsDom.sortable({
+ handle: '.js-list-header',
+ });
+ }
+
const $listDom = $listsDom;
if ($listDom.data('sortable')) {
$listsDom.sortable(
'option',
'disabled',
- MultiSelection.isActive() || !userIsMember(),
+ // Disable drag-dropping when user is not member
+ !userIsMember(),
+ // Not disable drag-dropping while in multi-selection mode
+ // MultiSelection.isActive() || !userIsMember(),
);
}
});
@@ -121,6 +146,26 @@ BlazeComponent.extendComponent({
}
initSortable(boardComponent, $listsDom);
+
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ if (cookies.has('collapseSwimlane')) {
+ // Minimize swimlanes start https://www.w3schools.com/howto/howto_js_accordion.asp
+ const acc = document.getElementsByClassName('accordion');
+ let i;
+ for (i = 0; i < acc.length; i++) {
+ acc[i].addEventListener('click', function() {
+ this.classList.toggle('active');
+ const panel = this.nextElementSibling;
+ if (panel.style.maxHeight) {
+ panel.style.maxHeight = null;
+ } else {
+ panel.style.maxHeight = `${panel.scrollHeight}px`;
+ }
+ });
+ }
+ // Minimize swimlanes end https://www.w3schools.com/howto/howto_js_accordion.asp
+ }
},
onCreated() {
this.draggingActive = new ReactiveVar(false);
@@ -151,16 +196,32 @@ BlazeComponent.extendComponent({
// define a list of elements in which we disable the dragging because
// the user will legitimately expect to be able to select some text with
// his mouse.
- const noDragInside = [
- 'a',
- 'input',
- 'textarea',
- 'p',
- '.js-list-header',
- ];
+
+ let showDesktopDragHandles = false;
+ currentUser = Meteor.user();
+ if (currentUser) {
+ showDesktopDragHandles = (currentUser.profile || {})
+ .showDesktopDragHandles;
+ } else {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ if (cookies.has('showDesktopDragHandles')) {
+ showDesktopDragHandles = true;
+ } else {
+ showDesktopDragHandles = false;
+ }
+ }
+
+ const noDragInside = ['a', 'input', 'textarea', 'p'].concat(
+ Utils.isMiniScreen()
+ || (!Utils.isMiniScreen() && showDesktopDragHandles)
+ ? ['.js-list-handle', '.js-swimlane-header-handle']
+ : ['.js-list-header'],
+ );
+
if (
- $(evt.target).closest(noDragInside.join(',')).length === 0 &&
- this.$('.swimlane').prop('clientHeight') > evt.offsetY
+ $(evt.target).closest(noDragInside.join(',')).length === 0
+ && this.$('.swimlane').prop('clientHeight') > evt.offsetY
) {
this._isDragging = true;
this._lastDragPositionX = evt.clientX;
@@ -194,8 +255,8 @@ BlazeComponent.extendComponent({
onCreated() {
this.currentBoard = Boards.findOne(Session.get('currentBoard'));
this.isListTemplatesSwimlane =
- this.currentBoard.isTemplatesBoard() &&
- this.currentData().isListTemplatesSwimlane();
+ this.currentBoard.isTemplatesBoard()
+ && this.currentData().isListTemplatesSwimlane();
this.currentSwimlane = this.currentData();
},
@@ -233,11 +294,25 @@ BlazeComponent.extendComponent({
}).register('addListForm');
Template.swimlane.helpers({
+ showDesktopDragHandles() {
+ currentUser = Meteor.user();
+ if (currentUser) {
+ return (currentUser.profile || {}).showDesktopDragHandles;
+ } else {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ if (cookies.has('showDesktopDragHandles')) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ },
canSeeAddList() {
return (
- Meteor.user() &&
- Meteor.user().isBoardMember() &&
- !Meteor.user().isCommentOnly()
+ Meteor.user()
+ && Meteor.user().isBoardMember()
+ && !Meteor.user().isCommentOnly()
);
},
});
@@ -253,6 +328,11 @@ BlazeComponent.extendComponent({
return false;
}
}
+ if (Filter.lists._isActive()) {
+ if (!list.title.match(Filter.lists.getRegexSelector())) {
+ return false;
+ }
+ }
if (Filter.hideEmpty.isSelected()) {
const swimlaneId = this.parentComponent()
.parentComponent()
diff --git a/client/components/swimlanes/swimlanes.styl b/client/components/swimlanes/swimlanes.styl
index 1056e1e3..ca5611cc 100644
--- a/client/components/swimlanes/swimlanes.styl
+++ b/client/components/swimlanes/swimlanes.styl
@@ -1,5 +1,41 @@
@import 'nib'
+/*
+// Minimize swimlanes start https://www.w3schools.com/howto/howto_js_accordion.asp
+
+.accordion
+ cursor: pointer
+ width: 30px
+ height: 20px
+ border: none
+ outline: none
+ font-size: 18px
+ transition: 0.4s
+ padding-top: 0px
+ margin-top: 0px
+
+.accordion:after
+ // Unicode triagle right:
+ content: '\25B6'
+ color: #777
+ font-weight: bold
+ float: left
+
+.active:after
+ // Unicode triangle down:
+ content: '\25BC'
+
+.panel
+ width: 100%
+ max-height: 0
+ overflow: hidden
+ transition: max-height 0.2s ease-out
+ margin: 0px
+ padding: 0px
+
+// Minimize swimlanes end https://www.w3schools.com/howto/howto_js_accordion.asp
+*/
+
.swimlane
// Even if this background color is the same as the body we can't leave it
// transparent, because that won't work during a swimlane drag.
@@ -25,22 +61,22 @@
cursor: grabbing
.swimlane-header-wrap
- display: flex;
- flex-direction: row;
- flex: 1 0 100%;
- background-color: #ccc;
+ display: flex
+ flex-direction: row
+ flex: 1 0 100%
+ background-color: #ccc
.swimlane-header
- font-size: 14px;
+ font-size: 14px
padding: 5px 5px
- font-weight: bold;
- min-height: 9px;
- width: 100%;
- overflow: hidden;
- -o-text-overflow: ellipsis;
- text-overflow: ellipsis;
- word-wrap: break-word;
- text-align: center;
+ font-weight: bold
+ min-height: 9px
+ width: 100%
+ overflow: hidden
+ -o-text-overflow: ellipsis
+ text-overflow: ellipsis
+ word-wrap: break-word
+ text-align: center
.swimlane-header-menu
position: absolute
@@ -50,6 +86,22 @@
margin-left: 5px
margin-right: 10px
+ .swimlane-header-handle
+ position: absolute
+ padding: 7px
+ top: 50%
+ transform: translateY(-50%)
+ left: 230px
+ font-size: 18px
+
+ .swimlane-header-miniscreen-handle
+ position: absolute
+ padding: 7px
+ top: 50%
+ transform: translateY(-50%)
+ left: 87vw
+ font-size: 24px
+
.list-group
height: 100%
diff --git a/client/components/users/userHeader.jade b/client/components/users/userHeader.jade
index 946bdab1..50a80396 100644
--- a/client/components/users/userHeader.jade
+++ b/client/components/users/userHeader.jade
@@ -79,6 +79,11 @@ template(name="changeSettingsPopup")
if hiddenSystemMessages
i.fa.fa-check
li
+ a.js-toggle-desktop-drag-handles
+ | {{_ 'show-desktop-drag-handles'}}
+ if showDesktopDragHandles
+ i.fa.fa-check
+ li
label.bold
| {{_ 'show-cards-minimum-count'}}
input#show-cards-count-at.inline-input.left(type="number" value="#{showCardsCountAt}" min="0" max="99" onkeydown="return false")
diff --git a/client/components/users/userHeader.js b/client/components/users/userHeader.js
index 36fb2020..1f0e3ef0 100644
--- a/client/components/users/userHeader.js
+++ b/client/components/users/userHeader.js
@@ -5,10 +5,22 @@ Template.headerUserBar.events({
Template.memberMenuPopup.helpers({
templatesBoardId() {
- return Meteor.user().getTemplatesBoardId();
+ currentUser = Meteor.user();
+ if (currentUser) {
+ return Meteor.user().getTemplatesBoardId();
+ } else {
+ // No need to getTemplatesBoardId on public board
+ return false;
+ }
},
templatesBoardSlug() {
- return Meteor.user().getTemplatesBoardSlug();
+ currentUser = Meteor.user();
+ if (currentUser) {
+ return Meteor.user().getTemplatesBoardSlug();
+ } else {
+ // No need to getTemplatesBoardSlug() on public board
+ return false;
+ }
},
});
@@ -161,17 +173,74 @@ Template.changeLanguagePopup.events({
});
Template.changeSettingsPopup.helpers({
+ showDesktopDragHandles() {
+ currentUser = Meteor.user();
+ if (currentUser) {
+ return (currentUser.profile || {}).showDesktopDragHandles;
+ } else {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ if (cookies.has('showDesktopDragHandles')) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ },
hiddenSystemMessages() {
- return Meteor.user().hasHiddenSystemMessages();
+ currentUser = Meteor.user();
+ if (currentUser) {
+ return (currentUser.profile || {}).hasHiddenSystemMessages;
+ } else {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ if (cookies.has('hasHiddenSystemMessages')) {
+ return true;
+ } else {
+ return false;
+ }
+ }
},
showCardsCountAt() {
- return Meteor.user().getLimitToShowCardsCount();
+ currentUser = Meteor.user();
+ if (currentUser) {
+ return Meteor.user().getLimitToShowCardsCount();
+ } else {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ return cookies.get('limitToShowCardsCount');
+ }
},
});
Template.changeSettingsPopup.events({
+ 'click .js-toggle-desktop-drag-handles'() {
+ currentUser = Meteor.user();
+ if (currentUser) {
+ Meteor.call('toggleDesktopDragHandles');
+ } else {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ if (cookies.has('showDesktopDragHandles')) {
+ cookies.remove('showDesktopDragHandles');
+ } else {
+ cookies.set('showDesktopDragHandles', 'true');
+ }
+ }
+ },
'click .js-toggle-system-messages'() {
- Meteor.call('toggleSystemMessages');
+ currentUser = Meteor.user();
+ if (currentUser) {
+ Meteor.call('toggleSystemMessages');
+ } else {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ if (cookies.has('hasHiddenSystemMessages')) {
+ cookies.remove('hasHiddenSystemMessages');
+ } else {
+ cookies.set('hasHiddenSystemMessages', 'true');
+ }
+ }
},
'click .js-apply-show-cards-at'(event, templateInstance) {
event.preventDefault();
@@ -180,7 +249,14 @@ Template.changeSettingsPopup.events({
10,
);
if (!isNaN(minLimit)) {
- Meteor.call('changeLimitToShowCardsCount', minLimit);
+ currentUser = Meteor.user();
+ if (currentUser) {
+ Meteor.call('changeLimitToShowCardsCount', minLimit);
+ } else {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ cookies.set('limitToShowCardsCount', minLimit);
+ }
Popup.back();
}
},
diff --git a/client/lib/datepicker.js b/client/lib/datepicker.js
index eb5b60b8..8ad66c5f 100644
--- a/client/lib/datepicker.js
+++ b/client/lib/datepicker.js
@@ -3,10 +3,11 @@ DatePicker = BlazeComponent.extendComponent({
return 'datepicker';
},
- onCreated() {
+ onCreated(defaultTime = '1970-01-01 08:00:00') {
this.error = new ReactiveVar('');
this.card = this.data();
this.date = new ReactiveVar(moment.invalid());
+ this.defaultTime = defaultTime;
},
onRendered() {
@@ -21,7 +22,15 @@ DatePicker = BlazeComponent.extendComponent({
function(evt) {
this.find('#date').value = moment(evt.date).format('L');
this.error.set('');
- this.find('#time').focus();
+ const timeInput = this.find('#time');
+ timeInput.focus();
+ if (!timeInput.value) {
+ const currentHour = evt.date.getHours();
+ const defaultMoment = moment(
+ currentHour > 0 ? evt.date : this.defaultTime,
+ ); // default to 8:00 am local time
+ timeInput.value = defaultMoment.format('LT');
+ }
}.bind(this),
);
diff --git a/client/lib/filter.js b/client/lib/filter.js
index 1ca3a280..592eb4ab 100644
--- a/client/lib/filter.js
+++ b/client/lib/filter.js
@@ -439,6 +439,14 @@ class AdvancedFilter {
const commands = this._filterToCommands();
return this._arrayToSelector(commands);
}
+ getRegexSelector() {
+ // generate a regex for filter list
+ this._dep.depend();
+ return new RegExp(
+ `^.*${this._filter.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}.*$`,
+ 'i',
+ );
+ }
}
// The global Filter object.
@@ -455,6 +463,7 @@ Filter = {
hideEmpty: new SetFilter(),
customFields: new SetFilter('_id'),
advanced: new AdvancedFilter(),
+ lists: new AdvancedFilter(), // we need the ability to filter list by name as well
_fields: ['labelIds', 'members', 'archive', 'hideEmpty', 'customFields'],
@@ -468,7 +477,9 @@ Filter = {
return (
_.any(this._fields, fieldName => {
return this[fieldName]._isActive();
- }) || this.advanced._isActive()
+ }) ||
+ this.advanced._isActive() ||
+ this.lists._isActive()
);
},
@@ -533,6 +544,7 @@ Filter = {
const filter = this[fieldName];
filter.reset();
});
+ this.lists.reset();
this.advanced.reset();
this.resetExceptions();
},
diff --git a/client/lib/textComplete.js b/client/lib/textComplete.js
index 0261d7f6..8b6dc1f7 100644
--- a/client/lib/textComplete.js
+++ b/client/lib/textComplete.js
@@ -45,6 +45,7 @@ $.fn.escapeableTextComplete = function(strategies, options, ...otherArgs) {
});
},
});
+ return this;
};
EscapeActions.register('textcomplete', () => {}, () => dropdownMenuIsOpened, {
diff --git a/client/lib/utils.js b/client/lib/utils.js
index 81835929..c90dd749 100644
--- a/client/lib/utils.js
+++ b/client/lib/utils.js
@@ -1,10 +1,59 @@
Utils = {
+ setBoardView(view) {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ currentUser = Meteor.user();
+ if (currentUser) {
+ Meteor.user().setBoardView(view);
+ } else if (view === 'board-view-lists') {
+ cookies.set('boardView', 'board-view-lists'); //true
+ } else if (view === 'board-view-swimlanes') {
+ cookies.set('boardView', 'board-view-swimlanes'); //true
+ //} else if (view === 'board-view-collapse') {
+ // cookies.set('boardView', 'board-view-swimlane'); //true
+ // cookies.set('collapseSwimlane', 'true'); //true
+ } else if (view === 'board-view-cal') {
+ cookies.set('boardView', 'board-view-cal'); //true
+ }
+ },
+
+ unsetBoardView() {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ cookies.remove('boardView');
+ cookies.remove('collapseSwimlane');
+ },
+
+ boardView() {
+ currentUser = Meteor.user();
+ if (currentUser) {
+ return (currentUser.profile || {}).boardView;
+ } else {
+ import { Cookies } from 'meteor/ostrio:cookies';
+ const cookies = new Cookies();
+ if (cookies.get('boardView') === 'board-view-lists') {
+ return 'board-view-lists';
+ } else if (
+ cookies.get('boardView') === 'board-view-swimlanes'
+ //&& !cookies.has('collapseSwimlane')
+ ) {
+ return 'board-view-swimlanes';
+ //} else if (cookies.has('collapseSwimlane')) {
+ // return 'board-view-swimlanes';
+ } else if (cookies.get('boardView') === 'board-view-cal') {
+ return 'board-view-cal';
+ } else {
+ return false;
+ }
+ }
+ },
+
// XXX We should remove these two methods
goBoardId(_id) {
const board = Boards.findOne(_id);
return (
- board &&
- FlowRouter.go('board', {
+ board
+ && FlowRouter.go('board', {
id: board._id,
slug: board.slug,
})
@@ -15,15 +64,14 @@ Utils = {
const card = Cards.findOne(_id);
const board = Boards.findOne(card.boardId);
return (
- board &&
- FlowRouter.go('card', {
+ board
+ && FlowRouter.go('card', {
cardId: card._id,
boardId: board._id,
slug: board.slug,
})
);
},
-
MAX_IMAGE_PIXEL: Meteor.settings.public.MAX_IMAGE_PIXEL,
COMPRESS_RATIO: Meteor.settings.public.IMAGE_COMPRESS_RATIO,
processUploadedAttachment(card, fileObj, callback) {
@@ -188,8 +236,8 @@ Utils = {
};
if (
- 'ontouchstart' in window ||
- (window.DocumentTouch && document instanceof window.DocumentTouch)
+ 'ontouchstart' in window
+ || (window.DocumentTouch && document instanceof window.DocumentTouch)
) {
return true;
}
@@ -210,8 +258,8 @@ Utils = {
calculateTouchDistance(touchA, touchB) {
return Math.sqrt(
- Math.pow(touchA.screenX - touchB.screenX, 2) +
- Math.pow(touchA.screenY - touchB.screenY, 2),
+ Math.pow(touchA.screenX - touchB.screenX, 2)
+ + Math.pow(touchA.screenY - touchB.screenY, 2),
);
},
@@ -228,9 +276,9 @@ Utils = {
});
$(document).on('touchend', selector, function(e) {
if (
- touchStart &&
- lastTouch &&
- Utils.calculateTouchDistance(touchStart, lastTouch) <= 20
+ touchStart
+ && lastTouch
+ && Utils.calculateTouchDistance(touchStart, lastTouch) <= 20
) {
e.preventDefault();
const clickEvent = document.createEvent('MouseEvents');
diff --git a/docker-compose.yml b/docker-compose.yml
index 48c4870e..a0e641c1 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -93,7 +93,7 @@ services:
#-------------------------------------------------------------------------------------
# ==== MONGODB AND METEOR VERSION ====
# a) For Wekan Meteor 1.8.x version at master branch, use mongo 4.x
- image: mongo:4.0.11
+ image: mongo:4.0.12
# b) For Wekan Meteor 1.6.x version at devel branch.
# Only for Snap and Sandstorm while they are not upgraded yet to Meteor 1.8.x
#image: mongo:3.2.21
@@ -251,19 +251,19 @@ services:
#---------------------------------------------------------------
# ==== BIGEVENTS DUE ETC NOTIFICATIONS =====
# https://github.com/wekan/wekan/pull/2541
- # Introduced a system env var BIGEVENTS_PATTERN default as "due",
+ # Introduced a system env var BIGEVENTS_PATTERN default as "NONE",
# so any activityType matches the pattern, system will send out
# notifications to all board members no matter they are watching
# or tracking the board or not. Owner of the wekan server can
# disable the feature by setting this variable to "NONE" or
# change the pattern to any valid regex. i.e. '|' delimited
# activityType names.
- # a) Default
+ # a) Example
#- BIGEVENTS_PATTERN=due
# b) All
#- BIGEVENTS_PATTERN=received|start|due|end
# c) Disabled
- #- BIGEVENTS_PATTERN=NONE
+ - BIGEVENTS_PATTERN=NONE
#---------------------------------------------------------------
# ==== EMAIL DUE DATE NOTIFICATION =====
# https://github.com/wekan/wekan/pull/2536
@@ -271,8 +271,8 @@ services:
# dueat startat endat receivedat, also notification to
# the watchers and if any card is due, about due or past due.
#
- # Notify due days, default 2 days before and after. 0 = due notifications disabled. Default: 2
- #- NOTIFY_DUE_DAYS_BEFORE_AND_AFTER=2
+ # Notify due days, default is None, 2 days before and on the event day
+ #- NOTIFY_DUE_DAYS_BEFORE_AND_AFTER=2,0
#
# Notify due at hour of day. Default every morning at 8am. Can be 0-23.
# If env variable has parsing error, use default. Notification sent to watchers.
@@ -426,8 +426,10 @@ services:
# If the LDAP needs a user account to search
#- LDAP_AUTHENTIFICATION=true
#
- # The search user DN
- #- LDAP_AUTHENTIFICATION_USERDN=cn=wekan_adm,ou=serviceaccounts,ou=admin,ou=prod,dc=mydomain,dc=com
+ # The search user DN - You need quotes when you have spaces in parameters
+ # 2 examples:
+ #- LDAP_AUTHENTIFICATION_USERDN="CN=ldap admin,CN=users,DC=domainmatter,DC=lan"
+ #- LDAP_AUTHENTIFICATION_USERDN="CN=wekan_adm,OU=serviceaccounts,OU=admin,OU=prod,DC=mydomain,DC=com"
#
# The password for the search user
#- LDAP_AUTHENTIFICATION_PASSWORD=pwd
diff --git a/i18n/ar.i18n.json b/i18n/ar.i18n.json
index 9ac54ad9..dc777881 100644
--- a/i18n/ar.i18n.json
+++ b/i18n/ar.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "تعديل وضوح الرؤية",
"boardChangeWatchPopup-title": "تغيير المتابعة",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "عرض اللوحات",
"boards": "لوحات",
"board-view": "عرض اللوحات",
"board-view-cal": "التقويم",
"board-view-swimlanes": "خطوط السباحة",
+ "board-view-collapse": "Collapse",
"board-view-lists": "القائمات",
"bucket-example": "مثل « todo list » على سبيل المثال",
"cancel": "إلغاء",
@@ -300,8 +302,18 @@
"error-username-taken": "إسم المستخدم مأخوذ مسبقا",
"error-email-taken": "البريد الإلكتروني مأخوذ بالفعل",
"export-board": "Export board",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "تصفية",
- "filter-cards": "تصفية البطاقات",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "مسح التصفية",
"filter-no-label": "لا يوجد ملصق",
"filter-no-member": "ليس هناك أي عضو",
@@ -426,7 +438,7 @@
"save": "حفظ",
"search": "بحث",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "اختيار اللون",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "رمز الدعوة غير موجود",
"error-notAuthorized": "أنتَ لا تملك الصلاحيات لرؤية هذه الصفحة.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "الويبهوك الصادرة",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "الويبهوك الصادرة",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "ويبهوك جديدة ",
"no-name": "(غير معروف)",
"Node_version": "إصدار النود",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/bg.i18n.json b/i18n/bg.i18n.json
index ecad26a2..acfc605f 100644
--- a/i18n/bg.i18n.json
+++ b/i18n/bg.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Промени наблюдаването",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Табла",
"board-view": "Board View",
"board-view-cal": "Календар",
"board-view-swimlanes": "Коридори",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Списъци",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
@@ -300,8 +302,18 @@
"error-username-taken": "Това потребителско име е вече заето",
"error-email-taken": "Имейлът е вече зает",
"export-board": "Експортиране на Табло",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Филтър",
- "filter-cards": "Филтрирай картите",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Премахване на филтрите",
"filter-no-label": "без етикет",
"filter-no-member": "без член",
@@ -426,7 +438,7 @@
"save": "Запази",
"search": "Търсене",
"rules": "Правила",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Избери цвят",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "Успешно изпратихте имейл",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Версия на Node",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/br.i18n.json b/i18n/br.i18n.json
index 26ca2833..1d38911e 100644
--- a/i18n/br.i18n.json
+++ b/i18n/br.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Lists",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
@@ -300,8 +302,18 @@
"error-username-taken": "This username is already taken",
"error-email-taken": "Email has already been taken",
"export-board": "Export board",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filter",
- "filter-cards": "Filter Cards",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "No member",
@@ -426,7 +438,7 @@
"save": "Save",
"search": "Search",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/ca.i18n.json b/i18n/ca.i18n.json
index 2562b974..d35ef090 100644
--- a/i18n/ca.i18n.json
+++ b/i18n/ca.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Canvia visibilitat",
"boardChangeWatchPopup-title": "Canvia seguiment",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Visió del tauler",
"boards": "Taulers",
"board-view": "Visió del tauler",
"board-view-cal": "Calendari",
"board-view-swimlanes": "Carrils de Natació",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Llistes",
"bucket-example": "Igual que “Bucket List”, per exemple",
"cancel": "Cancel·la",
@@ -300,8 +302,18 @@
"error-username-taken": "Aquest usuari ja existeix",
"error-email-taken": "L'adreça de correu electrònic ja és en ús",
"export-board": "Exporta tauler",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filtre",
- "filter-cards": "Fitxes de filtre",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Elimina filtre",
"filter-no-label": "Sense etiqueta",
"filter-no-member": "Sense membres",
@@ -426,7 +438,7 @@
"save": "Desa",
"search": "Cerca",
"rules": "Regles",
- "search-cards": "Cerca títols de fitxa i descripcions en aquest tauler",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text que cercar?",
"select-color": "Selecciona color",
"set-wip-limit-value": "Limita el màxim nombre de tasques en aquesta llista",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "Has enviat un missatge satisfactòriament",
"error-invitation-code-not-exist": "El codi d'invitació no existeix",
"error-notAuthorized": "No estau autoritzats per veure aquesta pàgina",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Webhooks sortints",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Webhooks sortints",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "Nou Webook sortint",
"no-name": "Importa tauler des de Wekan",
"Node_version": "Versió Node",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/cs.i18n.json b/i18n/cs.i18n.json
index 305a8c29..d09a5dbc 100644
--- a/i18n/cs.i18n.json
+++ b/i18n/cs.i18n.json
@@ -74,7 +74,7 @@
"activity-checklist-completed-card": "dokončil(a) zaškrtávací seznam __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"activity-checklist-uncompleted-card": "nedokončený seznam %s",
"activity-editComment": "edited comment %s",
- "activity-deleteComment": "deleted comment %s",
+ "activity-deleteComment": "smazat komentář %s",
"add-attachment": "Přidat přílohu",
"add-board": "Přidat tablo",
"add-card": "Přidat kartu",
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Upravit viditelnost",
"boardChangeWatchPopup-title": "Změnit sledování",
"boardMenuPopup-title": "Nastavení Tabla",
+ "boardChangeViewPopup-title": "Náhled tabla",
"boards": "Tabla",
"board-view": "Náhled tabla",
"board-view-cal": "Kalendář",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Sloupce",
"bucket-example": "Například \"O čem sním\"",
"cancel": "Zrušit",
@@ -300,8 +302,18 @@
"error-username-taken": "Toto uživatelské jméno již existuje",
"error-email-taken": "Tento email byl již použit",
"export-board": "Exportovat tablo",
+ "sort": "řadit",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "řadit seznam podle",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filtr",
- "filter-cards": "Filtrovat karty",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Vyčistit filtr",
"filter-no-label": "Žádný štítek",
"filter-no-member": "Žádný člen",
@@ -426,7 +438,7 @@
"save": "Uložit",
"search": "Hledat",
"rules": "Pravidla",
- "search-cards": "Hledat nadpisy a popisy karet v tomto tablu",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Hledaný text",
"select-color": "Vybrat barvu",
"set-wip-limit-value": "Nastaví limit pro maximální počet úkolů ve sloupci.",
@@ -510,14 +522,19 @@
"email-smtp-test-text": "Email byl úspěšně odeslán",
"error-invitation-code-not-exist": "Kód pozvánky neexistuje.",
"error-notAuthorized": "Nejste autorizován k prohlížení této stránky.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Odchozí Webhooky",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Odchozí Webhooky",
"boardCardTitlePopup-title": "Filtr názvů karet",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "Nové odchozí Webhooky",
"no-name": "(Neznámé)",
"Node_version": "Node verze",
"Meteor_version": "Meteor version",
- "MongoDB_version": "MongoDB version",
+ "MongoDB_version": "MongoDB verze",
"MongoDB_storage_engine": "MongoDB storage engine",
"MongoDB_Oplog_enabled": "MongoDB Oplog enabled",
"OS_Arch": "OS Architektura",
@@ -684,9 +701,9 @@
"r-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
- "r-df-start-at": "start",
+ "r-df-start-at": "začátek",
"r-df-due-at": "due",
- "r-df-end-at": "end",
+ "r-df-end-at": "konec",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/da.i18n.json b/i18n/da.i18n.json
index 2a100bf6..29c74d42 100644
--- a/i18n/da.i18n.json
+++ b/i18n/da.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Lists",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
@@ -300,8 +302,18 @@
"error-username-taken": "This username is already taken",
"error-email-taken": "Email has already been taken",
"export-board": "Export board",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filter",
- "filter-cards": "Filter Cards",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "No member",
@@ -426,7 +438,7 @@
"save": "Save",
"search": "Search",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/de.i18n.json b/i18n/de.i18n.json
index 20a9782f..579df952 100644
--- a/i18n/de.i18n.json
+++ b/i18n/de.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Sichtbarkeit ändern",
"boardChangeWatchPopup-title": "Beobachtung ändern",
"boardMenuPopup-title": "Boardeinstellungen",
+ "boardChangeViewPopup-title": "Boardansicht",
"boards": "Boards",
"board-view": "Boardansicht",
"board-view-cal": "Kalender",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Listen",
"bucket-example": "z.B. \"Löffelliste\"",
"cancel": "Abbrechen",
@@ -300,8 +302,18 @@
"error-username-taken": "Dieser Benutzername ist bereits vergeben",
"error-email-taken": "E-Mail wird schon verwendet",
"export-board": "Board exportieren",
+ "sort": "Sortieren",
+ "sort-desc": "Zum Sortieren der Liste klicken",
+ "list-sort-by": "Sortieren der Liste nach:",
+ "list-label-modifiedAt": "Letzte Zugriffszeit",
+ "list-label-title": "Name der Liste",
+ "list-label-sort": "Ihre manuelle Sortierung",
+ "list-label-short-modifiedAt": "(Z)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filter",
- "filter-cards": "Karten filtern",
+ "filter-cards": "Karten oder Listen filtern",
+ "list-filter-label": "Liste nach Titel filtern",
"filter-clear": "Filter entfernen",
"filter-no-label": "Kein Label",
"filter-no-member": "Kein Mitglied",
@@ -426,7 +438,7 @@
"save": "Speichern",
"search": "Suchen",
"rules": "Regeln",
- "search-cards": "Suche nach Kartentiteln und Beschreibungen auf diesem Board",
+ "search-cards": "Suche nach Karten-/Listentiteln und Beschreibungen auf diesem Board",
"search-example": "Suchbegriff",
"select-color": "Farbe auswählen",
"set-wip-limit-value": "Setzen Sie ein Limit für die maximale Anzahl von Aufgaben in dieser Liste",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "Sie haben erfolgreich eine E-Mail versandt",
"error-invitation-code-not-exist": "Ungültiger Einladungscode",
"error-notAuthorized": "Sie sind nicht berechtigt diese Seite zu sehen.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional für Authentifizierung)",
"outgoing-webhooks": "Ausgehende Webhooks",
+ "bidirectional-webhooks": "Zwei-Wege Webhooks",
"outgoingWebhooksPopup-title": "Ausgehende Webhooks",
"boardCardTitlePopup-title": "Kartentitelfilter",
+ "disable-webhook": "Diesen Webhook deaktivieren",
+ "global-webhook": "Globale Webhooks",
"new-outgoing-webhook": "Neuer ausgehender Webhook",
"no-name": "(Unbekannt)",
"Node_version": "Node-Version",
@@ -723,12 +740,16 @@
"almostdue": "aktuelles Fälligkeitsdatum %s bevorstehend",
"pastdue": "aktuelles Fälligkeitsdatum %s überschritten",
"duenow": "aktuelles Fälligkeitsdatum %s heute",
- "act-withDue": "__card__ fällige Erinnerungen [__board__]",
+ "act-newDue": "__list__/__card__ hat seine 1. fällige Erinnerung [__board__]",
+ "act-withDue": "Erinnerung an Fällikgeit von __card__ [__board__]",
"act-almostdue": "erinnernd an das aktuelle Fälligkeitszeitpunkt (__timeValue__) von __card__ ist bevorstehend",
"act-pastdue": "erinnernd an das aktuelle Fälligkeitszeitpunkt (__timeValue__) von __card__ ist vorbei",
"act-duenow": "erinnernd an das aktuelle Fälligkeitszeitpunkt (__timeValue__) von __card__ ist jetzt",
- "act-atUserComment": "Du wurdest erwähnt in [__board__] __card__",
+ "act-atUserComment": "Sie wurden in [__board__] __list__/__card__ erwähnt",
"delete-user-confirm-popup": "Sind Sie sicher, dass Sie diesen Account löschen wollen? Die Aktion kann nicht rückgängig gemacht werden.",
"accounts-allowUserDelete": "Erlaube Benutzern ihren eigenen Account zu löschen",
- "hide-minicard-label-text": "Labeltext auf Minikarte ausblenden"
+ "hide-minicard-label-text": "Labeltext auf Minikarte ausblenden",
+ "show-desktop-drag-handles": "Desktop-Ziehpunkte anzeigen",
+ "assignee": "Zugewiesen",
+ "cardAssigneesPopup-title": "Zugewiesen"
}
diff --git a/i18n/el.i18n.json b/i18n/el.i18n.json
index 9ed02c43..2a3fc9ad 100644
--- a/i18n/el.i18n.json
+++ b/i18n/el.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Αλλαγή Ορατότητας",
"boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "Ρυθμίσεις Πίνακα",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Πίνακες",
"board-view": "Board View",
"board-view-cal": "Ημερολόγιο",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Λίστες",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Ακύρωση",
@@ -300,8 +302,18 @@
"error-username-taken": "This username is already taken",
"error-email-taken": "Email has already been taken",
"export-board": "Εξαγωγή πίνακα",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Φίλτρο",
- "filter-cards": "Filter Cards",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "Κανένα μέλος",
@@ -426,7 +438,7 @@
"save": "Αποθήκευση",
"search": "Αναζήτηση",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Επιλέξτε Χρώμα",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Ο κωδικός πρόσκλησης δεν υπάρχει",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Άγνωστο)",
"Node_version": "Έκδοση Node",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/en-GB.i18n.json b/i18n/en-GB.i18n.json
index 0c044698..cab60a9d 100644
--- a/i18n/en-GB.i18n.json
+++ b/i18n/en-GB.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Lists",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
@@ -300,8 +302,18 @@
"error-username-taken": "This username is already taken",
"error-email-taken": "Email has already been taken",
"export-board": "Export board",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filter",
- "filter-cards": "Filter Cards",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "No member",
@@ -426,7 +438,7 @@
"save": "Save",
"search": "Search",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Colour",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorised to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json
index 672c8eac..fb8370e5 100644
--- a/i18n/en.i18n.json
+++ b/i18n/en.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Lists",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
@@ -300,8 +302,18 @@
"error-username-taken": "This username is already taken",
"error-email-taken": "Email has already been taken",
"export-board": "Export board",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filter",
- "filter-cards": "Filter Cards",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "No member",
@@ -426,7 +438,7 @@
"save": "Save",
"search": "Search",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -726,12 +743,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/eo.i18n.json b/i18n/eo.i18n.json
index 85f47b71..ed223199 100644
--- a/i18n/eo.i18n.json
+++ b/i18n/eo.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Listoj",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
@@ -300,8 +302,18 @@
"error-username-taken": "Uzantnomo jam prenita",
"error-email-taken": "Email has already been taken",
"export-board": "Export board",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filter",
- "filter-cards": "Filter Cards",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-no-label": "Nenia etikedo",
"filter-no-member": "Nenia membro",
@@ -426,7 +438,7 @@
"save": "Savi",
"search": "Serĉi",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/es-AR.i18n.json b/i18n/es-AR.i18n.json
index 9d9a0ad3..f63b5fc3 100644
--- a/i18n/es-AR.i18n.json
+++ b/i18n/es-AR.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Cambiar Visibilidad",
"boardChangeWatchPopup-title": "Alternar Seguimiento",
"boardMenuPopup-title": "Opciones del Tablero",
+ "boardChangeViewPopup-title": "Vista de Tablero",
"boards": "Tableros",
"board-view": "Vista de Tablero",
"board-view-cal": "Calendario",
"board-view-swimlanes": "Calles",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Listas",
"bucket-example": "Como \"Lista de Contenedores\" por ejemplo",
"cancel": "Cancelar",
@@ -300,8 +302,18 @@
"error-username-taken": "El nombre de usuario ya existe",
"error-email-taken": "El email ya existe",
"export-board": "Exportar tablero",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filtrar",
- "filter-cards": "Filtrar Tarjetas",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Sacar filtro",
"filter-no-label": "Sin etiqueta",
"filter-no-member": "No es miembro",
@@ -426,7 +438,7 @@
"save": "Grabar",
"search": "Buscar",
"rules": "Rules",
- "search-cards": "Buscar en títulos y descripciones de tarjeta en este tablero",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "¿Texto a buscar?",
"select-color": "Seleccionar Color",
"set-wip-limit-value": "Fijar un límite para el número máximo de tareas en esta lista",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "Enviaste el correo correctamente",
"error-invitation-code-not-exist": "El código de invitación no existe",
"error-notAuthorized": "No estás autorizado para ver esta página.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Ganchos Web Salientes",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Ganchos Web Salientes",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "Nuevo Gancho Web",
"no-name": "(desconocido)",
"Node_version": "Versión de Node",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/es.i18n.json b/i18n/es.i18n.json
index 5805ca9a..32cf26ea 100644
--- a/i18n/es.i18n.json
+++ b/i18n/es.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Cambiar visibilidad",
"boardChangeWatchPopup-title": "Cambiar vigilancia",
"boardMenuPopup-title": "Preferencias del tablero",
+ "boardChangeViewPopup-title": "Vista del tablero",
"boards": "Tableros",
"board-view": "Vista del tablero",
"board-view-cal": "Calendario",
"board-view-swimlanes": "Carriles",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Listas",
"bucket-example": "Como “Cosas por hacer” por ejemplo",
"cancel": "Cancelar",
@@ -300,8 +302,18 @@
"error-username-taken": "Este nombre de usuario ya está en uso",
"error-email-taken": "Esta dirección de correo ya está en uso",
"export-board": "Exportar el tablero",
+ "sort": "Ordenar",
+ "sort-desc": "Click 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",
+ "list-label-sort": "Tu orden manual",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filtrar",
- "filter-cards": "Filtrar tarjetas",
+ "filter-cards": "Filtrar tarjetas o listas",
+ "list-filter-label": "Filtrar listas por título",
"filter-clear": "Limpiar el filtro",
"filter-no-label": "Sin etiqueta",
"filter-no-member": "Sin miembro",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "El correo se ha enviado correctamente",
"error-invitation-code-not-exist": "El código de invitación no existe",
"error-notAuthorized": "No estás autorizado a ver esta página.",
+ "webhook-title": "Nombre del Webhook",
+ "webhook-token": "Token (opcional para la autenticación)",
"outgoing-webhooks": "Webhooks salientes",
+ "bidirectional-webhooks": "Webhooks de doble sentido",
"outgoingWebhooksPopup-title": "Webhooks salientes",
"boardCardTitlePopup-title": "Filtro de títulos de tarjeta",
+ "disable-webhook": "Deshabilitar este Webhook",
+ "global-webhook": "Webhooks globales",
"new-outgoing-webhook": "Nuevo webhook saliente",
"no-name": "(Desconocido)",
"Node_version": "Versión de Node",
@@ -723,12 +740,16 @@
"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-withDue": "__card__ notificaciones de vencimiento [__board__]",
+ "act-newDue": "__list__/__card__ tiene una 1ra 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": "Te mencionaron en [__board__] __card__",
+ "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.",
"accounts-allowUserDelete": "Permitir a los usuarios eliminar su cuenta",
- "hide-minicard-label-text": "Ocultar el texto de la etiqueta de la minitarjeta"
+ "hide-minicard-label-text": "Ocultar el texto de la etiqueta de la minitarjeta",
+ "show-desktop-drag-handles": "Mostrar los controles de arrastre del escritorio",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/eu.i18n.json b/i18n/eu.i18n.json
index fe6f66ae..aebee0f5 100644
--- a/i18n/eu.i18n.json
+++ b/i18n/eu.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Aldatu ikusgaitasuna",
"boardChangeWatchPopup-title": "Aldatu ikuskatzea",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Arbelak",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Zerrendak",
"bucket-example": "Esaterako \"Pertz zerrenda\"",
"cancel": "Utzi",
@@ -300,8 +302,18 @@
"error-username-taken": "Erabiltzaile-izen hori hartuta dago",
"error-email-taken": "E-mail hori hartuta dago",
"export-board": "Esportatu arbela",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Iragazi",
- "filter-cards": "Iragazi txartelak",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Garbitu iragazkia",
"filter-no-label": "Etiketarik ez",
"filter-no-member": "Kiderik ez",
@@ -426,7 +438,7 @@
"save": "Gorde",
"search": "Bilatu",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Aukeratu kolorea",
"set-wip-limit-value": "Zerrenda honetako atazen muga maximoa ezarri",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "Arrakastaz bidali duzu posta elektroniko mezua",
"error-invitation-code-not-exist": "Gonbidapen kodea ez da existitzen",
"error-notAuthorized": "Ez duzu orri hau ikusteko baimenik.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Irteerako Webhook-ak",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Irteerako Webhook-ak",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "Irteera-webhook berria",
"no-name": "(Ezezaguna)",
"Node_version": "Nodo bertsioa",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/fa.i18n.json b/i18n/fa.i18n.json
index 6e2eec6f..3471a37e 100644
--- a/i18n/fa.i18n.json
+++ b/i18n/fa.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "تغییر وضعیت نمایش",
"boardChangeWatchPopup-title": "تغییر دیده بانی",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "نمایش تخته",
"boards": "تخته‌ها",
"board-view": "نمایش تخته",
"board-view-cal": "تقویم",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "فهرست‌ها",
"bucket-example": "برای مثال چیزی شبیه \"لیست سبدها\"",
"cancel": "انصراف",
@@ -300,8 +302,18 @@
"error-username-taken": "این نام کاربری استفاده شده است",
"error-email-taken": "رایانامه توسط گیرنده دریافت شده است",
"export-board": "انتقال به بیرون تخته",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "صافی ـFilterـ",
- "filter-cards": "صافی ـFilterـ کارت‌ها",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "حذف صافی ـFilterـ",
"filter-no-label": "بدون برچسب",
"filter-no-member": "بدون عضو",
@@ -426,7 +438,7 @@
"save": "ذخیره",
"search": "جستجو",
"rules": "قوانین",
- "search-cards": "جستجو در میان عناوین و توضیحات در این تخته",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "متن مورد جستجو؟",
"select-color": "انتخاب رنگ",
"set-wip-limit-value": "تعیین بیشینه تعداد وظایف در این فهرست",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "با موفقیت، یک رایانامه را فرستادید",
"error-invitation-code-not-exist": "چنین کد دعوتی یافت نشد",
"error-notAuthorized": "شما مجاز به دیدن این صفحه نیستید.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "فیلتر موضوع کارت",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(ناشناخته)",
"Node_version": "نسخه Node",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "به شما در [__board__] __card__ اشاره شده",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/fi.i18n.json b/i18n/fi.i18n.json
index 1ecbfae9..7249def3 100644
--- a/i18n/fi.i18n.json
+++ b/i18n/fi.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Muokkaa näkyvyyttä",
"boardChangeWatchPopup-title": "Muokkaa seuraamista",
"boardMenuPopup-title": "Tauluasetukset",
+ "boardChangeViewPopup-title": "Taulunäkymä",
"boards": "Taulut",
"board-view": "Taulunäkymä",
"board-view-cal": "Kalenteri",
"board-view-swimlanes": "Swimlanet",
+ "board-view-collapse": "Pienennä",
"board-view-lists": "Listat",
"bucket-example": "Kuten “Laatikko lista” esimerkiksi",
"cancel": "Peruuta",
@@ -300,8 +302,18 @@
"error-username-taken": "Tämä käyttäjätunnus on jo käytössä",
"error-email-taken": "Sähköpostiosoite on jo käytössä",
"export-board": "Vie taulu",
+ "sort": "Lajittele",
+ "sort-desc": "Klikkaa lajitellaksesi listan",
+ "list-sort-by": "Lajittele lista:",
+ "list-label-modifiedAt": "Viimeinen käyttöaika",
+ "list-label-title": "Listan nimi",
+ "list-label-sort": "Oma manuaalinen järjestys",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Suodata",
- "filter-cards": "Suodata kortit",
+ "filter-cards": "Suodata kortit tai listat",
+ "list-filter-label": "Suodata listat otsikon mukaan",
"filter-clear": "Poista suodatin",
"filter-no-label": "Ei tunnistetta",
"filter-no-member": "Ei jäseniä",
@@ -426,7 +438,7 @@
"save": "Tallenna",
"search": "Etsi",
"rules": "Säännöt",
- "search-cards": "Etsi korttien otsikoista ja kuvauksista tällä taululla",
+ "search-cards": "Etsi kortin/listan otsikoista ja kuvauksista tällä taululla",
"search-example": "Etsittävä teksti?",
"select-color": "Valitse väri",
"set-wip-limit-value": "Aseta tämän listan tehtävien enimmäismäärä",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "Olet onnistuneesti lähettänyt sähköpostin",
"error-invitation-code-not-exist": "Kutsukoodia ei ole olemassa",
"error-notAuthorized": "Sinulla ei ole oikeutta tarkastella tätä sivua.",
+ "webhook-title": "Webkoukun nimi",
+ "webhook-token": "Token (Valinnainen autentikoinnissa)",
"outgoing-webhooks": "Lähtevät Webkoukut",
+ "bidirectional-webhooks": "Kaksisuuntaiset Webkoukut",
"outgoingWebhooksPopup-title": "Lähtevät Webkoukut",
"boardCardTitlePopup-title": "Kortin otsikkosuodatin",
+ "disable-webhook": "Poista käytöstä tämä Webkoukku",
+ "global-webhook": "Kaikenkattavat Webkoukut",
"new-outgoing-webhook": "Uusi lähtevä Webkoukku",
"no-name": "(Tuntematon)",
"Node_version": "Node-versio",
@@ -723,12 +740,16 @@
"almostdue": "nykyinen eräaika %s lähestyy",
"pastdue": "nykyinen eräaika %s on mennyt",
"duenow": "nykyinen eräaika %s on tänään",
- "act-withDue": "__card__ eräaika muistutukset [__board__]",
+ "act-newDue": "__list__/__card__ on 1. erääntymismuistutus [__board__]",
+ "act-withDue": "__list__/__card__ erääntymismuistutukset [__board__]",
"act-almostdue": "muistutti nykyisen eräajan (__timeValue__) kortilla __card__ lähestyvän",
"act-pastdue": "muistutti nykyisen eräajan (__timeValue__) kortilla __card__ menneen",
"act-duenow": "muistutti nykyisen eräajan (__timeValue__) kortilla __card__ olevan nyt",
- "act-atUserComment": "Sinut mainittiin [__board__] __card__",
+ "act-atUserComment": "Sinut mainittiin [__board__] __list__/__card__",
"delete-user-confirm-popup": "Haluatko varmasti poistaa tämän käyttäjätilin? Tätä ei voi peruuttaa.",
"accounts-allowUserDelete": "Salli käyttäjien poistaa tilinsä itse",
- "hide-minicard-label-text": "Piilota minikortin tunniste teksti"
+ "hide-minicard-label-text": "Piilota minikortin tunniste teksti",
+ "show-desktop-drag-handles": "Näytä työpöydän vedon kahvat",
+ "assignee": "Valtuutettu",
+ "cardAssigneesPopup-title": "Valtuutettu"
}
diff --git a/i18n/fr.i18n.json b/i18n/fr.i18n.json
index f7462274..fa0b348c 100644
--- a/i18n/fr.i18n.json
+++ b/i18n/fr.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Changer la visibilité",
"boardChangeWatchPopup-title": "Modifier le suivi",
"boardMenuPopup-title": "Paramètres du tableau",
+ "boardChangeViewPopup-title": "Vue du tableau",
"boards": "Tableaux",
"board-view": "Vue du tableau",
"board-view-cal": "Calendrier",
"board-view-swimlanes": "Couloirs",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Listes",
"bucket-example": "Comme « todo list » par exemple",
"cancel": "Annuler",
@@ -300,8 +302,18 @@
"error-username-taken": "Ce nom d'utilisateur est déjà utilisé",
"error-email-taken": "Cette adresse mail est déjà utilisée",
"export-board": "Exporter le tableau",
+ "sort": "Tri",
+ "sort-desc": "Cliquez pour trier la liste",
+ "list-sort-by": "Trier la liste par:",
+ "list-label-modifiedAt": "Dernier accès",
+ "list-label-title": "Nom de liste",
+ "list-label-sort": "Votre manuel",
+ "list-label-short-modifiedAt": "(D)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filtrer",
- "filter-cards": "Filtrer les cartes",
+ "filter-cards": "Filtrer les cartes ou listes",
+ "list-filter-label": "Filtrer la liste par titre",
"filter-clear": "Supprimer les filtres",
"filter-no-label": "Aucune étiquette",
"filter-no-member": "Aucun participant",
@@ -426,7 +438,7 @@
"save": "Enregistrer",
"search": "Chercher",
"rules": "Règles",
- "search-cards": "Rechercher parmi les titres et descriptions des cartes de ce tableau",
+ "search-cards": "Chercher selon les titres de carte/liste et descriptions de ce tableau",
"search-example": "Texte à rechercher ?",
"select-color": "Sélectionner une couleur",
"set-wip-limit-value": "Définit une limite maximale au nombre de cartes de cette liste",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "Vous avez envoyé un mail avec succès",
"error-invitation-code-not-exist": "Ce code d'invitation n'existe pas.",
"error-notAuthorized": "Vous n'êtes pas autorisé à accéder à cette page.",
+ "webhook-title": "Nom du webhook",
+ "webhook-token": "Jeton (optionnel pour l'authentification)",
"outgoing-webhooks": "Webhooks sortants",
+ "bidirectional-webhooks": "Webhooks bidirectionnels",
"outgoingWebhooksPopup-title": "Webhooks sortants",
"boardCardTitlePopup-title": "Filtre par titre de carte",
+ "disable-webhook": "Désactiver ce webhook",
+ "global-webhook": "Webhooks globaux",
"new-outgoing-webhook": "Nouveau webhook sortant",
"no-name": "(Inconnu)",
"Node_version": "Version de Node",
@@ -723,12 +740,16 @@
"almostdue": "La date d'échéance %s approche",
"pastdue": "La date d'échéance %s est passée",
"duenow": "La date d'échéance %s est aujourd'hui",
- "act-withDue": "__card__ rappel d'échéance [__board__]",
+ "act-newDue": "__list__/__card__ a un 1er rappel d'échéance [__board__]",
+ "act-withDue": "__list__/__card__ rappel d'échéance [__board__]",
"act-almostdue": "rappelle que l'échéance (__timeValue__) de __card__ approche",
"act-pastdue": "rappelle que l'échéance (__timeValue__) de __card__ est passée",
"act-duenow": "rappelle que l'échéance (__timeValue__) de __card__ est maintenant",
- "act-atUserComment": "Vous avez été mentionné dans [__board__] __card__",
+ "act-atUserComment": "Vous avez été mentionné dans [__board__] __list__/__card__",
"delete-user-confirm-popup": "Êtes-vous sûr de vouloir supprimer ce compte ? Cette opération ne peut pas être annulée. ",
"accounts-allowUserDelete": "Autoriser les utilisateurs à supprimer leur compte",
- "hide-minicard-label-text": "Cacher le label de la minicarte"
+ "hide-minicard-label-text": "Cacher le label de la minicarte",
+ "show-desktop-drag-handles": "Voir les poignées de déplacement du bureau",
+ "assignee": "Cessionnaire",
+ "cardAssigneesPopup-title": "Cessionnaire"
}
diff --git a/i18n/gl.i18n.json b/i18n/gl.i18n.json
index 36a18ac7..91ec6f06 100644
--- a/i18n/gl.i18n.json
+++ b/i18n/gl.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Taboleiros",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Listas",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancelar",
@@ -300,8 +302,18 @@
"error-username-taken": "Este nome de usuario xa está collido",
"error-email-taken": "Email has already been taken",
"export-board": "Exportar taboleiro",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filtro",
- "filter-cards": "Filtrar tarxetas",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Limpar filtro",
"filter-no-label": "Non hai etiquetas",
"filter-no-member": "Non hai membros",
@@ -426,7 +438,7 @@
"save": "Save",
"search": "Search",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/he.i18n.json b/i18n/he.i18n.json
index c2ffc789..a7e8f6b2 100644
--- a/i18n/he.i18n.json
+++ b/i18n/he.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "שינוי מצב הצגה",
"boardChangeWatchPopup-title": "שינוי הגדרת המעקב",
"boardMenuPopup-title": "הגדרות לוח",
+ "boardChangeViewPopup-title": "תצוגת לוח",
"boards": "לוחות",
"board-view": "תצוגת לוח",
"board-view-cal": "לוח שנה",
"board-view-swimlanes": "מסלולים",
+ "board-view-collapse": "צמצום",
"board-view-lists": "רשימות",
"bucket-example": "כמו למשל „רשימת המשימות“",
"cancel": "ביטול",
@@ -300,8 +302,18 @@
"error-username-taken": "המשתמש כבר קיים במערכת",
"error-email-taken": "כתובת הדוא״ל כבר נמצאת בשימוש",
"export-board": "ייצוא לוח",
+ "sort": "מיון",
+ "sort-desc": "לחיצה למיון הרשימה",
+ "list-sort-by": "מיון הרשימה לפי:",
+ "list-label-modifiedAt": "מועד הגישה האחרון:",
+ "list-label-title": "שם הרשימה",
+ "list-label-sort": "סדר ידני משלך",
+ "list-label-short-modifiedAt": "(ג)",
+ "list-label-short-title": "(ש)",
+ "list-label-short-sort": "(י)",
"filter": "מסנן",
- "filter-cards": "סינון כרטיסים",
+ "filter-cards": "סינון כרטיסים או רשימות",
+ "list-filter-label": "סינון רשימה לפי כותרת",
"filter-clear": "ניקוי המסנן",
"filter-no-label": "אין תווית",
"filter-no-member": "אין חבר כזה",
@@ -426,7 +438,7 @@
"save": "שמירה",
"search": "חיפוש",
"rules": "כללים",
- "search-cards": "חיפוש אחר כותרות ותיאורים של כרטיסים בלוח זה",
+ "search-cards": "חיפוש בין כותרות של כרטיסים/רשימות ותיאורים בלוח זה",
"search-example": "טקסט לחיפוש ?",
"select-color": "בחירת צבע",
"set-wip-limit-value": "הגדרת מגבלה למספר המרבי של משימות ברשימה זו",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "שלחת הודעת דוא״ל בהצלחה",
"error-invitation-code-not-exist": "קוד ההזמנה אינו קיים",
"error-notAuthorized": "אין לך הרשאה לצפות בעמוד זה.",
+ "webhook-title": "שם ההתלייה",
+ "webhook-token": "אסימון (כרשות לצורך אימות)",
"outgoing-webhooks": "קרסי רשת יוצאים",
+ "bidirectional-webhooks": "התליות דו־כיווניות",
"outgoingWebhooksPopup-title": "קרסי רשת יוצאים",
"boardCardTitlePopup-title": "מסנן כותרת כרטיס",
+ "disable-webhook": "השבתת ההתלייה הזאת",
+ "global-webhook": "התליות גלובליות",
"new-outgoing-webhook": "קרסי רשת יוצאים חדשים",
"no-name": "(לא ידוע)",
"Node_version": "גרסת Node",
@@ -723,12 +740,16 @@
"almostdue": "מועד היעד הנוכחי %s מתקרב",
"pastdue": "מועד היעד הנוכחי %s חלף",
"duenow": "מועד היעד הנוכחי %s הוא היום",
- "act-withDue": "__card__ תזכורות למועדי יעד [__board__]",
+ "act-newDue": "__list__/__card__ יש תזכורת ראשונה שתוקפה פג [__board__]",
+ "act-withDue": "__list__/__card__ יש תזכורות שתוקפן פג [__board__]",
"act-almostdue": "הזכירה שמועד היעד הנוכחי (__timeValue__) של __card__ מתקרב",
"act-pastdue": "הזכירה שמועד היעד הנוכחי (__timeValue__) של __card__ חלף",
"act-duenow": "הזכירה שמועד היעד הנוכחי (__timeValue__) של __card__ הוא עכשיו",
- "act-atUserComment": "אוזכרת תחת [__board__] ‏__card__",
+ "act-atUserComment": "אוזכרת תחת [__board__] __list__/__card__",
"delete-user-confirm-popup": "למחוק את החשבון הזה? אי אפשר לבטל.",
"accounts-allowUserDelete": "לאפשר למשתמשים למחוק את החשבונות של עצמם",
- "hide-minicard-label-text": "הסתרת טקסט התווית של מיני כרטיס"
+ "hide-minicard-label-text": "הסתרת טקסט התווית של מיני כרטיס",
+ "show-desktop-drag-handles": "הצגת ידיות גרירה של שולחן העבודה",
+ "assignee": "גורם אחראי",
+ "cardAssigneesPopup-title": "גורם אחראי"
}
diff --git a/i18n/hi.i18n.json b/i18n/hi.i18n.json
index e7e07323..d44f6224 100644
--- a/i18n/hi.i18n.json
+++ b/i18n/hi.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "दृश्यता बदलें",
"boardChangeWatchPopup-title": "बदलें वॉच",
"boardMenuPopup-title": "बोर्ड सेटिंग्स",
+ "boardChangeViewPopup-title": "बोर्ड दृष्टिकोण",
"boards": "बोर्डों",
"board-view": "बोर्ड दृष्टिकोण",
"board-view-cal": "तिथि-पत्र",
"board-view-swimlanes": "तैरना",
+ "board-view-collapse": "Collapse",
"board-view-lists": "सूचियाँ",
"bucket-example": "उदाहरण के लिए “बाल्टी सूची” की तरह",
"cancel": "रद्द करें",
@@ -300,8 +302,18 @@
"error-username-taken": "यह username is already taken",
"error-email-taken": "Email has already been taken",
"export-board": "Export बोर्ड",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filter",
- "filter-cards": "Filter कार्ड",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "No सदस्य",
@@ -426,7 +438,7 @@
"save": "Save",
"search": "Search",
"rules": "Rules",
- "search-cards": "Search से कार्ड titles और descriptions इस पर बोर्ड",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text तक search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set एक limit for the maximum number of tasks अंदर में यह list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully प्रेषित an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized तक आलोकन यह page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/hu.i18n.json b/i18n/hu.i18n.json
index c667cee9..03c1257d 100644
--- a/i18n/hu.i18n.json
+++ b/i18n/hu.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Láthatóság megváltoztatása",
"boardChangeWatchPopup-title": "Megfigyelés megváltoztatása",
"boardMenuPopup-title": "Tábla beállítások",
+ "boardChangeViewPopup-title": "Tábla nézet",
"boards": "Táblák",
"board-view": "Tábla nézet",
"board-view-cal": "Naptár",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Listák",
"bucket-example": "Mint például „Bakancslista”",
"cancel": "Mégse",
@@ -300,8 +302,18 @@
"error-username-taken": "Ez a felhasználónév már foglalt",
"error-email-taken": "Az e-mail már foglalt",
"export-board": "Tábla exportálása",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Szűrő",
- "filter-cards": "Kártyák szűrése",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Szűrő törlése",
"filter-no-label": "Nincs címke",
"filter-no-member": "Nincs tag",
@@ -426,7 +438,7 @@
"save": "Mentés",
"search": "Keresés",
"rules": "Rules",
- "search-cards": "Keresés a táblán lévő kártyák címében illetve leírásában",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "keresőkifejezés",
"select-color": "Szín kiválasztása",
"set-wip-limit-value": "Korlát beállítása a listán lévő feladatok legnagyobb számához",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "Sikeresen elküldött egy e-mailt",
"error-invitation-code-not-exist": "A meghívási kód nem létezik",
"error-notAuthorized": "Nincs jogosultsága az oldal megtekintéséhez.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Kimenő webhurkok",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Kimenő webhurkok",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "Új kimenő webhurok",
"no-name": "(Ismeretlen)",
"Node_version": "Node verzió",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/hy.i18n.json b/i18n/hy.i18n.json
index 954e4643..7e908938 100644
--- a/i18n/hy.i18n.json
+++ b/i18n/hy.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Lists",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
@@ -300,8 +302,18 @@
"error-username-taken": "This username is already taken",
"error-email-taken": "Email has already been taken",
"export-board": "Export board",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filter",
- "filter-cards": "Filter Cards",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "No member",
@@ -426,7 +438,7 @@
"save": "Save",
"search": "Search",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/id.i18n.json b/i18n/id.i18n.json
index d993af73..7dc95256 100644
--- a/i18n/id.i18n.json
+++ b/i18n/id.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Ubah Penampakan",
"boardChangeWatchPopup-title": "Ubah Pengamatan",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Panel",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Daftar",
"bucket-example": "Contohnya seperti “Bucket List” ",
"cancel": "Batal",
@@ -300,8 +302,18 @@
"error-username-taken": "Nama pengguna ini sudah dipakai",
"error-email-taken": "Email has already been taken",
"export-board": "Exspor Panel",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Penyaringan",
- "filter-cards": "Filter Kartu",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Bersihkan penyaringan",
"filter-no-label": "Tidak ada label",
"filter-no-member": "Tidak ada anggota",
@@ -426,7 +438,7 @@
"save": "Simpan",
"search": "Cari",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Kode undangan tidak ada",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/ig.i18n.json b/i18n/ig.i18n.json
index bf3a1dc3..31f3b098 100644
--- a/i18n/ig.i18n.json
+++ b/i18n/ig.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Lists",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
@@ -300,8 +302,18 @@
"error-username-taken": "This username is already taken",
"error-email-taken": "Email has already been taken",
"export-board": "Export board",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filter",
- "filter-cards": "Filter Cards",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "No member",
@@ -426,7 +438,7 @@
"save": "Save",
"search": "Search",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/it.i18n.json b/i18n/it.i18n.json
index 9487493f..b4b662d4 100644
--- a/i18n/it.i18n.json
+++ b/i18n/it.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Cambia visibilità",
"boardChangeWatchPopup-title": "Cambia faccia",
"boardMenuPopup-title": "Impostazioni bacheca",
+ "boardChangeViewPopup-title": "Visualizza bacheca",
"boards": "Bacheche",
"board-view": "Visualizza bacheca",
"board-view-cal": "Calendario",
"board-view-swimlanes": "Diagramma Swimlane",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Liste",
"bucket-example": "Per esempio come \"una lista di cose da fare\"",
"cancel": "Cancella",
@@ -300,14 +302,24 @@
"error-username-taken": "Questo username è già utilizzato",
"error-email-taken": "L'email è già stata presa",
"export-board": "Esporta bacheca",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filtra",
- "filter-cards": "Filtra schede",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Pulisci filtri",
"filter-no-label": "Nessuna etichetta",
"filter-no-member": "Nessun membro",
"filter-no-custom-fields": "Nessun campo personalizzato",
- "filter-show-archive": "Show archived lists",
- "filter-hide-empty": "Hide empty lists",
+ "filter-show-archive": "Mostra le liste archiviate",
+ "filter-hide-empty": "Nascondi liste vuote",
"filter-on": "Il filtro è attivo",
"filter-on-desc": "Stai filtrando le schede su questa bacheca. Clicca qui per modificare il filtro,",
"filter-to-selection": "Seleziona",
@@ -426,7 +438,7 @@
"save": "Salva",
"search": "Cerca",
"rules": "Regole",
- "search-cards": "Ricerca per titolo e descrizione scheda su questa bacheca",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Testo da ricercare?",
"select-color": "Seleziona Colore",
"set-wip-limit-value": "Seleziona un limite per il massimo numero di attività in questa lista",
@@ -510,16 +522,21 @@
"email-smtp-test-text": "Hai inviato un'email con successo",
"error-invitation-code-not-exist": "Il codice d'invito non esiste",
"error-notAuthorized": "Non sei autorizzato ad accedere a questa pagina.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Server esterni",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Server esterni",
"boardCardTitlePopup-title": "Filtro per Titolo Scheda",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "Nuovo webhook in uscita",
"no-name": "(Sconosciuto)",
"Node_version": "Versione di Node",
- "Meteor_version": "Meteor version",
- "MongoDB_version": "MongoDB version",
- "MongoDB_storage_engine": "MongoDB storage engine",
- "MongoDB_Oplog_enabled": "MongoDB Oplog enabled",
+ "Meteor_version": "Versione Meteor",
+ "MongoDB_version": "Versione MondoDB",
+ "MongoDB_storage_engine": "Versione motore dati MongoDB",
+ "MongoDB_Oplog_enabled": "MongoDB Oplog abilitato",
"OS_Arch": "Architettura del sistema operativo",
"OS_Cpus": "Conteggio della CPU del sistema operativo",
"OS_Freemem": "Memoria libera del sistema operativo",
@@ -681,13 +698,13 @@
"r-board-note": "Nota: Lascia un campo vuoto per abbinare ogni possibile valore",
"r-checklist-note": "Nota: Gli elementi della checklist devono essere scritti come valori separati dalla virgola",
"r-when-a-card-is-moved": "Quando una scheda viene spostata su un'altra lista",
- "r-set": "Set",
- "r-update": "Update",
- "r-datefield": "date field",
- "r-df-start-at": "start",
- "r-df-due-at": "due",
- "r-df-end-at": "end",
- "r-df-received-at": "received",
+ "r-set": "Imposta",
+ "r-update": "Aggiorna",
+ "r-datefield": "campo data",
+ "r-df-start-at": "inizio",
+ "r-df-due-at": "scadenza",
+ "r-df-end-at": "fine",
+ "r-df-received-at": "ricevuta",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
- "delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
- "accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
+ "delete-user-confirm-popup": "Sei sicuro di voler cancellare questo profilo? Non sarà possibile ripristinarlo.",
+ "accounts-allowUserDelete": "Permetti agli utenti di cancellare il loro profilo",
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/ja.i18n.json b/i18n/ja.i18n.json
index ce95bea4..5b2f6cad 100644
--- a/i18n/ja.i18n.json
+++ b/i18n/ja.i18n.json
@@ -111,8 +111,8 @@
"restore-board": "ボードをリストア",
"no-archived-boards": "No Boards in Archive.",
"archives": "アーカイブ",
- "template": "Template",
- "templates": "Templates",
+ "template": "テンプレート",
+ "templates": "テンプレート",
"assign-member": "メンバーの割当",
"attached": "添付されました",
"attachment": "添付ファイル",
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "公開範囲の変更",
"boardChangeWatchPopup-title": "ウォッチの変更",
"boardMenuPopup-title": "ボード設定",
+ "boardChangeViewPopup-title": "Board View",
"boards": "ボード",
"board-view": "Board View",
"board-view-cal": "カレンダー",
"board-view-swimlanes": "スイムレーン",
+ "board-view-collapse": "Collapse",
"board-view-lists": "リスト",
"bucket-example": "例:バケットリスト",
"cancel": "キャンセル",
@@ -164,7 +166,7 @@
"cardLabelsPopup-title": "ラベル",
"cardMembersPopup-title": "メンバー",
"cardMorePopup-title": "さらに見る",
- "cardTemplatePopup-title": "Create template",
+ "cardTemplatePopup-title": "テンプレートの作成",
"cards": "カード",
"cards-count": "カード",
"casSignIn": "Sign In with CAS",
@@ -199,19 +201,19 @@
"color-indigo": "藍",
"color-lime": "ライム",
"color-magenta": "マゼンタ",
- "color-mistyrose": "mistyrose",
+ "color-mistyrose": "ミスティーローズ",
"color-navy": "濃紺",
"color-orange": "オレンジ",
- "color-paleturquoise": "paleturquoise",
- "color-peachpuff": "peachpuff",
+ "color-paleturquoise": "ペールターコイズ",
+ "color-peachpuff": "ピーチパフ",
"color-pink": "ピンク",
- "color-plum": "plum",
+ "color-plum": "プラム",
"color-purple": "紫",
"color-red": "赤",
- "color-saddlebrown": "saddlebrown",
+ "color-saddlebrown": "サドルブラウン",
"color-silver": "銀",
"color-sky": "空",
- "color-slateblue": "slateblue",
+ "color-slateblue": "スレートブルー",
"color-white": "白",
"color-yellow": "黄",
"unset-color": "設定しない",
@@ -300,8 +302,18 @@
"error-username-taken": "このユーザ名は既に使用されています",
"error-email-taken": "メールは既に受け取られています",
"export-board": "ボードのエクスポート",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "フィルター",
- "filter-cards": "カードをフィルターする",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "フィルターの解除",
"filter-no-label": "ラベルなし",
"filter-no-member": "メンバーなし",
@@ -387,8 +399,8 @@
"muted-info": "このボードの変更は通知されません",
"my-boards": "自分のボード",
"name": "名前",
- "no-archived-cards": "No cards in Archive.",
- "no-archived-lists": "No lists in Archive.",
+ "no-archived-cards": "カードをアーカイブする",
+ "no-archived-lists": "リストをアーカイブする",
"no-archived-swimlanes": "No swimlanes in Archive.",
"no-results": "該当するものはありません",
"normal": "通常",
@@ -426,7 +438,7 @@
"save": "保存",
"search": "検索",
"rules": "Rules",
- "search-cards": "カードのタイトルと詳細から検索",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "検索文字",
"select-color": "色を選択",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -477,9 +489,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "基本",
"welcome-list2": "高度",
- "card-templates-swimlane": "Card Templates",
- "list-templates-swimlane": "List Templates",
- "board-templates-swimlane": "Board Templates",
+ "card-templates-swimlane": "カードのテンプレート",
+ "list-templates-swimlane": "リストのテンプレート",
+ "board-templates-swimlane": "ボードのテンプレート",
"what-to-do": "何をしたいですか?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "招待コードが存在しません",
"error-notAuthorized": "このページを参照する権限がありません。",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "発信Webフック",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "発信Webフック",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "発信Webフックの作成",
"no-name": "(Unknown)",
"Node_version": "Nodeバージョン",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/ka.i18n.json b/i18n/ka.i18n.json
index 12c20c79..274953c1 100644
--- a/i18n/ka.i18n.json
+++ b/i18n/ka.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "ხილვადობის შეცვლა",
"boardChangeWatchPopup-title": "საათის შეცვლა",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "დაფის ნახვა",
"boards": "დაფები",
"board-view": "დაფის ნახვა",
"board-view-cal": "კალენდარი",
"board-view-swimlanes": "ბილიკები",
+ "board-view-collapse": "Collapse",
"board-view-lists": "ჩამონათვალი",
"bucket-example": "მაგალითად “Bucket List” ",
"cancel": "გაუქმება",
@@ -300,8 +302,18 @@
"error-username-taken": "არსებობს მსგავსი მომხმარებელი",
"error-email-taken": "უკვე არსებობს მსგავსი ელ.ფოსტა",
"export-board": "დაფის ექსპორტი",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "ფილტრი",
- "filter-cards": "ბარათების გაფილტვრა",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "ფილტრის გასუფთავება",
"filter-no-label": "ნიშანი არ გვაქვს",
"filter-no-member": "არ არის წევრები ",
@@ -426,7 +438,7 @@
"save": "დამახსოვრება",
"search": "ძებნა",
"rules": "Rules",
- "search-cards": "მოძებნეთ ბარათის სახელით და აღწერით ამ დაფაზე",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "საძიებო ტექსტი",
"select-color": "ფერის მონიშვნა",
"set-wip-limit-value": "დააყენეთ შეზღუდვა დავალებების მაქსიმალურ რაოდენობაზე ",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "თქვენ წარმატებით გააგზავნეთ ელ.ფოსტა.",
"error-invitation-code-not-exist": "მსგავსი მოსაწვევი კოდი არ არსებობს",
"error-notAuthorized": "თქვენ არ გაქვთ ამ გვერდის ნახვის უფლება",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "გამავალი Webhook",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "გამავალი Webhook",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(უცნობი)",
"Node_version": "Node ვერსია",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/km.i18n.json b/i18n/km.i18n.json
index d1d96642..36787d4c 100644
--- a/i18n/km.i18n.json
+++ b/i18n/km.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Lists",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
@@ -300,8 +302,18 @@
"error-username-taken": "This username is already taken",
"error-email-taken": "Email has already been taken",
"export-board": "Export board",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filter",
- "filter-cards": "Filter Cards",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "No member",
@@ -426,7 +438,7 @@
"save": "Save",
"search": "Search",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/ko.i18n.json b/i18n/ko.i18n.json
index 88f1b81c..f9b60cf6 100644
--- a/i18n/ko.i18n.json
+++ b/i18n/ko.i18n.json
@@ -1,6 +1,6 @@
{
"accept": "확인",
- "act-activity-notify": "Activity Notification",
+ "act-activity-notify": "활동 알림",
"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__",
"act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "표시 여부 변경",
"boardChangeWatchPopup-title": "감시상태 변경",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "보드",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "목록들",
"bucket-example": "예: “프로젝트 이름“ 입력",
"cancel": "취소",
@@ -300,8 +302,18 @@
"error-username-taken": "중복된 아이디 입니다.",
"error-email-taken": "Email has already been taken",
"export-board": "보드 내보내기",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "필터",
- "filter-cards": "카드 필터",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "필터 초기화",
"filter-no-label": "라벨 없음",
"filter-no-member": "멤버 없음",
@@ -426,7 +438,7 @@
"save": "저장",
"search": "검색",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "색 선택",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "테스트 메일을 성공적으로 발송하였습니다.",
"error-invitation-code-not-exist": "초대 코드가 존재하지 않습니다.",
"error-notAuthorized": "이 페이지를 볼 수있는 권한이 없습니다.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -708,8 +725,8 @@
"people-number": "The number of people is:",
"swimlaneDeletePopup-title": "Delete Swimlane ?",
"swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
- "restore-all": "Restore all",
- "delete-all": "Delete all",
+ "restore-all": "모든항목 복구",
+ "delete-all": "모두 삭제",
"loading": "Loading, please wait.",
"previous_as": "last time was",
"act-a-dueAt": "modified due time to \nWhen: __timeValue__\nWhere: __card__\n previous due was __timeOldValue__",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/lv.i18n.json b/i18n/lv.i18n.json
index e2370eb4..02bdcc5f 100644
--- a/i18n/lv.i18n.json
+++ b/i18n/lv.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Lists",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
@@ -300,8 +302,18 @@
"error-username-taken": "This username is already taken",
"error-email-taken": "Email has already been taken",
"export-board": "Export board",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filter",
- "filter-cards": "Filter Cards",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "No member",
@@ -426,7 +438,7 @@
"save": "Save",
"search": "Search",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/mk.i18n.json b/i18n/mk.i18n.json
index c83f979c..89b2f97b 100644
--- a/i18n/mk.i18n.json
+++ b/i18n/mk.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Промени наблюдаването",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Табли",
"board-view": "Board View",
"board-view-cal": "Календар",
"board-view-swimlanes": "Коридори",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Листи",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Откажи",
@@ -300,8 +302,18 @@
"error-username-taken": "Това потребителско име е вече заето",
"error-email-taken": "Имейлът е вече зает",
"export-board": "Експортиране на Табло",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Филтер",
- "filter-cards": "Филтрирай картите",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Премахване на филтрите",
"filter-no-label": "без етикет",
"filter-no-member": "без член",
@@ -426,7 +438,7 @@
"save": "Запази",
"search": "Търсене",
"rules": "Правила",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Избери цвят",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "Успешно изпратихте е-маил",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Версия на Node",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/mn.i18n.json b/i18n/mn.i18n.json
index 35e1e484..c57c7aa4 100644
--- a/i18n/mn.i18n.json
+++ b/i18n/mn.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Lists",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
@@ -264,23 +266,23 @@
"edit": "Edit",
"edit-avatar": "Аватар өөрчлөх",
"edit-profile": "Бүртгэл засварлах",
- "edit-wip-limit": "Edit WIP Limit",
+ "edit-wip-limit": "WIP хязгаарлалтыг өөрчлөх",
"soft-wip-limit": "Soft WIP Limit",
- "editCardStartDatePopup-title": "Change start date",
- "editCardDueDatePopup-title": "Change due date",
- "editCustomFieldPopup-title": "Edit Field",
- "editCardSpentTimePopup-title": "Change spent time",
- "editLabelPopup-title": "Change Label",
+ "editCardStartDatePopup-title": "Эхлэх өдрийг өөрчлөх",
+ "editCardDueDatePopup-title": "Дуусах өдрийг өөрчлөх",
+ "editCustomFieldPopup-title": "Талбарыг засварлах",
+ "editCardSpentTimePopup-title": "Зарцуулсан хугацааг засварлах",
+ "editLabelPopup-title": "Шошгыг өөрчлөх",
"editNotificationPopup-title": "Мэдэгдэл тохируулах",
"editProfilePopup-title": "Бүртгэл засварлах",
- "email": "Email",
+ "email": "Имэйл",
"email-enrollAccount-subject": "An account created for you on __siteName__",
"email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
"email-fail": "Sending email failed",
"email-fail-text": "Error trying to send email",
- "email-invalid": "Invalid email",
- "email-invite": "Invite via Email",
- "email-invite-subject": "__inviter__ sent you an invitation",
+ "email-invalid": "Буруу имэйл",
+ "email-invite": "Имэйлээр урих",
+ "email-invite-subject": "__inviter__ танд урилга илгээлээ",
"email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.",
"email-resetPassword-subject": "Reset your password on __siteName__",
"email-resetPassword-text": "Hello __user__,\n\nTo reset your password, simply click the link below.\n\n__url__\n\nThanks.",
@@ -300,8 +302,18 @@
"error-username-taken": "This username is already taken",
"error-email-taken": "Email has already been taken",
"export-board": "Export board",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filter",
- "filter-cards": "Filter Cards",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "No member",
@@ -426,7 +438,7 @@
"save": "Save",
"search": "Search",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -504,15 +516,20 @@
"send-from": "From",
"send-smtp-test": "Send a test email to yourself",
"invitation-code": "Invitation Code",
- "email-invite-register-subject": "__inviter__ sent you an invitation",
+ "email-invite-register-subject": "__inviter__ танд урилга илгээлээ",
"email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
"email-smtp-test-subject": "SMTP Test Email",
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/nb.i18n.json b/i18n/nb.i18n.json
index a2f42f23..e7f6f633 100644
--- a/i18n/nb.i18n.json
+++ b/i18n/nb.i18n.json
@@ -107,9 +107,9 @@
"archive-selection": "Move selection to Archive",
"archiveBoardPopup-title": "Move Board to Archive?",
"archived-items": "Arkiv",
- "archived-boards": "Boards in Archive",
+ "archived-boards": "Tavler i arkivet",
"restore-board": "Restore Board",
- "no-archived-boards": "No Boards in Archive.",
+ "no-archived-boards": "Ingen tavler i arkivet",
"archives": "Arkiv",
"template": "Template",
"templates": "Templates",
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Endre synlighet",
"boardChangeWatchPopup-title": "Endre overvåkning",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Tavler",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Lists",
"bucket-example": "Som \"Bucket List\" for eksempel",
"cancel": "Avbryt",
@@ -176,26 +178,26 @@
"change-password": "Endre passord",
"change-permissions": "Endre rettigheter",
"change-settings": "Endre innstillinger",
- "changeAvatarPopup-title": "Endre Avatar",
+ "changeAvatarPopup-title": "Endre avatar",
"changeLanguagePopup-title": "Endre språk",
"changePasswordPopup-title": "Endre passord",
"changePermissionsPopup-title": "Endre tillatelser",
"changeSettingsPopup-title": "Endre innstillinger",
- "subtasks": "Subtasks",
+ "subtasks": "Deloppgave",
"checklists": "Sjekklister",
"click-to-star": "Click to star this board.",
"click-to-unstar": "Click to unstar this board.",
"clipboard": "Clipboard or drag & drop",
- "close": "Close",
+ "close": "Lukk",
"close-board": "Close Board",
"close-board-pop": "You will be able to restore the board by clicking the “Archive” button from the home header.",
- "color-black": "black",
- "color-blue": "blue",
+ "color-black": "svart",
+ "color-blue": "blå",
"color-crimson": "crimson",
- "color-darkgreen": "darkgreen",
- "color-gold": "gold",
- "color-gray": "gray",
- "color-green": "green",
+ "color-darkgreen": "mørkegrønn",
+ "color-gold": "gull",
+ "color-gray": "grå",
+ "color-green": "grønn",
"color-indigo": "indigo",
"color-lime": "lime",
"color-magenta": "magenta",
@@ -204,9 +206,9 @@
"color-orange": "orange",
"color-paleturquoise": "paleturquoise",
"color-peachpuff": "peachpuff",
- "color-pink": "pink",
+ "color-pink": "rosa",
"color-plum": "plum",
- "color-purple": "purple",
+ "color-purple": "lilla",
"color-red": "red",
"color-saddlebrown": "saddlebrown",
"color-silver": "silver",
@@ -240,39 +242,39 @@
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
- "custom-field-date": "Date",
+ "custom-field-date": "Dato",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
"custom-field-dropdown-options": "List Options",
"custom-field-dropdown-options-placeholder": "Press enter to add more options",
- "custom-field-dropdown-unknown": "(unknown)",
- "custom-field-number": "Number",
- "custom-field-text": "Text",
+ "custom-field-dropdown-unknown": "(ukjent)",
+ "custom-field-number": "Nummer",
+ "custom-field-text": "Tekst",
"custom-fields": "Custom Fields",
- "date": "Date",
- "decline": "Decline",
+ "date": "Dato",
+ "decline": "Avvis",
"default-avatar": "Default avatar",
- "delete": "Delete",
+ "delete": "Slett",
"deleteCustomFieldPopup-title": "Delete Custom Field?",
"deleteLabelPopup-title": "Delete Label?",
- "description": "Description",
+ "description": "Beskrivelse",
"disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
"disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
"discard": "Discard",
"done": "Done",
- "download": "Download",
- "edit": "Edit",
+ "download": "Last ned",
+ "edit": "Rediger",
"edit-avatar": "Endre avatar",
- "edit-profile": "Edit Profile",
- "edit-wip-limit": "Edit WIP Limit",
+ "edit-profile": "Endre profil",
+ "edit-wip-limit": "Endre WIP grense",
"soft-wip-limit": "Soft WIP Limit",
- "editCardStartDatePopup-title": "Change start date",
+ "editCardStartDatePopup-title": "Endre start dato",
"editCardDueDatePopup-title": "Change due date",
"editCustomFieldPopup-title": "Edit Field",
"editCardSpentTimePopup-title": "Change spent time",
"editLabelPopup-title": "Change Label",
"editNotificationPopup-title": "Edit Notification",
- "editProfilePopup-title": "Edit Profile",
+ "editProfilePopup-title": "Endre profil",
"email": "Email",
"email-enrollAccount-subject": "An account created for you on __siteName__",
"email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
@@ -288,20 +290,30 @@
"email-verifyEmail-subject": "Verify your email address on __siteName__",
"email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.",
"enable-wip-limit": "Enable WIP Limit",
- "error-board-doesNotExist": "This board does not exist",
- "error-board-notAdmin": "You need to be admin of this board to do that",
- "error-board-notAMember": "You need to be a member of this board to do that",
- "error-json-malformed": "Your text is not valid JSON",
+ "error-board-doesNotExist": "Denne tavlen finnes ikke",
+ "error-board-notAdmin": "Du må være administrator for denne tavlen for å gjøre dette",
+ "error-board-notAMember": "Du må være medlem av denne tavlen for å gjøre dette",
+ "error-json-malformed": "Denne teksten er ikke gyldig JSON",
"error-json-schema": "Your JSON data does not include the proper information in the correct format",
- "error-list-doesNotExist": "This list does not exist",
+ "error-list-doesNotExist": "Denne listen finnes ikke",
"error-user-doesNotExist": "This user does not exist",
"error-user-notAllowSelf": "You can not invite yourself",
"error-user-notCreated": "This user is not created",
"error-username-taken": "This username is already taken",
"error-email-taken": "Email has already been taken",
"export-board": "Export board",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filter",
- "filter-cards": "Filter Cards",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "No member",
@@ -314,7 +326,7 @@
"advanced-filter-label": "Advanced Filter",
"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.",
+ "header-logo-title": "Tilbake til dine tavler",
"hide-system-messages": "Hide system messages",
"headerBarCreateBoardPopup-title": "Create Board",
"home": "Home",
@@ -385,8 +397,8 @@
"multi-selection-on": "Multi-Selection is on",
"muted": "Muted",
"muted-info": "You will never be notified of any changes in this board",
- "my-boards": "My Boards",
- "name": "Name",
+ "my-boards": "Mine tavler",
+ "name": "Navn",
"no-archived-cards": "No cards in Archive.",
"no-archived-lists": "No lists in Archive.",
"no-archived-swimlanes": "No swimlanes in Archive.",
@@ -395,20 +407,20 @@
"normal-desc": "Can view and edit cards. Can't change settings.",
"not-accepted-yet": "Invitation not accepted yet",
"notify-participate": "Receive updates to any cards you participate as creater or member",
- "notify-watch": "Receive updates to any boards, lists, or cards you’re watching",
- "optional": "optional",
- "or": "or",
+ "notify-watch": "Motta oppdatering av alle tavler, lister eller kort som du overvåker",
+ "optional": "valgfritt",
+ "or": "eller",
"page-maybe-private": "This page may be private. You may be able to view it by <a href='%s'>logging in</a>.",
"page-not-found": "Page not found.",
- "password": "Password",
+ "password": "Passord",
"paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)",
"participating": "Participating",
- "preview": "Preview",
- "previewAttachedImagePopup-title": "Preview",
- "previewClipboardImagePopup-title": "Preview",
- "private": "Private",
+ "preview": "Forhåndsvisning",
+ "previewAttachedImagePopup-title": "Forhåndsvisning",
+ "previewClipboardImagePopup-title": "Forhåndsvisning",
+ "private": "Privat",
"private-desc": "This board is private. Only people added to the board can view and edit it.",
- "profile": "Profile",
+ "profile": "Profil",
"public": "Public",
"public-desc": "This board is public. It's visible to anyone with the link and will show up in search engines like Google. Only people added to the board can edit.",
"quick-access-description": "Star a board to add a shortcut in this bar.",
@@ -426,7 +438,7 @@
"save": "Save",
"search": "Search",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -467,7 +479,7 @@
"upload": "Upload",
"upload-avatar": "Upload an avatar",
"uploaded-avatar": "Uploaded an avatar",
- "username": "Username",
+ "username": "Brukernavn",
"view-it": "View it",
"warn-list-archived": "warning: this card is in an list at Archive",
"watch": "Watch",
@@ -485,9 +497,9 @@
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
"wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.",
"admin-panel": "Admin Panel",
- "settings": "Settings",
- "people": "People",
- "registration": "Registration",
+ "settings": "Innstillinger",
+ "people": "Folk",
+ "registration": "Registrering",
"disable-self-registration": "Disable Self-Registration",
"invite": "Invite",
"invite-people": "Invite People",
@@ -498,8 +510,8 @@
"smtp-tls-description": "Enable TLS support for SMTP server",
"smtp-host": "SMTP Host",
"smtp-port": "SMTP Port",
- "smtp-username": "Username",
- "smtp-password": "Password",
+ "smtp-username": "Brukernavn",
+ "smtp-password": "Passord",
"smtp-tls": "TLS support",
"send-from": "From",
"send-smtp-test": "Send a test email to yourself",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -630,10 +647,10 @@
"r-unarchive": "Restore from Archive",
"r-card": "card",
"r-add": "Legg til",
- "r-remove": "Remove",
+ "r-remove": "Fjern",
"r-label": "label",
- "r-member": "member",
- "r-remove-all": "Remove all members from the card",
+ "r-member": "medlem",
+ "r-remove-all": "Fjern alle medlemmer fra kortet",
"r-set-color": "Set color to",
"r-checklist": "checklist",
"r-check-all": "Check all",
@@ -644,17 +661,17 @@
"r-item": "item",
"r-of-checklist": "of checklist",
"r-send-email": "Send an email",
- "r-to": "to",
- "r-subject": "subject",
+ "r-to": "til",
+ "r-subject": "Emne",
"r-rule-details": "Rule details",
"r-d-move-to-top-gen": "Move card to top of its list",
"r-d-move-to-top-spec": "Move card to top of list",
- "r-d-move-to-bottom-gen": "Move card to bottom of its list",
- "r-d-move-to-bottom-spec": "Move card to bottom of list",
- "r-d-send-email": "Send email",
- "r-d-send-email-to": "to",
- "r-d-send-email-subject": "subject",
- "r-d-send-email-message": "message",
+ "r-d-move-to-bottom-gen": "Flytt kortet til bunnen av sin liste",
+ "r-d-move-to-bottom-spec": "Flytt kortet til bunnen av listen",
+ "r-d-send-email": "Send e-post",
+ "r-d-send-email-to": "til",
+ "r-d-send-email-subject": "Emne",
+ "r-d-send-email-message": "Melding",
"r-d-archive": "Move card to Archive",
"r-d-unarchive": "Restore card from Archive",
"r-d-add-label": "Add label",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
- "delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
- "accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "act-atUserComment": "Du ble nevnt i [__board__] __list__/__card__",
+ "delete-user-confirm-popup": "Er du sikker på at du vil slette denne kontoen?",
+ "accounts-allowUserDelete": "Tillat at brukere sletter sin konto",
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/nl.i18n.json b/i18n/nl.i18n.json
index 8240a8b2..b6e0c302 100644
--- a/i18n/nl.i18n.json
+++ b/i18n/nl.i18n.json
@@ -1,91 +1,91 @@
{
"accept": "Accepteren",
- "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__",
- "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-editComment": "edited comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-deleteComment": "deleted comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-createBoard": "created board __board__",
- "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
- "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
- "act-createCustomField": "created custom field __customField__ at board __board__",
- "act-deleteCustomField": "deleted custom field __customField__ at board __board__",
- "act-setCustomField": "edited custom field __customField__: __customFieldValue__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-createList": "added list __list__ to board __board__",
- "act-addBoardMember": "added member __member__ to board __board__",
- "act-archivedBoard": "Board __board__ moved to Archive",
- "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
- "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
- "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
- "act-importBoard": "imported board __board__",
- "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
- "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
- "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
- "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
- "act-removeBoardMember": "removed member __member__ from board __board__",
- "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
- "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-activity-notify": "Activiteiten Notificatie",
+ "act-addAttachment": "bijlage __attachment__ toegevoegd aan kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+ "act-deleteAttachment": "bijlage __attachment__ verwijderd op kaart __card__ van lijst __list__ uit swimlane __swimlane__ op bord __board__",
+ "act-addSubtask": "subtaak __subtask__ toegevoegd aan kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+ "act-addLabel": "Label __label__ toegevoegd aan kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+ "act-addedLabel": "Label __label__ toegevoegd aan kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+ "act-removeLabel": "Label __label__ verwijderd van kaart __card__ van lijst __list__ uit swimlane __swimlane__ op bord __board__",
+ "act-removedLabel": "Label __label__ verwijderd van kaart __card__ van lijst __list__ uit swimlane __swimlane__ op bord __board__",
+ "act-addChecklist": "checklist __checklist__ toegevoegd aan kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+ "act-addChecklistItem": "checklist item __checklistItem__ toegevoegd aan checklist __checklist__ op kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+ "act-removeChecklist": "checklist __checklist__ verwijderd van kaart __card__ van lijst __list__ uit swimlane __swimlane__ op bord __board__",
+ "act-removeChecklistItem": "checklist item __checklistItem__ verwijderd van checklist __checkList__ op kaart __card__ van lijst __list__ uit swimlane __swimlane__ op bord __board__",
+ "act-checkedItem": "__checklistItem__ aangevinkt van checklist __checklist__ op kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+ "act-uncheckedItem": "__checklistItem__ uitgevinkt van checklist __checklist__ op kaart __card__ van lijst __list__ uit swimlane __swimlane__ op bord __board__",
+ "act-completeChecklist": "checklist __checklist__ afgewerkt op kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+ "act-uncompleteChecklist": "checklist __checklist__ onafgewerkt op kaart __card__ van lijst __list__ uit swimlane __swimlane__ op bord __board__",
+ "act-addComment": "heeft aantekening toegevoegd aan kaart __card__: __comment__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+ "act-editComment": "heeft aantekening gewijzigd op kaart __card__: __comment__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+ "act-deleteComment": "heeft aantekening verwijderd van kaart __card__: __comment__ van lijst __list__ uit swimlane __swimlane__ op bord __board__",
+ "act-createBoard": "bord __board__ aangemaakt",
+ "act-createSwimlane": "swimlane __swimlane__ aangemaakt op bord __board__",
+ "act-createCard": "kaart __card__ aangemaakt in lijst __list__ in swimlane __swimlane__ op bord __board__",
+ "act-createCustomField": "maatwerkveld __customField__ aangemaakt op bord __board__",
+ "act-deleteCustomField": "maatwerkveld __customField__ verwijderd van bord __board__",
+ "act-setCustomField": "maatwerkveld gewijzigd __customField__: __customFieldValue__ op kaart __card__ in lijst __list__ uit swimlane __swimlane__ op bord __board__",
+ "act-createList": "lijst __list__ toegevoegd aan bord __board__",
+ "act-addBoardMember": "lid __member__ toegevoegd aan bord __board__",
+ "act-archivedBoard": "Bord __board__ verplaatst naar Archief",
+ "act-archivedCard": "Kaart __card__ van lijst __list__ uit swimlane __swimlane__ op bord __board__ verplaatst naar Archief",
+ "act-archivedList": "Lijst __list__ uit swimlane __swimlane__ op bord __board__ verplaatst naar Archief",
+ "act-archivedSwimlane": "Swimlane __swimlane__ op bord __board__ verplaatst naar Archief",
+ "act-importBoard": "bord __board__ geïmporteerd",
+ "act-importCard": "kaart __card__ geïmporteerd in lijst __list__ in swimlane __swimlane__ op bord __board__",
+ "act-importList": "lijst __list__ geïmporteerd in swimlane __swimlane__ op bord __board__",
+ "act-joinMember": "lid __member__ toegevoegd aan kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+ "act-moveCard": "heeft kaart __card__ verplaatst op bord __board__ van lijst __oldList__ uit swimlane __oldSwimlane__ naar lijst __list__ in swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "kaart __card__ verplaatst van lijst __oldList__ uit swimlane __oldSwimlane__ op bord __oldBoard__ naar lijst __list__ in swimlane __swimlane__ op bord __board__",
+ "act-removeBoardMember": "lid __member__ verwijderd van bord __board__",
+ "act-restoredCard": "kaart __card__ teruggehaald naar lijst __list__ in swimlane __swimlane__ op bord __board__",
+ "act-unjoinMember": "lid __member__ verwijderd van kaart __card__ van lijst __list__ uit swimlane __swimlane__ op bord __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Acties",
"activities": "Activiteiten",
"activity": "Activiteit",
"activity-added": "%s toegevoegd aan %s",
- "activity-archived": "%s moved to Archive",
+ "activity-archived": "%s verplaatst naar Archief",
"activity-attached": "%s bijgevoegd aan %s",
"activity-created": "%s aangemaakt",
- "activity-customfield-created": "created custom field %s",
+ "activity-customfield-created": "maatwerkveld aangemaakt %s",
"activity-excluded": "%s uitgesloten van %s",
- "activity-imported": "%s geimporteerd in %s van %s",
- "activity-imported-board": "%s geimporteerd van %s",
+ "activity-imported": "%s geïmporteerd in %s van %s",
+ "activity-imported-board": "%s geïmporteerd van %s",
"activity-joined": "%s toegetreden",
"activity-moved": "%s verplaatst van %s naar %s",
"activity-on": "bij %s",
"activity-removed": "%s verwijderd van %s",
"activity-sent": "%s gestuurd naar %s",
"activity-unjoined": "uit %s gegaan",
- "activity-subtask-added": "added subtask to %s",
- "activity-checked-item": "checked %s in checklist %s of %s",
- "activity-unchecked-item": "unchecked %s in checklist %s of %s",
+ "activity-subtask-added": "subtaak toegevoegd aan %s",
+ "activity-checked-item": "%s aangevinkt in checklist %s van %s",
+ "activity-unchecked-item": "%s uitgevinkt in checklist %s van %s",
"activity-checklist-added": "checklist toegevoegd aan %s",
- "activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
- "activity-checklist-item-added": "checklist punt toegevoegd aan '%s' in '%s'",
- "activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
+ "activity-checklist-removed": "checklist verwijderd van %s",
+ "activity-checklist-completed": "checklist __checklist__ afgewerkt op kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+ "activity-checklist-uncompleted": "checklist %s onafgewerkt van %s",
+ "activity-checklist-item-added": "checklist item toegevoegd aan '%s' in '%s'",
+ "activity-checklist-item-removed": "checklist item verwijderd van '%s' in %s",
"add": "Toevoegen",
- "activity-checked-item-card": "checked %s in checklist %s",
- "activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "activity-checklist-uncompleted-card": "uncompleted the checklist %s",
- "activity-editComment": "edited comment %s",
- "activity-deleteComment": "deleted comment %s",
- "add-attachment": "Voeg Bijlage Toe",
- "add-board": "Voeg Bord Toe",
- "add-card": "Voeg Kaart Toe",
+ "activity-checked-item-card": "%s aangevinkt in checklist %s",
+ "activity-unchecked-item-card": "%s uitgevinkt in checklist %s",
+ "activity-checklist-completed-card": "checklist __checklist__ afgewerkt op kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+ "activity-checklist-uncompleted-card": "checklist %s onafgewerkt",
+ "activity-editComment": "aantekening gewijzigd %s",
+ "activity-deleteComment": "aantekening verwijderd %s",
+ "add-attachment": "Bijlage Toevoegen",
+ "add-board": "Bord Toevoegen",
+ "add-card": "Kaart Toevoegen",
"add-swimlane": "Swimlane Toevoegen",
- "add-subtask": "Add Subtask",
- "add-checklist": "Voeg Checklist Toe",
+ "add-subtask": "Subtaak Toevoegen",
+ "add-checklist": "Checkcklist Toevoegen",
"add-checklist-item": "Voeg item toe aan checklist",
- "add-cover": "Voeg Cover Toe",
- "add-label": "Voeg Label Toe",
- "add-list": "Voeg Lijst Toe",
- "add-members": "Voeg Leden Toe",
+ "add-cover": "Cover Toevoegen",
+ "add-label": "Label Toevoegen",
+ "add-list": "Lijst Toevoegen",
+ "add-members": "Leden Toevoegen",
"added": "Toegevoegd",
"addMemberPopup-title": "Leden",
"admin": "Administrator",
@@ -94,35 +94,35 @@
"admin-announcement-active": "Systeem melding",
"admin-announcement-title": "Melding van de administrator",
"all-boards": "Alle borden",
- "and-n-other-card": "En nog __count__ ander",
+ "and-n-other-card": "En __count__ andere kaarten",
"and-n-other-card_plural": "En __count__ andere kaarten",
"apply": "Aanmelden",
- "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.",
- "archive": "Move to Archive",
- "archive-all": "Move All to Archive",
- "archive-board": "Move Board to Archive",
- "archive-card": "Move Card to Archive",
- "archive-list": "Move List to Archive",
- "archive-swimlane": "Move Swimlane to Archive",
- "archive-selection": "Move selection to Archive",
- "archiveBoardPopup-title": "Move Board to Archive?",
+ "app-is-offline": "Wekan is aan het laden, wacht alstublieft. Het verversen van de pagina zorgt voor verlies van gegevens. Als Wekan niet laadt, check dan of de Wekan server niet is gestopt. ",
+ "archive": "Verplaats naar Archief",
+ "archive-all": "Verplaats Alles naar Archief",
+ "archive-board": "Verplaats Bord naar Archief",
+ "archive-card": "Verplaats Kaart naar Archief",
+ "archive-list": "Verplaats Lijst naar Archief",
+ "archive-swimlane": "Verplaats Swimlane naar Archief",
+ "archive-selection": "Verplaats selectie naar Archief",
+ "archiveBoardPopup-title": "Bord naar Archief verplaatsen?",
"archived-items": "Archiveren",
- "archived-boards": "Boards in Archive",
+ "archived-boards": "Borden in Archief",
"restore-board": "Herstel Bord",
- "no-archived-boards": "No Boards in Archive.",
- "archives": "Archiveren",
+ "no-archived-boards": "Geen Borden in Archief.",
+ "archives": "Archief",
"template": "Template",
"templates": "Templates",
- "assign-member": "Wijs lid aan",
+ "assign-member": "Lid toevoegen",
"attached": "bijgevoegd",
"attachment": "Bijlage",
"attachment-delete-pop": "Een bijlage verwijderen is permanent. Er is geen herstelmogelijkheid.",
- "attachmentDeletePopup-title": "Verwijder Bijlage?",
+ "attachmentDeletePopup-title": "Bijlage verwijderen?",
"attachments": "Bijlagen",
"auto-watch": "Automatisch borden bekijken wanneer deze aangemaakt worden",
"avatar-too-big": "De bestandsgrootte van je avatar is te groot (70KB max)",
"back": "Terug",
- "board-change-color": "Verander kleur",
+ "board-change-color": "Wijzig kleur",
"board-nb-stars": "%s sterren",
"board-not-found": "Bord is niet gevonden",
"board-private-info": "Dit bord is nu <strong>privé</strong>.",
@@ -131,25 +131,27 @@
"boardChangeTitlePopup-title": "Hernoem bord",
"boardChangeVisibilityPopup-title": "Verander zichtbaarheid",
"boardChangeWatchPopup-title": "Verander naar 'Watch'",
- "boardMenuPopup-title": "Board Settings",
+ "boardMenuPopup-title": "Bord Instellingen",
+ "boardChangeViewPopup-title": "Bord overzicht",
"boards": "Borden",
"board-view": "Bord overzicht",
- "board-view-cal": "Calendar",
+ "board-view-cal": "Kalender",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Lijsten",
- "bucket-example": "Zoals \"Bucket List\" bijvoorbeeld",
+ "bucket-example": "Zoals bijvoorbeeld een \"Bucket List\"",
"cancel": "Annuleren",
- "card-archived": "This card is moved to Archive.",
- "board-archived": "This board is moved to Archive.",
- "card-comments-title": "Deze kaart heeft %s reactie.",
+ "card-archived": "Deze kaart is verplaatst naar Archief.",
+ "board-archived": "Dit bord is verplaatst naar Archief.",
+ "card-comments-title": "Deze kaart heeft %s aantekening(en).",
"card-delete-notice": "Verwijdering is permanent. Als je dit doet, verlies je alle informatie die op deze kaart is opgeslagen.",
- "card-delete-pop": "Alle acties worden verwijderd van de activiteiten feed, en er zal geen mogelijkheid zijn om de kaart opnieuw te openen. Deze actie kan je niet ongedaan maken.",
- "card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
- "card-due": "Deadline: ",
- "card-due-on": "Deadline: ",
- "card-spent": "gespendeerde tijd",
+ "card-delete-pop": "Alle acties worden verwijderd van de activiteiten feed, en er zal geen mogelijkheid zijn om de kaart opnieuw te openen. Er is geen herstelmogelijkheid.",
+ "card-delete-suggest-archive": "Je kunt een kaart naar Archief verplaatsen om die van het bord te verwijderen waarbij de activiteiten behouden blijven.",
+ "card-due": "Verval",
+ "card-due-on": "Vervalt op ",
+ "card-spent": "Gespendeerde tijd",
"card-edit-attachments": "Wijzig bijlagen",
- "card-edit-custom-fields": "Edit custom fields",
+ "card-edit-custom-fields": "Wijzig maatwerkvelden",
"card-edit-labels": "Wijzig labels",
"card-edit-members": "Wijzig leden",
"card-labels-title": "Wijzig de labels vam de kaart.",
@@ -157,75 +159,75 @@
"card-start": "Begin",
"card-start-on": "Begint op",
"cardAttachmentsPopup-title": "Voeg bestand toe vanuit",
- "cardCustomField-datePopup-title": "Change date",
- "cardCustomFieldsPopup-title": "Edit custom fields",
+ "cardCustomField-datePopup-title": "Wijzigingsdatum",
+ "cardCustomFieldsPopup-title": "Wijzig maatwerkvelden",
"cardDeletePopup-title": "Kaart verwijderen?",
"cardDetailsActionsPopup-title": "Kaart actie ondernemen",
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Leden",
"cardMorePopup-title": "Meer",
- "cardTemplatePopup-title": "Create template",
+ "cardTemplatePopup-title": "Template aanmaken",
"cards": "Kaarten",
"cards-count": "Kaarten",
- "casSignIn": "Sign In with CAS",
- "cardType-card": "Card",
- "cardType-linkedCard": "Linked Card",
- "cardType-linkedBoard": "Linked Board",
+ "casSignIn": "Log in met CAS",
+ "cardType-card": "Kaart",
+ "cardType-linkedCard": "Gekoppelde Kaart",
+ "cardType-linkedBoard": "Gekoppeld Bord",
"change": "Wijzig",
"change-avatar": "Wijzig avatar",
"change-password": "Wijzig wachtwoord",
"change-permissions": "Wijzig permissies",
"change-settings": "Wijzig instellingen",
"changeAvatarPopup-title": "Wijzig avatar",
- "changeLanguagePopup-title": "Verander van taal",
+ "changeLanguagePopup-title": "Wijzig taal",
"changePasswordPopup-title": "Wijzig wachtwoord",
"changePermissionsPopup-title": "Wijzig permissies",
"changeSettingsPopup-title": "Wijzig instellingen",
- "subtasks": "Subtasks",
+ "subtasks": "Subtaken",
"checklists": "Checklists",
"click-to-star": "Klik om het bord als favoriet in te stellen",
"click-to-unstar": "Klik om het bord uit favorieten weg te halen",
"clipboard": "Vanuit clipboard of sleep het bestand hierheen",
"close": "Sluiten",
"close-board": "Sluit bord",
- "close-board-pop": "You will be able to restore the board by clicking the “Archive” button from the home header.",
+ "close-board-pop": "Je kunt het bord terughalen door de \"Archief\" knop te klikken in de menubalk \"Mijn Borden\".",
"color-black": "zwart",
"color-blue": "blauw",
- "color-crimson": "crimson",
- "color-darkgreen": "darkgreen",
- "color-gold": "gold",
- "color-gray": "gray",
+ "color-crimson": "karmijn",
+ "color-darkgreen": "donkergroen",
+ "color-gold": "goud",
+ "color-gray": "grijs",
"color-green": "groen",
"color-indigo": "indigo",
- "color-lime": "Felgroen",
+ "color-lime": "felgroen",
"color-magenta": "magenta",
- "color-mistyrose": "mistyrose",
- "color-navy": "navy",
- "color-orange": "Oranje",
- "color-paleturquoise": "paleturquoise",
- "color-peachpuff": "peachpuff",
- "color-pink": "Roze",
- "color-plum": "plum",
- "color-purple": "Paars",
- "color-red": "Rood",
- "color-saddlebrown": "saddlebrown",
- "color-silver": "silver",
- "color-sky": "Lucht",
- "color-slateblue": "slateblue",
- "color-white": "white",
- "color-yellow": "Geel",
- "unset-color": "Unset",
- "comment": "Reageer",
- "comment-placeholder": "Schrijf reactie",
- "comment-only": "Alleen reageren",
- "comment-only-desc": "Kan alleen op kaarten reageren.",
- "no-comments": "No comments",
- "no-comments-desc": "Can not see comments and activities.",
+ "color-mistyrose": "zachtroze",
+ "color-navy": "marineblauw",
+ "color-orange": "oranje",
+ "color-paleturquoise": "vaalturkoois",
+ "color-peachpuff": "perzikroze",
+ "color-pink": "roze",
+ "color-plum": "pruim",
+ "color-purple": "paars",
+ "color-red": "rood",
+ "color-saddlebrown": "zadelbruin",
+ "color-silver": "zilver",
+ "color-sky": "lucht",
+ "color-slateblue": "leiblauw",
+ "color-white": "wit",
+ "color-yellow": "geel",
+ "unset-color": "Ongedefinieerd",
+ "comment": "Aantekening",
+ "comment-placeholder": "Schrijf aantekening",
+ "comment-only": "Alleen aantekeningen maken",
+ "comment-only-desc": "Kan alleen op kaarten aantekenen.",
+ "no-comments": "Geen aantekeningen",
+ "no-comments-desc": "Zie geen aantekeningen of activiteiten.",
"computer": "Computer",
- "confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?",
- "confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
+ "confirm-subtask-delete-dialog": "Weet je zeker dat je de subtaak wilt verwijderen?",
+ "confirm-checklist-delete-dialog": "Weet je zeker dat je de checklist wilt verwijderen?",
"copy-card-link-to-clipboard": "Kopieer kaart link naar klembord",
- "linkCardPopup-title": "Link Card",
+ "linkCardPopup-title": "Koppel Kaart",
"searchElementPopup-title": "Zoek",
"copyCardPopup-title": "Kopieer kaart",
"copyChecklistToManyCardsPopup-title": "Checklist sjabloon kopiëren naar meerdere kaarten",
@@ -235,30 +237,30 @@
"createBoardPopup-title": "Bord aanmaken",
"chooseBoardSourcePopup-title": "Importeer bord",
"createLabelPopup-title": "Label aanmaken",
- "createCustomField": "Create Field",
- "createCustomFieldPopup-title": "Create Field",
+ "createCustomField": "Veld aanmaken",
+ "createCustomFieldPopup-title": "Veld aanmaken",
"current": "Huidige",
- "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+ "custom-field-delete-pop": "Er is geen herstelmogelijkheid. Deze actie zal dit maatwerkveld van alle kaarten verwijderen en de bijbehorende historie wissen.",
"custom-field-checkbox": "Checkbox",
"custom-field-date": "Datum",
- "custom-field-dropdown": "Dropdown List",
- "custom-field-dropdown-none": "(none)",
- "custom-field-dropdown-options": "List Options",
- "custom-field-dropdown-options-placeholder": "Press enter to add more options",
- "custom-field-dropdown-unknown": "(unknown)",
- "custom-field-number": "Number",
- "custom-field-text": "Text",
- "custom-fields": "Custom Fields",
+ "custom-field-dropdown": "Dropdown Lijst",
+ "custom-field-dropdown-none": "(geen)",
+ "custom-field-dropdown-options": "Lijst Opties",
+ "custom-field-dropdown-options-placeholder": "Toets Enter om meer opties toe te voegen ",
+ "custom-field-dropdown-unknown": "(onbekend)",
+ "custom-field-number": "Aantal",
+ "custom-field-text": "Tekst",
+ "custom-fields": "Maatwerkvelden",
"date": "Datum",
"decline": "Weigeren",
"default-avatar": "Standaard avatar",
"delete": "Verwijderen",
- "deleteCustomFieldPopup-title": "Delete Custom Field?",
- "deleteLabelPopup-title": "Verwijder label?",
+ "deleteCustomFieldPopup-title": "Maatwerkveld verwijderen?",
+ "deleteLabelPopup-title": "Label verwijderen?",
"description": "Beschrijving",
"disambiguateMultiLabelPopup-title": "Disambigueer Label Actie",
"disambiguateMultiMemberPopup-title": "Disambigueer Lid Actie",
- "discard": "Weggooien",
+ "discard": "Negeer",
"done": "Klaar",
"download": "Download",
"edit": "Wijzig",
@@ -267,8 +269,8 @@
"edit-wip-limit": "Verander WIP limiet",
"soft-wip-limit": "Zachte WIP limiet",
"editCardStartDatePopup-title": "Wijzig start datum",
- "editCardDueDatePopup-title": "Wijzig deadline",
- "editCustomFieldPopup-title": "Edit Field",
+ "editCardDueDatePopup-title": "Wijzig vervaldatum",
+ "editCustomFieldPopup-title": "Wijzig Veld",
"editCardSpentTimePopup-title": "Verander gespendeerde tijd",
"editLabelPopup-title": "Wijzig label",
"editNotificationPopup-title": "Wijzig notificatie",
@@ -278,7 +280,7 @@
"email-enrollAccount-text": "Hallo __user__,\n\nOm gebruik te maken van de online dienst, kan je op de volgende link klikken.\n\n__url__\n\nBedankt.",
"email-fail": "E-mail verzenden is mislukt",
"email-fail-text": "Fout tijdens het verzenden van de email",
- "email-invalid": "Ongeldige e-mail",
+ "email-invalid": "Ongeldig e-mailadres",
"email-invite": "Nodig uit via e-mail",
"email-invite-subject": "__inviter__ heeft je een uitnodiging gestuurd",
"email-invite-text": "Beste __user__,\n\n__inviter__ heeft je uitgenodigd om voor een samenwerking deel te nemen aan het bord \"__board__\".\n\nKlik op de link hieronder:\n\n__url__\n\nBedankt.",
@@ -286,7 +288,7 @@
"email-resetPassword-text": "Hallo __user__,\n\nKlik op de link hier beneden om je wachtwoord te resetten.\n\n__url__\n\nBedankt.",
"email-sent": "E-mail is verzonden",
"email-verifyEmail-subject": "Verifieer je e-mailadres op __siteName__",
- "email-verifyEmail-text": "Hallo __user__,\n\nOm je e-mail te verifiëren vragen we je om op de link hieronder te drukken.\n\n__url__\n\nBedankt.",
+ "email-verifyEmail-text": "Hallo __user__,\n\nOm je e-mail te verifiëren vragen we je om op de link hieronder te klikken.\n\n__url__\n\nBedankt.",
"enable-wip-limit": "Activeer WIP limiet",
"error-board-doesNotExist": "Dit bord bestaat niet.",
"error-board-notAdmin": "Je moet een administrator zijn van dit bord om dat te doen.",
@@ -297,22 +299,32 @@
"error-user-doesNotExist": "Deze gebruiker bestaat niet",
"error-user-notAllowSelf": "Je kan jezelf niet uitnodigen",
"error-user-notCreated": "Deze gebruiker is niet aangemaakt",
- "error-username-taken": "Deze gebruikersnaam is al bezet",
- "error-email-taken": "Deze e-mail is al eerder gebruikt",
+ "error-username-taken": "Deze gebruikersnaam is al in gebruik",
+ "error-email-taken": "Dit e-mailadres is al in gebruik",
"export-board": "Exporteer bord",
+ "sort": "Sorteer",
+ "sort-desc": "Klik om lijst te sorteren",
+ "list-sort-by": "Sorteer lijst op",
+ "list-label-modifiedAt": "Laatste toegangstijd",
+ "list-label-title": "Naam van de lijst",
+ "list-label-sort": "Je handmatige volgorde",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filter",
- "filter-cards": "Filter kaarten",
- "filter-clear": "Reset filter",
+ "filter-cards": "Filter kaarten of lijsten",
+ "list-filter-label": "Filter lijst op titel",
+ "filter-clear": "Wis filter",
"filter-no-label": "Geen label",
"filter-no-member": "Geen lid",
- "filter-no-custom-fields": "No Custom Fields",
- "filter-show-archive": "Show archived lists",
- "filter-hide-empty": "Hide empty lists",
- "filter-on": "Filter staat aan",
+ "filter-no-custom-fields": "Geen maatwerkvelden",
+ "filter-show-archive": "Toon gearchiveerde lijsten",
+ "filter-hide-empty": "Verberg lege lijsten",
+ "filter-on": "Filter is actief",
"filter-on-desc": "Je bent nu kaarten aan het filteren op dit bord. Klik hier om het filter te wijzigen.",
"filter-to-selection": "Filter zoals selectie",
- "advanced-filter-label": "Advanced Filter",
- "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",
+ "advanced-filter-label": "Geavanceerd Filter",
+ "advanced-filter-description": "Met het Geavanceerd Filter kun je een tekst schrijven die de volgende operatoren mag bevatten: == != <= >= && || ( ) Een Spatie wordt als scheiding gebruikt tussen de verschillende operatoren. Je kunt filteren op alle Maatwerkvelden door hun namen en waarden in te tikken. Bijvoorbeeld: Veld1 == Waarde1. Let op: Als velden of waarden spaties bevatten dan moet je die tussen enkele aanhalingstekens zetten. Bijvoorbeeld: 'Veld 1' == 'Waarde 1'. Om controle karakters (' \\/) over te slaan gebruik je \\. Bijvoorbeeld: Veld1 == I\\'m. Je kunt ook meerdere condities combineren. Bijvoorbeeld: F1 == V1 || F1 == V2. Normalerwijze worden alle operatoren van links naar rechts verwerkt. Dit kun je veranderen door ronde haken te gebruiken. Bijvoorbeeld: F1 == V1 && ( F2 == V2 || F2 == V3 ). Je kunt ook met regex in tekstvelden zoeken. Bijvoorbeeld: F1 == /Tes.*/i",
"fullname": "Volledige naam",
"header-logo-title": "Ga terug naar jouw borden pagina.",
"hide-system-messages": "Verberg systeemberichten",
@@ -322,52 +334,52 @@
"link": "Link",
"import-board": "Importeer bord",
"import-board-c": "Importeer bord",
- "import-board-title-trello": "Importeer bord van Trello",
- "import-board-title-wekan": "Import board from previous export",
- "import-sandstorm-backup-warning": "Do not delete data you import from original exported board or Trello before checking does this grain close and open again, or do you get Board not found error, that means data loss.",
- "import-sandstorm-warning": "Het geïmporteerde bord verwijdert alle data op het huidige bord, om het daarna te vervangen.",
- "from-trello": "Van Trello",
- "from-wekan": "From previous export",
+ "import-board-title-trello": "Importeer bord vanuit Trello",
+ "import-board-title-wekan": "Importeer bord vanuit eerdere export",
+ "import-sandstorm-backup-warning": "Verwijder nog niet de data van je geëxporteerde Trello-bord totdat je vastgesteld hebt dat het Wekan-bord werkt. Doe dit door het nieuwe bord te sluiten en opnieuw te openen. Als er dan een foutmelding krijgt of het nieuwe bord opent niet dan kun je nog terugvallen op het originele bord. ",
+ "import-sandstorm-warning": "Het geïmporteerde bord verwijdert alle huidige data op dit bord, om het daarna te vervangen.",
+ "from-trello": "Vanuit Trello",
+ "from-wekan": "Vanuit eerdere export",
"import-board-instruction-trello": "Op jouw Trello bord, ga naar 'Menu', dan naar 'Meer', 'Print en Exporteer', 'Exporteer JSON', en kopieer de tekst.",
- "import-board-instruction-wekan": "In your board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.",
- "import-board-instruction-about-errors": "If you get errors when importing board, sometimes importing still works, and board is at All Boards page.",
+ "import-board-instruction-wekan": "Ga op je bord naar 'Menu' en klik dan 'Export board' en kopieer de tekst in het gedownloade bestand.",
+ "import-board-instruction-about-errors": "Als je tijdens de import van het bord foutmeldingen krijgt is de import soms toch gelukt en vind je het bord terug op de 'Alle borden' scherm.",
"import-json-placeholder": "Plak geldige JSON data hier",
"import-map-members": "Breng leden in kaart",
- "import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
+ "import-members-map": "Je geïmporteerde bord heeft een aantal leden. Koppel de leden die je wilt importeren aan je gebruikers.",
"import-show-user-mapping": "Breng leden overzicht tevoorschijn",
- "import-user-select": "Pick your existing user you want to use as this member",
- "importMapMembersAddPopup-title": "Select member",
+ "import-user-select": "Kies een bestaande gebruiker die je als dit lid wilt koppelen",
+ "importMapMembersAddPopup-title": "Kies lid",
"info": "Versie",
"initials": "Initialen",
"invalid-date": "Ongeldige datum",
"invalid-time": "Ongeldige tijd",
"invalid-user": "Ongeldige gebruiker",
"joined": "doet nu mee met",
- "just-invited": "Je bent zojuist uitgenodigd om mee toen doen met dit bord",
+ "just-invited": "Je bent zojuist uitgenodigd om mee toen doen aan dit bord",
"keyboard-shortcuts": "Toetsenbord snelkoppelingen",
"label-create": "Label aanmaken",
"label-default": "%s label (standaard)",
- "label-delete-pop": "Je kan het niet ongedaan maken. Deze actie zal de label van alle kaarten verwijderen, en de feed.",
+ "label-delete-pop": "Er is geen herstelmogelijkheid. Deze actie zal het label van alle kaarten verwijderen met de bijbehorende historie.",
"labels": "Labels",
"language": "Taal",
- "last-admin-desc": "Je kan de permissies niet veranderen omdat er maar een administrator is.",
+ "last-admin-desc": "Je kunt de permissies niet veranderen omdat er minimaal een administrator moet zijn.",
"leave-board": "Verlaat bord",
- "leave-board-pop": "Weet u zeker dat u __boardTitle__ wilt verlaten? U wordt verwijderd van alle kaarten binnen dit bord",
+ "leave-board-pop": "Weet je zeker dat je __boardTitle__ wilt verlaten? Je wordt verwijderd van alle kaarten binnen dit bord",
"leaveBoardPopup-title": "Bord verlaten?",
"link-card": "Link naar deze kaart",
- "list-archive-cards": "Move all cards in this list to Archive",
- "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.",
+ "list-archive-cards": "Verplaats alle kaarten in deze lijst naar Archief",
+ "list-archive-cards-pop": "Dit zal alle kaarten uit deze lijst op dit bord verwijderen. Om de kaarten in het Archief te tonen en terug te halen, klik \"Menu\" > \"Archief\".",
"list-move-cards": "Verplaats alle kaarten in deze lijst",
"list-select-cards": "Selecteer alle kaarten in deze lijst",
- "set-color-list": "Set Color",
+ "set-color-list": "Wijzig kleur in",
"listActionPopup-title": "Lijst acties",
"swimlaneActionPopup-title": "Swimlane handelingen",
- "swimlaneAddPopup-title": "Add a Swimlane below",
+ "swimlaneAddPopup-title": "Voeg hieronder een Swimlane toe",
"listImportCardPopup-title": "Importeer een Trello kaart",
"listMorePopup-title": "Meer",
"link-list": "Link naar deze lijst",
- "list-delete-pop": "Alle acties zullen verwijderd worden van de activiteiten feed, en je zult deze niet meer kunnen herstellen. Je kan deze actie niet ongedaan maken.",
- "list-delete-suggest-archive": "You can move a list to Archive to remove it from the board and preserve the activity.",
+ "list-delete-pop": "Alle acties zullen verwijderd worden van de activiteiten feed, en je zult deze niet meer kunnen herstellen. Er is geen herstelmogelijkheid.",
+ "list-delete-suggest-archive": "Je kunt een lijst naar Archief verplaatsen om die van het bord te verwijderen waarbij de activiteiten behouden blijven.",
"lists": "Lijsten",
"swimlanes": "Swimlanes",
"log-out": "Uitloggen",
@@ -387,14 +399,14 @@
"muted-info": "Je zal nooit meer geïnformeerd worden bij veranderingen in dit bord.",
"my-boards": "Mijn Borden",
"name": "Naam",
- "no-archived-cards": "No cards in Archive.",
- "no-archived-lists": "No lists in Archive.",
- "no-archived-swimlanes": "No swimlanes in Archive.",
+ "no-archived-cards": "Geen kaarten in Archief.",
+ "no-archived-lists": "Geen lijsten in Archief..",
+ "no-archived-swimlanes": "Geen swimlanes in Archief.",
"no-results": "Geen resultaten",
"normal": "Normaal",
"normal-desc": "Kan de kaarten zien en wijzigen. Kan de instellingen niet wijzigen.",
- "not-accepted-yet": "Uitnodiging niet geaccepteerd",
- "notify-participate": "Ontvang updates van elke kaart die je hebt gemaakt of lid van bent",
+ "not-accepted-yet": "Uitnodiging nog niet geaccepteerd",
+ "notify-participate": "Ontvang updates van elke kaart die je hebt aangemaakt of lid van bent",
"notify-watch": "Ontvang updates van elke bord, lijst of kaart die je bekijkt.",
"optional": "optioneel",
"or": "of",
@@ -407,34 +419,34 @@
"previewAttachedImagePopup-title": "Voorbeeld",
"previewClipboardImagePopup-title": "Voorbeeld",
"private": "Privé",
- "private-desc": "Dit bord is privé. Alleen mensen die toegevoegd zijn aan het bord kunnen het bekijken en wijzigen.",
+ "private-desc": "Dit bord is privé. Alleen gebruikers die toegevoegd zijn aan het bord kunnen het bekijken en wijzigen.",
"profile": "Profiel",
- "public": "Publiek",
- "public-desc": "Dit bord is publiek. Het is zichtbaar voor iedereen met de link en zal tevoorschijn komen op zoekmachines zoals Google. Alleen mensen die toegevoegd zijn kunnen het bord wijzigen.",
+ "public": "Openbaar",
+ "public-desc": "Dit bord is openbaar. Het is zichtbaar voor iedereen met de link en zal tevoorschijn komen op zoekmachines zoals Google. Alleen gebruikers die toegevoegd zijn aan het bord kunnen het wijzigen.",
"quick-access-description": "Maak een bord favoriet om een snelkoppeling toe te voegen aan deze balk.",
"remove-cover": "Verwijder Cover",
"remove-from-board": "Verwijder van bord",
"remove-label": "Verwijder label",
- "listDeletePopup-title": "Verwijder lijst?",
+ "listDeletePopup-title": "Lijst verwijderen?",
"remove-member": "Verwijder lid",
"remove-member-from-card": "Verwijder van kaart",
"remove-member-pop": "Verwijder __name__ (__username__) van __boardTitle__? Het lid zal verwijderd worden van alle kaarten op dit bord, en zal een notificatie ontvangen.",
- "removeMemberPopup-title": "Verwijder lid?",
+ "removeMemberPopup-title": "Lid verwijderen?",
"rename": "Hernoem",
"rename-board": "Hernoem bord",
"restore": "Herstel",
"save": "Opslaan",
"search": "Zoek",
- "rules": "Rules",
- "search-cards": "Zoeken in kaart titels en omschrijvingen op dit bord",
+ "rules": "Regels",
+ "search-cards": "Zoek op kaarten/lijsten en omschrijvingen op dit bord",
"search-example": "Tekst om naar te zoeken?",
"select-color": "Selecteer kleur",
"set-wip-limit-value": "Zet een limiet voor het maximaal aantal taken in deze lijst",
"setWipLimitPopup-title": "Zet een WIP limiet",
- "shortcut-assign-self": "Wijs jezelf toe aan huidige kaart",
+ "shortcut-assign-self": "Voeg jezelf toe aan huidige kaart",
"shortcut-autocomplete-emoji": "Emojis automatisch aanvullen",
"shortcut-autocomplete-members": "Leden automatisch aanvullen",
- "shortcut-clear-filters": "Alle filters vrijmaken",
+ "shortcut-clear-filters": "Wis alle filters",
"shortcut-close-dialog": "Sluit dialoog",
"shortcut-filter-my-cards": "Filter mijn kaarten",
"shortcut-show-shortcuts": "Haal lijst met snelkoppelingen tevoorschijn",
@@ -461,7 +473,7 @@
"tracking": "Volgen",
"tracking-info": "Je wordt op de hoogte gesteld als er veranderingen zijn aan de kaarten waar je lid of maker van bent.",
"type": "Type",
- "unassign-member": "Lid ontkennen",
+ "unassign-member": "Lid verwijderen",
"unsaved-description": "Je hebt een niet opgeslagen beschrijving.",
"unwatch": "Niet bekijken",
"upload": "Upload",
@@ -469,24 +481,24 @@
"uploaded-avatar": "Avatar is geüpload",
"username": "Gebruikersnaam",
"view-it": "Bekijk het",
- "warn-list-archived": "warning: this card is in an list at Archive",
+ "warn-list-archived": "Let op: deze kaart zit in gearchiveerde lijst",
"watch": "Bekijk",
"watching": "Bekijken",
- "watching-info": "Je zal op de hoogte worden gesteld als er een verandering gebeurt op dit bord.",
+ "watching-info": "Je zal op de hoogte worden gesteld als er een verandering plaatsvind op dit bord.",
"welcome-board": "Welkom Bord",
"welcome-swimlane": "Mijlpaal 1",
"welcome-list1": "Basis",
"welcome-list2": "Geadvanceerd",
- "card-templates-swimlane": "Card Templates",
- "list-templates-swimlane": "List Templates",
- "board-templates-swimlane": "Board Templates",
+ "card-templates-swimlane": "Kaart Templates",
+ "list-templates-swimlane": "Lijst Templates",
+ "board-templates-swimlane": "Bord Templates",
"what-to-do": "Wat wil je doen?",
"wipLimitErrorPopup-title": "Ongeldige WIP limiet",
"wipLimitErrorPopup-dialog-pt1": "Het aantal taken in deze lijst is groter dan de gedefinieerde WIP limiet ",
"wipLimitErrorPopup-dialog-pt2": "Verwijder een aantal taken uit deze lijst, of zet de WIP limiet hoger",
"admin-panel": "Administrator paneel",
"settings": "Instellingen",
- "people": "Mensen",
+ "people": "Gebruikers",
"registration": "Registratie",
"disable-self-registration": "Schakel zelf-registratie uit",
"invite": "Uitnodigen",
@@ -502,233 +514,242 @@
"smtp-password": "Wachtwoord",
"smtp-tls": "TLS ondersteuning",
"send-from": "Van",
- "send-smtp-test": "Verzend een email naar uzelf",
+ "send-smtp-test": "Verzend een test email naar jezelf",
"invitation-code": "Uitnodigings code",
"email-invite-register-subject": "__inviter__ heeft je een uitnodiging gestuurd",
- "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
+ "email-invite-register-text": "Beste __user__,\n\n__inviter__ nodigt je uit voor een Kanban-bord om samen te werken.\n\nHet bord vind je via onderstaande link:\n__url__\n\nJe uitnodigingscode is: __icode__\n\nBedankt en tot ziens.",
"email-smtp-test-subject": "SMTP Test Email",
- "email-smtp-test-text": "U heeft met succes een email verzonden",
+ "email-smtp-test-text": "Je hebt met succes een email verzonden",
"error-invitation-code-not-exist": "Uitnodigings code bestaat niet",
"error-notAuthorized": "Je bent niet toegestaan om deze pagina te bekijken.",
+ "webhook-title": "Webhook Naam",
+ "webhook-token": "Token (Optioneel voor Authenticatie)",
"outgoing-webhooks": "Uitgaande Webhooks",
+ "bidirectional-webhooks": "Twee-Weg Webhooks",
"outgoingWebhooksPopup-title": "Uitgaande Webhooks",
- "boardCardTitlePopup-title": "Card Title Filter",
+ "boardCardTitlePopup-title": "Kaarttitel Filter",
+ "disable-webhook": "Schakel deze Webhook uit",
+ "global-webhook": "Globale Webhooks",
"new-outgoing-webhook": "Nieuwe webhook",
"no-name": "(Onbekend)",
"Node_version": "Node versie",
- "Meteor_version": "Meteor version",
- "MongoDB_version": "MongoDB version",
+ "Meteor_version": "Meteor versie",
+ "MongoDB_version": "MongoDB versie",
"MongoDB_storage_engine": "MongoDB storage engine",
- "MongoDB_Oplog_enabled": "MongoDB Oplog enabled",
+ "MongoDB_Oplog_enabled": "MongoDB Oplog ingeschakeld",
"OS_Arch": "OS Arch",
"OS_Cpus": "OS CPU Count",
"OS_Freemem": "OS Vrij Geheugen",
- "OS_Loadavg": "OS Gemiddelde Lading",
+ "OS_Loadavg": "OS Gemiddelde Belasting",
"OS_Platform": "OS Platform",
"OS_Release": "OS Versie",
"OS_Totalmem": "OS Totaal Geheugen",
"OS_Type": "OS Type",
"OS_Uptime": "OS Uptime",
- "days": "days",
+ "days": "dagen",
"hours": "uren",
"minutes": "minuten",
"seconds": "seconden",
- "show-field-on-card": "Show this field on card",
- "automatically-field-on-card": "Auto create field to all cards",
- "showLabel-field-on-card": "Show field label on minicard",
+ "show-field-on-card": "Toon dit veld op kaart",
+ "automatically-field-on-card": "Maak veld automatisch aan op alle kaarten",
+ "showLabel-field-on-card": "Toon veldnaam op minikaart",
"yes": "Ja",
"no": "Nee",
"accounts": "Accounts",
"accounts-allowEmailChange": "Sta E-mailadres wijzigingen toe",
- "accounts-allowUserNameChange": "Allow Username Change",
+ "accounts-allowUserNameChange": "Sta Gebruikersnaam wijzigingen toe",
"createdAt": "Gemaakt op",
"verified": "Geverifieerd",
"active": "Actief",
- "card-received": "Received",
- "card-received-on": "Received on",
- "card-end": "End",
- "card-end-on": "Ends on",
- "editCardReceivedDatePopup-title": "Change received date",
- "editCardEndDatePopup-title": "Change end date",
- "setCardColorPopup-title": "Set color",
- "setCardActionsColorPopup-title": "Choose a color",
- "setSwimlaneColorPopup-title": "Choose a color",
- "setListColorPopup-title": "Choose a color",
- "assigned-by": "Assigned By",
- "requested-by": "Requested By",
- "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
- "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
- "boardDeletePopup-title": "Delete Board?",
- "delete-board": "Delete Board",
- "default-subtasks-board": "Subtasks for __board__ board",
- "default": "Default",
- "queue": "Queue",
- "subtask-settings": "Subtasks Settings",
- "boardSubtaskSettingsPopup-title": "Board Subtasks Settings",
- "show-subtasks-field": "Cards can have subtasks",
- "deposit-subtasks-board": "Deposit subtasks to this board:",
- "deposit-subtasks-list": "Landing list for subtasks deposited here:",
- "show-parent-in-minicard": "Show parent in minicard:",
- "prefix-with-full-path": "Prefix with full path",
- "prefix-with-parent": "Prefix with parent",
- "subtext-with-full-path": "Subtext with full path",
- "subtext-with-parent": "Subtext with parent",
- "change-card-parent": "Change card's parent",
- "parent-card": "Parent card",
- "source-board": "Source board",
- "no-parent": "Don't show parent",
- "activity-added-label": "added label '%s' to %s",
- "activity-removed-label": "removed label '%s' from %s",
- "activity-delete-attach": "deleted an attachment from %s",
- "activity-added-label-card": "added label '%s'",
- "activity-removed-label-card": "removed label '%s'",
- "activity-delete-attach-card": "deleted an attachment",
- "activity-set-customfield": "set custom field '%s' to '%s' in %s",
- "activity-unset-customfield": "unset custom field '%s' in %s",
- "r-rule": "Rule",
- "r-add-trigger": "Add trigger",
- "r-add-action": "Add action",
- "r-board-rules": "Board rules",
- "r-add-rule": "Add rule",
- "r-view-rule": "View rule",
- "r-delete-rule": "Delete rule",
- "r-new-rule-name": "New rule title",
- "r-no-rules": "No rules",
- "r-when-a-card": "When a card",
+ "card-received": "Ontvangen",
+ "card-received-on": "Ontvangen op",
+ "card-end": "Einde",
+ "card-end-on": "Eindigt op",
+ "editCardReceivedDatePopup-title": "Pas ontvangstdatum aan",
+ "editCardEndDatePopup-title": "Wijzig einddatum",
+ "setCardColorPopup-title": "Stel kleur in",
+ "setCardActionsColorPopup-title": "Kies een kleur",
+ "setSwimlaneColorPopup-title": "Kies een kleur",
+ "setListColorPopup-title": "Kies een kleur",
+ "assigned-by": "Toegewezen door",
+ "requested-by": "Aangevraagd door",
+ "board-delete-notice": "Verwijdering kan niet ongedaan gemaakt worden. Je raakt alle met dit bord gerelateerde lijsten, kaarten en acties kwijt.",
+ "delete-board-confirm-popup": "Alle lijsten, kaarten, labels en activiteiten zullen worden verwijderd en je kunt de bordinhoud niet terughalen. Er is geen herstelmogelijkheid. ",
+ "boardDeletePopup-title": "Bord verwijderen?",
+ "delete-board": "Verwijder bord",
+ "default-subtasks-board": "Subtaken voor __board__ bord",
+ "default": "Standaard",
+ "queue": "Rij",
+ "subtask-settings": "Subtaak Instellingen",
+ "boardSubtaskSettingsPopup-title": "Bord Subtaak Instellingen",
+ "show-subtasks-field": "Kaarten kunnen subtaken hebben",
+ "deposit-subtasks-board": "Plaats subtaken op dit bord:",
+ "deposit-subtasks-list": "Plaats subtaken in deze lijst:",
+ "show-parent-in-minicard": "Toon bron in minikaart:",
+ "prefix-with-full-path": "Prefix met volledig pad",
+ "prefix-with-parent": "Prefix met bron",
+ "subtext-with-full-path": "Subtekst met volledig pad",
+ "subtext-with-parent": "Subtekst met bron",
+ "change-card-parent": "Wijzig bron van kaart",
+ "parent-card": "Bronkaart",
+ "source-board": "Bronbord",
+ "no-parent": "Toon bron niet",
+ "activity-added-label": "label toegevoegd '%s' aan %s",
+ "activity-removed-label": "label verwijderd '%s' van %s",
+ "activity-delete-attach": "een bijlage verwijderd van %s",
+ "activity-added-label-card": "label toegevoegd '%s'",
+ "activity-removed-label-card": "label verwijderd '%s'",
+ "activity-delete-attach-card": "een bijlage verwijderd",
+ "activity-set-customfield": "wijzig maatwerkveld '%s' naar '%s' in %s",
+ "activity-unset-customfield": "wijzig maatwerkveld '%s' in %s",
+ "r-rule": "Regel",
+ "r-add-trigger": "Voeg signaal toe",
+ "r-add-action": "Actie toevoegen",
+ "r-board-rules": "Bord regels",
+ "r-add-rule": "Regel toevoegen",
+ "r-view-rule": "Toon regel",
+ "r-delete-rule": "Verwijder regel",
+ "r-new-rule-name": "Nieuwe regelnaam",
+ "r-no-rules": "Geen regels",
+ "r-when-a-card": "Als een kaart",
"r-is": "is",
- "r-is-moved": "is moved",
- "r-added-to": "added to",
- "r-removed-from": "Removed from",
- "r-the-board": "the board",
- "r-list": "list",
- "set-filter": "Set Filter",
- "r-moved-to": "Moved to",
- "r-moved-from": "Moved from",
- "r-archived": "Moved to Archive",
- "r-unarchived": "Restored from Archive",
- "r-a-card": "a card",
- "r-when-a-label-is": "When a label is",
- "r-when-the-label": "When the label",
- "r-list-name": "list name",
- "r-when-a-member": "When a member is",
- "r-when-the-member": "When the member",
- "r-name": "name",
- "r-when-a-attach": "When an attachment",
- "r-when-a-checklist": "When a checklist is",
- "r-when-the-checklist": "When the checklist",
- "r-completed": "Completed",
- "r-made-incomplete": "Made incomplete",
- "r-when-a-item": "When a checklist item is",
- "r-when-the-item": "When the checklist item",
- "r-checked": "Checked",
- "r-unchecked": "Unchecked",
- "r-move-card-to": "Move card to",
- "r-top-of": "Top of",
- "r-bottom-of": "Bottom of",
- "r-its-list": "its list",
- "r-archive": "Move to Archive",
- "r-unarchive": "Restore from Archive",
- "r-card": "card",
+ "r-is-moved": "is verplaatst",
+ "r-added-to": "toegevoegd aan",
+ "r-removed-from": "verwijderd van",
+ "r-the-board": "het bord",
+ "r-list": "lijst",
+ "set-filter": "Definieer Filter",
+ "r-moved-to": "verplaatst naar",
+ "r-moved-from": "verplaatst van",
+ "r-archived": "Verplaatst naar Archief",
+ "r-unarchived": "Teruggehaald uit Archief",
+ "r-a-card": "een kaart",
+ "r-when-a-label-is": "Als een label is",
+ "r-when-the-label": "Als het label",
+ "r-list-name": "lijstnaam",
+ "r-when-a-member": "Als een lid is",
+ "r-when-the-member": "Als het lid",
+ "r-name": "naam",
+ "r-when-a-attach": "Als een bijlage",
+ "r-when-a-checklist": "Als een checklist is",
+ "r-when-the-checklist": "Als de checklist",
+ "r-completed": "Afgewerkt",
+ "r-made-incomplete": "Onafgewerkt gemaakt",
+ "r-when-a-item": "Als een checklist item is",
+ "r-when-the-item": "Als het checklist item",
+ "r-checked": "Aangevinkt",
+ "r-unchecked": "Uitgevinkt",
+ "r-move-card-to": "Verplaats kaart naar",
+ "r-top-of": "Bovenste van",
+ "r-bottom-of": "Onderste van",
+ "r-its-list": "zijn lijst",
+ "r-archive": "Verplaats naar Archief",
+ "r-unarchive": "Terughalen uit Archief",
+ "r-card": "kaart",
"r-add": "Toevoegen",
- "r-remove": "Remove",
+ "r-remove": "Verwijder",
"r-label": "label",
- "r-member": "member",
- "r-remove-all": "Remove all members from the card",
- "r-set-color": "Set color to",
+ "r-member": "lid",
+ "r-remove-all": "Verwijder alle leden van de kaart",
+ "r-set-color": "Wijzig kleur naar",
"r-checklist": "checklist",
- "r-check-all": "Check all",
- "r-uncheck-all": "Uncheck all",
- "r-items-check": "items of checklist",
- "r-check": "Check",
- "r-uncheck": "Uncheck",
+ "r-check-all": "Vink alles aan",
+ "r-uncheck-all": "Vink alles uit",
+ "r-items-check": "items van checklist",
+ "r-check": "Vink aan",
+ "r-uncheck": "Vink uit",
"r-item": "item",
- "r-of-checklist": "of checklist",
- "r-send-email": "Send an email",
- "r-to": "to",
- "r-subject": "subject",
- "r-rule-details": "Rule details",
- "r-d-move-to-top-gen": "Move card to top of its list",
- "r-d-move-to-top-spec": "Move card to top of list",
- "r-d-move-to-bottom-gen": "Move card to bottom of its list",
- "r-d-move-to-bottom-spec": "Move card to bottom of list",
- "r-d-send-email": "Send email",
- "r-d-send-email-to": "to",
- "r-d-send-email-subject": "subject",
- "r-d-send-email-message": "message",
- "r-d-archive": "Move card to Archive",
- "r-d-unarchive": "Restore card from Archive",
- "r-d-add-label": "Add label",
- "r-d-remove-label": "Remove label",
- "r-create-card": "Create new card",
- "r-in-list": "in list",
+ "r-of-checklist": "van checklist",
+ "r-send-email": "Verzend een email",
+ "r-to": "naar",
+ "r-subject": "onderwerp",
+ "r-rule-details": "Regel details",
+ "r-d-move-to-top-gen": "Verplaats kaart helemaal naar boven op de lijst",
+ "r-d-move-to-top-spec": "Verplaats kaart naar bovenaan op lijst",
+ "r-d-move-to-bottom-gen": "Verplaats kaart naar onderaan op de lijst",
+ "r-d-move-to-bottom-spec": "Verplaats kaart naar onderaan op lijst",
+ "r-d-send-email": "Verzend email",
+ "r-d-send-email-to": "naar",
+ "r-d-send-email-subject": "onderwerp",
+ "r-d-send-email-message": "bericht",
+ "r-d-archive": "Verplaats kaart naar Archief",
+ "r-d-unarchive": "Haal kaart terug uit Archief",
+ "r-d-add-label": "Label toevoegen",
+ "r-d-remove-label": "Verwijder label",
+ "r-create-card": "Maak nieuwe kaart aan",
+ "r-in-list": "van lijst",
"r-in-swimlane": "in swimlane",
- "r-d-add-member": "Add member",
- "r-d-remove-member": "Remove member",
- "r-d-remove-all-member": "Remove all member",
- "r-d-check-all": "Check all items of a list",
- "r-d-uncheck-all": "Uncheck all items of a list",
- "r-d-check-one": "Check item",
- "r-d-uncheck-one": "Uncheck item",
- "r-d-check-of-list": "of checklist",
- "r-d-add-checklist": "Add checklist",
- "r-d-remove-checklist": "Remove checklist",
- "r-by": "by",
- "r-add-checklist": "Add checklist",
- "r-with-items": "with items",
- "r-items-list": "item1,item2,item3",
- "r-add-swimlane": "Add swimlane",
- "r-swimlane-name": "swimlane name",
- "r-board-note": "Note: leave a field empty to match every possible value.",
- "r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
- "r-when-a-card-is-moved": "When a card is moved to another list",
- "r-set": "Set",
- "r-update": "Update",
- "r-datefield": "date field",
- "r-df-start-at": "start",
- "r-df-due-at": "due",
- "r-df-end-at": "end",
- "r-df-received-at": "received",
- "r-to-current-datetime": "to current date/time",
- "r-remove-value-from": "Remove value from",
+ "r-d-add-member": "Lid toevoegen",
+ "r-d-remove-member": "Verwijder lid",
+ "r-d-remove-all-member": "Verwijder alle leden",
+ "r-d-check-all": "Vink alle items van een lijst aan",
+ "r-d-uncheck-all": "Vink alle items van een lijst uit",
+ "r-d-check-one": "Vink item aan",
+ "r-d-uncheck-one": "Vink item uit",
+ "r-d-check-of-list": "van checklist",
+ "r-d-add-checklist": "Checklist toevoegen",
+ "r-d-remove-checklist": "Verwijder checklist",
+ "r-by": "door",
+ "r-add-checklist": "Checklist toevoegen",
+ "r-with-items": "met items",
+ "r-items-list": "item1, item2, item3",
+ "r-add-swimlane": "Swimlane toevoegen",
+ "r-swimlane-name": "Swimlane-naam",
+ "r-board-note": "Let op: laat een veld leeg om er niet op te selecteren",
+ "r-checklist-note": "Let op: checklist items moeten geschreven worden als kommagescheiden waarden.",
+ "r-when-a-card-is-moved": "Als een kaart is verplaatst naar een andere lijst",
+ "r-set": "Wijzig",
+ "r-update": "Bijwerken",
+ "r-datefield": "datumveld",
+ "r-df-start-at": "begin",
+ "r-df-due-at": "verval",
+ "r-df-end-at": "einde",
+ "r-df-received-at": "ontvangen",
+ "r-to-current-datetime": "naar huidige datum/tijd",
+ "r-remove-value-from": "Verwijder waarde van",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
- "authentication-method": "Authentication method",
- "authentication-type": "Authentication type",
- "custom-product-name": "Custom Product Name",
- "layout": "Layout",
- "hide-logo": "Hide Logo",
- "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
- "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
- "error-undefined": "Something went wrong",
- "error-ldap-login": "An error occurred while trying to login",
- "display-authentication-method": "Display Authentication Method",
- "default-authentication-method": "Default Authentication Method",
- "duplicate-board": "Duplicate Board",
- "people-number": "The number of people is:",
- "swimlaneDeletePopup-title": "Delete Swimlane ?",
- "swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
- "restore-all": "Restore all",
- "delete-all": "Delete all",
- "loading": "Loading, please wait.",
- "previous_as": "last time was",
- "act-a-dueAt": "modified due time to \nWhen: __timeValue__\nWhere: __card__\n previous due was __timeOldValue__",
- "act-a-endAt": "modified ending time to __timeValue__ from (__timeOldValue__)",
- "act-a-startAt": "modified starting time to __timeValue__ from (__timeOldValue__)",
- "act-a-receivedAt": "modified received time to __timeValue__ from (__timeOldValue__)",
- "a-dueAt": "modified due time to be",
- "a-endAt": "modified ending time to be",
- "a-startAt": "modified starting time to be",
- "a-receivedAt": "modified received time to be",
- "almostdue": "current due time %s is approaching",
- "pastdue": "current due time %s is past",
- "duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
- "act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
- "act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
- "act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
- "delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
- "accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "authentication-method": "Authenticatiemethode",
+ "authentication-type": "Authenticatietype",
+ "custom-product-name": "Eigen Productnaam",
+ "layout": "Lay-out",
+ "hide-logo": "Verberg Logo",
+ "add-custom-html-after-body-start": "Voeg eigen HTML toe na <body> start",
+ "add-custom-html-before-body-end": "Voeg eigen HTML toe voor </body> einde",
+ "error-undefined": "Er is iets misgegaan",
+ "error-ldap-login": "Er is een fout opgetreden tijdens het inloggen",
+ "display-authentication-method": "Toon Authenticatiemethode",
+ "default-authentication-method": "Standaard Authenticatiemethode",
+ "duplicate-board": "Dupliceer Bord",
+ "people-number": "Het aantal gebruikers is:",
+ "swimlaneDeletePopup-title": "Swimlane verwijderen?",
+ "swimlane-delete-pop": "Alle acties zullen verwijderd worden van de activiteiten feed en je kunt de swimlane niet terughalen. Er is geen herstelmogelijkheid.",
+ "restore-all": "Haal alles terug",
+ "delete-all": "Verwijder alles",
+ "loading": "Laden, even geduld.",
+ "previous_as": "laatste keer was",
+ "act-a-dueAt": "heeft vervaldatum gewijzigd naar \nOp: __timeValue__\nKaart: __card__\noude vervaldatum was __timeOldValue__",
+ "act-a-endAt": "einddatum gewijzigd naar __timeValue__ van (__timeOldValue__)",
+ "act-a-startAt": "begindatum gewijzigd naar __timeValue__ van (__timeOldValue__)",
+ "act-a-receivedAt": "ontvangstdatum gewijzigd naar __timeValue__ van (__timeOldValue__)",
+ "a-dueAt": "vervaldatum gewijzigd naar",
+ "a-endAt": "einddatum gewijzigd naar",
+ "a-startAt": "begindatum gewijzigd naar",
+ "a-receivedAt": "ontvangstdatum gewijzigd naar",
+ "almostdue": "huidige vervaldatum %s nadert",
+ "pastdue": "huidige vervaldatum %s is verlopen",
+ "duenow": "huidige vervaldatum %s is vandaag",
+ "act-newDue": "__list__/__card__ heeft eerste vervaldatum herinnering [__board__]",
+ "act-withDue": "__list__/__card__ vervaldatum herinneringen [__board__]",
+ "act-almostdue": "wil je herinneren aan het naderen van de huidige vervaldatum (__timeValue__) van __card__ ",
+ "act-pastdue": "wil je herinneren aan het verlopen van de huidige vervaldatum (__timeValue__) van __card__ ",
+ "act-duenow": "wil je herinneren aan het vandaag verlopen van de huidige vervaldatum (__timeValue__) van __card__ ",
+ "act-atUserComment": "Je werd genoemd in [__board__] __list__/__card__",
+ "delete-user-confirm-popup": "Weet je zeker dat je dit account wilt verwijderen? Er is geen herstelmogelijkheid.",
+ "accounts-allowUserDelete": "Sta gebruikers toe om hun eigen account te verwijderen",
+ "hide-minicard-label-text": "Verberg minikaart labeltekst",
+ "show-desktop-drag-handles": "Toon sleep gereedschap op werkblad",
+ "assignee": "Toegewezen aan",
+ "cardAssigneesPopup-title": "Toegewezen aan"
}
diff --git a/i18n/oc.i18n.json b/i18n/oc.i18n.json
index 5a730634..683323e9 100644
--- a/i18n/oc.i18n.json
+++ b/i18n/oc.i18n.json
@@ -132,16 +132,18 @@
"boardChangeVisibilityPopup-title": "Cambiar la visibilitat",
"boardChangeWatchPopup-title": "Cambiar lo seguit",
"boardMenuPopup-title": "Opcions del tablèu",
+ "boardChangeViewPopup-title": "Presentacion del tablèu",
"boards": "Tablèus",
"board-view": "Presentacion del tablèu",
"board-view-cal": "Calendièr",
"board-view-swimlanes": "Corredor",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Tièras",
"bucket-example": "Coma \"Tota la tièra\" per exemple",
"cancel": "Tornar",
- "card-archived": "Aquesta carta es desplaçada dins Archius",
- "board-archived": "Aqueste tablèu esdesplaçat dins Archius",
- "card-comments-title": "Aquesta carta a %s de comentaris.",
+ "card-archived": "Aquesta carta es desplaçada dins Archius.",
+ "board-archived": "Aqueste tablèu esdesplaçat dins Archius.",
+ "card-comments-title": "Aquesta carta a %s comentari(s).",
"card-delete-notice": "Un còp tirat, pas de posibilitat de tornar enrè",
"card-delete-pop": "Totes las accions van èsser quitadas del seguit d'activitat e poiretz pas mai utilizar aquesta carta.",
"card-delete-suggest-archive": "Podètz desplaçar una carta dins Archius per la quitar del tablèu e gardar las activitats.",
@@ -300,8 +302,18 @@
"error-username-taken": "Lo nom es ja pres",
"error-email-taken": "Lo corrièl es ja pres ",
"export-board": "Exportar lo tablèu",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filtre",
- "filter-cards": "Filtre cartas",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Escafar lo filtre",
"filter-no-label": "Pas cap d'etiqueta",
"filter-no-member": "Pas cap de participant",
@@ -426,7 +438,7 @@
"save": "Salvar",
"search": "Cèrca",
"rules": "Règlas",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Color causida",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "As capitat de mandar un corrièl",
"error-invitation-code-not-exist": "Lo còde de convit existís pas",
"error-notAuthorized": "Sès pas autorizat a agachar aquesta pagina",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Desconegut)",
"Node_version": "Node version",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/pl.i18n.json b/i18n/pl.i18n.json
index 04e7d6b6..6259510f 100644
--- a/i18n/pl.i18n.json
+++ b/i18n/pl.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Zmień widoczność tablicy",
"boardChangeWatchPopup-title": "Zmień sposób wysyłania powiadomień",
"boardMenuPopup-title": "Ustawienia tablicy",
+ "boardChangeViewPopup-title": "Widok tablicy",
"boards": "Tablice",
"board-view": "Widok tablicy",
"board-view-cal": "Kalendarz",
"board-view-swimlanes": "Diagramy czynności",
+ "board-view-collapse": "Zwiń",
"board-view-lists": "Listy",
"bucket-example": "Tak jak na przykład \"lista kubełkowa\"",
"cancel": "Anuluj",
@@ -300,8 +302,18 @@
"error-username-taken": "Ta nazwa jest już zajęta",
"error-email-taken": "Adres email jest już zarezerwowany",
"export-board": "Eksportuj tablicę",
+ "sort": "Sortuj",
+ "sort-desc": "Kliknij by sortować listę",
+ "list-sort-by": "Sortuj listę przez:",
+ "list-label-modifiedAt": "Ostatni czas dostępu",
+ "list-label-title": "Nazwa listy",
+ "list-label-sort": "Twoja kolejność ustawiona ręcznie",
+ "list-label-short-modifiedAt": "(O)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(K)",
"filter": "Filtr",
- "filter-cards": "Odfiltruj karty",
+ "filter-cards": "Filtruj karty i listy",
+ "list-filter-label": "Filtruj listy względem tytułu",
"filter-clear": "Usuń filter",
"filter-no-label": "Brak etykiety",
"filter-no-member": "Brak członków",
@@ -426,7 +438,7 @@
"save": "Zapisz",
"search": "Wyszukaj",
"rules": "Reguły",
- "search-cards": "Szukaj spośród tytułów kart oraz opisów na tej tablicy",
+ "search-cards": "Szukaj w tytułach kart/list oraz opisach na tej tablicy",
"search-example": "Czego mam szukać?",
"select-color": "Wybierz kolor",
"set-wip-limit-value": "Ustaw maksymalny limit zadań na tej liście",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "Wiadomość testowa została wysłana z powodzeniem.",
"error-invitation-code-not-exist": "Kod zaproszenia nie istnieje",
"error-notAuthorized": "Nie jesteś uprawniony do przeglądania tej strony.",
+ "webhook-title": "Nazwa webhooka",
+ "webhook-token": "Token (opcjonalny do autoryzacji)",
"outgoing-webhooks": "Wychodzące webhooki",
+ "bidirectional-webhooks": "Dwustronne webhooki",
"outgoingWebhooksPopup-title": "Wychodzące webhooki",
"boardCardTitlePopup-title": "Filtruj poprzez nazwę karty",
+ "disable-webhook": "Wyłącz tego webhooka",
+ "global-webhook": "Globalne webhooki",
"new-outgoing-webhook": "Nowy wychodzący webhook",
"no-name": "(nieznany)",
"Node_version": "Wersja Node",
@@ -723,12 +740,16 @@
"almostdue": "aktualny termin ukończenia %s dobiega końca",
"pastdue": "aktualny termin ukończenia %s jest w przeszłości",
"duenow": "aktualny termin ukończenia %s jest dzisiaj",
- "act-withDue": "__card__ przypomina o zakończeniu terminu [__board__]",
+ "act-newDue": "__list__/__card__ przypomina o 1szym zakończeniu terminu [__board__]",
+ "act-withDue": "__list__/__card__ posiada przypomnienia zakończenia terminu [__board__]",
"act-almostdue": "przypomina o zbliżającej się dacie ukończenia (__timeValue__) karty __card__",
"act-pastdue": "przypomina o ubiegłej dacie ukończenia (__timeValue__) karty __card__",
"act-duenow": "przypomina o ubiegającej teraz dacie ukończenia (__timeValue__) karty __card__",
- "act-atUserComment": "Zostałeś wspomniany na __board__ (__card__)",
+ "act-atUserComment": "Zostałeś wspomniany w [__board] __list__/__card__",
"delete-user-confirm-popup": "Czy jesteś pewien, że chcesz usunąć te konto? Nie można tego wycofać.",
"accounts-allowUserDelete": "Pozwól użytkownikom na usuwanie własnych kont",
- "hide-minicard-label-text": "Ukryj opisy etykiet minikart"
+ "hide-minicard-label-text": "Ukryj opisy etykiet minikart",
+ "show-desktop-drag-handles": "Pokaż przeciągnięcia na pulpit",
+ "assignee": "Przypisujący",
+ "cardAssigneesPopup-title": "Przypisujący"
}
diff --git a/i18n/pt-BR.i18n.json b/i18n/pt-BR.i18n.json
index ed9d2859..61059565 100644
--- a/i18n/pt-BR.i18n.json
+++ b/i18n/pt-BR.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Alterar Visibilidade",
"boardChangeWatchPopup-title": "Alterar observação",
"boardMenuPopup-title": "Configurações do quadro",
+ "boardChangeViewPopup-title": "Visão de quadro",
"boards": "Quadros",
"board-view": "Visão de quadro",
"board-view-cal": "Calendário",
"board-view-swimlanes": "Raias",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Listas",
"bucket-example": "\"Bucket List\", por exemplo",
"cancel": "Cancelar",
@@ -300,8 +302,18 @@
"error-username-taken": "Esse username já existe",
"error-email-taken": "E-mail já está em uso",
"export-board": "Exportar quadro",
+ "sort": "Ordenar",
+ "sort-desc": "Clique para Ordenar Lista",
+ "list-sort-by": "Ordenar a Lista por:",
+ "list-label-modifiedAt": "Último Acesso",
+ "list-label-title": "Nome da Lista",
+ "list-label-sort": "Ordem Manual",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filtrar",
- "filter-cards": "Filtrar Cartões",
+ "filter-cards": "Filtrar Cartões ou Listas",
+ "list-filter-label": "Filtrar Lista por Título",
"filter-clear": "Limpar filtro",
"filter-no-label": "Sem etiquetas",
"filter-no-member": "Sem membros",
@@ -426,7 +438,7 @@
"save": "Salvar",
"search": "Buscar",
"rules": "Regras",
- "search-cards": "Pesquisa em títulos e descrições de cartões neste quadro",
+ "search-cards": "Procurar por título e descrição de cartão/lista neste quadro ",
"search-example": "Texto para procurar",
"select-color": "Selecionar Cor",
"set-wip-limit-value": "Defina um limite máximo para o número de tarefas nesta lista",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "Você enviou um e-mail com sucesso",
"error-invitation-code-not-exist": "O código do convite não existe",
"error-notAuthorized": "Você não está autorizado à ver esta página.",
+ "webhook-title": "Nome do Webhook",
+ "webhook-token": "Token (Opcional para autenticação)",
"outgoing-webhooks": "Webhook de saída",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Webhook de saída",
"boardCardTitlePopup-title": "Filtro do Título do Cartão",
+ "disable-webhook": "Desabilitar este Webhook",
+ "global-webhook": "Webhooks globais",
"new-outgoing-webhook": "Novo Webhook de saída",
"no-name": "(Desconhecido)",
"Node_version": "Versão do Node",
@@ -723,12 +740,16 @@
"almostdue": "prazo final atual %s está próximo",
"pastdue": "prazo final atual %s venceu",
"duenow": "prazo final atual %s é hoje",
- "act-withDue": "__card__ lembrete de prazos finais [__board__]",
+ "act-newDue": "__list__/__card__ possui 1º lembrete de prazo [__board__]",
+ "act-withDue": "__list__/__card__ lembretes de prazo [__board__]",
"act-almostdue": "está lembrando que o prazo final atual (__timeValue__) do __card__ está próximo",
"act-pastdue": "está lembrando que o prazo final atual (__timeValue__) do __card__ venceu",
"act-duenow": "está lembrando que o prazo final (__timeValue__) do __card__ é agora",
- "act-atUserComment": "Você foi mencionado no [__board__] __card__",
+ "act-atUserComment": "Você foi mencionado no [__board__] __list__/__card__",
"delete-user-confirm-popup": "Você realmente quer apagar esta conta? Não há como desfazer.",
"accounts-allowUserDelete": "Permitir que usuários apaguem a própria conta",
- "hide-minicard-label-text": "Esconder rótulo da etiqueta do mini cartão"
+ "hide-minicard-label-text": "Esconder rótulo da etiqueta do mini cartão",
+ "show-desktop-drag-handles": "Mostrar alças de arrasto da área de trabalho",
+ "assignee": "Administrador",
+ "cardAssigneesPopup-title": "Administrador"
}
diff --git a/i18n/pt.i18n.json b/i18n/pt.i18n.json
index a7e63ee3..0c919241 100644
--- a/i18n/pt.i18n.json
+++ b/i18n/pt.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Alterar Visibilidade",
"boardChangeWatchPopup-title": "Alterar Observação",
"boardMenuPopup-title": "Configurações do Quadro",
+ "boardChangeViewPopup-title": "Visão do Quadro",
"boards": "Quadros",
"board-view": "Visão do Quadro",
"board-view-cal": "Calendário",
"board-view-swimlanes": "Pistas",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Listas",
"bucket-example": "\"Lista de Desejos\", por exemplo",
"cancel": "Cancelar",
@@ -300,8 +302,18 @@
"error-username-taken": "Esse nome de utilizador já existe",
"error-email-taken": "Endereço de e-mail já está em uso",
"export-board": "Exportar quadro",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filtrar",
- "filter-cards": "Filtrar Cartões",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Limpar filtro",
"filter-no-label": "Sem etiquetas",
"filter-no-member": "Sem membros",
@@ -426,7 +438,7 @@
"save": "Guardar",
"search": "Procurar",
"rules": "Regras",
- "search-cards": "Pesquisar nos títulos e descrições dos cartões deste quadro",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Texto a procurar?",
"select-color": "Seleccionar Cor",
"set-wip-limit-value": "Defina um limite máximo para o número de tarefas nesta lista",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "Enviou um e-mail com sucesso",
"error-invitation-code-not-exist": "O código do convite não existe",
"error-notAuthorized": "Não tem autorização para ver esta página.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Webhooks de saída",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Webhooks de saída",
"boardCardTitlePopup-title": "Filtro do Título do Cartão",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "Novo Webhook de saída",
"no-name": "(Desconhecido)",
"Node_version": "Versão do Node",
@@ -723,12 +740,16 @@
"almostdue": "a data limite actual %s está-se a aproximar",
"pastdue": "a data limite actual %s já passou",
"duenow": "a data limite actual %s é hoje",
- "act-withDue": "lembretes das datas limites de __card__ [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "estava a lembrar que a data limite actual (__timeValue__) de __card__ está-se a aproximar",
"act-pastdue": "estava a lembrar que a data limite (__timeValue__) de __card__ já passou",
"act-duenow": "estava a lembrar que a data limite (__timeValue__) de __card__ é agora",
- "act-atUserComment": "Foi mencionado em [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Tem a certeza que pretende apagar esta conta? Não há como desfazer.",
"accounts-allowUserDelete": "Permitir aos utilizadores apagar as suas próprias contas",
- "hide-minicard-label-text": "Ocultar texto das etiquetas dos mini-cartões"
+ "hide-minicard-label-text": "Ocultar texto das etiquetas dos mini-cartões",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/ro.i18n.json b/i18n/ro.i18n.json
index 2423797d..deeeb9de 100644
--- a/i18n/ro.i18n.json
+++ b/i18n/ro.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Liste",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
@@ -300,8 +302,18 @@
"error-username-taken": "This username is already taken",
"error-email-taken": "Email has already been taken",
"export-board": "Export board",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filter",
- "filter-cards": "Filter Cards",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "No member",
@@ -426,7 +438,7 @@
"save": "Salvează",
"search": "Caută",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/ru.i18n.json b/i18n/ru.i18n.json
index 10a317ab..1a705057 100644
--- a/i18n/ru.i18n.json
+++ b/i18n/ru.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Изменить настройки видимости",
"boardChangeWatchPopup-title": "Режимы оповещения",
"boardMenuPopup-title": "Настройки доски",
+ "boardChangeViewPopup-title": "Вид доски",
"boards": "Доски",
"board-view": "Вид доски",
"board-view-cal": "Календарь",
"board-view-swimlanes": "Дорожки",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Списки",
"bucket-example": "Например “Список дел”",
"cancel": "Отмена",
@@ -300,8 +302,18 @@
"error-username-taken": "Это имя пользователя уже занято",
"error-email-taken": "Этот адрес уже занят",
"export-board": "Экспортировать доску",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Фильтр",
- "filter-cards": "Фильтр карточек",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Очистить фильтр",
"filter-no-label": "Нет метки",
"filter-no-member": "Нет участников",
@@ -426,7 +438,7 @@
"save": "Сохранить",
"search": "Поиск",
"rules": "Правила",
- "search-cards": "Искать в названиях и описаниях карточек на этой доске",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Искать текст?",
"select-color": "Выбрать цвет",
"set-wip-limit-value": "Устанавливает ограничение на максимальное количество задач в этом списке",
@@ -510,10 +522,15 @@
"email-smtp-test-text": "Вы успешно отправили письмо",
"error-invitation-code-not-exist": "Код приглашения не существует",
"error-notAuthorized": "У вас нет доступа на просмотр этой страницы.",
- "outgoing-webhooks": "Исходящие Веб-хуки",
- "outgoingWebhooksPopup-title": "Исходящие Веб-хуки",
+ "webhook-title": "Имя Веб-Хука",
+ "webhook-token": "Токен (Опционально для аутентификации)",
+ "outgoing-webhooks": "Исходящие Веб-Хуки",
+ "bidirectional-webhooks": "Двунаправленный Веб-Хук",
+ "outgoingWebhooksPopup-title": "Исходящие Веб-Хуки",
"boardCardTitlePopup-title": "Фильтр названий карточек",
- "new-outgoing-webhook": "Новый исходящий Веб-хук",
+ "disable-webhook": "Отключить этот Веб-Хук",
+ "global-webhook": "Глобальные Веб-Хуки",
+ "new-outgoing-webhook": "Новый исходящий Веб-Хук",
"no-name": "(Неизвестный)",
"Node_version": "Версия NodeJS",
"Meteor_version": "Версия Meteor",
@@ -723,12 +740,16 @@
"almostdue": "текущий срок выполнения %s приближается",
"pastdue": "текущий срок выполнения %s прошел",
"duenow": "текущий срок выполнения %s сегодня",
- "act-withDue": "__card__ напоминания о сроке выполнения [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "напомнил, что скоро завершается срок выполнения (__timeValue__) карточки __card__",
"act-pastdue": "напомнил, что срок выполнения (__timeValue__) карточки __card__ прошел",
"act-duenow": "напомнил, что срок выполнения (__timeValue__) карточки __card__ — это уже сейчас",
- "act-atUserComment": "Вас упомянули в [__board__] __card__",
+ "act-atUserComment": "Вас упомянули в [__board__] __list__/__card__",
"delete-user-confirm-popup": "Вы уверены, что хотите удалить аккаунт? Данное действие необратимо.",
"accounts-allowUserDelete": "Разрешить пользователям удалять собственные аккаунты",
- "hide-minicard-label-text": "Скрыть текст меток на карточках"
+ "hide-minicard-label-text": "Скрыть текст меток на карточках",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/sl.i18n.json b/i18n/sl.i18n.json
new file mode 100644
index 00000000..a8ce0b99
--- /dev/null
+++ b/i18n/sl.i18n.json
@@ -0,0 +1,755 @@
+{
+ "accept": "Sprejmi",
+ "act-activity-notify": "Obvestilo o dejavnosti",
+ "act-addAttachment": "dodal priponko __attachment__ h kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-deleteAttachment": "odstranil priponko __attachment__ iz kartice __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-addSubtask": "dodal podopravilo __subtask__ h kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-addLabel": "Dodal oznako __label__ h kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-addedLabel": "Dodal oznako __label__ h kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-removeLabel": "Odstranil oznako __label__ iz kartice __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-removedLabel": "Odstranil oznako __label__ iz kartice __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-addChecklist": "dodal kontrolni seznam __checklist__ h kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-addChecklistItem": "dodal postavko __checklistItem__ kontrolnega seznama __checklist__ na kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-removeChecklist": "odstranil kontrolni seznam __checklist__ iz kartice __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-removeChecklistItem": "odstranil postavko __checklistItem__ kontrolnega seznama __checklist__ na kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-checkedItem": "obkljukal postavko __checklistItem__ kontrolnega seznama __checklist__ na kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-uncheckedItem": "odkljukal postavko __checklistItem__ kontrolnega seznama __checklist__ na kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-completeChecklist": "dokončal kontrolni seznam __checklist__ na kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-uncompleteChecklist": "nedokončan kontrolni seznam __checklist__ na kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-addComment": "komentiral na kartici __card__: __comment__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-editComment": "uredil komentar na kartici __card__: __comment__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-deleteComment": "izbrisal komentar na kartici __card__: __comment__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-createBoard": "ustvaril tablo __board__",
+ "act-createSwimlane": "ustvaril plavalno stezo __swimlane__ na tabli __board__",
+ "act-createCard": "ustvaril kartico __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-createCustomField": "ustvaril poljubno polje __customField__ na tabli __board__",
+ "act-deleteCustomField": "izbrisal poljubno polje __customField__ na tabli __board__",
+ "act-setCustomField": "uredil poljubno polje __customField__: __customFieldValue__ na kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-createList": "dodal seznam __list__ na tablo __board__",
+ "act-addBoardMember": "dodal člana __member__ k tabli __board__",
+ "act-archivedBoard": "Tabla __board__ premaknjena v arhiv",
+ "act-archivedCard": "Kartica __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__ premaknjena v arhiv",
+ "act-archivedList": "Seznam __list__ na plavalni stezi __swimlane__ na tabli __board__ premaknjen v arhiv",
+ "act-archivedSwimlane": "Plavalna steza __swimlane__ na tabli __board__ premaknjena v arhiv",
+ "act-importBoard": "uvozil tablo __board__",
+ "act-importCard": "uvozil kartico __card__ na seznam __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-importList": "uvozil seznam __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-joinMember": "dodal član __member__ h kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-moveCard": "premakil kartico __card__ na tabli __board__ iz seznama __oldList__ na plavalni stezi __oldSwimlane__ na seznam __list__ na plavalni stezi __swimlane__",
+ "act-moveCardToOtherBoard": "premaknil kartico __card__ iz seznama __oldList__ na plavalni stezi __oldSwimlane__ na tabli __oldBoard__ na seznam __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-removeBoardMember": "odstranil člana __member__ iz table __board__",
+ "act-restoredCard": "obnovil kartico __card__ na seznam __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-unjoinMember": "odstranil člana __member__ iz kartice __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "act-withBoardTitle": "__board__",
+ "act-withCardTitle": "[__board__] __card__",
+ "actions": "Dejanja",
+ "activities": "Aktivnosti",
+ "activity": "Aktivnost",
+ "activity-added": "dodal %s v %s",
+ "activity-archived": "%s premaknjeno v arhiv",
+ "activity-attached": "pripel %s v %s",
+ "activity-created": "ustvaril %s",
+ "activity-customfield-created": "ustvaril poljubno polje%s",
+ "activity-excluded": "izključil %s iz %s",
+ "activity-imported": "uvozil %s v %s iz %s",
+ "activity-imported-board": "uvozil %s iz %s",
+ "activity-joined": "se je pridružil na %s",
+ "activity-moved": "premakil %s iz %s na %s",
+ "activity-on": "na %s",
+ "activity-removed": "odstranil %s iz %s",
+ "activity-sent": "poslano %s na %s",
+ "activity-unjoined": "se je odjavil iz %s",
+ "activity-subtask-added": "dodal podopravilo k %s",
+ "activity-checked-item": "obkljukal %s na kontrolnem seznamu %s od %s",
+ "activity-unchecked-item": "odkljukal %s na kontrolnem seznamu %s od %s",
+ "activity-checklist-added": "dodal kontrolni seznam na %s",
+ "activity-checklist-removed": "odstranil kontrolni seznam iz %s",
+ "activity-checklist-completed": "dokončal kontrolni seznam __checklist__ na kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "activity-checklist-uncompleted": "nedokončal kontrolni seznam %s od %s",
+ "activity-checklist-item-added": "dodal postavko kontrolnega seznama na '%s' v %s",
+ "activity-checklist-item-removed": "odstranil postavko kontrolnega seznama iz '%s' v %s",
+ "add": "Dodaj",
+ "activity-checked-item-card": "obkljukal %s na kontrolnem seznamu %s",
+ "activity-unchecked-item-card": "odkljukal %s na kontrolnem seznamu %s",
+ "activity-checklist-completed-card": "dokončal kontrolni seznam __checklist__ na kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "activity-checklist-uncompleted-card": "nedokončal kontrolni seznam %s",
+ "activity-editComment": "uredil komentar %s",
+ "activity-deleteComment": "izbrisal komentar %s",
+ "add-attachment": "Dodaj priponko",
+ "add-board": "Dodaj tablo",
+ "add-card": "Dodaj kartico",
+ "add-swimlane": "Dodaj plavalno stezo",
+ "add-subtask": "Dodaj podopravilo",
+ "add-checklist": "Dodaj kontrolni seznam",
+ "add-checklist-item": "Dodaj postavko na kontrolni seznam",
+ "add-cover": "Dodaj ovitek",
+ "add-label": "Dodaj oznako",
+ "add-list": "Dodaj seznam",
+ "add-members": "Dodaj člane",
+ "added": "Dodano",
+ "addMemberPopup-title": "Člani",
+ "admin": "Administrator",
+ "admin-desc": "Lahko gleda in ureja kartice, odstrani člane ter spreminja nastavitve table.",
+ "admin-announcement": "Najava",
+ "admin-announcement-active": "Aktivna vse-sistemska najava",
+ "admin-announcement-title": "Najava od administratorja",
+ "all-boards": "Vse table",
+ "and-n-other-card": "In __count__ druga kartica",
+ "and-n-other-card_plural": "In __count__ drugih kartic",
+ "apply": "Uporabi",
+ "app-is-offline": "Nalaganje, prosimo počakajte. Osveževanje strani bo povzročilo izgubo podatkov. Če nalaganje ne deluje, preverite, ali se strežnik ni ustavil.",
+ "archive": "Premakni v arhiv",
+ "archive-all": "Premakni vse v arhiv",
+ "archive-board": "Arhiviraj tablo",
+ "archive-card": "Arhiviraj kartico",
+ "archive-list": "Arhiviraj seznam",
+ "archive-swimlane": "Arhiviraj plavalno stezo",
+ "archive-selection": "Arhiviraj označeno",
+ "archiveBoardPopup-title": "Arhiviraj tablo?",
+ "archived-items": "Arhiv",
+ "archived-boards": "Table v arhivu",
+ "restore-board": "Obnovi tablo",
+ "no-archived-boards": "Nobene table ni v arhivu.",
+ "archives": "Arhiv",
+ "template": "Predloga",
+ "templates": "Predloge",
+ "assign-member": "Dodeli člana",
+ "attached": "pripeto",
+ "attachment": "Priponka",
+ "attachment-delete-pop": "Brisanje priponke je trajno. Ne obstaja razveljavitev.",
+ "attachmentDeletePopup-title": "Briši priponko?",
+ "attachments": "Priponke",
+ "auto-watch": "Samodejno spremljaj ustvarjene table",
+ "avatar-too-big": "Velikost avatarja je prevelika (70kB maks.)",
+ "back": "Nazaj",
+ "board-change-color": "Spremeni barvo",
+ "board-nb-stars": "%s zvezdic",
+ "board-not-found": "Tabla ni najdena",
+ "board-private-info": "Ta tabla bo <strong>privatna</strong>.",
+ "board-public-info": "Ta tabla bo <strong>javna</strong>.",
+ "boardChangeColorPopup-title": "Spremeni ozadje table",
+ "boardChangeTitlePopup-title": "Preimenuj tablo",
+ "boardChangeVisibilityPopup-title": "Spremeni vidnost",
+ "boardChangeWatchPopup-title": "Spremeni opazovanje",
+ "boardMenuPopup-title": "Nastavitve table",
+ "boardChangeViewPopup-title": "Pogled table",
+ "boards": "Table",
+ "board-view": "Pogled table",
+ "board-view-cal": "Koledar",
+ "board-view-swimlanes": "Plavalne steze",
+ "board-view-collapse": "Skrči",
+ "board-view-lists": "Seznami",
+ "bucket-example": "Kot na primer \"Življenjski seznam\"",
+ "cancel": "Prekliči",
+ "card-archived": "Kartica je premaknjena v arhiv.",
+ "board-archived": "Tabla je premaknjena v arhiv.",
+ "card-comments-title": "Ta kartica ima %s komentar.",
+ "card-delete-notice": "Brisanje je trajno. Izgubili boste vsa dejanja, povezana s kartico.",
+ "card-delete-pop": "Vsa dejanja bodo odstranjena iz zgodovine dejavnosti. Kartice ne boste mogli znova odpreti. Razveljavitve ni.",
+ "card-delete-suggest-archive": "Kartico lahko premaknete v arhiv, da jo odstranite s table in ohranite dejavnost.",
+ "card-due": "Rok",
+ "card-due-on": "Rok",
+ "card-spent": "Porabljen čas",
+ "card-edit-attachments": "Uredi priponke",
+ "card-edit-custom-fields": "Uredi poljubna polja",
+ "card-edit-labels": "Uredi oznake",
+ "card-edit-members": "Uredi člane",
+ "card-labels-title": "Spremeni oznake za kartico.",
+ "card-members-title": "Dodaj ali odstrani člane table iz kartice.",
+ "card-start": "Začetek",
+ "card-start-on": "Začne ob",
+ "cardAttachmentsPopup-title": "Pripni od",
+ "cardCustomField-datePopup-title": "Spremeni datum",
+ "cardCustomFieldsPopup-title": "Uredi poljubna polja",
+ "cardDeletePopup-title": "Briši kartico?",
+ "cardDetailsActionsPopup-title": "Dejanja kartice",
+ "cardLabelsPopup-title": "Oznake",
+ "cardMembersPopup-title": "Člani",
+ "cardMorePopup-title": "Več",
+ "cardTemplatePopup-title": "Ustvari predlogo",
+ "cards": "Kartice",
+ "cards-count": "Kartic",
+ "casSignIn": "Vpiši se s CAS",
+ "cardType-card": "Kartica",
+ "cardType-linkedCard": "Povezana kartica",
+ "cardType-linkedBoard": "Povezana tabla",
+ "change": "Spremeni",
+ "change-avatar": "Spremeni avatar",
+ "change-password": "Spremeni geslo",
+ "change-permissions": "Spremeni dovoljenja",
+ "change-settings": "Spremeni nastavitve",
+ "changeAvatarPopup-title": "Spremeni avatar",
+ "changeLanguagePopup-title": "Spremeni jezik",
+ "changePasswordPopup-title": "Spremeni geslo",
+ "changePermissionsPopup-title": "Spremeni dovoljenja",
+ "changeSettingsPopup-title": "Spremeni nastavitve",
+ "subtasks": "Podopravila",
+ "checklists": "Kontrolni seznami",
+ "click-to-star": "Kliknite, da označite tablo z zvezdico.",
+ "click-to-unstar": "Kliknite, da odznačite tablo z zvezdico.",
+ "clipboard": "Odložišče ali povleci & spusti",
+ "close": "Zapri",
+ "close-board": "Zapri tablo",
+ "close-board-pop": "Tablo boste lahko obnovili s klikom na gumb »Arhiviraj« na vstopni strani.",
+ "color-black": "črna",
+ "color-blue": "modra",
+ "color-crimson": "temno rdeča",
+ "color-darkgreen": "temno zelena",
+ "color-gold": "zlata",
+ "color-gray": "siva",
+ "color-green": "zelena",
+ "color-indigo": "indigo",
+ "color-lime": "limeta",
+ "color-magenta": "magenta",
+ "color-mistyrose": "rožnata",
+ "color-navy": "navy modra",
+ "color-orange": "oranžna",
+ "color-paleturquoise": "bledo turkizna",
+ "color-peachpuff": "breskvasta",
+ "color-pink": "roza",
+ "color-plum": "slivova",
+ "color-purple": "vijolična",
+ "color-red": "rdeča",
+ "color-saddlebrown": "rjava",
+ "color-silver": "srebrna",
+ "color-sky": "nebesna",
+ "color-slateblue": "skrilasto modra",
+ "color-white": "bela",
+ "color-yellow": "rumena",
+ "unset-color": "Onemogoči",
+ "comment": "Komentiraj",
+ "comment-placeholder": "Napiši komentar",
+ "comment-only": "Samo komentar",
+ "comment-only-desc": "Lahko komentirate samo na karticah.",
+ "no-comments": "Ni komentarjev",
+ "no-comments-desc": "Ne morete videti komentarjev in dejavnosti.",
+ "computer": "Računalnik",
+ "confirm-subtask-delete-dialog": "Ste prepričani, da želite izbrisati podopravilo?",
+ "confirm-checklist-delete-dialog": "Ste prepričani, da želite izbrisati kontrolni seznam?",
+ "copy-card-link-to-clipboard": "Kopiraj povezavo kartice na odložišče",
+ "linkCardPopup-title": "Poveži kartico",
+ "searchElementPopup-title": "Išči",
+ "copyCardPopup-title": "Kopiraj kartico",
+ "copyChecklistToManyCardsPopup-title": "Kopiraj predlogo kontrolnega seznama na več kartic",
+ "copyChecklistToManyCardsPopup-instructions": "Naslovi ciljnih kartic in opisi v JSON formatu",
+ "copyChecklistToManyCardsPopup-format": "[ {\"naslov\": \"Naslov prve kartice\", \"opis\":\"Opis prve kartice\"}, {\"naslov\":\"Opis druge kartice\",\"opis\":\"Opis druge kartice\"},{\"naslov\":\"Naslov zadnje kartice\",\"opis\":\"Opis zadnje kartice\"} ]",
+ "create": "Ustvari",
+ "createBoardPopup-title": "Ustvari tablo",
+ "chooseBoardSourcePopup-title": "Uvozi tablo",
+ "createLabelPopup-title": "Ustvari oznako",
+ "createCustomField": "Ustvari polje",
+ "createCustomFieldPopup-title": "Ustvari polje",
+ "current": "trenutno",
+ "custom-field-delete-pop": "Razveljavitve ni. To bo odstranilo to poljubno polje iz vseh kartic in izbrisalo njegovo zgodovino.",
+ "custom-field-checkbox": "Potrditveno polje",
+ "custom-field-date": "Datum",
+ "custom-field-dropdown": "Spustni seznam",
+ "custom-field-dropdown-none": "(nobeno)",
+ "custom-field-dropdown-options": "Možnosti seznama",
+ "custom-field-dropdown-options-placeholder": "Pritisnite enter da dodate več možnosti",
+ "custom-field-dropdown-unknown": "(neznano)",
+ "custom-field-number": "Število",
+ "custom-field-text": "Besedilo",
+ "custom-fields": "Poljubna polja",
+ "date": "Datum",
+ "decline": "Zavrni",
+ "default-avatar": "Privzeti avatar",
+ "delete": "Briši",
+ "deleteCustomFieldPopup-title": "Briši poljubno polje?",
+ "deleteLabelPopup-title": "Briši oznako?",
+ "description": "Opis",
+ "disambiguateMultiLabelPopup-title": "Razdvoji Dejanje Oznake",
+ "disambiguateMultiMemberPopup-title": "Razdvoji dejanje člana",
+ "discard": "Razveljavi",
+ "done": "Končano",
+ "download": "Prenos",
+ "edit": "Uredi",
+ "edit-avatar": "Spremeni avatar",
+ "edit-profile": "Uredi profil",
+ "edit-wip-limit": "Uredi omejitev št. kartic",
+ "soft-wip-limit": "Omehčaj omejitev št. kartic",
+ "editCardStartDatePopup-title": "Spremeni začetni datum",
+ "editCardDueDatePopup-title": "Spremeni datum zapadlosti",
+ "editCustomFieldPopup-title": "Uredi polje",
+ "editCardSpentTimePopup-title": "Spremeni porabljen čas",
+ "editLabelPopup-title": "Spremeni oznako",
+ "editNotificationPopup-title": "Uredi obvestilo",
+ "editProfilePopup-title": "Uredi profil",
+ "email": "E-pošta",
+ "email-enrollAccount-subject": "Up. račun ustvarjen za vas na __siteName__",
+ "email-enrollAccount-text": "Pozdravljeni __user__,\n\nZa začetek uporabe kliknite spodnjo povezavo.\n\n__url__\n\nHvala.",
+ "email-fail": "Pošiljanje e-pošte ni uspelo",
+ "email-fail-text": "Napaka pri poskusu pošiljanja e-pošte",
+ "email-invalid": "Neveljavna e-pošta",
+ "email-invite": "Povabi z uporabo e-pošte",
+ "email-invite-subject": "__inviter__ vam je poslal povabilo",
+ "email-invite-text": "Spoštovani __user__,\n\n__inviter__ vas vabi k sodelovanju na tabli \"__board__\".\n\nProsimo sledite spodnji povezavi:\n\n__url__\n\nHvala.",
+ "email-resetPassword-subject": "Ponastavite geslo na __siteName__",
+ "email-resetPassword-text": "Pozdravljeni __user__,\n\nZa ponastavitev gesla kliknite na spodnjo povezavo.\n\n__url__\n\nHvala.",
+ "email-sent": "E-pošta poslana",
+ "email-verifyEmail-subject": "Preverite svoje e-poštni naslov na __siteName__",
+ "email-verifyEmail-text": "Pozdravljeni __user__,\n\nDa preverite e-poštni naslov za vaš uporabniški račun, kliknite na spodnjo povezavo.\n\n__url__\n\nHvala.",
+ "enable-wip-limit": "Vklopi omejitev št. kartic",
+ "error-board-doesNotExist": "Ta tabla ne obstaja",
+ "error-board-notAdmin": "Nimate administrativnih pravic za tablo.",
+ "error-board-notAMember": "Niste član table.",
+ "error-json-malformed": "Vaše besedilo ni veljaven JSON",
+ "error-json-schema": "Vaši JSON podatki ne vsebujejo pravilnih informacij v ustreznem formatu",
+ "error-list-doesNotExist": "Seznam ne obstaja",
+ "error-user-doesNotExist": "Uporabnik ne obstaja",
+ "error-user-notAllowSelf": "Ne morete povabiti sebe",
+ "error-user-notCreated": "Ta uporabnik ni ustvarjen",
+ "error-username-taken": "To up. ime že obstaja",
+ "error-email-taken": "E-poštni naslov je že zaseden",
+ "export-board": "Izvozi tablo",
+ "sort": "Sortiraj",
+ "sort-desc": "Klikni za sortiranje seznama",
+ "list-sort-by": "Sortiraj po:",
+ "list-label-modifiedAt": "Nazadnje dostopano",
+ "list-label-title": "Ime seznama",
+ "list-label-sort": "Ročno nastavljen vrstni red",
+ "list-label-short-modifiedAt": "(N)",
+ "list-label-short-title": "(I)",
+ "list-label-short-sort": "(R)",
+ "filter": "Filtriraj",
+ "filter-cards": "Filtriraj kartice ali sezname",
+ "list-filter-label": "Filtriraj seznam po imenu",
+ "filter-clear": "Počisti filter",
+ "filter-no-label": "Brez oznake",
+ "filter-no-member": "Brez člana",
+ "filter-no-custom-fields": "Brez poljubnih polj",
+ "filter-show-archive": "Prikaži arhivirane sezname",
+ "filter-hide-empty": "Skrij prazne sezname",
+ "filter-on": "Filter vklopljen",
+ "filter-on-desc": "Filtrirane kartice na tej tabli. Kliknite tukaj za urejanje filtra.",
+ "filter-to-selection": "Filtriraj izbrane",
+ "advanced-filter-label": "Napredni filter",
+ "advanced-filter-description": "Napredni filter omogoča pripravo niza, ki vsebuje naslednje operaterje: == != <= >= && || () Preslednica se uporablja kot ločilo med operatorji. Vsa polja po meri lahko filtrirate tako, da vtipkate njihova imena in vrednosti. Na primer: Polje1 == Vrednost1. Opomba: Če polja ali vrednosti vsebujejo presledke, jih morate postaviti v enojne narekovaje. Primer: 'Polje 1' == 'Vrednost 1'. Če želite preskočiti posamezne kontrolne znake (' \\/), lahko uporabite \\. Na primer: Polje1 == I\\'m. Prav tako lahko kombinirate več pogojev. Na primer: F1 == V1 || F1 == V2. Običajno se vsi operaterji interpretirajo od leve proti desni. Vrstni red lahko spremenite tako, da postavite oklepaje. Na primer: F1 == V1 && ( F2 == V2 || F2 == V3 ). Prav tako lahko po besedilu iščete z uporabo pravil regex: F1 == /Tes.*/i",
+ "fullname": "Polno Ime",
+ "header-logo-title": "Pojdi nazaj na stran s tablami.",
+ "hide-system-messages": "Skrij sistemska sporočila",
+ "headerBarCreateBoardPopup-title": "Ustvari tablo",
+ "home": "Domov",
+ "import": "Uvozi",
+ "link": "Poveži",
+ "import-board": "uvozi tablo",
+ "import-board-c": "Uvozi tablo",
+ "import-board-title-trello": "Uvozi tablo iz orodja Trello",
+ "import-board-title-wekan": "Uvozi tablo iz prejšnjega izvoza",
+ "import-sandstorm-backup-warning": "Ne zbrišite podatkov, ki jih uvozite z originalne izvožene table ali Trello, preden preverite ali se tabla uspešno zapre in odpre ali pa boste dobili sporočilo Tabla ni najdena, kar pomeni izgubo podatkov.",
+ "import-sandstorm-warning": "Uvožena tabla bo izbrisala vse obstoječe podatke na tabli in jih zamenjala z uvoženo tablo.",
+ "from-trello": "Iz orodja Trello",
+ "from-wekan": "Od prejšnjega izvoza",
+ "import-board-instruction-trello": "V vaši Trello tabli pojdite na 'Meni', 'Več', 'Natisni in Izvozi', 'Izvozi JSON', in kopirajte prikazano besedilo.",
+ "import-board-instruction-wekan": "V vaši tabli pojdite na 'Meni', 'Izvozi tablo' in kopirajte besedilo iz prenesene datoteke.",
+ "import-board-instruction-about-errors": "Pri napakah med uvozom table v nekaterih primerih uvažanje še deluje, uvožena tabla pa je na strani Vse Table.",
+ "import-json-placeholder": "Tukaj prilepite veljavne JSON podatke",
+ "import-map-members": "Mapiraj člane",
+ "import-members-map": "Vaša uvožena tabla vsebuje nekaj članov. Prosimo mapirajte člane, ki jih želite uvoziti, z vašimi uporabniki.",
+ "import-show-user-mapping": "Preglejte povezane člane",
+ "import-user-select": "Izberite obstoječega uporabnika, ki ga želite uporabiti kot tega člana.",
+ "importMapMembersAddPopup-title": "Izberite člana",
+ "info": "Različica",
+ "initials": "Inicialke",
+ "invalid-date": "Neveljaven datum",
+ "invalid-time": "Neveljaven čas",
+ "invalid-user": "Neveljaven uporabnik",
+ "joined": "se je pridružil",
+ "just-invited": "Povabljeni ste k tej tabli",
+ "keyboard-shortcuts": "Bližnjice",
+ "label-create": "Ustvari Oznako",
+ "label-default": "%s oznaka (privzeto)",
+ "label-delete-pop": "Razveljavitve ni. To bo odstranilo oznako iz vseh kartic in izbrisalo njeno zgodovino.",
+ "labels": "Oznake",
+ "language": "Jezik",
+ "last-admin-desc": "Ne morete zamenjati vlog, ker mora obstajati vsaj en admin.",
+ "leave-board": "Zapusti tablo",
+ "leave-board-pop": "Ste prepričani, da želite zapustiti tablo __boardTitle__? Odstranjeni boste iz vseh kartic na tej tabli.",
+ "leaveBoardPopup-title": "Zapusti tablo ?",
+ "link-card": "Poveži s kartico",
+ "list-archive-cards": "Arhiviraj vse kartice v seznamu",
+ "list-archive-cards-pop": "To bo odstranilo vse kartice tega seznama. Za ogled in vrnitev kartic iz arhiva na tablo, kliknite \"Meni\" > \"arhiv\".",
+ "list-move-cards": "Premakni vse kartice na seznamu",
+ "list-select-cards": "Izberi vse kartice na seznamu",
+ "set-color-list": "Nastavi barvo",
+ "listActionPopup-title": "Dejanja seznama",
+ "swimlaneActionPopup-title": "Dejanja plavalnih stez",
+ "swimlaneAddPopup-title": "Dodaj plavalno stezo spodaj",
+ "listImportCardPopup-title": "Uvozi Trello kartico",
+ "listMorePopup-title": "Več",
+ "link-list": "Poveži s seznamom",
+ "list-delete-pop": "Vsa dejanja bodo odstranjena iz vira dejavnosti in seznama ne boste mogli obnoviti. Razveljavitve ni.",
+ "list-delete-suggest-archive": "Lahko premaknete seznam v arhiv, da ga odstranite iz table in ohranite dejavnosti.",
+ "lists": "Seznami",
+ "swimlanes": "Plavalne steze",
+ "log-out": "Odjava",
+ "log-in": "Prijava",
+ "loginPopup-title": "Prijava",
+ "memberMenuPopup-title": "Nastavitve članov",
+ "members": "Člani",
+ "menu": "Meni",
+ "move-selection": "Premakni izbiro",
+ "moveCardPopup-title": "Premakni kartico",
+ "moveCardToBottom-title": "Premakni na dno",
+ "moveCardToTop-title": "Premakni na vrh",
+ "moveSelectionPopup-title": "Premakni izbiro",
+ "multi-selection": "Multi-Izbira",
+ "multi-selection-on": "Multi-Izbira je omogočena",
+ "muted": "Utišano",
+ "muted-info": "O spremembah na tej tabli ne boste prejemali obvestil.",
+ "my-boards": "Moje Table",
+ "name": "Ime",
+ "no-archived-cards": "Ni kartic v arhivu",
+ "no-archived-lists": "Ni seznamov v arhivu",
+ "no-archived-swimlanes": "Ni plavalnih stez v arhivu",
+ "no-results": "Ni zadetkov",
+ "normal": "Normalno",
+ "normal-desc": "Lahko gleda in ureja kartice. Ne more spreminjati nastavitev.",
+ "not-accepted-yet": "Povabilo še ni sprejeto.",
+ "notify-participate": "Prejemajte posodobitve kartic, na katerih sodelujete kot ustvarjalec ali član",
+ "notify-watch": "Prejemajte posodobitve opazovanih tabel, seznamov ali kartic",
+ "optional": "opcijsko",
+ "or": "ali",
+ "page-maybe-private": "Ta stran je morda privatna. Verjetno si jo lahko ogledate po<a href='%s'>prijavi</a>.",
+ "page-not-found": "Stran ne obstaja.",
+ "password": "Geslo",
+ "paste-or-dragdrop": "prilepi ali povleci & spusti datoteko slike (samo slika)",
+ "participating": "Sodelovanje",
+ "preview": "Predogled",
+ "previewAttachedImagePopup-title": "Predogled",
+ "previewClipboardImagePopup-title": "Predogled",
+ "private": "Zasebno",
+ "private-desc": "Ta tabla je zasebna. Vsebino lahko vidijo ali urejajo samo dodani uporabniki.",
+ "profile": "Profil",
+ "public": "Javno",
+ "public-desc": "Ta tabla je javna. Vidna je vsakomur s povezavo do table in bo prikazana v zadetkih iskalnikov kot Google. Urejajo jo lahko samo člani table.",
+ "quick-access-description": "Če tablo označite z zvezdico, bo tukaj dodana bližnjica.",
+ "remove-cover": "Odstrani ovitek",
+ "remove-from-board": "Odstrani iz table",
+ "remove-label": "Odstrani oznako",
+ "listDeletePopup-title": "Odstrani seznam?",
+ "remove-member": "Odstrani člana",
+ "remove-member-from-card": "Odstrani iz kartice",
+ "remove-member-pop": "Odstrani __name__ (__username__) iz __boardTitle__? Član bo odstranjen iz vseh kartic te table in bo prejel obvestilo.",
+ "removeMemberPopup-title": "Odstrani člana?",
+ "rename": "Preimenuj",
+ "rename-board": "Preimenuj tablo",
+ "restore": "Obnovi",
+ "save": "Shrani",
+ "search": "Išči",
+ "rules": "Pravila",
+ "search-cards": "Išči po imenih seznamov/kartic in opisov v tej tabli",
+ "search-example": "Besedilo za iskanje?",
+ "select-color": "Izberi barvo",
+ "set-wip-limit-value": "Omeji maksimalno število opravil v seznamu",
+ "setWipLimitPopup-title": "Omeji število kartic",
+ "shortcut-assign-self": "Dodeli sebe k trenutni kartici",
+ "shortcut-autocomplete-emoji": "Samodokončaj emoji",
+ "shortcut-autocomplete-members": "Samodokončaj člane",
+ "shortcut-clear-filters": "Počisti vse filtre",
+ "shortcut-close-dialog": "Zapri dialog",
+ "shortcut-filter-my-cards": "Filtriraj moje kartice",
+ "shortcut-show-shortcuts": "Prikaži seznam bližnjic",
+ "shortcut-toggle-filterbar": "Preklopi stransko vrstico za filter",
+ "shortcut-toggle-sidebar": "Preklopi stransko vrstico table",
+ "show-cards-minimum-count": "Prikaži število kartic, če seznam vsebuje več kot",
+ "sidebar-open": "Odpri stransko vrstico",
+ "sidebar-close": "Zapri stransko vrstico",
+ "signupPopup-title": "Ustvari up. račun",
+ "star-board-title": "Označite tablo z zvezdico, da bo prikazana na vrhu v seznamu tabel.",
+ "starred-boards": "Table z zvezdico",
+ "starred-boards-description": "Table z zvezdico se prikažejo na vrhu vašega seznama tabel.",
+ "subscribe": "Naročite se",
+ "team": "Skupina",
+ "this-board": "tablo",
+ "this-card": "kartico",
+ "spent-time-hours": "Porabljen čas (ure)",
+ "overtime-hours": "Presežen čas (ure)",
+ "overtime": "Presežen čas",
+ "has-overtime-cards": "Ima kartice s preseženim časom",
+ "has-spenttime-cards": "Ima kartice s porabljenim časom",
+ "time": "Čas",
+ "title": "Naslov",
+ "tracking": "Sledenje",
+ "tracking-info": "Obveščeni boste o vseh spremembah nad karticami, kjer ste lastnik ali član.",
+ "type": "Tip",
+ "unassign-member": "Odjavi člana",
+ "unsaved-description": "Imate neshranjen opis.",
+ "unwatch": "Prekliči opazovanje",
+ "upload": "Naloži",
+ "upload-avatar": "Naloži avatar",
+ "uploaded-avatar": "Naložil avatar",
+ "username": "Up. ime",
+ "view-it": "Poglej",
+ "warn-list-archived": "opozorilo: ta kartica je v seznamu v arhivu",
+ "watch": "Opazuj",
+ "watching": "Opazuje",
+ "watching-info": "O spremembah na tej tabli boste obveščeni",
+ "welcome-board": "Tabla Dobrodošli",
+ "welcome-swimlane": "Mejnik 1",
+ "welcome-list1": "Osnove",
+ "welcome-list2": "Napredno",
+ "card-templates-swimlane": "Predloge kartice",
+ "list-templates-swimlane": "Predloge seznama",
+ "board-templates-swimlane": "Predloge table",
+ "what-to-do": "Kaj želite storiti?",
+ "wipLimitErrorPopup-title": "Neveljaven limit št. kartic",
+ "wipLimitErrorPopup-dialog-pt1": "Število opravil v seznamu je višje od limita št. kartic.",
+ "wipLimitErrorPopup-dialog-pt2": "Prosimo premaknite nekaj opravil iz tega seznama ali nastavite višji limit št. kartic.",
+ "admin-panel": "Skrbniška plošča",
+ "settings": "Nastavitve",
+ "people": "Ljudje",
+ "registration": "Registracija",
+ "disable-self-registration": "Onemogoči samo-registracijo",
+ "invite": "Povabi",
+ "invite-people": "Povabi ljudi",
+ "to-boards": "K tabli(am)",
+ "email-addresses": "E-poštni naslovi",
+ "smtp-host-description": "Naslov vašega strežnika SMTP.",
+ "smtp-port-description": "Vrata vašega strežnika SMTP za odhodno pošto.",
+ "smtp-tls-description": "Omogoči šifriranje TLS za SMTP strežnik.",
+ "smtp-host": "SMTP gostitelj",
+ "smtp-port": "SMTP vrata",
+ "smtp-username": "Up. ime",
+ "smtp-password": "Geslo",
+ "smtp-tls": "TLS podpora",
+ "send-from": "Od",
+ "send-smtp-test": "Pošljite testno e-pošto na svoj naslov",
+ "invitation-code": "Koda Povabila",
+ "email-invite-register-subject": "__inviter__ vam je poslal povabilo",
+ "email-invite-register-text": "Dragi __user__,\n\n__inviter__ vas vabi na kanban tablo za sodelovanje.\n\nProsimo sledite spodnji povezavi:\n__url__\n\nVaša koda povabila je: __icode__\n\nHvala.",
+ "email-smtp-test-subject": "SMTP testna e-pošta",
+ "email-smtp-test-text": "Uspešno ste poslali e-pošto",
+ "error-invitation-code-not-exist": "Koda povabila ne obstaja",
+ "error-notAuthorized": "Nimate pravic za ogled te strani.",
+ "webhook-title": "Ime spletnega vmesnika (webhook)",
+ "webhook-token": "Žeton (opcijsko za avtentikacijo)",
+ "outgoing-webhooks": "Izhodni spletni vmesniki (webhooks)",
+ "bidirectional-webhooks": "Dvo-smerni spletni vmesniki (webhooks)",
+ "outgoingWebhooksPopup-title": "Izhodni spletni vmesniki (webhooks)",
+ "boardCardTitlePopup-title": "Filter po naslovu kartice",
+ "disable-webhook": "Onemogoči ta spletni vmesnik (webhook)",
+ "global-webhook": "Globalni spletni vmesnik (webhook)",
+ "new-outgoing-webhook": "Nov izhodni spletni vmesnik (webhook)",
+ "no-name": "(Neznano)",
+ "Node_version": "Node različica",
+ "Meteor_version": "Meteor različica",
+ "MongoDB_version": "MongoDB različica",
+ "MongoDB_storage_engine": "MongoDB storage engine",
+ "MongoDB_Oplog_enabled": "MongoDB Oplog omogočen",
+ "OS_Arch": "OS Arhitektura",
+ "OS_Cpus": "OS število CPU",
+ "OS_Freemem": "OS prost pomnilnik",
+ "OS_Loadavg": "OS povp. obremenitev",
+ "OS_Platform": "OS platforma",
+ "OS_Release": "OS izdaja",
+ "OS_Totalmem": "OS skupni pomnilnik",
+ "OS_Type": "OS tip",
+ "OS_Uptime": "OS čas delovanja",
+ "days": "dnevi",
+ "hours": "ure",
+ "minutes": "minute",
+ "seconds": "sekunde",
+ "show-field-on-card": "Prikaži to polje na kartici",
+ "automatically-field-on-card": "Samodejno dodaj polja na vse kartice",
+ "showLabel-field-on-card": "Prikaži oznako polja na mini kartici",
+ "yes": "Da",
+ "no": "Ne",
+ "accounts": "Up. računi",
+ "accounts-allowEmailChange": "Dovoli spremembo e-poštnega naslova",
+ "accounts-allowUserNameChange": "Dovoli spremembo up. imena",
+ "createdAt": "Ustvarjen ob",
+ "verified": "Preverjeno",
+ "active": "Aktivno",
+ "card-received": "Prejeto",
+ "card-received-on": "Prejeto ob",
+ "card-end": "Konec",
+ "card-end-on": "Končano na",
+ "editCardReceivedDatePopup-title": "Spremeni datum prejema",
+ "editCardEndDatePopup-title": "Spremeni končni datum",
+ "setCardColorPopup-title": "Nastavi barvo",
+ "setCardActionsColorPopup-title": "Izberi barvo",
+ "setSwimlaneColorPopup-title": "Izberi barvo",
+ "setListColorPopup-title": "Izberi barvo",
+ "assigned-by": "Dodelil",
+ "requested-by": "Zahteval",
+ "board-delete-notice": "Brisanje je trajno. Izgubili boste vse sezname, kartice in akcije, povezane z desko.",
+ "delete-board-confirm-popup": "Vsi seznami, kartice, oznake in dejavnosti bodo izbrisani in vsebine table ne boste mogli obnoviti. Razveljavitve ni.",
+ "boardDeletePopup-title": "Izbriši tablo?",
+ "delete-board": "Izbriši tablo",
+ "default-subtasks-board": "Podopravila za tablo",
+ "default": "Privzeto",
+ "queue": "Čakalna vrsta",
+ "subtask-settings": "Nastavitve podopravil",
+ "boardSubtaskSettingsPopup-title": "Nastavitve podopravil table",
+ "show-subtasks-field": "Dovoli podopravila na karticah",
+ "deposit-subtasks-board": "Deponiraj podopravila na tablo:",
+ "deposit-subtasks-list": "Ciljni seznam za deponirana podopravila:",
+ "show-parent-in-minicard": "Pokaži starša na mini-kartici:",
+ "prefix-with-full-path": "Predpona s celotno potjo",
+ "prefix-with-parent": "Predpona s staršem",
+ "subtext-with-full-path": "Podbesedilo s celotno potjo",
+ "subtext-with-parent": "Podbesedilo s staršem",
+ "change-card-parent": "Zamenjaj starša kartice",
+ "parent-card": "Starševska kartica",
+ "source-board": "Izvorna tabla",
+ "no-parent": "Ne prikaži starša",
+ "activity-added-label": "dodal oznako '%s' do %s",
+ "activity-removed-label": "odstranil oznako '%s' od %s",
+ "activity-delete-attach": "izbrisal priponko od %s",
+ "activity-added-label-card": "dodal oznako '%s'",
+ "activity-removed-label-card": "izbrisal oznako '%s'",
+ "activity-delete-attach-card": "izbrisal priponko",
+ "activity-set-customfield": "nastavi polje po meri '%s' do '%s' v %s",
+ "activity-unset-customfield": "zbriši polje po meri '%s' v %s",
+ "r-rule": "Pravilo",
+ "r-add-trigger": "Dodaj prožilec",
+ "r-add-action": "Dodaj akcijo",
+ "r-board-rules": "Pravila table",
+ "r-add-rule": "Dodaj pravilo",
+ "r-view-rule": "Poglej pravilo",
+ "r-delete-rule": "Izbriši pravilo",
+ "r-new-rule-name": "Ime novega pravila",
+ "r-no-rules": "Ni pravil",
+ "r-when-a-card": "Ko je kartica",
+ "r-is": " ",
+ "r-is-moved": "premaknjena",
+ "r-added-to": "dodan na",
+ "r-removed-from": "izbrisan iz",
+ "r-the-board": "tabla",
+ "r-list": "seznam",
+ "set-filter": "Nastavi filter",
+ "r-moved-to": "premaknjena v",
+ "r-moved-from": "premaknjena iz",
+ "r-archived": "premaknjena v arhiv",
+ "r-unarchived": "obnovljena iz arhiva",
+ "r-a-card": "kartico",
+ "r-when-a-label-is": "Ko je oznaka",
+ "r-when-the-label": "Ko je oznaka",
+ "r-list-name": "ime sezn.",
+ "r-when-a-member": "Ko je član",
+ "r-when-the-member": "Ko je član",
+ "r-name": "ime",
+ "r-when-a-attach": "Ko je priponka",
+ "r-when-a-checklist": "Ko je kontrolni seznam",
+ "r-when-the-checklist": "Ko kontrolni seznam",
+ "r-completed": "zaključen",
+ "r-made-incomplete": "nastavljen kot nedokončan",
+ "r-when-a-item": "Ko je kontrolni seznam",
+ "r-when-the-item": "Ko je element kontrolnega seznama",
+ "r-checked": "označen",
+ "r-unchecked": "odznačen",
+ "r-move-card-to": "Premakni kartico na",
+ "r-top-of": "Vrh",
+ "r-bottom-of": "Dno",
+ "r-its-list": "pripadajočega seznama",
+ "r-archive": "premaknjena v arhiv",
+ "r-unarchive": "Obnovi iz arhiva",
+ "r-card": "kartico",
+ "r-add": "Dodaj",
+ "r-remove": "Odstrani",
+ "r-label": "oznaka",
+ "r-member": "član",
+ "r-remove-all": "Izbriši vse člane iz kartice",
+ "r-set-color": "Nastavi barvo na",
+ "r-checklist": "kontrolni seznam",
+ "r-check-all": "Označi vse",
+ "r-uncheck-all": "Odznači vse",
+ "r-items-check": "postavke kontrolnega lista",
+ "r-check": "Označi",
+ "r-uncheck": "Odznači",
+ "r-item": "postavka",
+ "r-of-checklist": "kontrolnega seznama",
+ "r-send-email": "Pošlji e-pošto",
+ "r-to": "naslovnik",
+ "r-subject": "zadeva",
+ "r-rule-details": "Podrobnosti pravila",
+ "r-d-move-to-top-gen": "Premakni kartico na vrh pripadajočega sezama",
+ "r-d-move-to-top-spec": "Premakni kartico na vrh seznama",
+ "r-d-move-to-bottom-gen": "Premakni kartico na dno pripadajočega seznama",
+ "r-d-move-to-bottom-spec": "Premakni kartico na dno seznama",
+ "r-d-send-email": "Pošlji e-pošto",
+ "r-d-send-email-to": "na",
+ "r-d-send-email-subject": "zadeva",
+ "r-d-send-email-message": "vsebina",
+ "r-d-archive": "Premakni kartico v arhiv",
+ "r-d-unarchive": "Obnovi kartico iz arhiva",
+ "r-d-add-label": "Dodaj oznako",
+ "r-d-remove-label": "Izbriši oznako",
+ "r-create-card": "Ustvari novo kartico",
+ "r-in-list": "v seznamu",
+ "r-in-swimlane": "v plavalni stezi",
+ "r-d-add-member": "Dodaj člana",
+ "r-d-remove-member": "Odstrani člana",
+ "r-d-remove-all-member": "Odstrani vse člane",
+ "r-d-check-all": "Označi vse elemente seznama",
+ "r-d-uncheck-all": "Odznači vse elemente seznama",
+ "r-d-check-one": "Označi element",
+ "r-d-uncheck-one": "Odznači element",
+ "r-d-check-of-list": "kontrolnega seznama",
+ "r-d-add-checklist": "Dodaj kontrolni list",
+ "r-d-remove-checklist": "Odstrani kotrolni list",
+ "r-by": "od",
+ "r-add-checklist": "Dodaj kontrolni list",
+ "r-with-items": "s postavkami",
+ "r-items-list": "el1,el2,el3",
+ "r-add-swimlane": "Dodaj plavalno stezo",
+ "r-swimlane-name": "ime pl. steze",
+ "r-board-note": "Opomba: polje pustite prazno, da ustreza vsaki možni vrednosti.",
+ "r-checklist-note": "Opomba: elementi kontrolnega seznama morajo biti zapisani kot vrednosti, ločene z vejicami.",
+ "r-when-a-card-is-moved": "Ko je kartica premaknjena v drug seznam",
+ "r-set": "Nastavi",
+ "r-update": "Posodobi",
+ "r-datefield": "polje z datumom",
+ "r-df-start-at": "začetek",
+ "r-df-due-at": "rok",
+ "r-df-end-at": "konec",
+ "r-df-received-at": "prejeto",
+ "r-to-current-datetime": "v trenutni datum/čas",
+ "r-remove-value-from": "Izbriši vrednost iz",
+ "ldap": "LDAP",
+ "oauth2": "OAuth2",
+ "cas": "CAS",
+ "authentication-method": "Metoda avtentikacije",
+ "authentication-type": "Način avtentikacije",
+ "custom-product-name": "Ime izdelka po meri",
+ "layout": "Postavitev",
+ "hide-logo": "Skrij logo",
+ "add-custom-html-after-body-start": "Dodaj HTML po meri po <body> začetku",
+ "add-custom-html-before-body-end": "Dodaj HMTL po meri po </body> koncu",
+ "error-undefined": "Prišlo je do napake",
+ "error-ldap-login": "Prišlo je do napake ob prijavi",
+ "display-authentication-method": "Prikaži metodo avtentikacije",
+ "default-authentication-method": "Privzeta metoda avtentikacije",
+ "duplicate-board": "Dupliciraj tablo",
+ "people-number": "Število ljudi je:",
+ "swimlaneDeletePopup-title": "Zbriši plavalno stezo?",
+ "swimlane-delete-pop": "Vsa dejanja bodo odstranjena iz seznama dejavnosti. Plavalne steze ne boste mogli obnoviti. Razveljavitve ni.",
+ "restore-all": "Obnovi vse",
+ "delete-all": "Izbriši vse",
+ "loading": "Nalagam, prosimo počakajte",
+ "previous_as": "zadnji čas je bil",
+ "act-a-dueAt": "spremenil rok zapadlosti na \nKdaj: __timeValue__\nKje: __card__\n prejšnji rok zapadlosti je bil __timeOldValue__",
+ "act-a-endAt": "spremenil čas dokončanja na __timeValue__ iz (__timeOldValue__)",
+ "act-a-startAt": "spremenil čas pričetka na __timeValue__ iz (__timeOldValue__)",
+ "act-a-receivedAt": "spremenil čas prejema na __timeValue__ iz (__timeOldValue__)",
+ "a-dueAt": "spremenil rok v",
+ "a-endAt": "spremenil končni čas v",
+ "a-startAt": "spremenil začetni čas v",
+ "a-receivedAt": "spremenil čas prejetja v",
+ "almostdue": "trenutni rok %s se približuje",
+ "pastdue": "trenutni rok %s je potekel",
+ "duenow": "trenutni rok %s je danes",
+ "act-newDue": "__list__/__card__ ima 1. opomnik roka zapadlosti [__board__]",
+ "act-withDue": "__list__/__card__ opomniki roka zapadlosti [__board__]",
+ "act-almostdue": "je opomnil trenuten rok zapadlosti (__timeValue__) kartice __card__ se bliža",
+ "act-pastdue": "je opomnil trenuten rok zapadlosti (__timeValue__) kartice __card__ je potekel",
+ "act-duenow": "je opomnil trenuten rok zapadlosti (__timeValue__) kartice __card__ je sedaj",
+ "act-atUserComment": "Omenjeni ste bili v [__board__] __list__/__card__",
+ "delete-user-confirm-popup": "Ali ste prepričani, da želite izbrisati ta račun? Razveljavitve ni.",
+ "accounts-allowUserDelete": "Dovoli uporabnikom, da sami izbrišejo svoj račun",
+ "hide-minicard-label-text": "Skrij besedilo oznak na karticah",
+ "show-desktop-drag-handles": "Pokaži ročke za povleko na namizju",
+ "assignee": "Dodeljen član",
+ "cardAssigneesPopup-title": "Dodeljen član"
+}
diff --git a/i18n/sr.i18n.json b/i18n/sr.i18n.json
index 42c0778b..1476a90e 100644
--- a/i18n/sr.i18n.json
+++ b/i18n/sr.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Promeni Vidljivost",
"boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Table",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Lists",
"bucket-example": "Na primer \"Lista zadataka\"",
"cancel": "Otkaži",
@@ -300,8 +302,18 @@
"error-username-taken": "Korisničko ime je već zauzeto",
"error-email-taken": "Email has already been taken",
"export-board": "Export board",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filter",
- "filter-cards": "Filter Cards",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-no-label": "Nema oznake",
"filter-no-member": "Nema člana",
@@ -426,7 +438,7 @@
"save": "Snimi",
"search": "Pretraga",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/sv.i18n.json b/i18n/sv.i18n.json
index b7f8b44c..1b98c013 100644
--- a/i18n/sv.i18n.json
+++ b/i18n/sv.i18n.json
@@ -1,6 +1,6 @@
{
"accept": "Acceptera",
- "act-activity-notify": "Aktivitetsnotifikation",
+ "act-activity-notify": "Aktivitetsnotifiering",
"act-addAttachment": "lade till bifogad fil __attachment__ på kort __card__ i lista __list__ i simbana __swimlane__ på anslagstavla __board__",
"act-deleteAttachment": "raderade bifogad fil __attachment__ från kort __card__ i lista __list__ i simbana __swimlane__ på anslagstavla __board__",
"act-addSubtask": "lade till underaktivitet __subtask__ på kort __card__ i lista __list__ i simbana __swimlane__ på anslagstavla __board__",
@@ -73,8 +73,8 @@
"activity-unchecked-item-card": "okryssad %s i checklistan %s",
"activity-checklist-completed-card": "slutförde checklista __checklist__ i kort __card__ i lista __list__ i simbana __swimlane__ på anslagstavla __board__",
"activity-checklist-uncompleted-card": "icke slutfört checklistan %s",
- "activity-editComment": "edited comment %s",
- "activity-deleteComment": "deleted comment %s",
+ "activity-editComment": "redigerade kommentaren %s",
+ "activity-deleteComment": "tog bort kommentaren %s",
"add-attachment": "Lägg till bilaga",
"add-board": "Lägg till anslagstavla",
"add-card": "Lägg till kort",
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Ändra synlighet",
"boardChangeWatchPopup-title": "Ändra bevaka",
"boardMenuPopup-title": "Anslagstavlans inställningar",
+ "boardChangeViewPopup-title": "Anslagstavelsvy",
"boards": "Anslagstavlor",
"board-view": "Anslagstavelsvy",
"board-view-cal": "Kalender",
"board-view-swimlanes": "Simbanor",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Listor",
"bucket-example": "Gilla \"att-göra-innan-jag-dör-lista\" till exempel",
"cancel": "Avbryt",
@@ -300,14 +302,24 @@
"error-username-taken": "Detta användarnamn är redan taget",
"error-email-taken": "E-post har redan tagits",
"export-board": "Exportera anslagstavla",
+ "sort": "Sortera",
+ "sort-desc": "Klicka för att sortera listan",
+ "list-sort-by": "Sortera listan efter:",
+ "list-label-modifiedAt": "Sista åtkomsttid",
+ "list-label-title": "Namn på listan",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filtrera",
- "filter-cards": "Filtrera kort",
+ "filter-cards": "Filtrera kort eller listor",
+ "list-filter-label": "Filtrera lista efter titel",
"filter-clear": "Rensa filter",
"filter-no-label": "Ingen etikett",
"filter-no-member": "Ingen medlem",
"filter-no-custom-fields": "Inga anpassade fält",
- "filter-show-archive": "Show archived lists",
- "filter-hide-empty": "Hide empty lists",
+ "filter-show-archive": "Visa arkiverade listor",
+ "filter-hide-empty": "Dölj tomma listor",
"filter-on": "Filter är på",
"filter-on-desc": "Du filtrerar kort på denna anslagstavla. Klicka här för att redigera filter.",
"filter-to-selection": "Filter till val",
@@ -426,7 +438,7 @@
"save": "Spara",
"search": "Sök",
"rules": "Regler",
- "search-cards": "Sök från korttitlar och beskrivningar på den här anslagstavlan",
+ "search-cards": "Sök från kort-/listtitlar och beskrivningar på denna anslagstavla",
"search-example": "Text att söka efter?",
"select-color": "Välj färg",
"set-wip-limit-value": "Ange en gräns för det maximala antalet uppgifter i den här listan",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "Du har skickat ett e-postmeddelande",
"error-invitation-code-not-exist": "Inbjudningskod finns inte",
"error-notAuthorized": "Du är inte behörig att se den här sidan.",
+ "webhook-title": "Namn på webhook",
+ "webhook-token": "Token (valfritt för autentisering)",
"outgoing-webhooks": "Utgående Webhookar",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Utgående Webhookar",
"boardCardTitlePopup-title": "Korttitelfiler",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Globala webhooks",
"new-outgoing-webhook": "Ny utgående webhook",
"no-name": "(Okänd)",
"Node_version": "Nodversion",
@@ -723,12 +740,16 @@
"almostdue": "aktuell förfallotid %s närmar sig",
"pastdue": "aktuell förfallotid %s är förbi",
"duenow": "aktuell förfallotid %s är idag",
- "act-withDue": "__card__ förfallotidspåminnelser [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "påminde om den aktuella förfallotiden (__timeValue__) av __card__ närmar sig",
"act-pastdue": "påminde om den aktuella förfallotiden (__timeValue__) av __card__ är förbi",
"act-duenow": "påminde om den aktuella förfallotiden (__timeValue__) av __card__ är nu",
- "act-atUserComment": "Du nämndes i [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Är du säker på att du vill ta bort det här kontot? Det går inte att ångra sig.",
"accounts-allowUserDelete": "Tillåt användare att själv ta bort sina konton",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/sw.i18n.json b/i18n/sw.i18n.json
index 02e77d28..b4c2739d 100644
--- a/i18n/sw.i18n.json
+++ b/i18n/sw.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Lists",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
@@ -300,8 +302,18 @@
"error-username-taken": "This username is already taken",
"error-email-taken": "Email has already been taken",
"export-board": "Export board",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filter",
- "filter-cards": "Filter Cards",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "No member",
@@ -426,7 +438,7 @@
"save": "Save",
"search": "Search",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/ta.i18n.json b/i18n/ta.i18n.json
index de7e743c..9313926c 100644
--- a/i18n/ta.i18n.json
+++ b/i18n/ta.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "நாள்கட்டி ",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Lists",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
@@ -300,8 +302,18 @@
"error-username-taken": "This username is already taken",
"error-email-taken": "Email has already been taken",
"export-board": "Export board",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filter",
- "filter-cards": "Filter Cards",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "No member",
@@ -426,7 +438,7 @@
"save": "சேமி ",
"search": "தேடு ",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/th.i18n.json b/i18n/th.i18n.json
index 8b5dbba4..acf37d7b 100644
--- a/i18n/th.i18n.json
+++ b/i18n/th.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "เปลี่ยนการเข้าถึง",
"boardChangeWatchPopup-title": "เปลี่ยนการเฝ้าดู",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "บอร์ด",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "รายการ",
"bucket-example": "ตัวอย่างเช่น “ระบบที่ต้องทำ”",
"cancel": "ยกเลิก",
@@ -300,8 +302,18 @@
"error-username-taken": "ชื่อนี้ถูกใช้งานแล้ว",
"error-email-taken": "Email has already been taken",
"export-board": "ส่งออกกระดาน",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "กรอง",
- "filter-cards": "กรองการ์ด",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "ล้างตัวกรอง",
"filter-no-label": "ไม่มีฉลาก",
"filter-no-member": "ไม่มีสมาชิก",
@@ -426,7 +438,7 @@
"save": "บันทึก",
"search": "ค้นหา",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/tr.i18n.json b/i18n/tr.i18n.json
index f785cfa4..7bfbb95a 100644
--- a/i18n/tr.i18n.json
+++ b/i18n/tr.i18n.json
@@ -73,7 +73,7 @@
"activity-unchecked-item-card": "unchecked %s in checklist %s",
"activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
- "activity-editComment": "edited comment %s",
+ "activity-editComment": "%s yorum düzenlendi",
"activity-deleteComment": "deleted comment %s",
"add-attachment": "Ek Ekle",
"add-board": "Pano Ekle",
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Görünebilirliği Değiştir",
"boardChangeWatchPopup-title": "İzleme Durumunu Değiştir",
"boardMenuPopup-title": "Pano Ayarları",
+ "boardChangeViewPopup-title": "Pano Görünümü",
"boards": "Panolar",
"board-view": "Pano Görünümü",
"board-view-cal": "Takvim",
"board-view-swimlanes": "Kulvarlar",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Listeler",
"bucket-example": "Örn: \"Marketten Alacaklarım\"",
"cancel": "İptal",
@@ -164,7 +166,7 @@
"cardLabelsPopup-title": "Etiketler",
"cardMembersPopup-title": "Üyeler",
"cardMorePopup-title": "Daha",
- "cardTemplatePopup-title": "Create template",
+ "cardTemplatePopup-title": "Şablon oluştur",
"cards": "Kartlar",
"cards-count": "Kartlar",
"casSignIn": "CAS ile giriş yapın",
@@ -196,7 +198,7 @@
"color-gold": "altın rengi",
"color-gray": "gri",
"color-green": "yeşil",
- "color-indigo": "indigo",
+ "color-indigo": "çivit",
"color-lime": "misket limonu",
"color-magenta": "magenta",
"color-mistyrose": "mistyrose",
@@ -300,8 +302,18 @@
"error-username-taken": "Kullanıcı adı zaten alınmış",
"error-email-taken": "Bu e-posta adresi daha önceden alınmış",
"export-board": "Panoyu dışarı aktar",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filtre",
- "filter-cards": "Kartları Filtrele",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Filtreyi temizle",
"filter-no-label": "Etiket yok",
"filter-no-member": "Üye yok",
@@ -426,7 +438,7 @@
"save": "Kaydet",
"search": "Arama",
"rules": "Kurallar",
- "search-cards": "Bu panoda kart başlıkları ve açıklamalarında arama yap",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Aranılacak metin?",
"select-color": "Renk Seç",
"set-wip-limit-value": "Bu listedeki en fazla öğe sayısı için bir sınır belirleyin",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "E-Posta başarıyla gönderildi",
"error-invitation-code-not-exist": "Davetiye kodu bulunamadı",
"error-notAuthorized": "Bu sayfayı görmek için yetkiniz yok.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Dışarı giden bağlantılar",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Dışarı giden bağlantılar",
"boardCardTitlePopup-title": "Kart Başlığı Filtresi",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "Yeni Dışarı Giden Web Bağlantısı",
"no-name": "(Bilinmeyen)",
"Node_version": "Node sürümü",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
- "delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
- "accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
+ "delete-user-confirm-popup": "Bu kullanıcı hesabını silmek istediğinize emin misiniz? Bu işlemi geri alamazsınız.",
+ "accounts-allowUserDelete": "Kullanıcılara hesaplarını silmek için izin ver.",
+ "hide-minicard-label-text": "Mini kart etiklerini gizle",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/uk.i18n.json b/i18n/uk.i18n.json
index 7788785e..a5b347f5 100644
--- a/i18n/uk.i18n.json
+++ b/i18n/uk.i18n.json
@@ -49,7 +49,7 @@
"activity-archived": "%s перенесено до архіву",
"activity-attached": "%s прикріплено до %s",
"activity-created": "%sстворено",
- "activity-customfield-created": "Створено спеціальне поле",
+ "activity-customfield-created": "Створено спеціальне поле%s",
"activity-excluded": "%s виключено з %s",
"activity-imported": "%s імпортовано до %s з %s",
"activity-imported-board": "%s імпортовано з %s",
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Дошки",
"board-view": "Board View",
"board-view-cal": "Календар",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Lists",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Відміна",
@@ -300,8 +302,18 @@
"error-username-taken": "This username is already taken",
"error-email-taken": "Email has already been taken",
"export-board": "Export board",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filter",
- "filter-cards": "Filter Cards",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "No member",
@@ -426,7 +438,7 @@
"save": "Save",
"search": "Search",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -708,9 +725,9 @@
"people-number": "The number of people is:",
"swimlaneDeletePopup-title": "Delete Swimlane ?",
"swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
- "restore-all": "Restore all",
- "delete-all": "Delete all",
- "loading": "Loading, please wait.",
+ "restore-all": "Відновити все",
+ "delete-all": "Видалити все",
+ "loading": "Завантаження, зачекайте будь-ласка.",
"previous_as": "last time was",
"act-a-dueAt": "modified due time to \nWhen: __timeValue__\nWhere: __card__\n previous due was __timeOldValue__",
"act-a-endAt": "modified ending time to __timeValue__ from (__timeOldValue__)",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ має 1-ше нагадування визначеного терміну [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
- "delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
- "accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "act-atUserComment": "Ви були згадані у [__board__] __list__/__card__",
+ "delete-user-confirm-popup": "Ви дійсно бажаєте видалити даний обліковий запис? Цю дію не можна відмінити.",
+ "accounts-allowUserDelete": "Дозволити користувачам видаляти їх власні облікові записи",
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/vi.i18n.json b/i18n/vi.i18n.json
index ac17146b..7db36ef3 100644
--- a/i18n/vi.i18n.json
+++ b/i18n/vi.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Đổi cách hiển thị",
"boardChangeWatchPopup-title": "Đổi cách xem",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Bảng",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Lists",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Hủy",
@@ -300,8 +302,18 @@
"error-username-taken": "This username is already taken",
"error-email-taken": "Email has already been taken",
"export-board": "Export board",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filter",
- "filter-cards": "Filter Cards",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "No member",
@@ -426,7 +438,7 @@
"save": "Save",
"search": "Search",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/zh-CN.i18n.json b/i18n/zh-CN.i18n.json
index 03e6f3d2..c9f4653c 100644
--- a/i18n/zh-CN.i18n.json
+++ b/i18n/zh-CN.i18n.json
@@ -113,7 +113,7 @@
"archives": "归档",
"template": "模板",
"templates": "模板",
- "assign-member": "分配成员",
+ "assign-member": "指派成员",
"attached": "附加",
"attachment": "附件",
"attachment-delete-pop": "删除附件的操作不可逆。",
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "更改可视级别",
"boardChangeWatchPopup-title": "更改关注状态",
"boardMenuPopup-title": "看板设置",
+ "boardChangeViewPopup-title": "看板视图",
"boards": "看板",
"board-view": "看板视图",
"board-view-cal": "日历",
"board-view-swimlanes": "泳道图",
+ "board-view-collapse": "Collapse",
"board-view-lists": "列表",
"bucket-example": "例如 “目标清单”",
"cancel": "取消",
@@ -300,8 +302,18 @@
"error-username-taken": "此用户名已存在",
"error-email-taken": "此EMail已存在",
"export-board": "导出看板",
+ "sort": "排序",
+ "sort-desc": "点此来将列表排序",
+ "list-sort-by": "按此来将列表排序:",
+ "list-label-modifiedAt": "上次访问时间",
+ "list-label-title": "列表名称",
+ "list-label-sort": "您手动指定的顺序",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "过滤",
- "filter-cards": "过滤卡片",
+ "filter-cards": "过滤卡片或列表",
+ "list-filter-label": "以标题过滤列表",
"filter-clear": "清空过滤器",
"filter-no-label": "无标签",
"filter-no-member": "无成员",
@@ -426,12 +438,12 @@
"save": "保存",
"search": "搜索",
"rules": "规则",
- "search-cards": "搜索当前看板上的卡片标题和描述",
+ "search-cards": "搜索当前看板上的卡片/列表标题和描述",
"search-example": "搜索",
"select-color": "选择颜色",
"set-wip-limit-value": "设置此列表中的最大任务数",
"setWipLimitPopup-title": "设置最大任务数",
- "shortcut-assign-self": "分配当前卡片给自己",
+ "shortcut-assign-self": "指派当前卡片给自己",
"shortcut-autocomplete-emoji": "表情符号自动补全",
"shortcut-autocomplete-members": "自动补全成员",
"shortcut-clear-filters": "清空全部过滤器",
@@ -461,7 +473,7 @@
"tracking": "跟踪",
"tracking-info": "当任何包含您(作为创建者或成员)的卡片发生变更时,您将得到通知。",
"type": "类型",
- "unassign-member": "取消分配成员",
+ "unassign-member": "取消指派成员",
"unsaved-description": "存在未保存的描述",
"unwatch": "取消关注",
"upload": "上传",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "你已成功发送邮件",
"error-invitation-code-not-exist": "邀请码不存在",
"error-notAuthorized": "您无权查看此页面。",
+ "webhook-title": "Webhook名称",
+ "webhook-token": "Token(认证选项)",
"outgoing-webhooks": "外部Web挂钩",
+ "bidirectional-webhooks": "双向Webhook",
"outgoingWebhooksPopup-title": "外部Web挂钩",
"boardCardTitlePopup-title": "卡片标题过滤",
+ "disable-webhook": "禁用Webhook",
+ "global-webhook": "全局Webhook",
"new-outgoing-webhook": "新建外部Web挂钩",
"no-name": "(未知)",
"Node_version": "Node.js版本",
@@ -554,7 +571,7 @@
"setCardActionsColorPopup-title": "选择一种颜色",
"setSwimlaneColorPopup-title": "选择一种颜色",
"setListColorPopup-title": "选择一种颜色",
- "assigned-by": "分配人",
+ "assigned-by": "指派人",
"requested-by": "需求人",
"board-delete-notice": "删除时永久操作,将会丢失此看板上的所有列表、卡片和动作。",
"delete-board-confirm-popup": "所有列表、卡片、标签和活动都回被删除,将无法恢复看板内容。不支持撤销。",
@@ -723,12 +740,16 @@
"almostdue": "当前到期时间%s即将到来",
"pastdue": "当前到期时间%s已过",
"duenow": "当前到期时间%s为今天",
- "act-withDue": "__card__ 到期提醒[__board__]",
+ "act-newDue": "__list__/__card__ 有 1st 到期提醒 [__board__]",
+ "act-withDue": "__list__/__card__ 到期提醒 [__board__]",
"act-almostdue": "__card__ 的当前到期提醒(__timeValue__) 正在接近",
"act-pastdue": "__card__ 的当前到期提醒(__timeValue__) 已经过去了",
"act-duenow": "__card__ 的当前到期提醒(__timeValue__) 现在到期",
- "act-atUserComment": "您在 [__board__] __card__中被提到",
+ "act-atUserComment": "[__board__] __list__/__card__ 提到了您",
"delete-user-confirm-popup": "确实要删除此帐户吗?此操作无法撤销。",
"accounts-allowUserDelete": "允许用户自行删除其帐户",
- "hide-minicard-label-text": "隐藏迷你卡片标签文本"
+ "hide-minicard-label-text": "隐藏迷你卡片标签文本",
+ "show-desktop-drag-handles": "显示桌面拖放手柄",
+ "assignee": "被指派人",
+ "cardAssigneesPopup-title": "被指派人"
}
diff --git a/i18n/zh-HK.i18n.json b/i18n/zh-HK.i18n.json
index 1987a56a..3a1009b0 100644
--- a/i18n/zh-HK.i18n.json
+++ b/i18n/zh-HK.i18n.json
@@ -132,10 +132,12 @@
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "Board Settings",
+ "boardChangeViewPopup-title": "Board View",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
+ "board-view-collapse": "Collapse",
"board-view-lists": "Lists",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
@@ -300,8 +302,18 @@
"error-username-taken": "This username is already taken",
"error-email-taken": "Email has already been taken",
"export-board": "Export board",
+ "sort": "Sort",
+ "sort-desc": "Click to Sort List",
+ "list-sort-by": "Sort the List By:",
+ "list-label-modifiedAt": "Last Access Time",
+ "list-label-title": "Name of the List",
+ "list-label-sort": "Your Manual Order",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "Filter",
- "filter-cards": "Filter Cards",
+ "filter-cards": "Filter Cards or Lists",
+ "list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "No member",
@@ -426,7 +438,7 @@
"save": "儲存",
"search": "Search",
"rules": "Rules",
- "search-cards": "Search from card titles and descriptions on this board",
+ "search-cards": "Search from card/list titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
@@ -510,9 +522,14 @@
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
+ "webhook-title": "Webhook Name",
+ "webhook-token": "Token (Optional for Authentication)",
"outgoing-webhooks": "Outgoing Webhooks",
+ "bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
+ "disable-webhook": "Disable This Webhook",
+ "global-webhook": "Global Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Node version",
@@ -723,12 +740,16 @@
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
"accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "hide-minicard-label-text": "Hide minicard label text",
+ "show-desktop-drag-handles": "Show desktop drag handles",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/i18n/zh-TW.i18n.json b/i18n/zh-TW.i18n.json
index c27475ba..cb5bbf32 100644
--- a/i18n/zh-TW.i18n.json
+++ b/i18n/zh-TW.i18n.json
@@ -2,53 +2,53 @@
"accept": "接受",
"act-activity-notify": "活動通知",
"act-addAttachment": "附件 __attachment__ 已新增到卡片 __card__ 位於清單 __list__  泳道流程圖  __swimlane__ 看板 __board__",
- "act-deleteAttachment": "卡片__card__ 附件 __attachment__ 已刪除,位於清單 __list__ 泳道流程圖  __swimlane__ 看板 __board__",
- "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-editComment": "edited comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-deleteComment": "deleted comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-createBoard": "看板 __board__ 已建立",
- "act-createSwimlane": "泳道流程圖 __swimlane__ 以新增至看板 __board__",
- "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
- "act-createCustomField": "看板 __board__ 自訂欄位 __customField__ 已建立",
- "act-deleteCustomField": "看板 __board__ 自訂欄位 __customField__ 已刪除",
- "act-setCustomField": "edited custom field __customField__: __customFieldValue__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-createList": "清單 __list__ 已新增到看板 __board__",
- "act-addBoardMember": "已在看板 __board__ 中新增成員 __member__",
+ "act-deleteAttachment": "已刪除的附件__附件__卡片上__卡片__在清單__清單__at swimlane__swimlane__在看板__看板__",
+ "act-addSubtask": "新增子任務 __子任務 __ to card __卡片__ at list_清單__ at swimlane __分隔線__ at board __看板__",
+ "act-addLabel": "新增標籤 __label__ 到看板 __board__ 中的泳道 __swimlane__ 中的清單 __list__ 中的卡片 __card__ 中",
+ "act-addedLabel": "新增標籤 __label__ 到看板 __board__ 中的泳道 __swimlane__ 中的清單 __list__ 中的卡片 __card__ 中",
+ "act-removeLabel": "移除看板 __board__ 中的泳道 __swimlane__ 中的清單 __list__ 中的卡片 __card__ 中的標籤 __label__",
+ "act-removedLabel": "移除看板 __board__ 中的泳道 __swimlane__ 中的清單 __list__ 中的卡片 __card__ 中的標籤 __label__",
+ "act-addChecklist": "新增清單 __checklist__ 到看板 __board__ 中的泳道 __swimlane__ 中的清單 __list__ 中的卡片 __card__ 中",
+ "act-addChecklistItem": "新增清單項 __checklistItem__ 到看板 __board__ 中的泳道 __swimlane__ 中的清單 __list__ 中的卡片 __card__ 中的清單 __checklist__",
+ "act-removeChecklist": "移除看板 __board__ 中的泳道 __swimlane__ 中的清單 __list__ 中的卡片 __card__ 中的清單 __checklist__",
+ "act-removeChecklistItem": "移除看板 __board__ 中的泳道 __swimlane__ 中的清單 __list__ 中的卡片 __card__ 中的清單 __checklist__ 清單項 __checklistItem__",
+ "act-checkedItem": "選中看板 __board__ 中的泳道 __swimlane__ 中的清單 __list__ 中的卡片 __card__ 中的清單 __checklist__ 的清單項 __checklistItem__",
+ "act-uncheckedItem": "取消選取__選取清單項目__清單上__清單__在卡片__卡片__在清單__清單__在分隔線__分隔線__在看板__看板__",
+ "act-completeChecklist": "完成檢查清單__checklist__ 卡片 __card__ 清單 __list__ 泳道 __swimlane__ 看板 __board__",
+ "act-uncompleteChecklist": "看板 __board__ 中的泳道 __swimlane__ 中的清單 __list__ 中的卡片 __card__ 中的清單 __checklist__ 未完成",
+ "act-addComment": "對看板 __board__ 中的泳道 __swimlane__ 中的清單 __list__ 中的卡片 __card__ 發表了評論: __comment__",
+ "act-editComment": "編輯卡片中的評論:看板__board__中的泳道__swimlane__中的清單__list__中的評論__comment__",
+ "act-deleteComment": "刪除卡片中的評論:看板__board__中的泳道__swimlane__中的清單__list__中的評論__comment__",
+ "act-createBoard": "新增看板 __board__",
+ "act-createSwimlane": "新增泳道 __swimlane__ 到看板 __board__",
+ "act-createCard": "在看板 __board__ 的泳道 __swimlane__ 的清單 __list__ 中新增卡片 __card__",
+ "act-createCustomField": "已新增看板__board__自訂欄位__customField__",
+ "act-deleteCustomField": "已刪除看板__board__自訂欄位__customField__",
+ "act-setCustomField": "編輯定制字段__customField__:看板__board__中的泳道__swimlane__中的清單__list__中的卡片__card__中的__customFieldValue__",
+ "act-createList": "新增清單 __list__ 至看板 __board__",
+ "act-addBoardMember": "新增成員 __member__ 到看板 __board__",
"act-archivedBoard": "看板 __board__ 已被移到封存",
- "act-archivedCard": "卡片 __card__ 位於清單 __list__ 泳道流程圖 __swimlane__ 看板 __board__ 已被移到封存",
- "act-archivedList": "清單 __list__ 位於泳道流程圖 __swimlane__ 看板 __board__ 已被移到封存",
- "act-archivedSwimlane": "看板__board__的泳道流程圖__swimlane__已被移到封存",
- "act-importBoard": "看板 __board__ 已匯入",
- "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
- "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
- "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
- "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
- "act-removeBoardMember": "成員 __member__ 已從看板 __board__ 刪除",
- "act-restoredCard": "卡片__card__ 已還原到清單 __list__ ,位於泳道流程圖 __swimlane__ 看板 __board__",
- "act-unjoinMember": "成員 __member__ 已從卡片 __card__ 刪除 ,位於清單 __list__ 泳道流程圖 __swimlane__ 看板 __board__",
- "act-withBoardTitle": "__board__",
- "act-withCardTitle": "[__board__] __card__",
+ "act-archivedCard": "將看板 __board__ 中的泳道 __swimlane__ 中的清單 __list__ 中的卡片 移動到封存中",
+ "act-archivedList": "看板 __board__ 中的泳道 __swimlane__ 中的清單 __list__ 已被移入封存",
+ "act-archivedSwimlane": "看板 __board__ 中的泳道 __swimlane__ 已被移入封存",
+ "act-importBoard": "匯入看板 __board__",
+ "act-importCard": "已將卡片 __card__ 匯入到 __board__ 看板中的 __swimlane__ 泳道中的 __list__ 清單中",
+ "act-importList": "已將清單匯入到 __board__ 看板中的 __swimlane__  泳道中的 __list__  清單中",
+ "act-joinMember": "已將成員 __member__  新增到 __board__ 看板中的 __swimlane__ 泳道中的 __list__  清單中的 __card__ 卡片中",
+ "act-moveCard": "移動卡片 __card__ 到看板 __board__ 從清單 __oldList__ 泳道 __oldSwimlane__ 至清單 __list__ 泳道 __swimlane__",
+ "act-moveCardToOtherBoard": "移動卡片 __card__ 從清單 __oldList__ 泳道 __oldSwimlane__ 看板 __oldBoard__ 至清單 __list__ 泳道 __swimlane__ 看板 __board__",
+ "act-removeBoardMember": "從看板 __board__ 移除成員 __member__",
+ "act-restoredCard": "恢覆卡片 __card__ 至清單 __list__ 泳道 __swimlane__ 看板 __board__",
+ "act-unjoinMember": "移除成員 __member__ 從卡片 __card__ 清單 __list__ a泳道 __swimlane__ 看板 __board__",
+ "act-withBoardTitle": "看板__board__",
+ "act-withCardTitle": "[看板 __board__] 卡片 __card__",
"actions": "操作",
"activities": "活動",
"activity": "活動",
"activity-added": "新增 %s 到 %s",
"activity-archived": "%s 已被移到封存",
"activity-attached": "已新增附件 %s 到 %s",
- "activity-created": "建立 %s",
+ "activity-created": "新增 %s",
"activity-customfield-created": "已建立的自訂欄位 %s",
"activity-excluded": "排除 %s 從 %s",
"activity-imported": "匯入 %s 到 %s 從 %s 中",
@@ -60,21 +60,21 @@
"activity-sent": "已寄送 %s 到 %s",
"activity-unjoined": "已解除關聯 %s",
"activity-subtask-added": "已新增子任務到 %s",
- "activity-checked-item": "checked %s in checklist %s of %s",
- "activity-unchecked-item": "unchecked %s in checklist %s of %s",
- "activity-checklist-added": "已新增待辦清單到 %s",
+ "activity-checked-item": "勾選%s於清單%s 共 %s",
+ "activity-unchecked-item": "未勾選 %s 於清單 %s 共 %s",
+ "activity-checklist-added": "已新增待辦清單 %s",
"activity-checklist-removed": "已刪除%s的待辦清單",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
+ "activity-checklist-completed": "完成檢查清單__checklist__ 卡片 __card__ 清單 __list__ 泳道 __swimlane__ 看板 __board__",
+ "activity-checklist-uncompleted": "未完成清單 %s 共 %s",
"activity-checklist-item-added": "新增待辦清單項目從 %s 到 %s",
- "activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
+ "activity-checklist-item-removed": "已從 '%s' 於 %s中 移除一個清單項",
"add": "新增",
- "activity-checked-item-card": "checked %s in checklist %s",
- "activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "activity-checklist-uncompleted-card": "uncompleted the checklist %s",
- "activity-editComment": "edited comment %s",
- "activity-deleteComment": "deleted comment %s",
+ "activity-checked-item-card": "勾選 %s 與清單 %s 中",
+ "activity-unchecked-item-card": "取消勾選 %s 於清單 %s中",
+ "activity-checklist-completed-card": "完成檢查清單 __checklist__ 卡片 __card__ 清單 __list__ 泳道 __swimlane__ 看板 __board__",
+ "activity-checklist-uncompleted-card": "未完成清單 %s",
+ "activity-editComment": "評論已編輯",
+ "activity-deleteComment": "評論已刪除",
"add-attachment": "新增附件",
"add-board": "新增看板",
"add-card": "新增卡片",
@@ -86,85 +86,87 @@
"add-label": "新增標籤",
"add-list": "新增清單",
"add-members": "新增成員",
- "added": "已新增",
+ "added": "新增",
"addMemberPopup-title": "成員",
"admin": "管理員",
"admin-desc": "可以瀏覽並編輯卡片,移除成員,並且更改該看板的設定",
- "admin-announcement": "公告",
- "admin-announcement-active": "啟用全系統範圍公告",
- "admin-announcement-title": "來自 Administrator 的公告",
+ "admin-announcement": "通知",
+ "admin-announcement-active": "激活系統通知",
+ "admin-announcement-title": "管理員的通知",
"all-boards": "全部看板",
"and-n-other-card": "和其他 __count__ 個卡片",
"and-n-other-card_plural": "和其他 __count__ 個卡片",
- "apply": "送出",
- "app-is-offline": "請稍候,資料讀取中,重整頁面可能會導致資料遺失。如果讀取一直沒有進度, 請檢查伺服器是否還在運行。",
- "archive": "移到封存",
- "archive-all": "全部移到封存",
- "archive-board": "將看板移到封存",
- "archive-card": "將卡片移到封存",
- "archive-list": "將清單移到封存",
- "archive-swimlane": "將泳道圖移到封存",
- "archive-selection": "將選取內容移到封存",
- "archiveBoardPopup-title": "將看板移到封存?",
+ "apply": "應用",
+ "app-is-offline": "加載中,請稍後。刷新頁面將導致數據丟失,如果加載長時間不起作用,請檢查服務器是否已經停止工作。",
+ "archive": "封存",
+ "archive-all": "全部封存",
+ "archive-board": "將看板封存",
+ "archive-card": "將卡片封存",
+ "archive-list": "將清單封存",
+ "archive-swimlane": "將泳道封存",
+ "archive-selection": "將選擇封存",
+ "archiveBoardPopup-title": "是否封存看板?",
"archived-items": "封存",
- "archived-boards": "封存中的看板",
+ "archived-boards": "封存的看板",
"restore-board": "還原看板",
- "no-archived-boards": "封存中沒有看板。",
+ "no-archived-boards": "沒有封存的看板。",
"archives": "封存",
"template": "模板",
"templates": "模板",
"assign-member": "分配成員",
"attached": "附加",
"attachment": "附件",
- "attachment-delete-pop": "刪除附件的操作無法還原。",
+ "attachment-delete-pop": "刪除附件的操作不可逆。",
"attachmentDeletePopup-title": "刪除附件?",
"attachments": "附件",
- "auto-watch": "新增看板時自動加入觀看",
- "avatar-too-big": "頭像檔案太大(最大 70 KB)",
+ "auto-watch": "自動關註新建的看板",
+ "avatar-too-big": "頭像過大 (上限 70 KB)",
"back": "返回",
- "board-change-color": "更換顏色",
- "board-nb-stars": "%s 星號標記",
+ "board-change-color": "更改顏色",
+ "board-nb-stars": "%s 星標",
"board-not-found": "看板不存在",
- "board-private-info": "此看板將被設為 <strong>私密</strong>.",
- "board-public-info": "此看板將被設為 <strong>公開</strong>.",
- "boardChangeColorPopup-title": "更換看板背景",
- "boardChangeTitlePopup-title": "重新命名看板",
- "boardChangeVisibilityPopup-title": "改變觀看權限",
- "boardChangeWatchPopup-title": "更改觀察",
+ "board-private-info": "該看板將被設為 <strong>私有</strong>.",
+ "board-public-info": "該看板將被設為 <strong>公開</strong>.",
+ "boardChangeColorPopup-title": "修改看板背景",
+ "boardChangeTitlePopup-title": "重命名看板",
+ "boardChangeVisibilityPopup-title": "更改可視級別",
+ "boardChangeWatchPopup-title": "更改關註狀態",
"boardMenuPopup-title": "看板設定",
+ "boardChangeViewPopup-title": "看板視圖",
"boards": "看板",
"board-view": "看板視圖",
- "board-view-cal": "行事曆",
+ "board-view-cal": "日歷",
"board-view-swimlanes": "泳道圖",
+ "board-view-collapse": "Collapse",
"board-view-lists": "清單",
- "bucket-example": "例如「目標清單」",
+ "bucket-example": "例如 “目標清單”",
"cancel": "取消",
- "card-archived": "此卡片已移到封存。",
- "board-archived": "此看板已移到封存。",
- "card-comments-title": "該卡片有 %s 則評論",
- "card-delete-notice": "刪除是永久性的,您將遺失該卡片的所有相關操作記錄。",
- "card-delete-pop": "所有活動中的內容都將被刪除,此操作無法撤消,您將無法重新開啟此卡片。",
- "card-delete-suggest-archive": "您可以將卡片移到封存來將卡片從看板上移除,並且保留其中的活動。",
- "card-due": "期限",
- "card-due-on": "期限日",
- "card-spent": "耗費時間",
+ "card-archived": "封存這個卡片。",
+ "board-archived": "封存這個看板。",
+ "card-comments-title": "該卡片有 %s 條評論",
+ "card-delete-notice": "徹底刪除的操作不可恢覆,你將會丟失該卡片相關的所有操作記錄。",
+ "card-delete-pop": "所有的活動將從活動摘要中被移除且您將無法重新打開該卡片。此操作無法撤銷。",
+ "card-delete-suggest-archive": "您可以移動卡片到活動以便從看板中刪除並保持活動。",
+ "card-due": "到期",
+ "card-due-on": "期限",
+ "card-spent": "耗時",
"card-edit-attachments": "編輯附件",
- "card-edit-custom-fields": "編輯自訂欄位",
+ "card-edit-custom-fields": "編輯自定義字段",
"card-edit-labels": "編輯標籤",
"card-edit-members": "編輯成員",
"card-labels-title": "更改該卡片上的標籤",
"card-members-title": "在該卡片中新增或移除看板成員",
"card-start": "開始",
- "card-start-on": "開始日",
+ "card-start-on": "始於",
"cardAttachmentsPopup-title": "附件來源",
- "cardCustomField-datePopup-title": "更改日期",
- "cardCustomFieldsPopup-title": "編輯自訂欄位",
- "cardDeletePopup-title": "刪除卡片?",
- "cardDetailsActionsPopup-title": "卡片動作",
+ "cardCustomField-datePopup-title": "修改日期",
+ "cardCustomFieldsPopup-title": "編輯自定義字段",
+ "cardDeletePopup-title": "徹底刪除卡片?",
+ "cardDetailsActionsPopup-title": "卡片操作",
"cardLabelsPopup-title": "標籤",
"cardMembersPopup-title": "成員",
"cardMorePopup-title": "更多",
- "cardTemplatePopup-title": "新增模板",
+ "cardTemplatePopup-title": "新建模板",
"cards": "卡片",
"cards-count": "卡片",
"casSignIn": "以 CAS 登入",
@@ -177,7 +179,7 @@
"change-permissions": "更改許可權",
"change-settings": "更改設定",
"changeAvatarPopup-title": "更換大頭貼",
- "changeLanguagePopup-title": "更改語言",
+ "changeLanguagePopup-title": "更改語系",
"changePasswordPopup-title": "變更密碼",
"changePermissionsPopup-title": "更改許可權",
"changeSettingsPopup-title": "更改設定",
@@ -188,42 +190,42 @@
"clipboard": "剪貼簿貼上或者拖曳檔案",
"close": "關閉",
"close-board": "關閉看板",
- "close-board-pop": "您可以通過點擊主頁眉中的「封存」按鈕來恢復看板。",
+ "close-board-pop": "您可以通過點擊主頁面中的「封存」按鈕來恢復看板。",
"color-black": "黑色",
"color-blue": "藍色",
- "color-crimson": "艷紅",
- "color-darkgreen": "暗綠",
+ "color-crimson": "深紅",
+ "color-darkgreen": "墨綠",
"color-gold": "金色",
"color-gray": "灰色",
"color-green": "綠色",
- "color-indigo": "紫藍",
+ "color-indigo": "紫藍色",
"color-lime": "綠黃",
"color-magenta": "洋紅",
- "color-mistyrose": "玫瑰粉",
- "color-navy": "藏青",
+ "color-mistyrose": "玫瑰紅",
+ "color-navy": "藏青色",
"color-orange": "橙色",
- "color-paleturquoise": "淡藍綠",
- "color-peachpuff": "桃色",
- "color-pink": "粉紅",
- "color-plum": "梅色",
+ "color-paleturquoise": "寶石綠",
+ "color-peachpuff": "桃紅色",
+ "color-pink": "粉紅色",
+ "color-plum": "紫紅色",
"color-purple": "紫色",
"color-red": "紅色",
- "color-saddlebrown": "馬鞍棕",
+ "color-saddlebrown": "棕褐色",
"color-silver": "銀色",
"color-sky": "天藍",
"color-slateblue": "青藍",
"color-white": "白色",
"color-yellow": "黃色",
- "unset-color": "未設置",
+ "unset-color": "未設定",
"comment": "評論",
- "comment-placeholder": "撰寫評論",
- "comment-only": "只能發表評論",
- "comment-only-desc": "只能在卡片上發表評論",
- "no-comments": "沒有評論",
+ "comment-placeholder": "新增評論",
+ "comment-only": "僅能評論",
+ "comment-only-desc": "只能在卡片上發表評論。",
+ "no-comments": "暫無評論",
"no-comments-desc": "無法檢視評論和活動。",
"computer": "從本機上傳",
- "confirm-subtask-delete-dialog": "你確定要刪除子任務嗎?",
- "confirm-checklist-delete-dialog": "你確定要刪除待辦清單嗎?",
+ "confirm-subtask-delete-dialog": "確定要刪除子任務嗎?",
+ "confirm-checklist-delete-dialog": "確定要刪除清單嗎?",
"copy-card-link-to-clipboard": "將卡片連結複製到剪貼簿",
"linkCardPopup-title": "連結卡片",
"searchElementPopup-title": "搜尋",
@@ -242,10 +244,10 @@
"custom-field-checkbox": "複選框",
"custom-field-date": "日期",
"custom-field-dropdown": "下拉式選單",
- "custom-field-dropdown-none": "(無)",
+ "custom-field-dropdown-none": "(無)",
"custom-field-dropdown-options": "清單選項",
"custom-field-dropdown-options-placeholder": "按下 Enter 新增更多選項",
- "custom-field-dropdown-unknown": "(未知)",
+ "custom-field-dropdown-unknown": "(未知)",
"custom-field-number": "數字",
"custom-field-text": "文字",
"custom-fields": "自訂欄位",
@@ -283,7 +285,7 @@
"email-invite-subject": "__inviter__ 向您發出邀請",
"email-invite-text": "親愛的 __user__,\n\n__inviter__ 邀請您加入看板 \"__board__\" 參與協作。\n\n請點選下面的連結訪問看板:\n\n__url__\n\n謝謝。",
"email-resetPassword-subject": "重設您在 __siteName__ 的密碼",
- "email-resetPassword-text": "親愛的 __user__,\n\n點選下面的連結,重置您的密碼:\n\n__url__\n\n謝謝。",
+ "email-resetPassword-text": "您好 __user__,\n\n點選下面的連結,重置您的密碼:\n\n__url__\n\n謝謝。",
"email-sent": "郵件已寄送",
"email-verifyEmail-subject": "驗證您在 __siteName__ 的電子郵件",
"email-verifyEmail-text": "親愛的 __user__,\n\n點選下面的連結,驗證您的電子郵件地址:\n\n__url__\n\n謝謝。",
@@ -296,23 +298,33 @@
"error-list-doesNotExist": "不存在此列表",
"error-user-doesNotExist": "該使用者不存在",
"error-user-notAllowSelf": "不允許對自己執行此操作",
- "error-user-notCreated": "該使用者未能成功建立",
+ "error-user-notCreated": "該使用者未能成功新增",
"error-username-taken": "這個使用者名稱已被使用",
"error-email-taken": "電子信箱已被使用",
"export-board": "匯出看板",
+ "sort": "排序",
+ "sort-desc": "點選排序清單",
+ "list-sort-by": "清單排序依照:",
+ "list-label-modifiedAt": "最後存取時間",
+ "list-label-title": "名稱清單",
+ "list-label-sort": "自定義排序",
+ "list-label-short-modifiedAt": "(L)",
+ "list-label-short-title": "(N)",
+ "list-label-short-sort": "(M)",
"filter": "篩選",
- "filter-cards": "篩選卡片",
+ "filter-cards": "篩選卡片或清單",
+ "list-filter-label": "篩選清單依據標題",
"filter-clear": "清除篩選條件",
"filter-no-label": "沒有標籤",
"filter-no-member": "沒有成員",
"filter-no-custom-fields": "沒有自訂欄位",
- "filter-show-archive": "Show archived lists",
- "filter-hide-empty": "Hide empty lists",
+ "filter-show-archive": "顯示封存的清單",
+ "filter-hide-empty": "隱藏空清單",
"filter-on": "篩選器已開啟",
"filter-on-desc": "你正在篩選該看板上的卡片,點此編輯篩選條件。",
"filter-to-selection": "選擇的篩選條件",
"advanced-filter-label": "進階篩選",
- "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",
+ "advanced-filter-description": "進階篩選可以使用包含如下操作符的字符串進行過濾:== != <= >= && || ( ) 。操作符之間用空格隔開。輸入文字和數值就可以過濾所有自訂內容。例如:Field1 == Value1。註意如果內容或數值包含空格,需要用單引號。例如: 'Field 1' == 'Value 1'。要跳過單個控制字符(' \\/),請使用 \\ 轉義字符。例如: Field1 = I\\'m。支援組合使用多個條件,例如: F1 == V1 || F1 == V2。通常以從左到右的順序進行判斷。可以通過括號修改順序,例如:F1 == V1 && ( F2 == V2 || F2 == V3 )。也支援使用正規表式法搜尋內容。",
"fullname": "全稱",
"header-logo-title": "返回您的看板頁面",
"hide-system-messages": "隱藏系統訊息",
@@ -324,50 +336,50 @@
"import-board-c": "匯入看板",
"import-board-title-trello": "匯入在 Trello 的看板",
"import-board-title-wekan": "從上次的匯出檔匯入看板",
- "import-sandstorm-backup-warning": "Do not delete data you import from original exported board or Trello before checking does this grain close and open again, or do you get Board not found error, that means data loss.",
+ "import-sandstorm-backup-warning": "在檢查此顆粒是否關閉和再次打開之前,不要刪除從原始匯出的看板或 Trello 匯入的數據,否則看板會發生未知的錯誤,這意味著資料已遺失。",
"import-sandstorm-warning": "匯入資料將會移除所有現有的看版資料,並取代成此次匯入的看板資料",
"from-trello": "來自 Trello",
"from-wekan": "從上次的匯出檔",
"import-board-instruction-trello": "在你的Trello看板中,點選“功能表”,然後選擇“更多”,“列印與匯出”,“匯出為 JSON” 並拷貝結果文本",
- "import-board-instruction-wekan": "In your board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.",
- "import-board-instruction-about-errors": "If you get errors when importing board, sometimes importing still works, and board is at All Boards page.",
+ "import-board-instruction-wekan": "在您的看板,點擊“選單”,然後“匯出看板”,複製下載文件中的文本。",
+ "import-board-instruction-about-errors": "如果在匯入看板時出現錯誤,匯入工作可能仍然在進行中,並且看板已經出現在全部看板頁。",
"import-json-placeholder": "貼上您有效的 JSON 資料至此",
"import-map-members": "複製成員",
- "import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
- "import-show-user-mapping": "核對成員映射",
+ "import-members-map": "您匯入的看板有一些成員,請複製這些成員到您匯入的用戶。",
+ "import-show-user-mapping": "核對複製的成員",
"import-user-select": "選擇現有使用者作為成員",
"importMapMembersAddPopup-title": "選擇成員",
"info": "版本",
"initials": "縮寫",
"invalid-date": "無效的日期",
- "invalid-time": "無效的時間",
+ "invalid-time": "非法的時間",
"invalid-user": "無效的使用者",
"joined": "關聯",
"just-invited": "您剛剛被邀請加入此看板",
- "keyboard-shortcuts": "鍵盤快速鍵",
- "label-create": "建立標籤",
+ "keyboard-shortcuts": "鍵盤快捷鍵",
+ "label-create": "新增標籤",
"label-default": "%s 標籤 (預設)",
"label-delete-pop": "此操作無法還原,這將會刪除該標籤並清除它的歷史記錄。",
"labels": "標籤",
"language": "語言",
"last-admin-desc": "你不能更改角色,因為至少需要一名管理員。",
"leave-board": "離開看板",
- "leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
+ "leave-board-pop": "你確定要離開 __boardTitle__ 嗎?此看板的所有卡片都會將您移除。",
"leaveBoardPopup-title": "離開看板?",
"link-card": "關聯至該卡片",
"list-archive-cards": "封存清單內所有的卡片",
- "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.",
+ "list-archive-cards-pop": "將移動看板中清單的所有卡片,查看或恢復封存中的卡片,點擊“選單”->“封存”",
"list-move-cards": "移動清單中的所有卡片",
"list-select-cards": "選擇清單中的所有卡片",
"set-color-list": "設定顏色",
"listActionPopup-title": "清單操作",
- "swimlaneActionPopup-title": "Swimlane Actions",
+ "swimlaneActionPopup-title": "泳道流程圖操作",
"swimlaneAddPopup-title": "在下面新增泳道流程圖",
"listImportCardPopup-title": "匯入 Trello 卡片",
"listMorePopup-title": "更多",
"link-list": "連結到這個清單",
- "list-delete-pop": "所有的動作將從活動動態中被移除且您將無法再開啟該清單\b。此操作無法復原。",
- "list-delete-suggest-archive": "You can move a list to Archive to remove it from the board and preserve the activity.",
+ "list-delete-pop": "所有的動作都將從活動動態中被移除且您將無法再開啟該清單\b。此操作無法復原。",
+ "list-delete-suggest-archive": "您可以移動清單到封存以將其從看板中移除並保留活動。",
"lists": "清單",
"swimlanes": "泳道圖",
"log-out": "登出",
@@ -426,12 +438,12 @@
"save": "儲存",
"search": "搜尋",
"rules": "規則",
- "search-cards": "搜尋看板內的卡片標題及描述",
- "search-example": "Text to search for?",
+ "search-cards": "Search from card/list titles and descriptions on this board",
+ "search-example": "搜尋",
"select-color": "選擇顏色",
- "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
+ "set-wip-limit-value": "設定此清單中的最大任務數",
"setWipLimitPopup-title": "設定 WIP 限制",
- "shortcut-assign-self": "分配目前卡片給自己",
+ "shortcut-assign-self": "分配當前卡片給自己",
"shortcut-autocomplete-emoji": "自動完成表情符號",
"shortcut-autocomplete-members": "自動補齊成員",
"shortcut-clear-filters": "清空全部過濾條件",
@@ -455,7 +467,7 @@
"overtime-hours": "超時 (小時)",
"overtime": "超時",
"has-overtime-cards": "有卡片已超時",
- "has-spenttime-cards": "Has spent time cards",
+ "has-spenttime-cards": "耗時卡",
"time": "時間",
"title": "標題",
"tracking": "追蹤",
@@ -474,16 +486,16 @@
"watching": "觀察中",
"watching-info": "你將會收到關於這個看板所有的變更通知",
"welcome-board": "歡迎進入看板",
- "welcome-swimlane": "里程碑1",
+ "welcome-swimlane": "里程碑 1",
"welcome-list1": "基本",
"welcome-list2": "進階",
"card-templates-swimlane": "卡片模板",
"list-templates-swimlane": "清單模板",
"board-templates-swimlane": "看板模板",
"what-to-do": "要做什麼?",
- "wipLimitErrorPopup-title": "Invalid WIP Limit",
- "wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
- "wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.",
+ "wipLimitErrorPopup-title": "無效的最大任務數",
+ "wipLimitErrorPopup-dialog-pt1": "此清單中的任務數量已經超過了設定的最大任務數。",
+ "wipLimitErrorPopup-dialog-pt2": "請將一些任務移出此清單,或者設定一個更大的最大任務數。",
"admin-panel": "控制台",
"settings": "設定",
"people": "成員",
@@ -501,29 +513,34 @@
"smtp-username": "使用者名稱",
"smtp-password": "密碼",
"smtp-tls": "支援 TLS",
- "send-from": "從",
+ "send-from": "寄件人",
"send-smtp-test": "傳送測試郵件給自己",
"invitation-code": "邀請碼",
"email-invite-register-subject": "__inviter__ 向您發出邀請",
- "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
- "email-smtp-test-subject": "SMTP 測試郵件",
- "email-smtp-test-text": "您已成功寄送郵件",
+ "email-invite-register-text": "親愛的__user__:\n__inviter__ 邀請您加入到看板\n\n請點擊下面的連結:\n__url__\n\n您的邀請碼是:__icode__\n\n謝謝。",
+ "email-smtp-test-subject": "透過SMTP發送測試郵件",
+ "email-smtp-test-text": "你已成功發送郵件",
"error-invitation-code-not-exist": "邀請碼不存在",
- "error-notAuthorized": "沒有適合的權限觀看",
- "outgoing-webhooks": "設定 Webhooks",
- "outgoingWebhooksPopup-title": "設定 Webhooks",
+ "error-notAuthorized": "您無權限查看此頁面。",
+ "webhook-title": "Webhook 名稱",
+ "webhook-token": "Token (認證選項)",
+ "outgoing-webhooks": "設定訂閱 (Webhooks)",
+ "bidirectional-webhooks": "雙向訂閱 (Webhooks)",
+ "outgoingWebhooksPopup-title": "外部訂閱 (Webhooks)",
"boardCardTitlePopup-title": "卡片標題過濾器",
- "new-outgoing-webhook": "New Outgoing Webhook",
+ "disable-webhook": "禁用訂閱 (Webhooks)",
+ "global-webhook": "全域訂閱 (Webhooks)",
+ "new-outgoing-webhook": "新建外部訂閱 (Webhooks)",
"no-name": "(未知)",
- "Node_version": "Node 版本",
- "Meteor_version": "Meteor version",
- "MongoDB_version": "MongoDB version",
- "MongoDB_storage_engine": "MongoDB storage engine",
- "MongoDB_Oplog_enabled": "MongoDB Oplog enabled",
+ "Node_version": "Node.js 版本",
+ "Meteor_version": "Meteor 版本",
+ "MongoDB_version": "MongoDB 版本",
+ "MongoDB_storage_engine": "MongoDB 存儲引擎",
+ "MongoDB_Oplog_enabled": "MongoDB Oplog 已啟用",
"OS_Arch": "系統架構",
- "OS_Cpus": "系統\b CPU 數",
- "OS_Freemem": "undefined",
- "OS_Loadavg": "系統平均讀取",
+ "OS_Cpus": "系統 CPU 數量",
+ "OS_Freemem": "系統可用記憶體",
+ "OS_Loadavg": "系統平均負載",
"OS_Platform": "系統平臺",
"OS_Release": "系統發佈版本",
"OS_Totalmem": "系統總記憶體",
@@ -533,18 +550,18 @@
"hours": "小時",
"minutes": "分鐘",
"seconds": "秒",
- "show-field-on-card": "在卡片顯示這個欄位",
+ "show-field-on-card": "在卡片上顯示這個欄位",
"automatically-field-on-card": "自動在所有卡片建立欄位",
- "showLabel-field-on-card": "在迷你卡中顯示欄位標籤",
+ "showLabel-field-on-card": "在迷你卡片中顯示欄位標籤",
"yes": "是",
"no": "否",
- "accounts": "帳號",
- "accounts-allowEmailChange": "准許變更電子信箱",
+ "accounts": "賬號",
+ "accounts-allowEmailChange": "允許變更電子信箱",
"accounts-allowUserNameChange": "允許修改使用者名稱",
- "createdAt": "建立於",
+ "createdAt": "新增於",
"verified": "已驗證",
- "active": "Active",
- "card-received": "接收",
+ "active": "啟用",
+ "card-received": "已接收",
"card-received-on": "接收於",
"card-end": "結束",
"card-end-on": "結束於",
@@ -556,179 +573,183 @@
"setListColorPopup-title": "選擇顏色",
"assigned-by": "分配者",
"requested-by": "請求者",
- "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
- "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
- "boardDeletePopup-title": "刪除看板?",
+ "board-delete-notice": "刪除時永久操作,將會丟失此看板上的所有清單、卡片和動作。",
+ "delete-board-confirm-popup": "所有清單、卡片、標籤和活動都會被刪除,將無法恢覆看板內容。不支援撤銷。",
+ "boardDeletePopup-title": "刪除看板?",
"delete-board": "刪除看板",
- "default-subtasks-board": "Subtasks for __board__ board",
+ "default-subtasks-board": "__board__ 看板的子任務",
"default": "預設值",
- "queue": "列隊",
+ "queue": "隊列",
"subtask-settings": "子任務設定",
"boardSubtaskSettingsPopup-title": "看板子任務設定",
- "show-subtasks-field": "Cards can have subtasks",
- "deposit-subtasks-board": "Deposit subtasks to this board:",
- "deposit-subtasks-list": "Landing list for subtasks deposited here:",
- "show-parent-in-minicard": "Show parent in minicard:",
- "prefix-with-full-path": "Prefix with full path",
- "prefix-with-parent": "Prefix with parent",
- "subtext-with-full-path": "Subtext with full path",
- "subtext-with-parent": "Subtext with parent",
- "change-card-parent": "Change card's parent",
- "parent-card": "Parent card",
+ "show-subtasks-field": "卡片包含子任務",
+ "deposit-subtasks-board": "將子任務放入以下看板:",
+ "deposit-subtasks-list": "將子任務放入以下清單:",
+ "show-parent-in-minicard": "顯示上一級卡片:",
+ "prefix-with-full-path": "完整路徑前綴",
+ "prefix-with-parent": "上級前綴",
+ "subtext-with-full-path": "子標題顯示完整路徑",
+ "subtext-with-parent": "子標題顯示上級",
+ "change-card-parent": "修改卡片的上級",
+ "parent-card": "上級卡片",
"source-board": "來源看板",
- "no-parent": "Don't show parent",
+ "no-parent": "不顯示上層",
"activity-added-label": "增加標籤%s至%s",
"activity-removed-label": "刪除標籤%s位於%s",
"activity-delete-attach": "刪除%s的附件",
"activity-added-label-card": "新增標籤%s",
"activity-removed-label-card": "刪除標籤%s",
"activity-delete-attach-card": "刪除附件",
- "activity-set-customfield": "set custom field '%s' to '%s' in %s",
- "activity-unset-customfield": "unset custom field '%s' in %s",
+ "activity-set-customfield": "設定自定欄位 '%s' 至 '%s' 於 %s",
+ "activity-unset-customfield": "未設定自定欄位 '%s' 於 %s",
"r-rule": "規則",
- "r-add-trigger": "Add trigger",
- "r-add-action": "Add action",
- "r-board-rules": "Board rules",
- "r-add-rule": "Add rule",
- "r-view-rule": "View rule",
- "r-delete-rule": "Delete rule",
- "r-new-rule-name": "New rule title",
- "r-no-rules": "No rules",
- "r-when-a-card": "When a card",
+ "r-add-trigger": "新增觸發器",
+ "r-add-action": "新增動作",
+ "r-board-rules": "看板規則",
+ "r-add-rule": "新增規則",
+ "r-view-rule": "查看規則",
+ "r-delete-rule": "刪除規則",
+ "r-new-rule-name": "新規則標題",
+ "r-no-rules": "暫無規則",
+ "r-when-a-card": "當一張卡片",
"r-is": "是",
- "r-is-moved": "被刪除",
- "r-added-to": "增加到",
- "r-removed-from": "Removed from",
- "r-the-board": "看板",
+ "r-is-moved": "已經移動",
+ "r-added-to": "新增到",
+ "r-removed-from": "已移除",
+ "r-the-board": "該看板",
"r-list": "清單",
- "set-filter": "Set Filter",
- "r-moved-to": "Moved to",
- "r-moved-from": "Moved from",
- "r-archived": "Moved to Archive",
- "r-unarchived": "Restored from Archive",
- "r-a-card": "卡片",
- "r-when-a-label-is": "When a label is",
- "r-when-the-label": "When the label",
+ "set-filter": "設定過濾器",
+ "r-moved-to": "移至",
+ "r-moved-from": "已移動",
+ "r-archived": "已移動到封存",
+ "r-unarchived": "已從封存中恢復",
+ "r-a-card": "一個卡片",
+ "r-when-a-label-is": "當一個標籤是",
+ "r-when-the-label": "當該標籤是",
"r-list-name": "清單名稱",
- "r-when-a-member": "When a member is",
- "r-when-the-member": "When the member",
+ "r-when-a-member": "當一個成員是",
+ "r-when-the-member": "當該成員",
"r-name": "名稱",
- "r-when-a-attach": "When an attachment",
- "r-when-a-checklist": "When a checklist is",
- "r-when-the-checklist": "When the checklist",
- "r-completed": "Completed",
- "r-made-incomplete": "Made incomplete",
- "r-when-a-item": "When a checklist item is",
- "r-when-the-item": "When the checklist item",
- "r-checked": "Checked",
- "r-unchecked": "Unchecked",
- "r-move-card-to": "Move card to",
- "r-top-of": "Top of",
- "r-bottom-of": "Bottom of",
- "r-its-list": "its list",
+ "r-when-a-attach": "當一個附件",
+ "r-when-a-checklist": "當一個清單是",
+ "r-when-the-checklist": "當該清單",
+ "r-completed": "已完成",
+ "r-made-incomplete": "置為未完成",
+ "r-when-a-item": "當一個清單項是",
+ "r-when-the-item": "當該清單項",
+ "r-checked": "勾選",
+ "r-unchecked": "未勾選",
+ "r-move-card-to": "移動卡片到",
+ "r-top-of": "的頂部",
+ "r-bottom-of": "的尾部",
+ "r-its-list": "其清單",
"r-archive": "移到封存",
- "r-unarchive": "Restore from Archive",
+ "r-unarchive": "從封存中恢復",
"r-card": "卡片",
"r-add": "新增",
- "r-remove": "Remove",
+ "r-remove": "移除",
"r-label": "標籤",
- "r-member": "member",
- "r-remove-all": "Remove all members from the card",
- "r-set-color": "Set color to",
- "r-checklist": "checklist",
- "r-check-all": "Check all",
- "r-uncheck-all": "Uncheck all",
- "r-items-check": "items of checklist",
- "r-check": "Check",
- "r-uncheck": "Uncheck",
- "r-item": "item",
- "r-of-checklist": "of checklist",
+ "r-member": "成員",
+ "r-remove-all": "從卡片移除所有成員",
+ "r-set-color": "設定顏色",
+ "r-checklist": "清單",
+ "r-check-all": "勾選所有",
+ "r-uncheck-all": "取消所有勾選",
+ "r-items-check": "清單條目",
+ "r-check": "勾選",
+ "r-uncheck": "取消勾選",
+ "r-item": "條目",
+ "r-of-checklist": "清單的",
"r-send-email": "寄送郵件",
- "r-to": "到",
- "r-subject": "主題",
+ "r-to": "收件人",
+ "r-subject": "主旨",
"r-rule-details": "詳細規則",
"r-d-move-to-top-gen": "將卡片移到所屬清單頂部",
"r-d-move-to-top-spec": "將卡片移到清單頂部",
"r-d-move-to-bottom-gen": "將卡片移到所屬清單底部",
"r-d-move-to-bottom-spec": "將卡片移到清單底部",
"r-d-send-email": "寄送郵件",
- "r-d-send-email-to": "到",
- "r-d-send-email-subject": "主題",
+ "r-d-send-email-to": "收件人",
+ "r-d-send-email-subject": "主旨",
"r-d-send-email-message": "訊息",
- "r-d-archive": "封存卡片",
- "r-d-unarchive": "恢復封存的卡片",
+ "r-d-archive": "將卡片封存",
+ "r-d-unarchive": "從封存中恢復卡片",
"r-d-add-label": "新增標籤",
"r-d-remove-label": "移除標籤",
- "r-create-card": "創建新卡片",
- "r-in-list": "在清單",
+ "r-create-card": "新增新卡片",
+ "r-in-list": "在清單中",
"r-in-swimlane": "在泳道流程圖",
"r-d-add-member": "新增成員",
"r-d-remove-member": "移除成員",
"r-d-remove-all-member": "移除所有成員",
- "r-d-check-all": "Check all items of a list",
- "r-d-uncheck-all": "Uncheck all items of a list",
- "r-d-check-one": "Check item",
- "r-d-uncheck-one": "Uncheck item",
- "r-d-check-of-list": "of checklist",
+ "r-d-check-all": "勾選所有清單項",
+ "r-d-uncheck-all": "取消所有勾選清單項目",
+ "r-d-check-one": "勾選該項",
+ "r-d-uncheck-one": "取消勾選",
+ "r-d-check-of-list": "清單的",
"r-d-add-checklist": "新增待辦清單",
"r-d-remove-checklist": "移除待辦清單",
- "r-by": "by",
+ "r-by": "在",
"r-add-checklist": "新增待辦清單",
- "r-with-items": "with items",
- "r-items-list": "item1,item2,item3",
+ "r-with-items": "與項目",
+ "r-items-list": "項目1,項目2,項目3",
"r-add-swimlane": "新增泳道流程圖",
"r-swimlane-name": "泳道流程圖名稱",
- "r-board-note": "Note: leave a field empty to match every possible value.",
- "r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
- "r-when-a-card-is-moved": "When a card is moved to another list",
- "r-set": "Set",
+ "r-board-note": "註解:保留一個空字串去比對所有可能的值。",
+ "r-checklist-note": "註解:清單中的項目必須使用逗號分隔。",
+ "r-when-a-card-is-moved": "當移動卡片到另一個清單時",
+ "r-set": "設定",
"r-update": "更新",
- "r-datefield": "日期欄位",
+ "r-datefield": "日期字段",
"r-df-start-at": "開始",
- "r-df-due-at": "due",
+ "r-df-due-at": "至",
"r-df-end-at": "結束",
- "r-df-received-at": "received",
- "r-to-current-datetime": "to current date/time",
- "r-remove-value-from": "Remove value from",
+ "r-df-received-at": "已接收",
+ "r-to-current-datetime": "到當前日期/時間",
+ "r-remove-value-from": "移除值從",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
- "authentication-method": "Authentication method",
- "authentication-type": "Authentication type",
+ "authentication-method": "認證方式",
+ "authentication-type": "認證類型",
"custom-product-name": "自訂產品名稱",
"layout": "排版",
"hide-logo": "隱藏圖示",
- "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
- "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
- "error-undefined": "Something went wrong",
- "error-ldap-login": "An error occurred while trying to login",
- "display-authentication-method": "Display Authentication Method",
- "default-authentication-method": "Default Authentication Method",
+ "add-custom-html-after-body-start": "新增自訂的 HTML 在<body>之後開始",
+ "add-custom-html-before-body-end": "新增自訂的 HTML 在</body>之前結束",
+ "error-undefined": "發生問題",
+ "error-ldap-login": "嘗試登入時出現錯誤",
+ "display-authentication-method": "顯示認證方式",
+ "default-authentication-method": "預設認證方式",
"duplicate-board": "重複的看板",
- "people-number": "人數是:",
- "swimlaneDeletePopup-title": "刪除泳道流程圖?",
- "swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
+ "people-number": "人數是:",
+ "swimlaneDeletePopup-title": "是否刪除泳道流程圖?",
+ "swimlane-delete-pop": "所有活動將從活動源中刪除,您將無法恢復泳道流程圖。此操作無法還原。",
"restore-all": "全部還原",
"delete-all": "全部刪除",
- "loading": "讀取中,請稍後",
- "previous_as": "last time was",
- "act-a-dueAt": "modified due time to \nWhen: __timeValue__\nWhere: __card__\n previous due was __timeOldValue__",
- "act-a-endAt": "modified ending time to __timeValue__ from (__timeOldValue__)",
- "act-a-startAt": "modified starting time to __timeValue__ from (__timeOldValue__)",
- "act-a-receivedAt": "modified received time to __timeValue__ from (__timeOldValue__)",
- "a-dueAt": "modified due time to be",
- "a-endAt": "modified ending time to be",
- "a-startAt": "modified starting time to be",
- "a-receivedAt": "modified received time to be",
- "almostdue": "current due time %s is approaching",
- "pastdue": "current due time %s is past",
- "duenow": "current due time %s is today",
- "act-withDue": "__card__ due reminders [__board__]",
- "act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
- "act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
- "act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
- "act-atUserComment": "You were mentioned in [__board__] __card__",
- "delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
- "accounts-allowUserDelete": "Allow users to self delete their account",
- "hide-minicard-label-text": "Hide minicard label text"
+ "loading": "讀取中,請稍後。",
+ "previous_as": "上次是",
+ "act-a-dueAt": "修改到期時間:\n時間:__timeValue__\n位置:__card__\n上一個到期日是 __timeOldValue__",
+ "act-a-endAt": "修改結束時間從 (__timeOldValue__) 至 __timeValue__",
+ "act-a-startAt": "修改開始時間從 (__timeOldValue__) 至 __timeValue__",
+ "act-a-receivedAt": "修改接收時間從 (__timeOldValue__) 至 __timeValue__",
+ "a-dueAt": "修改到期時間",
+ "a-endAt": "修改結束時間",
+ "a-startAt": "修改開始時間",
+ "a-receivedAt": "修改接收時間",
+ "almostdue": "當前到期時間%s即將到來",
+ "pastdue": "當前到期時間%s已過",
+ "duenow": "當前到期時間%s為今天",
+ "act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
+ "act-withDue": "__list__/__card__ due reminders [__board__]",
+ "act-almostdue": "__card__ 的當前到期提醒(__timeValue__) 正在接近",
+ "act-pastdue": "__card__ 的當前到期提醒(__timeValue__) 已經過去了",
+ "act-duenow": "__card__ 的當前到期提醒(__timeValue__) 現在到期",
+ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
+ "delete-user-confirm-popup": "確定要刪除此帳戶嗎?此操作無法還原。",
+ "accounts-allowUserDelete": "允許用戶自行刪除其帳戶",
+ "hide-minicard-label-text": "隱藏迷你卡片標籤內文",
+ "show-desktop-drag-handles": "顯示桌面拖曳工具",
+ "assignee": "Assignee",
+ "cardAssigneesPopup-title": "Assignee"
}
diff --git a/models/accountSettings.js b/models/accountSettings.js
index ed1087ca..f61614b8 100644
--- a/models/accountSettings.js
+++ b/models/accountSettings.js
@@ -20,6 +20,8 @@ AccountSettings.attachSchema(
autoValue() {
if (this.isInsert) {
return new Date();
+ } else if (this.isUpsert) {
+ return { $setOnInsert: new Date() };
} else {
this.unset();
}
diff --git a/models/actions.js b/models/actions.js
index e9fa9114..8995d101 100644
--- a/models/actions.js
+++ b/models/actions.js
@@ -14,6 +14,16 @@ Actions.allow({
},
});
+Actions.before.insert((userId, doc) => {
+ doc.createdAt = new Date();
+ doc.modifiedAt = doc.createdAt;
+});
+
+Actions.before.update((userId, doc, fieldNames, modifier) => {
+ modifier.$set = modifier.$set || {};
+ modifier.$set.modifiedAt = new Date();
+});
+
Actions.helpers({
description() {
return this.desc;
diff --git a/models/activities.js b/models/activities.js
index 3ecd5c8c..19e3fb7d 100644
--- a/models/activities.js
+++ b/models/activities.js
@@ -62,8 +62,14 @@ Activities.helpers({
//},
});
+Activities.before.update((userId, doc, fieldNames, modifier) => {
+ modifier.$set = modifier.$set || {};
+ modifier.$set.modifiedAt = new Date();
+});
+
Activities.before.insert((userId, doc) => {
doc.createdAt = new Date();
+ doc.modifiedAt = doc.createdAt;
});
Activities.after.insert((userId, doc) => {
@@ -174,25 +180,34 @@ if (Meteor.isServer) {
const comment = activity.comment();
params.comment = comment.text;
if (board) {
- const atUser = /(?:^|>|\b|\s)@(\S+)(?:\s|$|<|\b)/g;
const comment = params.comment;
- if (comment.match(atUser)) {
- const commenter = params.user;
- while (atUser.exec(comment)) {
- const username = RegExp.$1;
- if (commenter === username) {
- // it's person at himself, ignore it?
- continue;
- }
- const user = Users.findOne(username) || Users.findOne({ username });
- const uid = user && user._id;
- params.atUsername = username;
- params.atEmails = user.emails;
- if (board.hasMember(uid)) {
- title = 'act-atUserComment';
- watchers = _.union(watchers, [uid]);
- }
+ const knownUsers = board.members.map(member => {
+ const u = Users.findOne(member.userId);
+ if (u) {
+ member.username = u.username;
+ member.emails = u.emails;
+ }
+ return member;
+ });
+ const mentionRegex = /\B@(?:(?:"([\w.\s]*)")|([\w.]+))/gi; // including space in username
+ let currentMention;
+ while ((currentMention = mentionRegex.exec(comment)) !== null) {
+ /*eslint no-unused-vars: ["error", { "varsIgnorePattern": "[iI]gnored" }]*/
+ const [ignored, quoteduser, simple] = currentMention;
+ const username = quoteduser || simple;
+ if (username === params.user) {
+ // ignore commenter mention himself?
+ continue;
+ }
+ const atUser = _.findWhere(knownUsers, { username });
+ if (!atUser) {
+ continue;
}
+ const uid = atUser.userId;
+ params.atUsername = username;
+ params.atEmails = atUser.emails;
+ title = 'act-atUserComment';
+ watchers = _.union(watchers, [uid]);
}
}
params.commentId = comment._id;
@@ -227,8 +242,8 @@ if (Meteor.isServer) {
(!activity.timeKey || activity.timeKey === 'dueAt') &&
activity.timeValue
) {
- // due time reminder
- title = 'act-withDue';
+ // due time reminder, if it doesn't have old value, it's a brand new set, need some differentiation
+ title = activity.timeOldValue ? 'act-withDue' : 'act-newDue';
}
['timeValue', 'timeOldValue'].forEach(key => {
// copy time related keys & values to params
@@ -268,13 +283,24 @@ if (Meteor.isServer) {
});
const integrations = Integrations.find({
- boardId: board._id,
- type: 'outgoing-webhooks',
+ boardId: { $in: [board._id, Integrations.Const.GLOBAL_WEBHOOK_ID] },
+ // type: 'outgoing-webhooks', // all types
enabled: true,
activities: { $in: [description, 'all'] },
}).fetch();
if (integrations.length > 0) {
- Meteor.call('outgoingWebhooks', integrations, description, params);
+ params.watchers = watchers;
+ integrations.forEach(integration => {
+ Meteor.call(
+ 'outgoingWebhooks',
+ integration,
+ description,
+ params,
+ () => {
+ return;
+ },
+ );
+ });
}
});
}
diff --git a/models/announcements.js b/models/announcements.js
index c08710b8..7fdf8d8b 100644
--- a/models/announcements.js
+++ b/models/announcements.js
@@ -25,6 +25,8 @@ Announcements.attachSchema(
autoValue() {
if (this.isInsert) {
return new Date();
+ } else if (this.isUpsert) {
+ return { $setOnInsert: new Date() };
} else {
this.unset();
}
diff --git a/models/boards.js b/models/boards.js
index b5f8b01b..857aa963 100644
--- a/models/boards.js
+++ b/models/boards.js
@@ -55,6 +55,8 @@ Boards.attachSchema(
autoValue() {
if (this.isInsert) {
return new Date();
+ } else if (this.isUpsert) {
+ return { $setOnInsert: new Date() };
} else {
this.unset();
}
@@ -407,6 +409,27 @@ Boards.helpers({
},
lists() {
+ //currentUser = Meteor.user();
+ //if (currentUser) {
+ // enabled = Meteor.user().hasSortBy();
+ //}
+ //return enabled ? this.newestLists() : this.draggableLists();
+ return this.draggableLists();
+ },
+
+ newestLists() {
+ // sorted lists from newest to the oldest, by its creation date or its cards' last modification date
+ const value = Meteor.user()._getListSortBy();
+ const sortKey = { starred: -1, [value[0]]: value[1] }; // [["starred",-1],value];
+ return Lists.find(
+ {
+ boardId: this._id,
+ archived: false,
+ },
+ { sort: sortKey },
+ );
+ },
+ draggableLists() {
return Lists.find({ boardId: this._id }, { sort: { sort: 1 } });
},
@@ -697,6 +720,13 @@ Boards.helpers({
return result;
},
+ cardsDueInBetween(start, end) {
+ return Cards.find({
+ boardId: this._id,
+ dueAt: { $gte: start, $lte: end },
+ });
+ },
+
cardsInInterval(start, end) {
return Cards.find({
boardId: this._id,
diff --git a/models/cardComments.js b/models/cardComments.js
index 40723582..39477e14 100644
--- a/models/cardComments.js
+++ b/models/cardComments.js
@@ -34,6 +34,8 @@ CardComments.attachSchema(
autoValue() {
if (this.isInsert) {
return new Date();
+ } else if (this.isUpsert) {
+ return { $setOnInsert: new Date() };
} else {
this.unset();
}
diff --git a/models/cards.js b/models/cards.js
index d92d003c..816132fe 100644
--- a/models/cards.js
+++ b/models/cards.js
@@ -107,6 +107,8 @@ Cards.attachSchema(
autoValue() {
if (this.isInsert) {
return new Date();
+ } else if (this.isUpsert) {
+ return { $setOnInsert: new Date() };
} else {
this.unset();
}
@@ -201,6 +203,15 @@ Cards.attachSchema(
optional: true,
defaultValue: [],
},
+ assignees: {
+ /**
+ * who is assignee of the card (user ID),
+ * maximum one ID of assignee in array.
+ */
+ type: [String],
+ optional: true,
+ defaultValue: [],
+ },
receivedAt: {
/**
* Date the card was received
@@ -409,6 +420,10 @@ Cards.helpers({
return _.contains(this.getMembers(), memberId);
},
+ isAssignee(assigneeId) {
+ return _.contains(this.getAssignees(), assigneeId);
+ },
+
activities() {
if (this.isLinkedCard()) {
return Activities.find(
@@ -743,6 +758,20 @@ Cards.helpers({
}
},
+ getAssignees() {
+ if (this.isLinkedCard()) {
+ const card = Cards.findOne({ _id: this.linkedId });
+ return card.assignees;
+ } else if (this.isLinkedBoard()) {
+ const board = Boards.findOne({ _id: this.linkedId });
+ return board.activeMembers().map(assignee => {
+ return assignee.userId;
+ });
+ } else {
+ return this.assignees;
+ }
+ },
+
assignMember(memberId) {
if (this.isLinkedCard()) {
return Cards.update(
@@ -760,6 +789,23 @@ Cards.helpers({
}
},
+ assignAssignee(assigneeId) {
+ if (this.isLinkedCard()) {
+ return Cards.update(
+ { _id: this.linkedId },
+ { $addToSet: { assignees: assigneeId } },
+ );
+ } else if (this.isLinkedBoard()) {
+ const board = Boards.findOne({ _id: this.linkedId });
+ return board.addAssignee(assigneeId);
+ } else {
+ return Cards.update(
+ { _id: this._id },
+ { $addToSet: { assignees: assigneeId } },
+ );
+ }
+ },
+
unassignMember(memberId) {
if (this.isLinkedCard()) {
return Cards.update(
@@ -774,6 +820,23 @@ Cards.helpers({
}
},
+ unassignAssignee(assigneeId) {
+ if (this.isLinkedCard()) {
+ return Cards.update(
+ { _id: this.linkedId },
+ { $pull: { assignees: assigneeId } },
+ );
+ } else if (this.isLinkedBoard()) {
+ const board = Boards.findOne({ _id: this.linkedId });
+ return board.removeAssignee(assigneeId);
+ } else {
+ return Cards.update(
+ { _id: this._id },
+ { $pull: { assignees: assigneeId } },
+ );
+ }
+ },
+
toggleMember(memberId) {
if (this.getMembers() && this.getMembers().indexOf(memberId) > -1) {
return this.unassignMember(memberId);
@@ -782,6 +845,14 @@ Cards.helpers({
}
},
+ toggleAssignee(assigneeId) {
+ if (this.getAssignees() && this.getAssignees().indexOf(assigneeId) > -1) {
+ return this.unassignAssignee(assigneeId);
+ } else {
+ return this.assignAssignee(assigneeId);
+ }
+ },
+
getReceived() {
if (this.isLinkedCard()) {
const card = Cards.findOne({ _id: this.linkedId });
@@ -1124,6 +1195,19 @@ Cards.mutations({
};
},
+ assignAssignee(assigneeId) {
+ // If there is not any assignee, allow one assignee, not more.
+ if (this.getAssignees().length === 0) {
+ return {
+ $addToSet: {
+ assignees: assigneeId,
+ },
+ };
+ } else {
+ return false;
+ }
+ },
+
unassignMember(memberId) {
return {
$pull: {
@@ -1132,6 +1216,14 @@ Cards.mutations({
};
},
+ unassignAssignee(assigneeId) {
+ return {
+ $pull: {
+ assignees: assigneeId,
+ },
+ };
+ },
+
toggleMember(memberId) {
if (this.members && this.members.indexOf(memberId) > -1) {
return this.unassignMember(memberId);
@@ -1140,6 +1232,14 @@ Cards.mutations({
}
},
+ toggleAssignee(assigneeId) {
+ if (this.assignees && this.assignees.indexOf(assigneeId) > -1) {
+ return this.unassignAssignee(assigneeId);
+ } else {
+ return this.assignAssignee(assigneeId);
+ }
+ },
+
assignCustomField(customFieldId) {
return {
$addToSet: {
@@ -1434,6 +1534,46 @@ function cardMembers(userId, doc, fieldNames, modifier) {
}
}
+function cardAssignees(userId, doc, fieldNames, modifier) {
+ if (!_.contains(fieldNames, 'assignees')) return;
+ let assigneeId;
+ // Say hello to the new assignee
+ if (modifier.$addToSet && modifier.$addToSet.assignees) {
+ assigneeId = modifier.$addToSet.assignees;
+ const username = Users.findOne(assigneeId).username;
+ if (!_.contains(doc.assignees, assigneeId)) {
+ Activities.insert({
+ userId,
+ username,
+ activityType: 'joinAssignee',
+ boardId: doc.boardId,
+ cardId: doc._id,
+ assigneeId,
+ listId: doc.listId,
+ swimlaneId: doc.swimlaneId,
+ });
+ }
+ }
+ // Say goodbye to the former assignee
+ if (modifier.$pull && modifier.$pull.assignees) {
+ assigneeId = modifier.$pull.assignees;
+ const username = Users.findOne(assigneeId).username;
+ // Check that the former assignee is assignee of the card
+ if (_.contains(doc.assignees, assigneeId)) {
+ Activities.insert({
+ userId,
+ username,
+ activityType: 'unjoinAssignee',
+ boardId: doc.boardId,
+ cardId: doc._id,
+ assigneeId,
+ listId: doc.listId,
+ swimlaneId: doc.swimlaneId,
+ });
+ }
+ }
+}
+
function cardLabels(userId, doc, fieldNames, modifier) {
if (!_.contains(fieldNames, 'labelIds')) return;
let labelId;
@@ -1556,6 +1696,7 @@ function cardRemover(userId, doc) {
const findDueCards = days => {
const seekDue = ($from, $to, activityType) => {
Cards.find({
+ archived: false,
dueAt: { $gte: $from, $lt: $to },
}).forEach(card => {
const username = Users.findOne(card.userId).username;
@@ -1576,18 +1717,38 @@ const findDueCards = days => {
const now = new Date(),
aday = 3600 * 24 * 1e3,
then = day => new Date(now.setHours(0, 0, 0, 0) + day * aday);
- seekDue(then(1), then(days), 'almostdue');
- seekDue(then(0), then(1), 'duenow');
- seekDue(then(-days), now, 'pastdue');
+ if (!days) return;
+ if (!days.map) days = [days];
+ days.map(day => {
+ let args = [];
+ if (day === 0) {
+ args = [then(0), then(1), 'duenow'];
+ } else if (day > 0) {
+ args = [then(1), then(day), 'almostdue'];
+ } else {
+ args = [then(day), now, 'pastdue'];
+ }
+ seekDue(...args);
+ });
};
const addCronJob = _.debounce(
Meteor.bindEnvironment(function findDueCardsDebounced() {
- const notifydays =
- parseInt(process.env.NOTIFY_DUE_DAYS_BEFORE_AND_AFTER, 10) || 2; // default as 2 days before and after
- if (!(notifydays > 0 && notifydays < 15)) {
- // notifying due is disabled
+ const envValue = process.env.NOTIFY_DUE_DAYS_BEFORE_AND_AFTER;
+ if (!envValue) {
return;
}
+ const notifydays = envValue
+ .split(',')
+ .map(value => {
+ const iValue = parseInt(value, 10);
+ if (!(iValue > 0 && iValue < 15)) {
+ // notifying due is disabled
+ return false;
+ } else {
+ return iValue;
+ }
+ })
+ .filter(Boolean);
const notifyitvl = process.env.NOTIFY_DUE_AT_HOUR_OF_DAY; //passed in the itvl has to be a number standing for the hour of current time
const defaultitvl = 8; // default every morning at 8am, if the passed env variable has parsing error use default
const itvl = parseInt(notifyitvl, 10) || defaultitvl;
@@ -1650,6 +1811,12 @@ if (Meteor.isServer) {
updateActivities(doc, fieldNames, modifier);
});
+ // Add a new activity if we add or remove a assignee to the card
+ Cards.before.update((userId, doc, fieldNames, modifier) => {
+ cardAssignees(userId, doc, fieldNames, modifier);
+ updateActivities(doc, fieldNames, modifier);
+ });
+
// Add a new activity if we add or remove a label to the card
Cards.before.update((userId, doc, fieldNames, modifier) => {
cardLabels(userId, doc, fieldNames, modifier);
@@ -1672,6 +1839,26 @@ if (Meteor.isServer) {
const oldvalue = doc[action] || '';
const activityType = `a-${action}`;
const card = Cards.findOne(doc._id);
+ const list = card.list();
+ if (list) {
+ // change list modifiedAt, when user modified the key values in timingaction array, if it's endAt, put the modifiedAt of list back to one year ago for sorting purpose
+ const modifiedAt = new Date(
+ new Date(value).getTime() -
+ (action === 'endAt' ? 365 * 24 * 3600 * 1e3 : 0),
+ ); // set it as 1 year before
+ const boardId = list.boardId;
+ Lists.direct.update(
+ {
+ _id: list._id,
+ },
+ {
+ $set: {
+ modifiedAt,
+ boardId,
+ },
+ },
+ );
+ }
const username = Users.findOne(userId).username;
const activity = {
userId,
@@ -1809,6 +1996,7 @@ if (Meteor.isServer) {
* @param {string} description the description of the new card
* @param {string} swimlaneId the swimlane ID of the new card
* @param {string} [members] the member IDs list of the new card
+ * @param {string} [assignees] the array of maximum one ID of assignee of the new card
* @return_type {_id: string}
*/
JsonRoutes.add('POST', '/api/boards/:boardId/lists/:listId/cards', function(
@@ -1830,6 +2018,7 @@ if (Meteor.isServer) {
_id: req.body.authorId,
});
const members = req.body.members || [req.body.authorId];
+ const assignees = req.body.assignees;
if (typeof check !== 'undefined') {
const id = Cards.direct.insert({
title: req.body.title,
@@ -1841,6 +2030,7 @@ if (Meteor.isServer) {
swimlaneId: req.body.swimlaneId,
sort: currentCards.count(),
members,
+ assignees,
});
JsonRoutes.sendResult(res, {
code: 200,
@@ -1892,6 +2082,7 @@ if (Meteor.isServer) {
* @param {string} [labelIds] the new list of label IDs attached to the card
* @param {string} [swimlaneId] the new swimlane ID of the card
* @param {string} [members] the new list of member IDs attached to the card
+ * @param {string} [assignees] the array of maximum one ID of assignee attached to the card
* @param {string} [requestedBy] the new requestedBy field of the card
* @param {string} [assignedBy] the new assignedBy field of the card
* @param {string} [receivedAt] the new receivedAt field of the card
@@ -2152,6 +2343,25 @@ if (Meteor.isServer) {
{ $set: { members: newmembers } },
);
}
+ if (req.body.hasOwnProperty('assignees')) {
+ let newassignees = req.body.assignees;
+ if (_.isString(newassignees)) {
+ if (newassignees === '') {
+ newassignees = null;
+ } else {
+ newassignees = [newassignees];
+ }
+ }
+ Cards.direct.update(
+ {
+ _id: paramCardId,
+ listId: paramListId,
+ boardId: paramBoardId,
+ archived: false,
+ },
+ { $set: { assignees: newassignees } },
+ );
+ }
if (req.body.hasOwnProperty('swimlaneId')) {
const newParamSwimlaneId = req.body.swimlaneId;
Cards.direct.update(
@@ -2194,14 +2404,14 @@ if (Meteor.isServer) {
const paramListId = req.params.listId;
const paramCardId = req.params.cardId;
+ const card = Cards.findOne({
+ _id: paramCardId,
+ });
Cards.direct.remove({
_id: paramCardId,
listId: paramListId,
boardId: paramBoardId,
});
- const card = Cards.find({
- _id: paramCardId,
- });
cardRemover(req.body.authorId, card);
JsonRoutes.sendResult(res, {
code: 200,
diff --git a/models/checklistItems.js b/models/checklistItems.js
index e6451fbf..7f3ab095 100644
--- a/models/checklistItems.js
+++ b/models/checklistItems.js
@@ -44,6 +44,8 @@ ChecklistItems.attachSchema(
autoValue() {
if (this.isInsert) {
return new Date();
+ } else if (this.isUpsert) {
+ return { $setOnInsert: new Date() };
} else {
this.unset();
}
diff --git a/models/checklists.js b/models/checklists.js
index f139192e..3b50cda6 100644
--- a/models/checklists.js
+++ b/models/checklists.js
@@ -35,6 +35,8 @@ Checklists.attachSchema(
autoValue() {
if (this.isInsert) {
return new Date();
+ } else if (this.isUpsert) {
+ return { $setOnInsert: new Date() };
} else {
this.unset();
}
@@ -274,6 +276,7 @@ if (Meteor.isServer) {
* @param {string} boardId the board ID
* @param {string} cardId the card ID
* @param {string} title the title of the new checklist
+ * @param {string} [items] the list of items on the new checklist
* @return_type {_id: string}
*/
JsonRoutes.add(
@@ -289,11 +292,19 @@ if (Meteor.isServer) {
sort: 0,
});
if (id) {
- req.body.items.forEach(function(item, idx) {
+ let items = req.body.items || [];
+ if (_.isString(items)) {
+ if (items === '') {
+ items = [];
+ } else {
+ items = [items];
+ }
+ }
+ items.forEach(function(item, idx) {
ChecklistItems.insert({
cardId: paramCardId,
checklistId: id,
- title: item.title,
+ title: item,
sort: idx,
});
});
diff --git a/models/customFields.js b/models/customFields.js
index 6b5697c1..cc798b16 100644
--- a/models/customFields.js
+++ b/models/customFields.js
@@ -78,6 +78,8 @@ CustomFields.attachSchema(
autoValue() {
if (this.isInsert) {
return new Date();
+ } else if (this.isUpsert) {
+ return { $setOnInsert: new Date() };
} else {
this.unset();
}
diff --git a/models/export.js b/models/export.js
index a69be970..cc979ce0 100644
--- a/models/export.js
+++ b/models/export.js
@@ -50,12 +50,18 @@ if (Meteor.isServer) {
});
}
+// exporter maybe is broken since Gridfs introduced, add fs and path
+
export class Exporter {
constructor(boardId) {
this._boardId = boardId;
}
build() {
+ const fs = Npm.require('fs');
+ const os = Npm.require('os');
+ const path = Npm.require('path');
+
const byBoard = { boardId: this._boardId };
const byBoardNoLinked = {
boardId: this._boardId,
@@ -106,7 +112,7 @@ export class Exporter {
);
result.subtaskItems.push(
...Cards.find({
- parentid: card._id,
+ parentId: card._id,
}).fetch(),
);
});
@@ -134,6 +140,11 @@ export class Exporter {
const getBase64Data = function(doc, callback) {
let buffer = new Buffer(0);
// callback has the form function (err, res) {}
+ const tmpFile = path.join(
+ os.tmpdir(),
+ `tmpexport${process.pid}${Math.random()}`,
+ );
+ const tmpWriteable = fs.createWriteStream(tmpFile);
const readStream = doc.createReadStream();
readStream.on('data', function(chunk) {
buffer = Buffer.concat([buffer, chunk]);
@@ -143,8 +154,12 @@ export class Exporter {
});
readStream.on('end', function() {
// done
+ fs.unlink(tmpFile, () => {
+ //ignored
+ });
callback(null, buffer.toString('base64'));
});
+ readStream.pipe(tmpWriteable);
};
const getBase64DataSync = Meteor.wrapAsync(getBase64Data);
result.attachments = Attachments.find(byBoard)
diff --git a/models/integrations.js b/models/integrations.js
index 0b2e08c6..dbf53b8e 100644
--- a/models/integrations.js
+++ b/models/integrations.js
@@ -63,6 +63,8 @@ Integrations.attachSchema(
autoValue() {
if (this.isInsert) {
return new Date();
+ } else if (this.isUpsert) {
+ return { $setOnInsert: new Date() };
} else {
this.unset();
}
@@ -88,16 +90,30 @@ Integrations.attachSchema(
},
}),
);
-
+Integrations.Const = {
+ GLOBAL_WEBHOOK_ID: '_global',
+ ONEWAY: 'outgoing-webhooks',
+ TWOWAY: 'bidirectional-webhooks',
+ get WEBHOOK_TYPES() {
+ return [this.ONEWAY, this.TWOWAY];
+ },
+};
+const permissionHelper = {
+ allow(userId, doc) {
+ const user = Users.findOne(userId);
+ const isAdmin = user && Meteor.user().isAdmin;
+ return isAdmin || allowIsBoardAdmin(userId, Boards.findOne(doc.boardId));
+ },
+};
Integrations.allow({
insert(userId, doc) {
- return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId));
+ return permissionHelper.allow(userId, doc);
},
update(userId, doc) {
- return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId));
+ return permissionHelper.allow(userId, doc);
},
remove(userId, doc) {
- return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId));
+ return permissionHelper.allow(userId, doc);
},
fetch: ['boardId'],
});
diff --git a/models/invitationCodes.js b/models/invitationCodes.js
index 75db5708..abb30f32 100644
--- a/models/invitationCodes.js
+++ b/models/invitationCodes.js
@@ -18,6 +18,8 @@ InvitationCodes.attachSchema(
autoValue() {
if (this.isInsert) {
return new Date();
+ } else if (this.isUpsert) {
+ return { $setOnInsert: new Date() };
} else {
this.unset();
}
diff --git a/models/lists.js b/models/lists.js
index e57849d7..f06b15b1 100644
--- a/models/lists.js
+++ b/models/lists.js
@@ -11,6 +11,15 @@ Lists.attachSchema(
*/
type: String,
},
+ starred: {
+ /**
+ * if a list is stared
+ * then we put it on the top
+ */
+ type: Boolean,
+ optional: true,
+ defaultValue: false,
+ },
archived: {
/**
* is the list archived
@@ -45,6 +54,8 @@ Lists.attachSchema(
autoValue() {
if (this.isInsert) {
return new Date();
+ } else if (this.isUpsert) {
+ return { $setOnInsert: new Date() };
} else {
this.unset();
}
@@ -79,10 +90,14 @@ Lists.attachSchema(
denyUpdate: false,
// eslint-disable-next-line consistent-return
autoValue() {
- if (this.isInsert || this.isUpsert || this.isUpdate) {
+ // this is redundant with updatedAt
+ /*if (this.isInsert || this.isUpsert || this.isUpdate) {
return new Date();
} else {
this.unset();
+ }*/
+ if (!this.isSet) {
+ return new Date();
}
},
},
@@ -250,6 +265,14 @@ Lists.helpers({
return this.type === 'template-list';
},
+ isStarred() {
+ return this.starred === true;
+ },
+
+ absoluteUrl() {
+ const card = Cards.findOne({ listId: this._id });
+ return card && card.absoluteUrl();
+ },
remove() {
Lists.remove({ _id: this._id });
},
@@ -259,6 +282,9 @@ Lists.mutations({
rename(title) {
return { $set: { title } };
},
+ star(enable = true) {
+ return { $set: { starred: !!enable } };
+ },
archive() {
if (this.isTemplateList()) {
diff --git a/models/org.js b/models/org.js
index ce6f377e..a24d829d 100644
--- a/models/org.js
+++ b/models/org.js
@@ -98,6 +98,8 @@ Org.attachSchema(
autoValue() {
if (this.isInsert) {
return new Date();
+ } else if (this.isUpsert) {
+ return { $setOnInsert: new Date() };
} else {
this.unset();
}
diff --git a/models/orgUser.js b/models/orgUser.js
index b671cb41..f310fa9c 100644
--- a/models/orgUser.js
+++ b/models/orgUser.js
@@ -49,6 +49,8 @@ OrgUser.attachSchema(
autoValue() {
if (this.isInsert) {
return new Date();
+ } else if (this.isUpsert) {
+ return { $setOnInsert: new Date() };
} else {
this.unset();
}
diff --git a/models/rules.js b/models/rules.js
index 202071fc..2e6729cc 100644
--- a/models/rules.js
+++ b/models/rules.js
@@ -27,6 +27,8 @@ Rules.attachSchema(
autoValue() {
if (this.isInsert) {
return new Date();
+ } else if (this.isUpsert) {
+ return { $setOnInsert: new Date() };
} else {
this.unset();
}
diff --git a/models/settings.js b/models/settings.js
index 4a0359d5..8eb02c5b 100644
--- a/models/settings.js
+++ b/models/settings.js
@@ -60,6 +60,8 @@ Settings.attachSchema(
autoValue() {
if (this.isInsert) {
return new Date();
+ } else if (this.isUpsert) {
+ return { $setOnInsert: new Date() };
} else {
this.unset();
}
diff --git a/models/swimlanes.js b/models/swimlanes.js
index 769aaed3..aa7016f7 100644
--- a/models/swimlanes.js
+++ b/models/swimlanes.js
@@ -38,6 +38,8 @@ Swimlanes.attachSchema(
autoValue() {
if (this.isInsert) {
return new Date();
+ } else if (this.isUpsert) {
+ return { $setOnInsert: new Date() };
} else {
this.unset();
}
@@ -172,6 +174,25 @@ Swimlanes.helpers({
},
lists() {
+ //currentUser = Meteor.user();
+ //if (currentUser) {
+ // enabled = Meteor.user().hasSortBy();
+ //}
+ //return enabled ? this.newestLists() : this.draggableLists();
+ return this.draggableLists();
+ },
+ newestLists() {
+ // sorted lists from newest to the oldest, by its creation date or its cards' last modification date
+ return Lists.find(
+ {
+ boardId: this.boardId,
+ swimlaneId: { $in: [this._id, ''] },
+ archived: false,
+ },
+ { sort: { modifiedAt: -1 } },
+ );
+ },
+ draggableLists() {
return Lists.find(
{
boardId: this.boardId,
diff --git a/models/triggers.js b/models/triggers.js
index 45f5e6fc..a95b1235 100644
--- a/models/triggers.js
+++ b/models/triggers.js
@@ -12,6 +12,16 @@ Triggers.mutations({
},
});
+Triggers.before.insert((userId, doc) => {
+ doc.createdAt = new Date();
+ doc.updatedAt = doc.createdAt;
+});
+
+Triggers.before.update((userId, doc, fieldNames, modifier) => {
+ modifier.$set = modifier.$set || {};
+ modifier.$set.updatedAt = new Date();
+});
+
Triggers.allow({
insert(userId, doc) {
return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId));
diff --git a/models/unsavedEdits.js b/models/unsavedEdits.js
index 89418bfb..81331598 100644
--- a/models/unsavedEdits.js
+++ b/models/unsavedEdits.js
@@ -29,6 +29,8 @@ UnsavedEditCollection.attachSchema(
autoValue() {
if (this.isInsert) {
return new Date();
+ } else if (this.isUpsert) {
+ return { $setOnInsert: new Date() };
} else {
this.unset();
}
diff --git a/models/users.js b/models/users.js
index 55d85e07..83a224ba 100644
--- a/models/users.js
+++ b/models/users.js
@@ -4,6 +4,16 @@ const isSandstorm =
Meteor.settings && Meteor.settings.public && Meteor.settings.public.sandstorm;
Users = Meteor.users;
+const allowedSortValues = [
+ '-modifiedAt',
+ 'modifiedAt',
+ '-title',
+ 'title',
+ '-sort',
+ 'sort',
+];
+const defaultSortBy = allowedSortValues[0];
+
/**
* A User in wekan
*/
@@ -54,6 +64,8 @@ Users.attachSchema(
autoValue() {
if (this.isInsert) {
return new Date();
+ } else if (this.isUpsert) {
+ return { $setOnInsert: new Date() };
} else {
this.unset();
}
@@ -107,6 +119,13 @@ Users.attachSchema(
type: String,
optional: true,
},
+ 'profile.showDesktopDragHandles': {
+ /**
+ * does the user want to hide system messages?
+ */
+ type: Boolean,
+ optional: true,
+ },
'profile.hiddenSystemMessages': {
/**
* does the user want to hide system messages?
@@ -182,6 +201,15 @@ Users.attachSchema(
'board-view-cal',
],
},
+ 'profile.listSortBy': {
+ /**
+ * default sort list for user
+ */
+ type: String,
+ optional: true,
+ defaultValue: defaultSortBy,
+ allowedValues: allowedSortValues,
+ },
'profile.templatesBoardId': {
/**
* Reference to the templates board
@@ -356,6 +384,31 @@ Users.helpers({
return _.contains(invitedBoards, boardId);
},
+ _getListSortBy() {
+ const profile = this.profile || {};
+ const sortBy = profile.listSortBy || defaultSortBy;
+ const keyPattern = /^(-{0,1})(.*$)/;
+ const ret = [];
+ if (keyPattern.exec(sortBy)) {
+ ret[0] = RegExp.$2;
+ ret[1] = RegExp.$1 ? -1 : 1;
+ }
+ return ret;
+ },
+ hasSortBy() {
+ // if use doesn't have dragHandle, then we can let user to choose sort list by different order
+ return !this.hasShowDesktopDragHandles();
+ },
+ getListSortBy() {
+ return this._getListSortBy()[0];
+ },
+ getListSortTypes() {
+ return allowedSortValues;
+ },
+ getListSortByDirection() {
+ return this._getListSortBy()[1];
+ },
+
hasTag(tag) {
const { tags = [] } = this.profile || {};
return _.contains(tags, tag);
@@ -366,6 +419,11 @@ Users.helpers({
return _.contains(notifications, activityId);
},
+ hasShowDesktopDragHandles() {
+ const profile = this.profile || {};
+ return profile.showDesktopDragHandles || false;
+ },
+
hasHiddenSystemMessages() {
const profile = this.profile || {};
return profile.hiddenSystemMessages || false;
@@ -471,6 +529,21 @@ Users.mutations({
else this.addTag(tag);
},
+ setListSortBy(value) {
+ return {
+ $set: {
+ 'profile.listSortBy': value,
+ },
+ };
+ },
+ toggleDesktopHandles(value = false) {
+ return {
+ $set: {
+ 'profile.showDesktopDragHandles': !value,
+ },
+ };
+ },
+
toggleSystem(value = false) {
return {
$set: {
@@ -539,6 +612,7 @@ Users.mutations({
Meteor.methods({
setUsername(username, userId) {
check(username, String);
+ check(userId, String);
const nUsersWithUsername = Users.find({ username }).count();
if (nUsersWithUsername > 0) {
throw new Meteor.Error('username-already-taken');
@@ -546,6 +620,14 @@ Meteor.methods({
Users.update(userId, { $set: { username } });
}
},
+ setListSortBy(value) {
+ check(value, String);
+ Meteor.user().setListSortBy(value);
+ },
+ toggleDesktopDragHandles() {
+ const user = Meteor.user();
+ user.toggleDesktopHandles(user.hasShowDesktopDragHandles());
+ },
toggleSystemMessages() {
const user = Meteor.user();
user.toggleSystem(user.hasHiddenSystemMessages());
@@ -773,6 +855,9 @@ if (Meteor.isServer) {
if (Meteor.isServer) {
// Let mongoDB ensure username unicity
Meteor.startup(() => {
+ allowedSortValues.forEach(value => {
+ Lists._collection._ensureIndex(value);
+ });
Users._collection._ensureIndex({ modifiedAt: -1 });
Users._collection._ensureIndex(
{
diff --git a/openapi/generate_openapi.py b/openapi/generate_openapi.py
index 1bf04c15..54526416 100644
--- a/openapi/generate_openapi.py
+++ b/openapi/generate_openapi.py
@@ -3,9 +3,15 @@
import argparse
import esprima
import json
+import logging
import os
import re
import sys
+import traceback
+
+
+logger = logging.getLogger(__name__)
+err_context = 3
def get_req_body_elems(obj, elems):
@@ -156,16 +162,25 @@ class EntryPoint(object):
def compute_path(self):
return self._path.value.rstrip('/')
- def error(self, message):
+ def log(self, message, level):
if self._raw_doc is None:
- sys.stderr.write('in {},\n'.format(self.schema.name))
- sys.stderr.write('{}\n'.format(message))
+ logger.log(level, 'in {},'.format(self.schema.name))
+ logger.log(level, message)
return
- sys.stderr.write('in {}, lines {}-{}\n'.format(self.schema.name,
- self._raw_doc.loc.start.line,
- self._raw_doc.loc.end.line))
- sys.stderr.write('{}\n'.format(self._raw_doc.value))
- sys.stderr.write('{}\n'.format(message))
+ logger.log(level, 'in {}, lines {}-{}'.format(self.schema.name,
+ self._raw_doc.loc.start.line,
+ self._raw_doc.loc.end.line))
+ logger.log(level, self._raw_doc.value)
+ logger.log(level, message)
+
+ def error(self, message):
+ return self.log(message, logging.ERROR)
+
+ def warn(self, message):
+ return self.log(message, logging.WARNING)
+
+ def info(self, message):
+ return self.log(message, logging.INFO)
@property
def doc(self):
@@ -235,7 +250,7 @@ class EntryPoint(object):
if name.startswith('{'):
param_type = name.strip('{}')
if param_type not in ['string', 'number', 'boolean', 'integer', 'array', 'file']:
- self.error('Warning, unknown type {}\n allowed values: string, number, boolean, integer, array, file'.format(param_type))
+ self.warn('unknown type {}\n allowed values: string, number, boolean, integer, array, file'.format(param_type))
try:
name, desc = desc.split(maxsplit=1)
except ValueError:
@@ -248,7 +263,7 @@ class EntryPoint(object):
# we should not have 2 identical parameter names
if tag in params:
- self.error('Warning, overwriting parameter {}'.format(name))
+ self.warn('overwriting parameter {}'.format(name))
params[name] = (param_type, optional, desc)
@@ -278,7 +293,7 @@ class EntryPoint(object):
# we should not have 2 identical tags but @param or @tag
if tag in self._doc:
- self.error('Warning, overwriting tag {}'.format(tag))
+ self.warn('overwriting tag {}'.format(tag))
self._doc[tag] = data
@@ -301,7 +316,7 @@ class EntryPoint(object):
current_data = ''
line = data
else:
- self.error('Unknown tag {}, ignoring'.format(tag))
+ self.info('Unknown tag {}, ignoring'.format(tag))
current_data += line + '\n'
@@ -441,7 +456,7 @@ class EntryPoint(object):
class SchemaProperty(object):
- def __init__(self, statement, schema):
+ def __init__(self, statement, schema, context):
self.schema = schema
self.statement = statement
self.name = statement.key.name or statement.key.value
@@ -449,22 +464,75 @@ class SchemaProperty(object):
self.blackbox = False
self.required = True
for p in statement.value.properties:
- if p.key.name == 'type':
- if p.value.type == 'Identifier':
- self.type = p.value.name.lower()
- elif p.value.type == 'ArrayExpression':
- self.type = 'array'
- self.elements = [e.name.lower() for e in p.value.elements]
-
- elif p.key.name == 'allowedValues':
- self.type = 'enum'
- self.enum = [e.value.lower() for e in p.value.elements]
-
- elif p.key.name == 'blackbox':
- self.blackbox = True
-
- elif p.key.name == 'optional' and p.value.value:
- self.required = False
+ try:
+ if p.key.name == 'type':
+ if p.value.type == 'Identifier':
+ self.type = p.value.name.lower()
+ elif p.value.type == 'ArrayExpression':
+ self.type = 'array'
+ self.elements = [e.name.lower() for e in p.value.elements]
+
+ elif p.key.name == 'allowedValues':
+ self.type = 'enum'
+ if p.value.type == 'ArrayExpression':
+ self.enum = [e.value.lower() for e in p.value.elements]
+ elif p.value.type == 'Identifier':
+ # tree wide lookout for the identifier
+ def find_variable(elem, match):
+ if isinstance(elem, list):
+ for value in elem:
+ ret = find_variable(value, match)
+ if ret is not None:
+ return ret
+
+ try:
+ items = elem.items()
+ except AttributeError:
+ return None
+ except TypeError:
+ return None
+
+ if (elem.type == 'VariableDeclarator' and
+ elem.id.name == match):
+ return elem
+
+ for type, value in items:
+ ret = find_variable(value, match)
+ if ret is not None:
+ return ret
+
+ return None
+
+ elem = find_variable(context.program.body, p.value.name)
+
+ if elem.init.type != 'ArrayExpression':
+ raise TypeError('can not find "{}"'.format(p.value.name))
+
+ self.enum = [e.value.lower() for e in elem.init.elements]
+
+ elif p.key.name == 'blackbox':
+ self.blackbox = True
+
+ elif p.key.name == 'optional' and p.value.value:
+ self.required = False
+ except Exception:
+ input = ''
+ for line in range(p.loc.start.line - err_context, p.loc.end.line + 1 + err_context):
+ if line < p.loc.start.line or line > p.loc.end.line:
+ input += '. '
+ else:
+ input += '>>'
+ input += context.text_at(line, line)
+ input = ''.join(input)
+ logger.error('{}:{}-{} can not parse {}:\n{}'.format(context.path,
+ p.loc.start.line,
+ p.loc.end.line,
+ p.type,
+ input))
+ logger.error('esprima tree:\n{}'.format(p))
+
+ logger.error(traceback.format_exc())
+ sys.exit(1)
self._doc = None
self._raw_doc = None
@@ -574,7 +642,7 @@ class SchemaProperty(object):
class Schemas(object):
- def __init__(self, data=None, jsdocs=None, name=None):
+ def __init__(self, context, data=None, jsdocs=None, name=None):
self.name = name
self._data = data
self.fields = None
@@ -585,7 +653,7 @@ class Schemas(object):
self.name = data.expression.callee.object.name
content = data.expression.arguments[0].arguments[0]
- self.fields = [SchemaProperty(p, self) for p in content.properties]
+ self.fields = [SchemaProperty(p, self, context) for p in content.properties]
self._doc = None
self._raw_doc = None
@@ -665,6 +733,27 @@ class Schemas(object):
print(' - {}'.format(f))
+class Context(object):
+ def __init__(self, path):
+ self.path = path
+
+ with open(path) as f:
+ self._txt = f.readlines()
+
+ data = ''.join(self._txt)
+ self.program = esprima.parseModule(data,
+ options={
+ 'comment': True,
+ 'loc': True
+ })
+
+ def txt_for(self, statement):
+ return self.text_at(statement.loc.start.line, statement.loc.end.line)
+
+ def text_at(self, begin, end):
+ return ''.join(self._txt[begin - 1:end])
+
+
def parse_schemas(schemas_dir):
schemas = {}
@@ -674,17 +763,19 @@ def parse_schemas(schemas_dir):
files.sort()
for filename in files:
path = os.path.join(root, filename)
- with open(path) as f:
- data = ''.join(f.readlines())
- try:
- # if the file failed, it's likely it doesn't contain a schema
- program = esprima.parseModule(data, options={'comment': True, 'loc': True})
- except:
- continue
+ try:
+ # if the file failed, it's likely it doesn't contain a schema
+ context = Context(path)
+ except:
+ continue
+
+ program = context.program
- current_schema = None
- jsdocs = [c for c in program.comments
- if c.type == 'Block' and c.value.startswith('*\n')]
+ current_schema = None
+ jsdocs = [c for c in program.comments
+ if c.type == 'Block' and c.value.startswith('*\n')]
+
+ try:
for statement in program.body:
@@ -697,7 +788,7 @@ def parse_schemas(schemas_dir):
statement.expression.arguments[0].type == 'NewExpression' and
statement.expression.arguments[0].callee.name == 'SimpleSchema'):
- schema = Schemas(statement, jsdocs)
+ schema = Schemas(context, statement, jsdocs)
current_schema = schema.name
schemas[current_schema] = schema
@@ -717,7 +808,7 @@ def parse_schemas(schemas_dir):
if len(data) > 0:
if current_schema is None:
current_schema = filename
- schemas[current_schema] = Schemas(name=current_schema)
+ schemas[current_schema] = Schemas(context, name=current_schema)
schema_entry_points = [EntryPoint(schemas[current_schema], d)
for d in data]
@@ -730,6 +821,13 @@ def parse_schemas(schemas_dir):
if j.loc.end.line + 1 == operation.loc.start.line]
if bool(jsdoc):
entry_point.doc = jsdoc[0]
+ except TypeError:
+ logger.warning(context.txt_for(statement))
+ logger.error('{}:{}-{} can not parse {}'.format(path,
+ statement.loc.start.line,
+ statement.loc.end.line,
+ statement.type))
+ raise
return schemas, entry_points
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..2125bdc2
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,5184 @@
+{
+ "name": "wekan",
+ "version": "v3.55.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+ "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
+ "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/runtime": {
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.2.tgz",
+ "integrity": "sha512-EXxN64agfUqqIGeEjI5dL5z0Sw0ZwWo1mLTi4mQowCZ42O59b7DRpZAnTC6OqdF28wMBMFKNb/4uFGrVaigSpg==",
+ "requires": {
+ "regenerator-runtime": "^0.13.2"
+ }
+ },
+ "@samverschueren/stream-to-observable": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz",
+ "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==",
+ "dev": true,
+ "requires": {
+ "any-observable": "^0.3.0"
+ }
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+ },
+ "acorn": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz",
+ "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz",
+ "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==",
+ "dev": true
+ },
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "requires": {
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
+ }
+ },
+ "ajv-keywords": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+ "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz",
+ "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.5.2"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "any-observable": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz",
+ "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==",
+ "dev": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
+ },
+ "are-we-there-yet": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
+ "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-includes": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
+ "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.7.0"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
+ }
+ }
+ },
+ "backoff": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz",
+ "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=",
+ "requires": {
+ "precond": "0.2"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "base64-js": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
+ },
+ "bcrypt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-3.0.6.tgz",
+ "integrity": "sha512-taA5bCTfXe7FUjKroKky9EXpdhkVvhE5owfxfLYodbrAR1Ul3juLmIQmIQBK4L9a5BuUcE6cqmwT+Da20lF9tg==",
+ "requires": {
+ "nan": "2.13.2",
+ "node-pre-gyp": "0.12.0"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "bson": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/bson/-/bson-4.0.2.tgz",
+ "integrity": "sha512-rBdCxMBCg2aR420e1oKUejjcuPZLTibA7zEhWAlliFWEwzuBCC9Dkp5r7VFFIQB2t1WVsvTbohry575mc7Xw5A==",
+ "requires": {
+ "buffer": "^5.1.0",
+ "long": "^4.0.0"
+ }
+ },
+ "buffer": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.3.0.tgz",
+ "integrity": "sha512-XykNc84nIOC32vZ9euOKbmGAP69JUkXDtBQfLq88c8/6J/gZi/t14A+l/p/9EM2TcT5xNC1MKPCrvO3LVUpVPw==",
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
+ },
+ "bunyan": {
+ "version": "1.8.12",
+ "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz",
+ "integrity": "sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=",
+ "requires": {
+ "dtrace-provider": "~0.8",
+ "moment": "^2.10.6",
+ "mv": "~2",
+ "safe-json-stringify": "~1"
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
+ "caller-callsite": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
+ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
+ "dev": true,
+ "requires": {
+ "callsites": "^2.0.0"
+ },
+ "dependencies": {
+ "callsites": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
+ "dev": true
+ }
+ }
+ },
+ "caller-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
+ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
+ "dev": true,
+ "requires": {
+ "caller-callsite": "^2.0.0"
+ }
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+ "dev": true
+ },
+ "chownr": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz",
+ "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A=="
+ },
+ "circular-json": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+ "dev": true
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^3.1.0"
+ }
+ },
+ "cli-truncate": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz",
+ "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=",
+ "dev": true,
+ "requires": {
+ "slice-ansi": "0.0.4",
+ "string-width": "^1.0.1"
+ },
+ "dependencies": {
+ "slice-ansi": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
+ "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
+ "dev": true
+ }
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "commander": {
+ "version": "2.20.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
+ "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ=="
+ },
+ "common-tags": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz",
+ "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
+ },
+ "contains-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
+ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+ "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A=="
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "cosmiconfig": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
+ "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
+ "dev": true,
+ "requires": {
+ "import-fresh": "^2.0.0",
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.13.1",
+ "parse-json": "^4.0.0"
+ },
+ "dependencies": {
+ "import-fresh": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+ "dev": true,
+ "requires": {
+ "caller-path": "^2.0.0",
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+ "dev": true
+ }
+ }
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "cssfilter": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz",
+ "integrity": "sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4="
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "date-fns": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz",
+ "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "dedent": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
+ "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
+ },
+ "dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+ "dev": true
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "dtrace-provider": {
+ "version": "0.8.7",
+ "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz",
+ "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ=",
+ "optional": true,
+ "requires": {
+ "nan": "^2.10.0"
+ }
+ },
+ "elegant-spinner": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz",
+ "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
+ "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.0",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "is-callable": "^1.1.4",
+ "is-regex": "^1.0.4",
+ "object-keys": "^1.0.12"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
+ "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "es6-promise": {
+ "version": "4.2.8",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
+ "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "eslint": {
+ "version": "5.16.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz",
+ "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "ajv": "^6.9.1",
+ "chalk": "^2.1.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "eslint-scope": "^4.0.3",
+ "eslint-utils": "^1.3.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^5.0.1",
+ "esquery": "^1.0.1",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^5.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.7.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^6.2.2",
+ "js-yaml": "^3.13.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.11",
+ "minimatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "progress": "^2.0.0",
+ "regexpp": "^2.0.1",
+ "semver": "^5.5.1",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "^2.0.1",
+ "table": "^5.2.3",
+ "text-table": "^0.2.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.10.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+ "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "eslint-config-meteor": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/eslint-config-meteor/-/eslint-config-meteor-0.0.9.tgz",
+ "integrity": "sha1-a+IZQguko+oCPbMKhm5g70h2Uvo=",
+ "dev": true
+ },
+ "eslint-config-prettier": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-3.6.0.tgz",
+ "integrity": "sha512-ixJ4U3uTLXwJts4rmSVW/lMXjlGwCijhBJHk8iVqKKSifeI0qgFEfWl8L63isfc8Od7EiBALF6BX3jKLluf/jQ==",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^6.0.0"
+ }
+ },
+ "eslint-import-resolver-meteor": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-meteor/-/eslint-import-resolver-meteor-0.4.0.tgz",
+ "integrity": "sha1-yGhjhAghIIz4EzxczlGQnCamFWk=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.0.1",
+ "resolve": "^1.1.6"
+ }
+ },
+ "eslint-import-resolver-node": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz",
+ "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==",
+ "dev": true,
+ "requires": {
+ "debug": "^2.6.9",
+ "resolve": "^1.5.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "eslint-module-utils": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz",
+ "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==",
+ "dev": true,
+ "requires": {
+ "debug": "^2.6.8",
+ "pkg-dir": "^2.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.18.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz",
+ "integrity": "sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.0.3",
+ "contains-path": "^0.1.0",
+ "debug": "^2.6.9",
+ "doctrine": "1.5.0",
+ "eslint-import-resolver-node": "^0.3.2",
+ "eslint-module-utils": "^2.4.0",
+ "has": "^1.0.3",
+ "minimatch": "^3.0.4",
+ "object.values": "^1.1.0",
+ "read-pkg-up": "^2.0.0",
+ "resolve": "^1.11.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
+ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "isarray": "^1.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-meteor": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-meteor/-/eslint-plugin-meteor-5.2.0.tgz",
+ "integrity": "sha512-bHzs/0BwHdKcBbX7tYrSnBaMG+1i2f1wy8k6H/sBBsERD/yifmBUrNLiPyZkIvyVUeI8OaZw8U9fsMvLP5GhIg==",
+ "dev": true,
+ "requires": {
+ "invariant": "2.2.4"
+ }
+ },
+ "eslint-plugin-prettier": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.0.tgz",
+ "integrity": "sha512-XWX2yVuwVNLOUhQijAkXz+rMPPoCr7WFiAl8ig6I7Xn+pPVhDhzg4DxHpmbeb0iqjO9UronEA3Tb09ChnFVHHA==",
+ "dev": true,
+ "requires": {
+ "prettier-linter-helpers": "^1.0.0"
+ }
+ },
+ "eslint-scope": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-utils": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz",
+ "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.0.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+ "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
+ "dev": true
+ },
+ "espree": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz",
+ "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==",
+ "dev": true,
+ "requires": {
+ "acorn": "^6.0.7",
+ "acorn-jsx": "^5.0.0",
+ "eslint-visitor-keys": "^1.0.0"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.0.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.1.0"
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "execa": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.9.0.tgz",
+ "integrity": "sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "external-editor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+ "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "extsprintf": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.2.0.tgz",
+ "integrity": "sha1-WtlGwi9bMrp/jNdCZxHG6KP8JSk="
+ },
+ "fast-deep-equal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
+ },
+ "fast-diff": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
+ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "figures": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.0.0.tgz",
+ "integrity": "sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
+ "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^2.0.1"
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "find-parent-dir": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz",
+ "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=",
+ "dev": true
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+ "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
+ "dev": true,
+ "requires": {
+ "flatted": "^2.0.0",
+ "rimraf": "2.6.3",
+ "write": "1.0.3"
+ }
+ },
+ "flatted": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
+ "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==",
+ "dev": true
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fs-minipass": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz",
+ "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==",
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "get-own-enumerable-property-symbols": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz",
+ "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==",
+ "dev": true
+ },
+ "get-stdin": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz",
+ "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+ "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.1.tgz",
+ "integrity": "sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw==",
+ "dev": true
+ },
+ "gridfs-stream": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/gridfs-stream/-/gridfs-stream-0.5.3.tgz",
+ "integrity": "sha1-wIlnKPo+qD9fo8nO1GGvt6A20Uk="
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
+ "dev": true
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.8.4",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz",
+ "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==",
+ "dev": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ieee754": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
+ "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "import-fresh": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz",
+ "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ }
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
+ },
+ "inquirer": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.1.tgz",
+ "integrity": "sha512-uxNHBeQhRXIoHWTSNYUFhQVrHYFThIt6IVo2fFmSe8aBwdR3/w6b58hJpiL/fMukFkvGzjg+hSxFtwvVmKZmXw==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^2.4.2",
+ "cli-cursor": "^3.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^3.0.0",
+ "lodash": "^4.17.15",
+ "mute-stream": "0.0.8",
+ "run-async": "^2.2.0",
+ "rxjs": "^6.4.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^5.1.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.1.0.tgz",
+ "integrity": "sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^5.2.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+ "dev": true
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-directory": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+ "dev": true
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "dev": true
+ },
+ "is-observable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz",
+ "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==",
+ "dev": true,
+ "requires": {
+ "symbol-observable": "^1.1.0"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1"
+ }
+ },
+ "is-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
+ "dev": true
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "is-symbol": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
+ "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.0"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "jest-get-type": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz",
+ "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==",
+ "dev": true
+ },
+ "jest-validate": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz",
+ "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1",
+ "jest-get-type": "^22.1.0",
+ "leven": "^2.1.0",
+ "pretty-format": "^23.6.0"
+ }
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "ldap-filter": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/ldap-filter/-/ldap-filter-0.2.2.tgz",
+ "integrity": "sha1-8rhCvguG2jNSeYUFsx68rlkNd9A=",
+ "requires": {
+ "assert-plus": "0.1.5"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz",
+ "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA="
+ }
+ }
+ },
+ "ldapjs": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/ldapjs/-/ldapjs-1.0.2.tgz",
+ "integrity": "sha1-VE/3Ayt7g8aPBwEyjZKXqmlDQPk=",
+ "requires": {
+ "asn1": "0.2.3",
+ "assert-plus": "^1.0.0",
+ "backoff": "^2.5.0",
+ "bunyan": "^1.8.3",
+ "dashdash": "^1.14.0",
+ "dtrace-provider": "~0.8",
+ "ldap-filter": "0.2.2",
+ "once": "^1.4.0",
+ "vasync": "^1.6.4",
+ "verror": "^1.8.1"
+ }
+ },
+ "leven": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz",
+ "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "lint-staged": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-7.3.0.tgz",
+ "integrity": "sha512-AXk40M9DAiPi7f4tdJggwuKIViUplYtVj1os1MVEteW7qOkU50EOehayCfO9TsoGK24o/EsWb41yrEgfJDDjCw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.3.1",
+ "commander": "^2.14.1",
+ "cosmiconfig": "^5.0.2",
+ "debug": "^3.1.0",
+ "dedent": "^0.7.0",
+ "execa": "^0.9.0",
+ "find-parent-dir": "^0.3.0",
+ "is-glob": "^4.0.0",
+ "is-windows": "^1.0.2",
+ "jest-validate": "^23.5.0",
+ "listr": "^0.14.1",
+ "lodash": "^4.17.5",
+ "log-symbols": "^2.2.0",
+ "micromatch": "^3.1.8",
+ "npm-which": "^3.0.1",
+ "p-map": "^1.1.1",
+ "path-is-inside": "^1.0.2",
+ "pify": "^3.0.0",
+ "please-upgrade-node": "^3.0.2",
+ "staged-git-files": "1.1.1",
+ "string-argv": "^0.0.2",
+ "stringify-object": "^3.2.2"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "listr": {
+ "version": "0.14.3",
+ "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz",
+ "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==",
+ "dev": true,
+ "requires": {
+ "@samverschueren/stream-to-observable": "^0.3.0",
+ "is-observable": "^1.1.0",
+ "is-promise": "^2.1.0",
+ "is-stream": "^1.1.0",
+ "listr-silent-renderer": "^1.1.1",
+ "listr-update-renderer": "^0.5.0",
+ "listr-verbose-renderer": "^0.5.0",
+ "p-map": "^2.0.0",
+ "rxjs": "^6.3.3"
+ },
+ "dependencies": {
+ "p-map": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
+ "dev": true
+ }
+ }
+ },
+ "listr-silent-renderer": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz",
+ "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=",
+ "dev": true
+ },
+ "listr-update-renderer": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz",
+ "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "cli-truncate": "^0.2.1",
+ "elegant-spinner": "^1.0.1",
+ "figures": "^1.7.0",
+ "indent-string": "^3.0.0",
+ "log-symbols": "^1.0.2",
+ "log-update": "^2.3.0",
+ "strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "figures": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5",
+ "object-assign": "^4.1.0"
+ }
+ },
+ "log-symbols": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
+ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "listr-verbose-renderer": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz",
+ "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.1",
+ "cli-cursor": "^2.1.0",
+ "date-fns": "^1.27.2",
+ "figures": "^2.0.0"
+ },
+ "dependencies": {
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ }
+ }
+ },
+ "load-json-file": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
+ "dev": true
+ },
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "lodash.unescape": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz",
+ "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1"
+ }
+ },
+ "log-update": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz",
+ "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "cli-cursor": "^2.0.0",
+ "wrap-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "ansi-escapes": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ }
+ }
+ },
+ "loglevel": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.3.tgz",
+ "integrity": "sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA==",
+ "dev": true
+ },
+ "loglevel-colored-level-prefix": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz",
+ "integrity": "sha1-akAhj9x64V/HbD0PPmdsRlOIYD4=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "loglevel": "^1.4.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "long": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
+ "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ },
+ "dependencies": {
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ }
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "memory-pager": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
+ "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
+ "optional": true
+ },
+ "meteor-node-stubs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-0.4.1.tgz",
+ "integrity": "sha512-UO2OStvLOKoApmOdIP5eCqoLaa/ritMXRg4ffJVdkNLEsczzPvTjgC0Mxk4cM4R8MZkwll90FYgjDf5qUTJdMA==",
+ "requires": {
+ "assert": "^1.4.1",
+ "browserify-zlib": "^0.1.4",
+ "buffer": "^4.9.1",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "^1.0.0",
+ "crypto-browserify": "^3.11.0",
+ "domain-browser": "^1.1.7",
+ "events": "^1.1.1",
+ "https-browserify": "0.0.1",
+ "os-browserify": "^0.2.1",
+ "path-browserify": "0.0.0",
+ "process": "^0.11.9",
+ "punycode": "^1.4.1",
+ "querystring-es3": "^0.2.1",
+ "readable-stream": "^2.3.6",
+ "stream-browserify": "^2.0.1",
+ "stream-http": "^2.8.0",
+ "string_decoder": "^1.1.0",
+ "timers-browserify": "^1.4.2",
+ "tty-browserify": "0.0.0",
+ "url": "^0.11.0",
+ "util": "^0.10.3",
+ "vm-browserify": "0.0.4"
+ },
+ "dependencies": {
+ "asn1.js": {
+ "version": "4.10.1",
+ "bundled": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "assert": {
+ "version": "1.4.1",
+ "bundled": true,
+ "requires": {
+ "util": "0.10.3"
+ }
+ },
+ "base64-js": {
+ "version": "1.3.0",
+ "bundled": true
+ },
+ "bn.js": {
+ "version": "4.11.8",
+ "bundled": true
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "browserify-aes": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "bundled": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "bundled": true,
+ "requires": {
+ "bn.js": "^4.1.1",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.2",
+ "elliptic": "^6.0.0",
+ "inherits": "^2.0.1",
+ "parse-asn1": "^5.0.0"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.1.4",
+ "bundled": true,
+ "requires": {
+ "pako": "~0.2.0"
+ }
+ },
+ "buffer": {
+ "version": "4.9.1",
+ "bundled": true,
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "bundled": true
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "bundled": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "date-now": "^0.1.4"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "create-ecdh": {
+ "version": "4.0.3",
+ "bundled": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "bundled": true,
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "bundled": true,
+ "requires": {
+ "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"
+ }
+ },
+ "date-now": {
+ "version": "0.1.4",
+ "bundled": true
+ },
+ "des.js": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "bundled": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
+ "domain-browser": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "elliptic": {
+ "version": "6.4.0",
+ "bundled": true,
+ "requires": {
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.0"
+ }
+ },
+ "events": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "hash-base": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "hash.js": {
+ "version": "1.1.3",
+ "bundled": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true
+ }
+ }
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "https-browserify": {
+ "version": "0.0.1",
+ "bundled": true
+ },
+ "ieee754": {
+ "version": "1.1.11",
+ "bundled": true
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "bundled": true
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "md5.js": {
+ "version": "1.3.4",
+ "bundled": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "bundled": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ }
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "os-browserify": {
+ "version": "0.2.1",
+ "bundled": true
+ },
+ "pako": {
+ "version": "0.2.9",
+ "bundled": true
+ },
+ "parse-asn1": {
+ "version": "5.1.1",
+ "bundled": true,
+ "requires": {
+ "asn1.js": "^4.0.0",
+ "browserify-aes": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3"
+ }
+ },
+ "path-browserify": {
+ "version": "0.0.0",
+ "bundled": true
+ },
+ "pbkdf2": {
+ "version": "3.0.16",
+ "bundled": true,
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "process": {
+ "version": "0.11.10",
+ "bundled": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "public-encrypt": {
+ "version": "4.0.2",
+ "bundled": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "bundled": true
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "bundled": true
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "bundled": true
+ },
+ "randombytes": {
+ "version": "2.0.6",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.4",
+ "bundled": true,
+ "requires": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "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": {
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true
+ }
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "bundled": true
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "bundled": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "stream-browserify": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "stream-http": {
+ "version": "2.8.1",
+ "bundled": true,
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.3",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "timers-browserify": {
+ "version": "1.4.2",
+ "bundled": true,
+ "requires": {
+ "process": "~0.11.0"
+ }
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "bundled": true
+ },
+ "url": {
+ "version": "0.11.0",
+ "bundled": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "bundled": true
+ }
+ }
+ },
+ "util": {
+ "version": "0.10.3",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "bundled": true,
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "bundled": true
+ }
+ }
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ },
+ "minipass": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
+ "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
+ "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "moment": {
+ "version": "2.24.0",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
+ "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==",
+ "optional": true
+ },
+ "mongodb": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.3.3.tgz",
+ "integrity": "sha512-MdRnoOjstmnrKJsK8PY0PjP6fyF/SBS4R8coxmhsfEU7tQ46/J6j+aSHF2n4c2/H8B+Hc/Klbfp8vggZfI0mmA==",
+ "requires": {
+ "bson": "^1.1.1",
+ "require_optional": "^1.0.1",
+ "safe-buffer": "^5.1.2",
+ "saslprep": "^1.0.0"
+ },
+ "dependencies": {
+ "bson": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.1.tgz",
+ "integrity": "sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg=="
+ }
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "mute-stream": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
+ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
+ "dev": true
+ },
+ "mv": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
+ "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=",
+ "optional": true,
+ "requires": {
+ "mkdirp": "~0.5.1",
+ "ncp": "~2.0.0",
+ "rimraf": "~2.4.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
+ "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+ "optional": true,
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "rimraf": {
+ "version": "2.4.5",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
+ "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=",
+ "optional": true,
+ "requires": {
+ "glob": "^6.0.1"
+ }
+ }
+ }
+ },
+ "nan": {
+ "version": "2.13.2",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz",
+ "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw=="
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "ncp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
+ "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=",
+ "optional": true
+ },
+ "needle": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz",
+ "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==",
+ "requires": {
+ "debug": "^3.2.6",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "node-pre-gyp": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz",
+ "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==",
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.1",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.2.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
+ "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz",
+ "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g=="
+ },
+ "npm-packlist": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.4.tgz",
+ "integrity": "sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==",
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npm-path": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz",
+ "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==",
+ "dev": true,
+ "requires": {
+ "which": "^1.2.10"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "npm-which": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz",
+ "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=",
+ "dev": true,
+ "requires": {
+ "commander": "^2.9.0",
+ "npm-path": "^2.0.2",
+ "which": "^1.2.10"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "object.values": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz",
+ "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.12.0",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
+ "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.4",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "wordwrap": "~1.0.0"
+ }
+ },
+ "os": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/os/-/os-0.1.1.tgz",
+ "integrity": "sha1-IIhF6J4ZOtTZcUdLk5R3NqVtE/M="
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+ },
+ "os-shim": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz",
+ "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=",
+ "dev": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-map": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
+ "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
+ "dev": true
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
+ "page": {
+ "version": "1.11.4",
+ "resolved": "https://registry.npmjs.org/page/-/page-1.11.4.tgz",
+ "integrity": "sha512-8JMZzcE5W4qk+/DtmogN57cI+Yscy7xTYCpfSO7s3Tx6LjZuAfHFQY1+cKIAy60NaXdzVD6nOc3objaVbE0HJg==",
+ "requires": {
+ "path-to-regexp": "~1.2.1"
+ }
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.2.1.tgz",
+ "integrity": "sha1-szcFwUAjTYc8hyHHuf2LVB7Tr/k=",
+ "requires": {
+ "isarray": "0.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ }
+ }
+ },
+ "path-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "dev": true,
+ "requires": {
+ "pify": "^2.0.0"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.1.0"
+ }
+ },
+ "please-upgrade-node": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
+ "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
+ "dev": true,
+ "requires": {
+ "semver-compare": "^1.0.0"
+ }
+ },
+ "pluralize": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+ "dev": true
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "pre-commit": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/pre-commit/-/pre-commit-1.2.2.tgz",
+ "integrity": "sha1-287g7p3nI15X95xW186UZBpp7sY=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "spawn-sync": "^1.0.15",
+ "which": "1.2.x"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "which": {
+ "version": "1.2.14",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz",
+ "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
+ "precond": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz",
+ "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw="
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "prettier": {
+ "version": "1.18.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz",
+ "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==",
+ "dev": true
+ },
+ "prettier-eslint": {
+ "version": "8.8.2",
+ "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-8.8.2.tgz",
+ "integrity": "sha512-2UzApPuxi2yRoyMlXMazgR6UcH9DKJhNgCviIwY3ixZ9THWSSrUww5vkiZ3C48WvpFl1M1y/oU63deSy1puWEA==",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "common-tags": "^1.4.0",
+ "dlv": "^1.1.0",
+ "eslint": "^4.0.0",
+ "indent-string": "^3.2.0",
+ "lodash.merge": "^4.6.0",
+ "loglevel-colored-level-prefix": "^1.0.0",
+ "prettier": "^1.7.0",
+ "pretty-format": "^23.0.1",
+ "require-relative": "^0.8.7",
+ "typescript": "^2.5.1",
+ "typescript-eslint-parser": "^16.0.0",
+ "vue-eslint-parser": "^2.0.2"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "dev": true,
+ "requires": {
+ "acorn": "^3.0.4"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ }
+ }
+ },
+ "ansi-escapes": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "chardet": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "eslint": {
+ "version": "4.19.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz",
+ "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==",
+ "dev": true,
+ "requires": {
+ "ajv": "^5.3.0",
+ "babel-code-frame": "^6.22.0",
+ "chalk": "^2.1.0",
+ "concat-stream": "^1.6.0",
+ "cross-spawn": "^5.1.0",
+ "debug": "^3.1.0",
+ "doctrine": "^2.1.0",
+ "eslint-scope": "^3.7.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^3.5.4",
+ "esquery": "^1.0.0",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^2.0.0",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.0.1",
+ "ignore": "^3.3.3",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^3.0.6",
+ "is-resolvable": "^1.0.0",
+ "js-yaml": "^3.9.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.2",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "pluralize": "^7.0.0",
+ "progress": "^2.0.0",
+ "regexpp": "^1.0.1",
+ "require-uncached": "^1.0.3",
+ "semver": "^5.3.0",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "~2.0.1",
+ "table": "4.0.2",
+ "text-table": "~0.2.0"
+ }
+ },
+ "eslint-scope": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz",
+ "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "espree": {
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
+ "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.5.0",
+ "acorn-jsx": "^3.0.0"
+ }
+ },
+ "external-editor": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
+ "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.4.0",
+ "iconv-lite": "^0.4.17",
+ "tmp": "^0.0.33"
+ }
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^1.2.1",
+ "object-assign": "^4.0.1"
+ }
+ },
+ "flat-cache": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz",
+ "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==",
+ "dev": true,
+ "requires": {
+ "circular-json": "^0.3.1",
+ "graceful-fs": "^4.1.2",
+ "rimraf": "~2.6.2",
+ "write": "^0.2.1"
+ }
+ },
+ "ignore": {
+ "version": "3.3.10",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+ "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.0",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^2.0.4",
+ "figures": "^2.0.0",
+ "lodash": "^4.3.0",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rx-lite": "^4.0.8",
+ "rx-lite-aggregates": "^4.0.8",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^4.0.0",
+ "through": "^2.3.6"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "regexpp": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz",
+ "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "slice-ansi": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0"
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "table": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
+ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
+ "dev": true,
+ "requires": {
+ "ajv": "^5.2.3",
+ "ajv-keywords": "^2.1.0",
+ "chalk": "^2.1.0",
+ "lodash": "^4.17.4",
+ "slice-ansi": "1.0.0",
+ "string-width": "^2.1.1"
+ }
+ },
+ "write": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^0.5.1"
+ }
+ }
+ }
+ },
+ "prettier-linter-helpers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+ "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+ "dev": true,
+ "requires": {
+ "fast-diff": "^1.1.2"
+ }
+ },
+ "pretty-format": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz",
+ "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0",
+ "ansi-styles": "^3.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ }
+ }
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.8.0.tgz",
+ "integrity": "sha512-tPSkj8y92PfZVbinY1n84i1Qdx75lZjMQYx9WZhnkofyxzw2r7Ho39G3/aEvSUdebxpnnM4LZJCtvE/Aq3+s9w=="
+ },
+ "rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ }
+ }
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^2.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^2.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^2.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "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"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.13.3",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
+ "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw=="
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexpp": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "require-relative": {
+ "version": "0.8.7",
+ "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz",
+ "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=",
+ "dev": true
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "dev": true,
+ "requires": {
+ "caller-path": "^0.1.0",
+ "resolve-from": "^1.0.0"
+ },
+ "dependencies": {
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "dev": true,
+ "requires": {
+ "callsites": "^0.2.0"
+ }
+ },
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "dev": true
+ },
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "dev": true
+ }
+ }
+ },
+ "require_optional": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
+ "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
+ "requires": {
+ "resolve-from": "^2.0.0",
+ "semver": "^5.1.0"
+ }
+ },
+ "resolve": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
+ "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-from": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
+ "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "dev": true,
+ "requires": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "^2.1.0"
+ }
+ },
+ "rx-lite": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+ "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
+ "dev": true
+ },
+ "rx-lite-aggregates": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+ "dev": true,
+ "requires": {
+ "rx-lite": "*"
+ }
+ },
+ "rxjs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz",
+ "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safe-json-stringify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz",
+ "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==",
+ "optional": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "saslprep": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
+ "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
+ "optional": true,
+ "requires": {
+ "sparse-bitfield": "^3.0.3"
+ }
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ },
+ "semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
+ "dev": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ },
+ "set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+ },
+ "slice-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+ "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "astral-regex": "^1.0.0",
+ "is-fullwidth-code-point": "^2.0.0"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "source-map-resolve": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-support": {
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "sparse-bitfield": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
+ "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
+ "optional": true,
+ "requires": {
+ "memory-pager": "^1.0.2"
+ }
+ },
+ "spawn-sync": {
+ "version": "1.0.15",
+ "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz",
+ "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=",
+ "dev": true,
+ "requires": {
+ "concat-stream": "^1.4.7",
+ "os-shim": "^0.1.2"
+ }
+ },
+ "spdx-correct": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+ "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
+ "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
+ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "staged-git-files": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.1.tgz",
+ "integrity": "sha512-H89UNKr1rQJvI1c/PIR3kiAMBV23yvR7LItZiV74HWZwzt7f3YHuujJ9nJZlt58WlFox7XQsOahexwk7nTe69A==",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "string-argv": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz",
+ "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "stringify-object": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
+ "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
+ "dev": true,
+ "requires": {
+ "get-own-enumerable-property-symbols": "^3.0.0",
+ "is-obj": "^1.0.1",
+ "is-regexp": "^1.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "symbol-observable": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
+ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==",
+ "dev": true
+ },
+ "table": {
+ "version": "5.4.5",
+ "resolved": "https://registry.npmjs.org/table/-/table-5.4.5.tgz",
+ "integrity": "sha512-oGa2Hl7CQjfoaogtrOHEJroOcYILTx7BZWLGsJIlzoWmB2zmguhNfPJZsWPKYek/MgCxfco54gEi31d1uN2hFA==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.10.2",
+ "lodash": "^4.17.14",
+ "slice-ansi": "^2.1.0",
+ "string-width": "^3.0.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.10.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+ "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "tar": {
+ "version": "4.4.10",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz",
+ "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==",
+ "requires": {
+ "chownr": "^1.1.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.3.5",
+ "minizlib": "^1.2.1",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.3"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "tslib": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
+ "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "type-fest": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz",
+ "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==",
+ "dev": true
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "typescript": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz",
+ "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==",
+ "dev": true
+ },
+ "typescript-eslint-parser": {
+ "version": "16.0.1",
+ "resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-16.0.1.tgz",
+ "integrity": "sha512-IKawLTu4A2xN3aN/cPLxvZ0bhxZHILGDKTZWvWNJ3sLNhJ3PjfMEDQmR2VMpdRPrmWOadgWXRwjLBzSA8AGsaQ==",
+ "dev": true,
+ "requires": {
+ "lodash.unescape": "4.0.1",
+ "semver": "5.5.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "dev": true
+ }
+ }
+ },
+ "union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ }
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "vasync": {
+ "version": "1.6.4",
+ "resolved": "https://registry.npmjs.org/vasync/-/vasync-1.6.4.tgz",
+ "integrity": "sha1-3+k2Fq0OeugBszKp2Iv8XNyOHR8=",
+ "requires": {
+ "verror": "1.6.0"
+ },
+ "dependencies": {
+ "verror": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.6.0.tgz",
+ "integrity": "sha1-fROyex+swuLakEBetepuW90lLqU=",
+ "requires": {
+ "extsprintf": "1.2.0"
+ }
+ }
+ }
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "vue-eslint-parser": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz",
+ "integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.1.0",
+ "eslint-scope": "^3.7.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^3.5.2",
+ "esquery": "^1.0.0",
+ "lodash": "^4.17.4"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "dev": true,
+ "requires": {
+ "acorn": "^3.0.4"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ }
+ }
+ },
+ "eslint-scope": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz",
+ "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "espree": {
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
+ "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.5.0",
+ "acorn-jsx": "^3.0.0"
+ }
+ }
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
+ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz",
+ "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "write": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+ "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "xss": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.6.tgz",
+ "integrity": "sha512-6Q9TPBeNyoTRxgZFk5Ggaepk/4vUOYdOsIUYvLehcsIZTFjaavbVnsuAkLA5lIFuug5hw8zxcB9tm01gsjph2A==",
+ "requires": {
+ "commander": "^2.9.0",
+ "cssfilter": "0.0.10"
+ }
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+ "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A=="
+ }
+ }
+}
diff --git a/package.json b/package.json
index b44ee085..a9dfb5bd 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "wekan",
- "version": "v3.25.0",
+ "version": "v3.55.0",
"description": "Open-Source kanban",
"private": true,
"scripts": {
@@ -53,7 +53,7 @@
"prettier-eslint": "^8.8.2"
},
"dependencies": {
- "@babel/runtime": "^7.5.4",
+ "@babel/runtime": "^7.6.2",
"ajv": "^5.0.0",
"babel-runtime": "^6.26.0",
"bcrypt": "^3.0.2",
@@ -63,10 +63,10 @@
"gridfs-stream": "^0.5.3",
"ldapjs": "^1.0.2",
"meteor-node-stubs": "^0.4.1",
- "mongodb": "^2.2.19",
+ "mongodb": "^3.3.3",
"os": "^0.1.1",
"page": "^1.8.6",
- "qs": "^6.5.2",
+ "qs": "^6.8.0",
"source-map-support": "^0.5.12",
"xss": "^1.0.6"
}
diff --git a/packages/wekan-scrollbar/jquery.mCustomScrollbar.js b/packages/wekan-scrollbar/jquery.mCustomScrollbar.js
index b7883579..056e4284 100644
--- a/packages/wekan-scrollbar/jquery.mCustomScrollbar.js
+++ b/packages/wekan-scrollbar/jquery.mCustomScrollbar.js
@@ -111,7 +111,7 @@ and dependencies (minified).
scrolling inertia
values: integer (milliseconds)
*/
- scrollInertia:950,
+ scrollInertia:0,
/*
auto-adjust scrollbar dragger length
values: boolean
diff --git a/public/api/wekan.html b/public/api/wekan.html
index e7cbaf8d..a746228f 100644
--- a/public/api/wekan.html
+++ b/public/api/wekan.html
@@ -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 v3.24">Wekan REST API v3.24</a>
+ <a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v3.55">Wekan REST API v3.55</a>
</li>
@@ -2017,7 +2017,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 v3.24</h1>
+ <h1 id="wekan-rest-api">Wekan REST API v3.55</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>
@@ -4479,7 +4479,8 @@ $.ajax({
</code></pre>
<pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>);
<span class="hljs-keyword">const</span> inputBody = <span class="hljs-string">'{
- "title": "string"
+ "title": "string",
+ "items": "string"
}'</span>;
<span class="hljs-keyword">const</span> headers = {
<span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>,
@@ -4573,6 +4574,7 @@ System.out.println(response.toString());
<p>Body parameter</p>
</blockquote>
<pre class="highlight tab tab-yaml"><code><span class="hljs-attr">title:</span> <span class="hljs-string">string</span>
+<span class="hljs-attr">items:</span> <span class="hljs-string">string</span>
</code></pre>
<h3 id="post_board_card_checklists-parameters">Parameters</h3>
@@ -4615,6 +4617,13 @@ System.out.println(response.toString());
<td>true</td>
<td>the title value</td>
</tr>
+<tr>
+<td>» items</td>
+<td>body</td>
+<td>string</td>
+<td>true</td>
+<td>the items value</td>
+</tr>
</tbody>
</table>
<h3 id="post_board_card_checklists-responses">Responses</h3>
@@ -9350,6 +9359,7 @@ System.out.println(response.toString());
</blockquote>
<pre class="highlight tab tab-json"><code>{
<span class="hljs-attr">"title"</span>: <span class="hljs-string">"string"</span>,
+ <span class="hljs-attr">"starred"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"archived"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"boardId"</span>: <span class="hljs-string">"string"</span>,
<span class="hljs-attr">"swimlaneId"</span>: <span class="hljs-string">"string"</span>,
@@ -9870,6 +9880,7 @@ $.ajax({
<span class="hljs-keyword">const</span> inputBody = <span class="hljs-string">'{
"authorId": "string",
"members": "string",
+ "assignees": "string",
"title": "string",
"description": "string",
"swimlaneId": "string"
@@ -9972,6 +9983,7 @@ System.out.println(response.toString());
</blockquote>
<pre class="highlight tab tab-yaml"><code><span class="hljs-attr">authorId:</span> <span class="hljs-string">string</span>
<span class="hljs-attr">members:</span> <span class="hljs-string">string</span>
+<span class="hljs-attr">assignees:</span> <span class="hljs-string">string</span>
<span class="hljs-attr">title:</span> <span class="hljs-string">string</span>
<span class="hljs-attr">description:</span> <span class="hljs-string">string</span>
<span class="hljs-attr">swimlaneId:</span> <span class="hljs-string">string</span>
@@ -10025,6 +10037,13 @@ System.out.println(response.toString());
<td>the member IDs list of the new card</td>
</tr>
<tr>
+<td>» assignees</td>
+<td>body</td>
+<td>string</td>
+<td>false</td>
+<td>the array of maximum one ID of assignee of the new card</td>
+</tr>
+<tr>
<td>» title</td>
<td>body</td>
<td>string</td>
@@ -10330,6 +10349,7 @@ $.ajax({
"isOverTime": "string",
"customFields": "string",
"members": "string",
+ "assignees": "string",
"swimlaneId": "string"
}'</span>;
<span class="hljs-keyword">const</span> headers = {
@@ -10440,6 +10460,7 @@ System.out.println(response.toString());
<span class="hljs-attr">isOverTime:</span> <span class="hljs-string">string</span>
<span class="hljs-attr">customFields:</span> <span class="hljs-string">string</span>
<span class="hljs-attr">members:</span> <span class="hljs-string">string</span>
+<span class="hljs-attr">assignees:</span> <span class="hljs-string">string</span>
<span class="hljs-attr">swimlaneId:</span> <span class="hljs-string">string</span>
</code></pre>
@@ -10603,6 +10624,13 @@ System.out.println(response.toString());
<td>the members value</td>
</tr>
<tr>
+<td>» assignees</td>
+<td>body</td>
+<td>string</td>
+<td>true</td>
+<td>the assignees value</td>
+</tr>
+<tr>
<td>» swimlaneId</td>
<td>body</td>
<td>string</td>
@@ -11593,6 +11621,7 @@ System.out.println(response.toString());
<span class="hljs-string">"string"</span>
],
<span class="hljs-attr">"fullname"</span>: <span class="hljs-string">"string"</span>,
+ <span class="hljs-attr">"showDesktopDragHandles"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"hiddenSystemMessages"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"hiddenMinicardLabelText"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"initials"</span>: <span class="hljs-string">"string"</span>,
@@ -11609,6 +11638,7 @@ System.out.println(response.toString());
],
<span class="hljs-attr">"icode"</span>: <span class="hljs-string">"string"</span>,
<span class="hljs-attr">"boardView"</span>: <span class="hljs-string">"board-view-lists"</span>,
+ <span class="hljs-attr">"listSortBy"</span>: <span class="hljs-string">"-modifiedat"</span>,
<span class="hljs-attr">"templatesBoardId"</span>: <span class="hljs-string">"string"</span>,
<span class="hljs-attr">"cardTemplatesSwimlaneId"</span>: <span class="hljs-string">"string"</span>,
<span class="hljs-attr">"listTemplatesSwimlaneId"</span>: <span class="hljs-string">"string"</span>,
@@ -12246,6 +12276,7 @@ System.out.println(response.toString());
<span class="hljs-string">"string"</span>
],
<span class="hljs-attr">"fullname"</span>: <span class="hljs-string">"string"</span>,
+ <span class="hljs-attr">"showDesktopDragHandles"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"hiddenSystemMessages"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"hiddenMinicardLabelText"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"initials"</span>: <span class="hljs-string">"string"</span>,
@@ -12262,6 +12293,7 @@ System.out.println(response.toString());
],
<span class="hljs-attr">"icode"</span>: <span class="hljs-string">"string"</span>,
<span class="hljs-attr">"boardView"</span>: <span class="hljs-string">"board-view-lists"</span>,
+ <span class="hljs-attr">"listSortBy"</span>: <span class="hljs-string">"-modifiedat"</span>,
<span class="hljs-attr">"templatesBoardId"</span>: <span class="hljs-string">"string"</span>,
<span class="hljs-attr">"cardTemplatesSwimlaneId"</span>: <span class="hljs-string">"string"</span>,
<span class="hljs-attr">"listTemplatesSwimlaneId"</span>: <span class="hljs-string">"string"</span>,
@@ -14150,6 +14182,9 @@ UserSecurity
<span class="hljs-attr">"members"</span>: [
<span class="hljs-string">"string"</span>
],
+ <span class="hljs-attr">"assignees"</span>: [
+ <span class="hljs-string">"string"</span>
+ ],
<span class="hljs-attr">"receivedAt"</span>: <span class="hljs-string">"string"</span>,
<span class="hljs-attr">"startAt"</span>: <span class="hljs-string">"string"</span>,
<span class="hljs-attr">"dueAt"</span>: <span class="hljs-string">"string"</span>,
@@ -14296,6 +14331,13 @@ UserSecurity
<td>list of members (user IDs)</td>
</tr>
<tr>
+<td>assignees</td>
+<td>[string]|null</td>
+<td>false</td>
+<td>none</td>
+<td>who is assignee of the card (user ID), maximum one ID of assignee in array.</td>
+</tr>
+<tr>
<td>receivedAt</td>
<td>string|null</td>
<td>false</td>
@@ -14908,6 +14950,7 @@ UserSecurity
<p><a id="schemalists"></a></p>
<pre class="highlight tab tab-json"><code>{
<span class="hljs-attr">"title"</span>: <span class="hljs-string">"string"</span>,
+ <span class="hljs-attr">"starred"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"archived"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"boardId"</span>: <span class="hljs-string">"string"</span>,
<span class="hljs-attr">"swimlaneId"</span>: <span class="hljs-string">"string"</span>,
@@ -14946,6 +14989,13 @@ UserSecurity
<td>the title of the list</td>
</tr>
<tr>
+<td>starred</td>
+<td>boolean|null</td>
+<td>false</td>
+<td>none</td>
+<td>if a list is stared then we put it on the top</td>
+</tr>
+<tr>
<td>archived</td>
<td>boolean</td>
<td>true</td>
@@ -15386,6 +15436,7 @@ UserSecurity
<span class="hljs-string">"string"</span>
],
<span class="hljs-attr">"fullname"</span>: <span class="hljs-string">"string"</span>,
+ <span class="hljs-attr">"showDesktopDragHandles"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"hiddenSystemMessages"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"hiddenMinicardLabelText"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"initials"</span>: <span class="hljs-string">"string"</span>,
@@ -15402,6 +15453,7 @@ UserSecurity
],
<span class="hljs-attr">"icode"</span>: <span class="hljs-string">"string"</span>,
<span class="hljs-attr">"boardView"</span>: <span class="hljs-string">"board-view-lists"</span>,
+ <span class="hljs-attr">"listSortBy"</span>: <span class="hljs-string">"-modifiedat"</span>,
<span class="hljs-attr">"templatesBoardId"</span>: <span class="hljs-string">"string"</span>,
<span class="hljs-attr">"cardTemplatesSwimlaneId"</span>: <span class="hljs-string">"string"</span>,
<span class="hljs-attr">"listTemplatesSwimlaneId"</span>: <span class="hljs-string">"string"</span>,
@@ -15552,6 +15604,7 @@ UserSecurity
<span class="hljs-string">"string"</span>
],
<span class="hljs-attr">"fullname"</span>: <span class="hljs-string">"string"</span>,
+ <span class="hljs-attr">"showDesktopDragHandles"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"hiddenSystemMessages"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"hiddenMinicardLabelText"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"initials"</span>: <span class="hljs-string">"string"</span>,
@@ -15568,6 +15621,7 @@ UserSecurity
],
<span class="hljs-attr">"icode"</span>: <span class="hljs-string">"string"</span>,
<span class="hljs-attr">"boardView"</span>: <span class="hljs-string">"board-view-lists"</span>,
+ <span class="hljs-attr">"listSortBy"</span>: <span class="hljs-string">"-modifiedat"</span>,
<span class="hljs-attr">"templatesBoardId"</span>: <span class="hljs-string">"string"</span>,
<span class="hljs-attr">"cardTemplatesSwimlaneId"</span>: <span class="hljs-string">"string"</span>,
<span class="hljs-attr">"listTemplatesSwimlaneId"</span>: <span class="hljs-string">"string"</span>,
@@ -15609,6 +15663,13 @@ UserSecurity
<td>full name of the user</td>
</tr>
<tr>
+<td>showDesktopDragHandles</td>
+<td>boolean</td>
+<td>false</td>
+<td>none</td>
+<td>does the user want to hide system messages?</td>
+</tr>
+<tr>
<td>hiddenSystemMessages</td>
<td>boolean</td>
<td>false</td>
@@ -15679,6 +15740,13 @@ UserSecurity
<td>boardView field of the user</td>
</tr>
<tr>
+<td>listSortBy</td>
+<td>string</td>
+<td>false</td>
+<td>none</td>
+<td>default sort list for user</td>
+</tr>
+<tr>
<td>templatesBoardId</td>
<td>string</td>
<td>true</td>
@@ -15729,6 +15797,30 @@ UserSecurity
<td>boardView</td>
<td>board-view-cal</td>
</tr>
+<tr>
+<td>listSortBy</td>
+<td>-modifiedat</td>
+</tr>
+<tr>
+<td>listSortBy</td>
+<td>modifiedat</td>
+</tr>
+<tr>
+<td>listSortBy</td>
+<td>-title</td>
+</tr>
+<tr>
+<td>listSortBy</td>
+<td>title</td>
+</tr>
+<tr>
+<td>listSortBy</td>
+<td>-sort</td>
+</tr>
+<tr>
+<td>listSortBy</td>
+<td>sort</td>
+</tr>
</tbody>
</table>
diff --git a/public/api/wekan.yml b/public/api/wekan.yml
index a28b54e4..08463950 100644
--- a/public/api/wekan.yml
+++ b/public/api/wekan.yml
@@ -1,7 +1,7 @@
swagger: '2.0'
info:
title: Wekan REST API
- version: v3.24
+ version: v3.55
description: |
The REST API allows you to control and extend Wekan with ease.
@@ -319,6 +319,11 @@ paths:
description: the title value
type: string
required: true
+ - name: items
+ in: formData
+ description: the items value
+ type: string
+ required: true
- name: board
in: path
description: the board value
@@ -1268,6 +1273,12 @@ paths:
the member IDs list of the new card
type: string
required: false
+ - name: assignees
+ in: formData
+ description: |
+ the array of maximum one ID of assignee of the new card
+ type: string
+ required: false
- name: title
in: formData
description: |
@@ -1433,6 +1444,11 @@ paths:
description: the members value
type: string
required: true
+ - name: assignees
+ in: formData
+ description: the assignees value
+ type: string
+ required: true
- name: swimlaneId
in: formData
description: the swimlaneId value
@@ -2349,6 +2365,15 @@ definitions:
type: string
x-nullable: true
x-nullable: true
+ assignees:
+ description: |
+ who is assignee of the card (user ID),
+ maximum one ID of assignee in array.
+ type: array
+ items:
+ type: string
+ x-nullable: true
+ x-nullable: true
receivedAt:
description: |
Date the card was received
@@ -2606,6 +2631,12 @@ definitions:
description: |
the title of the list
type: string
+ starred:
+ description: |
+ if a list is stared
+ then we put it on the top
+ type: boolean
+ x-nullable: true
archived:
description: |
is the list archived
@@ -2865,6 +2896,10 @@ definitions:
description: |
full name of the user
type: string
+ showDesktopDragHandles:
+ description: |
+ does the user want to hide system messages?
+ type: boolean
hiddenSystemMessages:
description: |
does the user want to hide system messages?
@@ -2918,6 +2953,17 @@ definitions:
- board-view-lists
- board-view-swimlanes
- board-view-cal
+ listSortBy:
+ description: |
+ default sort list for user
+ type: string
+ enum:
+ - -modifiedat
+ - modifiedat
+ - -title
+ - title
+ - -sort
+ - sort
templatesBoardId:
description: |
Reference to the templates board
diff --git a/rebuild-wekan.bat b/rebuild-wekan.bat
index 784adb82..346a4aec 100644
--- a/rebuild-wekan.bat
+++ b/rebuild-wekan.bat
@@ -13,15 +13,15 @@ REM Install chocolatey
choco install -y git curl python2 dotnet4.5.2 nano mongodb-3 mongoclient meteor
-curl -O https://nodejs.org/dist/v8.12.0/node-v8.12.0-x64.msi
-call node-v8.12.0-x64.msi
+curl -O https://nodejs.org/dist/v8.16.2/node-v8.16.2-x64.msi
+call node-v8.16.2-x64.msi
call npm config -g set msvs_version 2015
call meteor npm config -g set msvs_version 2015
call npm -g install npm
call npm -g install node-gyp
-call npm -g install fibers@2.0.0
+call npm -g install fibers
cd C:\repos
git clone https://github.com/wekan/wekan.git
cd wekan
diff --git a/rebuild-wekan.sh b/rebuild-wekan.sh
index 04e86848..8381e170 100755
--- a/rebuild-wekan.sh
+++ b/rebuild-wekan.sh
@@ -79,7 +79,7 @@ do
curl -0 -L https://npmjs.org/install.sh | sudo sh
sudo chown -R $(id -u):$(id -g) $HOME/.npm
sudo npm -g install n
- sudo n 8.16.0
+ sudo n 8.16.2
#curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
#sudo apt-get install -y nodejs
elif [[ "$OSTYPE" == "darwin"* ]]; then
@@ -143,8 +143,8 @@ do
#fi
#cd ..
sudo chown -R $(id -u):$(id -g) $HOME/.npm $HOME/.meteor
- rm -rf node_modules
- meteor npm install
+ rm -rf node_modules .meteor/local
+ npm install
rm -rf .build
meteor build .build --directory
cp -f fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/packages/cfs_access-point.js
@@ -156,7 +156,7 @@ do
#meteor npm install bcrypt
cd .build/bundle/programs/server
rm -rf node_modules
- meteor npm install
+ npm install
#meteor npm install bcrypt
cd ../../../..
echo Done.
diff --git a/releases/rebuild-docs.sh b/releases/rebuild-docs.sh
index f0292677..2ac46eb3 100755
--- a/releases/rebuild-docs.sh
+++ b/releases/rebuild-docs.sh
@@ -1,6 +1,6 @@
# Generate docs.
-mkdir -p public/api
+#mkdir -p public/api
python3 ./openapi/generate_openapi.py --release $(git describe --tags --abbrev=0) > ./public/api/wekan.yml
api2html -c ./public/logo-header.png -o ./public/api/wekan.html ./public/api/wekan.yml
diff --git a/releases/rebuild-wekan.sh b/releases/rebuild-wekan.sh
index 2f3e3eeb..e70ff656 100755
--- a/releases/rebuild-wekan.sh
+++ b/releases/rebuild-wekan.sh
@@ -25,7 +25,7 @@ do
sudo apt install -y build-essential git curl wget
# sudo apt -y install nodejs npm
# sudo npm -g install n
-# sudo n 8.11.3
+# sudo n 8.16.2
fi
# if [ "$(grep -Ei 'debian' /etc/*release)" ]; then
diff --git a/releases/translations/pull-translations.sh b/releases/translations/pull-translations.sh
index fc8186b7..b97f5a8d 100755
--- a/releases/translations/pull-translations.sh
+++ b/releases/translations/pull-translations.sh
@@ -36,6 +36,9 @@ tx pull -f -l en_GB
echo "Greek:"
tx pull -f -l el
+echo "Slovenian:"
+tx pull -f -l sl_SI
+
echo "Spanish:"
tx pull -f -l es
diff --git a/releases/virtualbox/rebuild-wekan.sh b/releases/virtualbox/rebuild-wekan.sh
deleted file mode 100755
index c1adaf78..00000000
--- a/releases/virtualbox/rebuild-wekan.sh
+++ /dev/null
@@ -1,111 +0,0 @@
-#!/bin/bash
-
-echo "Note: If you use other locale than en_US.UTF-8 , you need to additionally install en_US.UTF-8"
-echo " with 'sudo dpkg-reconfigure locales' , so that MongoDB works correctly."
-echo " You can still use any other locale as your main locale."
-
-function pause(){
- read -p "$*"
-}
-
-echo
-PS3='Please enter your choice: '
-options=("Install Wekan dependencies" "Build Wekan" "Quit")
-select opt in "${options[@]}"
-do
- case $opt in
- "Install Wekan dependencies")
-
- if [[ "$OSTYPE" == "linux-gnu" ]]; then
- echo "Linux";
- echo "Ubuntu, Mint, Debian, or Debian on Windows Subsystem for Linux";
- sudo apt-get install -y build-essential git curl wget;
- curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -;
- elif [[ "$OSTYPE" == "darwin"* ]]; then
- echo "macOS";
- pause '1) Install XCode 2) Install Node 8.x from https://nodejs.org/en/ 3) Press [Enter] key to continue.'
- elif [[ "$OSTYPE" == "cygwin" ]]; then
- # POSIX compatibility layer and Linux environment emulation for Windows
- echo "TODO: Add Cygwin";
- exit;
- elif [[ "$OSTYPE" == "msys" ]]; then
- # Lightweight shell and GNU utilities compiled for Windows (part of MinGW)
- echo "TODO: Add msys on Windows";
- exit;
- elif [[ "$OSTYPE" == "win32" ]]; then
- # I'm not sure this can happen.
- echo "TODO: Add Windows";
- exit;
- elif [[ "$OSTYPE" == "freebsd"* ]]; then
- echo "TODO: Add FreeBSD";
- exit;
- else
- echo "Unknown"
- echo ${OSTYPE}
- exit;
- fi
-
- ## Latest npm with Meteor 1.6
- sudo npm -g install npm
- sudo npm -g install node-gyp
- # Latest fibers for Meteor 1.6
- sudo npm -g install fibers@2.0.0
- # Install Meteor, if it's not yet installed
- curl https://install.meteor.com | bash
- mkdir ~/repos
- cd ~/repos
- git clone https://github.com/wekan/wekan.git
- cd wekan
- git checkout devel
- break
- ;;
- "Build Wekan")
- echo "Building Wekan."
- cd ~/repos/wekan
- ## REPOS BELOW ARE INCLUDED TO WEKAN
- #mkdir -p ~/repos/wekan/packages
- #cd ~/repos/wekan/packages
- #git clone --depth 1 -b master https://github.com/wekan/flow-router.git kadira-flow-router
- #git clone --depth 1 -b master https://github.com/meteor-useraccounts/core.git meteor-useraccounts-core
- #git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-cas.git
- #git clone --depth 1 -b master https://github.com/wekan/wekan-ldap.git
- #git clone --depth 1 -b master https://github.com/wekan/wekan-scrollbar.git
- #git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-oidc.git
- #git clone --depth 1 -b master --recurse-submodules https://github.com/wekan/markdown.git
- #mv meteor-accounts-oidc/packages/switch_accounts-oidc wekan_accounts-oidc
- #mv meteor-accounts-oidc/packages/switch_oidc wekan_oidc
- #rm -rf meteor-accounts-oidc
- if [[ "$OSTYPE" == "darwin"* ]]; then
- echo "sed at macOS";
- sed -i '' 's/api\.versionsFrom/\/\/api.versionsFrom/' ~/repos/wekan/packages/meteor-useraccounts-core/package.js
- else
- echo "sed at ${OSTYPE}"
- sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' ~/repos/wekan/packages/meteor-useraccounts-core/package.js
- fi
-
- cd ~/repos/wekan
- rm -rf node_modules
- meteor npm install
- rm -rf .build
- meteor build .build --directory
- cp -f fix-download-unicode/cfs_access-point.txt .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 ~/repos/wekan/.build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt
- #rm -rf node_modules/bcrypt
- #meteor npm install bcrypt
- cd ~/repos/wekan/.build/bundle/programs/server
- rm -rf node_modules
- meteor npm install
- #meteor npm install bcrypt
- cd ~/repos
- echo Done.
- break
- ;;
- "Quit")
- break
- ;;
- *) echo invalid option;;
- esac
-done
diff --git a/releases/virtualbox/start-wekan.sh b/releases/virtualbox/start-wekan.sh
index 733b6b67..8d1f48e6 100755
--- a/releases/virtualbox/start-wekan.sh
+++ b/releases/virtualbox/start-wekan.sh
@@ -50,19 +50,19 @@
#---------------------------------------------------------------
# ==== BIGEVENTS DUE ETC NOTIFICATIONS =====
# https://github.com/wekan/wekan/pull/2541
- # Introduced a system env var BIGEVENTS_PATTERN default as "due",
+ # Introduced a system env var BIGEVENTS_PATTERN default as "NONE",
# so any activityType matches the pattern, system will send out
# notifications to all board members no matter they are watching
# or tracking the board or not. Owner of the wekan server can
# disable the feature by setting this variable to "NONE" or
# change the pattern to any valid regex. i.e. '|' delimited
# activityType names.
- # a) Default
+ # a) Example
#export BIGEVENTS_PATTERN=due
# b) All
#export BIGEVENTS_PATTERN=received|start|due|end
# c) Disabled
- #export BIGEVENTS_PATTERN=NONE
+ export BIGEVENTS_PATTERN=NONE
#---------------------------------------------------------------
# ==== EMAIL DUE DATE NOTIFICATION =====
# https://github.com/wekan/wekan/pull/2536
@@ -70,8 +70,9 @@
# dueat startat endat receivedat, also notification to
# the watchers and if any card is due, about due or past due.
#
- # Notify due days, default 2 days before and after. 0 = due notifications disabled. Default: 2
- #export NOTIFY_DUE_DAYS_BEFORE_AND_AFTER=2
+ # Notify due days, default is None.
+ #export NOTIFY_DUE_DAYS_BEFORE_AND_AFTER=2,0
+ # it will notify user 2 days before due day and on the due day
#
# Notify due at hour of day. Default every morning at 8am. Can be 0-23.
# If env variable has parsing error, use default. Notification sent to watchers.
diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp
index 0707eb84..f4bc9612 100644
--- a/sandstorm-pkgdef.capnp
+++ b/sandstorm-pkgdef.capnp
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
appTitle = (defaultText = "Wekan"),
# The name of the app as it is displayed to the user.
- appVersion = 327,
+ appVersion = 357,
# Increment this for every release.
- appMarketingVersion = (defaultText = "3.25.0~2019-08-23"),
+ appMarketingVersion = (defaultText = "3.55.0~2019-11-19"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,
@@ -240,6 +240,7 @@ const myCommand :Spk.Manifest.Command = (
(key = "WITH_API", value = "true"),
(key = "RICHER_CARD_COMMENT_EDITOR", value="true"),
(key = "CARD_OPENED_WEBHOOK_ENABLED", value="false"),
+ (key = "BIGEVENTS_PATTERN", value="NONE"),
(key = "MATOMO_ADDRESS", value=""),
(key = "MATOMO_SITE_ID", value=""),
(key = "MATOMO_DO_NOT_TRACK", value="true"),
diff --git a/server/migrations.js b/server/migrations.js
index f3776edd..92339110 100644
--- a/server/migrations.js
+++ b/server/migrations.js
@@ -684,39 +684,6 @@ Migrations.add('mutate-boardIds-in-customfields', () => {
});
});
-const firstBatchOfDbsToAddCreatedAndUpdated = [
- AccountSettings,
- Actions,
- Activities,
- Announcements,
- Boards,
- CardComments,
- Cards,
- ChecklistItems,
- Checklists,
- CustomFields,
- Integrations,
- InvitationCodes,
- Lists,
- Rules,
- Settings,
- Swimlanes,
- Triggers,
- UnsavedEdits,
-];
-
-firstBatchOfDbsToAddCreatedAndUpdated.forEach(db => {
- db.before.insert((userId, doc) => {
- doc.createdAt = Date.now();
- doc.updatedAt = doc.createdAt;
- });
-
- db.before.update((userId, doc, fieldNames, modifier) => {
- modifier.$set = modifier.$set || {};
- modifier.$set.updatedAt = new Date();
- });
-});
-
const modifiedAtTables = [
AccountSettings,
Actions,
@@ -769,3 +736,92 @@ Migrations.add('add-missing-created-and-modified', () => {
console.error(e);
});
});
+
+Migrations.add('fix-incorrect-dates', () => {
+ const tables = [
+ AccountSettings,
+ Actions,
+ Activities,
+ Announcements,
+ Boards,
+ CardComments,
+ Cards,
+ ChecklistItems,
+ Checklists,
+ CustomFields,
+ Integrations,
+ InvitationCodes,
+ Lists,
+ Rules,
+ Settings,
+ Swimlanes,
+ Triggers,
+ UnsavedEdits,
+ ];
+
+ // Dates were previously created with Date.now() which is a number, not a date
+ tables.forEach(t =>
+ t
+ .rawCollection()
+ .find({ $or: [{ createdAt: { $type: 1 } }, { updatedAt: { $type: 1 } }] })
+ .forEach(({ _id, createdAt, updatedAt }) => {
+ t.rawCollection().update(
+ { _id },
+ {
+ $set: {
+ createdAt: new Date(createdAt),
+ updatedAt: new Date(updatedAt),
+ },
+ },
+ );
+ }),
+ );
+});
+
+Migrations.add('add-assignee', () => {
+ Cards.update(
+ {
+ assignees: {
+ $exists: false,
+ },
+ },
+ {
+ $set: {
+ assignees: [],
+ },
+ },
+ noValidateMulti,
+ );
+});
+
+Migrations.add('add-profile-showDesktopDragHandles', () => {
+ Users.update(
+ {
+ 'profile.showDesktopDragHandles': {
+ $exists: false,
+ },
+ },
+ {
+ $set: {
+ 'profile.showDesktopDragHandles': false,
+ },
+ },
+ noValidateMulti,
+ );
+});
+
+Migrations.add('add-profile-hiddenMinicardLabelText', () => {
+ Users.update(
+ {
+ 'profile.hiddenMinicardLabelText': {
+ $exists: false,
+ },
+ },
+ {
+ $set: {
+ 'profile.hiddenMinicardLabelText': false,
+ },
+ },
+ noValidateMulti,
+ );
+});
diff --git a/server/notifications/email.js b/server/notifications/email.js
index 0373deb0..acafb4de 100644
--- a/server/notifications/email.js
+++ b/server/notifications/email.js
@@ -13,11 +13,14 @@ Meteor.startup(() => {
const lan = user.getLanguage();
const subject = TAPi18n.__(title, params, lan); // the original function has a fault, i believe the title should be used according to original author
const existing = user.getEmailBuffer().length > 0;
- const text = `${existing ? `<br/>\n${subject}<br/>\n` : ''}${
+ const htmlEnabled =
+ Meteor.settings.public &&
+ Meteor.settings.public.RICHER_CARD_COMMENT_EDITOR !== false;
+ const text = `${existing ? `\n${subject}\n` : ''}${
params.user
- } ${TAPi18n.__(description, quoteParams, lan)}<br/>\n${params.url}`;
+ } ${TAPi18n.__(description, quoteParams, lan)}\n${params.url}`;
- user.addEmailBuffer(text);
+ user.addEmailBuffer(htmlEnabled ? text.replace(/\n/g, '<br/>') : text);
// unlike setTimeout(func, delay, args),
// Meteor.setTimeout(func, delay) does not accept args :-(
diff --git a/server/notifications/outgoing.js b/server/notifications/outgoing.js
index 85d54968..5bc2c540 100644
--- a/server/notifications/outgoing.js
+++ b/server/notifications/outgoing.js
@@ -8,6 +8,47 @@ const postCatchError = Meteor.wrapAsync((url, options, resolve) => {
});
});
+const Lock = {
+ _lock: {},
+ _timer: {},
+ echoDelay: 500, // echo should be happening much faster
+ normalDelay: 1e3, // normally user typed comment will be much slower
+ ECHO: 2,
+ NORMAL: 1,
+ NULL: 0,
+ has(id, value) {
+ const existing = this._lock[id];
+ let ret = this.NULL;
+ if (existing) {
+ ret = existing === value ? this.ECHO : this.NORMAL;
+ }
+ return ret;
+ },
+ clear(id, delay) {
+ const previous = this._timer[id];
+ if (previous) {
+ Meteor.clearTimeout(previous);
+ }
+ this._timer[id] = Meteor.setTimeout(() => this.unset(id), delay);
+ },
+ set(id, value) {
+ const state = this.has(id, value);
+ let delay = this.normalDelay;
+ if (state === this.ECHO) {
+ delay = this.echoDelay;
+ }
+ if (!value) {
+ // user commented, we set a lock
+ value = 1;
+ }
+ this._lock[id] = value;
+ this.clear(id, delay); // always auto reset the locker after delay
+ },
+ unset(id) {
+ delete this._lock[id];
+ },
+};
+
const webhooksAtbts = (process.env.WEBHOOKS_ATTRIBUTES &&
process.env.WEBHOOKS_ATTRIBUTES.split(',')) || [
'cardId',
@@ -20,15 +61,53 @@ const webhooksAtbts = (process.env.WEBHOOKS_ATTRIBUTES &&
'commentId',
'swimlaneId',
];
-
+const responseFunc = data => {
+ const paramCommentId = data.commentId;
+ const paramCardId = data.cardId;
+ const paramBoardId = data.boardId;
+ const newComment = data.comment;
+ if (paramCardId && paramBoardId && newComment) {
+ // only process data with the cardid, boardid and comment text, TODO can expand other functions here to react on returned data
+ const comment = CardComments.findOne({
+ _id: paramCommentId,
+ cardId: paramCardId,
+ boardId: paramBoardId,
+ });
+ const board = Boards.findOne(paramBoardId);
+ const card = Cards.findOne(paramCardId);
+ if (board && card) {
+ if (comment) {
+ Lock.set(comment._id, newComment);
+ CardComments.direct.update(comment._id, {
+ $set: {
+ text: newComment,
+ },
+ });
+ }
+ } else {
+ const userId = data.userId;
+ if (userId) {
+ const inserted = CardComments.direct.insert({
+ text: newComment,
+ userId,
+ cardId,
+ boardId,
+ });
+ Lock.set(inserted._id, newComment);
+ }
+ }
+ }
+};
Meteor.methods({
- outgoingWebhooks(integrations, description, params) {
- check(integrations, Array);
+ outgoingWebhooks(integration, description, params) {
+ check(integration, Object);
check(description, String);
check(params, Object);
+ this.unblock();
// label activity did not work yet, see wekan/models/activities.js
const quoteParams = _.clone(params);
+ const clonedParams = _.clone(params);
[
'card',
'list',
@@ -63,23 +142,51 @@ Meteor.methods({
if (params[key]) value[key] = params[key];
});
value.description = description;
-
+ //integrations.forEach(integration => {
+ const is2way = integration.type === Integrations.Const.TWOWAY;
+ const token = integration.token || '';
+ const headers = {
+ 'Content-Type': 'application/json',
+ };
+ if (token) headers['X-Wekan-Token'] = token;
const options = {
- headers: {
- // 'Content-Type': 'application/json',
- // 'X-Wekan-Activities-Token': 'Random.Id()',
- },
- data: value,
+ headers,
+ data: is2way ? { description, ...clonedParams } : value,
};
+ const url = integration.url;
+ if (is2way) {
+ const cid = params.commentId;
+ const comment = params.comment;
+ const lockState = cid && Lock.has(cid, comment);
+ if (cid && lockState !== Lock.NULL) {
+ // it's a comment and there is a previous lock
+ return;
+ } else if (cid) {
+ Lock.set(cid, comment); // set a lock here
+ }
+ }
+ const response = postCatchError(url, options);
- integrations.forEach(integration => {
- const response = postCatchError(integration.url, options);
-
- if (response && response.statusCode && response.statusCode === 200) {
- return true; // eslint-disable-line consistent-return
- } else {
- throw new Meteor.Error('error-invalid-webhook-response');
+ if (
+ response &&
+ response.statusCode &&
+ response.statusCode >= 200 &&
+ response.statusCode < 300
+ ) {
+ if (is2way) {
+ const data = response.data; // only an JSON encoded response will be actioned
+ if (data) {
+ try {
+ responseFunc(data);
+ } catch (e) {
+ throw new Meteor.Error('error-process-data');
+ }
+ }
}
- });
+ return response; // eslint-disable-line consistent-return
+ } else {
+ throw new Meteor.Error('error-invalid-webhook-response');
+ }
+ //});
},
});
diff --git a/server/publications/boards.js b/server/publications/boards.js
index a6ab9983..e3095833 100644
--- a/server/publications/boards.js
+++ b/server/publications/boards.js
@@ -138,7 +138,7 @@ Meteor.publishRelations('board', function(boardId, isArchived) {
parentCards.selector = _ids => ({ parentId: _ids });
const boards = this.join(Boards);
const subCards = this.join(Cards);
- subCards.selector = () => ({ archived: isArchived });
+ subCards.selector = _ids => ({ _id: _ids, archived: isArchived });
this.cursor(
Cards.find({
@@ -148,7 +148,7 @@ Meteor.publishRelations('board', function(boardId, isArchived) {
function(cardId, card) {
if (card.type === 'cardType-linkedCard') {
const impCardId = card.linkedId;
- subCards.push(impCardId);
+ subCards.push(impCardId); // GitHub issue #2688 and #2693
cardComments.push(impCardId);
attachments.push(impCardId);
checklists.push(impCardId);
diff --git a/server/publications/people.js b/server/publications/people.js
index cc8e3fc9..0a7ef6ee 100644
--- a/server/publications/people.js
+++ b/server/publications/people.js
@@ -1,4 +1,5 @@
-Meteor.publish('people', function(limit) {
+Meteor.publish('people', function(query, limit) {
+ check(query, Match.OneOf(Object, null));
check(limit, Number);
if (!Match.test(this.userId, String)) {
@@ -7,23 +8,20 @@ Meteor.publish('people', function(limit) {
const user = Users.findOne(this.userId);
if (user && user.isAdmin) {
- return Users.find(
- {},
- {
- limit,
- sort: { createdAt: -1 },
- fields: {
- username: 1,
- 'profile.fullname': 1,
- isAdmin: 1,
- emails: 1,
- createdAt: 1,
- loginDisabled: 1,
- authenticationMethod: 1,
- },
+ return Users.find(query, {
+ limit,
+ sort: { createdAt: -1 },
+ fields: {
+ username: 1,
+ 'profile.fullname': 1,
+ isAdmin: 1,
+ emails: 1,
+ createdAt: 1,
+ loginDisabled: 1,
+ authenticationMethod: 1,
},
- );
- } else {
- return [];
+ });
}
+
+ return [];
});
diff --git a/server/publications/settings.js b/server/publications/settings.js
index d273fe62..034737e7 100644
--- a/server/publications/settings.js
+++ b/server/publications/settings.js
@@ -1,3 +1,9 @@
+Meteor.publish('globalwebhooks', () => {
+ const boardId = Integrations.Const.GLOBAL_WEBHOOK_ID;
+ return Integrations.find({
+ boardId,
+ });
+});
Meteor.publish('setting', () => {
return Settings.find(
{},
diff --git a/snap-src/bin/config b/snap-src/bin/config
index aba15f63..21e2608d 100755
--- a/snap-src/bin/config
+++ b/snap-src/bin/config
@@ -104,11 +104,11 @@ DESCRIPTION_IMAGE_COMPRESS_RATIO="Image compress ratio: Allow to shrink attached
DEFAULT_IMAGE_COMPRESS_RATIO=""
KEY_IMAGE_COMPRESS_RATIO="image-compress-ratio"
-DESCRIPTION_BIGEVENTS_PATTERN="Big events pattern: Notify always due etc regardless of notification settings. Default: due, All: received|start|due|end, Disabled: NONE"
-DEFAULT_BIGEVENTS_PATTERN=""
+DESCRIPTION_BIGEVENTS_PATTERN="Big events pattern: Notify always due etc regardless of notification settings. Default: NONE, All: received|start|due|end, Disabled: NONE"
+DEFAULT_BIGEVENTS_PATTERN="NONE"
KEY_BIGEVENTS_PATTERN="bigevents-pattern"
-DESCRIPTION_NOTIFY_DUE_DAYS_BEFORE_AND_AFTER="Notify due days, default 2 days before and after. 0 = due notifications disabled. Default: 2"
+DESCRIPTION_NOTIFY_DUE_DAYS_BEFORE_AND_AFTER="Notify due days, accepts ',' delimited string, i.e. 2,0 means notify will be sent out 2 days before and right on due day. Default: empty"
DEFAULT_NOTIFY_DUE_DAYS_BEFORE_AND_AFTER=""
KEY_NOTIFY_DUE_DAYS_BEFORE_AND_AFTER="notify-due-days-before-and-after"
diff --git a/snap-src/bin/wekan-help b/snap-src/bin/wekan-help
index f1e8ce28..6df3a1b4 100755
--- a/snap-src/bin/wekan-help
+++ b/snap-src/bin/wekan-help
@@ -104,13 +104,10 @@ echo -e "\t$ snap set $SNAP_NAME bigevents-pattern='NONE'"
echo -e "\n"
echo -e "EMAIL DUE DATE NOTIFICATION https://github.com/wekan/wekan/pull/2536"
echo -e "System timelines will be showing any user modification for dueat startat endat receivedat, also notification to the watchers and if any card is due, about due or past due."
-echo -e "Notify due days, default 2 days before and after. 0 = due notifications disabled. Default: 2"
-echo -e "To enable different Notify Due Days Before And After than default 2:"
-echo -e "\t$ snap set $SNAP_NAME notify-due-days-before-and-after='4'"
+echo -e "Notify due days, number less than 15 or negative number accepted, you can specify multiple days delimited by ','. Default: NONE"
+echo -e "To enable different Notify for Due Days on 2 days before, and on the event day "
+echo -e "\t$ snap set $SNAP_NAME notify-due-days-before-and-after='2,0'"
echo -e "\t-Disable Notifying for Due Days:"
-echo -e "\t$ snap set $SNAP_NAME notify-due-days-before-and-after='0'"
-echo -e "\n"
-echo -e "\t-To set back to default 2:"
echo -e "\t$ snap set $SNAP_NAME notify-due-days-before-and-after=''"
echo -e "\n"
echo -e "Notify due at hour of day. Default every morning at 8am. Can be 0-23."
@@ -281,8 +278,9 @@ echo -e "If the LDAP needs a user account to search:"
echo -e "\t$ snap set $SNAP_NAME ldap-authentication='true'"
echo -e "\n"
echo -e "Ldap Authentication User Dn."
-echo -e "The search user Dn:"
-echo -e "\t$ snap set $SNAP_NAME ldap-authentication-userdn='cn=admin,dc=example,dc=org'"
+echo -e "The search user Dn, 2 examples:"
+echo -e "\t$ snap set $SNAP_NAME ldap-authentication-userdn='CN=ldap admin,CN=users,DC=domainmatter,DC=lan'"
+echo -e "\t$ snap set $SNAP_NAME ldap-authentication-userdn='CN=wekan_adm,OU=serviceaccounts,OU=admin,OU=prod,DC=mydomain,DC=com'"
echo -e "\n"
echo -e "Ldap Authentication Password."
echo -e "The password for the search user:"
diff --git a/snapcraft.yaml b/snapcraft.yaml
index 2dfb3bbb..41f1585c 100644
--- a/snapcraft.yaml
+++ b/snapcraft.yaml
@@ -1,6 +1,6 @@
name: wekan
version: 0
-version-script: git describe --dirty --tags | cut -c 2-
+version-script: git describe --tags | cut -c 2-
summary: The open-source kanban
description: |
Wekan is an open-source and collaborative kanban board application.
@@ -81,7 +81,7 @@ parts:
wekan:
source: .
plugin: nodejs
- node-engine: 8.16.0
+ node-engine: 8.16.2
node-packages:
- node-gyp
- node-pre-gyp
@@ -190,7 +190,7 @@ parts:
# git clone --depth 1 -b master --recurse-submodules https://github.com/wekan/markdown.git
# cd ..
#fi
- rm -rf package-lock.json .build
+ rm -rf .build
meteor add standard-minifier-js --allow-superuser
meteor npm install --allow-superuser
meteor npm install --allow-superuser --save babel-runtime
diff --git a/stacksmith/user-scripts/build.sh b/stacksmith/user-scripts/build.sh
index 2250f9bd..23dc7f84 100755
--- a/stacksmith/user-scripts/build.sh
+++ b/stacksmith/user-scripts/build.sh
@@ -2,7 +2,7 @@
set -euxo pipefail
BUILD_DEPS="bsdtar gnupg wget curl bzip2 python git ca-certificates perl-Digest-SHA"
-NODE_VERSION=v8.16.0
+NODE_VERSION=v8.16.2
#METEOR_RELEASE=1.6.0.1 - for Stacksmith, meteor-1.8 branch that could have METEOR@1.8.1-beta.8 or newer
USE_EDGE=false
METEOR_EDGE=1.5-beta.17
diff --git a/start-wekan.bat b/start-wekan.bat
index d4628ee7..63eeebe3 100755
--- a/start-wekan.bat
+++ b/start-wekan.bat
@@ -45,27 +45,27 @@ REM SET ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15
REM # ==== BIGEVENTS DUE ETC NOTIFICATIONS =====
REM # https://github.com/wekan/wekan/pull/2541
-REM # Introduced a system env var BIGEVENTS_PATTERN default as "due",
+REM # Introduced a system env var BIGEVENTS_PATTERN default as "NONE",
REM # so any activityType matches the pattern, system will send out
REM # notifications to all board members no matter they are watching
REM # or tracking the board or not. Owner of the wekan server can
REM # disable the feature by setting this variable to "NONE" or
REM # change the pattern to any valid regex. i.e. '|' delimited
REM # activityType names.
-REM # a) Default
+REM # a) Example
REM SET BIGEVENTS_PATTERN=due
REM # b) All
REM SET BIGEVENTS_PATTERN=received|start|due|end
REM # c) Disabled
-REM SET BIGEVENTS_PATTERN=NONE
+SET BIGEVENTS_PATTERN=NONE
REM # ==== EMAIL DUE DATE NOTIFICATION =====
REM # https://github.com/wekan/wekan/pull/2536
REM # System timelines will be showing any user modification for
REM # dueat startat endat receivedat, also notification to
REM # the watchers and if any card is due, about due or past due.
-REM # Notify due days, default 2 days before and after. 0 = due notifications disabled. Default: 2
-REM SET NOTIFY_DUE_DAYS_BEFORE_AND_AFTER=2
+REM # Notify due days, default is None.
+REM # SET NOTIFY_DUE_DAYS_BEFORE_AND_AFTER=2,0
REM # Notify due at hour of day. Default every morning at 8am. Can be 0-23.
REM # If env variable has parsing error, use default. Notification sent to watchers.
REM SET NOTIFY_DUE_AT_HOUR_OF_DAY=8
@@ -206,6 +206,11 @@ REM # LDAP_AUTHENTIFICATION_USERDN : The search user DN
REM # example: LDAP_AUTHENTIFICATION_USERDN=cn=admin,dc=example,dc=org
REM SET LDAP_AUTHENTIFICATION_USERDN=
+REM # The search user DN - You need quotes when you have spaces in parameters
+REM # 2 examples:
+REM SET LDAP_AUTHENTIFICATION_USERDN="CN=ldap admin,CN=users,DC=domainmatter,DC=lan"
+REM SET LDAP_AUTHENTIFICATION_USERDN="CN=wekan_adm,OU=serviceaccounts,OU=admin,OU=prod,DC=mydomain,DC=com"
+
REM # LDAP_AUTHENTIFICATION_PASSWORD : The password for the search user
REM # example : AUTHENTIFICATION_PASSWORD=admin
REM SET LDAP_AUTHENTIFICATION_PASSWORD=
diff --git a/start-wekan.sh b/start-wekan.sh
index 41d41208..35f663db 100755
--- a/start-wekan.sh
+++ b/start-wekan.sh
@@ -51,19 +51,19 @@
#---------------------------------------------------------------
# ==== BIGEVENTS DUE ETC NOTIFICATIONS =====
# https://github.com/wekan/wekan/pull/2541
- # Introduced a system env var BIGEVENTS_PATTERN default as "due",
+ # Introduced a system env var BIGEVENTS_PATTERN default as "NONE",
# so any activityType matches the pattern, system will send out
# notifications to all board members no matter they are watching
# or tracking the board or not. Owner of the wekan server can
# disable the feature by setting this variable to "NONE" or
# change the pattern to any valid regex. i.e. '|' delimited
# activityType names.
- # a) Default
+ # a) Example
#export BIGEVENTS_PATTERN=due
# b) All
#export BIGEVENTS_PATTERN=received|start|due|end
# c) Disabled
- #export BIGEVENTS_PATTERN=NONE
+ export BIGEVENTS_PATTERN=NONE
#---------------------------------------------------------------
# ==== EMAIL DUE DATE NOTIFICATION =====
# https://github.com/wekan/wekan/pull/2536
@@ -71,8 +71,9 @@
# dueat startat endat receivedat, also notification to
# the watchers and if any card is due, about due or past due.
#
- # Notify due days, default 2 days before and after. 0 = due notifications disabled. Default: 2
- #export NOTIFY_DUE_DAYS_BEFORE_AND_AFTER=2
+ # Notify due days, default is None.
+ #export NOTIFY_DUE_DAYS_BEFORE_AND_AFTER=2,0
+ # it will notify user 2 days before due day and on the due day
#
# Notify due at hour of day. Default every morning at 8am. Can be 0-23.
# If env variable has parsing error, use default. Notification sent to watchers.
@@ -218,7 +219,12 @@
#export LDAP_AUTHENTIFICATION=false
# LDAP_AUTHENTIFICATION_USERDN : The search user DN
# example : export LDAP_AUTHENTIFICATION_USERDN=cn=admin,dc=example,dc=org
- #export LDAP_AUTHENTIFICATION_USERDN=
+ #----------------------------------------------------------------------------
+ # The search user DN - You need quotes when you have spaces in parameters
+ # 2 examples:
+ #export LDAP_AUTHENTIFICATION_USERDN="CN=ldap admin,CN=users,DC=domainmatter,DC=lan"
+ #export LDAP_AUTHENTIFICATION_USERDN="CN=wekan_adm,OU=serviceaccounts,OU=admin,OU=prod,DC=mydomain,DC=com"
+ #---------------------------------------------------------------------------
# LDAP_AUTHENTIFICATION_PASSWORD : The password for the search user
# example : AUTHENTIFICATION_PASSWORD=admin
#export LDAP_AUTHENTIFICATION_PASSWORD=
diff --git a/torodb-postgresql/docker-compose.yml b/torodb-postgresql/docker-compose.yml
index 4a6a745d..550752a5 100644
--- a/torodb-postgresql/docker-compose.yml
+++ b/torodb-postgresql/docker-compose.yml
@@ -211,6 +211,66 @@ services:
# https://github.com/wekan/wekan-gogs
# If you disable Wekan API with false, Export Board does not work.
- WITH_API=true
+ #---------------------------------------------------------------
+ # ==== PASSWORD BRUTE FORCE PROTECTION ====
+ #https://atmospherejs.com/lucasantoniassi/accounts-lockout
+ #Defaults below. Uncomment to change. wekan/server/accounts-lockout.js
+ #- ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=3
+ #- ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD=60
+ #- ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW=15
+ #- ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE=3
+ #- ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60
+ #- ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15
+ #---------------------------------------------------------------
+ # ==== STORE ATTACHMENT ON SERVER FILESYSTEM INSTEAD OF MONGODB ====
+ # https://github.com/wekan/wekan/pull/2603
+ #- ATTACHMENTS_STORE_PATH = <pathname> # pathname can be relative or fullpath
+ #---------------------------------------------------------------
+ # ==== RICH TEXT EDITOR IN CARD COMMENTS ====
+ # https://github.com/wekan/wekan/pull/2560
+ - RICHER_CARD_COMMENT_EDITOR=true
+ #---------------------------------------------------------------
+ # ==== CARD OPENED, SEND WEBHOOK MESSAGE ====
+ # https://github.com/wekan/wekan/issues/2518
+ - CARD_OPENED_WEBHOOK_ENABLED=false
+ #---------------------------------------------------------------
+ # ==== Allow to shrink attached/pasted image ====
+ # https://github.com/wekan/wekan/pull/2544
+ #-MAX_IMAGE_PIXEL=1024
+ #-IMAGE_COMPRESS_RATIO=80
+ #---------------------------------------------------------------
+ # ==== BIGEVENTS DUE ETC NOTIFICATIONS =====
+ # https://github.com/wekan/wekan/pull/2541
+ # Introduced a system env var BIGEVENTS_PATTERN default as "NONE",
+ # so any activityType matches the pattern, system will send out
+ # notifications to all board members no matter they are watching
+ # or tracking the board or not. Owner of the wekan server can
+ # disable the feature by setting this variable to "NONE" or
+ # change the pattern to any valid regex. i.e. '|' delimited
+ # activityType names.
+ # a) Example
+ #- BIGEVENTS_PATTERN=due
+ # b) All
+ #- BIGEVENTS_PATTERN=received|start|due|end
+ # c) Disabled
+ - BIGEVENTS_PATTERN=NONE
+ #---------------------------------------------------------------
+ # ==== EMAIL DUE DATE NOTIFICATION =====
+ # https://github.com/wekan/wekan/pull/2536
+ # System timelines will be showing any user modification for
+ # dueat startat endat receivedat, also notification to
+ # the watchers and if any card is due, about due or past due.
+ #
+ # Notify due days, default 2 days before and after. 0 = due notifications disabled. Default: 2
+ #- NOTIFY_DUE_DAYS_BEFORE_AND_AFTER=2
+ #
+ # Notify due at hour of day. Default every morning at 8am. Can be 0-23.
+ # If env variable has parsing error, use default. Notification sent to watchers.
+ #- NOTIFY_DUE_AT_HOUR_OF_DAY=8
+ #-----------------------------------------------------------------
+ # ==== EMAIL NOTIFICATION TIMEOUT, ms =====
+ # Defaut: 30000 ms = 30s
+ #- EMAIL_NOTIFICATION_TIMEOUT=30000
#-----------------------------------------------------------------
# ==== CORS =====
# CORS: Set Access-Control-Allow-Origin header. Example: *