summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.babelrc5
-rw-r--r--.eslintrc.json1
-rw-r--r--.future-snap/broken-snapcraft.yaml (renamed from .sandstorm-meteor-1.8/snapcraft.yaml)23
-rw-r--r--.future-snap/snapcraft.yaml (renamed from .sandstorm-meteor-1.8/future/snapcraft.yaml)0
-rw-r--r--.gitpod.Dockerfile10
-rw-r--r--.gitpod.yml4
-rw-r--r--.meteor/packages6
-rw-r--r--.meteor/release2
-rw-r--r--.meteor/versions10
-rw-r--r--.sandstorm-meteor-1.8/.meteor/.finished-upgraders20
-rw-r--r--.sandstorm-meteor-1.8/.meteor/.gitignore2
-rw-r--r--.sandstorm-meteor-1.8/.meteor/.id7
-rw-r--r--.sandstorm-meteor-1.8/.meteor/cordova-plugins0
-rw-r--r--.sandstorm-meteor-1.8/.meteor/packages100
-rw-r--r--.sandstorm-meteor-1.8/.meteor/platforms2
-rw-r--r--.sandstorm-meteor-1.8/.meteor/release1
-rw-r--r--.sandstorm-meteor-1.8/.meteor/versions198
-rw-r--r--.sandstorm-meteor-1.8/cfs_access-point.txt914
-rw-r--r--.sandstorm-meteor-1.8/export.js238
-rw-r--r--.sandstorm-meteor-1.8/ldap.js640
-rw-r--r--.sandstorm-meteor-1.8/oidc_server.js163
-rw-r--r--.sandstorm-meteor-1.8/package-lock.json4361
-rw-r--r--.sandstorm-meteor-1.8/package.json73
-rw-r--r--.sandstorm-meteor-1.8/wekanCreator.js853
-rw-r--r--.travis.yml2
-rw-r--r--CHANGELOG.md174
-rw-r--r--Dockerfile9
-rw-r--r--Dockerfile.arm64v877
-rw-r--r--README.md4
-rw-r--r--Stackerfile.yml2
-rw-r--r--client/components/activities/activities.js4
-rw-r--r--client/components/boards/boardArchive.js2
-rw-r--r--client/components/boards/boardBody.js10
-rw-r--r--client/components/boards/boardsList.jade6
-rw-r--r--client/components/boards/boardsList.js75
-rw-r--r--client/components/boards/boardsList.styl18
-rw-r--r--client/components/cards/cardDetails.jade2
-rw-r--r--client/components/cards/cardDetails.js53
-rw-r--r--client/components/cards/cardDetails.styl1
-rw-r--r--client/components/cards/checklists.jade3
-rw-r--r--client/components/cards/checklists.js31
-rw-r--r--client/components/cards/checklists.styl5
-rw-r--r--client/components/cards/labels.styl2
-rw-r--r--client/components/cards/minicard.jade4
-rw-r--r--client/components/import/import.jade3
-rw-r--r--client/components/lists/list.js22
-rw-r--r--client/components/lists/listBody.js4
-rw-r--r--client/components/lists/listHeader.jade3
-rw-r--r--client/components/main/layouts.js5
-rw-r--r--client/components/main/popup.styl5
-rw-r--r--client/components/notifications/notificationsDrawer.styl5
-rw-r--r--client/components/rules/actions/boardActions.js2
-rw-r--r--client/components/settings/settingBody.js2
-rw-r--r--client/components/sidebar/sidebar.js23
-rw-r--r--client/components/swimlanes/swimlanes.js38
-rw-r--r--client/components/users/userHeader.jade13
-rw-r--r--client/components/users/userHeader.js38
-rw-r--r--client/lib/datepicker.js10
-rw-r--r--docker-compose.yml5
-rw-r--r--helm/wekan/templates/deployment.yaml6
-rw-r--r--helm/wekan/templates/serviceaccount.yaml4
-rw-r--r--helm/wekan/values.yaml11
-rw-r--r--i18n/ar.i18n.json75
-rw-r--r--i18n/bg.i18n.json15
-rw-r--r--i18n/br.i18n.json15
-rw-r--r--i18n/ca.i18n.json15
-rw-r--r--i18n/cs.i18n.json15
-rw-r--r--i18n/da.i18n.json1509
-rw-r--r--i18n/de.i18n.json19
-rw-r--r--i18n/el.i18n.json15
-rw-r--r--i18n/en-GB.i18n.json15
-rw-r--r--i18n/en.i18n.json12
-rw-r--r--i18n/eo.i18n.json15
-rw-r--r--i18n/es-AR.i18n.json23
-rw-r--r--i18n/es.i18n.json17
-rw-r--r--i18n/eu.i18n.json17
-rw-r--r--i18n/fa.i18n.json41
-rw-r--r--i18n/fi.i18n.json15
-rw-r--r--i18n/fr.i18n.json15
-rw-r--r--i18n/gl.i18n.json15
-rw-r--r--i18n/he.i18n.json17
-rw-r--r--i18n/hi.i18n.json15
-rw-r--r--i18n/hu.i18n.json15
-rw-r--r--i18n/hy.i18n.json15
-rw-r--r--i18n/id.i18n.json15
-rw-r--r--i18n/ig.i18n.json15
-rw-r--r--i18n/it.i18n.json31
-rw-r--r--i18n/ja.i18n.json33
-rw-r--r--i18n/ka.i18n.json15
-rw-r--r--i18n/km.i18n.json15
-rw-r--r--i18n/ko.i18n.json15
-rw-r--r--i18n/lv.i18n.json15
-rw-r--r--i18n/mk.i18n.json15
-rw-r--r--i18n/mn.i18n.json15
-rw-r--r--i18n/nb.i18n.json15
-rw-r--r--i18n/nl.i18n.json31
-rw-r--r--i18n/oc.i18n.json15
-rw-r--r--i18n/pl.i18n.json33
-rw-r--r--i18n/pt-BR.i18n.json17
-rw-r--r--i18n/pt.i18n.json15
-rw-r--r--i18n/ro.i18n.json15
-rw-r--r--i18n/ru.i18n.json19
-rw-r--r--i18n/sl.i18n.json15
-rw-r--r--i18n/sr.i18n.json381
-rw-r--r--i18n/sv.i18n.json15
-rw-r--r--i18n/sw.i18n.json15
-rw-r--r--i18n/ta.i18n.json15
-rw-r--r--i18n/th.i18n.json15
-rw-r--r--i18n/tr.i18n.json15
-rw-r--r--i18n/uk.i18n.json15
-rw-r--r--i18n/vi.i18n.json15
-rw-r--r--i18n/zh-CN.i18n.json33
-rw-r--r--i18n/zh-HK.i18n.json15
-rw-r--r--i18n/zh-TW.i18n.json31
-rw-r--r--models/boards.js32
-rw-r--r--models/cards.js30
-rw-r--r--models/settings.js4
-rw-r--r--models/trelloCreator.js8
-rw-r--r--models/users.js66
-rw-r--r--package-lock.json989
-rw-r--r--package.json6
-rw-r--r--packages/wekan-oidc/oidc_server.js1
-rw-r--r--public/api/wekan.html4681
-rw-r--r--public/api/wekan.yml999
-rw-r--r--public/robots.txt2
-rw-r--r--rebuild-wekan.bat7
-rwxr-xr-xrebuild-wekan.sh6
-rwxr-xr-xreleases/rebuild-release.sh2
-rwxr-xr-xreleases/release-sandstorm.sh39
-rw-r--r--sandstorm-pkgdef.capnp5
-rw-r--r--sandstorm.js4
-rw-r--r--server/migrations.js8
-rw-r--r--server/publications/boards.js5
-rwxr-xr-xsnap-src/bin/config7
-rwxr-xr-xsnap-src/bin/mongodb-control2
-rwxr-xr-xsnap-src/bin/wekan-help3
-rw-r--r--snapcraft.yaml4
-rwxr-xr-xstacksmith/user-scripts/build.sh4
-rwxr-xr-xstart-wekan.bat7
-rwxr-xr-xstart-wekan.sh3
-rw-r--r--torodb-postgresql/docker-compose.yml5
-rw-r--r--wekan-dockerfile-manifest.yaml11
142 files changed, 3260 insertions, 14845 deletions
diff --git a/.babelrc b/.babelrc
new file mode 100644
index 00000000..cabc6f83
--- /dev/null
+++ b/.babelrc
@@ -0,0 +1,5 @@
+{
+ "presets": [
+ "@babel/preset-stage-3"
+ ]
+}
diff --git a/.eslintrc.json b/.eslintrc.json
index 2de7450f..f65e299d 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -11,6 +11,7 @@
"browser": true,
"meteor": true
},
+ "parser": "babel-eslint",
"parserOptions": {
"ecmaVersion": 2018,
"sourceType": "module"
diff --git a/.sandstorm-meteor-1.8/snapcraft.yaml b/.future-snap/broken-snapcraft.yaml
index 2f965fe1..6b9cb077 100644
--- a/.sandstorm-meteor-1.8/snapcraft.yaml
+++ b/.future-snap/broken-snapcraft.yaml
@@ -65,9 +65,9 @@ apps:
parts:
mongodb:
- source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-3.2.22.tgz
+ source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-4.2.6.tgz
plugin: dump
- stage-packages: [libssl1.0.0]
+ stage-packages: [libssl1.0.0, libcurl3]
filesets:
mongo:
- usr
@@ -81,19 +81,20 @@ parts:
wekan:
source: .
plugin: nodejs
- node-engine: 8.17.0
+ node-engine: 12.16.2
node-packages:
- node-gyp
- node-pre-gyp
- - fibers@2.0.0
+ - fibers
build-packages:
- ca-certificates
- apt-utils
- python
-# - python3
+ - python3
- g++
- capnproto
- curl
+ - libcurl3
- execstack
- nodejs
- npm
@@ -104,6 +105,18 @@ parts:
rm -rf ~/.meteor ~/.npm /usr/local/lib/node_modules
# Create the OpenAPI specification
rm -rf .build
+ ## Use Meteor 1.8.x on Snap
+ #rm -rf .meteor
+ #mv .snap-meteor-1.8/.meteor .
+ #mv .snap-meteor-1.8/package.json .
+ #mv .snap-meteor-1.8/package-lock.json .
+ ## Meteor 1.9.x has changes to Buffer() => Buffer.alloc(), so reverting those
+ #mv .snap-meteor-1.8/cfs_access-point.txt fix-download-unicode/
+ #mv .snap-meteor-1.8/export.js models/
+ #mv .snap-meteor-1.8/wekanCreator.js models/
+ #mv .snap-meteor-1.8/ldap.js packages/wekan-ldap/server/ldap.js
+ #mv .snap-meteor-1.8/oidc_server.js packages/wekan-oidc/oidc_server.js
+ rm -rf .snap-meteor-1.8
#mkdir -p .build/python
#cd .build/python
#git clone --depth 1 -b master https://github.com/Kronuz/esprima-python
diff --git a/.sandstorm-meteor-1.8/future/snapcraft.yaml b/.future-snap/snapcraft.yaml
index a84c5d1f..a84c5d1f 100644
--- a/.sandstorm-meteor-1.8/future/snapcraft.yaml
+++ b/.future-snap/snapcraft.yaml
diff --git a/.gitpod.Dockerfile b/.gitpod.Dockerfile
new file mode 100644
index 00000000..be6e71f5
--- /dev/null
+++ b/.gitpod.Dockerfile
@@ -0,0 +1,10 @@
+FROM gitpod/workspace-mongodb
+
+USER gitpod
+
+# Install custom tools, runtime, etc. using apt-get
+# For example, the command below would install "bastet" - a command line tetris clone:
+#
+# RUN sudo apt-get -q update && # sudo apt-get install -yq bastet && # sudo rm -rf /var/lib/apt/lists/*
+#
+# More information: https://www.gitpod.io/docs/config-docker/
diff --git a/.gitpod.yml b/.gitpod.yml
new file mode 100644
index 00000000..6463af3b
--- /dev/null
+++ b/.gitpod.yml
@@ -0,0 +1,4 @@
+tasks:
+ - init: npm install
+image:
+ file: .gitpod.Dockerfile
diff --git a/.meteor/packages b/.meteor/packages
index c8d129d4..ba278f34 100644
--- a/.meteor/packages
+++ b/.meteor/packages
@@ -6,7 +6,7 @@
meteor-base@1.4.0
# Build system
-ecmascript@0.14.2
+ecmascript@0.14.3
standard-minifier-css@1.6.0
standard-minifier-js@2.6.0
mquandalle:jade
@@ -23,7 +23,7 @@ dburles:collection-helpers
idmontie:migrations
matb33:collection-hooks
matteodem:easy-search
-mongo@1.9.0
+mongo@1.10.0
mquandalle:collection-mutations
# Account system
@@ -72,7 +72,7 @@ simple:rest-accounts-password
useraccounts:core
email@1.2.3
horka:swipebox
-dynamic-import@0.5.1
+dynamic-import@0.5.2
staringatlights:fast-render
accounts-password@1.6.0
diff --git a/.meteor/release b/.meteor/release
index d2597811..3ea26528 100644
--- a/.meteor/release
+++ b/.meteor/release
@@ -1 +1 @@
-METEOR@1.10.1
+METEOR@1.10.2
diff --git a/.meteor/versions b/.meteor/versions
index 062697ea..5157f679 100644
--- a/.meteor/versions
+++ b/.meteor/versions
@@ -104,13 +104,13 @@ meteorspark:util@0.2.0
minifier-css@1.5.0
minifier-js@2.6.0
minifiers@1.1.8-faster-rebuild.0
-minimongo@1.5.0
+minimongo@1.6.0
mobile-status-bar@1.1.0
modern-browsers@0.1.5
modules@0.15.0
modules-runtime@0.12.0
momentjs:moment@2.24.0
-mongo@1.9.1
+mongo@1.10.0
mongo-decimal@0.1.1
mongo-dev-server@1.1.0
mongo-id@1.0.7
@@ -162,11 +162,11 @@ simple:json-routes@2.1.0
simple:rest-accounts-password@1.1.2
simple:rest-bearer-token-parser@1.0.1
simple:rest-json-error-handler@1.0.1
-socket-stream-client@0.2.3
+socket-stream-client@0.3.0
softwarerero:accounts-t9n@1.3.11
spacebars@1.0.15
spacebars-compiler@1.1.3
-srp@1.0.12
+srp@1.1.0
standard-minifier-css@1.6.0
standard-minifier-js@2.6.0
staringatlights:fast-render@3.2.0
@@ -181,7 +181,7 @@ tracker@1.2.0
twbs:bootstrap@3.3.6
ui@1.0.13
underscore@1.0.10
-url@1.2.0
+url@1.3.0
useraccounts:core@1.14.2
useraccounts:flow-routing@1.14.2
useraccounts:unstyled@1.14.2
diff --git a/.sandstorm-meteor-1.8/.meteor/.finished-upgraders b/.sandstorm-meteor-1.8/.meteor/.finished-upgraders
deleted file mode 100644
index bc5b50f7..00000000
--- a/.sandstorm-meteor-1.8/.meteor/.finished-upgraders
+++ /dev/null
@@ -1,20 +0,0 @@
-# This file contains information which helps Meteor properly upgrade your
-# app when you run 'meteor update'. You should check it into version control
-# with your project.
-
-notices-for-0.9.0
-notices-for-0.9.1
-0.9.4-platform-file
-notices-for-facebook-graph-api-2
-1.2.0-standard-minifiers-package
-1.2.0-meteor-platform-split
-1.2.0-cordova-changes
-1.2.0-breaking-changes
-1.3.0-split-minifiers-package
-1.3.5-remove-old-dev-bundle-link
-1.4.0-remove-old-dev-bundle-link
-1.4.1-add-shell-server-package
-1.4.3-split-account-service-packages
-1.5-add-dynamic-import-package
-1.7-split-underscore-from-meteor-base
-1.8.3-split-jquery-from-blaze
diff --git a/.sandstorm-meteor-1.8/.meteor/.gitignore b/.sandstorm-meteor-1.8/.meteor/.gitignore
deleted file mode 100644
index 501f92e4..00000000
--- a/.sandstorm-meteor-1.8/.meteor/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-dev_bundle
-local
diff --git a/.sandstorm-meteor-1.8/.meteor/.id b/.sandstorm-meteor-1.8/.meteor/.id
deleted file mode 100644
index 0556ccf7..00000000
--- a/.sandstorm-meteor-1.8/.meteor/.id
+++ /dev/null
@@ -1,7 +0,0 @@
-# This file contains a token that is unique to your project.
-# Check it into your repository along with the rest of this directory.
-# It can be used for purposes such as:
-# - ensuring you don't accidentally deploy one app on top of another
-# - providing package authors with aggregated statistics
-
-dvyihgykyzec6y1dpg
diff --git a/.sandstorm-meteor-1.8/.meteor/cordova-plugins b/.sandstorm-meteor-1.8/.meteor/cordova-plugins
deleted file mode 100644
index e69de29b..00000000
--- a/.sandstorm-meteor-1.8/.meteor/cordova-plugins
+++ /dev/null
diff --git a/.sandstorm-meteor-1.8/.meteor/packages b/.sandstorm-meteor-1.8/.meteor/packages
deleted file mode 100644
index 8af7f314..00000000
--- a/.sandstorm-meteor-1.8/.meteor/packages
+++ /dev/null
@@ -1,100 +0,0 @@
-# Meteor packages used by this project, one per line.
-#
-# 'meteor add' and 'meteor remove' will edit this file for you,
-# but you can also edit it by hand.
-
-meteor-base@1.4.0
-
-# Build system
-ecmascript@0.13.2
-standard-minifier-css@1.5.4
-standard-minifier-js@2.5.2
-mquandalle:jade
-
-# Polyfills
-es5-shim@4.8.0
-
-# Collections
-aldeed:collection2
-cfs:standard-packages
-cottz:publish-relations
-dburles:collection-helpers
-idmontie:migrations
-matb33:collection-hooks
-matteodem:easy-search
-mongo@1.7.0
-mquandalle:collection-mutations
-
-# Account system
-kenton:accounts-sandstorm
-service-configuration@1.0.11
-useraccounts:unstyled
-useraccounts:flow-routing
-wekan-ldap
-wekan-accounts-cas
-wekan-accounts-oidc
-
-# Utilities
-check@1.3.1
-jquery@1.11.10
-random@1.1.0
-reactive-dict@1.3.0
-session@1.2.0
-tracker@1.2.0
-underscore@1.0.10
-3stack:presence
-alethes:pages
-arillo:flow-router-helpers
-audit-argument-checks@1.0.7
-kadira:blaze-layout
-kadira:dochead
-mquandalle:autofocus
-ongoworks:speakingurl
-raix:handlebar-helpers
-tap:i18n
-http@1.4.2
-
-# UI components
-blaze
-reactive-var@1.0.11
-fortawesome:fontawesome
-mousetrap:mousetrap
-mquandalle:jquery-textcomplete
-mquandalle:jquery-ui-drag-drop-sort
-mquandalle:mousetrap-bindglobal
-peerlibrary:blaze-components@=0.15.1
-templates:tabs
-verron:autosize
-simple:json-routes
-rajit:bootstrap3-datepicker
-shell-server@0.4.0
-simple:rest-accounts-password
-useraccounts:core
-email@1.2.3
-horka:swipebox
-dynamic-import@0.5.1
-staringatlights:fast-render
-
-accounts-password@1.5.2
-cfs:gridfs
-rzymek:fullcalendar
-momentjs:moment@2.22.2
-browser-policy-framing@1.1.0
-mquandalle:moment
-msavin:usercache
-wekan-scrollbar
-mquandalle:perfect-scrollbar
-mdg:meteor-apm-agent@3.2.0-rc.0!
-# Keep stylus in 1.1.0, because building v2 takes extra 52 minutes.
-coagmano:stylus@1.1.0!
-lucasantoniassi:accounts-lockout
-meteorhacks:subs-manager
-meteorhacks:picker
-lamhieu:unblock
-meteorhacks:aggregate@1.3.0
-wekan-markdown
-konecty:mongo-counter
-percolate:synced-cron
-easylogic:summernote
-cfs:filesystem
-ostrio:cookies
diff --git a/.sandstorm-meteor-1.8/.meteor/platforms b/.sandstorm-meteor-1.8/.meteor/platforms
deleted file mode 100644
index efeba1b5..00000000
--- a/.sandstorm-meteor-1.8/.meteor/platforms
+++ /dev/null
@@ -1,2 +0,0 @@
-server
-browser
diff --git a/.sandstorm-meteor-1.8/.meteor/release b/.sandstorm-meteor-1.8/.meteor/release
deleted file mode 100644
index bfccdc2c..00000000
--- a/.sandstorm-meteor-1.8/.meteor/release
+++ /dev/null
@@ -1 +0,0 @@
-METEOR@1.8.3
diff --git a/.sandstorm-meteor-1.8/.meteor/versions b/.sandstorm-meteor-1.8/.meteor/versions
deleted file mode 100644
index 65869431..00000000
--- a/.sandstorm-meteor-1.8/.meteor/versions
+++ /dev/null
@@ -1,198 +0,0 @@
-3stack:presence@1.1.2
-accounts-base@1.4.5
-accounts-oauth@1.1.16
-accounts-password@1.5.2
-aldeed:collection2@2.10.0
-aldeed:collection2-core@1.2.0
-aldeed:schema-deny@1.1.0
-aldeed:schema-index@1.1.1
-aldeed:simple-schema@1.5.4
-alethes:pages@1.8.6
-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.4.2
-babel-runtime@1.4.0
-base64@1.0.12
-binary-heap@1.0.11
-blaze@2.3.4
-blaze-tools@1.0.10
-boilerplate-generator@1.6.0
-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.2.0
-cfs:access-point@0.1.49
-cfs:base-package@0.0.30
-cfs:collection@0.5.5
-cfs:collection-filters@0.2.4
-cfs:data-man@0.0.6
-cfs:file@0.1.17
-cfs:filesystem@0.1.2
-cfs:gridfs@0.0.34
-cfs:http-methods@0.0.32
-cfs:http-publish@0.0.13
-cfs:power-queue@0.9.11
-cfs:reactive-list@0.0.9
-cfs:reactive-property@0.0.4
-cfs:standard-packages@0.5.10
-cfs:storage-adapter@0.2.4
-cfs:tempstore@0.1.6
-cfs:upload-http@0.0.20
-cfs:worker@0.1.5
-check@1.3.1
-chuangbo:cookie@1.1.0
-coagmano:stylus@1.1.0
-coffeescript@1.0.17
-cottz:publish-relations@2.0.8
-dburles:collection-helpers@1.1.0
-ddp@1.4.0
-ddp-client@2.3.3
-ddp-common@1.4.0
-ddp-rate-limiter@1.0.7
-ddp-server@2.3.0
-deps@1.0.12
-diff-sequence@1.1.1
-dynamic-import@0.5.1
-easylogic:summernote@0.8.8
-ecmascript@0.13.2
-ecmascript-runtime@0.7.0
-ecmascript-runtime-client@0.9.0
-ecmascript-runtime-server@0.8.0
-ejson@1.1.1
-email@1.2.3
-es5-shim@4.8.0
-fastclick@1.0.13
-fetch@0.1.1
-fortawesome:fontawesome@4.7.0
-geojson-utils@1.0.10
-horka:swipebox@1.0.2
-hot-code-push@1.0.4
-html-tools@1.0.11
-htmljs@1.0.11
-http@1.4.2
-id-map@1.1.0
-idmontie:migrations@1.0.3
-inter-process-messaging@0.1.0
-jquery@1.11.11
-kadira:blaze-layout@2.3.0
-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.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.9.1
-matteodem:easy-search@1.6.4
-mdg:meteor-apm-agent@3.2.5
-mdg:validation-error@0.5.1
-meteor@1.9.3
-meteor-base@1.4.0
-meteor-platform@1.2.6
-meteorhacks:aggregate@1.3.0
-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.3
-minifier-js@2.5.1
-minifiers@1.1.8-faster-rebuild.0
-minimongo@1.4.5
-mobile-status-bar@1.0.14
-modern-browsers@0.1.4
-modules@0.14.0
-modules-runtime@0.11.0
-momentjs:moment@2.24.0
-mongo@1.7.0
-mongo-decimal@0.1.1
-mongo-dev-server@1.1.0
-mongo-id@1.0.7
-mongo-livedata@1.0.12
-mousetrap:mousetrap@1.4.6_1
-mquandalle:autofocus@1.0.0
-mquandalle:collection-mutations@0.1.0
-mquandalle:jade@0.4.9
-mquandalle:jade-compiler@0.4.5
-mquandalle:jquery-textcomplete@0.8.0_1
-mquandalle:jquery-ui-drag-drop-sort@0.2.0
-mquandalle:moment@1.0.1
-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.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
-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.10.0
-peerlibrary:reactive-field@0.6.0
-percolate:synced-cron@1.3.2
-promise@0.11.2
-raix:eventemitter@0.1.3
-raix:handlebar-helpers@0.2.5
-rajit:bootstrap3-datepicker@1.7.1_1
-random@1.1.0
-rate-limit@1.0.9
-reactive-dict@1.3.0
-reactive-var@1.0.11
-reload@1.3.0
-retry@1.1.0
-routepolicy@1.1.0
-rzymek:fullcalendar@3.8.0
-server-render@0.3.1
-service-configuration@1.0.11
-session@1.2.0
-sha@1.0.9
-shell-server@0.4.0
-simple:authenticate-user-by-token@1.0.1
-simple:json-routes@2.1.0
-simple:rest-accounts-password@1.1.2
-simple:rest-bearer-token-parser@1.0.1
-simple:rest-json-error-handler@1.0.1
-socket-stream-client@0.2.2
-softwarerero:accounts-t9n@1.3.11
-spacebars@1.0.15
-spacebars-compiler@1.1.3
-srp@1.0.12
-standard-minifier-css@1.5.4
-standard-minifier-js@2.5.2
-staringatlights:fast-render@3.2.0
-staringatlights:inject-data@2.3.0
-tap:i18n@1.8.2
-templates:tabs@2.3.0
-templating@1.3.2
-templating-compiler@1.3.3
-templating-runtime@1.3.2
-templating-tools@1.1.2
-tracker@1.2.0
-twbs:bootstrap@3.3.6
-ui@1.0.13
-underscore@1.0.10
-url@1.2.0
-useraccounts:core@1.14.2
-useraccounts:flow-routing@1.14.2
-useraccounts:unstyled@1.14.2
-verron:autosize@3.0.8
-webapp@1.7.5
-webapp-hashing@1.0.9
-wekan-accounts-cas@0.1.0
-wekan-accounts-oidc@1.0.10
-wekan-ldap@0.0.2
-wekan-markdown@1.0.7
-wekan-oidc@1.0.12
-wekan-scrollbar@3.1.3
-yasaricli:slugify@0.0.7
-zimme:active-route@2.3.2
diff --git a/.sandstorm-meteor-1.8/cfs_access-point.txt b/.sandstorm-meteor-1.8/cfs_access-point.txt
deleted file mode 100644
index 8e3359d0..00000000
--- a/.sandstorm-meteor-1.8/cfs_access-point.txt
+++ /dev/null
@@ -1,914 +0,0 @@
-(function () {
-
-/* Imports */
-var Meteor = Package.meteor.Meteor;
-var global = Package.meteor.global;
-var meteorEnv = Package.meteor.meteorEnv;
-var FS = Package['cfs:base-package'].FS;
-var check = Package.check.check;
-var Match = Package.check.Match;
-var EJSON = Package.ejson.EJSON;
-var HTTP = Package['cfs:http-methods'].HTTP;
-
-/* Package-scope variables */
-var rootUrlPathPrefix, baseUrl, getHeaders, getHeadersByCollection, _existingMountPoints, mountUrls;
-
-(function(){
-
-///////////////////////////////////////////////////////////////////////
-// //
-// packages/cfs_access-point/packages/cfs_access-point.js //
-// //
-///////////////////////////////////////////////////////////////////////
- //
-(function () {
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// packages/cfs:access-point/access-point-common.js //
-// //
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
-rootUrlPathPrefix = __meteor_runtime_config__.ROOT_URL_PATH_PREFIX || ""; // 1
-// Adjust the rootUrlPathPrefix if necessary // 2
-if (rootUrlPathPrefix.length > 0) { // 3
- if (rootUrlPathPrefix.slice(0, 1) !== '/') { // 4
- rootUrlPathPrefix = '/' + rootUrlPathPrefix; // 5
- } // 6
- if (rootUrlPathPrefix.slice(-1) === '/') { // 7
- rootUrlPathPrefix = rootUrlPathPrefix.slice(0, -1); // 8
- } // 9
-} // 10
- // 11
-// prepend ROOT_URL when isCordova // 12
-if (Meteor.isCordova) { // 13
- rootUrlPathPrefix = Meteor.absoluteUrl(rootUrlPathPrefix.replace(/^\/+/, '')).replace(/\/+$/, ''); // 14
-} // 15
- // 16
-baseUrl = '/cfs'; // 17
-FS.HTTP = FS.HTTP || {}; // 18
- // 19
-// Note the upload URL so that client uploader packages know what it is // 20
-FS.HTTP.uploadUrl = rootUrlPathPrefix + baseUrl + '/files'; // 21
- // 22
-/** // 23
- * @method FS.HTTP.setBaseUrl // 24
- * @public // 25
- * @param {String} newBaseUrl - Change the base URL for the HTTP GET and DELETE endpoints. // 26
- * @returns {undefined} // 27
- */ // 28
-FS.HTTP.setBaseUrl = function setBaseUrl(newBaseUrl) { // 29
- // 30
- // Adjust the baseUrl if necessary // 31
- if (newBaseUrl.slice(0, 1) !== '/') { // 32
- newBaseUrl = '/' + newBaseUrl; // 33
- } // 34
- if (newBaseUrl.slice(-1) === '/') { // 35
- newBaseUrl = newBaseUrl.slice(0, -1); // 36
- } // 37
- // 38
- // Update the base URL // 39
- baseUrl = newBaseUrl; // 40
- // 41
- // Change the upload URL so that client uploader packages know what it is // 42
- FS.HTTP.uploadUrl = rootUrlPathPrefix + baseUrl + '/files'; // 43
- // 44
- // Remount URLs with the new baseUrl, unmounting the old, on the server only. // 45
- // If existingMountPoints is empty, then we haven't run the server startup // 46
- // code yet, so this new URL will be used at that point for the initial mount. // 47
- if (Meteor.isServer && !FS.Utility.isEmpty(_existingMountPoints)) { // 48
- mountUrls(); // 49
- } // 50
-}; // 51
- // 52
-/* // 53
- * FS.File extensions // 54
- */ // 55
- // 56
-/** // 57
- * @method FS.File.prototype.url Construct the file url // 58
- * @public // 59
- * @param {Object} [options] // 60
- * @param {String} [options.store] Name of the store to get from. If not defined, the first store defined in `options.stores` for the collection on the client is used.
- * @param {Boolean} [options.auth=null] Add authentication token to the URL query string? By default, a token for the current logged in user is added on the client. Set this to `false` to omit the token. Set this to a string to provide your own token. Set this to a number to specify an expiration time for the token in seconds.
- * @param {Boolean} [options.download=false] Should headers be set to force a download? Typically this means that clicking the link with this URL will download the file to the user's Downloads folder instead of displaying the file in the browser.
- * @param {Boolean} [options.brokenIsFine=false] Return the URL even if we know it's currently a broken link because the file hasn't been saved in the requested store yet.
- * @param {Boolean} [options.metadata=false] Return the URL for the file metadata access point rather than the file itself.
- * @param {String} [options.uploading=null] A URL to return while the file is being uploaded. // 66
- * @param {String} [options.storing=null] A URL to return while the file is being stored. // 67
- * @param {String} [options.filename=null] Override the filename that should appear at the end of the URL. By default it is the name of the file in the requested store.
- * // 69
- * Returns the HTTP URL for getting the file or its metadata. // 70
- */ // 71
-FS.File.prototype.url = function(options) { // 72
- var self = this; // 73
- options = options || {}; // 74
- options = FS.Utility.extend({ // 75
- store: null, // 76
- auth: null, // 77
- download: false, // 78
- metadata: false, // 79
- brokenIsFine: false, // 80
- uploading: null, // return this URL while uploading // 81
- storing: null, // return this URL while storing // 82
- filename: null // override the filename that is shown to the user // 83
- }, options.hash || options); // check for "hash" prop if called as helper // 84
- // 85
- // Primarily useful for displaying a temporary image while uploading an image // 86
- if (options.uploading && !self.isUploaded()) { // 87
- return options.uploading; // 88
- } // 89
- // 90
- if (self.isMounted()) { // 91
- // See if we've stored in the requested store yet // 92
- var storeName = options.store || self.collection.primaryStore.name; // 93
- if (!self.hasStored(storeName)) { // 94
- if (options.storing) { // 95
- return options.storing; // 96
- } else if (!options.brokenIsFine) { // 97
- // We want to return null if we know the URL will be a broken // 98
- // link because then we can avoid rendering broken links, broken // 99
- // images, etc. // 100
- return null; // 101
- } // 102
- } // 103
- // 104
- // Add filename to end of URL if we can determine one // 105
- var filename = options.filename || self.name({store: storeName}); // 106
- if (typeof filename === "string" && filename.length) { // 107
- filename = '/' + filename; // 108
- } else { // 109
- filename = ''; // 110
- } // 111
- // 112
- // TODO: Could we somehow figure out if the collection requires login? // 113
- var authToken = ''; // 114
- if (Meteor.isClient && typeof Accounts !== "undefined" && typeof Accounts._storedLoginToken === "function") { // 115
- if (options.auth !== false) { // 116
- // Add reactive deps on the user // 117
- Meteor.userId(); // 118
- // 119
- var authObject = { // 120
- authToken: Accounts._storedLoginToken() || '' // 121
- }; // 122
- // 123
- // If it's a number, we use that as the expiration time (in seconds) // 124
- if (options.auth === +options.auth) { // 125
- authObject.expiration = FS.HTTP.now() + options.auth * 1000; // 126
- } // 127
- // 128
- // Set the authToken // 129
- var authString = JSON.stringify(authObject); // 130
- authToken = FS.Utility.btoa(authString); // 131
- } // 132
- } else if (typeof options.auth === "string") { // 133
- // If the user supplies auth token the user will be responsible for // 134
- // updating // 135
- authToken = options.auth; // 136
- } // 137
- // 138
- // Construct query string // 139
- var params = {}; // 140
- if (authToken !== '') { // 141
- params.token = authToken; // 142
- } // 143
- if (options.download) { // 144
- params.download = true; // 145
- } // 146
- if (options.store) { // 147
- // We use options.store here instead of storeName because we want to omit the queryString // 148
- // whenever possible, allowing users to have "clean" URLs if they want. The server will // 149
- // assume the first store defined on the server, which means that we are assuming that // 150
- // the first on the client is also the first on the server. If that's not the case, the // 151
- // store option should be supplied. // 152
- params.store = options.store; // 153
- } // 154
- var queryString = FS.Utility.encodeParams(params); // 155
- if (queryString.length) { // 156
- queryString = '?' + queryString; // 157
- } // 158
- // 159
- // Determine which URL to use // 160
- var area; // 161
- if (options.metadata) { // 162
- area = '/record'; // 163
- } else { // 164
- area = '/files'; // 165
- } // 166
- // 167
- // Construct and return the http method url // 168
- return rootUrlPathPrefix + baseUrl + area + '/' + self.collection.name + '/' + self._id + filename + queryString; // 169
- } // 170
- // 171
-}; // 172
- // 173
- // 174
- // 175
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-}).call(this);
-
-
-
-
-
-
-(function () {
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// packages/cfs:access-point/access-point-handlers.js //
-// //
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
-getHeaders = []; // 1
-getHeadersByCollection = {}; // 2
- // 3
-FS.HTTP.Handlers = {}; // 4
- // 5
-/** // 6
- * @method FS.HTTP.Handlers.Del // 7
- * @public // 8
- * @returns {any} response // 9
- * // 10
- * HTTP DEL request handler // 11
- */ // 12
-FS.HTTP.Handlers.Del = function httpDelHandler(ref) { // 13
- var self = this; // 14
- var opts = FS.Utility.extend({}, self.query || {}, self.params || {}); // 15
- // 16
- // If DELETE request, validate with 'remove' allow/deny, delete the file, and return // 17
- FS.Utility.validateAction(ref.collection.files._validators['remove'], ref.file, self.userId); // 18
- // 19
- /* // 20
- * From the DELETE spec: // 21
- * A successful response SHOULD be 200 (OK) if the response includes an // 22
- * entity describing the status, 202 (Accepted) if the action has not // 23
- * yet been enacted, or 204 (No Content) if the action has been enacted // 24
- * but the response does not include an entity. // 25
- */ // 26
- self.setStatusCode(200); // 27
- // 28
- return { // 29
- deleted: !!ref.file.remove() // 30
- }; // 31
-}; // 32
- // 33
-/** // 34
- * @method FS.HTTP.Handlers.GetList // 35
- * @public // 36
- * @returns {Object} response // 37
- * // 38
- * HTTP GET file list request handler // 39
- */ // 40
-FS.HTTP.Handlers.GetList = function httpGetListHandler() { // 41
- // Not Yet Implemented // 42
- // Need to check publications and return file list based on // 43
- // what user is allowed to see // 44
-}; // 45
- // 46
-/* // 47
- requestRange will parse the range set in request header - if not possible it // 48
- will throw fitting errors and autofill range for both partial and full ranges // 49
- // 50
- throws error or returns the object: // 51
- { // 52
- start // 53
- end // 54
- length // 55
- unit // 56
- partial // 57
- } // 58
-*/ // 59
-var requestRange = function(req, fileSize) { // 60
- if (req) { // 61
- if (req.headers) { // 62
- var rangeString = req.headers.range; // 63
- // 64
- // Make sure range is a string // 65
- if (rangeString === ''+rangeString) { // 66
- // 67
- // range will be in the format "bytes=0-32767" // 68
- var parts = rangeString.split('='); // 69
- var unit = parts[0]; // 70
- // 71
- // Make sure parts consists of two strings and range is of type "byte" // 72
- if (parts.length == 2 && unit == 'bytes') { // 73
- // Parse the range // 74
- var range = parts[1].split('-'); // 75
- var start = Number(range[0]); // 76
- var end = Number(range[1]); // 77
- // 78
- // Fix invalid ranges? // 79
- if (range[0] != start) start = 0; // 80
- if (range[1] != end || !end) end = fileSize - 1; // 81
- // 82
- // Make sure range consists of a start and end point of numbers and start is less than end // 83
- if (start < end) { // 84
- // 85
- var partSize = 0 - start + end + 1; // 86
- // 87
- // Return the parsed range // 88
- return { // 89
- start: start, // 90
- end: end, // 91
- length: partSize, // 92
- size: fileSize, // 93
- unit: unit, // 94
- partial: (partSize < fileSize) // 95
- }; // 96
- // 97
- } else { // 98
- throw new Meteor.Error(416, "Requested Range Not Satisfiable"); // 99
- } // 100
- // 101
- } else { // 102
- // The first part should be bytes // 103
- throw new Meteor.Error(416, "Requested Range Unit Not Satisfiable"); // 104
- } // 105
- // 106
- } else { // 107
- // No range found // 108
- } // 109
- // 110
- } else { // 111
- // throw new Error('No request headers set for _parseRange function'); // 112
- } // 113
- } else { // 114
- throw new Error('No request object passed to _parseRange function'); // 115
- } // 116
- // 117
- return { // 118
- start: 0, // 119
- end: fileSize - 1, // 120
- length: fileSize, // 121
- size: fileSize, // 122
- unit: 'bytes', // 123
- partial: false // 124
- }; // 125
-}; // 126
- // 127
-/** // 128
- * @method FS.HTTP.Handlers.Get // 129
- * @public // 130
- * @returns {any} response // 131
- * // 132
- * HTTP GET request handler // 133
- */ // 134
-FS.HTTP.Handlers.Get = function httpGetHandler(ref) { // 135
- var self = this; // 136
- // Once we have the file, we can test allow/deny validators // 137
- // XXX: pass on the "share" query eg. ?share=342hkjh23ggj for shared url access? // 138
- FS.Utility.validateAction(ref.collection._validators['download'], ref.file, self.userId /*, self.query.shareId*/); // 139
- // 140
- var storeName = ref.storeName; // 141
- // 142
- // If no storeName was specified, use the first defined storeName // 143
- if (typeof storeName !== "string") { // 144
- // No store handed, we default to primary store // 145
- storeName = ref.collection.primaryStore.name; // 146
- } // 147
- // 148
- // Get the storage reference // 149
- var storage = ref.collection.storesLookup[storeName]; // 150
- // 151
- if (!storage) { // 152
- throw new Meteor.Error(404, "Not Found", 'There is no store "' + storeName + '"'); // 153
- } // 154
- // 155
- // Get the file // 156
- var copyInfo = ref.file.copies[storeName]; // 157
- // 158
- if (!copyInfo) { // 159
- throw new Meteor.Error(404, "Not Found", 'This file was not stored in the ' + storeName + ' store'); // 160
- } // 161
- // 162
- // Set the content type for file // 163
- if (typeof copyInfo.type === "string") { // 164
- self.setContentType(copyInfo.type); // 165
- } else { // 166
- self.setContentType('application/octet-stream'); // 167
- } // 168
- // 169
- // Add 'Content-Disposition' header if requested a download/attachment URL // 170
- if (typeof ref.download !== "undefined") { // 171
- var filename = ref.filename || copyInfo.name; // 172
- self.addHeader('Content-Disposition', 'attachment; filename="' + filename + '"'); // 173
- } else { // 174
- self.addHeader('Content-Disposition', 'inline'); // 175
- } // 176
- // 177
- // Get the contents range from request // 178
- var range = requestRange(self.request, copyInfo.size); // 179
- // 180
- // Some browsers cope better if the content-range header is // 181
- // still included even for the full file being returned. // 182
- self.addHeader('Content-Range', range.unit + ' ' + range.start + '-' + range.end + '/' + range.size); // 183
- // 184
- // If a chunk/range was requested instead of the whole file, serve that' // 185
- if (range.partial) { // 186
- self.setStatusCode(206, 'Partial Content'); // 187
- } else { // 188
- self.setStatusCode(200, 'OK'); // 189
- } // 190
- // 191
- // Add any other global custom headers and collection-specific custom headers // 192
- FS.Utility.each(getHeaders.concat(getHeadersByCollection[ref.collection.name] || []), function(header) { // 193
- self.addHeader(header[0], header[1]); // 194
- }); // 195
- // 196
- // Inform clients about length (or chunk length in case of ranges) // 197
- self.addHeader('Content-Length', range.length); // 198
- // 199
- // Last modified header (updatedAt from file info) // 200
- self.addHeader('Last-Modified', copyInfo.updatedAt.toUTCString()); // 201
- // 202
- // Inform clients that we accept ranges for resumable chunked downloads // 203
- self.addHeader('Accept-Ranges', range.unit); // 204
- // 205
- if (FS.debug) console.log('Read file "' + (ref.filename || copyInfo.name) + '" ' + range.unit + ' ' + range.start + '-' + range.end + '/' + range.size);
- // 207
- var readStream = storage.adapter.createReadStream(ref.file, {start: range.start, end: range.end}); // 208
- // 209
- readStream.on('error', function(err) { // 210
- // Send proper error message on get error // 211
- if (err.message && err.statusCode) { // 212
- self.Error(new Meteor.Error(err.statusCode, err.message)); // 213
- } else { // 214
- self.Error(new Meteor.Error(503, 'Service unavailable')); // 215
- } // 216
- }); // 217
- // 218
- readStream.pipe(self.createWriteStream()); // 219
-}; // 220
-
-const originalHandler = FS.HTTP.Handlers.Get;
-FS.HTTP.Handlers.Get = function (ref) {
-//console.log(ref.filename);
- try {
- var userAgent = (this.requestHeaders['user-agent']||'').toLowerCase();
-
- if(userAgent.indexOf('msie') >= 0 || userAgent.indexOf('trident') >= 0 || userAgent.indexOf('chrome') >= 0) {
- ref.filename = encodeURIComponent(ref.filename);
- } else if(userAgent.indexOf('firefox') >= 0) {
- ref.filename = new Buffer(ref.filename).toString('binary');
- } else {
- /* safari*/
- ref.filename = new Buffer(ref.filename).toString('binary');
- }
- } catch (ex){
- ref.filename = 'tempfix';
- }
- return originalHandler.call(this, ref);
-};
- // 221
-/** // 222
- * @method FS.HTTP.Handlers.PutInsert // 223
- * @public // 224
- * @returns {Object} response object with _id property // 225
- * // 226
- * HTTP PUT file insert request handler // 227
- */ // 228
-FS.HTTP.Handlers.PutInsert = function httpPutInsertHandler(ref) { // 229
- var self = this; // 230
- var opts = FS.Utility.extend({}, self.query || {}, self.params || {}); // 231
- // 232
- FS.debug && console.log("HTTP PUT (insert) handler"); // 233
- // 234
- // Create the nice FS.File // 235
- var fileObj = new FS.File(); // 236
- // 237
- // Set its name // 238
- fileObj.name(opts.filename || null); // 239
- // 240
- // Attach the readstream as the file's data // 241
- fileObj.attachData(self.createReadStream(), {type: self.requestHeaders['content-type'] || 'application/octet-stream'});
- // 243
- // Validate with insert allow/deny // 244
- FS.Utility.validateAction(ref.collection.files._validators['insert'], fileObj, self.userId); // 245
- // 246
- // Insert file into collection, triggering readStream storage // 247
- ref.collection.insert(fileObj); // 248
- // 249
- // Send response // 250
- self.setStatusCode(200); // 251
- // 252
- // Return the new file id // 253
- return {_id: fileObj._id}; // 254
-}; // 255
- // 256
-/** // 257
- * @method FS.HTTP.Handlers.PutUpdate // 258
- * @public // 259
- * @returns {Object} response object with _id and chunk properties // 260
- * // 261
- * HTTP PUT file update chunk request handler // 262
- */ // 263
-FS.HTTP.Handlers.PutUpdate = function httpPutUpdateHandler(ref) { // 264
- var self = this; // 265
- var opts = FS.Utility.extend({}, self.query || {}, self.params || {}); // 266
- // 267
- var chunk = parseInt(opts.chunk, 10); // 268
- if (isNaN(chunk)) chunk = 0; // 269
- // 270
- FS.debug && console.log("HTTP PUT (update) handler received chunk: ", chunk); // 271
- // 272
- // Validate with insert allow/deny; also mounts and retrieves the file // 273
- FS.Utility.validateAction(ref.collection.files._validators['insert'], ref.file, self.userId); // 274
- // 275
- self.createReadStream().pipe( FS.TempStore.createWriteStream(ref.file, chunk) ); // 276
- // 277
- // Send response // 278
- self.setStatusCode(200); // 279
- // 280
- return { _id: ref.file._id, chunk: chunk }; // 281
-}; // 282
- // 283
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-}).call(this);
-
-
-
-
-
-
-(function () {
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// packages/cfs:access-point/access-point-server.js //
-// //
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
-var path = Npm.require("path"); // 1
- // 2
-HTTP.publishFormats({ // 3
- fileRecordFormat: function (input) { // 4
- // Set the method scope content type to json // 5
- this.setContentType('application/json'); // 6
- if (FS.Utility.isArray(input)) { // 7
- return EJSON.stringify(FS.Utility.map(input, function (obj) { // 8
- return FS.Utility.cloneFileRecord(obj); // 9
- })); // 10
- } else { // 11
- return EJSON.stringify(FS.Utility.cloneFileRecord(input)); // 12
- } // 13
- } // 14
-}); // 15
- // 16
-/** // 17
- * @method FS.HTTP.setHeadersForGet // 18
- * @public // 19
- * @param {Array} headers - List of headers, where each is a two-item array in which item 1 is the header name and item 2 is the header value.
- * @param {Array|String} [collections] - Which collections the headers should be added for. Omit this argument to add the header for all collections.
- * @returns {undefined} // 22
- */ // 23
-FS.HTTP.setHeadersForGet = function setHeadersForGet(headers, collections) { // 24
- if (typeof collections === "string") { // 25
- collections = [collections]; // 26
- } // 27
- if (collections) { // 28
- FS.Utility.each(collections, function(collectionName) { // 29
- getHeadersByCollection[collectionName] = headers || []; // 30
- }); // 31
- } else { // 32
- getHeaders = headers || []; // 33
- } // 34
-}; // 35
- // 36
-/** // 37
- * @method FS.HTTP.publish // 38
- * @public // 39
- * @param {FS.Collection} collection // 40
- * @param {Function} func - Publish function that returns a cursor. // 41
- * @returns {undefined} // 42
- * // 43
- * Publishes all documents returned by the cursor at a GET URL // 44
- * with the format baseUrl/record/collectionName. The publish // 45
- * function `this` is similar to normal `Meteor.publish`. // 46
- */ // 47
-FS.HTTP.publish = function fsHttpPublish(collection, func) { // 48
- var name = baseUrl + '/record/' + collection.name; // 49
- // Mount collection listing URL using http-publish package // 50
- HTTP.publish({ // 51
- name: name, // 52
- defaultFormat: 'fileRecordFormat', // 53
- collection: collection, // 54
- collectionGet: true, // 55
- collectionPost: false, // 56
- documentGet: true, // 57
- documentPut: false, // 58
- documentDelete: false // 59
- }, func); // 60
- // 61
- FS.debug && console.log("Registered HTTP method GET URLs:\n\n" + name + '\n' + name + '/:id\n'); // 62
-}; // 63
- // 64
-/** // 65
- * @method FS.HTTP.unpublish // 66
- * @public // 67
- * @param {FS.Collection} collection // 68
- * @returns {undefined} // 69
- * // 70
- * Unpublishes a restpoint created by a call to `FS.HTTP.publish` // 71
- */ // 72
-FS.HTTP.unpublish = function fsHttpUnpublish(collection) { // 73
- // Mount collection listing URL using http-publish package // 74
- HTTP.unpublish(baseUrl + '/record/' + collection.name); // 75
-}; // 76
- // 77
-_existingMountPoints = {}; // 78
- // 79
-/** // 80
- * @method defaultSelectorFunction // 81
- * @private // 82
- * @returns { collection, file } // 83
- * // 84
- * This is the default selector function // 85
- */ // 86
-var defaultSelectorFunction = function() { // 87
- var self = this; // 88
- // Selector function // 89
- // // 90
- // This function will have to return the collection and the // 91
- // file. If file not found undefined is returned - if null is returned the // 92
- // search was not possible // 93
- var opts = FS.Utility.extend({}, self.query || {}, self.params || {}); // 94
- // 95
- // Get the collection name from the url // 96
- var collectionName = opts.collectionName; // 97
- // 98
- // Get the id from the url // 99
- var id = opts.id; // 100
- // 101
- // Get the collection // 102
- var collection = FS._collections[collectionName]; // 103
- // 104
- // Get the file if possible else return null // 105
- var file = (id && collection)? collection.findOne({ _id: id }): null; // 106
- // 107
- // Return the collection and the file // 108
- return { // 109
- collection: collection, // 110
- file: file, // 111
- storeName: opts.store, // 112
- download: opts.download, // 113
- filename: opts.filename // 114
- }; // 115
-}; // 116
- // 117
-/* // 118
- * @method FS.HTTP.mount // 119
- * @public // 120
- * @param {array of string} mountPoints mount points to map rest functinality on // 121
- * @param {function} selector_f [selector] function returns `{ collection, file }` for mount points to work with // 122
- * // 123
-*/ // 124
-FS.HTTP.mount = function(mountPoints, selector_f) { // 125
- // We take mount points as an array and we get a selector function // 126
- var selectorFunction = selector_f || defaultSelectorFunction; // 127
- // 128
- var accessPoint = { // 129
- 'stream': true, // 130
- 'auth': expirationAuth, // 131
- 'post': function(data) { // 132
- // Use the selector for finding the collection and file reference // 133
- var ref = selectorFunction.call(this); // 134
- // 135
- // We dont support post - this would be normal insert eg. of filerecord? // 136
- throw new Meteor.Error(501, "Not implemented", "Post is not supported"); // 137
- }, // 138
- 'put': function(data) { // 139
- // Use the selector for finding the collection and file reference // 140
- var ref = selectorFunction.call(this); // 141
- // 142
- // Make sure we have a collection reference // 143
- if (!ref.collection) // 144
- throw new Meteor.Error(404, "Not Found", "No collection found"); // 145
- // 146
- // Make sure we have a file reference // 147
- if (ref.file === null) { // 148
- // No id supplied so we will create a new FS.File instance and // 149
- // insert the supplied data. // 150
- return FS.HTTP.Handlers.PutInsert.apply(this, [ref]); // 151
- } else { // 152
- if (ref.file) { // 153
- return FS.HTTP.Handlers.PutUpdate.apply(this, [ref]); // 154
- } else { // 155
- throw new Meteor.Error(404, "Not Found", 'No file found'); // 156
- } // 157
- } // 158
- }, // 159
- 'get': function(data) { // 160
- // Use the selector for finding the collection and file reference // 161
- var ref = selectorFunction.call(this); // 162
- // 163
- // Make sure we have a collection reference // 164
- if (!ref.collection) // 165
- throw new Meteor.Error(404, "Not Found", "No collection found"); // 166
- // 167
- // Make sure we have a file reference // 168
- if (ref.file === null) { // 169
- // No id supplied so we will return the published list of files ala // 170
- // http.publish in json format // 171
- return FS.HTTP.Handlers.GetList.apply(this, [ref]); // 172
- } else { // 173
- if (ref.file) { // 174
- return FS.HTTP.Handlers.Get.apply(this, [ref]); // 175
- } else { // 176
- throw new Meteor.Error(404, "Not Found", 'No file found'); // 177
- } // 178
- } // 179
- }, // 180
- 'delete': function(data) { // 181
- // Use the selector for finding the collection and file reference // 182
- var ref = selectorFunction.call(this); // 183
- // 184
- // Make sure we have a collection reference // 185
- if (!ref.collection) // 186
- throw new Meteor.Error(404, "Not Found", "No collection found"); // 187
- // 188
- // Make sure we have a file reference // 189
- if (ref.file) { // 190
- return FS.HTTP.Handlers.Del.apply(this, [ref]); // 191
- } else { // 192
- throw new Meteor.Error(404, "Not Found", 'No file found'); // 193
- } // 194
- } // 195
- }; // 196
- // 197
- var accessPoints = {}; // 198
- // 199
- // Add debug message // 200
- FS.debug && console.log('Registered HTTP method URLs:'); // 201
- // 202
- FS.Utility.each(mountPoints, function(mountPoint) { // 203
- // Couple mountpoint and accesspoint // 204
- accessPoints[mountPoint] = accessPoint; // 205
- // Remember our mountpoints // 206
- _existingMountPoints[mountPoint] = mountPoint; // 207
- // Add debug message // 208
- FS.debug && console.log(mountPoint); // 209
- }); // 210
- // 211
- // XXX: HTTP:methods should unmount existing mounts in case of overwriting? // 212
- HTTP.methods(accessPoints); // 213
- // 214
-}; // 215
- // 216
-/** // 217
- * @method FS.HTTP.unmount // 218
- * @public // 219
- * @param {string | array of string} [mountPoints] Optional, if not specified all mountpoints are unmounted // 220
- * // 221
- */ // 222
-FS.HTTP.unmount = function(mountPoints) { // 223
- // The mountPoints is optional, can be string or array if undefined then // 224
- // _existingMountPoints will be used // 225
- var unmountList; // 226
- // Container for the mount points to unmount // 227
- var unmountPoints = {}; // 228
- // 229
- if (typeof mountPoints === 'undefined') { // 230
- // Use existing mount points - unmount all // 231
- unmountList = _existingMountPoints; // 232
- } else if (mountPoints === ''+mountPoints) { // 233
- // Got a string // 234
- unmountList = [mountPoints]; // 235
- } else if (mountPoints.length) { // 236
- // Got an array // 237
- unmountList = mountPoints; // 238
- } // 239
- // 240
- // If we have a list to unmount // 241
- if (unmountList) { // 242
- // Iterate over each item // 243
- FS.Utility.each(unmountList, function(mountPoint) { // 244
- // Check _existingMountPoints to make sure the mount point exists in our // 245
- // context / was created by the FS.HTTP.mount // 246
- if (_existingMountPoints[mountPoint]) { // 247
- // Mark as unmount // 248
- unmountPoints[mountPoint] = false; // 249
- // Release // 250
- delete _existingMountPoints[mountPoint]; // 251
- } // 252
- }); // 253
- FS.debug && console.log('FS.HTTP.unmount:'); // 254
- FS.debug && console.log(unmountPoints); // 255
- // Complete unmount // 256
- HTTP.methods(unmountPoints); // 257
- } // 258
-}; // 259
- // 260
-// ### FS.Collection maps on HTTP pr. default on the following restpoints: // 261
-// * // 262
-// baseUrl + '/files/:collectionName/:id/:filename', // 263
-// baseUrl + '/files/:collectionName/:id', // 264
-// baseUrl + '/files/:collectionName' // 265
-// // 266
-// Change/ replace the existing mount point by: // 267
-// ```js // 268
-// // unmount all existing // 269
-// FS.HTTP.unmount(); // 270
-// // Create new mount point // 271
-// FS.HTTP.mount([ // 272
-// '/cfs/files/:collectionName/:id/:filename', // 273
-// '/cfs/files/:collectionName/:id', // 274
-// '/cfs/files/:collectionName' // 275
-// ]); // 276
-// ``` // 277
-// // 278
-mountUrls = function mountUrls() { // 279
- // We unmount first in case we are calling this a second time // 280
- FS.HTTP.unmount(); // 281
- // 282
- FS.HTTP.mount([ // 283
- baseUrl + '/files/:collectionName/:id/:filename', // 284
- baseUrl + '/files/:collectionName/:id', // 285
- baseUrl + '/files/:collectionName' // 286
- ]); // 287
-}; // 288
- // 289
-// Returns the userId from URL token // 290
-var expirationAuth = function expirationAuth() { // 291
- var self = this; // 292
- // 293
- // Read the token from '/hello?token=base64' // 294
- var encodedToken = self.query.token; // 295
- // 296
- FS.debug && console.log("token: "+encodedToken); // 297
- // 298
- if (!encodedToken || !Meteor.users) return false; // 299
- // 300
- // Check the userToken before adding it to the db query // 301
- // Set the this.userId // 302
- var tokenString = FS.Utility.atob(encodedToken); // 303
- // 304
- var tokenObject; // 305
- try { // 306
- tokenObject = JSON.parse(tokenString); // 307
- } catch(err) { // 308
- throw new Meteor.Error(400, 'Bad Request'); // 309
- } // 310
- // 311
- // XXX: Do some check here of the object // 312
- var userToken = tokenObject.authToken; // 313
- if (userToken !== ''+userToken) { // 314
- throw new Meteor.Error(400, 'Bad Request'); // 315
- } // 316
- // 317
- // If we have an expiration token we should check that it's still valid // 318
- if (tokenObject.expiration != null) { // 319
- // check if its too old // 320
- var now = Date.now(); // 321
- if (tokenObject.expiration < now) { // 322
- FS.debug && console.log('Expired token: ' + tokenObject.expiration + ' is less than ' + now); // 323
- throw new Meteor.Error(500, 'Expired token'); // 324
- } // 325
- } // 326
- // 327
- // We are not on a secure line - so we have to look up the user... // 328
- var user = Meteor.users.findOne({ // 329
- $or: [ // 330
- {'services.resume.loginTokens.hashedToken': Accounts._hashLoginToken(userToken)}, // 331
- {'services.resume.loginTokens.token': userToken} // 332
- ] // 333
- }); // 334
- // 335
- // Set the userId in the scope // 336
- return user && user._id; // 337
-}; // 338
- // 339
-HTTP.methods( // 340
- {'/cfs/servertime': { // 341
- get: function(data) { // 342
- return Date.now().toString(); // 343
- } // 344
- } // 345
-}); // 346
- // 347
-// Unify client / server api // 348
-FS.HTTP.now = function() { // 349
- return Date.now(); // 350
-}; // 351
- // 352
-// Start up the basic mount points // 353
-Meteor.startup(function () { // 354
- mountUrls(); // 355
-}); // 356
- // 357
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-}).call(this);
-
-///////////////////////////////////////////////////////////////////////
-
-}).call(this);
-
-
-/* Exports */
-if (typeof Package === 'undefined') Package = {};
-Package['cfs:access-point'] = {};
-
-})();
diff --git a/.sandstorm-meteor-1.8/export.js b/.sandstorm-meteor-1.8/export.js
deleted file mode 100644
index cc979ce0..00000000
--- a/.sandstorm-meteor-1.8/export.js
+++ /dev/null
@@ -1,238 +0,0 @@
-/* global JsonRoutes */
-if (Meteor.isServer) {
- // todo XXX once we have a real API in place, move that route there
- // todo XXX also share the route definition between the client and the server
- // so that we could use something like
- // `ApiRoutes.path('boards/export', boardId)``
- // on the client instead of copy/pasting the route path manually between the
- // client and the server.
- /**
- * @operation export
- * @tag Boards
- *
- * @summary This route is used to export the board.
- *
- * @description If user is already logged-in, pass loginToken as param
- * "authToken": '/api/boards/:boardId/export?authToken=:token'
- *
- * See https://blog.kayla.com.au/server-side-route-authentication-in-meteor/
- * for detailed explanations
- *
- * @param {string} boardId the ID of the board we are exporting
- * @param {string} authToken the loginToken
- */
- JsonRoutes.add('get', '/api/boards/:boardId/export', function(req, res) {
- const boardId = req.params.boardId;
- let user = null;
-
- const loginToken = req.query.authToken;
- if (loginToken) {
- const hashToken = Accounts._hashLoginToken(loginToken);
- user = Meteor.users.findOne({
- 'services.resume.loginTokens.hashedToken': hashToken,
- });
- } else if (!Meteor.settings.public.sandstorm) {
- Authentication.checkUserId(req.userId);
- user = Users.findOne({ _id: req.userId, isAdmin: true });
- }
-
- const exporter = new Exporter(boardId);
- if (exporter.canExport(user)) {
- JsonRoutes.sendResult(res, {
- code: 200,
- data: exporter.build(),
- });
- } else {
- // we could send an explicit error message, but on the other hand the only
- // way to get there is by hacking the UI so let's keep it raw.
- JsonRoutes.sendResult(res, 403);
- }
- });
-}
-
-// 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,
- linkedId: { $in: ['', null] },
- };
- // we do not want to retrieve boardId in related elements
- const noBoardId = {
- fields: {
- boardId: 0,
- },
- };
- const result = {
- _format: 'wekan-board-1.0.0',
- };
- _.extend(
- result,
- Boards.findOne(this._boardId, {
- fields: {
- stars: 0,
- },
- }),
- );
- result.lists = Lists.find(byBoard, noBoardId).fetch();
- result.cards = Cards.find(byBoardNoLinked, noBoardId).fetch();
- result.swimlanes = Swimlanes.find(byBoard, noBoardId).fetch();
- result.customFields = CustomFields.find(
- { boardIds: { $in: [this.boardId] } },
- { fields: { boardId: 0 } },
- ).fetch();
- result.comments = CardComments.find(byBoard, noBoardId).fetch();
- result.activities = Activities.find(byBoard, noBoardId).fetch();
- result.rules = Rules.find(byBoard, noBoardId).fetch();
- result.checklists = [];
- result.checklistItems = [];
- result.subtaskItems = [];
- result.triggers = [];
- result.actions = [];
- result.cards.forEach(card => {
- result.checklists.push(
- ...Checklists.find({
- cardId: card._id,
- }).fetch(),
- );
- result.checklistItems.push(
- ...ChecklistItems.find({
- cardId: card._id,
- }).fetch(),
- );
- result.subtaskItems.push(
- ...Cards.find({
- parentId: card._id,
- }).fetch(),
- );
- });
- result.rules.forEach(rule => {
- result.triggers.push(
- ...Triggers.find(
- {
- _id: rule.triggerId,
- },
- noBoardId,
- ).fetch(),
- );
- result.actions.push(
- ...Actions.find(
- {
- _id: rule.actionId,
- },
- noBoardId,
- ).fetch(),
- );
- });
-
- // [Old] for attachments we only export IDs and absolute url to original doc
- // [New] Encode attachment to base64
- 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]);
- });
- readStream.on('error', function(err) {
- callback(err, null);
- });
- 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)
- .fetch()
- .map(attachment => {
- return {
- _id: attachment._id,
- cardId: attachment.cardId,
- // url: FlowRouter.url(attachment.url()),
- file: getBase64DataSync(attachment),
- name: attachment.original.name,
- type: attachment.original.type,
- };
- });
-
- // we also have to export some user data - as the other elements only
- // include id but we have to be careful:
- // 1- only exports users that are linked somehow to that board
- // 2- do not export any sensitive information
- const users = {};
- result.members.forEach(member => {
- users[member.userId] = true;
- });
- result.lists.forEach(list => {
- users[list.userId] = true;
- });
- result.cards.forEach(card => {
- users[card.userId] = true;
- if (card.members) {
- card.members.forEach(memberId => {
- users[memberId] = true;
- });
- }
- });
- result.comments.forEach(comment => {
- users[comment.userId] = true;
- });
- result.activities.forEach(activity => {
- users[activity.userId] = true;
- });
- result.checklists.forEach(checklist => {
- users[checklist.userId] = true;
- });
- const byUserIds = {
- _id: {
- $in: Object.getOwnPropertyNames(users),
- },
- };
- // we use whitelist to be sure we do not expose inadvertently
- // some secret fields that gets added to User later.
- const userFields = {
- fields: {
- _id: 1,
- username: 1,
- 'profile.fullname': 1,
- 'profile.initials': 1,
- 'profile.avatarUrl': 1,
- },
- };
- result.users = Users.find(byUserIds, userFields)
- .fetch()
- .map(user => {
- // user avatar is stored as a relative url, we export absolute
- if ((user.profile || {}).avatarUrl) {
- user.profile.avatarUrl = FlowRouter.url(user.profile.avatarUrl);
- }
- return user;
- });
- return result;
- }
-
- canExport(user) {
- const board = Boards.findOne(this._boardId);
- return board && board.isVisibleBy(user);
- }
-}
diff --git a/.sandstorm-meteor-1.8/ldap.js b/.sandstorm-meteor-1.8/ldap.js
deleted file mode 100644
index 3b963823..00000000
--- a/.sandstorm-meteor-1.8/ldap.js
+++ /dev/null
@@ -1,640 +0,0 @@
-import ldapjs from 'ldapjs';
-import util from 'util';
-import Bunyan from 'bunyan';
-import { log_debug, log_info, log_warn, log_error } from './logger';
-
-export default class LDAP {
- constructor() {
- this.ldapjs = ldapjs;
-
- this.connected = false;
-
- this.options = {
- host: this.constructor.settings_get('LDAP_HOST'),
- port: this.constructor.settings_get('LDAP_PORT'),
- Reconnect: this.constructor.settings_get('LDAP_RECONNECT'),
- timeout: this.constructor.settings_get('LDAP_TIMEOUT'),
- connect_timeout: this.constructor.settings_get('LDAP_CONNECT_TIMEOUT'),
- idle_timeout: this.constructor.settings_get('LDAP_IDLE_TIMEOUT'),
- encryption: this.constructor.settings_get('LDAP_ENCRYPTION'),
- ca_cert: this.constructor.settings_get('LDAP_CA_CERT'),
- reject_unauthorized:
- this.constructor.settings_get('LDAP_REJECT_UNAUTHORIZED') || false,
- Authentication: this.constructor.settings_get('LDAP_AUTHENTIFICATION'),
- Authentication_UserDN: this.constructor.settings_get(
- 'LDAP_AUTHENTIFICATION_USERDN',
- ),
- Authentication_Password: this.constructor.settings_get(
- 'LDAP_AUTHENTIFICATION_PASSWORD',
- ),
- Authentication_Fallback: this.constructor.settings_get(
- 'LDAP_LOGIN_FALLBACK',
- ),
- BaseDN: this.constructor.settings_get('LDAP_BASEDN'),
- Internal_Log_Level: this.constructor.settings_get('INTERNAL_LOG_LEVEL'),
- User_Authentication: this.constructor.settings_get(
- 'LDAP_USER_AUTHENTICATION',
- ),
- User_Authentication_Field: this.constructor.settings_get(
- 'LDAP_USER_AUTHENTICATION_FIELD',
- ),
- User_Attributes: this.constructor.settings_get('LDAP_USER_ATTRIBUTES'),
- User_Search_Filter: this.constructor.settings_get(
- 'LDAP_USER_SEARCH_FILTER',
- ),
- User_Search_Scope: this.constructor.settings_get(
- 'LDAP_USER_SEARCH_SCOPE',
- ),
- User_Search_Field: this.constructor.settings_get(
- 'LDAP_USER_SEARCH_FIELD',
- ),
- Search_Page_Size: this.constructor.settings_get('LDAP_SEARCH_PAGE_SIZE'),
- Search_Size_Limit: this.constructor.settings_get(
- 'LDAP_SEARCH_SIZE_LIMIT',
- ),
- group_filter_enabled: this.constructor.settings_get(
- 'LDAP_GROUP_FILTER_ENABLE',
- ),
- group_filter_object_class: this.constructor.settings_get(
- 'LDAP_GROUP_FILTER_OBJECTCLASS',
- ),
- group_filter_group_id_attribute: this.constructor.settings_get(
- 'LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE',
- ),
- group_filter_group_member_attribute: this.constructor.settings_get(
- 'LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE',
- ),
- group_filter_group_member_format: this.constructor.settings_get(
- 'LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT',
- ),
- group_filter_group_name: this.constructor.settings_get(
- 'LDAP_GROUP_FILTER_GROUP_NAME',
- ),
- };
- }
-
- static settings_get(name, ...args) {
- let value = process.env[name];
- if (value !== undefined) {
- if (value === 'true' || value === 'false') {
- value = JSON.parse(value);
- } else if (value !== '' && !isNaN(value)) {
- value = Number(value);
- }
- return value;
- } else {
- log_warn(`Lookup for unset variable: ${name}`);
- }
- }
-
- connectSync(...args) {
- if (!this._connectSync) {
- this._connectSync = Meteor.wrapAsync(this.connectAsync, this);
- }
- return this._connectSync(...args);
- }
-
- searchAllSync(...args) {
- if (!this._searchAllSync) {
- this._searchAllSync = Meteor.wrapAsync(this.searchAllAsync, this);
- }
- return this._searchAllSync(...args);
- }
-
- connectAsync(callback) {
- log_info('Init setup');
-
- let replied = false;
-
- const connectionOptions = {
- url: `${this.options.host}:${this.options.port}`,
- timeout: this.options.timeout,
- connectTimeout: this.options.connect_timeout,
- idleTimeout: this.options.idle_timeout,
- reconnect: this.options.Reconnect,
- };
-
- if (this.options.Internal_Log_Level !== 'disabled') {
- connectionOptions.log = new Bunyan({
- name: 'ldapjs',
- component: 'client',
- stream: process.stderr,
- level: this.options.Internal_Log_Level,
- });
- }
-
- const tlsOptions = {
- rejectUnauthorized: this.options.reject_unauthorized,
- };
-
- if (this.options.ca_cert && this.options.ca_cert !== '') {
- // Split CA cert into array of strings
- const chainLines = this.constructor
- .settings_get('LDAP_CA_CERT')
- .split('\n');
- let cert = [];
- const ca = [];
- chainLines.forEach(line => {
- cert.push(line);
- if (line.match(/-END CERTIFICATE-/)) {
- ca.push(cert.join('\n'));
- cert = [];
- }
- });
- tlsOptions.ca = ca;
- }
-
- if (this.options.encryption === 'ssl') {
- connectionOptions.url = `ldaps://${connectionOptions.url}`;
- connectionOptions.tlsOptions = tlsOptions;
- } else {
- connectionOptions.url = `ldap://${connectionOptions.url}`;
- }
-
- log_info('Connecting', connectionOptions.url);
- log_debug(`connectionOptions${util.inspect(connectionOptions)}`);
-
- this.client = ldapjs.createClient(connectionOptions);
-
- this.bindSync = Meteor.wrapAsync(this.client.bind, this.client);
-
- this.client.on('error', error => {
- log_error('connection', error);
- if (replied === false) {
- replied = true;
- callback(error, null);
- }
- });
-
- this.client.on('idle', () => {
- log_info('Idle');
- this.disconnect();
- });
-
- this.client.on('close', () => {
- log_info('Closed');
- });
-
- if (this.options.encryption === 'tls') {
- // Set host parameter for tls.connect which is used by ldapjs starttls. This shouldn't be needed in newer nodejs versions (e.g v5.6.0).
- // https://github.com/RocketChat/Rocket.Chat/issues/2035
- // https://github.com/mcavage/node-ldapjs/issues/349
- tlsOptions.host = this.options.host;
-
- log_info('Starting TLS');
- log_debug('tlsOptions', tlsOptions);
-
- this.client.starttls(tlsOptions, null, (error, response) => {
- if (error) {
- log_error('TLS connection', error);
- if (replied === false) {
- replied = true;
- callback(error, null);
- }
- return;
- }
-
- log_info('TLS connected');
- this.connected = true;
- if (replied === false) {
- replied = true;
- callback(null, response);
- }
- });
- } else {
- this.client.on('connect', response => {
- log_info('LDAP connected');
- this.connected = true;
- if (replied === false) {
- replied = true;
- callback(null, response);
- }
- });
- }
-
- setTimeout(() => {
- if (replied === false) {
- log_error('connection time out', connectionOptions.connectTimeout);
- replied = true;
- callback(new Error('Timeout'));
- }
- }, connectionOptions.connectTimeout);
- }
-
- getUserFilter(username) {
- const filter = [];
-
- if (this.options.User_Search_Filter !== '') {
- if (this.options.User_Search_Filter[0] === '(') {
- filter.push(`${this.options.User_Search_Filter}`);
- } else {
- filter.push(`(${this.options.User_Search_Filter})`);
- }
- }
-
- const usernameFilter = this.options.User_Search_Field.split(',').map(
- item => `(${item}=${username})`,
- );
-
- if (usernameFilter.length === 0) {
- log_error('LDAP_LDAP_User_Search_Field not defined');
- } else if (usernameFilter.length === 1) {
- filter.push(`${usernameFilter[0]}`);
- } else {
- filter.push(`(|${usernameFilter.join('')})`);
- }
-
- return `(&${filter.join('')})`;
- }
-
- bindUserIfNecessary(username, password) {
- if (this.domainBinded === true) {
- return;
- }
-
- if (!this.options.User_Authentication) {
- return;
- }
-
- if (!this.options.BaseDN) throw new Error('BaseDN is not provided');
-
- const userDn = `${this.options.User_Authentication_Field}=${username},${this.options.BaseDN}`;
-
- this.bindSync(userDn, password);
- this.domainBinded = true;
- }
-
- bindIfNecessary() {
- if (this.domainBinded === true) {
- return;
- }
-
- if (this.options.Authentication !== true) {
- return;
- }
-
- log_info('Binding UserDN', this.options.Authentication_UserDN);
-
- this.bindSync(
- this.options.Authentication_UserDN,
- this.options.Authentication_Password,
- );
- this.domainBinded = true;
- }
-
- searchUsersSync(username, page) {
- this.bindIfNecessary();
- const searchOptions = {
- filter: this.getUserFilter(username),
- scope: this.options.User_Search_Scope || 'sub',
- sizeLimit: this.options.Search_Size_Limit,
- };
-
- if (!!this.options.User_Attributes)
- searchOptions.attributes = this.options.User_Attributes.split(',');
-
- if (this.options.Search_Page_Size > 0) {
- searchOptions.paged = {
- pageSize: this.options.Search_Page_Size,
- pagePause: !!page,
- };
- }
-
- log_info('Searching user', username);
- log_debug('searchOptions', searchOptions);
- log_debug('BaseDN', this.options.BaseDN);
-
- if (page) {
- return this.searchAllPaged(this.options.BaseDN, searchOptions, page);
- }
-
- return this.searchAllSync(this.options.BaseDN, searchOptions);
- }
-
- getUserByIdSync(id, attribute) {
- this.bindIfNecessary();
-
- const Unique_Identifier_Field = this.constructor
- .settings_get('LDAP_UNIQUE_IDENTIFIER_FIELD')
- .split(',');
-
- let filter;
-
- if (attribute) {
- filter = new this.ldapjs.filters.EqualityFilter({
- attribute,
- value: new Buffer(id, 'hex'),
- });
- } else {
- const filters = [];
- Unique_Identifier_Field.forEach(item => {
- filters.push(
- new this.ldapjs.filters.EqualityFilter({
- attribute: item,
- value: new Buffer(id, 'hex'),
- }),
- );
- });
-
- filter = new this.ldapjs.filters.OrFilter({ filters });
- }
-
- const searchOptions = {
- filter,
- scope: 'sub',
- };
-
- log_info('Searching by id', id);
- log_debug('search filter', searchOptions.filter.toString());
- log_debug('BaseDN', this.options.BaseDN);
-
- const result = this.searchAllSync(this.options.BaseDN, searchOptions);
-
- if (!Array.isArray(result) || result.length === 0) {
- return;
- }
-
- if (result.length > 1) {
- log_error('Search by id', id, 'returned', result.length, 'records');
- }
-
- return result[0];
- }
-
- getUserByUsernameSync(username) {
- this.bindIfNecessary();
-
- const searchOptions = {
- filter: this.getUserFilter(username),
- scope: this.options.User_Search_Scope || 'sub',
- };
-
- log_info('Searching user', username);
- log_debug('searchOptions', searchOptions);
- log_debug('BaseDN', this.options.BaseDN);
-
- const result = this.searchAllSync(this.options.BaseDN, searchOptions);
-
- if (!Array.isArray(result) || result.length === 0) {
- return;
- }
-
- if (result.length > 1) {
- log_error(
- 'Search by username',
- username,
- 'returned',
- result.length,
- 'records',
- );
- }
-
- return result[0];
- }
-
- getUserGroups(username, ldapUser) {
- if (!this.options.group_filter_enabled) {
- return true;
- }
-
- const filter = ['(&'];
-
- if (this.options.group_filter_object_class !== '') {
- filter.push(`(objectclass=${this.options.group_filter_object_class})`);
- }
-
- if (this.options.group_filter_group_member_attribute !== '') {
- const format_value =
- ldapUser[this.options.group_filter_group_member_format];
- if (format_value) {
- filter.push(
- `(${this.options.group_filter_group_member_attribute}=${format_value})`,
- );
- }
- }
-
- filter.push(')');
-
- const searchOptions = {
- filter: filter.join('').replace(/#{username}/g, username),
- scope: 'sub',
- };
-
- log_debug('Group list filter LDAP:', searchOptions.filter);
-
- const result = this.searchAllSync(this.options.BaseDN, searchOptions);
-
- if (!Array.isArray(result) || result.length === 0) {
- return [];
- }
-
- const grp_identifier = this.options.group_filter_group_id_attribute || 'cn';
- const groups = [];
- result.map(item => {
- groups.push(item[grp_identifier]);
- });
- log_debug(`Groups: ${groups.join(', ')}`);
- return groups;
- }
-
- isUserInGroup(username, ldapUser) {
- if (!this.options.group_filter_enabled) {
- return true;
- }
-
- const grps = this.getUserGroups(username, ldapUser);
-
- const filter = ['(&'];
-
- if (this.options.group_filter_object_class !== '') {
- filter.push(`(objectclass=${this.options.group_filter_object_class})`);
- }
-
- if (this.options.group_filter_group_member_attribute !== '') {
- const format_value =
- ldapUser[this.options.group_filter_group_member_format];
- if (format_value) {
- filter.push(
- `(${this.options.group_filter_group_member_attribute}=${format_value})`,
- );
- }
- }
-
- if (this.options.group_filter_group_id_attribute !== '') {
- filter.push(
- `(${this.options.group_filter_group_id_attribute}=${this.options.group_filter_group_name})`,
- );
- }
- filter.push(')');
-
- const searchOptions = {
- filter: filter.join('').replace(/#{username}/g, username),
- scope: 'sub',
- };
-
- log_debug('Group filter LDAP:', searchOptions.filter);
-
- const result = this.searchAllSync(this.options.BaseDN, searchOptions);
-
- if (!Array.isArray(result) || result.length === 0) {
- return false;
- }
- return true;
- }
-
- extractLdapEntryData(entry) {
- const values = {
- _raw: entry.raw,
- };
-
- Object.keys(values._raw).forEach(key => {
- const value = values._raw[key];
-
- if (!['thumbnailPhoto', 'jpegPhoto'].includes(key)) {
- if (value instanceof Buffer) {
- values[key] = value.toString();
- } else {
- values[key] = value;
- }
- }
- });
-
- return values;
- }
-
- searchAllPaged(BaseDN, options, page) {
- this.bindIfNecessary();
-
- const processPage = ({ entries, title, end, next }) => {
- log_info(title);
- // Force LDAP idle to wait the record processing
- this.client._updateIdle(true);
- page(null, entries, {
- end,
- next: () => {
- // Reset idle timer
- this.client._updateIdle();
- next && next();
- },
- });
- };
-
- this.client.search(BaseDN, options, (error, res) => {
- if (error) {
- log_error(error);
- page(error);
- return;
- }
-
- res.on('error', error => {
- log_error(error);
- page(error);
- return;
- });
-
- let entries = [];
-
- const internalPageSize =
- options.paged && options.paged.pageSize > 0
- ? options.paged.pageSize * 2
- : 500;
-
- res.on('searchEntry', entry => {
- entries.push(this.extractLdapEntryData(entry));
-
- if (entries.length >= internalPageSize) {
- processPage({
- entries,
- title: 'Internal Page',
- end: false,
- });
- entries = [];
- }
- });
-
- res.on('page', (result, next) => {
- if (!next) {
- this.client._updateIdle(true);
- processPage({
- entries,
- title: 'Final Page',
- end: true,
- });
- } else if (entries.length) {
- log_info('Page');
- processPage({
- entries,
- title: 'Page',
- end: false,
- next,
- });
- entries = [];
- }
- });
-
- res.on('end', () => {
- if (entries.length) {
- processPage({
- entries,
- title: 'Final Page',
- end: true,
- });
- entries = [];
- }
- });
- });
- }
-
- searchAllAsync(BaseDN, options, callback) {
- this.bindIfNecessary();
-
- this.client.search(BaseDN, options, (error, res) => {
- if (error) {
- log_error(error);
- callback(error);
- return;
- }
-
- res.on('error', error => {
- log_error(error);
- callback(error);
- return;
- });
-
- const entries = [];
-
- res.on('searchEntry', entry => {
- entries.push(this.extractLdapEntryData(entry));
- });
-
- res.on('end', () => {
- log_info('Search result count', entries.length);
- callback(null, entries);
- });
- });
- }
-
- authSync(dn, password) {
- log_info('Authenticating', dn);
-
- try {
- if (password === '') {
- throw new Error('Password is not provided');
- }
- this.bindSync(dn, password);
- log_info('Authenticated', dn);
- return true;
- } catch (error) {
- log_info('Not authenticated', dn);
- log_debug('error', error);
- return false;
- }
- }
-
- disconnect() {
- this.connected = false;
- this.domainBinded = false;
- log_info('Disconecting');
- this.client.unbind();
- }
-}
diff --git a/.sandstorm-meteor-1.8/oidc_server.js b/.sandstorm-meteor-1.8/oidc_server.js
deleted file mode 100644
index 91b0e8a4..00000000
--- a/.sandstorm-meteor-1.8/oidc_server.js
+++ /dev/null
@@ -1,163 +0,0 @@
-Oidc = {};
-
-OAuth.registerService('oidc', 2, null, function(query) {
- var debug = process.env.DEBUG || false;
- var token = getToken(query);
- if (debug) console.log('XXX: register token:', token);
-
- var accessToken = token.access_token || token.id_token;
- var expiresAt = +new Date() + 1000 * parseInt(token.expires_in, 10);
-
- var userinfo = getUserInfo(accessToken);
- if (debug) console.log('XXX: userinfo:', userinfo);
-
- var serviceData = {};
- serviceData.id = userinfo[process.env.OAUTH2_ID_MAP]; // || userinfo["id"];
- serviceData.username = userinfo[process.env.OAUTH2_USERNAME_MAP]; // || userinfo["uid"];
- serviceData.fullname = userinfo[process.env.OAUTH2_FULLNAME_MAP]; // || userinfo["displayName"];
- serviceData.accessToken = accessToken;
- serviceData.expiresAt = expiresAt;
- serviceData.email = userinfo[process.env.OAUTH2_EMAIL_MAP]; // || userinfo["email"];
-
- if (accessToken) {
- var tokenContent = getTokenContent(accessToken);
- var fields = _.pick(
- tokenContent,
- getConfiguration().idTokenWhitelistFields,
- );
- _.extend(serviceData, fields);
- }
-
- if (token.refresh_token) serviceData.refreshToken = token.refresh_token;
- if (debug) console.log('XXX: serviceData:', serviceData);
-
- var profile = {};
- profile.name = userinfo[process.env.OAUTH2_FULLNAME_MAP]; // || userinfo["displayName"];
- profile.email = userinfo[process.env.OAUTH2_EMAIL_MAP]; // || userinfo["email"];
- if (debug) console.log('XXX: profile:', profile);
-
- return {
- serviceData: serviceData,
- options: { profile: profile },
- };
-});
-
-var userAgent = 'Meteor';
-if (Meteor.release) {
- userAgent += '/' + Meteor.release;
-}
-
-var getToken = function(query) {
- var debug = process.env.DEBUG || false;
- var config = getConfiguration();
- if (config.tokenEndpoint.includes('https://')) {
- var serverTokenEndpoint = config.tokenEndpoint;
- } else {
- var serverTokenEndpoint = config.serverUrl + config.tokenEndpoint;
- }
- var requestPermissions = config.requestPermissions;
- var response;
-
- try {
- response = HTTP.post(serverTokenEndpoint, {
- headers: {
- Accept: 'application/json',
- 'User-Agent': userAgent,
- },
- params: {
- code: query.code,
- client_id: config.clientId,
- client_secret: OAuth.openSecret(config.secret),
- redirect_uri: OAuth._redirectUri('oidc', config),
- grant_type: 'authorization_code',
- scope: requestPermissions,
- state: query.state,
- },
- });
- } catch (err) {
- throw _.extend(
- new Error(
- 'Failed to get token from OIDC ' +
- serverTokenEndpoint +
- ': ' +
- err.message,
- ),
- { response: err.response },
- );
- }
- if (response.data.error) {
- // if the http response was a json object with an error attribute
- throw new Error(
- 'Failed to complete handshake with OIDC ' +
- serverTokenEndpoint +
- ': ' +
- response.data.error,
- );
- } else {
- if (debug) console.log('XXX: getToken response: ', response.data);
- return response.data;
- }
-};
-
-var getUserInfo = function(accessToken) {
- var debug = process.env.DEBUG || false;
- var config = getConfiguration();
- // Some userinfo endpoints use a different base URL than the authorization or token endpoints.
- // This logic allows the end user to override the setting by providing the full URL to userinfo in their config.
- if (config.userinfoEndpoint.includes('https://')) {
- var serverUserinfoEndpoint = config.userinfoEndpoint;
- } else {
- var serverUserinfoEndpoint = config.serverUrl + config.userinfoEndpoint;
- }
- var response;
- try {
- response = HTTP.get(serverUserinfoEndpoint, {
- headers: {
- 'User-Agent': userAgent,
- Authorization: 'Bearer ' + accessToken,
- },
- });
- } catch (err) {
- throw _.extend(
- new Error(
- 'Failed to fetch userinfo from OIDC ' +
- serverUserinfoEndpoint +
- ': ' +
- err.message,
- ),
- { response: err.response },
- );
- }
- if (debug) console.log('XXX: getUserInfo response: ', response.data);
- return response.data;
-};
-
-var getConfiguration = function() {
- var config = ServiceConfiguration.configurations.findOne({ service: 'oidc' });
- if (!config) {
- throw new ServiceConfiguration.ConfigError('Service oidc not configured.');
- }
- return config;
-};
-
-var getTokenContent = function(token) {
- var content = null;
- if (token) {
- try {
- var parts = token.split('.');
- var header = JSON.parse(new Buffer(parts[0], 'base64').toString());
- content = JSON.parse(new Buffer(parts[1], 'base64').toString());
- var signature = new Buffer(parts[2], 'base64');
- var signed = parts[0] + '.' + parts[1];
- } catch (err) {
- this.content = {
- exp: 0,
- };
- }
- }
- return content;
-};
-
-Oidc.retrieveCredential = function(credentialToken, credentialSecret) {
- return OAuth.retrieveCredential(credentialToken, credentialSecret);
-};
diff --git a/.sandstorm-meteor-1.8/package-lock.json b/.sandstorm-meteor-1.8/package-lock.json
deleted file mode 100644
index d46097ee..00000000
--- a/.sandstorm-meteor-1.8/package-lock.json
+++ /dev/null
@@ -1,4361 +0,0 @@
-{
- "name": "wekan",
- "version": "v3.92.0",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
- "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.8.3"
- }
- },
- "@babel/highlight": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
- "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==",
- "dev": true,
- "requires": {
- "chalk": "^2.0.0",
- "esutils": "^2.0.2",
- "js-tokens": "^4.0.0"
- }
- },
- "@babel/runtime": {
- "version": "7.8.7",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz",
- "integrity": "sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==",
- "requires": {
- "regenerator-runtime": "^0.13.4"
- }
- },
- "@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"
- }
- },
- "@types/color-name": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
- "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
- "dev": true
- },
- "@types/eslint-visitor-keys": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
- "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==",
- "dev": true
- },
- "@types/json-schema": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz",
- "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==",
- "dev": true
- },
- "@types/parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
- "dev": true
- },
- "@typescript-eslint/experimental-utils": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz",
- "integrity": "sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.3",
- "@typescript-eslint/typescript-estree": "1.13.0",
- "eslint-scope": "^4.0.0"
- },
- "dependencies": {
- "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"
- }
- }
- }
- },
- "@typescript-eslint/parser": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-1.13.0.tgz",
- "integrity": "sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ==",
- "dev": true,
- "requires": {
- "@types/eslint-visitor-keys": "^1.0.0",
- "@typescript-eslint/experimental-utils": "1.13.0",
- "@typescript-eslint/typescript-estree": "1.13.0",
- "eslint-visitor-keys": "^1.0.0"
- }
- },
- "@typescript-eslint/typescript-estree": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz",
- "integrity": "sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw==",
- "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
- }
- }
- },
- "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": "7.1.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz",
- "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==",
- "dev": true
- },
- "acorn-jsx": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz",
- "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==",
- "dev": true
- },
- "ajv": {
- "version": "6.12.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz",
- "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==",
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ansi-escapes": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
- "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
- "dev": true,
- "requires": {
- "type-fest": "^0.11.0"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
- "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
- "dev": true
- }
- }
- },
- "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"
- }
- },
- "array-includes": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz",
- "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.0",
- "is-string": "^1.0.5"
- }
- },
- "array.prototype.flat": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz",
- "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.0-next.1"
- }
- },
- "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="
- },
- "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
- },
- "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="
- },
- "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": "4.0.1",
- "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-4.0.1.tgz",
- "integrity": "sha512-hSIZHkUxIDS5zA2o00Kf2O5RfVbQ888n54xQoF/eIaquU4uaLxK8vhhBdktd0B3n2MjkcAWzv4mnhogykBKOUQ==",
- "requires": {
- "node-addon-api": "^2.0.0",
- "node-pre-gyp": "0.14.0"
- }
- },
- "bl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.0.tgz",
- "integrity": "sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA==",
- "requires": {
- "readable-stream": "^2.3.5",
- "safe-buffer": "^5.1.1"
- }
- },
- "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": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "bson": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/bson/-/bson-4.0.3.tgz",
- "integrity": "sha512-7uBjjxwOSuGLmoqGI1UXWpDGc0K2WjR7dC6iaOg4iriNZo6M2EEBb8co4dEPJ5ArYCebPMie0ecgX0TWF+ZUrQ==",
- "requires": {
- "buffer": "^5.1.0",
- "long": "^4.0.0"
- }
- },
- "buffer": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.5.0.tgz",
- "integrity": "sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww==",
- "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"
- }
- },
- "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.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
- },
- "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
- },
- "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="
- },
- "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.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "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
- },
- "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
- },
- "core-js": {
- "version": "2.6.11",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
- "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
- },
- "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": "6.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
- "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
- "dev": true,
- "requires": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.1.0",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.7.2"
- },
- "dependencies": {
- "parse-json": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
- "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1",
- "lines-and-columns": "^1.1.6"
- }
- },
- "path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "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"
- }
- },
- "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"
- }
- },
- "delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
- },
- "denque": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz",
- "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ=="
- },
- "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.8",
- "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz",
- "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==",
- "optional": true,
- "requires": {
- "nan": "^2.14.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
- },
- "end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
- "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.17.4",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz",
- "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==",
- "dev": true,
- "requires": {
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1",
- "is-callable": "^1.1.5",
- "is-regex": "^1.0.5",
- "object-inspect": "^1.7.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.0",
- "string.prototype.trimleft": "^2.1.1",
- "string.prototype.trimright": "^2.1.1"
- }
- },
- "es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "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": "6.8.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
- "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "ajv": "^6.10.0",
- "chalk": "^2.1.0",
- "cross-spawn": "^6.0.5",
- "debug": "^4.0.1",
- "doctrine": "^3.0.0",
- "eslint-scope": "^5.0.0",
- "eslint-utils": "^1.4.3",
- "eslint-visitor-keys": "^1.1.0",
- "espree": "^6.1.2",
- "esquery": "^1.0.1",
- "esutils": "^2.0.2",
- "file-entry-cache": "^5.0.1",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.0.0",
- "globals": "^12.1.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "inquirer": "^7.0.0",
- "is-glob": "^4.0.0",
- "js-yaml": "^3.13.1",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.3.0",
- "lodash": "^4.17.14",
- "minimatch": "^3.0.4",
- "mkdirp": "^0.5.1",
- "natural-compare": "^1.4.0",
- "optionator": "^0.8.3",
- "progress": "^2.0.0",
- "regexpp": "^2.0.1",
- "semver": "^6.1.2",
- "strip-ansi": "^5.2.0",
- "strip-json-comments": "^3.0.1",
- "table": "^5.2.3",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
- },
- "dependencies": {
- "ajv": {
- "version": "6.12.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz",
- "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.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
- },
- "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": "3.1.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
- "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
- "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
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- },
- "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"
- }
- },
- "strip-json-comments": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz",
- "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==",
- "dev": true
- }
- }
- },
- "eslint-config-meteor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/eslint-config-meteor/-/eslint-config-meteor-0.1.1.tgz",
- "integrity": "sha1-rbauIL5wOFdUV5MCuqinpk5PChM=",
- "dev": true
- },
- "eslint-config-prettier": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.10.0.tgz",
- "integrity": "sha512-AtndijGte1rPILInUdHjvKEGbIV06NuvPrqlIEaEaWtbtvJh464mDeyGMdZEQMsGvC0ZVkiex1fSNcC4HAbRGg==",
- "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.3",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz",
- "integrity": "sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==",
- "dev": true,
- "requires": {
- "debug": "^2.6.9",
- "resolve": "^1.13.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"
- }
- },
- "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.5.2",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz",
- "integrity": "sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==",
- "dev": true,
- "requires": {
- "debug": "^2.6.9",
- "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.20.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz",
- "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==",
- "dev": true,
- "requires": {
- "array-includes": "^3.0.3",
- "array.prototype.flat": "^1.2.1",
- "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.1",
- "has": "^1.0.3",
- "minimatch": "^3.0.4",
- "object.values": "^1.1.0",
- "read-pkg-up": "^2.0.0",
- "resolve": "^1.12.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": "6.0.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-meteor/-/eslint-plugin-meteor-6.0.0.tgz",
- "integrity": "sha512-2sEW3Ow1QJMLeJPHnTJbqD3ASAyRUzgU24SKTaj2NyYC4CWYl7WmEMUl99HVlDS3qigrSnSUNMix9+3vn9TmkQ==",
- "dev": true,
- "requires": {
- "invariant": "2.2.4"
- }
- },
- "eslint-plugin-prettier": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz",
- "integrity": "sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA==",
- "dev": true,
- "requires": {
- "prettier-linter-helpers": "^1.0.0"
- }
- },
- "eslint-scope": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
- "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- }
- },
- "eslint-utils": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
- "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^1.1.0"
- }
- },
- "eslint-visitor-keys": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
- "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
- "dev": true
- },
- "espree": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
- "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
- "dev": true,
- "requires": {
- "acorn": "^7.1.1",
- "acorn-jsx": "^5.2.0",
- "eslint-visitor-keys": "^1.1.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.1.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz",
- "integrity": "sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==",
- "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.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "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": "3.4.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz",
- "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.0",
- "get-stream": "^5.0.0",
- "human-signals": "^1.1.1",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.0",
- "onetime": "^5.1.0",
- "p-finally": "^2.0.0",
- "signal-exit": "^3.0.2",
- "strip-final-newline": "^2.0.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz",
- "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "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"
- }
- },
- "extsprintf": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.2.0.tgz",
- "integrity": "sha1-WtlGwi9bMrp/jNdCZxHG6KP8JSk="
- },
- "fast-deep-equal": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
- "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA=="
- },
- "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.2.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
- "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
- "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": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "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
- },
- "flushwritable": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/flushwritable/-/flushwritable-1.0.0.tgz",
- "integrity": "sha1-PjKNj95BKtR+c44751C00pAENJg="
- },
- "fs-minipass": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
- "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
- "requires": {
- "minipass": "^2.6.0"
- }
- },
- "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.2",
- "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
- "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==",
- "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": "5.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
- "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "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"
- }
- },
- "glob-parent": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
- "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "globals": {
- "version": "12.4.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
- "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
- "dev": true,
- "requires": {
- "type-fest": "^0.8.1"
- }
- },
- "graceful-fs": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
- "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
- "dev": true
- },
- "gridfs-stream": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/gridfs-stream/-/gridfs-stream-1.1.1.tgz",
- "integrity": "sha1-PdOhAOwgIaGBKC9utGcJY2B034k=",
- "requires": {
- "flushwritable": "^1.0.0"
- }
- },
- "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.1",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
- "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
- "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="
- },
- "hosted-git-info": {
- "version": "2.8.8",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
- "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
- "dev": true
- },
- "human-signals": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
- "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
- "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.3",
- "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz",
- "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==",
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "import-fresh": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
- "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
- "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": "7.1.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz",
- "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==",
- "dev": true,
- "requires": {
- "ansi-escapes": "^4.2.1",
- "chalk": "^3.0.0",
- "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.4.0",
- "rxjs": "^6.5.3",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0",
- "through": "^2.3.6"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
- "dev": true
- },
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "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.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.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-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
- "dev": true
- },
- "is-callable": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
- "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
- "dev": true
- },
- "is-date-object": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
- "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
- "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": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "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-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.5",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
- "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
- "dev": true,
- "requires": {
- "has": "^1.0.3"
- }
- },
- "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-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
- "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
- "dev": true
- },
- "is-string": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
- "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==",
- "dev": true
- },
- "is-symbol": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
- "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
- "dev": true,
- "requires": {
- "has-symbols": "^1.0.1"
- }
- },
- "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
- },
- "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.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
- },
- "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
- },
- "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"
- }
- },
- "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"
- }
- },
- "lines-and-columns": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
- "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
- "dev": true
- },
- "lint-staged": {
- "version": "10.0.8",
- "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.0.8.tgz",
- "integrity": "sha512-Oa9eS4DJqvQMVdywXfEor6F4vP+21fPHF8LUXgBbVWUSWBddjqsvO6Bv1LwMChmgQZZqwUvgJSHlu8HFHAPZmA==",
- "dev": true,
- "requires": {
- "chalk": "^3.0.0",
- "commander": "^4.0.1",
- "cosmiconfig": "^6.0.0",
- "debug": "^4.1.1",
- "dedent": "^0.7.0",
- "execa": "^3.4.0",
- "listr": "^0.14.3",
- "log-symbols": "^3.0.0",
- "micromatch": "^4.0.2",
- "normalize-path": "^3.0.0",
- "please-upgrade-node": "^3.2.0",
- "string-argv": "0.3.1",
- "stringify-object": "^3.3.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "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"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "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": {
- "is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
- "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": "3.0.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
- "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2"
- }
- },
- "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.7",
- "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.7.tgz",
- "integrity": "sha512-cY2eLFrQSAfVPhCgH1s7JI73tMbg9YC3v3+ZHVW67sBS7UxWzNEk/ZBbSfLykBWHp33dqqtOv82gjhKEi81T/A==",
- "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
- }
- }
- },
- "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
- },
- "merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
- },
- "meteor-node-stubs": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-1.0.0.tgz",
- "integrity": "sha512-QJwyv23wyXD3uEMzk5Xr/y5ezoVlCbHvBbrgdkVadn84dmifLRbs0PtD6EeNw5NLIk+SQSfxld7IMdEsneGz5w==",
- "requires": {
- "assert": "^1.4.1",
- "browserify-zlib": "^0.2.0",
- "buffer": "^5.2.1",
- "console-browserify": "^1.1.0",
- "constants-browserify": "^1.0.0",
- "crypto-browserify": "^3.12.0",
- "domain-browser": "^1.2.0",
- "events": "^3.0.0",
- "https-browserify": "^1.0.0",
- "os-browserify": "^0.3.0",
- "path-browserify": "^1.0.0",
- "process": "^0.11.10",
- "punycode": "^2.1.1",
- "querystring-es3": "^0.2.1",
- "readable-stream": "^3.3.0",
- "stream-browserify": "^2.0.2",
- "stream-http": "^3.0.0",
- "string_decoder": "^1.2.0",
- "timers-browserify": "^2.0.10",
- "tty-browserify": "0.0.1",
- "url": "^0.11.0",
- "util": "^0.11.1",
- "vm-browserify": "^1.1.0"
- },
- "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"
- },
- "dependencies": {
- "util": {
- "version": "0.10.3",
- "bundled": true,
- "requires": {
- "inherits": "2.0.1"
- }
- }
- }
- },
- "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.2",
- "bundled": true,
- "requires": {
- "cipher-base": "^1.0.1",
- "des.js": "^1.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "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.2.0",
- "bundled": true,
- "requires": {
- "pako": "~1.0.5"
- }
- },
- "buffer": {
- "version": "5.2.1",
- "bundled": true,
- "requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4"
- }
- },
- "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.1",
- "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": "3.0.0",
- "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.7",
- "bundled": true,
- "requires": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.1"
- },
- "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": "1.0.0",
- "bundled": true
- },
- "ieee754": {
- "version": "1.1.13",
- "bundled": true
- },
- "inherits": {
- "version": "2.0.1",
- "bundled": true
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true
- },
- "md5.js": {
- "version": "1.3.5",
- "bundled": true,
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "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.3.0",
- "bundled": true
- },
- "pako": {
- "version": "1.0.10",
- "bundled": true
- },
- "parse-asn1": {
- "version": "5.1.4",
- "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",
- "safe-buffer": "^5.1.1"
- }
- },
- "path-browserify": {
- "version": "1.0.0",
- "bundled": true
- },
- "pbkdf2": {
- "version": "3.0.17",
- "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.3",
- "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",
- "safe-buffer": "^5.1.2"
- }
- },
- "punycode": {
- "version": "2.1.1",
- "bundled": true
- },
- "querystring": {
- "version": "0.2.0",
- "bundled": true
- },
- "querystring-es3": {
- "version": "0.2.1",
- "bundled": true
- },
- "randombytes": {
- "version": "2.1.0",
- "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": "3.3.0",
- "bundled": true,
- "requires": {
- "inherits": "^2.0.3",
- "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
- },
- "setimmediate": {
- "version": "1.0.5",
- "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.2",
- "bundled": true,
- "requires": {
- "inherits": "~2.0.1",
- "readable-stream": "^2.0.2"
- },
- "dependencies": {
- "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
- }
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "stream-http": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "builtin-status-codes": "^3.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^3.0.6",
- "xtend": "^4.0.0"
- }
- },
- "string_decoder": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "timers-browserify": {
- "version": "2.0.10",
- "bundled": true,
- "requires": {
- "setimmediate": "^1.0.4"
- }
- },
- "tty-browserify": {
- "version": "0.0.1",
- "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.11.1",
- "bundled": true,
- "requires": {
- "inherits": "2.0.3"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.3",
- "bundled": true
- }
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true
- },
- "vm-browserify": {
- "version": "1.1.0",
- "bundled": true
- },
- "xtend": {
- "version": "4.0.1",
- "bundled": true
- }
- }
- },
- "micromatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
- "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
- "dev": true,
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.0.5"
- }
- },
- "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": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
- },
- "minipass": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
- "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
- "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==",
- "requires": {
- "minipass": "^2.9.0"
- }
- },
- "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"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
- }
- }
- },
- "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.5.5",
- "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.5.tgz",
- "integrity": "sha512-GCjDxR3UOltDq00Zcpzql6dQo1sVry60OXJY3TDmFc2SWFY6c8Gn1Ardidc5jDirvJrx2GC3knGOImKphbSL3A==",
- "requires": {
- "bl": "^2.2.0",
- "bson": "^1.1.1",
- "denque": "^1.4.1",
- "require_optional": "^1.0.1",
- "safe-buffer": "^5.1.2",
- "saslprep": "^1.0.0"
- },
- "dependencies": {
- "bson": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.3.tgz",
- "integrity": "sha512-TdiJxMVnodVS7r0BdL42y/pqC9cL2iKynVwA0Ho3qbsQYr428veL3l7BQyuqiw+Q5SqqoT0m4srSY/BlZ9AxXg=="
- }
- }
- },
- "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.14.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
- "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
- "optional": true
- },
- "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.3.3",
- "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.3.tgz",
- "integrity": "sha512-EkY0GeSq87rWp1hoq/sH/wnTWgFVhYlnIkbJ0YJFfRgEFlz2RraCjBpFQ+vrEgEdp0ThfyHADmkChEhcb7PKyw==",
- "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-addon-api": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.0.tgz",
- "integrity": "sha512-ASCL5U13as7HhOExbT6OlWJJUV/lLzL2voOSP1UVehpRD8FbSrSDjfScK/KwAvVTI5AS6r4VwbOMlIqtvRidnA=="
- },
- "node-pre-gyp": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz",
- "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==",
- "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.4.2"
- }
- },
- "nopt": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
- "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
- "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"
- }
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
- },
- "npm-bundled": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz",
- "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==",
- "requires": {
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "npm-normalize-package-bin": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz",
- "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA=="
- },
- "npm-packlist": {
- "version": "1.4.8",
- "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz",
- "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==",
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1",
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dev": true,
- "requires": {
- "path-key": "^3.0.0"
- },
- "dependencies": {
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- }
- }
- },
- "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-inspect": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
- "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
- "dev": true
- },
- "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.assign": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
- "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.2",
- "function-bind": "^1.1.1",
- "has-symbols": "^1.0.0",
- "object-keys": "^1.0.11"
- }
- },
- "object.values": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz",
- "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.0-next.1",
- "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.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "dev": true,
- "requires": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
- }
- },
- "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": "2.0.1",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz",
- "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==",
- "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": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
- "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
- "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.5",
- "resolved": "https://registry.npmjs.org/page/-/page-1.11.5.tgz",
- "integrity": "sha512-0JXUHc7Y8p1cPJQbhZSwaKO3p+bU3Rgny+OM5gJMKHWHvJKan/fsE5RUzEjRQolv9DzPOSVWfSOHz0lLxK19eA==",
- "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"
- }
- },
- "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"
- }
- },
- "picomatch": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz",
- "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==",
- "dev": true
- },
- "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"
- }
- },
- "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.19.1",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz",
- "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==",
- "dev": true
- },
- "prettier-eslint": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-9.0.1.tgz",
- "integrity": "sha512-KZT65QTosSAqBBqmrC+RpXbsMRe7Os2YSR9cAfFbDlyPAopzA/S5bioiZ3rpziNQNSJaOxmtXSx07EQ+o2Dlug==",
- "dev": true,
- "requires": {
- "@typescript-eslint/parser": "^1.10.2",
- "common-tags": "^1.4.0",
- "core-js": "^3.1.4",
- "dlv": "^1.1.0",
- "eslint": "^5.0.0",
- "indent-string": "^4.0.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": "^3.2.1",
- "vue-eslint-parser": "^2.0.2"
- },
- "dependencies": {
- "acorn": {
- "version": "6.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
- "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==",
- "dev": true
- },
- "ajv": {
- "version": "6.12.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz",
- "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "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
- },
- "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"
- }
- },
- "core-js": {
- "version": "3.6.4",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz",
- "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==",
- "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"
- }
- },
- "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"
- }
- },
- "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"
- }
- },
- "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"
- }
- },
- "fast-deep-equal": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
- "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
- "dev": true
- },
- "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"
- }
- },
- "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
- },
- "indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "dev": true
- },
- "inquirer": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
- "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==",
- "dev": true,
- "requires": {
- "ansi-escapes": "^3.2.0",
- "chalk": "^2.4.2",
- "cli-cursor": "^2.1.0",
- "cli-width": "^2.0.0",
- "external-editor": "^3.0.3",
- "figures": "^2.0.0",
- "lodash": "^4.17.12",
- "mute-stream": "0.0.7",
- "run-async": "^2.2.0",
- "rxjs": "^6.4.0",
- "string-width": "^2.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
- },
- "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"
- }
- }
- }
- },
- "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
- },
- "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"
- }
- },
- "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"
- }
- },
- "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"
- }
- }
- }
- },
- "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
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
- },
- "qs": {
- "version": "6.9.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz",
- "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA=="
- },
- "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"
- }
- },
- "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.5",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
- "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
- },
- "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
- },
- "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_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.15.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
- "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==",
- "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="
- },
- "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"
- }
- },
- "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.4.0",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz",
- "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==",
- "dev": true,
- "requires": {
- "is-promise": "^2.1.0"
- }
- },
- "rxjs": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz",
- "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==",
- "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
- },
- "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="
- },
- "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
- }
- }
- },
- "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-support": {
- "version": "0.5.16",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz",
- "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==",
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "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
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
- "dev": true
- },
- "string-argv": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz",
- "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==",
- "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.prototype.trimleft": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz",
- "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "function-bind": "^1.1.1"
- }
- },
- "string.prototype.trimright": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz",
- "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "function-bind": "^1.1.1"
- }
- },
- "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-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "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.6",
- "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
- "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
- "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.12.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz",
- "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.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": "3.1.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
- "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
- "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.13",
- "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz",
- "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==",
- "requires": {
- "chownr": "^1.1.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.8.6",
- "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-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "tslib": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz",
- "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==",
- "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.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "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": "3.8.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz",
- "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==",
- "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==",
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
- },
- "v8-compile-cache": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz",
- "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==",
- "dev": true
- },
- "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.4",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
- "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==",
- "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"
- }
- },
- "word-wrap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
- "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.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
- },
- "yaml": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.2.tgz",
- "integrity": "sha512-omakb0d7FjMo3R1D2EbTKVIk6dAVLRxFXdLZMEUToeAvuqgG/YuHMuQOZ5fgk+vQ8cx+cnGKwyg+8g8PNT0xQg==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.8.7"
- },
- "dependencies": {
- "@babel/runtime": {
- "version": "7.8.7",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz",
- "integrity": "sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==",
- "dev": true,
- "requires": {
- "regenerator-runtime": "^0.13.4"
- }
- },
- "regenerator-runtime": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
- "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==",
- "dev": true
- }
- }
- }
- }
-}
diff --git a/.sandstorm-meteor-1.8/package.json b/.sandstorm-meteor-1.8/package.json
deleted file mode 100644
index 6e6f2b5a..00000000
--- a/.sandstorm-meteor-1.8/package.json
+++ /dev/null
@@ -1,73 +0,0 @@
-{
- "name": "wekan",
- "version": "v3.92.0",
- "description": "Open-Source kanban",
- "private": true,
- "scripts": {
- "lint": "eslint --cache --ext .js --ignore-path .eslintignore .",
- "lint:eslint:fix": "eslint --ext .js --ignore-path .eslintignore --fix .",
- "lint:staged": "lint-staged",
- "prettify": "prettier --write '**/*.js' '**/*.jsx'",
- "test": "npm run lint"
- },
- "lint-staged": {
- "*.js": [
- "meteor npm run prettify",
- "meteor npm run lint:eslint:fix",
- "git add --force"
- ],
- "*.jsx": [
- "meteor npm run prettify",
- "meteor npm run lint:eslint:fix",
- "git add --force"
- ],
- "*.json": [
- "prettier --write",
- "git add --force"
- ]
- },
- "pre-commit": "lint:staged",
- "eslintConfig": {
- "extends": "@meteorjs/eslint-config-meteor"
- },
- "repository": {
- "type": "git",
- "url": "git+https://github.com/wekan/wekan.git"
- },
- "license": "MIT",
- "bugs": {
- "url": "https://github.com/wekan/wekan/issues"
- },
- "homepage": "https://wekan.github.io",
- "devDependencies": {
- "eslint": "^6.8.0",
- "eslint-config-meteor": "^0.1.1",
- "eslint-config-prettier": "^6.10.0",
- "eslint-import-resolver-meteor": "^0.4.0",
- "eslint-plugin-import": "^2.20.1",
- "eslint-plugin-meteor": "^6.0.0",
- "eslint-plugin-prettier": "^3.1.2",
- "lint-staged": "^10.0.8",
- "pre-commit": "^1.2.2",
- "prettier": "^1.19.1",
- "prettier-eslint": "^9.0.1"
- },
- "dependencies": {
- "@babel/runtime": "^7.8.7",
- "ajv": "^6.12.0",
- "babel-runtime": "^6.26.0",
- "bcrypt": "^4.0.1",
- "bson": "^4.0.3",
- "bunyan": "^1.8.12",
- "es6-promise": "^4.2.8",
- "gridfs-stream": "^1.1.1",
- "ldapjs": "^1.0.2",
- "meteor-node-stubs": "^1.0.0",
- "mongodb": "^3.5.5",
- "os": "^0.1.1",
- "page": "^1.11.5",
- "qs": "^6.9.1",
- "source-map-support": "^0.5.16",
- "xss": "^1.0.6"
- }
-}
diff --git a/.sandstorm-meteor-1.8/wekanCreator.js b/.sandstorm-meteor-1.8/wekanCreator.js
deleted file mode 100644
index ec85d93f..00000000
--- a/.sandstorm-meteor-1.8/wekanCreator.js
+++ /dev/null
@@ -1,853 +0,0 @@
-const DateString = Match.Where(function(dateAsString) {
- check(dateAsString, String);
- return moment(dateAsString, moment.ISO_8601).isValid();
-});
-
-export class WekanCreator {
- constructor(data) {
- // we log current date, to use the same timestamp for all our actions.
- // this helps to retrieve all elements performed by the same import.
- this._nowDate = new Date();
- // The object creation dates, indexed by Wekan id
- // (so we only parse actions once!)
- this.createdAt = {
- board: null,
- cards: {},
- lists: {},
- swimlanes: {},
- };
- // The object creator Wekan Id, indexed by the object Wekan id
- // (so we only parse actions once!)
- this.createdBy = {
- cards: {}, // only cards have a field for that
- };
-
- // Map of labels Wekan ID => Wekan ID
- this.labels = {};
- // Map of swimlanes Wekan ID => Wekan ID
- this.swimlanes = {};
- // Map of lists Wekan ID => Wekan ID
- this.lists = {};
- // Map of cards Wekan ID => Wekan ID
- this.cards = {};
- // Map of comments Wekan ID => Wekan ID
- this.commentIds = {};
- // Map of attachments Wekan ID => Wekan ID
- this.attachmentIds = {};
- // Map of checklists Wekan ID => Wekan ID
- this.checklists = {};
- // Map of checklistItems Wekan ID => Wekan ID
- this.checklistItems = {};
- // The comments, indexed by Wekan card id (to map when importing cards)
- this.comments = {};
- // Map of rules Wekan ID => Wekan ID
- this.rules = {};
- // the members, indexed by Wekan member id => Wekan user ID
- this.members = data.membersMapping ? data.membersMapping : {};
- // Map of triggers Wekan ID => Wekan ID
- this.triggers = {};
- // Map of actions Wekan ID => Wekan ID
- this.actions = {};
-
- // maps a wekanCardId to an array of wekanAttachments
- this.attachments = {};
- }
-
- /**
- * If dateString is provided,
- * return the Date it represents.
- * If not, will return the date when it was first called.
- * This is useful for us, as we want all import operations to
- * have the exact same date for easier later retrieval.
- *
- * @param {String} dateString a properly formatted Date
- */
- _now(dateString) {
- if (dateString) {
- return new Date(dateString);
- }
- if (!this._nowDate) {
- this._nowDate = new Date();
- }
- return this._nowDate;
- }
-
- /**
- * if wekanUserId is provided and we have a mapping,
- * return it.
- * Otherwise return current logged user.
- * @param wekanUserId
- * @private
- */
- _user(wekanUserId) {
- if (wekanUserId && this.members[wekanUserId]) {
- return this.members[wekanUserId];
- }
- return Meteor.userId();
- }
-
- checkActivities(wekanActivities) {
- check(wekanActivities, [
- Match.ObjectIncluding({
- activityType: String,
- createdAt: DateString,
- }),
- ]);
- // XXX we could perform more thorough checks based on action type
- }
-
- checkBoard(wekanBoard) {
- check(
- wekanBoard,
- Match.ObjectIncluding({
- archived: Boolean,
- title: String,
- // XXX refine control by validating 'color' against a list of
- // allowed values (is it worth the maintenance?)
- color: String,
- permission: Match.Where(value => {
- return ['private', 'public'].indexOf(value) >= 0;
- }),
- }),
- );
- }
-
- checkCards(wekanCards) {
- check(wekanCards, [
- Match.ObjectIncluding({
- archived: Boolean,
- dateLastActivity: DateString,
- labelIds: [String],
- title: String,
- sort: Number,
- }),
- ]);
- }
-
- checkLabels(wekanLabels) {
- check(wekanLabels, [
- Match.ObjectIncluding({
- // XXX refine control by validating 'color' against a list of allowed
- // values (is it worth the maintenance?)
- color: String,
- }),
- ]);
- }
-
- checkLists(wekanLists) {
- check(wekanLists, [
- Match.ObjectIncluding({
- archived: Boolean,
- title: String,
- }),
- ]);
- }
-
- checkSwimlanes(wekanSwimlanes) {
- check(wekanSwimlanes, [
- Match.ObjectIncluding({
- archived: Boolean,
- title: String,
- }),
- ]);
- }
-
- checkChecklists(wekanChecklists) {
- check(wekanChecklists, [
- Match.ObjectIncluding({
- cardId: String,
- title: String,
- }),
- ]);
- }
-
- checkChecklistItems(wekanChecklistItems) {
- check(wekanChecklistItems, [
- Match.ObjectIncluding({
- cardId: String,
- title: String,
- }),
- ]);
- }
-
- checkRules(wekanRules) {
- check(wekanRules, [
- Match.ObjectIncluding({
- triggerId: String,
- actionId: String,
- title: String,
- }),
- ]);
- }
-
- checkTriggers(wekanTriggers) {
- // XXX More check based on trigger type
- check(wekanTriggers, [
- Match.ObjectIncluding({
- activityType: String,
- desc: String,
- }),
- ]);
- }
-
- getMembersToMap(data) {
- // we will work on the list itself (an ordered array of objects) when a
- // mapping is done, we add a 'wekan' field to the object representing the
- // imported member
- const membersToMap = data.members;
- const users = data.users;
- // auto-map based on username
- membersToMap.forEach(importedMember => {
- importedMember.id = importedMember.userId;
- delete importedMember.userId;
- const user = users.filter(user => {
- return user._id === importedMember.id;
- })[0];
- if (user.profile && user.profile.fullname) {
- importedMember.fullName = user.profile.fullname;
- }
- importedMember.username = user.username;
- const wekanUser = Users.findOne({ username: importedMember.username });
- if (wekanUser) {
- importedMember.wekanId = wekanUser._id;
- }
- });
- return membersToMap;
- }
-
- checkActions(wekanActions) {
- // XXX More check based on action type
- check(wekanActions, [
- Match.ObjectIncluding({
- actionType: String,
- desc: String,
- }),
- ]);
- }
-
- // You must call parseActions before calling this one.
- createBoardAndLabels(boardToImport) {
- const boardToCreate = {
- archived: boardToImport.archived,
- color: boardToImport.color,
- // very old boards won't have a creation activity so no creation date
- createdAt: this._now(boardToImport.createdAt),
- labels: [],
- members: [
- {
- userId: Meteor.userId(),
- wekanId: Meteor.userId(),
- isActive: true,
- isAdmin: true,
- isNoComments: false,
- isCommentOnly: false,
- swimlaneId: false,
- },
- ],
- // Standalone Export has modifiedAt missing, adding modifiedAt to fix it
- modifiedAt: this._now(boardToImport.modifiedAt),
- permission: boardToImport.permission,
- slug: getSlug(boardToImport.title) || 'board',
- stars: 0,
- title: boardToImport.title,
- };
- // now add other members
- if (boardToImport.members) {
- boardToImport.members.forEach(wekanMember => {
- // do we already have it in our list?
- if (
- !boardToCreate.members.some(
- member => member.wekanId === wekanMember.wekanId,
- )
- )
- boardToCreate.members.push({
- ...wekanMember,
- userId: wekanMember.wekanId,
- });
- });
- }
- boardToImport.labels.forEach(label => {
- const labelToCreate = {
- _id: Random.id(6),
- color: label.color,
- name: label.name,
- };
- // We need to remember them by Wekan ID, as this is the only ref we have
- // when importing cards.
- this.labels[label._id] = labelToCreate._id;
- boardToCreate.labels.push(labelToCreate);
- });
- const boardId = Boards.direct.insert(boardToCreate);
- Boards.direct.update(boardId, {
- $set: {
- modifiedAt: this._now(),
- },
- });
- // log activity
- Activities.direct.insert({
- activityType: 'importBoard',
- boardId,
- createdAt: this._now(),
- source: {
- id: boardToImport.id,
- system: 'Wekan',
- },
- // We attribute the import to current user,
- // not the author from the original object.
- userId: this._user(),
- });
- return boardId;
- }
-
- /**
- * Create the Wekan cards corresponding to the supplied Wekan cards,
- * as well as all linked data: activities, comments, and attachments
- * @param wekanCards
- * @param boardId
- * @returns {Array}
- */
- createCards(wekanCards, boardId) {
- const result = [];
- wekanCards.forEach(card => {
- const cardToCreate = {
- archived: card.archived,
- boardId,
- // very old boards won't have a creation activity so no creation date
- createdAt: this._now(this.createdAt.cards[card._id]),
- dateLastActivity: this._now(),
- description: card.description,
- listId: this.lists[card.listId],
- swimlaneId: this.swimlanes[card.swimlaneId],
- sort: card.sort,
- title: card.title,
- // we attribute the card to its creator if available
- userId: this._user(this.createdBy.cards[card._id]),
- isOvertime: card.isOvertime || false,
- startAt: card.startAt ? this._now(card.startAt) : null,
- dueAt: card.dueAt ? this._now(card.dueAt) : null,
- spentTime: card.spentTime || null,
- };
- // add labels
- if (card.labelIds) {
- cardToCreate.labelIds = card.labelIds.map(wekanId => {
- return this.labels[wekanId];
- });
- }
- // add members {
- if (card.members) {
- const wekanMembers = [];
- // we can't just map, as some members may not have been mapped
- card.members.forEach(sourceMemberId => {
- if (this.members[sourceMemberId]) {
- const wekanId = this.members[sourceMemberId];
- // we may map multiple Wekan members to the same wekan user
- // in which case we risk adding the same user multiple times
- if (!wekanMembers.find(wId => wId === wekanId)) {
- wekanMembers.push(wekanId);
- }
- }
- return true;
- });
- if (wekanMembers.length > 0) {
- cardToCreate.members = wekanMembers;
- }
- }
- // set color
- if (card.color) {
- cardToCreate.color = card.color;
- }
- // insert card
- const cardId = Cards.direct.insert(cardToCreate);
- // keep track of Wekan id => Wekan id
- this.cards[card._id] = cardId;
- // // log activity
- // Activities.direct.insert({
- // activityType: 'importCard',
- // boardId,
- // cardId,
- // createdAt: this._now(),
- // listId: cardToCreate.listId,
- // source: {
- // id: card._id,
- // system: 'Wekan',
- // },
- // // we attribute the import to current user,
- // // not the author of the original card
- // userId: this._user(),
- // });
- // add comments
- const comments = this.comments[card._id];
- if (comments) {
- comments.forEach(comment => {
- const commentToCreate = {
- boardId,
- cardId,
- createdAt: this._now(comment.createdAt),
- text: comment.text,
- // we attribute the comment to the original author, default to current user
- userId: this._user(comment.userId),
- };
- // dateLastActivity will be set from activity insert, no need to
- // update it ourselves
- const commentId = CardComments.direct.insert(commentToCreate);
- this.commentIds[comment._id] = commentId;
- // Activities.direct.insert({
- // activityType: 'addComment',
- // boardId: commentToCreate.boardId,
- // cardId: commentToCreate.cardId,
- // commentId,
- // createdAt: this._now(commentToCreate.createdAt),
- // // we attribute the addComment (not the import)
- // // to the original author - it is needed by some UI elements.
- // userId: commentToCreate.userId,
- // });
- });
- }
- const attachments = this.attachments[card._id];
- const wekanCoverId = card.coverId;
- if (attachments) {
- attachments.forEach(att => {
- const file = new FS.File();
- // Simulating file.attachData on the client generates multiple errors
- // - HEAD returns null, which causes exception down the line
- // - the template then tries to display the url to the attachment which causes other errors
- // so we make it server only, and let UI catch up once it is done, forget about latency comp.
- const self = this;
- if (Meteor.isServer) {
- if (att.url) {
- file.attachData(att.url, function(error) {
- file.boardId = boardId;
- file.cardId = cardId;
- file.userId = self._user(att.userId);
- // The field source will only be used to prevent adding
- // attachments' related activities automatically
- file.source = 'import';
- if (error) {
- throw error;
- } else {
- const wekanAtt = Attachments.insert(file, () => {
- // we do nothing
- });
- self.attachmentIds[att._id] = wekanAtt._id;
- //
- if (wekanCoverId === att._id) {
- Cards.direct.update(cardId, {
- $set: {
- coverId: wekanAtt._id,
- },
- });
- }
- }
- });
- } else if (att.file) {
- file.attachData(
- new Buffer(att.file, 'base64'),
- {
- type: att.type,
- },
- error => {
- file.name(att.name);
- file.boardId = boardId;
- file.cardId = cardId;
- file.userId = self._user(att.userId);
- // The field source will only be used to prevent adding
- // attachments' related activities automatically
- file.source = 'import';
- if (error) {
- throw error;
- } else {
- const wekanAtt = Attachments.insert(file, () => {
- // we do nothing
- });
- this.attachmentIds[att._id] = wekanAtt._id;
- //
- if (wekanCoverId === att._id) {
- Cards.direct.update(cardId, {
- $set: {
- coverId: wekanAtt._id,
- },
- });
- }
- }
- },
- );
- }
- }
- // todo XXX set cover - if need be
- });
- }
- result.push(cardId);
- });
- return result;
- }
-
- // Create labels if they do not exist and load this.labels.
- createLabels(wekanLabels, board) {
- wekanLabels.forEach(label => {
- const color = label.color;
- const name = label.name;
- const existingLabel = board.getLabel(name, color);
- if (existingLabel) {
- this.labels[label.id] = existingLabel._id;
- } else {
- const idLabelCreated = board.pushLabel(name, color);
- this.labels[label.id] = idLabelCreated;
- }
- });
- }
-
- createLists(wekanLists, boardId) {
- wekanLists.forEach((list, listIndex) => {
- const listToCreate = {
- archived: list.archived,
- boardId,
- // We are being defensing here by providing a default date (now) if the
- // creation date wasn't found on the action log. This happen on old
- // Wekan boards (eg from 2013) that didn't log the 'createList' action
- // we require.
- createdAt: this._now(this.createdAt.lists[list.id]),
- title: list.title,
- sort: list.sort ? list.sort : listIndex,
- };
- const listId = Lists.direct.insert(listToCreate);
- Lists.direct.update(listId, {
- $set: {
- updatedAt: this._now(),
- },
- });
- this.lists[list._id] = listId;
- // // log activity
- // Activities.direct.insert({
- // activityType: 'importList',
- // boardId,
- // createdAt: this._now(),
- // listId,
- // source: {
- // id: list._id,
- // system: 'Wekan',
- // },
- // // We attribute the import to current user,
- // // not the creator of the original object
- // userId: this._user(),
- // });
- });
- }
-
- createSwimlanes(wekanSwimlanes, boardId) {
- wekanSwimlanes.forEach((swimlane, swimlaneIndex) => {
- const swimlaneToCreate = {
- archived: swimlane.archived,
- boardId,
- // We are being defensing here by providing a default date (now) if the
- // creation date wasn't found on the action log. This happen on old
- // Wekan boards (eg from 2013) that didn't log the 'createList' action
- // we require.
- createdAt: this._now(this.createdAt.swimlanes[swimlane._id]),
- title: swimlane.title,
- sort: swimlane.sort ? swimlane.sort : swimlaneIndex,
- };
- // set color
- if (swimlane.color) {
- swimlaneToCreate.color = swimlane.color;
- }
- const swimlaneId = Swimlanes.direct.insert(swimlaneToCreate);
- Swimlanes.direct.update(swimlaneId, {
- $set: {
- updatedAt: this._now(),
- },
- });
- this.swimlanes[swimlane._id] = swimlaneId;
- });
- }
-
- createChecklists(wekanChecklists) {
- const result = [];
- wekanChecklists.forEach((checklist, checklistIndex) => {
- // Create the checklist
- const checklistToCreate = {
- cardId: this.cards[checklist.cardId],
- title: checklist.title,
- createdAt: checklist.createdAt,
- sort: checklist.sort ? checklist.sort : checklistIndex,
- };
- const checklistId = Checklists.direct.insert(checklistToCreate);
- this.checklists[checklist._id] = checklistId;
- result.push(checklistId);
- });
- return result;
- }
-
- createTriggers(wekanTriggers, boardId) {
- wekanTriggers.forEach(trigger => {
- if (trigger.hasOwnProperty('labelId')) {
- trigger.labelId = this.labels[trigger.labelId];
- }
- if (trigger.hasOwnProperty('memberId')) {
- trigger.memberId = this.members[trigger.memberId];
- }
- trigger.boardId = boardId;
- const oldId = trigger._id;
- delete trigger._id;
- this.triggers[oldId] = Triggers.direct.insert(trigger);
- });
- }
-
- createActions(wekanActions, boardId) {
- wekanActions.forEach(action => {
- if (action.hasOwnProperty('labelId')) {
- action.labelId = this.labels[action.labelId];
- }
- if (action.hasOwnProperty('memberId')) {
- action.memberId = this.members[action.memberId];
- }
- action.boardId = boardId;
- const oldId = action._id;
- delete action._id;
- this.actions[oldId] = Actions.direct.insert(action);
- });
- }
-
- createRules(wekanRules, boardId) {
- wekanRules.forEach(rule => {
- // Create the rule
- rule.boardId = boardId;
- rule.triggerId = this.triggers[rule.triggerId];
- rule.actionId = this.actions[rule.actionId];
- delete rule._id;
- Rules.direct.insert(rule);
- });
- }
-
- createChecklistItems(wekanChecklistItems) {
- wekanChecklistItems.forEach((checklistitem, checklistitemIndex) => {
- // Create the checklistItem
- const checklistItemTocreate = {
- title: checklistitem.title,
- checklistId: this.checklists[checklistitem.checklistId],
- cardId: this.cards[checklistitem.cardId],
- sort: checklistitem.sort ? checklistitem.sort : checklistitemIndex,
- isFinished: checklistitem.isFinished,
- };
- const checklistItemId = ChecklistItems.direct.insert(
- checklistItemTocreate,
- );
- this.checklistItems[checklistitem._id] = checklistItemId;
- });
- }
-
- parseActivities(wekanBoard) {
- wekanBoard.activities.forEach(activity => {
- switch (activity.activityType) {
- case 'addAttachment': {
- // We have to be cautious, because the attachment could have been removed later.
- // In that case Wekan still reports its addition, but removes its 'url' field.
- // So we test for that
- const wekanAttachment = wekanBoard.attachments.filter(attachment => {
- return attachment._id === activity.attachmentId;
- })[0];
-
- if (typeof wekanAttachment !== 'undefined' && wekanAttachment) {
- if (wekanAttachment.url || wekanAttachment.file) {
- // we cannot actually create the Wekan attachment, because we don't yet
- // have the cards to attach it to, so we store it in the instance variable.
- const wekanCardId = activity.cardId;
- if (!this.attachments[wekanCardId]) {
- this.attachments[wekanCardId] = [];
- }
- this.attachments[wekanCardId].push(wekanAttachment);
- }
- }
- break;
- }
- case 'addComment': {
- const wekanComment = wekanBoard.comments.filter(comment => {
- return comment._id === activity.commentId;
- })[0];
- const id = activity.cardId;
- if (!this.comments[id]) {
- this.comments[id] = [];
- }
- this.comments[id].push(wekanComment);
- break;
- }
- case 'createBoard': {
- this.createdAt.board = activity.createdAt;
- break;
- }
- case 'createCard': {
- const cardId = activity.cardId;
- this.createdAt.cards[cardId] = activity.createdAt;
- this.createdBy.cards[cardId] = activity.userId;
- break;
- }
- case 'createList': {
- const listId = activity.listId;
- this.createdAt.lists[listId] = activity.createdAt;
- break;
- }
- case 'createSwimlane': {
- const swimlaneId = activity.swimlaneId;
- this.createdAt.swimlanes[swimlaneId] = activity.createdAt;
- break;
- }
- }
- });
- }
-
- importActivities(activities, boardId) {
- activities.forEach(activity => {
- switch (activity.activityType) {
- // Board related activities
- // TODO: addBoardMember, removeBoardMember
- case 'createBoard': {
- Activities.direct.insert({
- userId: this._user(activity.userId),
- type: 'board',
- activityTypeId: boardId,
- activityType: activity.activityType,
- boardId,
- createdAt: this._now(activity.createdAt),
- });
- break;
- }
- // List related activities
- // TODO: removeList, archivedList
- case 'createList': {
- Activities.direct.insert({
- userId: this._user(activity.userId),
- type: 'list',
- activityType: activity.activityType,
- listId: this.lists[activity.listId],
- boardId,
- createdAt: this._now(activity.createdAt),
- });
- break;
- }
- // Card related activities
- // TODO: archivedCard, restoredCard, joinMember, unjoinMember
- case 'createCard': {
- Activities.direct.insert({
- userId: this._user(activity.userId),
- activityType: activity.activityType,
- listId: this.lists[activity.listId],
- cardId: this.cards[activity.cardId],
- boardId,
- createdAt: this._now(activity.createdAt),
- });
- break;
- }
- case 'moveCard': {
- Activities.direct.insert({
- userId: this._user(activity.userId),
- oldListId: this.lists[activity.oldListId],
- activityType: activity.activityType,
- listId: this.lists[activity.listId],
- cardId: this.cards[activity.cardId],
- boardId,
- createdAt: this._now(activity.createdAt),
- });
- break;
- }
- // Comment related activities
- case 'addComment': {
- Activities.direct.insert({
- userId: this._user(activity.userId),
- activityType: activity.activityType,
- cardId: this.cards[activity.cardId],
- commentId: this.commentIds[activity.commentId],
- boardId,
- createdAt: this._now(activity.createdAt),
- });
- break;
- }
- // Attachment related activities
- case 'addAttachment': {
- Activities.direct.insert({
- userId: this._user(activity.userId),
- type: 'card',
- activityType: activity.activityType,
- attachmentId: this.attachmentIds[activity.attachmentId],
- cardId: this.cards[activity.cardId],
- boardId,
- createdAt: this._now(activity.createdAt),
- });
- break;
- }
- // Checklist related activities
- case 'addChecklist': {
- Activities.direct.insert({
- userId: this._user(activity.userId),
- activityType: activity.activityType,
- cardId: this.cards[activity.cardId],
- checklistId: this.checklists[activity.checklistId],
- boardId,
- createdAt: this._now(activity.createdAt),
- });
- break;
- }
- case 'addChecklistItem': {
- Activities.direct.insert({
- userId: this._user(activity.userId),
- activityType: activity.activityType,
- cardId: this.cards[activity.cardId],
- checklistId: this.checklists[activity.checklistId],
- checklistItemId: activity.checklistItemId.replace(
- activity.checklistId,
- this.checklists[activity.checklistId],
- ),
- boardId,
- createdAt: this._now(activity.createdAt),
- });
- break;
- }
- }
- });
- }
-
- //check(board) {
- check() {
- //try {
- // check(data, {
- // membersMapping: Match.Optional(Object),
- // });
- // this.checkActivities(board.activities);
- // this.checkBoard(board);
- // this.checkLabels(board.labels);
- // this.checkLists(board.lists);
- // this.checkSwimlanes(board.swimlanes);
- // this.checkCards(board.cards);
- //this.checkChecklists(board.checklists);
- // this.checkRules(board.rules);
- // this.checkActions(board.actions);
- //this.checkTriggers(board.triggers);
- //this.checkChecklistItems(board.checklistItems);
- //} catch (e) {
- // throw new Meteor.Error('error-json-schema');
- // }
- }
-
- create(board, currentBoardId) {
- // TODO : Make isSandstorm variable global
- const isSandstorm =
- Meteor.settings &&
- Meteor.settings.public &&
- Meteor.settings.public.sandstorm;
- if (isSandstorm && currentBoardId) {
- const currentBoard = Boards.findOne(currentBoardId);
- currentBoard.archive();
- }
- this.parseActivities(board);
- const boardId = this.createBoardAndLabels(board);
- this.createLists(board.lists, boardId);
- this.createSwimlanes(board.swimlanes, boardId);
- this.createCards(board.cards, boardId);
- this.createChecklists(board.checklists);
- this.createChecklistItems(board.checklistItems);
- this.importActivities(board.activities, boardId);
- this.createTriggers(board.triggers, boardId);
- this.createActions(board.actions, boardId);
- this.createRules(board.rules, boardId);
- // XXX add members
- return boardId;
- }
-}
diff --git a/.travis.yml b/.travis.yml
index 52da07c3..2081aad0 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,7 +3,7 @@ sudo: required
env:
TRAVIS_DOCKER_COMPOSE_VERSION: 1.24.0
- TRAVIS_NODE_VERSION: 12.15.0
+ TRAVIS_NODE_VERSION: 12.16.2
TRAVIS_NPM_VERSION: latest
before_install:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 97b750b8..9008371c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,173 @@
+# v3.98 2020-04-25 Wekan release
+
+News:
+
+- There is now many mobile and desktop webbrowser fixes. Please test does your
+ favourite Javascript enabled webbrowser work, and add issues if something
+ does not work, and there is no existing issue about that yet.
+- Desktop browser mode has setting for Show/Hide drag handles:
+ top right click username / Change Settings / Show desktop drag handles.
+ You can request desktop website also at mobile webbrowsers on Android.
+ At iOS requesting desktop website did not seem to work yet.
+- At iOS Safari and Chrome, to see swimlane buttons you need to scroll to right.
+ Fixes to this and other issues are welcome as pull request.
+
+This release adds the following new features:
+
+- [Pre-fill the title of checklists (Trello-style)](https://github.com/wekan/wekan/pull/3030).
+ Thanks to boeserwolf.
+- [Implement option to change the first day of the week in user settings](https://github.com/wekan/wekan/pull/3032).
+ Thanks to marc1006.
+- [Add babel to build chain and linter. Enables fancy Javascript language
+ features like optional chaining, for developer happiness](https://github.com/wekan/wekan/pull/3034).
+ Thanks to boeserwolf.
+- [Use only one 'Apply' button for applying the user settings](https://github.com/wekan/wekan/pull/3039).
+ Thanks to marc1006.
+- [Allow variable height for board list items. Allow words in title/description to be able to break
+ and wrap onto the next line](https://github.com/wekan/wekan/pull/3046).
+ Thanks to marc1006.
+
+and adds the following updates:
+
+- [Upgrade to Meteor 1.10.2](https://github.com/wekan/wekan/commit/d1f98d0c472fb41e25fb29a9a6f6dae7db003f6f).
+ Thanks to Meteor developers and xet7.
+- [Set Snap MongoDB compatibility to 4.2 according to Meteor ChangeLog](https://github.com/wekan/wekan/commit/7de18eccea3854db3be6197bf21afbfd3ddb65a6).
+ Thanks to xet7.
+
+and fixes the following bugs:
+
+- [Multiple lint issue fixes](https://github.com/wekan/wekan/pull/3031).
+ Thanks to marc1006.
+- [Fix lint errors in lint error fix](https://github.com/wekan/wekan/commit/9e95c06415e614e587d684ff9660cc53c5f8c8d3).
+ Thanks to xet7.
+- [Fix getStartDayOfWeek function](https://github.com/wekan/wekan/pull/3038).
+ Thanks to marc1006 and boeserwolf.
+- Improve mobile devices support [Part1](https://github.com/wekan/wekan/pull/3040) and [Part2](https://github.com/wekan/wekan/pull/3045).
+ Thanks to marc1006.
+- [Fix Wekan not load at all in Firefox v.68 for Android](https://github.com/wekan/wekan/commit/1235363465b824d26129d4aa74a4445f362c1a73).
+ Thanks to xet7.
+- [Fix comment typo in docker-compose.yml](https://github.com/wekan/wekan/pull/3044).
+ Thanks to VictorioBerra.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.97 2020-04-19 Wekan release
+
+This release adds the following new features:
+
+- [Sortable boards](https://github.com/wekan/wekan/pull/3027).
+ Thanks to boeserwolf.
+- [Added dockerfiles for multi-arch builds and manifest](https://github.com/wekan/wekan/pull/3023).
+ [In Progress](https://github.com/wekan/wekan/issues/2999).
+ Thanks to brokencode64.
+- [Make linked card clickable](https://github.com/wekan/wekan/pull/3025).
+ Thanks to boeserwolf.
+
+and fixes the following bugs:
+
+- [Fix using checklists on mobile and iPad](https://github.com/wekan/wekan/pull/3019).
+ Thanks to devinsm.
+- [Improve card layout on mobile devices](https://github.com/wekan/wekan/pull/3024).
+ Thanks to marc1006.
+- [Make OCP OAuth work with Openshift 4.x](https://github.com/wekan/wekan/pull/3020).
+ Thanks to ckavili.
+- [Remove old warning from Sandstorm import board data loss, because bug has been already
+ fixed](https://github.com/wekan/wekan/commit/960fe5163b6a2f7c3dca03b5e31d69611b49f079).
+ Thanks to aputsiaq and xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.96 2020-04-15 Wekan release
+
+This release adds the following Sandstorm updates:
+
+- This is the first Sandstorm Wekan release that uses newest Meteor 1.10.1 and Node 12.x.
+ Now all Wekan platforms use newest Meteor and Node 12.x LTS.
+ Thanks to kentonv and xet7.
+- [Fix capnp workaround to work with newest Meteor and
+ Node 12.x](https://github.com/wekan/wekan/commit/b2d546579c4957352c29b36c0c8a4a08b944dbb4).
+ Thanks to kentonv.
+- [Update Sandstorm release script for newest Meteor and
+ Node 12.x](https://github.com/wekan/wekan/commit/c5f782976b971fa3f2323e80a013bbf6a49c0596).
+ Thanks to xet7.
+- [Remove Meteor 1.8.x files because Sandstorm Wekan now uses newest
+ Meteor](https://github.com/wekan/wekan/commit/1a836969e10215bad47ac56a9b0d9de801b66fd2).
+ Thanks to xet7.
+
+and adds the following new features:
+
+- [Hide password auth with environment variable PASSWORD_LOGIN_ENABLED=false](https://github.com/wekan/wekan/pull/3014).
+ Snap example: `sudo snap set wekan password-login-enabled='false'` .
+ Thanks to salleman33.
+
+and fixes the following bugs:
+
+- [Fix Board admins can not clone or archive their boards at All Boards
+ page](https://github.com/wekan/wekan/pull/3013).
+ Thanks to salleman33.
+- [Fix `<p>` margin in card labels](https://github.com/wekan/wekan/pull/3015).
+ Thanks to boeserwolf.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.95 2020-04-12 Wekan release
+
+This release adds the following new features:
+
+- [Add gitpod config](https://github.com/wekan/wekan/pull/3009).
+ This adds support for Gitpod.io, a free automated
+ dev environment that makes contributing and generally working on GitHub
+ projects much easier. It allows anyone to start a ready-to-code dev
+ environment for any branch, issue and pull request with a single click.
+ Thanks to juniormendonca.
+- [Public boards overview](https://github.com/wekan/wekan/pull/3008).
+ Thanks to NicoP-S.
+
+and fixes the following bugs:
+
+- [Fix styling issue in notifications drawer](https://github.com/wekan/wekan/pull/3012).
+ Thanks to boeserwolf.
+- [Fix error in notifications cleanup cron](https://github.com/wekan/wekan/pull/3010).
+ Thanks to jtbairdsr.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.94 2020-04-12 Wekan release
+
+This release adds the following new features:
+
+- [Public vote](https://github.com/wekan/wekan/pull/3006).
+ Thanks to NicoP-S.
+- [Add robots.txt disallow all](https://github.com/wekan/wekan/commit/3fae5355d40055757bf4a5f0c503581195609720).
+ Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.93 2020-04-10 Wekan release
+
+This release adds the following new features:
+
+- [Trello vote import & hide export button if with_api is
+ disabled](https://github.com/wekan/wekan/pull/3000).
+ Thanks to NicoP-S.
+- [When adding a user to a board that has subtasks, also add user to the subtask
+ board](https://github.com/wekan/wekan/pull/3004).
+ Thanks to slvrpdr.
+
+and adds the following updates:
+
+- Upgrade to Node v12.16.2 [Part1](https://github.com/wekan/wekan/commit/6db717b9b384fe1491063e507b80e67791a07e3a)
+ and [Part2](https://github.com/wekan/wekan/commit/268d7fcb32186a902a84e7f6d80c50b1f3790bad).
+ Thanks to Node developers and xet7.
+
+and fixes the following bugs:
+
+- [Fix bug that prevents editing or deleting
+ comments](https://github.com/wekan/wekan/pull/3005).
+ Thanks to jtbairdsr.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
# v3.92 2020-04-09 Wekan release
This release adds the following new features:
@@ -67,7 +237,7 @@ and fixes the following bugs:
- [Fix start-wekan.sh MongoDB port to 27017](https://github.com/wekan/wekan/commit/c60a092fc0ed9fe15c417bcb443b1e3e3aaedf7e).
Thanks to Keelan and xet7.
-
+
Thanks to above GitHub users for their contributions and translators for their translations.
# v3.87 2020-04-01 Wekan release
@@ -107,7 +277,7 @@ This release fixes the following bugs:
@member mention not close card, and disabling clicking of
@member mention](https://github.com/wekan/wekan/commit/b9099a8b7ea6f63c79bdcbb871cb993b2cb7e325).
Thanks to xet7 !
-
+
Thanks to above GitHub users for their contributions and translators for their translations.
# v3.85 2020-03-23 Wekan release
diff --git a/Dockerfile b/Dockerfile
index 29248ca1..8b95dc84 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -6,8 +6,8 @@ LABEL maintainer="wekan"
# ENV BUILD_DEPS="paxctl"
ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-essential git ca-certificates python3" \
DEBUG=false \
- NODE_VERSION=v12.16.1 \
- METEOR_RELEASE=1.10-rc.2 \
+ NODE_VERSION=v12.16.2 \
+ METEOR_RELEASE=1.10.2 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
NPM_VERSION=latest \
@@ -113,7 +113,8 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
CORS_EXPOSE_HEADERS="" \
DEFAULT_AUTHENTICATION_METHOD="" \
SCROLLINERTIA="0" \
- SCROLLAMOUNT="auto"
+ SCROLLAMOUNT="auto" \
+ PASSWORD_LOGIN_ENABLED=true
# Copy the app to the image
COPY ${SRC_PATH} /home/wekan/app
@@ -270,6 +271,8 @@ RUN \
cd /home/wekan/app_build/bundle/programs/server/ && \
gosu wekan:wekan npm install && \
#gosu wekan:wekan npm install bcrypt && \
+ # Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
+ rm -rf /home/wekan/app_build/bundle/programs/web.browser.legacy && \
mv /home/wekan/app_build/bundle /build && \
\
# Put back the original tar
diff --git a/Dockerfile.arm64v8 b/Dockerfile.arm64v8
new file mode 100644
index 00000000..35440ddc
--- /dev/null
+++ b/Dockerfile.arm64v8
@@ -0,0 +1,77 @@
+FROM amd64/alpine:3.7 AS builder
+
+# Set the environment variables for builder
+ENV QEMU_VERSION=v4.2.0-6 \
+ QEMU_ARCHITECTURE=aarch64 \
+ NODE_ARCHITECTURE=linux-arm64 \
+ NODE_VERSION=v12.16.1 \
+ WEKAN_VERSION=3.96 \
+ WEKAN_ARCHITECTURE=arm64
+
+ # Install dependencies
+RUN apk update && apk add ca-certificates outils-sha1 && \
+ \
+ # Download qemu static for our architecture
+ wget https://github.com/multiarch/qemu-user-static/releases/download/${QEMU_VERSION}/qemu-${QEMU_ARCHITECTURE}-static.tar.gz -O - | tar -xz && \
+ \
+ # Download wekan and shasum
+ wget https://releases.wekan.team/raspi3/wekan-${WEKAN_VERSION}-${WEKAN_ARCHITECTURE}.zip && \
+ wget https://releases.wekan.team/raspi3/SHA256SUMS.txt && \
+ # Verify wekan
+ grep wekan-${WEKAN_VERSION}-${WEKAN_ARCHITECTURE}.zip SHA256SUMS.txt | sha256sum -c - && \
+ \
+ # Unzip wekan
+ unzip wekan-${WEKAN_VERSION}-${WEKAN_ARCHITECTURE}.zip && \
+ \
+ # Download node and shasums
+ wget https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-${NODE_ARCHITECTURE}.tar.gz && \
+ wget https://nodejs.org/dist/${NODE_VERSION}/SHASUMS256.txt.asc && \
+ \
+ # Verify nodejs authenticity
+ grep node-${NODE_VERSION}-${NODE_ARCHITECTURE}.tar.gz SHASUMS256.txt.asc | sha256sum -c - && \
+ \
+ # Extract node and remove tar.gz
+ tar xvzf node-${NODE_VERSION}-${NODE_ARCHITECTURE}.tar.gz
+
+# Build wekan dockerfile
+FROM arm64v8/ubuntu:19.10
+LABEL maintainer="wekan"
+
+# Set the environment variables (defaults where required)
+ENV QEMU_ARCHITECTURE=aarch64 \
+ NODE_ARCHITECTURE=linux-arm64 \
+ NODE_VERSION=v12.16.1 \
+ NODE_ENV=production \
+ NPM_VERSION=latest \
+ WITH_API=true \
+ PORT=8080 \
+ ROOT_URL=http://localhost \
+ MONGO_URL=mongodb://127.0.0.1:27017/wekan
+
+# Copy qemu-static to image
+COPY --from=builder qemu-${QEMU_ARCHITECTURE}-static /usr/bin
+
+# Copy the app to the image
+COPY --from=builder bundle /home/wekan/bundle
+
+# Copy
+COPY --from=builder node-${NODE_VERSION}-${NODE_ARCHITECTURE} /opt/nodejs
+
+RUN \
+ set -o xtrace && \
+ # Add non-root user wekan
+ useradd --user-group --system --home-dir /home/wekan wekan && \
+ \
+ # Install Node
+ ln -s /opt/nodejs/bin/node /usr/bin/node && \
+ ln -s /opt/nodejs/bin/npm /usr/bin/npm && \
+ mkdir -p /opt/nodejs/lib/node_modules/fibers/.node-gyp /root/.node-gyp/8.16.1 /home/wekan/.config && \
+ chown wekan --recursive /home/wekan/.config && \
+ \
+ # Install Node dependencies
+ npm install -g npm@${NPM_VERSION}
+
+EXPOSE $PORT
+USER wekan
+
+CMD ["node", "/home/wekan/bundle/main.js"]
diff --git a/README.md b/README.md
index affbf5e8..6d3e39ec 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
+[![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/wekan/wekan)
+
# Wekan - Open Source kanban
[![Contributors](https://img.shields.io/github/contributors/wekan/wekan.svg "Contributors")](https://github.com/wekan/wekan/graphs/contributors)
@@ -32,7 +34,7 @@ and PWA app that can be added as icon on Android and bookmark on iOS, used like
**NOTE**:
- Please read the [FAQ](https://github.com/wekan/wekan/wiki/FAQ) first
-- Please don't feed the trolls and spammers that are mentioned in the FAQ :)
+- Please don't feed the [trolls](https://github.com/wekan/wekan/wiki/FAQ#why-am-i-called-a-troll) and [spammers](https://github.com/wekan/wekan/wiki/FAQ#why-am-i-called-a-spammer) that are mentioned in the FAQ :)
## About Wekan
diff --git a/Stackerfile.yml b/Stackerfile.yml
index 103baae9..4cc97eca 100644
--- a/Stackerfile.yml
+++ b/Stackerfile.yml
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
-appVersion: "v3.92.0"
+appVersion: "v3.98.0"
files:
userUploads:
- README.md
diff --git a/client/components/activities/activities.js b/client/components/activities/activities.js
index 36214e19..5d356f6e 100644
--- a/client/components/activities/activities.js
+++ b/client/components/activities/activities.js
@@ -180,7 +180,7 @@ BlazeComponent.extendComponent({
{
// XXX We should use Popup.afterConfirmation here
'click .js-delete-comment'() {
- const commentId = this.currentData().commentId;
+ const commentId = this.currentData().activity.commentId;
CardComments.remove(commentId);
},
'submit .js-edit-comment'(evt) {
@@ -188,7 +188,7 @@ BlazeComponent.extendComponent({
const commentText = this.currentComponent()
.getValue()
.trim();
- const commentId = Template.parentData().commentId;
+ const commentId = Template.parentData().activity.commentId;
if (commentText) {
CardComments.update(commentId, {
$set: {
diff --git a/client/components/boards/boardArchive.js b/client/components/boards/boardArchive.js
index d3e65bd8..5a5cf772 100644
--- a/client/components/boards/boardArchive.js
+++ b/client/components/boards/boardArchive.js
@@ -7,7 +7,7 @@ BlazeComponent.extendComponent({
return Boards.find(
{ archived: true },
{
- sort: ['title'],
+ sort: { sort: 1 /* boards default sorting */ },
},
);
},
diff --git a/client/components/boards/boardBody.js b/client/components/boards/boardBody.js
index e70a9f67..4e473f18 100644
--- a/client/components/boards/boardBody.js
+++ b/client/components/boards/boardBody.js
@@ -1,7 +1,7 @@
import { Cookies } from 'meteor/ostrio:cookies';
const cookies = new Cookies();
const subManager = new SubsManager();
-const { calculateIndex, enableClickOnTouch } = Utils;
+const { calculateIndex } = Utils;
const swimlaneWhileSortingHeight = 150;
BlazeComponent.extendComponent({
@@ -191,9 +191,6 @@ BlazeComponent.extendComponent({
},
});
- // ugly touch event hotfix
- enableClickOnTouch('.js-swimlane:not(.placeholder)');
-
this.autorun(() => {
let showDesktopDragHandles = false;
currentUser = Meteor.user();
@@ -205,7 +202,7 @@ BlazeComponent.extendComponent({
} else {
showDesktopDragHandles = false;
}
- if (!Utils.isMiniScreen() && showDesktopDragHandles) {
+ if (Utils.isMiniScreen() || showDesktopDragHandles) {
$swimlanesDom.sortable({
handle: '.js-swimlane-header-handle',
});
@@ -215,9 +212,8 @@ BlazeComponent.extendComponent({
});
}
- // Disable drag-dropping if the current user is not a board member or is miniscreen
+ // Disable drag-dropping if the current user is not a board member
$swimlanesDom.sortable('option', 'disabled', !userIsMember());
- $swimlanesDom.sortable('option', 'disabled', Utils.isMiniScreen());
});
function userIsMember() {
diff --git a/client/components/boards/boardsList.jade b/client/components/boards/boardsList.jade
index f1118aa8..bbce1d6f 100644
--- a/client/components/boards/boardsList.jade
+++ b/client/components/boards/boardsList.jade
@@ -1,10 +1,10 @@
template(name="boardList")
.wrapper
- ul.board-list.clearfix
+ ul.board-list.clearfix.js-boards
li.js-add-board
a.board-list-item.label {{_ 'add-board'}}
each boards
- li(class="{{#if isStarred}}starred{{/if}}" class=colorClass)
+ li(class="{{#if isStarred}}starred{{/if}}" class=colorClass).js-board
if isInvited
.board-list-item
span.details
@@ -39,7 +39,7 @@ template(name="boardList")
i.fa.js-archive-board(
class="fa-archive"
title="{{_ 'archive-board'}}")
- else if currentUser.isBoardAdmin
+ else if isAdministrable
i.fa.js-clone-board(
class="fa-clone"
title="{{_ 'duplicate-board'}}")
diff --git a/client/components/boards/boardsList.js b/client/components/boards/boardsList.js
index 0ff1c4fb..df319ce0 100644
--- a/client/components/boards/boardsList.js
+++ b/client/components/boards/boardsList.js
@@ -1,4 +1,5 @@
const subManager = new SubsManager();
+const { calculateIndex } = Utils;
Template.boardListHeaderBar.events({
'click .js-open-archived-board'() {
@@ -7,8 +8,8 @@ Template.boardListHeaderBar.events({
});
Template.boardListHeaderBar.helpers({
- title(){
- return FlowRouter.getRouteName() == 'home' ? 'my-boards' :'public';
+ title() {
+ return FlowRouter.getRouteName() === 'home' ? 'my-boards' : 'public';
},
templatesBoardId() {
return Meteor.user() && Meteor.user().getTemplatesBoardId();
@@ -23,25 +24,77 @@ BlazeComponent.extendComponent({
Meteor.subscribe('setting');
},
+ onRendered() {
+ const self = this;
+ function userIsAllowedToMove() {
+ return Meteor.user();
+ }
+
+ const itemsSelector = '.js-board:not(.placeholder)';
+
+ const $boards = this.$('.js-boards');
+ $boards.sortable({
+ connectWith: '.js-boards',
+ tolerance: 'pointer',
+ appendTo: '.board-list',
+ helper: 'clone',
+ distance: 7,
+ items: itemsSelector,
+ placeholder: 'board-wrapper placeholder',
+ start(evt, ui) {
+ ui.helper.css('z-index', 1000);
+ ui.placeholder.height(ui.helper.height());
+ EscapeActions.executeUpTo('popup-close');
+ },
+ stop(evt, ui) {
+ // To attribute the new index number, we need to get the DOM element
+ // of the previous and the following card -- if any.
+ const prevBoardDom = ui.item.prev('.js-board').get(0);
+ const nextBoardBom = ui.item.next('.js-board').get(0);
+ const sortIndex = calculateIndex(prevBoardDom, nextBoardBom, 1);
+
+ const boardDomElement = ui.item.get(0);
+ const board = Blaze.getData(boardDomElement);
+ // Normally the jquery-ui sortable library moves the dragged DOM element
+ // to its new position, which disrupts Blaze reactive updates mechanism
+ // (especially when we move the last card of a list, or when multiple
+ // users move some cards at the same time). To prevent these UX glitches
+ // we ask sortable to gracefully cancel the move, and to put back the
+ // DOM in its initial state. The card move is then handled reactively by
+ // Blaze with the below query.
+ $boards.sortable('cancel');
+
+ board.move(sortIndex.base);
+ },
+ });
+
+ // Disable drag-dropping if the current user is not a board member or is comment only
+ this.autorun(() => {
+ $boards.sortable('option', 'disabled', !userIsAllowedToMove());
+ });
+ },
+
boards() {
let query = {
archived: false,
type: 'board',
- }
- if (FlowRouter.getRouteName() == 'home')
- query['members.userId'] = Meteor.userId()
- else
- query.permission = 'public'
+ };
+ if (FlowRouter.getRouteName() === 'home')
+ query['members.userId'] = Meteor.userId();
+ else query.permission = 'public';
- return Boards.find(
- query,
- { sort: ['title'] },
- );
+ return Boards.find(query, {
+ sort: { sort: 1 /* boards default sorting */ },
+ });
},
isStarred() {
const user = Meteor.user();
return user && user.hasStarred(this.currentData()._id);
},
+ isAdministrable() {
+ const user = Meteor.user();
+ return user && user.isBoardAdmin(this.currentData()._id);
+ },
hasOvertimeCards() {
subManager.subscribe('board', this.currentData()._id, false);
diff --git a/client/components/boards/boardsList.styl b/client/components/boards/boardsList.styl
index ae366e83..d92c9cf3 100644
--- a/client/components/boards/boardsList.styl
+++ b/client/components/boards/boardsList.styl
@@ -11,6 +11,19 @@ $spaceBetweenTiles = 16px
box-sizing: border-box
position: relative
+ &.placeholder:after
+ content: '';
+ display: block;
+ background: darken(white, 20%)
+ border-radius: 3px;
+ height: 106px;
+ margin: 8px;
+
+ &.ui-sortable-helper
+ cursor: grabbing
+ transform: rotate(4deg)
+ display: block !important
+
&.starred
.fa-star,
.fa-star-o
@@ -20,7 +33,7 @@ $spaceBetweenTiles = 16px
overflow: hidden;
background-color: #999
color: #f6f6f6
- height: 90px
+ height: auto
font-size: 16px
line-height: 22px
border-radius: 3px
@@ -31,6 +44,7 @@ $spaceBetweenTiles = 16px
margin: ($spaceBetweenTiles/2)
position: relative
text-decoration: none
+ word-wrap: break-word
&.tile
background-size: auto
@@ -183,7 +197,7 @@ $spaceBetweenTiles = 16px
overflow: scroll
li
- width: 50%
+ width: 50%
.board-list-item
overflow: hidden
diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade
index 99606ae4..ae97e0e9 100644
--- a/client/components/cards/cardDetails.jade
+++ b/client/components/cards/cardDetails.jade
@@ -32,7 +32,7 @@ template(name="cardDetails")
// else
{{_ 'top-level-card'}}
if isLinkedCard
- h3.linked-card-location
+ a.linked-card-location.js-go-to-linked-card
+viewer
| {{getBoardTitle}} > {{getTitle}}
diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js
index 6ca5d784..f31c3890 100644
--- a/client/components/cards/cardDetails.js
+++ b/client/components/cards/cardDetails.js
@@ -1,5 +1,5 @@
const subManager = new SubsManager();
-const { calculateIndexData, enableClickOnTouch } = Utils;
+const { calculateIndexData } = Utils;
let cardColors;
Meteor.startup(() => {
@@ -56,9 +56,8 @@ BlazeComponent.extendComponent({
},
votePublic() {
const card = this.currentData();
- if (card.vote)
- return card.vote.public
- return null
+ if (card.vote) return card.vote.public;
+ return null;
},
voteCountPositive() {
const card = this.currentData();
@@ -232,9 +231,6 @@ BlazeComponent.extendComponent({
},
});
- // ugly touch event hotfix
- enableClickOnTouch('.card-checklist-items .js-checklist');
-
const $subtasksDom = this.$('.card-subtasks-items');
$subtasksDom.sortable({
@@ -270,26 +266,18 @@ BlazeComponent.extendComponent({
},
});
- // ugly touch event hotfix
- enableClickOnTouch('.card-subtasks-items .js-subtasks');
-
function userIsMember() {
return Meteor.user() && Meteor.user().isBoardMember();
}
// Disable sorting if the current user is not a board member
this.autorun(() => {
- if ($checklistsDom.data('sortable')) {
- $checklistsDom.sortable('option', 'disabled', !userIsMember());
+ const disabled = !userIsMember() || Utils.isMiniScreen();
+ if ($checklistsDom.data('uiSortable') || $checklistsDom.data('sortable')) {
+ $checklistsDom.sortable('option', 'disabled', disabled);
}
- if ($subtasksDom.data('sortable')) {
- $subtasksDom.sortable('option', 'disabled', !userIsMember());
- }
- if ($checklistsDom.data('sortable')) {
- $checklistsDom.sortable('option', 'disabled', Utils.isMiniScreen());
- }
- if ($subtasksDom.data('sortable')) {
- $subtasksDom.sortable('option', 'disabled', Utils.isMiniScreen());
+ if ($subtasksDom.data('uiSortable') || $subtasksDom.data('sortable')) {
+ $subtasksDom.sortable('option', 'disabled', disabled);
}
});
},
@@ -379,6 +367,9 @@ BlazeComponent.extendComponent({
this.data().setRequestedBy('');
}
},
+ 'click .js-go-to-linked-card'() {
+ Utils.goCardId(this.data().linkedId);
+ },
'click .js-member': Popup.open('cardMember'),
'click .js-add-members': Popup.open('cardMembers'),
'click .js-assignee': Popup.open('cardAssignee'),
@@ -388,7 +379,7 @@ BlazeComponent.extendComponent({
'click .js-start-date': Popup.open('editCardStartDate'),
'click .js-due-date': Popup.open('editCardDueDate'),
'click .js-end-date': Popup.open('editCardEndDate'),
- 'click .js-show-positive-votes':Popup.open('positiveVoteMembers'),
+ 'click .js-show-positive-votes': Popup.open('positiveVoteMembers'),
'click .js-show-negative-votes': Popup.open('negativeVoteMembers'),
'mouseenter .js-card-details'() {
const parentComponent = this.parentComponent().parentComponent();
@@ -417,9 +408,9 @@ BlazeComponent.extendComponent({
const forIt = $(e.target).hasClass('js-vote-positive');
let newState = null;
if (
- this.voteState() == null ||
- (this.voteState() == false && forIt) ||
- (this.voteState() == true && !forIt)
+ this.voteState() === null ||
+ (this.voteState() === false && forIt) ||
+ (this.voteState() === true && !forIt)
) {
newState = forIt;
}
@@ -655,7 +646,7 @@ Template.cardDetailsActionsPopup.events({
},
});
-Template.editCardTitleForm.onRendered(function () {
+Template.editCardTitleForm.onRendered(function() {
autosize(this.$('.js-edit-card-title'));
});
@@ -669,7 +660,7 @@ Template.editCardTitleForm.events({
},
});
-Template.editCardRequesterForm.onRendered(function () {
+Template.editCardRequesterForm.onRendered(function() {
autosize(this.$('.js-edit-card-requester'));
});
@@ -682,7 +673,7 @@ Template.editCardRequesterForm.events({
},
});
-Template.editCardAssignerForm.onRendered(function () {
+Template.editCardAssignerForm.onRendered(function() {
autosize(this.$('.js-edit-card-assigner'));
});
@@ -724,7 +715,7 @@ BlazeComponent.extendComponent({
_id: { $ne: Meteor.user().getTemplatesBoardId() },
},
{
- sort: ['title'],
+ sort: { sort: 1 /* boards default sorting */ },
},
);
return boards;
@@ -822,7 +813,7 @@ Template.copyChecklistToManyCardsPopup.events({
// copy subtasks
cursor = Cards.find({ parentId: oldId });
- cursor.forEach(function () {
+ cursor.forEach(function() {
'use strict';
const subtask = arguments[0];
subtask.parentId = _id;
@@ -900,7 +891,7 @@ BlazeComponent.extendComponent({
},
},
{
- sort: ['title'],
+ sort: { sort: 1 /* boards default sorting */ },
},
);
return boards;
@@ -971,7 +962,7 @@ BlazeComponent.extendComponent({
}
}
},
- 'click .js-delete': Popup.afterConfirm('cardDelete', function () {
+ 'click .js-delete': Popup.afterConfirm('cardDelete', function() {
Popup.close();
Cards.remove(this._id);
Utils.goBoardId(this.boardId);
diff --git a/client/components/cards/cardDetails.styl b/client/components/cards/cardDetails.styl
index 199a12da..3e2beadd 100644
--- a/client/components/cards/cardDetails.styl
+++ b/client/components/cards/cardDetails.styl
@@ -94,6 +94,7 @@ avatar-radius = 50%
animation: flexGrowIn 0.1s
box-shadow: 0 0 7px 0 darken(white, 30%)
transition: flex-basis 0.1s
+ box-sizing: border-box
.mCustomScrollBox
padding-left: 0
diff --git a/client/components/cards/checklists.jade b/client/components/cards/checklists.jade
index 391769e9..1b1e088a 100644
--- a/client/components/cards/checklists.jade
+++ b/client/components/cards/checklists.jade
@@ -88,7 +88,8 @@ template(name="checklistItems")
template(name='checklistItemDetail')
.js-checklist-item.checklist-item
if canModifyCard
- .check-box.materialCheckBox(class="{{#if item.isFinished }}is-checked{{/if}}")
+ .check-box-container
+ .check-box.materialCheckBox(class="{{#if item.isFinished }}is-checked{{/if}}")
.item-title.js-open-inlined-form.is-editable(class="{{#if item.isFinished }}is-checked{{/if}}")
+viewer
= item.title
diff --git a/client/components/cards/checklists.js b/client/components/cards/checklists.js
index c88fdd82..29573d2b 100644
--- a/client/components/cards/checklists.js
+++ b/client/components/cards/checklists.js
@@ -1,4 +1,4 @@
-const { calculateIndexData, enableClickOnTouch } = Utils;
+const { calculateIndexData, capitalize } = Utils;
function initSorting(items) {
items.sortable({
@@ -36,9 +36,6 @@ function initSorting(items) {
checklistItem.move(checklistId, sortIndex.base);
},
});
-
- // ugly touch event hotfix
- enableClickOnTouch('.js-checklist-item:not(.placeholder)');
}
BlazeComponent.extendComponent({
@@ -54,14 +51,15 @@ BlazeComponent.extendComponent({
return Meteor.user() && Meteor.user().isBoardMember();
}
- // Disable sorting if the current user is not a board member
+ // Disable sorting if the current user is not a board member or is a miniscreen
self.autorun(() => {
const $itemsDom = $(self.itemsDom);
- if ($itemsDom.data('sortable')) {
- $(self.itemsDom).sortable('option', 'disabled', !userIsMember());
- }
- if ($itemsDom.data('sortable')) {
- $(self.itemsDom).sortable('option', 'disabled', Utils.isMiniScreen());
+ if ($itemsDom.data('uiSortable') || $itemsDom.data('sortable')) {
+ $(self.itemsDom).sortable(
+ 'option',
+ 'disabled',
+ !userIsMember() || Utils.isMiniScreen(),
+ );
}
});
},
@@ -177,6 +175,16 @@ BlazeComponent.extendComponent({
}
},
+ focusChecklistItem(event) {
+ // If a new checklist is created, pre-fill the title and select it.
+ const checklist = this.currentData().checklist;
+ if (!checklist) {
+ const textarea = event.target;
+ textarea.value = capitalize(TAPi18n.__('r-checklist'));
+ textarea.select();
+ }
+ },
+
events() {
const events = {
'click .toggle-delete-checklist-dialog'(event) {
@@ -196,6 +204,7 @@ BlazeComponent.extendComponent({
'submit .js-edit-checklist-item': this.editChecklistItem,
'click .js-delete-checklist-item': this.deleteItem,
'click .confirm-checklist-delete': this.deleteChecklist,
+ 'focus .js-add-checklist-item': this.focusChecklistItem,
keydown: this.pressKey,
},
];
@@ -250,7 +259,7 @@ BlazeComponent.extendComponent({
events() {
return [
{
- 'click .js-checklist-item .check-box': this.toggleItem,
+ 'click .js-checklist-item .check-box-container': this.toggleItem,
},
];
},
diff --git a/client/components/cards/checklists.styl b/client/components/cards/checklists.styl
index 8ac37a15..0a6d688b 100644
--- a/client/components/cards/checklists.styl
+++ b/client/components/cards/checklists.styl
@@ -113,6 +113,9 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
&:hover
background-color: darken(white, 8%)
+ .check-box-container
+ padding-right: 1px;
+
.check-box
margin: 0.1em 0 0 0;
&.is-checked
@@ -121,7 +124,7 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
.item-title
flex: 1
- padding-left: 10px;
+ margin-left: 10px;
&.is-checked
color: #8c8c8c
font-style: italic
diff --git a/client/components/cards/labels.styl b/client/components/cards/labels.styl
index 9d7c7553..ee946656 100644
--- a/client/components/cards/labels.styl
+++ b/client/components/cards/labels.styl
@@ -158,6 +158,8 @@
.edit-labels-pop-over
margin-bottom: 8px
+ .card-label .viewer p
+ margin: 0
.edit-labels-pop-over .shortcut
display: inline-block
diff --git a/client/components/cards/minicard.jade b/client/components/cards/minicard.jade
index 0b881a54..b6ccd4d7 100644
--- a/client/components/cards/minicard.jade
+++ b/client/components/cards/minicard.jade
@@ -4,8 +4,8 @@ template(name="minicard")
class="{{#if isLinkedBoard}}linked-board{{/if}}"
class="minicard-{{colorClass}}")
if isMiniScreen
- //.handle
- // .fa.fa-arrows
+ .handle
+ .fa.fa-arrows
unless isMiniScreen
if showDesktopDragHandles
.handle
diff --git a/client/components/import/import.jade b/client/components/import/import.jade
index 5b52f417..1551a7dd 100644
--- a/client/components/import/import.jade
+++ b/client/components/import/import.jade
@@ -15,9 +15,6 @@ template(name="importTextarea")
p: label(for='import-textarea') {{_ instruction}} {{_ 'import-board-instruction-about-errors'}}
textarea.js-import-json(placeholder="{{_ 'import-json-placeholder'}}" autofocus)
| {{jsonText}}
- if isSandstorm
- h1.warning {{_ 'import-sandstorm-backup-warning'}}
- p.warning {{_ 'import-sandstorm-warning'}}
input.primary.wide(type="submit" value="{{_ 'import'}}")
template(name="importMapMembers")
diff --git a/client/components/lists/list.js b/client/components/lists/list.js
index 8574caf7..839304f8 100644
--- a/client/components/lists/list.js
+++ b/client/components/lists/list.js
@@ -1,6 +1,6 @@
import { Cookies } from 'meteor/ostrio:cookies';
const cookies = new Cookies();
-const { calculateIndex, enableClickOnTouch } = Utils;
+const { calculateIndex } = Utils;
BlazeComponent.extendComponent({
// Proxy
@@ -114,9 +114,6 @@ BlazeComponent.extendComponent({
},
});
- // ugly touch event hotfix
- enableClickOnTouch(itemsSelector);
-
this.autorun(() => {
let showDesktopDragHandles = false;
currentUser = Meteor.user();
@@ -129,7 +126,7 @@ BlazeComponent.extendComponent({
showDesktopDragHandles = false;
}
- if (!Utils.isMiniScreen() && showDesktopDragHandles) {
+ if (Utils.isMiniScreen() || showDesktopDragHandles) {
$cards.sortable({
handle: '.handle',
});
@@ -139,27 +136,16 @@ BlazeComponent.extendComponent({
});
}
- if ($cards.data('sortable')) {
+ if ($cards.data('uiSortable') || $cards.data('sortable')) {
$cards.sortable(
'option',
'disabled',
- // Disable drag-dropping when user is not member/is miniscreen
+ // Disable drag-dropping when user is not member
!userIsMember(),
// Not disable drag-dropping while in multi-selection mode
// MultiSelection.isActive() || !userIsMember(),
);
}
-
- if ($cards.data('sortable')) {
- $cards.sortable(
- 'option',
- 'disabled',
- // Disable drag-dropping when user is not member/is miniscreen
- Utils.isMiniScreen(),
- // Not disable drag-dropping while in multi-selection mode
- // MultiSelection.isActive() || !userIsMember(),
- );
- }
});
// We want to re-run this function any time a card is added.
diff --git a/client/components/lists/listBody.js b/client/components/lists/listBody.js
index 03f88f63..88f88db0 100644
--- a/client/components/lists/listBody.js
+++ b/client/components/lists/listBody.js
@@ -411,7 +411,7 @@ BlazeComponent.extendComponent({
type: 'board',
},
{
- sort: ['title'],
+ sort: { sort: 1 /* boards default sorting */ },
},
);
return boards;
@@ -597,7 +597,7 @@ BlazeComponent.extendComponent({
type: 'board',
},
{
- sort: ['title'],
+ sort: { sort: 1 /* boards default sorting */ },
},
);
return boards;
diff --git a/client/components/lists/listHeader.jade b/client/components/lists/listHeader.jade
index 182fee9e..fa1faf34 100644
--- a/client/components/lists/listHeader.jade
+++ b/client/components/lists/listHeader.jade
@@ -30,10 +30,9 @@ 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
+ 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
diff --git a/client/components/main/layouts.js b/client/components/main/layouts.js
index e5c86d76..83678e73 100644
--- a/client/components/main/layouts.js
+++ b/client/components/main/layouts.js
@@ -31,6 +31,11 @@ Template.userFormsLayout.onCreated(function() {
return this.stop();
},
});
+ Meteor.call('isPasswordLoginDisabled', (_, result) => {
+ if (result) {
+ $('.at-pwd-form').hide();
+ }
+ });
});
Template.userFormsLayout.onRendered(() => {
diff --git a/client/components/main/popup.styl b/client/components/main/popup.styl
index 023cba3d..b4815ca6 100644
--- a/client/components/main/popup.styl
+++ b/client/components/main/popup.styl
@@ -135,6 +135,10 @@ $popupWidth = 300px
margin-bottom: 8px
.pop-over-list
+ li
+ display: block
+ clear: both
+
li > a
clear: both
cursor: pointer
@@ -316,6 +320,7 @@ $popupWidth = 300px
input[type="file"]
margin: 4px 0 12px
width: 100%
+ box-sizing: border-box
.pop-over-list
li > a
diff --git a/client/components/notifications/notificationsDrawer.styl b/client/components/notifications/notificationsDrawer.styl
index b64f13f4..f99e1299 100644
--- a/client/components/notifications/notificationsDrawer.styl
+++ b/client/components/notifications/notificationsDrawer.styl
@@ -10,8 +10,7 @@ section#notifications-drawer
border-radius: 2px
max-height: calc(100vh - 28px - 36px)
color: black
- padding-top 36px;
- overflow: scroll
+ padding-top 36px
a:hover
color: belize !important
@@ -66,3 +65,5 @@ section#notifications-drawer
display: block
padding: 0px 16px
margin: 0
+ height: calc(100vh - 102px)
+ overflow-y: scroll
diff --git a/client/components/rules/actions/boardActions.js b/client/components/rules/actions/boardActions.js
index c2f2375a..02910cc1 100644
--- a/client/components/rules/actions/boardActions.js
+++ b/client/components/rules/actions/boardActions.js
@@ -11,7 +11,7 @@ BlazeComponent.extendComponent({
},
},
{
- sort: ['title'],
+ sort: { sort: 1 /* boards default sorting */ },
},
);
return boards;
diff --git a/client/components/settings/settingBody.js b/client/components/settings/settingBody.js
index 319c066b..62752084 100644
--- a/client/components/settings/settingBody.js
+++ b/client/components/settings/settingBody.js
@@ -48,7 +48,7 @@ BlazeComponent.extendComponent({
'members.isAdmin': true,
},
{
- sort: ['title'],
+ sort: { sort: 1 /* boards default sorting */ },
},
);
},
diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js
index 78b47a48..cbe00797 100644
--- a/client/components/sidebar/sidebar.js
+++ b/client/components/sidebar/sidebar.js
@@ -196,14 +196,14 @@ Template.boardMenuPopup.events({
},
'click .js-change-board-color': Popup.open('boardChangeColor'),
'click .js-change-language': Popup.open('changeLanguage'),
- 'click .js-archive-board ': Popup.afterConfirm('archiveBoard', function () {
+ 'click .js-archive-board ': Popup.afterConfirm('archiveBoard', function() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
currentBoard.archive();
// XXX We should have some kind of notification on top of the page to
// confirm that the board was successfully archived.
FlowRouter.go('home');
}),
- 'click .js-delete-board': Popup.afterConfirm('deleteBoard', function () {
+ 'click .js-delete-board': Popup.afterConfirm('deleteBoard', function() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
Popup.close();
Boards.remove(currentBoard._id);
@@ -215,17 +215,16 @@ Template.boardMenuPopup.events({
'click .js-card-settings': Popup.open('boardCardSettings'),
});
-
-Template.boardMenuPopup.onCreated(function () {
+Template.boardMenuPopup.onCreated(function() {
this.apiEnabled = new ReactiveVar(false);
Meteor.call('_isApiEnabled', (e, result) => {
- this.apiEnabled.set(result)
- })
-})
+ this.apiEnabled.set(result);
+ });
+});
Template.boardMenuPopup.helpers({
withApi() {
- return Template.instance().apiEnabled.get()
+ return Template.instance().apiEnabled.get();
},
exportUrl() {
const params = {
@@ -248,7 +247,7 @@ Template.memberPopup.events({
Popup.close();
},
'click .js-change-role': Popup.open('changePermissions'),
- 'click .js-remove-member': Popup.afterConfirm('removeMember', function () {
+ 'click .js-remove-member': Popup.afterConfirm('removeMember', function() {
const boardId = Session.get('currentBoard');
const memberId = this.userId;
Cards.find({ boardId, members: memberId }).forEach(card => {
@@ -510,7 +509,7 @@ BlazeComponent.extendComponent({
'members.userId': Meteor.userId(),
},
{
- sort: ['title'],
+ sort: { sort: 1 /* boards default sorting */ },
},
);
},
@@ -589,7 +588,7 @@ BlazeComponent.extendComponent({
'subtext-with-parent',
'no-parent',
];
- options.forEach(function (element) {
+ options.forEach(function(element) {
if (element !== value) {
$(`#${element} ${MCB}`).toggleClass(CKCLS, false);
$(`#${element}`).toggleClass(CKCLS, false);
@@ -688,7 +687,7 @@ BlazeComponent.extendComponent({
'members.userId': Meteor.userId(),
},
{
- sort: ['title'],
+ sort: { sort: 1 /* boards default sorting */ },
},
);
},
diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js
index b7a55ce6..753fa88b 100644
--- a/client/components/swimlanes/swimlanes.js
+++ b/client/components/swimlanes/swimlanes.js
@@ -1,6 +1,6 @@
import { Cookies } from 'meteor/ostrio:cookies';
const cookies = new Cookies();
-const { calculateIndex, enableClickOnTouch } = Utils;
+const { calculateIndex } = Utils;
function currentListIsInThisSwimlane(swimlaneId) {
const currentList = Lists.findOne(Session.get('currentList'));
@@ -87,9 +87,6 @@ function initSortable(boardComponent, $listsDom) {
},
});
- // ugly touch event hotfix
- enableClickOnTouch('.js-list:not(.js-list-composer)');
-
function userIsMember() {
return (
Meteor.user() &&
@@ -111,7 +108,7 @@ function initSortable(boardComponent, $listsDom) {
showDesktopDragHandles = false;
}
- if (!Utils.isMiniScreen() && showDesktopDragHandles) {
+ if (Utils.isMiniScreen() || showDesktopDragHandles) {
$listsDom.sortable({
handle: '.js-list-handle',
});
@@ -122,34 +119,12 @@ function initSortable(boardComponent, $listsDom) {
}
const $listDom = $listsDom;
- if ($listDom.data('sortable')) {
- $listsDom.sortable(
- 'option',
- 'disabled',
- // Disable drag-dropping when user is not member/is worker/is miniscreen
- !userIsMember(),
- // Not disable drag-dropping while in multi-selection mode
- // MultiSelection.isActive() || !userIsMember(),
- );
- }
-
- if ($listDom.data('sortable')) {
- $listsDom.sortable(
- 'option',
- 'disabled',
- // Disable drag-dropping when user is not member/is worker/is miniscreen
- Meteor.user().isWorker(),
- // Not disable drag-dropping while in multi-selection mode
- // MultiSelection.isActive() || !userIsMember(),
- );
- }
-
- if ($listDom.data('sortable')) {
+ if ($listDom.data('uiSortable') || $listDom.data('sortable')) {
$listsDom.sortable(
'option',
'disabled',
- // Disable drag-dropping when user is not member/is worker/is miniscreen
- Utils.isMiniScreen(),
+ // Disable drag-dropping when user is not member/is worker
+ !userIsMember() || Meteor.user().isWorker(),
// Not disable drag-dropping while in multi-selection mode
// MultiSelection.isActive() || !userIsMember(),
);
@@ -210,8 +185,7 @@ BlazeComponent.extendComponent({
}
const noDragInside = ['a', 'input', 'textarea', 'p'].concat(
- Utils.isMiniScreen() ||
- (!Utils.isMiniScreen() && showDesktopDragHandles)
+ Utils.isMiniScreen() || showDesktopDragHandles
? ['.js-list-handle', '.js-swimlane-header-handle']
: ['.js-list-header'],
);
diff --git a/client/components/users/userHeader.jade b/client/components/users/userHeader.jade
index 1cd9da6b..d0adf29d 100644
--- a/client/components/users/userHeader.jade
+++ b/client/components/users/userHeader.jade
@@ -112,11 +112,20 @@ template(name="changeSettingsPopup")
i.fa.fa-check
unless currentUser.isWorker
li
- label.bold
+ label.bold.clear
i.fa.fa-sort-numeric-asc
| {{_ 'show-cards-minimum-count'}}
input#show-cards-count-at.inline-input.left(type="number" value="#{showCardsCountAt}" min="0" max="99" onkeydown="return false")
- input.js-apply-show-cards-at.left(type="submit" value="{{_ 'apply'}}")
+ label.bold.clear
+ i.fa.fa-calendar
+ | {{_ 'start-day-of-week'}}
+ select#start-day-of-week.inline-input.left
+ each day in weekDays startDayOfWeek
+ if day.isSelected
+ option(selected="true", value="#{day.value}") #{day.name}
+ else
+ option(value="#{day.value}") #{day.name}
+ input.js-apply-user-settings.left(type="submit" value="{{_ 'apply'}}")
template(name="userDeletePopup")
unless currentUser.isWorker
diff --git a/client/components/users/userHeader.js b/client/components/users/userHeader.js
index cd315bd6..b7bb284e 100644
--- a/client/components/users/userHeader.js
+++ b/client/components/users/userHeader.js
@@ -224,6 +224,27 @@ Template.changeSettingsPopup.helpers({
return cookies.get('limitToShowCardsCount');
}
},
+ weekDays(startDay) {
+ return [
+ TAPi18n.__('sunday'),
+ TAPi18n.__('monday'),
+ TAPi18n.__('tuesday'),
+ TAPi18n.__('wednesday'),
+ TAPi18n.__('thursday'),
+ TAPi18n.__('friday'),
+ TAPi18n.__('saturday'),
+ ].map(function(day, index) {
+ return { name: day, value: index, isSelected: index === startDay };
+ });
+ },
+ startDayOfWeek() {
+ currentUser = Meteor.user();
+ if (currentUser) {
+ return currentUser.getStartDayOfWeek();
+ } else {
+ return cookies.get('startDayOfWeek');
+ }
+ },
});
Template.changeSettingsPopup.events({
@@ -247,20 +268,31 @@ Template.changeSettingsPopup.events({
cookies.set('hasHiddenSystemMessages', 'true');
}
},
- 'click .js-apply-show-cards-at'(event, templateInstance) {
+ 'click .js-apply-user-settings'(event, templateInstance) {
event.preventDefault();
const minLimit = parseInt(
templateInstance.$('#show-cards-count-at').val(),
10,
);
+ const startDay = parseInt(
+ templateInstance.$('#start-day-of-week').val(),
+ 10,
+ );
+ const currentUser = Meteor.user();
if (!isNaN(minLimit)) {
- currentUser = Meteor.user();
if (currentUser) {
Meteor.call('changeLimitToShowCardsCount', minLimit);
} else {
cookies.set('limitToShowCardsCount', minLimit);
}
- Popup.back();
}
+ if (!isNaN(startDay)) {
+ if (currentUser) {
+ Meteor.call('changeStartDayOfWeek', startDay);
+ } else {
+ cookies.set('startDayOfWeek', startDay);
+ }
+ }
+ Popup.back();
},
});
diff --git a/client/lib/datepicker.js b/client/lib/datepicker.js
index 8ad66c5f..aa05310c 100644
--- a/client/lib/datepicker.js
+++ b/client/lib/datepicker.js
@@ -10,12 +10,22 @@ DatePicker = BlazeComponent.extendComponent({
this.defaultTime = defaultTime;
},
+ startDayOfWeek() {
+ const currentUser = Meteor.user();
+ if (currentUser) {
+ return currentUser.getStartDayOfWeek();
+ } else {
+ return 1;
+ }
+ },
+
onRendered() {
const $picker = this.$('.js-datepicker')
.datepicker({
todayHighlight: true,
todayBtn: 'linked',
language: TAPi18n.getLanguage(),
+ weekStart: this.startDayOfWeek(),
})
.on(
'changeDate',
diff --git a/docker-compose.yml b/docker-compose.yml
index fe037add..6a88ab93 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -38,7 +38,7 @@ version: '2'
# sudo service docker start
# ----------------------------------------------------------------------------------
# ==== USAGE OF THIS docker-compose.yml ====
-# 1) For seeing does Wekan work, try this and check with your webbroser:
+# 1) For seeing does Wekan work, try this and check with your web browser:
# docker-compose up
# 2) Stop Wekan and start Wekan in background:
# docker-compose stop
@@ -598,6 +598,9 @@ services:
# example : LOGOUT_ON_MINUTES=55
#- LOGOUT_ON_MINUTES=
#-------------------------------------------------------------------
+ # Hide password login form
+ # - PASSWORD_LOGIN_ENABLED=true
+ #-------------------------------------------------------------------
depends_on:
- wekandb
diff --git a/helm/wekan/templates/deployment.yaml b/helm/wekan/templates/deployment.yaml
index e5bf2018..68dbf75c 100644
--- a/helm/wekan/templates/deployment.yaml
+++ b/helm/wekan/templates/deployment.yaml
@@ -37,6 +37,12 @@ spec:
value: {{ .Values.root_url | default "https://wekan.local" | quote }}
- name: MONGO_URL
value: "{{ template "mongodb-replicaset.url" . }}"
+ {{- range $key := .Values.env }}
+ {{- if .value }}
+ - name: {{ .name }}
+ value: {{ .value | quote }}
+ {{- end }}
+ {{- end }}
livenessProbe:
httpGet:
path: /
diff --git a/helm/wekan/templates/serviceaccount.yaml b/helm/wekan/templates/serviceaccount.yaml
index 58696cb6..543e58d4 100644
--- a/helm/wekan/templates/serviceaccount.yaml
+++ b/helm/wekan/templates/serviceaccount.yaml
@@ -2,6 +2,10 @@
apiVersion: v1
kind: ServiceAccount
metadata:
+{{- if .Values.serviceAccounts.annotations }}
+ annotations:
+{{ .Values.serviceAccounts.annotations | indent 4}}
+{{- end }}
labels:
app: {{ template "wekan.name" . }}
chart: {{ template "wekan.chart" . }}
diff --git a/helm/wekan/values.yaml b/helm/wekan/values.yaml
index 8211f495..78136af3 100644
--- a/helm/wekan/values.yaml
+++ b/helm/wekan/values.yaml
@@ -8,6 +8,7 @@
serviceAccounts:
create: true
name: ""
+ annotations: ""
## Wekan image configuration
##
@@ -29,7 +30,9 @@ credentials:
## Specify additional environmental variables for the Deployment
##
-env: {}
+env:
+ - name: ""
+ value: ""
service:
type: NodePort
@@ -59,10 +62,10 @@ ingress:
# hosts:
# - wekan-example.local
- route:
- enabled: false
+route:
+ enabled: false
-resources:
+resources:
requests:
memory: 128Mi
cpu: 300m
diff --git a/i18n/ar.i18n.json b/i18n/ar.i18n.json
index 72c8f003..b63e7c0a 100644
--- a/i18n/ar.i18n.json
+++ b/i18n/ar.i18n.json
@@ -74,12 +74,12 @@
"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-deleteComment": "تعليق محذوف %s",
"add-attachment": "إضافة مرفق",
"add-board": "إضافة لوحة",
"add-card": "إضافة بطاقة",
"add-swimlane": "Add Swimlane",
- "add-subtask": "Add Subtask",
+ "add-subtask": "إضافة مهمة فرعية",
"add-checklist": "إضافة قائمة تدقيق",
"add-checklist-item": "إضافة عنصر إلى قائمة التحقق",
"add-cover": "إضافة غلاف",
@@ -111,8 +111,8 @@
"restore-board": "استعادة اللوحة",
"no-archived-boards": "لا توجد لوحات في الأرشيف.",
"archives": "أرشيف",
- "template": "Template",
- "templates": "Templates",
+ "template": "نموذج",
+ "templates": "نماذج",
"assign-member": "تعيين عضو",
"attached": "أُرفق)",
"attachment": "مرفق",
@@ -152,8 +152,8 @@
"card-spent": "امضى وقتا",
"card-edit-attachments": "تعديل المرفقات",
"card-edit-custom-fields": "تعديل الحقل المعدل",
- "card-start-voting": "Start voting",
- "card-cancel-voting": "Delete voting and all votes",
+ "card-start-voting": "ابدأ التصويت",
+ "card-cancel-voting": "حذف التصويت وجميع الأصوات",
"card-edit-labels": "تعديل العلامات",
"card-edit-members": "تعديل الأعضاء",
"card-labels-title": "تعديل علامات البطاقة.",
@@ -163,10 +163,13 @@
"cardAttachmentsPopup-title": "إرفاق من",
"cardCustomField-datePopup-title": "تغير التاريخ",
"cardCustomFieldsPopup-title": "تعديل الحقل المعدل",
- "cardStartVotingPopup-title": "Start a vote",
+ "cardStartVotingPopup-title": "ابدأ تصويت",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
- "vote-for-it": "for it",
- "vote-against": "against",
+ "vote-public": "Public vote",
+ "vote-for-it": "مع",
+ "vote-against": "ضد",
"cardDeletePopup-title": "حذف البطاقة ?",
"cardDetailsActionsPopup-title": "إجراءات على البطاقة",
"cardLabelsPopup-title": "علامات",
@@ -189,7 +192,7 @@
"changePasswordPopup-title": "تغيير كلمة المرور",
"changePermissionsPopup-title": "تعديل الصلاحيات",
"changeSettingsPopup-title": "تغيير الاعدادات",
- "subtasks": "Subtasks",
+ "subtasks": "المهمات الفرعية",
"checklists": "قوائم التّدقيق",
"click-to-star": "اضغط لإضافة اللوحة للمفضلة.",
"click-to-unstar": "اضغط لحذف اللوحة من المفضلة.",
@@ -200,9 +203,9 @@
"color-black": "black",
"color-blue": "blue",
"color-crimson": "crimson",
- "color-darkgreen": "darkgreen",
- "color-gold": "gold",
- "color-gray": "gray",
+ "color-darkgreen": "اخضر غامق",
+ "color-gold": "ذهبي",
+ "color-gray": "رمادي",
"color-green": "green",
"color-indigo": "indigo",
"color-lime": "lime",
@@ -217,17 +220,17 @@
"color-purple": "purple",
"color-red": "red",
"color-saddlebrown": "saddlebrown",
- "color-silver": "silver",
+ "color-silver": "فضي",
"color-sky": "sky",
"color-slateblue": "slateblue",
- "color-white": "white",
+ "color-white": "أبيض",
"color-yellow": "yellow",
"unset-color": "Unset",
"comment": "تعليق",
"comment-placeholder": "أكتب تعليق",
"comment-only": "التعليق فقط",
"comment-only-desc": "يمكن التعليق على بطاقات فقط.",
- "no-comments": "No comments",
+ "no-comments": "لا يوجد تعليقات",
"no-comments-desc": "Can not see comments and activities.",
"worker": "Worker",
"worker-desc": "Can only move cards, assign itself to card and comment.",
@@ -245,8 +248,8 @@
"createBoardPopup-title": "إنشاء لوحة",
"chooseBoardSourcePopup-title": "استيراد لوحة",
"createLabelPopup-title": "إنشاء علامة",
- "createCustomField": "Create Field",
- "createCustomFieldPopup-title": "Create Field",
+ "createCustomField": "انشاء حقل",
+ "createCustomFieldPopup-title": "انشاء حقل",
"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",
@@ -256,8 +259,8 @@
"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-number": "رقم",
+ "custom-field-text": "نص",
"custom-fields": "Custom Fields",
"date": "تاريخ",
"decline": "Decline",
@@ -340,13 +343,11 @@
"headerBarCreateBoardPopup-title": "إنشاء لوحة",
"home": "الرئيسية",
"import": "Import",
- "link": "Link",
+ "link": "رابط",
"import-board": "استيراد لوحة",
"import-board-c": "استيراد لوحة",
"import-board-title-trello": "Import board from 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": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "من تريلو",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text",
@@ -473,15 +474,15 @@
"this-board": "هذه اللوحة",
"this-card": "هذه البطاقة",
"spent-time-hours": "Spent time (hours)",
- "overtime-hours": "Overtime (hours)",
- "overtime": "Overtime",
+ "overtime-hours": "وقت اضافي (ساعات)",
+ "overtime": "وقت اضافي",
"has-overtime-cards": "Has overtime cards",
"has-spenttime-cards": "Has spent time cards",
"time": "الوقت",
"title": "عنوان",
"tracking": "تتبع",
"tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
- "type": "Type",
+ "type": "النوع",
"unassign-member": "إلغاء تعيين العضو",
"unsaved-description": "لديك وصف غير محفوظ",
"unwatch": "غير مُشاهد",
@@ -555,7 +556,7 @@
"OS_Totalmem": "الذاكرة الكلية لنظام التشغيل",
"OS_Type": "نوع نظام التشغيل",
"OS_Uptime": "مدة تشغيل نظام التشغيل",
- "days": "days",
+ "days": "أيام",
"hours": "الساعات",
"minutes": "الدقائق",
"seconds": "الثواني",
@@ -569,17 +570,17 @@
"accounts-allowUserNameChange": "Allow Username Change",
"createdAt": "Created at",
"verified": "Verified",
- "active": "Active",
+ "active": "نشط",
"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",
+ "setCardColorPopup-title": "حدد اللون",
+ "setCardActionsColorPopup-title": "اختر لوناً",
+ "setSwimlaneColorPopup-title": "اختر لوناً",
+ "setListColorPopup-title": "اختر لوناً",
"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.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/bg.i18n.json b/i18n/bg.i18n.json
index 4f422d0f..43e69f61 100644
--- a/i18n/bg.i18n.json
+++ b/i18n/bg.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Промени датата",
"cardCustomFieldsPopup-title": "Промени собствените полета",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Желаете да изтриете картата?",
@@ -345,8 +348,6 @@
"import-board-c": "Импортирай Табло",
"import-board-title-trello": "Импорт на табло от 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": "Импортирането ще изтрие всичката налична информация в таблото и ще я замени с нова.",
"from-trello": "От Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/br.i18n.json b/i18n/br.i18n.json
index 10a33923..eb787032 100644
--- a/i18n/br.i18n.json
+++ b/i18n/br.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Diverkañ ar gartenn ?",
@@ -345,8 +348,6 @@
"import-board-c": "Import board",
"import-board-title-trello": "Import board from 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": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "From Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/ca.i18n.json b/i18n/ca.i18n.json
index 133d62ec..ba717349 100644
--- a/i18n/ca.i18n.json
+++ b/i18n/ca.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Canviar data",
"cardCustomFieldsPopup-title": "Editar camps personalitzats",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Esborrar fitxa?",
@@ -345,8 +348,6 @@
"import-board-c": "Importa tauler",
"import-board-title-trello": "Importa tauler des de 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": "Estau segur que voleu esborrar aquesta checklist?",
"from-trello": "Des de Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "En el teu tauler Trello, ves a 'Menú', 'Més'.' Imprimir i Exportar', 'Exportar JSON', i copia el text resultant.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/cs.i18n.json b/i18n/cs.i18n.json
index 61b2ed98..9fdf2cae 100644
--- a/i18n/cs.i18n.json
+++ b/i18n/cs.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Změnit datum",
"cardCustomFieldsPopup-title": "Upravit vlastní pole",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Smazat kartu?",
@@ -345,8 +348,6 @@
"import-board-c": "Importovat tablo",
"import-board-title-trello": "Import board from Trello",
"import-board-title-wekan": "Importovat tablo z předchozího exportu",
- "import-sandstorm-backup-warning": "Nemažte data, která importujete z původního exportovaného tabla nebo Trello předtím, nežli zkontrolujete, jestli lze tuto část zavřít a znovu otevřít nebo jestli se Vám nezobrazuje chyba tabla, což znamená ztrátu dat.",
- "import-sandstorm-warning": "Importované tablo spaže všechny existující data v tablu a nahradí je importovaným tablem.",
"from-trello": "Z Trella",
"from-wekan": "Z předchozího exportu",
"import-board-instruction-trello": "Na svém Trello tablu, otevři 'Menu', pak 'More', 'Print and Export', 'Export JSON', a zkopíruj výsledný text",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Označit vše jako přečtené",
"remove-all-read": "Remove all read",
"allow-rename": "Povolit přejmenování",
- "allowRenamePopup-title": "Povolit přejmenování"
+ "allowRenamePopup-title": "Povolit přejmenování",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/da.i18n.json b/i18n/da.i18n.json
index bfdd49c9..3ee4e944 100644
--- a/i18n/da.i18n.json
+++ b/i18n/da.i18n.json
@@ -1,777 +1,786 @@
{
- "accept": "Accepter",
- "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__",
+ "accept": "Acceptér",
+ "act-activity-notify": "Aktivitetsnotits",
+ "act-addAttachment": "tilføjede vedhæftningen __attachment__ til kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "act-deleteAttachment": "slettede vedhæftning __attachment__ til kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "act-addSubtask": "tilføjede delopgaven __subtask__ til kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "act-addLabel": "Tilføjede etiketten __label__ til kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "act-addedLabel": "Tilføjede etiketten __label__ til kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "act-removeLabel": "Fjernede etiketten __label__ fra kortet __card__ på listen __list__ i svømmebanen __swimlane__ på kortet __board__",
+ "act-removedLabel": "Fjernede etiketten __label__ fra kortet __card__ på listen __list__ i svømmebanen __swimlane__ på kortet __board__",
+ "act-addChecklist": "tilføjede tjeklisten __checklist__ til kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "act-addChecklistItem": "tilføjede elementet i tjekliste __checklistItem__ til tjeklisten __checklist__ i kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "act-removeChecklist": "fjernede tjeklisten __checklist__ fra kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "act-removeChecklistItem": "fjernede elementet i tjekliste __checklistItem__ fra tjeklisten __checkList__ fra kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "act-checkedItem": "markerede __checklistItem__ fra tjeklisten __checklist__ fra kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "act-uncheckedItem": "afmarkerede __checklistItem__ fra tjeklisten __checklist__ fra kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "act-completeChecklist": "afsluttet tjekliste __checklist__ i kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "act-uncompleteChecklist": "uafsluttet tjekliste __checklist__ i kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "act-addComment": "kommenterede på kortet __card__: __comment__ til listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "act-editComment": "redigerede kommentar på kortet __card__: __comment__ til listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "act-deleteComment": "slettede kommentar på kortet __card__: __comment__ til listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "act-createBoard": "oprettede tavlen __board__",
+ "act-createSwimlane": "oprettede svømmebanen __swimlane__ på tavlen __board__",
+ "act-createCard": "oprettede kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "act-createCustomField": "oprettede brugerdefineret felt __customField__ på tavlen __board__",
+ "act-deleteCustomField": "slettede brugerdefineret felt __customField__ på tavlen __board__",
+ "act-setCustomField": "redigerede brugerdefineret felt __customField__: __customFieldValue__ i kortet __card__ på lsten __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "act-createList": "tilføjede listen __list__ til tavlen __board__",
+ "act-addBoardMember": "tilføejede medlemmet __member__ til tavlen __board__",
+ "act-archivedBoard": "Tavlen __board__ blev flyttet til Arkiv",
+ "act-archivedCard": "Kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__ er flyttet til arkivet",
+ "act-archivedList": "Listen __list__ i svømmebanen __swimlane__ på tavlen __board__ er flyttet til arkivet",
+ "act-archivedSwimlane": "Svømmebanen __swimlane__ på tavlen __board__ er flyttet til arkivet",
+ "act-importBoard": "importerede tavlen __board__",
+ "act-importCard": "importerede kortet __card__ til listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "act-importList": "importerede listen __list__ til svømmebanen __swimlane__ på tavlen __board__",
+ "act-joinMember": "tilføjede medlemmet __member__ til kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "act-moveCard": "flyttede kortet __card__ på tavlen __board__ fra listen __oldList__ i svømmebanen __oldSwimlane__ til listen __list__ i svømmebanen __swimlane__",
+ "act-moveCardToOtherBoard": "flyttede kortet __card__ fra listen __oldList__ i svømmebanen __oldSwimlane__ på tavlen __oldBoard__ til listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "act-removeBoardMember": "fjernede medlemmet __member__ fra tavlen __board__",
+ "act-restoredCard": "genskabte kortet __card__ til listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "act-unjoinMember": "fjernede medlemmet __member__ fra kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
- "actions": "Actions",
- "activities": "Activities",
- "activity": "Activity",
- "activity-added": "added %s to %s",
- "activity-archived": "%s moved to Archive",
- "activity-attached": "attached %s to %s",
- "activity-created": "created %s",
- "activity-customfield-created": "created custom field %s",
- "activity-excluded": "excluded %s from %s",
- "activity-imported": "imported %s into %s from %s",
- "activity-imported-board": "imported %s from %s",
- "activity-joined": "joined %s",
- "activity-moved": "moved %s from %s to %s",
- "activity-on": "on %s",
- "activity-removed": "removed %s from %s",
- "activity-sent": "sent %s to %s",
- "activity-unjoined": "unjoined %s",
- "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-checklist-added": "added checklist to %s",
- "activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist %s of %s",
- "activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
- "activity-checklist-item-added": "added checklist item to '%s' in %s",
- "activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
- "add": "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",
- "add-attachment": "Add Attachment",
- "add-board": "Add Board",
- "add-card": "Add Card",
- "add-swimlane": "Add Swimlane",
- "add-subtask": "Add Subtask",
- "add-checklist": "Add Checklist",
- "add-checklist-item": "Add an item to checklist",
- "add-cover": "Add Cover",
- "add-label": "Add Label",
- "add-list": "Add List",
- "add-members": "Add Members",
- "added": "Added",
- "addMemberPopup-title": "Members",
+ "actions": "Handlinger",
+ "activities": "Aktiviteter",
+ "activity": "Aktivitet",
+ "activity-added": "tilføjede %s til %s",
+ "activity-archived": "%s flyttet til Arkiv",
+ "activity-attached": "vedhæftede %s til %s",
+ "activity-created": "oprettede %s",
+ "activity-customfield-created": "oprettede brugerdefineret felt %s",
+ "activity-excluded": "ekskluderet %s fra %s",
+ "activity-imported": "importerede %s ind i %s fra %s",
+ "activity-imported-board": "importerede %s fra %s",
+ "activity-joined": "indgik i %s",
+ "activity-moved": "flyttede %s fra %s til %s",
+ "activity-on": "per %s",
+ "activity-removed": "fjernede %s fra %s",
+ "activity-sent": "sendte %s til %s",
+ "activity-unjoined": "udgik fra %s",
+ "activity-subtask-added": "tilføjede delopgave til %s",
+ "activity-checked-item": "afkrydsede %s i tjeklisten %s af %s",
+ "activity-unchecked-item": "fjernede kryds %s i tjeklisten %s af %s",
+ "activity-checklist-added": "tilføjede tjeklisten til %s",
+ "activity-checklist-removed": "fjernede en tjekliste fra %s",
+ "activity-checklist-completed": "færdiggjorde tjekliste %s af %s",
+ "activity-checklist-uncompleted": "gjorde tjeklisten ukomplet, %s af %s",
+ "activity-checklist-item-added": "tilføjede element i tjekliste til '%s' i %s",
+ "activity-checklist-item-removed": "fjernede element i tjekliste fra '%s' i %s",
+ "add": "Tilføj",
+ "activity-checked-item-card": "markerede %s i tjeklisten %s",
+ "activity-unchecked-item-card": "afmarkerede %s i tjeklisten %s",
+ "activity-checklist-completed-card": "udført tjekliste __checklist__ i kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
+ "activity-checklist-uncompleted-card": "gjorde tjeklisten ukomplet %s",
+ "activity-editComment": "redigerede kommentar %s",
+ "activity-deleteComment": "slettede kommentar %s",
+ "add-attachment": "Tilføj vedhæftning",
+ "add-board": "Tilføj tavle",
+ "add-card": "Tilføj kort",
+ "add-swimlane": "Tilføj svømmebane",
+ "add-subtask": "Tilføj delopgave",
+ "add-checklist": "Tilføj tjekliste",
+ "add-checklist-item": "Tilføj et element til tjeklisten",
+ "add-cover": "Tilføj omslag",
+ "add-label": "Tilføj etikette",
+ "add-list": "Tilføj liste",
+ "add-members": "Tilføj medlemmer",
+ "added": "Tilføjet",
+ "addMemberPopup-title": "Medlemmer",
"admin": "Admin",
- "admin-desc": "Can view and edit cards, remove members, and change settings for the board.",
- "admin-announcement": "Announcement",
- "admin-announcement-active": "Active System-Wide Announcement",
- "admin-announcement-title": "Announcement from Administrator",
- "all-boards": "All boards",
- "and-n-other-card": "And __count__ other card",
- "and-n-other-card_plural": "And __count__ other cards",
- "apply": "Apply",
- "app-is-offline": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.",
- "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?",
- "archived-items": "Archive",
- "archived-boards": "Boards in Archive",
- "restore-board": "Restore Board",
- "no-archived-boards": "No Boards in Archive.",
- "archives": "Archive",
- "template": "Template",
- "templates": "Templates",
- "assign-member": "Assign member",
- "attached": "attached",
- "attachment": "Attachment",
- "attachment-delete-pop": "Deleting an attachment is permanent. There is no undo.",
- "attachmentDeletePopup-title": "Delete Attachment?",
- "attachments": "Attachments",
- "auto-watch": "Automatically watch boards when they are created",
- "avatar-too-big": "The avatar is too large (70KB max)",
- "back": "Back",
- "board-change-color": "Change color",
- "board-nb-stars": "%s stars",
- "board-not-found": "Board not found",
- "board-private-info": "This board will be <strong>private</strong>.",
- "board-public-info": "This board will be <strong>public</strong>.",
- "boardChangeColorPopup-title": "Change Board Background",
- "boardChangeTitlePopup-title": "Rename Board",
- "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",
- "card-archived": "This card is moved to Archive.",
- "board-archived": "This board is moved to Archive.",
- "card-comments-title": "This card has %s comment.",
- "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
- "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
- "card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
- "card-due": "Due",
- "card-due-on": "Due on",
- "card-spent": "Spent Time",
- "card-edit-attachments": "Edit attachments",
- "card-edit-custom-fields": "Edit custom fields",
- "card-start-voting": "Start voting",
- "card-cancel-voting": "Delete voting and all votes",
- "card-edit-labels": "Edit labels",
- "card-edit-members": "Edit members",
- "card-labels-title": "Change the labels for the card.",
- "card-members-title": "Add or remove members of the board from the card.",
+ "admin-desc": "Kan se og redigere kort, fjerne medlemmer og ændre indstillinger for tavlen.",
+ "admin-announcement": "Annoncering",
+ "admin-announcement-active": "Aktivér annoncering på tværs af systemet",
+ "admin-announcement-title": "Annoncering fra administrator",
+ "all-boards": "Alle tavler",
+ "and-n-other-card": "Samt __count__ andre kort",
+ "and-n-other-card_plural": "Samt __count__ andre kort",
+ "apply": "Anvend",
+ "app-is-offline": "Indlæser, vent venligst. Genopfriskes siden er der risiko for tab af data. Fungerer indlæsningen ikke, så tjek venligst om serveren er stoppet. ",
+ "archive": "Flyt til arkiv",
+ "archive-all": "Flyt alle til arkiv",
+ "archive-board": "Flyt tavle til arkiv",
+ "archive-card": "Flyt kort til arkiv",
+ "archive-list": "Flyt liste til arkiv",
+ "archive-swimlane": "Flyt svømmebane til arkiv",
+ "archive-selection": "Flyt valgte til arkiv",
+ "archiveBoardPopup-title": "Flyt tavle til arkiv?",
+ "archived-items": "Arkiv",
+ "archived-boards": "Tavler i arkiv",
+ "restore-board": "Genskab tavle",
+ "no-archived-boards": "Ingen tavler i arkiv",
+ "archives": "Arkiv",
+ "template": "Skabelon",
+ "templates": "Skabeloner",
+ "assign-member": "Tilknyt medlem",
+ "attached": "vedhæftet",
+ "attachment": "Vedhæftning",
+ "attachment-delete-pop": "Slettes en vedhæftning sker det permanent. Det kan ikke omgøres. ",
+ "attachmentDeletePopup-title": "Slet vedhæftning?",
+ "attachments": "Vedhæftninger",
+ "auto-watch": "Følg automatisk tavler når de oprettes ",
+ "avatar-too-big": "Avataren fylder for meget (maks. 70KB)",
+ "back": "Tilbage",
+ "board-change-color": "Skift farve",
+ "board-nb-stars": "%s stjerner",
+ "board-not-found": "Fandt ikke tavle ",
+ "board-private-info": "Denne tavle vil være <strong>privat</strong>.",
+ "board-public-info": "Denne tavle vil være <strong>offentlig</strong>.",
+ "boardChangeColorPopup-title": "Skift tavlens baggrund",
+ "boardChangeTitlePopup-title": "Omdøb tavle",
+ "boardChangeVisibilityPopup-title": "Tilpas synlighed",
+ "boardChangeWatchPopup-title": "Tilpas følgefunktion",
+ "boardMenuPopup-title": "Tavleindstillinger",
+ "boardChangeViewPopup-title": "Tavlevisning",
+ "boards": "Tavler",
+ "board-view": "Tavlevisning",
+ "board-view-cal": "Kalender",
+ "board-view-swimlanes": "Svømmebaner",
+ "board-view-collapse": "Sammenfold",
+ "board-view-lists": "Lister",
+ "bucket-example": "Eksempelvis \"Bucked-liste\"",
+ "cancel": "Annullér",
+ "card-archived": "Dette kort blev flyttet til arkivet.",
+ "board-archived": "Denne tavle blev flyttet til arkivet.",
+ "card-comments-title": "Dette kort har %s kommentar.",
+ "card-delete-notice": "Sletning vil være permanent. Du mister alle handlinger knyttet til dette kort.",
+ "card-delete-pop": "Alle handlinger vil blive fjernet fra aktivitetsfeedet, og du kan ikke genåbne kortet. Det kan ikke omgøres.",
+ "card-delete-suggest-archive": "Du kan flytte et kort til arkivet for at fjerne det fra tavlen, og bevare aktiviteten.",
+ "card-due": "Forfalder",
+ "card-due-on": "Forfaldsdato",
+ "card-spent": "Anvendt tid",
+ "card-edit-attachments": "Redigér vedhæftninger",
+ "card-edit-custom-fields": "Redigér brugerdefinerede felter",
+ "card-start-voting": "Start stemmegivning",
+ "card-cancel-voting": "Slet stemmegivning og alle stemmer",
+ "card-edit-labels": "Redigér etiketter",
+ "card-edit-members": "Redigér medlemmer",
+ "card-labels-title": "Ændr etiketter for kortet.",
+ "card-members-title": "Tilføj eller fjern medlemmer på tavlen fra kortet.",
"card-start": "Start",
- "card-start-on": "Starts on",
- "cardAttachmentsPopup-title": "Attach From",
- "cardCustomField-datePopup-title": "Change date",
- "cardCustomFieldsPopup-title": "Edit custom fields",
- "cardStartVotingPopup-title": "Start a vote",
- "vote-question": "Voting question",
- "vote-for-it": "for it",
- "vote-against": "against",
- "cardDeletePopup-title": "Delete Card?",
- "cardDetailsActionsPopup-title": "Card Actions",
- "cardLabelsPopup-title": "Labels",
- "cardMembersPopup-title": "Members",
- "cardMorePopup-title": "More",
- "cardTemplatePopup-title": "Create template",
- "cards": "Cards",
- "cards-count": "Cards",
- "casSignIn": "Sign In with CAS",
- "cardType-card": "Card",
- "cardType-linkedCard": "Linked Card",
- "cardType-linkedBoard": "Linked Board",
- "change": "Change",
- "change-avatar": "Change Avatar",
- "change-password": "Change Password",
- "change-permissions": "Change permissions",
- "change-settings": "Change Settings",
- "changeAvatarPopup-title": "Change Avatar",
- "changeLanguagePopup-title": "Change Language",
- "changePasswordPopup-title": "Change Password",
- "changePermissionsPopup-title": "Change Permissions",
- "changeSettingsPopup-title": "Change Settings",
- "subtasks": "Subtasks",
- "checklists": "Checklists",
- "click-to-star": "Click to star this board.",
- "click-to-unstar": "Click to unstar this board.",
- "clipboard": "Clipboard or drag & drop",
- "close": "Close",
- "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-crimson": "crimson",
- "color-darkgreen": "darkgreen",
- "color-gold": "gold",
- "color-gray": "gray",
- "color-green": "green",
- "color-indigo": "indigo",
+ "card-start-on": "Starter per",
+ "cardAttachmentsPopup-title": "Vedhæft fra",
+ "cardCustomField-datePopup-title": "Ændringsdato",
+ "cardCustomFieldsPopup-title": "Redigér brugerdefinerede felter",
+ "cardStartVotingPopup-title": "Start en stemmeafgivning",
+ "positiveVoteMembersPopup-title": "Tilhængere",
+ "negativeVoteMembersPopup-title": "Modstandere",
+ "vote-question": "Spørgsmål til afstemning",
+ "vote-public": "Offentlig stemmegivning",
+ "vote-for-it": "går ind for",
+ "vote-against": "går imod",
+ "cardDeletePopup-title": "Slet kort?",
+ "cardDetailsActionsPopup-title": "Handlinger for kort",
+ "cardLabelsPopup-title": "Etiketter",
+ "cardMembersPopup-title": "Medlemmer",
+ "cardMorePopup-title": "Mere",
+ "cardTemplatePopup-title": "Opret skabelon",
+ "cards": "Kort",
+ "cards-count": "Kort",
+ "casSignIn": "Log ind med CAS",
+ "cardType-card": "Kort",
+ "cardType-linkedCard": "Sammenkædet kort",
+ "cardType-linkedBoard": "Sammenkædet tavle",
+ "change": "Tilpas",
+ "change-avatar": "Tilpas avatar",
+ "change-password": "Skift kodeord",
+ "change-permissions": "Tilpas tilladelser",
+ "change-settings": "Tilpas indstillinger",
+ "changeAvatarPopup-title": "Tilpas avatar",
+ "changeLanguagePopup-title": "Skift sprog",
+ "changePasswordPopup-title": "Skift kodeord",
+ "changePermissionsPopup-title": "Tilpas tilladelser",
+ "changeSettingsPopup-title": "Tilpas indstillinger",
+ "subtasks": "Delopgaver",
+ "checklists": "Tjeklister",
+ "click-to-star": "Klik for at tilføje stjerne til tavlen.",
+ "click-to-unstar": "Klik for at fjerne stjerne fra tavlen.",
+ "clipboard": "Udklipsholder eller træk-og-slip",
+ "close": "Luk",
+ "close-board": "Luk tavle",
+ "close-board-pop": "Du har mulighed for at genskabe tavlen ved at klikke på \"Arkiv\"-knappen fra overskriften hjem.",
+ "color-black": "sort",
+ "color-blue": "blå",
+ "color-crimson": "crimsonrød",
+ "color-darkgreen": "mørkegrøn",
+ "color-gold": "guld",
+ "color-gray": "grå",
+ "color-green": "grøn",
+ "color-indigo": "indigoblå",
"color-lime": "lime",
"color-magenta": "magenta",
- "color-mistyrose": "mistyrose",
- "color-navy": "navy",
+ "color-mistyrose": "lyserød",
+ "color-navy": "navyblå",
"color-orange": "orange",
- "color-paleturquoise": "paleturquoise",
- "color-peachpuff": "peachpuff",
+ "color-paleturquoise": "bleg turkis",
+ "color-peachpuff": "ferskenfarvet",
"color-pink": "pink",
- "color-plum": "plum",
- "color-purple": "purple",
- "color-red": "red",
- "color-saddlebrown": "saddlebrown",
- "color-silver": "silver",
+ "color-plum": "blommefarvet",
+ "color-purple": "lilla",
+ "color-red": "rød",
+ "color-saddlebrown": "saddelbrun",
+ "color-silver": "sølv",
"color-sky": "sky",
- "color-slateblue": "slateblue",
- "color-white": "white",
- "color-yellow": "yellow",
- "unset-color": "Unset",
- "comment": "Comment",
- "comment-placeholder": "Write Comment",
- "comment-only": "Comment only",
- "comment-only-desc": "Can comment on cards only.",
- "no-comments": "No comments",
- "no-comments-desc": "Can not see comments and activities.",
- "worker": "Worker",
- "worker-desc": "Can only move cards, assign itself to card and comment.",
+ "color-slateblue": "blågrå",
+ "color-white": "hvid",
+ "color-yellow": "gul",
+ "unset-color": "Nulstil",
+ "comment": "Kommentér",
+ "comment-placeholder": "Skriv kommentar",
+ "comment-only": "Kun kommentarer",
+ "comment-only-desc": "Kan kun kommentere på kort.",
+ "no-comments": "Ingen kommentarer",
+ "no-comments-desc": "Kan ikke se kommentarer og aktiviteter.",
+ "worker": "Arbejder",
+ "worker-desc": "Kan kun flytte kort, tildele sig selv til kort og kommentere.",
"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?",
- "copy-card-link-to-clipboard": "Copy card link to clipboard",
- "linkCardPopup-title": "Link Card",
- "searchElementPopup-title": "Search",
- "copyCardPopup-title": "Copy Card",
- "copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
- "copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
+ "confirm-subtask-delete-dialog": "Er du sikker på du vil slette delopgaven?",
+ "confirm-checklist-delete-dialog": "Er du sikker på du vil slette tjeklisten?",
+ "copy-card-link-to-clipboard": "Kopiér link til kort til udklipsholder ",
+ "linkCardPopup-title": "Sammenkæd kort",
+ "searchElementPopup-title": "Søg",
+ "copyCardPopup-title": "Kopiér kort",
+ "copyChecklistToManyCardsPopup-title": "Kopiér tjeklisteskabelon til flere kort",
+ "copyChecklistToManyCardsPopup-instructions": "Destination for kortenes titler og beskrivelser i dette JSON-format",
"copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
- "create": "Create",
- "createBoardPopup-title": "Create Board",
- "chooseBoardSourcePopup-title": "Import board",
- "createLabelPopup-title": "Create Label",
- "createCustomField": "Create Field",
- "createCustomFieldPopup-title": "Create Field",
- "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-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",
- "date": "Date",
- "decline": "Decline",
- "default-avatar": "Default avatar",
- "delete": "Delete",
- "deleteCustomFieldPopup-title": "Delete Custom Field?",
- "deleteLabelPopup-title": "Delete Label?",
- "description": "Description",
- "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
- "disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
- "discard": "Discard",
- "done": "Done",
- "download": "Download",
- "edit": "Edit",
- "edit-avatar": "Change Avatar",
- "edit-profile": "Edit Profile",
- "edit-wip-limit": "Edit WIP Limit",
- "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",
- "editNotificationPopup-title": "Edit Notification",
- "editProfilePopup-title": "Edit Profile",
- "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-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.",
- "email-sent": "Email sent",
- "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-json-schema": "Your JSON data does not include the proper information in the correct format",
- "error-list-doesNotExist": "This list does not exist",
- "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)",
+ "create": "Opret",
+ "createBoardPopup-title": "Opret tavle",
+ "chooseBoardSourcePopup-title": "Importér tavle",
+ "createLabelPopup-title": "Opret etikette",
+ "createCustomField": "Opret felt",
+ "createCustomFieldPopup-title": "Opret felt",
+ "current": "nuværende",
+ "custom-field-delete-pop": "Du kan ikke fortryde handlingen. Dette vil fjerne dette brugerdefinerede felt fra alle kort og tilintetgøre dens historik.",
+ "custom-field-checkbox": "Afkrydsningsfelt",
+ "custom-field-date": "Dato",
+ "custom-field-dropdown": "Rullegardinliste",
+ "custom-field-dropdown-none": "(ingen)",
+ "custom-field-dropdown-options": "Tilvalg for liste",
+ "custom-field-dropdown-options-placeholder": "Tryk enter for at tilføje flere tilvalg",
+ "custom-field-dropdown-unknown": "(ukendt)",
+ "custom-field-number": "Tal",
+ "custom-field-text": "Tekst",
+ "custom-fields": "Brugerdefinerede felter",
+ "date": "Dato",
+ "decline": "Afslå",
+ "default-avatar": "Standard-avatar",
+ "delete": "Slet",
+ "deleteCustomFieldPopup-title": "Slet brugerdefineret felt?",
+ "deleteLabelPopup-title": "Slet etikette?",
+ "description": "Beskrivelse",
+ "disambiguateMultiLabelPopup-title": "Tydeliggør handling for etikette",
+ "disambiguateMultiMemberPopup-title": "Tydeliggør handling for medlem",
+ "discard": "Forkast",
+ "done": "Færdig",
+ "download": "Hent",
+ "edit": "Redigér",
+ "edit-avatar": "Tilpas avatar",
+ "edit-profile": "Redigér profil",
+ "edit-wip-limit": "Redigér WIP-begrænsning",
+ "soft-wip-limit": "Blød WIP-begrænsning",
+ "editCardStartDatePopup-title": "Skift startdato",
+ "editCardDueDatePopup-title": "Skift forfaldsdato",
+ "editCustomFieldPopup-title": "Redigér felt",
+ "editCardSpentTimePopup-title": "Tilpas forbrugt tid",
+ "editLabelPopup-title": "Skift etikette",
+ "editNotificationPopup-title": "Redigér notifikation",
+ "editProfilePopup-title": "Redigér profil",
+ "email": "E-mail",
+ "email-enrollAccount-subject": "Der er oprettet konto til dig på __siteName__",
+ "email-enrollAccount-text": "Hej __user__,\n\nFor at begynde at benytte tjenesten, så klik linket nedenfor.\n\n__url__\n\nTak.",
+ "email-fail": "Afsendelse af e-mail mislykkedes",
+ "email-fail-text": "Fejl under afsendelse af e-mail",
+ "email-invalid": "Ugyldig e-mail",
+ "email-invite": "Invitér via e-mail",
+ "email-invite-subject": "__inviter__ sendte dig en invitation",
+ "email-invite-text": "Kære __user__,\n\n__inviter__ inviterer dig til deltagelse i tavlen \"__board__\" for samarbejde.\n\nFølg venligst linket nedenfor:\n\n__url__\n\nTak.",
+ "email-resetPassword-subject": "Genskab dit kodeord på __siteName__",
+ "email-resetPassword-text": "Hej __user__,\n\nFor at genskabe dit kodeord, så klik linket nedenfor your password.\n\n__url__\n\nTak.",
+ "email-sent": "E-mail er afsendt",
+ "email-verifyEmail-subject": "Verificér din e-mailadresse på your __siteName__",
+ "email-verifyEmail-text": "Hej __user__,\n\nFor at verificere din e-mail for kontoen, så klik på linket nedenfor.\n\n__url__\n\nTak.",
+ "enable-wip-limit": "Slå WIP-begrænsning til",
+ "error-board-doesNotExist": "Denne tavle eksisterer ikke.",
+ "error-board-notAdmin": "Du skal være administrator for tavlen for at gøre dette",
+ "error-board-notAMember": "Du skal være medlem af denne tavle for at gøre dette",
+ "error-json-malformed": "Din tekst er ikke gyldig JSON",
+ "error-json-schema": "Dine JSON-data indeholder ikke den rette information i det rette format",
+ "error-list-doesNotExist": "Listen findes ikke",
+ "error-user-doesNotExist": "Brugeren findes ikke",
+ "error-user-notAllowSelf": "Du kan ikke invitere dig selv",
+ "error-user-notCreated": "Brugeren er ikke oprettet",
+ "error-username-taken": "Brugernavnet er optaget",
+ "error-email-taken": "E-mailadressen er allerede optaget",
+ "export-board": "Eksportér tavle",
+ "sort": "Sortér",
+ "sort-desc": "Klik for at sortere listen",
+ "list-sort-by": "Sortér listen efter:",
+ "list-label-modifiedAt": "Senest tilgået:",
+ "list-label-title": "Navn på listen",
+ "list-label-sort": "Din manuelle ordre",
+ "list-label-short-modifiedAt": "(S)",
"list-label-short-title": "(N)",
"list-label-short-sort": "(M)",
"filter": "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 member",
- "filter-no-assignee": "No assignee",
- "filter-no-custom-fields": "No Custom Fields",
- "filter-show-archive": "Show archived lists",
- "filter-hide-empty": "Hide empty lists",
- "filter-on": "Filter is on",
- "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
- "filter-to-selection": "Filter to selection",
- "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.",
- "hide-system-messages": "Hide system messages",
- "headerBarCreateBoardPopup-title": "Create Board",
- "home": "Home",
- "import": "Import",
+ "filter-cards": "Filtrér kort eller lister",
+ "list-filter-label": "Filtrér lister efter titel",
+ "filter-clear": "Ryd filter",
+ "filter-no-label": "Ingen etikette",
+ "filter-no-member": "Ingen medlemmer",
+ "filter-no-assignee": "Utildelt",
+ "filter-no-custom-fields": "Ingen brugerdefinerede felter",
+ "filter-show-archive": "Vis arkiverede lister",
+ "filter-hide-empty": "Skjul tomme lister",
+ "filter-on": "Filter er slået til",
+ "filter-on-desc": "Du filtrerer kort på denne tavle. Klik her for at redigere filteret.",
+ "filter-to-selection": "Filtrér til valgte",
+ "advanced-filter-label": "Avanceret filter",
+ "advanced-filter-description": "Avanceret filter gør det muligt at skrive en tekststreng indeholdende følgende operatører: == != <= >= && || ( ) Mellemrum anvendes som adskillelsestegn mellem operatørerne. Du kan filtrere alle Brugerdefinerede felter ved at taste deres navne og værdier. Som eksempel: Felt1 == Værdi1. Bemærk: Hvis felter eller værdier indeholder mellemrum, så skal du indkapsle dem i enkeltcitationstegn. Som eksempel: 'Felt 1' == 'Værdi1'. For at springe over enkelte kontroltegn (' \\/), så kan \\ benyttes. Som eksempel: Felt1 == Så\\'n. Du kan også kombinere flere betingelser. Som eksempel: F1 == V1 || F1 == V2. Normalt vil alle operatører blive fortolket fra venstre mod højre. Du kan ændre rækkefølgen ved brug af parenteser. Som eksempel: F1 == V1 && (F2 == V2 || F2 == V3). Du kan også søge i tekstfelter med brug af regulære udtryk: F1 == /Tes.*/i",
+ "fullname": "Fuldt navn",
+ "header-logo-title": "Gå tilbage til siden med dine tavler",
+ "hide-system-messages": "Skjul systembeskeder",
+ "headerBarCreateBoardPopup-title": "Opret tavle",
+ "home": "Hjem",
+ "import": "Importér",
"link": "Link",
- "import-board": "import board",
- "import-board-c": "Import board",
- "import-board-title-trello": "Import board from 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": "Imported board will delete all existing data on board and replace it with imported board.",
- "from-trello": "From Trello",
- "from-wekan": "From previous export",
- "import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
- "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-json-placeholder": "Paste your valid JSON data here",
- "import-map-members": "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": "Review members mapping",
- "import-user-select": "Pick your existing user you want to use as this member",
- "importMapMembersAddPopup-title": "Select member",
+ "import-board": "importér tavle",
+ "import-board-c": "Importér tavle",
+ "import-board-title-trello": "Importér tavle fra Trello",
+ "import-board-title-wekan": "Importér tavler fra tidligere eksport",
+ "from-trello": "Fra Trello",
+ "from-wekan": "Fra forrige eksport",
+ "import-board-instruction-trello": "I din Trello-tavle, gå til 'Menu', dernæst 'More', 'Print and Export', 'Export JSON', og kopiér den tekst som vises.",
+ "import-board-instruction-wekan": "På din tavle, gå til 'Menu', dernæst 'Eksportér tavle', og kopiér teksten i den hentede fil.",
+ "import-board-instruction-about-errors": "Hvis du får fejl når der importeres en tavle, så vil importen undertiden stadig fungere, og tavlen vil være under side Alle tavler.",
+ "import-json-placeholder": "Indsæt dine gyldige JSON-data her",
+ "import-map-members": "Kortlæg medlemmer",
+ "import-members-map": "Dine importerede tavler rummer medlemmer. Kortlæg venligst de medlemmer du ønsker at importere til dine brugere.",
+ "import-show-user-mapping": "Gennemse kortlægning af medlemmer",
+ "import-user-select": "Vælg din eksisterende bruger, som du ønsker at bruge for dette medlem",
+ "importMapMembersAddPopup-title": "Vælg medlem",
"info": "Version",
- "initials": "Initials",
- "invalid-date": "Invalid date",
- "invalid-time": "Invalid time",
- "invalid-user": "Invalid user",
- "joined": "joined",
- "just-invited": "You are just invited to this board",
- "keyboard-shortcuts": "Keyboard shortcuts",
- "label-create": "Create Label",
- "label-default": "%s label (default)",
- "label-delete-pop": "There is no undo. This will remove this label from all cards and destroy its history.",
- "labels": "Labels",
- "language": "Language",
- "last-admin-desc": "You can’t change roles because there must be at least one admin.",
- "leave-board": "Leave Board",
- "leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
- "leaveBoardPopup-title": "Leave Board ?",
- "link-card": "Link to this card",
- "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-move-cards": "Move all cards in this list",
- "list-select-cards": "Select all cards in this list",
- "set-color-list": "Set Color",
- "listActionPopup-title": "List Actions",
- "swimlaneActionPopup-title": "Swimlane Actions",
- "swimlaneAddPopup-title": "Add a Swimlane below",
- "listImportCardPopup-title": "Import a Trello card",
- "listMorePopup-title": "More",
- "link-list": "Link to this list",
- "list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
- "list-delete-suggest-archive": "You can move a list to Archive to remove it from the board and preserve the activity.",
- "lists": "Lists",
- "swimlanes": "Swimlanes",
- "log-out": "Log Out",
- "log-in": "Log In",
- "loginPopup-title": "Log In",
- "memberMenuPopup-title": "Member Settings",
- "members": "Members",
+ "initials": "Initialer",
+ "invalid-date": "Ugyldig dato",
+ "invalid-time": "Ugyldig tidsangivelse",
+ "invalid-user": "Ugyldig bruger",
+ "joined": "sluttede sig til",
+ "just-invited": "Du er netop blevet inviteret til denne tavle",
+ "keyboard-shortcuts": "Tastaturgenveje",
+ "label-create": "Opret etikette",
+ "label-default": "%s etikette (standard)",
+ "label-delete-pop": "Det er ikke muligt at fortryde. Dette vil fjerne etiketten fra alle kort og ødelægge dets historik.",
+ "labels": "Etiketter",
+ "language": "Sprog",
+ "last-admin-desc": "Du kan ikke ændre roller, da der mindst skal være én administrator.",
+ "leave-board": "Forlad tavle",
+ "leave-board-pop": "Er du sikker på du vil forlade __boardTitle__? Du vil blive fjernet fra alle kort på denne tavle.",
+ "leaveBoardPopup-title": "Forlad tavle?",
+ "link-card": "Link til dette kort",
+ "list-archive-cards": "Flyt alle kort i denne liste til arkivet",
+ "list-archive-cards-pop": "Dette vil fjerne alle kort i denne liste fra tavlen. For at se kort i arkivet og bringe dem tilbage til tavlen, så klik \"Menu\" > \"Arkiv\".",
+ "list-move-cards": "Flyt alle kort i denne liste",
+ "list-select-cards": "Vælg alle kort i denne liste",
+ "set-color-list": "Angiv farve",
+ "listActionPopup-title": "Handlinger for liste",
+ "swimlaneActionPopup-title": "Handlinger for svømmebane",
+ "swimlaneAddPopup-title": "Tilføj en svømmebane nedenfor",
+ "listImportCardPopup-title": "Importér et Trello-kort",
+ "listMorePopup-title": "Mere",
+ "link-list": "Link til denne liste",
+ "list-delete-pop": "Alle handlinger vil blive fjernet fra aktivitetsfeedet og du vil ikke have mulighed for at genskabe listen. Der er ingen måder at fortryde. ",
+ "list-delete-suggest-archive": "Du kan flytte en liste til arkivet for at fjerne det fra tavlen og bevare dets aktivitet.",
+ "lists": "Lister",
+ "swimlanes": "Svømmebaner",
+ "log-out": "Log ud",
+ "log-in": "Log ind",
+ "loginPopup-title": "Log ind",
+ "memberMenuPopup-title": "Medlemsindstillinger",
+ "members": "Medlemmer",
"menu": "Menu",
- "move-selection": "Move selection",
- "moveCardPopup-title": "Move Card",
- "moveCardToBottom-title": "Move to Bottom",
- "moveCardToTop-title": "Move to Top",
- "moveSelectionPopup-title": "Move selection",
- "multi-selection": "Multi-Selection",
- "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",
- "no-archived-cards": "No cards in Archive.",
- "no-archived-lists": "No lists in Archive.",
- "no-archived-swimlanes": "No swimlanes in Archive.",
- "no-results": "No results",
+ "move-selection": "Flyt valgte",
+ "moveCardPopup-title": "Flyt kort",
+ "moveCardToBottom-title": "Flyt til bunden",
+ "moveCardToTop-title": "Flyt til toppen",
+ "moveSelectionPopup-title": "Flyt valgte",
+ "multi-selection": "Multivalg",
+ "multi-selection-on": "Multivalg er slået til",
+ "muted": "Slukket",
+ "muted-info": "Du vil aldrig få notifikationer om ændringer i denne tavle",
+ "my-boards": "Mine tavler",
+ "name": "Navn",
+ "no-archived-cards": "Ingen kort i arkivet.",
+ "no-archived-lists": "Ingen lister i arkivet.",
+ "no-archived-swimlanes": "Ingen svømmebaner i arkivet.",
+ "no-results": "Ingen resultater",
"normal": "Normal",
- "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",
- "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",
- "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",
- "private-desc": "This board is private. Only people added to the board can view and edit it.",
- "profile": "Profile",
- "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.",
- "remove-cover": "Remove Cover",
- "remove-from-board": "Remove from Board",
- "remove-label": "Remove Label",
- "listDeletePopup-title": "Delete List ?",
- "remove-member": "Remove Member",
- "remove-member-from-card": "Remove from Card",
- "remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.",
- "removeMemberPopup-title": "Remove Member?",
- "rename": "Rename",
- "rename-board": "Rename Board",
- "restore": "Restore",
- "save": "Save",
- "search": "Search",
- "rules": "Rules",
- "search-cards": "Search from card/list titles, descriptions and custom fields 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",
- "setWipLimitPopup-title": "Set WIP Limit",
- "shortcut-assign-self": "Assign yourself to current card",
- "shortcut-autocomplete-emoji": "Autocomplete emoji",
- "shortcut-autocomplete-members": "Autocomplete members",
- "shortcut-clear-filters": "Clear all filters",
- "shortcut-close-dialog": "Close Dialog",
- "shortcut-filter-my-cards": "Filter my cards",
- "shortcut-show-shortcuts": "Bring up this shortcuts list",
- "shortcut-toggle-filterbar": "Toggle Filter Sidebar",
- "shortcut-toggle-sidebar": "Toggle Board Sidebar",
- "show-cards-minimum-count": "Show cards count if list contains more than",
- "sidebar-open": "Open Sidebar",
- "sidebar-close": "Close Sidebar",
- "signupPopup-title": "Create an Account",
- "star-board-title": "Click to star this board. It will show up at top of your boards list.",
- "starred-boards": "Starred Boards",
- "starred-boards-description": "Starred boards show up at the top of your boards list.",
- "subscribe": "Subscribe",
+ "normal-desc": "Du kan se og redigere kort. Indstillinger kan ikke ændres.",
+ "not-accepted-yet": "Invitation er endnu ikke accepteret",
+ "notify-participate": "Modtag opdateringer for alle kort du deltager i, som opretter eller medlem ",
+ "notify-watch": "Modtag opdateringer for alle tavler eller kort som du følger ",
+ "optional": "valgfri",
+ "or": "eller",
+ "page-maybe-private": "Denne side kan være privat. Du kan eventuelt se den ved at <a href='%s'>logge ind</a>.",
+ "page-not-found": "Siden blev ikke fundet.",
+ "password": "Kodeord",
+ "paste-or-dragdrop": "for at indsætte eller træk-og-slip billedfilen til den (kun billede)",
+ "participating": "Deltager",
+ "preview": "Forhåndsvisning",
+ "previewAttachedImagePopup-title": "Forhåndsvisning",
+ "previewClipboardImagePopup-title": "Forhåndsvisning",
+ "private": "Privat",
+ "private-desc": "Denne tavle er privat. Det er kun tilføjede personer som kan se og redigere den. ",
+ "profile": "Profil",
+ "public": "Offentlig",
+ "public-desc": "Denne tavle er offentlig. Den er synlig for alle med linket og vil blive vist i søgemaskiner som Google. Det er kun personer tilføjet til tavlen, der kan redigere. ",
+ "quick-access-description": "Stjernemarkér en tavle for at tilføje genvej i denne bjælke.",
+ "remove-cover": "Fjern omslag",
+ "remove-from-board": "Fjern fra tavle",
+ "remove-label": "Fjern etikette",
+ "listDeletePopup-title": "Slet liste?",
+ "remove-member": "Fjern medlem",
+ "remove-member-from-card": "Fjern fra kort",
+ "remove-member-pop": "Fjern __name__ (__username__) fra __boardTitle__? Medlemmet vil blive fjernetfra alle kort på denne tavle. De vil modtage en notifikation.",
+ "removeMemberPopup-title": "Fjern medlem?",
+ "rename": "Omdøb",
+ "rename-board": "Omdøb tavle",
+ "restore": "Genskab",
+ "save": "Gem",
+ "search": "Søg",
+ "rules": "Regler",
+ "search-cards": "Søg ud fra titler i kort/lister, beskrivelser og brugerdefinerede felter på denne tavle. ",
+ "search-example": "Tekst som der søges efter?",
+ "select-color": "Vælg farve",
+ "set-wip-limit-value": "Angiv en grænse for det maksimale antal opgaver i denne liste",
+ "setWipLimitPopup-title": "Angiv WIP-begrænsning",
+ "shortcut-assign-self": "Tilknyt dig selv til nuværende kort?",
+ "shortcut-autocomplete-emoji": "Auto-fuldfør emoji",
+ "shortcut-autocomplete-members": "Auto-fuldfør medlemmer",
+ "shortcut-clear-filters": "Ryd alle filtre",
+ "shortcut-close-dialog": "Luk dialogboks",
+ "shortcut-filter-my-cards": "Filtrer mine kort",
+ "shortcut-show-shortcuts": "Fremvis denne liste med genveje",
+ "shortcut-toggle-filterbar": "Slå filter-sidebjælke til/fra",
+ "shortcut-toggle-sidebar": "Slå tavle-sidebjælke til/fra",
+ "show-cards-minimum-count": "Vis antal kort når listen indeholder mere end",
+ "sidebar-open": "Åbn sidebjælke",
+ "sidebar-close": "Luk sidebjælke",
+ "signupPopup-title": "Opret en konto",
+ "star-board-title": "Klik for at stjernemarkere denne tavle. Den vil blive vist i toppen af din liste over tavler.",
+ "starred-boards": "Tavler med stjerner",
+ "starred-boards-description": "Tavler med stjerner vises i toppen af din liste over tavler.",
+ "subscribe": "Abonnér",
"team": "Team",
- "this-board": "this board",
- "this-card": "this card",
- "spent-time-hours": "Spent time (hours)",
- "overtime-hours": "Overtime (hours)",
- "overtime": "Overtime",
- "has-overtime-cards": "Has overtime cards",
- "has-spenttime-cards": "Has spent time cards",
- "time": "Time",
- "title": "Title",
- "tracking": "Tracking",
- "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+ "this-board": "denne tavle",
+ "this-card": "dette kort",
+ "spent-time-hours": "Anvendt tid (timer)",
+ "overtime-hours": "Overtid (timer)",
+ "overtime": "Overtid",
+ "has-overtime-cards": "Har kort med overtid",
+ "has-spenttime-cards": "Har kort med anvendt tid",
+ "time": "Tid",
+ "title": "Titel",
+ "tracking": "Sporing",
+ "tracking-info": "Du vil få notifikation om alle ændringer i kort som du har oprettet eller er medlem af.",
"type": "Type",
- "unassign-member": "Unassign member",
- "unsaved-description": "You have an unsaved description.",
- "unwatch": "Unwatch",
- "upload": "Upload",
- "upload-avatar": "Upload an avatar",
- "uploaded-avatar": "Uploaded an avatar",
- "username": "Username",
- "view-it": "View it",
- "warn-list-archived": "warning: this card is in an list at Archive",
- "watch": "Watch",
- "watching": "Watching",
- "watching-info": "You will be notified of any change in this board",
- "welcome-board": "Welcome Board",
- "welcome-swimlane": "Milestone 1",
- "welcome-list1": "Basics",
- "welcome-list2": "Advanced",
- "card-templates-swimlane": "Card Templates",
- "list-templates-swimlane": "List Templates",
- "board-templates-swimlane": "Board Templates",
- "what-to-do": "What do you want 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.",
- "admin-panel": "Admin Panel",
- "settings": "Settings",
- "people": "People",
- "registration": "Registration",
- "disable-self-registration": "Disable Self-Registration",
- "invite": "Invite",
- "invite-people": "Invite People",
- "to-boards": "To board(s)",
- "email-addresses": "Email Addresses",
- "smtp-host-description": "The address of the SMTP server that handles your emails.",
- "smtp-port-description": "The port your SMTP server uses for outgoing emails.",
- "smtp-tls-description": "Enable TLS support for SMTP server",
- "smtp-host": "SMTP Host",
- "smtp-port": "SMTP Port",
- "smtp-username": "Username",
- "smtp-password": "Password",
- "smtp-tls": "TLS support",
- "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-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",
- "Meteor_version": "Meteor version",
- "MongoDB_version": "MongoDB version",
- "MongoDB_storage_engine": "MongoDB storage engine",
- "MongoDB_Oplog_enabled": "MongoDB Oplog enabled",
- "OS_Arch": "OS Arch",
- "OS_Cpus": "OS CPU Count",
- "OS_Freemem": "OS Free Memory",
- "OS_Loadavg": "OS Load Average",
- "OS_Platform": "OS Platform",
- "OS_Release": "OS Release",
- "OS_Totalmem": "OS Total Memory",
- "OS_Type": "OS Type",
- "OS_Uptime": "OS Uptime",
- "days": "days",
- "hours": "hours",
- "minutes": "minutes",
- "seconds": "seconds",
- "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",
- "yes": "Yes",
- "no": "No",
- "accounts": "Accounts",
- "accounts-allowEmailChange": "Allow Email Change",
- "accounts-allowUserNameChange": "Allow Username Change",
- "createdAt": "Created at",
- "verified": "Verified",
- "active": "Active",
- "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",
- "card-settings": "Card Settings",
- "boardSubtaskSettingsPopup-title": "Board Subtasks Settings",
- "boardCardSettingsPopup-title": "Card Settings",
- "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",
- "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-add": "Add",
- "r-remove": "Remove",
- "r-label": "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-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-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",
+ "unassign-member": "Fjern medlemstilknytning",
+ "unsaved-description": "Du har en beskrivelse som ikke er gemt",
+ "unwatch": "Ophør med at følge",
+ "upload": "Overfør",
+ "upload-avatar": "Overfør en avatar",
+ "uploaded-avatar": "Overførte en avatar",
+ "username": "Brugernavn",
+ "view-it": "Vis den",
+ "warn-list-archived": "advarsel: dette kort er i en liste i arkivet",
+ "watch": "Følg",
+ "watching": "Følger",
+ "watching-info": "Du vil få notifikation om alle ændringer i denne tavle.",
+ "welcome-board": "Velkomsttavle",
+ "welcome-swimlane": "Milepæl 1",
+ "welcome-list1": "Grundlæggende",
+ "welcome-list2": "Avanceret",
+ "card-templates-swimlane": "Kortskabeloner",
+ "list-templates-swimlane": "Listeskabeloner",
+ "board-templates-swimlane": "Tavleskabeloner",
+ "what-to-do": "Hvad ønsker du at foretage dig?",
+ "wipLimitErrorPopup-title": "Ugyldig WIP-begrænsning",
+ "wipLimitErrorPopup-dialog-pt1": "Antallet af opgaver i denne liste er højere end WIP-begræsningen du har angivet.",
+ "wipLimitErrorPopup-dialog-pt2": "Flyt venligst nogle af opgaverne ud af listen, eller angiv en højere WIP-begrænsning.",
+ "admin-panel": "Admin-panel",
+ "settings": "Indstillinger",
+ "people": "Personer",
+ "registration": "Tilmelding",
+ "disable-self-registration": "Slå selv-tilmelding fra",
+ "invite": "Invitér",
+ "invite-people": "Invitér personer",
+ "to-boards": "Til tavle(r)",
+ "email-addresses": "E-mailadresser",
+ "smtp-host-description": "Adressen på SMTP-serveren som håndterer din e-mail.",
+ "smtp-port-description": "Den port som din SMTP-server benytter til udgående e-mail. ",
+ "smtp-tls-description": "Slå TLS-understøttelse til for SMTP-serveren",
+ "smtp-host": "SMTP-vært",
+ "smtp-port": "SMTP-port",
+ "smtp-username": "Brugernavn",
+ "smtp-password": "Kodeord",
+ "smtp-tls": "TLS-understøttelse",
+ "send-from": "Fra",
+ "send-smtp-test": "Send en e-mailtest til dig selv",
+ "invitation-code": "Invitationskode",
+ "email-invite-register-subject": "__inviter__ sendte dig en invitation",
+ "email-invite-register-text": "Kære __user__,\n\n__inviter__ inviterer dig til at samarbejde på kanbantavlen.\n\nFølg venligst linket nedenfor:\n__url__\n\nDin invitationskode er: __icode__\n\nTak.",
+ "email-smtp-test-subject": "SMTP for e-mailtest",
+ "email-smtp-test-text": "Afsendelse af e-mail blev udført ",
+ "error-invitation-code-not-exist": "Invitationskoden findes ikke",
+ "error-notAuthorized": "Du har ikke tilladelse til at se denne side.",
+ "webhook-title": "Navn på webhook",
+ "webhook-token": "Token (valgfri til godkendelse)",
+ "outgoing-webhooks": "Udgående webhooks",
+ "bidirectional-webhooks": "To-vejs webhooks",
+ "outgoingWebhooksPopup-title": "Udgående webhooks",
+ "boardCardTitlePopup-title": "Filter for korttitel",
+ "disable-webhook": "Slå denne webhook fra",
+ "global-webhook": "Globale webhooks",
+ "new-outgoing-webhook": "Ny udgående webhook",
+ "no-name": "(Ukendt)",
+ "Node_version": "Node-version",
+ "Meteor_version": "Meteor-version",
+ "MongoDB_version": "MongoDB-version",
+ "MongoDB_storage_engine": "Lagringsmotor for MongoDB",
+ "MongoDB_Oplog_enabled": "MongoDB Oplog er slået til",
+ "OS_Arch": "OS - Arch",
+ "OS_Cpus": "CPU-antal for OS",
+ "OS_Freemem": "Fri hukommelse for OS",
+ "OS_Loadavg": "Gns.belastning for OS",
+ "OS_Platform": "OS-platform",
+ "OS_Release": "OS-udgivelse",
+ "OS_Totalmem": "Samlet hukommelse for OS",
+ "OS_Type": "OS-type",
+ "OS_Uptime": "OS-oppetid",
+ "days": "dage",
+ "hours": "timer",
+ "minutes": "minutter",
+ "seconds": "sekunder",
+ "show-field-on-card": "Vis dette felt på kortet",
+ "automatically-field-on-card": "Auto-opret felter på alle kort",
+ "showLabel-field-on-card": "Vis feltetikette på minikort",
+ "yes": "Ja",
+ "no": "Nej",
+ "accounts": "Konti",
+ "accounts-allowEmailChange": "Tillad ændring af e-mail",
+ "accounts-allowUserNameChange": "Tillad ændring af brugernavn",
+ "createdAt": "Oprettet per",
+ "verified": "Verificeret",
+ "active": "Aktiv",
+ "card-received": "Modtaget",
+ "card-received-on": "Modtaget per",
+ "card-end": "Slut",
+ "card-end-on": "Slutter per",
+ "editCardReceivedDatePopup-title": "Tilpas modtagelsesdato",
+ "editCardEndDatePopup-title": "Tilpas slutdato",
+ "setCardColorPopup-title": "Angiv farve",
+ "setCardActionsColorPopup-title": "Vælg en farve",
+ "setSwimlaneColorPopup-title": "Vælg en farve",
+ "setListColorPopup-title": "Vælg en farve",
+ "assigned-by": "Tildelt af",
+ "requested-by": "Anmodet af",
+ "board-delete-notice": "Sletning er permanent. Du vil miste alle lister, kort og handlinger knyttet til denne tavle.",
+ "delete-board-confirm-popup": "Alle lister, kort, etiketter og aktiviteter vil blive slettet og du får ikke mulighed for at genskabe tavlens indhold. Dette kan ikke fortrydes.",
+ "boardDeletePopup-title": "Slet tavle?",
+ "delete-board": "Slet tavle",
+ "default-subtasks-board": "Delopgaver for tavlen __board__",
+ "default": "Standard",
+ "queue": "Kø",
+ "subtask-settings": "Indstillinger for delopgaver",
+ "card-settings": "Indstillinger for kort",
+ "boardSubtaskSettingsPopup-title": "Indstillinger for delopgaver i tavle",
+ "boardCardSettingsPopup-title": "Indstillinger for kort",
+ "deposit-subtasks-board": "Indsæt delopgaver på denne tavle: ",
+ "deposit-subtasks-list": "Liste som der landes på, når delopgaver indsættes her:",
+ "show-parent-in-minicard": "Vis overordnede i minikort:",
+ "prefix-with-full-path": "Præfiks med fuld sti",
+ "prefix-with-parent": "Præfiks med overordnede",
+ "subtext-with-full-path": "Undertekst med fuld sti",
+ "subtext-with-parent": "Undertekst med overordnede",
+ "change-card-parent": "Skift kortets overordnede",
+ "parent-card": "Overordnede kort",
+ "source-board": "Kilde for tavle",
+ "no-parent": "Vis ikke overordnede",
+ "activity-added-label": "tilføjede etiketten '%s' til %s",
+ "activity-removed-label": "tilføjede etiketten '%s' fra %s",
+ "activity-delete-attach": "slettede en vedhæftning fra %s",
+ "activity-added-label-card": "tilføjede etiketten '%s'",
+ "activity-removed-label-card": "fjernede etiketten '%s'",
+ "activity-delete-attach-card": "slettede en vedhæftning",
+ "activity-set-customfield": "angiv brugerdefineret felt '%s' til '%s' i %s",
+ "activity-unset-customfield": "fjernede brugerdefineret felt '%s' i %s",
+ "r-rule": "Regel",
+ "r-add-trigger": "Tilføj trigger-udløser",
+ "r-add-action": "Tilføj handling",
+ "r-board-rules": "Regler for tavle",
+ "r-add-rule": "Tilføj regel",
+ "r-view-rule": "Vis regel",
+ "r-delete-rule": "Slet regel",
+ "r-new-rule-name": "Ny titel for regel",
+ "r-no-rules": "Ingen regler",
+ "r-when-a-card": "Når et kort",
+ "r-is": "er",
+ "r-is-moved": "flyttes",
+ "r-added-to": "tilføjes til",
+ "r-removed-from": "Fjernes fra",
+ "r-the-board": "tavlen",
+ "r-list": "liste",
+ "set-filter": "Angiv filter",
+ "r-moved-to": "Flyttet til",
+ "r-moved-from": "Flyttet fra",
+ "r-archived": "Flyttet fra arkiv",
+ "r-unarchived": "Genskabt fra arkiv",
+ "r-a-card": "et kort",
+ "r-when-a-label-is": "Når en etikette er",
+ "r-when-the-label": "Når etiketten",
+ "r-list-name": "listenavn",
+ "r-when-a-member": "Når et medlem er",
+ "r-when-the-member": "Når medlemmet",
+ "r-name": "navn",
+ "r-when-a-attach": "Når en vedhæftning",
+ "r-when-a-checklist": "Når en tjekliste er",
+ "r-when-the-checklist": "Når tjeklisten",
+ "r-completed": "Fuldført",
+ "r-made-incomplete": "Gjort ukomplet",
+ "r-when-a-item": "Når et element i tjeklisten er",
+ "r-when-the-item": "Når elementet i tjeklisten",
+ "r-checked": "Markeret",
+ "r-unchecked": "Umarkeret",
+ "r-move-card-to": "Flyt kort til",
+ "r-top-of": "Toppen af",
+ "r-bottom-of": "Bunden af",
+ "r-its-list": "dens liste",
+ "r-archive": "Flyt til arkiv",
+ "r-unarchive": "Genskab fra arkiv",
+ "r-card": "kort",
+ "r-add": "Tilføj",
+ "r-remove": "Fjern",
+ "r-label": "etikette",
+ "r-member": "medlem",
+ "r-remove-all": "Fjern alle medlemmer fra kortet",
+ "r-set-color": "Angiv farven til",
+ "r-checklist": "tjekliste",
+ "r-check-all": "Markér alle",
+ "r-uncheck-all": "Fravælg alle",
+ "r-items-check": "elementer fra tjekliste",
+ "r-check": "Markér",
+ "r-uncheck": "Fravælg",
+ "r-item": "element",
+ "r-of-checklist": "fra tjekliste",
+ "r-send-email": "Send en e-mail",
+ "r-to": "til",
+ "r-subject": "emne",
+ "r-rule-details": "Detaljer for regel",
+ "r-d-move-to-top-gen": "Flyt kortet til toppen af dens liste",
+ "r-d-move-to-top-spec": "Flyt kortet til toppen af listen",
+ "r-d-move-to-bottom-gen": "Flyt kortet til bunden af dens liste",
+ "r-d-move-to-bottom-spec": "Flyt kortet til bunden af listen",
+ "r-d-send-email": "Send e-mail",
+ "r-d-send-email-to": "til",
+ "r-d-send-email-subject": "emne",
+ "r-d-send-email-message": "besked",
+ "r-d-archive": "Flyt kortet til arkiv",
+ "r-d-unarchive": "Genskab kort fra arkiv",
+ "r-d-add-label": "Tilføj etikette",
+ "r-d-remove-label": "Fjern etikette",
+ "r-create-card": "Opret nyt kort",
+ "r-in-list": "i liste",
+ "r-in-swimlane": "i svømmebane",
+ "r-d-add-member": "Tilføj medlem",
+ "r-d-remove-member": "Fjern medlem",
+ "r-d-remove-all-member": "Fjern alle medlemmer",
+ "r-d-check-all": "Markér alle elementer fra en liste",
+ "r-d-uncheck-all": "Fravælg alle elementer fra en liste",
+ "r-d-check-one": "Markér element",
+ "r-d-uncheck-one": "Fravælg element",
+ "r-d-check-of-list": "fra tjekliste",
+ "r-d-add-checklist": "Tilføj tjekliste",
+ "r-d-remove-checklist": "Fjern tjekliste",
+ "r-by": "af",
+ "r-add-checklist": "Tilføj tjekliste",
+ "r-with-items": "med elementer",
+ "r-items-list": "element1,element2,element3",
+ "r-add-swimlane": "Tilføj svømmebane",
+ "r-swimlane-name": "navn på svømmebane",
+ "r-board-note": "Bemærk: lad et felt stå tomt for at matche alle værdier.",
+ "r-checklist-note": "Bemærk: tjeklistens elementer skal skrives som en kommaadskilte værdier.",
+ "r-when-a-card-is-moved": "Når et kort flyttes til en anden liste.",
+ "r-set": "Angiv",
+ "r-update": "Opdatér",
+ "r-datefield": "datofelt",
"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-df-due-at": "forfalder",
+ "r-df-end-at": "slutter",
+ "r-df-received-at": "modtaget",
+ "r-to-current-datetime": "til nuværende dato/tidspunkt",
+ "r-remove-value-from": "Fjern værdi fra",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
- "authentication-method": "Authentication method",
- "authentication-type": "Authentication type",
- "custom-product-name": "Custom Product Name",
+ "authentication-method": "Godkendelsesmetode",
+ "authentication-type": "Godkendelsestype",
+ "custom-product-name": "Tilpasset produktnavn",
"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-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__] __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",
- "show-desktop-drag-handles": "Show desktop drag handles",
- "assignee": "Assignee",
- "cardAssigneesPopup-title": "Assignee",
- "addmore-detail": "Add a more detailed description",
- "show-on-card": "Show on Card",
- "new": "New",
- "editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User",
- "notifications": "Notifications",
- "view-all": "View All",
- "filter-by-unread": "Filter by Unread",
- "mark-all-as-read": "Mark all as read",
- "remove-all-read": "Remove all read",
- "allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "hide-logo": "Skjul logo",
+ "add-custom-html-after-body-start": "Tilføj tilpasset HTML efter <body> start",
+ "add-custom-html-before-body-end": "Tilføj tilpasset HTML før </body> slutning",
+ "error-undefined": "Noget gik galt",
+ "error-ldap-login": "Fejl under forsøg på login",
+ "display-authentication-method": "Vis godkendelsesmetode",
+ "default-authentication-method": "Standard for godkendelsesmetode",
+ "duplicate-board": "Duplikér tavle",
+ "people-number": "Antallet af personer er:",
+ "swimlaneDeletePopup-title": "Slet svømmebane?",
+ "swimlane-delete-pop": "Alle handlinger vil blive fjernet fra aktivitetsfeedet, og du vil ikke kunne genskabe svømmebanen. Dette kan ikke fortrydes.",
+ "restore-all": "Genskab alle",
+ "delete-all": "Slet alle",
+ "loading": "Indlæser, vent venligst",
+ "previous_as": "seneste tidspunkt var",
+ "act-a-dueAt": "ændrede forfaldstidspunkt til \nHvornår: __timeValue__\nHvor: __card__\n forrige forfaldstidspunkt var __timeOldValue__",
+ "act-a-endAt": "ændrede sluttidspunkt til __timeValue__ fra (__timeOldValue__)",
+ "act-a-startAt": "ændrede starttidspunkt til __timeValue__ fra (__timeOldValue__)",
+ "act-a-receivedAt": "ændrede modtagelsestidspunkt til __timeValue__ fra (__timeOldValue__)",
+ "a-dueAt": "ændrede forfaldstidspunkt til at være",
+ "a-endAt": "ændrede sluttidspunkt til at være",
+ "a-startAt": "ændrede starttidspunkt til at være",
+ "a-receivedAt": "ændrede modtagelsestidspunkt til at være",
+ "almostdue": "aktuelt forfaldstidspunkt %s nærmer sig",
+ "pastdue": "aktuelt forfaldstidspunkt %s er passeret",
+ "duenow": "aktuelt forfaldstidspunkt %s er i dag",
+ "act-newDue": "__list__/__card__ har 1. påmindelse om forfald [__board__]",
+ "act-withDue": "__list__/__card__ påmindelse om forfald [__board__]",
+ "act-almostdue": "påmindede om at aktuelt forfald (__timeValue__) for __card__ nærmer sig",
+ "act-pastdue": "påmindede om at aktuelt forfald (__timeValue__) of __card__ er passeret",
+ "act-duenow": "påmindede om at aktuelt forfald (__timeValue__) of __card__ er nu",
+ "act-atUserComment": "Du blev nævnt i [__board__] __list__/__card__",
+ "delete-user-confirm-popup": "Er du sikker på du vil slette denne konto? Det er ikke muligt at fortryde.",
+ "accounts-allowUserDelete": "Tillad brugere at slette deres egen konto",
+ "hide-minicard-label-text": "Skjul etiketteteksten for minikort",
+ "show-desktop-drag-handles": "Vis trække-håndtag for skrivebord",
+ "assignee": "Tildelt til",
+ "cardAssigneesPopup-title": "Tildelt til",
+ "addmore-detail": "Tilføj en mere detaljeret beskrivelse",
+ "show-on-card": "Vis på kort",
+ "new": "Ny",
+ "editUserPopup-title": "Redigér bruger",
+ "newUserPopup-title": "Ny bruger",
+ "notifications": "Notifikationer",
+ "view-all": "Vis alle",
+ "filter-by-unread": "Filtrér efter ulæst",
+ "mark-all-as-read": "Markér alle som læst",
+ "remove-all-read": "Fjern alle læste",
+ "allow-rename": "Tillad omdøb",
+ "allowRenamePopup-title": "Tillad omdøb",
+ "start-day-of-week": "Angiv dag for ugestart",
+ "monday": "Mandag",
+ "tuesday": "Tirsdag",
+ "wednesday": "Onsdag",
+ "thursday": "Torsdag",
+ "friday": "Fredag",
+ "saturday": "Lørdag",
+ "sunday": "Søndag"
}
diff --git a/i18n/de.i18n.json b/i18n/de.i18n.json
index d3537f77..0a674651 100644
--- a/i18n/de.i18n.json
+++ b/i18n/de.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Datum ändern",
"cardCustomFieldsPopup-title": "Benutzerdefinierte Felder editieren",
"cardStartVotingPopup-title": "Abstimmung starten",
+ "positiveVoteMembersPopup-title": "Befürworter",
+ "negativeVoteMembersPopup-title": "Gegner",
"vote-question": "Abstimmen über",
+ "vote-public": "Öffentliche Abstimmung",
"vote-for-it": "Dafür",
"vote-against": "Dagegen",
"cardDeletePopup-title": "Karte löschen?",
@@ -325,7 +328,7 @@
"filter-clear": "Filter entfernen",
"filter-no-label": "Kein Label",
"filter-no-member": "Kein Mitglied",
- "filter-no-assignee": "No assignee",
+ "filter-no-assignee": "Nicht zugewiesen",
"filter-no-custom-fields": "Keine benutzerdefinierten Felder",
"filter-show-archive": "Archivierte Listen anzeigen",
"filter-hide-empty": "Leere Listen verstecken",
@@ -345,8 +348,6 @@
"import-board-c": "Board importieren",
"import-board-title-trello": "Board von Trello importieren",
"import-board-title-wekan": "Board aus vorherigem Export importieren",
- "import-sandstorm-backup-warning": "Löschen Sie keine Daten, die Sie aus einem ursprünglich exportierten oder Trelloboard importieren, bevor Sie geprüft haben, ob alles funktioniert. Andernfalls kann es zu Datenverlust kommen, falls es zu einem \"Board nicht gefunden\"-Fehler kommt.",
- "import-sandstorm-warning": "Das importierte Board wird alle bereits existierenden Daten löschen und mit den importierten Daten überschreiben.",
"from-trello": "Von Trello",
"from-wekan": "Aus vorherigem Export",
"import-board-instruction-trello": "Gehen Sie in ihrem Trello-Board auf 'Menü', dann 'Mehr', 'Drucken und Exportieren', 'JSON-Export' und kopieren Sie den dort angezeigten Text",
@@ -769,9 +770,17 @@
"newUserPopup-title": "Neuer Benutzer",
"notifications": "Benachrichtigungen",
"view-all": "Alle anzeigen",
- "filter-by-unread": "Nach Ungelesenen filtern",
+ "filter-by-unread": "Nur ungelesene",
"mark-all-as-read": "Alle als gelesen markieren",
"remove-all-read": "Alle gelesenen entfernen",
"allow-rename": "Umbenennen erlauben",
- "allowRenamePopup-title": "Umbenennen erlauben"
+ "allowRenamePopup-title": "Umbenennen erlauben",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/el.i18n.json b/i18n/el.i18n.json
index ecda7dc3..2ff705a4 100644
--- a/i18n/el.i18n.json
+++ b/i18n/el.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Διαγραφή Κάρτας;",
@@ -345,8 +348,6 @@
"import-board-c": "Εισαγωγή πίνακα",
"import-board-title-trello": "Import board from 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": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "Από το Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/en-GB.i18n.json b/i18n/en-GB.i18n.json
index 2b171936..18a6b3fe 100644
--- a/i18n/en-GB.i18n.json
+++ b/i18n/en-GB.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Delete Card?",
@@ -345,8 +348,6 @@
"import-board-c": "Import board",
"import-board-title-trello": "Import board from 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": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "From Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json
index 68c7acae..864d60ce 100644
--- a/i18n/en.i18n.json
+++ b/i18n/en.i18n.json
@@ -348,8 +348,6 @@
"import-board-c": "Import board",
"import-board-title-trello": "Import board from 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": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "From Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
@@ -779,5 +777,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/eo.i18n.json b/i18n/eo.i18n.json
index d665a419..f218c1e4 100644
--- a/i18n/eo.i18n.json
+++ b/i18n/eo.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Delete Card?",
@@ -345,8 +348,6 @@
"import-board-c": "Import board",
"import-board-title-trello": "Import board from 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": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "From Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/es-AR.i18n.json b/i18n/es-AR.i18n.json
index 105cae2a..0485a6d7 100644
--- a/i18n/es-AR.i18n.json
+++ b/i18n/es-AR.i18n.json
@@ -1,8 +1,8 @@
{
"accept": "Aceptar",
"act-activity-notify": "Notificación de Actividad",
- "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-addAttachment": "agregado archivo adjunto __attachment__ a tarjeta __card__ en la lista __list__ en el swimlane __swimlane__ en el tablero __board__",
+ "act-deleteAttachment": "eliminado archivo adjunto __attachment__ de la tarjeta __card__ en la lista __list__ en el swimlane __swimlane__ en el tablero __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__",
@@ -73,8 +73,8 @@
"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-editComment": "comentario %s editado",
+ "activity-deleteComment": "comentario %s eliminado",
"add-attachment": "Agregar Adjunto",
"add-board": "Agregar Tablero",
"add-card": "Agregar Tarjeta",
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Cambiar fecha",
"cardCustomFieldsPopup-title": "Editar campos personalizados",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "¿Borrar Tarjeta?",
@@ -345,8 +348,6 @@
"import-board-c": "Importar tablero",
"import-board-title-trello": "Importar tablero de 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": "El tablero importado va a borrar todos los datos existentes en el tablero y reemplazarlos con los del tablero en cuestión.",
"from-trello": "De Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "En tu tablero de Trello, ve a 'Menú', luego a 'Más', 'Imprimir y Exportar', 'Exportar JSON', y copia el texto resultante.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/es.i18n.json b/i18n/es.i18n.json
index 6e47523e..722aef45 100644
--- a/i18n/es.i18n.json
+++ b/i18n/es.i18n.json
@@ -164,9 +164,12 @@
"cardCustomField-datePopup-title": "Cambiar la fecha",
"cardCustomFieldsPopup-title": "Editar los campos personalizados",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
- "vote-against": "against",
+ "vote-against": "contrarios",
"cardDeletePopup-title": "¿Eliminar la tarjeta?",
"cardDetailsActionsPopup-title": "Acciones de la tarjeta",
"cardLabelsPopup-title": "Etiquetas",
@@ -345,8 +348,6 @@
"import-board-c": "Importar un tablero",
"import-board-title-trello": "Importar un tablero desde Trello",
"import-board-title-wekan": "Importar tablero desde una exportación previa",
- "import-sandstorm-backup-warning": "No elimine los datos que está importando del tablero o Trello original antes de verificar que la semilla pueda cerrarse y abrirse nuevamente, o que ocurra un error de \"Tablero no encontrado\", de lo contrario perderá sus datos.",
- "import-sandstorm-warning": "El tablero importado eliminará todos los datos existentes en este tablero y los reemplazará con los datos del tablero importado.",
"from-trello": "Desde Trello",
"from-wekan": "Desde exportación previa",
"import-board-instruction-trello": "En tu tablero de Trello, ve a 'Menú', luego 'Más' > 'Imprimir y exportar' > 'Exportar JSON', y copia el texto resultante.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Marcar todo como leido",
"remove-all-read": "Remove all read",
"allow-rename": "Permitir renombrar",
- "allowRenamePopup-title": "Permitir renombrar"
+ "allowRenamePopup-title": "Permitir renombrar",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/eu.i18n.json b/i18n/eu.i18n.json
index 469b4692..8753bbd8 100644
--- a/i18n/eu.i18n.json
+++ b/i18n/eu.i18n.json
@@ -1,6 +1,6 @@
{
"accept": "Onartu",
- "act-activity-notify": "Activity Notification",
+ "act-activity-notify": "Jardueraren jakinarazpena",
"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__",
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Ezabatu txartela?",
@@ -345,8 +348,6 @@
"import-board-c": "Inportatu arbela",
"import-board-title-trello": "Inportatu arbela Trellotik",
"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": "Inportatutako arbelak oraingo arbeleko informazio guztia ezabatuko du eta inportatutako arbeleko informazioarekin ordeztu.",
"from-trello": "Trellotik",
"from-wekan": "From previous export",
"import-board-instruction-trello": "Zure Trello arbelean, aukeratu 'Menu\", 'More', 'Print and Export', 'Export JSON', eta kopiatu jasotako testua hemen.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/fa.i18n.json b/i18n/fa.i18n.json
index 5d27144b..92259816 100644
--- a/i18n/fa.i18n.json
+++ b/i18n/fa.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "چک نشده %s در چک لیست %s از %s",
"activity-checklist-added": "سیاهه به %s اضافه شد",
"activity-checklist-removed": "از چک لیست حذف گردید",
- "activity-checklist-completed": "completed checklist %s of %s",
+ "activity-checklist-completed": "چک‌لیست انجام شده %s از %s",
"activity-checklist-uncompleted": "تمام نشده ها در چک لیست %s از %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "حذف شده از چک لیست '%s' در %s",
@@ -152,8 +152,8 @@
"card-spent": "زمان صرف شده",
"card-edit-attachments": "ویرایش ضمائم",
"card-edit-custom-fields": "ویرایش فیلدهای شخصی",
- "card-start-voting": "Start voting",
- "card-cancel-voting": "Delete voting and all votes",
+ "card-start-voting": "شروع رای گیری",
+ "card-cancel-voting": "حذف رای گیری و همه آرا",
"card-edit-labels": "ویرایش برچسب",
"card-edit-members": "ویرایش اعضا",
"card-labels-title": "تغییر برچسب کارت",
@@ -163,8 +163,11 @@
"cardAttachmentsPopup-title": "ضمیمه از",
"cardCustomField-datePopup-title": "تغییر تاریخ",
"cardCustomFieldsPopup-title": "ویرایش فیلدهای شخصی",
- "cardStartVotingPopup-title": "Start a vote",
- "vote-question": "Voting question",
+ "cardStartVotingPopup-title": "شروع به رای",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
+ "vote-question": "سوال رای گیری",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "آیا می خواهید کارت را حذف کنید؟",
@@ -345,8 +348,6 @@
"import-board-c": "وارد کردن برد",
"import-board-title-trello": "وارد کردن برد از Trello",
"import-board-title-wekan": "بارگذاری برد ها از آخرین خروجی",
- "import-sandstorm-backup-warning": "قبل از بررسی این داده ها را از صفحه اصلی صادر شده یا Trello وارد نمیکنید این دانه دوباره باز می شود و یا دوباره باز می شود، یا برد را پیدا نمی کنید، این بدان معنی است که از دست دادن اطلاعات.",
- "import-sandstorm-warning": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "از Trello",
"from-wekan": "از آخرین خروجی",
"import-board-instruction-trello": "در Trello-ی خود به 'Menu'، 'More'، 'Print'، 'Export to JSON رفته و متن نهایی را دراینجا وارد نمایید.",
@@ -764,14 +765,22 @@
"cardAssigneesPopup-title": "Assignee",
"addmore-detail": "Add a more detailed description",
"show-on-card": "Show on Card",
- "new": "New",
- "editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User",
- "notifications": "Notifications",
- "view-all": "View All",
- "filter-by-unread": "Filter by Unread",
- "mark-all-as-read": "Mark all as read",
- "remove-all-read": "Remove all read",
+ "new": "جدید",
+ "editUserPopup-title": "ویرایش کاربر",
+ "newUserPopup-title": "کاربر جدید",
+ "notifications": "اعلان‌ها",
+ "view-all": "مشاهده همه",
+ "filter-by-unread": "فیلتر با خوانده نشده",
+ "mark-all-as-read": "علامت همه به خوانده شده",
+ "remove-all-read": "حذف همه خوانده شده",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/fi.i18n.json b/i18n/fi.i18n.json
index 2d210f14..dbbd8eb4 100644
--- a/i18n/fi.i18n.json
+++ b/i18n/fi.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Muokkaa päivää",
"cardCustomFieldsPopup-title": "Muokkaa mukautettuja kenttiä",
"cardStartVotingPopup-title": "Äänestä",
+ "positiveVoteMembersPopup-title": "Kannattajat",
+ "negativeVoteMembersPopup-title": "Vastustajat",
"vote-question": "Äänestys kysymys",
+ "vote-public": "Julkinen äänestys",
"vote-for-it": "puolesta",
"vote-against": "vastaan",
"cardDeletePopup-title": "Poista kortti?",
@@ -345,8 +348,6 @@
"import-board-c": "Tuo taulu",
"import-board-title-trello": "Tuo taulu Trellosta",
"import-board-title-wekan": "Tuo taulu edellisestä viennistä",
- "import-sandstorm-backup-warning": "Älä poista tietoja joita toit alkuperäisestä viennistä tai Trellosta ennen kuin tarkistat onnistuuko sulkea ja avata tämä jyvä uudelleen, vai näkyykö Board not found -virhe, joka tarkoittaa tietojen häviämistä.",
- "import-sandstorm-warning": "Tuotu taulu poistaa kaikki olemassa olevan taulun tiedot ja korvaa ne tuodulla taululla.",
"from-trello": "Trellosta",
"from-wekan": "Edellisestä viennistä",
"import-board-instruction-trello": "Mene Trello-taulullasi 'Menu', sitten 'More', 'Print and Export', 'Export JSON', ja kopioi tuloksena saamasi teksti",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Merkkaa kaikki luetuksi",
"remove-all-read": "Poista kaikki luetut",
"allow-rename": "Salli uudelleennimeäminen",
- "allowRenamePopup-title": "Salli uudelleennimeäminen"
+ "allowRenamePopup-title": "Salli uudelleennimeäminen",
+ "start-day-of-week": "Aseta viikon alkamispäivä",
+ "monday": "Maanantai",
+ "tuesday": "Tiistai",
+ "wednesday": "Keskiviikko",
+ "thursday": "Torstai",
+ "friday": "Perjantai",
+ "saturday": "Lauantai",
+ "sunday": "Sunnuntai"
}
diff --git a/i18n/fr.i18n.json b/i18n/fr.i18n.json
index 905308f0..24f7dfd6 100644
--- a/i18n/fr.i18n.json
+++ b/i18n/fr.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Modifier la date",
"cardCustomFieldsPopup-title": "Éditer les champs personnalisés",
"cardStartVotingPopup-title": "Commencer un vote",
+ "positiveVoteMembersPopup-title": "Pour",
+ "negativeVoteMembersPopup-title": "Contre",
"vote-question": "Question du vote",
+ "vote-public": "Vote public",
"vote-for-it": "pour",
"vote-against": "contre",
"cardDeletePopup-title": "Supprimer la carte ?",
@@ -345,8 +348,6 @@
"import-board-c": "Importer un tableau",
"import-board-title-trello": "Importer un tableau depuis Trello",
"import-board-title-wekan": "Importer un tableau depuis un export précédent",
- "import-sandstorm-backup-warning": "Ne supprimez pas les données que vous importez d'un tableau exporté d'origine ou de Trello avant de vérifier que la graine peut se fermer et s'ouvrir à nouveau ou qu'une erreur \"Tableau introuvable\" survient, sinon vous perdrez vos données.",
- "import-sandstorm-warning": "Le tableau importé supprimera toutes les données du tableau et les remplacera avec celles du tableau importé.",
"from-trello": "Depuis Trello",
"from-wekan": "Depuis un export précédent",
"import-board-instruction-trello": "Dans votre tableau Trello, allez sur 'Menu', puis sur 'Plus', 'Imprimer et exporter', 'Exporter en JSON' et copiez le texte du résultat",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Marquer comme lus",
"remove-all-read": "Supprimer les lus",
"allow-rename": "Autoriser le renommage",
- "allowRenamePopup-title": "Autoriser le renommage"
+ "allowRenamePopup-title": "Autoriser le renommage",
+ "start-day-of-week": "Définir le jour de début de semaine",
+ "monday": "Lundi",
+ "tuesday": "Mardi",
+ "wednesday": "Mercredi",
+ "thursday": "Jeudi",
+ "friday": "Vendredi",
+ "saturday": "Samedi",
+ "sunday": "Dimanche"
}
diff --git a/i18n/gl.i18n.json b/i18n/gl.i18n.json
index bd7db55c..192d3609 100644
--- a/i18n/gl.i18n.json
+++ b/i18n/gl.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Delete Card?",
@@ -345,8 +348,6 @@
"import-board-c": "Importar taboleiro",
"import-board-title-trello": "Importar taboleiro de 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": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "De Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/he.i18n.json b/i18n/he.i18n.json
index 5a332086..9e6c866c 100644
--- a/i18n/he.i18n.json
+++ b/i18n/he.i18n.json
@@ -152,7 +152,7 @@
"card-spent": "זמן שהושקע",
"card-edit-attachments": "עריכת קבצים מצורפים",
"card-edit-custom-fields": "עריכת שדות בהתאמה אישית",
- "card-start-voting": "התחילו להצביע",
+ "card-start-voting": "ניתן להצביע",
"card-cancel-voting": "מחיקת אפשרות ההצבעה ואת כל הקולות",
"card-edit-labels": "עריכת תוויות",
"card-edit-members": "עריכת חברים",
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "החלפת תאריך",
"cardCustomFieldsPopup-title": "עריכת שדות בהתאמה אישית",
"cardStartVotingPopup-title": "התחלת הצבעה",
+ "positiveVoteMembersPopup-title": "תומכים",
+ "negativeVoteMembersPopup-title": "יריבים",
"vote-question": "שאלת הסקר",
+ "vote-public": "הצבעה ציבורית",
"vote-for-it": "בעד",
"vote-against": "נגד",
"cardDeletePopup-title": "למחוק כרטיס?",
@@ -345,8 +348,6 @@
"import-board-c": "יבוא לוח",
"import-board-title-trello": "ייבוא לוח מטרלו",
"import-board-title-wekan": "ייבוא לוח מייצוא קודם",
- "import-sandstorm-backup-warning": "עדיף לא למחוק נתונים שייובאו מייצוא מקורי או מ־Trello בטרם בדיקה האם הגרעין הזה נסגר ונפתח שוב או אם מתקבלת שגיאה על כך שהלוח לא נמצא, משמעות הדבר היא אבדן מידע.",
- "import-sandstorm-warning": "הלוח שייובא ימחק את כל הנתונים הקיימים בלוח ויחליף אותם בלוח שייובא.",
"from-trello": "מ־Trello",
"from-wekan": "מייצוא קודם",
"import-board-instruction-trello": "בלוח הטרלו שלך, עליך ללחוץ על ‚תפריט‘, ואז על ‚עוד‘, ‚הדפסה וייצוא‘, ‚יצוא JSON‘ ולהעתיק את הטקסט שנוצר.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "לסמן הכול כאילו שנקראו",
"remove-all-read": "הסרת כל אלו שנקראו",
"allow-rename": "לאפשר שינוי שם",
- "allowRenamePopup-title": "לאפשר שינוי שם"
+ "allowRenamePopup-title": "לאפשר שינוי שם",
+ "start-day-of-week": "הגדרת יום תחילת השבוע",
+ "monday": "יום שני",
+ "tuesday": "יום שלישי",
+ "wednesday": "יום רביעי",
+ "thursday": "יום חמישי",
+ "friday": "יום שישי",
+ "saturday": "שבת",
+ "sunday": "יום ראשון"
}
diff --git a/i18n/hi.i18n.json b/i18n/hi.i18n.json
index b1e18bac..13010c04 100644
--- a/i18n/hi.i18n.json
+++ b/i18n/hi.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "तारीख बदलें",
"cardCustomFieldsPopup-title": "संपादित करें प्रचलन क्षेत्र",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "मिटाएँ कार्ड?",
@@ -345,8 +348,6 @@
"import-board-c": "Import बोर्ड",
"import-board-title-trello": "Import बोर्ड से 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": "सूचित कर बोर्ड will मिटाएँ संपूर्ण existing data on बोर्ड और replace it साथ में सूचित कर बोर्ड.",
"from-trello": "From Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello बोर्ड, go तक 'Menu', then 'More', 'Print और Export', 'Export JSON', और copy the resulting text.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/hu.i18n.json b/i18n/hu.i18n.json
index 7584e861..36e217af 100644
--- a/i18n/hu.i18n.json
+++ b/i18n/hu.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Dátum megváltoztatása",
"cardCustomFieldsPopup-title": "Egyéni mezők szerkesztése",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Törli a kártyát?",
@@ -345,8 +348,6 @@
"import-board-c": "Tábla importálása",
"import-board-title-trello": "Tábla importálása a Trello oldalról",
"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": "Az importált tábla törölni fogja a táblán lévő összes meglévő adatot, és kicseréli az importált táblával.",
"from-trello": "A Trello oldalról",
"from-wekan": "From previous export",
"import-board-instruction-trello": "A Trello tábláján menjen a „Menü”, majd a „Több”, „Nyomtatás és exportálás”, „JSON exportálása” menüpontokra, és másolja ki az eredményül kapott szöveget.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/hy.i18n.json b/i18n/hy.i18n.json
index 62a05875..75e1df8b 100644
--- a/i18n/hy.i18n.json
+++ b/i18n/hy.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Delete Card?",
@@ -345,8 +348,6 @@
"import-board-c": "Import board",
"import-board-title-trello": "Import board from 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": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "From Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/id.i18n.json b/i18n/id.i18n.json
index d7ae48a2..7ffe160a 100644
--- a/i18n/id.i18n.json
+++ b/i18n/id.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Hapus kartu",
@@ -345,8 +348,6 @@
"import-board-c": "Import board",
"import-board-title-trello": "Impor panel dari 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": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "From Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "Di panel Trello anda, ke 'Menu', terus 'More', 'Print and Export','Export JSON', dan salin hasilnya",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/ig.i18n.json b/i18n/ig.i18n.json
index 14fc63cd..9c4b790f 100644
--- a/i18n/ig.i18n.json
+++ b/i18n/ig.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Delete Card?",
@@ -345,8 +348,6 @@
"import-board-c": "Import board",
"import-board-title-trello": "Import board from 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": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "From Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/it.i18n.json b/i18n/it.i18n.json
index 921fd36d..b34afa82 100644
--- a/i18n/it.i18n.json
+++ b/i18n/it.i18n.json
@@ -152,8 +152,8 @@
"card-spent": "Tempo trascorso",
"card-edit-attachments": "Modifica allegati",
"card-edit-custom-fields": "Modifica campo personalizzato",
- "card-start-voting": "Start voting",
- "card-cancel-voting": "Delete voting and all votes",
+ "card-start-voting": "Inizia a votare",
+ "card-cancel-voting": "Cancella votazione e tutti i voti",
"card-edit-labels": "Modifica etichette",
"card-edit-members": "Modifica membri",
"card-labels-title": "Cambia le etichette per questa scheda.",
@@ -163,10 +163,13 @@
"cardAttachmentsPopup-title": "Allega da",
"cardCustomField-datePopup-title": "Cambia data",
"cardCustomFieldsPopup-title": "Modifica campo personalizzato",
- "cardStartVotingPopup-title": "Start a vote",
- "vote-question": "Voting question",
- "vote-for-it": "for it",
- "vote-against": "against",
+ "cardStartVotingPopup-title": "Inizia una votazione",
+ "positiveVoteMembersPopup-title": "Favorevoli",
+ "negativeVoteMembersPopup-title": "Contrari",
+ "vote-question": "Domanda di votazione",
+ "vote-public": "Voto pubblico",
+ "vote-for-it": "a favore",
+ "vote-against": "contro",
"cardDeletePopup-title": "Elimina scheda?",
"cardDetailsActionsPopup-title": "Azioni scheda",
"cardLabelsPopup-title": "Etichette",
@@ -325,7 +328,7 @@
"filter-clear": "Pulisci filtri",
"filter-no-label": "Nessuna etichetta",
"filter-no-member": "Nessun membro",
- "filter-no-assignee": "No assignee",
+ "filter-no-assignee": "Nessun assegnatario",
"filter-no-custom-fields": "Nessun campo personalizzato",
"filter-show-archive": "Mostra le liste archiviate",
"filter-hide-empty": "Nascondi liste vuote",
@@ -345,8 +348,6 @@
"import-board-c": "Importa bacheca",
"import-board-title-trello": "Importa una bacheca da Trello",
"import-board-title-wekan": "Importa bacheca dall'esportazione precedente",
- "import-sandstorm-backup-warning": "Non cancellare i dati che importi dalla bacheca esportata in origine o da Trello prima che il controllo finisca e si riapra ancora, altrimenti otterrai un messaggio di errore Bacheca non trovata, che significa che i dati sono perduti.",
- "import-sandstorm-warning": "La bacheca importata cancellerà tutti i dati esistenti su questa bacheca e li rimpiazzerà con quelli della bacheca importata.",
"from-trello": "Da Trello",
"from-wekan": "Dall'esportazione precedente",
"import-board-instruction-trello": "Nella tua bacheca Trello vai a 'Menu', poi 'Altro', 'Stampa ed esporta', 'Esporta JSON', e copia il testo che compare.",
@@ -771,7 +772,15 @@
"view-all": "Mostra Tutto",
"filter-by-unread": "Filtra per non letto",
"mark-all-as-read": "Segna come letto",
- "remove-all-read": "Remove all read",
+ "remove-all-read": "Rimuovi tutti i già letti",
"allow-rename": "Consenti Rinomina",
- "allowRenamePopup-title": "Consenti Rinomina"
+ "allowRenamePopup-title": "Consenti Rinomina",
+ "start-day-of-week": "Imposta l'inizio del giorno della settimana",
+ "monday": "Lunedi",
+ "tuesday": "Martedi",
+ "wednesday": "Mercoledi",
+ "thursday": "Giovedi",
+ "friday": "Venerdi",
+ "saturday": "Sabato",
+ "sunday": "Domenica"
}
diff --git a/i18n/ja.i18n.json b/i18n/ja.i18n.json
index 7b12f472..54e07819 100644
--- a/i18n/ja.i18n.json
+++ b/i18n/ja.i18n.json
@@ -152,8 +152,8 @@
"card-spent": "作業時間",
"card-edit-attachments": "添付ファイルの編集",
"card-edit-custom-fields": "カスタムフィールドの編集",
- "card-start-voting": "Start voting",
- "card-cancel-voting": "Delete voting and all votes",
+ "card-start-voting": "投票を開始",
+ "card-cancel-voting": "投票と全ての結果を削除",
"card-edit-labels": "ラベルの編集",
"card-edit-members": "メンバーの編集",
"card-labels-title": "カードのラベルを変更する",
@@ -163,10 +163,13 @@
"cardAttachmentsPopup-title": "添付元",
"cardCustomField-datePopup-title": "日時変更",
"cardCustomFieldsPopup-title": "カスタムフィールドの編集",
- "cardStartVotingPopup-title": "Start a vote",
- "vote-question": "Voting question",
- "vote-for-it": "for it",
- "vote-against": "against",
+ "cardStartVotingPopup-title": "投票を開始",
+ "positiveVoteMembersPopup-title": "支持者",
+ "negativeVoteMembersPopup-title": "反対者",
+ "vote-question": "投票の質問事項",
+ "vote-public": "投票を公開",
+ "vote-for-it": "賛成",
+ "vote-against": "反対",
"cardDeletePopup-title": "カードを削除しますか?",
"cardDetailsActionsPopup-title": "カード操作",
"cardLabelsPopup-title": "ラベル",
@@ -325,7 +328,7 @@
"filter-clear": "フィルターの解除",
"filter-no-label": "ラベルなし",
"filter-no-member": "メンバーなし",
- "filter-no-assignee": "No assignee",
+ "filter-no-assignee": "担当者なし",
"filter-no-custom-fields": "カスタムフィールドなし",
"filter-show-archive": "アーカイブされたリストを表示",
"filter-hide-empty": "空のリストを隠す",
@@ -345,8 +348,6 @@
"import-board-c": "ボードをインポート",
"import-board-title-trello": "Trelloからボードをインポート",
"import-board-title-wekan": "以前のエクスポートからボードをインポート",
- "import-sandstorm-backup-warning": "この操作が完了して再度開くことができるのを確認するまでインポート元のボードまたはTrelloのデータを削除しないでください。「ボードが見つかりません」が表示された場合、データが失われたことを意味します。",
- "import-sandstorm-warning": "ボードのインポートは、既存ボードのすべてのデータを置き換えます。",
"from-trello": "Trelloから",
"from-wekan": "以前のエクスポートから",
"import-board-instruction-trello": "Trelloボードの、 'Menu' → 'More' → 'Print and Export' → 'Export JSON'を選択し、テキストをコピーしてください。",
@@ -447,7 +448,7 @@
"save": "保存",
"search": "検索",
"rules": "ルール",
- "search-cards": "Search from card/list titles, descriptions and custom fields on this board",
+ "search-cards": "このボード上のカード/リストタイトル、詳細、カスタムフィールドから検索",
"search-example": "検索文字",
"select-color": "色を選択",
"set-wip-limit-value": "このリスト中のタスクの最大数を設定",
@@ -771,7 +772,15 @@
"view-all": "全てを表示",
"filter-by-unread": "未読でフィルタ",
"mark-all-as-read": "全て既読にする",
- "remove-all-read": "Remove all read",
+ "remove-all-read": "全ての既読を削除",
"allow-rename": "リネームを許可する",
- "allowRenamePopup-title": "リネームを許可する"
+ "allowRenamePopup-title": "リネームを許可する",
+ "start-day-of-week": "週の始まりを設定",
+ "monday": "月曜",
+ "tuesday": "火曜",
+ "wednesday": "水曜",
+ "thursday": "木曜",
+ "friday": "金曜",
+ "saturday": "土曜",
+ "sunday": "日曜"
}
diff --git a/i18n/ka.i18n.json b/i18n/ka.i18n.json
index 18bc006a..40a71568 100644
--- a/i18n/ka.i18n.json
+++ b/i18n/ka.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "დროის ცვლილება",
"cardCustomFieldsPopup-title": "მომხმარებლის ველის შესწორება",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "წავშალოთ ბარათი? ",
@@ -345,8 +348,6 @@
"import-board-c": "დაფის იმპორტი",
"import-board-title-trello": "დაფის იმპორტი 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": "იმპორტირებული დაფა წაშლის ყველა არსებულ მონაცემს დაფაზე და შეანაცვლებს მას იმპორტირებული დაფა. ",
"from-trello": "Trello-დან",
"from-wekan": "From previous export",
"import-board-instruction-trello": "თქვენს Trello დაფაზე, შედით \"მენიუ\"-ში, შემდეგ დააკლიკეთ \"მეტი\", \"ამოპრინტერება და ექსპორტი\", \"JSON-ის ექსპორტი\" და დააკოპირეთ შედეგი. ",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/km.i18n.json b/i18n/km.i18n.json
index 364e9bfd..e66d0f61 100644
--- a/i18n/km.i18n.json
+++ b/i18n/km.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Delete Card?",
@@ -345,8 +348,6 @@
"import-board-c": "Import board",
"import-board-title-trello": "Import board from 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": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "From Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/ko.i18n.json b/i18n/ko.i18n.json
index 51ba3420..ba04d6c0 100644
--- a/i18n/ko.i18n.json
+++ b/i18n/ko.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "카드를 삭제합니까?",
@@ -345,8 +348,6 @@
"import-board-c": "보드 가져오기",
"import-board-title-trello": "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": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "From Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "Trello 게시판에서 'Menu' -> 'More' -> 'Print and Export', 'Export JSON' 선택하여 텍스트 결과값 복사",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/lv.i18n.json b/i18n/lv.i18n.json
index 1cc06023..0cd5d581 100644
--- a/i18n/lv.i18n.json
+++ b/i18n/lv.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Delete Card?",
@@ -345,8 +348,6 @@
"import-board-c": "Import board",
"import-board-title-trello": "Import board from 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": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "From Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/mk.i18n.json b/i18n/mk.i18n.json
index 2e053004..b4bd4abc 100644
--- a/i18n/mk.i18n.json
+++ b/i18n/mk.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Промени датата",
"cardCustomFieldsPopup-title": "Промени собствените полета",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Желаете да изтриете картата?",
@@ -345,8 +348,6 @@
"import-board-c": "Импортирай Табло",
"import-board-title-trello": "Импорт на табло от 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": "Импортирането ще изтрие всичката налична информация в таблото и ще я замени с нова.",
"from-trello": "От Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/mn.i18n.json b/i18n/mn.i18n.json
index c16ae1f5..92146847 100644
--- a/i18n/mn.i18n.json
+++ b/i18n/mn.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Delete Card?",
@@ -345,8 +348,6 @@
"import-board-c": "Import board",
"import-board-title-trello": "Import board from 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": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "From Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/nb.i18n.json b/i18n/nb.i18n.json
index ac961e28..d10a148d 100644
--- a/i18n/nb.i18n.json
+++ b/i18n/nb.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Slett kort?",
@@ -345,8 +348,6 @@
"import-board-c": "Import board",
"import-board-title-trello": "Import board from 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": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "From Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/nl.i18n.json b/i18n/nl.i18n.json
index b5e22f81..9b9ad584 100644
--- a/i18n/nl.i18n.json
+++ b/i18n/nl.i18n.json
@@ -152,8 +152,8 @@
"card-spent": "Gespendeerde tijd",
"card-edit-attachments": "Wijzig bijlagen",
"card-edit-custom-fields": "Wijzig maatwerkvelden",
- "card-start-voting": "Start voting",
- "card-cancel-voting": "Delete voting and all votes",
+ "card-start-voting": "Start stemming",
+ "card-cancel-voting": "Verwijder stemming en verwijder stemmen",
"card-edit-labels": "Wijzig labels",
"card-edit-members": "Wijzig leden",
"card-labels-title": "Wijzig de labels van de kaart.",
@@ -163,10 +163,13 @@
"cardAttachmentsPopup-title": "Voeg bestand toe vanuit",
"cardCustomField-datePopup-title": "Wijzigingsdatum",
"cardCustomFieldsPopup-title": "Wijzig maatwerkvelden",
- "cardStartVotingPopup-title": "Start a vote",
- "vote-question": "Voting question",
- "vote-for-it": "for it",
- "vote-against": "against",
+ "cardStartVotingPopup-title": "Start een stemming",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
+ "vote-question": "Stemvraag",
+ "vote-public": "Public vote",
+ "vote-for-it": "Voor",
+ "vote-against": "tegen",
"cardDeletePopup-title": "Kaart verwijderen?",
"cardDetailsActionsPopup-title": "Kaart actie ondernemen",
"cardLabelsPopup-title": "Labels",
@@ -325,7 +328,7 @@
"filter-clear": "Wis filter",
"filter-no-label": "Geen label",
"filter-no-member": "Geen lid",
- "filter-no-assignee": "No assignee",
+ "filter-no-assignee": "Niemand toegewezen",
"filter-no-custom-fields": "Geen maatwerkvelden",
"filter-show-archive": "Toon gearchiveerde lijsten",
"filter-hide-empty": "Verberg lege lijsten",
@@ -345,8 +348,6 @@
"import-board-c": "Importeer bord",
"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.",
@@ -771,7 +772,15 @@
"view-all": "Bekijk alles",
"filter-by-unread": "Filter op Ongelezen",
"mark-all-as-read": "Markeer alles als gelezen",
- "remove-all-read": "Remove all read",
+ "remove-all-read": "verwijder alle gelezen",
"allow-rename": "Sta Hernoemen toe",
- "allowRenamePopup-title": "Sta Hernoemen toe"
+ "allowRenamePopup-title": "Sta Hernoemen toe",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/oc.i18n.json b/i18n/oc.i18n.json
index 81971fe1..e5746cd4 100644
--- a/i18n/oc.i18n.json
+++ b/i18n/oc.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Cambiar la data",
"cardCustomFieldsPopup-title": "Cambiar los camps personalizats",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Suprimir la carta?",
@@ -345,8 +348,6 @@
"import-board-c": "Importar un tablèu",
"import-board-title-trello": "Importar un tablèu dempuèi Trello",
"import-board-title-wekan": "Importar un tablèu dempuèi un export passat",
- "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": "Importar lo tablèu va quitar totes las donadas del tablèu e lo va remplaçar amb las donadas del tablèu importat.",
"from-trello": "Dempuèi Trello",
"from-wekan": "Dempuèi un export passat",
"import-board-instruction-trello": "Dins vòstre tablèu Trello, vos cal anar dins \"Menut\", puèi \"Mai\", \"Export\", \"Export JSON\", e copiar lo tèxte balhat.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/pl.i18n.json b/i18n/pl.i18n.json
index 0f4e66ec..ae3faf4b 100644
--- a/i18n/pl.i18n.json
+++ b/i18n/pl.i18n.json
@@ -152,8 +152,8 @@
"card-spent": "Spędzony czas",
"card-edit-attachments": "Edytuj załączniki",
"card-edit-custom-fields": "Edytuj niestandardowe pola",
- "card-start-voting": "Start voting",
- "card-cancel-voting": "Delete voting and all votes",
+ "card-start-voting": "Rozpocznij głosowanie",
+ "card-cancel-voting": "Usuń głosowanie i wszystkie głosy",
"card-edit-labels": "Edytuj etykiety",
"card-edit-members": "Edytuj członków",
"card-labels-title": "Zmień etykiety karty",
@@ -163,10 +163,13 @@
"cardAttachmentsPopup-title": "Dodaj załącznik z",
"cardCustomField-datePopup-title": "Zmień datę",
"cardCustomFieldsPopup-title": "Edytuj niestandardowe pola",
- "cardStartVotingPopup-title": "Start a vote",
- "vote-question": "Voting question",
- "vote-for-it": "for it",
- "vote-against": "against",
+ "cardStartVotingPopup-title": "Zacznij głosowanie",
+ "positiveVoteMembersPopup-title": "Zwolennicy",
+ "negativeVoteMembersPopup-title": "Przeciwnicy",
+ "vote-question": "Pytanie do głosowania",
+ "vote-public": "Głosowanie publiczne",
+ "vote-for-it": "za",
+ "vote-against": "przeciwko",
"cardDeletePopup-title": "Usunąć kartę?",
"cardDetailsActionsPopup-title": "Czynności kart",
"cardLabelsPopup-title": "Etykiety",
@@ -325,7 +328,7 @@
"filter-clear": "Usuń filter",
"filter-no-label": "Brak etykiety",
"filter-no-member": "Brak członków",
- "filter-no-assignee": "No assignee",
+ "filter-no-assignee": "Nieprzypisane ",
"filter-no-custom-fields": "Brak niestandardowych pól",
"filter-show-archive": "Pokaż zarchiwizowane listy",
"filter-hide-empty": "Ukryj puste listy",
@@ -345,8 +348,6 @@
"import-board-c": "Import tablicy",
"import-board-title-trello": "Importuj tablicę z Trello",
"import-board-title-wekan": "Importuj tablicę z poprzedniego eksportu",
- "import-sandstorm-backup-warning": "Nie usuwaj danych, które importujesz ze źródłowej tablicy lub Trello zanim upewnisz się, że wszystko zostało prawidłowo przeniesione przy czym brane jest pod uwagę ponowne uruchomienie strony, ponieważ w przypadku błędu braku tablicy stracisz dane.",
- "import-sandstorm-warning": "Zaimportowana tablica usunie wszystkie istniejące dane na aktualnej tablicy oraz zastąpi ją danymi z tej importowanej.",
"from-trello": "Z Trello",
"from-wekan": "Z poprzedniego eksportu",
"import-board-instruction-trello": "W twojej tablicy na Trello przejdź do 'Menu', następnie 'Więcej', 'Drukuj i eksportuj', 'Eksportuj jako JSON' i skopiuj wynik",
@@ -447,7 +448,7 @@
"save": "Zapisz",
"search": "Wyszukaj",
"rules": "Reguły",
- "search-cards": "Search from card/list titles, descriptions and custom fields on this board",
+ "search-cards": "Szukaj w tytułach kart/list oraz opisach i niestandardowych polach na tej tablicy",
"search-example": "Czego mam szukać?",
"select-color": "Wybierz kolor",
"set-wip-limit-value": "Ustaw maksymalny limit zadań na tej liście",
@@ -771,7 +772,15 @@
"view-all": "Wyświetl wszystko",
"filter-by-unread": "Filtruj nieprzeczytane",
"mark-all-as-read": "Zaznacz wszystkie jako przeczytane",
- "remove-all-read": "Remove all read",
+ "remove-all-read": "Usuń wszystkie przeczytane",
"allow-rename": "Zezwól na zmianę nazwy",
- "allowRenamePopup-title": "Zezwól na zmianę nazwy"
+ "allowRenamePopup-title": "Zezwól na zmianę nazwy",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/pt-BR.i18n.json b/i18n/pt-BR.i18n.json
index 01586cdb..441cae56 100644
--- a/i18n/pt-BR.i18n.json
+++ b/i18n/pt-BR.i18n.json
@@ -163,8 +163,11 @@
"cardAttachmentsPopup-title": "Anexar a partir de",
"cardCustomField-datePopup-title": "Mudar data",
"cardCustomFieldsPopup-title": "Editar campos customizados",
- "cardStartVotingPopup-title": "Iniciar um voto",
+ "cardStartVotingPopup-title": "Iniciar uma votação",
+ "positiveVoteMembersPopup-title": "Proponentes",
+ "negativeVoteMembersPopup-title": "Oponentes",
"vote-question": "Questão em votação",
+ "vote-public": "Votação pública",
"vote-for-it": "a favor",
"vote-against": "contra",
"cardDeletePopup-title": "Excluir Cartão?",
@@ -345,8 +348,6 @@
"import-board-c": "Importar quadro",
"import-board-title-trello": "Importar quadro do Trello",
"import-board-title-wekan": "Importar quadro a partir de exportação prévia",
- "import-sandstorm-backup-warning": "Não exclua os dados importados do quadro original exportado ou do Trello antes de verificar se esse item fecha e abre novamente, ou se você receber o erro Quadro não encontrado, que significa perda de dados.",
- "import-sandstorm-warning": "O quadro importado irá excluir todos os dados existentes no quadro e irá sobrescrever com o quadro importado.",
"from-trello": "Do Trello",
"from-wekan": "A partir de exportação prévia",
"import-board-instruction-trello": "No seu quadro do Trello, vá em 'Menu', depois em 'Mais', 'Imprimir e Exportar', 'Exportar JSON', então copie o texto emitido",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Marcar todas como lidas",
"remove-all-read": "Remover todas lidas",
"allow-rename": "Permitir renomear",
- "allowRenamePopup-title": "Permitir renomear"
+ "allowRenamePopup-title": "Permitir renomear",
+ "start-day-of-week": "Definir dia em que a semana começa",
+ "monday": "Segunda",
+ "tuesday": "Terça",
+ "wednesday": "Quarta",
+ "thursday": "Quinta",
+ "friday": "Sexta",
+ "saturday": "Sábado",
+ "sunday": "Domingo"
}
diff --git a/i18n/pt.i18n.json b/i18n/pt.i18n.json
index 2323c79b..563f86ef 100644
--- a/i18n/pt.i18n.json
+++ b/i18n/pt.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Alterar a data",
"cardCustomFieldsPopup-title": "Editar campos personalizados",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Apagar Cartão?",
@@ -345,8 +348,6 @@
"import-board-c": "Importar quadro",
"import-board-title-trello": "Importar quadro do Trello",
"import-board-title-wekan": "Importar quadro a partir de exportação prévia",
- "import-sandstorm-backup-warning": "Não apague os dados importados do quadro original exportado ou do Trello antes de verificar se esse item fecha e abre novamente, ou se receber o erro Quadro não encontrado, que significa perda de dados.",
- "import-sandstorm-warning": "O quadro importado irá apagar todos os dados existentes no quadro e irá sobrescrever com o quadro importado.",
"from-trello": "Do Trello",
"from-wekan": "A partir de exportação prévia",
"import-board-instruction-trello": "No seu quadro do Trello, vá em 'Menu', depois em 'Mais', 'Imprimir e Exportar', 'Exportar JSON', e copie o texto resultante.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/ro.i18n.json b/i18n/ro.i18n.json
index 090be43c..526c58c6 100644
--- a/i18n/ro.i18n.json
+++ b/i18n/ro.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Delete Card?",
@@ -345,8 +348,6 @@
"import-board-c": "Import board",
"import-board-title-trello": "Import board from 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": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "From Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/ru.i18n.json b/i18n/ru.i18n.json
index a6cec3fc..bf80516a 100644
--- a/i18n/ru.i18n.json
+++ b/i18n/ru.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "снял %s в контрольном списке %s в %s",
"activity-checklist-added": "добавил контрольный список в %s",
"activity-checklist-removed": "удалил контрольный список из %s",
- "activity-checklist-completed": "завершил чек-лист %s в %s",
+ "activity-checklist-completed": "завершил контрольный список %s в %s",
"activity-checklist-uncompleted": "вновь открыл контрольный список %s в %s",
"activity-checklist-item-added": "добавил пункт в контрольный список '%s' в карточке %s",
"activity-checklist-item-removed": "удалил пункт из контрольного списка '%s' в карточке %s",
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Изменить дату",
"cardCustomFieldsPopup-title": "редактировать настраиваемые поля",
"cardStartVotingPopup-title": "Голосовать",
+ "positiveVoteMembersPopup-title": "Сторонники",
+ "negativeVoteMembersPopup-title": "Противники",
"vote-question": "Вопрос для голосования",
+ "vote-public": "Открытое голосование",
"vote-for-it": "за",
"vote-against": "против",
"cardDeletePopup-title": "Удалить карточку?",
@@ -345,8 +348,6 @@
"import-board-c": "Импортировать доску",
"import-board-title-trello": "Импортировать доску из Trello",
"import-board-title-wekan": "Импортировать доску, сохраненную ранее.",
- "import-sandstorm-backup-warning": "Не удаляйте импортируемые данные из ранее сохраненной доски или Trello, пока не убедитесь, что импорт завершился успешно – удается закрыть и снова открыть доску, и не появляется ошибка «Доска не найдена», что означает потерю данных.",
- "import-sandstorm-warning": "Импортированная доска удалит все существующие данные на текущей доске и заменит её импортированной доской.",
"from-trello": "Из Trello",
"from-wekan": "Сохраненную ранее",
"import-board-instruction-trello": "На вашей Trello доске нажмите “Menu” - “More” - “Print and export - “Export JSON” и скопируйте полученный текст",
@@ -771,7 +772,15 @@
"view-all": "Показать все",
"filter-by-unread": "Фильтр по непрочитанным",
"mark-all-as-read": "Отметить все как прочитанные",
- "remove-all-read": "Remove all read",
+ "remove-all-read": "Удалить все прочитанные",
"allow-rename": "Разрешить переименование",
- "allowRenamePopup-title": "Разрешить переименование"
+ "allowRenamePopup-title": "Разрешить переименование",
+ "start-day-of-week": "Установить день начала недели",
+ "monday": "Понедельник",
+ "tuesday": "Вторник",
+ "wednesday": "Среда",
+ "thursday": "Четверг",
+ "friday": "Пятница",
+ "saturday": "Суббота",
+ "sunday": "Воскресенье"
}
diff --git a/i18n/sl.i18n.json b/i18n/sl.i18n.json
index 19d1597d..5e72372f 100644
--- a/i18n/sl.i18n.json
+++ b/i18n/sl.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Spremeni datum",
"cardCustomFieldsPopup-title": "Uredi poljubna polja",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Briši kartico?",
@@ -345,8 +348,6 @@
"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.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/sr.i18n.json b/i18n/sr.i18n.json
index be0241be..34270a76 100644
--- a/i18n/sr.i18n.json
+++ b/i18n/sr.i18n.json
@@ -79,30 +79,30 @@
"add-board": "Add Board",
"add-card": "Dodaj karticu",
"add-swimlane": "Add Swimlane",
- "add-subtask": "Add Subtask",
+ "add-subtask": "Dodaj podzadatak",
"add-checklist": "Add Checklist",
"add-checklist-item": "Dodaj novu stavku u listu",
"add-cover": "Dodaj zaglavlje",
- "add-label": "Add Label",
+ "add-label": "Dodaj oznaku",
"add-list": "Dodaj Listu",
- "add-members": "Dodaj Članove",
+ "add-members": "Dodaj članove",
"added": "Dodao",
"addMemberPopup-title": "Članovi",
"admin": "Administrator",
"admin-desc": "Može da pregleda i menja kartice, uklanja članove i menja podešavanja table",
- "admin-announcement": "Announcement",
+ "admin-announcement": "Najava",
"admin-announcement-active": "Active System-Wide Announcement",
- "admin-announcement-title": "Announcement from Administrator",
+ "admin-announcement-title": "Najava za administratora",
"all-boards": "Sve table",
"and-n-other-card": "And __count__ other card",
"and-n-other-card_plural": "And __count__ other cards",
"apply": "Primeni",
"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": "Premesti u arhivu",
+ "archive-all": "Premesti sve u arhivu",
"archive-board": "Move Board to Archive",
- "archive-card": "Move Card to Archive",
- "archive-list": "Move List to Archive",
+ "archive-card": "Premesti karticu u arhivu",
+ "archive-list": "Premesti listu u arhivu",
"archive-swimlane": "Move Swimlane to Archive",
"archive-selection": "Move selection to Archive",
"archiveBoardPopup-title": "Move Board to Archive?",
@@ -117,7 +117,7 @@
"attached": "Prikačeno",
"attachment": "Prikačeni dokument",
"attachment-delete-pop": "Brisanje prikačenog dokumenta je trajno. Ne postoji vraćanje obrisanog.",
- "attachmentDeletePopup-title": "Obrisati prikačeni dokument ?",
+ "attachmentDeletePopup-title": "Obrisati prikačeni dokument?",
"attachments": "Prikačeni dokumenti",
"auto-watch": "Automatically watch boards when they are created",
"avatar-too-big": "Avatar je prevelik (maksimum je 70KB)",
@@ -129,25 +129,25 @@
"board-public-info": "Ova tabla će biti <strong>javna<strong>.",
"boardChangeColorPopup-title": "Promeni pozadinu table",
"boardChangeTitlePopup-title": "Preimenuj tablu",
- "boardChangeVisibilityPopup-title": "Promeni Vidljivost",
+ "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-cal": "Kalendar",
"board-view-swimlanes": "Swimlanes",
"board-view-collapse": "Sažmi",
- "board-view-lists": "Lists",
+ "board-view-lists": "Liste",
"bucket-example": "Na primer \"Lista zadataka\"",
"cancel": "Otkaži",
- "card-archived": "This card is moved to Archive.",
+ "card-archived": "Ova kartica je premeštena u arhivu.",
"board-archived": "This board is moved to Archive.",
"card-comments-title": "Ova kartica ima %s komentar.",
"card-delete-notice": "Brisanje je trajno. Izgubićeš sve akcije povezane sa ovom karticom.",
"card-delete-pop": "Sve akcije će biti uklonjene sa liste aktivnosti i kartica neće moći biti ponovo otvorena. Nema vraćanja unazad.",
"card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
- "card-due": "Krajnji datum",
+ "card-due": "Rok",
"card-due-on": "Završava se",
"card-spent": "Spent Time",
"card-edit-attachments": "Uredi priloge",
@@ -161,110 +161,113 @@
"card-start": "Početak",
"card-start-on": "Počinje",
"cardAttachmentsPopup-title": "Attach From",
- "cardCustomField-datePopup-title": "Change date",
+ "cardCustomField-datePopup-title": "Promeni datum",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardStartVotingPopup-title": "Novo glasanje",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Pitanje za glasanje",
+ "vote-public": "Public vote",
"vote-for-it": "za",
"vote-against": "protiv",
- "cardDeletePopup-title": "Delete Card?",
+ "cardDeletePopup-title": "Obrisati karticu?",
"cardDetailsActionsPopup-title": "Card Actions",
- "cardLabelsPopup-title": "Labels",
+ "cardLabelsPopup-title": "Oznake",
"cardMembersPopup-title": "Članovi",
- "cardMorePopup-title": "More",
- "cardTemplatePopup-title": "Create template",
- "cards": "Cards",
- "cards-count": "Cards",
+ "cardMorePopup-title": "Više",
+ "cardTemplatePopup-title": "Napravi šemu",
+ "cards": "Kartice",
+ "cards-count": "Kartice",
"casSignIn": "Sign In with CAS",
- "cardType-card": "Card",
- "cardType-linkedCard": "Linked Card",
+ "cardType-card": "Kartica",
+ "cardType-linkedCard": "Povezana kartica",
"cardType-linkedBoard": "Linked Board",
- "change": "Change",
- "change-avatar": "Change Avatar",
- "change-password": "Change Password",
- "change-permissions": "Change permissions",
- "change-settings": "Izmeni podešavanja",
- "changeAvatarPopup-title": "Change Avatar",
- "changeLanguagePopup-title": "Change Language",
- "changePasswordPopup-title": "Change Password",
- "changePermissionsPopup-title": "Change Permissions",
- "changeSettingsPopup-title": "Izmeni podešavanja",
- "subtasks": "Subtasks",
+ "change": "Promeni",
+ "change-avatar": "Promeni avatara",
+ "change-password": "Promeni lozinku",
+ "change-permissions": "Promeni dozvole",
+ "change-settings": "Promeni podešavanja",
+ "changeAvatarPopup-title": "Promeni avatara",
+ "changeLanguagePopup-title": "Promeni jezik",
+ "changePasswordPopup-title": "Promeni lozinku",
+ "changePermissionsPopup-title": "Promeni dozvole",
+ "changeSettingsPopup-title": "Promeni podešavanja",
+ "subtasks": "Podzadaci",
"checklists": "Liste",
"click-to-star": "Click to star this board.",
"click-to-unstar": "Click to unstar this board.",
"clipboard": "Clipboard or drag & drop",
- "close": "Close",
+ "close": "Zatvori",
"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-crimson": "crimson",
- "color-darkgreen": "darkgreen",
- "color-gold": "gold",
- "color-gray": "gray",
- "color-green": "green",
+ "color-black": "crno",
+ "color-blue": "plavo",
+ "color-crimson": "grimizno",
+ "color-darkgreen": "tamnozeleno",
+ "color-gold": "zlatno",
+ "color-gray": "sivo",
+ "color-green": "zeleno",
"color-indigo": "indigo",
"color-lime": "lime",
"color-magenta": "magenta",
"color-mistyrose": "mistyrose",
- "color-navy": "navy",
- "color-orange": "orange",
+ "color-navy": "mornarsko",
+ "color-orange": "narandžasto",
"color-paleturquoise": "paleturquoise",
"color-peachpuff": "peachpuff",
"color-pink": "pink",
- "color-plum": "plum",
- "color-purple": "purple",
- "color-red": "red",
+ "color-plum": "šljiva",
+ "color-purple": "ljubičasto",
+ "color-red": "crveno",
"color-saddlebrown": "saddlebrown",
- "color-silver": "silver",
- "color-sky": "sky",
+ "color-silver": "srebrno",
+ "color-sky": "nebesko",
"color-slateblue": "slateblue",
- "color-white": "white",
- "color-yellow": "yellow",
+ "color-white": "belo",
+ "color-yellow": "žuto",
"unset-color": "Unset",
- "comment": "Comment",
- "comment-placeholder": "Write Comment",
- "comment-only": "Comment only",
+ "comment": "Komentar",
+ "comment-placeholder": "Napiši komentar",
+ "comment-only": "Samo komentari",
"comment-only-desc": "Can comment on cards only.",
"no-comments": "No comments",
"no-comments-desc": "Can not see comments and activities.",
"worker": "Radnik",
"worker-desc": "Može samo da pomera kartice, dodeljuje sebe kartici i da komentariše. ",
- "computer": "Computer",
+ "computer": "Računar",
"confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
- "linkCardPopup-title": "Link Card",
+ "linkCardPopup-title": "Poveži karticu",
"searchElementPopup-title": "Pretraga",
- "copyCardPopup-title": "Copy Card",
+ "copyCardPopup-title": "Kopiraj karticu",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
"copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
- "create": "Create",
+ "create": "Napravi",
"createBoardPopup-title": "Create Board",
"chooseBoardSourcePopup-title": "Import board",
- "createLabelPopup-title": "Create Label",
- "createCustomField": "Create Field",
- "createCustomFieldPopup-title": "Create Field",
+ "createLabelPopup-title": "Napravi oznaku",
+ "createCustomField": "Napravi polje",
+ "createCustomFieldPopup-title": "Napravi polje",
"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": "Datum",
- "custom-field-dropdown": "Dropdown List",
- "custom-field-dropdown-none": "(none)",
- "custom-field-dropdown-options": "List Options",
+ "custom-field-dropdown": "Padajuća lista",
+ "custom-field-dropdown-none": "(ništa)",
+ "custom-field-dropdown-options": "Opcije liste",
"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": "(nepoznato)",
+ "custom-field-number": "Broj",
+ "custom-field-text": "Tekst",
"custom-fields": "Custom Fields",
"date": "Datum",
- "decline": "Decline",
+ "decline": "Odbij",
"default-avatar": "Default avatar",
- "delete": "Delete",
+ "delete": "Obriši",
"deleteCustomFieldPopup-title": "Delete Custom Field?",
- "deleteLabelPopup-title": "Delete Label?",
+ "deleteLabelPopup-title": "Obrisati oznaku?",
"description": "Opis",
"disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
"disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
@@ -272,21 +275,21 @@
"done": "Završeno",
"download": "Preuzmi",
"edit": "Uredi",
- "edit-avatar": "Change Avatar",
+ "edit-avatar": "Promeni avatara",
"edit-profile": "Uredi profil",
"edit-wip-limit": "Edit WIP Limit",
"soft-wip-limit": "Soft WIP Limit",
"editCardStartDatePopup-title": "Izmeni početni datum",
"editCardDueDatePopup-title": "Izmeni krajnji datum",
- "editCustomFieldPopup-title": "Edit Field",
+ "editCustomFieldPopup-title": "Izmeni polje",
"editCardSpentTimePopup-title": "Change spent time",
- "editLabelPopup-title": "Change Label",
- "editNotificationPopup-title": "Izmeni notifikaciju",
- "editProfilePopup-title": "Edit Profile",
- "email": "Email",
+ "editLabelPopup-title": "Izmeni oznaku",
+ "editNotificationPopup-title": "Izmeni obaveštenje",
+ "editProfilePopup-title": "Izmeni profil",
+ "email": "Epošta",
"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": "Neuspelo slanje epošte",
"email-fail-text": "Error trying to send email",
"email-invalid": "Invalid email",
"email-invite": "Invite via Email",
@@ -304,9 +307,9 @@
"error-json-malformed": "Your text is not valid 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-user-doesNotExist": "This user does not exist",
- "error-user-notAllowSelf": "You can not invite yourself",
- "error-user-notCreated": "This user is not created",
+ "error-user-doesNotExist": "Korisnik ne postoji",
+ "error-user-notAllowSelf": "Ne možeš pozvati samog sebe",
+ "error-user-notCreated": "Korisnik nije kreiran",
"error-username-taken": "Korisničko ime je već zauzeto",
"error-email-taken": "Email has already been taken",
"export-board": "Export board",
@@ -322,34 +325,32 @@
"filter": "Filter",
"filter-cards": "Filtriraj kartice ili liste",
"list-filter-label": "Filtriraj liste po naslovu",
- "filter-clear": "Clear filter",
+ "filter-clear": "Očisti filter",
"filter-no-label": "Nema oznake",
"filter-no-member": "Nema člana",
"filter-no-assignee": "Nema zastupnika",
"filter-no-custom-fields": "No Custom Fields",
"filter-show-archive": "Prikaži arhivirane liste",
"filter-hide-empty": "Sakrij prazne liste",
- "filter-on": "Filter is on",
+ "filter-on": "Filter je uključen",
"filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
"filter-to-selection": "Filter to selection",
- "advanced-filter-label": "Advanced Filter",
+ "advanced-filter-label": "Napredni 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",
+ "fullname": "Puno ime",
"header-logo-title": "Go back to your boards page.",
"hide-system-messages": "Sakrij sistemske poruke",
"headerBarCreateBoardPopup-title": "Create Board",
- "home": "Home",
- "import": "Import",
- "link": "Link",
+ "home": "Početna",
+ "import": "Uvezi",
+ "link": "Veza",
"import-board": "import board",
"import-board-c": "Import board",
"import-board-title-trello": "Uvezi tablu iz Trella",
"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": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "From Trello",
"from-wekan": "From previous export",
- "import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text",
+ "import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
"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-json-placeholder": "Paste your valid JSON data here",
@@ -357,48 +358,48 @@
"import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
"import-show-user-mapping": "Review members mapping",
"import-user-select": "Pick your existing user you want to use as this member",
- "importMapMembersAddPopup-title": "Select member",
- "info": "Version",
- "initials": "Initials",
+ "importMapMembersAddPopup-title": "Izaberi člana",
+ "info": "Verzija",
+ "initials": "Inicijali",
"invalid-date": "Neispravan datum",
- "invalid-time": "Invalid time",
- "invalid-user": "Invalid user",
+ "invalid-time": "Neispravno vreme",
+ "invalid-user": "Neispravan korisnik",
"joined": "joined",
"just-invited": "You are just invited to this board",
- "keyboard-shortcuts": "Keyboard shortcuts",
- "label-create": "Create Label",
+ "keyboard-shortcuts": "Prečice tastature",
+ "label-create": "Napravi oznaku",
"label-default": "%s label (default)",
"label-delete-pop": "There is no undo. This will remove this label from all cards and destroy its history.",
- "labels": "Labels",
- "language": "Language",
+ "labels": "Oznake",
+ "language": "Jezik",
"last-admin-desc": "You can’t change roles because there must be at least one admin.",
"leave-board": "Leave Board",
"leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
"leaveBoardPopup-title": "Leave Board ?",
- "link-card": "Link to this card",
+ "link-card": "Veza do ove kartice",
"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-move-cards": "Move all cards in this list",
- "list-select-cards": "Select all cards in this list",
- "set-color-list": "Set Color",
+ "list-move-cards": "Premesti sve kartice u ovoj listi",
+ "list-select-cards": "Izaberi sve kartice u ovoj listi",
+ "set-color-list": "Postavi boju",
"listActionPopup-title": "List Actions",
"swimlaneActionPopup-title": "Swimlane Actions",
"swimlaneAddPopup-title": "Add a Swimlane below",
"listImportCardPopup-title": "Import a Trello card",
- "listMorePopup-title": "More",
+ "listMorePopup-title": "Više",
"link-list": "Link to this list",
"list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
"list-delete-suggest-archive": "You can move a list to Archive to remove it from the board and preserve the activity.",
- "lists": "Lists",
+ "lists": "Liste",
"swimlanes": "Swimlanes",
- "log-out": "Log Out",
- "log-in": "Log In",
- "loginPopup-title": "Log In",
+ "log-out": "Odjavi se",
+ "log-in": "Prijava",
+ "loginPopup-title": "Prijava",
"memberMenuPopup-title": "Member Settings",
"members": "Članovi",
- "menu": "Menu",
+ "menu": "Meni",
"move-selection": "Move selection",
- "moveCardPopup-title": "Move Card",
+ "moveCardPopup-title": "Premesti karticu",
"moveCardToBottom-title": "Premesti na dno",
"moveCardToTop-title": "Premesti na vrh",
"moveSelectionPopup-title": "Move selection",
@@ -416,7 +417,7 @@
"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": "Budite obavešteni o novim događajima u tablama, listama ili karticama koje pratite.",
+ "notify-watch": "Receive updates to any boards, lists, or cards you’re watching",
"optional": "opciono",
"or": "ili",
"page-maybe-private": "This page may be private. You may be able to view it by <a href='%s'>logging in</a>.",
@@ -435,21 +436,21 @@
"quick-access-description": "Star a board to add a shortcut in this bar.",
"remove-cover": "Remove Cover",
"remove-from-board": "Ukloni iz table",
- "remove-label": "Remove Label",
- "listDeletePopup-title": "Delete List ?",
+ "remove-label": "Ukloni oznaku",
+ "listDeletePopup-title": "Obrisati listu?",
"remove-member": "Ukloni člana",
"remove-member-from-card": "Ukloni iz kartice",
"remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.",
- "removeMemberPopup-title": "Ukloni člana ?",
+ "removeMemberPopup-title": "Ukloni člana?",
"rename": "Preimenuj",
"rename-board": "Preimenuj tablu",
"restore": "Oporavi",
"save": "Snimi",
"search": "Pretraga",
- "rules": "Rules",
+ "rules": "Pravila",
"search-cards": "Pretraži u naslovima kartica/listi, opsima i proizvoljnim poljima sa ove table",
- "search-example": "Text to search for?",
- "select-color": "Select Color",
+ "search-example": "Tekst za pretragu?",
+ "select-color": "Izaberi boju",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
"setWipLimitPopup-title": "Set WIP Limit",
"shortcut-assign-self": "Pridruži sebe trenutnoj kartici",
@@ -481,7 +482,7 @@
"title": "Naslov",
"tracking": "Praćenje",
"tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
- "type": "Type",
+ "type": "Tip",
"unassign-member": "Unassign member",
"unsaved-description": "Imaš nesnimljen opis.",
"unwatch": "Ne posmatraj",
@@ -498,22 +499,22 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Osnove",
"welcome-list2": "Napredno",
- "card-templates-swimlane": "Card Templates",
- "list-templates-swimlane": "List Templates",
+ "card-templates-swimlane": "Šeme kartice",
+ "list-templates-swimlane": "Šeme liste",
"board-templates-swimlane": "Board Templates",
"what-to-do": "Šta želiš da uradiš ?",
"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.",
"admin-panel": "Admin Panel",
- "settings": "Settings",
- "people": "People",
- "registration": "Registration",
+ "settings": "Podešavanja",
+ "people": "Ljudi",
+ "registration": "Registracija",
"disable-self-registration": "Disable Self-Registration",
"invite": "Invite",
"invite-people": "Invite People",
"to-boards": "To board(s)",
- "email-addresses": "Email Addresses",
+ "email-addresses": "Adrese epošte",
"smtp-host-description": "The address of the SMTP server that handles your emails.",
"smtp-port-description": "The port your SMTP server uses for outgoing emails.",
"smtp-tls-description": "Enable TLS support for SMTP server",
@@ -521,8 +522,8 @@
"smtp-port": "SMTP Port",
"smtp-username": "Korisničko ime",
"smtp-password": "Lozinka",
- "smtp-tls": "TLS support",
- "send-from": "From",
+ "smtp-tls": "TLS podrška",
+ "send-from": "Od",
"send-smtp-test": "Send a test email to yourself",
"invitation-code": "Invitation Code",
"email-invite-register-subject": "__inviter__ sent you an invitation",
@@ -540,8 +541,8 @@
"disable-webhook": "Onesposobi ovu mrežnu kuku",
"global-webhook": "Globalna mrežna kuka",
"new-outgoing-webhook": "New Outgoing Webhook",
- "no-name": "(Unknown)",
- "Node_version": "Node version",
+ "no-name": "(Nepoznato)",
+ "Node_version": "Verzija čvora",
"Meteor_version": "Verzija Meteor-a",
"MongoDB_version": "Verzija MongoDB-a",
"MongoDB_storage_engine": "MongoDB mehanizam za skladištenje",
@@ -555,16 +556,16 @@
"OS_Totalmem": "OS Total Memory",
"OS_Type": "OS Type",
"OS_Uptime": "OS Uptime",
- "days": "days",
- "hours": "hours",
- "minutes": "minutes",
- "seconds": "seconds",
+ "days": "dana",
+ "hours": "sati",
+ "minutes": "minuta",
+ "seconds": "sekundi",
"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",
- "yes": "Yes",
- "no": "No",
- "accounts": "Accounts",
+ "yes": "Da",
+ "no": "Ne",
+ "accounts": "Nalozi",
"accounts-allowEmailChange": "Allow Email Change",
"accounts-allowUserNameChange": "Allow Username Change",
"createdAt": "Created at",
@@ -576,10 +577,10 @@
"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",
+ "setCardColorPopup-title": "Podesi boju",
+ "setCardActionsColorPopup-title": "Izaberi boju",
+ "setSwimlaneColorPopup-title": "Izaberi boju",
+ "setListColorPopup-title": "Izaberi boju",
"assigned-by": "Dodeljeno od strane",
"requested-by": "Requested By",
"board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
@@ -587,7 +588,7 @@
"boardDeletePopup-title": "Delete Board?",
"delete-board": "Delete Board",
"default-subtasks-board": "Subtasks for __board__ board",
- "default": "Default",
+ "default": "Predefinisano",
"queue": "Queue",
"subtask-settings": "Subtasks Settings",
"card-settings": "Podešavanja kartice",
@@ -612,22 +613,22 @@
"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-rule": "Pravilo",
+ "r-add-trigger": "Dodaj okidač",
+ "r-add-action": "Dodaj akciju",
"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-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",
+ "r-add-rule": "Dodaj pravilo",
+ "r-view-rule": "Pregledaj pravilo",
+ "r-delete-rule": "Obriši pravilo",
+ "r-new-rule-name": "Novi naslov pravila",
+ "r-no-rules": "Nema pravila",
+ "r-when-a-card": "Kada kartica",
+ "r-is": "je",
+ "r-is-moved": "je premeštena",
+ "r-added-to": "dodata u",
+ "r-removed-from": "Uklonjena iz",
+ "r-the-board": "table",
+ "r-list": "liste",
"set-filter": "Set Filter",
"r-moved-to": "Moved to",
"r-moved-from": "Moved from",
@@ -643,7 +644,7 @@
"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-completed": "Završeno",
"r-made-incomplete": "Made incomplete",
"r-when-a-item": "When a checklist item is",
"r-when-the-item": "When the checklist item",
@@ -655,11 +656,11 @@
"r-its-list": "its list",
"r-archive": "Move to Archive",
"r-unarchive": "Restore from Archive",
- "r-card": "card",
+ "r-card": "kartica",
"r-add": "Dodaj",
- "r-remove": "Remove",
- "r-label": "label",
- "r-member": "member",
+ "r-remove": "Ukloni",
+ "r-label": "oznaka",
+ "r-member": "član",
"r-remove-all": "Remove all members from the card",
"r-set-color": "Set color to",
"r-checklist": "checklist",
@@ -668,30 +669,30 @@
"r-items-check": "items of checklist",
"r-check": "Check",
"r-uncheck": "Uncheck",
- "r-item": "item",
+ "r-item": "stavka",
"r-of-checklist": "of checklist",
- "r-send-email": "Send an email",
- "r-to": "to",
- "r-subject": "subject",
- "r-rule-details": "Rule details",
+ "r-send-email": "Pošalji epoštu",
+ "r-to": "za",
+ "r-subject": "naslov",
+ "r-rule-details": "Detalji pravila",
"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-send-email": "Pošalji epoštu",
+ "r-d-send-email-to": "za",
+ "r-d-send-email-subject": "naslov",
+ "r-d-send-email-message": "poruka",
"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-d-add-label": "Dodaj oznaku",
+ "r-d-remove-label": "Ukloni oznaku",
+ "r-create-card": "Napravi novu karticu",
+ "r-in-list": "u listi",
"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-add-member": "Dodaj člana",
+ "r-d-remove-member": "Ukloni člana",
+ "r-d-remove-all-member": "Ukloni sve članove",
"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",
@@ -720,11 +721,11 @@
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
- "authentication-method": "Authentication method",
- "authentication-type": "Authentication type",
+ "authentication-method": "Metod autentifikacije",
+ "authentication-type": "Tip autentifikacije",
"custom-product-name": "Custom Product Name",
- "layout": "Layout",
- "hide-logo": "Hide Logo",
+ "layout": "Raspored",
+ "hide-logo": "Sakrij 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",
@@ -736,8 +737,8 @@
"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.",
+ "delete-all": "Obriši sve",
+ "loading": "Učitavanje, molim sačekajte.",
"previous_as": "prošli put je bio",
"act-a-dueAt": "modifikovano u vreme\nKada:__vremenskaVrednost__\nGde:__kartica__\nprethodni rok je bio__StaraVremenskaVrednost",
"act-a-endAt": "izmenjeno vreme završetaka za__vremenskaVrednost__od (__StaraVremenskaVrednost__)",
@@ -760,8 +761,8 @@
"accounts-allowUserDelete": "Dozvoli korisnicima da sami brišu svoj nalog",
"hide-minicard-label-text": "Sakrij tekst nalepnice minikartice",
"show-desktop-drag-handles": "Prikaži kvake za povlačenje sa radne površine",
- "assignee": "Asignat",
- "cardAssigneesPopup-title": "Asignat",
+ "assignee": "Zastupnik",
+ "cardAssigneesPopup-title": "Zastupnik",
"addmore-detail": "Dodaj detaljaniji opis",
"show-on-card": "Prikaži na kartici",
"new": "Novo",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Označi sve kao pročitano",
"remove-all-read": "Ukloni sve pročitano",
"allow-rename": "Dozvoli preimenovanje",
- "allowRenamePopup-title": "Dozvoli preimenovanje"
+ "allowRenamePopup-title": "Dozvoli preimenovanje",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/sv.i18n.json b/i18n/sv.i18n.json
index 997ac99f..9d15d681 100644
--- a/i18n/sv.i18n.json
+++ b/i18n/sv.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Ändra datum",
"cardCustomFieldsPopup-title": "Redigera anpassade fält",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Ta bort kort?",
@@ -345,8 +348,6 @@
"import-board-c": "Importera anslagstavla",
"import-board-title-trello": "Importera anslagstavla från Trello",
"import-board-title-wekan": "Importera anslagstavla från tidigare export",
- "import-sandstorm-backup-warning": "Ta inte bort data som du importerar från exporterad original-tavla eller Trello innan du kontrollerar att det här spannet stänger och öppnas igen, eller får du felmeddelandet Anslagstavla hittades inte, det vill säga dataförlust.",
- "import-sandstorm-warning": "Importerad anslagstavla raderar all befintlig data på anslagstavla och ersätter den med importerat anslagstavla.",
"from-trello": "Från Trello",
"from-wekan": "Från tidigare export",
"import-board-instruction-trello": "I din Trello-anslagstavla, gå till 'Meny', sedan 'Mera', 'Skriv ut och exportera', 'Exportera JSON' och kopiera den resulterande text.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/sw.i18n.json b/i18n/sw.i18n.json
index 45cf8991..75b87822 100644
--- a/i18n/sw.i18n.json
+++ b/i18n/sw.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Badilisha tarehe",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Delete Card?",
@@ -345,8 +348,6 @@
"import-board-c": "Import board",
"import-board-title-trello": "Import board from 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": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "From Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/ta.i18n.json b/i18n/ta.i18n.json
index a95fbd6d..ec84aa7e 100644
--- a/i18n/ta.i18n.json
+++ b/i18n/ta.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Delete Card?",
@@ -345,8 +348,6 @@
"import-board-c": "Import board",
"import-board-title-trello": "Import board from 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": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "Trello ல் இருந்து ",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/th.i18n.json b/i18n/th.i18n.json
index 0491767a..1d3a1606 100644
--- a/i18n/th.i18n.json
+++ b/i18n/th.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "ลบการ์ดนี้หรือไม่",
@@ -345,8 +348,6 @@
"import-board-c": "Import board",
"import-board-title-trello": "นำเข้าบอร์ดจาก 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": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "From Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "ใน Trello ของคุณให้ไปที่ 'Menu' และไปที่ More -> Print and Export -> Export JSON และคัดลอกข้อความจากนั้น",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/tr.i18n.json b/i18n/tr.i18n.json
index 4865ce7c..631a3e68 100644
--- a/i18n/tr.i18n.json
+++ b/i18n/tr.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Tarihi değiştir",
"cardCustomFieldsPopup-title": "Özel alanları düzenle",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Kart Silinsin mi?",
@@ -345,8 +348,6 @@
"import-board-c": "Panoyu içe aktar",
"import-board-title-trello": "Trello'dan panoyu içeri aktar",
"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": "İçe aktarılan pano şu anki panonun verilerinin üzerine yazılacak ve var olan veriler silinecek.",
"from-trello": "Trello'dan",
"from-wekan": "From previous export",
"import-board-instruction-trello": "Trello panonuzda 'Menü'ye gidip 'Daha fazlası'na tıklayın, ardından 'Yazdır ve Çıktı Al'ı seçip 'JSON biçiminde çıktı al' diyerek çıkan metni buraya kopyalayın.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/uk.i18n.json b/i18n/uk.i18n.json
index 20d637d4..8c550c10 100644
--- a/i18n/uk.i18n.json
+++ b/i18n/uk.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Видалити картку?",
@@ -345,8 +348,6 @@
"import-board-c": "Import board",
"import-board-title-trello": "Import board from Trello",
"import-board-title-wekan": "Import board from previous export",
- "import-sandstorm-backup-warning": "Не видаляйте імпортовані дані з раніше збереженої дошки або Trello, поки не переконаєтеся, що імпорт завершився успішно - вдається закрити і знову відкрити дошку, і не з'являється помилка «Дошка не знайдена», що означає втрату даних.",
- "import-sandstorm-warning": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "From Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/vi.i18n.json b/i18n/vi.i18n.json
index d1160611..c2add077 100644
--- a/i18n/vi.i18n.json
+++ b/i18n/vi.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Delete Card?",
@@ -345,8 +348,6 @@
"import-board-c": "Import board",
"import-board-title-trello": "Import board from 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": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "From Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/zh-CN.i18n.json b/i18n/zh-CN.i18n.json
index dfd0ac21..88baeb0b 100644
--- a/i18n/zh-CN.i18n.json
+++ b/i18n/zh-CN.i18n.json
@@ -152,8 +152,8 @@
"card-spent": "耗时",
"card-edit-attachments": "编辑附件",
"card-edit-custom-fields": "编辑自定义字段",
- "card-start-voting": "Start voting",
- "card-cancel-voting": "Delete voting and all votes",
+ "card-start-voting": "开始投票",
+ "card-cancel-voting": "移除投票",
"card-edit-labels": "编辑标签",
"card-edit-members": "编辑成员",
"card-labels-title": "更改该卡片上的标签",
@@ -163,10 +163,13 @@
"cardAttachmentsPopup-title": "附件来源",
"cardCustomField-datePopup-title": "修改日期",
"cardCustomFieldsPopup-title": "编辑自定义字段",
- "cardStartVotingPopup-title": "Start a vote",
- "vote-question": "Voting question",
- "vote-for-it": "for it",
- "vote-against": "against",
+ "cardStartVotingPopup-title": "建立投票",
+ "positiveVoteMembersPopup-title": "支持",
+ "negativeVoteMembersPopup-title": "反对",
+ "vote-question": "投票题目",
+ "vote-public": "公开投票",
+ "vote-for-it": "同意",
+ "vote-against": "反对",
"cardDeletePopup-title": "彻底删除卡片?",
"cardDetailsActionsPopup-title": "卡片操作",
"cardLabelsPopup-title": "标签",
@@ -325,7 +328,7 @@
"filter-clear": "清空过滤器",
"filter-no-label": "无标签",
"filter-no-member": "无成员",
- "filter-no-assignee": "No assignee",
+ "filter-no-assignee": "没有代理人",
"filter-no-custom-fields": "无自定义字段",
"filter-show-archive": "显示归档的列表",
"filter-hide-empty": "隐藏空列表",
@@ -345,8 +348,6 @@
"import-board-c": "导入看板",
"import-board-title-trello": "从Trello导入看板",
"import-board-title-wekan": "从以前的导出数据导入看板",
- "import-sandstorm-backup-warning": "在检查此颗粒是否关闭和再次打开之前,不要删除从原始导出的看板或Trello导入的数据,否则看板会发生未知的错误,这将意味着数据丢失。",
- "import-sandstorm-warning": "导入的面板将删除所有已存在于面板上的数据并替换他们为导入的面板。",
"from-trello": "自 Trello",
"from-wekan": "自以前的导出",
"import-board-instruction-trello": "在你的Trello看板中,点击“菜单”,然后选择“更多”,“打印与导出”,“导出为 JSON” 并拷贝结果文本",
@@ -447,7 +448,7 @@
"save": "保存",
"search": "搜索",
"rules": "规则",
- "search-cards": "Search from card/list titles, descriptions and custom fields on this board",
+ "search-cards": "搜寻看板內的卡片/列表标题、描述、自定义字段",
"search-example": "搜索",
"select-color": "选择颜色",
"set-wip-limit-value": "设置此列表中的最大任务数",
@@ -771,7 +772,15 @@
"view-all": "查看全部",
"filter-by-unread": "过滤未读",
"mark-all-as-read": "标记全部已读",
- "remove-all-read": "Remove all read",
+ "remove-all-read": "移除所有已读",
"allow-rename": "允许重命名",
- "allowRenamePopup-title": "允许重命名"
+ "allowRenamePopup-title": "允许重命名",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/zh-HK.i18n.json b/i18n/zh-HK.i18n.json
index 3fca3497..9fe4f710 100644
--- a/i18n/zh-HK.i18n.json
+++ b/i18n/zh-HK.i18n.json
@@ -164,7 +164,10 @@
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardStartVotingPopup-title": "Start a vote",
+ "positiveVoteMembersPopup-title": "Proponents",
+ "negativeVoteMembersPopup-title": "Opponents",
"vote-question": "Voting question",
+ "vote-public": "Public vote",
"vote-for-it": "for it",
"vote-against": "against",
"cardDeletePopup-title": "Delete Card?",
@@ -345,8 +348,6 @@
"import-board-c": "Import board",
"import-board-title-trello": "Import board from 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": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "From Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
@@ -773,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
- "allowRenamePopup-title": "Allow Rename"
+ "allowRenamePopup-title": "Allow Rename",
+ "start-day-of-week": "Set day of the week start",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday"
}
diff --git a/i18n/zh-TW.i18n.json b/i18n/zh-TW.i18n.json
index 8065b261..482c8198 100644
--- a/i18n/zh-TW.i18n.json
+++ b/i18n/zh-TW.i18n.json
@@ -152,8 +152,8 @@
"card-spent": "耗時",
"card-edit-attachments": "編輯附件",
"card-edit-custom-fields": "編輯自訂欄位",
- "card-start-voting": "Start voting",
- "card-cancel-voting": "Delete voting and all votes",
+ "card-start-voting": "開始投票",
+ "card-cancel-voting": "移除投票",
"card-edit-labels": "編輯標籤",
"card-edit-members": "編輯成員",
"card-labels-title": "更改該卡片上的標籤",
@@ -163,10 +163,13 @@
"cardAttachmentsPopup-title": "附件來源",
"cardCustomField-datePopup-title": "修改日期",
"cardCustomFieldsPopup-title": "編輯自訂欄位",
- "cardStartVotingPopup-title": "Start a vote",
- "vote-question": "Voting question",
- "vote-for-it": "for it",
- "vote-against": "against",
+ "cardStartVotingPopup-title": "建立投票",
+ "positiveVoteMembersPopup-title": "支持",
+ "negativeVoteMembersPopup-title": "反對",
+ "vote-question": "投票題目",
+ "vote-public": "公開投票",
+ "vote-for-it": "同意",
+ "vote-against": "反對",
"cardDeletePopup-title": "徹底刪除卡片?",
"cardDetailsActionsPopup-title": "卡片操作",
"cardLabelsPopup-title": "標籤",
@@ -325,7 +328,7 @@
"filter-clear": "清除篩選條件",
"filter-no-label": "沒有標籤",
"filter-no-member": "沒有成員",
- "filter-no-assignee": "No assignee",
+ "filter-no-assignee": "沒有代理人",
"filter-no-custom-fields": "沒有自訂欄位",
"filter-show-archive": "顯示封存的清單",
"filter-hide-empty": "隱藏空清單",
@@ -345,8 +348,6 @@
"import-board-c": "匯入看板",
"import-board-title-trello": "匯入在 Trello 的看板",
"import-board-title-wekan": "從上次的匯出檔匯入看板",
- "import-sandstorm-backup-warning": "在檢查此 grain 是否關閉和再次打開之前,不要刪除從原始匯出的看板或 Trello 匯入的資料,否則看板會發生未知的錯誤,這意味著資料已遺失。",
- "import-sandstorm-warning": "匯入資料將會移除所有現有的看版資料,並取代成此次匯入的看板資料",
"from-trello": "來自 Trello",
"from-wekan": "從上次的匯出檔",
"import-board-instruction-trello": "在你的Trello看板中,點選“功能表”,然後選擇“更多”,“列印與匯出”,“匯出為 JSON” 並拷貝結果文本",
@@ -771,7 +772,15 @@
"view-all": "檢視全部",
"filter-by-unread": "篩選: 未讀",
"mark-all-as-read": "標示全部已讀",
- "remove-all-read": "Remove all read",
+ "remove-all-read": "移除所有已讀",
"allow-rename": "允許更名",
- "allowRenamePopup-title": "允許更名"
+ "allowRenamePopup-title": "允許更名",
+ "start-day-of-week": "一周的第一天",
+ "monday": "周一",
+ "tuesday": "週二",
+ "wednesday": "週三",
+ "thursday": "週四",
+ "friday": "週五",
+ "saturday": "週六",
+ "sunday": "週日"
}
diff --git a/models/boards.js b/models/boards.js
index 35ee1a36..26dc6127 100644
--- a/models/boards.js
+++ b/models/boards.js
@@ -493,6 +493,14 @@ Boards.attachSchema(
type: String,
defaultValue: 'board',
},
+ sort: {
+ /**
+ * Sort value
+ */
+ type: Number,
+ decimal: true,
+ defaultValue: -1,
+ },
}),
);
@@ -1186,6 +1194,10 @@ Boards.mutations({
setPresentParentTask(presentParentTask) {
return { $set: { presentParentTask } };
},
+
+ move(sortIndex) {
+ return { $set: { sort: sortIndex } };
+ },
});
function boardRemover(userId, doc) {
@@ -1283,6 +1295,17 @@ if (Meteor.isServer) {
});
}
+// Insert new board at last position in sort order.
+Boards.before.insert((userId, doc) => {
+ const lastBoard = Boards.findOne(
+ { sort: { $exists: true } },
+ { sort: { sort: -1 } },
+ );
+ if (lastBoard && typeof lastBoard.sort !== 'undefined') {
+ doc.sort = lastBoard.sort + 1;
+ }
+});
+
if (Meteor.isServer) {
// Let MongoDB ensure that a member is not included twice in the same board
Meteor.startup(() => {
@@ -1466,7 +1489,7 @@ if (Meteor.isServer) {
'members.userId': paramUserId,
},
{
- sort: ['title'],
+ sort: { sort: 1 /* boards default sorting */ },
},
).map(function(board) {
return {
@@ -1496,7 +1519,12 @@ if (Meteor.isServer) {
Authentication.checkUserId(req.userId);
JsonRoutes.sendResult(res, {
code: 200,
- data: Boards.find({ permission: 'public' }).map(function(doc) {
+ data: Boards.find(
+ { permission: 'public' },
+ {
+ sort: { sort: 1 /* boards default sorting */ },
+ },
+ ).map(function(doc) {
return {
_id: doc._id,
title: doc.title,
diff --git a/models/cards.js b/models/cards.js
index 5a812679..72153132 100644
--- a/models/cards.js
+++ b/models/cards.js
@@ -732,7 +732,7 @@ Cards.helpers({
parentString(sep) {
return this.parentList()
- .map(function (elem) {
+ .map(function(elem) {
return elem.title;
})
.join(sep);
@@ -1050,13 +1050,13 @@ Cards.helpers({
voteMemberPositive() {
if (this.vote && this.vote.positive)
- return Users.find({ _id: { $in: this.vote.positive } })
- return []
+ return Users.find({ _id: { $in: this.vote.positive } });
+ return [];
},
voteMemberNegative() {
if (this.vote && this.vote.negative)
- return Users.find({ _id: { $in: this.vote.negative } })
- return []
+ return Users.find({ _id: { $in: this.vote.negative } });
+ return [];
},
getId() {
@@ -1929,7 +1929,7 @@ if (Meteor.isServer) {
});
//New activity for card moves
- Cards.after.update(function (userId, doc, fieldNames) {
+ Cards.after.update(function(userId, doc, fieldNames) {
const oldListId = this.previous.listId;
const oldSwimlaneId = this.previous.swimlaneId;
const oldBoardId = this.previous.boardId;
@@ -1975,7 +1975,7 @@ if (Meteor.isServer) {
// 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),
+ (action === 'endAt' ? 365 * 24 * 3600 * 1e3 : 0),
); // set it as 1 year before
const boardId = list.boardId;
Lists.direct.update(
@@ -2029,7 +2029,7 @@ if (Meteor.isServer) {
JsonRoutes.add(
'GET',
'/api/boards/:boardId/swimlanes/:swimlaneId/cards',
- function (req, res) {
+ function(req, res) {
const paramBoardId = req.params.boardId;
const paramSwimlaneId = req.params.swimlaneId;
Authentication.checkBoardAccess(req.userId, paramBoardId);
@@ -2039,7 +2039,7 @@ if (Meteor.isServer) {
boardId: paramBoardId,
swimlaneId: paramSwimlaneId,
archived: false,
- }).map(function (doc) {
+ }).map(function(doc) {
return {
_id: doc._id,
title: doc.title,
@@ -2063,7 +2063,7 @@ if (Meteor.isServer) {
* title: string,
* description: string}]
*/
- JsonRoutes.add('GET', '/api/boards/:boardId/lists/:listId/cards', function (
+ JsonRoutes.add('GET', '/api/boards/:boardId/lists/:listId/cards', function(
req,
res,
) {
@@ -2076,7 +2076,7 @@ if (Meteor.isServer) {
boardId: paramBoardId,
listId: paramListId,
archived: false,
- }).map(function (doc) {
+ }).map(function(doc) {
return {
_id: doc._id,
title: doc.title,
@@ -2098,7 +2098,7 @@ if (Meteor.isServer) {
JsonRoutes.add(
'GET',
'/api/boards/:boardId/lists/:listId/cards/:cardId',
- function (req, res) {
+ function(req, res) {
const paramBoardId = req.params.boardId;
const paramListId = req.params.listId;
const paramCardId = req.params.cardId;
@@ -2130,7 +2130,7 @@ if (Meteor.isServer) {
* @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 (
+ JsonRoutes.add('POST', '/api/boards/:boardId/lists/:listId/cards', function(
req,
res,
) {
@@ -2237,7 +2237,7 @@ if (Meteor.isServer) {
JsonRoutes.add(
'PUT',
'/api/boards/:boardId/lists/:listId/cards/:cardId',
- function (req, res) {
+ function(req, res) {
Authentication.checkUserId(req.userId);
const paramBoardId = req.params.boardId;
const paramCardId = req.params.cardId;
@@ -2536,7 +2536,7 @@ if (Meteor.isServer) {
JsonRoutes.add(
'DELETE',
'/api/boards/:boardId/lists/:listId/cards/:cardId',
- function (req, res) {
+ function(req, res) {
Authentication.checkUserId(req.userId);
const paramBoardId = req.params.boardId;
const paramListId = req.params.listId;
diff --git a/models/settings.js b/models/settings.js
index 0d671aa4..fb823205 100644
--- a/models/settings.js
+++ b/models/settings.js
@@ -334,6 +334,10 @@ if (Meteor.isServer) {
getDefaultAuthenticationMethod() {
return process.env.DEFAULT_AUTHENTICATION_METHOD;
},
+
+ isPasswordLoginDisabled() {
+ return process.env.PASSWORD_LOGIN_ENABLED === 'false';
+ },
});
}
diff --git a/models/trelloCreator.js b/models/trelloCreator.js
index 28982f43..1c5bcd93 100644
--- a/models/trelloCreator.js
+++ b/models/trelloCreator.js
@@ -1,4 +1,4 @@
-const DateString = Match.Where(function (dateAsString) {
+const DateString = Match.Where(function(dateAsString) {
check(dateAsString, String);
return moment(dateAsString, moment.ISO_8601).isValid();
});
@@ -299,13 +299,13 @@ export class TrelloCreator {
}
}
return true;
- })
+ });
if (positiveVotes.length > 0) {
cardToCreate.vote = {
question: cardToCreate.title,
public: true,
positive: positiveVotes,
- }
+ };
}
}
@@ -369,7 +369,7 @@ export class TrelloCreator {
// so we make it server only, and let UI catch up once it is done, forget about latency comp.
const self = this;
if (Meteor.isServer) {
- file.attachData(att.url, function (error) {
+ file.attachData(att.url, function(error) {
file.boardId = boardId;
file.cardId = cardId;
file.userId = self._user(att.idMemberCreator);
diff --git a/models/users.js b/models/users.js
index 8a05a0d2..ebb14f5f 100644
--- a/models/users.js
+++ b/models/users.js
@@ -190,6 +190,13 @@ Users.attachSchema(
type: Number,
optional: true,
},
+ 'profile.startDayOfWeek': {
+ /**
+ * startDayOfWeek field of the user
+ */
+ type: Number,
+ optional: true,
+ },
'profile.starredBoards': {
/**
* list of starred board IDs
@@ -377,8 +384,8 @@ if (Meteor.isClient) {
return board && board.hasWorker(this._id);
},
- isBoardAdmin() {
- const board = Boards.findOne(Session.get('currentBoard'));
+ isBoardAdmin(boardId = Session.get('currentBoard')) {
+ const board = Boards.findOne(boardId);
return board && board.hasAdmin(this._id);
},
});
@@ -386,12 +393,20 @@ if (Meteor.isClient) {
Users.helpers({
boards() {
- return Boards.find({ 'members.userId': this._id });
+ return Boards.find(
+ { 'members.userId': this._id },
+ { sort: { sort: 1 /* boards default sorting */ } },
+ );
},
starredBoards() {
const { starredBoards = [] } = this.profile || {};
- return Boards.find({ archived: false, _id: { $in: starredBoards } });
+ return Boards.find(
+ { archived: false, _id: { $in: starredBoards } },
+ {
+ sort: { sort: 1 /* boards default sorting */ },
+ },
+ );
},
hasStarred(boardId) {
@@ -401,7 +416,12 @@ Users.helpers({
invitedBoards() {
const { invitedBoards = [] } = this.profile || {};
- return Boards.find({ archived: false, _id: { $in: invitedBoards } });
+ return Boards.find(
+ { archived: false, _id: { $in: invitedBoards } },
+ {
+ sort: { sort: 1 /* boards default sorting */ },
+ },
+ );
},
isInvitedTo(boardId) {
@@ -508,6 +528,12 @@ Users.helpers({
return profile.language || 'en';
},
+ getStartDayOfWeek() {
+ const profile = this.profile || {};
+ // default is 'Monday' (1)
+ return profile.startDayOfWeek ?? 1;
+ },
+
getTemplatesBoardId() {
return (this.profile || {}).templatesBoardId;
},
@@ -639,6 +665,10 @@ Users.mutations({
return { $set: { 'profile.showCardsCountAt': limit } };
},
+ setStartDayOfWeek(startDay) {
+ return { $set: { 'profile.startDayOfWeek': startDay } };
+ },
+
setBoardView(view) {
return {
$set: {
@@ -669,6 +699,10 @@ Meteor.methods({
check(limit, Number);
Meteor.user().setShowCardsCountAt(limit);
},
+ changeStartDayOfWeek(startDay) {
+ check(startDay, Number);
+ Meteor.user().setStartDayOfWeek(startDay);
+ },
});
if (Meteor.isServer) {
@@ -814,6 +848,16 @@ if (Meteor.isServer) {
board.addMember(user._id);
user.addInvite(boardId);
+ //Check if there is a subtasks board
+ if (board.subtasksDefaultBoardId) {
+ const subBoard = Boards.findOne(board.subtasksDefaultBoardId);
+ //If there is, also add user to that board
+ if (subBoard) {
+ subBoard.addMember(user._id);
+ user.addInvite(subBoard._id);
+ }
+ }
+
try {
const params = {
user: user.username,
@@ -942,6 +986,7 @@ const addCronJob = _.debounce(
schedule: parser => parser.text('every 1 days'),
job: () => {
for (const user of Users.find()) {
+ if (!user.profile || !user.profile.notifications) continue;
for (const notification of user.profile.notifications) {
if (notification.read) {
const removeDate = new Date(notification.read);
@@ -1281,10 +1326,13 @@ if (Meteor.isServer) {
let data = Meteor.users.findOne({ _id: id });
if (data !== undefined) {
if (action === 'takeOwnership') {
- data = Boards.find({
- 'members.userId': id,
- 'members.isAdmin': true,
- }).map(function(board) {
+ data = Boards.find(
+ {
+ 'members.userId': id,
+ 'members.isAdmin': true,
+ },
+ { sort: { sort: 1 /* boards default sorting */ } },
+ ).map(function(board) {
if (board.hasMember(req.userId)) {
board.removeMember(req.userId);
}
diff --git a/package-lock.json b/package-lock.json
index 4fea76bf..99be4823 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,35 +1,207 @@
{
"name": "wekan",
- "version": "v3.92.0",
+ "version": "v3.98.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,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
+ "requires": {
+ "@babel/highlight": "^7.8.3"
+ }
+ },
+ "@babel/core": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz",
+ "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==",
+ "requires": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/generator": "^7.9.0",
+ "@babel/helper-module-transforms": "^7.9.0",
+ "@babel/helpers": "^7.9.0",
+ "@babel/parser": "^7.9.0",
+ "@babel/template": "^7.8.6",
+ "@babel/traverse": "^7.9.0",
+ "@babel/types": "^7.9.0",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.1",
+ "json5": "^2.1.2",
+ "lodash": "^4.17.13",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.9.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz",
+ "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==",
+ "requires": {
+ "@babel/types": "^7.9.5",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.9.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz",
+ "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==",
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/types": "^7.9.5"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
+ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz",
+ "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz",
+ "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==",
"requires": {
- "@babel/highlight": "^7.0.0"
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz",
+ "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==",
+ "requires": {
+ "@babel/helper-module-imports": "^7.8.3",
+ "@babel/helper-replace-supers": "^7.8.6",
+ "@babel/helper-simple-access": "^7.8.3",
+ "@babel/helper-split-export-declaration": "^7.8.3",
+ "@babel/template": "^7.8.6",
+ "@babel/types": "^7.9.0",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz",
+ "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.8.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz",
+ "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==",
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.8.3",
+ "@babel/helper-optimise-call-expression": "^7.8.3",
+ "@babel/traverse": "^7.8.6",
+ "@babel/types": "^7.8.6"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz",
+ "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==",
+ "requires": {
+ "@babel/template": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
+ "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.9.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz",
+ "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g=="
+ },
+ "@babel/helpers": {
+ "version": "7.9.2",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz",
+ "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==",
+ "requires": {
+ "@babel/template": "^7.8.3",
+ "@babel/traverse": "^7.9.0",
+ "@babel/types": "^7.9.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,
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz",
+ "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==",
"requires": {
+ "@babel/helper-validator-identifier": "^7.9.0",
"chalk": "^2.0.0",
- "esutils": "^2.0.2",
"js-tokens": "^4.0.0"
}
},
+ "@babel/parser": {
+ "version": "7.9.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
+ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA=="
+ },
"@babel/runtime": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.4.tgz",
- "integrity": "sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ==",
+ "version": "7.9.2",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz",
+ "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==",
+ "requires": {
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
+ "@babel/template": {
+ "version": "7.8.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
+ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
+ "requires": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/parser": "^7.8.6",
+ "@babel/types": "^7.8.6"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.9.5",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz",
+ "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==",
"requires": {
- "regenerator-runtime": "^0.13.2"
+ "@babel/code-frame": "^7.8.3",
+ "@babel/generator": "^7.9.5",
+ "@babel/helper-function-name": "^7.9.5",
+ "@babel/helper-split-export-declaration": "^7.8.3",
+ "@babel/parser": "^7.9.0",
+ "@babel/types": "^7.9.5",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/types": {
+ "version": "7.9.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.9.5",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
}
},
"@samverschueren/stream-to-observable": {
@@ -106,9 +278,9 @@
"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==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz",
+ "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==",
"dev": true
},
"ajv": {
@@ -123,13 +295,10 @@
}
},
"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"
- }
+ "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": "2.1.1",
@@ -140,7 +309,6 @@
"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"
}
@@ -247,6 +415,20 @@
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
"dev": true
},
+ "babel-eslint": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
+ "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.7.0",
+ "@babel/traverse": "^7.7.0",
+ "@babel/types": "^7.7.0",
+ "eslint-visitor-keys": "^1.0.0",
+ "resolve": "^1.12.0"
+ }
+ },
"babel-runtime": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
@@ -337,19 +519,12 @@
"integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
},
"bcrypt": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-3.0.7.tgz",
- "integrity": "sha512-K5UglF9VQvBMHl/1elNyyFvAfOY9Bj+rpKrCSR9sFwcW8FywAYJSRwTURNej5TaAK2TEJkcJ6r6lh1YPmspx5Q==",
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-3.0.8.tgz",
+ "integrity": "sha512-jKV6RvLhI36TQnPDvUFqBEnGX9c8dRRygKxCZu7E+MgLfKZbmmXL8a7/SFFOyHoPNX9nV81cKRC5tbQfvEQtpw==",
"requires": {
"nan": "2.14.0",
- "node-pre-gyp": "0.13.0"
- },
- "dependencies": {
- "nan": {
- "version": "2.14.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
- "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg=="
- }
+ "node-pre-gyp": "0.14.0"
}
},
"bl": {
@@ -400,18 +575,18 @@
}
},
"bson": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/bson/-/bson-4.0.3.tgz",
- "integrity": "sha512-7uBjjxwOSuGLmoqGI1UXWpDGc0K2WjR7dC6iaOg4iriNZo6M2EEBb8co4dEPJ5ArYCebPMie0ecgX0TWF+ZUrQ==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/bson/-/bson-4.0.4.tgz",
+ "integrity": "sha512-Ioi3TD0/1V3aI8+hPfC56TetYmzfq2H07jJa9A1lKTxWsFtHtYdLMGMXjtGEg9v0f72NSM07diRQEUNYhLupIA==",
"requires": {
"buffer": "^5.1.0",
"long": "^4.0.0"
}
},
"buffer": {
- "version": "5.4.3",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz",
- "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==",
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz",
+ "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==",
"requires": {
"base64-js": "^1.0.2",
"ieee754": "^1.1.4"
@@ -486,7 +661,6 @@
"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",
@@ -500,9 +674,9 @@
"dev": true
},
"chownr": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz",
- "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw=="
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
},
"class-utils": {
"version": "0.3.6",
@@ -528,12 +702,12 @@
}
},
"cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "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": "^3.1.0"
+ "restore-cursor": "^2.0.0"
}
},
"cli-truncate": {
@@ -555,9 +729,9 @@
}
},
"cli-width": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
- "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
+ "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==",
"dev": true
},
"co": {
@@ -584,7 +758,6 @@
"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"
}
@@ -592,13 +765,12 @@
"color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
},
"commander": {
- "version": "2.20.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
- "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ=="
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
},
"common-tags": {
"version": "1.8.0",
@@ -640,6 +812,14 @@
"integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
"dev": true
},
+ "convert-source-map": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
+ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
"copy-descriptor": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
@@ -647,9 +827,9 @@
"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=="
+ "version": "2.6.11",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
+ "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
},
"core-util-is": {
"version": "1.0.2",
@@ -729,9 +909,9 @@
"dev": true
},
"debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"requires": {
"ms": "^2.1.1"
}
@@ -840,12 +1020,12 @@
}
},
"dtrace-provider": {
- "version": "0.8.7",
- "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz",
- "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ=",
+ "version": "0.8.8",
+ "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz",
+ "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==",
"optional": true,
"requires": {
- "nan": "^2.10.0"
+ "nan": "^2.14.0"
}
},
"elegant-spinner": {
@@ -855,9 +1035,9 @@
"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==",
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
"dev": true
},
"error-ex": {
@@ -870,9 +1050,9 @@
}
},
"es-abstract": {
- "version": "1.17.2",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.2.tgz",
- "integrity": "sha512-YoKuru3Lyoy7yVTBSH2j7UxTqe/je3dWAruC0sHvZX1GNd5zX8SSLvQqEgO9b3Ex8IW+goFI9arEEsFIbulhOw==",
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
"dev": true,
"requires": {
"es-to-primitive": "^1.2.1",
@@ -907,8 +1087,7 @@
"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
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
},
"eslint": {
"version": "5.16.0",
@@ -955,12 +1134,12 @@
},
"dependencies": {
"ajv": {
- "version": "6.10.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
- "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+ "version": "6.12.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
+ "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
"dev": true,
"requires": {
- "fast-deep-equal": "^2.0.1",
+ "fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
@@ -972,19 +1151,10 @@
"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=",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
+ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
"dev": true
},
"json-schema-traverse": {
@@ -1053,22 +1223,13 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
- },
- "resolve": {
- "version": "1.14.2",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.2.tgz",
- "integrity": "sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==",
- "dev": true,
- "requires": {
- "path-parse": "^1.0.6"
- }
}
}
},
"eslint-module-utils": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz",
- "integrity": "sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==",
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz",
+ "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==",
"dev": true,
"requires": {
"debug": "^2.6.9",
@@ -1093,9 +1254,9 @@
}
},
"eslint-plugin-import": {
- "version": "2.20.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.0.tgz",
- "integrity": "sha512-NK42oA0mUc8Ngn4kONOPsPB1XhbUvNHqF+g307dPV28aknPoiNnKLFd9em4nkswwepdF5ouieqv5Th/63U7YJQ==",
+ "version": "2.20.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz",
+ "integrity": "sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==",
"dev": true,
"requires": {
"array-includes": "^3.0.3",
@@ -1149,9 +1310,9 @@
}
},
"eslint-plugin-prettier": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz",
- "integrity": "sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz",
+ "integrity": "sha512-+HG5jmu/dN3ZV3T6eCD7a4BlAySdN7mLIbJYo0z1cFQuI+r2DiTJEFeF68ots93PsnrMxbzIZ2S/ieX+mkrBeQ==",
"dev": true,
"requires": {
"prettier-linter-helpers": "^1.0.0"
@@ -1168,18 +1329,18 @@
}
},
"eslint-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz",
- "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==",
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
+ "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
"dev": true,
"requires": {
- "eslint-visitor-keys": "^1.0.0"
+ "eslint-visitor-keys": "^1.1.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==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
+ "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
"dev": true
},
"espree": {
@@ -1200,12 +1361,20 @@
"dev": true
},
"esquery": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
- "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz",
+ "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==",
"dev": true,
"requires": {
- "estraverse": "^4.0.0"
+ "estraverse": "^5.1.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz",
+ "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==",
+ "dev": true
+ }
}
},
"esrecurse": {
@@ -1218,9 +1387,9 @@
}
},
"estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"dev": true
},
"esutils": {
@@ -1421,9 +1590,9 @@
"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="
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
},
"fast-levenshtein": {
"version": "2.0.6",
@@ -1432,9 +1601,9 @@
"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==",
+ "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"
@@ -1496,12 +1665,23 @@
"flatted": "^2.0.0",
"rimraf": "2.6.3",
"write": "1.0.3"
+ },
+ "dependencies": {
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
}
},
"flatted": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
- "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg=="
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
+ "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA=="
},
"for-in": {
"version": "1.0.2",
@@ -1558,10 +1738,15 @@
"wide-align": "^1.1.0"
}
},
+ "gensync": {
+ "version": "1.0.0-beta.1",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
+ "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg=="
+ },
"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==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
+ "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==",
"dev": true
},
"get-stdin": {
@@ -1583,9 +1768,9 @@
"dev": true
},
"glob": {
- "version": "7.1.4",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
- "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -1598,13 +1783,12 @@
"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
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
},
"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==",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
+ "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
"dev": true
},
"gridfs-stream": {
@@ -1633,8 +1817,7 @@
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
},
"has-symbols": {
"version": "1.0.1",
@@ -1680,9 +1863,9 @@
}
},
"hosted-git-info": {
- "version": "2.8.5",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz",
- "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==",
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
+ "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
"dev": true
},
"iconv-lite": {
@@ -1713,9 +1896,9 @@
}
},
"import-fresh": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz",
- "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
+ "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
"dev": true,
"requires": {
"parent-module": "^1.0.0",
@@ -1762,47 +1945,57 @@
"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==",
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
+ "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==",
"dev": true,
"requires": {
- "ansi-escapes": "^4.2.1",
+ "ansi-escapes": "^3.2.0",
"chalk": "^2.4.2",
- "cli-cursor": "^3.1.0",
+ "cli-cursor": "^2.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",
+ "figures": "^2.0.0",
+ "lodash": "^4.17.12",
+ "mute-stream": "0.0.7",
"run-async": "^2.2.0",
"rxjs": "^6.4.0",
- "string-width": "^4.1.0",
+ "string-width": "^2.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==",
+ "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": "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==",
+ "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": "4.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.1.0.tgz",
- "integrity": "sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
"dev": true,
"requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^5.2.0"
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "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"
+ }
+ }
}
},
"strip-ansi": {
@@ -1812,6 +2005,14 @@
"dev": true,
"requires": {
"ansi-regex": "^4.1.0"
+ },
+ "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
+ }
}
}
}
@@ -2073,8 +2274,7 @@
"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
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
},
"js-yaml": {
"version": "3.13.1",
@@ -2086,6 +2286,11 @@
"esprima": "^4.0.0"
}
},
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
+ },
"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",
@@ -2103,6 +2308,14 @@
"integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
"dev": true
},
+ "json5": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
+ "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
"kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -2187,6 +2400,15 @@
"stringify-object": "^3.2.2"
},
"dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
"pify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
@@ -2298,51 +2520,6 @@
"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": {
@@ -2370,8 +2547,7 @@
"lodash": {
"version": "4.17.15",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
- "dev": true
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
},
"lodash.merge": {
"version": "4.6.2",
@@ -2403,54 +2579,12 @@
"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.7",
- "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.7.tgz",
- "integrity": "sha512-cY2eLFrQSAfVPhCgH1s7JI73tMbg9YC3v3+ZHVW67sBS7UxWzNEk/ZBbSfLykBWHp33dqqtOv82gjhKEi81T/A==",
+ "version": "1.6.8",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz",
+ "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==",
"dev": true
},
"loglevel-colored-level-prefix": {
@@ -3092,9 +3226,9 @@
}
},
"mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "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
},
"minimatch": {
@@ -3149,11 +3283,11 @@
}
},
"mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
"requires": {
- "minimist": "1.2.5"
+ "minimist": "^1.2.5"
}
},
"moment": {
@@ -3163,12 +3297,12 @@
"optional": true
},
"mongodb": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.0.tgz",
- "integrity": "sha512-M1usRxQ/Xl/IZuTK4LJXViwzaGkH1CuccH4iXqK46+Nv25Y7bAIawoxEZQBAlMtLQhRKyEzVoBK0NBTY01Zp5Q==",
+ "version": "3.5.6",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.6.tgz",
+ "integrity": "sha512-sh3q3GLDLT4QmoDLamxtAECwC3RGjq+oNuK1ENV8+tnipIavss6sMYt77hpygqlMOCt0Sla5cl7H4SKCVBCGEg==",
"requires": {
"bl": "^2.2.0",
- "bson": "^1.1.1",
+ "bson": "^1.1.4",
"denque": "^1.4.1",
"require_optional": "^1.0.1",
"safe-buffer": "^5.1.2",
@@ -3176,9 +3310,9 @@
},
"dependencies": {
"bson": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.3.tgz",
- "integrity": "sha512-TdiJxMVnodVS7r0BdL42y/pqC9cL2iKynVwA0Ho3qbsQYr428veL3l7BQyuqiw+Q5SqqoT0m4srSY/BlZ9AxXg=="
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.4.tgz",
+ "integrity": "sha512-S/yKGU1syOMzO86+dGpg2qGoDL0zvzcb262G+gqEy6TgP6rt6z6qxSFX/8X6vLC91P7G7C3nLs0+bvDzmvBA3Q=="
}
}
},
@@ -3188,9 +3322,9 @@
"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==",
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
"dev": true
},
"mv": {
@@ -3229,10 +3363,9 @@
}
},
"nan": {
- "version": "2.13.2",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz",
- "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==",
- "optional": true
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+ "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg=="
},
"nanomatch": {
"version": "1.2.13",
@@ -3266,13 +3399,23 @@
"optional": true
},
"needle": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz",
- "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.1.tgz",
+ "integrity": "sha512-x/gi6ijr4B7fwl6WYL9FwlCvRQKGlUNvnceho8wxkwXqN8jvVmmmATTmZPRRG7b/yC1eode26C2HO9jl78Du9g==",
"requires": {
"debug": "^3.2.6",
"iconv-lite": "^0.4.4",
"sax": "^1.2.4"
+ },
+ "dependencies": {
+ "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"
+ }
+ }
}
},
"nice-try": {
@@ -3282,9 +3425,9 @@
"dev": true
},
"node-pre-gyp": {
- "version": "0.13.0",
- "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.13.0.tgz",
- "integrity": "sha512-Md1D3xnEne8b/HGVQkZZwV27WUi1ZRuZBij24TNaZwUPU3ZAFtvT6xxJGaUVillfmMKnn5oD1HoGsp2Ftik7SQ==",
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz",
+ "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==",
"requires": {
"detect-libc": "^1.0.2",
"mkdirp": "^0.5.1",
@@ -3295,13 +3438,13 @@
"rc": "^1.2.7",
"rimraf": "^2.6.1",
"semver": "^5.3.0",
- "tar": "^4"
+ "tar": "^4.4.2"
}
},
"nopt": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
- "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
+ "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
"requires": {
"abbrev": "1",
"osenv": "^0.1.4"
@@ -3333,12 +3476,13 @@
"integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA=="
},
"npm-packlist": {
- "version": "1.4.7",
- "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.7.tgz",
- "integrity": "sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ==",
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz",
+ "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==",
"requires": {
"ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1"
+ "npm-bundled": "^1.0.1",
+ "npm-normalize-package-bin": "^1.0.1"
}
},
"npm-path": {
@@ -3485,26 +3629,26 @@
}
},
"onetime": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
- "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
"dev": true,
"requires": {
- "mimic-fn": "^2.1.0"
+ "mimic-fn": "^1.0.0"
}
},
"optionator": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
- "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
"dev": true,
"requires": {
"deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.4",
+ "fast-levenshtein": "~2.0.6",
"levn": "~0.3.0",
"prelude-ls": "~1.1.2",
"type-check": "~0.3.2",
- "wordwrap": "~1.0.0"
+ "word-wrap": "~1.2.3"
}
},
"os": {
@@ -3574,9 +3718,9 @@
"dev": true
},
"page": {
- "version": "1.11.5",
- "resolved": "https://registry.npmjs.org/page/-/page-1.11.5.tgz",
- "integrity": "sha512-0JXUHc7Y8p1cPJQbhZSwaKO3p+bU3Rgny+OM5gJMKHWHvJKan/fsE5RUzEjRQolv9DzPOSVWfSOHz0lLxK19eA==",
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/page/-/page-1.11.6.tgz",
+ "integrity": "sha512-P6e2JfzkBrPeFCIPplLP7vDDiU84RUUZMrWdsH4ZBGJ8OosnwFkcUkBHp1DTIjuipLliw9yQn/ZJsXZvarsO+g==",
"requires": {
"path-to-regexp": "~1.2.1"
}
@@ -3631,8 +3775,7 @@
"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
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
},
"path-to-regexp": {
"version": "1.2.1",
@@ -3760,9 +3903,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.6.4",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz",
- "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==",
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz",
+ "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==",
"dev": true
},
"indent-string": {
@@ -3824,9 +3967,9 @@
"dev": true
},
"qs": {
- "version": "6.9.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz",
- "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA=="
+ "version": "6.9.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz",
+ "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw=="
},
"rc": {
"version": "1.2.8",
@@ -3835,15 +3978,8 @@
"requires": {
"deep-extend": "^0.6.0",
"ini": "~1.3.0",
- "minimist": "^1.2.5",
+ "minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
- }
}
},
"read-pkg": {
@@ -3868,9 +4004,9 @@
}
},
"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==",
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -3882,9 +4018,9 @@
}
},
"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=="
+ "version": "0.13.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
+ "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
},
"regex-not": {
"version": "1.0.2",
@@ -3930,10 +4066,9 @@
}
},
"resolve": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
- "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
- "dev": true,
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.16.1.tgz",
+ "integrity": "sha512-rmAglCSqWWMrrBv/XM6sW0NuRFiKViw/W4d9EbC4pt+49H8JwHy+mcGmALTEg504AUDcLTvb1T2q3E9AnmY+ig==",
"requires": {
"path-parse": "^1.0.6"
}
@@ -3950,12 +4085,12 @@
"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==",
+ "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": "^5.1.0",
+ "onetime": "^2.0.0",
"signal-exit": "^3.0.2"
}
},
@@ -3966,26 +4101,26 @@
"dev": true
},
"rimraf": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
"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=",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz",
+ "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==",
"dev": true,
"requires": {
"is-promise": "^2.1.0"
}
},
"rxjs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz",
- "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==",
+ "version": "6.5.5",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz",
+ "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==",
"dev": true,
"requires": {
"tslib": "^1.9.0"
@@ -4085,9 +4220,9 @@
"dev": true
},
"signal-exit": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
+ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
},
"slice-ansi": {
"version": "2.1.0",
@@ -4156,12 +4291,6 @@
"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
}
}
},
@@ -4237,17 +4366,17 @@
}
},
"source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
},
"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==",
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
"dev": true,
"requires": {
- "atob": "^2.1.1",
+ "atob": "^2.1.2",
"decode-uri-component": "^0.2.0",
"resolve-url": "^0.2.1",
"source-map-url": "^0.4.0",
@@ -4255,12 +4384,19 @@
}
},
"source-map-support": {
- "version": "0.5.16",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz",
- "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==",
+ "version": "0.5.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.18.tgz",
+ "integrity": "sha512-9luZr/BZ2QeU6tO2uG8N2aZpVSli4TSAOAqFOyTO51AJcD9P99c0K1h6dD6r6qo5dyT44BR5exweOaLLeldTkQ==",
"requires": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "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-url": {
@@ -4299,9 +4435,9 @@
}
},
"spdx-exceptions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
- "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
"dev": true
},
"spdx-expression-parse": {
@@ -4378,24 +4514,46 @@
"strip-ansi": "^3.0.0"
}
},
+ "string.prototype.trimend": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
+ "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
"string.prototype.trimleft": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz",
- "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
+ "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
"dev": true,
"requires": {
"define-properties": "^1.1.3",
- "function-bind": "^1.1.1"
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimstart": "^1.0.0"
}
},
"string.prototype.trimright": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz",
- "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
+ "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
"dev": true,
"requires": {
"define-properties": "^1.1.3",
- "function-bind": "^1.1.1"
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimend": "^1.0.0"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
+ "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
}
},
"string_decoder": {
@@ -4446,7 +4604,6 @@
"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"
}
@@ -4458,9 +4615,9 @@
"dev": true
},
"table": {
- "version": "5.4.5",
- "resolved": "https://registry.npmjs.org/table/-/table-5.4.5.tgz",
- "integrity": "sha512-oGa2Hl7CQjfoaogtrOHEJroOcYILTx7BZWLGsJIlzoWmB2zmguhNfPJZsWPKYek/MgCxfco54gEi31d1uN2hFA==",
+ "version": "5.4.6",
+ "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
+ "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
"dev": true,
"requires": {
"ajv": "^6.10.2",
@@ -4470,12 +4627,12 @@
},
"dependencies": {
"ajv": {
- "version": "6.10.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
- "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+ "version": "6.12.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
+ "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
"dev": true,
"requires": {
- "fast-deep-equal": "^2.0.1",
+ "fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
@@ -4487,16 +4644,10 @@
"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=",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
+ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
"dev": true
},
"is-fullwidth-code-point": {
@@ -4568,6 +4719,11 @@
"os-tmpdir": "~1.0.2"
}
},
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
+ },
"to-object-path": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
@@ -4611,9 +4767,9 @@
}
},
"tslib": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
- "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz",
+ "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==",
"dev": true
},
"type-check": {
@@ -4625,12 +4781,6 @@
"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",
@@ -4796,6 +4946,15 @@
}
}
},
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
"eslint-scope": {
"version": "3.7.3",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz",
@@ -4835,10 +4994,10 @@
"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=",
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
"dev": true
},
"wrap-ansi": {
diff --git a/package.json b/package.json
index b8e6698c..32c4bce5 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "wekan",
- "version": "v3.92.0",
+ "version": "v3.98.0",
"description": "Open-Source kanban",
"private": true,
"scripts": {
@@ -40,6 +40,7 @@
},
"homepage": "https://wekan.github.io",
"devDependencies": {
+ "babel-eslint": "^10.1.0",
"eslint": "^5.16.0",
"eslint-config-meteor": "0.0.9",
"eslint-config-prettier": "^3.6.0",
@@ -53,7 +54,8 @@
"prettier-eslint": "^9.0.1"
},
"dependencies": {
- "@babel/runtime": "^7.8.4",
+ "@babel/core": "^7.9.0",
+ "@babel/runtime": "^7.9.2",
"ajv": "^5.0.0",
"babel-runtime": "^6.26.0",
"bcrypt": "^3.0.7",
diff --git a/packages/wekan-oidc/oidc_server.js b/packages/wekan-oidc/oidc_server.js
index c6d7deab..745f68e8 100644
--- a/packages/wekan-oidc/oidc_server.js
+++ b/packages/wekan-oidc/oidc_server.js
@@ -11,6 +11,7 @@ OAuth.registerService('oidc', 2, null, function (query) {
var userinfo = getUserInfo(accessToken);
if (userinfo.ocs) userinfo = userinfo.ocs.data; // Nextcloud hack
+ if (userinfo.metadata) userinfo = userinfo.metadata // Openshift hack
if (debug) console.log('XXX: userinfo:', userinfo);
var serviceData = {};
diff --git a/public/api/wekan.html b/public/api/wekan.html
index 063348bc..148ceee5 100644
--- a/public/api/wekan.html
+++ b/public/api/wekan.html
@@ -1458,12 +1458,12 @@ Darkula color scheme from the JetBrains family of IDEs
opacity: 0.5;
}
</style>
-
+
<script>!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(e,t){t=t||ne;var n=t.createElement("script");n.text=e,t.head.appendChild(n).parentNode.removeChild(n)}function r(e){var t=!!e&&"length"in e&&e.length,n=he.type(e);return"function"!==n&&!he.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function i(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}function o(e,t,n){return he.isFunction(t)?he.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?he.grep(e,function(e){return e===t!==n}):"string"!=typeof t?he.grep(e,function(e){return ae.call(t,e)>-1!==n}):Ee.test(t)?he.filter(t,e,n):(t=he.filter(t,e),he.grep(e,function(e){return ae.call(t,e)>-1!==n&&1===e.nodeType}))}function s(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function a(e){var t={};return he.each(e.match(Ae)||[],function(e,n){t[n]=!0}),t}function u(e){return e}function c(e){throw e}function l(e,t,n,r){var i;try{e&&he.isFunction(i=e.promise)?i.call(e).done(t).fail(n):e&&he.isFunction(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}function f(){ne.removeEventListener("DOMContentLoaded",f),e.removeEventListener("load",f),he.ready()}function d(){this.expando=he.expando+d.uid++}function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Pe.test(e)?JSON.parse(e):e)}function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(He,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n=p(n)}catch(e){}$e.set(e,t,n)}else n=void 0;return n}function g(e,t,n,r){var i,o=1,s=20,a=r?function(){return r.cur()}:function(){return he.css(e,t,"")},u=a(),c=n&&n[3]||(he.cssNumber[t]?"":"px"),l=(he.cssNumber[t]||"px"!==c&&+u)&&Re.exec(he.css(e,t));if(l&&l[3]!==c){c=c||l[3],n=n||[],l=+u||1;do{o=o||".5",l/=o,he.style(e,t,l+c)}while(o!==(o=a()/u)&&1!==o&&--s)}return n&&(l=+l||+u||0,i=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=l,r.end=i)),i}function v(e){var t,n=e.ownerDocument,r=e.nodeName,i=Be[r];return i||(t=n.body.appendChild(n.createElement(r)),i=he.css(t,"display"),t.parentNode.removeChild(t),"none"===i&&(i="block"),Be[r]=i,i)}function m(e,t){for(var n,r,i=[],o=0,s=e.length;o<s;o++)r=e[o],r.style&&(n=r.style.display,t?("none"===n&&(i[o]=Fe.get(r,"display")||null,i[o]||(r.style.display="")),""===r.style.display&&Me(r)&&(i[o]=v(r))):"none"!==n&&(i[o]="none",Fe.set(r,"display",n)));for(o=0;o<s;o++)null!=i[o]&&(e[o].style.display=i[o]);return e}function y(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&i(e,t)?he.merge([e],n):n}function x(e,t){for(var n=0,r=e.length;n<r;n++)Fe.set(e[n],"globalEval",!t||Fe.get(t[n],"globalEval"))}function b(e,t,n,r,i){for(var o,s,a,u,c,l,f=t.createDocumentFragment(),d=[],p=0,h=e.length;p<h;p++)if((o=e[p])||0===o)if("object"===he.type(o))he.merge(d,o.nodeType?[o]:o);else if(Qe.test(o)){for(s=s||f.appendChild(t.createElement("div")),a=(Ve.exec(o)||["",""])[1].toLowerCase(),u=Ue[a]||Ue._default,s.innerHTML=u[1]+he.htmlPrefilter(o)+u[2],l=u[0];l--;)s=s.lastChild;he.merge(d,s.childNodes),s=f.firstChild,s.textContent=""}else d.push(t.createTextNode(o));for(f.textContent="",p=0;o=d[p++];)if(r&&he.inArray(o,r)>-1)i&&i.push(o);else if(c=he.contains(o.ownerDocument,o),s=y(f.appendChild(o),"script"),c&&x(s),n)for(l=0;o=s[l++];)Xe.test(o.type||"")&&n.push(o);return f}function w(){return!0}function T(){return!1}function S(){try{return ne.activeElement}catch(e){}}function E(e,t,n,r,i,o){var s,a;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(a in t)E(e,a,n,r,t[a],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=T;else if(!i)return e;return 1===o&&(s=i,i=function(e){return he().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=he.guid++)),e.each(function(){he.event.add(this,t,i,r,n)})}function C(e,t){return i(e,"table")&&i(11!==t.nodeType?t:t.firstChild,"tr")?he(">tbody",e)[0]||e:e}function k(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function N(e){var t=nt.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function j(e,t){var n,r,i,o,s,a,u,c;if(1===t.nodeType){if(Fe.hasData(e)&&(o=Fe.access(e),s=Fe.set(t,o),c=o.events)){delete s.handle,s.events={};for(i in c)for(n=0,r=c[i].length;n<r;n++)he.event.add(t,i,c[i][n])}$e.hasData(e)&&(a=$e.access(e),u=he.extend({},a),$e.set(t,u))}}function A(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ze.test(e.type)?t.checked=e.checked:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}function L(e,t,r,i){t=oe.apply([],t);var o,s,a,u,c,l,f=0,d=e.length,p=d-1,h=t[0],g=he.isFunction(h);if(g||d>1&&"string"==typeof h&&!pe.checkClone&&tt.test(h))return e.each(function(n){var o=e.eq(n);g&&(t[0]=h.call(this,n,o.html())),L(o,t,r,i)});if(d&&(o=b(t,e[0].ownerDocument,!1,e,i),s=o.firstChild,1===o.childNodes.length&&(o=s),s||i)){for(a=he.map(y(o,"script"),k),u=a.length;f<d;f++)c=o,f!==p&&(c=he.clone(c,!0,!0),u&&he.merge(a,y(c,"script"))),r.call(e[f],c,f);if(u)for(l=a[a.length-1].ownerDocument,he.map(a,N),f=0;f<u;f++)c=a[f],Xe.test(c.type||"")&&!Fe.access(c,"globalEval")&&he.contains(l,c)&&(c.src?he._evalUrl&&he._evalUrl(c.src):n(c.textContent.replace(rt,""),l))}return e}function D(e,t,n){for(var r,i=t?he.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||he.cleanData(y(r)),r.parentNode&&(n&&he.contains(r.ownerDocument,r)&&x(y(r,"script")),r.parentNode.removeChild(r));return e}function O(e,t,n){var r,i,o,s,a=e.style;return n=n||st(e),n&&(s=n.getPropertyValue(t)||n[t],""!==s||he.contains(e.ownerDocument,e)||(s=he.style(e,t)),!pe.pixelMarginRight()&&ot.test(s)&&it.test(t)&&(r=a.width,i=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=s,s=n.width,a.width=r,a.minWidth=i,a.maxWidth=o)),void 0!==s?s+"":s}function q(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function F(e){if(e in dt)return e;for(var t=e[0].toUpperCase()+e.slice(1),n=ft.length;n--;)if((e=ft[n]+t)in dt)return e}function $(e){var t=he.cssProps[e];return t||(t=he.cssProps[e]=F(e)||e),t}function P(e,t,n){var r=Re.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function H(e,t,n,r,i){var o,s=0;for(o=n===(r?"border":"content")?4:"width"===t?1:0;o<4;o+=2)"margin"===n&&(s+=he.css(e,n+_e[o],!0,i)),r?("content"===n&&(s-=he.css(e,"padding"+_e[o],!0,i)),"margin"!==n&&(s-=he.css(e,"border"+_e[o]+"Width",!0,i))):(s+=he.css(e,"padding"+_e[o],!0,i),"padding"!==n&&(s+=he.css(e,"border"+_e[o]+"Width",!0,i)));return s}function I(e,t,n){var r,i=st(e),o=O(e,t,i),s="border-box"===he.css(e,"boxSizing",!1,i);return ot.test(o)?o:(r=s&&(pe.boxSizingReliable()||o===e.style[t]),"auto"===o&&(o=e["offset"+t[0].toUpperCase()+t.slice(1)]),(o=parseFloat(o)||0)+H(e,t,n||(s?"border":"content"),r,i)+"px")}function R(e,t,n,r,i){return new R.prototype.init(e,t,n,r,i)}function _(){ht&&(!1===ne.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(_):e.setTimeout(_,he.fx.interval),he.fx.tick())}function M(){return e.setTimeout(function(){pt=void 0}),pt=he.now()}function W(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)n=_e[r],i["margin"+n]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function B(e,t,n){for(var r,i=(X.tweeners[t]||[]).concat(X.tweeners["*"]),o=0,s=i.length;o<s;o++)if(r=i[o].call(n,t,e))return r}function z(e,t,n){var r,i,o,s,a,u,c,l,f="width"in t||"height"in t,d=this,p={},h=e.style,g=e.nodeType&&Me(e),v=Fe.get(e,"fxshow");n.queue||(s=he._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,a=s.empty.fire,s.empty.fire=function(){s.unqueued||a()}),s.unqueued++,d.always(function(){d.always(function(){s.unqueued--,he.queue(e,"fx").length||s.empty.fire()})}));for(r in t)if(i=t[r],gt.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}p[r]=v&&v[r]||he.style(e,r)}if((u=!he.isEmptyObject(t))||!he.isEmptyObject(p)){f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],c=v&&v.display,null==c&&(c=Fe.get(e,"display")),l=he.css(e,"display"),"none"===l&&(c?l=c:(m([e],!0),c=e.style.display||c,l=he.css(e,"display"),m([e]))),("inline"===l||"inline-block"===l&&null!=c)&&"none"===he.css(e,"float")&&(u||(d.done(function(){h.display=c}),null==c&&(l=h.display,c="none"===l?"":l)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",d.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1;for(r in p)u||(v?"hidden"in v&&(g=v.hidden):v=Fe.access(e,"fxshow",{display:c}),o&&(v.hidden=!g),g&&m([e],!0),d.done(function(){g||m([e]),Fe.remove(e,"fxshow");for(r in p)he.style(e,r,p[r])})),u=B(g?v[r]:0,r,d),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}}function V(e,t){var n,r,i,o,s;for(n in e)if(r=he.camelCase(n),i=t[r],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(s=he.cssHooks[r])&&"expand"in s){o=s.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function X(e,t,n){var r,i,o=0,s=X.prefilters.length,a=he.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=pt||M(),n=Math.max(0,c.startTime+c.duration-t),r=n/c.duration||0,o=1-r,s=0,u=c.tweens.length;s<u;s++)c.tweens[s].run(o);return a.notifyWith(e,[c,o,n]),o<1&&u?n:(u||a.notifyWith(e,[c,1,0]),a.resolveWith(e,[c]),!1)},c=a.promise({elem:e,props:he.extend({},t),opts:he.extend(!0,{specialEasing:{},easing:he.easing._default},n),originalProperties:t,originalOptions:n,startTime:pt||M(),duration:n.duration,tweens:[],createTween:function(t,n){var r=he.Tween(e,c.opts,t,n,c.opts.specialEasing[t]||c.opts.easing);return c.tweens.push(r),r},stop:function(t){var n=0,r=t?c.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)c.tweens[n].run(1);return t?(a.notifyWith(e,[c,1,0]),a.resolveWith(e,[c,t])):a.rejectWith(e,[c,t]),this}}),l=c.props;for(V(l,c.opts.specialEasing);o<s;o++)if(r=X.prefilters[o].call(c,e,l,c.opts))return he.isFunction(r.stop)&&(he._queueHooks(c.elem,c.opts.queue).stop=he.proxy(r.stop,r)),r;return he.map(l,B,c),he.isFunction(c.opts.start)&&c.opts.start.call(e,c),c.progress(c.opts.progress).done(c.opts.done,c.opts.complete).fail(c.opts.fail).always(c.opts.always),he.fx.timer(he.extend(u,{elem:e,anim:c,queue:c.opts.queue})),c}function U(e){return(e.match(Ae)||[]).join(" ")}function Q(e){return e.getAttribute&&e.getAttribute("class")||""}function Y(e,t,n,r){var i;if(Array.isArray(t))he.each(t,function(t,i){n||kt.test(e)?r(e,i):Y(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==he.type(t))r(e,t);else for(i in t)Y(e+"["+i+"]",t[i],n,r)}function J(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(Ae)||[];if(he.isFunction(n))for(;r=o[i++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function G(e,t,n,r){function i(a){var u;return o[a]=!0,he.each(e[a]||[],function(e,a){var c=a(t,n,r);return"string"!=typeof c||s||o[c]?s?!(u=c):void 0:(t.dataTypes.unshift(c),i(c),!1)}),u}var o={},s=e===It;return i(t.dataTypes[0])||!o["*"]&&i("*")}function K(e,t){var n,r,i=he.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&he.extend(!0,e,r),e}function Z(e,t,n){for(var r,i,o,s,a=e.contents,u=e.dataTypes;"*"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in a)if(a[i]&&a[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}s||(s=i)}o=o||s}if(o)return o!==u[0]&&u.unshift(o),n[o]}function ee(e,t,n,r){var i,o,s,a,u,c={},l=e.dataTypes.slice();if(l[1])for(s in e.converters)c[s.toLowerCase()]=e.converters[s];for(o=l.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=l.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(s=c[u+" "+o]||c["* "+o]))for(i in c)if(a=i.split(" "),a[1]===o&&(s=c[u+" "+a[0]]||c["* "+a[0]])){!0===s?s=c[i]:!0!==c[i]&&(o=a[0],l.unshift(a[1]));break}if(!0!==s)if(s&&e.throws)t=s(t);else try{t=s(t)}catch(e){return{state:"parsererror",error:s?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}var te=[],ne=e.document,re=Object.getPrototypeOf,ie=te.slice,oe=te.concat,se=te.push,ae=te.indexOf,ue={},ce=ue.toString,le=ue.hasOwnProperty,fe=le.toString,de=fe.call(Object),pe={},he=function(e,t){return new he.fn.init(e,t)},ge=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,ve=/^-ms-/,me=/-([a-z])/g,ye=function(e,t){return t.toUpperCase()};he.fn=he.prototype={jquery:"3.2.1",constructor:he,length:0,toArray:function(){return ie.call(this)},get:function(e){return null==e?ie.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=he.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return he.each(this,e)},map:function(e){return this.pushStack(he.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(ie.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:se,sort:te.sort,splice:te.splice},he.extend=he.fn.extend=function(){var e,t,n,r,i,o,s=arguments[0]||{},a=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[a]||{},a++),"object"==typeof s||he.isFunction(s)||(s={}),a===u&&(s=this,a--);a<u;a++)if(null!=(e=arguments[a]))for(t in e)n=s[t],r=e[t],s!==r&&(c&&r&&(he.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&&Array.isArray(n)?n:[]):o=n&&he.isPlainObject(n)?n:{},s[t]=he.extend(c,o,r)):void 0!==r&&(s[t]=r));return s},he.extend({expando:"jQuery"+("3.2.1"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return"function"===he.type(e)},isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){var t=he.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==ce.call(e))&&(!(t=re(e))||"function"==typeof(n=le.call(t,"constructor")&&t.constructor)&&fe.call(n)===de)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?ue[ce.call(e)]||"object":typeof e},globalEval:function(e){n(e)},camelCase:function(e){return e.replace(ve,"ms-").replace(me,ye)},each:function(e,t){var n,i=0;if(r(e))for(n=e.length;i<n&&!1!==t.call(e[i],i,e[i]);i++);else for(i in e)if(!1===t.call(e[i],i,e[i]))break;return e},trim:function(e){return null==e?"":(e+"").replace(ge,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(r(Object(e))?he.merge(n,"string"==typeof e?[e]:e):se.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:ae.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,s=!n;i<o;i++)!t(e[i],i)!==s&&r.push(e[i]);return r},map:function(e,t,n){var i,o,s=0,a=[];if(r(e))for(i=e.length;s<i;s++)null!=(o=t(e[s],s,n))&&a.push(o);else for(s in e)null!=(o=t(e[s],s,n))&&a.push(o);return oe.apply([],a)},guid:1,proxy:function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),he.isFunction(e))return r=ie.call(arguments,2),i=function(){return e.apply(t||this,r.concat(ie.call(arguments)))},i.guid=e.guid=e.guid||he.guid++,i},now:Date.now,support:pe}),"function"==typeof Symbol&&(he.fn[Symbol.iterator]=te[Symbol.iterator]),he.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){ue["[object "+t+"]"]=t.toLowerCase()});var xe=function(e){function t(e,t,n,r){var i,o,s,a,u,l,d,p=t&&t.ownerDocument,h=t?t.nodeType:9;if(n=n||[],"string"!=typeof e||!e||1!==h&&9!==h&&11!==h)return n;if(!r&&((t?t.ownerDocument||t:R)!==D&&L(t),t=t||D,q)){if(11!==h&&(u=ge.exec(e)))if(i=u[1]){if(9===h){if(!(s=t.getElementById(i)))return n;if(s.id===i)return n.push(s),n}else if(p&&(s=p.getElementById(i))&&H(t,s)&&s.id===i)return n.push(s),n}else{if(u[2])return J.apply(n,t.getElementsByTagName(e)),n;if((i=u[3])&&b.getElementsByClassName&&t.getElementsByClassName)return J.apply(n,t.getElementsByClassName(i)),n}if(b.qsa&&!z[e+" "]&&(!F||!F.test(e))){if(1!==h)p=t,d=e;else if("object"!==t.nodeName.toLowerCase()){for((a=t.getAttribute("id"))?a=a.replace(xe,be):t.setAttribute("id",a=I),l=E(e),o=l.length;o--;)l[o]="#"+a+" "+f(l[o]);d=l.join(","),p=ve.test(e)&&c(t.parentNode)||t}if(d)try{return J.apply(n,p.querySelectorAll(d)),n}catch(e){}finally{a===I&&t.removeAttribute("id")}}}return k(e.replace(oe,"$1"),t,n,r)}function n(){function e(n,r){return t.push(n+" ")>w.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[I]=!0,e}function i(e){var t=D.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),r=n.length;r--;)w.attrHandle[n[r]]=t}function s(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function a(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&Te(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function u(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),s=o.length;s--;)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}function c(e){return e&&void 0!==e.getElementsByTagName&&e}function l(){}function f(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function d(e,t,n){var r=t.dir,i=t.next,o=i||r,s=n&&"parentNode"===o,a=M++;return t.first?function(t,n,i){for(;t=t[r];)if(1===t.nodeType||s)return e(t,n,i);return!1}:function(t,n,u){var c,l,f,d=[_,a];if(u){for(;t=t[r];)if((1===t.nodeType||s)&&e(t,n,u))return!0}else for(;t=t[r];)if(1===t.nodeType||s)if(f=t[I]||(t[I]={}),l=f[t.uniqueID]||(f[t.uniqueID]={}),i&&i===t.nodeName.toLowerCase())t=t[r]||t;else{if((c=l[o])&&c[0]===_&&c[1]===a)return d[2]=c[2];if(l[o]=d,d[2]=e(t,n,u))return!0}return!1}}function p(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function h(e,n,r){for(var i=0,o=n.length;i<o;i++)t(e,n[i],r);return r}function g(e,t,n,r,i){for(var o,s=[],a=0,u=e.length,c=null!=t;a<u;a++)(o=e[a])&&(n&&!n(o,r,i)||(s.push(o),c&&t.push(a)));return s}function v(e,t,n,i,o,s){return i&&!i[I]&&(i=v(i)),o&&!o[I]&&(o=v(o,s)),r(function(r,s,a,u){var c,l,f,d=[],p=[],v=s.length,m=r||h(t||"*",a.nodeType?[a]:a,[]),y=!e||!r&&t?m:g(m,d,e,a,u),x=n?o||(r?e:v||i)?[]:s:y;if(n&&n(y,x,a,u),i)for(c=g(x,p),i(c,[],a,u),l=c.length;l--;)(f=c[l])&&(x[p[l]]=!(y[p[l]]=f));if(r){if(o||e){if(o){for(c=[],l=x.length;l--;)(f=x[l])&&c.push(y[l]=f);o(null,x=[],c,u)}for(l=x.length;l--;)(f=x[l])&&(c=o?K(r,f):d[l])>-1&&(r[c]=!(s[c]=f))}}else x=g(x===s?x.splice(v,x.length):x),o?o(null,s,x,u):J.apply(s,x)})}function m(e){for(var t,n,r,i=e.length,o=w.relative[e[0].type],s=o||w.relative[" "],a=o?1:0,u=d(function(e){return e===t},s,!0),c=d(function(e){return K(t,e)>-1},s,!0),l=[function(e,n,r){var i=!o&&(r||n!==N)||((t=n).nodeType?u(e,n,r):c(e,n,r));return t=null,i}];a<i;a++)if(n=w.relative[e[a].type])l=[d(p(l),n)];else{if(n=w.filter[e[a].type].apply(null,e[a].matches),n[I]){for(r=++a;r<i&&!w.relative[e[r].type];r++);return v(a>1&&p(l),a>1&&f(e.slice(0,a-1).concat({value:" "===e[a-2].type?"*":""})).replace(oe,"$1"),n,a<r&&m(e.slice(a,r)),r<i&&m(e=e.slice(r)),r<i&&f(e))}l.push(n)}return p(l)}function y(e,n){var i=n.length>0,o=e.length>0,s=function(r,s,a,u,c){var l,f,d,p=0,h="0",v=r&&[],m=[],y=N,x=r||o&&w.find.TAG("*",c),b=_+=null==y?1:Math.random()||.1,T=x.length;for(c&&(N=s===D||s||c);h!==T&&null!=(l=x[h]);h++){if(o&&l){for(f=0,s||l.ownerDocument===D||(L(l),a=!q);d=e[f++];)if(d(l,s||D,a)){u.push(l);break}c&&(_=b)}i&&((l=!d&&l)&&p--,r&&v.push(l))}if(p+=h,i&&h!==p){for(f=0;d=n[f++];)d(v,m,s,a);if(r){if(p>0)for(;h--;)v[h]||m[h]||(m[h]=Q.call(u));m=g(m)}J.apply(u,m),c&&!r&&m.length>0&&p+n.length>1&&t.uniqueSort(u)}return c&&(_=b,N=y),v};return i?r(s):s}var x,b,w,T,S,E,C,k,N,j,A,L,D,O,q,F,$,P,H,I="sizzle"+1*new Date,R=e.document,_=0,M=0,W=n(),B=n(),z=n(),V=function(e,t){return e===t&&(A=!0),0},X={}.hasOwnProperty,U=[],Q=U.pop,Y=U.push,J=U.push,G=U.slice,K=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},Z="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ee="[\\x20\\t\\r\\n\\f]",te="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",ne="\\["+ee+"*("+te+")(?:"+ee+"*([*^$|!~]?=)"+ee+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+te+"))|)"+ee+"*\\]",re=":("+te+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+ne+")*)|.*)\\)|)",ie=new RegExp(ee+"+","g"),oe=new RegExp("^"+ee+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ee+"+$","g"),se=new RegExp("^"+ee+"*,"+ee+"*"),ae=new RegExp("^"+ee+"*([>+~]|"+ee+")"+ee+"*"),ue=new RegExp("="+ee+"*([^\\]'\"]*?)"+ee+"*\\]","g"),ce=new RegExp(re),le=new RegExp("^"+te+"$"),fe={ID:new RegExp("^#("+te+")"),CLASS:new RegExp("^\\.("+te+")"),TAG:new RegExp("^("+te+"|[*])"),ATTR:new RegExp("^"+ne),PSEUDO:new RegExp("^"+re),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ee+"*(even|odd|(([+-]|)(\\d*)n|)"+ee+"*(?:([+-]|)"+ee+"*(\\d+)|))"+ee+"*\\)|)","i"),bool:new RegExp("^(?:"+Z+")$","i"),needsContext:new RegExp("^"+ee+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ee+"*((?:-\\d)?\\d*)"+ee+"*\\)|)(?=[^-]|$)","i")},de=/^(?:input|select|textarea|button)$/i,pe=/^h\d$/i,he=/^[^{]+\{\s*\[native \w/,ge=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ve=/[+~]/,me=new RegExp("\\\\([\\da-f]{1,6}"+ee+"?|("+ee+")|.)","ig"),ye=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},xe=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,be=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},we=function(){L()},Te=d(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{J.apply(U=G.call(R.childNodes),R.childNodes),U[R.childNodes.length].nodeType}catch(e){J={apply:U.length?function(e,t){Y.apply(e,G.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}b=t.support={},S=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},L=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:R;return r!==D&&9===r.nodeType&&r.documentElement?(D=r,O=D.documentElement,q=!S(D),R!==D&&(n=D.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",we,!1):n.attachEvent&&n.attachEvent("onunload",we)),b.attributes=i(function(e){return e.className="i",!e.getAttribute("className")}),b.getElementsByTagName=i(function(e){return e.appendChild(D.createComment("")),!e.getElementsByTagName("*").length}),b.getElementsByClassName=he.test(D.getElementsByClassName),b.getById=i(function(e){return O.appendChild(e).id=I,!D.getElementsByName||!D.getElementsByName(I).length}),b.getById?(w.filter.ID=function(e){var t=e.replace(me,ye);return function(e){return e.getAttribute("id")===t}},w.find.ID=function(e,t){if(void 0!==t.getElementById&&q){var n=t.getElementById(e);return n?[n]:[]}}):(w.filter.ID=function(e){var t=e.replace(me,ye);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},w.find.ID=function(e,t){if(void 0!==t.getElementById&&q){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),w.find.TAG=b.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):b.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},w.find.CLASS=b.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&q)return t.getElementsByClassName(e)},$=[],F=[],(b.qsa=he.test(D.querySelectorAll))&&(i(function(e){O.appendChild(e).innerHTML="<a id='"+I+"'></a><select id='"+I+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&F.push("[*^$]="+ee+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||F.push("\\["+ee+"*(?:value|"+Z+")"),e.querySelectorAll("[id~="+I+"-]").length||F.push("~="),e.querySelectorAll(":checked").length||F.push(":checked"),e.querySelectorAll("a#"+I+"+*").length||F.push(".#.+[+~]")}),i(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=D.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&F.push("name"+ee+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&F.push(":enabled",":disabled"),O.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&F.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),F.push(",.*:")})),(b.matchesSelector=he.test(P=O.matches||O.webkitMatchesSelector||O.mozMatchesSelector||O.oMatchesSelector||O.msMatchesSelector))&&i(function(e){b.disconnectedMatch=P.call(e,"*"),P.call(e,"[s!='']:x"),$.push("!=",re)}),F=F.length&&new RegExp(F.join("|")),$=$.length&&new RegExp($.join("|")),t=he.test(O.compareDocumentPosition),H=t||he.test(O.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},V=t?function(e,t){if(e===t)return A=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!b.sortDetached&&t.compareDocumentPosition(e)===n?e===D||e.ownerDocument===R&&H(R,e)?-1:t===D||t.ownerDocument===R&&H(R,t)?1:j?K(j,e)-K(j,t):0:4&n?-1:1)}:function(e,t){if(e===t)return A=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],u=[t];if(!i||!o)return e===D?-1:t===D?1:i?-1:o?1:j?K(j,e)-K(j,t):0;if(i===o)return s(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;a[r]===u[r];)r++;return r?s(a[r],u[r]):a[r]===R?-1:u[r]===R?1:0},D):D},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==D&&L(e),n=n.replace(ue,"='$1']"),b.matchesSelector&&q&&!z[n+" "]&&(!$||!$.test(n))&&(!F||!F.test(n)))try{var r=P.call(e,n);if(r||b.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return t(n,D,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==D&&L(e),H(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==D&&L(e);var n=w.attrHandle[t.toLowerCase()],r=n&&X.call(w.attrHandle,t.toLowerCase())?n(e,t,!q):void 0;return void 0!==r?r:b.attributes||!q?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.escape=function(e){return(e+"").replace(xe,be)},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],r=0,i=0;if(A=!b.detectDuplicates,j=!b.sortStable&&e.slice(0),e.sort(V),A){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return j=null,e},T=t.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=T(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=T(t);return n},w=t.selectors={cacheLength:50,createPseudo:r,match:fe,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(me,ye),e[3]=(e[3]||e[4]||e[5]||"").replace(me,ye),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return fe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&ce.test(n)&&(t=E(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(me,ye).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=W[e+" "];return t||(t=new RegExp("(^|"+ee+")"+e+"("+ee+"|$)"))&&W(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,r){return function(i){var o=t.attr(i,e);return null==o?"!="===n:!n||(o+="","="===n?o===r:"!="===n?o!==r:"^="===n?r&&0===o.indexOf(r):"*="===n?r&&o.indexOf(r)>-1:"$="===n?r&&o.slice(-r.length)===r:"~="===n?(" "+o.replace(ie," ")+" ").indexOf(r)>-1:"|="===n&&(o===r||o.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var c,l,f,d,p,h,g=o!==s?"nextSibling":"previousSibling",v=t.parentNode,m=a&&t.nodeName.toLowerCase(),y=!u&&!a,x=!1;if(v){if(o){for(;g;){for(d=t;d=d[g];)if(a?d.nodeName.toLowerCase()===m:1===d.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[s?v.firstChild:v.lastChild],s&&y){for(d=v,f=d[I]||(d[I]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),c=l[e]||[],p=c[0]===_&&c[1],x=p&&c[2],d=p&&v.childNodes[p];d=++p&&d&&d[g]||(x=p=0)||h.pop();)if(1===d.nodeType&&++x&&d===t){l[e]=[_,p,x];break}}else if(y&&(d=t,f=d[I]||(d[I]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),c=l[e]||[],p=c[0]===_&&c[1],x=p),!1===x)for(;(d=++p&&d&&d[g]||(x=p=0)||h.pop())&&((a?d.nodeName.toLowerCase()!==m:1!==d.nodeType)||!++x||(y&&(f=d[I]||(d[I]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),l[e]=[_,x]),d!==t)););return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,n){var i,o=w.pseudos[e]||w.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return o[I]?o(n):o.length>1?(i=[e,e,"",n],w.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),s=i.length;s--;)r=K(e,i[s]),e[r]=!(t[r]=i[s])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=C(e.replace(oe,"$1"));return i[I]?r(function(e,t,n,r){for(var o,s=i(e,null,r,[]),a=e.length;a--;)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(me,ye),function(t){return(t.textContent||t.innerText||T(t)).indexOf(e)>-1}}),lang:r(function(e){return le.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(me,ye).toLowerCase(),function(t){var n;do{if(n=q?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===O},focus:function(e){return e===D.activeElement&&(!D.hasFocus||D.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:a(!1),disabled:a(!0),checked:function(e){var t=e.nodeName.toLowerCase()
;return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!w.pseudos.empty(e)},header:function(e){return pe.test(e.nodeName)},input:function(e){return de.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:u(function(){return[0]}),last:u(function(e,t){return[t-1]}),eq:u(function(e,t,n){return[n<0?n+t:n]}),even:u(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:u(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:u(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:u(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}},w.pseudos.nth=w.pseudos.eq;for(x in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})w.pseudos[x]=function(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}(x);for(x in{submit:!0,reset:!0})w.pseudos[x]=function(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}(x);return l.prototype=w.filters=w.pseudos,w.setFilters=new l,E=t.tokenize=function(e,n){var r,i,o,s,a,u,c,l=B[e+" "];if(l)return n?0:l.slice(0);for(a=e,u=[],c=w.preFilter;a;){r&&!(i=se.exec(a))||(i&&(a=a.slice(i[0].length)||a),u.push(o=[])),r=!1,(i=ae.exec(a))&&(r=i.shift(),o.push({value:r,type:i[0].replace(oe," ")}),a=a.slice(r.length));for(s in w.filter)!(i=fe[s].exec(a))||c[s]&&!(i=c[s](i))||(r=i.shift(),o.push({value:r,type:s,matches:i}),a=a.slice(r.length));if(!r)break}return n?a.length:a?t.error(e):B(e,u).slice(0)},C=t.compile=function(e,t){var n,r=[],i=[],o=z[e+" "];if(!o){for(t||(t=E(e)),n=t.length;n--;)o=m(t[n]),o[I]?r.push(o):i.push(o);o=z(e,y(i,r)),o.selector=e}return o},k=t.select=function(e,t,n,r){var i,o,s,a,u,l="function"==typeof e&&e,d=!r&&E(e=l.selector||e);if(n=n||[],1===d.length){if(o=d[0]=d[0].slice(0),o.length>2&&"ID"===(s=o[0]).type&&9===t.nodeType&&q&&w.relative[o[1].type]){if(!(t=(w.find.ID(s.matches[0].replace(me,ye),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=fe.needsContext.test(e)?0:o.length;i--&&(s=o[i],!w.relative[a=s.type]);)if((u=w.find[a])&&(r=u(s.matches[0].replace(me,ye),ve.test(o[0].type)&&c(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&f(o)))return J.apply(n,r),n;break}}return(l||C(e,d))(r,t,!q,n,!t||ve.test(e)&&c(t.parentNode)||t),n},b.sortStable=I.split("").sort(V).join("")===I,b.detectDuplicates=!!A,L(),b.sortDetached=i(function(e){return 1&e.compareDocumentPosition(D.createElement("fieldset"))}),i(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),b.attributes&&i(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),i(function(e){return null==e.getAttribute("disabled")})||o(Z,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(e);he.find=xe,he.expr=xe.selectors,he.expr[":"]=he.expr.pseudos,he.uniqueSort=he.unique=xe.uniqueSort,he.text=xe.getText,he.isXMLDoc=xe.isXML,he.contains=xe.contains,he.escapeSelector=xe.escape;var be=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&he(e).is(n))break;r.push(e)}return r},we=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},Te=he.expr.match.needsContext,Se=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,Ee=/^.[^:#\[\.,]*$/;he.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?he.find.matchesSelector(r,e)?[r]:[]:he.find.matches(e,he.grep(t,function(e){return 1===e.nodeType}))},he.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(he(e).filter(function(){for(t=0;t<r;t++)if(he.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)he.find(e,i[t],n);return r>1?he.uniqueSort(n):n},filter:function(e){return this.pushStack(o(this,e||[],!1))},not:function(e){return this.pushStack(o(this,e||[],!0))},is:function(e){return!!o(this,"string"==typeof e&&Te.test(e)?he(e):e||[],!1).length}});var Ce,ke=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(he.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||Ce,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:ke.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof he?t[0]:t,he.merge(this,he.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:ne,!0)),Se.test(r[1])&&he.isPlainObject(t))for(r in t)he.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=ne.getElementById(r[2]),i&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):he.isFunction(e)?void 0!==n.ready?n.ready(e):e(he):he.makeArray(e,this)}).prototype=he.fn,Ce=he(ne);var Ne=/^(?:parents|prev(?:Until|All))/,je={children:!0,contents:!0,next:!0,prev:!0};he.fn.extend({has:function(e){var t=he(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(he.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],s="string"!=typeof e&&he(e);if(!Te.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(s?s.index(n)>-1:1===n.nodeType&&he.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?he.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?ae.call(he(e),this[0]):ae.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(he.uniqueSort(he.merge(this.get(),he(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),he.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return be(e,"parentNode")},parentsUntil:function(e,t,n){return be(e,"parentNode",n)},next:function(e){return s(e,"nextSibling")},prev:function(e){return s(e,"previousSibling")},nextAll:function(e){return be(e,"nextSibling")},prevAll:function(e){return be(e,"previousSibling")},nextUntil:function(e,t,n){return be(e,"nextSibling",n)},prevUntil:function(e,t,n){return be(e,"previousSibling",n)},siblings:function(e){return we((e.parentNode||{}).firstChild,e)},children:function(e){return we(e.firstChild)},contents:function(e){return i(e,"iframe")?e.contentDocument:(i(e,"template")&&(e=e.content||e),he.merge([],e.childNodes))}},function(e,t){he.fn[e]=function(n,r){var i=he.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=he.filter(r,i)),this.length>1&&(je[e]||he.uniqueSort(i),Ne.test(e)&&i.reverse()),this.pushStack(i)}});var Ae=/[^\x20\t\r\n\f]+/g;he.Callbacks=function(e){e="string"==typeof e?a(e):he.extend({},e);var t,n,r,i,o=[],s=[],u=-1,c=function(){for(i=i||e.once,r=t=!0;s.length;u=-1)for(n=s.shift();++u<o.length;)!1===o[u].apply(n[0],n[1])&&e.stopOnFalse&&(u=o.length,n=!1);e.memory||(n=!1),t=!1,i&&(o=n?[]:"")},l={add:function(){return o&&(n&&!t&&(u=o.length-1,s.push(n)),function t(n){he.each(n,function(n,r){he.isFunction(r)?e.unique&&l.has(r)||o.push(r):r&&r.length&&"string"!==he.type(r)&&t(r)})}(arguments),n&&!t&&c()),this},remove:function(){return he.each(arguments,function(e,t){for(var n;(n=he.inArray(t,o,n))>-1;)o.splice(n,1),n<=u&&u--}),this},has:function(e){return e?he.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=s=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=s=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||c()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},he.extend({Deferred:function(t){var n=[["notify","progress",he.Callbacks("memory"),he.Callbacks("memory"),2],["resolve","done",he.Callbacks("once memory"),he.Callbacks("once memory"),0,"resolved"],["reject","fail",he.Callbacks("once memory"),he.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},catch:function(e){return i.then(null,e)},pipe:function(){var e=arguments;return he.Deferred(function(t){he.each(n,function(n,r){var i=he.isFunction(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&he.isFunction(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){function o(t,n,r,i){return function(){var a=this,l=arguments,f=function(){var e,f;if(!(t<s)){if((e=r.apply(a,l))===n.promise())throw new TypeError("Thenable self-resolution");f=e&&("object"==typeof e||"function"==typeof e)&&e.then,he.isFunction(f)?i?f.call(e,o(s,n,u,i),o(s,n,c,i)):(s++,f.call(e,o(s,n,u,i),o(s,n,c,i),o(s,n,u,n.notifyWith))):(r!==u&&(a=void 0,l=[e]),(i||n.resolveWith)(a,l))}},d=i?f:function(){try{f()}catch(e){he.Deferred.exceptionHook&&he.Deferred.exceptionHook(e,d.stackTrace),t+1>=s&&(r!==c&&(a=void 0,l=[e]),n.rejectWith(a,l))}};t?d():(he.Deferred.getStackHook&&(d.stackTrace=he.Deferred.getStackHook()),e.setTimeout(d))}}var s=0;return he.Deferred(function(e){n[0][3].add(o(0,e,he.isFunction(i)?i:u,e.notifyWith)),n[1][3].add(o(0,e,he.isFunction(t)?t:u)),n[2][3].add(o(0,e,he.isFunction(r)?r:c))}).promise()},promise:function(e){return null!=e?he.extend(e,i):i}},o={};return he.each(n,function(e,t){var s=t[2],a=t[5];i[t[1]]=s.add,a&&s.add(function(){r=a},n[3-e][2].disable,n[0][2].lock),s.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=s.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=ie.call(arguments),o=he.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?ie.call(arguments):n,--t||o.resolveWith(r,i)}};if(t<=1&&(l(e,o.done(s(n)).resolve,o.reject,!t),"pending"===o.state()||he.isFunction(i[n]&&i[n].then)))return o.then();for(;n--;)l(i[n],s(n),o.reject);return o.promise()}});var Le=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;he.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&Le.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},he.readyException=function(t){e.setTimeout(function(){throw t})};var De=he.Deferred();he.fn.ready=function(e){return De.then(e).catch(function(e){he.readyException(e)}),this},he.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--he.readyWait:he.isReady)||(he.isReady=!0,!0!==e&&--he.readyWait>0||De.resolveWith(ne,[he]))}}),he.ready.then=De.then,"complete"===ne.readyState||"loading"!==ne.readyState&&!ne.documentElement.doScroll?e.setTimeout(he.ready):(ne.addEventListener("DOMContentLoaded",f),e.addEventListener("load",f));var Oe=function(e,t,n,r,i,o,s){var a=0,u=e.length,c=null==n;if("object"===he.type(n)){i=!0;for(a in n)Oe(e,t,a,n[a],!0,o,s)}else if(void 0!==r&&(i=!0,he.isFunction(r)||(s=!0),c&&(s?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(he(e),n)})),t))for(;a<u;a++)t(e[a],n,s?r:r.call(e[a],a,t(e[a],n)));return i?e:c?t.call(e):u?t(e[0],n):o},qe=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};d.uid=1,d.prototype={cache:function(e){var t=e[this.expando];return t||(t={},qe(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[he.camelCase(t)]=n;else for(r in t)i[he.camelCase(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][he.camelCase(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){Array.isArray(t)?t=t.map(he.camelCase):(t=he.camelCase(t),t=t in r?[t]:t.match(Ae)||[]),n=t.length;for(;n--;)delete r[t[n]]}(void 0===t||he.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!he.isEmptyObject(t)}};var Fe=new d,$e=new d,Pe=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,He=/[A-Z]/g;he.extend({hasData:function(e){return $e.hasData(e)||Fe.hasData(e)},data:function(e,t,n){return $e.access(e,t,n)},removeData:function(e,t){$e.remove(e,t)},_data:function(e,t,n){return Fe.access(e,t,n)},_removeData:function(e,t){Fe.remove(e,t)}}),he.fn.extend({data:function(e,t){var n,r,i,o=this[0],s=o&&o.attributes;if(void 0===e){if(this.length&&(i=$e.get(o),1===o.nodeType&&!Fe.get(o,"hasDataAttrs"))){for(n=s.length;n--;)s[n]&&(r=s[n].name,0===r.indexOf("data-")&&(r=he.camelCase(r.slice(5)),h(o,r,i[r])));Fe.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof e?this.each(function(){$e.set(this,e)}):Oe(this,function(t){var n;if(o&&void 0===t){if(void 0!==(n=$e.get(o,e)))return n;if(void 0!==(n=h(o,e)))return n}else this.each(function(){$e.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){$e.remove(this,e)})}}),he.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Fe.get(e,t),n&&(!r||Array.isArray(n)?r=Fe.access(e,t,he.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=he.queue(e,t),r=n.length,i=n.shift(),o=he._queueHooks(e,t),s=function(){he.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Fe.get(e,n)||Fe.access(e,n,{empty:he.Callbacks("once memory").add(function(){Fe.remove(e,[t+"queue",n])})})}}),he.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?he.queue(this[0],e):void 0===t?this:this.each(function(){var n=he.queue(this,e,t);he._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&he.dequeue(this,e)})},dequeue:function(e){return this.each(function(){he.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=he.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";s--;)(n=Fe.get(o[s],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(t)}});var Ie=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Re=new RegExp("^(?:([+-])=|)("+Ie+")([a-z%]*)$","i"),_e=["Top","Right","Bottom","Left"],Me=function(e,t){return e=t||e,"none"===e.style.display||""===e.style.display&&he.contains(e.ownerDocument,e)&&"none"===he.css(e,"display")},We=function(e,t,n,r){var i,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=s[o];return i},Be={};he.fn.extend({show:function(){return m(this,!0)},hide:function(){return m(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){Me(this)?he(this).show():he(this).hide()})}});var ze=/^(?:checkbox|radio)$/i,Ve=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,Xe=/^$|\/(?:java|ecma)script/i,Ue={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};Ue.optgroup=Ue.option,Ue.tbody=Ue.tfoot=Ue.colgroup=Ue.caption=Ue.thead,Ue.th=Ue.td;var Qe=/<|&#?\w+;/;!function(){var e=ne.createDocumentFragment(),t=e.appendChild(ne.createElement("div")),n=ne.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),t.appendChild(n),pe.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="<textarea>x</textarea>",pe.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Ye=ne.documentElement,Je=/^key/,Ge=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ke=/^([^.]*)(?:\.(.+)|)/;he.event={global:{},add:function(e,t,n,r,i){var o,s,a,u,c,l,f,d,p,h,g,v=Fe.get(e);if(v)for(n.handler&&(o=n,n=o.handler,i=o.selector),i&&he.find.matchesSelector(Ye,i),n.guid||(n.guid=he.guid++),(u=v.events)||(u=v.events={}),(s=v.handle)||(s=v.handle=function(t){return void 0!==he&&he.event.triggered!==t.type?he.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(Ae)||[""],c=t.length;c--;)a=Ke.exec(t[c])||[],p=g=a[1],h=(a[2]||"").split(".").sort(),p&&(f=he.event.special[p]||{},p=(i?f.delegateType:f.bindType)||p,f=he.event.special[p]||{},l=he.extend({type:p,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&he.expr.match.needsContext.test(i),namespace:h.join(".")},o),(d=u[p])||(d=u[p]=[],d.delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,s)||e.addEventListener&&e.addEventListener(p,s)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),i?d.splice(d.delegateCount++,0,l):d.push(l),he.event.global[p]=!0)},remove:function(e,t,n,r,i){var o,s,a,u,c,l,f,d,p,h,g,v=Fe.hasData(e)&&Fe.get(e);if(v&&(u=v.events)){for(t=(t||"").match(Ae)||[""],c=t.length;c--;)if(a=Ke.exec(t[c])||[],p=g=a[1],h=(a[2]||"").split(".").sort(),p){for(f=he.event.special[p]||{},p=(r?f.delegateType:f.bindType)||p,d=u[p]||[],a=a[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=d.length;o--;)l=d[o],!i&&g!==l.origType||n&&n.guid!==l.guid||a&&!a.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(d.splice(o,1),l.selector&&d.delegateCount--,f.remove&&f.remove.call(e,l));s&&!d.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||he.removeEvent(e,p,v.handle),delete u[p])}else for(p in u)he.event.remove(e,p+t[c],n,r,!0);he.isEmptyObject(u)&&Fe.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,s,a=he.event.fix(e),u=new Array(arguments.length),c=(Fe.get(this,"events")||{})[a.type]||[],l=he.event.special[a.type]||{};for(u[0]=a,t=1;t<arguments.length;t++)u[t]=arguments[t];if(a.delegateTarget=this,!l.preDispatch||!1!==l.preDispatch.call(this,a)){for(s=he.event.handlers.call(this,a,c),t=0;(i=s[t++])&&!a.isPropagationStopped();)for(a.currentTarget=i.elem,n=0;(o=i.handlers[n++])&&!a.isImmediatePropagationStopped();)a.rnamespace&&!a.rnamespace.test(o.namespace)||(a.handleObj=o,a.data=o.data,void 0!==(r=((he.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,u))&&!1===(a.result=r)&&(a.preventDefault(),a.stopPropagation()));return l.postDispatch&&l.postDispatch.call(this,a),a.result}},handlers:function(e,t){var n,r,i,o,s,a=[],u=t.delegateCount,c=e.target;if(u&&c.nodeType&&!("click"===e.type&&e.button>=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||!0!==c.disabled)){for(o=[],s={},n=0;n<u;n++)r=t[n],i=r.selector+" ",void 0===s[i]&&(s[i]=r.needsContext?he(i,this).index(c)>-1:he.find(i,this,null,[c]).length),s[i]&&o.push(r);o.length&&a.push({elem:c,handlers:o})}return c=this,u<t.length&&a.push({elem:c,handlers:t.slice(u)}),a},addProp:function(e,t){Object.defineProperty(he.Event.prototype,e,{enumerable:!0,configurable:!0,get:he.isFunction(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[he.expando]?e:new he.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==S()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===S()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&i(this,"input"))return this.click(),!1},_default:function(e){return i(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},he.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},he.Event=function(e,t){if(!(this instanceof he.Event))return new he.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?w:T,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&he.extend(this,t),this.timeStamp=e&&e.timeStamp||he.now(),this[he.expando]=!0},he.Event.prototype={constructor:he.Event,isDefaultPrevented:T,isPropagationStopped:T,isImmediatePropagationStopped:T,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=w,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=w,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=w,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},he.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&Je.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Ge.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},he.event.addProp),he.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,t){he.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||he.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),he.fn.extend({on:function(e,t,n,r){return E(this,e,t,n,r)},one:function(e,t,n,r){return E(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,he(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=T),this.each(function(){he.event.remove(this,e,n,t)})}});var Ze=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,et=/<script|<style|<link/i,tt=/checked\s*(?:[^=]|=\s*.checked.)/i,nt=/^true\/(.*)/,rt=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;he.extend({htmlPrefilter:function(e){return e.replace(Ze,"<$1></$2>")},clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=he.contains(e.ownerDocument,e);if(!(pe.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||he.isXMLDoc(e)))for(s=y(a),o=y(e),r=0,i=o.length;r<i;r++)A(o[r],s[r]);if(t)if(n)for(o=o||y(e),s=s||y(a),r=0,i=o.length;r<i;r++)j(o[r],s[r]);else j(e,a);return s=y(a,"script"),s.length>0&&x(s,!u&&y(e,"script")),a},cleanData:function(e){for(var t,n,r,i=he.event.special,o=0;void 0!==(n=e[o]);o++)if(qe(n)){if(t=n[Fe.expando]){if(t.events)for(r in t.events)i[r]?he.event.remove(n,r):he.removeEvent(n,r,t.handle);n[Fe.expando]=void 0}n[$e.expando]&&(n[$e.expando]=void 0)}}}),he.fn.extend({detach:function(e){return D(this,e,!0)},remove:function(e){return D(this,e)},text:function(e){return Oe(this,function(e){return void 0===e?he.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return L(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){C(this,e).appendChild(e)}})},prepend:function(){return L(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=C(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return L(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return L(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(he.cleanData(y(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return he.clone(this,e,t)})},html:function(e){return Oe(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!et.test(e)&&!Ue[(Ve.exec(e)||["",""])[1].toLowerCase()]){e=he.htmlPrefilter(e);try{for(;n<r;n++)t=this[n]||{},1===t.nodeType&&(he.cleanData(y(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return L(this,arguments,function(t){var n=this.parentNode;he.inArray(this,e)<0&&(he.cleanData(y(this)),n&&n.replaceChild(t,this))},e)}}),he.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){he.fn[e]=function(e){for(var n,r=[],i=he(e),o=i.length-1,s=0;s<=o;s++)n=s===o?this:this.clone(!0),he(i[s])[t](n),se.apply(r,n.get());return this.pushStack(r)}});var it=/^margin/,ot=new RegExp("^("+Ie+")(?!px)[a-z%]+$","i"),st=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)};!function(){function t(){if(a){a.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",a.innerHTML="",Ye.appendChild(s);var t=e.getComputedStyle(a);n="1%"!==t.top,o="2px"===t.marginLeft,r="4px"===t.width,a.style.marginRight="50%",i="4px"===t.marginRight,Ye.removeChild(s),a=null}}var n,r,i,o,s=ne.createElement("div"),a=ne.createElement("div");a.style&&(a.style.backgroundClip="content-box",a.cloneNode(!0).style.backgroundClip="",pe.clearCloneStyle="content-box"===a.style.backgroundClip,s.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",s.appendChild(a),he.extend(pe,{pixelPosition:function(){return t(),n},boxSizingReliable:function(){return t(),r},pixelMarginRight:function(){return t(),i},reliableMarginLeft:function(){return t(),o}}))}();var at=/^(none|table(?!-c[ea]).+)/,ut=/^--/,ct={position:"absolute",visibility:"hidden",display:"block"},lt={letterSpacing:"0",fontWeight:"400"},ft=["Webkit","Moz","ms"],dt=ne.createElement("div").style;he.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=O(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{float:"cssFloat"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,s,a=he.camelCase(t),u=ut.test(t),c=e.style;if(u||(t=$(a)),s=he.cssHooks[t]||he.cssHooks[a],void 0===n)return s&&"get"in s&&void 0!==(i=s.get(e,!1,r))?i:c[t];o=typeof n,"string"===o&&(i=Re.exec(n))&&i[1]&&(n=g(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(he.cssNumber[a]?"":"px")),pe.clearCloneStyle||""!==n||0!==t.indexOf("background")||(c[t]="inherit"),s&&"set"in s&&void 0===(n=s.set(e,n,r))||(u?c.setProperty(t,n):c[t]=n))}},css:function(e,t,n,r){var i,o,s,a=he.camelCase(t);return ut.test(t)||(t=$(a)),s=he.cssHooks[t]||he.cssHooks[a],s&&"get"in s&&(i=s.get(e,!0,n)),void 0===i&&(i=O(e,t,r)),"normal"===i&&t in lt&&(i=lt[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),he.each(["height","width"],function(e,t){he.cssHooks[t]={get:function(e,n,r){if(n)return!at.test(he.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?I(e,t,r):We(e,ct,function(){return I(e,t,r)})},set:function(e,n,r){var i,o=r&&st(e),s=r&&H(e,t,r,"border-box"===he.css(e,"boxSizing",!1,o),o);return s&&(i=Re.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=he.css(e,t)),P(e,n,s)}}}),he.cssHooks.marginLeft=q(pe.reliableMarginLeft,function(e,t){if(t)return(parseFloat(O(e,"marginLeft"))||e.getBoundingClientRect().left-We(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),he.each({margin:"",padding:"",border:"Width"},function(e,t){he.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+_e[r]+t]=o[r]||o[r-2]||o[0];return i}},it.test(e)||(he.cssHooks[e+t].set=P)}),he.fn.extend({css:function(e,t){return Oe(this,function(e,t,n){var r,i,o={},s=0;if(Array.isArray(t)){for(r=st(e),i=t.length;s<i;s++)o[t[s]]=he.css(e,t[s],!1,r);return o}return void 0!==n?he.style(e,t,n):he.css(e,t)},e,t,arguments.length>1)}}),he.Tween=R,R.prototype={constructor:R,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||he.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(he.cssNumber[n]?"":"px")},cur:function(){var e=R.propHooks[this.prop];return e&&e.get?e.get(this):R.propHooks._default.get(this)},run:function(e){var t,n=R.propHooks[this.prop];return this.options.duration?this.pos=t=he.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):R.propHooks._default.set(this),this}},R.prototype.init.prototype=R.prototype,R.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=he.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){he.fx.step[e.prop]?he.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[he.cssProps[e.prop]]&&!he.cssHooks[e.prop]?e.elem[e.prop]=e.now:he.style(e.elem,e.prop,e.now+e.unit)}}},R.propHooks.scrollTop=R.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},he.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},he.fx=R.prototype.init,he.fx.step={};var pt,ht,gt=/^(?:toggle|show|hide)$/,vt=/queueHooks$/;he.Animation=he.extend(X,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return g(n.elem,e,Re.exec(t),n),n}]},tweener:function(e,t){he.isFunction(e)?(t=e,e=["*"]):e=e.match(Ae);for(var n,r=0,i=e.length;r<i;r++)n=e[r],X.tweeners[n]=X.tweeners[n]||[],X.tweeners[n].unshift(t)},prefilters:[z],prefilter:function(e,t){t?X.prefilters.unshift(e):X.prefilters.push(e)}}),he.speed=function(e,t,n){var r=e&&"object"==typeof e?he.extend({},e):{complete:n||!n&&t||he.isFunction(e)&&e,duration:e,easing:n&&t||t&&!he.isFunction(t)&&t};return he.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in he.fx.speeds?r.duration=he.fx.speeds[r.duration]:r.duration=he.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){he.isFunction(r.old)&&r.old.call(this),r.queue&&he.dequeue(this,r.queue)},r},he.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Me).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=he.isEmptyObject(e),o=he.speed(t,n,r),s=function(){var t=X(this,he.extend({},e),o);(i||Fe.get(this,"finish"))&&t.stop(!0)};return s.finish=s,i||!1===o.queue?this.each(s):this.queue(o.queue,s)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||"fx",[]),this.each(function(){var t=!0,i=null!=e&&e+"queueHooks",o=he.timers,s=Fe.get(this);if(i)s[i]&&s[i].stop&&r(s[i]);else for(i in s)s[i]&&s[i].stop&&vt.test(i)&&r(s[i])
;for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||he.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||"fx"),this.each(function(){var t,n=Fe.get(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=he.timers,s=r?r.length:0;for(n.finish=!0,he.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<s;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),he.each(["toggle","show","hide"],function(e,t){var n=he.fn[t];he.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(W(t,!0),e,r,i)}}),he.each({slideDown:W("show"),slideUp:W("hide"),slideToggle:W("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){he.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),he.timers=[],he.fx.tick=function(){var e,t=0,n=he.timers;for(pt=he.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||he.fx.stop(),pt=void 0},he.fx.timer=function(e){he.timers.push(e),he.fx.start()},he.fx.interval=13,he.fx.start=function(){ht||(ht=!0,_())},he.fx.stop=function(){ht=null},he.fx.speeds={slow:600,fast:200,_default:400},he.fn.delay=function(t,n){return t=he.fx?he.fx.speeds[t]||t:t,n=n||"fx",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e=ne.createElement("input"),t=ne.createElement("select"),n=t.appendChild(ne.createElement("option"));e.type="checkbox",pe.checkOn=""!==e.value,pe.optSelected=n.selected,e=ne.createElement("input"),e.value="t",e.type="radio",pe.radioValue="t"===e.value}();var mt,yt=he.expr.attrHandle;he.fn.extend({attr:function(e,t){return Oe(this,he.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){he.removeAttr(this,e)})}}),he.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===e.getAttribute?he.prop(e,t,n):(1===o&&he.isXMLDoc(e)||(i=he.attrHooks[t.toLowerCase()]||(he.expr.match.bool.test(t)?mt:void 0)),void 0!==n?null===n?void he.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:(r=he.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!pe.radioValue&&"radio"===t&&i(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(Ae);if(i&&1===e.nodeType)for(;n=i[r++];)e.removeAttribute(n)}}),mt={set:function(e,t,n){return!1===t?he.removeAttr(e,n):e.setAttribute(n,n),n}},he.each(he.expr.match.bool.source.match(/\w+/g),function(e,t){var n=yt[t]||he.find.attr;yt[t]=function(e,t,r){var i,o,s=t.toLowerCase();return r||(o=yt[s],yt[s]=i,i=null!=n(e,t,r)?s:null,yt[s]=o),i}});var xt=/^(?:input|select|textarea|button)$/i,bt=/^(?:a|area)$/i;he.fn.extend({prop:function(e,t){return Oe(this,he.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[he.propFix[e]||e]})}}),he.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&he.isXMLDoc(e)||(t=he.propFix[t]||t,i=he.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=he.find.attr(e,"tabindex");return t?parseInt(t,10):xt.test(e.nodeName)||bt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),pe.optSelected||(he.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),he.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){he.propFix[this.toLowerCase()]=this}),he.fn.extend({addClass:function(e){var t,n,r,i,o,s,a,u=0;if(he.isFunction(e))return this.each(function(t){he(this).addClass(e.call(this,t,Q(this)))});if("string"==typeof e&&e)for(t=e.match(Ae)||[];n=this[u++];)if(i=Q(n),r=1===n.nodeType&&" "+U(i)+" "){for(s=0;o=t[s++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");a=U(r),i!==a&&n.setAttribute("class",a)}return this},removeClass:function(e){var t,n,r,i,o,s,a,u=0;if(he.isFunction(e))return this.each(function(t){he(this).removeClass(e.call(this,t,Q(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(Ae)||[];n=this[u++];)if(i=Q(n),r=1===n.nodeType&&" "+U(i)+" "){for(s=0;o=t[s++];)for(;r.indexOf(" "+o+" ")>-1;)r=r.replace(" "+o+" "," ");a=U(r),i!==a&&n.setAttribute("class",a)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):he.isFunction(e)?this.each(function(n){he(this).toggleClass(e.call(this,n,Q(this),t),t)}):this.each(function(){var t,r,i,o;if("string"===n)for(r=0,i=he(this),o=e.match(Ae)||[];t=o[r++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&"boolean"!==n||(t=Q(this),t&&Fe.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":Fe.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+U(Q(n))+" ").indexOf(t)>-1)return!0;return!1}});var wt=/\r/g;he.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=he.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,he(this).val()):e,null==i?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=he.map(i,function(e){return null==e?"":e+""})),(t=he.valHooks[this.type]||he.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=he.valHooks[i.type]||he.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:(n=i.value,"string"==typeof n?n.replace(wt,""):null==n?"":n)}}}),he.extend({valHooks:{option:{get:function(e){var t=he.find.attr(e,"value");return null!=t?t:U(he.text(e))}},select:{get:function(e){var t,n,r,o=e.options,s=e.selectedIndex,a="select-one"===e.type,u=a?null:[],c=a?s+1:o.length;for(r=s<0?c:a?s:0;r<c;r++)if(n=o[r],(n.selected||r===s)&&!n.disabled&&(!n.parentNode.disabled||!i(n.parentNode,"optgroup"))){if(t=he(n).val(),a)return t;u.push(t)}return u},set:function(e,t){for(var n,r,i=e.options,o=he.makeArray(t),s=i.length;s--;)r=i[s],(r.selected=he.inArray(he.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),he.each(["radio","checkbox"],function(){he.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=he.inArray(he(e).val(),t)>-1}},pe.checkOn||(he.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Tt=/^(?:focusinfocus|focusoutblur)$/;he.extend(he.event,{trigger:function(t,n,r,i){var o,s,a,u,c,l,f,d=[r||ne],p=le.call(t,"type")?t.type:t,h=le.call(t,"namespace")?t.namespace.split("."):[];if(s=a=r=r||ne,3!==r.nodeType&&8!==r.nodeType&&!Tt.test(p+he.event.triggered)&&(p.indexOf(".")>-1&&(h=p.split("."),p=h.shift(),h.sort()),c=p.indexOf(":")<0&&"on"+p,t=t[he.expando]?t:new he.Event(p,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=h.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:he.makeArray(n,[t]),f=he.event.special[p]||{},i||!f.trigger||!1!==f.trigger.apply(r,n))){if(!i&&!f.noBubble&&!he.isWindow(r)){for(u=f.delegateType||p,Tt.test(u+p)||(s=s.parentNode);s;s=s.parentNode)d.push(s),a=s;a===(r.ownerDocument||ne)&&d.push(a.defaultView||a.parentWindow||e)}for(o=0;(s=d[o++])&&!t.isPropagationStopped();)t.type=o>1?u:f.bindType||p,l=(Fe.get(s,"events")||{})[t.type]&&Fe.get(s,"handle"),l&&l.apply(s,n),(l=c&&s[c])&&l.apply&&qe(s)&&(t.result=l.apply(s,n),!1===t.result&&t.preventDefault());return t.type=p,i||t.isDefaultPrevented()||f._default&&!1!==f._default.apply(d.pop(),n)||!qe(r)||c&&he.isFunction(r[p])&&!he.isWindow(r)&&(a=r[c],a&&(r[c]=null),he.event.triggered=p,r[p](),he.event.triggered=void 0,a&&(r[c]=a)),t.result}},simulate:function(e,t,n){var r=he.extend(new he.Event,n,{type:e,isSimulated:!0});he.event.trigger(r,null,t)}}),he.fn.extend({trigger:function(e,t){return this.each(function(){he.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return he.event.trigger(e,t,n,!0)}}),he.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){he.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),he.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),pe.focusin="onfocusin"in e,pe.focusin||he.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){he.event.simulate(t,e.target,he.event.fix(e))};he.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=Fe.access(r,t);i||r.addEventListener(e,n,!0),Fe.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=Fe.access(r,t)-1;i?Fe.access(r,t,i):(r.removeEventListener(e,n,!0),Fe.remove(r,t))}}});var St=e.location,Et=he.now(),Ct=/\?/;he.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||he.error("Invalid XML: "+t),n};var kt=/\[\]$/,Nt=/\r?\n/g,jt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;he.param=function(e,t){var n,r=[],i=function(e,t){var n=he.isFunction(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!he.isPlainObject(e))he.each(e,function(){i(this.name,this.value)});else for(n in e)Y(n,e[n],t,i);return r.join("&")},he.fn.extend({serialize:function(){return he.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=he.prop(this,"elements");return e?he.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!he(this).is(":disabled")&&At.test(this.nodeName)&&!jt.test(e)&&(this.checked||!ze.test(e))}).map(function(e,t){var n=he(this).val();return null==n?null:Array.isArray(n)?he.map(n,function(e){return{name:t.name,value:e.replace(Nt,"\r\n")}}):{name:t.name,value:n.replace(Nt,"\r\n")}}).get()}});var Lt=/%20/g,Dt=/#.*$/,Ot=/([?&])_=[^&]*/,qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ft=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,$t=/^(?:GET|HEAD)$/,Pt=/^\/\//,Ht={},It={},Rt="*/".concat("*"),_t=ne.createElement("a");_t.href=St.href,he.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:St.href,type:"GET",isLocal:Ft.test(St.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":he.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?K(K(e,he.ajaxSettings),t):K(he.ajaxSettings,e)},ajaxPrefilter:J(Ht),ajaxTransport:J(It),ajax:function(t,n){function r(t,n,r,a){var c,d,p,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),i=void 0,s=a||"",S.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(b=Z(h,S,r)),b=ee(h,b,S,c),c?(h.ifModified&&(w=S.getResponseHeader("Last-Modified"),w&&(he.lastModified[o]=w),(w=S.getResponseHeader("etag"))&&(he.etag[o]=w)),204===t||"HEAD"===h.type?T="nocontent":304===t?T="notmodified":(T=b.state,d=b.data,p=b.error,c=!p)):(p=T,!t&&T||(T="error",t<0&&(t=0))),S.status=t,S.statusText=(n||T)+"",c?m.resolveWith(g,[d,T,S]):m.rejectWith(g,[S,T,p]),S.statusCode(x),x=void 0,f&&v.trigger(c?"ajaxSuccess":"ajaxError",[S,h,c?d:p]),y.fireWith(g,[S,T]),f&&(v.trigger("ajaxComplete",[S,h]),--he.active||he.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,s,a,u,c,l,f,d,p,h=he.ajaxSetup({},n),g=h.context||h,v=h.context&&(g.nodeType||g.jquery)?he(g):he.event,m=he.Deferred(),y=he.Callbacks("once memory"),x=h.statusCode||{},b={},w={},T="canceled",S={readyState:0,getResponseHeader:function(e){var t;if(l){if(!a)for(a={};t=qt.exec(s);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return l?s:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==l&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)S.always(e[S.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||T;return i&&i.abort(t),r(0,t),this}};if(m.promise(S),h.url=((t||h.url||St.href)+"").replace(Pt,St.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(Ae)||[""],null==h.crossDomain){c=ne.createElement("a");try{c.href=h.url,c.href=c.href,h.crossDomain=_t.protocol+"//"+_t.host!=c.protocol+"//"+c.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=he.param(h.data,h.traditional)),G(Ht,h,n,S),l)return S;f=he.event&&h.global,f&&0==he.active++&&he.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!$t.test(h.type),o=h.url.replace(Dt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(Lt,"+")):(p=h.url.slice(o.length),h.data&&(o+=(Ct.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ot,"$1"),p=(Ct.test(o)?"&":"?")+"_="+Et+++p),h.url=o+p),h.ifModified&&(he.lastModified[o]&&S.setRequestHeader("If-Modified-Since",he.lastModified[o]),he.etag[o]&&S.setRequestHeader("If-None-Match",he.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&S.setRequestHeader("Content-Type",h.contentType),S.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+Rt+"; q=0.01":""):h.accepts["*"]);for(d in h.headers)S.setRequestHeader(d,h.headers[d]);if(h.beforeSend&&(!1===h.beforeSend.call(g,S,h)||l))return S.abort();if(T="abort",y.add(h.complete),S.done(h.success),S.fail(h.error),i=G(It,h,n,S)){if(S.readyState=1,f&&v.trigger("ajaxSend",[S,h]),l)return S;h.async&&h.timeout>0&&(u=e.setTimeout(function(){S.abort("timeout")},h.timeout));try{l=!1,i.send(b,r)}catch(e){if(l)throw e;r(-1,e)}}else r(-1,"No Transport");return S},getJSON:function(e,t,n){return he.get(e,t,n,"json")},getScript:function(e,t){return he.get(e,void 0,t,"script")}}),he.each(["get","post"],function(e,t){he[t]=function(e,n,r,i){return he.isFunction(n)&&(i=i||r,r=n,n=void 0),he.ajax(he.extend({url:e,type:t,dataType:i,data:n,success:r},he.isPlainObject(e)&&e))}}),he._evalUrl=function(e){return he.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},he.fn.extend({wrapAll:function(e){var t;return this[0]&&(he.isFunction(e)&&(e=e.call(this[0])),t=he(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return he.isFunction(e)?this.each(function(t){he(this).wrapInner(e.call(this,t))}):this.each(function(){var t=he(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=he.isFunction(e);return this.each(function(n){he(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){he(this).replaceWith(this.childNodes)}),this}}),he.expr.pseudos.hidden=function(e){return!he.expr.pseudos.visible(e)},he.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},he.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Mt={0:200,1223:204},Wt=he.ajaxSettings.xhr();pe.cors=!!Wt&&"withCredentials"in Wt,pe.ajax=Wt=!!Wt,he.ajaxTransport(function(t){var n,r;if(pe.cors||Wt&&!t.crossDomain)return{send:function(i,o){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(s in i)a.setRequestHeader(s,i[s]);n=function(e){return function(){n&&(n=r=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?o(0,"error"):o(a.status,a.statusText):o(Mt[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=n(),r=a.onerror=n("error"),void 0!==a.onabort?a.onabort=r:a.onreadystatechange=function(){4===a.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{a.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),he.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),he.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return he.globalEval(e),e}}}),he.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),he.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,i){t=he("<script>").prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&i("error"===e.type?404:200,e.type)}),ne.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Bt=[],zt=/(=)\?(?=&|$)|\?\?/;he.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Bt.pop()||he.expando+"_"+Et++;return this[e]=!0,e}}),he.ajaxPrefilter("json jsonp",function(t,n,r){var i,o,s,a=!1!==t.jsonp&&(zt.test(t.url)?"url":"string"==typeof t.data&&0===(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&zt.test(t.data)&&"data");if(a||"jsonp"===t.dataTypes[0])return i=t.jsonpCallback=he.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,a?t[a]=t[a].replace(zt,"$1"+i):!1!==t.jsonp&&(t.url+=(Ct.test(t.url)?"&":"?")+t.jsonp+"="+i),t.converters["script json"]=function(){return s||he.error(i+" was not called"),s[0]},t.dataTypes[0]="json",o=e[i],e[i]=function(){s=arguments},r.always(function(){void 0===o?he(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,Bt.push(i)),s&&he.isFunction(o)&&o(s[0]),s=o=void 0}),"script"}),pe.createHTMLDocument=function(){var e=ne.implementation.createHTMLDocument("").body;return e.innerHTML="<form></form><form></form>",2===e.childNodes.length}(),he.parseHTML=function(e,t,n){if("string"!=typeof e)return[];"boolean"==typeof t&&(n=t,t=!1);var r,i,o;return t||(pe.createHTMLDocument?(t=ne.implementation.createHTMLDocument(""),r=t.createElement("base"),r.href=ne.location.href,t.head.appendChild(r)):t=ne),i=Se.exec(e),o=!n&&[],i?[t.createElement(i[1])]:(i=b([e],t,o),o&&o.length&&he(o).remove(),he.merge([],i.childNodes))},he.fn.load=function(e,t,n){var r,i,o,s=this,a=e.indexOf(" ");return a>-1&&(r=U(e.slice(a)),e=e.slice(0,a)),he.isFunction(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),s.length>0&&he.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,s.html(r?he("<div>").append(he.parseHTML(e)).find(r):e)}).always(n&&function(e,t){s.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},he.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){he.fn[t]=function(e){return this.on(t,e)}}),he.expr.pseudos.animated=function(e){return he.grep(he.timers,function(t){return e===t.elem}).length},he.offset={setOffset:function(e,t,n){var r,i,o,s,a,u,c,l=he.css(e,"position"),f=he(e),d={};"static"===l&&(e.style.position="relative"),a=f.offset(),o=he.css(e,"top"),u=he.css(e,"left"),c=("absolute"===l||"fixed"===l)&&(o+u).indexOf("auto")>-1,c?(r=f.position(),s=r.top,i=r.left):(s=parseFloat(o)||0,i=parseFloat(u)||0),he.isFunction(t)&&(t=t.call(e,n,he.extend({},a))),null!=t.top&&(d.top=t.top-a.top+s),null!=t.left&&(d.left=t.left-a.left+i),"using"in t?t.using.call(e,d):f.css(d)}},he.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){he.offset.setOffset(this,e,t)});var t,n,r,i,o=this[0];if(o)return o.getClientRects().length?(r=o.getBoundingClientRect(),t=o.ownerDocument,n=t.documentElement,i=t.defaultView,{top:r.top+i.pageYOffset-n.clientTop,left:r.left+i.pageXOffset-n.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n=this[0],r={top:0,left:0};return"fixed"===he.css(n,"position")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),i(e[0],"html")||(r=e.offset()),r={top:r.top+he.css(e[0],"borderTopWidth",!0),left:r.left+he.css(e[0],"borderLeftWidth",!0)}),{top:t.top-r.top-he.css(n,"marginTop",!0),left:t.left-r.left-he.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===he.css(e,"position");)e=e.offsetParent;return e||Ye})}}),he.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n="pageYOffset"===t;he.fn[e]=function(r){return Oe(this,function(e,r,i){var o;if(he.isWindow(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i},e,r,arguments.length)}}),he.each(["top","left"],function(e,t){he.cssHooks[t]=q(pe.pixelPosition,function(e,n){if(n)return n=O(e,t),ot.test(n)?he(e).position()[t]+"px":n})}),he.each({Height:"height",Width:"width"},function(e,t){he.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){he.fn[r]=function(i,o){var s=arguments.length&&(n||"boolean"!=typeof i),a=n||(!0===i||!0===o?"margin":"border");return Oe(this,function(t,n,i){var o;return he.isWindow(t)?0===r.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===i?he.css(t,n,a):he.style(t,n,i,a)},t,s?i:void 0,s)}})}),he.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),he.holdReady=function(e){e?he.readyWait++:he.ready(!0)},he.isArray=Array.isArray,he.parseJSON=JSON.parse,he.nodeName=i,"function"==typeof define&&define.amd&&define("jquery",[],function(){return he});var Vt=e.jQuery,Xt=e.$;return he.noConflict=function(t){return e.$===he&&(e.$=Xt),t&&e.jQuery===he&&(e.jQuery=Vt),he},t||(e.jQuery=e.$=he),he}),jQuery.extend({highlight:function(e,t,n,r){if(3===e.nodeType){var i=e.data.match(t);if(i){var o=document.createElement(n||"span");o.className=r||"highlight";var s=e.splitText(i.index);s.splitText(i[0].length);var a=s.cloneNode(!0);return o.appendChild(a),s.parentNode.replaceChild(o,s),1}}else if(1===e.nodeType&&e.childNodes&&!/(script|style)/i.test(e.tagName)&&(e.tagName!==n.toUpperCase()||e.className!==r))for(var u=0;u<e.childNodes.length;u++)u+=jQuery.highlight(e.childNodes[u],t,n,r);return 0}}),jQuery.fn.unhighlight=function(e){var t={className:"highlight",element:"span"};return jQuery.extend(t,e),this.find(t.element+"."+t.className).each(function(){var e=this.parentNode;e.replaceChild(this.firstChild,this),e.normalize()}).end()},jQuery.fn.highlight=function(e,t){var n={className:"highlight",element:"span",caseSensitive:!1,wordsOnly:!1};if(jQuery.extend(n,t),e.constructor===String&&(e=[e]),e=jQuery.grep(e,function(e,t){return""!=e}),e=jQuery.map(e,function(e,t){return e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")}),0==e.length)return this;var r=n.caseSensitive?"":"i",i="("+e.join("|")+")";n.wordsOnly&&(i="\\b"+i+"\\b");var o=new RegExp(i,r);return this.each(function(){jQuery.highlight(this,o,n.element,n.className)})},function(){var e=function(t){var n=new e.Index;return n.pipeline.add(e.trimmer,e.stopWordFilter,e.stemmer),t&&t.call(n,n),n};e.version="0.5.7",e.utils={},e.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),e.EventEmitter=function(){this.events={}},e.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},e.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);this.events[e].splice(n,1),this.events[e].length||delete this.events[e]}},e.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)})}},e.EventEmitter.prototype.hasHandler=function(e){return e in this.events},e.tokenizer=function(e){if(!arguments.length||null==e||void 0==e)return[];if(Array.isArray(e))return e.map(function(e){return e.toLowerCase()});for(var t=e.toString().replace(/^\s+/,""),n=t.length-1;n>=0;n--)if(/\S/.test(t.charAt(n))){t=t.substring(0,n+1);break}return t.split(/(?:\s+|\-)/).filter(function(e){return!!e}).map(function(e){return e.toLowerCase()})},e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions={},e.Pipeline.registerFunction=function(t,n){n in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+n),t.label=n,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){t.label&&t.label in this.registeredFunctions||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var n=new e.Pipeline;return t.forEach(function(t){var r=e.Pipeline.registeredFunctions[t];if(!r)throw new Error("Cannot load un-registered function: "+t);n.add(r)}),n},e.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._stack.push(t)},this)},e.Pipeline.prototype.after=function(t,n){e.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(t)+1;this._stack.splice(r,0,n)},e.Pipeline.prototype.before=function(t,n){e.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(t);this._stack.splice(r,0,n)},e.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);this._stack.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,r=this._stack.length,i=0;i<n;i++){for(var o=e[i],s=0;s<r&&void 0!==(o=this._stack[s](o,i,e));s++);void 0!==o&&t.push(o)}return t},e.Pipeline.prototype.reset=function(){this._stack=[]},e.Pipeline.prototype.toJSON=function(){return this._stack.map(function(t){return e.Pipeline.warnIfFunctionNotRegistered(t),t.label})},e.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},e.Vector.Node=function(e,t,n){this.idx=e,this.val=t,this.next=n},e.Vector.prototype.insert=function(t,n){var r=this.list;if(!r)return this.list=new e.Vector.Node(t,n,r),this.length++;for(var i=r,o=r.next;void 0!=o;){if(t<o.idx)return i.next=new e.Vector.Node(t,n,o),this.length++;i=o,o=o.next}return i.next=new e.Vector.Node(t,n,o),this.length++},e.Vector.prototype.magnitude=function(){if(this._magniture)return this._magnitude;for(var e,t=this.list,n=0;t;)e=t.val,n+=e*e,t=t.next;return this._magnitude=Math.sqrt(n)},e.Vector.prototype.dot=function(e){for(var t=this.list,n=e.list,r=0;t&&n;)t.idx<n.idx?t=t.next:t.idx>n.idx?n=n.next:(r+=t.val*n.val,t=t.next,n=n.next);return r},e.Vector.prototype.similarity=function(e){return this.dot(e)/(this.magnitude()*e.magnitude())},e.SortedSet=function(){this.length=0,this.elements=[]},e.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},e.SortedSet.prototype.add=function(){Array.prototype.slice.call(arguments).forEach(function(e){~this.indexOf(e)||this.elements.splice(this.locationFor(e),0,e)},this),this.length=this.elements.length},e.SortedSet.prototype.toArray=function(){return this.elements.slice()},e.SortedSet.prototype.map=function(e,t){return this.elements.map(e,t)},e.SortedSet.prototype.forEach=function(e,t){return this.elements.forEach(e,t)},e.SortedSet.prototype.indexOf=function(e,t,n){var t=t||0,n=n||this.elements.length,r=n-t,i=t+Math.floor(r/2),o=this.elements[i];return r<=1?o===e?i:-1:o<e?this.indexOf(e,i,n):o>e?this.indexOf(e,t,i):o===e?i:void 0},e.SortedSet.prototype.locationFor=function(e,t,n){var t=t||0,n=n||this.elements.length,r=n-t,i=t+Math.floor(r/2),o=this.elements[i];if(r<=1){if(o>e)return i;if(o<e)return i+1}return o<e?this.locationFor(e,i,n):o>e?this.locationFor(e,t,i):void 0},e.SortedSet.prototype.intersect=function(t){for(var n=new e.SortedSet,r=0,i=0,o=this.length,s=t.length,a=this.elements,u=t.elements;;){if(r>o-1||i>s-1)break;a[r]!==u[i]?a[r]<u[i]?r++:a[r]>u[i]&&i++:(n.add(a[r]),r++,i++)}return n},e.SortedSet.prototype.clone=function(){var t=new e.SortedSet;return t.elements=this.toArray(),t.length=t.elements.length,t},e.SortedSet.prototype.union=function(e){var t,n,r;return this.length>=e.length?(t=this,n=e):(t=e,n=this),r=t.clone(),r.add.apply(r,n.toArray()),r},e.SortedSet.prototype.toJSON=function(){return this.toArray()},e.Index=function(){this._fields=[],this._ref="id",this.pipeline=new e.Pipeline,this.documentStore=new e.Store,this.tokenStore=new e.TokenStore,this.corpusTokens=new e.SortedSet,this.eventEmitter=new e.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},e.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},e.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},e.Index.load=function(t){t.version!==e.version&&e.utils.warn("version mismatch: current "+e.version+" importing "+t.version);var n=new this;return n._fields=t.fields,n._ref=t.ref,n.documentStore=e.Store.load(t.documentStore),n.tokenStore=e.TokenStore.load(t.tokenStore),n.corpusTokens=e.SortedSet.load(t.corpusTokens),n.pipeline=e.Pipeline.load(t.pipeline),n},e.Index.prototype.field=function(e,t){var t=t||{},n={name:e,boost:t.boost||1};return this._fields.push(n),this},e.Index.prototype.ref=function(e){return this._ref=e,this},e.Index.prototype.add=function(t,n){var r={},i=new e.SortedSet,o=t[this._ref],n=void 0===n||n;this._fields.forEach(function(n){var o=this.pipeline.run(e.tokenizer(t[n.name]));r[n.name]=o,e.SortedSet.prototype.add.apply(i,o)},this),this.documentStore.set(o,i),e.SortedSet.prototype.add.apply(this.corpusTokens,i.toArray());for(var s=0;s<i.length;s++){var a=i.elements[s],u=this._fields.reduce(function(e,t){var n=r[t.name].length;return n?e+r[t.name].filter(function(e){return e===a}).length/n*t.boost:e},0);this.tokenStore.add(a,{ref:o,tf:u})}n&&this.eventEmitter.emit("add",t,this)},e.Index.prototype.remove=function(e,t){var n=e[this._ref],t=void 0===t||t;if(this.documentStore.has(n)){var r=this.documentStore.get(n);this.documentStore.remove(n),r.forEach(function(e){this.tokenStore.remove(e,n)},this),t&&this.eventEmitter.emit("remove",e,this)}},e.Index.prototype.update=function(e,t){var t=void 0===t||t;this.remove(e,!1),this.add(e,!1),t&&this.eventEmitter.emit("update",e,this)},e.Index.prototype.idf=function(e){var t="@"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,t))return this._idfCache[t];var n=this.tokenStore.count(e),r=1;return n>0&&(r=1+Math.log(this.tokenStore.length/n)),this._idfCache[t]=r},e.Index.prototype.search=function(t){
var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduce(function(e,t){return e+t.boost},0);return n.some(function(e){return this.tokenStore.has(e)},this)?(n.forEach(function(t,n,s){var a=1/s.length*this._fields.length*o,u=this,c=this.tokenStore.expand(t).reduce(function(n,i){var o=u.corpusTokens.indexOf(i),s=u.idf(i),c=1,l=new e.SortedSet;if(i!==t){var f=Math.max(3,i.length-t.length);c=1/Math.log(f)}return o>-1&&r.insert(o,a*s*c),Object.keys(u.tokenStore.get(i)).forEach(function(e){l.add(e)}),n.union(l)},new e.SortedSet);i.push(c)},this),i.reduce(function(e,t){return e.intersect(t)}).map(function(e){return{ref:e,score:r.similarity(this.documentVector(e))}},this).sort(function(e,t){return t.score-e.score})):[]},e.Index.prototype.documentVector=function(t){for(var n=this.documentStore.get(t),r=n.length,i=new e.Vector,o=0;o<r;o++){var s=n.elements[o],a=this.tokenStore.get(s)[t].tf,u=this.idf(s);i.insert(this.corpusTokens.indexOf(s),a*u)}return i},e.Index.prototype.toJSON=function(){return{version:e.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},e.Index.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},e.Store=function(){this.store={},this.length=0},e.Store.load=function(t){var n=new this;return n.length=t.length,n.store=Object.keys(t.store).reduce(function(n,r){return n[r]=e.SortedSet.load(t.store[r]),n},{}),n},e.Store.prototype.set=function(e,t){this.has(e)||this.length++,this.store[e]=t},e.Store.prototype.get=function(e){return this.store[e]},e.Store.prototype.has=function(e){return e in this.store},e.Store.prototype.remove=function(e){this.has(e)&&(delete this.store[e],this.length--)},e.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},e.stemmer=function(){var e={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},t={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[aeiouy]",r="[^aeiou][^aeiouy]*",i=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),o=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),s=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*([aeiouy][aeiou]*)?$"),a=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy]"),u=/^(.+?)(ss|i)es$/,c=/^(.+?)([^s])s$/,l=/^(.+?)eed$/,f=/^(.+?)(ed|ing)$/,d=/.$/,p=/(at|bl|iz)$/,h=new RegExp("([^aeiouylsz])\\1$"),g=new RegExp("^"+r+n+"[^aeiouwxy]$"),v=/^(.+?[^aeiou])y$/,m=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,y=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,x=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,b=/^(.+?)(s|t)(ion)$/,w=/^(.+?)e$/,T=/ll$/,S=new RegExp("^"+r+n+"[^aeiouwxy]$");return function(n){var r,E,C,k,N,j,A;if(n.length<3)return n;if(C=n.substr(0,1),"y"==C&&(n=C.toUpperCase()+n.substr(1)),k=u,N=c,k.test(n)?n=n.replace(k,"$1$2"):N.test(n)&&(n=n.replace(N,"$1$2")),k=l,N=f,k.test(n)){var L=k.exec(n);k=i,k.test(L[1])&&(k=d,n=n.replace(k,""))}else if(N.test(n)){var L=N.exec(n);r=L[1],N=a,N.test(r)&&(n=r,N=p,j=h,A=g,N.test(n)?n+="e":j.test(n)?(k=d,n=n.replace(k,"")):A.test(n)&&(n+="e"))}if(k=v,k.test(n)){var L=k.exec(n);r=L[1],n=r+"i"}if(k=m,k.test(n)){var L=k.exec(n);r=L[1],E=L[2],k=i,k.test(r)&&(n=r+e[E])}if(k=y,k.test(n)){var L=k.exec(n);r=L[1],E=L[2],k=i,k.test(r)&&(n=r+t[E])}if(k=x,N=b,k.test(n)){var L=k.exec(n);r=L[1],k=o,k.test(r)&&(n=r)}else if(N.test(n)){var L=N.exec(n);r=L[1]+L[2],N=o,N.test(r)&&(n=r)}if(k=w,k.test(n)){var L=k.exec(n);r=L[1],k=o,N=s,j=S,(k.test(r)||N.test(r)&&!j.test(r))&&(n=r)}return k=T,N=o,k.test(n)&&N.test(n)&&(k=d,n=n.replace(k,"")),"y"==C&&(n=C.toLowerCase()+n.substr(1)),n}}(),e.Pipeline.registerFunction(e.stemmer,"stemmer"),e.stopWordFilter=function(t){if(-1===e.stopWordFilter.stopWords.indexOf(t))return t},e.stopWordFilter.stopWords=new e.SortedSet,e.stopWordFilter.stopWords.length=119,e.stopWordFilter.stopWords.elements=["","a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"],e.Pipeline.registerFunction(e.stopWordFilter,"stopWordFilter"),e.trimmer=function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")},e.Pipeline.registerFunction(e.trimmer,"trimmer"),e.TokenStore=function(){this.root={docs:{}},this.length=0},e.TokenStore.load=function(e){var t=new this;return t.root=e.root,t.length=e.length,t},e.TokenStore.prototype.add=function(e,t,n){var n=n||this.root,r=e[0],i=e.slice(1);return r in n||(n[r]={docs:{}}),0===i.length?(n[r].docs[t.ref]=t,void(this.length+=1)):this.add(i,t,n[r])},e.TokenStore.prototype.has=function(e){if(!e)return!1;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return!1;t=t[e[n]]}return!0},e.TokenStore.prototype.getNode=function(e){if(!e)return{};for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return{};t=t[e[n]]}return t},e.TokenStore.prototype.get=function(e,t){return this.getNode(e,t).docs||{}},e.TokenStore.prototype.count=function(e,t){return Object.keys(this.get(e,t)).length},e.TokenStore.prototype.remove=function(e,t){if(e){for(var n=this.root,r=0;r<e.length;r++){if(!(e[r]in n))return;n=n[e[r]]}delete n.docs[t]}},e.TokenStore.prototype.expand=function(e,t){var n=this.getNode(e),r=n.docs||{},t=t||[];return Object.keys(r).length&&t.push(e),Object.keys(n).forEach(function(n){"docs"!==n&&t.concat(this.expand(e+n,t))},this),t},e.TokenStore.prototype.toJSON=function(){return{root:this.root,length:this.length}},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.lunr=t()}(this,function(){return e})}(),function(){function e(){}function t(e,t){for(var n=e.length;n--;)if(e[n].listener===t)return n;return-1}function n(e){return function(){return this[e].apply(this,arguments)}}var r=e.prototype,i=this,o=i.EventEmitter;r.getListeners=function(e){var t,n,r=this._getEvents();if("object"==typeof e){t={};for(n in r)r.hasOwnProperty(n)&&e.test(n)&&(t[n]=r[n])}else t=r[e]||(r[e]=[]);return t},r.flattenListeners=function(e){var t,n=[];for(t=0;e.length>t;t+=1)n.push(e[t].listener);return n},r.getListenersAsObject=function(e){var t,n=this.getListeners(e);return n instanceof Array&&(t={},t[e]=n),t||n},r.addListener=function(e,n){var r,i=this.getListenersAsObject(e),o="object"==typeof n;for(r in i)i.hasOwnProperty(r)&&-1===t(i[r],n)&&i[r].push(o?n:{listener:n,once:!1});return this},r.on=n("addListener"),r.addOnceListener=function(e,t){return this.addListener(e,{listener:t,once:!0})},r.once=n("addOnceListener"),r.defineEvent=function(e){return this.getListeners(e),this},r.defineEvents=function(e){for(var t=0;e.length>t;t+=1)this.defineEvent(e[t]);return this},r.removeListener=function(e,n){var r,i,o=this.getListenersAsObject(e);for(i in o)o.hasOwnProperty(i)&&-1!==(r=t(o[i],n))&&o[i].splice(r,1);return this},r.off=n("removeListener"),r.addListeners=function(e,t){return this.manipulateListeners(!1,e,t)},r.removeListeners=function(e,t){return this.manipulateListeners(!0,e,t)},r.manipulateListeners=function(e,t,n){var r,i,o=e?this.removeListener:this.addListener,s=e?this.removeListeners:this.addListeners;if("object"!=typeof t||t instanceof RegExp)for(r=n.length;r--;)o.call(this,t,n[r]);else for(r in t)t.hasOwnProperty(r)&&(i=t[r])&&("function"==typeof i?o.call(this,r,i):s.call(this,r,i));return this},r.removeEvent=function(e){var t,n=typeof e,r=this._getEvents();if("string"===n)delete r[e];else if("object"===n)for(t in r)r.hasOwnProperty(t)&&e.test(t)&&delete r[t];else delete this._events;return this},r.removeAllListeners=n("removeEvent"),r.emitEvent=function(e,t){var n,r,i,o=this.getListenersAsObject(e);for(i in o)if(o.hasOwnProperty(i))for(r=o[i].length;r--;)n=o[i][r],!0===n.once&&this.removeListener(e,n.listener),n.listener.apply(this,t||[])===this._getOnceReturnValue()&&this.removeListener(e,n.listener);return this},r.trigger=n("emitEvent"),r.emit=function(e){var t=Array.prototype.slice.call(arguments,1);return this.emitEvent(e,t)},r.setOnceReturnValue=function(e){return this._onceReturnValue=e,this},r._getOnceReturnValue=function(){return!this.hasOwnProperty("_onceReturnValue")||this._onceReturnValue},r._getEvents=function(){return this._events||(this._events={})},e.noConflict=function(){return i.EventEmitter=o,e},"function"==typeof define&&define.amd?define("eventEmitter/EventEmitter",[],function(){return e}):"object"==typeof module&&module.exports?module.exports=e:this.EventEmitter=e}.call(this),function(e){function t(t){var n=e.event;return n.target=n.target||n.srcElement||t,n}var n=document.documentElement,r=function(){};n.addEventListener?r=function(e,t,n){e.addEventListener(t,n,!1)}:n.attachEvent&&(r=function(e,n,r){e[n+r]=r.handleEvent?function(){var n=t(e);r.handleEvent.call(r,n)}:function(){var n=t(e);r.call(e,n)},e.attachEvent("on"+n,e[n+r])});var i=function(){};n.removeEventListener?i=function(e,t,n){e.removeEventListener(t,n,!1)}:n.detachEvent&&(i=function(e,t,n){e.detachEvent("on"+t,e[t+n]);try{delete e[t+n]}catch(r){e[t+n]=void 0}});var o={bind:r,unbind:i};"function"==typeof define&&define.amd?define("eventie/eventie",o):e.eventie=o}(this),function(e,t){"function"==typeof define&&define.amd?define(["eventEmitter/EventEmitter","eventie/eventie"],function(n,r){return t(e,n,r)}):"object"==typeof exports?module.exports=t(e,require("wolfy87-eventemitter"),require("eventie")):e.imagesLoaded=t(e,e.EventEmitter,e.eventie)}(window,function(e,t,n){function r(e,t){for(var n in t)e[n]=t[n];return e}function i(e){return"[object Array]"===d.call(e)}function o(e){var t=[];if(i(e))t=e;else if("number"==typeof e.length)for(var n=0,r=e.length;r>n;n++)t.push(e[n]);else t.push(e);return t}function s(e,t,n){if(!(this instanceof s))return new s(e,t);"string"==typeof e&&(e=document.querySelectorAll(e)),this.elements=o(e),this.options=r({},this.options),"function"==typeof t?n=t:r(this.options,t),n&&this.on("always",n),this.getImages(),c&&(this.jqDeferred=new c.Deferred);var i=this;setTimeout(function(){i.check()})}function a(e){this.img=e}function u(e){this.src=e,p[e]=this}var c=e.jQuery,l=e.console,f=void 0!==l,d=Object.prototype.toString;s.prototype=new t,s.prototype.options={},s.prototype.getImages=function(){this.images=[];for(var e=0,t=this.elements.length;t>e;e++){var n=this.elements[e];"IMG"===n.nodeName&&this.addImage(n);var r=n.nodeType;if(r&&(1===r||9===r||11===r))for(var i=n.querySelectorAll("img"),o=0,s=i.length;s>o;o++){var a=i[o];this.addImage(a)}}},s.prototype.addImage=function(e){var t=new a(e);this.images.push(t)},s.prototype.check=function(){function e(e,i){return t.options.debug&&f&&l.log("confirm",e,i),t.progress(e),n++,n===r&&t.complete(),!0}var t=this,n=0,r=this.images.length;if(this.hasAnyBroken=!1,!r)return void this.complete();for(var i=0;r>i;i++){var o=this.images[i];o.on("confirm",e),o.check()}},s.prototype.progress=function(e){this.hasAnyBroken=this.hasAnyBroken||!e.isLoaded;var t=this;setTimeout(function(){t.emit("progress",t,e),t.jqDeferred&&t.jqDeferred.notify&&t.jqDeferred.notify(t,e)})},s.prototype.complete=function(){var e=this.hasAnyBroken?"fail":"done";this.isComplete=!0;var t=this;setTimeout(function(){if(t.emit(e,t),t.emit("always",t),t.jqDeferred){var n=t.hasAnyBroken?"reject":"resolve";t.jqDeferred[n](t)}})},c&&(c.fn.imagesLoaded=function(e,t){return new s(this,e,t).jqDeferred.promise(c(this))}),a.prototype=new t,a.prototype.check=function(){var e=p[this.img.src]||new u(this.img.src);if(e.isConfirmed)return void this.confirm(e.isLoaded,"cached was confirmed");if(this.img.complete&&void 0!==this.img.naturalWidth)return void this.confirm(0!==this.img.naturalWidth,"naturalWidth");var t=this;e.on("confirm",function(e,n){return t.confirm(e.isLoaded,n),!0}),e.check()},a.prototype.confirm=function(e,t){this.isLoaded=e,this.emit("confirm",this,t)};var p={};return u.prototype=new t,u.prototype.check=function(){if(!this.isChecked){var e=new Image;n.bind(e,"load",this),n.bind(e,"error",this),e.src=this.src,this.isChecked=!0}},u.prototype.handleEvent=function(e){var t="on"+e.type;this[t]&&this[t](e)},u.prototype.onload=function(e){this.confirm(!0,"onload"),this.unbindProxyEvents(e)},u.prototype.onerror=function(e){this.confirm(!1,"onerror"),this.unbindProxyEvents(e)},u.prototype.confirm=function(e,t){this.isConfirmed=!0,this.isLoaded=e,this.emit("confirm",this,t)},u.prototype.unbindProxyEvents=function(e){n.unbind(e.target,"load",this),n.unbind(e.target,"error",this)},s}),function(){if("ontouchstart"in window){var e,t,n,r,i,o,s={};e=function(e,t){return Math.abs(e[0]-t[0])>5||Math.abs(e[1]-t[1])>5},t=function(e){this.startXY=[e.touches[0].clientX,e.touches[0].clientY],this.threshold=!1},n=function(t){if(this.threshold)return!1;this.threshold=e(this.startXY,[t.touches[0].clientX,t.touches[0].clientY])},r=function(t){if(!this.threshold&&!e(this.startXY,[t.changedTouches[0].clientX,t.changedTouches[0].clientY])){var n=t.changedTouches[0],r=document.createEvent("MouseEvents");r.initMouseEvent("click",!0,!0,window,0,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),r.simulated=!0,t.target.dispatchEvent(r)}},i=function(e){var t=Date.now(),n=t-s.time,r=e.clientX,i=e.clientY,a=[Math.abs(s.x-r),Math.abs(s.y-i)],u=o(e.target,"A")||e.target,c=u.nodeName,l="A"===c,f=window.navigator.standalone&&l&&e.target.getAttribute("href");if(s.time=t,s.x=r,s.y=i,(!e.simulated&&(n<500||n<1500&&a[0]<50&&a[1]<50)||f)&&(e.preventDefault(),e.stopPropagation(),!f))return!1;f&&(window.location=u.getAttribute("href")),u&&u.classList&&(u.classList.add("energize-focus"),window.setTimeout(function(){u.classList.remove("energize-focus")},150))},o=function(e,t){for(var n=e;n!==document.body;){if(!n||n.nodeName===t)return n;n=n.parentNode}return null},document.addEventListener("touchstart",t,!1),document.addEventListener("touchmove",n,!1),document.addEventListener("touchend",r,!1),document.addEventListener("click",i,!0)}}(),function(){"use strict";function e(e){if(e&&""!==e){$(".lang-selector a").removeClass("active"),$(".lang-selector a[data-language-name='"+e+"']").addClass("active");for(var t=0;t<a.length;t++)$(".highlight.tab-"+a[t]).hide(),$(".lang-specific."+a[t]).hide();$(".highlight.tab-"+e).show(),$(".lang-specific."+e).show(),window.recacheHeights(),$(window.location.hash).get(0)&&$(window.location.hash).get(0).scrollIntoView(!0)}}function t(e){return"string"!=typeof e?{}:(e=e.trim().replace(/^(\?|#|&)/,""),e?e.split("&").reduce(function(e,t){var n=t.replace(/\+/g," ").split("="),r=n[0],i=n[1];return r=decodeURIComponent(r),i=void 0===i?null:decodeURIComponent(i),e.hasOwnProperty(r)?Array.isArray(e[r])?e[r].push(i):e[r]=[e[r],i]:e[r]=i,e},{}):{})}function n(e){return e?Object.keys(e).sort().map(function(t){var n=e[t];return Array.isArray(n)?n.sort().map(function(e){return encodeURIComponent(t)+"="+encodeURIComponent(e)}).join("&"):encodeURIComponent(t)+"="+encodeURIComponent(n)}).join("&"):""}function r(){if(location.search.length>=1){var e=t(location.search).language;if(e)return e;if(-1!=jQuery.inArray(location.search.substr(1),a))return location.search.substr(1)}return!1}function i(e){var r=t(location.search);return r.language?(r.language=e,n(r)):e}function o(e){if(history){var t=window.location.hash;t&&(t=t.replace(/^#+/,"")),history.pushState({},"","?"+i(e)+"#"+t),localStorage.setItem("language",e)}}function s(t){var n=localStorage.getItem("language");a=t;var i=r();i?(e(i),localStorage.setItem("language",i)):e(null!==n&&-1!=jQuery.inArray(n,a)?n:a[0])}var a=[];window.setupLanguages=s,window.activateLanguage=e,window.getLanguageFromQueryString=r,$(function(){$(".lang-selector a").on("click",function(){var t=$(this).data("language-name");return o(t),e(t),!1})})}(),function(){"use strict";function e(){$("h1, h2").each(function(){var e=$(this),t=e.nextUntil("h1, h2");f.add({id:e.prop("id"),title:e.text(),body:t.text()})}),t()}function t(){f.tokenStore.length>5e3&&(c=300)}function n(){s=$(".content"),a=$(".search-results"),$("#input-search").on("keyup",function(e){!function(){return function(e,t){clearTimeout(l),l=setTimeout(e,t)}}()(function(){r(e)},c)})}function r(e){var t=$("#input-search")[0];if(o(),a.addClass("visible"),27===e.keyCode&&(t.value=""),t.value){var n=f.search(t.value).filter(function(e){return e.score>1e-4});n.length?(a.empty(),$.each(n,function(e,t){var n=document.getElementById(t.ref);a.append("<li><a href='#"+t.ref+"'>"+$(n).text()+"</a></li>")}),i.call(t)):(a.html("<li></li>"),$(".search-results li").text('No Results Found for "'+t.value+'"'))}else o(),a.removeClass("visible")}function i(){this.value&&s.highlight(this.value,u)}function o(){s.unhighlight(u)}var s,a,u={element:"span",className:"search-highlight"},c=0,l=0,f=new lunr.Index;f.ref("id"),f.field("title",{boost:10}),f.field("body"),f.pipeline.add(lunr.trimmer,lunr.stopWordFilter),$(e),$(n)}(),function(){"use strict";function e(e,i,o,s){var a={},u=0,c=0,l=document.title,f=function(){a={},u=$(document).height(),c=$(window).height(),e.find(i).each(function(){var e=$(this).attr("href");"#"===e[0]&&(a[e]=$(e).offset().top)})},d=function(){var n=$(document).scrollTop()+s;n+c>=u&&(n=u+1e3);var r=null;for(var f in a)(a[f]<n&&a[f]>a[r]||null===r)&&(r=f);n!=s||t||(r=window.location.hash,t=!0);var d=e.find("[href='"+r+"']").first();if(!d.hasClass("active")){e.find(".active").removeClass("active"),e.find(".active-parent").removeClass("active-parent"),d.addClass("active"),d.parents(o).addClass("active").siblings(i).addClass("active-parent"),d.siblings(o).addClass("active"),e.find(o).filter(":not(.active)").slideUp(150),e.find(o).filter(".active").slideDown(150),window.history.replaceState&&window.history.replaceState(null,"",r);var p=d.data("title");void 0!==p&&p.length>0?document.title=p+" – "+l:document.title=l}};!function(){f(),d(),$("#nav-button").click(function(){return $(".toc-wrapper").toggleClass("open"),$("#nav-button").toggleClass("open"),!1}),$(".page-wrapper").click(r),$(".toc-link").click(r),e.find(i).click(function(){setTimeout(function(){d()},0)}),$(window).scroll(n(d,200)),$(window).resize(n(f,200))}(),window.recacheHeights=f,window.refreshToc=d}var t=!1,n=function(e,t){var n=!1;return function(){!1===n&&(setTimeout(function(){e(),n=!1},t),n=!0)}},r=function(){$(".toc-wrapper").removeClass("open"),$("#nav-button").removeClass("open")};window.loadToc=e}(),$(function(){loadToc($("#toc"),".toc-link",".toc-list-h2, .toc-list-h3, .toc-list-h4, .toc-list-h5, .toc-list-h6",10),setupLanguages($("body").data("languages")),$(".content").imagesLoaded(function(){window.recacheHeights(),window.refreshToc()})}),window.onpopstate=function(){activateLanguage(getLanguageFromQueryString())};</script>
-
+
<meta name="theme-color" content="#F3F7F9" />
</head>
@@ -1477,552 +1477,434 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
</a>
<div class="toc-wrapper">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGEAAAAcCAYAAABxutG8AAAG6klEQVR4Ad3aA4xkSxcA4LvefbZt27Zt27Zt27Zt27bttWe2R9+vTionlZs7760m/5eMutDVXV11T507RUeD7rgAL+AQzIlx/mYfp6OGs4oOAp3QEz3Er65FR4NO2EL0GhZtZ/t50IhWXFJ0EFgDd+LW9OUWHFd0RJgSr4lewGTVbZ2BFjRh16KDwHNKjEynE+MkfIz7MP0o3pJuEQ3FChXtxsdLgEYs+385CVgQ98rVcAy6jaIt6Vq5DSraLYM/AMMxbdFB4NmRmgRMhtXyjgxATXQ7xs37sA7WxQRFBXTDzXLrVLTbXTK0qNbxJwGTYVe8IPoFF2F3fC96BZPnffkG8AQ2ROeKre4JUV8sVd5GL1wn+an4BzAJFsE62Aa7YM1Ubgbsgz2xF3ajOsLBS397ErAj3kKrpBVnYf56nfXQKLqAOCgsjKGSRhyDTiXPPQs+Fb1F+faCKfCJ5NmindAT2+FuvIufMBBNgA8wSb3u/nIzFBVwIHrjN/wqfT2ZV2Z6vI5W0ZdYHF3Svu1EUSO2yvt0DlpEr5etBiyFmuiKihc5q+jqoh1wFP5ETbkfMG+9/pFys9XL5sI9eLH+9TKextToivHlX73SYOiMA+SacTe6xMGbCI+LvsHc+ZbmHbmLyVcCOmMv0WBsWPFmbik6qryuzlgLfbXP95irfBLMXi/bGTW5tYsqmAp3yfXD/iVtZkQ/0XN5PRtgmNxG5eFpNrmfVO27uEy0ZUm9qXGt9mlDA55XDzawG2oYjCFoxLRpC9cgt1bVBIyH5+V+oXwGsZqoBafFOnrgMrkRmKv8oJbZr6iAj0VL53XMibeU+wtP4WIcgm2xERaKF27rSdHemug0spNwhtwgLF/R7lxRA/EwhWnRW+49TF3S76Gi34t2kJsulpsDf8oNwaVYETNgYnQv/gHshMaq0DqDPnJbFBXwiah/EYSlO0h0c1lSDn9Vb1sR5ifKgw0DRV9h62IUwjrohza0og2wUFXDBtEtRQVMJHdffur1AT7EANGRJf1uIXqpaAfsIWpIZSbFx4A2fDSK3/wA3dAT3du9onCHaNLqNraV2yq/ZmjAtaJh2KSk3w8kfbEoZsKyWBiTlLS7RvRlusi7GjAYJ2CidqZmNsEGWBVz5uGwlbEptsYa+YfUWtgOUxVVMDsGp8FXw30yMVWBD/E6zhN9jwVKVsEIyXd4AZ9hdzyBT3EFxottvS96qv74+oBvqE7mYUu8gB9wDn5AX3yHK9ELe+Nb9MYwtOCG1Icd8C4Ghg9nFayEgXi3nfWHi96J5VYA7CgPN9/G+HnKwXOiNsB+GBf3AdrwNWnS0Si6Gl3wM77GHBWvZwI8ghGAlzAefhcthXvktq33c5g4luFhlVTBdNihup755I6JdTyF3zEhfhQ9nPdpczTKDUQnTIpXJc04OJ1xtIgOx8EYWrUCMCmelDThYEyL/qIV8KrcLFgdraIvMFcxqmFfuYVTueVQw26YXtSCU/JknVfk4HJ0wowYKmnD7mnVaRXtiYHYvzpl7lzRX5gSO6MxTo4Z8LXcePgKI0RPolcxquEuUT9MmNIBrsEf6IGlRSOwWezPIcrUUxXYVPSC+ovDrvkkeAYNVUEGFgYgJv5wu+g1dMcg0Yc4Fp/jCUkbLowXe4sVowI+Fj2iHvNjAdSwS/3v7UXDMU88QGlTpn4Bx2eSq0gRDh6Va0Ir7qX8JhMekNseU+FT0Tn1NjXRYxiK9fCBZBi2Kerw3ijZmjBdvsc7AV3RDVfgS/XTME4UDU596YJfAM1oEfXGdDgD8AmWi+OxNP5UDi4oi9flYDysj49QAwzBxhgPTaIG3IS50Srpk7Krlse7xaiAxfBnyZYxH9qwY6rvYtEP6UDjgTRYp+JL0a84AVeU5IHGxVVoUe3IkADMxpadL86uf/UDfIMZMBua5GbBRqKvY6BixWJUwLxxEgzFEuiG9/EEepbngbxVf/wqwGBshe54C/l2VAIn4hR8I6phqNyZmDzF8p6Suwzj437sjAGAF1Mor1n0Qb1sF9Gt6V9d3FiMSnhSMgjr4UH8iWnypJm/JL/gfkA/UsIPW8tdnz+/cXAXTsX0+EpuPfwp9yFewnOYBu+IDsY2uAiLYhBacVk6pGojT8FgddHR6IQrMEsxKmECfJRvHaYrqb8mBojexqwlCbBG0cWYFfPgZPyFrdMtTd/LzYAp8bzc1+kumanxnWQY3k6Bhh8BL+MUXCi3ULol6yvJK7g0vxk16s8L9+ModK6+aeQ03Ied0akiAXYMPsEwSR9cnJ+2HYs38DN6o2+MwGyHj9APt2GyfGU5Cg/gVHSNK9lX+BIroSt2xWW4C5divPiB8xUa8H3MAJf7Fykvx9WyNCXUAAAAAElFTkSuQmCC" class="logo" alt="Logo">
-
+
<div class="lang-selector">
-
-
+
+
<a href="#" data-language-name="shell">Shell</a>
-
-
-
+
+
+
<a href="#" data-language-name="http">HTTP</a>
-
-
-
+
+
+
<a href="#" data-language-name="javascript">JavaScript</a>
-
-
-
+
+
+
<a href="#" data-language-name="javascript--nodejs">Node.js</a>
-
-
-
+
+
+
<a href="#" data-language-name="ruby">Ruby</a>
-
-
-
+
+
+
<a href="#" data-language-name="python">Python</a>
-
-
-
+
+
+
<a href="#" data-language-name="java">Java</a>
-
-
-
+
+
+
<a href="#" data-language-name="go">Go</a>
-
-
+
+
</div>
-
-
+
+
<div class="search">
<input type="text" class="search" id="input-search" placeholder="Search">
</div>
<ul class="search-results"></ul>
-
+
<div id="toc" class="toc-list-h1">
<ul class="toc-list-h1">
-
+
<li>
- <a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v3.92">Wekan REST API v3.92</a>
-
+ <a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v3.98">Wekan REST API v3.98</a>
+
</li>
-
+
<li>
<a href="#production-security-concerns" class="toc-h1 toc-link" data-title="Production Security Concerns">Production Security Concerns</a>
-
+
</li>
-
+
<li>
<a href="#authentication" class="toc-h1 toc-link" data-title="Authentication">Authentication</a>
-
+
</li>
-
+
<li>
<a href="#wekan-rest-api-login" class="toc-h1 toc-link" data-title="Login">Login</a>
-
+
<ul class="toc-list-h2">
-
+
<li>
<a href="#login" class="toc-h2 toc-link" data-title="login">login</a>
-
+
</li>
-
+
<li>
<a href="#register" class="toc-h2 toc-link" data-title="register">register</a>
-
+
</li>
-
+
</ul>
-
+
</li>
-
+
<li>
<a href="#wekan-rest-api-boards" class="toc-h1 toc-link" data-title="Boards">Boards</a>
-
+
<ul class="toc-list-h2">
-
+
<li>
<a href="#get_public_boards" class="toc-h2 toc-link" data-title="get_public_boards">get_public_boards</a>
-
+
</li>
-
+
<li>
<a href="#new_board" class="toc-h2 toc-link" data-title="new_board">new_board</a>
-
+
</li>
-
+
<li>
<a href="#get_board" class="toc-h2 toc-link" data-title="get_board">get_board</a>
-
+
</li>
-
+
<li>
<a href="#delete_board" class="toc-h2 toc-link" data-title="delete_board">delete_board</a>
-
+
</li>
-
+
<li>
<a href="#export" class="toc-h2 toc-link" data-title="export">export</a>
-
+
</li>
-
+
<li>
<a href="#add_board_label" class="toc-h2 toc-link" data-title="add_board_label">add_board_label</a>
-
+
</li>
-
+
<li>
<a href="#set_board_member_permission" class="toc-h2 toc-link" data-title="set_board_member_permission">set_board_member_permission</a>
-
+
</li>
-
+
<li>
<a href="#get_boards_from_user" class="toc-h2 toc-link" data-title="get_boards_from_user">get_boards_from_user</a>
-
+
</li>
-
+
</ul>
-
+
</li>
-
+
<li>
<a href="#wekan-rest-api-checklists" class="toc-h1 toc-link" data-title="Checklists">Checklists</a>
-
+
<ul class="toc-list-h2">
-
+
<li>
<a href="#get_board_card_checklists" class="toc-h2 toc-link" data-title="get_board_card_checklists">get_board_card_checklists</a>
-
+
</li>
-
+
<li>
<a href="#post_board_card_checklists" class="toc-h2 toc-link" data-title="post_board_card_checklists">post_board_card_checklists</a>
-
+
</li>
-
+
<li>
<a href="#get_board_card_checklist" class="toc-h2 toc-link" data-title="get_board_card_checklist">get_board_card_checklist</a>
-
+
</li>
-
+
<li>
<a href="#delete_board_card_checklist" class="toc-h2 toc-link" data-title="delete_board_card_checklist">delete_board_card_checklist</a>
-
+
</li>
-
+
</ul>
-
+
</li>
-
+
<li>
<a href="#wekan-rest-api-checklistitems" class="toc-h1 toc-link" data-title="ChecklistItems">ChecklistItems</a>
-
+
<ul class="toc-list-h2">
-
+
<li>
<a href="#get_board_card_checklist_item" class="toc-h2 toc-link" data-title="get_board_card_checklist_item">get_board_card_checklist_item</a>
-
+
</li>
-
+
<li>
<a href="#put_board_card_checklist_item" class="toc-h2 toc-link" data-title="put_board_card_checklist_item">put_board_card_checklist_item</a>
-
+
</li>
-
+
<li>
<a href="#delete_board_card_checklist_item" class="toc-h2 toc-link" data-title="delete_board_card_checklist_item">delete_board_card_checklist_item</a>
-
+
</li>
-
+
</ul>
-
+
</li>
-
+
<li>
<a href="#wekan-rest-api-cardcomments" class="toc-h1 toc-link" data-title="CardComments">CardComments</a>
-
+
<ul class="toc-list-h2">
-
+
<li>
<a href="#get_all_comments" class="toc-h2 toc-link" data-title="get_all_comments">get_all_comments</a>
-
+
</li>
-
+
<li>
<a href="#post_board_card_comments" class="toc-h2 toc-link" data-title="post_board_card_comments">post_board_card_comments</a>
-
+
</li>
-
+
<li>
<a href="#get_board_card_comment" class="toc-h2 toc-link" data-title="get_board_card_comment">get_board_card_comment</a>
-
+
</li>
-
+
<li>
<a href="#delete_board_card_comment" class="toc-h2 toc-link" data-title="delete_board_card_comment">delete_board_card_comment</a>
-
+
</li>
-
+
</ul>
-
+
</li>
-
+
<li>
<a href="#wekan-rest-api-customfields" class="toc-h1 toc-link" data-title="CustomFields">CustomFields</a>
-
+
<ul class="toc-list-h2">
-
+
<li>
<a href="#get_all_custom_fields" class="toc-h2 toc-link" data-title="get_all_custom_fields">get_all_custom_fields</a>
-
+
</li>
-
+
<li>
<a href="#new_custom_field" class="toc-h2 toc-link" data-title="new_custom_field">new_custom_field</a>
-
+
</li>
-
+
<li>
<a href="#get_board_customfield" class="toc-h2 toc-link" data-title="get_board_customField">get_board_customField</a>
-
+
</li>
-
+
<li>
<a href="#delete_board_customfield" class="toc-h2 toc-link" data-title="delete_board_customField">delete_board_customField</a>
-
+
</li>
-
+
</ul>
-
+
</li>
-
+
<li>
<a href="#wekan-rest-api-integrations" class="toc-h1 toc-link" data-title="Integrations">Integrations</a>
-
+
<ul class="toc-list-h2">
-
+
<li>
<a href="#get_all_integrations" class="toc-h2 toc-link" data-title="get_all_integrations">get_all_integrations</a>
-
+
</li>
-
+
<li>
<a href="#new_integration" class="toc-h2 toc-link" data-title="new_integration">new_integration</a>
-
+
</li>
-
+
<li>
<a href="#get_integration" class="toc-h2 toc-link" data-title="get_integration">get_integration</a>
-
+
</li>
-
+
<li>
<a href="#edit_integration" class="toc-h2 toc-link" data-title="edit_integration">edit_integration</a>
-
+
</li>
-
+
<li>
<a href="#delete_integration" class="toc-h2 toc-link" data-title="delete_integration">delete_integration</a>
-
+
</li>
-
+
<li>
<a href="#delete_board_int_activities" class="toc-h2 toc-link" data-title="delete_board_int_activities">delete_board_int_activities</a>
-
+
</li>
-
+
<li>
<a href="#post_board_int_activities" class="toc-h2 toc-link" data-title="post_board_int_activities">post_board_int_activities</a>
-
+
</li>
-
+
</ul>
-
+
</li>
-
+
<li>
<a href="#wekan-rest-api-lists" class="toc-h1 toc-link" data-title="Lists">Lists</a>
-
+
<ul class="toc-list-h2">
-
+
<li>
<a href="#get_all_lists" class="toc-h2 toc-link" data-title="get_all_lists">get_all_lists</a>
-
+
</li>
-
+
<li>
<a href="#new_list" class="toc-h2 toc-link" data-title="new_list">new_list</a>
-
+
</li>
-
+
<li>
<a href="#get_list" class="toc-h2 toc-link" data-title="get_list">get_list</a>
-
+
</li>
-
+
<li>
<a href="#delete_list" class="toc-h2 toc-link" data-title="delete_list">delete_list</a>
-
- </li>
-
- </ul>
-
- </li>
-
- <li>
- <a href="#wekan-rest-api-cards" class="toc-h1 toc-link" data-title="Cards">Cards</a>
-
- <ul class="toc-list-h2">
-
- <li>
- <a href="#get_all_cards" class="toc-h2 toc-link" data-title="get_all_cards">get_all_cards</a>
-
- </li>
-
- <li>
- <a href="#new_card" class="toc-h2 toc-link" data-title="new_card">new_card</a>
-
- </li>
-
- <li>
- <a href="#get_board_list_card" class="toc-h2 toc-link" data-title="get_board_list_card">get_board_list_card</a>
-
- </li>
-
- <li>
- <a href="#put_board_list_card" class="toc-h2 toc-link" data-title="put_board_list_card">put_board_list_card</a>
-
- </li>
-
- <li>
- <a href="#delete_board_list_card" class="toc-h2 toc-link" data-title="delete_board_list_card">delete_board_list_card</a>
-
- </li>
-
- <li>
- <a href="#get_board_swimlane_cards" class="toc-h2 toc-link" data-title="get_board_swimlane_cards">get_board_swimlane_cards</a>
-
- </li>
-
- </ul>
-
- </li>
-
- <li>
- <a href="#wekan-rest-api-users" class="toc-h1 toc-link" data-title="Users">Users</a>
-
- <ul class="toc-list-h2">
-
- <li>
- <a href="#add_board_member" class="toc-h2 toc-link" data-title="add_board_member">add_board_member</a>
-
- </li>
-
- <li>
- <a href="#post_board_user_remove" class="toc-h2 toc-link" data-title="post_board_user_remove">post_board_user_remove</a>
-
- </li>
-
- <li>
- <a href="#get_current_user" class="toc-h2 toc-link" data-title="get_current_user">get_current_user</a>
-
- </li>
-
- <li>
- <a href="#get_all_users" class="toc-h2 toc-link" data-title="get_all_users">get_all_users</a>
-
- </li>
-
- <li>
- <a href="#new_user" class="toc-h2 toc-link" data-title="new_user">new_user</a>
-
- </li>
-
- <li>
- <a href="#get_user" class="toc-h2 toc-link" data-title="get_user">get_user</a>
-
- </li>
-
- <li>
- <a href="#edit_user" class="toc-h2 toc-link" data-title="edit_user">edit_user</a>
-
- </li>
-
- <li>
- <a href="#delete_user" class="toc-h2 toc-link" data-title="delete_user">delete_user</a>
-
+
</li>
-
+
</ul>
-
+
</li>
-
+
<li>
<a href="#wekan-rest-api-swimlanes" class="toc-h1 toc-link" data-title="Swimlanes">Swimlanes</a>
-
+
<ul class="toc-list-h2">
-
+
<li>
<a href="#get_all_swimlanes" class="toc-h2 toc-link" data-title="get_all_swimlanes">get_all_swimlanes</a>
-
+
</li>
-
+
<li>
<a href="#new_swimlane" class="toc-h2 toc-link" data-title="new_swimlane">new_swimlane</a>
-
+
</li>
-
+
<li>
<a href="#get_swimlane" class="toc-h2 toc-link" data-title="get_swimlane">get_swimlane</a>
-
+
</li>
-
+
<li>
<a href="#delete_board_swimlane" class="toc-h2 toc-link" data-title="delete_board_swimlane">delete_board_swimlane</a>
-
+
</li>
-
+
</ul>
-
+
</li>
-
+
<li>
<a href="#schemas" class="toc-h1 toc-link" data-title="Schemas">Schemas</a>
-
+
<ul class="toc-list-h2">
-
+
<li>
<a href="#tocsboards" class="toc-h2 toc-link" data-title="Boards">Boards</a>
-
+
</li>
-
+
<li>
<a href="#tocsboardslabels" class="toc-h2 toc-link" data-title="BoardsLabels">BoardsLabels</a>
-
+
</li>
-
+
<li>
<a href="#tocsboardsmembers" class="toc-h2 toc-link" data-title="BoardsMembers">BoardsMembers</a>
-
+
</li>
-
+
<li>
<a href="#tocscardcomments" class="toc-h2 toc-link" data-title="CardComments">CardComments</a>
-
- </li>
-
- <li>
- <a href="#tocscards" class="toc-h2 toc-link" data-title="Cards">Cards</a>
-
- </li>
-
- <li>
- <a href="#tocscardsvote" class="toc-h2 toc-link" data-title="CardsVote">CardsVote</a>
-
- </li>
-
- <li>
- <a href="#tocscardscustomfields" class="toc-h2 toc-link" data-title="CardsCustomfields">CardsCustomfields</a>
-
+
</li>
-
+
<li>
<a href="#tocschecklistitems" class="toc-h2 toc-link" data-title="ChecklistItems">ChecklistItems</a>
-
+
</li>
-
+
<li>
<a href="#tocschecklists" class="toc-h2 toc-link" data-title="Checklists">Checklists</a>
-
+
</li>
-
+
<li>
<a href="#tocscustomfields" class="toc-h2 toc-link" data-title="CustomFields">CustomFields</a>
-
+
</li>
-
+
<li>
<a href="#tocscustomfieldssettings" class="toc-h2 toc-link" data-title="CustomFieldsSettings">CustomFieldsSettings</a>
-
+
</li>
-
+
<li>
<a href="#tocscustomfieldssettingsdropdownitems" class="toc-h2 toc-link" data-title="CustomFieldsSettingsDropdownitems">CustomFieldsSettingsDropdownitems</a>
-
+
</li>
-
+
<li>
<a href="#tocsintegrations" class="toc-h2 toc-link" data-title="Integrations">Integrations</a>
-
+
</li>
-
+
<li>
<a href="#tocslists" class="toc-h2 toc-link" data-title="Lists">Lists</a>
-
+
</li>
-
+
<li>
<a href="#tocslistswiplimit" class="toc-h2 toc-link" data-title="ListsWiplimit">ListsWiplimit</a>
-
+
</li>
-
+
<li>
<a href="#tocsswimlanes" class="toc-h2 toc-link" data-title="Swimlanes">Swimlanes</a>
-
- </li>
-
- <li>
- <a href="#tocsusers" class="toc-h2 toc-link" data-title="Users">Users</a>
-
- </li>
-
- <li>
- <a href="#tocsusersemails" class="toc-h2 toc-link" data-title="UsersEmails">UsersEmails</a>
-
- </li>
-
- <li>
- <a href="#tocsusersprofile" class="toc-h2 toc-link" data-title="UsersProfile">UsersProfile</a>
-
+
</li>
-
+
</ul>
-
+
</li>
-
+
</ul>
</div>
-
+
<ul class="toc-footer">
-
+
</ul>
-
+
</div>
<div class="page-wrapper">
<div class="dark-box"></div>
<div class="content">
- <h1 id="wekan-rest-api">Wekan REST API v3.92</h1>
+ <h1 id="wekan-rest-api">Wekan REST API v3.98</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>
@@ -2160,7 +2042,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/x-www-form-urlencoded"</span>},
<span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"*/*"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -2435,7 +2317,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/x-www-form-urlencoded"</span>},
<span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"*/*"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -2718,7 +2600,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -2924,7 +2806,7 @@ System.out.println(response.toString());
<span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>},
<span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -3219,7 +3101,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -3316,7 +3198,8 @@ System.out.println(response.toString());
<span class="hljs-attr">"endAt"</span>: <span class="hljs-string">"string"</span>,
<span class="hljs-attr">"spentTime"</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">"isOvertime"</span>: <span class="hljs-literal">true</span>,
- <span class="hljs-attr">"type"</span>: <span class="hljs-string">"string"</span>
+ <span class="hljs-attr">"type"</span>: <span class="hljs-string">"string"</span>,
+ <span class="hljs-attr">"sort"</span>: <span class="hljs-number">0</span>
}
</code></pre>
<h3 id="get_board-responses">Responses</h3>
@@ -3443,7 +3326,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -3605,7 +3488,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -3788,7 +3671,7 @@ System.out.println(response.toString());
<span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>},
<span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -3993,7 +3876,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -4215,7 +4098,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -4420,7 +4303,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -4597,7 +4480,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -4791,7 +4674,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -4964,7 +4847,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -5138,7 +5021,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -5329,7 +5212,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -5537,7 +5420,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -5726,7 +5609,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -5957,7 +5840,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -6151,7 +6034,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -6324,7 +6207,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -6506,7 +6389,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -6739,7 +6622,7 @@ System.out.println(response.toString());
<span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>},
<span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -6999,7 +6882,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -7165,7 +7048,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -7340,7 +7223,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -7634,7 +7517,7 @@ System.out.println(response.toString());
<span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>},
<span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -7856,7 +7739,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -8068,7 +7951,7 @@ System.out.println(response.toString());
<span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>},
<span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -8330,7 +8213,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -8532,7 +8415,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -8708,7 +8591,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -8903,7 +8786,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -9124,7 +9007,7 @@ System.out.println(response.toString());
<span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>},
<span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -9346,7 +9229,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -9549,7 +9432,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -9652,3174 +9535,6 @@ The list is not put in the recycle bin.</p>
To perform this operation, you must be authenticated by means of one of the following methods:
UserSecurity
</aside>
-<h1 id="wekan-rest-api-cards">Cards</h1>
-<h2 id="get_all_cards">get_all_cards</h2>
-<p><a id="opIdget_all_cards"></a></p>
-<blockquote>
-<p>Code samples</p>
-</blockquote>
-<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span>
-curl -X GET /api/boards/{board}/lists/{list}/cards \
- -H <span class="hljs-string">'Accept: application/json'</span> \
- -H <span class="hljs-string">'Authorization: API_KEY'</span>
-
-</code></pre>
-<pre class="highlight tab tab-http"><code><span class="hljs-keyword">GET</span> <span class="hljs-string">/api/boards/{board}/lists/{list}/cards</span> HTTP/1.1
-
-<span class="http"><span class="hljs-attribute">Accept</span>: application/json
-
-<span class="undefined"></span></span></code></pre>
-<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = {
- <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-$.ajax({
- <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/boards/{board}/lists/{list}/cards'</span>,
- <span class="hljs-attr">method</span>: <span class="hljs-string">'get'</span>,
-
- <span class="hljs-attr">headers</span>: headers,
- <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{
- <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data));
- }
-})
-
-</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> headers = {
- <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-fetch(<span class="hljs-string">'/api/boards/{board}/lists/{list}/cards'</span>,
-{
- <span class="hljs-attr">method</span>: <span class="hljs-string">'GET'</span>,
-
- <span class="hljs-attr">headers</span>: headers
-})
-.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{
- <span class="hljs-keyword">return</span> res.json();
-}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{
- <span class="hljs-built_in">console</span>.log(body);
-});
-
-</code></pre>
-<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span>
-<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span>
-
-headers = {
- <span class="hljs-string">'Accept'</span> =&gt; <span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span> =&gt; <span class="hljs-string">'API_KEY'</span>
-}
-
-result = RestClient.get <span class="hljs-string">'/api/boards/{board}/lists/{list}/cards'</span>,
- <span class="hljs-symbol">params:</span> {
- }, <span class="hljs-symbol">headers:</span> headers
-
-p JSON.parse(result)
-
-</code></pre>
-<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests
-headers = {
- <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span>
-}
-
-r = requests.get(<span class="hljs-string">'/api/boards/{board}/lists/{list}/cards'</span>, params={
-
-}, headers = headers)
-
-<span class="hljs-keyword">print</span> r.json()
-
-</code></pre>
-<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/boards/{board}/lists/{list}/cards"</span>);
-HttpURLConnection con = (HttpURLConnection) obj.openConnection();
-con.setRequestMethod(<span class="hljs-string">"GET"</span>);
-<span class="hljs-keyword">int</span> responseCode = con.getResponseCode();
-BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader(
- <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream()));
-String inputLine;
-StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer();
-<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) {
- response.append(inputLine);
-}
-in.close();
-System.out.println(response.toString());
-
-</code></pre>
-<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main
-
-<span class="hljs-keyword">import</span> (
- <span class="hljs-string">"bytes"</span>
- <span class="hljs-string">"net/http"</span>
-)
-
-<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
-
- headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
- <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
- <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
- }
-
- data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
- req, err := http.NewRequest(<span class="hljs-string">"GET"</span>, <span class="hljs-string">"/api/boards/{board}/lists/{list}/cards"</span>, data)
- req.Header = headers
-
- client := &amp;http.Client{}
- resp, err := client.Do(req)
- <span class="hljs-comment">// ...</span>
-}
-
-</code></pre>
-<p><code>GET /api/boards/{board}/lists/{list}/cards</code></p>
-<p><em>Get all Cards attached to a List</em></p>
-<h3 id="get_all_cards-parameters">Parameters</h3>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>In</th>
-<th>Type</th>
-<th>Required</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>board</td>
-<td>path</td>
-<td>string</td>
-<td>true</td>
-<td>the board ID</td>
-</tr>
-<tr>
-<td>list</td>
-<td>path</td>
-<td>string</td>
-<td>true</td>
-<td>the list ID</td>
-</tr>
-</tbody>
-</table>
-<h4 id="detailed-descriptions">Detailed descriptions</h4>
-<p><strong>board</strong>: the board ID</p>
-<p><strong>list</strong>: the list ID</p>
-<blockquote>
-<p>Example responses</p>
-</blockquote>
-<blockquote>
-<p>200 Response</p>
-</blockquote>
-<pre class="highlight tab tab-json"><code>[
- {
- <span class="hljs-attr">"_id"</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>
- }
-]
-</code></pre>
-<h3 id="get_all_cards-responses">Responses</h3>
-<table>
-<thead>
-<tr>
-<th>Status</th>
-<th>Meaning</th>
-<th>Description</th>
-<th>Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>200</td>
-<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td>
-<td>200 response</td>
-<td>Inline</td>
-</tr>
-</tbody>
-</table>
-<h3 id="get_all_cards-responseschema">Response Schema</h3>
-<p>Status Code <strong>200</strong></p>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>Type</th>
-<th>Required</th>
-<th>Restrictions</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>» _id</td>
-<td>string</td>
-<td>false</td>
-<td>none</td>
-<td>none</td>
-</tr>
-<tr>
-<td>» title</td>
-<td>string</td>
-<td>false</td>
-<td>none</td>
-<td>none</td>
-</tr>
-<tr>
-<td>» description</td>
-<td>string</td>
-<td>false</td>
-<td>none</td>
-<td>none</td>
-</tr>
-</tbody>
-</table>
-<aside class="warning">
-To perform this operation, you must be authenticated by means of one of the following methods:
-UserSecurity
-</aside>
-<h2 id="new_card">new_card</h2>
-<p><a id="opIdnew_card"></a></p>
-<blockquote>
-<p>Code samples</p>
-</blockquote>
-<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span>
-curl -X POST /api/boards/{board}/lists/{list}/cards \
- -H <span class="hljs-string">'Content-Type: multipart/form-data'</span> \
- -H <span class="hljs-string">'Accept: application/json'</span> \
- -H <span class="hljs-string">'Authorization: API_KEY'</span>
-
-</code></pre>
-<pre class="highlight tab tab-http"><code><span class="hljs-keyword">POST</span> <span class="hljs-string">/api/boards/{board}/lists/{list}/cards</span> HTTP/1.1
-
-<span class="fortran">Content-<span class="hljs-keyword">Type</span>: multipart/<span class="hljs-keyword">form</span>-<span class="hljs-keyword">data</span>
-Accept: application/json
-
-</span></code></pre>
-<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = {
- <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-$.ajax({
- <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/boards/{board}/lists/{list}/cards'</span>,
- <span class="hljs-attr">method</span>: <span class="hljs-string">'post'</span>,
-
- <span class="hljs-attr">headers</span>: headers,
- <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{
- <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data));
- }
-})
-
-</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">'{
- "authorId": "string",
- "members": "string",
- "assignees": "string",
- "title": "string",
- "description": "string",
- "swimlaneId": "string"
-}'</span>;
-<span class="hljs-keyword">const</span> headers = {
- <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-fetch(<span class="hljs-string">'/api/boards/{board}/lists/{list}/cards'</span>,
-{
- <span class="hljs-attr">method</span>: <span class="hljs-string">'POST'</span>,
- <span class="hljs-attr">body</span>: inputBody,
- <span class="hljs-attr">headers</span>: headers
-})
-.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{
- <span class="hljs-keyword">return</span> res.json();
-}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{
- <span class="hljs-built_in">console</span>.log(body);
-});
-
-</code></pre>
-<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span>
-<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span>
-
-headers = {
- <span class="hljs-string">'Content-Type'</span> =&gt; <span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Accept'</span> =&gt; <span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span> =&gt; <span class="hljs-string">'API_KEY'</span>
-}
-
-result = RestClient.post <span class="hljs-string">'/api/boards/{board}/lists/{list}/cards'</span>,
- <span class="hljs-symbol">params:</span> {
- }, <span class="hljs-symbol">headers:</span> headers
-
-p JSON.parse(result)
-
-</code></pre>
-<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests
-headers = {
- <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span>
-}
-
-r = requests.post(<span class="hljs-string">'/api/boards/{board}/lists/{list}/cards'</span>, params={
-
-}, headers = headers)
-
-<span class="hljs-keyword">print</span> r.json()
-
-</code></pre>
-<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/boards/{board}/lists/{list}/cards"</span>);
-HttpURLConnection con = (HttpURLConnection) obj.openConnection();
-con.setRequestMethod(<span class="hljs-string">"POST"</span>);
-<span class="hljs-keyword">int</span> responseCode = con.getResponseCode();
-BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader(
- <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream()));
-String inputLine;
-StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer();
-<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) {
- response.append(inputLine);
-}
-in.close();
-System.out.println(response.toString());
-
-</code></pre>
-<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main
-
-<span class="hljs-keyword">import</span> (
- <span class="hljs-string">"bytes"</span>
- <span class="hljs-string">"net/http"</span>
-)
-
-<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
-
- headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
- <span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>},
- <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
- <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
- }
-
- data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
- req, err := http.NewRequest(<span class="hljs-string">"POST"</span>, <span class="hljs-string">"/api/boards/{board}/lists/{list}/cards"</span>, data)
- req.Header = headers
-
- client := &amp;http.Client{}
- resp, err := client.Do(req)
- <span class="hljs-comment">// ...</span>
-}
-
-</code></pre>
-<p><code>POST /api/boards/{board}/lists/{list}/cards</code></p>
-<p><em>Create a new Card</em></p>
-<blockquote>
-<p>Body parameter</p>
-</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>
-
-</code></pre>
-<h3 id="new_card-parameters">Parameters</h3>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>In</th>
-<th>Type</th>
-<th>Required</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>board</td>
-<td>path</td>
-<td>string</td>
-<td>true</td>
-<td>the board ID of the new card</td>
-</tr>
-<tr>
-<td>list</td>
-<td>path</td>
-<td>string</td>
-<td>true</td>
-<td>the list ID of the new card</td>
-</tr>
-<tr>
-<td>body</td>
-<td>body</td>
-<td>object</td>
-<td>false</td>
-<td>none</td>
-</tr>
-<tr>
-<td>» authorId</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the authorId value</td>
-</tr>
-<tr>
-<td>» members</td>
-<td>body</td>
-<td>string</td>
-<td>false</td>
-<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>
-<td>true</td>
-<td>the title of the new card</td>
-</tr>
-<tr>
-<td>» description</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the description of the new card</td>
-</tr>
-<tr>
-<td>» swimlaneId</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the swimlane ID of the new card</td>
-</tr>
-</tbody>
-</table>
-<h4 id="detailed-descriptions">Detailed descriptions</h4>
-<p><strong>board</strong>: the board ID of the new card</p>
-<p><strong>list</strong>: the list ID of the new card</p>
-<blockquote>
-<p>Example responses</p>
-</blockquote>
-<blockquote>
-<p>200 Response</p>
-</blockquote>
-<pre class="highlight tab tab-json"><code>{
- <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span>
-}
-</code></pre>
-<h3 id="new_card-responses">Responses</h3>
-<table>
-<thead>
-<tr>
-<th>Status</th>
-<th>Meaning</th>
-<th>Description</th>
-<th>Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>200</td>
-<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td>
-<td>200 response</td>
-<td>Inline</td>
-</tr>
-</tbody>
-</table>
-<h3 id="new_card-responseschema">Response Schema</h3>
-<p>Status Code <strong>200</strong></p>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>Type</th>
-<th>Required</th>
-<th>Restrictions</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>» _id</td>
-<td>string</td>
-<td>false</td>
-<td>none</td>
-<td>none</td>
-</tr>
-</tbody>
-</table>
-<aside class="warning">
-To perform this operation, you must be authenticated by means of one of the following methods:
-UserSecurity
-</aside>
-<h2 id="get_board_list_card">get_board_list_card</h2>
-<p><a id="opIdget_board_list_card"></a></p>
-<blockquote>
-<p>Code samples</p>
-</blockquote>
-<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span>
-curl -X GET /api/boards/{board}/lists/{list}/cards/{card} \
- -H <span class="hljs-string">'Authorization: API_KEY'</span>
-
-</code></pre>
-<pre class="highlight tab tab-http"><code><span class="hljs-keyword">GET</span> <span class="hljs-string">/api/boards/{board}/lists/{list}/cards/{card}</span> HTTP/1.1
-
-<span class="undefined"></span></code></pre>
-<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = {
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-$.ajax({
- <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/boards/{board}/lists/{list}/cards/{card}'</span>,
- <span class="hljs-attr">method</span>: <span class="hljs-string">'get'</span>,
-
- <span class="hljs-attr">headers</span>: headers,
- <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{
- <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data));
- }
-})
-
-</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> headers = {
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-fetch(<span class="hljs-string">'/api/boards/{board}/lists/{list}/cards/{card}'</span>,
-{
- <span class="hljs-attr">method</span>: <span class="hljs-string">'GET'</span>,
-
- <span class="hljs-attr">headers</span>: headers
-})
-.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{
- <span class="hljs-keyword">return</span> res.json();
-}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{
- <span class="hljs-built_in">console</span>.log(body);
-});
-
-</code></pre>
-<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span>
-<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span>
-
-headers = {
- <span class="hljs-string">'Authorization'</span> =&gt; <span class="hljs-string">'API_KEY'</span>
-}
-
-result = RestClient.get <span class="hljs-string">'/api/boards/{board}/lists/{list}/cards/{card}'</span>,
- <span class="hljs-symbol">params:</span> {
- }, <span class="hljs-symbol">headers:</span> headers
-
-p JSON.parse(result)
-
-</code></pre>
-<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests
-headers = {
- <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span>
-}
-
-r = requests.get(<span class="hljs-string">'/api/boards/{board}/lists/{list}/cards/{card}'</span>, params={
-
-}, headers = headers)
-
-<span class="hljs-keyword">print</span> r.json()
-
-</code></pre>
-<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/boards/{board}/lists/{list}/cards/{card}"</span>);
-HttpURLConnection con = (HttpURLConnection) obj.openConnection();
-con.setRequestMethod(<span class="hljs-string">"GET"</span>);
-<span class="hljs-keyword">int</span> responseCode = con.getResponseCode();
-BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader(
- <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream()));
-String inputLine;
-StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer();
-<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) {
- response.append(inputLine);
-}
-in.close();
-System.out.println(response.toString());
-
-</code></pre>
-<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main
-
-<span class="hljs-keyword">import</span> (
- <span class="hljs-string">"bytes"</span>
- <span class="hljs-string">"net/http"</span>
-)
-
-<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
-
- headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
- <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
- }
-
- data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
- req, err := http.NewRequest(<span class="hljs-string">"GET"</span>, <span class="hljs-string">"/api/boards/{board}/lists/{list}/cards/{card}"</span>, data)
- req.Header = headers
-
- client := &amp;http.Client{}
- resp, err := client.Do(req)
- <span class="hljs-comment">// ...</span>
-}
-
-</code></pre>
-<p><code>GET /api/boards/{board}/lists/{list}/cards/{card}</code></p>
-<h3 id="get_board_list_card-parameters">Parameters</h3>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>In</th>
-<th>Type</th>
-<th>Required</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>board</td>
-<td>path</td>
-<td>string</td>
-<td>true</td>
-<td>the board value</td>
-</tr>
-<tr>
-<td>list</td>
-<td>path</td>
-<td>string</td>
-<td>true</td>
-<td>the list value</td>
-</tr>
-<tr>
-<td>card</td>
-<td>path</td>
-<td>string</td>
-<td>true</td>
-<td>the card value</td>
-</tr>
-</tbody>
-</table>
-<h3 id="get_board_list_card-responses">Responses</h3>
-<table>
-<thead>
-<tr>
-<th>Status</th>
-<th>Meaning</th>
-<th>Description</th>
-<th>Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>200</td>
-<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td>
-<td>200 response</td>
-<td>None</td>
-</tr>
-</tbody>
-</table>
-<aside class="warning">
-To perform this operation, you must be authenticated by means of one of the following methods:
-UserSecurity
-</aside>
-<h2 id="put_board_list_card">put_board_list_card</h2>
-<p><a id="opIdput_board_list_card"></a></p>
-<blockquote>
-<p>Code samples</p>
-</blockquote>
-<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span>
-curl -X PUT /api/boards/{board}/lists/{list}/cards/{card} \
- -H <span class="hljs-string">'Content-Type: multipart/form-data'</span> \
- -H <span class="hljs-string">'Authorization: API_KEY'</span>
-
-</code></pre>
-<pre class="highlight tab tab-http"><code><span class="hljs-keyword">PUT</span> <span class="hljs-string">/api/boards/{board}/lists/{list}/cards/{card}</span> HTTP/1.1
-
-<span class="fortran">Content-<span class="hljs-keyword">Type</span>: multipart/<span class="hljs-keyword">form</span>-<span class="hljs-keyword">data</span>
-
-</span></code></pre>
-<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = {
- <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-$.ajax({
- <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/boards/{board}/lists/{list}/cards/{card}'</span>,
- <span class="hljs-attr">method</span>: <span class="hljs-string">'put'</span>,
-
- <span class="hljs-attr">headers</span>: headers,
- <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{
- <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data));
- }
-})
-
-</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",
- "listId": "string",
- "authorId": "string",
- "parentId": "string",
- "description": "string",
- "color": "string",
- "labelIds": "string",
- "requestedBy": "string",
- "assignedBy": "string",
- "receivedAt": "string",
- "startAt": "string",
- "dueAt": "string",
- "endAt": "string",
- "spentTime": "string",
- "isOverTime": "string",
- "customFields": "string",
- "members": "string",
- "assignees": "string",
- "swimlaneId": "string"
-}'</span>;
-<span class="hljs-keyword">const</span> headers = {
- <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-fetch(<span class="hljs-string">'/api/boards/{board}/lists/{list}/cards/{card}'</span>,
-{
- <span class="hljs-attr">method</span>: <span class="hljs-string">'PUT'</span>,
- <span class="hljs-attr">body</span>: inputBody,
- <span class="hljs-attr">headers</span>: headers
-})
-.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{
- <span class="hljs-keyword">return</span> res.json();
-}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{
- <span class="hljs-built_in">console</span>.log(body);
-});
-
-</code></pre>
-<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span>
-<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span>
-
-headers = {
- <span class="hljs-string">'Content-Type'</span> =&gt; <span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Authorization'</span> =&gt; <span class="hljs-string">'API_KEY'</span>
-}
-
-result = RestClient.put <span class="hljs-string">'/api/boards/{board}/lists/{list}/cards/{card}'</span>,
- <span class="hljs-symbol">params:</span> {
- }, <span class="hljs-symbol">headers:</span> headers
-
-p JSON.parse(result)
-
-</code></pre>
-<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests
-headers = {
- <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span>
-}
-
-r = requests.put(<span class="hljs-string">'/api/boards/{board}/lists/{list}/cards/{card}'</span>, params={
-
-}, headers = headers)
-
-<span class="hljs-keyword">print</span> r.json()
-
-</code></pre>
-<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/boards/{board}/lists/{list}/cards/{card}"</span>);
-HttpURLConnection con = (HttpURLConnection) obj.openConnection();
-con.setRequestMethod(<span class="hljs-string">"PUT"</span>);
-<span class="hljs-keyword">int</span> responseCode = con.getResponseCode();
-BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader(
- <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream()));
-String inputLine;
-StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer();
-<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) {
- response.append(inputLine);
-}
-in.close();
-System.out.println(response.toString());
-
-</code></pre>
-<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main
-
-<span class="hljs-keyword">import</span> (
- <span class="hljs-string">"bytes"</span>
- <span class="hljs-string">"net/http"</span>
-)
-
-<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
-
- headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
- <span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>},
- <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
- }
-
- data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
- req, err := http.NewRequest(<span class="hljs-string">"PUT"</span>, <span class="hljs-string">"/api/boards/{board}/lists/{list}/cards/{card}"</span>, data)
- req.Header = headers
-
- client := &amp;http.Client{}
- resp, err := client.Do(req)
- <span class="hljs-comment">// ...</span>
-}
-
-</code></pre>
-<p><code>PUT /api/boards/{board}/lists/{list}/cards/{card}</code></p>
-<blockquote>
-<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">listId:</span> <span class="hljs-string">string</span>
-<span class="hljs-attr">authorId:</span> <span class="hljs-string">string</span>
-<span class="hljs-attr">parentId:</span> <span class="hljs-string">string</span>
-<span class="hljs-attr">description:</span> <span class="hljs-string">string</span>
-<span class="hljs-attr">color:</span> <span class="hljs-string">string</span>
-<span class="hljs-attr">labelIds:</span> <span class="hljs-string">string</span>
-<span class="hljs-attr">requestedBy:</span> <span class="hljs-string">string</span>
-<span class="hljs-attr">assignedBy:</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>
-<span class="hljs-attr">endAt:</span> <span class="hljs-string">string</span>
-<span class="hljs-attr">spentTime:</span> <span class="hljs-string">string</span>
-<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>
-<h3 id="put_board_list_card-parameters">Parameters</h3>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>In</th>
-<th>Type</th>
-<th>Required</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>board</td>
-<td>path</td>
-<td>string</td>
-<td>true</td>
-<td>the board value</td>
-</tr>
-<tr>
-<td>list</td>
-<td>path</td>
-<td>string</td>
-<td>true</td>
-<td>the list value</td>
-</tr>
-<tr>
-<td>card</td>
-<td>path</td>
-<td>string</td>
-<td>true</td>
-<td>the card value</td>
-</tr>
-<tr>
-<td>body</td>
-<td>body</td>
-<td>object</td>
-<td>false</td>
-<td>none</td>
-</tr>
-<tr>
-<td>» title</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the title value</td>
-</tr>
-<tr>
-<td>» listId</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the listId value</td>
-</tr>
-<tr>
-<td>» authorId</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the authorId value</td>
-</tr>
-<tr>
-<td>» parentId</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the parentId value</td>
-</tr>
-<tr>
-<td>» description</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the description value</td>
-</tr>
-<tr>
-<td>» color</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the color value</td>
-</tr>
-<tr>
-<td>» labelIds</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the labelIds value</td>
-</tr>
-<tr>
-<td>» requestedBy</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the requestedBy value</td>
-</tr>
-<tr>
-<td>» assignedBy</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the assignedBy value</td>
-</tr>
-<tr>
-<td>» receivedAt</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the receivedAt value</td>
-</tr>
-<tr>
-<td>» startAt</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the startAt value</td>
-</tr>
-<tr>
-<td>» dueAt</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the dueAt value</td>
-</tr>
-<tr>
-<td>» endAt</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the endAt value</td>
-</tr>
-<tr>
-<td>» spentTime</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the spentTime value</td>
-</tr>
-<tr>
-<td>» isOverTime</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the isOverTime value</td>
-</tr>
-<tr>
-<td>» customFields</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the customFields value</td>
-</tr>
-<tr>
-<td>» members</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<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>
-<td>true</td>
-<td>the swimlaneId value</td>
-</tr>
-</tbody>
-</table>
-<h3 id="put_board_list_card-responses">Responses</h3>
-<table>
-<thead>
-<tr>
-<th>Status</th>
-<th>Meaning</th>
-<th>Description</th>
-<th>Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>200</td>
-<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td>
-<td>200 response</td>
-<td>None</td>
-</tr>
-</tbody>
-</table>
-<aside class="warning">
-To perform this operation, you must be authenticated by means of one of the following methods:
-UserSecurity
-</aside>
-<h2 id="delete_board_list_card">delete_board_list_card</h2>
-<p><a id="opIddelete_board_list_card"></a></p>
-<blockquote>
-<p>Code samples</p>
-</blockquote>
-<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span>
-curl -X DELETE /api/boards/{board}/lists/{list}/cards/{card} \
- -H <span class="hljs-string">'Authorization: API_KEY'</span>
-
-</code></pre>
-<pre class="highlight tab tab-http"><code><span class="hljs-keyword">DELETE</span> <span class="hljs-string">/api/boards/{board}/lists/{list}/cards/{card}</span> HTTP/1.1
-
-<span class="undefined"></span></code></pre>
-<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = {
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-$.ajax({
- <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/boards/{board}/lists/{list}/cards/{card}'</span>,
- <span class="hljs-attr">method</span>: <span class="hljs-string">'delete'</span>,
-
- <span class="hljs-attr">headers</span>: headers,
- <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{
- <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data));
- }
-})
-
-</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> headers = {
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-fetch(<span class="hljs-string">'/api/boards/{board}/lists/{list}/cards/{card}'</span>,
-{
- <span class="hljs-attr">method</span>: <span class="hljs-string">'DELETE'</span>,
-
- <span class="hljs-attr">headers</span>: headers
-})
-.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{
- <span class="hljs-keyword">return</span> res.json();
-}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{
- <span class="hljs-built_in">console</span>.log(body);
-});
-
-</code></pre>
-<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span>
-<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span>
-
-headers = {
- <span class="hljs-string">'Authorization'</span> =&gt; <span class="hljs-string">'API_KEY'</span>
-}
-
-result = RestClient.delete <span class="hljs-string">'/api/boards/{board}/lists/{list}/cards/{card}'</span>,
- <span class="hljs-symbol">params:</span> {
- }, <span class="hljs-symbol">headers:</span> headers
-
-p JSON.parse(result)
-
-</code></pre>
-<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests
-headers = {
- <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span>
-}
-
-r = requests.delete(<span class="hljs-string">'/api/boards/{board}/lists/{list}/cards/{card}'</span>, params={
-
-}, headers = headers)
-
-<span class="hljs-keyword">print</span> r.json()
-
-</code></pre>
-<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/boards/{board}/lists/{list}/cards/{card}"</span>);
-HttpURLConnection con = (HttpURLConnection) obj.openConnection();
-con.setRequestMethod(<span class="hljs-string">"DELETE"</span>);
-<span class="hljs-keyword">int</span> responseCode = con.getResponseCode();
-BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader(
- <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream()));
-String inputLine;
-StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer();
-<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) {
- response.append(inputLine);
-}
-in.close();
-System.out.println(response.toString());
-
-</code></pre>
-<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main
-
-<span class="hljs-keyword">import</span> (
- <span class="hljs-string">"bytes"</span>
- <span class="hljs-string">"net/http"</span>
-)
-
-<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
-
- headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
- <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
- }
-
- data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
- req, err := http.NewRequest(<span class="hljs-string">"DELETE"</span>, <span class="hljs-string">"/api/boards/{board}/lists/{list}/cards/{card}"</span>, data)
- req.Header = headers
-
- client := &amp;http.Client{}
- resp, err := client.Do(req)
- <span class="hljs-comment">// ...</span>
-}
-
-</code></pre>
-<p><code>DELETE /api/boards/{board}/lists/{list}/cards/{card}</code></p>
-<h3 id="delete_board_list_card-parameters">Parameters</h3>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>In</th>
-<th>Type</th>
-<th>Required</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>board</td>
-<td>path</td>
-<td>string</td>
-<td>true</td>
-<td>the board value</td>
-</tr>
-<tr>
-<td>list</td>
-<td>path</td>
-<td>string</td>
-<td>true</td>
-<td>the list value</td>
-</tr>
-<tr>
-<td>card</td>
-<td>path</td>
-<td>string</td>
-<td>true</td>
-<td>the card value</td>
-</tr>
-</tbody>
-</table>
-<h3 id="delete_board_list_card-responses">Responses</h3>
-<table>
-<thead>
-<tr>
-<th>Status</th>
-<th>Meaning</th>
-<th>Description</th>
-<th>Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>200</td>
-<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td>
-<td>200 response</td>
-<td>None</td>
-</tr>
-</tbody>
-</table>
-<aside class="warning">
-To perform this operation, you must be authenticated by means of one of the following methods:
-UserSecurity
-</aside>
-<h2 id="get_board_swimlane_cards">get_board_swimlane_cards</h2>
-<p><a id="opIdget_board_swimlane_cards"></a></p>
-<blockquote>
-<p>Code samples</p>
-</blockquote>
-<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span>
-curl -X GET /api/boards/{board}/swimlanes/{swimlane}/cards \
- -H <span class="hljs-string">'Authorization: API_KEY'</span>
-
-</code></pre>
-<pre class="highlight tab tab-http"><code><span class="hljs-keyword">GET</span> <span class="hljs-string">/api/boards/{board}/swimlanes/{swimlane}/cards</span> HTTP/1.1
-
-<span class="undefined"></span></code></pre>
-<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = {
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-$.ajax({
- <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/boards/{board}/swimlanes/{swimlane}/cards'</span>,
- <span class="hljs-attr">method</span>: <span class="hljs-string">'get'</span>,
-
- <span class="hljs-attr">headers</span>: headers,
- <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{
- <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data));
- }
-})
-
-</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> headers = {
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-fetch(<span class="hljs-string">'/api/boards/{board}/swimlanes/{swimlane}/cards'</span>,
-{
- <span class="hljs-attr">method</span>: <span class="hljs-string">'GET'</span>,
-
- <span class="hljs-attr">headers</span>: headers
-})
-.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{
- <span class="hljs-keyword">return</span> res.json();
-}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{
- <span class="hljs-built_in">console</span>.log(body);
-});
-
-</code></pre>
-<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span>
-<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span>
-
-headers = {
- <span class="hljs-string">'Authorization'</span> =&gt; <span class="hljs-string">'API_KEY'</span>
-}
-
-result = RestClient.get <span class="hljs-string">'/api/boards/{board}/swimlanes/{swimlane}/cards'</span>,
- <span class="hljs-symbol">params:</span> {
- }, <span class="hljs-symbol">headers:</span> headers
-
-p JSON.parse(result)
-
-</code></pre>
-<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests
-headers = {
- <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span>
-}
-
-r = requests.get(<span class="hljs-string">'/api/boards/{board}/swimlanes/{swimlane}/cards'</span>, params={
-
-}, headers = headers)
-
-<span class="hljs-keyword">print</span> r.json()
-
-</code></pre>
-<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/boards/{board}/swimlanes/{swimlane}/cards"</span>);
-HttpURLConnection con = (HttpURLConnection) obj.openConnection();
-con.setRequestMethod(<span class="hljs-string">"GET"</span>);
-<span class="hljs-keyword">int</span> responseCode = con.getResponseCode();
-BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader(
- <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream()));
-String inputLine;
-StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer();
-<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) {
- response.append(inputLine);
-}
-in.close();
-System.out.println(response.toString());
-
-</code></pre>
-<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main
-
-<span class="hljs-keyword">import</span> (
- <span class="hljs-string">"bytes"</span>
- <span class="hljs-string">"net/http"</span>
-)
-
-<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
-
- headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
- <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
- }
-
- data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
- req, err := http.NewRequest(<span class="hljs-string">"GET"</span>, <span class="hljs-string">"/api/boards/{board}/swimlanes/{swimlane}/cards"</span>, data)
- req.Header = headers
-
- client := &amp;http.Client{}
- resp, err := client.Do(req)
- <span class="hljs-comment">// ...</span>
-}
-
-</code></pre>
-<p><code>GET /api/boards/{board}/swimlanes/{swimlane}/cards</code></p>
-<h3 id="get_board_swimlane_cards-parameters">Parameters</h3>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>In</th>
-<th>Type</th>
-<th>Required</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>board</td>
-<td>path</td>
-<td>string</td>
-<td>true</td>
-<td>the board value</td>
-</tr>
-<tr>
-<td>swimlane</td>
-<td>path</td>
-<td>string</td>
-<td>true</td>
-<td>the swimlane value</td>
-</tr>
-</tbody>
-</table>
-<h3 id="get_board_swimlane_cards-responses">Responses</h3>
-<table>
-<thead>
-<tr>
-<th>Status</th>
-<th>Meaning</th>
-<th>Description</th>
-<th>Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>200</td>
-<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td>
-<td>200 response</td>
-<td>None</td>
-</tr>
-</tbody>
-</table>
-<aside class="warning">
-To perform this operation, you must be authenticated by means of one of the following methods:
-UserSecurity
-</aside>
-<h1 id="wekan-rest-api-users">Users</h1>
-<h2 id="add_board_member">add_board_member</h2>
-<p><a id="opIdadd_board_member"></a></p>
-<blockquote>
-<p>Code samples</p>
-</blockquote>
-<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span>
-curl -X POST /api/boards/{board}/members/{user}/add \
- -H <span class="hljs-string">'Content-Type: multipart/form-data'</span> \
- -H <span class="hljs-string">'Accept: application/json'</span> \
- -H <span class="hljs-string">'Authorization: API_KEY'</span>
-
-</code></pre>
-<pre class="highlight tab tab-http"><code><span class="hljs-keyword">POST</span> <span class="hljs-string">/api/boards/{board}/members/{user}/add</span> HTTP/1.1
-
-<span class="fortran">Content-<span class="hljs-keyword">Type</span>: multipart/<span class="hljs-keyword">form</span>-<span class="hljs-keyword">data</span>
-Accept: application/json
-
-</span></code></pre>
-<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = {
- <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-$.ajax({
- <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/boards/{board}/members/{user}/add'</span>,
- <span class="hljs-attr">method</span>: <span class="hljs-string">'post'</span>,
-
- <span class="hljs-attr">headers</span>: headers,
- <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{
- <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data));
- }
-})
-
-</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">'{
- "action": "string",
- "isAdmin": true,
- "isNoComments": true,
- "isCommentOnly": true
-}'</span>;
-<span class="hljs-keyword">const</span> headers = {
- <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-fetch(<span class="hljs-string">'/api/boards/{board}/members/{user}/add'</span>,
-{
- <span class="hljs-attr">method</span>: <span class="hljs-string">'POST'</span>,
- <span class="hljs-attr">body</span>: inputBody,
- <span class="hljs-attr">headers</span>: headers
-})
-.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{
- <span class="hljs-keyword">return</span> res.json();
-}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{
- <span class="hljs-built_in">console</span>.log(body);
-});
-
-</code></pre>
-<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span>
-<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span>
-
-headers = {
- <span class="hljs-string">'Content-Type'</span> =&gt; <span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Accept'</span> =&gt; <span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span> =&gt; <span class="hljs-string">'API_KEY'</span>
-}
-
-result = RestClient.post <span class="hljs-string">'/api/boards/{board}/members/{user}/add'</span>,
- <span class="hljs-symbol">params:</span> {
- }, <span class="hljs-symbol">headers:</span> headers
-
-p JSON.parse(result)
-
-</code></pre>
-<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests
-headers = {
- <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span>
-}
-
-r = requests.post(<span class="hljs-string">'/api/boards/{board}/members/{user}/add'</span>, params={
-
-}, headers = headers)
-
-<span class="hljs-keyword">print</span> r.json()
-
-</code></pre>
-<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/boards/{board}/members/{user}/add"</span>);
-HttpURLConnection con = (HttpURLConnection) obj.openConnection();
-con.setRequestMethod(<span class="hljs-string">"POST"</span>);
-<span class="hljs-keyword">int</span> responseCode = con.getResponseCode();
-BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader(
- <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream()));
-String inputLine;
-StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer();
-<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) {
- response.append(inputLine);
-}
-in.close();
-System.out.println(response.toString());
-
-</code></pre>
-<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main
-
-<span class="hljs-keyword">import</span> (
- <span class="hljs-string">"bytes"</span>
- <span class="hljs-string">"net/http"</span>
-)
-
-<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
-
- headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
- <span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>},
- <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
- <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
- }
-
- data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
- req, err := http.NewRequest(<span class="hljs-string">"POST"</span>, <span class="hljs-string">"/api/boards/{board}/members/{user}/add"</span>, data)
- req.Header = headers
-
- client := &amp;http.Client{}
- resp, err := client.Do(req)
- <span class="hljs-comment">// ...</span>
-}
-
-</code></pre>
-<p><code>POST /api/boards/{board}/members/{user}/add</code></p>
-<p><em>Add New Board Member with Role</em></p>
-<p>Only the admin user (the first user) can call the REST API.</p>
-<p><strong>Note</strong>: see <a href="#set_board_member_permission">Boards.set_board_member_permission</a>
-to later change the permissions.</p>
-<blockquote>
-<p>Body parameter</p>
-</blockquote>
-<pre class="highlight tab tab-yaml"><code><span class="hljs-attr">action:</span> <span class="hljs-string">string</span>
-<span class="hljs-attr">isAdmin:</span> <span class="hljs-literal">true</span>
-<span class="hljs-attr">isNoComments:</span> <span class="hljs-literal">true</span>
-<span class="hljs-attr">isCommentOnly:</span> <span class="hljs-literal">true</span>
-
-</code></pre>
-<h3 id="add_board_member-parameters">Parameters</h3>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>In</th>
-<th>Type</th>
-<th>Required</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>board</td>
-<td>path</td>
-<td>string</td>
-<td>true</td>
-<td>the board ID</td>
-</tr>
-<tr>
-<td>user</td>
-<td>path</td>
-<td>string</td>
-<td>true</td>
-<td>the user ID</td>
-</tr>
-<tr>
-<td>body</td>
-<td>body</td>
-<td>object</td>
-<td>false</td>
-<td>none</td>
-</tr>
-<tr>
-<td>» action</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the action value</td>
-</tr>
-<tr>
-<td>» isAdmin</td>
-<td>body</td>
-<td>boolean</td>
-<td>true</td>
-<td>is the user an admin of the board</td>
-</tr>
-<tr>
-<td>» isNoComments</td>
-<td>body</td>
-<td>boolean</td>
-<td>true</td>
-<td>disable comments</td>
-</tr>
-<tr>
-<td>» isCommentOnly</td>
-<td>body</td>
-<td>boolean</td>
-<td>true</td>
-<td>only enable comments</td>
-</tr>
-</tbody>
-</table>
-<h4 id="detailed-descriptions">Detailed descriptions</h4>
-<p><strong>board</strong>: the board ID</p>
-<p><strong>user</strong>: the user ID</p>
-<blockquote>
-<p>Example responses</p>
-</blockquote>
-<blockquote>
-<p>200 Response</p>
-</blockquote>
-<pre class="highlight tab tab-json"><code>{
- <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"title"</span>: <span class="hljs-string">"string"</span>
-}
-</code></pre>
-<h3 id="add_board_member-responses">Responses</h3>
-<table>
-<thead>
-<tr>
-<th>Status</th>
-<th>Meaning</th>
-<th>Description</th>
-<th>Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>200</td>
-<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td>
-<td>200 response</td>
-<td>Inline</td>
-</tr>
-</tbody>
-</table>
-<h3 id="add_board_member-responseschema">Response Schema</h3>
-<p>Status Code <strong>200</strong></p>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>Type</th>
-<th>Required</th>
-<th>Restrictions</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>» _id</td>
-<td>string</td>
-<td>false</td>
-<td>none</td>
-<td>none</td>
-</tr>
-<tr>
-<td>» title</td>
-<td>string</td>
-<td>false</td>
-<td>none</td>
-<td>none</td>
-</tr>
-</tbody>
-</table>
-<aside class="warning">
-To perform this operation, you must be authenticated by means of one of the following methods:
-UserSecurity
-</aside>
-<h2 id="post_board_user_remove">post_board_user_remove</h2>
-<p><a id="opIdpost_board_user_remove"></a></p>
-<blockquote>
-<p>Code samples</p>
-</blockquote>
-<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span>
-curl -X POST /api/boards/{board}/members/{user}/remove \
- -H <span class="hljs-string">'Content-Type: multipart/form-data'</span> \
- -H <span class="hljs-string">'Authorization: API_KEY'</span>
-
-</code></pre>
-<pre class="highlight tab tab-http"><code><span class="hljs-keyword">POST</span> <span class="hljs-string">/api/boards/{board}/members/{user}/remove</span> HTTP/1.1
-
-<span class="fortran">Content-<span class="hljs-keyword">Type</span>: multipart/<span class="hljs-keyword">form</span>-<span class="hljs-keyword">data</span>
-
-</span></code></pre>
-<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = {
- <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-$.ajax({
- <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/boards/{board}/members/{user}/remove'</span>,
- <span class="hljs-attr">method</span>: <span class="hljs-string">'post'</span>,
-
- <span class="hljs-attr">headers</span>: headers,
- <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{
- <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data));
- }
-})
-
-</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">'{
- "action": "string"
-}'</span>;
-<span class="hljs-keyword">const</span> headers = {
- <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-fetch(<span class="hljs-string">'/api/boards/{board}/members/{user}/remove'</span>,
-{
- <span class="hljs-attr">method</span>: <span class="hljs-string">'POST'</span>,
- <span class="hljs-attr">body</span>: inputBody,
- <span class="hljs-attr">headers</span>: headers
-})
-.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{
- <span class="hljs-keyword">return</span> res.json();
-}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{
- <span class="hljs-built_in">console</span>.log(body);
-});
-
-</code></pre>
-<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span>
-<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span>
-
-headers = {
- <span class="hljs-string">'Content-Type'</span> =&gt; <span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Authorization'</span> =&gt; <span class="hljs-string">'API_KEY'</span>
-}
-
-result = RestClient.post <span class="hljs-string">'/api/boards/{board}/members/{user}/remove'</span>,
- <span class="hljs-symbol">params:</span> {
- }, <span class="hljs-symbol">headers:</span> headers
-
-p JSON.parse(result)
-
-</code></pre>
-<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests
-headers = {
- <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span>
-}
-
-r = requests.post(<span class="hljs-string">'/api/boards/{board}/members/{user}/remove'</span>, params={
-
-}, headers = headers)
-
-<span class="hljs-keyword">print</span> r.json()
-
-</code></pre>
-<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/boards/{board}/members/{user}/remove"</span>);
-HttpURLConnection con = (HttpURLConnection) obj.openConnection();
-con.setRequestMethod(<span class="hljs-string">"POST"</span>);
-<span class="hljs-keyword">int</span> responseCode = con.getResponseCode();
-BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader(
- <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream()));
-String inputLine;
-StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer();
-<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) {
- response.append(inputLine);
-}
-in.close();
-System.out.println(response.toString());
-
-</code></pre>
-<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main
-
-<span class="hljs-keyword">import</span> (
- <span class="hljs-string">"bytes"</span>
- <span class="hljs-string">"net/http"</span>
-)
-
-<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
-
- headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
- <span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>},
- <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
- }
-
- data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
- req, err := http.NewRequest(<span class="hljs-string">"POST"</span>, <span class="hljs-string">"/api/boards/{board}/members/{user}/remove"</span>, data)
- req.Header = headers
-
- client := &amp;http.Client{}
- resp, err := client.Do(req)
- <span class="hljs-comment">// ...</span>
-}
-
-</code></pre>
-<p><code>POST /api/boards/{board}/members/{user}/remove</code></p>
-<blockquote>
-<p>Body parameter</p>
-</blockquote>
-<pre class="highlight tab tab-yaml"><code><span class="hljs-attr">action:</span> <span class="hljs-string">string</span>
-
-</code></pre>
-<h3 id="post_board_user_remove-parameters">Parameters</h3>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>In</th>
-<th>Type</th>
-<th>Required</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>board</td>
-<td>path</td>
-<td>string</td>
-<td>true</td>
-<td>the board value</td>
-</tr>
-<tr>
-<td>user</td>
-<td>path</td>
-<td>string</td>
-<td>true</td>
-<td>the user value</td>
-</tr>
-<tr>
-<td>body</td>
-<td>body</td>
-<td>object</td>
-<td>false</td>
-<td>none</td>
-</tr>
-<tr>
-<td>» action</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the action value</td>
-</tr>
-</tbody>
-</table>
-<h3 id="post_board_user_remove-responses">Responses</h3>
-<table>
-<thead>
-<tr>
-<th>Status</th>
-<th>Meaning</th>
-<th>Description</th>
-<th>Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>200</td>
-<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td>
-<td>200 response</td>
-<td>None</td>
-</tr>
-</tbody>
-</table>
-<aside class="warning">
-To perform this operation, you must be authenticated by means of one of the following methods:
-UserSecurity
-</aside>
-<h2 id="get_current_user">get_current_user</h2>
-<p><a id="opIdget_current_user"></a></p>
-<blockquote>
-<p>Code samples</p>
-</blockquote>
-<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span>
-curl -X GET /api/user \
- -H <span class="hljs-string">'Accept: application/json'</span> \
- -H <span class="hljs-string">'Authorization: API_KEY'</span>
-
-</code></pre>
-<pre class="highlight tab tab-http"><code><span class="hljs-keyword">GET</span> <span class="hljs-string">/api/user</span> HTTP/1.1
-
-<span class="http"><span class="hljs-attribute">Accept</span>: application/json
-
-<span class="undefined"></span></span></code></pre>
-<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = {
- <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-$.ajax({
- <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/user'</span>,
- <span class="hljs-attr">method</span>: <span class="hljs-string">'get'</span>,
-
- <span class="hljs-attr">headers</span>: headers,
- <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{
- <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data));
- }
-})
-
-</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> headers = {
- <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-fetch(<span class="hljs-string">'/api/user'</span>,
-{
- <span class="hljs-attr">method</span>: <span class="hljs-string">'GET'</span>,
-
- <span class="hljs-attr">headers</span>: headers
-})
-.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{
- <span class="hljs-keyword">return</span> res.json();
-}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{
- <span class="hljs-built_in">console</span>.log(body);
-});
-
-</code></pre>
-<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span>
-<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span>
-
-headers = {
- <span class="hljs-string">'Accept'</span> =&gt; <span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span> =&gt; <span class="hljs-string">'API_KEY'</span>
-}
-
-result = RestClient.get <span class="hljs-string">'/api/user'</span>,
- <span class="hljs-symbol">params:</span> {
- }, <span class="hljs-symbol">headers:</span> headers
-
-p JSON.parse(result)
-
-</code></pre>
-<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests
-headers = {
- <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span>
-}
-
-r = requests.get(<span class="hljs-string">'/api/user'</span>, params={
-
-}, headers = headers)
-
-<span class="hljs-keyword">print</span> r.json()
-
-</code></pre>
-<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/user"</span>);
-HttpURLConnection con = (HttpURLConnection) obj.openConnection();
-con.setRequestMethod(<span class="hljs-string">"GET"</span>);
-<span class="hljs-keyword">int</span> responseCode = con.getResponseCode();
-BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader(
- <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream()));
-String inputLine;
-StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer();
-<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) {
- response.append(inputLine);
-}
-in.close();
-System.out.println(response.toString());
-
-</code></pre>
-<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main
-
-<span class="hljs-keyword">import</span> (
- <span class="hljs-string">"bytes"</span>
- <span class="hljs-string">"net/http"</span>
-)
-
-<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
-
- headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
- <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
- <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
- }
-
- data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
- req, err := http.NewRequest(<span class="hljs-string">"GET"</span>, <span class="hljs-string">"/api/user"</span>, data)
- req.Header = headers
-
- client := &amp;http.Client{}
- resp, err := client.Do(req)
- <span class="hljs-comment">// ...</span>
-}
-
-</code></pre>
-<p><code>GET /api/user</code></p>
-<p><em>returns the current user</em></p>
-<blockquote>
-<p>Example responses</p>
-</blockquote>
-<blockquote>
-<p>200 Response</p>
-</blockquote>
-<pre class="highlight tab tab-json"><code>{
- <span class="hljs-attr">"username"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"emails"</span>: [
- {
- <span class="hljs-attr">"address"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"verified"</span>: <span class="hljs-literal">true</span>
- }
- ],
- <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"modifiedAt"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"profile"</span>: {
- <span class="hljs-attr">"avatarUrl"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"emailBuffer"</span>: [
- <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>,
- <span class="hljs-attr">"invitedBoards"</span>: [
- <span class="hljs-string">"string"</span>
- ],
- <span class="hljs-attr">"language"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"notifications"</span>: [],
- <span class="hljs-attr">"activity"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"read"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"showCardsCountAt"</span>: <span class="hljs-number">0</span>,
- <span class="hljs-attr">"starredBoards"</span>: [
- <span class="hljs-string">"string"</span>
- ],
- <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>,
- <span class="hljs-attr">"boardTemplatesSwimlaneId"</span>: <span class="hljs-string">"string"</span>
- },
- <span class="hljs-attr">"services"</span>: {},
- <span class="hljs-attr">"heartbeat"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"isAdmin"</span>: <span class="hljs-literal">true</span>,
- <span class="hljs-attr">"createdThroughApi"</span>: <span class="hljs-literal">true</span>,
- <span class="hljs-attr">"loginDisabled"</span>: <span class="hljs-literal">true</span>,
- <span class="hljs-attr">"authenticationMethod"</span>: <span class="hljs-string">"string"</span>
-}
-</code></pre>
-<h3 id="get_current_user-responses">Responses</h3>
-<table>
-<thead>
-<tr>
-<th>Status</th>
-<th>Meaning</th>
-<th>Description</th>
-<th>Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>200</td>
-<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td>
-<td>200 response</td>
-<td><a href="#schemausers">Users</a></td>
-</tr>
-</tbody>
-</table>
-<aside class="warning">
-To perform this operation, you must be authenticated by means of one of the following methods:
-UserSecurity
-</aside>
-<h2 id="get_all_users">get_all_users</h2>
-<p><a id="opIdget_all_users"></a></p>
-<blockquote>
-<p>Code samples</p>
-</blockquote>
-<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span>
-curl -X GET /api/users \
- -H <span class="hljs-string">'Accept: application/json'</span> \
- -H <span class="hljs-string">'Authorization: API_KEY'</span>
-
-</code></pre>
-<pre class="highlight tab tab-http"><code><span class="hljs-keyword">GET</span> <span class="hljs-string">/api/users</span> HTTP/1.1
-
-<span class="http"><span class="hljs-attribute">Accept</span>: application/json
-
-<span class="undefined"></span></span></code></pre>
-<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = {
- <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-$.ajax({
- <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/users'</span>,
- <span class="hljs-attr">method</span>: <span class="hljs-string">'get'</span>,
-
- <span class="hljs-attr">headers</span>: headers,
- <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{
- <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data));
- }
-})
-
-</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> headers = {
- <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-fetch(<span class="hljs-string">'/api/users'</span>,
-{
- <span class="hljs-attr">method</span>: <span class="hljs-string">'GET'</span>,
-
- <span class="hljs-attr">headers</span>: headers
-})
-.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{
- <span class="hljs-keyword">return</span> res.json();
-}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{
- <span class="hljs-built_in">console</span>.log(body);
-});
-
-</code></pre>
-<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span>
-<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span>
-
-headers = {
- <span class="hljs-string">'Accept'</span> =&gt; <span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span> =&gt; <span class="hljs-string">'API_KEY'</span>
-}
-
-result = RestClient.get <span class="hljs-string">'/api/users'</span>,
- <span class="hljs-symbol">params:</span> {
- }, <span class="hljs-symbol">headers:</span> headers
-
-p JSON.parse(result)
-
-</code></pre>
-<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests
-headers = {
- <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span>
-}
-
-r = requests.get(<span class="hljs-string">'/api/users'</span>, params={
-
-}, headers = headers)
-
-<span class="hljs-keyword">print</span> r.json()
-
-</code></pre>
-<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/users"</span>);
-HttpURLConnection con = (HttpURLConnection) obj.openConnection();
-con.setRequestMethod(<span class="hljs-string">"GET"</span>);
-<span class="hljs-keyword">int</span> responseCode = con.getResponseCode();
-BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader(
- <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream()));
-String inputLine;
-StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer();
-<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) {
- response.append(inputLine);
-}
-in.close();
-System.out.println(response.toString());
-
-</code></pre>
-<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main
-
-<span class="hljs-keyword">import</span> (
- <span class="hljs-string">"bytes"</span>
- <span class="hljs-string">"net/http"</span>
-)
-
-<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
-
- headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
- <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
- <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
- }
-
- data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
- req, err := http.NewRequest(<span class="hljs-string">"GET"</span>, <span class="hljs-string">"/api/users"</span>, data)
- req.Header = headers
-
- client := &amp;http.Client{}
- resp, err := client.Do(req)
- <span class="hljs-comment">// ...</span>
-}
-
-</code></pre>
-<p><code>GET /api/users</code></p>
-<p><em>return all the users</em></p>
-<p>Only the admin user (the first user) can call the REST API.</p>
-<blockquote>
-<p>Example responses</p>
-</blockquote>
-<blockquote>
-<p>200 Response</p>
-</blockquote>
-<pre class="highlight tab tab-json"><code>[
- {
- <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"username"</span>: <span class="hljs-string">"string"</span>
- }
-]
-</code></pre>
-<h3 id="get_all_users-responses">Responses</h3>
-<table>
-<thead>
-<tr>
-<th>Status</th>
-<th>Meaning</th>
-<th>Description</th>
-<th>Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>200</td>
-<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td>
-<td>200 response</td>
-<td>Inline</td>
-</tr>
-</tbody>
-</table>
-<h3 id="get_all_users-responseschema">Response Schema</h3>
-<p>Status Code <strong>200</strong></p>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>Type</th>
-<th>Required</th>
-<th>Restrictions</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>» _id</td>
-<td>string</td>
-<td>false</td>
-<td>none</td>
-<td>none</td>
-</tr>
-<tr>
-<td>» username</td>
-<td>string</td>
-<td>false</td>
-<td>none</td>
-<td>none</td>
-</tr>
-</tbody>
-</table>
-<aside class="warning">
-To perform this operation, you must be authenticated by means of one of the following methods:
-UserSecurity
-</aside>
-<h2 id="new_user">new_user</h2>
-<p><a id="opIdnew_user"></a></p>
-<blockquote>
-<p>Code samples</p>
-</blockquote>
-<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span>
-curl -X POST /api/users \
- -H <span class="hljs-string">'Content-Type: multipart/form-data'</span> \
- -H <span class="hljs-string">'Accept: application/json'</span> \
- -H <span class="hljs-string">'Authorization: API_KEY'</span>
-
-</code></pre>
-<pre class="highlight tab tab-http"><code><span class="hljs-keyword">POST</span> <span class="hljs-string">/api/users</span> HTTP/1.1
-
-<span class="fortran">Content-<span class="hljs-keyword">Type</span>: multipart/<span class="hljs-keyword">form</span>-<span class="hljs-keyword">data</span>
-Accept: application/json
-
-</span></code></pre>
-<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = {
- <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-$.ajax({
- <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/users'</span>,
- <span class="hljs-attr">method</span>: <span class="hljs-string">'post'</span>,
-
- <span class="hljs-attr">headers</span>: headers,
- <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{
- <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data));
- }
-})
-
-</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">'{
- "username": "string",
- "email": "string",
- "password": "string"
-}'</span>;
-<span class="hljs-keyword">const</span> headers = {
- <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-fetch(<span class="hljs-string">'/api/users'</span>,
-{
- <span class="hljs-attr">method</span>: <span class="hljs-string">'POST'</span>,
- <span class="hljs-attr">body</span>: inputBody,
- <span class="hljs-attr">headers</span>: headers
-})
-.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{
- <span class="hljs-keyword">return</span> res.json();
-}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{
- <span class="hljs-built_in">console</span>.log(body);
-});
-
-</code></pre>
-<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span>
-<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span>
-
-headers = {
- <span class="hljs-string">'Content-Type'</span> =&gt; <span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Accept'</span> =&gt; <span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span> =&gt; <span class="hljs-string">'API_KEY'</span>
-}
-
-result = RestClient.post <span class="hljs-string">'/api/users'</span>,
- <span class="hljs-symbol">params:</span> {
- }, <span class="hljs-symbol">headers:</span> headers
-
-p JSON.parse(result)
-
-</code></pre>
-<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests
-headers = {
- <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span>
-}
-
-r = requests.post(<span class="hljs-string">'/api/users'</span>, params={
-
-}, headers = headers)
-
-<span class="hljs-keyword">print</span> r.json()
-
-</code></pre>
-<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/users"</span>);
-HttpURLConnection con = (HttpURLConnection) obj.openConnection();
-con.setRequestMethod(<span class="hljs-string">"POST"</span>);
-<span class="hljs-keyword">int</span> responseCode = con.getResponseCode();
-BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader(
- <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream()));
-String inputLine;
-StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer();
-<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) {
- response.append(inputLine);
-}
-in.close();
-System.out.println(response.toString());
-
-</code></pre>
-<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main
-
-<span class="hljs-keyword">import</span> (
- <span class="hljs-string">"bytes"</span>
- <span class="hljs-string">"net/http"</span>
-)
-
-<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
-
- headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
- <span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>},
- <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
- <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
- }
-
- data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
- req, err := http.NewRequest(<span class="hljs-string">"POST"</span>, <span class="hljs-string">"/api/users"</span>, data)
- req.Header = headers
-
- client := &amp;http.Client{}
- resp, err := client.Do(req)
- <span class="hljs-comment">// ...</span>
-}
-
-</code></pre>
-<p><code>POST /api/users</code></p>
-<p><em>Create a new user</em></p>
-<p>Only the admin user (the first user) can call the REST API.</p>
-<blockquote>
-<p>Body parameter</p>
-</blockquote>
-<pre class="highlight tab tab-yaml"><code><span class="hljs-attr">username:</span> <span class="hljs-string">string</span>
-<span class="hljs-attr">email:</span> <span class="hljs-string">string</span>
-<span class="hljs-attr">password:</span> <span class="hljs-string">string</span>
-
-</code></pre>
-<h3 id="new_user-parameters">Parameters</h3>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>In</th>
-<th>Type</th>
-<th>Required</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>body</td>
-<td>body</td>
-<td>object</td>
-<td>false</td>
-<td>none</td>
-</tr>
-<tr>
-<td>» username</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the new username</td>
-</tr>
-<tr>
-<td>» email</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the email of the new user</td>
-</tr>
-<tr>
-<td>» password</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the password of the new user</td>
-</tr>
-</tbody>
-</table>
-<blockquote>
-<p>Example responses</p>
-</blockquote>
-<blockquote>
-<p>200 Response</p>
-</blockquote>
-<pre class="highlight tab tab-json"><code>{
- <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span>
-}
-</code></pre>
-<h3 id="new_user-responses">Responses</h3>
-<table>
-<thead>
-<tr>
-<th>Status</th>
-<th>Meaning</th>
-<th>Description</th>
-<th>Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>200</td>
-<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td>
-<td>200 response</td>
-<td>Inline</td>
-</tr>
-</tbody>
-</table>
-<h3 id="new_user-responseschema">Response Schema</h3>
-<p>Status Code <strong>200</strong></p>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>Type</th>
-<th>Required</th>
-<th>Restrictions</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>» _id</td>
-<td>string</td>
-<td>false</td>
-<td>none</td>
-<td>none</td>
-</tr>
-</tbody>
-</table>
-<aside class="warning">
-To perform this operation, you must be authenticated by means of one of the following methods:
-UserSecurity
-</aside>
-<h2 id="get_user">get_user</h2>
-<p><a id="opIdget_user"></a></p>
-<blockquote>
-<p>Code samples</p>
-</blockquote>
-<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span>
-curl -X GET /api/users/{user} \
- -H <span class="hljs-string">'Accept: application/json'</span> \
- -H <span class="hljs-string">'Authorization: API_KEY'</span>
-
-</code></pre>
-<pre class="highlight tab tab-http"><code><span class="hljs-keyword">GET</span> <span class="hljs-string">/api/users/{user}</span> HTTP/1.1
-
-<span class="http"><span class="hljs-attribute">Accept</span>: application/json
-
-<span class="undefined"></span></span></code></pre>
-<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = {
- <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-$.ajax({
- <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/users/{user}'</span>,
- <span class="hljs-attr">method</span>: <span class="hljs-string">'get'</span>,
-
- <span class="hljs-attr">headers</span>: headers,
- <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{
- <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data));
- }
-})
-
-</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> headers = {
- <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-fetch(<span class="hljs-string">'/api/users/{user}'</span>,
-{
- <span class="hljs-attr">method</span>: <span class="hljs-string">'GET'</span>,
-
- <span class="hljs-attr">headers</span>: headers
-})
-.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{
- <span class="hljs-keyword">return</span> res.json();
-}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{
- <span class="hljs-built_in">console</span>.log(body);
-});
-
-</code></pre>
-<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span>
-<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span>
-
-headers = {
- <span class="hljs-string">'Accept'</span> =&gt; <span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span> =&gt; <span class="hljs-string">'API_KEY'</span>
-}
-
-result = RestClient.get <span class="hljs-string">'/api/users/{user}'</span>,
- <span class="hljs-symbol">params:</span> {
- }, <span class="hljs-symbol">headers:</span> headers
-
-p JSON.parse(result)
-
-</code></pre>
-<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests
-headers = {
- <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span>
-}
-
-r = requests.get(<span class="hljs-string">'/api/users/{user}'</span>, params={
-
-}, headers = headers)
-
-<span class="hljs-keyword">print</span> r.json()
-
-</code></pre>
-<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/users/{user}"</span>);
-HttpURLConnection con = (HttpURLConnection) obj.openConnection();
-con.setRequestMethod(<span class="hljs-string">"GET"</span>);
-<span class="hljs-keyword">int</span> responseCode = con.getResponseCode();
-BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader(
- <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream()));
-String inputLine;
-StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer();
-<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) {
- response.append(inputLine);
-}
-in.close();
-System.out.println(response.toString());
-
-</code></pre>
-<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main
-
-<span class="hljs-keyword">import</span> (
- <span class="hljs-string">"bytes"</span>
- <span class="hljs-string">"net/http"</span>
-)
-
-<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
-
- headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
- <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
- <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
- }
-
- data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
- req, err := http.NewRequest(<span class="hljs-string">"GET"</span>, <span class="hljs-string">"/api/users/{user}"</span>, data)
- req.Header = headers
-
- client := &amp;http.Client{}
- resp, err := client.Do(req)
- <span class="hljs-comment">// ...</span>
-}
-
-</code></pre>
-<p><code>GET /api/users/{user}</code></p>
-<p><em>get a given user</em></p>
-<p>Only the admin user (the first user) can call the REST API.</p>
-<h3 id="get_user-parameters">Parameters</h3>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>In</th>
-<th>Type</th>
-<th>Required</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>user</td>
-<td>path</td>
-<td>string</td>
-<td>true</td>
-<td>the user ID</td>
-</tr>
-</tbody>
-</table>
-<h4 id="detailed-descriptions">Detailed descriptions</h4>
-<p><strong>user</strong>: the user ID</p>
-<blockquote>
-<p>Example responses</p>
-</blockquote>
-<blockquote>
-<p>200 Response</p>
-</blockquote>
-<pre class="highlight tab tab-json"><code>{
- <span class="hljs-attr">"username"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"emails"</span>: [
- {
- <span class="hljs-attr">"address"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"verified"</span>: <span class="hljs-literal">true</span>
- }
- ],
- <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"modifiedAt"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"profile"</span>: {
- <span class="hljs-attr">"avatarUrl"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"emailBuffer"</span>: [
- <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>,
- <span class="hljs-attr">"invitedBoards"</span>: [
- <span class="hljs-string">"string"</span>
- ],
- <span class="hljs-attr">"language"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"notifications"</span>: [],
- <span class="hljs-attr">"activity"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"read"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"showCardsCountAt"</span>: <span class="hljs-number">0</span>,
- <span class="hljs-attr">"starredBoards"</span>: [
- <span class="hljs-string">"string"</span>
- ],
- <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>,
- <span class="hljs-attr">"boardTemplatesSwimlaneId"</span>: <span class="hljs-string">"string"</span>
- },
- <span class="hljs-attr">"services"</span>: {},
- <span class="hljs-attr">"heartbeat"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"isAdmin"</span>: <span class="hljs-literal">true</span>,
- <span class="hljs-attr">"createdThroughApi"</span>: <span class="hljs-literal">true</span>,
- <span class="hljs-attr">"loginDisabled"</span>: <span class="hljs-literal">true</span>,
- <span class="hljs-attr">"authenticationMethod"</span>: <span class="hljs-string">"string"</span>
-}
-</code></pre>
-<h3 id="get_user-responses">Responses</h3>
-<table>
-<thead>
-<tr>
-<th>Status</th>
-<th>Meaning</th>
-<th>Description</th>
-<th>Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>200</td>
-<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td>
-<td>200 response</td>
-<td><a href="#schemausers">Users</a></td>
-</tr>
-</tbody>
-</table>
-<aside class="warning">
-To perform this operation, you must be authenticated by means of one of the following methods:
-UserSecurity
-</aside>
-<h2 id="edit_user">edit_user</h2>
-<p><a id="opIdedit_user"></a></p>
-<blockquote>
-<p>Code samples</p>
-</blockquote>
-<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span>
-curl -X PUT /api/users/{user} \
- -H <span class="hljs-string">'Content-Type: multipart/form-data'</span> \
- -H <span class="hljs-string">'Accept: application/json'</span> \
- -H <span class="hljs-string">'Authorization: API_KEY'</span>
-
-</code></pre>
-<pre class="highlight tab tab-http"><code><span class="hljs-keyword">PUT</span> <span class="hljs-string">/api/users/{user}</span> HTTP/1.1
-
-<span class="fortran">Content-<span class="hljs-keyword">Type</span>: multipart/<span class="hljs-keyword">form</span>-<span class="hljs-keyword">data</span>
-Accept: application/json
-
-</span></code></pre>
-<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = {
- <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-$.ajax({
- <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/users/{user}'</span>,
- <span class="hljs-attr">method</span>: <span class="hljs-string">'put'</span>,
-
- <span class="hljs-attr">headers</span>: headers,
- <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{
- <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data));
- }
-})
-
-</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">'{
- "action": "string"
-}'</span>;
-<span class="hljs-keyword">const</span> headers = {
- <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-fetch(<span class="hljs-string">'/api/users/{user}'</span>,
-{
- <span class="hljs-attr">method</span>: <span class="hljs-string">'PUT'</span>,
- <span class="hljs-attr">body</span>: inputBody,
- <span class="hljs-attr">headers</span>: headers
-})
-.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{
- <span class="hljs-keyword">return</span> res.json();
-}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{
- <span class="hljs-built_in">console</span>.log(body);
-});
-
-</code></pre>
-<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span>
-<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span>
-
-headers = {
- <span class="hljs-string">'Content-Type'</span> =&gt; <span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Accept'</span> =&gt; <span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span> =&gt; <span class="hljs-string">'API_KEY'</span>
-}
-
-result = RestClient.put <span class="hljs-string">'/api/users/{user}'</span>,
- <span class="hljs-symbol">params:</span> {
- }, <span class="hljs-symbol">headers:</span> headers
-
-p JSON.parse(result)
-
-</code></pre>
-<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests
-headers = {
- <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'multipart/form-data'</span>,
- <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span>
-}
-
-r = requests.put(<span class="hljs-string">'/api/users/{user}'</span>, params={
-
-}, headers = headers)
-
-<span class="hljs-keyword">print</span> r.json()
-
-</code></pre>
-<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/users/{user}"</span>);
-HttpURLConnection con = (HttpURLConnection) obj.openConnection();
-con.setRequestMethod(<span class="hljs-string">"PUT"</span>);
-<span class="hljs-keyword">int</span> responseCode = con.getResponseCode();
-BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader(
- <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream()));
-String inputLine;
-StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer();
-<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) {
- response.append(inputLine);
-}
-in.close();
-System.out.println(response.toString());
-
-</code></pre>
-<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main
-
-<span class="hljs-keyword">import</span> (
- <span class="hljs-string">"bytes"</span>
- <span class="hljs-string">"net/http"</span>
-)
-
-<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
-
- headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
- <span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>},
- <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
- <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
- }
-
- data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
- req, err := http.NewRequest(<span class="hljs-string">"PUT"</span>, <span class="hljs-string">"/api/users/{user}"</span>, data)
- req.Header = headers
-
- client := &amp;http.Client{}
- resp, err := client.Do(req)
- <span class="hljs-comment">// ...</span>
-}
-
-</code></pre>
-<p><code>PUT /api/users/{user}</code></p>
-<p><em>edit a given user</em></p>
-<p>Only the admin user (the first user) can call the REST API.</p>
-<p>Possible values for <em>action</em>:</p>
-<ul>
-<li><code>takeOwnership</code>: The admin takes the ownership of ALL boards of the user (archived and not archived) where the user is admin on.</li>
-<li><code>disableLogin</code>: Disable a user (the user is not allowed to login and his login tokens are purged)</li>
-<li><code>enableLogin</code>: Enable a user</li>
-</ul>
-<blockquote>
-<p>Body parameter</p>
-</blockquote>
-<pre class="highlight tab tab-yaml"><code><span class="hljs-attr">action:</span> <span class="hljs-string">string</span>
-
-</code></pre>
-<h3 id="edit_user-parameters">Parameters</h3>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>In</th>
-<th>Type</th>
-<th>Required</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>user</td>
-<td>path</td>
-<td>string</td>
-<td>true</td>
-<td>the user ID</td>
-</tr>
-<tr>
-<td>body</td>
-<td>body</td>
-<td>object</td>
-<td>false</td>
-<td>none</td>
-</tr>
-<tr>
-<td>» action</td>
-<td>body</td>
-<td>string</td>
-<td>true</td>
-<td>the action</td>
-</tr>
-</tbody>
-</table>
-<h4 id="detailed-descriptions">Detailed descriptions</h4>
-<p><strong>user</strong>: the user ID</p>
-<blockquote>
-<p>Example responses</p>
-</blockquote>
-<blockquote>
-<p>200 Response</p>
-</blockquote>
-<pre class="highlight tab tab-json"><code>{
- <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"title"</span>: <span class="hljs-string">"string"</span>
-}
-</code></pre>
-<h3 id="edit_user-responses">Responses</h3>
-<table>
-<thead>
-<tr>
-<th>Status</th>
-<th>Meaning</th>
-<th>Description</th>
-<th>Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>200</td>
-<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td>
-<td>200 response</td>
-<td>Inline</td>
-</tr>
-</tbody>
-</table>
-<h3 id="edit_user-responseschema">Response Schema</h3>
-<p>Status Code <strong>200</strong></p>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>Type</th>
-<th>Required</th>
-<th>Restrictions</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>» _id</td>
-<td>string</td>
-<td>false</td>
-<td>none</td>
-<td>none</td>
-</tr>
-<tr>
-<td>» title</td>
-<td>string</td>
-<td>false</td>
-<td>none</td>
-<td>none</td>
-</tr>
-</tbody>
-</table>
-<aside class="warning">
-To perform this operation, you must be authenticated by means of one of the following methods:
-UserSecurity
-</aside>
-<h2 id="delete_user">delete_user</h2>
-<p><a id="opIddelete_user"></a></p>
-<blockquote>
-<p>Code samples</p>
-</blockquote>
-<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span>
-curl -X DELETE /api/users/{user} \
- -H <span class="hljs-string">'Accept: application/json'</span> \
- -H <span class="hljs-string">'Authorization: API_KEY'</span>
-
-</code></pre>
-<pre class="highlight tab tab-http"><code><span class="hljs-keyword">DELETE</span> <span class="hljs-string">/api/users/{user}</span> HTTP/1.1
-
-<span class="http"><span class="hljs-attribute">Accept</span>: application/json
-
-<span class="undefined"></span></span></code></pre>
-<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = {
- <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-$.ajax({
- <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/users/{user}'</span>,
- <span class="hljs-attr">method</span>: <span class="hljs-string">'delete'</span>,
-
- <span class="hljs-attr">headers</span>: headers,
- <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{
- <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data));
- }
-})
-
-</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> headers = {
- <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span>
-
-};
-
-fetch(<span class="hljs-string">'/api/users/{user}'</span>,
-{
- <span class="hljs-attr">method</span>: <span class="hljs-string">'DELETE'</span>,
-
- <span class="hljs-attr">headers</span>: headers
-})
-.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{
- <span class="hljs-keyword">return</span> res.json();
-}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{
- <span class="hljs-built_in">console</span>.log(body);
-});
-
-</code></pre>
-<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span>
-<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span>
-
-headers = {
- <span class="hljs-string">'Accept'</span> =&gt; <span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span> =&gt; <span class="hljs-string">'API_KEY'</span>
-}
-
-result = RestClient.delete <span class="hljs-string">'/api/users/{user}'</span>,
- <span class="hljs-symbol">params:</span> {
- }, <span class="hljs-symbol">headers:</span> headers
-
-p JSON.parse(result)
-
-</code></pre>
-<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests
-headers = {
- <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>,
- <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span>
-}
-
-r = requests.delete(<span class="hljs-string">'/api/users/{user}'</span>, params={
-
-}, headers = headers)
-
-<span class="hljs-keyword">print</span> r.json()
-
-</code></pre>
-<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/users/{user}"</span>);
-HttpURLConnection con = (HttpURLConnection) obj.openConnection();
-con.setRequestMethod(<span class="hljs-string">"DELETE"</span>);
-<span class="hljs-keyword">int</span> responseCode = con.getResponseCode();
-BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader(
- <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream()));
-String inputLine;
-StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer();
-<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) {
- response.append(inputLine);
-}
-in.close();
-System.out.println(response.toString());
-
-</code></pre>
-<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main
-
-<span class="hljs-keyword">import</span> (
- <span class="hljs-string">"bytes"</span>
- <span class="hljs-string">"net/http"</span>
-)
-
-<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
-
- headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
- <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
- <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
- }
-
- data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
- req, err := http.NewRequest(<span class="hljs-string">"DELETE"</span>, <span class="hljs-string">"/api/users/{user}"</span>, data)
- req.Header = headers
-
- client := &amp;http.Client{}
- resp, err := client.Do(req)
- <span class="hljs-comment">// ...</span>
-}
-
-</code></pre>
-<p><code>DELETE /api/users/{user}</code></p>
-<p><em>Delete a user</em></p>
-<p>Only the admin user (the first user) can call the REST API.</p>
-<h3 id="delete_user-parameters">Parameters</h3>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>In</th>
-<th>Type</th>
-<th>Required</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>user</td>
-<td>path</td>
-<td>string</td>
-<td>true</td>
-<td>the ID of the user to delete</td>
-</tr>
-</tbody>
-</table>
-<h4 id="detailed-descriptions">Detailed descriptions</h4>
-<p><strong>user</strong>: the ID of the user to delete</p>
-<blockquote>
-<p>Example responses</p>
-</blockquote>
-<blockquote>
-<p>200 Response</p>
-</blockquote>
-<pre class="highlight tab tab-json"><code>{
- <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span>
-}
-</code></pre>
-<h3 id="delete_user-responses">Responses</h3>
-<table>
-<thead>
-<tr>
-<th>Status</th>
-<th>Meaning</th>
-<th>Description</th>
-<th>Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>200</td>
-<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td>
-<td>200 response</td>
-<td>Inline</td>
-</tr>
-</tbody>
-</table>
-<h3 id="delete_user-responseschema">Response Schema</h3>
-<p>Status Code <strong>200</strong></p>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>Type</th>
-<th>Required</th>
-<th>Restrictions</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>» _id</td>
-<td>string</td>
-<td>false</td>
-<td>none</td>
-<td>none</td>
-</tr>
-</tbody>
-</table>
-<aside class="warning">
-To perform this operation, you must be authenticated by means of one of the following methods:
-UserSecurity
-</aside>
<h1 id="wekan-rest-api-swimlanes">Swimlanes</h1>
<h2 id="get_all_swimlanes">get_all_swimlanes</h2>
<p><a id="opIdget_all_swimlanes"></a></p>
@@ -12930,7 +9645,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -13151,7 +9866,7 @@ System.out.println(response.toString());
<span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>},
<span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -13373,7 +10088,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>},
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -13561,7 +10276,7 @@ System.out.println(response.toString());
headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{
<span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>},
-
+
}
data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq})
@@ -13682,7 +10397,8 @@ UserSecurity
<span class="hljs-attr">"endAt"</span>: <span class="hljs-string">"string"</span>,
<span class="hljs-attr">"spentTime"</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">"isOvertime"</span>: <span class="hljs-literal">true</span>,
- <span class="hljs-attr">"type"</span>: <span class="hljs-string">"string"</span>
+ <span class="hljs-attr">"type"</span>: <span class="hljs-string">"string"</span>,
+ <span class="hljs-attr">"sort"</span>: <span class="hljs-number">0</span>
}
</code></pre>
@@ -13965,6 +10681,13 @@ UserSecurity
<td>none</td>
<td>The type of board</td>
</tr>
+<tr>
+<td>sort</td>
+<td>number</td>
+<td>true</td>
+<td>none</td>
+<td>Sort value</td>
+</tr>
</tbody>
</table>
<h4 id="enumerated-values">Enumerated Values</h4>
@@ -14342,457 +11065,6 @@ UserSecurity
</tr>
</tbody>
</table>
-<h2 id="tocscards">Cards</h2>
-<p><a id="schemacards"></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">"archived"</span>: <span class="hljs-literal">true</span>,
- <span class="hljs-attr">"parentId"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"listId"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"swimlaneId"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"boardId"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"coverId"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"color"</span>: <span class="hljs-string">"white"</span>,
- <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"modifiedAt"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"customFields"</span>: [
- {}
- ],
- <span class="hljs-attr">"dateLastActivity"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"requestedBy"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"assignedBy"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"labelIds"</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">"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>,
- <span class="hljs-attr">"endAt"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"spentTime"</span>: <span class="hljs-number">0</span>,
- <span class="hljs-attr">"isOvertime"</span>: <span class="hljs-literal">true</span>,
- <span class="hljs-attr">"userId"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"sort"</span>: <span class="hljs-number">0</span>,
- <span class="hljs-attr">"subtaskSort"</span>: <span class="hljs-number">0</span>,
- <span class="hljs-attr">"type"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"linkedId"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"vote"</span>: {
- <span class="hljs-attr">"question"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"positive"</span>: [
- <span class="hljs-string">"string"</span>
- ],
- <span class="hljs-attr">"negative"</span>: [
- <span class="hljs-string">"string"</span>
- ],
- <span class="hljs-attr">"end"</span>: <span class="hljs-string">"string"</span>
- }
-}
-
-</code></pre>
-<h3 id="properties">Properties</h3>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>Type</th>
-<th>Required</th>
-<th>Restrictions</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>title</td>
-<td>string|null</td>
-<td>false</td>
-<td>none</td>
-<td>the title of the card</td>
-</tr>
-<tr>
-<td>archived</td>
-<td>boolean</td>
-<td>true</td>
-<td>none</td>
-<td>is the card archived</td>
-</tr>
-<tr>
-<td>parentId</td>
-<td>string|null</td>
-<td>false</td>
-<td>none</td>
-<td>ID of the parent card</td>
-</tr>
-<tr>
-<td>listId</td>
-<td>string|null</td>
-<td>false</td>
-<td>none</td>
-<td>List ID where the card is</td>
-</tr>
-<tr>
-<td>swimlaneId</td>
-<td>string</td>
-<td>true</td>
-<td>none</td>
-<td>Swimlane ID where the card is</td>
-</tr>
-<tr>
-<td>boardId</td>
-<td>string|null</td>
-<td>false</td>
-<td>none</td>
-<td>Board ID of the card</td>
-</tr>
-<tr>
-<td>coverId</td>
-<td>string|null</td>
-<td>false</td>
-<td>none</td>
-<td>Cover ID of the card</td>
-</tr>
-<tr>
-<td>color</td>
-<td>string|null</td>
-<td>false</td>
-<td>none</td>
-<td>none</td>
-</tr>
-<tr>
-<td>createdAt</td>
-<td>string</td>
-<td>true</td>
-<td>none</td>
-<td>creation date</td>
-</tr>
-<tr>
-<td>modifiedAt</td>
-<td>string</td>
-<td>true</td>
-<td>none</td>
-<td>none</td>
-</tr>
-<tr>
-<td>customFields</td>
-<td>[<a href="#schemacardscustomfields">CardsCustomfields</a>]|null</td>
-<td>false</td>
-<td>none</td>
-<td>list of custom fields</td>
-</tr>
-<tr>
-<td>dateLastActivity</td>
-<td>string</td>
-<td>true</td>
-<td>none</td>
-<td>Date of last activity</td>
-</tr>
-<tr>
-<td>description</td>
-<td>string|null</td>
-<td>false</td>
-<td>none</td>
-<td>description of the card</td>
-</tr>
-<tr>
-<td>requestedBy</td>
-<td>string|null</td>
-<td>false</td>
-<td>none</td>
-<td>who requested the card (ID of the user)</td>
-</tr>
-<tr>
-<td>assignedBy</td>
-<td>string|null</td>
-<td>false</td>
-<td>none</td>
-<td>who assigned the card (ID of the user)</td>
-</tr>
-<tr>
-<td>labelIds</td>
-<td>[string]|null</td>
-<td>false</td>
-<td>none</td>
-<td>list of labels ID the card has</td>
-</tr>
-<tr>
-<td>members</td>
-<td>[string]|null</td>
-<td>false</td>
-<td>none</td>
-<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>
-<td>none</td>
-<td>Date the card was received</td>
-</tr>
-<tr>
-<td>startAt</td>
-<td>string|null</td>
-<td>false</td>
-<td>none</td>
-<td>Date the card was started to be worked on</td>
-</tr>
-<tr>
-<td>dueAt</td>
-<td>string|null</td>
-<td>false</td>
-<td>none</td>
-<td>Date the card is due</td>
-</tr>
-<tr>
-<td>endAt</td>
-<td>string|null</td>
-<td>false</td>
-<td>none</td>
-<td>Date the card ended</td>
-</tr>
-<tr>
-<td>spentTime</td>
-<td>number|null</td>
-<td>false</td>
-<td>none</td>
-<td>How much time has been spent on this</td>
-</tr>
-<tr>
-<td>isOvertime</td>
-<td>boolean|null</td>
-<td>false</td>
-<td>none</td>
-<td>is the card over time?</td>
-</tr>
-<tr>
-<td>userId</td>
-<td>string</td>
-<td>true</td>
-<td>none</td>
-<td>user ID of the author of the card</td>
-</tr>
-<tr>
-<td>sort</td>
-<td>number</td>
-<td>true</td>
-<td>none</td>
-<td>Sort value</td>
-</tr>
-<tr>
-<td>subtaskSort</td>
-<td>number|null</td>
-<td>false</td>
-<td>none</td>
-<td>subtask sort value</td>
-</tr>
-<tr>
-<td>type</td>
-<td>string</td>
-<td>true</td>
-<td>none</td>
-<td>type of the card</td>
-</tr>
-<tr>
-<td>linkedId</td>
-<td>string|null</td>
-<td>false</td>
-<td>none</td>
-<td>ID of the linked card</td>
-</tr>
-<tr>
-<td>vote</td>
-<td><a href="#schemacardsvote">CardsVote</a></td>
-<td>false</td>
-<td>none</td>
-<td>vote object, see below</td>
-</tr>
-</tbody>
-</table>
-<h4 id="enumerated-values">Enumerated Values</h4>
-<table>
-<thead>
-<tr>
-<th>Property</th>
-<th>Value</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>color</td>
-<td>white</td>
-</tr>
-<tr>
-<td>color</td>
-<td>green</td>
-</tr>
-<tr>
-<td>color</td>
-<td>yellow</td>
-</tr>
-<tr>
-<td>color</td>
-<td>orange</td>
-</tr>
-<tr>
-<td>color</td>
-<td>red</td>
-</tr>
-<tr>
-<td>color</td>
-<td>purple</td>
-</tr>
-<tr>
-<td>color</td>
-<td>blue</td>
-</tr>
-<tr>
-<td>color</td>
-<td>sky</td>
-</tr>
-<tr>
-<td>color</td>
-<td>lime</td>
-</tr>
-<tr>
-<td>color</td>
-<td>pink</td>
-</tr>
-<tr>
-<td>color</td>
-<td>black</td>
-</tr>
-<tr>
-<td>color</td>
-<td>silver</td>
-</tr>
-<tr>
-<td>color</td>
-<td>peachpuff</td>
-</tr>
-<tr>
-<td>color</td>
-<td>crimson</td>
-</tr>
-<tr>
-<td>color</td>
-<td>plum</td>
-</tr>
-<tr>
-<td>color</td>
-<td>darkgreen</td>
-</tr>
-<tr>
-<td>color</td>
-<td>slateblue</td>
-</tr>
-<tr>
-<td>color</td>
-<td>magenta</td>
-</tr>
-<tr>
-<td>color</td>
-<td>gold</td>
-</tr>
-<tr>
-<td>color</td>
-<td>navy</td>
-</tr>
-<tr>
-<td>color</td>
-<td>gray</td>
-</tr>
-<tr>
-<td>color</td>
-<td>saddlebrown</td>
-</tr>
-<tr>
-<td>color</td>
-<td>paleturquoise</td>
-</tr>
-<tr>
-<td>color</td>
-<td>mistyrose</td>
-</tr>
-<tr>
-<td>color</td>
-<td>indigo</td>
-</tr>
-</tbody>
-</table>
-<h2 id="tocscardsvote">CardsVote</h2>
-<p><a id="schemacardsvote"></a></p>
-<pre class="highlight tab tab-json"><code>{
- <span class="hljs-attr">"question"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"positive"</span>: [
- <span class="hljs-string">"string"</span>
- ],
- <span class="hljs-attr">"negative"</span>: [
- <span class="hljs-string">"string"</span>
- ],
- <span class="hljs-attr">"end"</span>: <span class="hljs-string">"string"</span>
-}
-
-</code></pre>
-<h3 id="properties">Properties</h3>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>Type</th>
-<th>Required</th>
-<th>Restrictions</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>question</td>
-<td>string</td>
-<td>true</td>
-<td>none</td>
-<td>none</td>
-</tr>
-<tr>
-<td>positive</td>
-<td>[string]</td>
-<td>false</td>
-<td>none</td>
-<td>list of members (user IDs)</td>
-</tr>
-<tr>
-<td>negative</td>
-<td>[string]</td>
-<td>false</td>
-<td>none</td>
-<td>list of members (user IDs)</td>
-</tr>
-<tr>
-<td>end</td>
-<td>string</td>
-<td>false</td>
-<td>none</td>
-<td>none</td>
-</tr>
-</tbody>
-</table>
-<h2 id="tocscardscustomfields">CardsCustomfields</h2>
-<p><a id="schemacardscustomfields"></a></p>
-<pre class="highlight tab tab-json"><code>{}
-
-</code></pre>
-<h3 id="properties">Properties</h3>
-<p><em>None</em></p>
<h2 id="tocschecklistitems">ChecklistItems</h2>
<p><a id="schemachecklistitems"></a></p>
<pre class="highlight tab tab-json"><code>{
@@ -15677,465 +11949,46 @@ UserSecurity
</tr>
</tbody>
</table>
-<h2 id="tocsusers">Users</h2>
-<p><a id="schemausers"></a></p>
-<pre class="highlight tab tab-json"><code>{
- <span class="hljs-attr">"username"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"emails"</span>: [
- {
- <span class="hljs-attr">"address"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"verified"</span>: <span class="hljs-literal">true</span>
- }
- ],
- <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"modifiedAt"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"profile"</span>: {
- <span class="hljs-attr">"avatarUrl"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"emailBuffer"</span>: [
- <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>,
- <span class="hljs-attr">"invitedBoards"</span>: [
- <span class="hljs-string">"string"</span>
- ],
- <span class="hljs-attr">"language"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"notifications"</span>: [],
- <span class="hljs-attr">"activity"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"read"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"showCardsCountAt"</span>: <span class="hljs-number">0</span>,
- <span class="hljs-attr">"starredBoards"</span>: [
- <span class="hljs-string">"string"</span>
- ],
- <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>,
- <span class="hljs-attr">"boardTemplatesSwimlaneId"</span>: <span class="hljs-string">"string"</span>
- },
- <span class="hljs-attr">"services"</span>: {},
- <span class="hljs-attr">"heartbeat"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"isAdmin"</span>: <span class="hljs-literal">true</span>,
- <span class="hljs-attr">"createdThroughApi"</span>: <span class="hljs-literal">true</span>,
- <span class="hljs-attr">"loginDisabled"</span>: <span class="hljs-literal">true</span>,
- <span class="hljs-attr">"authenticationMethod"</span>: <span class="hljs-string">"string"</span>
-}
-
-</code></pre>
-<p><em>A User in wekan</em></p>
-<h3 id="properties">Properties</h3>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>Type</th>
-<th>Required</th>
-<th>Restrictions</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>username</td>
-<td>string|null</td>
-<td>false</td>
-<td>none</td>
-<td>the username of the user</td>
-</tr>
-<tr>
-<td>emails</td>
-<td>[<a href="#schemausersemails">UsersEmails</a>]|null</td>
-<td>false</td>
-<td>none</td>
-<td>the list of emails attached to a user</td>
-</tr>
-<tr>
-<td>createdAt</td>
-<td>string</td>
-<td>true</td>
-<td>none</td>
-<td>creation date of the user</td>
-</tr>
-<tr>
-<td>modifiedAt</td>
-<td>string</td>
-<td>true</td>
-<td>none</td>
-<td>none</td>
-</tr>
-<tr>
-<td>profile</td>
-<td><a href="#schemausersprofile">UsersProfile</a></td>
-<td>false</td>
-<td>none</td>
-<td>profile settings</td>
-</tr>
-<tr>
-<td>services</td>
-<td>object|null</td>
-<td>false</td>
-<td>none</td>
-<td>services field of the user</td>
-</tr>
-<tr>
-<td>heartbeat</td>
-<td>string|null</td>
-<td>false</td>
-<td>none</td>
-<td>last time the user has been seen</td>
-</tr>
-<tr>
-<td>isAdmin</td>
-<td>boolean|null</td>
-<td>false</td>
-<td>none</td>
-<td>is the user an admin of the board?</td>
-</tr>
-<tr>
-<td>createdThroughApi</td>
-<td>boolean|null</td>
-<td>false</td>
-<td>none</td>
-<td>was the user created through the API?</td>
-</tr>
-<tr>
-<td>loginDisabled</td>
-<td>boolean|null</td>
-<td>false</td>
-<td>none</td>
-<td>loginDisabled field of the user</td>
-</tr>
-<tr>
-<td>authenticationMethod</td>
-<td>string</td>
-<td>true</td>
-<td>none</td>
-<td>authentication method of the user</td>
-</tr>
-</tbody>
-</table>
-<h2 id="tocsusersemails">UsersEmails</h2>
-<p><a id="schemausersemails"></a></p>
-<pre class="highlight tab tab-json"><code>{
- <span class="hljs-attr">"address"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"verified"</span>: <span class="hljs-literal">true</span>
-}
-
-</code></pre>
-<h3 id="properties">Properties</h3>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>Type</th>
-<th>Required</th>
-<th>Restrictions</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>address</td>
-<td>string</td>
-<td>true</td>
-<td>none</td>
-<td>The email address</td>
-</tr>
-<tr>
-<td>verified</td>
-<td>boolean</td>
-<td>true</td>
-<td>none</td>
-<td>Has the email been verified</td>
-</tr>
-</tbody>
-</table>
-<h2 id="tocsusersprofile">UsersProfile</h2>
-<p><a id="schemausersprofile"></a></p>
-<pre class="highlight tab tab-json"><code>{
- <span class="hljs-attr">"avatarUrl"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"emailBuffer"</span>: [
- <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>,
- <span class="hljs-attr">"invitedBoards"</span>: [
- <span class="hljs-string">"string"</span>
- ],
- <span class="hljs-attr">"language"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"notifications"</span>: [],
- <span class="hljs-attr">"activity"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"read"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"showCardsCountAt"</span>: <span class="hljs-number">0</span>,
- <span class="hljs-attr">"starredBoards"</span>: [
- <span class="hljs-string">"string"</span>
- ],
- <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>,
- <span class="hljs-attr">"boardTemplatesSwimlaneId"</span>: <span class="hljs-string">"string"</span>
-}
-
-</code></pre>
-<h3 id="properties">Properties</h3>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>Type</th>
-<th>Required</th>
-<th>Restrictions</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>avatarUrl</td>
-<td>string</td>
-<td>false</td>
-<td>none</td>
-<td>URL of the avatar of the user</td>
-</tr>
-<tr>
-<td>emailBuffer</td>
-<td>[string]</td>
-<td>false</td>
-<td>none</td>
-<td>list of email buffers of the user</td>
-</tr>
-<tr>
-<td>fullname</td>
-<td>string</td>
-<td>false</td>
-<td>none</td>
-<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>
-<td>none</td>
-<td>does the user want to hide system messages?</td>
-</tr>
-<tr>
-<td>hiddenMinicardLabelText</td>
-<td>boolean</td>
-<td>false</td>
-<td>none</td>
-<td>does the user want to hide minicard label texts?</td>
-</tr>
-<tr>
-<td>initials</td>
-<td>string</td>
-<td>false</td>
-<td>none</td>
-<td>initials of the user</td>
-</tr>
-<tr>
-<td>invitedBoards</td>
-<td>[string]</td>
-<td>false</td>
-<td>none</td>
-<td>board IDs the user has been invited to</td>
-</tr>
-<tr>
-<td>language</td>
-<td>string</td>
-<td>false</td>
-<td>none</td>
-<td>language of the user</td>
-</tr>
-<tr>
-<td>notifications</td>
-<td>[<a href="#schemausersprofilenotifications">UsersProfileNotifications</a>]</td>
-<td>false</td>
-<td>none</td>
-<td>enabled notifications for the user</td>
-</tr>
-<tr>
-<td>activity</td>
-<td>string</td>
-<td>true</td>
-<td>none</td>
-<td>The id of the activity this notification references</td>
-</tr>
-<tr>
-<td>read</td>
-<td>string</td>
-<td>false</td>
-<td>none</td>
-<td>the date on which this notification was read</td>
-</tr>
-<tr>
-<td>showCardsCountAt</td>
-<td>number</td>
-<td>false</td>
-<td>none</td>
-<td>showCardCountAt field of the user</td>
-</tr>
-<tr>
-<td>starredBoards</td>
-<td>[string]</td>
-<td>false</td>
-<td>none</td>
-<td>list of starred board IDs</td>
-</tr>
-<tr>
-<td>icode</td>
-<td>string</td>
-<td>false</td>
-<td>none</td>
-<td>icode</td>
-</tr>
-<tr>
-<td>boardView</td>
-<td>string</td>
-<td>false</td>
-<td>none</td>
-<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>
-<td>none</td>
-<td>Reference to the templates board</td>
-</tr>
-<tr>
-<td>cardTemplatesSwimlaneId</td>
-<td>string</td>
-<td>true</td>
-<td>none</td>
-<td>Reference to the card templates swimlane Id</td>
-</tr>
-<tr>
-<td>listTemplatesSwimlaneId</td>
-<td>string</td>
-<td>true</td>
-<td>none</td>
-<td>Reference to the list templates swimlane Id</td>
-</tr>
-<tr>
-<td>boardTemplatesSwimlaneId</td>
-<td>string</td>
-<td>true</td>
-<td>none</td>
-<td>Reference to the board templates swimlane Id</td>
-</tr>
-</tbody>
-</table>
-<h4 id="enumerated-values">Enumerated Values</h4>
-<table>
-<thead>
-<tr>
-<th>Property</th>
-<th>Value</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>boardView</td>
-<td>board-view-lists</td>
-</tr>
-<tr>
-<td>boardView</td>
-<td>board-view-swimlanes</td>
-</tr>
-<tr>
-<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>
</div>
<div class="dark-box">
-
+
<div class="lang-selector">
-
-
+
+
<a href="#" data-language-name="shell">Shell</a>
-
-
-
+
+
+
<a href="#" data-language-name="http">HTTP</a>
-
-
-
+
+
+
<a href="#" data-language-name="javascript">JavaScript</a>
-
-
-
+
+
+
<a href="#" data-language-name="javascript--nodejs">Node.js</a>
-
-
-
+
+
+
<a href="#" data-language-name="ruby">Ruby</a>
-
-
-
+
+
+
<a href="#" data-language-name="python">Python</a>
-
-
-
+
+
+
<a href="#" data-language-name="java">Java</a>
-
-
-
+
+
+
<a href="#" data-language-name="go">Go</a>
-
-
+
+
</div>
-
+
</div>
</div>
</body>
diff --git a/public/api/wekan.yml b/public/api/wekan.yml
index 31f4f4e7..0d40ae99 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.92
+ version: v3.98
description: |
The REST API allows you to control and extend Wekan with ease.
@@ -1221,296 +1221,6 @@ paths:
properties:
_id:
type: string
- /api/boards/{board}/lists/{list}/cards:
- get:
- operationId: get_all_cards
- summary: Get all Cards attached to a List
- tags:
- - Cards
- parameters:
- - name: board
- in: path
- description: |
- the board ID
- type: string
- required: true
- - name: list
- in: path
- description: |
- the list ID
- type: string
- required: true
- produces:
- - application/json
- security:
- - UserSecurity: []
- responses:
- '200':
- description: |-
- 200 response
- schema:
- type: array
- items:
- type: object
- properties:
- _id:
- type: string
- title:
- type: string
- description:
- type: string
- post:
- operationId: new_card
- summary: Create a new Card
- tags:
- - Cards
- consumes:
- - multipart/form-data
- - application/json
- parameters:
- - name: authorId
- in: formData
- description: the authorId value
- type: string
- required: true
- - name: members
- in: formData
- description: |
- 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: |
- the title of the new card
- type: string
- required: true
- - name: description
- in: formData
- description: |
- the description of the new card
- type: string
- required: true
- - name: swimlaneId
- in: formData
- description: |
- the swimlane ID of the new card
- type: string
- required: true
- - name: board
- in: path
- description: |
- the board ID of the new card
- type: string
- required: true
- - name: list
- in: path
- description: |
- the list ID of the new card
- type: string
- required: true
- produces:
- - application/json
- security:
- - UserSecurity: []
- responses:
- '200':
- description: |-
- 200 response
- schema:
- type: object
- properties:
- _id:
- type: string
- /api/boards/{board}/lists/{list}/cards/{card}:
- get:
- operationId: get_board_list_card
- tags:
- - Cards
- parameters:
- - name: board
- in: path
- description: the board value
- type: string
- required: true
- - name: list
- in: path
- description: the list value
- type: string
- required: true
- - name: card
- in: path
- description: the card value
- type: string
- required: true
- produces:
- - application/json
- security:
- - UserSecurity: []
- responses:
- '200':
- description: |-
- 200 response
- put:
- operationId: put_board_list_card
- tags:
- - Cards
- consumes:
- - multipart/form-data
- - application/json
- parameters:
- - name: title
- in: formData
- description: the title value
- type: string
- required: true
- - name: listId
- in: formData
- description: the listId value
- type: string
- required: true
- - name: authorId
- in: formData
- description: the authorId value
- type: string
- required: true
- - name: parentId
- in: formData
- description: the parentId value
- type: string
- required: true
- - name: description
- in: formData
- description: the description value
- type: string
- required: true
- - name: color
- in: formData
- description: the color value
- type: string
- required: true
- - name: labelIds
- in: formData
- description: the labelIds value
- type: string
- required: true
- - name: requestedBy
- in: formData
- description: the requestedBy value
- type: string
- required: true
- - name: assignedBy
- in: formData
- description: the assignedBy value
- type: string
- required: true
- - name: receivedAt
- in: formData
- description: the receivedAt value
- type: string
- required: true
- - name: startAt
- in: formData
- description: the startAt value
- type: string
- required: true
- - name: dueAt
- in: formData
- description: the dueAt value
- type: string
- required: true
- - name: endAt
- in: formData
- description: the endAt value
- type: string
- required: true
- - name: spentTime
- in: formData
- description: the spentTime value
- type: string
- required: true
- - name: isOverTime
- in: formData
- description: the isOverTime value
- type: string
- required: true
- - name: customFields
- in: formData
- description: the customFields value
- type: string
- required: true
- - name: members
- in: formData
- 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
- type: string
- required: true
- - name: board
- in: path
- description: the board value
- type: string
- required: true
- - name: list
- in: path
- description: the list value
- type: string
- required: true
- - name: card
- in: path
- description: the card value
- type: string
- required: true
- produces:
- - application/json
- security:
- - UserSecurity: []
- responses:
- '200':
- description: |-
- 200 response
- delete:
- operationId: delete_board_list_card
- tags:
- - Cards
- parameters:
- - name: board
- in: path
- description: the board value
- type: string
- required: true
- - name: list
- in: path
- description: the list value
- type: string
- required: true
- - name: card
- in: path
- description: the card value
- type: string
- required: true
- produces:
- - application/json
- security:
- - UserSecurity: []
- responses:
- '200':
- description: |-
- 200 response
/api/boards/{board}/members/{member}:
post:
operationId: set_board_member_permission
@@ -1566,104 +1276,6 @@ paths:
'200':
description: |-
200 response
- /api/boards/{board}/members/{user}/add:
- post:
- operationId: add_board_member
- summary: Add New Board Member with Role
- description: |
- Only the admin user (the first user) can call the REST API.
-
- **Note**: see [Boards.set_board_member_permission](#set_board_member_permission)
- to later change the permissions.
- tags:
- - Users
- - Boards
- consumes:
- - multipart/form-data
- - application/json
- parameters:
- - name: action
- in: formData
- description: the action value
- type: string
- required: true
- - name: isAdmin
- in: formData
- description: |
- is the user an admin of the board
- type: boolean
- required: true
- - name: isNoComments
- in: formData
- description: |
- disable comments
- type: boolean
- required: true
- - name: isCommentOnly
- in: formData
- description: |
- only enable comments
- type: boolean
- required: true
- - name: board
- in: path
- description: |
- the board ID
- type: string
- required: true
- - name: user
- in: path
- description: |
- the user ID
- type: string
- required: true
- produces:
- - application/json
- security:
- - UserSecurity: []
- responses:
- '200':
- description: |-
- 200 response
- schema:
- type: object
- properties:
- _id:
- type: string
- title:
- type: string
- /api/boards/{board}/members/{user}/remove:
- post:
- operationId: post_board_user_remove
- tags:
- - Users
- consumes:
- - multipart/form-data
- - application/json
- parameters:
- - name: action
- in: formData
- description: the action value
- type: string
- required: true
- - name: board
- in: path
- description: the board value
- type: string
- required: true
- - name: user
- in: path
- description: the user value
- type: string
- required: true
- produces:
- - application/json
- security:
- - UserSecurity: []
- responses:
- '200':
- description: |-
- 200 response
/api/boards/{board}/swimlanes:
get:
operationId: get_all_swimlanes
@@ -1780,208 +1392,6 @@ paths:
'200':
description: |-
200 response
- /api/boards/{board}/swimlanes/{swimlane}/cards:
- get:
- operationId: get_board_swimlane_cards
- tags:
- - Cards
- parameters:
- - name: board
- in: path
- description: the board value
- type: string
- required: true
- - name: swimlane
- in: path
- description: the swimlane value
- type: string
- required: true
- produces:
- - application/json
- security:
- - UserSecurity: []
- responses:
- '200':
- description: |-
- 200 response
- /api/user:
- get:
- operationId: get_current_user
- summary: returns the current user
- tags:
- - Users
- produces:
- - application/json
- security:
- - UserSecurity: []
- responses:
- '200':
- description: |-
- 200 response
- schema:
- $ref: "#/definitions/Users"
- /api/users:
- get:
- operationId: get_all_users
- summary: return all the users
- description: |
- Only the admin user (the first user) can call the REST API.
- tags:
- - Users
- produces:
- - application/json
- security:
- - UserSecurity: []
- responses:
- '200':
- description: |-
- 200 response
- schema:
- type: array
- items:
- type: object
- properties:
- _id:
- type: string
- username:
- type: string
- post:
- operationId: new_user
- summary: Create a new user
- description: |
- Only the admin user (the first user) can call the REST API.
- tags:
- - Users
- consumes:
- - multipart/form-data
- - application/json
- parameters:
- - name: username
- in: formData
- description: |
- the new username
- type: string
- required: true
- - name: email
- in: formData
- description: |
- the email of the new user
- type: string
- required: true
- - name: password
- in: formData
- description: |
- the password of the new user
- type: string
- required: true
- produces:
- - application/json
- security:
- - UserSecurity: []
- responses:
- '200':
- description: |-
- 200 response
- schema:
- type: object
- properties:
- _id:
- type: string
- /api/users/{user}:
- get:
- operationId: get_user
- summary: get a given user
- description: |
- Only the admin user (the first user) can call the REST API.
- tags:
- - Users
- parameters:
- - name: user
- in: path
- description: |
- the user ID
- type: string
- required: true
- produces:
- - application/json
- security:
- - UserSecurity: []
- responses:
- '200':
- description: |-
- 200 response
- schema:
- $ref: "#/definitions/Users"
- put:
- operationId: edit_user
- summary: edit a given user
- description: |
- Only the admin user (the first user) can call the REST API.
-
- Possible values for *action*:
- - `takeOwnership`: The admin takes the ownership of ALL boards of the user (archived and not archived) where the user is admin on.
- - `disableLogin`: Disable a user (the user is not allowed to login and his login tokens are purged)
- - `enableLogin`: Enable a user
- tags:
- - Users
- consumes:
- - multipart/form-data
- - application/json
- parameters:
- - name: action
- in: formData
- description: |
- the action
- type: string
- required: true
- - name: user
- in: path
- description: |
- the user ID
- type: string
- required: true
- produces:
- - application/json
- security:
- - UserSecurity: []
- responses:
- '200':
- description: |-
- 200 response
- schema:
- type: object
- properties:
- _id:
- type: string
- title:
- type: string
- delete:
- operationId: delete_user
- summary: Delete a user
- description: |
- Only the admin user (the first user) can call the REST API.
- tags:
- - Users
- parameters:
- - name: user
- in: path
- description: |
- the ID of the user to delete
- type: string
- required: true
- produces:
- - application/json
- security:
- - UserSecurity: []
- responses:
- '200':
- description: |-
- 200 response
- schema:
- type: object
- properties:
- _id:
- type: string
/api/users/{user}/boards:
get:
operationId: get_boards_from_user
@@ -2209,6 +1619,10 @@ definitions:
description: |
The type of board
type: string
+ sort:
+ description: |
+ Sort value
+ type: number
required:
- title
- slug
@@ -2236,6 +1650,7 @@ definitions:
- allowsEndDate
- allowsDueDate
- type
+ - sort
BoardsLabels:
type: object
properties:
@@ -2349,219 +1764,6 @@ definitions:
- createdAt
- modifiedAt
- userId
- Cards:
- type: object
- properties:
- title:
- description: |
- the title of the card
- type: string
- x-nullable: true
- archived:
- description: |
- is the card archived
- type: boolean
- parentId:
- description: |
- ID of the parent card
- type: string
- x-nullable: true
- listId:
- description: |
- List ID where the card is
- type: string
- x-nullable: true
- swimlaneId:
- description: |
- Swimlane ID where the card is
- type: string
- boardId:
- description: |
- Board ID of the card
- type: string
- x-nullable: true
- coverId:
- description: |
- Cover ID of the card
- type: string
- x-nullable: true
- color:
- type: string
- enum:
- - white
- - green
- - yellow
- - orange
- - red
- - purple
- - blue
- - sky
- - lime
- - pink
- - black
- - silver
- - peachpuff
- - crimson
- - plum
- - darkgreen
- - slateblue
- - magenta
- - gold
- - navy
- - gray
- - saddlebrown
- - paleturquoise
- - mistyrose
- - indigo
- x-nullable: true
- createdAt:
- description: |
- creation date
- type: string
- modifiedAt:
- type: string
- customFields:
- description: |
- list of custom fields
- type: array
- items:
- $ref: "#/definitions/CardsCustomfields"
- x-nullable: true
- dateLastActivity:
- description: |
- Date of last activity
- type: string
- description:
- description: |
- description of the card
- type: string
- x-nullable: true
- requestedBy:
- description: |
- who requested the card (ID of the user)
- type: string
- x-nullable: true
- assignedBy:
- description: |
- who assigned the card (ID of the user)
- type: string
- x-nullable: true
- labelIds:
- description: |
- list of labels ID the card has
- type: array
- items:
- type: string
- x-nullable: true
- x-nullable: true
- members:
- description: |
- list of members (user IDs)
- type: array
- items:
- 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
- type: string
- x-nullable: true
- startAt:
- description: |
- Date the card was started to be worked on
- type: string
- x-nullable: true
- dueAt:
- description: |
- Date the card is due
- type: string
- x-nullable: true
- endAt:
- description: |
- Date the card ended
- type: string
- x-nullable: true
- spentTime:
- description: |
- How much time has been spent on this
- type: number
- x-nullable: true
- isOvertime:
- description: |
- is the card over time?
- type: boolean
- x-nullable: true
- userId:
- description: |
- user ID of the author of the card
- type: string
- sort:
- description: |
- Sort value
- type: number
- subtaskSort:
- description: |
- subtask sort value
- type: number
- x-nullable: true
- type:
- description: |
- type of the card
- type: string
- linkedId:
- description: |
- ID of the linked card
- type: string
- x-nullable: true
- vote:
- description: |
- vote object, see below
- $ref: "#/definitions/CardsVote"
- x-nullable: true
- required:
- - archived
- - swimlaneId
- - createdAt
- - modifiedAt
- - dateLastActivity
- - userId
- - sort
- - type
- CardsVote:
- type: object
- properties:
- question:
- type: string
- positive:
- description: |
- list of members (user IDs)
- type: array
- items:
- type: string
- x-nullable: true
- negative:
- description: |
- list of members (user IDs)
- type: array
- items:
- type: string
- x-nullable: true
- end:
- type: string
- required:
- - question
- CardsCustomfields:
- type: object
ChecklistItems:
type: object
description: An item in a checklist
@@ -2929,192 +2131,3 @@ definitions:
- createdAt
- modifiedAt
- type
- Users:
- type: object
- description: A User in wekan
- properties:
- username:
- description: |
- the username of the user
- type: string
- x-nullable: true
- emails:
- description: |
- the list of emails attached to a user
- type: array
- items:
- $ref: "#/definitions/UsersEmails"
- x-nullable: true
- createdAt:
- description: |
- creation date of the user
- type: string
- modifiedAt:
- type: string
- profile:
- description: |
- profile settings
- $ref: "#/definitions/UsersProfile"
- x-nullable: true
- services:
- description: |
- services field of the user
- type: object
- x-nullable: true
- heartbeat:
- description: |
- last time the user has been seen
- type: string
- x-nullable: true
- isAdmin:
- description: |
- is the user an admin of the board?
- type: boolean
- x-nullable: true
- createdThroughApi:
- description: |
- was the user created through the API?
- type: boolean
- x-nullable: true
- loginDisabled:
- description: |
- loginDisabled field of the user
- type: boolean
- x-nullable: true
- authenticationMethod:
- description: |
- authentication method of the user
- type: string
- required:
- - createdAt
- - modifiedAt
- - authenticationMethod
- UsersEmails:
- type: object
- properties:
- address:
- description: |
- The email address
- type: string
- verified:
- description: |
- Has the email been verified
- type: boolean
- required:
- - address
- - verified
- UsersProfile:
- type: object
- properties:
- avatarUrl:
- description: |
- URL of the avatar of the user
- type: string
- emailBuffer:
- description: |
- list of email buffers of the user
- type: array
- items:
- type: string
- x-nullable: true
- fullname:
- 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?
- type: boolean
- hiddenMinicardLabelText:
- description: |
- does the user want to hide minicard label texts?
- type: boolean
- initials:
- description: |
- initials of the user
- type: string
- invitedBoards:
- description: |
- board IDs the user has been invited to
- type: array
- items:
- type: string
- x-nullable: true
- language:
- description: |
- language of the user
- type: string
- notifications:
- description: |
- enabled notifications for the user
- type: array
- items:
- $ref: "#/definitions/UsersProfileNotifications"
- activity:
- description: |
- The id of the activity this notification references
- type: string
- read:
- description: |
- the date on which this notification was read
- type: string
- showCardsCountAt:
- description: |
- showCardCountAt field of the user
- type: number
- starredBoards:
- description: |
- list of starred board IDs
- type: array
- items:
- type: string
- x-nullable: true
- icode:
- description: |
- icode
- type: string
- boardView:
- description: |
- boardView field of the user
- type: string
- enum:
- - 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
- type: string
- cardTemplatesSwimlaneId:
- description: |
- Reference to the card templates swimlane Id
- type: string
- listTemplatesSwimlaneId:
- description: |
- Reference to the list templates swimlane Id
- type: string
- boardTemplatesSwimlaneId:
- description: |
- Reference to the board templates swimlane Id
- type: string
- required:
- - activity
- - templatesBoardId
- - cardTemplatesSwimlaneId
- - listTemplatesSwimlaneId
- - boardTemplatesSwimlaneId
diff --git a/public/robots.txt b/public/robots.txt
new file mode 100644
index 00000000..1f53798b
--- /dev/null
+++ b/public/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow: /
diff --git a/rebuild-wekan.bat b/rebuild-wekan.bat
index 0a9a8eac..1c38293f 100644
--- a/rebuild-wekan.bat
+++ b/rebuild-wekan.bat
@@ -18,8 +18,8 @@ REM Install chocolatey
choco install -y git curl python2 dotnet4.5.2 nano mongodb-3 mongoclient meteor
-curl -O https://nodejs.org/dist/v12.16.1/node-v12.16.1-x64.msi
-call node-v12.16.1-x64.msi
+curl -O https://nodejs.org/dist/v12.16.2/node-v12.16.2-x64.msi
+call node-v12.16.2-x64.msi
call npm config -g set msvs_version 2015
call meteor npm config -g set msvs_version 2015
@@ -53,6 +53,9 @@ call meteor npm install
REM del /S /F /Q .build
call meteor build .build --directory
copy fix-download-unicode\cfs_access-point.txt .build\bundle\programs\server\packages\cfs_access-point.js
+REM ## Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
+del /S /F /Q rm .build/bundle/programs/web.browser.legacy
+REM ## Install some NPM packages
cd .build\bundle\programs\server
call meteor npm install
REM cd C:\repos\wekan\.meteor\local\build\programs\server
diff --git a/rebuild-wekan.sh b/rebuild-wekan.sh
index 957e634f..5b921574 100755
--- a/rebuild-wekan.sh
+++ b/rebuild-wekan.sh
@@ -5,7 +5,7 @@ echo " with 'sudo dpkg-reconfigure locales' , so that MongoDB works correct
echo " You can still use any other locale as your main locale."
#Below script installs newest node 8.x for Debian/Ubuntu/Mint.
-#NODE_VERSION=12.16.1
+#NODE_VERSION=12.16.2
#X64NODE="https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.gz"
function pause(){
@@ -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 12.16.1
+ sudo n 12.16.2
#curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
#sudo apt-get install -y nodejs
elif [[ "$OSTYPE" == "darwin"* ]]; then
@@ -148,6 +148,8 @@ do
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
+ # Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
+ rm -rf .build/bundle/programs/web.browser.legacy
#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
diff --git a/releases/rebuild-release.sh b/releases/rebuild-release.sh
index f3964885..02b862d0 100755
--- a/releases/rebuild-release.sh
+++ b/releases/rebuild-release.sh
@@ -11,6 +11,8 @@ meteor npm install
rm -rf .build
METEOR_PROFILE=100 meteor build .build --directory
cp -f fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/packages/cfs_access-point.js
+# Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
+rm -rf .build/bundle/programs/web.browser.legacy
cd .build/bundle/programs/server
rm -rf node_modules
meteor npm install
diff --git a/releases/release-sandstorm.sh b/releases/release-sandstorm.sh
index 997e46c4..9bf32bf5 100755
--- a/releases/release-sandstorm.sh
+++ b/releases/release-sandstorm.sh
@@ -1,4 +1,4 @@
-# Usage: ./release.sh 1.36
+# Usage: ./release.sh 3.95
# Delete old stuff
#cd ~/repos/wekan
@@ -10,8 +10,6 @@
REPODIR=/home/wekan/repos
WEKANDIR=/home/wekan/repos/wekan
-OLDDIR=/home/wekan/repos/sandstorm-build
-METEDIR=/home/wekan/repos/wekan/.sandstorm-meteor-1.8
# Ensure sudo access
sudo echo .
@@ -20,45 +18,14 @@ cd $REPODIR
rm -rf $WEKANDIR
git clone git@github.com:wekan/wekan.git
cd $WEKANDIR
-# Use Meteor 1.8.x and Node 8.17.0
-sudo n 8.17.0
-#sudo rm -rf /root/.cache/node-gyp/8.17.0
+sudo n 12.16.2
sudo mkdir -p /usr/local/lib/node_modules/fibers/.node-gyp
-#sudo npm -g uninstall node-gyp node-pre-gyp fibers
-#./releases/rebuild-release.sh
-rm -rf $OLDDIR
-mkdir $OLDDIR
-mv .meteor $OLDDIR/
-cp -pR .snap-meteor-1.8 $OLDDIR/
-mv $METEDIR/.meteor .
-mv $METEDIR/package.json .
-mv $METEDIR/package-lock.json .
-# Meteor 1.9.x has changes to Buffer() => Buffer.alloc(), so reverting those
-mv $METEDIR/cfs_access-point.txt fix-download-unicode/
-mv $METEDIR/export.js models/
-mv $METEDIR/wekanCreator.js models/
-mv $METEDIR/ldap.js packages/wekan-ldap/server/ldap.js
-mv $METEDIR/oidc_server.js packages/wekan-oidc/oidc_server.js
-rm -rf $METEDIR
# Build Wekan
./releases/rebuild-release.sh
-# Build bundle with Meteor 1.8.x and Node 8.17.0
cd .build/bundle/programs/server
-npm install node-gyp node-pre-gyp fibers@2.0.0
+npm install node-gyp node-pre-gyp fibers
cd $WEKANDIR
# Build Sandstorm
meteor-spk pack wekan-$1.spk
#spk publish wekan-$1.spk
#scp wekan-$1.spk x2:/var/snap/wekan/common/releases.wekan.team/
-#mv wekan-$1.spk ..
-#sudo rm -rf .meteor-spk
-# Back to Meteor 1.9 and Node 12.14.1
-#sudo n 12.14.1
-#sudo rm -rf .meteor
-#mv ../sandstorm-build/.meteor .
-#mv ../sandstorm-build/.snap-meteor-1.8 .
-#rmdir ../sandstorm-build
-# Delete old stuff
-#cd ~/repos/wekan
-#./releases/release-cleanup.sh
-
diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp
index ff7eb54f..b5b1d492 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 = 392,
+ appVersion = 398,
# Increment this for every release.
- appMarketingVersion = (defaultText = "3.92.0~2020-04-09"),
+ appMarketingVersion = (defaultText = "3.98.0~2020-04-25"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,
@@ -259,6 +259,7 @@ const myCommand :Spk.Manifest.Command = (
(key = "OAUTH2_USERINFO_ENDPOINT", value=""),
(key = "OAUTH2_TOKEN_ENDPOINT", value=""),
(key = "LDAP_ENABLE", value="false"),
+ (key = "PASSWORD_LOGIN_ENABLED", value="true"),
(key = "SANDSTORM", value="1"),
(key = "METEOR_SETTINGS", value = "{\"public\": {\"sandstorm\": true}}")
]
diff --git a/sandstorm.js b/sandstorm.js
index 590a24ec..8615e419 100644
--- a/sandstorm.js
+++ b/sandstorm.js
@@ -22,9 +22,7 @@ const sandstormBoard = {
if (isSandstorm && Meteor.isServer) {
const fs = require('fs');
- const pathParts = process.cwd().split('/');
- const path = pathParts.join('/');
- const Capnp = Npm.require(`${path}../../../node_modules/capnp.js`);
+ const Capnp = Npm.require(`capnp`);
const Package = Capnp.importSystem('sandstorm/package.capnp');
const Powerbox = Capnp.importSystem('sandstorm/powerbox.capnp');
const Identity = Capnp.importSystem('sandstorm/identity.capnp');
diff --git a/server/migrations.js b/server/migrations.js
index b4489987..a6c945fa 100644
--- a/server/migrations.js
+++ b/server/migrations.js
@@ -1033,3 +1033,11 @@ Migrations.add('add-description-text-allowed', () => {
noValidateMulti,
);
});
+
+Migrations.add('add-sort-field-to-boards', () => {
+ Boards.find().forEach((board, index) => {
+ if (!board.hasOwnProperty('sort')) {
+ Boards.direct.update(board._id, { $set: { sort: index } }, noValidate);
+ }
+ });
+});
diff --git a/server/publications/boards.js b/server/publications/boards.js
index 6fbd9860..b80a6b23 100644
--- a/server/publications/boards.js
+++ b/server/publications/boards.js
@@ -35,7 +35,9 @@ Meteor.publish('boards', function() {
members: 1,
permission: 1,
type: 1,
+ sort: 1,
},
+ sort: { sort: 1 /* boards default sorting */ },
},
);
});
@@ -61,6 +63,7 @@ Meteor.publish('archivedBoards', function() {
slug: 1,
title: 1,
},
+ sort: { sort: 1 /* boards default sorting */ },
},
);
});
@@ -90,7 +93,7 @@ Meteor.publishRelations('board', function(boardId, isArchived) {
$or,
// Sort required to ensure oplog usage
},
- { limit: 1, sort: { _id: 1 } },
+ { limit: 1, sort: { sort: 1 /* boards default sorting */ } },
),
function(boardId, board) {
this.cursor(Lists.find({ boardId, archived: isArchived }));
diff --git a/snap-src/bin/config b/snap-src/bin/config
index 90c70c91..48ab6393 100755
--- a/snap-src/bin/config
+++ b/snap-src/bin/config
@@ -3,7 +3,7 @@
# All supported keys are defined here together with descriptions and default values
# list of supported keys
-keys="DEBUG MONGO_URL MONGODB_BIND_UNIX_SOCKET MONGO_URL MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM ROOT_URL PORT DISABLE_MONGODB CADDY_ENABLED CADDY_BIND_PORT WITH_API RICHER_CARD_COMMENT_EDITOR CARD_OPENED_WEBHOOK_ENABLED ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW MAX_IMAGE_PIXEL IMAGE_COMPRESS_RATIO BIGEVENTS_PATTERN NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE NOTIFY_DUE_DAYS_BEFORE_AND_AFTER NOTIFY_DUE_AT_HOUR_OF_DAY EMAIL_NOTIFICATION_TIMEOUT CORS CORS_ALLOW_HEADERS CORS_EXPOSE_HEADERS MATOMO_ADDRESS MATOMO_SITE_ID MATOMO_DO_NOT_TRACK MATOMO_WITH_USERNAME BROWSER_POLICY_ENABLED TRUSTED_URL WEBHOOKS_ATTRIBUTES OAUTH2_ENABLED OAUTH2_LOGIN_STYLE 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_EMAIL_MAP OAUTH2_REQUEST_PERMISSIONS LDAP_ENABLE LDAP_PORT LDAP_HOST LDAP_BASEDN LDAP_LOGIN_FALLBACK LDAP_RECONNECT LDAP_TIMEOUT LDAP_IDLE_TIMEOUT LDAP_CONNECT_TIMEOUT LDAP_AUTHENTIFICATION LDAP_AUTHENTIFICATION_USERDN LDAP_AUTHENTIFICATION_PASSWORD LDAP_LOG_ENABLED LDAP_BACKGROUND_SYNC LDAP_BACKGROUND_SYNC_INTERVAL LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS LDAP_ENCRYPTION LDAP_CA_CERT LDAP_REJECT_UNAUTHORIZED LDAP_USER_AUTHENTICATION LDAP_USER_AUTHENTICATION_FIELD LDAP_USER_SEARCH_FILTER LDAP_USER_SEARCH_SCOPE LDAP_USER_SEARCH_FIELD LDAP_SEARCH_PAGE_SIZE LDAP_SEARCH_SIZE_LIMIT LDAP_GROUP_FILTER_ENABLE 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 LDAP_USERNAME_FIELD LDAP_FULLNAME_FIELD LDAP_MERGE_EXISTING_USERS LDAP_SYNC_USER_DATA LDAP_SYNC_USER_DATA_FIELDMAP LDAP_SYNC_GROUP_ROLES LDAP_DEFAULT_DOMAIN LDAP_EMAIL_MATCH_ENABLE LDAP_EMAIL_MATCH_REQUIRE LDAP_EMAIL_MATCH_VERIFIED LDAP_EMAIL_FIELD LDAP_SYNC_ADMIN_STATUS LDAP_SYNC_ADMIN_GROUPS HEADER_LOGIN_ID HEADER_LOGIN_FIRSTNAME HEADER_LOGIN_LASTNAME HEADER_LOGIN_EMAIL LOGOUT_WITH_TIMER LOGOUT_IN LOGOUT_ON_HOURS LOGOUT_ON_MINUTES DEFAULT_AUTHENTICATION_METHOD ATTACHMENTS_STORE_PATH SCROLLINERTIA SCROLLAMOUNT"
+keys="DEBUG MONGO_URL MONGODB_BIND_UNIX_SOCKET MONGO_URL MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM ROOT_URL PORT DISABLE_MONGODB CADDY_ENABLED CADDY_BIND_PORT WITH_API RICHER_CARD_COMMENT_EDITOR CARD_OPENED_WEBHOOK_ENABLED ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW MAX_IMAGE_PIXEL IMAGE_COMPRESS_RATIO BIGEVENTS_PATTERN NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE NOTIFY_DUE_DAYS_BEFORE_AND_AFTER NOTIFY_DUE_AT_HOUR_OF_DAY EMAIL_NOTIFICATION_TIMEOUT CORS CORS_ALLOW_HEADERS CORS_EXPOSE_HEADERS MATOMO_ADDRESS MATOMO_SITE_ID MATOMO_DO_NOT_TRACK MATOMO_WITH_USERNAME BROWSER_POLICY_ENABLED TRUSTED_URL WEBHOOKS_ATTRIBUTES OAUTH2_ENABLED OAUTH2_LOGIN_STYLE 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_EMAIL_MAP OAUTH2_REQUEST_PERMISSIONS LDAP_ENABLE LDAP_PORT LDAP_HOST LDAP_BASEDN LDAP_LOGIN_FALLBACK LDAP_RECONNECT LDAP_TIMEOUT LDAP_IDLE_TIMEOUT LDAP_CONNECT_TIMEOUT LDAP_AUTHENTIFICATION LDAP_AUTHENTIFICATION_USERDN LDAP_AUTHENTIFICATION_PASSWORD LDAP_LOG_ENABLED LDAP_BACKGROUND_SYNC LDAP_BACKGROUND_SYNC_INTERVAL LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS LDAP_ENCRYPTION LDAP_CA_CERT LDAP_REJECT_UNAUTHORIZED LDAP_USER_AUTHENTICATION LDAP_USER_AUTHENTICATION_FIELD LDAP_USER_SEARCH_FILTER LDAP_USER_SEARCH_SCOPE LDAP_USER_SEARCH_FIELD LDAP_SEARCH_PAGE_SIZE LDAP_SEARCH_SIZE_LIMIT LDAP_GROUP_FILTER_ENABLE 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 LDAP_USERNAME_FIELD LDAP_FULLNAME_FIELD LDAP_MERGE_EXISTING_USERS LDAP_SYNC_USER_DATA LDAP_SYNC_USER_DATA_FIELDMAP LDAP_SYNC_GROUP_ROLES LDAP_DEFAULT_DOMAIN LDAP_EMAIL_MATCH_ENABLE LDAP_EMAIL_MATCH_REQUIRE LDAP_EMAIL_MATCH_VERIFIED LDAP_EMAIL_FIELD LDAP_SYNC_ADMIN_STATUS LDAP_SYNC_ADMIN_GROUPS HEADER_LOGIN_ID HEADER_LOGIN_FIRSTNAME HEADER_LOGIN_LASTNAME HEADER_LOGIN_EMAIL LOGOUT_WITH_TIMER LOGOUT_IN LOGOUT_ON_HOURS LOGOUT_ON_MINUTES DEFAULT_AUTHENTICATION_METHOD ATTACHMENTS_STORE_PATH SCROLLINERTIA SCROLLAMOUNT PASSWORD_LOGIN_ENABLED"
# default values
DESCRIPTION_DEBUG="Debug OIDC OAuth2 etc. Example: sudo snap set wekan debug='true'"
@@ -461,3 +461,8 @@ KEY_SCROLLINERTIA="scrollinertia"
DESCRIPTION_SCROLLINERTIA="Mousewheel scroll amount, issue #2949. Default: 'auto'"
DEFAULT_SCROLLINERTIA="auto"
KEY_SCROLLINERTIA="scrollamount"
+
+DESCRIPTION_PASSWORD_LOGIN_ENABLED="To hide the password login form"
+DEFAULT_PASSWORD_LOGIN_ENABLED="true"
+KEY_PASSWORD_LOGIN_ENABLED="password-login-enabled"
+
diff --git a/snap-src/bin/mongodb-control b/snap-src/bin/mongodb-control
index 246c3acb..92bc36d6 100755
--- a/snap-src/bin/mongodb-control
+++ b/snap-src/bin/mongodb-control
@@ -66,3 +66,5 @@ fi
# Drop indexes on database upgrade, when starting MongoDB
#mongo wekan --eval "db.getCollectionNames().forEach(function(col_name) { var coll = db.getCollection(col_name); coll.dropIndexes(); });" $BIND_OPTIONS
+
+mongo wekan --eval 'db.adminCommand({ setFeatureCompatibilityVersion: "4.2" });' $BIND_OPTIONS
diff --git a/snap-src/bin/wekan-help b/snap-src/bin/wekan-help
index 008a4de1..dfcf40a5 100755
--- a/snap-src/bin/wekan-help
+++ b/snap-src/bin/wekan-help
@@ -461,6 +461,9 @@ echo -e "Default authentication method."
echo -e "The default authentication method used if a user does not exist to create and authenticate. Method can be password or ldap."
echo -e "\t$ snap set $SNAP_NAME default-authentication-method='ldap'"
echo -e "\n"
+echo -e "Enable or not password login Form"
+echo -e "\t$ snap set $SNAP_NAME password-login-enabled='false'"
+echo -e "\n"
# parse config file for supported settings keys
echo -e "wekan supports settings keys"
echo -e "values can be changed by calling\n$ snap set $SNAP_NAME <key name>='<key value>'"
diff --git a/snapcraft.yaml b/snapcraft.yaml
index 2b6b1ef9..689d150c 100644
--- a/snapcraft.yaml
+++ b/snapcraft.yaml
@@ -81,7 +81,7 @@ parts:
wekan:
source: .
plugin: nodejs
- node-engine: 12.16.1
+ node-engine: 12.16.2
node-packages:
- node-gyp
- node-pre-gyp
@@ -216,6 +216,8 @@ parts:
#meteor npm install --save bcrypt
# Change from npm-bcrypt directory back to .build/bundle/programs/server directory.
#cd ../../../../
+ # Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
+ rm -rf .build/bundle/programs/web.browser.legacy
# Change to directory .build/bundle/programs/server
cd .build/bundle/programs/server
npm install
diff --git a/stacksmith/user-scripts/build.sh b/stacksmith/user-scripts/build.sh
index 00448514..16befc43 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=v12.16.1
+NODE_VERSION=v12.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
@@ -75,6 +75,8 @@ sudo -u wekan ${meteor} build --directory /home/wekan/app_build
sudo cp /home/wekan/app/fix-download-unicode/cfs_access-point.txt /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js
sudo chown wekan:wekan /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js
sudo rm /home/wekan/app_build/bundle/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
+# Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
+rm -rf /home/wekan/app_build/bundle/programs/web.browser.legacy
cd /home/wekan/app_build/bundle/programs/server/
sudo npm install
sudo chown -R wekan:wekan ./node_modules
diff --git a/start-wekan.bat b/start-wekan.bat
index 61c242ee..272e963e 100755
--- a/start-wekan.bat
+++ b/start-wekan.bat
@@ -363,6 +363,13 @@ REM SET LDAP_SYNC_ADMIN_STATUS=true
REM # Comma separated list of admin group names to sync.
REM SET LDAP_SYNC_ADMIN_GROUPS=group1,group2
+REM ------------------------------------------------
+
+REM # Enable/Disable password login form.
+REM SET PASSWORD_LOGIN_ENABLED=true
+
+REM ------------------------------------------------
+
REM # Login to LDAP automatically with HTTP header.
REM # In below example for siteminder, at right side of = is header name.
REM SET HEADER_LOGIN_ID=HEADERUID
diff --git a/start-wekan.sh b/start-wekan.sh
index bf598e39..f3fb18e9 100755
--- a/start-wekan.sh
+++ b/start-wekan.sh
@@ -362,6 +362,9 @@
# LOGOUT_ON_MINUTES : The number of minutes
# example : LOGOUT_ON_MINUTES=55
#export LOGOUT_ON_MINUTES=
+ #---------------------------------------------------------------------
+ # PASSWORD_LOGIN_ENABLED : Enable or not the password login form.
+ #export PASSWORD_LOGIN_ENABLED=true
node main.js
# & >> ../../wekan.log
diff --git a/torodb-postgresql/docker-compose.yml b/torodb-postgresql/docker-compose.yml
index e742402f..793a9b4f 100644
--- a/torodb-postgresql/docker-compose.yml
+++ b/torodb-postgresql/docker-compose.yml
@@ -527,7 +527,12 @@ services:
# LOGOUT_ON_MINUTES : The number of minutes
# example : LOGOUT_ON_MINUTES=55
#- LOGOUT_ON_MINUTES=
+ #---------------------------------------------------------------------
+ # PASSWORD_LOGIN_ENABLED : Enable or not the password login form.
+ # example: PASSWORD_LOGIN_ENABLED=false
+ # - PASSWORD_LOGIN_ENABLED
#-------------------------------------------------------------------
+
depends_on:
- mongodb
diff --git a/wekan-dockerfile-manifest.yaml b/wekan-dockerfile-manifest.yaml
new file mode 100644
index 00000000..9242f7d7
--- /dev/null
+++ b/wekan-dockerfile-manifest.yaml
@@ -0,0 +1,11 @@
+image: quay.io/wekan/wekan
+manifests:
+ - image: quay.io/wekan/wekan:amd64
+ platform:
+ architecture: amd64
+ os: linux
+ - image: quay.io/wekan/wekan:arm64v8
+ platform:
+ architecture: arm64
+ os: linux
+ variant: v8