diff options
425 files changed, 14973 insertions, 28700 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/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index fa17ff1f..2feacc44 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:disco +FROM ubuntu:rolling LABEL maintainer="sgr" ENV BUILD_DEPS="gnupg gosu bsdtar wget curl bzip2 g++ build-essential python git ca-certificates iproute2" @@ -6,8 +6,8 @@ ENV DEBIAN_FRONTEND=noninteractive ENV \ DEBUG=false \ - NODE_VERSION=8.17.0 \ - METEOR_RELEASE=1.8.1 \ + NODE_VERSION=12.16.3 \ + METEOR_RELEASE=1.10.2 \ USE_EDGE=false \ METEOR_EDGE=1.5-beta.17 \ NPM_VERSION=latest \ 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/.snap-meteor-1.8/snapcraft.yaml b/.future-snap/broken-snapcraft.yaml index 2f965fe1..de1b3dbc 100644 --- a/.snap-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.3 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/.snap-meteor-1.8/future/snapcraft.yaml b/.future-snap/snapcraft.yaml index a84c5d1f..1917834c 100644 --- a/.snap-meteor-1.8/future/snapcraft.yaml +++ b/.future-snap/snapcraft.yaml @@ -83,7 +83,7 @@ parts: wekan: source: . plugin: nodejs - node-engine: 12.14.1 + node-engine: 12.14.3 node-packages: - node-gyp - node-pre-gyp 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 896627a6..ba278f34 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -6,10 +6,11 @@ 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 +coffeescript@2.4.1! # Polyfills es5-shim@4.8.0 @@ -22,7 +23,7 @@ dburles:collection-helpers idmontie:migrations matb33:collection-hooks matteodem:easy-search -mongo@1.8.0 +mongo@1.10.0 mquandalle:collection-mutations # Account system @@ -37,13 +38,12 @@ wekan-accounts-oidc # Utilities check@1.3.1 jquery@1.11.10 -random@1.1.0 +random@1.2.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 @@ -67,15 +67,15 @@ templates:tabs verron:autosize simple:json-routes rajit:bootstrap3-datepicker -shell-server@0.4.0 +shell-server@0.5.0 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.5.2 +accounts-password@1.6.0 cfs:gridfs rzymek:fullcalendar momentjs:moment@2.22.2 @@ -85,7 +85,8 @@ msavin:usercache wekan-scrollbar mquandalle:perfect-scrollbar mdg:meteor-apm-agent@3.2.0-rc.0! -coagmano:stylus@1.1.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 @@ -96,5 +97,4 @@ konecty:mongo-counter percolate:synced-cron easylogic:summernote cfs:filesystem -ostrio:files ostrio:cookies diff --git a/.meteor/release b/.meteor/release index 8558e149..3ea26528 100644 --- a/.meteor/release +++ b/.meteor/release @@ -1 +1 @@ -METEOR@1.9.2 +METEOR@1.10.2 diff --git a/.meteor/versions b/.meteor/versions index bccba0d6..5157f679 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -1,27 +1,26 @@ 3stack:presence@1.1.2 -accounts-base@1.5.0 -accounts-oauth@1.1.16 -accounts-password@1.5.3 +accounts-base@1.6.0 +accounts-oauth@1.2.0 +accounts-password@1.6.0 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.5.2 +babel-compiler@7.5.3 babel-runtime@1.5.0 base64@1.0.12 binary-heap@1.0.11 blaze@2.3.4 blaze-tools@1.0.10 -boilerplate-generator@1.6.0 +boilerplate-generator@1.7.0 browser-policy-common@1.0.11 browser-policy-framing@1.1.0 -caching-compiler@1.2.1 +caching-compiler@1.2.2 caching-html-compiler@1.1.3 callback-hook@1.3.0 cfs:access-point@0.1.49 @@ -45,7 +44,8 @@ cfs:worker@0.1.5 check@1.3.1 chuangbo:cookie@1.1.0 coagmano:stylus@1.1.0 -coffeescript@1.0.17 +coffeescript@2.4.1 +coffeescript-compiler@2.4.1 cottz:publish-relations@2.0.8 dburles:collection-helpers@1.1.0 ddp@1.4.0 @@ -55,9 +55,9 @@ ddp-rate-limiter@1.0.7 ddp-server@2.3.1 deps@1.0.12 diff-sequence@1.1.1 -dynamic-import@0.5.1 +dynamic-import@0.5.2 easylogic:summernote@0.8.8 -ecmascript@0.14.2 +ecmascript@0.14.3 ecmascript-runtime@0.7.0 ecmascript-runtime-client@0.10.0 ecmascript-runtime-server@0.9.0 @@ -75,7 +75,7 @@ htmljs@1.0.11 http@1.4.2 id-map@1.1.0 idmontie:migrations@1.0.3 -inter-process-messaging@0.1.0 +inter-process-messaging@0.1.1 jquery@1.11.11 kadira:blaze-layout@2.3.0 kadira:dochead@1.5.0 @@ -84,7 +84,7 @@ 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 +launch-screen@1.2.0 livedata@1.0.18 localstorage@1.2.0 logging@1.1.20 @@ -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.4.5 -mobile-status-bar@1.0.14 +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.8.1 +mongo@1.10.0 mongo-decimal@0.1.1 mongo-dev-server@1.1.0 mongo-id@1.0.7 @@ -127,14 +127,13 @@ 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.3.0 -oauth@1.2.8 -oauth2@1.2.1 +npm-mongo@3.7.0 +oauth@1.3.0 +oauth2@1.3.0 observe-sequence@1.0.16 ongoworks:speakingurl@1.1.0 ordered-dict@1.1.0 -ostrio:cookies@2.5.0 -ostrio:files@1.13.0 +ostrio:cookies@2.6.0 peerlibrary:assert@0.3.0 peerlibrary:base-component@0.16.0 peerlibrary:blaze-components@0.15.1 @@ -145,7 +144,7 @@ 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 +random@1.2.0 rate-limit@1.0.9 reactive-dict@1.3.0 reactive-var@1.0.11 @@ -157,17 +156,17 @@ server-render@0.3.1 service-configuration@1.0.11 session@1.2.0 sha@1.0.9 -shell-server@0.4.0 +shell-server@0.5.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.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 @@ -182,12 +181,12 @@ 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 verron:autosize@3.0.8 -webapp@1.8.2 +webapp@1.9.1 webapp-hashing@1.0.9 wekan-accounts-cas@0.1.0 wekan-accounts-oidc@1.0.10 diff --git a/.snap-meteor-1.8/.meteor/.finished-upgraders b/.snap-meteor-1.8/.meteor/.finished-upgraders deleted file mode 100644 index bc5b50f7..00000000 --- a/.snap-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/.snap-meteor-1.8/.meteor/.gitignore b/.snap-meteor-1.8/.meteor/.gitignore deleted file mode 100644 index 501f92e4..00000000 --- a/.snap-meteor-1.8/.meteor/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -dev_bundle -local diff --git a/.snap-meteor-1.8/.meteor/.id b/.snap-meteor-1.8/.meteor/.id deleted file mode 100644 index 0556ccf7..00000000 --- a/.snap-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/.snap-meteor-1.8/.meteor/cordova-plugins b/.snap-meteor-1.8/.meteor/cordova-plugins deleted file mode 100644 index e69de29b..00000000 --- a/.snap-meteor-1.8/.meteor/cordova-plugins +++ /dev/null diff --git a/.snap-meteor-1.8/.meteor/packages b/.snap-meteor-1.8/.meteor/packages deleted file mode 100644 index 8d25f206..00000000 --- a/.snap-meteor-1.8/.meteor/packages +++ /dev/null @@ -1,99 +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! -coagmano:stylus -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/.snap-meteor-1.8/.meteor/platforms b/.snap-meteor-1.8/.meteor/platforms deleted file mode 100644 index efeba1b5..00000000 --- a/.snap-meteor-1.8/.meteor/platforms +++ /dev/null @@ -1,2 +0,0 @@ -server -browser diff --git a/.snap-meteor-1.8/.meteor/release b/.snap-meteor-1.8/.meteor/release deleted file mode 100644 index bfccdc2c..00000000 --- a/.snap-meteor-1.8/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -METEOR@1.8.3 diff --git a/.snap-meteor-1.8/.meteor/versions b/.snap-meteor-1.8/.meteor/versions deleted file mode 100644 index ce5a6635..00000000 --- a/.snap-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@2.0.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/.snap-meteor-1.8/cfs_access-point.txt b/.snap-meteor-1.8/cfs_access-point.txt deleted file mode 100644 index 8e3359d0..00000000 --- a/.snap-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/.snap-meteor-1.8/export.js b/.snap-meteor-1.8/export.js deleted file mode 100644 index cc979ce0..00000000 --- a/.snap-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/.snap-meteor-1.8/ldap.js b/.snap-meteor-1.8/ldap.js deleted file mode 100644 index bd2cd1fb..00000000 --- a/.snap-meteor-1.8/ldap.js +++ /dev/null @@ -1,584 +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/.snap-meteor-1.8/oidc_server.js b/.snap-meteor-1.8/oidc_server.js deleted file mode 100644 index 326238da..00000000 --- a/.snap-meteor-1.8/oidc_server.js +++ /dev/null @@ -1,149 +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/.snap-meteor-1.8/package-lock.json b/.snap-meteor-1.8/package-lock.json deleted file mode 100644 index 6b0e04cb..00000000 --- a/.snap-meteor-1.8/package-lock.json +++ /dev/null @@ -1,5184 +0,0 @@ -{ - "name": "wekan", - "version": "v3.78.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/highlight": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", - "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/runtime": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.2.tgz", - "integrity": "sha512-EXxN64agfUqqIGeEjI5dL5z0Sw0ZwWo1mLTi4mQowCZ42O59b7DRpZAnTC6OqdF28wMBMFKNb/4uFGrVaigSpg==", - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "@samverschueren/stream-to-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", - "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==", - "dev": true, - "requires": { - "any-observable": "^0.3.0" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "acorn": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", - "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", - "dev": true - }, - "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", - "dev": true - }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true - }, - "ansi-escapes": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", - "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", - "dev": true, - "requires": { - "type-fest": "^0.5.2" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "any-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", - "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", - "dev": true - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" - } - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - } - } - }, - "backoff": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", - "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=", - "requires": { - "precond": "0.2" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "bcrypt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-3.0.6.tgz", - "integrity": "sha512-taA5bCTfXe7FUjKroKky9EXpdhkVvhE5owfxfLYodbrAR1Ul3juLmIQmIQBK4L9a5BuUcE6cqmwT+Da20lF9tg==", - "requires": { - "nan": "2.13.2", - "node-pre-gyp": "0.12.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "bson": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/bson/-/bson-4.0.2.tgz", - "integrity": "sha512-rBdCxMBCg2aR420e1oKUejjcuPZLTibA7zEhWAlliFWEwzuBCC9Dkp5r7VFFIQB2t1WVsvTbohry575mc7Xw5A==", - "requires": { - "buffer": "^5.1.0", - "long": "^4.0.0" - } - }, - "buffer": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.3.0.tgz", - "integrity": "sha512-XykNc84nIOC32vZ9euOKbmGAP69JUkXDtBQfLq88c8/6J/gZi/t14A+l/p/9EM2TcT5xNC1MKPCrvO3LVUpVPw==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "bunyan": { - "version": "1.8.12", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz", - "integrity": "sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=", - "requires": { - "dtrace-provider": "~0.8", - "moment": "^2.10.6", - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - } - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "chownr": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", - "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==" - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", - "dev": true, - "requires": { - "slice-ansi": "0.0.4", - "string-width": "^1.0.1" - }, - "dependencies": { - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true - } - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" - }, - "common-tags": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", - "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", - "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "dependencies": { - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "cssfilter": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", - "integrity": "sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4=" - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", - "dev": true - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" - }, - "dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dtrace-provider": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz", - "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ=", - "optional": true, - "requires": { - "nan": "^2.10.0" - } - }, - "elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", - "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.11", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0" - }, - "dependencies": { - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "eslint-config-meteor": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/eslint-config-meteor/-/eslint-config-meteor-0.0.9.tgz", - "integrity": "sha1-a+IZQguko+oCPbMKhm5g70h2Uvo=", - "dev": true - }, - "eslint-config-prettier": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-3.6.0.tgz", - "integrity": "sha512-ixJ4U3uTLXwJts4rmSVW/lMXjlGwCijhBJHk8iVqKKSifeI0qgFEfWl8L63isfc8Od7EiBALF6BX3jKLluf/jQ==", - "dev": true, - "requires": { - "get-stdin": "^6.0.0" - } - }, - "eslint-import-resolver-meteor": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-meteor/-/eslint-import-resolver-meteor-0.4.0.tgz", - "integrity": "sha1-yGhjhAghIIz4EzxczlGQnCamFWk=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "resolve": "^1.1.6" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "resolve": "^1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-module-utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz", - "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==", - "dev": true, - "requires": { - "debug": "^2.6.8", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-plugin-import": { - "version": "2.18.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz", - "integrity": "sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==", - "dev": true, - "requires": { - "array-includes": "^3.0.3", - "contains-path": "^0.1.0", - "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.4.0", - "has": "^1.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.0", - "read-pkg-up": "^2.0.0", - "resolve": "^1.11.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-plugin-meteor": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-meteor/-/eslint-plugin-meteor-5.2.0.tgz", - "integrity": "sha512-bHzs/0BwHdKcBbX7tYrSnBaMG+1i2f1wy8k6H/sBBsERD/yifmBUrNLiPyZkIvyVUeI8OaZw8U9fsMvLP5GhIg==", - "dev": true, - "requires": { - "invariant": "2.2.4" - } - }, - "eslint-plugin-prettier": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.0.tgz", - "integrity": "sha512-XWX2yVuwVNLOUhQijAkXz+rMPPoCr7WFiAl8ig6I7Xn+pPVhDhzg4DxHpmbeb0iqjO9UronEA3Tb09ChnFVHHA==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", - "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.0.0" - } - }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", - "dev": true - }, - "espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", - "dev": true, - "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "dev": true, - "requires": { - "estraverse": "^4.0.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "execa": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.9.0.tgz", - "integrity": "sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA==", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.2.0.tgz", - "integrity": "sha1-WtlGwi9bMrp/jNdCZxHG6KP8JSk=" - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "figures": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.0.0.tgz", - "integrity": "sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-parent-dir": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", - "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", - "dev": true - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - } - }, - "flatted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", - "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs-minipass": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", - "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", - "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==", - "dev": true - }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.1.tgz", - "integrity": "sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw==", - "dev": true - }, - "gridfs-stream": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/gridfs-stream/-/gridfs-stream-0.5.3.tgz", - "integrity": "sha1-wIlnKPo+qD9fo8nO1GGvt6A20Uk=" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hosted-git-info": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", - "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "ignore-walk": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", - "requires": { - "minimatch": "^3.0.4" - } - }, - "import-fresh": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", - "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "inquirer": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.1.tgz", - "integrity": "sha512-uxNHBeQhRXIoHWTSNYUFhQVrHYFThIt6IVo2fFmSe8aBwdR3/w6b58hJpiL/fMukFkvGzjg+hSxFtwvVmKZmXw==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^2.4.2", - "cli-cursor": "^3.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.15", - "mute-stream": "0.0.8", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^4.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.1.0.tgz", - "integrity": "sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^5.2.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-observable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", - "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", - "dev": true, - "requires": { - "symbol-observable": "^1.1.0" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "^1.0.1" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "jest-get-type": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", - "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", - "dev": true - }, - "jest-validate": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz", - "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "jest-get-type": "^22.1.0", - "leven": "^2.1.0", - "pretty-format": "^23.6.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "ldap-filter": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/ldap-filter/-/ldap-filter-0.2.2.tgz", - "integrity": "sha1-8rhCvguG2jNSeYUFsx68rlkNd9A=", - "requires": { - "assert-plus": "0.1.5" - }, - "dependencies": { - "assert-plus": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", - "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=" - } - } - }, - "ldapjs": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ldapjs/-/ldapjs-1.0.2.tgz", - "integrity": "sha1-VE/3Ayt7g8aPBwEyjZKXqmlDQPk=", - "requires": { - "asn1": "0.2.3", - "assert-plus": "^1.0.0", - "backoff": "^2.5.0", - "bunyan": "^1.8.3", - "dashdash": "^1.14.0", - "dtrace-provider": "~0.8", - "ldap-filter": "0.2.2", - "once": "^1.4.0", - "vasync": "^1.6.4", - "verror": "^1.8.1" - } - }, - "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lint-staged": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-7.3.0.tgz", - "integrity": "sha512-AXk40M9DAiPi7f4tdJggwuKIViUplYtVj1os1MVEteW7qOkU50EOehayCfO9TsoGK24o/EsWb41yrEgfJDDjCw==", - "dev": true, - "requires": { - "chalk": "^2.3.1", - "commander": "^2.14.1", - "cosmiconfig": "^5.0.2", - "debug": "^3.1.0", - "dedent": "^0.7.0", - "execa": "^0.9.0", - "find-parent-dir": "^0.3.0", - "is-glob": "^4.0.0", - "is-windows": "^1.0.2", - "jest-validate": "^23.5.0", - "listr": "^0.14.1", - "lodash": "^4.17.5", - "log-symbols": "^2.2.0", - "micromatch": "^3.1.8", - "npm-which": "^3.0.1", - "p-map": "^1.1.1", - "path-is-inside": "^1.0.2", - "pify": "^3.0.0", - "please-upgrade-node": "^3.0.2", - "staged-git-files": "1.1.1", - "string-argv": "^0.0.2", - "stringify-object": "^3.2.2" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "listr": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", - "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", - "dev": true, - "requires": { - "@samverschueren/stream-to-observable": "^0.3.0", - "is-observable": "^1.1.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.5.0", - "listr-verbose-renderer": "^0.5.0", - "p-map": "^2.0.0", - "rxjs": "^6.3.3" - }, - "dependencies": { - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - } - } - }, - "listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", - "dev": true - }, - "listr-update-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", - "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^2.3.0", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "requires": { - "chalk": "^1.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "listr-verbose-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", - "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "cli-cursor": "^2.1.0", - "date-fns": "^1.27.2", - "figures": "^2.0.0" - }, - "dependencies": { - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - } - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.unescape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", - "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", - "dev": true - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - } - }, - "log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - } - } - }, - "loglevel": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.3.tgz", - "integrity": "sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA==", - "dev": true - }, - "loglevel-colored-level-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz", - "integrity": "sha1-akAhj9x64V/HbD0PPmdsRlOIYD4=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "loglevel": "^1.4.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - }, - "dependencies": { - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "optional": true - }, - "meteor-node-stubs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-0.4.1.tgz", - "integrity": "sha512-UO2OStvLOKoApmOdIP5eCqoLaa/ritMXRg4ffJVdkNLEsczzPvTjgC0Mxk4cM4R8MZkwll90FYgjDf5qUTJdMA==", - "requires": { - "assert": "^1.4.1", - "browserify-zlib": "^0.1.4", - "buffer": "^4.9.1", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.7", - "events": "^1.1.1", - "https-browserify": "0.0.1", - "os-browserify": "^0.2.1", - "path-browserify": "0.0.0", - "process": "^0.11.9", - "punycode": "^1.4.1", - "querystring-es3": "^0.2.1", - "readable-stream": "^2.3.6", - "stream-browserify": "^2.0.1", - "stream-http": "^2.8.0", - "string_decoder": "^1.1.0", - "timers-browserify": "^1.4.2", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.10.3", - "vm-browserify": "0.0.4" - }, - "dependencies": { - "asn1.js": { - "version": "4.10.1", - "bundled": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "assert": { - "version": "1.4.1", - "bundled": true, - "requires": { - "util": "0.10.3" - } - }, - "base64-js": { - "version": "1.3.0", - "bundled": true - }, - "bn.js": { - "version": "4.11.8", - "bundled": true - }, - "brorand": { - "version": "1.1.0", - "bundled": true - }, - "browserify-aes": { - "version": "1.2.0", - "bundled": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "bundled": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.1", - "bundled": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "bundled": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.0.4", - "bundled": true, - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" - } - }, - "browserify-zlib": { - "version": "0.1.4", - "bundled": true, - "requires": { - "pako": "~0.2.0" - } - }, - "buffer": { - "version": "4.9.1", - "bundled": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-xor": { - "version": "1.0.3", - "bundled": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "bundled": true - }, - "cipher-base": { - "version": "1.0.4", - "bundled": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "console-browserify": { - "version": "1.1.0", - "bundled": true, - "requires": { - "date-now": "^0.1.4" - } - }, - "constants-browserify": { - "version": "1.0.0", - "bundled": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true - }, - "create-ecdh": { - "version": "4.0.3", - "bundled": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "create-hash": { - "version": "1.2.0", - "bundled": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "bundled": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "bundled": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "date-now": { - "version": "0.1.4", - "bundled": true - }, - "des.js": { - "version": "1.0.0", - "bundled": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "diffie-hellman": { - "version": "5.0.3", - "bundled": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "domain-browser": { - "version": "1.2.0", - "bundled": true - }, - "elliptic": { - "version": "6.4.0", - "bundled": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "events": { - "version": "1.1.1", - "bundled": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "bundled": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "hash-base": { - "version": "3.0.4", - "bundled": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "hash.js": { - "version": "1.1.3", - "bundled": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "bundled": true - } - } - }, - "hmac-drbg": { - "version": "1.0.1", - "bundled": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "https-browserify": { - "version": "0.0.1", - "bundled": true - }, - "ieee754": { - "version": "1.1.11", - "bundled": true - }, - "indexof": { - "version": "0.0.1", - "bundled": true - }, - "inherits": { - "version": "2.0.1", - "bundled": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true - }, - "md5.js": { - "version": "1.3.4", - "bundled": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "miller-rabin": { - "version": "4.0.1", - "bundled": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "bundled": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "bundled": true - }, - "os-browserify": { - "version": "0.2.1", - "bundled": true - }, - "pako": { - "version": "0.2.9", - "bundled": true - }, - "parse-asn1": { - "version": "5.1.1", - "bundled": true, - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" - } - }, - "path-browserify": { - "version": "0.0.0", - "bundled": true - }, - "pbkdf2": { - "version": "3.0.16", - "bundled": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "process": { - "version": "0.11.10", - "bundled": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true - }, - "public-encrypt": { - "version": "4.0.2", - "bundled": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "punycode": { - "version": "1.4.1", - "bundled": true - }, - "querystring": { - "version": "0.2.0", - "bundled": true - }, - "querystring-es3": { - "version": "0.2.1", - "bundled": true - }, - "randombytes": { - "version": "2.0.6", - "bundled": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "bundled": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "bundled": true - } - } - }, - "ripemd160": { - "version": "2.0.2", - "bundled": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true - }, - "sha.js": { - "version": "2.4.11", - "bundled": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "stream-browserify": { - "version": "2.0.1", - "bundled": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-http": { - "version": "2.8.1", - "bundled": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.3", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "timers-browserify": { - "version": "1.4.2", - "bundled": true, - "requires": { - "process": "~0.11.0" - } - }, - "to-arraybuffer": { - "version": "1.0.1", - "bundled": true - }, - "tty-browserify": { - "version": "0.0.0", - "bundled": true - }, - "url": { - "version": "0.11.0", - "bundled": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "bundled": true - } - } - }, - "util": { - "version": "0.10.3", - "bundled": true, - "requires": { - "inherits": "2.0.1" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "vm-browserify": { - "version": "0.0.4", - "bundled": true, - "requires": { - "indexof": "0.0.1" - } - }, - "xtend": { - "version": "4.0.1", - "bundled": true - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "minipass": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", - "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", - "requires": { - "minipass": "^2.2.1" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", - "optional": true - }, - "mongodb": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.3.3.tgz", - "integrity": "sha512-MdRnoOjstmnrKJsK8PY0PjP6fyF/SBS4R8coxmhsfEU7tQ46/J6j+aSHF2n4c2/H8B+Hc/Klbfp8vggZfI0mmA==", - "requires": { - "bson": "^1.1.1", - "require_optional": "^1.0.1", - "safe-buffer": "^5.1.2", - "saslprep": "^1.0.0" - }, - "dependencies": { - "bson": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.1.tgz", - "integrity": "sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg==" - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", - "optional": true, - "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "optional": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", - "optional": true, - "requires": { - "glob": "^6.0.1" - } - } - } - }, - "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==" - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", - "optional": true - }, - "needle": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", - "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-pre-gyp": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz", - "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "npm-bundled": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", - "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==" - }, - "npm-packlist": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.4.tgz", - "integrity": "sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==", - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npm-path": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", - "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", - "dev": true, - "requires": { - "which": "^1.2.10" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "npm-which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", - "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", - "dev": true, - "requires": { - "commander": "^2.9.0", - "npm-path": "^2.0.2", - "which": "^1.2.10" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "object.values": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", - "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - } - }, - "os": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/os/-/os-0.1.1.tgz", - "integrity": "sha1-IIhF6J4ZOtTZcUdLk5R3NqVtE/M=" - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-shim": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", - "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "page": { - "version": "1.11.4", - "resolved": "https://registry.npmjs.org/page/-/page-1.11.4.tgz", - "integrity": "sha512-8JMZzcE5W4qk+/DtmogN57cI+Yscy7xTYCpfSO7s3Tx6LjZuAfHFQY1+cKIAy60NaXdzVD6nOc3objaVbE0HJg==", - "requires": { - "path-to-regexp": "~1.2.1" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.2.1.tgz", - "integrity": "sha1-szcFwUAjTYc8hyHHuf2LVB7Tr/k=", - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - } - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "pre-commit": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/pre-commit/-/pre-commit-1.2.2.tgz", - "integrity": "sha1-287g7p3nI15X95xW186UZBpp7sY=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "spawn-sync": "^1.0.15", - "which": "1.2.x" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "which": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", - "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "precond": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", - "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw=" - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prettier": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", - "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", - "dev": true - }, - "prettier-eslint": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-8.8.2.tgz", - "integrity": "sha512-2UzApPuxi2yRoyMlXMazgR6UcH9DKJhNgCviIwY3ixZ9THWSSrUww5vkiZ3C48WvpFl1M1y/oU63deSy1puWEA==", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "common-tags": "^1.4.0", - "dlv": "^1.1.0", - "eslint": "^4.0.0", - "indent-string": "^3.2.0", - "lodash.merge": "^4.6.0", - "loglevel-colored-level-prefix": "^1.0.0", - "prettier": "^1.7.0", - "pretty-format": "^23.0.1", - "require-relative": "^0.8.7", - "typescript": "^2.5.1", - "typescript-eslint-parser": "^16.0.0", - "vue-eslint-parser": "^2.0.2" - }, - "dependencies": { - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "^3.0.4" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "eslint": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", - "dev": true, - "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", - "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", - "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" - } - }, - "eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "dev": true, - "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" - } - }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - } - }, - "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", - "dev": true, - "requires": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" - } - }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": true, - "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - } - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - } - } - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-format": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", - "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0", - "ansi-styles": "^3.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - } - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.8.0.tgz", - "integrity": "sha512-tPSkj8y92PfZVbinY1n84i1Qdx75lZjMQYx9WZhnkofyxzw2r7Ho39G3/aEvSUdebxpnnM4LZJCtvE/Aq3+s9w==" - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "require-relative": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", - "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", - "dev": true - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - }, - "dependencies": { - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "^0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - } - } - }, - "require_optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", - "requires": { - "resolve-from": "^2.0.0", - "semver": "^5.1.0" - } - }, - "resolve": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", - "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "requires": { - "glob": "^7.1.3" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } - }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "requires": { - "rx-lite": "*" - } - }, - "rxjs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", - "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "saslprep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", - "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "optional": true, - "requires": { - "sparse-bitfield": "^3.0.3" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - } - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", - "optional": true, - "requires": { - "memory-pager": "^1.0.2" - } - }, - "spawn-sync": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", - "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", - "dev": true, - "requires": { - "concat-stream": "^1.4.7", - "os-shim": "^0.1.2" - } - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "staged-git-files": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.1.tgz", - "integrity": "sha512-H89UNKr1rQJvI1c/PIR3kiAMBV23yvR7LItZiV74HWZwzt7f3YHuujJ9nJZlt58WlFox7XQsOahexwk7nTe69A==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "string-argv": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz", - "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dev": true, - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "dev": true - }, - "table": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.5.tgz", - "integrity": "sha512-oGa2Hl7CQjfoaogtrOHEJroOcYILTx7BZWLGsJIlzoWmB2zmguhNfPJZsWPKYek/MgCxfco54gEi31d1uN2hFA==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "tar": { - "version": "4.4.10", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", - "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.5", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-fest": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", - "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==", - "dev": true - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "typescript": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", - "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", - "dev": true - }, - "typescript-eslint-parser": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-16.0.1.tgz", - "integrity": "sha512-IKawLTu4A2xN3aN/cPLxvZ0bhxZHILGDKTZWvWNJ3sLNhJ3PjfMEDQmR2VMpdRPrmWOadgWXRwjLBzSA8AGsaQ==", - "dev": true, - "requires": { - "lodash.unescape": "4.0.1", - "semver": "5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - } - } - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vasync": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/vasync/-/vasync-1.6.4.tgz", - "integrity": "sha1-3+k2Fq0OeugBszKp2Iv8XNyOHR8=", - "requires": { - "verror": "1.6.0" - }, - "dependencies": { - "verror": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.6.0.tgz", - "integrity": "sha1-fROyex+swuLakEBetepuW90lLqU=", - "requires": { - "extsprintf": "1.2.0" - } - } - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vue-eslint-parser": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz", - "integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.2", - "esquery": "^1.0.0", - "lodash": "^4.17.4" - }, - "dependencies": { - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "^3.0.4" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } - }, - "eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "dev": true, - "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" - } - } - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "xss": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.6.tgz", - "integrity": "sha512-6Q9TPBeNyoTRxgZFk5Ggaepk/4vUOYdOsIUYvLehcsIZTFjaavbVnsuAkLA5lIFuug5hw8zxcB9tm01gsjph2A==", - "requires": { - "commander": "^2.9.0", - "cssfilter": "0.0.10" - } - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" - } - } -} diff --git a/.snap-meteor-1.8/package.json b/.snap-meteor-1.8/package.json deleted file mode 100644 index c5d457bb..00000000 --- a/.snap-meteor-1.8/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name": "wekan", - "version": "v3.78.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": "^5.16.0", - "eslint-config-meteor": "0.0.9", - "eslint-config-prettier": "^3.6.0", - "eslint-import-resolver-meteor": "^0.4.0", - "eslint-plugin-import": "^2.18.0", - "eslint-plugin-meteor": "^5.1.0", - "eslint-plugin-prettier": "^3.1.0", - "lint-staged": "^7.3.0", - "pre-commit": "^1.2.2", - "prettier": "^1.18.2", - "prettier-eslint": "^8.8.2" - }, - "dependencies": { - "@babel/runtime": "^7.6.2", - "ajv": "^5.0.0", - "babel-runtime": "^6.26.0", - "bcrypt": "^3.0.2", - "bson": "^4.0.0", - "bunyan": "^1.8.12", - "es6-promise": "^4.2.4", - "gridfs-stream": "^0.5.3", - "ldapjs": "^1.0.2", - "meteor-node-stubs": "^0.4.1", - "mongodb": "^3.3.3", - "os": "^0.1.1", - "page": "^1.8.6", - "qs": "^6.8.0", - "source-map-support": "^0.5.12", - "xss": "^1.0.6" - } -} diff --git a/.snap-meteor-1.8/wekanCreator.js b/.snap-meteor-1.8/wekanCreator.js deleted file mode 100644 index ec85d93f..00000000 --- a/.snap-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..b83b5665 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,9 @@ -dist: eoan +dist: focal sudo: required env: TRAVIS_DOCKER_COMPOSE_VERSION: 1.24.0 - TRAVIS_NODE_VERSION: 12.15.0 + TRAVIS_NODE_VERSION: 12.16.3 TRAVIS_NPM_VERSION: latest before_install: diff --git a/CHANGELOG.md b/CHANGELOG.md index 66f28893..3772e347 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,503 @@ +# Upcoming Wekan release + +This release adds the following server platforms: + +- [Android arm64/x64](https://github.com/wekan/wekan/wiki/Android). + Thanks to xet7. + +and adds the following features: + +- [Install Wekan to mobile homescreen icon and use fullscreen + PWA](https://github.com/commit/8d5adc04645e3e71423f16869f39b8d79969bccd). + [Docs for iOS and Android at wiki PWA page](https://github.com/wekan/wekan/wiki/PWA). + Thanks to xet7. + +and fixes the following bugs: + +- [Fix getStartDayOfWeek once again](https://github.com/wekan/wekan/pull/3061). + Thanks to marc1006. +- [Fix shortcuts list and support card shortcuts when hovering + a card](https://github.com/wekan/wekan/pull/3066). + Thanks to marc1006. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v4.01 2020-04-28 Wekan release + +This release adds the following updates: + +- [Upgrade to Node v12.16.3](https://github.com/wekan/wekan/commit/1d89e96dd101c11913f1acdd6d16b5650eaf18a7). + Thanks to Node developers and xet7. + +and fixes the following bugs: + +- [Fix Docker builds](https://github.com/wekan/wekan/commit/280e66947e3afa878c41e876cf827ebcec81a2c6). + Thanks to xet7. +- [Fix Cards and Users API docs at https://wekan.github.io/api/ not generated because of + syntax error and new Javascript syntax](https://github.com/wekan/wekan/commit/9ae20a3f51e63c29f536e2f5b3e66a2c7d88c691). + Wekan uses wekan/releases/generate-docs*.sh Python code to generate OpenAPI docs, + it did not show any errors while generating docs, only left out parts of API docs. + This affected Wekan versions v3.94-v4.00. + Thanks to pvcon13 and xet7. +- [Fix list header height when cards count is shown](https://github.com/wekan/wekan/pull/3056). + Thanks to marc1006. +- [Smaller height for Add Board button](https://github.com/wekan/wekan/commit/6afc9259f084717a0cc3ce6d66979fd7c1471939). + Thanks to xet7. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v4.00 2020-04-27 Wekan release + +This release fixes the following bugs: + +- [Make sure that the board header buttons fit into one line even for devices with 360px width + resolution](https://github.com/wekan/wekan/pull/3052). + Thanks to marc1006. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v3.99 2020-04-27 Wekan release + +This release fixes the following bugs: + +- [Fix Boards are very hard to tap in mobile](https://github.com/wekan/wekan/pull/3051). + Thanks to marc1006. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# 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: + +- [Scheduler to clean up read notifications. Also added a button to manually remove all + read notifications, and a fix to prevent users form getting notifications for their own + actions](https://github.com/wekan/wekan/pull/2998). + Thanks to jtbairdsr. +- [Add setting](https://github.com/wekan/wekan/commit/5ebb47cb0ec7272894a37d99579ede872251f55c) + default [NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE=2](https://github.com/wekan/wekan/pull/2998) + to all Wekan platforms. + Thanks to xet7. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v3.91 2020-04-08 Wekan release + +This release adds the following new features: + +- [OpenShift: Route template added to helm chart for Openshift v4x + cluster](https://github.com/wekan/wekan/pull/2996). + Thanks to ckavili. +- [Filter by Assignee](https://github.com/wekan/wekan/pull/2997). + Thanks to daniel-eder. +- [Vote on Card](https://github.com/wekan/wekan/pull/2994). + Thanks to NicoP-S and xet7. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v3.90 2020-04-06 Wekan release + +This release makes the following updates: + +- [Update dependencies](https://github.com/wekan/wekan/commit/d798f6e3ef09595ce4f1d1fbc053eec70fc91fb9). + +and updates the following translations: + +- [Update layouts.js for zh-TW language name](https://github.com/wekan/wekan/pull/2988). + Thanks to doggy8088. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v3.89 2020-04-05 Wekan release + +This release adds the following new features: + +- [Create subtasks in parenttask swimlane](https://github.com/wekan/wekan/issues/1953). + Thanks to TOSCom-DanielEder. +- [When searching cards in a board, also search from Custom Fields](https://github.com/wekan/wekan/pull/2985). + Thanks to slvrpdr. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v3.88 2020-04-02 Wekan release + +This release adds the following new features: + +- [Notification drawer](https://github.com/wekan/wekan/pull/2975) [like Trello](https://github.com/wekan/wekan/issues/2471). + Thanks to jtbairdsr and xet7. + +and makes the following UI changes: + +- [Minicard labels on the top and title on bottom](https://github.com/wekan/wekan/issues/2980). + Thanks to helioguardabaxo and xet7. + +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 + +This release makes the following UI changes: + +- [Move "Rules" from "Board View" to "Board Settings"](https://github.com/wekan/wekan/issues/2973). + Thanks to helioguardabaxo and xet7. +- [Improvements on card details visualization](https://github.com/wekan/wekan/issues/2974). + Thanks to helioguardabaxo and xet7. +- [Hide duplicate "Hide system messages" at Change Settings/Member Settings, because it's also on card + slider](https://github.com/wekan/wekan/issues/2837). + Thanks to notohiro and xet7. + +and fixes the following bugs: + +- [Fix Browser always reload the whole page when I change one of the card + color](https://github.com/wekan/wekan/commit/3546d7aa02bc65cf1183cb493adeb543ba51945d). + Fixed by making label colors and text again editable. + Regression from [Wekan v3.86 2)](https://github.com/wekan/wekan/commit/b9099a8b7ea6f63c79bdcbb871cb993b2cb7e325). + Thanks to javen9881 and xet7. +- [Fix richer editor submit did not clear edit area](https://github.com/wekan/wekan/commit/033d6710470b2ecd7a0ec0b2f0741ff459e68b32). + Thanks to xet7. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v3.86 2020-03-24 Wekan release + +This release fixes the following bugs: + +- [Fix Rich editor can not be disabled, regression from changes yesterday at Wekan v3.85](https://github.com/wekan/wekan/commit/12ab8fac5db9c5ac8069d0ca2bca340d6004a25b). + Thanks to uusijani, vjrj and xet7. +- [1) Fix Pasting text into a card is adding a line before and after + (and multiplies by pasting more) by changing paste "p" to "br". + 2) Fixes to summernote and markdown comment editors, related + to keeping them open when adding comments, having + @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 + +This release fixes the following CRITICAL SECURITY VULNERABILITIES: + +- [Fix XSS bug reported today 4 hours ago by Cyb3rjunky](https://github.com/wekan/wekan/commit/482682e50079d70c5113169020d6834013b57c11). + Logged in users could run javascript in input fields. + This affects Wekan versions v3.12-v3.84. + In [Wekan v3.12](https://github.com/wekan/wekan/blob/master/CHANGELOG.md#v312-2019-08-09-wekan-release) + there was [changes for XSS filter to allow inserting images, videos etc + on comment WYSIWYG editor](https://github.com/wekan/wekan/pull/2593) + so features related to that are now removed. + After this fix, Javascript in input fields is not executed. + Thanks to Cyb3rjunky and xet7. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v3.84 2020-03-16 Wekan release + +This release adds the following features: + +- Add settings for mouse wheel scroll inertia and scroll + amount [Part1](https://github.com/wekan/wekan/commit/9d13001b903f9ec50f5fa3a4bdbacae32b27ac65) + and [Part2](https://github.com/wekan/wekan/commit/aaecac091209e90c0c2123830728f5e7a835ccb4). + For example: sudo snap set wekan scrollinertia='200' , sudo snap set wekan scrollamount='200' . + Thanks to danger89 and xet7. + +and adds the following updates: + +- [Upgrade to Meteor 1.10.1](https://github.com/wekan/wekan/commit/e16c65babc1f021c35a3d46bc61e649ec94d1e82). + Thanks to xet7. +- [Update markdown](https://github.com/wekan/wekan/commit/6e0fa78022ea487176eb0a32ec5a4a441f8e0c3c). + Thanks to xet7. +- [Update minimist](https://github.com/wekan/wekan/commit/ea6baa5c2b956ee28b0a7e63f988e2fc1998201a). + Thanks to xet7. +- [Update acorn](https://github.com/wekan/wekan/commit/369a29707bbec3bf89717c16e8b698fb4666087a). + Thanks to xet7. +- [Update prettier-eslint](https://github.com/wekan/wekan/commit/8183b7bdaa01d2ce53ac7215beafd5efe21373e8). + Thanks to xet7. +- [Update ostrio:cookies](https://github.com/wekan/wekan/commit/14b8610837117616d436e2bac6a9dc653e315662). + Thanks to xet7. +- [Add build time profiling to build script](https://github.com/wekan/wekan/commit/f968109e7390139e50375ee29bc7bc3cf1e1ab41). + Thanks to zodern. + +and fixes the following bugs: + +- [Downgrade stylus to v1.1.0 to speed up building Wekan](https://github.com/wekan/wekan/commit/fca4cdcebf1cc6642aefeb78b911cb5b95ebe473). + This is because building newer stylus v2 takes 52 minutes. After this change, building Wekan takes 3 minutes. + Thanks to zodern. +- [Fix: Error when retrieve token from some OIDC due to not necessary scope + parameter](https://github.com/wekan/wekan/pull/2955). + Thanks to benoitm76. +- [Fix: img tag did not allow width and height. Removed swipebox from markdown editor + img tag and updated marked markdown to newest version](https://github.com/wekan/wekan/commit/2b26bbe78a1a2b8b427963a6c44c3853efdb737e). + Thanks to hradec and xet7. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v3.83 2020-03-01 Wekan release + +This release tries to revert remaining the following changes: + +- [Revert](https://github.com/wekan/wekan/88573ad2cdb8596b795a82ef40a0662180e8a7d7) change made at Wekan v3.81, + because building did not work: [Try to make Meteor build time shorter + by excluding legacy and cordova. This was made possible by + Meteor 1.10-rc.2](https://github.com/wekan/wekan/commit/0d3002f69d97e646fa7368bfdade4f78c51e9884). + Thanks to xet7. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v3.82 2020-03-01 Wekan release + +This release reverts the following changes: + +- Revert change made at Wekan v3.81, because building did not work: [Try to make Meteor build time shorter + by excluding legacy and cordova. This was made possible by + Meteor 1.10-rc.2](https://github.com/wekan/wekan/commit/0d3002f69d97e646fa7368bfdade4f78c51e9884). + Thanks to xet7. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v3.81 2020-03-01 Wekan release + +This release [fixes](https://github.com/wekan/wekan/commit/aac7c380c8c389b0683b2bd64e2cc856993f0e30) the following CRITICAL SECURITY VULNERABILITIES and other bugs: + +- Fix critical and moderate security vulnerabilities reported at 2020-02-26 with + responsible disclosure by [Dejan Zelic](https://twitter.com/dejandayoff), + Justin Benjamin and others at [Offensive Security](https://twitter.com/offsectraining), + that follow standard 90 days before public disclosure. + Thanks to xet7. +- Fix webhook error that prevented some card etc deleting from web UI of board. + Thanks to xet7. +- Add missing Font Awesome icon to Board Settings Menu. + Thanks to xet7. +- Remove autofocus from many form input boxes so that they would not cause warnings. + Thanks to xet7. + +and does the following upgrades: + +- [Upgrade Meteor to 1.10-rc.2](https://github.com/wekan/wekan/commit/26b521e86e6ac40b7ba25bbe8dac7bf4d48d43ce). + Thanks to xet7. +- [Try to make Meteor build time shorter by excluding legacy and cordova. This was made possible by + Meteor 1.10-rc.2](https://github.com/wekan/wekan/commit/0d3002f69d97e646fa7368bfdade4f78c51e9884). + Thanks to xet7. + +and fixes the following bugs: + +- [Try to fix afterwards loading of cards by adding fallback when requestIdleCallback is not + available](https://github.com/wekan/wekan/commit/2b9540ce02de604bf84ea082f2dcb1d01673708c). + Thanks to xet7. +- [Make profile.initials available in publications](https://github.com/wekan/wekan/pull/2948). + Thanks to NicoP-S. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v3.80 2020-02-22 Wekan release + +This release adds the following features: + +- [Create New User in Admin Panel](https://github.com/wekan/wekan/commit/e0ca960a35cf006880019ba28fc82aa30f289a71). + Works, but does not save fullname yet, so currently it's needed to edit add fullname later. + Thanks to xet7. + +and adds the following updates: + +- [Update to Meteor 1.9.1, Node 12.16.1 etc newest dependencies](https://github.com/wekan/wekan/commit/cbbb5deff7d84a91c40becc9caaf70f5b6738b63). + Thanks to xet7. +- [Update to Meteor 1.9.2](https://github.com/wekan/wekan/commit/9be3f3714ae680ff9fc1855c960c9831e84c2b07). + Thanks to xet7. + +and fixes the following bugs: + +- [Update Sandstorm release build script](https://github.com/wekan/wekan/commit/a4ff6cc0af8545ca4d3e97fa2cabbe7981c025b2). + Thanks to xet7. +- [Fix docker-compose link](https://github.com/wekan/wekan/pull/2937). + Thanks to pbek. +- [Remove alethes:pages package, that had some indentation error. + Package is about pagination, but I did not find any pagination related code in Wekan + yet](https://github.com/wekan/wekan/commit/ec012060305bc16fbf8d2ac218f5c847e02c4301). + Thanks to xet7 ! + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v3.79 2020-02-13 Wekan release + +This release fixes the following bugs: + +- [Fix Card Opened Webhook can not be disabled](https://github.com/wekan/wekan/commit/178f376e2138b5522c2e92ddfd2babb113df8d9f). + Thanks to mvanvoorden and xet7. + +Thanks to above GitHub users for their contributions and translators for their translations. + # v3.78 2020-02-12 Wekan release This release adds the following features: @@ -25,7 +525,7 @@ and fixes the following bugs: work [Part 1](https://github.com/wekan/wekan/commit/9a21b0a1c933e7f778e4e57a8258e150ccea1620) and [Part2](https://github.com/wekan/wekan/commit/4467a68b97a3fbf0fbae7f05177d978f2aa80287). Thanks to 2020product and xet7. - + Thanks to above GitHub users for their contributions and translators for their translations. # v3.76 2020-02-07 Wekan release @@ -4,10 +4,12 @@ LABEL maintainer="wekan" # Set the environment variables (defaults where required) # DOES NOT WORK: paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303 # ENV BUILD_DEPS="paxctl" +ARG DEBIAN_FRONTEND=noninteractive + ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-essential git ca-certificates python3" \ DEBUG=false \ - NODE_VERSION=v12.15.0 \ - METEOR_RELEASE=1.9.0 \ + NODE_VERSION=v12.16.3 \ + METEOR_RELEASE=1.10.2 \ USE_EDGE=false \ METEOR_EDGE=1.5-beta.17 \ NPM_VERSION=latest \ @@ -26,6 +28,7 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build- ATTACHMENTS_STORE_PATH="" \ MAX_IMAGE_PIXEL="" \ IMAGE_COMPRESS_RATIO="" \ + NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE="" \ BIGEVENTS_PATTERN=NONE \ NOTIFY_DUE_DAYS_BEFORE_AND_AFTER="" \ NOTIFY_DUE_AT_HOUR_OF_DAY="" \ @@ -110,7 +113,10 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build- CORS="" \ CORS_ALLOW_HEADERS="" \ CORS_EXPOSE_HEADERS="" \ - DEFAULT_AUTHENTICATION_METHOD="" + DEFAULT_AUTHENTICATION_METHOD="" \ + SCROLLINERTIA="0" \ + SCROLLAMOUNT="auto" \ + PASSWORD_LOGIN_ENABLED=true # Copy the app to the image COPY ${SRC_PATH} /home/wekan/app @@ -267,6 +273,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..bff3c71d --- /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.3 \ + 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"] @@ -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 @@ -61,7 +63,7 @@ that by providing one-click installation on various platforms. [Mac](https://github.com/wekan/wekan/wiki/Mac) / [Windows](https://github.com/wekan/wekan/wiki/Install-Wekan-from-source-on-Windows). [More Platforms](https://github.com/wekan/wekan/wiki/Platforms), bundle for RasPi3 ARM and other CPUs where Node.js and MongoDB exists. - 1 GB RAM minimum free for Wekan. Production server should have minimum total 4 GB RAM. - For thousands of users, for example with [Docker](https://github.com/wekan/wekan/blob/devel/docker-compose.yml): 3 frontend servers, + For thousands of users, for example with [Docker](https://github.com/wekan/wekan/blob/master/docker-compose.yml): 3 frontend servers, each having 2 CPU and 2 wekan-app containers. One backend wekan-db server with many CPUs. - Enough disk space and alerts about low disk space. If you run out disk space, MongoDB database gets corrupted. - SECURITY: Updating to newest Wekan version very often. Please check you do not have automatic updates of Sandstorm or Snap turned off. diff --git a/Stackerfile.yml b/Stackerfile.yml index c2f9fd60..5ad6cdf5 100644 --- a/Stackerfile.yml +++ b/Stackerfile.yml @@ -1,5 +1,5 @@ appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928 -appVersion: "v3.78.0" +appVersion: "v4.01.0" files: userUploads: - README.md diff --git a/client/00-startup.js b/client/00-startup.js new file mode 100644 index 00000000..4a717b67 --- /dev/null +++ b/client/00-startup.js @@ -0,0 +1,6 @@ +// PWA +if ('serviceWorker' in navigator) { + window.addEventListener('load', function() { + navigator.serviceWorker.register('/pwa-service-worker.js'); + }); +} diff --git a/client/components/activities/activities.jade b/client/components/activities/activities.jade index 8ecbdee8..c86936a0 100644 --- a/client/components/activities/activities.jade +++ b/client/components/activities/activities.jade @@ -8,234 +8,201 @@ template(name="activities") +cardActivities template(name="boardActivities") - each currentBoard.activities - .activity - +userAvatar(userId=user._id) - p.activity-desc - +memberName(user=user) + each activityData in currentBoard.activities + +activity(activity=activityData card=card mode=mode) - if($eq activityType 'deleteAttachment') - | {{{_ 'activity-delete-attach' cardLink}}}. +template(name="cardActivities") + each activityData in currentCard.activities + +activity(activity=activityData card=card mode=mode) + +template(name="activity") + .activity + +userAvatar(userId=activity.user._id) + p.activity-desc + +memberName(user=activity.user) + + //- attachment activity ------------------------------------------------- + if($eq activity.activityType 'deleteAttachment') + | {{{_ 'activity-delete-attach' cardLink}}}. + + if($eq activity.activityType 'addAttachment') + | {{{_ 'activity-attached' attachmentLink cardLink}}}. + if($neq mode 'board') + if activity.attachment.isImage + img.attachment-image-preview(src=activity.attachment.url) + + //- board activity ------------------------------------------------------ + if($eq mode 'board') + if($eq activity.activityType 'createBoard') + | {{_ 'activity-created' boardLabel}}. - if($eq activityType 'addAttachment') - | {{{_ 'activity-attached' attachmentLink cardLink}}}. + if($eq activity.activityType 'importBoard') + | {{{_ 'activity-imported-board' boardLabel sourceLink}}}. - if($eq activityType 'addBoardMember') + if($eq activity.activityType 'addBoardMember') | {{{_ 'activity-added' memberLink boardLabel}}}. - if($eq activityType 'addComment') - | {{{_ 'activity-on' cardLink}}} - a.activity-comment(href="{{ card.absoluteUrl }}") - +viewer - = comment.text - - if($eq activityType 'addChecklist') - | {{{_ 'activity-checklist-added' cardLink}}}. - .activity-checklist(href="{{ card.absoluteUrl }}") - +viewer - = checklist.title - if($eq activityType 'removeChecklist') - | {{{_ 'activity-checklist-removed' cardLink}}}. - - if($eq activityType 'checkedItem') - | {{{_ 'activity-checked-item' checkItem checklist.title cardLink}}}. - - if($eq activityType 'uncheckedItem') - | {{{_ 'activity-unchecked-item' checkItem checklist.title cardLink}}}. - - if($eq activityType 'checklistCompleted') - | {{{_ 'activity-checklist-completed' checklist.title cardLink}}}. + if($eq activity.activityType 'removeBoardMember') + | {{{_ 'activity-excluded' memberLink boardLabel}}}. - if($eq activityType 'checklistUncompleted') - | {{{_ 'activity-checklist-uncompleted' checklist.title cardLink}}}. + //- card activity ------------------------------------------------------- + if($eq activity.activityType 'createCard') + if($eq mode 'card') + | {{{_ 'activity-added' cardLabel activity.listName}}}. + else + | {{{_ 'activity-added' cardLabel boardLabel}}}. - if($eq activityType 'addChecklistItem') - | {{{_ 'activity-checklist-item-added' checklist.title cardLink}}}. - .activity-checklist(href="{{ card.absoluteUrl }}") - +viewer - = checklistItem.title - if($eq activityType 'removedChecklistItem') - | {{{_ 'activity-checklist-item-removed' checklist.title cardLink}}}. + if($eq activity.activityType 'importCard') + | {{{_ 'activity-imported' cardLink boardLabel sourceLink}}}. - if($eq activityType 'archivedCard') - | {{{_ 'activity-archived' cardLink}}}. + if($eq activity.activityType 'moveCard') + | {{{_ 'activity-moved' cardLabel activity.oldList.title activity.list.title}}}. - if($eq activityType 'archivedList') - | {{_ 'activity-archived' list.title}}. + if($eq activity.activityType 'moveCardBoard') + | {{{_ 'activity-moved' cardLink activity.oldBoardName activity.boardName}}}. - if($eq activityType 'archivedSwimlane') - | {{_ 'activity-archived' swimlane.title}}. + if($eq activity.activityType 'archivedCard') + | {{{_ 'activity-archived' cardLink}}}. - if($eq activityType 'createBoard') - | {{_ 'activity-created' boardLabel}}. + if($eq activity.activityType 'restoredCard') + | {{{_ 'activity-sent' cardLink boardLabel}}}. - if($eq activityType 'createCard') - | {{{_ 'activity-added' cardLink boardLabel}}}. + //- checklist activity -------------------------------------------------- + if($eq activity.activityType 'addChecklist') + | {{{_ 'activity-checklist-added' cardLink}}}. + if($eq mode 'card') + .activity-checklist + +viewer + = activity.checklist.title + else + a.activity-checklist(href="{{ activity.card.absoluteUrl }}") + +viewer + = activity.checklist.title - if($eq activityType 'createCustomField') - | {{_ 'activity-customfield-created' customField}}. + if($eq activity.activityType 'removedChecklist') + | {{{_ 'activity-checklist-removed' cardLink}}}. - if($eq activityType 'createList') - | {{_ 'activity-added' list.title boardLabel}}. + if($eq activity.activityType 'completeChecklist') + | {{{_ 'activity-checklist-completed' activity.checklist.title cardLink}}}. - if($eq activityType 'createSwimlane') - | {{_ 'activity-added' swimlane.title boardLabel}}. + if($eq activity.activityType 'uncompleteChecklist') + | {{{_ 'activity-checklist-uncompleted' activity.checklist.title cardLink}}}. - if($eq activityType 'removeList') - | {{_ 'activity-removed' title boardLabel}}. + if($eq activity.activityType 'checkedItem') + | {{{_ 'activity-checked-item' checkItem activity.checklist.title cardLink}}}. - if($eq activityType 'importBoard') - | {{{_ 'activity-imported-board' boardLabel sourceLink}}}. + if($eq activity.activityType 'uncheckedItem') + | {{{_ 'activity-unchecked-item' checkItem activity.checklist.title cardLink}}}. - if($eq activityType 'importCard') - | {{{_ 'activity-imported' cardLink boardLabel sourceLink}}}. + if($eq activity.activityType 'addChecklistItem') + | {{{_ 'activity-checklist-item-added' activity.checklist.title cardLink}}}. + .activity-checklist(href="{{ activity.card.absoluteUrl }}") + +viewer + = activity.checklistItem.title - if($eq activityType 'importList') - | {{{_ 'activity-imported' listLabel boardLabel sourceLink}}}. + if($eq activity.activityType 'removedChecklistItem') + | {{{_ 'activity-checklist-item-removed' activity.checklist.title cardLink}}}. - if($eq activityType 'joinMember') - if($eq user._id member._id) - | {{{_ 'activity-joined' cardLink}}}. + //- comment activity ---------------------------------------------------- + if($eq mode 'card') + //- if we are in card mode we display the comment in a way that it + //- can be edited by the owner + if($eq activity.activityType 'addComment') + +inlinedForm(classNames='js-edit-comment') + +editor(autofocus=true) + = activity.comment.text + .edit-controls + button.primary(type="submit") {{_ 'edit'}} else - | {{{_ 'activity-added' memberLink cardLink}}}. - - if($eq activityType 'moveCardBoard') - | {{{_ 'activity-moved' cardLink oldBoardName boardName}}}. - - if($eq activityType 'moveCard') - | {{{_ 'activity-moved' cardLink oldList.title list.title}}}. - - if($eq activityType 'removeBoardMember') - | {{{_ 'activity-excluded' memberLink boardLabel}}}. + .activity-comment + +viewer + = activity.comment.text + span(title=activity.createdAt).activity-meta {{ moment activity.createdAt }} + if ($eq currentUser._id activity.comment.userId) + = ' - ' + a.js-open-inlined-form {{_ "edit"}} + = ' - ' + a.js-delete-comment {{_ "delete"}} - if($eq activityType 'restoredCard') - | {{{_ 'activity-sent' cardLink boardLabel}}}. + if($eq activity.activityType 'deleteComment') + | {{{_ 'activity-deleteComment' currentData.commentId}}}. - if($eq activityType 'addedLabel') - | {{{_ 'activity-added-label' lastLabel cardLink}}}. + if($eq activity.activityType 'editComment') + | {{{_ 'activity-editComment' currentData.commentId}}}. + else + //- if we are not in card mode we only display a summary of the comment + if($eq activity.activityType 'addComment') + | {{{_ 'activity-on' cardLink}}} + a.activity-comment(href="{{ activity.card.absoluteUrl }}") + +viewer + = activity.comment.text - if($eq activityType 'removedLabel') - | {{{_ 'activity-removed-label' lastLabel cardLink}}}. + //- customField activity ------------------------------------------------ + if($eq mode 'board') + if($eq activity.activityType 'createCustomField') + | {{_ 'activity-customfield-created' customField}}. - if($eq activityType 'setCustomField') + if($eq activity.activityType 'setCustomField') | {{{_ 'activity-set-customfield' lastCustomField lastCustomFieldValue cardLink}}}. - if($eq activityType 'unsetCustomField') + if($eq activity.activityType 'unsetCustomField') | {{{_ 'activity-unset-customfield' lastCustomField cardLink}}}. - if($eq activityType 'unjoinMember') - if($eq user._id member._id) - | {{{_ 'activity-unjoined' cardLink}}}. - else - | {{{_ 'activity-removed' memberLink cardLink}}}. + //- label activity ------------------------------------------------------ + if($eq activity.activityType 'addedLabel') + | {{{_ 'activity-added-label' lastLabel cardLink}}}. - span(title=createdAt).activity-meta {{ moment createdAt }} + if($eq activity.activityType 'removedLabel') + | {{{_ 'activity-removed-label' lastLabel cardLink}}}. -template(name="cardActivities") - each currentCard.activities - .activity - +userAvatar(userId=user._id) - p.activity-desc - +memberName(user=user) - if($eq activityType 'createCard') - | {{_ 'activity-added' cardLabel listName}}. - if($eq activityType 'importCard') - | {{{_ 'activity-imported' cardLabel list.title sourceLink}}}. - if($eq activityType 'joinMember') - if($eq user._id member._id) - | {{_ 'activity-joined' cardLabel}}. - else - | {{{_ 'activity-added' memberLink cardLabel}}}. - if($eq activityType 'unjoinMember') - if($eq user._id member._id) - | {{_ 'activity-unjoined' cardLabel}}. - else - | {{{_ 'activity-removed' cardLabel memberLink}}}. - if($eq activityType 'archivedCard') - | {{_ 'activity-archived' cardLabel}}. - - if($eq activityType 'addedLabel') - | {{{_ 'activity-added-label-card' lastLabel }}}. + //- list activity ------------------------------------------------------- + if($neq mode 'card') + if($eq activity.activityType 'createList') + | {{{_ 'activity-added' listLabel boardLabel}}}. - if($eq activityType 'removedLabel') - | {{{_ 'activity-removed-label-card' lastLabel }}}. + if($eq activity.activityType 'importList') + | {{{_ 'activity-imported' listLabel boardLabel sourceLink}}}. - if($eq activityType 'removeChecklist') - | {{{_ 'activity-checklist-removed' cardLabel}}}. + if($eq activity.activityType 'removeList') + | {{{_ 'activity-removed' activity.title boardLabel}}}. - if($eq activityType 'checkedItem') - | {{{_ 'activity-checked-item-card' checkItem checklist.title }}}. + if($eq activity.activityType 'archivedList') + | {{_ 'activity-archived' listLabel}}. - if($eq activityType 'uncheckedItem') - | {{{_ 'activity-unchecked-item-card' checkItem checklist.title }}}. + //- member activity ---------------------------------------------------- + if($eq activity.activityType 'joinMember') + if($eq user._id activity.member._id) + | {{{_ 'activity-joined' cardLink}}}. + else + | {{{_ 'activity-added' memberLink cardLink}}}. - if($eq activityType 'checklistCompleted') - | {{{_ 'activity-checklist-completed-card' checklist.title }}}. + if($eq activity.activityType 'unjoinMember') + if($eq user._id activity.member._id) + | {{{_ 'activity-unjoined' cardLink}}}. + else + | {{{_ 'activity-removed' memberLink cardLink}}}. - if($eq activityType 'checklistUncompleted') - | {{{_ 'activity-checklist-uncompleted-card' checklist.title }}}. + //- swimlane activity -------------------------------------------------- + if($neq mode 'card') + if($eq activity.activityType 'createSwimlane') + | {{{_ 'activity-added' activity.swimlane.title boardLabel}}}. - if($eq activityType 'restoredCard') - | {{_ 'activity-sent' cardLabel boardLabel}}. - if($eq activityType 'moveCard') - | {{_ 'activity-moved' cardLabel oldList.title list.title}}. + if($eq activity.activityType 'archivedSwimlane') + | {{_ 'activity-archived' activity.swimlane.title}}. - if($eq activityType 'moveCardBoard') - | {{{_ 'activity-moved' cardLink oldBoardName boardName}}}. - if($eq activityType 'addAttachment') - | {{{_ 'activity-attached' attachmentLink cardLabel}}}. - if attachment.isImage - img.attachment-image-preview(src=attachment.url) - if($eq activityType 'deleteAttachment') - | {{{_ 'activity-delete-attach' cardLabel}}}. - if($eq activityType 'removedChecklist') - | {{{_ 'activity-checklist-removed' cardLabel}}}. - if($eq activityType 'addChecklist') - | {{{_ 'activity-checklist-added' cardLabel}}}. - .activity-checklist - +viewer - = checklist.title - if($eq activityType 'addChecklistItem') - | {{{_ 'activity-checklist-item-added' checklist.title cardLink}}}. - .activity-checklist(href="{{ card.absoluteUrl }}") - +viewer - = checklistItem.title - - if(currentData.timeKey) - | {{{_ activityType }}} + //- I don't understand this part ---------------------------------------- + if(currentData.timeKey) + | {{{_ activity.activityType }}} + = ' ' + i(title=currentData.timeValue).activity-meta {{ moment currentData.timeValue 'LLL' }} + if (currentData.timeOldValue) = ' ' - i(title=currentData.timeValue).activity-meta {{ moment currentData.timeValue 'LLL' }} - if (currentData.timeOldValue) - = ' ' - | {{{_ "previous_as" }}} - = ' ' - i(title=currentData.timeOldValue).activity-meta {{ moment currentData.timeOldValue 'LLL' }} - = ' @' - else if(currentData.timeValue) - | {{{_ activityType currentData.timeValue}}} - - - if($eq activityType 'deleteComment') - | {{{_ 'activity-deleteComment' currentData.commentId}}}. - if($eq activityType 'editComment') - | {{{_ 'activity-editComment' currentData.commentId}}}. - if($eq activityType 'addComment') - +inlinedForm(classNames='js-edit-comment') - +editor(autofocus=true) - = comment.text - .edit-controls - button.primary(type="submit") {{_ 'edit'}} - else - .activity-comment - +viewer - = comment.text - span(title=createdAt).activity-meta {{ moment createdAt }} - if ($eq currentUser._id comment.userId) - = ' - ' - a.js-open-inlined-form {{_ "edit"}} - = ' - ' - a.js-delete-comment {{_ "delete"}} - - else - span(title=createdAt).activity-meta {{ moment createdAt }} + | {{{_ "previous_as" }}} + = ' ' + i(title=currentData.timeOldValue).activity-meta {{ moment currentData.timeOldValue 'LLL' }} + = ' @' + else if(currentData.timeValue) + | {{{_ activity.activityType currentData.timeValue}}} + + span(title=activity.createdAt).activity-meta {{ moment activity.createdAt }} diff --git a/client/components/activities/activities.js b/client/components/activities/activities.js index 9697d28c..72af4c35 100644 --- a/client/components/activities/activities.js +++ b/client/components/activities/activities.js @@ -41,7 +41,9 @@ BlazeComponent.extendComponent({ }); }); }, +}).register('activities'); +BlazeComponent.extendComponent({ loadNextPage() { if (this.loadNextPageLocked === false) { this.page.set(this.page.get() + 1); @@ -50,41 +52,37 @@ BlazeComponent.extendComponent({ }, checkItem() { - const checkItemId = this.currentData().checklistItemId; + const checkItemId = this.currentData().activity.checklistItemId; const checkItem = ChecklistItems.findOne({ _id: checkItemId }); - return checkItem.title; + return checkItem && checkItem.title; }, boardLabel() { + const data = this.currentData(); + if (data.mode !== 'board') { + return createBoardLink(data.activity.board(), data.activity.listName); + } return TAPi18n.__('this-board'); }, cardLabel() { + const data = this.currentData(); + if (data.mode !== 'card') { + return createCardLink(this.currentData().activity.card()); + } return TAPi18n.__('this-card'); }, cardLink() { - const card = this.currentData().card(); - return ( - card && - Blaze.toHTML( - HTML.A( - { - href: card.absoluteUrl(), - class: 'action-card', - }, - card.title, - ), - ) - ); + return createCardLink(this.currentData().activity.card()); }, lastLabel() { - const lastLabelId = this.currentData().labelId; + const lastLabelId = this.currentData().activity.labelId; if (!lastLabelId) return null; - const lastLabel = Boards.findOne(Session.get('currentBoard')).getLabelById( - lastLabelId, - ); + const lastLabel = Boards.findOne( + this.currentData().activity.boardId, + ).getLabelById(lastLabelId); if (lastLabel && (lastLabel.name === undefined || lastLabel.name === '')) { return lastLabel.color; } else { @@ -94,7 +92,7 @@ BlazeComponent.extendComponent({ lastCustomField() { const lastCustomField = CustomFields.findOne( - this.currentData().customFieldId, + this.currentData().activity.customFieldId, ); if (!lastCustomField) return null; return lastCustomField.name; @@ -102,10 +100,10 @@ BlazeComponent.extendComponent({ lastCustomFieldValue() { const lastCustomField = CustomFields.findOne( - this.currentData().customFieldId, + this.currentData().activity.customFieldId, ); if (!lastCustomField) return null; - const value = this.currentData().value; + const value = this.currentData().activity.value; if ( lastCustomField.settings.dropdownItems && lastCustomField.settings.dropdownItems.length > 0 @@ -122,11 +120,13 @@ BlazeComponent.extendComponent({ }, listLabel() { - return this.currentData().list().title; + const activity = this.currentData().activity; + const list = activity.list(); + return (list && list.title) || activity.title; }, sourceLink() { - const source = this.currentData().source; + const source = this.currentData().activity.source; if (source) { if (source.url) { return Blaze.toHTML( @@ -146,31 +146,32 @@ BlazeComponent.extendComponent({ memberLink() { return Blaze.toHTMLWithData(Template.memberName, { - user: this.currentData().member(), + user: this.currentData().activity.member(), }); }, attachmentLink() { - const attachment = this.currentData().attachment(); + const attachment = this.currentData().activity.attachment(); const link = attachment.link('original', '/'); // trying to display url before file is stored generates js errors return ( - attachment && - link && - Blaze.toHTML( - HTML.A( - { - href: link, - target: '_blank', - }, - attachment.get('name'), - ), - ) + (attachment && + link && + Blaze.toHTML( + HTML.A( + { + href: link, + target: '_blank', + }, + attachment.name(), + ), + )) || + this.currentData().activity.attachmentName ); }, customField() { - const customField = this.currentData().customField(); + const customField = this.currentData().activity.customField(); if (!customField) return null; return customField.name; }, @@ -180,7 +181,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 +189,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: { @@ -200,4 +201,36 @@ BlazeComponent.extendComponent({ }, ]; }, -}).register('activities'); +}).register('activity'); + +function createCardLink(card) { + return ( + card && + Blaze.toHTML( + HTML.A( + { + href: card.absoluteUrl(), + class: 'action-card', + }, + card.title, + ), + ) + ); +} + +function createBoardLink(board, list) { + let text = board.title; + if (list) text += `: ${list}`; + return ( + board && + Blaze.toHTML( + HTML.A( + { + href: board.absoluteUrl(), + class: 'action-board', + }, + text, + ), + ) + ); +} 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/boardHeader.jade b/client/components/boards/boardHeader.jade index 53a74f76..4c0edac4 100644 --- a/client/components/boards/boardHeader.jade +++ b/client/components/boards/boardHeader.jade @@ -193,20 +193,6 @@ template(name="boardChangeViewPopup") | {{_ 'board-view-cal'}} if $eq Utils.boardView "board-view-cal" i.fa.fa-check - if currentUser.isAdmin - hr - li - with "board-view-rules" - a.js-open-rules-view(title="{{_ 'rules'}}") - i.fa.fa-magic - | {{_ 'rules'}} - else if currentUser.isBoardAdmin - hr - li - with "board-view-rules" - a.js-open-rules-view(title="{{_ 'rules'}}") - i.fa.fa-magic - | {{_ 'rules'}} template(name="createBoard") form diff --git a/client/components/boards/boardHeader.js b/client/components/boards/boardHeader.js index 9040ed83..be0146ec 100644 --- a/client/components/boards/boardHeader.js +++ b/client/components/boards/boardHeader.js @@ -33,22 +33,6 @@ Template.boardMenuPopup.events({ 'click .js-card-settings': Popup.open('boardCardSettings'), }); -Template.boardMenuPopup.helpers({ - exportUrl() { - const params = { - boardId: Session.get('currentBoard'), - }; - const queryParams = { - authToken: Accounts._storedLoginToken(), - }; - return FlowRouter.path('/api/boards/:boardId/export', params, queryParams); - }, - exportFilename() { - const boardId = Session.get('currentBoard'); - return `wekan-export-board-${boardId}.json`; - }, -}); - Template.boardChangeTitlePopup.events({ submit(event, templateInstance) { const newTitle = templateInstance @@ -191,10 +175,6 @@ Template.boardChangeViewPopup.events({ Utils.setBoardView('board-view-cal'); Popup.close(); }, - 'click .js-open-rules-view'() { - Modal.openWide('rulesMain'); - Popup.close(); - }, }); const CreateBoard = BlazeComponent.extendComponent({ diff --git a/client/components/boards/boardsList.jade b/client/components/boards/boardsList.jade index 79bae502..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'}}") @@ -55,7 +55,7 @@ template(name="boardList") title="{{_ 'archive-board'}}") template(name="boardListHeaderBar") - h1 {{_ 'my-boards'}} + h1 {{_ title }} .board-header-btns.right a.board-header-btn.js-open-archived-board i.fa.fa-archive diff --git a/client/components/boards/boardsList.js b/client/components/boards/boardsList.js index 3918af82..9208fdb2 100644 --- a/client/components/boards/boardsList.js +++ b/client/components/boards/boardsList.js @@ -1,4 +1,5 @@ const subManager = new SubsManager(); +const { calculateIndex, enableClickOnTouch } = Utils; Template.boardListHeaderBar.events({ 'click .js-open-archived-board'() { @@ -7,6 +8,9 @@ Template.boardListHeaderBar.events({ }); Template.boardListHeaderBar.helpers({ + title() { + return FlowRouter.getRouteName() === 'home' ? 'my-boards' : 'public'; + }, templatesBoardId() { return Meteor.user() && Meteor.user().getTemplatesBoardId(); }, @@ -20,20 +24,80 @@ BlazeComponent.extendComponent({ Meteor.subscribe('setting'); }, - boards() { - return Boards.find( - { - archived: false, - 'members.userId': Meteor.userId(), - type: 'board', + 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); }, - { sort: ['title'] }, - ); + }); + + // ugly touch event hotfix + enableClickOnTouch(itemsSelector); + + // 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'; + + 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..97d4f195 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 @@ -55,7 +69,7 @@ $spaceBetweenTiles = 16px .label font-weight: normal - line-height:90px + line-height: 56px :hover background-color:#939393 @@ -183,7 +197,7 @@ $spaceBetweenTiles = 16px overflow: scroll li - width: 50% + width: 50% .board-list-item overflow: hidden diff --git a/client/components/cards/attachments.jade b/client/components/cards/attachments.jade index 57e46e39..eda6d118 100644 --- a/client/components/cards/attachments.jade +++ b/client/components/cards/attachments.jade @@ -62,5 +62,5 @@ template(name="attachmentsGalery") unless currentUser.isWorker //li.attachment-item.add-attachment a.js-add-attachment - i.fa.fa-paperclip + i.fa.fa-plus | {{_ 'add-attachment' }} diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index 615ae1d5..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}} @@ -199,10 +199,29 @@ template(name="cardDetails") +viewer = getAssignedBy + if getVoteQuestion + hr + .vote-title + h3 + i.fa.fa-thumbs-up + card-details-item-title {{_ 'vote-question'}} + .vote-result + if votePublic + a.card-label.card-label-green.js-show-positive-votes {{ voteCountPositive }} + a.card-label.card-label-red.js-show-negative-votes {{ voteCountNegative }} + else + .card-label.card-label-green {{ voteCountPositive }} + .card-label.card-label-red {{ voteCountNegative }} + +viewer + = getVoteQuestion + button.card-details-green.js-vote.js-vote-positive(class="{{#if voteState}}voted{{/if}}") {{_ 'vote-for-it'}} + button.card-details-red.js-vote.js-vote-negative(class="{{#if $eq voteState false}}voted{{/if}}") {{_ 'vote-against'}} + //- XXX We should use "editable" to avoid repetiting ourselves if canModifyCard unless currentUser.isWorker if currentBoard.allowsDescriptionTitle + hr h3 i.fa.fa-align-left card-details-item-title {{_ 'description'}} @@ -229,6 +248,7 @@ template(name="cardDetails") a.js-close-inlined-form {{_ 'discard'}} else if getDescription if currentBoard.allowsDescriptionTitle + hr h3.card-details-item-title {{_ 'description'}} if currentBoard.allowsDescriptionText +viewer @@ -237,15 +257,16 @@ template(name="cardDetails") .card-checklist-attachmentGalerys .card-checklist-attachmentGalery.card-checklists if currentBoard.allowsChecklists + hr +checklists(cardId = _id) if currentBoard.allowsSubtasks hr +subtasks(cardId = _id) if currentBoard.allowsAttachments - //- hr - //- h3 - //- i.fa.fa-paperclip - //- | {{_ 'attachments'}} + hr + h3 + i.fa.fa-paperclip + | {{_ 'attachments'}} .card-checklist-attachmentGalery.card-attachmentGalery +attachmentsGalery @@ -312,6 +333,16 @@ template(name="cardDetailsActionsPopup") //li: a.js-members {{_ 'card-edit-members'}} //li: a.js-labels {{_ 'card-edit-labels'}} //li: a.js-attachments {{_ 'card-edit-attachments'}} + if getVoteQuestion + li + a.js-cancel-voting + i.fa.fa-thumbs-up + | {{_ 'card-cancel-voting'}} + else + li + a.js-start-voting + i.fa.fa-thumbs-up + | {{_ 'card-start-voting'}} li a.js-custom-fields i.fa.fa-list-alt @@ -535,3 +566,35 @@ template(name="cardDeletePopup") unless archived p {{_ "card-delete-suggest-archive"}} button.js-confirm.negate.full(type="submit") {{_ 'delete'}} + +template(name="cardStartVotingPopup") + form.edit-vote-question + .fields + label(for="vote") {{_ 'vote-question'}} + input.js-vote-field#vote(type="text" name="vote" value="{{card.getVoteQuestion}}" autofocus) + label(for="vote-public") {{_ 'vote-public'}} + a.js-toggle-vote-public + .materialCheckBox#vote-public(name="vote-public") + + button.primary.confirm.js-submit {{_ 'save'}} + //- button.js-remove-color.negate.wide.right {{_ 'delete'}} + +template(name="positiveVoteMembersPopup") + ul.pop-over-list.js-card-member-list + each m in voteMemberPositive + li.item + a.name + +userAvatar(userId=m._id) + span.full-name + = m.profile.fullname + | (<span class="username">{{ m.username }}</span>) + +template(name="negativeVoteMembersPopup") + ul.pop-over-list.js-card-member-list + each m in voteMemberNegative + li.item + a.name + +userAvatar(userId=m._id) + span.full-name + = m.profile.fullname + | (<span class="username">{{ m.username }}</span>) diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js index 5fdc5579..271fbe2f 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(() => { @@ -38,6 +38,37 @@ BlazeComponent.extendComponent({ Meteor.subscribe('unsaved-edits'); }, + voteState() { + const card = this.currentData(); + const userId = Meteor.userId(); + let state; + if (card.vote) { + if (card.vote.positive) { + state = _.contains(card.vote.positive, userId); + if (state === true) return true; + } + if (card.vote.negative) { + state = _.contains(card.vote.negative, userId); + if (state === true) return false; + } + } + return null; + }, + votePublic() { + const card = this.currentData(); + if (card.vote) return card.vote.public; + return null; + }, + voteCountPositive() { + const card = this.currentData(); + if (card.vote && card.vote.positive) return card.vote.positive.length; + return null; + }, + voteCountNegative() { + const card = this.currentData(); + if (card.vote && card.vote.negative) return card.vote.negative.length; + return null; + }, isWatching() { const card = this.currentData(); return card.findWatcher(Meteor.userId()); @@ -200,9 +231,6 @@ BlazeComponent.extendComponent({ }, }); - // ugly touch event hotfix - enableClickOnTouch('.card-checklist-items .js-checklist'); - const $subtasksDom = this.$('.card-subtasks-items'); $subtasksDom.sortable({ @@ -238,26 +266,21 @@ 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()); - } - if ($subtasksDom.data('sortable')) { - $subtasksDom.sortable('option', 'disabled', !userIsMember()); - } - if ($checklistsDom.data('sortable')) { - $checklistsDom.sortable('option', 'disabled', Utils.isMiniScreen()); + 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', Utils.isMiniScreen()); + if ($subtasksDom.data('uiSortable') || $subtasksDom.data('sortable')) { + $subtasksDom.sortable('option', 'disabled', disabled); } }); }, @@ -347,6 +370,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'), @@ -356,6 +382,8 @@ 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-negative-votes': Popup.open('negativeVoteMembers'), 'mouseenter .js-card-details'() { const parentComponent = this.parentComponent().parentComponent(); //on mobile view parent is Board, not BoardBody. @@ -379,6 +407,18 @@ BlazeComponent.extendComponent({ 'click #toggleButton'() { Meteor.call('toggleSystemMessages'); }, + 'click .js-vote'(e) { + const forIt = $(e.target).hasClass('js-vote-positive'); + let newState = null; + if ( + this.voteState() === null || + (this.voteState() === false && forIt) || + (this.voteState() === true && !forIt) + ) { + newState = forIt; + } + this.data().setVote(Meteor.userId(), newState); + }, }, ]; }, @@ -560,6 +600,7 @@ Template.cardDetailsActionsPopup.events({ 'click .js-assignees': Popup.open('cardAssignees'), 'click .js-labels': Popup.open('cardLabels'), 'click .js-attachments': Popup.open('cardAttachments'), + 'click .js-start-voting': Popup.open('cardStartVoting'), 'click .js-custom-fields': Popup.open('cardCustomFields'), 'click .js-received-date': Popup.open('editCardReceivedDate'), 'click .js-start-date': Popup.open('editCardStartDate'), @@ -570,6 +611,11 @@ Template.cardDetailsActionsPopup.events({ 'click .js-copy-card': Popup.open('copyCard'), 'click .js-copy-checklist-cards': Popup.open('copyChecklistToManyCards'), 'click .js-set-card-color': Popup.open('setCardColor'), + 'click .js-cancel-voting'(event) { + event.preventDefault(); + this.unsetVote(); + Popup.close(); + }, 'click .js-move-card-to-top'(event) { event.preventDefault(); const minOrder = _.min( @@ -672,7 +718,7 @@ BlazeComponent.extendComponent({ _id: { $ne: Meteor.user().getTemplatesBoardId() }, }, { - sort: ['title'], + sort: { sort: 1 /* boards default sorting */ }, }, ); return boards; @@ -848,7 +894,7 @@ BlazeComponent.extendComponent({ }, }, { - sort: ['title'], + sort: { sort: 1 /* boards default sorting */ }, }, ); return boards; @@ -945,6 +991,31 @@ BlazeComponent.extendComponent({ }, }).register('cardMorePopup'); +BlazeComponent.extendComponent({ + onCreated() { + this.currentCard = this.currentData(); + this.voteQuestion = new ReactiveVar(this.currentCard.voteQuestion); + }, + + events() { + return [ + { + 'submit .edit-vote-question'(evt) { + evt.preventDefault(); + const voteQuestion = evt.target.vote.value; + const publicVote = $('#vote-public').hasClass('is-checked'); + this.currentCard.setVoteQuestion(voteQuestion, publicVote); + Popup.close(); + }, + 'click a.js-toggle-vote-public'(event) { + event.preventDefault(); + $('#vote-public').toggleClass('is-checked'); + }, + }, + ]; + }, +}).register('cardStartVotingPopup'); + // Close the card details pane by pressing escape EscapeActions.register( 'detailsPane', diff --git a/client/components/cards/cardDetails.styl b/client/components/cards/cardDetails.styl index 80fa87c0..3e2beadd 100644 --- a/client/components/cards/cardDetails.styl +++ b/client/components/cards/cardDetails.styl @@ -94,17 +94,18 @@ 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 .ps-scrollbar-y-rail pointer-event: all - position: absolute; + position: absolute .card-details-canvas width: 470px - padding-left: 20px; + padding-left: 20px .card-details-header margin: 0 -20px 5px @@ -241,7 +242,7 @@ input[type="submit"].attachment-add-link-submit .card-details-canvas width: 100% - padding-left: 0px; + padding-left: 0px .card-details-header .close-card-details @@ -330,3 +331,13 @@ card-details-color(background, color...) .card-details-indigo card-details-color(#4b0082, #ffffff) //White text for better visibility + +.voted + opacity: .7 +.vote-title + display: flex + justify-content: space-between +.vote-result + display: flex +.js-show-positive-votes + cursor: pointer 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 6a073424..e8efc6ac 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 @@ -100,6 +100,10 @@ template(name="minicard") if getDescription .badge.badge-state-image-only(title=getDescription) span.badge-icon.fa.fa-align-left + if getVoteQuestion + .badge.badge-state-image-only(title=getVoteQuestion) + span.badge-icon.fa.fa-thumbs-up + span.badge-icon.fa.fa-thumbs-down if attachments.count .badge span.badge-icon.fa.fa-paperclip diff --git a/client/components/cards/minicard.styl b/client/components/cards/minicard.styl index 8607e118..7d72a588 100644 --- a/client/components/cards/minicard.styl +++ b/client/components/cards/minicard.styl @@ -79,7 +79,7 @@ border-radius: top 2px .minicard-labels - float: right + float: none display: flex flex-wrap: wrap diff --git a/client/components/cards/subtasks.js b/client/components/cards/subtasks.js index 34348fe1..4cd15c11 100644 --- a/client/components/cards/subtasks.js +++ b/client/components/cards/subtasks.js @@ -20,7 +20,22 @@ BlazeComponent.extendComponent({ const crtBoard = Boards.findOne(card.boardId); const targetBoard = crtBoard.getDefaultSubtasksBoard(); const listId = targetBoard.getDefaultSubtasksListId(); - const swimlaneId = targetBoard.getDefaultSwimline()._id; + + //Get the full swimlane data for the parent task. + const parentSwimlane = Swimlanes.findOne({ + boardId: crtBoard._id, + _id: card.swimlaneId, + }); + //find the swimlane of the same name in the target board. + const targetSwimlane = Swimlanes.findOne({ + boardId: targetBoard._id, + title: parentSwimlane.title, + }); + //If no swimlane with a matching title exists in the target board, fall back to the default swimlane. + const swimlaneId = + targetSwimlane === undefined + ? targetBoard.getDefaultSwimline()._id + : targetSwimlane._id; if (title) { const _id = Cards.insert({ 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/list.styl b/client/components/lists/list.styl index 27cf678c..bc7f763f 100644 --- a/client/components/lists/list.styl +++ b/client/components/lists/list.styl @@ -43,9 +43,6 @@ background: white margin: -3px 0 8px -.list-header-card-count - height: 35px - .list-header-add flex: 0 0 auto padding: 20px 12px 4px @@ -60,6 +57,9 @@ background-color: #e4e4e4; border-bottom: 6px solid #e4e4e4; + &.list-header-card-count + min-height: 35px + height: auto &.ui-sortable-handle cursor: grab diff --git a/client/components/lists/listBody.js b/client/components/lists/listBody.js index 89c27ec7..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; @@ -743,9 +743,25 @@ BlazeComponent.extendComponent({ }, updateList() { + // Use fallback when requestIdleCallback is not available on iOS and Safari + // https://www.afasterweb.com/2017/11/20/utilizing-idle-moments/ + checkIdleTime = + window.requestIdleCallback || + function(handler) { + const startTime = Date.now(); + return setTimeout(function() { + handler({ + didTimeout: false, + timeRemaining() { + return Math.max(0, 50.0 - (Date.now() - startTime)); + }, + }); + }, 1); + }; + if (this.spinnerInView()) { this.cardlimit.set(this.cardlimit.get() + InfiniteScrollIter); - window.requestIdleCallback(() => this.updateList()); + checkIdleTime(() => this.updateList()); } }, 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/editor.js b/client/components/main/editor.js index bc2e0bad..de598da8 100755 --- a/client/components/main/editor.js +++ b/client/components/main/editor.js @@ -1,87 +1,3 @@ -import _sanitizeXss from 'xss'; -const ASIS = 'asis'; -const sanitizeXss = (input, options) => { - const defaultAllowedIframeSrc = /^(https:){0,1}\/\/.*?(youtube|vimeo|dailymotion|youku)/i; - const allowedIframeSrcRegex = (function() { - let reg = defaultAllowedIframeSrc; - const SAFE_IFRAME_SRC_PATTERN = - Meteor.settings.public.SAFE_IFRAME_SRC_PATTERN; - try { - if (SAFE_IFRAME_SRC_PATTERN !== undefined) { - reg = new RegExp(SAFE_IFRAME_SRC_PATTERN, 'i'); - } - } catch (e) { - /*eslint no-console: ["error", { allow: ["warn", "error"] }] */ - - console.error('Wrong pattern specified', SAFE_IFRAM_SRC_PATTERN, e); - } - return reg; - })(); - const targetWindow = '_blank'; - const getHtmlDOM = html => { - const i = document.createElement('i'); - i.innerHTML = html; - return i.firstChild; - }; - options = { - onTag(tag, html, options) { - const htmlDOM = getHtmlDOM(html); - const getAttr = attr => { - return htmlDOM && attr && htmlDOM.getAttribute(attr); - }; - if (tag === 'iframe') { - const clipCls = 'note-vide-clip'; - if (!options.isClosing) { - const iframeCls = getAttr('class'); - let safe = iframeCls.indexOf(clipCls) > -1; - const src = getAttr('src'); - if (allowedIframeSrcRegex.exec(src)) { - safe = true; - } - if (safe) - return `<iframe src='${src}' class="${clipCls}" width=100% height=auto allowfullscreen></iframe>`; - } else { - // remove </iframe> tag - return ''; - } - } else if (tag === 'a') { - if (!options.isClosing) { - if (getAttr(ASIS) === 'true') { - // if has a ASIS attribute, don't do anything, it's a member id - return html; - } else { - const href = getAttr('href'); - if (href.match(/^((http(s){0,1}:){0,1}\/\/|\/)/)) { - // a valid url - return `<a href=${href} target=${targetWindow}>`; - } - } - } - } else if (tag === 'img') { - if (!options.isClosing) { - const src = getAttr('src'); - if (src) { - return `<a href='${src}' class='swipebox'><img src='${src}' class="attachment-image-preview mCS_img_loaded"></a>`; - } - } - } - return undefined; - }, - onTagAttr(tag, name, value) { - if (tag === 'img' && name === 'src') { - if (value && value.substr(0, 5) === 'data:') { - // allow image with dataURI src - return `${name}='${value}'`; - } - } else if (tag === 'a' && name === 'target') { - return `${name}='${targetWindow}'`; // always change a href target to a new window - } - return undefined; - }, - ...options, - }; - return _sanitizeXss(input, options); -}; Template.editor.onRendered(() => { const textareaSelector = 'textarea'; const mentions = [ @@ -94,13 +10,7 @@ Template.editor.onRendered(() => { currentBoard .activeMembers() .map(member => { - const user = Users.findOne(member.userId); - if (user._id === Meteor.userId()) { - return null; - } - const value = user.username; - const username = - value && value.match(/\s+/) ? `"${value}"` : value; + const username = Users.findOne(member.userId).username; return username.includes(term) ? username : null; }) .filter(Boolean), @@ -126,10 +36,9 @@ Template.editor.onRendered(() => { ? [ ['view', ['fullscreen']], ['table', ['table']], - ['font', ['bold']], - ['color', ['color']], - ['insert', ['video']], // iframe tag will be sanitized TODO if iframe[class=note-video-clip] can be added into safe list, insert video can be enabled + ['font', ['bold', 'underline']], //['fontsize', ['fontsize']], + ['color', ['color']], ] : [ ['style', ['style']], @@ -139,11 +48,47 @@ Template.editor.onRendered(() => { ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], ['table', ['table']], - ['insert', ['link', 'picture', 'video']], // iframe tag will be sanitized TODO if iframe[class=note-video-clip] can be added into safe list, insert video can be enabled + //['insert', ['link', 'picture', 'video']], // iframe tag will be sanitized TODO if iframe[class=note-video-clip] can be added into safe list, insert video can be enabled //['insert', ['link', 'picture']], // modal popup has issue somehow :( ['view', ['fullscreen', 'help']], ]; - const cleanPastedHTML = sanitizeXss; + const cleanPastedHTML = function(input) { + const badTags = [ + 'style', + 'script', + 'applet', + 'embed', + 'noframes', + 'noscript', + 'meta', + 'link', + 'button', + 'form', + ].join('|'); + const badPatterns = new RegExp( + `(?:${[ + `<(${badTags})s*[^>][\\s\\S]*?<\\/\\1>`, + `<(${badTags})[^>]*?\\/>`, + ].join('|')})`, + 'gi', + ); + let output = input; + // remove bad Tags + output = output.replace(badPatterns, ''); + // remove attributes ' style="..."' + const badAttributes = new RegExp( + `(?:${[ + 'on\\S+=([\'"]?).*?\\1', + 'href=([\'"]?)javascript:.*?\\2', + 'style=([\'"]?).*?\\3', + 'target=\\S+', + ].join('|')})`, + 'gi', + ); + output = output.replace(badAttributes, ''); + output = output.replace(/(<a )/gi, '$1target=_ '); // always to new target + return output; + }; const editor = '.editor'; const selectors = [ `.js-new-comment-form ${editor}`, @@ -163,37 +108,14 @@ Template.editor.onRendered(() => { } return undefined; }; - let popupShown = false; inputs.each(function(idx, input) { mSummernotes[idx] = $(input).summernote({ placeholder, callbacks: { - onKeydown(e) { - if (popupShown) { - e.preventDefault(); - } - }, - onKeyup(e) { - if (popupShown) { - e.preventDefault(); - } - }, onInit(object) { const originalInput = this; - const setAutocomplete = function(jEditor) { - if (jEditor !== undefined) { - jEditor.escapeableTextComplete(mentions).on({ - 'textComplete:show'() { - popupShown = true; - }, - 'textComplete:hide'() { - popupShown = false; - }, - }); - } - }; $(originalInput).on('submitted', function() { - // resetCommentInput has been called + // when comment is submitted, the original textarea will be set to '', so shall we if (!this.value) { const sn = getSummernote(this); sn && sn.summernote('code', ''); @@ -201,7 +123,9 @@ Template.editor.onRendered(() => { }); const jEditor = object && object.editable; const toolbar = object && object.toolbar; - setAutocomplete(jEditor); + if (jEditor !== undefined) { + jEditor.escapeableTextComplete(mentions); + } if (toolbar !== undefined) { const fBtn = toolbar.find('.btn-fullscreen'); fBtn.on('click', function() { @@ -211,6 +135,7 @@ Template.editor.onRendered(() => { }); } }, + onImageUpload(files) { const $summernote = getSummernote(this); if (files && files.length > 0) { @@ -287,6 +212,12 @@ Template.editor.onRendered(() => { const thisNote = this; const updatePastedText = function(object) { const someNote = getSummernote(object); + // Fix Pasting text into a card is adding a line before and after + // (and multiplies by pasting more) by changing paste "p" to "br". + // Fixes https://github.com/wekan/wekan/2890 . + // == Fix Start == + someNote.execCommand('defaultParagraphSeparator', false, 'br'); + // == Fix End == const original = someNote.summernote('code'); const cleaned = cleanPastedHTML(original); //this is where to call whatever clean function you want. I have mine in a different file, called CleanPastedHTML. someNote.summernote('code', ''); //clear original @@ -329,6 +260,8 @@ Template.editor.onRendered(() => { } }); +import sanitizeXss from 'xss'; + // XXX I believe we should compute a HTML rendered field on the server that // would handle markdown and user mentions. We can simply have two // fields, one source, and one compiled version (in HTML) and send only the @@ -350,7 +283,7 @@ Blaze.Template.registerHelper( } return member; }); - const mentionRegex = /\B@(?:(?:"([\w.\s]*)")|([\w.]+))/gi; // including space in username + const mentionRegex = /\B@([\w.]*)/gi; let currentMention; while ((currentMention = mentionRegex.exec(content)) !== null) { @@ -366,7 +299,12 @@ Blaze.Template.registerHelper( if (knowedUser.userId === Meteor.userId()) { linkClass += ' me'; } - const link = HTML.A( + // This @user mention link generation did open same Wekan + // window in new tab, so now A is changed to U so it's + // underlined and there is no link popup. This way also + // text can be selected more easily. + //const link = HTML.A( + const link = HTML.U( { class: linkClass, // XXX Hack. Since we stringify this render function result below with @@ -374,16 +312,17 @@ Blaze.Template.registerHelper( // `userId` to the popup as usual, and we need to store it in the DOM // using a data attribute. 'data-userId': knowedUser.userId, - [ASIS]: 'true', }, linkValue, ); content = content.replace(fullMention, Blaze.toHTML(link)); } + return HTML.Raw(sanitizeXss(content)); }), ); + Template.viewer.events({ // Viewer sometimes have click-able wrapper around them (for instance to edit // the corresponding text). Clicking a link shouldn't fire these actions, stop @@ -395,10 +334,7 @@ Template.viewer.events({ Popup.open('member').call({ userId }, event, templateInstance); } else { const href = event.currentTarget.href; - const child = event.currentTarget.firstElementChild; - if (child && child.tagName === 'IMG') { - prevent = false; - } else if (href) { + if (href) { window.open(href, '_blank'); } } diff --git a/client/components/main/header.jade b/client/components/main/header.jade index 75e84c0c..de7ead93 100644 --- a/client/components/main/header.jade +++ b/client/components/main/header.jade @@ -24,6 +24,11 @@ template(name="header") a(href="{{pathFor 'home'}}") span.fa.fa-home | {{_ 'all-boards'}} + li.separator - + li + a(href="{{pathFor 'public'}}") + span.fa.fa-globe + | {{_ 'public'}} each currentUser.starredBoards li.separator - li(class="{{#if $.Session.equals 'currentBoard' _id}}current{{/if}}") @@ -35,6 +40,8 @@ template(name="header") a#header-new-board-icon.js-create-board i.fa.fa-plus(title="Create a new board") + +notifications + +headerUserBar #header(class=currentBoard.colorClass) diff --git a/client/components/main/header.styl b/client/components/main/header.styl index f77c2aca..d8093861 100644 --- a/client/components/main/header.styl +++ b/client/components/main/header.styl @@ -99,7 +99,7 @@ height: 28px font-size: 12px display: flex - z-index: 17 + z-index: 21 #header-user-bar, #header-new-board-icon, @@ -127,7 +127,7 @@ &.current color: darken(white, 5%) - &:first-child .fa-home + &:first-child .fa-home,&:nth-child(3) .fa-globe margin-right: 5px a.js-create-board @@ -175,7 +175,7 @@ .board-header-btn height: 32px line-height: @height - font-size: 16px + font-size: 15px i.fa line-height: 32px diff --git a/client/components/main/layouts.jade b/client/components/main/layouts.jade index 9543c5c5..08dfc58c 100644 --- a/client/components/main/layouts.jade +++ b/client/components/main/layouts.jade @@ -6,10 +6,16 @@ head where the application is deployed with a path prefix, but it seems to be difficult to do that cleanly with Blaze -- at least without adding extra packages. - link(rel="shortcut icon" href="/wekan-favicon.png") - link(rel="apple-touch-icon" href="/wekan-favicon.png") - link(rel="mask-icon" href="/wekan-logo-150.svg") - link(rel="manifest" href="/wekan-manifest.json") + link(rel="shortcut icon" type="image/x-icon" href="/favicon.ico") + link(rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png") + link(rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png") + link(rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png") + link(rel="manifest" href="/site.webmanifest") + link(rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5") + meta(name="apple-mobile-web-app-title" content="Wekan") + meta(name="application-name" content="Wekan") + meta(name="msapplication-TileColor" content="#00aba9") + meta(name="theme-color" content="#ffffff") template(name="userFormsLayout") section.auth-layout diff --git a/client/components/main/layouts.js b/client/components/main/layouts.js index ec4a35cc..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(() => { @@ -73,6 +78,8 @@ Template.userFormsLayout.helpers({ name = 'Igbo'; } else if (lang.name === 'oc') { name = 'Occitan'; + } else if (lang.name === '繁体中文(台湾)') { + name = '繁體中文(台灣)'; } return { tag, name }; }).sort(function(a, b) { 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/notification.jade b/client/components/notifications/notification.jade new file mode 100644 index 00000000..c98bbdba --- /dev/null +++ b/client/components/notifications/notification.jade @@ -0,0 +1,10 @@ +template(name='notification') + li.notification(class="{{#if read}}read{{/if}}") + .read-status + .materialCheckBox(class="{{#if read}}is-checked{{/if}}") + +notificationIcon(activityData) + .details + +activity(activity=activityData mode='none') + if read + .remove + a.fa.fa-trash diff --git a/client/components/notifications/notification.js b/client/components/notifications/notification.js new file mode 100644 index 00000000..89277520 --- /dev/null +++ b/client/components/notifications/notification.js @@ -0,0 +1,28 @@ +Template.notification.events({ + 'click .read-status .materialCheckBox'() { + const update = {}; + update[`profile.notifications.${this.index}.read`] = this.read + ? null + : Date.now(); + Users.update(Meteor.userId(), { $set: update }); + }, + 'click .remove a'() { + Meteor.user().removeNotification(this.activityData._id); + }, +}); + +Template.notification.helpers({ + mode: 'board', + isOfActivityType(activityId, type) { + const activity = Activities.findOne(activityId); + return activity && activity.activityType === type; + }, + activityType(activityId) { + const activity = Activities.findOne(activityId); + return activity ? activity.activityType : ''; + }, + activityUser(activityId) { + const activity = Activities.findOne(activityId); + return activity && activity.userId; + }, +}); diff --git a/client/components/notifications/notification.styl b/client/components/notifications/notification.styl new file mode 100644 index 00000000..0cf0cfd5 --- /dev/null +++ b/client/components/notifications/notification.styl @@ -0,0 +1,57 @@ +#notifications-drawer + &.show-read .notification.read + display: flex + + .notification + display: flex + float: none + padding: 12px 8px 8px + color: black + border-bottom: 1px solid #dbdbdb + + &.read + display: none + + .read-status + width: 30px + + input + width: 24px + height: 24px + + .activity-type + margin: 16px 0 0 + width: 17px + height: 17px + font-size: 17px + display: block + color: #bbb + + .details + width: calc(100% - 30px) + + .activity + display: flex + + .activity-desc + width: 100%; + + .activity-comment + display: block + width: 100% + border-radius: 3px + background: #fff + text-decoration: none + box-shadow: 0 1px 2px rgba(0,0,0,0.2) + margin-top: 5px + padding: 5px + + .activity-meta + display: block + font-size: 0.8em + color: #999 + font-style: italic + + .remove + a:hover + color #eb4646 !important diff --git a/client/components/notifications/notificationIcon.jade b/client/components/notifications/notificationIcon.jade new file mode 100644 index 00000000..04377606 --- /dev/null +++ b/client/components/notifications/notificationIcon.jade @@ -0,0 +1,53 @@ +template(name='notificationIcon') + if($in activityType 'deleteAttachment' 'addAttachment') + i.fa.fa-paperclip.activity-type(title="attachment") + else if($in activityType 'createBoard' 'importBoard') + i.fa.fa-chalkboard.activity-type(title="board") + + else if($in activityType 'createCard' 'importCard' 'moveCard') + +cardNotificationIcon + else if($in activityType 'moveCardBoard' 'archivedCard' 'restoredCard') + +cardNotificationIcon + //- $in can only handle up to 3 cases so we have to break this case over 2 cases... use a simple template to keep it + //- DRY and consistant + + else if($in activityType 'addChecklist' 'removedChecklist' 'completeChecklist') + +checklistNotificationIcon + else if($in activityType 'uncompleteChecklist') + +checklistNotificationIcon + //- $in can only handle up to 3 cases so we have to break this case over 2 cases... use a simple template to keep it + //- DRY and consistant + + else if($in activityType 'checkedItem' 'uncheckedItem' 'addChecklistItem' 'removedChecklistItem') + i.fa.fa-check-square.activity-type(title="checklist item") + else if($in activityType 'addComment') + i.fa.fa-comment-o.activity-type(title="comment") + else if($in activityType 'createCustomField' 'setCustomField' 'unsetCustomField') + i.fa.fa-code.activity-type(title="custom field") + else if($in activityType 'addedLabel' 'removedLabel') + i.fa.fa-tag.activity-type(title="label") + + else if($in activityType 'createList' 'removeList' 'archivedList') + +listNotificationIcon + else if($in activityType 'importList') + +listNotificationIcon + //- $in can only handle up to 3 cases so we have to break this case over 2 cases... use a simple template to keep it + //- DRY and consistant + + //- elswhere in the app we use fa-trello to indicate lists... + //- i personally like fa-columns a bit better + else if($in activityType 'unjoinMember' 'addBoardMember' 'joinMember' 'removeBoardMember') + i.fa.fa-user.activity-type(title="member") + else if($in activityType 'createSwimlane' 'archivedSwimlane') + i.fa.fa-th-large.activity-type(title="swimlane") + else + i.fa.fa-bug.activity-type(title="can't find icon for #{activityType}") + +template(name='cardNotificationIcon') + i.fa.fa-clone.activity-type(title="card") + +template(name='checklistNotificationIcon') + i.fa.fa-list.activity-type(title="checklist") + +template(name='listNotificationIcon') + i.fa.fa-columns.activity-type(title="list") diff --git a/client/components/notifications/notifications.jade b/client/components/notifications/notifications.jade new file mode 100644 index 00000000..bf8acbbf --- /dev/null +++ b/client/components/notifications/notifications.jade @@ -0,0 +1,5 @@ +template(name='notifications') + #notifications.board-header-btns.right + a.notifications-drawer-toggle.fa.fa-bell(class="{{#if $gt unreadNotifications 0}}alert{{/if}}") + if $.Session.get 'showNotificationsDrawer' + +notificationsDrawer(unreadNotifications=unreadNotifications) diff --git a/client/components/notifications/notifications.js b/client/components/notifications/notifications.js new file mode 100644 index 00000000..c0aa6cb5 --- /dev/null +++ b/client/components/notifications/notifications.js @@ -0,0 +1,32 @@ +// this hides the notifications drawer if anyone clicks off of the panel +Template.body.events({ + click(event) { + if ( + !$(event.target).is('#notifications *') && + Session.get('showNotificationsDrawer') + ) { + toggleNotificationsDrawer(); + } + }, +}); + +Template.notifications.helpers({ + unreadNotifications() { + const notifications = Users.findOne(Meteor.userId()).notifications(); + const unreadNotifications = _.filter(notifications, v => !v.read); + return unreadNotifications.length; + }, +}); + +Template.notifications.events({ + 'click .notifications-drawer-toggle'() { + toggleNotificationsDrawer(); + }, +}); + +export function toggleNotificationsDrawer() { + Session.set( + 'showNotificationsDrawer', + !Session.get('showNotificationsDrawer'), + ); +} diff --git a/client/components/notifications/notifications.styl b/client/components/notifications/notifications.styl new file mode 100644 index 00000000..710cd3f9 --- /dev/null +++ b/client/components/notifications/notifications.styl @@ -0,0 +1,17 @@ +#notifications + position: relative + + .notifications-drawer-toggle + display: block + line-height: 28px + color: #f2f2f2 + margin: 0 10px + width: 28px + height: 28px + text-align: center + border: 0 + padding: 0 + + &.alert + background-color: #eb4646; + diff --git a/client/components/notifications/notificationsDrawer.jade b/client/components/notifications/notificationsDrawer.jade new file mode 100644 index 00000000..fee6aef6 --- /dev/null +++ b/client/components/notifications/notificationsDrawer.jade @@ -0,0 +1,20 @@ +template(name='notificationsDrawer') + section#notifications-drawer(class="{{#if $.Session.get 'showReadNotifications'}}show-read{{/if}}") + .header + if $.Session.get 'showReadNotifications' + a.toggle-read {{_ 'filter-by-unread'}} + else + a.toggle-read {{_ 'view-all'}} + h5 {{_ 'notifications'}} + if($gt unreadNotifications 0) + |(#{unreadNotifications}) + a.fa.fa-times-thin.close + ul.notifications + each transformedProfile.notifications + +notification(activityData=activity index=dbIndex read=read) + if($gt unreadNotifications 0) + a.all-read {{_ 'mark-all-as-read'}} + if ($and ($.Session.get 'showReadNotifications') ($gt readNotifications 0)) + a.remove-read + i.fa.fa-trash + | {{_ 'remove-all-read'}} diff --git a/client/components/notifications/notificationsDrawer.js b/client/components/notifications/notificationsDrawer.js new file mode 100644 index 00000000..76abeea7 --- /dev/null +++ b/client/components/notifications/notificationsDrawer.js @@ -0,0 +1,53 @@ +import { toggleNotificationsDrawer } from './notifications.js'; + +Template.notificationsDrawer.onCreated(function() { + Meteor.subscribe('notificationActivities'); + Meteor.subscribe('notificationCards'); + Meteor.subscribe('notificationUsers'); + Meteor.subscribe('notificationsAttachments'); + Meteor.subscribe('notificationChecklistItems'); + Meteor.subscribe('notificationChecklists'); + Meteor.subscribe('notificationComments'); + Meteor.subscribe('notificationLists'); + Meteor.subscribe('notificationSwimlanes'); +}); + +Template.notificationsDrawer.helpers({ + transformedProfile() { + return Users.findOne(Meteor.userId()); + }, + readNotifications() { + const readNotifications = _.filter( + Meteor.user().profile.notifications, + v => !!v.read, + ); + return readNotifications.length; + }, +}); + +Template.notificationsDrawer.events({ + 'click .all-read'() { + const notifications = Meteor.user().profile.notifications; + for (const index in notifications) { + if (notifications.hasOwnProperty(index) && !notifications[index].read) { + const update = {}; + update[`profile.notifications.${index}.read`] = Date.now(); + Users.update(Meteor.userId(), { $set: update }); + } + } + }, + 'click .close'() { + toggleNotificationsDrawer(); + }, + 'click .toggle-read'() { + Session.set('showReadNotifications', !Session.get('showReadNotifications')); + }, + 'click .remove-read'() { + const user = Meteor.user(); + for (const notification of user.profile.notifications) { + if (notification.read) { + user.removeNotification(notification.activity); + } + } + }, +}); diff --git a/client/components/notifications/notificationsDrawer.styl b/client/components/notifications/notificationsDrawer.styl new file mode 100644 index 00000000..f99e1299 --- /dev/null +++ b/client/components/notifications/notificationsDrawer.styl @@ -0,0 +1,69 @@ +belize = #2980b9 + +section#notifications-drawer + position: fixed + top: 28px + right: 0 + width: 400px + background-color: #fafafa + box-shadow: 0 1px 2px rgba(0,0,0,0.15) + border-radius: 2px + max-height: calc(100vh - 28px - 36px) + color: black + padding-top 36px + + a:hover + color: belize !important + + .header + position: fixed + top 28px + right 0 + width calc(400px - 32px) + padding: 8px 16px + background: #ededed + border-bottom: 1px solid #dbdbdb + z-index 2 + + .toggle-read + position absolute + left 16px + top calc(50% - 8px) + color belize + + h5 + text-align: center + margin: 0 + + .close + position: absolute + top: calc(50% - 12px) + right: 12px + font-size: 24px + height: 24px + line-height: 24px + opacity 1 + + .all-read, + .remove-read + color belize + background-color: #fafafa + margin 8px 16px 12px + display inline-block + + .remove-read + float right + + &:hover + color #eb4646 !important + + i.fa + color inherit + + + ul.notifications + 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/peopleBody.jade b/client/components/settings/peopleBody.jade index b8a94337..fef1067e 100644 --- a/client/components/settings/peopleBody.jade +++ b/client/components/settings/peopleBody.jade @@ -40,9 +40,15 @@ template(name="peopleGeneral") th {{_ 'active'}} th {{_ 'authentication-method'}} th + +newUserRow each user in peopleList +peopleRow(userId=user._id) +template(name="newUserRow") + a.new-user + i.fa.fa-edit + | {{_ 'new'}} + template(name="peopleRow") tr if userData.loginDisabled @@ -104,7 +110,7 @@ template(name="editUserPopup") label.hide.userId(type="text" value=user._id) label | {{_ 'fullname'}} - input.js-profile-fullname(type="text" value=user.profile.fullname autofocus) + input.js-profile-fullname(type="text" value=user.profile.fullname) label | {{_ 'username'}} span.error.hide.username-taken @@ -148,3 +154,49 @@ template(name="editUserPopup") // div // input#deleteButton.primary.wide(type="button" value="{{_ 'delete'}}") +template(name="newUserPopup") + form + //label.hide.userId(type="text" value=user._id) + label + | {{_ 'fullname'}} + input.js-profile-fullname(type="text" value="") + label + | {{_ 'username'}} + span.error.hide.username-taken + | {{_ 'error-username-taken'}} + //if isLdap + // input.js-profile-username(type="text" value=user.username readonly) + //else + input.js-profile-username(type="text" value="") + label + | {{_ 'email'}} + span.error.hide.email-taken + | {{_ 'error-email-taken'}} + //if isLdap + // input.js-profile-email(type="email" value="{{user.emails.[0].address}}" readonly) + //else + input.js-profile-email(type="email" value="") + label + | {{_ 'admin'}} + select.select-role.js-profile-isadmin + option(value="false" selected="selected") {{_ 'no'}} + option(value="true") {{_ 'yes'}} + label + | {{_ 'active'}} + select.select-active.js-profile-isactive + option(value="false" selected="selected") {{_ 'yes'}} + option(value="true") {{_ 'no'}} + label + | {{_ 'authentication-type'}} + select.select-authenticationMethod.js-authenticationMethod + each authentications + if isSelected value + option(value="{{value}}" selected) {{_ value}} + else + option(value="{{value}}") {{_ value}} + hr + label + | {{_ 'password'}} + input.js-profile-password(type="password") + div.buttonsContainer + input.primary.wide(type="submit" value="{{_ 'save'}}") diff --git a/client/components/settings/peopleBody.js b/client/components/settings/peopleBody.js index 8610034e..186afd58 100644 --- a/client/components/settings/peopleBody.js +++ b/client/components/settings/peopleBody.js @@ -39,6 +39,9 @@ BlazeComponent.extendComponent({ this.filterPeople(); } }, + 'click #newUserButton'() { + Popup.open('newUser'); + }, }, ]; }, @@ -141,6 +144,47 @@ Template.editUserPopup.helpers({ }, }); +Template.newUserPopup.onCreated(function() { + this.authenticationMethods = new ReactiveVar([]); + this.errorMessage = new ReactiveVar(''); + + Meteor.call('getAuthenticationsEnabled', (_, result) => { + if (result) { + // TODO : add a management of different languages + // (ex {value: ldap, text: TAPi18n.__('ldap', {}, T9n.getLanguage() || 'en')}) + this.authenticationMethods.set([ + { value: 'password' }, + // Gets only the authentication methods availables + ...Object.entries(result) + .filter(e => e[1]) + .map(e => ({ value: e[0] })), + ]); + } + }); +}); + +Template.newUserPopup.helpers({ + //user() { + // return Users.findOne(this.userId); + //}, + authentications() { + return Template.instance().authenticationMethods.get(); + }, + //isSelected(match) { + // const userId = Template.instance().data.userId; + // const selected = Users.findOne(userId).authenticationMethod; + // return selected === match; + //}, + //isLdap() { + // const userId = Template.instance().data.userId; + // const selected = Users.findOne(userId).authenticationMethod; + // return selected === 'ldap'; + //}, + errorMessage() { + return Template.instance().errorMessage.get(); + }, +}); + BlazeComponent.extendComponent({ onCreated() {}, user() { @@ -155,6 +199,16 @@ BlazeComponent.extendComponent({ }, }).register('peopleRow'); +BlazeComponent.extendComponent({ + events() { + return [ + { + 'click a.new-user': Popup.open('newUser'), + }, + ]; + }, +}).register('newUserRow'); + Template.editUserPopup.events({ submit(event, templateInstance) { event.preventDefault(); @@ -248,3 +302,44 @@ Template.editUserPopup.events({ Popup.close(); }), }); + +Template.newUserPopup.events({ + submit(event, templateInstance) { + event.preventDefault(); + const fullname = templateInstance.find('.js-profile-fullname').value.trim(); + const username = templateInstance.find('.js-profile-username').value.trim(); + const password = templateInstance.find('.js-profile-password').value; + const isAdmin = templateInstance.find('.js-profile-isadmin').value.trim(); + const isActive = templateInstance.find('.js-profile-isactive').value.trim(); + const email = templateInstance.find('.js-profile-email').value.trim(); + + Meteor.call( + 'setCreateUser', + fullname, + username, + password, + isAdmin, + isActive, + email.toLowerCase(), + function(error) { + const usernameMessageElement = templateInstance.$('.username-taken'); + const emailMessageElement = templateInstance.$('.email-taken'); + if (error) { + const errorElement = error.error; + if (errorElement === 'username-already-taken') { + usernameMessageElement.show(); + emailMessageElement.hide(); + } else if (errorElement === 'email-already-taken') { + usernameMessageElement.hide(); + emailMessageElement.show(); + } + } else { + usernameMessageElement.hide(); + emailMessageElement.hide(); + Popup.close(); + } + }, + ); + Popup.close(); + }, +}); 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.jade b/client/components/sidebar/sidebar.jade index ebcd8486..6bfedc9c 100644 --- a/client/components/sidebar/sidebar.jade +++ b/client/components/sidebar/sidebar.jade @@ -245,7 +245,7 @@ template(name="outgoingWebhooksPopup") b .materialCheckBox(class="{{#unless enabled}}is-checked{{/unless}}") input.js-outgoing-webhooks-title(placeholder="{{_ 'webhook-title'}}" type="text" name="title" value=title) - input.js-outgoing-webhooks-url(type="text" name="url" value=url autofocus) + input.js-outgoing-webhooks-url(type="text" name="url" value=url) input.js-outgoing-webhooks-token(placeholder="{{_ 'webhook-token' }}" type="text" value=token name="token") select.js-outgoing-webhooks-type(name="type") each _type in types @@ -257,7 +257,7 @@ template(name="outgoingWebhooksPopup") input(type="hidden" value=_id name="id") input.primary.wide(type="submit" value="{{_ 'save'}}") form.integration-form - input.js-outgoing-webhooks-title(placeholder="{{_ 'webhook-title'}}" type="text" name="title" autofocus) + input.js-outgoing-webhooks-title(placeholder="{{_ 'webhook-title'}}" type="text" name="title") input.js-outgoing-webhooks-url(placeholder="{{_ 'URL' }}" type="text" name="url") input.js-outgoing-webhooks-token(placeholder="{{_ 'webhook-token' }}" type="text" name="token") select.js-outgoing-webhooks-type(name="type") @@ -267,7 +267,14 @@ template(name="outgoingWebhooksPopup") template(name="boardMenuPopup") ul.pop-over-list - li: a.js-custom-fields {{_ 'custom-fields'}} + li + a.js-open-rules-view(title="{{_ 'rules'}}") + i.fa.fa-magic + | {{_ 'rules'}} + li + a.js-custom-fields + i.fa.fa-list-alt + | {{_ 'custom-fields'}} li a.js-open-archives i.fa.fa-archive @@ -291,10 +298,11 @@ template(name="boardMenuPopup") if currentUser.isBoardAdmin hr ul.pop-over-list - li - a(href="{{exportUrl}}", download="{{exportFilename}}") - i.fa.fa-share-alt - | {{_ 'export-board'}} + if withApi + li + a(href="{{exportUrl}}", download="{{exportFilename}}") + i.fa.fa-share-alt + | {{_ 'export-board'}} li a.js-outgoing-webhooks i.fa.fa-globe @@ -319,11 +327,12 @@ template(name="boardMenuPopup") if isSandstorm hr ul.pop-over-list - li - a(href="{{exportUrl}}", download="{{exportFilename}}") - i.fa.fa-share-alt - i.fa.fa-sign-out - | {{_ 'export-board'}} + if withApi + li + a(href="{{exportUrl}}", download="{{exportFilename}}") + i.fa.fa-share-alt + i.fa.fa-sign-out + | {{_ 'export-board'}} li a.js-import-board i.fa.fa-share-alt diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js index 8e640564..cbe00797 100644 --- a/client/components/sidebar/sidebar.js +++ b/client/components/sidebar/sidebar.js @@ -182,6 +182,10 @@ Template.memberPopup.helpers({ Template.boardMenuPopup.events({ 'click .js-rename-board': Popup.open('boardChangeTitle'), + 'click .js-open-rules-view'() { + Modal.openWide('rulesMain'); + Popup.close(); + }, 'click .js-custom-fields'() { Sidebar.setView('customFields'); Popup.close(); @@ -211,7 +215,17 @@ Template.boardMenuPopup.events({ 'click .js-card-settings': Popup.open('boardCardSettings'), }); +Template.boardMenuPopup.onCreated(function() { + this.apiEnabled = new ReactiveVar(false); + Meteor.call('_isApiEnabled', (e, result) => { + this.apiEnabled.set(result); + }); +}); + Template.boardMenuPopup.helpers({ + withApi() { + return Template.instance().apiEnabled.get(); + }, exportUrl() { const params = { boardId: Session.get('currentBoard'), @@ -495,7 +509,7 @@ BlazeComponent.extendComponent({ 'members.userId': Meteor.userId(), }, { - sort: ['title'], + sort: { sort: 1 /* boards default sorting */ }, }, ); }, @@ -673,7 +687,7 @@ BlazeComponent.extendComponent({ 'members.userId': Meteor.userId(), }, { - sort: ['title'], + sort: { sort: 1 /* boards default sorting */ }, }, ); }, diff --git a/client/components/sidebar/sidebarFilters.jade b/client/components/sidebar/sidebarFilters.jade index 7f31dada..6d899b70 100644 --- a/client/components/sidebar/sidebarFilters.jade +++ b/client/components/sidebar/sidebarFilters.jade @@ -46,6 +46,24 @@ template(name="filterSidebar") i.fa.fa-check hr ul.sidebar-list + li(class="{{#if Filter.assignees.isSelected undefined}}active{{/if}}") + a.name.js-toggle-assignee-filter + span.sidebar-list-item-description + | {{_ 'filter-no-assignee'}} + if Filter.assignees.isSelected undefined + i.fa.fa-check + each currentBoard.activeMembers + with getUser userId + li(class="{{#if Filter.assignees.isSelected _id}}active{{/if}}") + a.name.js-toggle-assignee-filter + +userAvatar(userId=this._id) + span.sidebar-list-item-description + = profile.fullname + | (<span class="username">{{ username }}</span>) + if Filter.assignees.isSelected _id + i.fa.fa-check + hr + ul.sidebar-list li(class="{{#if Filter.customFields.isSelected undefined}}active{{/if}}") a.name.js-toggle-custom-fields-filter span.sidebar-list-item-description diff --git a/client/components/sidebar/sidebarFilters.js b/client/components/sidebar/sidebarFilters.js index ee0176b9..0d402ab5 100644 --- a/client/components/sidebar/sidebarFilters.js +++ b/client/components/sidebar/sidebarFilters.js @@ -18,6 +18,11 @@ BlazeComponent.extendComponent({ Filter.members.toggle(this.currentData()._id); Filter.resetExceptions(); }, + 'click .js-toggle-assignee-filter'(evt) { + evt.preventDefault(); + Filter.assignees.toggle(this.currentData()._id); + Filter.resetExceptions(); + }, 'click .js-toggle-archive-filter'(evt) { evt.preventDefault(); Filter.archive.toggle(this.currentData()._id); 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 9306d21d..d0adf29d 100644 --- a/client/components/users/userHeader.jade +++ b/client/components/users/userHeader.jade @@ -98,12 +98,12 @@ template(name="changeLanguagePopup") template(name="changeSettingsPopup") ul.pop-over-list - li - a.js-toggle-system-messages - i.fa.fa-comments-o - | {{_ 'hide-system-messages'}} - if hiddenSystemMessages - i.fa.fa-check + //li + // a.js-toggle-system-messages + // i.fa.fa-comments-o + // | {{_ 'hide-system-messages'}} + // if hiddenSystemMessages + // i.fa.fa-check li a.js-toggle-desktop-drag-handles i.fa.fa-arrows @@ -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 847d30fb..b7bb284e 100644 --- a/client/components/users/userHeader.js +++ b/client/components/users/userHeader.js @@ -166,6 +166,8 @@ Template.changeLanguagePopup.helpers({ name = 'Igbo'; } else if (lang.name === 'oc') { name = 'Occitan'; + } else if (lang.name === '繁体中文(台湾)') { + name = '繁體中文(台灣)'; } return { tag, name }; }).sort(function(a, b) { @@ -222,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({ @@ -245,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/client/lib/filter.js b/client/lib/filter.js index 592eb4ab..24ca320b 100644 --- a/client/lib/filter.js +++ b/client/lib/filter.js @@ -459,13 +459,21 @@ Filter = { // before changing the schema. labelIds: new SetFilter(), members: new SetFilter(), + assignees: new SetFilter(), archive: new SetFilter(), hideEmpty: new SetFilter(), customFields: new SetFilter('_id'), advanced: new AdvancedFilter(), lists: new AdvancedFilter(), // we need the ability to filter list by name as well - _fields: ['labelIds', 'members', 'archive', 'hideEmpty', 'customFields'], + _fields: [ + 'labelIds', + 'members', + 'assignees', + 'archive', + 'hideEmpty', + 'customFields', + ], // We don't filter cards that have been added after the last filter change. To // implement this we keep the id of these cards in this `_exceptions` fields diff --git a/client/lib/keyboard.js b/client/lib/keyboard.js index da33f806..e861e416 100755 --- a/client/lib/keyboard.js +++ b/client/lib/keyboard.js @@ -1,6 +1,16 @@ // XXX There is no reason to define these shortcuts globally, they should be // attached to a template (most of them will go in the `board` template). +function getHoveredCardId() { + const card = $('.js-minicard:hover').get(0); + if (!card) return null; + return Blaze.getData(card)._id; +} + +function getSelectedCardId() { + return Session.get('selectedCard') || getHoveredCardId(); +} + Mousetrap.bind('?', () => { FlowRouter.go('shortcuts'); }); @@ -50,9 +60,9 @@ Mousetrap.bind(['down', 'up'], (evt, key) => { } }); -// XXX This shortcut should also work when hovering over a card in board view Mousetrap.bind('space', evt => { - if (!Session.get('currentCard')) { + const cardId = getSelectedCardId(); + if (!cardId) { return; } @@ -62,7 +72,7 @@ Mousetrap.bind('space', evt => { } if (Meteor.user().isBoardMember()) { - const card = Cards.findOne(Session.get('currentCard')); + const card = Cards.findOne(cardId); card.toggleMember(currentUserId); // We should prevent scrolling in card when spacebar is clicked // This should do it according to Mousetrap docs, but it doesn't @@ -70,9 +80,9 @@ Mousetrap.bind('space', evt => { } }); -// XXX This shortcut should also work when hovering over a card in board view Mousetrap.bind('c', evt => { - if (!Session.get('currentCard')) { + const cardId = getSelectedCardId(); + if (!cardId) { return; } @@ -86,7 +96,7 @@ Mousetrap.bind('c', evt => { !Meteor.user().isCommentOnly() && !Meteor.user().isWorker() ) { - const card = Cards.findOne(Session.get('currentCard')); + const card = Cards.findOne(cardId); card.archive(); // We should prevent scrolling in card when spacebar is clicked // This should do it according to Mousetrap docs, but it doesn't @@ -97,19 +107,19 @@ Mousetrap.bind('c', evt => { Template.keyboardShortcuts.helpers({ mapping: [ { - keys: ['W'], + keys: ['w'], action: 'shortcut-toggle-sidebar', }, { - keys: ['Q'], + keys: ['q'], action: 'shortcut-filter-my-cards', }, { - keys: ['F'], + keys: ['f'], action: 'shortcut-toggle-filterbar', }, { - keys: ['X'], + keys: ['x'], action: 'shortcut-clear-filters', }, { @@ -129,7 +139,7 @@ Template.keyboardShortcuts.helpers({ action: 'shortcut-assign-self', }, { - keys: ['C'], + keys: ['c'], action: 'archive-card', }, ], diff --git a/config/router.js b/config/router.js index ad76035b..2e66c67f 100644 --- a/config/router.js +++ b/config/router.js @@ -26,6 +26,27 @@ FlowRouter.route('/', { }, }); +FlowRouter.route('/public', { + name: 'public', + triggersEnter: [AccountsTemplates.ensureSignedIn], + action() { + Session.set('currentBoard', null); + Session.set('currentList', null); + Session.set('currentCard', null); + + Filter.reset(); + EscapeActions.executeAll(); + + Utils.manageCustomUI(); + Utils.manageMatomo(); + + BlazeLayout.render('defaultLayout', { + headerBar: 'boardListHeaderBar', + content: 'boardList', + }); + }, +}); + FlowRouter.route('/b/:id/:slug', { name: 'board', action(params) { diff --git a/docker-compose.yml b/docker-compose.yml index 1aee54c9..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 @@ -93,7 +93,7 @@ services: #------------------------------------------------------------------------------------- # ==== MONGODB AND METEOR VERSION ==== # a) For Wekan Meteor 1.8.x version at master branch, use mongo 4.x - image: mongo:4.2.2 + image: mongo:latest # b) For Wekan Meteor 1.6.x version at devel branch. # Only for Snap and Sandstorm while they are not upgraded yet to Meteor 1.8.x #image: mongo:3.2.21 @@ -240,6 +240,11 @@ services: # https://github.com/wekan/wekan/pull/2560 - RICHER_CARD_COMMENT_EDITOR=false #--------------------------------------------------------------- + # ==== MOUSE SCROLL ==== + # https://github.com/wekan/wekan/issues/2949 + - SCROLLINERTIA=0 + - SCROLLAMOUNT=auto + #--------------------------------------------------------------- # ==== CARD OPENED, SEND WEBHOOK MESSAGE ==== # https://github.com/wekan/wekan/issues/2518 - CARD_OPENED_WEBHOOK_ENABLED=false @@ -249,6 +254,11 @@ services: #-MAX_IMAGE_PIXEL=1024 #-IMAGE_COMPRESS_RATIO=80 #--------------------------------------------------------------- + # ==== NOTIFICATION TRAY AFTER READ DAYS BEFORE REMOVE ===== + # Number of days after a notification is read before we remove it. + # Default: 2 + #- NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE=2 + #--------------------------------------------------------------- # ==== BIGEVENTS DUE ETC NOTIFICATIONS ===== # https://github.com/wekan/wekan/pull/2541 # Introduced a system env var BIGEVENTS_PATTERN default as "NONE", @@ -504,18 +514,22 @@ services: # The limit number of entries (0=unlimited) #- LDAP_SEARCH_SIZE_LIMIT=0 # - # Enable group filtering + # Enable group filtering. Note the authenticated ldap user must be able to query all relevant group data with own login data from ldap. #- LDAP_GROUP_FILTER_ENABLE=false # # The object class for filtering. Example: group #- LDAP_GROUP_FILTER_OBJECTCLASS= # + # The attribute of a group identifying it. Example: cn #- LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE= # + # The attribute inside a group object listing its members. Example: member #- LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE= # + # The format of the value of LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE. Example: 'dn' if the users dn ist saved as value into the attribute. #- LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT= # + # The group name (id) that matches all users. #- LDAP_GROUP_FILTER_GROUP_NAME= # # LDAP_UNIQUE_IDENTIFIER_FIELD : This field is sometimes class GUID (Globally Unique Identifier). Example: guid @@ -584,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/README.md b/helm/wekan/README.md index d3af930c..38cb5fed 100644 --- a/helm/wekan/README.md +++ b/helm/wekan/README.md @@ -56,3 +56,10 @@ mongodb-replicaset: This section controls the scale of the MongoDB redundant Replica Set. **replicas:** This is the number of MongoDB instances to include in the set. You can set this to 1 for a single server - this will still allow you to scale-up later with a helm upgrade. + +### Install OCP route +If you use this chart to deploy Wekan on an OCP cluster, you can create route instead of ingress with following command: + +``` bash +$ helm template --set route.enabled=true,ingress.enabled=false values.yaml . | oc apply -f- +``` 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/route.yaml b/helm/wekan/templates/route.yaml new file mode 100644 index 00000000..9a55591d --- /dev/null +++ b/helm/wekan/templates/route.yaml @@ -0,0 +1,23 @@ +{{- if .Values.route.enabled -}} +{{- $fullName := include "wekan.fullname" . -}} +apiVersion: route.openshift.io/v1 +kind: Route +metadata: + annotations: + haproxy.router.openshift.io/timeout: 4m + openshift.io/host.generated: "true" + labels: + app: {{ template "wekan.name" . }} + service: {{ template "wekan.name" . }} + name: {{ template "wekan.name" . }} +spec: + port: + targetPort: http + tls: + termination: edge + to: + kind: Service + name: {{ template "wekan.name" . }} + weight: 100 + wildcardPolicy: None + {{- end }}
\ No newline at end of file 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 adc2c855..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,7 +62,10 @@ ingress: # hosts: # - wekan-example.local -resources: +route: + enabled: false + +resources: requests: memory: 128Mi cpu: 300m diff --git a/i18n/ar.i18n.json b/i18n/ar.i18n.json index 8eef94d0..09e44620 100644 --- a/i18n/ar.i18n.json +++ b/i18n/ar.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "ازالة تحقق %s من قائمة التحقق %s من %s", "activity-checklist-added": "أضاف قائمة تحقق إلى %s", "activity-checklist-removed": "ازالة قائمة التحقق من %s", - "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "activity-checklist-completed": "completed checklist %s of %s", "activity-checklist-uncompleted": "لم يتم انجاز قائمة التحقق %s من %s", "activity-checklist-item-added": "تم اضافة عنصر قائمة التحقق الى '%s' في %s", "activity-checklist-item-removed": "تم ازالة عنصر قائمة التحقق الى '%s' في %s", @@ -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,6 +152,8 @@ "card-spent": "امضى وقتا", "card-edit-attachments": "تعديل المرفقات", "card-edit-custom-fields": "تعديل الحقل المعدل", + "card-start-voting": "ابدأ التصويت", + "card-cancel-voting": "حذف التصويت وجميع الأصوات", "card-edit-labels": "تعديل العلامات", "card-edit-members": "تعديل الأعضاء", "card-labels-title": "تعديل علامات البطاقة.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "إرفاق من", "cardCustomField-datePopup-title": "تغير التاريخ", "cardCustomFieldsPopup-title": "تعديل الحقل المعدل", + "cardStartVotingPopup-title": "ابدأ تصويت", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "مع", + "vote-against": "ضد", "cardDeletePopup-title": "حذف البطاقة ?", "cardDetailsActionsPopup-title": "إجراءات على البطاقة", "cardLabelsPopup-title": "علامات", @@ -183,7 +193,7 @@ "changePasswordPopup-title": "تغيير كلمة المرور", "changePermissionsPopup-title": "تعديل الصلاحيات", "changeSettingsPopup-title": "تغيير الاعدادات", - "subtasks": "Subtasks", + "subtasks": "المهمات الفرعية", "checklists": "قوائم التّدقيق", "click-to-star": "اضغط لإضافة اللوحة للمفضلة.", "click-to-unstar": "اضغط لحذف اللوحة من المفضلة.", @@ -194,9 +204,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", @@ -211,17 +221,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.", @@ -239,8 +249,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", @@ -250,8 +260,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", @@ -319,6 +329,7 @@ "filter-clear": "مسح التصفية", "filter-no-label": "لا يوجد ملصق", "filter-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", @@ -333,13 +344,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", @@ -440,7 +449,7 @@ "save": "حفظ", "search": "بحث", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", "search-example": "Text to search for?", "select-color": "اختيار اللون", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", @@ -466,15 +475,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": "غير مُشاهد", @@ -548,7 +557,7 @@ "OS_Totalmem": "الذاكرة الكلية لنظام التشغيل", "OS_Type": "نوع نظام التشغيل", "OS_Uptime": "مدة تشغيل نظام التشغيل", - "days": "days", + "days": "أيام", "hours": "الساعات", "minutes": "الدقائق", "seconds": "الثواني", @@ -562,17 +571,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.", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 acc04cb3..ac8d80b9 100644 --- a/i18n/bg.i18n.json +++ b/i18n/bg.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "размаркира %s от списък със задачи %s на %s", "activity-checklist-added": "добави списък със задачи към %s", "activity-checklist-removed": "премахна списък със задачи от %s", - "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "activity-checklist-completed": "completed checklist %s of %s", "activity-checklist-uncompleted": "\"отзавърши\" чеклистта %s в %s", "activity-checklist-item-added": "добави точка към '%s' в/във %s", "activity-checklist-item-removed": "премахна точка от '%s' в %s", @@ -152,6 +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-edit-labels": "Промени етикетите", "card-edit-members": "Промени членовете", "card-labels-title": "Промени етикетите за картата.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Прикачи от", "cardCustomField-datePopup-title": "Промени датата", "cardCustomFieldsPopup-title": "Промени собствените полета", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Желаете да изтриете картата?", "cardDetailsActionsPopup-title": "Опции", "cardLabelsPopup-title": "Етикети", @@ -319,6 +329,7 @@ "filter-clear": "Премахване на филтрите", "filter-no-label": "без етикет", "filter-no-member": "без член", + "filter-no-assignee": "No assignee", "filter-no-custom-fields": "Няма Собствени полета", "filter-show-archive": "Show archived lists", "filter-hide-empty": "Hide empty lists", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Запази", "search": "Търсене", "rules": "Правила", - "search-cards": "Search from card/list titles and descriptions on this board", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", "search-example": "Text to search for?", "select-color": "Избери цвят", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Детайли за правилото", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 eccf9391..409a7a7d 100644 --- a/i18n/br.i18n.json +++ b/i18n/br.i18n.json @@ -64,7 +64,7 @@ "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 __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "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", @@ -152,6 +152,8 @@ "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.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Attach From", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Diverkañ ar gartenn ?", "cardDetailsActionsPopup-title": "Card Actions", "cardLabelsPopup-title": "Labels", @@ -319,6 +329,7 @@ "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", @@ -338,8 +349,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", @@ -440,7 +449,7 @@ "save": "Save", "search": "Search", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "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", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 c39b8138..8d549cc2 100644 --- a/i18n/ca.i18n.json +++ b/i18n/ca.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "Checklist afegida a %s", "activity-checklist-removed": "removed a checklist from %s", - "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "activity-checklist-completed": "completed checklist %s of %s", "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "afegida entrada de checklist de '%s' a %s", "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", @@ -111,8 +111,8 @@ "restore-board": "Restaura Tauler", "no-archived-boards": "No hi han Taulers al Arxiu.", "archives": "Desa", - "template": "Template", - "templates": "Templates", + "template": "Plantilla", + "templates": "Plantilles", "assign-member": "Assignar membre", "attached": "adjuntat", "attachment": "Adjunt", @@ -131,13 +131,13 @@ "boardChangeTitlePopup-title": "Canvia el nom tauler", "boardChangeVisibilityPopup-title": "Canvia visibilitat", "boardChangeWatchPopup-title": "Canvia seguiment", - "boardMenuPopup-title": "Board Settings", + "boardMenuPopup-title": "Configuració del tauler", "boardChangeViewPopup-title": "Visió del tauler", "boards": "Taulers", "board-view": "Visió del tauler", "board-view-cal": "Calendari", "board-view-swimlanes": "Carrils de Natació", - "board-view-collapse": "Collapse", + "board-view-collapse": "Contraure", "board-view-lists": "Llistes", "bucket-example": "Igual que “Bucket List”, per exemple", "cancel": "Cancel·la", @@ -152,6 +152,8 @@ "card-spent": "Temps Dedicat", "card-edit-attachments": "Edita arxius adjunts", "card-edit-custom-fields": "Editar camps personalitzats", + "card-start-voting": "Start voting", + "card-cancel-voting": "Delete voting and all votes", "card-edit-labels": "Edita etiquetes", "card-edit-members": "Edita membres", "card-labels-title": "Canvia les etiquetes de la fitxa", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Adjunta des de", "cardCustomField-datePopup-title": "Canviar data", "cardCustomFieldsPopup-title": "Editar camps personalitzats", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Esborrar fitxa?", "cardDetailsActionsPopup-title": "Accions de fitxes", "cardLabelsPopup-title": "Etiquetes", @@ -319,6 +329,7 @@ "filter-clear": "Elimina filtre", "filter-no-label": "Sense etiqueta", "filter-no-member": "Sense membres", + "filter-no-assignee": "No assignee", "filter-no-custom-fields": "No Custom Fields", "filter-show-archive": "Show archived lists", "filter-hide-empty": "Hide empty lists", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Desa", "search": "Cerca", "rules": "Regles", - "search-cards": "Search from card/list titles and descriptions on this board", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", "search-example": "Text que cercar?", "select-color": "Selecciona color", "set-wip-limit-value": "Limita el màxim nombre de tasques en aquesta llista", @@ -583,9 +592,9 @@ "default": "Default", "queue": "Queue", "subtask-settings": "Subtasks Settings", - "card-settings": "Card Settings", + "card-settings": "Configuració de targeta", "boardSubtaskSettingsPopup-title": "Board Subtasks Settings", - "boardCardSettingsPopup-title": "Card Settings", + "boardCardSettingsPopup-title": "Configuració de targeta", "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:", @@ -626,7 +635,7 @@ "r-moved-from": "Moved from", "r-archived": "Moved to Archive", "r-unarchived": "Restored from Archive", - "r-a-card": "a card", + "r-a-card": "una targeta", "r-when-a-label-is": "When a label is", "r-when-the-label": "When the label", "r-list-name": "list name", @@ -648,7 +657,7 @@ "r-its-list": "its list", "r-archive": "Moure al arxiu", "r-unarchive": "Restore from Archive", - "r-card": "card", + "r-card": "targeta", "r-add": "Afegeix", "r-remove": "Remove", "r-label": "label", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -679,7 +689,7 @@ "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-create-card": "Crea una targeta nova", "r-in-list": "in list", "r-in-swimlane": "in swimlane", "r-d-add-member": "Add member", @@ -700,7 +710,7 @@ "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-when-a-card-is-moved": "Quan una targeta es mou a una altra llista", "r-set": "Set", "r-update": "Update", "r-datefield": "date field", @@ -753,8 +763,26 @@ "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" + "assignee": "Assignat", + "cardAssigneesPopup-title": "Assignat", + "addmore-detail": "Afegiu una descripció més detallada", + "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", + "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 2a77f537..cb432bef 100644 --- a/i18n/cs.i18n.json +++ b/i18n/cs.i18n.json @@ -22,8 +22,8 @@ "act-createBoard": "přidal(a) tablo __board__", "act-createSwimlane": "created swimlane __swimlane__ to board __board__", "act-createCard": "přidal(a) kartu __card__ do sloupce __list__ ve swimlane __swimlane__ na tablu __board__", - "act-createCustomField": "created custom field __customField__ at board __board__", - "act-deleteCustomField": "deleted custom field __customField__ at board __board__", + "act-createCustomField": "přidal(a) pole __customField__ na tablo __board__", + "act-deleteCustomField": "odebral(a) pole __customField__ na tablu __board__", "act-setCustomField": "edited custom field __customField__: __customFieldValue__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", "act-createList": "přidal(a) sloupec __list__ do tabla __board__", "act-addBoardMember": "přidal(a) člena __member__ do tabla __board__", @@ -64,7 +64,7 @@ "activity-unchecked-item": "nedokončen %s v seznamu %s z %s", "activity-checklist-added": "přidán checklist do %s", "activity-checklist-removed": "odstraněn checklist z %s", - "activity-checklist-completed": "dokončil(a) zaškrtávací seznam __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__", + "activity-checklist-completed": "completed checklist %s of %s", "activity-checklist-uncompleted": "nedokončen seznam %s z %s", "activity-checklist-item-added": "přidána položka checklist do '%s' v %s", "activity-checklist-item-removed": "odstraněna položka seznamu do '%s' v %s", @@ -137,7 +137,7 @@ "board-view": "Náhled tabla", "board-view-cal": "Kalendář", "board-view-swimlanes": "Swimlanes", - "board-view-collapse": "Collapse", + "board-view-collapse": "Sbalit", "board-view-lists": "Sloupce", "bucket-example": "Například \"O čem sním\"", "cancel": "Zrušit", @@ -152,6 +152,8 @@ "card-spent": "Strávený čas", "card-edit-attachments": "Upravit přílohy", "card-edit-custom-fields": "Upravit vlastní pole", + "card-start-voting": "Start voting", + "card-cancel-voting": "Delete voting and all votes", "card-edit-labels": "Upravit štítky", "card-edit-members": "Upravit členy", "card-labels-title": "Změnit štítky karty.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Přiložit formulář", "cardCustomField-datePopup-title": "Změnit datum", "cardCustomFieldsPopup-title": "Upravit vlastní pole", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Smazat kartu?", "cardDetailsActionsPopup-title": "Akce karty", "cardLabelsPopup-title": "Štítky", @@ -319,9 +329,10 @@ "filter-clear": "Vyčistit filtr", "filter-no-label": "Žádný štítek", "filter-no-member": "Žádný člen", + "filter-no-assignee": "No assignee", "filter-no-custom-fields": "Žádné vlastní pole", - "filter-show-archive": "Show archived lists", - "filter-hide-empty": "Hide empty lists", + "filter-show-archive": "Zobrazit archivované listy", + "filter-hide-empty": "Skrýt prázdné listy", "filter-on": "Filtr je zapnut", "filter-on-desc": "Filtrujete karty tohoto tabla. Pro úpravu filtru klikni sem.", "filter-to-selection": "Filtrovat výběr", @@ -338,8 +349,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", @@ -440,7 +449,7 @@ "save": "Uložit", "search": "Hledat", "rules": "Pravidla", - "search-cards": "Search from card/list titles and descriptions on this board", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", "search-example": "Hledaný text", "select-color": "Vybrat barvu", "set-wip-limit-value": "Nastaví limit pro maximální počet úkolů ve sloupci.", @@ -665,6 +674,7 @@ "r-of-checklist": "ze zaškrtávacího seznamu", "r-send-email": "Odeslat e-mail", "r-to": "komu", + "r-of": "of", "r-subject": "předmět", "r-rule-details": "Podrobnosti pravidla", "r-d-move-to-top-gen": "Přesunout kartu na začátek toho sloupce", @@ -749,12 +759,30 @@ "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", + "delete-user-confirm-popup": "Jste si jisti, že chcete smazat tento účet? Tuto akci nelze vrátit zpět.", + "accounts-allowUserDelete": "Dovolit uživatelům smazat vlastní účet", "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" + "addmore-detail": "Přidat detailnější popis", + "show-on-card": "Zobrazit na kartě", + "new": "Nový", + "editUserPopup-title": "Editovat uživatele", + "newUserPopup-title": "Nový uživatel", + "notifications": "Upozornění", + "view-all": "Zobrazit vše", + "filter-by-unread": "Filter by Unread", + "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í", + "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 db5fb417..d66d01aa 100644 --- a/i18n/da.i18n.json +++ b/i18n/da.i18n.json @@ -1,760 +1,788 @@ { - "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 __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", - "activity-checklist-item-added": "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-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", - "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", + "allowNonBoardMembers": "Tillad anonym stemmeafgivning på offentlige tavler", + "vote-question": "Spørgsmål til afstemning", + "vote-public": "Vis hvem som stemte hvad", + "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-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 and descriptions on this board", - "search-example": "Text to search for?", - "select-color": "Select Color", - "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", - "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-of": "af", + "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" + "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 b379561d..e2e14e76 100644 --- a/i18n/de.i18n.json +++ b/i18n/de.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "hat %s in Checkliste %s von %s abgewählt", "activity-checklist-added": "hat eine Checkliste zu %s hinzugefügt", "activity-checklist-removed": "entfernte eine Checkliste von %s", - "activity-checklist-completed": "hat Checkliste __checklist__ der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ vervollständigt", + "activity-checklist-completed": "Abgeschlossene Checkliste", "activity-checklist-uncompleted": "unvervollständigte die Checkliste %s von %s", "activity-checklist-item-added": "hat ein Checklistenelement zu '%s' in %s hinzugefügt", "activity-checklist-item-removed": "hat ein Checklistenelement von '%s' in %s entfernt", @@ -152,6 +152,8 @@ "card-spent": "Aufgewendete Zeit", "card-edit-attachments": "Anhänge ändern", "card-edit-custom-fields": "Benutzerdefinierte Felder editieren", + "card-start-voting": "Abstimmung starten", + "card-cancel-voting": "Abstimmung mit allen Stimmen löschen ", "card-edit-labels": "Labels ändern", "card-edit-members": "Mitglieder ändern", "card-labels-title": "Labels für diese Karte ändern.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Anhängen von", "cardCustomField-datePopup-title": "Datum ändern", "cardCustomFieldsPopup-title": "Benutzerdefinierte Felder editieren", + "cardStartVotingPopup-title": "Abstimmung starten", + "positiveVoteMembersPopup-title": "Befürworter", + "negativeVoteMembersPopup-title": "Gegner", + "allowNonBoardMembers": "Anonyme Abstimmung im öffentlichen Board zulassen", + "vote-question": "Abstimmen über", + "vote-public": "Zeigen, wer was gewählt hat", + "vote-for-it": "Dafür", + "vote-against": "Dagegen", "cardDeletePopup-title": "Karte löschen?", "cardDetailsActionsPopup-title": "Kartenaktionen", "cardLabelsPopup-title": "Labels", @@ -319,6 +329,7 @@ "filter-clear": "Filter entfernen", "filter-no-label": "Kein Label", "filter-no-member": "Kein Mitglied", + "filter-no-assignee": "Nicht zugewiesen", "filter-no-custom-fields": "Keine benutzerdefinierten Felder", "filter-show-archive": "Archivierte Listen anzeigen", "filter-hide-empty": "Leere Listen verstecken", @@ -338,8 +349,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", @@ -440,7 +449,7 @@ "save": "Speichern", "search": "Suchen", "rules": "Regeln", - "search-cards": "Suche nach Karten-/Listentiteln und Beschreibungen auf diesem Board", + "search-cards": "Suche nach Karten-/Listentiteln, Beschreibungen und personalisierten Feldern auf diesem Brett ", "search-example": "Suchbegriff", "select-color": "Farbe auswählen", "set-wip-limit-value": "Setzen Sie ein Limit für die maximale Anzahl von Aufgaben in dieser Liste", @@ -665,6 +674,7 @@ "r-of-checklist": "der Checkliste", "r-send-email": "Eine E-Mail senden", "r-to": "an", + "r-of": "von", "r-subject": "Betreff", "r-rule-details": "Regeldetails", "r-d-move-to-top-gen": "Karte nach oben in die Liste verschieben", @@ -756,5 +766,23 @@ "assignee": "Zugewiesen", "cardAssigneesPopup-title": "Zugewiesen", "addmore-detail": "Eine detailliertere Beschreibung hinzufügen", - "show-on-card": "Zeige auf Karte" + "show-on-card": "Zeige auf Karte", + "new": "Neu", + "editUserPopup-title": "Benutzer ändern", + "newUserPopup-title": "Neuer Benutzer", + "notifications": "Benachrichtigungen", + "view-all": "Alle anzeigen", + "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", + "start-day-of-week": "Wochentagbeginn festlegen", + "monday": "Montag", + "tuesday": "Dienstag", + "wednesday": "Mittwoch", + "thursday": "Donnerstag", + "friday": "Freitag", + "saturday": "Samstag", + "sunday": "Sonntag" } diff --git a/i18n/el.i18n.json b/i18n/el.i18n.json index 0ff93b02..823e109b 100644 --- a/i18n/el.i18n.json +++ b/i18n/el.i18n.json @@ -64,7 +64,7 @@ "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 __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "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", @@ -152,6 +152,8 @@ "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.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Attach From", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Διαγραφή Κάρτας;", "cardDetailsActionsPopup-title": "Card Actions", "cardLabelsPopup-title": "Ετικέτες", @@ -319,6 +329,7 @@ "filter-clear": "Clear filter", "filter-no-label": "No label", "filter-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", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Αποθήκευση", "search": "Αναζήτηση", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", "search-example": "Text to search for?", "select-color": "Επιλέξτε Χρώμα", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Μετακίνηση κάρτας στην αρχή της λίστας της", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 0e0dcb60..e0540cb5 100644 --- a/i18n/en-GB.i18n.json +++ b/i18n/en-GB.i18n.json @@ -64,7 +64,7 @@ "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 __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "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", @@ -152,6 +152,8 @@ "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.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Attach From", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Delete Card?", "cardDetailsActionsPopup-title": "Card Actions", "cardLabelsPopup-title": "Labels", @@ -319,6 +329,7 @@ "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", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Save", "search": "Search", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", "search-example": "Text to search for?", "select-color": "Select Colour", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 da3d875a..11e7e2dd 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -64,7 +64,7 @@ "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 __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "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", @@ -152,6 +152,8 @@ "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.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Attach From", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Delete Card?", "cardDetailsActionsPopup-title": "Card Actions", "cardLabelsPopup-title": "Labels", @@ -319,6 +329,7 @@ "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", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Save", "search": "Search", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "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", @@ -667,6 +676,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -759,5 +769,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 c030da3c..749c0a87 100644 --- a/i18n/eo.i18n.json +++ b/i18n/eo.i18n.json @@ -1,15 +1,15 @@ { "accept": "Akcepti", "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-addAttachment": "aldonita alligitecon __attachment__ al karto __card__ en la listo __list__ en la naĝotubo __swimlane__ en la tabulo __board__", + "act-deleteAttachment": "forigita alligitecon __attachment__ al karto __card__ en la listo __list__ en la naĝotubo __swimlane__ en la tabulo __board__", + "act-addSubtask": "aldonita subtaskon __subtask__ al karto __card__ en la listo __list__ en la naĝotubo __swimlane__ en la tabulo __board__", + "act-addLabel": "Aldonita etikedo __label__ al karto __card__ en la listo __list__ en la naĝotubo __swimlane en la tabulo __board__", + "act-addedLabel": "Aldonita etikedo __label__ al karto __card__ en la listo __list__ en la naĝotubo __swimlane en la tabulo __board__", + "act-removeLabel": "Forigita etikedo __label__ de karto __card__ en la listo __list__ en la naĝotubo __swimlane__ en la tabulo __board__", + "act-removedLabel": "Forigita etikedo __label__ de karto __card__ en la listo __list__ en la naĝotubo __swimlane__ en la tabulo __board__", + "act-addChecklist": "aldonita kontrololiston __checklist__ al karto __card__ en la listo __list__ en la naĝotubo __swimlane__ en la tabulo __board__", + "act-addChecklistItem": "aldonita kontrolliston __checklistItem__ al kontrololisto __checklist__ en la karto __card__ en la listo __list__ en la naĝotubo __swimlane__ en la tabulo __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__", @@ -64,7 +64,7 @@ "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 __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "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", @@ -152,6 +152,8 @@ "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": "Redakti etikedojn", "card-edit-members": "Redakti membrojn", "card-labels-title": "Change the labels for the card.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Attach From", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Delete Card?", "cardDetailsActionsPopup-title": "Card Actions", "cardLabelsPopup-title": "Etikedoj", @@ -319,6 +329,7 @@ "filter-clear": "Clear filter", "filter-no-label": "Nenia etikedo", "filter-no-member": "Nenia membro", + "filter-no-assignee": "No assignee", "filter-no-custom-fields": "No Custom Fields", "filter-show-archive": "Show archived lists", "filter-hide-empty": "Hide empty lists", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Savi", "search": "Serĉi", "rules": "Reguloj", - "search-cards": "Search from card/list titles and descriptions on this board", + "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", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "temo", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 e89e74e3..94fabf76 100644 --- a/i18n/es-AR.i18n.json +++ b/i18n/es-AR.i18n.json @@ -1,20 +1,20 @@ { "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-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-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": "agregada subtarea __subtask__ a tarjeta __card__ en la lista __list__ en el swimlane __swimlane__ en el tablero __board__", + "act-addLabel": "Agregada etiqueta __label__ a tarjeta __card__ en la lista __list__ en el swimlane __swimlane__ en el tablero __board__", + "act-addedLabel": "Agregada etiqueta __label__ a tarjeta __card__ en la lista __list__ en el swimlane __swimlane__ en el tablero __board__", + "act-removeLabel": "Eliminada etiqueta __label__ de tarjeta __card__ en la lista __list__ en el swimlane __swimlane__ en el tablero __board__", + "act-removedLabel": "Eliminada etiqueta __label__ de tarjeta __card__ en la lista __list__ en el swimlane __swimlane__ en el tablero __board__", + "act-addChecklist": "agregada checklist __checklist__ a tarjeta __card__ en la lista __list__ en el swimlane __swimlane__ en el tablero __board__", + "act-addChecklistItem": "agregado ítem __checklistItem__ a checklist __checklist__ en la tarjeta __card__ en la lista __list__ en el swimlane __swimlane__ en el tablero __board__", + "act-removeChecklist": "eliminada checklist __checklist__ de tarjeta __card__ en la lista __list__ en el swimlane __swimlane__ en el tablero __board__", + "act-removeChecklistItem": "eliminado ítem __checklistItem__ de checklist __checklist__ en la tarjeta __card__ en la lista __list__ en el swimlane __swimlane__ en el tablero __board__", + "act-checkedItem": "marcado ítem __checklistItem__ de checklist __checklist__ en la tarjeta __card__ en la lista __list__ en el swimlane __swimlane__ en el tablero __board__", + "act-uncheckedItem": "desmarcado ítem __checklistItem__ de checklist __checklist__ en la tarjeta __card__ en la lista __list__ en el swimlane __swimlane__ en el tablero __board__", + "act-completeChecklist": "completada checklist __checklist__ en la tarjeta __card__ en la lista __list__ en el swimlane __swimlane__ en el tablero __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__", @@ -64,17 +64,17 @@ "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "agregada lista de tareas a %s", "activity-checklist-removed": "removed a checklist from %s", - "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "activity-checklist-completed": "completed checklist %s of %s", "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "agregado item de lista de tareas a '%s' en %s", "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Agregar", "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-completed-card": "completada checklist __checklist__ en la tarjeta __card__ en la lista __list__ en el swimlane __swimlane__ en el tablero __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", @@ -152,6 +152,8 @@ "card-spent": "Tiempo Empleado", "card-edit-attachments": "Editar adjuntos", "card-edit-custom-fields": "Editar campos personalizados", + "card-start-voting": "Start voting", + "card-cancel-voting": "Delete voting and all votes", "card-edit-labels": "Editar etiquetas", "card-edit-members": "Editar miembros", "card-labels-title": "Cambiar las etiquetas de la tarjeta.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Adjuntar De", "cardCustomField-datePopup-title": "Cambiar fecha", "cardCustomFieldsPopup-title": "Editar campos personalizados", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "¿Borrar Tarjeta?", "cardDetailsActionsPopup-title": "Acciones de la Tarjeta", "cardLabelsPopup-title": "Etiquetas", @@ -319,6 +329,7 @@ "filter-clear": "Sacar filtro", "filter-no-label": "Sin etiqueta", "filter-no-member": "No es miembro", + "filter-no-assignee": "No assignee", "filter-no-custom-fields": "No Custom Fields", "filter-show-archive": "Show archived lists", "filter-hide-empty": "Hide empty lists", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Grabar", "search": "Buscar", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", "search-example": "¿Texto a buscar?", "select-color": "Seleccionar Color", "set-wip-limit-value": "Fijar un límite para el número máximo de tareas en esta lista", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 c7646568..5c779ba7 100644 --- a/i18n/es.i18n.json +++ b/i18n/es.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "desmarcado %s en lista %s de %s", "activity-checklist-added": "ha añadido una lista de verificación a %s", "activity-checklist-removed": "eliminada una lista de verificación desde %s", - "activity-checklist-completed": "completada la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__", + "activity-checklist-completed": "lista de verificación completada %s de %s", "activity-checklist-uncompleted": "no completado la lista %s de %s", "activity-checklist-item-added": "ha añadido el elemento de la lista de verificación a '%s' en %s", "activity-checklist-item-removed": "eliminado un elemento de la lista de verificación desde '%s' en %s", @@ -152,6 +152,8 @@ "card-spent": "Tiempo consumido", "card-edit-attachments": "Editar los adjuntos", "card-edit-custom-fields": "Editar los campos personalizados", + "card-start-voting": "Start voting", + "card-cancel-voting": "Delete voting and all votes", "card-edit-labels": "Editar las etiquetas", "card-edit-members": "Editar los miembros", "card-labels-title": "Cambia las etiquetas de la tarjeta", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Adjuntar desde", "cardCustomField-datePopup-title": "Cambiar la fecha", "cardCustomFieldsPopup-title": "Editar los campos personalizados", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Favorables", + "negativeVoteMembersPopup-title": "Contrarios", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "contrarios", "cardDeletePopup-title": "¿Eliminar la tarjeta?", "cardDetailsActionsPopup-title": "Acciones de la tarjeta", "cardLabelsPopup-title": "Etiquetas", @@ -319,6 +329,7 @@ "filter-clear": "Limpiar el filtro", "filter-no-label": "Sin etiqueta", "filter-no-member": "Sin miembro", + "filter-no-assignee": "No assignee", "filter-no-custom-fields": "Sin campos personalizados", "filter-show-archive": "Mostrar las listas archivadas", "filter-hide-empty": "Ocultar las listas vacías", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Añadir", "search": "Buscar", "rules": "Reglas", - "search-cards": "Buscar entre los títulos y las descripciones de las tarjetas en este tablero.", + "search-cards": "Buscar entre los títulos, las descripciones de las tarjetas/listas y los campos personalizados en este tablero. ", "search-example": "¿Texto a buscar?", "select-color": "Seleccionar el color", "set-wip-limit-value": "Cambiar el límite para el número máximo de tareas en esta lista.", @@ -665,6 +674,7 @@ "r-of-checklist": "de la lista de verificación", "r-send-email": "Enviar un email", "r-to": "a", + "r-of": "of", "r-subject": "asunto", "r-rule-details": "Detalle de la regla", "r-d-move-to-top-gen": "Mover la tarjeta al inicio de su lista", @@ -756,5 +766,23 @@ "assignee": "Asignado", "cardAssigneesPopup-title": "Asignado", "addmore-detail": "Añadir una descripción detallada", - "show-on-card": "Mostrar en la tarjeta" + "show-on-card": "Mostrar en la tarjeta", + "new": "Nuevo", + "editUserPopup-title": "Editar el usuario", + "newUserPopup-title": "Nuevo usuario", + "notifications": "Notificaciones", + "view-all": "Ver todo", + "filter-by-unread": "Filtrar por no leído", + "mark-all-as-read": "Marcar todo como leido", + "remove-all-read": "Remove all read", + "allow-rename": "Permitir renombrar", + "allowRenamePopup-title": "Permitir renombrar", + "start-day-of-week": "Set day of the week start", + "monday": "Lunes", + "tuesday": "Martes", + "wednesday": "Miércoles", + "thursday": "Jueves", + "friday": "Viernes", + "saturday": "Sábado", + "sunday": "Domingo" } diff --git a/i18n/eu.i18n.json b/i18n/eu.i18n.json index e51415da..13aef143 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__", @@ -64,7 +64,7 @@ "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "egiaztaketa zerrenda %s(e)ra gehituta", "activity-checklist-removed": "removed a checklist from %s", - "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "activity-checklist-completed": "completed checklist %s of %s", "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "egiaztaketa zerrendako elementuak '%s'(e)ra gehituta %s(e)n", "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", @@ -152,6 +152,8 @@ "card-spent": "Erabilitako denbora", "card-edit-attachments": "Editatu eranskinak", "card-edit-custom-fields": "Edit custom fields", + "card-start-voting": "Start voting", + "card-cancel-voting": "Delete voting and all votes", "card-edit-labels": "Editatu etiketak", "card-edit-members": "Editatu kideak", "card-labels-title": "Aldatu txartelaren etiketak", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Erantsi hemendik", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Ezabatu txartela?", "cardDetailsActionsPopup-title": "Txartel-ekintzak", "cardLabelsPopup-title": "Etiketak", @@ -319,6 +329,7 @@ "filter-clear": "Garbitu iragazkia", "filter-no-label": "Etiketarik ez", "filter-no-member": "Kiderik ez", + "filter-no-assignee": "No assignee", "filter-no-custom-fields": "No Custom Fields", "filter-show-archive": "Show archived lists", "filter-hide-empty": "Hide empty lists", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Gorde", "search": "Bilatu", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", "search-example": "Text to search for?", "select-color": "Aukeratu kolorea", "set-wip-limit-value": "Zerrenda honetako atazen muga maximoa ezarri", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 ddea935e..ebb76c25 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": "سیاهه __checklist__ را در کارت __card__ در لیست __list__ در مسیر شناور __swimlane__ در برد __board__ کامل کرد", + "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,6 +152,8 @@ "card-spent": "زمان صرف شده", "card-edit-attachments": "ویرایش ضمائم", "card-edit-custom-fields": "ویرایش فیلدهای شخصی", + "card-start-voting": "شروع رای گیری", + "card-cancel-voting": "حذف رای گیری و همه آرا", "card-edit-labels": "ویرایش برچسب", "card-edit-members": "ویرایش اعضا", "card-labels-title": "تغییر برچسب کارت", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "ضمیمه از", "cardCustomField-datePopup-title": "تغییر تاریخ", "cardCustomFieldsPopup-title": "ویرایش فیلدهای شخصی", + "cardStartVotingPopup-title": "شروع به رای", + "positiveVoteMembersPopup-title": "طرفداران", + "negativeVoteMembersPopup-title": "مخالفان", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "سوال رای گیری", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "آیا می خواهید کارت را حذف کنید؟", "cardDetailsActionsPopup-title": "اعمال کارت", "cardLabelsPopup-title": "برچسب ها", @@ -319,6 +329,7 @@ "filter-clear": "حذف صافی ـ فیلتر ـ", "filter-no-label": "بدون برچسب", "filter-no-member": "بدون عضو", + "filter-no-assignee": "No assignee", "filter-no-custom-fields": "هیچ فیلدشخصی ای وجود ندارد", "filter-show-archive": "نمایش لیستهای آرشیو شده", "filter-hide-empty": "مخفی کردن لیستهای خالی", @@ -338,8 +349,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 رفته و متن نهایی را دراینجا وارد نمایید.", @@ -440,7 +449,7 @@ "save": "ذخیره", "search": "جستجو", "rules": "قوانین", - "search-cards": "جتستجو از عنوان لیست/کارت ها و توضیحات در این برد", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", "search-example": "متن مورد جستجو؟", "select-color": "انتخاب رنگ", "set-wip-limit-value": "تعیین بیشینه تعداد وظایف در این فهرست", @@ -665,6 +674,7 @@ "r-of-checklist": "از چک لیست", "r-send-email": "ارسال ایمیل", "r-to": "به", + "r-of": "of", "r-subject": "عنوان", "r-rule-details": "جزئیات قوانین", "r-d-move-to-top-gen": "انتقال کارت به ابتدای لیست خود", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "show-on-card": "Show on Card", + "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", + "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 1ba91142..b0cc9742 100644 --- a/i18n/fi.i18n.json +++ b/i18n/fi.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "poistettu ruksi %s tarkistuslistassa %s / %s", "activity-checklist-added": "lisätty tarkistuslista kortille %s", "activity-checklist-removed": "poistettu tarkistuslista kohteesta %s", - "activity-checklist-completed": "valmistui tarkistuslista __checklist__ kortilla __card__ listalla __list__ swimlanella __swimlane__ taululla __board__", + "activity-checklist-completed": "saatiin valmiiksi tarkistuslista %s / %s", "activity-checklist-uncompleted": "ei saatu valmiiksi tarkistuslista %s / %s", "activity-checklist-item-added": "lisäsi kohdan tarkistuslistaan '%s' kortilla %s", "activity-checklist-item-removed": "poistettu tarkistuslistan kohta '%s' / %s", @@ -152,6 +152,8 @@ "card-spent": "Käytetty aika", "card-edit-attachments": "Muokkaa liitetiedostoja", "card-edit-custom-fields": "Muokkaa mukautettuja kenttiä", + "card-start-voting": "Aloita äänestys", + "card-cancel-voting": "Poista äänestys ja kaikki äänet", "card-edit-labels": "Muokkaa nimilappuja", "card-edit-members": "Muokkaa jäseniä", "card-labels-title": "Muokkaa kortin nimilappuja.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Liitä mistä", "cardCustomField-datePopup-title": "Muokkaa päivää", "cardCustomFieldsPopup-title": "Muokkaa mukautettuja kenttiä", + "cardStartVotingPopup-title": "Äänestä", + "positiveVoteMembersPopup-title": "Kannattajat", + "negativeVoteMembersPopup-title": "Vastustajat", + "allowNonBoardMembers": "Salli anonyymi äänestys julkisella taululla", + "vote-question": "Äänestys kysymys", + "vote-public": "Näytä kuka äänesti mitäkin", + "vote-for-it": "puolesta", + "vote-against": "vastaan", "cardDeletePopup-title": "Poista kortti?", "cardDetailsActionsPopup-title": "Korttitoimet", "cardLabelsPopup-title": "Nimilaput", @@ -319,6 +329,7 @@ "filter-clear": "Poista suodatin", "filter-no-label": "Ei nimilappua", "filter-no-member": "Ei jäseniä", + "filter-no-assignee": "Ei käsittelijää", "filter-no-custom-fields": "Ei mukautettuja kenttiä", "filter-show-archive": "Näytä arkistoidut listat", "filter-hide-empty": "Näytä tyhjät listat", @@ -338,8 +349,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", @@ -440,7 +449,7 @@ "save": "Tallenna", "search": "Etsi", "rules": "Säännöt", - "search-cards": "Etsi kortin/listan otsikoista ja kuvauksista tällä taululla", + "search-cards": "Etsi kortin/listan otsikoista, kuvauksista ja mukautetuista kentistä tällä taululla ", "search-example": "Etsittävä teksti?", "select-color": "Valitse väri", "set-wip-limit-value": "Aseta tämän listan tehtävien enimmäismäärä", @@ -665,6 +674,7 @@ "r-of-checklist": "tarkistuslistasta", "r-send-email": "Lähetä sähköposti", "r-to": "vastaanottajalle", + "r-of": "/", "r-subject": "aihe", "r-rule-details": "Säännön yksityiskohdat", "r-d-move-to-top-gen": "Siirrä kortti listansa alkuun", @@ -756,5 +766,23 @@ "assignee": "Käsittelijä", "cardAssigneesPopup-title": "Käsittelijä", "addmore-detail": "Lisää tarkempi kuvaus", - "show-on-card": "Näytä kortilla" + "show-on-card": "Näytä kortilla", + "new": "Uusi", + "editUserPopup-title": "Muokkaa käyttäjää", + "newUserPopup-title": "Uusi käyttäjä", + "notifications": "Ilmoitukset", + "view-all": "Näytä kaikki", + "filter-by-unread": "Suodata lukemattomat", + "mark-all-as-read": "Merkkaa kaikki luetuksi", + "remove-all-read": "Poista kaikki luetut", + "allow-rename": "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 abb13789..01390d34 100644 --- a/i18n/fr.i18n.json +++ b/i18n/fr.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "a décoché %s dans la checklist %s de %s", "activity-checklist-added": "a ajouté une checklist à %s", "activity-checklist-removed": "a supprimé une checklist de %s", - "activity-checklist-completed": "a complété la checklist __checklist__ de la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__", + "activity-checklist-completed": "a complété la checklist %s de %s", "activity-checklist-uncompleted": "a rendu incomplète la checklist %s de %s", "activity-checklist-item-added": "a ajouté un élément à la checklist '%s' dans %s", "activity-checklist-item-removed": "a supprimé une checklist de '%s' dans %s", @@ -152,6 +152,8 @@ "card-spent": "Temps passé", "card-edit-attachments": "Modifier les pièces jointes", "card-edit-custom-fields": "Éditer les champs personnalisés", + "card-start-voting": "Commencer le vote", + "card-cancel-voting": "Supprimer le vote", "card-edit-labels": "Gérer les étiquettes", "card-edit-members": "Gérer les participants", "card-labels-title": "Modifier les étiquettes de la carte.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Ajouter depuis", "cardCustomField-datePopup-title": "Modifier la date", "cardCustomFieldsPopup-title": "Éditer les champs personnalisés", + "cardStartVotingPopup-title": "Commencer un vote", + "positiveVoteMembersPopup-title": "Pour", + "negativeVoteMembersPopup-title": "Contre", + "allowNonBoardMembers": "Autoriser le vote anonyme sur le tableau public", + "vote-question": "Question du vote", + "vote-public": "Montrer qui a voté quoi", + "vote-for-it": "pour", + "vote-against": "contre", "cardDeletePopup-title": "Supprimer la carte ?", "cardDetailsActionsPopup-title": "Actions sur la carte", "cardLabelsPopup-title": "Étiquettes", @@ -319,6 +329,7 @@ "filter-clear": "Supprimer les filtres", "filter-no-label": "Aucune étiquette", "filter-no-member": "Aucun participant", + "filter-no-assignee": "Pas de personne assignée", "filter-no-custom-fields": "Pas de champs personnalisés", "filter-show-archive": "Montrer les listes archivées", "filter-hide-empty": "Cacher les listes vides", @@ -338,8 +349,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", @@ -440,7 +449,7 @@ "save": "Enregistrer", "search": "Chercher", "rules": "Règles", - "search-cards": "Chercher selon les titres de carte/liste et descriptions de ce tableau", + "search-cards": "Rechercher parmi les titres, descriptions et champs personnalisés des cartes/listes de ce tableau", "search-example": "Texte à rechercher ?", "select-color": "Sélectionner une couleur", "set-wip-limit-value": "Définit une limite maximale au nombre de cartes de cette liste", @@ -665,6 +674,7 @@ "r-of-checklist": "de la checklist", "r-send-email": "Envoyer un email", "r-to": "à", + "r-of": "sur", "r-subject": "sujet", "r-rule-details": "Détails de la règle", "r-d-move-to-top-gen": "Déplacer la carte en haut de sa liste", @@ -753,8 +763,26 @@ "accounts-allowUserDelete": "Autoriser les utilisateurs à supprimer leur compte", "hide-minicard-label-text": "Cacher le label de la minicarte", "show-desktop-drag-handles": "Voir les poignées de déplacement du bureau", - "assignee": "Cessionnaire", - "cardAssigneesPopup-title": "Cessionnaire", + "assignee": "Personne assignée", + "cardAssigneesPopup-title": "Personne assignée", "addmore-detail": "Ajouter une description plus détaillée", - "show-on-card": "Afficher sur la carte" + "show-on-card": "Afficher sur la carte", + "new": "Nouveau", + "editUserPopup-title": "Éditer l'utilisateur", + "newUserPopup-title": "Nouvel utilisateur", + "notifications": "Notifications", + "view-all": "Voir tout", + "filter-by-unread": "Filtrer par non lu", + "mark-all-as-read": "Marquer comme lus", + "remove-all-read": "Supprimer les lus", + "allow-rename": "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 c511efee..e8cd865d 100644 --- a/i18n/gl.i18n.json +++ b/i18n/gl.i18n.json @@ -64,7 +64,7 @@ "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 __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "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", @@ -152,6 +152,8 @@ "card-spent": "Spent Time", "card-edit-attachments": "Editar anexos", "card-edit-custom-fields": "Edit custom fields", + "card-start-voting": "Start voting", + "card-cancel-voting": "Delete voting and all votes", "card-edit-labels": "Editar etiquetas", "card-edit-members": "Editar membros", "card-labels-title": "Cambiar as etiquetas da tarxeta.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Attach From", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Delete Card?", "cardDetailsActionsPopup-title": "Card Actions", "cardLabelsPopup-title": "Etiquetas", @@ -319,6 +329,7 @@ "filter-clear": "Limpar filtro", "filter-no-label": "Non hai etiquetas", "filter-no-member": "Non hai membros", + "filter-no-assignee": "No assignee", "filter-no-custom-fields": "No Custom Fields", "filter-show-archive": "Show archived lists", "filter-hide-empty": "Hide empty lists", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Save", "search": "Search", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "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", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 b7ada7a4..da268d6b 100644 --- a/i18n/he.i18n.json +++ b/i18n/he.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "בוטל הסימון של %s ברשימת המשימות %s מתוך %s", "activity-checklist-added": "נוספה רשימת משימות אל %s", "activity-checklist-removed": "הוסרה רשימת משימות מ־%s", - "activity-checklist-completed": "רשימת המטלות __checklist__ בכרטיס __card__ שברשימה __list__ תחת המסלול __swimlane__ בלוח __board__ הושלמה", + "activity-checklist-completed": "הושלמה רשימת משימות %s מתוך %s", "activity-checklist-uncompleted": "רשימת המשימות %s מתוך %s סומנה כבלתי מושלמת", "activity-checklist-item-added": "נוסף פריט רשימת משימות אל ‚%s‘ תחת %s", "activity-checklist-item-removed": "הוסר פריט מרשימת המשימות ‚%s’ תחת %s", @@ -152,6 +152,8 @@ "card-spent": "זמן שהושקע", "card-edit-attachments": "עריכת קבצים מצורפים", "card-edit-custom-fields": "עריכת שדות בהתאמה אישית", + "card-start-voting": "ניתן להצביע", + "card-cancel-voting": "מחיקת אפשרות ההצבעה ואת כל הקולות", "card-edit-labels": "עריכת תוויות", "card-edit-members": "עריכת חברים", "card-labels-title": "שינוי תוויות לכרטיס.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "לצרף מ־", "cardCustomField-datePopup-title": "החלפת תאריך", "cardCustomFieldsPopup-title": "עריכת שדות בהתאמה אישית", + "cardStartVotingPopup-title": "התחלת הצבעה", + "positiveVoteMembersPopup-title": "תומכים", + "negativeVoteMembersPopup-title": "יריבים", + "allowNonBoardMembers": "לאפשר הצבעות אלמוניות בלוח ציבורי", + "vote-question": "שאלת הסקר", + "vote-public": "להציג מי הצביע למה", + "vote-for-it": "בעד", + "vote-against": "נגד", "cardDeletePopup-title": "למחוק כרטיס?", "cardDetailsActionsPopup-title": "פעולות על הכרטיס", "cardLabelsPopup-title": "תוויות", @@ -319,6 +329,7 @@ "filter-clear": "ניקוי המסנן", "filter-no-label": "אין תווית", "filter-no-member": "אין חבר כזה", + "filter-no-assignee": "אין אחראי", "filter-no-custom-fields": "אין שדות מותאמים אישית", "filter-show-archive": "הצגת רשימות שהועברו לארכיון", "filter-hide-empty": "הסתרת רשימות ריקות", @@ -338,8 +349,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‘ ולהעתיק את הטקסט שנוצר.", @@ -440,7 +449,7 @@ "save": "שמירה", "search": "חיפוש", "rules": "כללים", - "search-cards": "חיפוש בין כותרות של כרטיסים/רשימות ותיאורים בלוח זה", + "search-cards": "חיפוש מבין כותרות של כרטיסים/רשימות, תיאורים ושדות בהתאמה אישית בלוח זה", "search-example": "טקסט לחיפוש ?", "select-color": "בחירת צבע", "set-wip-limit-value": "הגדרת מגבלה למספר המרבי של משימות ברשימה זו", @@ -665,6 +674,7 @@ "r-of-checklist": "של רשימת משימות", "r-send-email": "שליחת דוא״ל", "r-to": "אל", + "r-of": "מתוך", "r-subject": "נושא", "r-rule-details": "פרטי הכלל", "r-d-move-to-top-gen": "העברת כרטיס לראש הרשימה שלו", @@ -756,5 +766,23 @@ "assignee": "גורם אחראי", "cardAssigneesPopup-title": "גורם אחראי", "addmore-detail": "הוספת תיאור מפורט", - "show-on-card": "הצגה על הכרטיס" + "show-on-card": "הצגה על הכרטיס", + "new": "חדש", + "editUserPopup-title": "עריכת משתמש", + "newUserPopup-title": "משתמש חדש", + "notifications": "הודעות", + "view-all": "להציג הכול", + "filter-by-unread": "סימון לפי כאלו שלא נקראו", + "mark-all-as-read": "לסמן הכול כאילו שנקראו", + "remove-all-read": "הסרת כל אלו שנקראו", + "allow-rename": "לאפשר שינוי שם", + "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 8480f287..49aa9691 100644 --- a/i18n/hi.i18n.json +++ b/i18n/hi.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "अचिह्नित %s अंदर में चिह्नांकन-सूची %s of %s", "activity-checklist-added": "संकलित चिह्नांकन-सूची तक %s", "activity-checklist-removed": "हटा दिया एक चिह्नांकन-सूची से %s", - "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "activity-checklist-completed": "completed checklist %s of %s", "activity-checklist-uncompleted": "अपूर्ण चिह्नांकन-सूची %s of %s", "activity-checklist-item-added": "संकलित चिह्नांकन-सूची विषय तक '%s' अंदर में %s", "activity-checklist-item-removed": "हटा दिया एक चिह्नांकन-सूची विषय से '%s' अंदर में %s", @@ -152,6 +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-edit-labels": "संपादित नामपत्र", "card-edit-members": "संपादित सदस्य", "card-labels-title": "कार्ड के लिए नामपत्र परिवर्तित करें ।", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "से अनुलग्न करें", "cardCustomField-datePopup-title": "तारीख बदलें", "cardCustomFieldsPopup-title": "संपादित करें प्रचलन क्षेत्र", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "मिटाएँ कार्ड?", "cardDetailsActionsPopup-title": "कार्ड क्रियाएँ", "cardLabelsPopup-title": "नामपत्र", @@ -319,6 +329,7 @@ "filter-clear": "Clear filter", "filter-no-label": "No label", "filter-no-member": "No सदस्य", + "filter-no-assignee": "No assignee", "filter-no-custom-fields": "No प्रचलन क्षेत्र", "filter-show-archive": "Show archived lists", "filter-hide-empty": "Hide empty lists", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Save", "search": "Search", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", "search-example": "Text तक search for?", "select-color": "Select Color", "set-wip-limit-value": "Set एक limit for the maximum number of tasks अंदर में यह list", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "स्थानांतरित कार्ड तक top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 e7db6dcb..44333d97 100644 --- a/i18n/hu.i18n.json +++ b/i18n/hu.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "ellenőrzőlista hozzáadva ehhez: %s", "activity-checklist-removed": "removed a checklist from %s", - "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "activity-checklist-completed": "completed checklist %s of %s", "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "ellenőrzőlista elem hozzáadva ehhez: „%s”, ebben: %s", "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", @@ -152,6 +152,8 @@ "card-spent": "Eltöltött idő", "card-edit-attachments": "Mellékletek szerkesztése", "card-edit-custom-fields": "Egyéni mezők szerkesztése", + "card-start-voting": "Start voting", + "card-cancel-voting": "Delete voting and all votes", "card-edit-labels": "Címkék szerkesztése", "card-edit-members": "Tagok szerkesztése", "card-labels-title": "A kártya címkéinek megváltoztatása.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Innen csatolva", "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", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Törli a kártyát?", "cardDetailsActionsPopup-title": "Kártyaműveletek", "cardLabelsPopup-title": "Címkék", @@ -319,6 +329,7 @@ "filter-clear": "Szűrő törlése", "filter-no-label": "Nincs címke", "filter-no-member": "Nincs tag", + "filter-no-assignee": "No assignee", "filter-no-custom-fields": "Nincsenek egyéni mezők", "filter-show-archive": "Show archived lists", "filter-hide-empty": "Hide empty lists", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Mentés", "search": "Keresés", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", "search-example": "keresőkifejezés", "select-color": "Szín kiválasztása", "set-wip-limit-value": "Korlát beállítása a listán lévő feladatok legnagyobb számához", @@ -665,6 +674,7 @@ "r-of-checklist": "ellenőrzőlistából", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 41001c3b..5fc9363a 100644 --- a/i18n/hy.i18n.json +++ b/i18n/hy.i18n.json @@ -64,7 +64,7 @@ "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 __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "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", @@ -152,6 +152,8 @@ "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.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Attach From", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Delete Card?", "cardDetailsActionsPopup-title": "Card Actions", "cardLabelsPopup-title": "Labels", @@ -319,6 +329,7 @@ "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", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Save", "search": "Search", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "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", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 530355a7..2509a5bc 100644 --- a/i18n/id.i18n.json +++ b/i18n/id.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "daftar periksa ditambahkan ke %s", "activity-checklist-removed": "removed a checklist from %s", - "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "activity-checklist-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", @@ -152,6 +152,8 @@ "card-spent": "Spent Time", "card-edit-attachments": "Sunting lampiran", "card-edit-custom-fields": "Edit custom fields", + "card-start-voting": "Start voting", + "card-cancel-voting": "Delete voting and all votes", "card-edit-labels": "Sunting label", "card-edit-members": "Sunting anggota", "card-labels-title": "Ubah label kartu", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Lampirkan dari", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Hapus kartu", "cardDetailsActionsPopup-title": "Aksi Kartu", "cardLabelsPopup-title": "Daftar Label", @@ -319,6 +329,7 @@ "filter-clear": "Bersihkan penyaringan", "filter-no-label": "Tidak ada label", "filter-no-member": "Tidak ada anggota", + "filter-no-assignee": "No assignee", "filter-no-custom-fields": "No Custom Fields", "filter-show-archive": "Show archived lists", "filter-hide-empty": "Hide empty lists", @@ -338,8 +349,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", @@ -440,7 +449,7 @@ "save": "Simpan", "search": "Cari", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "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", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 23da156a..8eb436c0 100644 --- a/i18n/ig.i18n.json +++ b/i18n/ig.i18n.json @@ -64,7 +64,7 @@ "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 __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "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", @@ -152,6 +152,8 @@ "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.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Attach From", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Delete Card?", "cardDetailsActionsPopup-title": "Card Actions", "cardLabelsPopup-title": "Aha", @@ -319,6 +329,7 @@ "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", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Save", "search": "Search", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "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", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 f2cfd575..38796066 100644 --- a/i18n/it.i18n.json +++ b/i18n/it.i18n.json @@ -1,5 +1,5 @@ { - "accept": "Accetta", + "accept": "Accept", "act-activity-notify": "Notifica attività", "act-addAttachment": "aggiunto allegato __attachment__ alla scheda __card__ della lista __list__ della corsia __swimlane__ nella bacheca __board__", "act-deleteAttachment": "eliminato allegato __attachment__ dalla scheda __card__ della lista __list__ della corsia __swimlane__ nella bacheca __board__", @@ -24,7 +24,7 @@ "act-createCard": "scheda __card__ creata nella lista __list__ della corsia __swimlane__ della bacheca __board__", "act-createCustomField": "creato campo personalizzato __customField__ nella bacheca __board", "act-deleteCustomField": "campo personalizzato eliminato __customField__ nella bacheca __board", - "act-setCustomField": "edited custom field __customField__: __customFieldValue__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-setCustomField": "campo personalizzato modificato __customField__: __customFieldValue__ sulla scheda __card__ sulla lista __list__ sulla swimlane __swimlane__ sulla bacheca __board__", "act-createList": "aggiunta lista __list__ alla bacheca __board__", "act-addBoardMember": "aggiunto membro __member__ alla bacheca __board__", "act-archivedBoard": "Bacheca __board__ archiviata", @@ -64,7 +64,7 @@ "activity-unchecked-item": "disattivato %s nella checklist %s di %s", "activity-checklist-added": "aggiunta checklist a %s", "activity-checklist-removed": "È stata rimossa una checklist da%s", - "activity-checklist-completed": "checklist __checklist__ completata nella scheda __card__ della lista __list__ della corsia __swimlane__ nella bacheca __board__", + "activity-checklist-completed": "%s di %s checklists completate", "activity-checklist-uncompleted": "La checklist non è stata completata", "activity-checklist-item-added": "Aggiunto l'elemento checklist a '%s' in %s", "activity-checklist-item-removed": "è stato rimosso un elemento della checklist da '%s' in %s", @@ -152,6 +152,8 @@ "card-spent": "Tempo trascorso", "card-edit-attachments": "Modifica allegati", "card-edit-custom-fields": "Modifica campo personalizzato", + "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.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Allega da", "cardCustomField-datePopup-title": "Cambia data", "cardCustomFieldsPopup-title": "Modifica campo personalizzato", + "cardStartVotingPopup-title": "Inizia una votazione", + "positiveVoteMembersPopup-title": "Favorevoli", + "negativeVoteMembersPopup-title": "Contrari", + "allowNonBoardMembers": "Consentire voto anonimo su bacheca pubblica", + "vote-question": "Domanda di votazione", + "vote-public": "Mostrare chi ha votato cosa", + "vote-for-it": "a favore", + "vote-against": "contro", "cardDeletePopup-title": "Elimina scheda?", "cardDetailsActionsPopup-title": "Azioni scheda", "cardLabelsPopup-title": "Etichette", @@ -319,6 +329,7 @@ "filter-clear": "Pulisci filtri", "filter-no-label": "Nessuna etichetta", "filter-no-member": "Nessun membro", + "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", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Salva", "search": "Cerca", "rules": "Regole", - "search-cards": "Ricerca per titolo e descrizione scheda/lista su questa bacheca", + "search-cards": "Ricerca per titolo, descrizione scheda/lista e campi personalizzati su questa bacheca", "search-example": "Testo da ricercare?", "select-color": "Seleziona Colore", "set-wip-limit-value": "Seleziona un limite per il massimo numero di attività in questa lista", @@ -583,9 +592,9 @@ "default": "Predefinito", "queue": "Coda", "subtask-settings": "Impostazioni sotto-compiti", - "card-settings": "Card Settings", + "card-settings": "Impostazioni della scheda", "boardSubtaskSettingsPopup-title": "Impostazioni sotto-compiti della bacheca", - "boardCardSettingsPopup-title": "Card Settings", + "boardCardSettingsPopup-title": "Impostazioni della scheda", "deposit-subtasks-board": "Deposita i sotto compiti in questa bacheca", "deposit-subtasks-list": "Lista di destinaizoni per questi sotto-compiti", "show-parent-in-minicard": "Mostra genirotri nelle mini schede:", @@ -665,6 +674,7 @@ "r-of-checklist": "della lista di cose da fare", "r-send-email": "Invia un e-mail", "r-to": "a", + "r-of": "di", "r-subject": "soggetto", "r-rule-details": "Dettagli della regola", "r-d-move-to-top-gen": "Sposta la scheda al di sopra del suo elenco", @@ -731,30 +741,48 @@ "restore-all": "Restore all", "delete-all": "Cancella tutto", "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__", + "previous_as": "l'ultima volta è stata", + "act-a-dueAt": "Scadenza modificata in __timeValue__\nData precedente: __timeOldValue__", + "act-a-endAt": "orario finale modificato in __timeValue__ (precedentemente: __timeOldValue__)", + "act-a-startAt": "orario iniziale modificato in __timeValue__ (precedentemente: __timeOldValue__)", + "act-a-receivedAt": "orario di ricezione modificato in __timeValue__ (precedentemente: __timeOldValue__)", + "a-dueAt": "scadenza modificata in", + "a-endAt": "orario finale modificato in", + "a-startAt": "orario iniziale modificato in", + "a-receivedAt": "orario di ricezione modificato in", + "almostdue": "la data di scadenza attuale %s si sta avvicinando", + "pastdue": "la data di scadenza attuale %s è scaduta", + "duenow": "la data di scadenza attuale %s è oggi", + "act-newDue": "__list__/__card__ ha un 1° sollecito [__board__]", + "act-withDue": "sollecito relativo a __list__/__card__ [__board__]", + "act-almostdue": "sollecito inviato: la scadenza (__timeValue__) di __card__ è vicina", + "act-pastdue": "sollecito inviato: la scadenza (__timeValue__) di __card__ è già passata", + "act-duenow": "sollecito inviato: la scadenza (__timeValue__) di __card__ è adesso", + "act-atUserComment": "Sei stato menzionato in [__board__] __list__/__card__", "delete-user-confirm-popup": "Sei sicuro di voler cancellare questo profilo? Non sarà possibile ripristinarlo.", "accounts-allowUserDelete": "Permetti agli utenti di cancellare il loro profilo", "hide-minicard-label-text": "Nascondi etichetta minicard", "show-desktop-drag-handles": "Mostra maniglie di trascinamento del desktop", "assignee": "Assegnatario", "cardAssigneesPopup-title": "Assegnatario", - "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "addmore-detail": "Aggiungi una descrizione più dettagliata", + "show-on-card": "Mostra sulla scheda", + "new": "Nuovo", + "editUserPopup-title": "Modifica utente", + "newUserPopup-title": "Nuovo utente", + "notifications": "Notifiche", + "view-all": "Mostra Tutto", + "filter-by-unread": "Filtra per non letto", + "mark-all-as-read": "Segna come letto", + "remove-all-read": "Rimuovi tutti i già letti", + "allow-rename": "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 2bb4206d..ee4538ec 100644 --- a/i18n/ja.i18n.json +++ b/i18n/ja.i18n.json @@ -64,9 +64,9 @@ "activity-unchecked-item": "チェックが外されました %s チェックリスト %s / %s", "activity-checklist-added": "%s にチェックリストを追加しました", "activity-checklist-removed": "チェックリストを %s から削除しました", - "activity-checklist-completed": "チェックリスト __checklist__ ボード __board__, スイムレーン __swimlane__, リスト __list__, カード __card__ が完了しました", + "activity-checklist-completed": "チェックリスト%s / %s が完了しました", "activity-checklist-uncompleted": "チェックリスト %s / %s が未完了になりました", - "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-added": "チェックリスト項目を '%s' / %s に追加しました", "activity-checklist-item-removed": "'%s' の チェックリスト %s の項目を削除しました", "add": "追加", "activity-checked-item-card": "チェックされました %s チェックリスト %s", @@ -152,6 +152,8 @@ "card-spent": "作業時間", "card-edit-attachments": "添付ファイルの編集", "card-edit-custom-fields": "カスタムフィールドの編集", + "card-start-voting": "投票を開始", + "card-cancel-voting": "投票と全ての結果を削除", "card-edit-labels": "ラベルの編集", "card-edit-members": "メンバーの編集", "card-labels-title": "カードのラベルを変更する", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "添付元", "cardCustomField-datePopup-title": "日時変更", "cardCustomFieldsPopup-title": "カスタムフィールドの編集", + "cardStartVotingPopup-title": "投票を開始", + "positiveVoteMembersPopup-title": "支持者", + "negativeVoteMembersPopup-title": "反対者", + "allowNonBoardMembers": "公開ボードでの匿名投票を許可", + "vote-question": "投票の質問事項", + "vote-public": "誰が何に投票したか表示", + "vote-for-it": "賛成", + "vote-against": "反対", "cardDeletePopup-title": "カードを削除しますか?", "cardDetailsActionsPopup-title": "カード操作", "cardLabelsPopup-title": "ラベル", @@ -304,12 +314,12 @@ "error-username-taken": "このユーザ名は既に使用されています", "error-email-taken": "メールは既に受け取られています", "export-board": "ボードのエクスポート", - "sort": "Sort", + "sort": "並べ替え", "sort-desc": "クリックでリストをソート", - "list-sort-by": "Sort the List By:", - "list-label-modifiedAt": "Last Access Time", + "list-sort-by": "次によりリストを並べ替え:", + "list-label-modifiedAt": "最終アクセス日時", "list-label-title": "リストの名前", - "list-label-sort": "Your Manual Order", + "list-label-sort": "手動による並べ替え", "list-label-short-modifiedAt": "(L)", "list-label-short-title": "(N)", "list-label-short-sort": "(M)", @@ -319,6 +329,7 @@ "filter-clear": "フィルターの解除", "filter-no-label": "ラベルなし", "filter-no-member": "メンバーなし", + "filter-no-assignee": "担当者なし", "filter-no-custom-fields": "カスタムフィールドなし", "filter-show-archive": "アーカイブされたリストを表示", "filter-hide-empty": "空のリストを隠す", @@ -338,18 +349,16 @@ "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'を選択し、テキストをコピーしてください。", "import-board-instruction-wekan": "ボードの、 'メニュー' → 'ボードのエクスポート'を選択し、ダウンロードされたファイルの中のテキストをコピーしてください。", - "import-board-instruction-about-errors": "If you get errors when importing board, sometimes importing still works, and board is at All Boards page.", + "import-board-instruction-about-errors": "ボードのインポート中にエラーが発生した場合、インポートがまだ進行中のまま、全てのボードページに表示されている場合があります。", "import-json-placeholder": "JSONデータをここに貼り付けする", "import-map-members": "メンバーを紐付け", - "import-members-map": "Your imported board has some members. Please map the members you want to import to your users", + "import-members-map": "インポートしたボードにはいくつかのメンバーが含まれています。インポートしたいメンバーをユーザーにマッピングしてください", "import-show-user-mapping": "メンバー紐付けの確認", - "import-user-select": "Pick your existing user you want to use as this member", + "import-user-select": "このメンバーとして使用したいユーザーを選択してください", "importMapMembersAddPopup-title": "メンバーを選択", "info": "バージョン", "initials": "イニシャル", @@ -440,7 +449,7 @@ "save": "保存", "search": "検索", "rules": "ルール", - "search-cards": "ボードのカード/リストのタイトルと詳細から検索", + "search-cards": "このボード上のカード/リストタイトル、詳細、カスタムフィールドから検索", "search-example": "検索文字", "select-color": "色を選択", "set-wip-limit-value": "このリスト中のタスクの最大数を設定", @@ -468,8 +477,8 @@ "spent-time-hours": "作業時間(時)", "overtime-hours": "超過時間(時)", "overtime": "超過時間", - "has-overtime-cards": "Has overtime cards", - "has-spenttime-cards": "Has spent time cards", + "has-overtime-cards": "超過時間ありのカード", + "has-spenttime-cards": "作業時間ありのカード", "time": "時間", "title": "タイトル", "tracking": "トラッキング", @@ -519,8 +528,8 @@ "send-smtp-test": "テストメールを自分に送信", "invitation-code": "招待コード", "email-invite-register-subject": "__inviter__さんがあなたを招待しています", - "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.", - "email-smtp-test-subject": "SMTP Test Email", + "email-invite-register-text": "__user__ 様\n\n__inviter__ によりカンバンへ招待されています。\n\n以下のリンクへ移動し、招待コード __icode__ を入力してください。\n__url__", + "email-smtp-test-subject": "SMTP経由でテストメールを送信", "email-smtp-test-text": "メールを送信しました", "error-invitation-code-not-exist": "招待コードが存在しません", "error-notAuthorized": "このページを参照する権限がありません。", @@ -665,6 +674,7 @@ "r-of-checklist": "チェックリスト", "r-send-email": "メールを送る", "r-to": "宛先", + "r-of": "of", "r-subject": "件名", "r-rule-details": "ルール詳細", "r-d-move-to-top-gen": "カードを自身のリストの先頭に移動", @@ -718,9 +728,9 @@ "custom-product-name": "カスタム製品名", "layout": "レイアウト", "hide-logo": "ロゴを隠す", - "add-custom-html-after-body-start": "Add Custom HTML after <body> start", - "add-custom-html-before-body-end": "Add Custom HTML before </body> end", - "error-undefined": "Something went wrong", + "add-custom-html-after-body-start": "<body> の開始直後にカスタムHTMLを追加する", + "add-custom-html-before-body-end": "</body> の終了直前にカスタムHTMLを追加する", + "error-undefined": "何らかの問題が発生しています", "error-ldap-login": "ログイン中にエラーが発生しました", "display-authentication-method": "認証方式を表示", "default-authentication-method": "デフォルトの認証方式", @@ -731,7 +741,7 @@ "restore-all": "全てをリストアする", "delete-all": "全てを削除する", "loading": "ローディング中です、しばらくお待ちください。", - "previous_as": "last time was", + "previous_as": "最終日時", "act-a-dueAt": "期限の時刻が変更されました\n変更後:__timeValue__\n場所:__card__\n変更前の期限の時刻は __timeOldValue__ でした", "act-a-endAt": "終了を (__timeOldValue__)から __timeValue__ に変更しました", "act-a-startAt": "開始を (__timeOldValue__)から __timeValue__ に変更しました", @@ -743,11 +753,11 @@ "almostdue": "期限 %s が近づいています", "pastdue": "期限 %s が過ぎています", "duenow": "期限 %s は本日です", - "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-newDue": "__list __ / __ card__に1回目の有効期限アラートがあります [__board__]", + "act-withDue": "__list __ / __ card__ の有効期限のアラート [__board__]", + "act-almostdue": "__card__ の期限日時 (__timeValue__) が近づいています", + "act-pastdue": "__card__ の期限日時 (__timeValue__) が過ぎています", + "act-duenow": "__card__ の期限日時 (__timeValue__) になりました", "act-atUserComment": "あなたが [__board__] __list__/__card__ に追記しました", "delete-user-confirm-popup": "本当にこのアカウントを削除しますか?この操作は取り消しできません。", "accounts-allowUserDelete": "ユーザー自身のアカウント削除を許可", @@ -756,5 +766,23 @@ "assignee": "担当者", "cardAssigneesPopup-title": "担当者", "addmore-detail": "詳細説明の追加", - "show-on-card": "カードに表示する項目" + "show-on-card": "カードに表示する項目", + "new": "新規作成", + "editUserPopup-title": "ユーザーを編集", + "newUserPopup-title": "新規ユーザー", + "notifications": "通知", + "view-all": "全てを表示", + "filter-by-unread": "未読でフィルタ", + "mark-all-as-read": "全て既読にする", + "remove-all-read": "全ての既読を削除", + "allow-rename": "リネームを許可する", + "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 9bf7593d..0e266746 100644 --- a/i18n/ka.i18n.json +++ b/i18n/ka.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "დაემატა ჩამონათვალი %s-ს", "activity-checklist-removed": "removed a checklist from %s", - "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "activity-checklist-completed": "completed checklist %s of %s", "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "დამატებულია ჩამონათვალის ელემენტები '%s' %s-ში", "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", @@ -152,6 +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-edit-labels": "ნიშნის შესწორება", "card-edit-members": "მომხმარებლების შესწორება", "card-labels-title": "ნიშნის შეცვლა ბარათისთვის.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "მიბმა შემდეგი წყაროდან: ", "cardCustomField-datePopup-title": "დროის ცვლილება", "cardCustomFieldsPopup-title": "მომხმარებლის ველის შესწორება", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "წავშალოთ ბარათი? ", "cardDetailsActionsPopup-title": "ბარათის მოქმედებები", "cardLabelsPopup-title": "ნიშნები", @@ -319,6 +329,7 @@ "filter-clear": "ფილტრის გასუფთავება", "filter-no-label": "ნიშანი არ გვაქვს", "filter-no-member": "არ არის წევრები ", + "filter-no-assignee": "No assignee", "filter-no-custom-fields": "არა მომხმარებლის ველი", "filter-show-archive": "Show archived lists", "filter-hide-empty": "Hide empty lists", @@ -338,8 +349,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-ის ექსპორტი\" და დააკოპირეთ შედეგი. ", @@ -440,7 +449,7 @@ "save": "დამახსოვრება", "search": "ძებნა", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", "search-example": "საძიებო ტექსტი", "select-color": "ფერის მონიშვნა", "set-wip-limit-value": "დააყენეთ შეზღუდვა დავალებების მაქსიმალურ რაოდენობაზე ", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 f990a2ff..cb8aa4f9 100644 --- a/i18n/km.i18n.json +++ b/i18n/km.i18n.json @@ -64,7 +64,7 @@ "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 __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "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", @@ -152,6 +152,8 @@ "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.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Attach From", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Delete Card?", "cardDetailsActionsPopup-title": "Card Actions", "cardLabelsPopup-title": "Labels", @@ -319,6 +329,7 @@ "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", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Save", "search": "Search", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "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", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 d982fc4f..c36e3baa 100644 --- a/i18n/ko.i18n.json +++ b/i18n/ko.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "%s에 체크리스트를 추가함", "activity-checklist-removed": "removed a checklist from %s", - "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "activity-checklist-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", @@ -152,6 +152,8 @@ "card-spent": "Spent Time", "card-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": "라벨 수정", "card-edit-members": "멤버 수정", "card-labels-title": "카드의 라벨 변경.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "첨부 파일", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "카드를 삭제합니까?", "cardDetailsActionsPopup-title": "카드 액션", "cardLabelsPopup-title": "라벨", @@ -319,6 +329,7 @@ "filter-clear": "필터 초기화", "filter-no-label": "라벨 없음", "filter-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", @@ -338,8 +349,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' 선택하여 텍스트 결과값 복사", @@ -440,7 +449,7 @@ "save": "저장", "search": "검색", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", "search-example": "Text to search for?", "select-color": "색 선택", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "show-on-card": "Show on Card", + "new": "New", + "editUserPopup-title": "Edit User", + "newUserPopup-title": "New User", + "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", + "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 64d97cf8..df33588e 100644 --- a/i18n/lv.i18n.json +++ b/i18n/lv.i18n.json @@ -64,7 +64,7 @@ "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 __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "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", @@ -152,6 +152,8 @@ "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.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Attach From", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Delete Card?", "cardDetailsActionsPopup-title": "Card Actions", "cardLabelsPopup-title": "Labels", @@ -319,6 +329,7 @@ "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", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Save", "search": "Search", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "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", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 353ed40d..2a6f964b 100644 --- a/i18n/mk.i18n.json +++ b/i18n/mk.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "размаркира %s от списък със задачи %s на %s", "activity-checklist-added": "добави списък със задачи към %s", "activity-checklist-removed": "премахна списък със задачи от %s", - "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "activity-checklist-completed": "completed checklist %s of %s", "activity-checklist-uncompleted": "\"отзавърши\" чеклистта %s в %s", "activity-checklist-item-added": "добави точка към '%s' в/във %s", "activity-checklist-item-removed": "премахна точка от '%s' в %s", @@ -152,6 +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-edit-labels": "Промени етикетите", "card-edit-members": "Промени членовете", "card-labels-title": "Промени етикетите за картата.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Прикачи от", "cardCustomField-datePopup-title": "Промени датата", "cardCustomFieldsPopup-title": "Промени собствените полета", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Желаете да изтриете картата?", "cardDetailsActionsPopup-title": "Опции", "cardLabelsPopup-title": "Етикети", @@ -319,6 +329,7 @@ "filter-clear": "Премахване на филтрите", "filter-no-label": "без етикет", "filter-no-member": "без член", + "filter-no-assignee": "No assignee", "filter-no-custom-fields": "Няма Собствени полета", "filter-show-archive": "Show archived lists", "filter-hide-empty": "Hide empty lists", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Запази", "search": "Търсене", "rules": "Правила", - "search-cards": "Search from card/list titles and descriptions on this board", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", "search-example": "Text to search for?", "select-color": "Избери цвят", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Детайли за правилото", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 806056ef..f3256a6c 100644 --- a/i18n/mn.i18n.json +++ b/i18n/mn.i18n.json @@ -64,7 +64,7 @@ "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 __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "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", @@ -152,6 +152,8 @@ "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.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Attach From", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Delete Card?", "cardDetailsActionsPopup-title": "Card Actions", "cardLabelsPopup-title": "Labels", @@ -319,6 +329,7 @@ "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", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Save", "search": "Search", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "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", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 0eeb6ee1..578520bd 100644 --- a/i18n/nb.i18n.json +++ b/i18n/nb.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "la til sjekkliste til %s", "activity-checklist-removed": "removed a checklist from %s", - "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "activity-checklist-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", @@ -152,6 +152,8 @@ "card-spent": "Spent Time", "card-edit-attachments": "Rediger vedlegg", "card-edit-custom-fields": "Edit custom fields", + "card-start-voting": "Start voting", + "card-cancel-voting": "Delete voting and all votes", "card-edit-labels": "Rediger etiketter", "card-edit-members": "Endre medlemmer", "card-labels-title": "Endre etiketter for kortet.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Legg ved fra", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Slett kort?", "cardDetailsActionsPopup-title": "Kort-handlinger", "cardLabelsPopup-title": "Etiketter", @@ -319,6 +329,7 @@ "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", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Save", "search": "Search", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "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", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "til", + "r-of": "of", "r-subject": "Emne", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 c74b3cb6..4a4ad0bc 100644 --- a/i18n/nl.i18n.json +++ b/i18n/nl.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "%s uitgevinkt in checklist %s van %s", "activity-checklist-added": "checklist toegevoegd aan %s", "activity-checklist-removed": "checklist verwijderd van %s", - "activity-checklist-completed": "heeft checklist __checklist__ afgewerkt op kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__", + "activity-checklist-completed": "checklist %s afgewerkt van %s", "activity-checklist-uncompleted": "checklist %s onafgewerkt van %s", "activity-checklist-item-added": "checklist item toegevoegd aan '%s' in '%s'", "activity-checklist-item-removed": "checklist item verwijderd van '%s' in %s", @@ -152,6 +152,8 @@ "card-spent": "Gespendeerde tijd", "card-edit-attachments": "Wijzig bijlagen", "card-edit-custom-fields": "Wijzig maatwerkvelden", + "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.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Voeg bestand toe vanuit", "cardCustomField-datePopup-title": "Wijzigingsdatum", "cardCustomFieldsPopup-title": "Wijzig maatwerkvelden", + "cardStartVotingPopup-title": "Start een stemming", + "positiveVoteMembersPopup-title": "Voorstanders", + "negativeVoteMembersPopup-title": "Tegenstanders", + "allowNonBoardMembers": "Sta anoniem stemmen toe op openbaar bord", + "vote-question": "Stemvraag", + "vote-public": "Toon wie wat gestemd heeft", + "vote-for-it": "Voor", + "vote-against": "tegen", "cardDeletePopup-title": "Kaart verwijderen?", "cardDetailsActionsPopup-title": "Kaart actie ondernemen", "cardLabelsPopup-title": "Labels", @@ -319,6 +329,7 @@ "filter-clear": "Wis filter", "filter-no-label": "Geen label", "filter-no-member": "Geen lid", + "filter-no-assignee": "Niemand toegewezen", "filter-no-custom-fields": "Geen maatwerkvelden", "filter-show-archive": "Toon gearchiveerde lijsten", "filter-hide-empty": "Verberg lege lijsten", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Opslaan", "search": "Zoek", "rules": "Regels", - "search-cards": "Zoek op kaarten/lijsten en omschrijvingen op dit bord", + "search-cards": "Zoek in kaart/lijst, titels, beschrijvingen en maatwerkvelden op dit bord", "search-example": "Tekst om naar te zoeken?", "select-color": "Selecteer kleur", "set-wip-limit-value": "Zet een limiet voor het maximaal aantal taken in deze lijst", @@ -583,9 +592,9 @@ "default": "Standaard", "queue": "Rij", "subtask-settings": "Subtaak Instellingen", - "card-settings": "Card Settings", + "card-settings": "Kaart Instellingen", "boardSubtaskSettingsPopup-title": "Bord Subtaak Instellingen", - "boardCardSettingsPopup-title": "Card Settings", + "boardCardSettingsPopup-title": "Kaart Instellingen", "deposit-subtasks-board": "Plaats subtaken op dit bord:", "deposit-subtasks-list": "Plaats subtaken in deze lijst:", "show-parent-in-minicard": "Toon bron in minikaart:", @@ -665,6 +674,7 @@ "r-of-checklist": "van checklist", "r-send-email": "Verzend een email", "r-to": "naar", + "r-of": "van", "r-subject": "onderwerp", "r-rule-details": "Regel details", "r-d-move-to-top-gen": "Verplaats kaart helemaal naar boven op de lijst", @@ -755,6 +765,24 @@ "show-desktop-drag-handles": "Toon sleep gereedschap op werkblad", "assignee": "Toegewezen aan", "cardAssigneesPopup-title": "Toegewezen aan", - "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "addmore-detail": "Voeg een meer gedetailleerde beschrijving toe", + "show-on-card": "Toon op kaart", + "new": "Nieuw", + "editUserPopup-title": "Wijzig gebruiker", + "newUserPopup-title": "Nieuwe gebruiker", + "notifications": "Meldingen", + "view-all": "Bekijk alles", + "filter-by-unread": "Filter op Ongelezen", + "mark-all-as-read": "Markeer alles als gelezen", + "remove-all-read": "verwijder alle gelezen", + "allow-rename": "Sta Hernoemen toe", + "allowRenamePopup-title": "Sta Hernoemen toe", + "start-day-of-week": "Stel eerste dag van de week in", + "monday": "Maandag", + "tuesday": "Dinsdag", + "wednesday": "Woensdag", + "thursday": "Donderdag", + "friday": "Vrijdag", + "saturday": "Zaterdag", + "sunday": "Zondag" } diff --git a/i18n/oc.i18n.json b/i18n/oc.i18n.json index 9b3299c7..17c9ebca 100644 --- a/i18n/oc.i18n.json +++ b/i18n/oc.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "as descroiat %s dins la checklist %s de %s", "activity-checklist-added": "as apondut a checklist a %s", "activity-checklist-removed": "as tirat la checklist de %s", - "activity-checklist-completed": "as acabat la checklist __checklist__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__", + "activity-checklist-completed": "completed checklist %s of %s", "activity-checklist-uncompleted": "as rendut incomplet la checklist %s de %s", "activity-checklist-item-added": "as apondut un element a la checklist '%s' dins %s", "activity-checklist-item-removed": "as tirat un element a la checklist '%s' dins %s", @@ -152,6 +152,8 @@ "card-spent": "Temps passat", "card-edit-attachments": "Cambiar las pèças jonchas", "card-edit-custom-fields": "Cambiar los camps personalizats", + "card-start-voting": "Start voting", + "card-cancel-voting": "Delete voting and all votes", "card-edit-labels": "Cambiar los labèls", "card-edit-members": "Cambiar los participants", "card-labels-title": "Cambiar l'etiqueta de la carta.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Apondut dempuèi", "cardCustomField-datePopup-title": "Cambiar la data", "cardCustomFieldsPopup-title": "Cambiar los camps personalizats", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Suprimir la carta?", "cardDetailsActionsPopup-title": "Accions sus la carta", "cardLabelsPopup-title": "Etiquetas", @@ -319,6 +329,7 @@ "filter-clear": "Escafar lo filtre", "filter-no-label": "Pas cap d'etiqueta", "filter-no-member": "Pas cap de participant", + "filter-no-assignee": "No assignee", "filter-no-custom-fields": "Pas de camp personalizat", "filter-show-archive": "Show archived lists", "filter-hide-empty": "Hide empty lists", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Salvar", "search": "Cèrca", "rules": "Règlas", - "search-cards": "Search from card/list titles and descriptions on this board", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", "search-example": "Text to search for?", "select-color": "Color causida", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 d3523ecb..449ae3aa 100644 --- a/i18n/pl.i18n.json +++ b/i18n/pl.i18n.json @@ -2,44 +2,44 @@ "accept": "Akceptuj", "act-activity-notify": "Powiadomienia aktywności", "act-addAttachment": "dodał(a) załącznik __attachment__ do karty __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__", - "act-deleteAttachment": "usunął/usunęła załącznik __attachment__ na karcie __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__", + "act-deleteAttachment": "usunął załącznik __attachment__ na karcie __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__", "act-addSubtask": "dodał(a) podzadanie __subtask__ na karcie __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__", "act-addLabel": "dodał(a) etykietę __label__ do karty __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__", "act-addedLabel": "dodał(a) etykietę __label__ do karty __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__", - "act-removeLabel": "usunął/usunęła etykietę __label__ z karty __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__", - "act-removedLabel": "usunął/usunęła etykietę __label__ z karty __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__", + "act-removeLabel": "usunął etykietę __label__ z karty __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__", + "act-removedLabel": "usunął etykietę __label__ z karty __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__", "act-addChecklist": "dodał(a) listę zadań __checklist__ do karty __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__", "act-addChecklistItem": "dodał(a) element listy zadań __checklistItem__ do listy zadań __checklist__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__", - "act-removeChecklist": "usunął/usunęła listę zadań __checklist__ z karty __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__", - "act-removeChecklistItem": "usunął/usunęła element listy zadań __checklistItem__ z listy zadań __checkList__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__", + "act-removeChecklist": "usunął listę zadań __checklist__ z karty __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__", + "act-removeChecklistItem": "usunął element listy zadań __checklistItem__ z listy zadań __checkList__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__", "act-checkedItem": "zaznaczył(a) __checklistItem__ na liście zadań __checklist__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__", "act-uncheckedItem": "odznaczył(a) __checklistItem__ na liście __checklist__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__", "act-completeChecklist": "wykonał(a) wszystkie zadania z listy __checklist__ na karcie __card__ na liście __list__ na diagramie czynności__ na tablicy __board__", "act-uncompleteChecklist": "wycofał(a) ukończenie wykonania listy __checklist__ na karcie __card__ na liście __list__ na diagramie czynności__ na tablicy __board__", "act-addComment": "dodał(a) komentarz na karcie __card__: __comment__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__", "act-editComment": "edytował(a) komentarz na karcie __card__: __comment__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__", - "act-deleteComment": "usunął/usunęła komentarz na karcie __card__: __comment__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__", + "act-deleteComment": "usunął komentarz na karcie __card__: __comment__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__", "act-createBoard": "utworzył(a) tablicę __board__", "act-createSwimlane": "utworzył(a) diagram czynności __swimlane__ na tablicy __board__", "act-createCard": "utworzył(a) kartę __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__", "act-createCustomField": "utworzył(a) niestandardowe pole __customField__ na tablicy __board__", - "act-deleteCustomField": "usunął/usunęła niestandardowe pole __customField__ na tablicy __board__", + "act-deleteCustomField": "usunął niestandardowe pole __customField__ na tablicy __board__", "act-setCustomField": "zmienił(a) niestandardowe pole __customField__: __customFieldValue__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__", "act-createList": "dodał(a) listę __list__ do tablicy __board__", "act-addBoardMember": "dodał(a) użytykownika __member__ do tablicy __board__", "act-archivedBoard": "Tablica __board__ została przeniesiona do Archiwum", - "act-archivedCard": "przeniósł/przeniosła kartę __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__ do Archiwum", - "act-archivedList": "przeniósł/przeniosła listę __list__ na diagramie czynności __swimlane__ na tablicy __board__ do Archiwum", - "act-archivedSwimlane": "przeniósł/przeniosła diagram czynności __swimlane__ na tablicy __board__ do Archiwum", + "act-archivedCard": "przeniósł kartę __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__ do Archiwum", + "act-archivedList": "przeniósł listę __list__ na diagramie czynności __swimlane__ na tablicy __board__ do Archiwum", + "act-archivedSwimlane": "przeniósł diagram czynności __swimlane__ na tablicy __board__ do Archiwum", "act-importBoard": "zaimportował(a) tablicę __board__", "act-importCard": "zaimportował(a) kartę __card__ do listy __list__ na diagramie czynności __swimlane__ na tablicy __board__", "act-importList": "zaimportował(a) listę __list__ na diagram czynności __swimlane__ do tablicy __board__", "act-joinMember": "dodał(a) użytkownika __member__ do karty __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__", - "act-moveCard": "przeniósł/a kartę __card__ na tablicy __board__ z listy __oldList__ na diagramie czynności __oldSwimlane__ na listę __list__ na diagramie czynności __swimlane__", - "act-moveCardToOtherBoard": "przeniósł/a kartę __card__ z listy __oldList__ na diagramie czynności __oldSwimlane__ na tablicy __oldBoard__ do listy __listy__ na diagramie czynności __swimlane__ na tablicy __board__", - "act-removeBoardMember": "usunął/usunęła użytkownika __member__ z tablicy __board__", + "act-moveCard": "przeniósł kartę __card__ na tablicy __board__ z listy __oldList__ na diagramie czynności __oldSwimlane__ na listę __list__ na diagramie czynności __swimlane__", + "act-moveCardToOtherBoard": "przeniósł kartę __card__ z listy __oldList__ na diagramie czynności __oldSwimlane__ na tablicy __oldBoard__ do listy __listy__ na diagramie czynności __swimlane__ na tablicy __board__", + "act-removeBoardMember": "usunął użytkownika __member__ z tablicy __board__", "act-restoredCard": "przywrócił(a) kartę __card__ na listę __list__ na diagram czynności__ na tablicy __board__", - "act-unjoinMember": "usunął/usunęła użytkownika __member__ z karty __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__", + "act-unjoinMember": "usunął użytkownika __member__ z karty __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__", "act-withBoardTitle": "__board__", "act-withCardTitle": "[__board__] __card__", "actions": "Akcje", @@ -63,18 +63,18 @@ "activity-checked-item": "zaznaczono %s w liście zadań%s z %s", "activity-unchecked-item": "odznaczono %s w liście zadań %s z %s", "activity-checklist-added": "dodał(a) listę zadań do %s", - "activity-checklist-removed": "usunął/usunęła listę zadań z %s", - "activity-checklist-completed": "wykonał(a) wszystkie zadania z listy __checklist__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__", + "activity-checklist-removed": "usunął listę zadań z %s", + "activity-checklist-completed": "ukończono listę zadań %s z %s", "activity-checklist-uncompleted": "nieukończono listy zadań %s z %s", "activity-checklist-item-added": "dodał(a) zadanie '%s' do %s", - "activity-checklist-item-removed": "usunął/usunęła element z listy zadań '%s' w %s", + "activity-checklist-item-removed": "usunął element z listy zadań '%s' w %s", "add": "Dodaj", "activity-checked-item-card": "zaznaczono %s w liście zadań %s", "activity-unchecked-item-card": "odznaczono %s w liście zadań %s", "activity-checklist-completed-card": "wykonał(a) wszystkie zadania z listy __checklist__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__", "activity-checklist-uncompleted-card": "wycofano ukończenie listy zadań %s", "activity-editComment": "edytował(a) komentarz %s", - "activity-deleteComment": "usunął/ęła komentarz %s", + "activity-deleteComment": "usunął komentarz %s", "add-attachment": "Dodaj załącznik", "add-board": "Dodaj tablicę", "add-card": "Dodaj kartę", @@ -152,6 +152,8 @@ "card-spent": "Spędzony czas", "card-edit-attachments": "Edytuj załączniki", "card-edit-custom-fields": "Edytuj niestandardowe pola", + "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", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Dodaj załącznik z", "cardCustomField-datePopup-title": "Zmień datę", "cardCustomFieldsPopup-title": "Edytuj niestandardowe pola", + "cardStartVotingPopup-title": "Zacznij głosowanie", + "positiveVoteMembersPopup-title": "Zwolennicy", + "negativeVoteMembersPopup-title": "Przeciwnicy", + "allowNonBoardMembers": "Pozwól na oddawanie anonimowych głosów na publicznej tablicy", + "vote-question": "Pytanie do głosowania", + "vote-public": "Pokaż, kto głosował na wybrane opcje", + "vote-for-it": "za", + "vote-against": "przeciwko", "cardDeletePopup-title": "Usunąć kartę?", "cardDetailsActionsPopup-title": "Czynności kart", "cardLabelsPopup-title": "Etykiety", @@ -319,6 +329,7 @@ "filter-clear": "Usuń filter", "filter-no-label": "Brak etykiety", "filter-no-member": "Brak członków", + "filter-no-assignee": "Nieprzypisane ", "filter-no-custom-fields": "Brak niestandardowych pól", "filter-show-archive": "Pokaż zarchiwizowane listy", "filter-hide-empty": "Ukryj puste listy", @@ -338,8 +349,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", @@ -440,7 +449,7 @@ "save": "Zapisz", "search": "Wyszukaj", "rules": "Reguły", - "search-cards": "Szukaj w tytułach kart/list oraz opisach na tej tablicy", + "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", @@ -598,11 +607,11 @@ "source-board": "Tablica źródłowa", "no-parent": "Nie pokazuj rodzica", "activity-added-label": "dodał(a) etykietę '%s' z '%s'", - "activity-removed-label": "usunął/usunęła etykietę '%s' z '%s'", - "activity-delete-attach": "usunął/usunęła załącznik z %s", + "activity-removed-label": "usunął etykietę '%s' z '%s'", + "activity-delete-attach": "usunął załącznik z %s", "activity-added-label-card": "dodał(a) etykietę '%s'", - "activity-removed-label-card": "usunął/usunęła etykietę '%s'", - "activity-delete-attach-card": "usunął/usunęła załącznik", + "activity-removed-label-card": "usunął etykietę '%s'", + "activity-delete-attach-card": "usunął załącznik", "activity-set-customfield": "ustawiono niestandardowe pole '%s' do '%s' na '%s'", "activity-unset-customfield": "wyczyszczono niestandardowe pole '%s' na '%s'", "r-rule": "Reguła", @@ -618,7 +627,7 @@ "r-is": "jest", "r-is-moved": "jest przenoszona", "r-added-to": "dodana do", - "r-removed-from": "usunął/usunęła z", + "r-removed-from": "usunął z", "r-the-board": "tablicy", "r-list": "lista", "set-filter": "Ustaw filtr", @@ -665,6 +674,7 @@ "r-of-checklist": "z listy zadań", "r-send-email": "Wyślij wiadomość email", "r-to": "do", + "r-of": "z", "r-subject": "temat", "r-rule-details": "Szczegóły reguł", "r-d-move-to-top-gen": "Przenieś kartę na górę tej listy", @@ -709,7 +719,7 @@ "r-df-end-at": "zakończenie", "r-df-received-at": "odebrano", "r-to-current-datetime": "o aktualnej dacie/godzinie", - "r-remove-value-from": "usunął/usunęła wartość z", + "r-remove-value-from": "usunął wartość z", "ldap": "LDAP", "oauth2": "OAuth2", "cas": "CAS", @@ -756,5 +766,23 @@ "assignee": "Przypisujący", "cardAssigneesPopup-title": "Przypisujący", "addmore-detail": "Dodaj bardziej szczegółowy opis", - "show-on-card": "Pokaż na karcie" + "show-on-card": "Pokaż na karcie", + "new": "Nowy", + "editUserPopup-title": "Edytuj użytkownika", + "newUserPopup-title": "Nowy użytkownik", + "notifications": "Powiadomienia", + "view-all": "Wyświetl wszystko", + "filter-by-unread": "Filtruj nieprzeczytane", + "mark-all-as-read": "Zaznacz wszystkie jako przeczytane", + "remove-all-read": "Usuń wszystkie przeczytane", + "allow-rename": "Zezwól na zmianę nazwy", + "allowRenamePopup-title": "Zezwól na zmianę nazwy", + "start-day-of-week": "Wybierz pierwszy dzień tygodnia", + "monday": "Poniedziałek", + "tuesday": "Wtorek", + "wednesday": "Środa", + "thursday": "Czwartek", + "friday": "Piątek", + "saturday": "Sobota", + "sunday": "Niedziela" } diff --git a/i18n/pt-BR.i18n.json b/i18n/pt-BR.i18n.json index 5fd94159..70c7cccf 100644 --- a/i18n/pt-BR.i18n.json +++ b/i18n/pt-BR.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "desmarcado %s na lista de verificação %s de %s", "activity-checklist-added": "Adicionada lista de verificação a %s", "activity-checklist-removed": "removida a lista de verificação de %s", - "activity-checklist-completed": "completada a lista de verificação __checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__", + "activity-checklist-completed": "listas de verificação completas %s de %s", "activity-checklist-uncompleted": "não-completada a lista de verificação %s de %s", "activity-checklist-item-added": "adicionado o item de lista de verificação para '%s' em %s", "activity-checklist-item-removed": "removida o item de lista de verificação de '%s' na %s", @@ -152,6 +152,8 @@ "card-spent": "Tempo Gasto", "card-edit-attachments": "Editar anexos", "card-edit-custom-fields": "Editar campos customizados", + "card-start-voting": "Iniciar votação", + "card-cancel-voting": "Excluir votação e todos os votos", "card-edit-labels": "Editar etiquetas", "card-edit-members": "Editar membros", "card-labels-title": "Alterar etiquetas do cartão.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Anexar a partir de", "cardCustomField-datePopup-title": "Mudar data", "cardCustomFieldsPopup-title": "Editar campos customizados", + "cardStartVotingPopup-title": "Iniciar uma votação", + "positiveVoteMembersPopup-title": "Proponentes", + "negativeVoteMembersPopup-title": "Oponentes", + "allowNonBoardMembers": "Permitir voto anônimo em quadro público", + "vote-question": "Questão em votação", + "vote-public": "Mostrar quem votou no quê", + "vote-for-it": "a favor", + "vote-against": "contra", "cardDeletePopup-title": "Excluir Cartão?", "cardDetailsActionsPopup-title": "Ações do cartão", "cardLabelsPopup-title": "Etiquetas", @@ -182,7 +192,7 @@ "changeLanguagePopup-title": "Alterar Idioma", "changePasswordPopup-title": "Alterar Senha", "changePermissionsPopup-title": "Alterar Permissões", - "changeSettingsPopup-title": "Altera configurações", + "changeSettingsPopup-title": "Alterar configurações", "subtasks": "Subtarefas", "checklists": "Listas de verificação", "click-to-star": "Marcar quadro como favorito.", @@ -319,6 +329,7 @@ "filter-clear": "Limpar filtro", "filter-no-label": "Sem etiquetas", "filter-no-member": "Sem membros", + "filter-no-assignee": "Não atribuído", "filter-no-custom-fields": "Não há campos customizados", "filter-show-archive": "Mostrar listas arquivadas", "filter-hide-empty": "Esconder listas vazias", @@ -338,8 +349,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", @@ -440,7 +449,7 @@ "save": "Salvar", "search": "Buscar", "rules": "Regras", - "search-cards": "Procurar por título e descrição de cartão/lista neste quadro ", + "search-cards": "Buscar por título, descrição e campos customizados de cartão/lista neste quadro", "search-example": "Texto para procurar", "select-color": "Selecionar Cor", "set-wip-limit-value": "Defina um limite máximo para o número de tarefas nesta lista", @@ -665,6 +674,7 @@ "r-of-checklist": "da lista de verificação", "r-send-email": "Enviar um e-mail", "r-to": "para", + "r-of": "de", "r-subject": "assunto", "r-rule-details": "Detalhes da regra", "r-d-move-to-top-gen": "Mover cartão para o topo da sua lista", @@ -756,5 +766,23 @@ "assignee": "Administrador", "cardAssigneesPopup-title": "Administrador", "addmore-detail": "Adicionar descrição detalhada", - "show-on-card": "Mostrar no Cartão" + "show-on-card": "Mostrar no Cartão", + "new": "Novo", + "editUserPopup-title": "Editar usuário", + "newUserPopup-title": "Novo usuário", + "notifications": "Notificações", + "view-all": "Ver tudo", + "filter-by-unread": "Filtrar não lidas", + "mark-all-as-read": "Marcar todas como lidas", + "remove-all-read": "Remover todas lidas", + "allow-rename": "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 b9f78f88..93a600f1 100644 --- a/i18n/pt.i18n.json +++ b/i18n/pt.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "desmarcou %s na lista de verificação %s de %s", "activity-checklist-added": "adicionou a lista de verificação a %s", "activity-checklist-removed": "removeu a lista de verificação de %s", - "activity-checklist-completed": "completou a lista de verificação __checklist__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__", + "activity-checklist-completed": "completed checklist %s of %s", "activity-checklist-uncompleted": "descompletou a lista de verificação %s de %s", "activity-checklist-item-added": "adicionou o item a '%s' em %s", "activity-checklist-item-removed": "removeu o item de '%s' na %s", @@ -152,6 +152,8 @@ "card-spent": "Tempo Gasto", "card-edit-attachments": "Editar anexos", "card-edit-custom-fields": "Editar campos personalizados", + "card-start-voting": "Start voting", + "card-cancel-voting": "Delete voting and all votes", "card-edit-labels": "Editar etiquetas", "card-edit-members": "Editar membros", "card-labels-title": "Alterar as etiquetas do cartão.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Anexar a partir de", "cardCustomField-datePopup-title": "Alterar a data", "cardCustomFieldsPopup-title": "Editar campos personalizados", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Apagar Cartão?", "cardDetailsActionsPopup-title": "Acções do Cartão", "cardLabelsPopup-title": "Etiquetas", @@ -319,6 +329,7 @@ "filter-clear": "Limpar filtro", "filter-no-label": "Sem etiquetas", "filter-no-member": "Sem membros", + "filter-no-assignee": "No assignee", "filter-no-custom-fields": "Sem Campos Personalizados", "filter-show-archive": "Mostrar listas arquivadas", "filter-hide-empty": "Ocultar listas vazias", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Guardar", "search": "Procurar", "rules": "Regras", - "search-cards": "Search from card/list titles and descriptions on this board", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", "search-example": "Texto a procurar?", "select-color": "Seleccionar Cor", "set-wip-limit-value": "Defina um limite máximo para o número de tarefas nesta lista", @@ -665,6 +674,7 @@ "r-of-checklist": "da lista de verificação", "r-send-email": "Enviar um e-mail", "r-to": "para", + "r-of": "of", "r-subject": "assunto", "r-rule-details": "Detalhes da regra", "r-d-move-to-top-gen": "Mover cartão para o topo da sua lista", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 04f9904a..c791357d 100644 --- a/i18n/ro.i18n.json +++ b/i18n/ro.i18n.json @@ -1,5 +1,5 @@ { - "accept": "Accept", + "accept": "Aceptă", "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__", @@ -42,33 +42,33 @@ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", "act-withBoardTitle": "__board__", "act-withCardTitle": "[__board__] __card__", - "actions": "Actions", - "activities": "Activities", - "activity": "Activity", - "activity-added": "added %s to %s", + "actions": "Acțiuni", + "activities": "Activități", + "activity": "Activitate", + "activity-added": "s-a adăugat %s la %s", "activity-archived": "%s moved to Archive", - "activity-attached": "attached %s to %s", - "activity-created": "created %s", + "activity-attached": "s-a atașat %s la %s", + "activity-created": "s-a creat %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-excluded": "s-a exclus %s din %s", + "activity-imported": "s-a importat %s în %s din %s", + "activity-imported-board": "s-a importat %s din %s", + "activity-joined": "ai devenit membru %s", + "activity-moved": "s-a mutat %s din %s în%s", "activity-on": "on %s", - "activity-removed": "removed %s from %s", - "activity-sent": "sent %s to %s", - "activity-unjoined": "unjoined %s", + "activity-removed": "s-a șters %s din %s", + "activity-sent": "s-a trimis %s către%s", + "activity-unjoined": "nu mai ești membru al %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 __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "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", + "add": "Adaugă", "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__", @@ -82,20 +82,20 @@ "add-subtask": "Add Subtask", "add-checklist": "Add Checklist", "add-checklist-item": "Add an item to checklist", - "add-cover": "Add Cover", + "add-cover": "Adaugă Decor", "add-label": "Add Label", "add-list": "Add List", - "add-members": "Add Members", - "added": "Added", - "addMemberPopup-title": "Members", + "add-members": "Adaugă Membrii", + "added": "S-a adăugat", + "addMemberPopup-title": "Membrii", "admin": "Admin", - "admin-desc": "Can view and edit cards, remove members, and change settings for the board.", + "admin-desc": "Poate vedea și edita carduri, șterge membrii, și schimba setările tablei.", "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", + "all-boards": "Toate tablele", + "and-n-other-card": "Și __count__ alt card", + "and-n-other-card_plural": "Și __count__ alte carduri", "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", @@ -106,54 +106,56 @@ "archive-swimlane": "Move Swimlane to Archive", "archive-selection": "Move selection to Archive", "archiveBoardPopup-title": "Move Board to Archive?", - "archived-items": "Archive", + "archived-items": "Arhivă", "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", + "assign-member": "Atribuie unui membru", + "attached": "s-a atașat", "attachment": "Ataşament", - "attachment-delete-pop": "Deleting an attachment is permanent. There is no undo.", - "attachmentDeletePopup-title": "Delete Attachment?", + "attachment-delete-pop": "Ștergerea unui atașament este permanentă. Nu există recuperare.", + "attachmentDeletePopup-title": "Șterge Atașament?", "attachments": "Ataşamente", "auto-watch": "Automatically watch boards when they are created", "avatar-too-big": "The avatar is too large (70KB max)", "back": "Înapoi", - "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", + "board-change-color": "Schimbă culoare", + "board-nb-stars": "%s stele", + "board-not-found": "Tabla nu a fost găsită", + "board-private-info": "Această tabla va fi <strong>privată</strong>.", + "board-public-info": "Această tabla va fi <strong>publică</strong>.", + "boardChangeColorPopup-title": "Schimbă Fundalul Tablei", + "boardChangeTitlePopup-title": "Redenumește Tabla", + "boardChangeVisibilityPopup-title": "Schimbă Vizibilitatea", "boardChangeWatchPopup-title": "Change Watch", "boardMenuPopup-title": "Board Settings", "boardChangeViewPopup-title": "Board View", - "boards": "Boards", + "boards": "Table", "board-view": "Board View", "board-view-cal": "Calendar", "board-view-swimlanes": "Swimlanes", "board-view-collapse": "Collapse", "board-view-lists": "Liste", "bucket-example": "Like “Bucket List” for example", - "cancel": "Cancel", + "cancel": "Anulează", "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-comments-title": "Acest card are %s commentariu.", + "card-delete-notice": "Ștergerea este permanentă. Se vor pierde toate acțiunile asociate acestui card.", + "card-delete-pop": "Toate acțiunile vor fi șterse din jurnalul de activități si nu vei mai putea redeschide cardul. Nu există recuperare.", "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-attachments": "Editează atașamente", "card-edit-custom-fields": "Edit custom fields", - "card-edit-labels": "Edit labels", - "card-edit-members": "Edit members", + "card-start-voting": "Start voting", + "card-cancel-voting": "Delete voting and all votes", + "card-edit-labels": "Editează etichete", + "card-edit-members": "Editează membrii", "card-labels-title": "Change the labels for the card.", "card-members-title": "Add or remove members of the board from the card.", "card-start": "Start", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Attach From", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Delete Card?", "cardDetailsActionsPopup-title": "Card Actions", "cardLabelsPopup-title": "Labels", @@ -319,6 +329,7 @@ "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", @@ -338,8 +349,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", @@ -440,7 +449,7 @@ "save": "Salvează", "search": "Caută", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "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", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 6027b248..16458866 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": "завершил контрольный список __checklist__ в карточке __card__ в списке __list__ на дорожке __swimlane__ доски __board__", + "activity-checklist-completed": "завершил контрольный список %s в %s", "activity-checklist-uncompleted": "вновь открыл контрольный список %s в %s", "activity-checklist-item-added": "добавил пункт в контрольный список '%s' в карточке %s", "activity-checklist-item-removed": "удалил пункт из контрольного списка '%s' в карточке %s", @@ -152,6 +152,8 @@ "card-spent": "Затраченное время", "card-edit-attachments": "Изменить вложения", "card-edit-custom-fields": "Редактировать настраиваемые поля", + "card-start-voting": "Запустить голосование", + "card-cancel-voting": "Отменить голосование и удалить голоса", "card-edit-labels": "Изменить метку", "card-edit-members": "Изменить участников", "card-labels-title": "Изменить метки для этой карточки.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Прикрепить из", "cardCustomField-datePopup-title": "Изменить дату", "cardCustomFieldsPopup-title": "редактировать настраиваемые поля", + "cardStartVotingPopup-title": "Голосовать", + "positiveVoteMembersPopup-title": "Сторонники", + "negativeVoteMembersPopup-title": "Противники", + "allowNonBoardMembers": "Разрешить анонимное голосование на доступной всем доске", + "vote-question": "Вопрос для голосования", + "vote-public": "Показать кто как голосовал", + "vote-for-it": "за", + "vote-against": "против", "cardDeletePopup-title": "Удалить карточку?", "cardDetailsActionsPopup-title": "Действия в карточке", "cardLabelsPopup-title": "Метки", @@ -309,7 +319,7 @@ "list-sort-by": "Сортировать список по:", "list-label-modifiedAt": "Время последнего доступа", "list-label-title": "Название списка", - "list-label-sort": "Your Manual Order", + "list-label-sort": "Установленный вами порядок", "list-label-short-modifiedAt": "(L)", "list-label-short-title": "(N)", "list-label-short-sort": "(M)", @@ -319,6 +329,7 @@ "filter-clear": "Очистить фильтр", "filter-no-label": "Нет метки", "filter-no-member": "Нет участников", + "filter-no-assignee": "Не применимо", "filter-no-custom-fields": "Нет настраиваемых полей", "filter-show-archive": "Показать архивные списки", "filter-hide-empty": "Скрыть пустые списки", @@ -338,8 +349,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” и скопируйте полученный текст", @@ -440,7 +449,7 @@ "save": "Сохранить", "search": "Поиск", "rules": "Правила", - "search-cards": "Искать в названиях карточек, списков и описаниях карточек на этой доске", + "search-cards": "Поиск в названиях карточек/списков, описаниях и пользовательских полях на этой доске", "search-example": "Искать текст?", "select-color": "Выбрать цвет", "set-wip-limit-value": "Устанавливает ограничение на максимальное количество задач в этом списке", @@ -665,6 +674,7 @@ "r-of-checklist": "контрольного списка", "r-send-email": "Отправить письмо", "r-to": "кому", + "r-of": "из", "r-subject": "тема", "r-rule-details": "Содержание правила", "r-d-move-to-top-gen": "Переместить карточку в начало текущего списка", @@ -743,7 +753,7 @@ "almostdue": "текущий срок выполнения %s приближается", "pastdue": "текущий срок выполнения %s прошел", "duenow": "текущий срок выполнения %s сегодня", - "act-newDue": "__list__/__card__ has 1st due reminder [__board__]", + "act-newDue": "__list__/__card__ содержит 1-ое напоминание о сроке [__board__]", "act-withDue": "__list__/__card__ напоминания о сроке выполнения [__board__]", "act-almostdue": "напомнил, что скоро завершается срок выполнения (__timeValue__) карточки __card__", "act-pastdue": "напомнил, что срок выполнения (__timeValue__) карточки __card__ прошел", @@ -752,9 +762,27 @@ "delete-user-confirm-popup": "Вы уверены, что хотите удалить аккаунт? Данное действие необратимо.", "accounts-allowUserDelete": "Разрешить пользователям удалять собственные аккаунты", "hide-minicard-label-text": "Скрыть текст меток на карточках", - "show-desktop-drag-handles": "Show desktop drag handles", + "show-desktop-drag-handles": "Показать ярлыки для перетаскивания", "assignee": "Исполнитель", "cardAssigneesPopup-title": "Исполнитель", "addmore-detail": "Добавить более детальное описание", - "show-on-card": "Показать на карточке" + "show-on-card": "Показать на карточке", + "new": "Новый", + "editUserPopup-title": "Редактировать пользователя", + "newUserPopup-title": "Новый пользователь", + "notifications": "Уведомления", + "view-all": "Показать все", + "filter-by-unread": "Фильтр по непрочитанным", + "mark-all-as-read": "Отметить все как прочитанные", + "remove-all-read": "Удалить все прочитанные", + "allow-rename": "Разрешить переименование", + "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 b8e41076..b07930c4 100644 --- a/i18n/sl.i18n.json +++ b/i18n/sl.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "odkljukal %s na kontrolnem seznamu %s od %s", "activity-checklist-added": "dodal kontrolni seznam na %s", "activity-checklist-removed": "odstranil kontrolni seznam iz %s", - "activity-checklist-completed": "dokončal kontrolni seznam __checklist__ na kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__", + "activity-checklist-completed": "completed checklist %s of %s", "activity-checklist-uncompleted": "nedokončal kontrolni seznam %s od %s", "activity-checklist-item-added": "dodal postavko kontrolnega seznama na '%s' v %s", "activity-checklist-item-removed": "odstranil postavko kontrolnega seznama iz '%s' v %s", @@ -152,6 +152,8 @@ "card-spent": "Porabljen čas", "card-edit-attachments": "Uredi priponke", "card-edit-custom-fields": "Uredi poljubna polja", + "card-start-voting": "Start voting", + "card-cancel-voting": "Delete voting and all votes", "card-edit-labels": "Uredi oznake", "card-edit-members": "Uredi člane", "card-labels-title": "Spremeni oznake za kartico.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Pripni od", "cardCustomField-datePopup-title": "Spremeni datum", "cardCustomFieldsPopup-title": "Uredi poljubna polja", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Briši kartico?", "cardDetailsActionsPopup-title": "Dejanja kartice", "cardLabelsPopup-title": "Oznake", @@ -319,6 +329,7 @@ "filter-clear": "Počisti filter", "filter-no-label": "Brez oznake", "filter-no-member": "Brez člana", + "filter-no-assignee": "No assignee", "filter-no-custom-fields": "Brez poljubnih polj", "filter-show-archive": "Prikaži arhivirane sezname", "filter-hide-empty": "Skrij prazne sezname", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Shrani", "search": "Išči", "rules": "Pravila", - "search-cards": "Išči po imenih seznamov/kartic in opisov v tej tabli", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", "search-example": "Besedilo za iskanje?", "select-color": "Izberi barvo", "set-wip-limit-value": "Omeji maksimalno število opravil v seznamu", @@ -665,6 +674,7 @@ "r-of-checklist": "kontrolnega seznama", "r-send-email": "Pošlji e-pošto", "r-to": "naslovnik", + "r-of": "of", "r-subject": "zadeva", "r-rule-details": "Podrobnosti pravila", "r-d-move-to-top-gen": "Premakni kartico na vrh pripadajočega sezama", @@ -756,5 +766,23 @@ "assignee": "Dodeljen član", "cardAssigneesPopup-title": "Dodeljen član", "addmore-detail": "Dodaj podrobnejši opis", - "show-on-card": "Prikaži na kartici" + "show-on-card": "Prikaži na kartici", + "new": "Novo", + "editUserPopup-title": "Uredi uporabnika", + "newUserPopup-title": "Nov uporabnik", + "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", + "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 687435e0..b0d9638b 100644 --- a/i18n/sr.i18n.json +++ b/i18n/sr.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "lista je dodata u %s", "activity-checklist-removed": "removed a checklist from %s", - "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "activity-checklist-completed": "završena čeklista %s od %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", @@ -75,34 +75,34 @@ "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "activity-editComment": "izmenjen komentar", "activity-deleteComment": "izbrisan komentar", - "add-attachment": "Add Attachment", + "add-attachment": "Dodaj prilog", "add-board": "Add Board", - "add-card": "Add Card", + "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,29 +129,31 @@ "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", "card-edit-custom-fields": "Edit custom fields", + "card-start-voting": "Započni glasanje", + "card-cancel-voting": "Obriši glasanje i sve glasove", "card-edit-labels": "Uredi natpise", "card-edit-members": "Uredi članove", "card-labels-title": "Promeni natpis na kartici.", @@ -159,128 +161,136 @@ "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", - "cardDeletePopup-title": "Delete Card?", + "cardStartVotingPopup-title": "Novo glasanje", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Pitanje za glasanje", + "vote-public": "Show who voted what", + "vote-for-it": "za", + "vote-against": "protiv", + "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?", - "description": "Description", + "deleteLabelPopup-title": "Obrisati oznaku?", + "description": "Opis", "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", + "discard": "Odbaci", + "done": "Završeno", + "download": "Preuzmi", + "edit": "Uredi", + "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", @@ -298,9 +308,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", @@ -316,33 +326,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", @@ -350,48 +359,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", @@ -409,7 +418,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>.", @@ -428,21 +437,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", - "search-cards": "Pretraži naslove sa kartica/listi i opisa na ovoj tabli", - "search-example": "Text to search for?", - "select-color": "Select Color", + "rules": "Pravila", + "search-cards": "Pretraži u naslovima kartica/listi, opsima i proizvoljnim poljima sa ove table", + "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", @@ -474,7 +483,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", @@ -491,22 +500,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", @@ -514,8 +523,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", @@ -533,8 +542,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", @@ -548,16 +557,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", @@ -569,10 +578,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.", @@ -580,7 +589,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", @@ -605,22 +614,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", @@ -636,7 +645,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", @@ -648,11 +657,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", @@ -661,30 +670,31 @@ "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-of": "of", + "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", @@ -713,11 +723,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", @@ -729,8 +739,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__)", @@ -753,8 +763,26 @@ "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" + "show-on-card": "Prikaži na kartici", + "new": "Novo", + "editUserPopup-title": "Uredi korisnika", + "newUserPopup-title": "Novi korisnik", + "notifications": "Obaveštenja", + "view-all": "Prikaži sve", + "filter-by-unread": "Filtriraj nepročitano", + "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", + "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 bd347cb4..97a7b1f1 100644 --- a/i18n/sv.i18n.json +++ b/i18n/sv.i18n.json @@ -17,14 +17,14 @@ "act-completeChecklist": "slutförde checklista __checklist__ i kort __card__ i lista __list__ i simbana __swimlane__ på anslagstavla __board__", "act-uncompleteChecklist": "ofullbordade checklista __checklist__ på kort __card__ i lista __list__ i simbana __swimlane__ på anslagstavla __board__", "act-addComment": "kommenterade på kort __card__: __comment__ i lista __list__ i simbana __swimlane__ på anslagstavla __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-editComment": "redigerade kommentar på kort __card__: __comment__ i listan __list__ i simbana __swimlane__ i brädet __board__", + "act-deleteComment": "raderade kommentar på kort __card__: __comment__ i listan __list__ i simbana __swimlane__ i brädet __board__", "act-createBoard": "skapade anslagstavla __board__", "act-createSwimlane": "skapade simbana __swimlane__ till anslagstavla __board__", "act-createCard": "skapade kort __card__ i lista __list__ i simbana __swimlane__ på anslagstavla __board__", "act-createCustomField": "skapade anpassat fält __customField__ på anslagstavlan __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-deleteCustomField": "raderade anpasssat fält __customField__ på bräde __board__", + "act-setCustomField": "redigerade anpassat fält __customField__: __customFieldValue__ på kort __card__ i lista __list__ i simbana __swimlane__ på bräde __board__", "act-createList": "lade till lista __list__ på anslagstavla __board__", "act-addBoardMember": "lade till medlem __member__ på anslagstavla __board__", "act-archivedBoard": "Anslagstavla __board__ flyttad till arkivet", @@ -64,7 +64,7 @@ "activity-unchecked-item": "okryssad %s i checklistan %s av %s", "activity-checklist-added": "lade kontrollista till %s", "activity-checklist-removed": "tog bort en checklista från %s", - "activity-checklist-completed": "slutförde checklista __checklist__ i kort __card__ i lista __list__ i simbana __swimlane__ på anslagstavla __board__", + "activity-checklist-completed": "completed checklist %s of %s", "activity-checklist-uncompleted": "inte slutfört checklistan %s av %s", "activity-checklist-item-added": "lade checklista objekt till '%s' i %s", "activity-checklist-item-removed": "tog bort en checklista objekt från \"%s\" i %s", @@ -137,7 +137,7 @@ "board-view": "Anslagstavelsvy", "board-view-cal": "Kalender", "board-view-swimlanes": "Simbanor", - "board-view-collapse": "Collapse", + "board-view-collapse": "Kollapsa", "board-view-lists": "Listor", "bucket-example": "Gilla \"att-göra-innan-jag-dör-lista\" till exempel", "cancel": "Avbryt", @@ -152,6 +152,8 @@ "card-spent": "Spenderad tid", "card-edit-attachments": "Redigera bilaga", "card-edit-custom-fields": "Redigera anpassade fält", + "card-start-voting": "Start voting", + "card-cancel-voting": "Delete voting and all votes", "card-edit-labels": "Redigera etiketter", "card-edit-members": "Redigera medlemmar", "card-labels-title": "Ändra etiketter för kortet.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Bifoga från", "cardCustomField-datePopup-title": "Ändra datum", "cardCustomFieldsPopup-title": "Redigera anpassade fält", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Ta bort kort?", "cardDetailsActionsPopup-title": "Kortåtgärder", "cardLabelsPopup-title": "Etiketter", @@ -319,6 +329,7 @@ "filter-clear": "Rensa filter", "filter-no-label": "Ingen etikett", "filter-no-member": "Ingen medlem", + "filter-no-assignee": "No assignee", "filter-no-custom-fields": "Inga anpassade fält", "filter-show-archive": "Visa arkiverade listor", "filter-hide-empty": "Dölj tomma listor", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Spara", "search": "Sök", "rules": "Regler", - "search-cards": "Sök från kort-/listtitlar och beskrivningar på denna anslagstavla", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", "search-example": "Text att söka efter?", "select-color": "Välj färg", "set-wip-limit-value": "Ange en gräns för det maximala antalet uppgifter i den här listan", @@ -530,7 +539,7 @@ "bidirectional-webhooks": "Two-Way Webhooks", "outgoingWebhooksPopup-title": "Utgående Webhookar", "boardCardTitlePopup-title": "Korttitelfiler", - "disable-webhook": "Disable This Webhook", + "disable-webhook": "Avaktivera denna webhook", "global-webhook": "Globala webhooks", "new-outgoing-webhook": "Ny utgående webhook", "no-name": "(Okänd)", @@ -583,9 +592,9 @@ "default": "Standard", "queue": "Kö", "subtask-settings": "Deluppgift inställningar", - "card-settings": "Card Settings", + "card-settings": "Kortinställningar", "boardSubtaskSettingsPopup-title": "Deluppgiftsinställningar för anslagstavla", - "boardCardSettingsPopup-title": "Card Settings", + "boardCardSettingsPopup-title": "Kortinställningar", "deposit-subtasks-board": "Insättnings deluppgifter på denna anslagstavla:", "deposit-subtasks-list": "Landningslista för deluppgifter deponerade här:", "show-parent-in-minicard": "Visa förälder i minikort:", @@ -665,6 +674,7 @@ "r-of-checklist": "av checklistan", "r-send-email": "Skicka ett e-postmeddelande", "r-to": "till", + "r-of": "of", "r-subject": "änme", "r-rule-details": "Regeldetaljer", "r-d-move-to-top-gen": "Flytta kort till toppen av sin lista", @@ -743,18 +753,36 @@ "almostdue": "aktuell förfallotid %s närmar sig", "pastdue": "aktuell förfallotid %s är förbi", "duenow": "aktuell förfallotid %s är idag", - "act-newDue": "__list__/__card__ has 1st due reminder [__board__]", - "act-withDue": "__list__/__card__ due reminders [__board__]", + "act-newDue": "__list__/__card__ har en 1:a påminnelse [__board__]", + "act-withDue": "__list__/__card__ påminnelser [__board__]", "act-almostdue": "påminde om den aktuella förfallotiden (__timeValue__) av __card__ närmar sig", "act-pastdue": "påminde om den aktuella förfallotiden (__timeValue__) av __card__ är förbi", "act-duenow": "påminde om den aktuella förfallotiden (__timeValue__) av __card__ är nu", - "act-atUserComment": "You were mentioned in [__board__] __list__/__card__", + "act-atUserComment": "Du omnämndes i [__board__] __list__/__card__", "delete-user-confirm-popup": "Är du säker på att du vill ta bort det här kontot? Det går inte att ångra sig.", "accounts-allowUserDelete": "Tillåt användare att själv ta bort sina konton", - "hide-minicard-label-text": "Hide minicard label text", - "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" + "hide-minicard-label-text": "Dölj etikett för minikort", + "show-desktop-drag-handles": "Visa greppytor i desktop", + "assignee": "Tilldelad till", + "cardAssigneesPopup-title": "Tilldelad till", + "addmore-detail": "Lägg till detaljerad beskrivning", + "show-on-card": "Visa på kort", + "new": "Ny", + "editUserPopup-title": "Redigera användare", + "newUserPopup-title": "Ny användare", + "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", + "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 8a5c3490..242b3f17 100644 --- a/i18n/sw.i18n.json +++ b/i18n/sw.i18n.json @@ -64,7 +64,7 @@ "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 __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "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", @@ -152,6 +152,8 @@ "card-spent": "Muda uliotumika", "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.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Attach From", "cardCustomField-datePopup-title": "Badilisha tarehe", "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Delete Card?", "cardDetailsActionsPopup-title": "Card Actions", "cardLabelsPopup-title": "Labels", @@ -319,6 +329,7 @@ "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", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Save", "search": "Search", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "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", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 d3eeba61..dd66c13e 100644 --- a/i18n/ta.i18n.json +++ b/i18n/ta.i18n.json @@ -64,7 +64,7 @@ "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 __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "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", @@ -152,6 +152,8 @@ "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.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Attach From", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Delete Card?", "cardDetailsActionsPopup-title": "Card Actions", "cardLabelsPopup-title": "Labels", @@ -319,6 +329,7 @@ "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", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "சேமி ", "search": "தேடு ", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "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", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 e08fad9b..dad60012 100644 --- a/i18n/th.i18n.json +++ b/i18n/th.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "รายการถูกเพิ่มไป %s", "activity-checklist-removed": "removed a checklist from %s", - "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "activity-checklist-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", @@ -152,6 +152,8 @@ "card-spent": "Spent Time", "card-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": "แก้ไขป้ายกำกับ", "card-edit-members": "แก้ไขสมาชิก", "card-labels-title": "เปลี่ยนป้ายกำกับของการ์ด", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "แนบจาก", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "ลบการ์ดนี้หรือไม่", "cardDetailsActionsPopup-title": "การดำเนินการการ์ด", "cardLabelsPopup-title": "ป้ายกำกับ", @@ -319,6 +329,7 @@ "filter-clear": "ล้างตัวกรอง", "filter-no-label": "ไม่มีฉลาก", "filter-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", @@ -338,8 +349,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 และคัดลอกข้อความจากนั้น", @@ -440,7 +449,7 @@ "save": "บันทึก", "search": "ค้นหา", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "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", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 ed07b2a4..657b4dcf 100644 --- a/i18n/tr.i18n.json +++ b/i18n/tr.i18n.json @@ -1,8 +1,8 @@ { "accept": "Kabul Et", "act-activity-notify": "Etkinlik Bildirimi", - "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": "__attachment__ eklentisi, __swimlane__ kulvarındaki __list__ listesindeki __board__ panosundaki __card__ kartına eklendi.", + "act-deleteAttachment": "__attachment__ eklentisi, __swimlane__ kulvarındaki __list__ listesindeki __board__ panosundaki __card__ kartından silindi.", "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__", @@ -64,7 +64,7 @@ "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "%s içine yapılacak listesi ekledi", "activity-checklist-removed": "%s Tarafından yapılacaklar listesi silinmiştir", - "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "activity-checklist-completed": "completed checklist %s of %s", "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "%s içinde %s yapılacak listesine öğe ekledi", "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", @@ -152,6 +152,8 @@ "card-spent": "Harcanan Zaman", "card-edit-attachments": "Ek dosyasını düzenle", "card-edit-custom-fields": "Özel alanları düzenle", + "card-start-voting": "Start voting", + "card-cancel-voting": "Delete voting and all votes", "card-edit-labels": "Etiketleri düzenle", "card-edit-members": "Üyeleri düzenle", "card-labels-title": "Bu kart için etiketleri düzenle", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Eklenme", "cardCustomField-datePopup-title": "Tarihi değiştir", "cardCustomFieldsPopup-title": "Özel alanları düzenle", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Kart Silinsin mi?", "cardDetailsActionsPopup-title": "Kart işlemleri", "cardLabelsPopup-title": "Etiketler", @@ -319,6 +329,7 @@ "filter-clear": "Filtreyi temizle", "filter-no-label": "Etiket yok", "filter-no-member": "Üye yok", + "filter-no-assignee": "No assignee", "filter-no-custom-fields": "Hiç özel alan yok", "filter-show-archive": "Show archived lists", "filter-hide-empty": "Hide empty lists", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Kaydet", "search": "Arama", "rules": "Kurallar", - "search-cards": "Search from card/list titles and descriptions on this board", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", "search-example": "Aranılacak metin?", "select-color": "Renk Seç", "set-wip-limit-value": "Bu listedeki en fazla öğe sayısı için bir sınır belirleyin", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "E-Posta Gönder", "r-to": "to", + "r-of": "of", "r-subject": "Konu", "r-rule-details": "Kural Detayları", "r-d-move-to-top-gen": "Kartı listesinin en üstüne taşı", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "show-on-card": "Show on Card", + "new": "New", + "editUserPopup-title": "Edit User", + "newUserPopup-title": "New User", + "notifications": "Bildirim", + "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", + "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 ec4ac91a..2938ee8f 100644 --- a/i18n/uk.i18n.json +++ b/i18n/uk.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "Додано контрольний список до %s", "activity-checklist-removed": "removed a checklist from %s", - "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "activity-checklist-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", @@ -152,6 +152,8 @@ "card-spent": "Витрачено часу", "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": "Редагувати мітки", "card-edit-members": "Редагувати учасників", "card-labels-title": "Change the labels for the card.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Attach From", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Видалити картку?", "cardDetailsActionsPopup-title": "Card Actions", "cardLabelsPopup-title": "Labels", @@ -319,6 +329,7 @@ "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", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Save", "search": "Search", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "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", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "Об'єкт", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 a0a1cb84..a3ec456a 100644 --- a/i18n/vi.i18n.json +++ b/i18n/vi.i18n.json @@ -1,8 +1,8 @@ { "accept": "Chấp nhận", - "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-activity-notify": "Thông báo hoạt động", + "act-addAttachment": "thêm tập tin đính kèm __attachment__ vào thẻ __list__ tại danh sách __list__ tại đường bơi __swimlane__ tại bảng __board__", + "act-deleteAttachment": "xóa tập tin đính kèm __attachment__ tại thẻ __card__ tại danh sách __list__ tại đường bơi __swimlane__ tại bảng __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__", @@ -64,7 +64,7 @@ "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "đã thêm checklist vào %s", "activity-checklist-removed": "removed a checklist from %s", - "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "activity-checklist-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", @@ -152,6 +152,8 @@ "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.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Attach From", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Delete Card?", "cardDetailsActionsPopup-title": "Card Actions", "cardLabelsPopup-title": "Labels", @@ -319,6 +329,7 @@ "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", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "Save", "search": "Search", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "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", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 872c6ef3..6c821ee1 100644 --- a/i18n/zh-CN.i18n.json +++ b/i18n/zh-CN.i18n.json @@ -64,7 +64,7 @@ "activity-unchecked-item": "未勾选 %s 于清单 %s 共 %s", "activity-checklist-added": "已经将清单添加到 %s", "activity-checklist-removed": "已从%s移除待办清单", - "activity-checklist-completed": "完成检查列表__checklist__ 卡片 __card__ 列表 __list__ 泳道 __swimlane__ 看板 __board__", + "activity-checklist-completed": "完成清单%s共%s", "activity-checklist-uncompleted": "未完成清单 %s 共 %s", "activity-checklist-item-added": "添加清单项至'%s' 于 %s", "activity-checklist-item-removed": "已从 '%s' 于 %s中 移除一个清单项", @@ -137,7 +137,7 @@ "board-view": "看板视图", "board-view-cal": "日历", "board-view-swimlanes": "泳道图", - "board-view-collapse": "Collapse", + "board-view-collapse": "崩溃", "board-view-lists": "列表", "bucket-example": "例如 “目标清单”", "cancel": "取消", @@ -152,6 +152,8 @@ "card-spent": "耗时", "card-edit-attachments": "编辑附件", "card-edit-custom-fields": "编辑自定义字段", + "card-start-voting": "开始投票", + "card-cancel-voting": "移除投票", "card-edit-labels": "编辑标签", "card-edit-members": "编辑成员", "card-labels-title": "更改该卡片上的标签", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "附件来源", "cardCustomField-datePopup-title": "修改日期", "cardCustomFieldsPopup-title": "编辑自定义字段", + "cardStartVotingPopup-title": "建立投票", + "positiveVoteMembersPopup-title": "支持", + "negativeVoteMembersPopup-title": "反对", + "allowNonBoardMembers": "允许任何人在公开看板投票", + "vote-question": "投票题目", + "vote-public": "查看投票结果", + "vote-for-it": "同意", + "vote-against": "反对", "cardDeletePopup-title": "彻底删除卡片?", "cardDetailsActionsPopup-title": "卡片操作", "cardLabelsPopup-title": "标签", @@ -223,8 +233,8 @@ "comment-only-desc": "只能在卡片上评论。", "no-comments": "暂无评论", "no-comments-desc": "无法查看评论和活动。", - "worker": "Worker", - "worker-desc": "Can only move cards, assign itself to card and comment.", + "worker": "人员", + "worker-desc": "只能移动卡片,分配给卡片和评论", "computer": "从本机上传", "confirm-subtask-delete-dialog": "确定要删除子任务吗?", "confirm-checklist-delete-dialog": "确定要删除清单吗?", @@ -319,6 +329,7 @@ "filter-clear": "清空过滤器", "filter-no-label": "无标签", "filter-no-member": "无成员", + "filter-no-assignee": "没有代理人", "filter-no-custom-fields": "无自定义字段", "filter-show-archive": "显示归档的列表", "filter-hide-empty": "隐藏空列表", @@ -338,8 +349,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” 并拷贝结果文本", @@ -440,7 +449,7 @@ "save": "保存", "search": "搜索", "rules": "规则", - "search-cards": "搜索当前看板上的卡片/列表标题和描述", + "search-cards": "搜寻看板內的卡片/列表标题、描述、自定义字段", "search-example": "搜索", "select-color": "选择颜色", "set-wip-limit-value": "设置此列表中的最大任务数", @@ -583,9 +592,9 @@ "default": "缺省", "queue": "队列", "subtask-settings": "子任务设置", - "card-settings": "Card Settings", + "card-settings": "卡片设置", "boardSubtaskSettingsPopup-title": "看板子任务设置", - "boardCardSettingsPopup-title": "Card Settings", + "boardCardSettingsPopup-title": "卡片设置", "deposit-subtasks-board": "将子任务放入以下看板:", "deposit-subtasks-list": "将子任务放入以下列表:", "show-parent-in-minicard": "显示上一级卡片:", @@ -665,6 +674,7 @@ "r-of-checklist": "清单的", "r-send-email": "发送邮件", "r-to": "收件人", + "r-of": "分之", "r-subject": "标题", "r-rule-details": "规则详情", "r-d-move-to-top-gen": "移动卡片到其列表顶部", @@ -755,6 +765,24 @@ "show-desktop-drag-handles": "显示桌面拖放手柄", "assignee": "被指派人", "cardAssigneesPopup-title": "被指派人", - "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "addmore-detail": "添加更详细的说明", + "show-on-card": "显示卡片", + "new": "新", + "editUserPopup-title": "修改用户", + "newUserPopup-title": "新增用户", + "notifications": "提示", + "view-all": "查看全部", + "filter-by-unread": "过滤未读", + "mark-all-as-read": "标记全部已读", + "remove-all-read": "移除所有已读", + "allow-rename": "允许重命名", + "allowRenamePopup-title": "允许重命名", + "start-day-of-week": "设定一周的开始", + "monday": "周一", + "tuesday": "周二", + "wednesday": "周三", + "thursday": "周四", + "friday": "周五", + "saturday": "周六", + "sunday": "周日" } diff --git a/i18n/zh-HK.i18n.json b/i18n/zh-HK.i18n.json index c58d0672..6adb1d7e 100644 --- a/i18n/zh-HK.i18n.json +++ b/i18n/zh-HK.i18n.json @@ -64,7 +64,7 @@ "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 __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "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", @@ -152,6 +152,8 @@ "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.", @@ -161,6 +163,14 @@ "cardAttachmentsPopup-title": "Attach From", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", "cardDeletePopup-title": "Delete Card?", "cardDetailsActionsPopup-title": "Card Actions", "cardLabelsPopup-title": "Labels", @@ -319,6 +329,7 @@ "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", @@ -338,8 +349,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.", @@ -440,7 +449,7 @@ "save": "儲存", "search": "Search", "rules": "Rules", - "search-cards": "Search from card/list titles and descriptions on this board", + "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", @@ -665,6 +674,7 @@ "r-of-checklist": "of checklist", "r-send-email": "Send an email", "r-to": "to", + "r-of": "of", "r-subject": "subject", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", @@ -756,5 +766,23 @@ "assignee": "Assignee", "cardAssigneesPopup-title": "Assignee", "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "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", + "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 694b61d7..232193b7 100644 --- a/i18n/zh-TW.i18n.json +++ b/i18n/zh-TW.i18n.json @@ -1,7 +1,7 @@ { "accept": "接受", "act-activity-notify": "活動通知", - "act-addAttachment": "附件 __attachment__ 已新增到卡片 __card__ 位於清單 __list__ 泳道流程圖 __swimlane__ 看板 __board__", + "act-addAttachment": "附件 __attachment__ 已新增到卡片 __card__ 位於清單 __list__ 泳道 __swimlane__ 看板 __board__", "act-deleteAttachment": "已刪除的附件__附件__卡片上__卡片__在清單__清單__at swimlane__swimlane__在看板__看板__", "act-addSubtask": "新增子任務 __子任務 __ to card __卡片__ at list_清單__ at swimlane __分隔線__ at board __看板__", "act-addLabel": "新增標籤 __label__ 到看板 __board__ 中的泳道 __swimlane__ 中的清單 __list__ 中的卡片 __card__ 中", @@ -24,7 +24,7 @@ "act-createCard": "在看板 __board__ 的泳道 __swimlane__ 的清單 __list__ 中新增卡片 __card__", "act-createCustomField": "已新增看板__board__自訂欄位__customField__", "act-deleteCustomField": "已刪除看板__board__自訂欄位__customField__", - "act-setCustomField": "編輯定制字段__customField__:看板__board__中的泳道__swimlane__中的清單__list__中的卡片__card__中的__customFieldValue__", + "act-setCustomField": "編輯自訂欄位__customField__:看板__board__中的泳道__swimlane__中的清單__list__中的卡片__card__中的__customFieldValue__", "act-createList": "新增清單 __list__ 至看板 __board__", "act-addBoardMember": "新增成員 __member__ 到看板 __board__", "act-archivedBoard": "看板 __board__ 已被移到封存", @@ -43,7 +43,7 @@ "act-withBoardTitle": "看板__board__", "act-withCardTitle": "[看板 __board__] 卡片 __card__", "actions": "操作", - "activities": "活動", + "activities": "活動紀錄", "activity": "活動", "activity-added": "新增 %s 到 %s", "activity-archived": "%s 已被移到封存", @@ -64,8 +64,8 @@ "activity-unchecked-item": "未勾選 %s 於清單 %s 共 %s", "activity-checklist-added": "已新增待辦清單 %s", "activity-checklist-removed": "已刪除%s的待辦清單", - "activity-checklist-completed": "完成檢查清單__checklist__ 卡片 __card__ 清單 __list__ 泳道 __swimlane__ 看板 __board__", - "activity-checklist-uncompleted": "未完成清單 %s 共 %s", + "activity-checklist-completed": "已完成清單 %s 共 %s 項", + "activity-checklist-uncompleted": "未完成清單 %s 共 %s 項", "activity-checklist-item-added": "新增待辦清單項目從 %s 到 %s", "activity-checklist-item-removed": "已從 '%s' 於 %s中 移除一個清單項", "add": "新增", @@ -78,7 +78,7 @@ "add-attachment": "新增附件", "add-board": "新增看板", "add-card": "新增卡片", - "add-swimlane": "新增泳道圖", + "add-swimlane": "新增泳道", "add-subtask": "新增子任務", "add-checklist": "新增待辦清單", "add-checklist-item": "新增項目", @@ -91,13 +91,13 @@ "admin": "管理員", "admin-desc": "可以瀏覽並編輯卡片,移除成員,並且更改該看板的設定", "admin-announcement": "通知", - "admin-announcement-active": "激活系統通知", - "admin-announcement-title": "管理員的通知", + "admin-announcement-active": "啟用系統公告", + "admin-announcement-title": "來自管理員的公告訊息", "all-boards": "全部看板", "and-n-other-card": "和其他 __count__ 個卡片", "and-n-other-card_plural": "和其他 __count__ 個卡片", "apply": "應用", - "app-is-offline": "加載中,請稍後。刷新頁面將導致數據丟失,如果加載長時間不起作用,請檢查服務器是否已經停止工作。", + "app-is-offline": "頁面載入中,請稍後。重新整理頁面將會造成尚未儲存的資料遺失,如果載入太久,請檢查伺服器是否已經停止工作。", "archive": "封存", "archive-all": "全部封存", "archive-board": "將看板封存", @@ -111,32 +111,32 @@ "restore-board": "還原看板", "no-archived-boards": "沒有封存的看板。", "archives": "封存", - "template": "模板", - "templates": "模板", + "template": "範本", + "templates": "範本", "assign-member": "分配成員", "attached": "附加", "attachment": "附件", "attachment-delete-pop": "刪除附件的操作不可逆。", "attachmentDeletePopup-title": "刪除附件?", "attachments": "附件", - "auto-watch": "自動關註新建的看板", + "auto-watch": "自動訂閱新建立的看板", "avatar-too-big": "頭像過大 (上限 70 KB)", "back": "返回", "board-change-color": "更改顏色", - "board-nb-stars": "%s 星標", + "board-nb-stars": "%s 星星", "board-not-found": "看板不存在", "board-private-info": "該看板將被設為 <strong>私有</strong>.", "board-public-info": "該看板將被設為 <strong>公開</strong>.", "boardChangeColorPopup-title": "修改看板背景", - "boardChangeTitlePopup-title": "重命名看板", - "boardChangeVisibilityPopup-title": "更改可視級別", - "boardChangeWatchPopup-title": "更改關註狀態", + "boardChangeTitlePopup-title": "重新命名看板", + "boardChangeVisibilityPopup-title": "更改可見度", + "boardChangeWatchPopup-title": "更改訂閱狀態", "boardMenuPopup-title": "看板設定", - "boardChangeViewPopup-title": "看板視圖", + "boardChangeViewPopup-title": "看板檢視", "boards": "看板", - "board-view": "看板視圖", - "board-view-cal": "日歷", - "board-view-swimlanes": "泳道圖", + "board-view": "看板檢視", + "board-view-cal": "日曆", + "board-view-swimlanes": "泳道", "board-view-collapse": "損毀", "board-view-lists": "清單", "bucket-example": "例如 “目標清單”", @@ -144,29 +144,39 @@ "card-archived": "封存這個卡片。", "board-archived": "封存這個看板。", "card-comments-title": "該卡片有 %s 條評論", - "card-delete-notice": "徹底刪除的操作不可恢覆,你將會丟失該卡片相關的所有操作記錄。", + "card-delete-notice": "永久刪除是無法復原的,你將會失去這張卡片的所有相關操作記錄。", "card-delete-pop": "所有的活動將從活動摘要中被移除且您將無法重新打開該卡片。此操作無法撤銷。", "card-delete-suggest-archive": "您可以移動卡片到活動以便從看板中刪除並保持活動。", - "card-due": "到期", + "card-due": "到期日", "card-due-on": "期限", "card-spent": "耗時", "card-edit-attachments": "編輯附件", - "card-edit-custom-fields": "編輯自定義字段", + "card-edit-custom-fields": "編輯自訂欄位", + "card-start-voting": "開始投票", + "card-cancel-voting": "移除投票", "card-edit-labels": "編輯標籤", "card-edit-members": "編輯成員", "card-labels-title": "更改該卡片上的標籤", "card-members-title": "在該卡片中新增或移除看板成員", "card-start": "開始", - "card-start-on": "始於", + "card-start-on": "開始於", "cardAttachmentsPopup-title": "附件來源", "cardCustomField-datePopup-title": "修改日期", - "cardCustomFieldsPopup-title": "編輯自定義字段", + "cardCustomFieldsPopup-title": "編輯自訂欄位", + "cardStartVotingPopup-title": "建立投票", + "positiveVoteMembersPopup-title": "支持", + "negativeVoteMembersPopup-title": "反對", + "allowNonBoardMembers": "Allow anonymous vote on public board", + "vote-question": "投票題目", + "vote-public": "Show who voted what", + "vote-for-it": "同意", + "vote-against": "反對", "cardDeletePopup-title": "徹底刪除卡片?", "cardDetailsActionsPopup-title": "卡片操作", "cardLabelsPopup-title": "標籤", "cardMembersPopup-title": "成員", "cardMorePopup-title": "更多", - "cardTemplatePopup-title": "新建模板", + "cardTemplatePopup-title": "建立範本", "cards": "卡片", "cards-count": "卡片", "casSignIn": "以 CAS 登入", @@ -176,21 +186,21 @@ "change": "變更", "change-avatar": "更換大頭貼", "change-password": "變更密碼", - "change-permissions": "更改許可權", + "change-permissions": "變更權限", "change-settings": "更改設定", "changeAvatarPopup-title": "更換大頭貼", "changeLanguagePopup-title": "更改語系", "changePasswordPopup-title": "變更密碼", - "changePermissionsPopup-title": "更改許可權", + "changePermissionsPopup-title": "變更權限", "changeSettingsPopup-title": "更改設定", "subtasks": "子任務", "checklists": "待辦清單", - "click-to-star": "點擊以添加標記於此看板。", - "click-to-unstar": "點擊以移除標記於此看板。", + "click-to-star": "將看板加入我的最愛。", + "click-to-unstar": "從我的最愛移除此看板。", "clipboard": "剪貼簿貼上或者拖曳檔案", "close": "關閉", "close-board": "關閉看板", - "close-board-pop": "您可以通過點擊主頁面中的「封存」按鈕來恢復看板。", + "close-board-pop": "您可以透過點擊首頁中的「封存」按鈕來還原看板。", "color-black": "黑色", "color-blue": "藍色", "color-crimson": "深紅", @@ -218,7 +228,7 @@ "color-yellow": "黃色", "unset-color": "未設定", "comment": "評論", - "comment-placeholder": "新增評論", + "comment-placeholder": "撰寫文字", "comment-only": "僅能評論", "comment-only-desc": "只能在卡片上發表評論。", "no-comments": "暫無評論", @@ -232,7 +242,7 @@ "linkCardPopup-title": "連結卡片", "searchElementPopup-title": "搜尋", "copyCardPopup-title": "複製卡片", - "copyChecklistToManyCardsPopup-title": "複製待辦清單的樣板到多個卡片", + "copyChecklistToManyCardsPopup-title": "複製待辦清單的範本到多個卡片", "copyChecklistToManyCardsPopup-instructions": "使用此 JSON 格式來表示目標卡片的標題和描述", "copyChecklistToManyCardsPopup-format": "[ {\\\"title\\\": \\\"第一個卡片標題\\\", \\\"description\\\":\\\"第一個卡片描述\\\"}, {\\\"title\\\":\\\"第二個卡片標題\\\",\\\"description\\\":\\\"第二個卡片描述\\\"},{\\\"title\\\":\\\"最後一個卡片標題\\\",\\\"description\\\":\\\"最後一個卡片描述\\\"} ]", "create": "建立", @@ -302,7 +312,7 @@ "error-user-notAllowSelf": "不允許對自己執行此操作", "error-user-notCreated": "該使用者未能成功新增", "error-username-taken": "這個使用者名稱已被使用", - "error-email-taken": "電子信箱已被使用", + "error-email-taken": "Email 已被使用", "export-board": "匯出看板", "sort": "排序", "sort-desc": "點選排序清單", @@ -319,6 +329,7 @@ "filter-clear": "清除篩選條件", "filter-no-label": "沒有標籤", "filter-no-member": "沒有成員", + "filter-no-assignee": "沒有代理人", "filter-no-custom-fields": "沒有自訂欄位", "filter-show-archive": "顯示封存的清單", "filter-hide-empty": "隱藏空清單", @@ -326,7 +337,7 @@ "filter-on-desc": "你正在篩選該看板上的卡片,點此編輯篩選條件。", "filter-to-selection": "選擇的篩選條件", "advanced-filter-label": "進階篩選", - "advanced-filter-description": "進階篩選可以使用包含如下操作符的字符串進行過濾:== != <= >= && || ( ) 。操作符之間用空格隔開。輸入文字和數值就可以過濾所有自訂內容。例如:Field1 == Value1。註意如果內容或數值包含空格,需要用單引號。例如: 'Field 1' == 'Value 1'。要跳過單個控制字符(' \\/),請使用 \\ 轉義字符。例如: Field1 = I\\'m。支援組合使用多個條件,例如: F1 == V1 || F1 == V2。通常以從左到右的順序進行判斷。可以通過括號修改順序,例如:F1 == V1 && ( F2 == V2 || F2 == V3 )。也支援使用正規表式法搜尋內容。", + "advanced-filter-description": "進階篩選可以使用包含如下運算子的字串進行過濾:== != <= >= && || ( ) 。運算子之間用空格隔開。輸入文字和數值就可以過濾所有自訂內容。例如:Field1 == Value1。注意:如果內容或數值包含空格,需要用單引號。例如: 'Field 1' == 'Value 1'。要跳過單個控制字元(' \\/),請使用 \\ 跳脫字元。例如: Field1 = I\\'m。支援組合使用多個條件,例如: F1 == V1 || F1 == V2。通常以從左到右的順序進行判斷。可以透過括號修改順序,例如:F1 == V1 && ( F2 == V2 || F2 == V3 )。也支援使用 正規表示式 (Regex) 搜尋內容。", "fullname": "全稱", "header-logo-title": "返回您的看板頁面", "hide-system-messages": "隱藏系統訊息", @@ -338,8 +349,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” 並拷貝結果文本", @@ -375,15 +384,15 @@ "list-select-cards": "選擇清單中的所有卡片", "set-color-list": "設定顏色", "listActionPopup-title": "清單操作", - "swimlaneActionPopup-title": "泳道流程圖操作", - "swimlaneAddPopup-title": "在下面新增泳道流程圖", + "swimlaneActionPopup-title": "泳道動作", + "swimlaneAddPopup-title": "在下面新增泳道", "listImportCardPopup-title": "匯入 Trello 卡片", "listMorePopup-title": "更多", "link-list": "連結到這個清單", "list-delete-pop": "所有的動作都將從活動動態中被移除且您將無法再開啟該清單\b。此操作無法復原。", "list-delete-suggest-archive": "您可以移動清單到封存以將其從看板中移除並保留活動。", "lists": "清單", - "swimlanes": "泳道圖", + "swimlanes": "泳道", "log-out": "登出", "log-in": "登入", "loginPopup-title": "登入", @@ -397,13 +406,13 @@ "moveSelectionPopup-title": "移動選取的項目", "multi-selection": "多選", "multi-selection-on": "多選啟用", - "muted": "靜音", + "muted": "取消任何通知", "muted-info": "您將不會收到有關這個看板的任何訊息", "my-boards": "我的看板", "name": "名稱", "no-archived-cards": "沒有封存的卡片", "no-archived-lists": "沒有封存的清單", - "no-archived-swimlanes": "沒有封存的泳道流程圖", + "no-archived-swimlanes": "沒有封存的泳道", "no-results": "無結果", "normal": "普通", "normal-desc": "可以建立以及編輯卡片,無法更改。", @@ -425,7 +434,7 @@ "profile": "資料", "public": "公開", "public-desc": "該看板將被公開。任何人均可透過連結檢視,並且將對Google和其他搜尋引擎開放。只有加入至該看板的成員才可進行編輯。", - "quick-access-description": "被星號標記的看板在導航列中新增快速啟動方式", + "quick-access-description": "加入我的最愛的看板將會在此導覽列中新增捷徑", "remove-cover": "移除封面", "remove-from-board": "從看板中刪除", "remove-label": "移除標籤", @@ -440,7 +449,7 @@ "save": "儲存", "search": "搜尋", "rules": "規則", - "search-cards": "搜尋看板內的卡片標題及描述", + "search-cards": "搜尋看板內的卡片/清單標題、描述、自訂欄位", "search-example": "搜尋", "select-color": "選擇顏色", "set-wip-limit-value": "設定此清單中的最大任務數", @@ -458,9 +467,9 @@ "sidebar-open": "開啟側邊欄", "sidebar-close": "關閉側邊欄", "signupPopup-title": "建立帳戶", - "star-board-title": "點此標記該看板,它將會出現在您的看板列表上方。", - "starred-boards": "已標記看板", - "starred-boards-description": "已標記看板將會出現在您的看板列表上方。", + "star-board-title": "點擊這裡可將看板加入我的最愛,它將會出現在您的看板列表上方。", + "starred-boards": "我的最愛看板", + "starred-boards-description": "加入我的最愛的看板將會出現在您的看板列表上方。", "subscribe": "訂閱", "team": "團隊", "this-board": "這個看板", @@ -472,33 +481,33 @@ "has-spenttime-cards": "耗時卡", "time": "時間", "title": "標題", - "tracking": "追蹤", + "tracking": "訂閱相關通知", "tracking-info": "你將會收到與你有關的卡片的所有變更通知", "type": "類型", "unassign-member": "取消分配成員", "unsaved-description": "未儲存的描述", - "unwatch": "取消觀察", + "unwatch": "取消追蹤", "upload": "上傳", "upload-avatar": "上傳大頭貼", "uploaded-avatar": "大頭貼已經上傳", "username": "使用者名稱", "view-it": "檢視", "warn-list-archived": "警告: 卡片位在封存的清單中", - "watch": "觀察", - "watching": "觀察中", + "watch": "追蹤", + "watching": "訂閱所有通知", "watching-info": "你將會收到關於這個看板所有的變更通知", "welcome-board": "歡迎進入看板", "welcome-swimlane": "里程碑 1", "welcome-list1": "基本", "welcome-list2": "進階", - "card-templates-swimlane": "卡片模板", - "list-templates-swimlane": "清單模板", - "board-templates-swimlane": "看板模板", + "card-templates-swimlane": "卡片範本", + "list-templates-swimlane": "清單範本", + "board-templates-swimlane": "看板範本", "what-to-do": "要做什麼?", "wipLimitErrorPopup-title": "無效的最大任務數", "wipLimitErrorPopup-dialog-pt1": "此清單中的任務數量已經超過了設定的最大任務數。", "wipLimitErrorPopup-dialog-pt2": "請將一些任務移出此清單,或者設定一個更大的最大任務數。", - "admin-panel": "控制台", + "admin-panel": "系統設定", "settings": "設定", "people": "成員", "registration": "註冊", @@ -532,21 +541,21 @@ "boardCardTitlePopup-title": "卡片標題過濾器", "disable-webhook": "禁用訂閱 (Webhooks)", "global-webhook": "全域訂閱 (Webhooks)", - "new-outgoing-webhook": "新建外部訂閱 (Webhooks)", + "new-outgoing-webhook": "新增連外訂閱 (Webhooks)", "no-name": "(未知)", "Node_version": "Node.js 版本", "Meteor_version": "Meteor 版本", "MongoDB_version": "MongoDB 版本", - "MongoDB_storage_engine": "MongoDB 存儲引擎", + "MongoDB_storage_engine": "MongoDB 儲存引擎", "MongoDB_Oplog_enabled": "MongoDB Oplog 已啟用", - "OS_Arch": "系統架構", + "OS_Arch": "作業系統架構", "OS_Cpus": "系統 CPU 數量", "OS_Freemem": "系統可用記憶體", "OS_Loadavg": "系統平均負載", - "OS_Platform": "系統平臺", - "OS_Release": "系統發佈版本", + "OS_Platform": "作業系統平台", + "OS_Release": "作業系統版本", "OS_Totalmem": "系統總記憶體", - "OS_Type": "系統類型", + "OS_Type": "作業系統類型", "OS_Uptime": "系統運行時間", "days": "天", "hours": "小時", @@ -557,25 +566,25 @@ "showLabel-field-on-card": "在迷你卡片中顯示欄位標籤", "yes": "是", "no": "否", - "accounts": "賬號", - "accounts-allowEmailChange": "允許變更電子信箱", + "accounts": "帳號", + "accounts-allowEmailChange": "允許變更 Email", "accounts-allowUserNameChange": "允許修改使用者名稱", "createdAt": "新增於", "verified": "已驗證", "active": "啟用", "card-received": "已接收", "card-received-on": "接收於", - "card-end": "結束", - "card-end-on": "結束於", + "card-end": "完成日", + "card-end-on": "完成於", "editCardReceivedDatePopup-title": "更改接收日期", - "editCardEndDatePopup-title": "更改結束日期", + "editCardEndDatePopup-title": "更改完成日期", "setCardColorPopup-title": "設定顏色", "setCardActionsColorPopup-title": "選擇顏色", "setSwimlaneColorPopup-title": "選擇顏色", "setListColorPopup-title": "選擇顏色", "assigned-by": "分配者", "requested-by": "請求者", - "board-delete-notice": "刪除時永久操作,將會丟失此看板上的所有清單、卡片和動作。", + "board-delete-notice": "永久刪除是無法復原的,你將會失去這個看板上的所有清單、卡片和動作。", "delete-board-confirm-popup": "所有清單、卡片、標籤和活動都會被刪除,將無法恢覆看板內容。不支援撤銷。", "boardDeletePopup-title": "刪除看板?", "delete-board": "刪除看板", @@ -583,18 +592,18 @@ "default": "預設值", "queue": "隊列", "subtask-settings": "子任務設定", - "card-settings": "Card Settings", + "card-settings": "卡片設定", "boardSubtaskSettingsPopup-title": "看板子任務設定", - "boardCardSettingsPopup-title": "Card Settings", + "boardCardSettingsPopup-title": "卡片設定", "deposit-subtasks-board": "將子任務放入以下看板:", "deposit-subtasks-list": "將子任務放入以下清單:", "show-parent-in-minicard": "顯示上一級卡片:", "prefix-with-full-path": "完整路徑前綴", - "prefix-with-parent": "上級前綴", + "prefix-with-parent": "父層前綴", "subtext-with-full-path": "子標題顯示完整路徑", - "subtext-with-parent": "子標題顯示上級", - "change-card-parent": "修改卡片的上級", - "parent-card": "上級卡片", + "subtext-with-parent": "子標題顯示父層", + "change-card-parent": "修改卡片的父層", + "parent-card": "父層卡片", "source-board": "來源看板", "no-parent": "不顯示上層", "activity-added-label": "增加標籤%s至%s", @@ -665,6 +674,7 @@ "r-of-checklist": "清單的", "r-send-email": "寄送郵件", "r-to": "收件人", + "r-of": "of", "r-subject": "主旨", "r-rule-details": "詳細規則", "r-d-move-to-top-gen": "將卡片移到所屬清單頂部", @@ -681,7 +691,7 @@ "r-d-remove-label": "移除標籤", "r-create-card": "新增新卡片", "r-in-list": "在清單中", - "r-in-swimlane": "在泳道流程圖", + "r-in-swimlane": "在泳道", "r-d-add-member": "新增成員", "r-d-remove-member": "移除成員", "r-d-remove-all-member": "移除所有成員", @@ -696,17 +706,17 @@ "r-add-checklist": "新增待辦清單", "r-with-items": "與項目", "r-items-list": "項目1,項目2,項目3", - "r-add-swimlane": "新增泳道流程圖", - "r-swimlane-name": "泳道流程圖名稱", + "r-add-swimlane": "新增泳道", + "r-swimlane-name": "泳道名稱", "r-board-note": "註解:保留一個空字串去比對所有可能的值。", "r-checklist-note": "註解:清單中的項目必須使用逗號分隔。", "r-when-a-card-is-moved": "當移動卡片到另一個清單時", "r-set": "設定", "r-update": "更新", - "r-datefield": "日期字段", + "r-datefield": "日期欄位", "r-df-start-at": "開始", "r-df-due-at": "至", - "r-df-end-at": "結束", + "r-df-end-at": "完成", "r-df-received-at": "已接收", "r-to-current-datetime": "到當前日期/時間", "r-remove-value-from": "移除值從", @@ -726,8 +736,8 @@ "default-authentication-method": "預設認證方式", "duplicate-board": "重複的看板", "people-number": "人數是:", - "swimlaneDeletePopup-title": "是否刪除泳道流程圖?", - "swimlane-delete-pop": "所有活動將從活動源中刪除,您將無法恢復泳道流程圖。此操作無法還原。", + "swimlaneDeletePopup-title": "是否刪除泳道?", + "swimlane-delete-pop": "所有動作將從活動來源中刪除,您將無法恢復泳道。此操作無法還原。", "restore-all": "全部還原", "delete-all": "全部刪除", "loading": "讀取中,請稍後。", @@ -755,6 +765,24 @@ "show-desktop-drag-handles": "顯示桌面拖曳工具", "assignee": "代理人", "cardAssigneesPopup-title": "代理人", - "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card" + "addmore-detail": "新增更多詳細描述", + "show-on-card": "在卡片上顯示", + "new": "新增", + "editUserPopup-title": "編輯使用者", + "newUserPopup-title": "新增使用者", + "notifications": "通知", + "view-all": "檢視全部", + "filter-by-unread": "篩選: 未讀", + "mark-all-as-read": "標示全部已讀", + "remove-all-read": "移除所有已讀", + "allow-rename": "允許更名", + "allowRenamePopup-title": "允許更名", + "start-day-of-week": "一周的第一天", + "monday": "周一", + "tuesday": "週二", + "wednesday": "週三", + "thursday": "週四", + "friday": "週五", + "saturday": "週六", + "sunday": "週日" } diff --git a/models/activities.js b/models/activities.js index 3f8a0d35..df207bca 100644 --- a/models/activities.js +++ b/models/activities.js @@ -108,7 +108,7 @@ if (Meteor.isServer) { let participants = []; let watchers = []; let title = 'act-activity-notify'; - let board = null; + const board = Boards.findOne(activity.boardId); const description = `act-${activity.activityType}`; const params = { activityId: activity._id, @@ -122,8 +122,11 @@ if (Meteor.isServer) { params.userId = activity.userId; } if (activity.boardId) { - board = activity.board(); - params.board = board.title; + if (board.title.length > 0) { + params.board = board.title; + } else { + params.board = ''; + } title = 'act-withBoardTitle'; params.url = board.absoluteUrl(); params.boardId = activity.boardId; @@ -283,7 +286,10 @@ if (Meteor.isServer) { ); } Notifications.getUsers(watchers).forEach(user => { - Notifications.notify(user, title, description, params); + // don't notify a user of their own behavior + if (user._id !== userId) { + Notifications.notify(user, title, description, params); + } }); const integrations = Integrations.find({ diff --git a/models/attachments.js b/models/attachments.js index 798d04be..cab3d9e3 100644 --- a/models/attachments.js +++ b/models/attachments.js @@ -41,6 +41,9 @@ function onAttachmentUploaded(fileRef) { type: 'card', activityType: 'addAttachment', attachmentId: fileRef._id, + // this preserves the name so that notifications can be meaningful after + // this file is removed + attachmentName: fileRef.versions.original.name, boardId: fileRef.meta.boardId, cardId: fileRef.meta.cardId, listId: fileRef.meta.listId, @@ -70,6 +73,9 @@ function onAttachmentRemoving(cursor) { type: 'card', activityType: 'deleteAttachment', attachmentId: file._id, + // this preserves the name so that notifications can be meaningful after + // this file is removed + attachmentName: file.versions.original.name, boardId: meta.boardId, cardId: meta.cardId, listId: meta.listId, diff --git a/models/boards.js b/models/boards.js index 8862f301..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, + }, }), ); @@ -806,7 +814,11 @@ Boards.helpers({ if (term) { const regex = new RegExp(term, 'i'); - query.$or = [{ title: regex }, { description: regex }]; + query.$or = [ + { title: regex }, + { description: regex }, + { customFields: { $elemMatch: { value: regex } } }, + ]; } return Cards.find(query, projection); @@ -1182,6 +1194,10 @@ Boards.mutations({ setPresentParentTask(presentParentTask) { return { $set: { presentParentTask } }; }, + + move(sortIndex) { + return { $set: { sort: sortIndex } }; + }, }); function boardRemover(userId, doc) { @@ -1279,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(() => { @@ -1462,7 +1489,7 @@ if (Meteor.isServer) { 'members.userId': paramUserId, }, { - sort: ['title'], + sort: { sort: 1 /* boards default sorting */ }, }, ).map(function(board) { return { @@ -1492,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 fac8922c..1236de1a 100644 --- a/models/cards.js +++ b/models/cards.js @@ -304,6 +304,42 @@ Cards.attachSchema( optional: true, defaultValue: '', }, + vote: { + /** + * vote object, see below + */ + type: Object, + optional: true, + }, + 'vote.question': { + type: String, + defaultValue: '', + }, + 'vote.positive': { + /** + * list of members (user IDs) + */ + type: [String], + optional: true, + defaultValue: [], + }, + 'vote.negative': { + /** + * list of members (user IDs) + */ + type: [String], + optional: true, + defaultValue: [], + }, + 'vote.end': { + type: Date, + optional: true, + defaultValue: null, + }, + 'vote.public': { + type: Boolean, + defaultValue: false, + }, }), ); @@ -981,6 +1017,50 @@ Cards.helpers({ } }, + getVoteQuestion() { + if (this.isLinkedCard()) { + const card = Cards.findOne({ _id: this.linkedId }); + if (card && card.vote) return card.vote.question; + else return null; + } else if (this.isLinkedBoard()) { + const board = Boards.findOne({ _id: this.linkedId }); + if (board && board.vote) return board.vote.question; + else return null; + } else if (this.vote) { + return this.vote.question; + } else { + return null; + } + }, + + getVotePublic() { + if (this.isLinkedCard()) { + const card = Cards.findOne({ _id: this.linkedId }); + if (card && card.vote) return card.vote.public; + else return null; + } else if (this.isLinkedBoard()) { + const board = Boards.findOne({ _id: this.linkedId }); + if (board && board.vote) return board.vote.public; + else return null; + } else if (this.vote) { + return this.vote.public; + } else { + return null; + } + }, + + voteMemberPositive() { + if (this.vote && this.vote.positive) + 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 []; + }, + getId() { if (this.isLinked()) { return this.linkedId; @@ -1397,6 +1477,58 @@ Cards.mutations({ }, }; }, + setVoteQuestion(question, publicVote) { + return { + $set: { + vote: { + question, + public: publicVote, + positive: [], + negative: [], + }, + }, + }; + }, + unsetVote() { + return { + $unset: { + vote: '', + }, + }; + }, + setVote(userId, forIt) { + switch (forIt) { + case true: + // vote for it + return { + $pull: { + 'vote.negative': userId, + }, + $addToSet: { + 'vote.positive': userId, + }, + }; + case false: + // vote against + return { + $pull: { + 'vote.positive': userId, + }, + $addToSet: { + 'vote.negative': userId, + }, + }; + + default: + // Remove votes + return { + $pull: { + 'vote.positive': userId, + 'vote.negative': userId, + }, + }; + } + }, }); //FUNCTIONS FOR creation of Activities diff --git a/models/lists.js b/models/lists.js index f06b15b1..b123ab4f 100644 --- a/models/lists.js +++ b/models/lists.js @@ -369,6 +369,9 @@ if (Meteor.isServer) { activityType: 'createList', boardId: doc.boardId, listId: doc._id, + // this preserves the name so that the activity can be useful after the + // list is deleted + title: doc.title, }); }); @@ -397,6 +400,9 @@ if (Meteor.isServer) { activityType: 'archivedList', listId: doc._id, boardId: doc.boardId, + // this preserves the name so that the activity can be useful after the + // list is deleted + title: doc.title, }); } }); diff --git a/models/settings.js b/models/settings.js index 63bcd7f3..fb823205 100644 --- a/models/settings.js +++ b/models/settings.js @@ -198,6 +198,10 @@ if (Meteor.isServer) { return process.env.CAS_ENABLED === 'true'; } + function isApiEnabled() { + return process.env.WITH_API === 'true'; + } + Meteor.methods({ sendInvitation(emails, boards) { check(emails, [String]); @@ -314,6 +318,10 @@ if (Meteor.isServer) { return isCasEnabled(); }, + _isApiEnabled() { + return isApiEnabled(); + }, + // Gets all connection methods to use it in the Template getAuthenticationsEnabled() { return { @@ -326,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 b38e4652..c4be140b 100644 --- a/models/trelloCreator.js +++ b/models/trelloCreator.js @@ -285,6 +285,30 @@ export class TrelloCreator { cardToCreate.members = wekanMembers; } } + // add vote + if (card.idMembersVoted) { + // Trello only know's positive votes + const positiveVotes = []; + card.idMembersVoted.forEach(trelloId => { + if (this.members[trelloId]) { + const wekanId = this.members[trelloId]; + // we may map multiple Trello members to the same wekan user + // in which case we risk adding the same user multiple times + if (!positiveVotes.find(wId => wId === wekanId)) { + positiveVotes.push(wekanId); + } + } + return true; + }); + if (positiveVotes.length > 0) { + cardToCreate.vote = { + question: cardToCreate.title, + public: true, + positive: positiveVotes, + }; + } + } + // insert card const cardId = Cards.direct.insert(cardToCreate); // keep track of Trello id => Wekan id diff --git a/models/users.js b/models/users.js index 7e23835c..a1bc5b0f 100644 --- a/models/users.js +++ b/models/users.js @@ -1,3 +1,5 @@ +import { SyncedCron } from 'meteor/percolate:synced-cron'; + // Sandstorm context is detected using the METEOR_SETTINGS environment variable // in the package definition. const isSandstorm = @@ -165,7 +167,20 @@ Users.attachSchema( /** * enabled notifications for the user */ - type: [String], + type: [Object], + optional: true, + }, + 'profile.notifications.$.activity': { + /** + * The id of the activity this notification references + */ + type: String, + }, + 'profile.notifications.$.read': { + /** + * the date on which this notification was read + */ + type: Date, optional: true, }, 'profile.showCardsCountAt': { @@ -175,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 @@ -362,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); }, }); @@ -371,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) { @@ -386,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) { @@ -429,6 +464,20 @@ Users.helpers({ return _.contains(notifications, activityId); }, + notifications() { + const { notifications = [] } = this.profile || {}; + for (const index in notifications) { + if (!notifications.hasOwnProperty(index)) continue; + const notification = notifications[index]; + // this preserves their db sort order for editing + notification.dbIndex = index; + notification.activity = Activities.findOne(notification.activity); + } + // this sorts them newest to oldest to match Trello's behavior + notifications.reverse(); + return notifications; + }, + hasShowDesktopDragHandles() { const profile = this.profile || {}; return profile.showDesktopDragHandles || false; @@ -479,6 +528,15 @@ Users.helpers({ return profile.language || 'en'; }, + getStartDayOfWeek() { + const profile = this.profile || {}; + if (typeof profile.startDayOfWeek === 'undefined') { + // default is 'Monday' (1) + return 1; + } + return profile.startDayOfWeek; + }, + getTemplatesBoardId() { return (this.profile || {}).templatesBoardId; }, @@ -573,7 +631,7 @@ Users.mutations({ addNotification(activityId) { return { $addToSet: { - 'profile.notifications': activityId, + 'profile.notifications': { activity: activityId }, }, }; }, @@ -581,7 +639,7 @@ Users.mutations({ removeNotification(activityId) { return { $pull: { - 'profile.notifications': activityId, + 'profile.notifications': { activity: activityId }, }, }; }, @@ -610,6 +668,10 @@ Users.mutations({ return { $set: { 'profile.showCardsCountAt': limit } }; }, + setStartDayOfWeek(startDay) { + return { $set: { 'profile.startDayOfWeek': startDay } }; + }, + setBoardView(view) { return { $set: { @@ -620,16 +682,6 @@ Users.mutations({ }); Meteor.methods({ - setUsername(username, userId) { - check(username, String); - check(userId, String); - const nUsersWithUsername = Users.find({ username }).count(); - if (nUsersWithUsername > 0) { - throw new Meteor.Error('username-already-taken'); - } else { - Users.update(userId, { $set: { username } }); - } - }, setListSortBy(value) { check(value, String); Meteor.user().setListSortBy(value); @@ -650,51 +702,101 @@ Meteor.methods({ check(limit, Number); Meteor.user().setShowCardsCountAt(limit); }, - setEmail(email, userId) { - if (Array.isArray(email)) { - email = email.shift(); - } - check(email, String); - const existingUser = Users.findOne( - { 'emails.address': email }, - { fields: { _id: 1 } }, - ); - if (existingUser) { - throw new Meteor.Error('email-already-taken'); - } else { - Users.update(userId, { - $set: { - emails: [ - { - address: email, - verified: false, - }, - ], - }, - }); - } - }, - setUsernameAndEmail(username, email, userId) { - check(username, String); - if (Array.isArray(email)) { - email = email.shift(); - } - check(email, String); - check(userId, String); - Meteor.call('setUsername', username, userId); - Meteor.call('setEmail', email, userId); - }, - setPassword(newPassword, userId) { - check(userId, String); - check(newPassword, String); - if (Meteor.user().isAdmin) { - Accounts.setPassword(userId, newPassword); - } + changeStartDayOfWeek(startDay) { + check(startDay, Number); + Meteor.user().setStartDayOfWeek(startDay); }, }); if (Meteor.isServer) { Meteor.methods({ + setCreateUser(fullname, username, password, isAdmin, isActive, email) { + if (Meteor.user() && Meteor.user().isAdmin) { + check(fullname, String); + check(username, String); + check(password, String); + check(isAdmin, String); + check(isActive, String); + check(email, String); + + const nUsersWithUsername = Users.find({ username }).count(); + const nUsersWithEmail = Users.find({ email }).count(); + if (nUsersWithUsername > 0) { + throw new Meteor.Error('username-already-taken'); + } else if (nUsersWithEmail > 0) { + throw new Meteor.Error('email-already-taken'); + } else { + Accounts.createUser({ + fullname, + username, + password, + isAdmin, + isActive, + email: email.toLowerCase(), + from: 'admin', + }); + } + } + }, + setUsername(username, userId) { + if (Meteor.user() && Meteor.user().isAdmin) { + check(username, String); + check(userId, String); + const nUsersWithUsername = Users.find({ username }).count(); + if (nUsersWithUsername > 0) { + throw new Meteor.Error('username-already-taken'); + } else { + Users.update(userId, { $set: { username } }); + } + } + }, + setEmail(email, userId) { + if (Meteor.user() && Meteor.user().isAdmin) { + if (Array.isArray(email)) { + email = email.shift(); + } + check(email, String); + const existingUser = Users.findOne( + { 'emails.address': email }, + { fields: { _id: 1 } }, + ); + if (existingUser) { + throw new Meteor.Error('email-already-taken'); + } else { + Users.update(userId, { + $set: { + emails: [ + { + address: email, + verified: false, + }, + ], + }, + }); + } + } + }, + setUsernameAndEmail(username, email, userId) { + if (Meteor.user() && Meteor.user().isAdmin) { + check(username, String); + if (Array.isArray(email)) { + email = email.shift(); + } + check(email, String); + check(userId, String); + Meteor.call('setUsername', username, userId); + Meteor.call('setEmail', email, userId); + } + }, + setPassword(newPassword, userId) { + if (Meteor.user() && Meteor.user().isAdmin) { + check(userId, String); + check(newPassword, String); + if (Meteor.user().isAdmin) { + Accounts.setPassword(userId, newPassword); + } + } + }, // we accept userId, username, email inviteUserToBoard(username, boardId) { check(username, String); @@ -726,8 +828,9 @@ if (Meteor.isServer) { throw new Meteor.Error('error-user-notAllowSelf'); } else { if (posAt <= 0) throw new Meteor.Error('error-user-doesNotExist'); - if (Settings.findOne().disableRegistration) + if (Settings.findOne({ disableRegistration: true })) { throw new Meteor.Error('error-user-notCreated'); + } // Set in lowercase email before creating account const email = username.toLowerCase(); username = email.substring(0, posAt); @@ -748,6 +851,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, @@ -862,6 +975,39 @@ if (Meteor.isServer) { }); } +const addCronJob = _.debounce( + Meteor.bindEnvironment(function notificationCleanupDebounced() { + // passed in the removeAge has to be a number standing for the number of days after a notification is read before we remove it + const envRemoveAge = + process.env.NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE; + // default notifications will be removed 2 days after they are read + const defaultRemoveAge = 2; + const removeAge = parseInt(envRemoveAge, 10) || defaultRemoveAge; + + SyncedCron.add({ + name: 'notification_cleanup', + 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); + removeDate.setDate(removeDate.getDate() + removeAge); + if (removeDate <= new Date()) { + user.removeNotification(notification.activity); + } + } + } + } + }, + }); + + SyncedCron.start(); + }), + 500, +); + if (Meteor.isServer) { // Let mongoDB ensure username unicity Meteor.startup(() => { @@ -875,6 +1021,9 @@ if (Meteor.isServer) { }, { unique: true }, ); + Meteor.defer(() => { + addCronJob(); + }); }); // OLD WAY THIS CODE DID WORK: When user is last admin of board, @@ -1180,10 +1329,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 4b1e750b..5b22af78 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,35 +1,207 @@ { "name": "wekan", - "version": "v3.78.0", + "version": "v4.01.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/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/highlight": "^7.0.0" + "@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": { - "regenerator-runtime": "^0.13.2" + "@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": { + "@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": { @@ -41,21 +213,74 @@ "any-observable": "^0.3.0" } }, + "@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 + }, + "@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" + } + }, + "@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": "6.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", - "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", "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": { @@ -69,20 +294,11 @@ "json-schema-traverse": "^0.3.0" } }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true - }, "ansi-escapes": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", - "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", - "dev": true, - "requires": { - "type-fest": "^0.5.2" - } + "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", @@ -93,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" } @@ -200,48 +415,18 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "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": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "@babel/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": { @@ -334,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": { @@ -397,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" @@ -483,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", @@ -497,15 +674,9 @@ "dev": true }, "chownr": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", - "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==" - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true + "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", @@ -531,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": { @@ -558,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": { @@ -587,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" } @@ -595,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", @@ -643,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", @@ -650,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", @@ -732,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" } @@ -843,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": { @@ -858,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": { @@ -873,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", @@ -910,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", @@ -958,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" @@ -975,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": { @@ -1056,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", @@ -1096,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", @@ -1152,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" @@ -1171,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": { @@ -1203,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": { @@ -1221,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": { @@ -1424,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", @@ -1443,9 +1609,9 @@ } }, "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" @@ -1507,13 +1673,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==", - "dev": true + "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", @@ -1570,10 +1746,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": { @@ -1595,9 +1776,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", @@ -1610,13 +1791,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": { @@ -1645,8 +1825,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", @@ -1692,9 +1871,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": { @@ -1725,9 +1904,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", @@ -1774,47 +1953,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": { @@ -1824,6 +2013,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 + } } } } @@ -2020,12 +2217,6 @@ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", "dev": true }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -2091,8 +2282,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", @@ -2104,6 +2294,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", @@ -2121,10 +2316,18 @@ "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.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, "ldap-filter": { @@ -2205,6 +2408,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", @@ -2316,51 +2528,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": { @@ -2388,8 +2555,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", @@ -2421,54 +2587,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.3", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.3.tgz", - "integrity": "sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA==", + "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": { @@ -3110,9 +3234,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": { @@ -3124,9 +3248,9 @@ } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "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", @@ -3167,11 +3291,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": "0.0.8" + "minimist": "^1.2.5" } }, "moment": { @@ -3181,12 +3305,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", @@ -3194,9 +3318,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==" } } }, @@ -3206,9 +3330,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": { @@ -3247,10 +3371,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", @@ -3284,13 +3407,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": { @@ -3300,9 +3433,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", @@ -3313,13 +3446,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" @@ -3351,12 +3484,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": { @@ -3503,26 +3637,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": { @@ -3592,9 +3726,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" } @@ -3649,8 +3783,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", @@ -3700,12 +3833,6 @@ "semver-compare": "^1.0.0" } }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -3763,325 +3890,37 @@ "dev": true }, "prettier-eslint": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-8.8.2.tgz", - "integrity": "sha512-2UzApPuxi2yRoyMlXMazgR6UcH9DKJhNgCviIwY3ixZ9THWSSrUww5vkiZ3C48WvpFl1M1y/oU63deSy1puWEA==", + "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": { - "babel-runtime": "^6.26.0", + "@typescript-eslint/parser": "^1.10.2", "common-tags": "^1.4.0", + "core-js": "^3.1.4", "dlv": "^1.1.0", - "eslint": "^4.0.0", - "indent-string": "^3.2.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": "^2.5.1", - "typescript-eslint-parser": "^16.0.0", + "typescript": "^3.2.1", "vue-eslint-parser": "^2.0.2" }, "dependencies": { - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "^3.0.4" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "eslint": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", - "dev": true, - "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", - "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", - "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" - } - }, - "eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "dev": true, - "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" - } - }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - } - }, - "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", - "dev": true, - "requires": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" - } - }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "core-js": { + "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 }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { + "indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": true, - "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - } - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true } } }, @@ -4136,9 +3975,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", @@ -4149,13 +3988,6 @@ "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } } }, "read-pkg": { @@ -4180,9 +4012,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", @@ -4194,9 +4026,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", @@ -4232,39 +4064,6 @@ "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", "dev": true }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - }, - "dependencies": { - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "^0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - } - } - }, "require_optional": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", @@ -4275,10 +4074,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" } @@ -4295,12 +4093,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" } }, @@ -4311,41 +4109,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" } }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "requires": { - "rx-lite": "*" - } - }, "rxjs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", - "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", + "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" @@ -4445,9 +4228,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", @@ -4516,12 +4299,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 } } }, @@ -4597,17 +4374,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", @@ -4615,12 +4392,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": { @@ -4659,9 +4443,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": { @@ -4738,24 +4522,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": { @@ -4806,7 +4612,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" } @@ -4818,9 +4623,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", @@ -4830,12 +4635,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" @@ -4847,16 +4652,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": { @@ -4928,6 +4727,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", @@ -4971,9 +4775,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": { @@ -4985,12 +4789,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", @@ -4998,29 +4796,11 @@ "dev": true }, "typescript": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", - "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", + "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", "dev": true }, - "typescript-eslint-parser": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-16.0.1.tgz", - "integrity": "sha512-IKawLTu4A2xN3aN/cPLxvZ0bhxZHILGDKTZWvWNJ3sLNhJ3PjfMEDQmR2VMpdRPrmWOadgWXRwjLBzSA8AGsaQ==", - "dev": true, - "requires": { - "lodash.unescape": "4.0.1", - "semver": "5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - } - } - }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -5152,9 +4932,9 @@ }, "dependencies": { "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "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": { @@ -5174,6 +4954,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", @@ -5213,10 +5002,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 0d19b018..85dc1f9b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v3.78.0", + "version": "v4.01.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", @@ -50,17 +51,18 @@ "lint-staged": "^7.3.0", "pre-commit": "^1.2.2", "prettier": "^1.19.1", - "prettier-eslint": "^8.8.2" + "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", "bson": "^4.0.3", "bunyan": "^1.8.12", "es6-promise": "^4.2.4", - "fibers": "^4.0.2", + "flatted": "^2.0.1", "gridfs-stream": "^0.5.3", "ldapjs": "^1.0.2", "meteor-node-stubs": "^0.4.1", diff --git a/packages/markdown/marked/.editorconfig b/packages/markdown/marked/.editorconfig deleted file mode 100644 index 97ff4e8a..00000000 --- a/packages/markdown/marked/.editorconfig +++ /dev/null @@ -1,16 +0,0 @@ -root = true - -[*.{json,js}] -charset = utf-8 -end_of_line = lf -insert_final_newline = true -indent_style = space -indent_size = 2 - -[*.md, !test/*.md] -charset = utf-8 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true -indent_style = tab -indent_size = 4
\ No newline at end of file diff --git a/packages/markdown/marked/.eslintignore b/packages/markdown/marked/.eslintignore deleted file mode 100644 index 121531af..00000000 --- a/packages/markdown/marked/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -*.min.js diff --git a/packages/markdown/marked/.gitattributes b/packages/markdown/marked/.gitattributes deleted file mode 100644 index 8f2d8c35..00000000 --- a/packages/markdown/marked/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -test/* linguist-vendored - diff --git a/packages/markdown/marked/.github/ISSUE_TEMPLATE.md b/packages/markdown/marked/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 9df84eaf..00000000 --- a/packages/markdown/marked/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,42 +0,0 @@ -**Marked version:** - -**Markdown flavor:** Markdown.pl|CommonMark|GitHub Flavored Markdown|n/a - -<!-- The NPM version or commit hash having the issue --> - -<!-- - - If submitting something other than a defect with Marked itself, please use the following: - -**Proposal type:** new feature | project operations | other - -## What pain point are you perceiving? - -## What solution are you suggesting? - ---> - -## Expectation - -**CommonMark Demo:** [demo](https://spec.commonmark.org/dingus/) -<!-- You can replace the link above with a permalink from: https://spec.commonmark.org/dingus/ --> - -<!-- Describe the output you are expecting from marked --> - -## Result - -**Marked Demo:** [demo](https://marked.js.org/demo/) -<!-- You can replace the link above with a permalink from: https://marked.js.org/demo/ --> - -<!-- Describe the output you received from marked --> - -## What was attempted - -<!-- Describe what code combination got you there --> - -<!-- - If error is thrown add the following: - -## Call stack & console log - ---> diff --git a/packages/markdown/marked/.github/ISSUE_TEMPLATE/Bug_report.md b/packages/markdown/marked/.github/ISSUE_TEMPLATE/Bug_report.md deleted file mode 100644 index d8042b4d..00000000 --- a/packages/markdown/marked/.github/ISSUE_TEMPLATE/Bug_report.md +++ /dev/null @@ -1,27 +0,0 @@ ----
-name: Bug report
-about: Marked says it does this thing but does not
-
----
-
-**Describe the bug**
-A clear and concise description of what the bug is.
-
-**To Reproduce**
-Steps to reproduce the behavior:
-
-<!-- If possible, use the Marked Demo permalink and compare to the CommonMark Dingus permalink to demonstrate the bug -->
-<!--
-1. [Marked Demo](https://marked.js.org/demo/)
-2. [CommonMark Demo](https://spec.commonmark.org/dingus/)
--->
-
-<!-- If you need a specific version and options to reproduce the bug, use the following template -->
-<!--
-1. Install marked `npm install --save marked@0.3.19` with the version you are using
-2. Run marked with input string and options such as `marked('hello *world*', {gfm: true})`
-3. Actual output (or error) is...
--->
-
-**Expected behavior**
-A clear and concise description of what you expected to happen.
diff --git a/packages/markdown/marked/.github/ISSUE_TEMPLATE/Feature_request.md b/packages/markdown/marked/.github/ISSUE_TEMPLATE/Feature_request.md deleted file mode 100644 index 745d4b43..00000000 --- a/packages/markdown/marked/.github/ISSUE_TEMPLATE/Feature_request.md +++ /dev/null @@ -1,14 +0,0 @@ ----
-name: Feature request
-about: Marked doesn't do this thing and I think it should
-
----
-
-**Describe the feature**
-A clear and concise description of what you would like.
-
-**Why is this feature necessary?**
-A clear and concise description of why.
-
-**Describe alternatives you've considered**
-A clear and concise description of any alternative solutions or features you've considered.
diff --git a/packages/markdown/marked/.github/ISSUE_TEMPLATE/Proposal.md b/packages/markdown/marked/.github/ISSUE_TEMPLATE/Proposal.md deleted file mode 100644 index aa94da3a..00000000 --- a/packages/markdown/marked/.github/ISSUE_TEMPLATE/Proposal.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -name: Proposal -about: Marked doesn't do this thing and I think it should - ---- - -**What pain point are you perceiving?.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. diff --git a/packages/markdown/marked/.github/PULL_REQUEST_TEMPLATE.md b/packages/markdown/marked/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 8274e607..00000000 --- a/packages/markdown/marked/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,53 +0,0 @@ - -<!-- - - If release PR, add ?template=release.md to the PR url to use the release PR template. - - If badging PR, add ?template=badges.md to the PR url to use the badges PR template. - - Otherwise, you are stating this PR fixes an issue that has been submitted; or, - describes the issue or proposal under consideration and contains the project-related code to implement. - ---> - -**Marked version:** - -<!-- The NPM version or commit hash having the issue --> - -**Markdown flavor:** Markdown.pl|CommonMark|GitHub Flavored Markdown|n/a - -## Description - -- Fixes #### (if fixing a known issue; otherwise, describe issue using the following format) - -<!-- - - If no issue exists that you're aware of. The maintainers should be able to figure out if it's a duplicate. - -## Expectation - -Describe the output you are expecting from marked - -## Result - -Describe the output you received from marked - -## What was attempted - -Describe what code combination got you there - ---> - -## Contributor - -- [ ] Test(s) exist to ensure functionality and minimize regression (if no tests added, list tests covering this PR); or, -- [ ] no tests required for this PR. -- [ ] If submitting new feature, it has been documented in the appropriate places. - -## Committer - -In most cases, this should be a different person than the contributor. - -- [ ] Draft GitHub release notes have been updated. -- [ ] CI is green (no forced merge required). -- [ ] Merge PR diff --git a/packages/markdown/marked/.github/PULL_REQUEST_TEMPLATE/badges.md b/packages/markdown/marked/.github/PULL_REQUEST_TEMPLATE/badges.md deleted file mode 100644 index 2078243d..00000000 --- a/packages/markdown/marked/.github/PULL_REQUEST_TEMPLATE/badges.md +++ /dev/null @@ -1,50 +0,0 @@ -**@mention the contributor:** - -## Recommendation to: - -- [ ] Change user group -- [ ] Add a badge -- [ ] Remove a badge - -<!-- - - Explain your reasoning behind tagging that person. - - Preferably by citing objective examples, like PRs, Issues, and so on. - ---> - -## As the one mentioned, I would like to: - -- [ ] accept the recommendation; or, -- [ ] graciously decline; or, -- [ ] dispute the recommendation - -within 30 days, if you have not indicated which option you are taking one of the following will happen: - -1. If adding a badge, we will assume you are graciously declining. -2. If removing a badge, we will assume you do not want to dispute the recommendation; therefore, the badge will be removed. - -<!-- - - Why would someone not accept a badge? Loads of reasons depending on the circumstances. - - 1. If you're a committer and someone puts a badge for you on having decision making authority in an area, do you really a) think you earned it and b) think you can do that *and* all the other stuff you got going as a committer, admin, or publisher (not to even mention your outside life)? Maybe not. And that's okay. Thank them for the recognition, explain you aren't able to take more on at the moment. It's cool to get recognized though. - 2. Maybe you don't feel you actually earned it yet. I remember being in an interview once. The interviewer asked me to give an example of going above and beyond the call of duty. I said, "That's hard. Because what you consider going above and beyond may be what I consider to be 'just rising to'. If we're in battle and you get wounded and I pull you out of the frey before heading back into it, I don't consider that going above and beyond; I consider that rising to." - - Why would someone remove their own badge? Loads of reasons... - - 1. Maybe you got a lot going on right now and want to broadcast to the Marked community that, "Hey, I don't want to say I'm going to do this unless I can really commit to it right now in a way that serves the project well." That's awesome! That takes courage! Because a) saying "no" is hard for most humans ("people pleasers") and b) the alternative, well, for those of us here since about October of 2017 (and prior), we know what the alternative can look like. - 2. Maybe you just think you've done all you can to help and learned all you can from the experience. Again, very awesome and courageous. It takes courage to know when to walk away on your own accord. - - Why would you want to remove someone's badge? Loads of reasons... - - 1. Maybe they have decision making authority on something. You asked for their advice. And, you ended up waiting almost a month before receiving a response. - 2. Maybe it was relevant at the time (Master of Marked, for example) but you think they've lost their former level of skill (fell out of practice, for example). They could always get it back. - 3. Maybe to signal to them that, "Hey, you seem to have forgotten about us. Are you still around (or alive)?" - - Anyway, you get the idea. This isn't about good or bad...it's just about giving the community a simple game mechanic by which to publicly say, "Thank you" or "Here's what my status is" in the community or "Hey, I think something's wrong here" in a civil manner. - ---> - -Note: All committers must approve via review before merging, the disapproving committer can simply close the PR.
\ No newline at end of file diff --git a/packages/markdown/marked/.github/PULL_REQUEST_TEMPLATE/release.md b/packages/markdown/marked/.github/PULL_REQUEST_TEMPLATE/release.md deleted file mode 100644 index 29cd7f2e..00000000 --- a/packages/markdown/marked/.github/PULL_REQUEST_TEMPLATE/release.md +++ /dev/null @@ -1,25 +0,0 @@ -## Publisher - -- [ ] `$ npm version` has been run. -- [ ] Release notes in [draft GitHub release](https://github.com/markedjs/marked/releases) are up to date -- [ ] Release notes include which flavors and versions of Markdown are supported by this release -- [ ] Committer checklist is complete. -- [ ] Merge PR. -- [ ] Publish GitHub release using `master` with correct version number. -- [ ] `$ npm publish` has been run. -- [ ] Create draft GitHub release to prepare next release. - -Note: If merges to `master` occur after submitting this PR and before running `$ npm pubish` you should be able to - -1. pull from `upstream/master` (`git pull upstream master`) into the branch holding this version, -2. run `$ npm run build` to regenerate the `min` file, and -3. commit and push the updated changes. - -## Committer - -In most cases, this should be someone different than the publisher. - -- [ ] Version in `package.json` has been updated (see [PUBLISHING.md](https://github.com/markedjs/marked/blob/master/docs/PUBLISHING.md)). -- [ ] The `marked.min.js` has been updated; or, -- [ ] release does not change library. -- [ ] CI is green (no forced merge required). diff --git a/packages/markdown/marked/.gitignore b/packages/markdown/marked/.gitignore deleted file mode 100644 index 68ccf75d..00000000 --- a/packages/markdown/marked/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.DS_Store -node_modules/ -test/compiled_tests diff --git a/packages/markdown/marked/.travis.yml b/packages/markdown/marked/.travis.yml deleted file mode 100644 index 8ff71da4..00000000 --- a/packages/markdown/marked/.travis.yml +++ /dev/null @@ -1,46 +0,0 @@ -language: node_js - -jobs: - fast_finish: true - allow_failures: - - stage: security scan 🔐 - - include: - - stage: unit tests 👩🏽💻 - script: npm run test:unit - node_js: lts/* - - - stage: spec tests 👩🏽💻 - script: npm run test:specs - node_js: v4 - - node_js: lts/* - - node_js: node - - - stage: lint ✨ - script: npm run test:lint - node_js: lts/* - - - stage: minify 🗜️ - script: | - npm run build - if ! git diff --quiet; then - git config --global user.email "travis@travis-ci.org" - git config --global user.name "Travis-CI" - git config credential.helper "store --file=.git/credentials" - echo "https://${GITHUB_TOKEN}:@github.com" > .git/credentials - git commit -am '🗜️ minify [skip ci]' - git push origin HEAD:${TRAVIS_BRANCH} - fi - node_js: lts/* - if: branch = master AND type = push - - - stage: security scan 🔐 - script: npm run test:redos - node_js: lts/* - -cache: - directories: - - node_modules - -git: - depth: 3 diff --git a/packages/markdown/marked/Makefile b/packages/markdown/marked/Makefile deleted file mode 100644 index 7deead54..00000000 --- a/packages/markdown/marked/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -all: - @cp lib/marked.js marked.js - @uglifyjs --comments '/\*[^\0]+?Copyright[^\0]+?\*/' -o marked.min.js lib/marked.js - -clean: - @rm marked.js - @rm marked.min.js - -bench: - @node test --bench - -man/marked.1.txt: - groff -man -Tascii man/marked.1 | col -b > man/marked.1.txt - -.PHONY: clean all diff --git a/packages/markdown/marked/README.md b/packages/markdown/marked/README.md index 2dfd5cd1..e93504ca 100644 --- a/packages/markdown/marked/README.md +++ b/packages/markdown/marked/README.md @@ -39,7 +39,7 @@ Also read about: ## Usage -### Warning: 🚨 Marked does not [sanitize](https://marked.js.org/#/USING_ADVANCED.md#options) the output HTML by default 🚨 +### Warning: 🚨 Marked does not [sanitize](https://marked.js.org/#/USING_ADVANCED.md#options) the output HTML. Please use a sanitize library, like [DOMPurify](https://github.com/cure53/DOMPurify) (recommended), [sanitize-html](https://github.com/apostrophecms/sanitize-html) or [insane](https://github.com/bevacqua/insane) on the output HTML! 🚨 **CLI** diff --git a/packages/markdown/marked/SECURITY.md b/packages/markdown/marked/SECURITY.md new file mode 100644 index 00000000..4a2e1cb4 --- /dev/null +++ b/packages/markdown/marked/SECURITY.md @@ -0,0 +1,10 @@ +# Security Policy + +The only completely secure system is the one that doesn't exist in the first place. +Having said that, we take the security of Marked very seriously. + +## Reporting a Vulnerability + +Please disclose potential security issues by email to the project [committers](https://marked.js.org/#/AUTHORS.md) as well as the [listed owners within NPM](https://docs.npmjs.com/cli/owner). +We will provide an initial assessment of security reports within 48 hours and should apply patches within 2 weeks +(also, feel free to contribute a fix for the issue). diff --git a/packages/markdown/marked/bin/marked b/packages/markdown/marked/bin/marked deleted file mode 100755 index 0ea63c54..00000000 --- a/packages/markdown/marked/bin/marked +++ /dev/null @@ -1,215 +0,0 @@ -#!/usr/bin/env node - -/** - * Marked CLI - * Copyright (c) 2011-2013, Christopher Jeffrey (MIT License) - */ - -var fs = require('fs'), - path = require('path'), - marked = require('../'); - -/** - * Man Page - */ - -function help() { - var spawn = require('child_process').spawn; - - var options = { - cwd: process.cwd(), - env: process.env, - setsid: false, - stdio: 'inherit' - }; - - spawn('man', [path.resolve(__dirname, '/../man/marked.1')], options) - .on('error', function() { - fs.readFile(path.resolve(__dirname, '/../man/marked.1.txt'), 'utf8', function(err, data) { - if (err) throw err; - console.log(data); - }); - }); -} - -function version() { - var pkg = require('../package.json'); - console.log(pkg.version); -} - -/** - * Main - */ - -function main(argv, callback) { - var files = [], - options = {}, - input, - output, - string, - arg, - tokens, - opt; - - function getarg() { - var arg = argv.shift(); - - if (arg.indexOf('--') === 0) { - // e.g. --opt - arg = arg.split('='); - if (arg.length > 1) { - // e.g. --opt=val - argv.unshift(arg.slice(1).join('=')); - } - arg = arg[0]; - } else if (arg[0] === '-') { - if (arg.length > 2) { - // e.g. -abc - argv = arg.substring(1).split('').map(function(ch) { - return '-' + ch; - }).concat(argv); - arg = argv.shift(); - } else { - // e.g. -a - } - } else { - // e.g. foo - } - - return arg; - } - - while (argv.length) { - arg = getarg(); - switch (arg) { - case '--test': - return require('../test').main(process.argv.slice()); - case '-o': - case '--output': - output = argv.shift(); - break; - case '-i': - case '--input': - input = argv.shift(); - break; - case '-s': - case '--string': - string = argv.shift(); - break; - case '-t': - case '--tokens': - tokens = true; - break; - case '-h': - case '--help': - return help(); - case '-v': - case '--version': - return version(); - default: - if (arg.indexOf('--') === 0) { - opt = camelize(arg.replace(/^--(no-)?/, '')); - if (!marked.defaults.hasOwnProperty(opt)) { - continue; - } - if (arg.indexOf('--no-') === 0) { - options[opt] = typeof marked.defaults[opt] !== 'boolean' - ? null - : false; - } else { - options[opt] = typeof marked.defaults[opt] !== 'boolean' - ? argv.shift() - : true; - } - } else { - files.push(arg); - } - break; - } - } - - function getData(callback) { - if (!input) { - if (files.length <= 2) { - if (string) { - return callback(null, string); - } - return getStdin(callback); - } - input = files.pop(); - } - return fs.readFile(input, 'utf8', callback); - } - - return getData(function(err, data) { - if (err) return callback(err); - - data = tokens - ? JSON.stringify(marked.lexer(data, options), null, 2) - : marked(data, options); - - if (!output) { - process.stdout.write(data + '\n'); - return callback(); - } - - return fs.writeFile(output, data, callback); - }); -} - -/** - * Helpers - */ - -function getStdin(callback) { - var stdin = process.stdin, - buff = ''; - - stdin.setEncoding('utf8'); - - stdin.on('data', function(data) { - buff += data; - }); - - stdin.on('error', function(err) { - return callback(err); - }); - - stdin.on('end', function() { - return callback(null, buff); - }); - - try { - stdin.resume(); - } catch (e) { - callback(e); - } -} - -function camelize(text) { - return text.replace(/(\w)-(\w)/g, function(_, a, b) { - return a + b.toUpperCase(); - }); -} - -function handleError(err) { - if (err.code === 'ENOENT') { - console.error(`marked: output to ${err.path}: No such directory`); - return process.exit(1); - } - throw err; -} - -/** - * Expose / Entry Point - */ - -if (!module.parent) { - process.title = 'marked'; - main(process.argv.slice(), function(err, code) { - if (err) return handleError(err); - return process.exit(code || 0); - }); -} else { - module.exports = main; -} diff --git a/packages/markdown/marked/bower.json b/packages/markdown/marked/bower.json deleted file mode 100644 index 57c91f03..00000000 --- a/packages/markdown/marked/bower.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "marked", - "homepage": "https://github.com/markedjs/marked", - "authors": [ - "Christopher Jeffrey <chjjeffrey@gmail.com>" - ], - "description": "A markdown parser built for speed", - "keywords": [ - "markdown", - "markup", - "html" - ], - "main": "lib/marked.js", - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "app/bower_components", - "test", - "tests" - ] -} diff --git a/packages/markdown/marked/component.json b/packages/markdown/marked/component.json deleted file mode 100644 index 7ebd0356..00000000 --- a/packages/markdown/marked/component.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "marked", - "version": "0.3.4", - "repo": "markedjs/marked", - "description": "A markdown parser built for speed", - "keywords": ["markdown", "markup", "html"], - "scripts": ["lib/marked.js"], - "main": "lib/marked.js", - "license": "MIT" -} diff --git a/packages/markdown/marked/.eslintrc.json b/packages/markdown/marked/docs/.eslintrc.json index 1800cb72..6ee10878 100644 --- a/packages/markdown/marked/.eslintrc.json +++ b/packages/markdown/marked/docs/.eslintrc.json @@ -3,27 +3,31 @@ "plugins": [ "standard" ], - "parserOptions": { "ecmaVersion": 5 }, + "parserOptions": { + "ecmaVersion": 5, + "sourceType": "script" + }, "rules": { "semi": ["error", "always"], - "indent": ["warn", 2, { - "VariableDeclarator": { "var": 2 }, + "indent": ["error", 2, { "SwitchCase": 1, + "VariableDeclarator": { "var": 2 }, "outerIIFEBody": 0 }], - "space-before-function-paren": "off", - "object-curly-spacing": "off", "operator-linebreak": ["error", "before", { "overrides": { "=": "after" } }], + "space-before-function-paren": ["error", "never"], "no-cond-assign": "off", "no-useless-escape": "off", - "no-return-assign": "off", "one-var": "off", - "no-control-regex": "off" + "no-control-regex": "off", + "no-prototype-builtins": "off", + + "prefer-const": "off", + "no-var": "off" }, "env": { "node": true, "browser": true, - "amd": true, - "jasmine": true + "amd": true } } diff --git a/packages/markdown/marked/docs/AUTHORS.md b/packages/markdown/marked/docs/AUTHORS.md index dd914095..87ab522f 100644 --- a/packages/markdown/marked/docs/AUTHORS.md +++ b/packages/markdown/marked/docs/AUTHORS.md @@ -1,6 +1,6 @@ # Authors -Marked takes an encompassing approach to its community. As such, you can think of these as [concentric circles](https://medium.com/the-node-js-collection/healthy-open-source-967fa8be7951), where each group encompases the following groups. +Marked takes an encompassing approach to its community. As such, you can think of these as [concentric circles](https://medium.com/the-node-js-collection/healthy-open-source-967fa8be7951), where each group encompasses the following groups. <table> <tbody> @@ -170,7 +170,7 @@ To be removed: You can remove yourself through the [GitHub UI](https://help.gith A note on volunteering: 1. Please do not volunteer unless you believe you can demonstrate to your peers you can do the work required. -2. Please do not overcommit yourself; we count on those committed to the project to be responsive. Really consider, with all you have going on, wehther you able to really commit to it. +2. Please do not overcommit yourself; we count on those committed to the project to be responsive. Really consider, with all you have going on, whether you able to really commit to it. 3. Don't let the previous frighten you away, it can always be changed later by you or your peers. [Details on badges](#badges) @@ -227,7 +227,7 @@ Badges? If you *want* 'em, we got 'em, and here's how you get 'em (and…dr </blockquote> </dd> <dt>Dr. Docs</dt> - <dd>Someone who has contributed a great deal to the creation and maintainance of the non-code areas of marked.</dd> + <dd>Someone who has contributed a great deal to the creation and maintenance of the non-code areas of marked.</dd> <dt>Eye for the CLI</dt> <dd>At this point? Pretty much anyone who can update that `man` file to the current Marked version without regression in the CLI tool itself.</dd> <dt>GitHub Guru</dt> @@ -259,9 +259,9 @@ Badges? If you *want* 'em, we got 'em, and here's how you get 'em (and…dr <dl> <dt>Defibrillator</dt> - <dd>A contributor who stepped up to help bring Marked back to life by contriuting solutions to help Marked pass when compared against the CommonMark and GitHub Flavored Markdown specifications.</dd> + <dd>A contributor who stepped up to help bring Marked back to life by contributing solutions to help Marked pass when compared against the CommonMark and GitHub Flavored Markdown specifications.</dd> <dt>Maker of the Marked mark</dt> - <dd>This badge is given to the person or oganization credited with creating the logo (or logotype) used in Marked communications for a given period of time. **Maker of the Marked mark from 2017 to present**, for example.</dd> + <dd>This badge is given to the person or organization credited with creating the logo (or logotype) used in Marked communications for a given period of time. **Maker of the Marked mark from 2017 to present**, for example.</dd> <dt>Release Wrangler</dt> <dd>This is a badge given to all Publishers.</dd> <dt>Snyk's Security Saint</dt> diff --git a/packages/markdown/marked/docs/CONTRIBUTING.md b/packages/markdown/marked/docs/CONTRIBUTING.md index ac88ba15..f5ec82b6 100644 --- a/packages/markdown/marked/docs/CONTRIBUTING.md +++ b/packages/markdown/marked/docs/CONTRIBUTING.md @@ -5,9 +5,10 @@ - [ ] Make sure you are on the `master` branch. - [ ] Be sure to run `npm install` or `npm update`. - [ ] Create a branch. -- [ ] Make as small a change as possible. -- [ ] Run `npm test`, fix any broken things (for linting, you can run `npm run lint` to have the linter fix them for you). -- [ ] Submit a PR. +- [ ] Update code in `src` folder. (`lib` folder is for auto compiled code) +- [ ] Run `npm run test:all`, fix any broken things (for linting, you can run `npm run lint` to have the linter fix them for you). +- [ ] Run `npm run build:reset` to remove changes to compiled files. +- [ ] Submit a Pull Request. ## Design principles @@ -30,16 +31,19 @@ The following table lists the ticket type labels we use when there is work to be |RR - refactor and re-engineer |Results in an improvement to developers using Marked (improved readability) or end-users (faster performance) or both. | |NFS - new feature (spec related) |A capability Marked does not currently provide but is in one of the [supported specifications](#/README.md#specifications) | |NFU - new feature (user requested) |A capability Marked does not currently provide but has been requested by users of Marked. | +|NFE - new feature (should be an extension) |A capability Marked does not currently provide and is not part of a spec. | ## Test early, often, and everything We try to write test cases to validate output (writing tests based on the [supported specifications](#/README.md#specifications)) and minimize regression (writing tests for issues fixed). Therefore, if you would like to contribute, some things you should know regarding the test harness. -|Location |Description | -|:-------------|:---------------------------------------------------| -|/test/browser |For testing Marked in a client-side implementation. | -|/test/new |Tests not related to the original `markdown.pl`. | -|/test/original|Tests validating against the original `markdown.pl`.| +|Location |Description | +|:---------------------|:--------------------------------------------------------------------------------------------------------------| +|/test/specs/commonmark|Tests for [CommonMark](https://spec.commonmark.org/current/) compliance | +|/test/specs/gfm |Tests for [GFM](https://github.github.com/gfm/) compliance | +|/test/specs/new |Tests not related to the original `markdown.pl`. | +|/test/specs/original |Tests validating against the original `markdown.pl`. | +|/test/specs/redos |Tests for [ReDOS](https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS) vulnerabilities| If your test uses features or options, assuming `gfm` is set to `false`, for example, you can add [front-matter](https://www.npmjs.com/package/front-matter) to the top of your `.md` file @@ -84,9 +88,8 @@ To check for (and fix) standardized syntax (lint): npm run lint ``` -To build your own minified version of Marked: +To build your own es5, esm, and minified versions of Marked: ```bash npm run build ``` - diff --git a/packages/markdown/marked/docs/PUBLISHING.md b/packages/markdown/marked/docs/PUBLISHING.md index 27937c2f..73972667 100644 --- a/packages/markdown/marked/docs/PUBLISHING.md +++ b/packages/markdown/marked/docs/PUBLISHING.md @@ -7,7 +7,7 @@ ## Overall strategy -**Master is always shippable:** We try to merge PRs in such a way that `master` is the only branch to really be concerned about *and* `master` can always be released. This allows smoother flow between new fetures, bug fixes, and so on. (Almost a continuous deployment setup, without automation.) +**Master is always shippable:** We try to merge PRs in such a way that `master` is the only branch to really be concerned about *and* `master` can always be released. This allows smoother flow between new features, bug fixes, and so on. (Almost a continuous deployment setup, without automation.) ## Versioning @@ -20,5 +20,5 @@ We follow [semantic versioning](https://semver.org) where the following sequence What to expect while Marked is a zero-major (0.x.y): 1. The major will remain at zero; thereby, alerting consumers to the potentially volatile nature of the package. -2. The minor will tend to be more analagous to a `major` release. -3. The patch will tend to be more analagous to a `minor` release or a collection of bug fixes (patches). +2. The minor will tend to be more analogous to a `major` release. +3. The patch will tend to be more analogous to a `minor` release or a collection of bug fixes (patches). diff --git a/packages/markdown/marked/docs/README.md b/packages/markdown/marked/docs/README.md index 261e4f3b..f5ba9d2b 100644 --- a/packages/markdown/marked/docs/README.md +++ b/packages/markdown/marked/docs/README.md @@ -25,7 +25,7 @@ These documentation pages are also rendered using marked 💯 <h2 id="usage">Usage</h2> -### Warning: 🚨 Marked does not [sanitize](https://marked.js.org/#/USING_ADVANCED.md#options) the output HTML by default 🚨 +### Warning: 🚨 Marked does not [sanitize](https://marked.js.org/#/USING_ADVANCED.md#options) the output HTML. Please use a sanitize library, like [DOMPurify](https://github.com/cure53/DOMPurify) (recommended), [sanitize-html](https://github.com/apostrophecms/sanitize-html) or [insane](https://github.com/bevacqua/insane) on the output HTML! 🚨 **CLI** @@ -72,8 +72,8 @@ We actively support the features of the following [Markdown flavors](https://git |Flavor |Version | |:----------------------------------------------------------|:----------| |The original markdown.pl |-- | -|[CommonMark](http://spec.commonmark.org/0.28/) |0.28 | -|[GitHub Flavored Markdown](https://github.github.com/gfm/) |0.28 | +|[CommonMark](http://spec.commonmark.org/0.29/) |0.29 | +|[GitHub Flavored Markdown](https://github.github.com/gfm/) |0.29 | By supporting the above Markdown flavors, it's possible that Marked can help you use other flavors as well; however, these are not actively supported by the community. diff --git a/packages/markdown/marked/docs/USING_ADVANCED.md b/packages/markdown/marked/docs/USING_ADVANCED.md index 6490caa7..81df205b 100644 --- a/packages/markdown/marked/docs/USING_ADVANCED.md +++ b/packages/markdown/marked/docs/USING_ADVANCED.md @@ -14,18 +14,19 @@ marked(markdownString [,options] [,callback]) ```js // Create reference instance -var myMarked = require('marked'); +const marked = require('marked'); // Set options // `highlight` example uses `highlight.js` -myMarked.setOptions({ - renderer: new myMarked.Renderer(), - highlight: function(code) { - return require('highlight.js').highlightAuto(code).value; +marked.setOptions({ + renderer: new marked.Renderer(), + highlight: function(code, language) { + const hljs = require('highlight.js'); + const validLanguage = hljs.getLanguage(language) ? language : 'plaintext'; + return hljs.highlight(validLanguage, code).value; }, pedantic: false, gfm: true, - tables: true, breaks: false, sanitize: false, smartLists: true, @@ -34,14 +35,14 @@ myMarked.setOptions({ }); // Compile -console.log(myMarked('I am using __markdown__.')); +console.log(marked(markdownString)); ``` <h2 id="options">Options</h2> |Member |Type |Default |Since |Notes | |:-----------|:---------|:--------|:--------|:-------------| -|baseUrl |`string` |`null` |0.3.9 |A prefix url for any relative link. | +|baseUrl |`string` |`null` |0.3.9 |A prefix url for any relative link. | |breaks |`boolean` |`false` |v0.2.7 |If true, add `<br>` on a single line break (copies GitHub). Requires `gfm` be `true`.| |gfm |`boolean` |`true` |v0.2.1 |If true, use approved [GitHub Flavored Markdown (GFM) specification](https://github.github.com/gfm/).| |headerIds |`boolean` |`true` |v0.4.0 |If true, include an `id` attribute when emitting headings (h1, h2, h3, etc).| @@ -50,13 +51,12 @@ console.log(myMarked('I am using __markdown__.')); |langPrefix |`string` |`'language-'`|v0.3.0|A string to prefix the className in a `<code>` block. Useful for syntax highlighting.| |mangle |`boolean` |`true` |v0.3.4 |If true, autolinked email address is escaped with HTML character references.| |pedantic |`boolean` |`false` |v0.2.1 |If true, conform to the original `markdown.pl` as much as possible. Don't fix original markdown bugs or behavior. Turns off and overrides `gfm`.| -|renderer |`object` |`new Renderer()`|v0.3.0|An object containing functions to render tokens to HTML. See [extensibility](USING_PRO.md) for more details.| -|sanitize |`boolean` |`false` |v0.2.1 |If true, sanitize the HTML passed into `markdownString` with the `sanitizer` function.| +|renderer |`object` |`new Renderer()`|v0.3.0|An object containing functions to render tokens to HTML. See [extensibility](/#/USING_PRO.md) for more details.| +|sanitize |`boolean` |`false` |v0.2.1 |If true, sanitize the HTML passed into `markdownString` with the `sanitizer` function.<br>**Warning**: This feature is deprecated and it should NOT be used as it cannot be considered secure.<br>Instead use a sanitize library, like [DOMPurify](https://github.com/cure53/DOMPurify) (recommended), [sanitize-html](https://github.com/apostrophecms/sanitize-html) or [insane](https://github.com/bevacqua/insane) on the output HTML! | |sanitizer |`function`|`null` |v0.3.4 |A function to sanitize the HTML passed into `markdownString`.| |silent |`boolean` |`false` |v0.2.7 |If true, the parser does not throw any exception.| |smartLists |`boolean` |`false` |v0.2.8 |If true, use smarter list behavior than those found in `markdown.pl`.| |smartypants |`boolean` |`false` |v0.2.9 |If true, use "smart" typographic punctuation for things like quotes and dashes.| -|tables |`boolean` |`true` |v0.2.7 |If true and `gfm` is true, use [GFM Tables extension](https://github.github.com/gfm/#tables-extension-).| |xhtml |`boolean` |`false` |v0.3.2 |If true, emit self-closing HTML tags for void elements (<br/>, <img/>, etc.) with a "/" as required by XHTML.| <h2 id="highlight">Asynchronous highlighting</h2> @@ -64,7 +64,7 @@ console.log(myMarked('I am using __markdown__.')); Unlike `highlight.js` the `pygmentize.js` library uses asynchronous highlighting. This example demonstrates that marked is agnostic when it comes to the highlighter you use. ```js -myMarked.setOptions({ +marked.setOptions({ highlight: function(code, lang, callback) { require('pygmentize-bundled') ({ lang: lang, format: 'html' }, code, function (err, result) { callback(err, result.toString()); @@ -72,7 +72,81 @@ myMarked.setOptions({ } }); -console.log(myMarked(markdownString)); +console.log(marked(markdownString)); ``` -In both examples, `code` is a `string` representing the section of code to pass to the highlighter. In this example, `lang` is a `string` informing the highlighter what programming lnaguage to use for the `code` and `callback` is the `function` the asynchronous highlighter will call once complete. +In both examples, `code` is a `string` representing the section of code to pass to the highlighter. In this example, `lang` is a `string` informing the highlighter what programming language to use for the `code` and `callback` is the `function` the asynchronous highlighter will call once complete. + +<h2 id="workers">Workers</h2> + +To prevent ReDoS attacks you can run marked on a worker and terminate it when parsing takes longer than usual. + +Marked can be run in a [worker thread](https://nodejs.org/api/worker_threads.html) on a node server, or a [web worker](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API) in a browser. + +### Node Worker Thread + +```js +// markedWorker.js + +const marked = require('marked'); +const { parentPort } = require('worker_threads'); + +parentPort.on('message', (markdownString) => { + parentPort.postMessage(marked(markdownString)); +}); +``` + +```js +// index.js + +const { Worker } = require('worker_threads'); +const markedWorker = new Worker('./markedWorker.js'); + +const markedTimeout = setTimeout(() => { + markedWorker.terminate(); + throw new Error('Marked took too long!'); +}, timeoutLimit); + +markedWorker.on('message', (html) => { + clearTimeout(markedTimeout); + console.log(html); + markedWorker.terminate(); +}); + +markedWorker.postMessage(markdownString); +``` + +### Web Worker + +> **NOTE**: Web Workers send the payload from `postMessage` in an object with the payload in a `.data` property + +```js +// markedWorker.js + +importScripts('path/to/marked.min.js'); + +onmessage = (e) => { + const markdownString = e.data + postMessage(marked(markdownString)); +}; +``` + +```js +// script.js + +const markedWorker = new Worker('./markedWorker.js'); + +const markedTimeout = setTimeout(() => { + markedWorker.terminate(); + throw new Error('Marked took too long!'); +}, timeoutLimit); + +markedWorker.onmessage = (e) => { + clearTimeout(markedTimeout); + const html = e.data; + console.log(html); + markedWorker.terminate(); +}; + +markedWorker.postMessage(markdownString); +``` diff --git a/packages/markdown/marked/docs/USING_PRO.md b/packages/markdown/marked/docs/USING_PRO.md index 861caa2d..5e9451be 100644 --- a/packages/markdown/marked/docs/USING_PRO.md +++ b/packages/markdown/marked/docs/USING_PRO.md @@ -1,6 +1,6 @@ ## Extending Marked -To champion the single-responsibility and open/closed prinicples, we have tried to make it relatively painless to extend marked. If you are looking to add custom functionality, this is the place to start. +To champion the single-responsibility and open/closed principles, we have tried to make it relatively painless to extend marked. If you are looking to add custom functionality, this is the place to start. <h2 id="renderer">The renderer</h2> @@ -10,14 +10,14 @@ The renderer is... ```js // Create reference instance -var myMarked = require('marked'); +const marked = require('marked'); // Get reference -var renderer = new myMarked.Renderer(); +const renderer = new marked.Renderer(); // Override function renderer.heading = function (text, level) { - var escapedText = text.toLowerCase().replace(/[^\w]+/g, '-'); + const escapedText = text.toLowerCase().replace(/[^\w]+/g, '-'); return ` <h${level}> @@ -29,7 +29,7 @@ renderer.heading = function (text, level) { }; // Run marked -console.log(myMarked('# heading+', { renderer: renderer })); +console.log(marked('# heading+', { renderer: renderer })); ``` **Output:** @@ -105,13 +105,13 @@ The parser is... You also have direct access to the lexer and parser if you so desire. ``` js -var tokens = marked.lexer(text, options); -console.log(marked.parser(tokens)); +const tokens = marked.lexer(text, options); +console.log(marked.parser(tokens, options)); ``` ``` js -var lexer = new marked.Lexer(options); -var tokens = lexer.lex(text); +const lexer = new marked.Lexer(options); +const tokens = lexer.lex(text); console.log(tokens); console.log(lexer.rules); ``` diff --git a/packages/markdown/marked/docs/demo/demo.js b/packages/markdown/marked/docs/demo/demo.js index e7d97c59..05649583 100644 --- a/packages/markdown/marked/docs/demo/demo.js +++ b/packages/markdown/marked/docs/demo/demo.js @@ -1,4 +1,4 @@ -/* globals marked, unfetch, ES6Promise */ +/* globals marked, unfetch, ES6Promise, Promise */ // eslint-disable-line no-redeclare if (!window.Promise) { window.Promise = ES6Promise; @@ -7,7 +7,7 @@ if (!window.fetch) { window.fetch = unfetch; } -onunhandledrejection = function (e) { +onunhandledrejection = function(e) { throw e.reason; }; @@ -70,7 +70,7 @@ Promise.all([ setInitialText(), setInitialVersion() .then(setInitialOptions) -]).then(function () { +]).then(function() { handleInputChange(); handleOutputChange(); checkForChanges(); @@ -84,8 +84,8 @@ function setInitialText() { $markdownElem.value = search.text; } else { return fetch('./initial.md') - .then(function (res) { return res.text(); }) - .then(function (text) { + .then(function(res) { return res.text(); }) + .then(function(text) { if ($markdownElem.value === '') { $markdownElem.value = text; } @@ -95,18 +95,18 @@ function setInitialText() { function setInitialQuickref() { return fetch('./quickref.md') - .then(function (res) { return res.text(); }) - .then(function (text) { + .then(function(res) { return res.text(); }) + .then(function(text) { document.querySelector('#quickref').value = text; }); } function setInitialVersion() { return fetch('https://data.jsdelivr.com/v1/package/npm/marked') - .then(function (res) { + .then(function(res) { return res.json(); }) - .then(function (json) { + .then(function(json) { for (var i = 0; i < json.versions.length; i++) { var ver = json.versions[i]; markedVersions[ver] = 'https://cdn.jsdelivr.net/npm/marked@' + ver + '/lib/marked.js'; @@ -116,20 +116,20 @@ function setInitialVersion() { $markedVerElem.appendChild(opt); } }) - .then(function () { + .then(function() { return fetch('https://api.github.com/repos/markedjs/marked/commits') - .then(function (res) { + .then(function(res) { return res.json(); }) - .then(function (json) { - markedVersions['master'] = 'https://cdn.jsdelivr.net/gh/markedjs/marked@' + json[0].sha + '/lib/marked.js'; + .then(function(json) { + markedVersions.master = 'https://cdn.jsdelivr.net/gh/markedjs/marked@' + json[0].sha + '/lib/marked.js'; }) - .catch(function () { + .catch(function() { // do nothing // uses url without commit }); }) - .then(function () { + .then(function() { if (search.version) { if (markedVersions[search.version]) { return search.version; @@ -142,7 +142,7 @@ function setInitialVersion() { return search.version; case 'pr': return getPrCommit(match[2]) - .then(function (commit) { + .then(function(commit) { if (!commit) { return 'master'; } @@ -156,7 +156,7 @@ function setInitialVersion() { return 'master'; }) - .then(function (version) { + .then(function(version) { $markedVerElem.value = version; }) .then(updateVersion); @@ -220,7 +220,7 @@ function handleAddVersion(e) { $commitVerElem.disabled = true; var pr = $commitVerElem.value.replace(/\D/g, ''); getPrCommit(pr) - .then(function (commit) { + .then(function(commit) { $commitVerElem.disabled = false; if (!commit) { alert('That is not a valid PR'); @@ -271,12 +271,12 @@ function addCommitVersion(value, text, commit) { function getPrCommit(pr) { return fetch('https://api.github.com/repos/markedjs/marked/pulls/' + pr + '/commits') - .then(function (res) { + .then(function(res) { return res.json(); }) - .then(function (json) { + .then(function(json) { return json[json.length - 1].sha; - }).catch(function () { + }).catch(function() { // return undefined }); } @@ -296,7 +296,7 @@ function setDefaultOptions() { function setOptions(opts) { $optionsElem.value = JSON.stringify( opts, - function (key, value) { + function(key, value) { if (value && typeof value === 'object' && Object.getPrototypeOf(value) !== Object.prototype) { return undefined; } @@ -375,13 +375,13 @@ function updateVersion() { promise = Promise.resolve(markedVersionCache[$markedVerElem.value]); } else { promise = fetch(markedVersions[$markedVerElem.value]) - .then(function (res) { return res.text(); }) - .then(function (text) { + .then(function(res) { return res.text(); }) + .then(function(text) { markedVersionCache[$markedVerElem.value] = text; return text; }); } - return promise.then(function (text) { + return promise.then(function(text) { var script = document.createElement('script'); script.textContent = text; @@ -479,7 +479,7 @@ function messageWorker(message) { markedWorker.terminate(); } markedWorker = new Worker('worker.js'); - markedWorker.onmessage = function (e) { + markedWorker.onmessage = function(e) { clearTimeout(markedWorker.timeout); markedWorker.working = false; switch (e.data.task) { @@ -500,7 +500,7 @@ function messageWorker(message) { delayTime = 10; checkForChanges(); }; - markedWorker.onerror = markedWorker.onmessageerror = function (err) { + markedWorker.onerror = markedWorker.onmessageerror = function(err) { clearTimeout(markedWorker.timeout); var error = 'There was an error in the Worker'; if (err) { @@ -526,7 +526,7 @@ function messageWorker(message) { } function workerTimeout(seconds) { - markedWorker.timeout = setTimeout(function () { + markedWorker.timeout = setTimeout(function() { seconds++; markedWorker.onerror('Marked has taken longer than ' + seconds + ' second' + (seconds > 1 ? 's' : '') + ' to respond...'); workerTimeout(seconds); diff --git a/packages/markdown/marked/docs/demo/worker.js b/packages/markdown/marked/docs/demo/worker.js index 06b8befe..6a0fa032 100644 --- a/packages/markdown/marked/docs/demo/worker.js +++ b/packages/markdown/marked/docs/demo/worker.js @@ -1,4 +1,4 @@ -/* globals marked, unfetch, ES6Promise */ +/* globals marked, unfetch, ES6Promise, Promise */ // eslint-disable-line no-redeclare if (!self.Promise) { self.importScripts('https://cdn.jsdelivr.net/npm/es6-promise/dist/es6-promise.js'); self.Promise = ES6Promise; @@ -11,15 +11,15 @@ if (!self.fetch) { var versionCache = {}; var currentVersion; -onunhandledrejection = function (e) { +onunhandledrejection = function(e) { throw e.reason; }; -onmessage = function (e) { +onmessage = function(e) { if (e.data.version === currentVersion) { parse(e); } else { - loadVersion(e.data.version).then(function () { + loadVersion(e.data.version).then(function() { parse(e); }); } @@ -87,13 +87,13 @@ function loadVersion(ver) { promise = Promise.resolve(versionCache[ver]); } else { promise = fetch(ver) - .then(function (res) { return res.text(); }) - .then(function (text) { + .then(function(res) { return res.text(); }) + .then(function(text) { versionCache[ver] = text; return text; }); } - return promise.then(function (text) { + return promise.then(function(text) { try { // eslint-disable-next-line no-new-func Function(text)(); diff --git a/packages/markdown/marked/docs/index.html b/packages/markdown/marked/docs/index.html index 07a4d5ee..6aed6279 100644 --- a/packages/markdown/marked/docs/index.html +++ b/packages/markdown/marked/docs/index.html @@ -148,6 +148,7 @@ <ul> <li><a href="#/USING_ADVANCED.md#options">Options</a></li> <li><a href="#/USING_ADVANCED.md#highlight">Highlighting</a></li> + <li><a href="#/USING_ADVANCED.md#workers">Workers</a></li> </ul> </li> <li> diff --git a/packages/markdown/marked/index.js b/packages/markdown/marked/index.js deleted file mode 100644 index a12f9056..00000000 --- a/packages/markdown/marked/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/marked'); diff --git a/packages/markdown/marked/jasmine.json b/packages/markdown/marked/jasmine.json deleted file mode 100644 index bec42542..00000000 --- a/packages/markdown/marked/jasmine.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "spec_dir": "test", - "spec_files": [ - "**/*-spec.js" - ], - "helpers": [ - "helpers/helpers.js" - ], - "stopSpecOnExpectationFailure": false, - "random": true -} diff --git a/packages/markdown/marked/lib/marked.esm.js b/packages/markdown/marked/lib/marked.esm.js new file mode 100644 index 00000000..8a42d378 --- /dev/null +++ b/packages/markdown/marked/lib/marked.esm.js @@ -0,0 +1,1830 @@ +/** + * marked - a markdown parser + * Copyright (c) 2011-2020, Christopher Jeffrey. (MIT Licensed) + * https://github.com/markedjs/marked + */ + +/** + * DO NOT EDIT THIS FILE + * The code in this file is generated from files in ./src/ + */ + +function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; +} + +var defaults = createCommonjsModule(function (module) { +function getDefaults() { + return { + baseUrl: null, + breaks: false, + gfm: true, + headerIds: true, + headerPrefix: '', + highlight: null, + langPrefix: 'language-', + mangle: true, + pedantic: false, + renderer: null, + sanitize: false, + sanitizer: null, + silent: false, + smartLists: false, + smartypants: false, + xhtml: false + }; +} + +function changeDefaults(newDefaults) { + module.exports.defaults = newDefaults; +} + +module.exports = { + defaults: getDefaults(), + getDefaults, + changeDefaults +}; +}); +var defaults_1 = defaults.defaults; +var defaults_2 = defaults.getDefaults; +var defaults_3 = defaults.changeDefaults; + +/** + * Helpers + */ +const escapeTest = /[&<>"']/; +const escapeReplace = /[&<>"']/g; +const escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/; +const escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g; +const escapeReplacements = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' +}; +const getEscapeReplacement = (ch) => escapeReplacements[ch]; +function escape(html, encode) { + if (encode) { + if (escapeTest.test(html)) { + return html.replace(escapeReplace, getEscapeReplacement); + } + } else { + if (escapeTestNoEncode.test(html)) { + return html.replace(escapeReplaceNoEncode, getEscapeReplacement); + } + } + + return html; +} + +const unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig; + +function unescape(html) { + // explicitly match decimal, hex, and named HTML entities + return html.replace(unescapeTest, (_, n) => { + n = n.toLowerCase(); + if (n === 'colon') return ':'; + if (n.charAt(0) === '#') { + return n.charAt(1) === 'x' + ? String.fromCharCode(parseInt(n.substring(2), 16)) + : String.fromCharCode(+n.substring(1)); + } + return ''; + }); +} + +const caret = /(^|[^\[])\^/g; +function edit(regex, opt) { + regex = regex.source || regex; + opt = opt || ''; + const obj = { + replace: (name, val) => { + val = val.source || val; + val = val.replace(caret, '$1'); + regex = regex.replace(name, val); + return obj; + }, + getRegex: () => { + return new RegExp(regex, opt); + } + }; + return obj; +} + +const nonWordAndColonTest = /[^\w:]/g; +const originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i; +function cleanUrl(sanitize, base, href) { + if (sanitize) { + let prot; + try { + prot = decodeURIComponent(unescape(href)) + .replace(nonWordAndColonTest, '') + .toLowerCase(); + } catch (e) { + return null; + } + if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) { + return null; + } + } + if (base && !originIndependentUrl.test(href)) { + href = resolveUrl(base, href); + } + try { + href = encodeURI(href).replace(/%25/g, '%'); + } catch (e) { + return null; + } + return href; +} + +const baseUrls = {}; +const justDomain = /^[^:]+:\/*[^/]*$/; +const protocol = /^([^:]+:)[\s\S]*$/; +const domain = /^([^:]+:\/*[^/]*)[\s\S]*$/; + +function resolveUrl(base, href) { + if (!baseUrls[' ' + base]) { + // we can ignore everything in base after the last slash of its path component, + // but we might need to add _that_ + // https://tools.ietf.org/html/rfc3986#section-3 + if (justDomain.test(base)) { + baseUrls[' ' + base] = base + '/'; + } else { + baseUrls[' ' + base] = rtrim(base, '/', true); + } + } + base = baseUrls[' ' + base]; + const relativeBase = base.indexOf(':') === -1; + + if (href.substring(0, 2) === '//') { + if (relativeBase) { + return href; + } + return base.replace(protocol, '$1') + href; + } else if (href.charAt(0) === '/') { + if (relativeBase) { + return href; + } + return base.replace(domain, '$1') + href; + } else { + return base + href; + } +} + +const noopTest = { exec: function noopTest() {} }; + +function merge(obj) { + let i = 1, + target, + key; + + for (; i < arguments.length; i++) { + target = arguments[i]; + for (key in target) { + if (Object.prototype.hasOwnProperty.call(target, key)) { + obj[key] = target[key]; + } + } + } + + return obj; +} + +function splitCells(tableRow, count) { + // ensure that every cell-delimiting pipe has a space + // before it to distinguish it from an escaped pipe + const row = tableRow.replace(/\|/g, (match, offset, str) => { + let escaped = false, + curr = offset; + while (--curr >= 0 && str[curr] === '\\') escaped = !escaped; + if (escaped) { + // odd number of slashes means | is escaped + // so we leave it alone + return '|'; + } else { + // add space before unescaped | + return ' |'; + } + }), + cells = row.split(/ \|/); + let i = 0; + + if (cells.length > count) { + cells.splice(count); + } else { + while (cells.length < count) cells.push(''); + } + + for (; i < cells.length; i++) { + // leading or trailing whitespace is ignored per the gfm spec + cells[i] = cells[i].trim().replace(/\\\|/g, '|'); + } + return cells; +} + +// Remove trailing 'c's. Equivalent to str.replace(/c*$/, ''). +// /c*$/ is vulnerable to REDOS. +// invert: Remove suffix of non-c chars instead. Default falsey. +function rtrim(str, c, invert) { + const l = str.length; + if (l === 0) { + return ''; + } + + // Length of suffix matching the invert condition. + let suffLen = 0; + + // Step left until we fail to match the invert condition. + while (suffLen < l) { + const currChar = str.charAt(l - suffLen - 1); + if (currChar === c && !invert) { + suffLen++; + } else if (currChar !== c && invert) { + suffLen++; + } else { + break; + } + } + + return str.substr(0, l - suffLen); +} + +function findClosingBracket(str, b) { + if (str.indexOf(b[1]) === -1) { + return -1; + } + const l = str.length; + let level = 0, + i = 0; + for (; i < l; i++) { + if (str[i] === '\\') { + i++; + } else if (str[i] === b[0]) { + level++; + } else if (str[i] === b[1]) { + level--; + if (level < 0) { + return i; + } + } + } + return -1; +} + +function checkSanitizeDeprecation(opt) { + if (opt && opt.sanitize && !opt.silent) { + console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options'); + } +} + +var helpers = { + escape, + unescape, + edit, + cleanUrl, + resolveUrl, + noopTest, + merge, + splitCells, + rtrim, + findClosingBracket, + checkSanitizeDeprecation +}; + +const { + noopTest: noopTest$1, + edit: edit$1, + merge: merge$1 +} = helpers; + +/** + * Block-Level Grammar + */ +const block = { + newline: /^\n+/, + code: /^( {4}[^\n]+\n*)+/, + fences: /^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/, + hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/, + heading: /^ {0,3}(#{1,6}) +([^\n]*?)(?: +#+)? *(?:\n+|$)/, + blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/, + list: /^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/, + html: '^ {0,3}(?:' // optional indentation + + '<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1) + + '|comment[^\\n]*(\\n+|$)' // (2) + + '|<\\?[\\s\\S]*?\\?>\\n*' // (3) + + '|<![A-Z][\\s\\S]*?>\\n*' // (4) + + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*' // (5) + + '|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)' // (6) + + '|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)' // (7) open tag + + '|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)' // (7) closing tag + + ')', + def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/, + nptable: noopTest$1, + table: noopTest$1, + lheading: /^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/, + // regex template, placeholders will be replaced according to different paragraph + // interruption rules of commonmark and the original markdown spec: + _paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html)[^\n]+)*)/, + text: /^[^\n]+/ +}; + +block._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/; +block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/; +block.def = edit$1(block.def) + .replace('label', block._label) + .replace('title', block._title) + .getRegex(); + +block.bullet = /(?:[*+-]|\d{1,9}\.)/; +block.item = /^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/; +block.item = edit$1(block.item, 'gm') + .replace(/bull/g, block.bullet) + .getRegex(); + +block.list = edit$1(block.list) + .replace(/bull/g, block.bullet) + .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))') + .replace('def', '\\n+(?=' + block.def.source + ')') + .getRegex(); + +block._tag = 'address|article|aside|base|basefont|blockquote|body|caption' + + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' + + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' + + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' + + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr' + + '|track|ul'; +block._comment = /<!--(?!-?>)[\s\S]*?-->/; +block.html = edit$1(block.html, 'i') + .replace('comment', block._comment) + .replace('tag', block._tag) + .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/) + .getRegex(); + +block.paragraph = edit$1(block._paragraph) + .replace('hr', block.hr) + .replace('heading', ' {0,3}#{1,6} ') + .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs + .replace('blockquote', ' {0,3}>') + .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n') + .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt + .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)') + .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks + .getRegex(); + +block.blockquote = edit$1(block.blockquote) + .replace('paragraph', block.paragraph) + .getRegex(); + +/** + * Normal Block Grammar + */ + +block.normal = merge$1({}, block); + +/** + * GFM Block Grammar + */ + +block.gfm = merge$1({}, block.normal, { + nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/, + table: '^ *\\|(.+)\\n' // Header + + ' *\\|?( *[-:]+[-| :]*)' // Align + + '(?:\\n((?:(?!^|>|\\n| |hr|heading|lheading|code|fences|list|html).*(?:\\n|$))*)\\n*|$)' // Cells +}); + +block.gfm.table = edit$1(block.gfm.table) + .replace('hr', block.hr) + .replace('heading', ' {0,3}#{1,6} ') + .replace('lheading', '([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)') + .replace('blockquote', ' {0,3}>') + .replace('code', ' {4}[^\\n]') + .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n') + .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt + .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)') + .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks + .getRegex(); + +/** + * Pedantic grammar (original John Gruber's loose markdown specification) + */ + +block.pedantic = merge$1({}, block.normal, { + html: edit$1( + '^ *(?:comment *(?:\\n|\\s*$)' + + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag + + '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))') + .replace('comment', block._comment) + .replace(/tag/g, '(?!(?:' + + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' + + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' + + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b') + .getRegex(), + def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, + heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/, + fences: noopTest$1, // fences not supported + paragraph: edit$1(block.normal._paragraph) + .replace('hr', block.hr) + .replace('heading', ' *#{1,6} *[^\n]') + .replace('lheading', block.lheading) + .replace('blockquote', ' {0,3}>') + .replace('|fences', '') + .replace('|list', '') + .replace('|html', '') + .getRegex() +}); + +/** + * Inline-Level Grammar + */ +const inline = { + escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/, + autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/, + url: noopTest$1, + tag: '^comment' + + '|^</[a-zA-Z][\\w:-]*\\s*>' // self-closing tag + + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag + + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?> + + '|^<![a-zA-Z]+\\s[\\s\\S]*?>' // declaration, e.g. <!DOCTYPE html> + + '|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>', // CDATA section + link: /^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/, + reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/, + nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/, + strong: /^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/, + em: /^_([^\s_])_(?!_)|^\*([^\s*<\[])\*(?!\*)|^_([^\s<][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_<][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s<"][\s\S]*?[^\s\*])\*(?!\*|[^\spunctuation])|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/, + code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/, + br: /^( {2,}|\\)\n(?!\s*$)/, + del: noopTest$1, + text: /^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*]|\b_|$)|[^ ](?= {2,}\n))|(?= {2,}\n))/ +}; + +// list of punctuation marks from common mark spec +// without ` and ] to workaround Rule 17 (inline code blocks/links) +inline._punctuation = '!"#$%&\'()*+,\\-./:;<=>?@\\[^_{|}~'; +inline.em = edit$1(inline.em).replace(/punctuation/g, inline._punctuation).getRegex(); + +inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g; + +inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/; +inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/; +inline.autolink = edit$1(inline.autolink) + .replace('scheme', inline._scheme) + .replace('email', inline._email) + .getRegex(); + +inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/; + +inline.tag = edit$1(inline.tag) + .replace('comment', block._comment) + .replace('attribute', inline._attribute) + .getRegex(); + +inline._label = /(?:\[[^\[\]]*\]|\\.|`[^`]*`|[^\[\]\\`])*?/; +inline._href = /<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*/; +inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/; + +inline.link = edit$1(inline.link) + .replace('label', inline._label) + .replace('href', inline._href) + .replace('title', inline._title) + .getRegex(); + +inline.reflink = edit$1(inline.reflink) + .replace('label', inline._label) + .getRegex(); + +/** + * Normal Inline Grammar + */ + +inline.normal = merge$1({}, inline); + +/** + * Pedantic Inline Grammar + */ + +inline.pedantic = merge$1({}, inline.normal, { + strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, + em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/, + link: edit$1(/^!?\[(label)\]\((.*?)\)/) + .replace('label', inline._label) + .getRegex(), + reflink: edit$1(/^!?\[(label)\]\s*\[([^\]]*)\]/) + .replace('label', inline._label) + .getRegex() +}); + +/** + * GFM Inline Grammar + */ + +inline.gfm = merge$1({}, inline.normal, { + escape: edit$1(inline.escape).replace('])', '~|])').getRegex(), + _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/, + url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/, + _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/, + del: /^~+(?=\S)([\s\S]*?\S)~+/, + text: /^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*~]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?= {2,}\n|[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/ +}); + +inline.gfm.url = edit$1(inline.gfm.url, 'i') + .replace('email', inline.gfm._extended_email) + .getRegex(); +/** + * GFM + Line Breaks Inline Grammar + */ + +inline.breaks = merge$1({}, inline.gfm, { + br: edit$1(inline.br).replace('{2,}', '*').getRegex(), + text: edit$1(inline.gfm.text) + .replace('\\b_', '\\b_| {2,}\\n') + .replace(/\{2,\}/g, '*') + .getRegex() +}); + +var rules = { + block, + inline +}; + +const { defaults: defaults$1 } = defaults; +const { block: block$1 } = rules; +const { + rtrim: rtrim$1, + splitCells: splitCells$1, + escape: escape$1 +} = helpers; + +/** + * Block Lexer + */ +var Lexer_1 = class Lexer { + constructor(options) { + this.tokens = []; + this.tokens.links = Object.create(null); + this.options = options || defaults$1; + this.rules = block$1.normal; + + if (this.options.pedantic) { + this.rules = block$1.pedantic; + } else if (this.options.gfm) { + this.rules = block$1.gfm; + } + } + + /** + * Expose Block Rules + */ + static get rules() { + return block$1; + } + + /** + * Static Lex Method + */ + static lex(src, options) { + const lexer = new Lexer(options); + return lexer.lex(src); + }; + + /** + * Preprocessing + */ + lex(src) { + src = src + .replace(/\r\n|\r/g, '\n') + .replace(/\t/g, ' '); + + return this.token(src, true); + }; + + /** + * Lexing + */ + token(src, top) { + src = src.replace(/^ +$/gm, ''); + let next, + loose, + cap, + bull, + b, + item, + listStart, + listItems, + t, + space, + i, + tag, + l, + isordered, + istask, + ischecked; + + while (src) { + // newline + if (cap = this.rules.newline.exec(src)) { + src = src.substring(cap[0].length); + if (cap[0].length > 1) { + this.tokens.push({ + type: 'space' + }); + } + } + + // code + if (cap = this.rules.code.exec(src)) { + const lastToken = this.tokens[this.tokens.length - 1]; + src = src.substring(cap[0].length); + // An indented code block cannot interrupt a paragraph. + if (lastToken && lastToken.type === 'paragraph') { + lastToken.text += '\n' + cap[0].trimRight(); + } else { + cap = cap[0].replace(/^ {4}/gm, ''); + this.tokens.push({ + type: 'code', + codeBlockStyle: 'indented', + text: !this.options.pedantic + ? rtrim$1(cap, '\n') + : cap + }); + } + continue; + } + + // fences + if (cap = this.rules.fences.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'code', + lang: cap[2] ? cap[2].trim() : cap[2], + text: cap[3] || '' + }); + continue; + } + + // heading + if (cap = this.rules.heading.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'heading', + depth: cap[1].length, + text: cap[2] + }); + continue; + } + + // table no leading pipe (gfm) + if (cap = this.rules.nptable.exec(src)) { + item = { + type: 'table', + header: splitCells$1(cap[1].replace(/^ *| *\| *$/g, '')), + align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), + cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : [] + }; + + if (item.header.length === item.align.length) { + src = src.substring(cap[0].length); + + for (i = 0; i < item.align.length; i++) { + if (/^ *-+: *$/.test(item.align[i])) { + item.align[i] = 'right'; + } else if (/^ *:-+: *$/.test(item.align[i])) { + item.align[i] = 'center'; + } else if (/^ *:-+ *$/.test(item.align[i])) { + item.align[i] = 'left'; + } else { + item.align[i] = null; + } + } + + for (i = 0; i < item.cells.length; i++) { + item.cells[i] = splitCells$1(item.cells[i], item.header.length); + } + + this.tokens.push(item); + + continue; + } + } + + // hr + if (cap = this.rules.hr.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'hr' + }); + continue; + } + + // blockquote + if (cap = this.rules.blockquote.exec(src)) { + src = src.substring(cap[0].length); + + this.tokens.push({ + type: 'blockquote_start' + }); + + cap = cap[0].replace(/^ *> ?/gm, ''); + + // Pass `top` to keep the current + // "toplevel" state. This is exactly + // how markdown.pl works. + this.token(cap, top); + + this.tokens.push({ + type: 'blockquote_end' + }); + + continue; + } + + // list + if (cap = this.rules.list.exec(src)) { + src = src.substring(cap[0].length); + bull = cap[2]; + isordered = bull.length > 1; + + listStart = { + type: 'list_start', + ordered: isordered, + start: isordered ? +bull : '', + loose: false + }; + + this.tokens.push(listStart); + + // Get each top-level item. + cap = cap[0].match(this.rules.item); + + listItems = []; + next = false; + l = cap.length; + i = 0; + + for (; i < l; i++) { + item = cap[i]; + + // Remove the list item's bullet + // so it is seen as the next token. + space = item.length; + item = item.replace(/^ *([*+-]|\d+\.) */, ''); + + // Outdent whatever the + // list item contains. Hacky. + if (~item.indexOf('\n ')) { + space -= item.length; + item = !this.options.pedantic + ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') + : item.replace(/^ {1,4}/gm, ''); + } + + // Determine whether the next list item belongs here. + // Backpedal if it does not belong in this list. + if (i !== l - 1) { + b = block$1.bullet.exec(cap[i + 1])[0]; + if (bull.length > 1 ? b.length === 1 + : (b.length > 1 || (this.options.smartLists && b !== bull))) { + src = cap.slice(i + 1).join('\n') + src; + i = l - 1; + } + } + + // Determine whether item is loose or not. + // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/ + // for discount behavior. + loose = next || /\n\n(?!\s*$)/.test(item); + if (i !== l - 1) { + next = item.charAt(item.length - 1) === '\n'; + if (!loose) loose = next; + } + + if (loose) { + listStart.loose = true; + } + + // Check for task list items + istask = /^\[[ xX]\] /.test(item); + ischecked = undefined; + if (istask) { + ischecked = item[1] !== ' '; + item = item.replace(/^\[[ xX]\] +/, ''); + } + + t = { + type: 'list_item_start', + task: istask, + checked: ischecked, + loose: loose + }; + + listItems.push(t); + this.tokens.push(t); + + // Recurse. + this.token(item, false); + + this.tokens.push({ + type: 'list_item_end' + }); + } + + if (listStart.loose) { + l = listItems.length; + i = 0; + for (; i < l; i++) { + listItems[i].loose = true; + } + } + + this.tokens.push({ + type: 'list_end' + }); + + continue; + } + + // html + if (cap = this.rules.html.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: this.options.sanitize + ? 'paragraph' + : 'html', + pre: !this.options.sanitizer + && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'), + text: this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0] + }); + continue; + } + + // def + if (top && (cap = this.rules.def.exec(src))) { + src = src.substring(cap[0].length); + if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1); + tag = cap[1].toLowerCase().replace(/\s+/g, ' '); + if (!this.tokens.links[tag]) { + this.tokens.links[tag] = { + href: cap[2], + title: cap[3] + }; + } + continue; + } + + // table (gfm) + if (cap = this.rules.table.exec(src)) { + item = { + type: 'table', + header: splitCells$1(cap[1].replace(/^ *| *\| *$/g, '')), + align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), + cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : [] + }; + + if (item.header.length === item.align.length) { + src = src.substring(cap[0].length); + + for (i = 0; i < item.align.length; i++) { + if (/^ *-+: *$/.test(item.align[i])) { + item.align[i] = 'right'; + } else if (/^ *:-+: *$/.test(item.align[i])) { + item.align[i] = 'center'; + } else if (/^ *:-+ *$/.test(item.align[i])) { + item.align[i] = 'left'; + } else { + item.align[i] = null; + } + } + + for (i = 0; i < item.cells.length; i++) { + item.cells[i] = splitCells$1( + item.cells[i].replace(/^ *\| *| *\| *$/g, ''), + item.header.length); + } + + this.tokens.push(item); + + continue; + } + } + + // lheading + if (cap = this.rules.lheading.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'heading', + depth: cap[2].charAt(0) === '=' ? 1 : 2, + text: cap[1] + }); + continue; + } + + // top-level paragraph + if (top && (cap = this.rules.paragraph.exec(src))) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'paragraph', + text: cap[1].charAt(cap[1].length - 1) === '\n' + ? cap[1].slice(0, -1) + : cap[1] + }); + continue; + } + + // text + if (cap = this.rules.text.exec(src)) { + // Top-level should never reach here. + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'text', + text: cap[0] + }); + continue; + } + + if (src) { + throw new Error('Infinite loop on byte: ' + src.charCodeAt(0)); + } + } + + return this.tokens; + }; +}; + +const { defaults: defaults$2 } = defaults; +const { + cleanUrl: cleanUrl$1, + escape: escape$2 +} = helpers; + +/** + * Renderer + */ +var Renderer_1 = class Renderer { + constructor(options) { + this.options = options || defaults$2; + } + + code(code, infostring, escaped) { + const lang = (infostring || '').match(/\S*/)[0]; + if (this.options.highlight) { + const out = this.options.highlight(code, lang); + if (out != null && out !== code) { + escaped = true; + code = out; + } + } + + if (!lang) { + return '<pre><code>' + + (escaped ? code : escape$2(code, true)) + + '</code></pre>'; + } + + return '<pre><code class="' + + this.options.langPrefix + + escape$2(lang, true) + + '">' + + (escaped ? code : escape$2(code, true)) + + '</code></pre>\n'; + }; + + blockquote(quote) { + return '<blockquote>\n' + quote + '</blockquote>\n'; + }; + + html(html) { + return html; + }; + + heading(text, level, raw, slugger) { + if (this.options.headerIds) { + return '<h' + + level + + ' id="' + + this.options.headerPrefix + + slugger.slug(raw) + + '">' + + text + + '</h' + + level + + '>\n'; + } + // ignore IDs + return '<h' + level + '>' + text + '</h' + level + '>\n'; + }; + + hr() { + return this.options.xhtml ? '<hr/>\n' : '<hr>\n'; + }; + + list(body, ordered, start) { + const type = ordered ? 'ol' : 'ul', + startatt = (ordered && start !== 1) ? (' start="' + start + '"') : ''; + return '<' + type + startatt + '>\n' + body + '</' + type + '>\n'; + }; + + listitem(text) { + return '<li>' + text + '</li>\n'; + }; + + checkbox(checked) { + return '<input ' + + (checked ? 'checked="" ' : '') + + 'disabled="" type="checkbox"' + + (this.options.xhtml ? ' /' : '') + + '> '; + }; + + paragraph(text) { + return '<p>' + text + '</p>\n'; + }; + + table(header, body) { + if (body) body = '<tbody>' + body + '</tbody>'; + + return '<table>\n' + + '<thead>\n' + + header + + '</thead>\n' + + body + + '</table>\n'; + }; + + tablerow(content) { + return '<tr>\n' + content + '</tr>\n'; + }; + + tablecell(content, flags) { + const type = flags.header ? 'th' : 'td'; + const tag = flags.align + ? '<' + type + ' align="' + flags.align + '">' + : '<' + type + '>'; + return tag + content + '</' + type + '>\n'; + }; + + // span level renderer + strong(text) { + return '<strong>' + text + '</strong>'; + }; + + em(text) { + return '<em>' + text + '</em>'; + }; + + codespan(text) { + return '<code>' + text + '</code>'; + }; + + br() { + return this.options.xhtml ? '<br/>' : '<br>'; + }; + + del(text) { + return '<del>' + text + '</del>'; + }; + + link(href, title, text) { + href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href); + if (href === null) { + return text; + } + let out = '<a href="' + escape$2(href) + '"'; + if (title) { + out += ' title="' + title + '"'; + } + out += '>' + text + '</a>'; + return out; + }; + + image(href, title, text) { + href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href); + if (href === null) { + return text; + } + + let out = '<img src="' + href + '" alt="' + text + '"'; + if (title) { + out += ' title="' + title + '"'; + } + out += this.options.xhtml ? '/>' : '>'; + return out; + }; + + text(text) { + return text; + }; +}; + +/** + * Slugger generates header id + */ +var Slugger_1 = class Slugger { + constructor() { + this.seen = {}; + } + + /** + * Convert string to unique id + */ + slug(value) { + let slug = value + .toLowerCase() + .trim() + .replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '') + .replace(/\s/g, '-'); + + if (this.seen.hasOwnProperty(slug)) { + const originalSlug = slug; + do { + this.seen[originalSlug]++; + slug = originalSlug + '-' + this.seen[originalSlug]; + } while (this.seen.hasOwnProperty(slug)); + } + this.seen[slug] = 0; + + return slug; + }; +}; + +const { defaults: defaults$3 } = defaults; +const { inline: inline$1 } = rules; +const { + findClosingBracket: findClosingBracket$1, + escape: escape$3 +} = helpers; + +/** + * Inline Lexer & Compiler + */ +var InlineLexer_1 = class InlineLexer { + constructor(links, options) { + this.options = options || defaults$3; + this.links = links; + this.rules = inline$1.normal; + this.options.renderer = this.options.renderer || new Renderer_1(); + this.renderer = this.options.renderer; + this.renderer.options = this.options; + + if (!this.links) { + throw new Error('Tokens array requires a `links` property.'); + } + + if (this.options.pedantic) { + this.rules = inline$1.pedantic; + } else if (this.options.gfm) { + if (this.options.breaks) { + this.rules = inline$1.breaks; + } else { + this.rules = inline$1.gfm; + } + } + } + + /** + * Expose Inline Rules + */ + static get rules() { + return inline$1; + } + + /** + * Static Lexing/Compiling Method + */ + static output(src, links, options) { + const inline = new InlineLexer(links, options); + return inline.output(src); + } + + /** + * Lexing/Compiling + */ + output(src) { + let out = '', + link, + text, + href, + title, + cap, + prevCapZero; + + while (src) { + // escape + if (cap = this.rules.escape.exec(src)) { + src = src.substring(cap[0].length); + out += escape$3(cap[1]); + continue; + } + + // tag + if (cap = this.rules.tag.exec(src)) { + if (!this.inLink && /^<a /i.test(cap[0])) { + this.inLink = true; + } else if (this.inLink && /^<\/a>/i.test(cap[0])) { + this.inLink = false; + } + if (!this.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) { + this.inRawBlock = true; + } else if (this.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) { + this.inRawBlock = false; + } + + src = src.substring(cap[0].length); + out += this.renderer.html(this.options.sanitize + ? (this.options.sanitizer + ? this.options.sanitizer(cap[0]) + : escape$3(cap[0])) + : cap[0]); + continue; + } + + // link + if (cap = this.rules.link.exec(src)) { + const lastParenIndex = findClosingBracket$1(cap[2], '()'); + if (lastParenIndex > -1) { + const start = cap[0].indexOf('!') === 0 ? 5 : 4; + const linkLen = start + cap[1].length + lastParenIndex; + cap[2] = cap[2].substring(0, lastParenIndex); + cap[0] = cap[0].substring(0, linkLen).trim(); + cap[3] = ''; + } + src = src.substring(cap[0].length); + this.inLink = true; + href = cap[2]; + if (this.options.pedantic) { + link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href); + + if (link) { + href = link[1]; + title = link[3]; + } else { + title = ''; + } + } else { + title = cap[3] ? cap[3].slice(1, -1) : ''; + } + href = href.trim().replace(/^<([\s\S]*)>$/, '$1'); + out += this.outputLink(cap, { + href: InlineLexer.escapes(href), + title: InlineLexer.escapes(title) + }); + this.inLink = false; + continue; + } + + // reflink, nolink + if ((cap = this.rules.reflink.exec(src)) + || (cap = this.rules.nolink.exec(src))) { + src = src.substring(cap[0].length); + link = (cap[2] || cap[1]).replace(/\s+/g, ' '); + link = this.links[link.toLowerCase()]; + if (!link || !link.href) { + out += cap[0].charAt(0); + src = cap[0].substring(1) + src; + continue; + } + this.inLink = true; + out += this.outputLink(cap, link); + this.inLink = false; + continue; + } + + // strong + if (cap = this.rules.strong.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.strong(this.output(cap[4] || cap[3] || cap[2] || cap[1])); + continue; + } + + // em + if (cap = this.rules.em.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.em(this.output(cap[6] || cap[5] || cap[4] || cap[3] || cap[2] || cap[1])); + continue; + } + + // code + if (cap = this.rules.code.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.codespan(escape$3(cap[2].trim(), true)); + continue; + } + + // br + if (cap = this.rules.br.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.br(); + continue; + } + + // del (gfm) + if (cap = this.rules.del.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.del(this.output(cap[1])); + continue; + } + + // autolink + if (cap = this.rules.autolink.exec(src)) { + src = src.substring(cap[0].length); + if (cap[2] === '@') { + text = escape$3(this.mangle(cap[1])); + href = 'mailto:' + text; + } else { + text = escape$3(cap[1]); + href = text; + } + out += this.renderer.link(href, null, text); + continue; + } + + // url (gfm) + if (!this.inLink && (cap = this.rules.url.exec(src))) { + if (cap[2] === '@') { + text = escape$3(cap[0]); + href = 'mailto:' + text; + } else { + // do extended autolink path validation + do { + prevCapZero = cap[0]; + cap[0] = this.rules._backpedal.exec(cap[0])[0]; + } while (prevCapZero !== cap[0]); + text = escape$3(cap[0]); + if (cap[1] === 'www.') { + href = 'http://' + text; + } else { + href = text; + } + } + src = src.substring(cap[0].length); + out += this.renderer.link(href, null, text); + continue; + } + + // text + if (cap = this.rules.text.exec(src)) { + src = src.substring(cap[0].length); + if (this.inRawBlock) { + out += this.renderer.text(this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$3(cap[0])) : cap[0]); + } else { + out += this.renderer.text(escape$3(this.smartypants(cap[0]))); + } + continue; + } + + if (src) { + throw new Error('Infinite loop on byte: ' + src.charCodeAt(0)); + } + } + + return out; + } + + static escapes(text) { + return text ? text.replace(InlineLexer.rules._escapes, '$1') : text; + } + + /** + * Compile Link + */ + outputLink(cap, link) { + const href = link.href, + title = link.title ? escape$3(link.title) : null; + + return cap[0].charAt(0) !== '!' + ? this.renderer.link(href, title, this.output(cap[1])) + : this.renderer.image(href, title, escape$3(cap[1])); + } + + /** + * Smartypants Transformations + */ + smartypants(text) { + if (!this.options.smartypants) return text; + return text + // em-dashes + .replace(/---/g, '\u2014') + // en-dashes + .replace(/--/g, '\u2013') + // opening singles + .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018') + // closing singles & apostrophes + .replace(/'/g, '\u2019') + // opening doubles + .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c') + // closing doubles + .replace(/"/g, '\u201d') + // ellipses + .replace(/\.{3}/g, '\u2026'); + } + + /** + * Mangle Links + */ + mangle(text) { + if (!this.options.mangle) return text; + const l = text.length; + let out = '', + i = 0, + ch; + + for (; i < l; i++) { + ch = text.charCodeAt(i); + if (Math.random() > 0.5) { + ch = 'x' + ch.toString(16); + } + out += '&#' + ch + ';'; + } + + return out; + } +}; + +/** + * TextRenderer + * returns only the textual part of the token + */ +var TextRenderer_1 = class TextRenderer { + // no need for block level renderers + strong(text) { + return text; + } + + em(text) { + return text; + } + + codespan(text) { + return text; + } + + del(text) { + return text; + } + + text(text) { + return text; + } + + link(href, title, text) { + return '' + text; + } + + image(href, title, text) { + return '' + text; + } + + br() { + return ''; + } +}; + +const { defaults: defaults$4 } = defaults; +const { + merge: merge$2, + unescape: unescape$1 +} = helpers; + +/** + * Parsing & Compiling + */ +var Parser_1 = class Parser { + constructor(options) { + this.tokens = []; + this.token = null; + this.options = options || defaults$4; + this.options.renderer = this.options.renderer || new Renderer_1(); + this.renderer = this.options.renderer; + this.renderer.options = this.options; + this.slugger = new Slugger_1(); + } + + /** + * Static Parse Method + */ + static parse(tokens, options) { + const parser = new Parser(options); + return parser.parse(tokens); + }; + + /** + * Parse Loop + */ + parse(tokens) { + this.inline = new InlineLexer_1(tokens.links, this.options); + // use an InlineLexer with a TextRenderer to extract pure text + this.inlineText = new InlineLexer_1( + tokens.links, + merge$2({}, this.options, { renderer: new TextRenderer_1() }) + ); + this.tokens = tokens.reverse(); + + let out = ''; + while (this.next()) { + out += this.tok(); + } + + return out; + }; + + /** + * Next Token + */ + next() { + this.token = this.tokens.pop(); + return this.token; + }; + + /** + * Preview Next Token + */ + peek() { + return this.tokens[this.tokens.length - 1] || 0; + }; + + /** + * Parse Text Tokens + */ + parseText() { + let body = this.token.text; + + while (this.peek().type === 'text') { + body += '\n' + this.next().text; + } + + return this.inline.output(body); + }; + + /** + * Parse Current Token + */ + tok() { + let body = ''; + switch (this.token.type) { + case 'space': { + return ''; + } + case 'hr': { + return this.renderer.hr(); + } + case 'heading': { + return this.renderer.heading( + this.inline.output(this.token.text), + this.token.depth, + unescape$1(this.inlineText.output(this.token.text)), + this.slugger); + } + case 'code': { + return this.renderer.code(this.token.text, + this.token.lang, + this.token.escaped); + } + case 'table': { + let header = '', + i, + row, + cell, + j; + + // header + cell = ''; + for (i = 0; i < this.token.header.length; i++) { + cell += this.renderer.tablecell( + this.inline.output(this.token.header[i]), + { header: true, align: this.token.align[i] } + ); + } + header += this.renderer.tablerow(cell); + + for (i = 0; i < this.token.cells.length; i++) { + row = this.token.cells[i]; + + cell = ''; + for (j = 0; j < row.length; j++) { + cell += this.renderer.tablecell( + this.inline.output(row[j]), + { header: false, align: this.token.align[j] } + ); + } + + body += this.renderer.tablerow(cell); + } + return this.renderer.table(header, body); + } + case 'blockquote_start': { + body = ''; + + while (this.next().type !== 'blockquote_end') { + body += this.tok(); + } + + return this.renderer.blockquote(body); + } + case 'list_start': { + body = ''; + const ordered = this.token.ordered, + start = this.token.start; + + while (this.next().type !== 'list_end') { + body += this.tok(); + } + + return this.renderer.list(body, ordered, start); + } + case 'list_item_start': { + body = ''; + const loose = this.token.loose; + const checked = this.token.checked; + const task = this.token.task; + + if (this.token.task) { + if (loose) { + if (this.peek().type === 'text') { + const nextToken = this.peek(); + nextToken.text = this.renderer.checkbox(checked) + ' ' + nextToken.text; + } else { + this.tokens.push({ + type: 'text', + text: this.renderer.checkbox(checked) + }); + } + } else { + body += this.renderer.checkbox(checked); + } + } + + while (this.next().type !== 'list_item_end') { + body += !loose && this.token.type === 'text' + ? this.parseText() + : this.tok(); + } + return this.renderer.listitem(body, task, checked); + } + case 'html': { + // TODO parse inline content if parameter markdown=1 + return this.renderer.html(this.token.text); + } + case 'paragraph': { + return this.renderer.paragraph(this.inline.output(this.token.text)); + } + case 'text': { + return this.renderer.paragraph(this.parseText()); + } + default: { + const errMsg = 'Token with "' + this.token.type + '" type was not found.'; + if (this.options.silent) { + console.log(errMsg); + } else { + throw new Error(errMsg); + } + } + } + }; +}; + +const { + merge: merge$3, + checkSanitizeDeprecation: checkSanitizeDeprecation$1, + escape: escape$4 +} = helpers; +const { + getDefaults, + changeDefaults, + defaults: defaults$5 +} = defaults; + +/** + * Marked + */ +function marked(src, opt, callback) { + // throw error in case of non string input + if (typeof src === 'undefined' || src === null) { + throw new Error('marked(): input parameter is undefined or null'); + } + if (typeof src !== 'string') { + throw new Error('marked(): input parameter is of type ' + + Object.prototype.toString.call(src) + ', string expected'); + } + + if (callback || typeof opt === 'function') { + if (!callback) { + callback = opt; + opt = null; + } + + opt = merge$3({}, marked.defaults, opt || {}); + checkSanitizeDeprecation$1(opt); + const highlight = opt.highlight; + let tokens, + pending, + i = 0; + + try { + tokens = Lexer_1.lex(src, opt); + } catch (e) { + return callback(e); + } + + pending = tokens.length; + + const done = function(err) { + if (err) { + opt.highlight = highlight; + return callback(err); + } + + let out; + + try { + out = Parser_1.parse(tokens, opt); + } catch (e) { + err = e; + } + + opt.highlight = highlight; + + return err + ? callback(err) + : callback(null, out); + }; + + if (!highlight || highlight.length < 3) { + return done(); + } + + delete opt.highlight; + + if (!pending) return done(); + + for (; i < tokens.length; i++) { + (function(token) { + if (token.type !== 'code') { + return --pending || done(); + } + return highlight(token.text, token.lang, function(err, code) { + if (err) return done(err); + if (code == null || code === token.text) { + return --pending || done(); + } + token.text = code; + token.escaped = true; + --pending || done(); + }); + })(tokens[i]); + } + + return; + } + try { + opt = merge$3({}, marked.defaults, opt || {}); + checkSanitizeDeprecation$1(opt); + return Parser_1.parse(Lexer_1.lex(src, opt), opt); + } catch (e) { + e.message += '\nPlease report this to https://github.com/markedjs/marked.'; + if ((opt || marked.defaults).silent) { + return '<p>An error occurred:</p><pre>' + + escape$4(e.message + '', true) + + '</pre>'; + } + throw e; + } +} + +/** + * Options + */ + +marked.options = +marked.setOptions = function(opt) { + merge$3(marked.defaults, opt); + changeDefaults(marked.defaults); + return marked; +}; + +marked.getDefaults = getDefaults; + +marked.defaults = defaults$5; + +/** + * Expose + */ + +marked.Parser = Parser_1; +marked.parser = Parser_1.parse; + +marked.Renderer = Renderer_1; +marked.TextRenderer = TextRenderer_1; + +marked.Lexer = Lexer_1; +marked.lexer = Lexer_1.lex; + +marked.InlineLexer = InlineLexer_1; +marked.inlineLexer = InlineLexer_1.output; + +marked.Slugger = Slugger_1; + +marked.parse = marked; + +var marked_1 = marked; + +export default marked_1; diff --git a/packages/markdown/marked/lib/marked.js b/packages/markdown/marked/lib/marked.js index 39c25f26..b40a29da 100644 --- a/packages/markdown/marked/lib/marked.js +++ b/packages/markdown/marked/lib/marked.js @@ -1,1689 +1,1790 @@ /** * marked - a markdown parser - * Copyright (c) 2011-2018, Christopher Jeffrey. (MIT Licensed) + * Copyright (c) 2011-2020, Christopher Jeffrey. (MIT Licensed) * https://github.com/markedjs/marked */ -;(function(root) { -'use strict'; - /** - * Block-Level Grammar + * DO NOT EDIT THIS FILE + * The code in this file is generated from files in ./src/ */ -var block = { - newline: /^\n+/, - code: /^( {4}[^\n]+\n*)+/, - fences: noop, - hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/, - heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/, - nptable: noop, - blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/, - list: /^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/, - html: '^ {0,3}(?:' // optional indentation - + '<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1) - + '|comment[^\\n]*(\\n+|$)' // (2) - + '|<\\?[\\s\\S]*?\\?>\\n*' // (3) - + '|<![A-Z][\\s\\S]*?>\\n*' // (4) - + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*' // (5) - + '|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)' // (6) - + '|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)' // (7) open tag - + '|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)' // (7) closing tag - + ')', - def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/, - table: noop, - lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/, - paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/, - text: /^[^\n]+/ -}; - -block._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/; -block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/; -block.def = edit(block.def) - .replace('label', block._label) - .replace('title', block._title) - .getRegex(); - -block.bullet = /(?:[*+-]|\d{1,9}\.)/; -block.item = /^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/; -block.item = edit(block.item, 'gm') - .replace(/bull/g, block.bullet) - .getRegex(); - -block.list = edit(block.list) - .replace(/bull/g, block.bullet) - .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))') - .replace('def', '\\n+(?=' + block.def.source + ')') - .getRegex(); - -block._tag = 'address|article|aside|base|basefont|blockquote|body|caption' - + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' - + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' - + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' - + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr' - + '|track|ul'; -block._comment = /<!--(?!-?>)[\s\S]*?-->/; -block.html = edit(block.html, 'i') - .replace('comment', block._comment) - .replace('tag', block._tag) - .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/) - .getRegex(); - -block.paragraph = edit(block.paragraph) - .replace('hr', block.hr) - .replace('heading', block.heading) - .replace('lheading', block.lheading) - .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks - .getRegex(); +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.marked = factory()); +}(this, (function () { 'use strict'; + + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } -block.blockquote = edit(block.blockquote) - .replace('paragraph', block.paragraph) - .getRegex(); + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } -/** - * Normal Block Grammar - */ + function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; + } -block.normal = merge({}, block); + var defaults = createCommonjsModule(function (module) { + function getDefaults() { + return { + baseUrl: null, + breaks: false, + gfm: true, + headerIds: true, + headerPrefix: '', + highlight: null, + langPrefix: 'language-', + mangle: true, + pedantic: false, + renderer: null, + sanitize: false, + sanitizer: null, + silent: false, + smartLists: false, + smartypants: false, + xhtml: false + }; + } -/** - * GFM Block Grammar - */ + function changeDefaults(newDefaults) { + module.exports.defaults = newDefaults; + } -block.gfm = merge({}, block.normal, { - fences: /^ {0,3}(`{3,}|~{3,})([^`\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/, - paragraph: /^/, - heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/ -}); + module.exports = { + defaults: getDefaults(), + getDefaults: getDefaults, + changeDefaults: changeDefaults + }; + }); + var defaults_1 = defaults.defaults; + var defaults_2 = defaults.getDefaults; + var defaults_3 = defaults.changeDefaults; + + /** + * Helpers + */ + var escapeTest = /[&<>"']/; + var escapeReplace = /[&<>"']/g; + var escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/; + var escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g; + var escapeReplacements = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; -block.gfm.paragraph = edit(block.paragraph) - .replace('(?!', '(?!' - + block.gfm.fences.source.replace('\\1', '\\2') + '|' - + block.list.source.replace('\\1', '\\3') + '|') - .getRegex(); + var getEscapeReplacement = function getEscapeReplacement(ch) { + return escapeReplacements[ch]; + }; -/** - * GFM + Tables Block Grammar - */ + function escape(html, encode) { + if (encode) { + if (escapeTest.test(html)) { + return html.replace(escapeReplace, getEscapeReplacement); + } + } else { + if (escapeTestNoEncode.test(html)) { + return html.replace(escapeReplaceNoEncode, getEscapeReplacement); + } + } -block.tables = merge({}, block.gfm, { - nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/, - table: /^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/ -}); + return html; + } -/** - * Pedantic grammar - */ + var unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig; -block.pedantic = merge({}, block.normal, { - html: edit( - '^ *(?:comment *(?:\\n|\\s*$)' - + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag - + '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))') - .replace('comment', block._comment) - .replace(/tag/g, '(?!(?:' - + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' - + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' - + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b') - .getRegex(), - def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/ -}); + function unescape(html) { + // explicitly match decimal, hex, and named HTML entities + return html.replace(unescapeTest, function (_, n) { + n = n.toLowerCase(); + if (n === 'colon') return ':'; -/** - * Block Lexer - */ + if (n.charAt(0) === '#') { + return n.charAt(1) === 'x' ? String.fromCharCode(parseInt(n.substring(2), 16)) : String.fromCharCode(+n.substring(1)); + } -function Lexer(options) { - this.tokens = []; - this.tokens.links = Object.create(null); - this.options = options || marked.defaults; - this.rules = block.normal; - - if (this.options.pedantic) { - this.rules = block.pedantic; - } else if (this.options.gfm) { - if (this.options.tables) { - this.rules = block.tables; - } else { - this.rules = block.gfm; - } + return ''; + }); } -} -/** - * Expose Block Rules - */ + var caret = /(^|[^\[])\^/g; + + function edit(regex, opt) { + regex = regex.source || regex; + opt = opt || ''; + var obj = { + replace: function replace(name, val) { + val = val.source || val; + val = val.replace(caret, '$1'); + regex = regex.replace(name, val); + return obj; + }, + getRegex: function getRegex() { + return new RegExp(regex, opt); + } + }; + return obj; + } -Lexer.rules = block; + var nonWordAndColonTest = /[^\w:]/g; + var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i; -/** - * Static Lex Method - */ + function cleanUrl(sanitize, base, href) { + if (sanitize) { + var prot; -Lexer.lex = function(src, options) { - var lexer = new Lexer(options); - return lexer.lex(src); -}; + try { + prot = decodeURIComponent(unescape(href)).replace(nonWordAndColonTest, '').toLowerCase(); + } catch (e) { + return null; + } -/** - * Preprocessing - */ + if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) { + return null; + } + } -Lexer.prototype.lex = function(src) { - src = src - .replace(/\r\n|\r/g, '\n') - .replace(/\t/g, ' ') - .replace(/\u00a0/g, ' ') - .replace(/\u2424/g, '\n'); + if (base && !originIndependentUrl.test(href)) { + href = resolveUrl(base, href); + } - return this.token(src, true); -}; + try { + href = encodeURI(href).replace(/%25/g, '%'); + } catch (e) { + return null; + } -/** - * Lexing - */ + return href; + } -Lexer.prototype.token = function(src, top) { - src = src.replace(/^ +$/gm, ''); - var next, - loose, - cap, - bull, - b, - item, - listStart, - listItems, - t, - space, - i, - tag, - l, - isordered, - istask, - ischecked; - - while (src) { - // newline - if (cap = this.rules.newline.exec(src)) { - src = src.substring(cap[0].length); - if (cap[0].length > 1) { - this.tokens.push({ - type: 'space' - }); + var baseUrls = {}; + var justDomain = /^[^:]+:\/*[^/]*$/; + var protocol = /^([^:]+:)[\s\S]*$/; + var domain = /^([^:]+:\/*[^/]*)[\s\S]*$/; + + function resolveUrl(base, href) { + if (!baseUrls[' ' + base]) { + // we can ignore everything in base after the last slash of its path component, + // but we might need to add _that_ + // https://tools.ietf.org/html/rfc3986#section-3 + if (justDomain.test(base)) { + baseUrls[' ' + base] = base + '/'; + } else { + baseUrls[' ' + base] = rtrim(base, '/', true); } } - // code - if (cap = this.rules.code.exec(src)) { - src = src.substring(cap[0].length); - cap = cap[0].replace(/^ {4}/gm, ''); - this.tokens.push({ - type: 'code', - text: !this.options.pedantic - ? rtrim(cap, '\n') - : cap - }); - continue; - } + base = baseUrls[' ' + base]; + var relativeBase = base.indexOf(':') === -1; - // fences (gfm) - if (cap = this.rules.fences.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'code', - lang: cap[2] ? cap[2].trim() : cap[2], - text: cap[3] || '' - }); - continue; - } + if (href.substring(0, 2) === '//') { + if (relativeBase) { + return href; + } - // heading - if (cap = this.rules.heading.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'heading', - depth: cap[1].length, - text: cap[2] - }); - continue; + return base.replace(protocol, '$1') + href; + } else if (href.charAt(0) === '/') { + if (relativeBase) { + return href; + } + + return base.replace(domain, '$1') + href; + } else { + return base + href; } + } - // table no leading pipe (gfm) - if (cap = this.rules.nptable.exec(src)) { - item = { - type: 'table', - header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')), - align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), - cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : [] - }; + var noopTest = { + exec: function noopTest() {} + }; - if (item.header.length === item.align.length) { - src = src.substring(cap[0].length); + function merge(obj) { + var i = 1, + target, + key; - for (i = 0; i < item.align.length; i++) { - if (/^ *-+: *$/.test(item.align[i])) { - item.align[i] = 'right'; - } else if (/^ *:-+: *$/.test(item.align[i])) { - item.align[i] = 'center'; - } else if (/^ *:-+ *$/.test(item.align[i])) { - item.align[i] = 'left'; - } else { - item.align[i] = null; - } - } + for (; i < arguments.length; i++) { + target = arguments[i]; - for (i = 0; i < item.cells.length; i++) { - item.cells[i] = splitCells(item.cells[i], item.header.length); + for (key in target) { + if (Object.prototype.hasOwnProperty.call(target, key)) { + obj[key] = target[key]; } + } + } - this.tokens.push(item); + return obj; + } + + function splitCells(tableRow, count) { + // ensure that every cell-delimiting pipe has a space + // before it to distinguish it from an escaped pipe + var row = tableRow.replace(/\|/g, function (match, offset, str) { + var escaped = false, + curr = offset; + + while (--curr >= 0 && str[curr] === '\\') { + escaped = !escaped; + } - continue; + if (escaped) { + // odd number of slashes means | is escaped + // so we leave it alone + return '|'; + } else { + // add space before unescaped | + return ' |'; + } + }), + cells = row.split(/ \|/); + var i = 0; + + if (cells.length > count) { + cells.splice(count); + } else { + while (cells.length < count) { + cells.push(''); } } - // hr - if (cap = this.rules.hr.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'hr' - }); - continue; + for (; i < cells.length; i++) { + // leading or trailing whitespace is ignored per the gfm spec + cells[i] = cells[i].trim().replace(/\\\|/g, '|'); } - // blockquote - if (cap = this.rules.blockquote.exec(src)) { - src = src.substring(cap[0].length); + return cells; + } // Remove trailing 'c's. Equivalent to str.replace(/c*$/, ''). + // /c*$/ is vulnerable to REDOS. + // invert: Remove suffix of non-c chars instead. Default falsey. - this.tokens.push({ - type: 'blockquote_start' - }); - cap = cap[0].replace(/^ *> ?/gm, ''); + function rtrim(str, c, invert) { + var l = str.length; - // Pass `top` to keep the current - // "toplevel" state. This is exactly - // how markdown.pl works. - this.token(cap, top); + if (l === 0) { + return ''; + } // Length of suffix matching the invert condition. - this.tokens.push({ - type: 'blockquote_end' - }); - continue; - } + var suffLen = 0; // Step left until we fail to match the invert condition. - // list - if (cap = this.rules.list.exec(src)) { - src = src.substring(cap[0].length); - bull = cap[2]; - isordered = bull.length > 1; - - listStart = { - type: 'list_start', - ordered: isordered, - start: isordered ? +bull : '', - loose: false - }; + while (suffLen < l) { + var currChar = str.charAt(l - suffLen - 1); - this.tokens.push(listStart); + if (currChar === c && !invert) { + suffLen++; + } else if (currChar !== c && invert) { + suffLen++; + } else { + break; + } + } - // Get each top-level item. - cap = cap[0].match(this.rules.item); + return str.substr(0, l - suffLen); + } - listItems = []; - next = false; - l = cap.length; - i = 0; + function findClosingBracket(str, b) { + if (str.indexOf(b[1]) === -1) { + return -1; + } - for (; i < l; i++) { - item = cap[i]; - - // Remove the list item's bullet - // so it is seen as the next token. - space = item.length; - item = item.replace(/^ *([*+-]|\d+\.) */, ''); - - // Outdent whatever the - // list item contains. Hacky. - if (~item.indexOf('\n ')) { - space -= item.length; - item = !this.options.pedantic - ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') - : item.replace(/^ {1,4}/gm, ''); - } + var l = str.length; + var level = 0, + i = 0; - // Determine whether the next list item belongs here. - // Backpedal if it does not belong in this list. - if (i !== l - 1) { - b = block.bullet.exec(cap[i + 1])[0]; - if (bull.length > 1 ? b.length === 1 - : (b.length > 1 || (this.options.smartLists && b !== bull))) { - src = cap.slice(i + 1).join('\n') + src; - i = l - 1; - } - } + for (; i < l; i++) { + if (str[i] === '\\') { + i++; + } else if (str[i] === b[0]) { + level++; + } else if (str[i] === b[1]) { + level--; - // Determine whether item is loose or not. - // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/ - // for discount behavior. - loose = next || /\n\n(?!\s*$)/.test(item); - if (i !== l - 1) { - next = item.charAt(item.length - 1) === '\n'; - if (!loose) loose = next; + if (level < 0) { + return i; } + } + } - if (loose) { - listStart.loose = true; - } + return -1; + } - // Check for task list items - istask = /^\[[ xX]\] /.test(item); - ischecked = undefined; - if (istask) { - ischecked = item[1] !== ' '; - item = item.replace(/^\[[ xX]\] +/, ''); - } + function checkSanitizeDeprecation(opt) { + if (opt && opt.sanitize && !opt.silent) { + console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options'); + } + } - t = { - type: 'list_item_start', - task: istask, - checked: ischecked, - loose: loose - }; + var helpers = { + escape: escape, + unescape: unescape, + edit: edit, + cleanUrl: cleanUrl, + resolveUrl: resolveUrl, + noopTest: noopTest, + merge: merge, + splitCells: splitCells, + rtrim: rtrim, + findClosingBracket: findClosingBracket, + checkSanitizeDeprecation: checkSanitizeDeprecation + }; - listItems.push(t); - this.tokens.push(t); + var noopTest$1 = helpers.noopTest, + edit$1 = helpers.edit, + merge$1 = helpers.merge; + /** + * Block-Level Grammar + */ + + var block = { + newline: /^\n+/, + code: /^( {4}[^\n]+\n*)+/, + fences: /^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/, + hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/, + heading: /^ {0,3}(#{1,6}) +([^\n]*?)(?: +#+)? *(?:\n+|$)/, + blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/, + list: /^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/, + html: '^ {0,3}(?:' // optional indentation + + '<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1) + + '|comment[^\\n]*(\\n+|$)' // (2) + + '|<\\?[\\s\\S]*?\\?>\\n*' // (3) + + '|<![A-Z][\\s\\S]*?>\\n*' // (4) + + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*' // (5) + + '|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)' // (6) + + '|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)' // (7) open tag + + '|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)' // (7) closing tag + + ')', + def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/, + nptable: noopTest$1, + table: noopTest$1, + lheading: /^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/, + // regex template, placeholders will be replaced according to different paragraph + // interruption rules of commonmark and the original markdown spec: + _paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html)[^\n]+)*)/, + text: /^[^\n]+/ + }; + block._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/; + block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/; + block.def = edit$1(block.def).replace('label', block._label).replace('title', block._title).getRegex(); + block.bullet = /(?:[*+-]|\d{1,9}\.)/; + block.item = /^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/; + block.item = edit$1(block.item, 'gm').replace(/bull/g, block.bullet).getRegex(); + block.list = edit$1(block.list).replace(/bull/g, block.bullet).replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))').replace('def', '\\n+(?=' + block.def.source + ')').getRegex(); + block._tag = 'address|article|aside|base|basefont|blockquote|body|caption' + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr' + '|track|ul'; + block._comment = /<!--(?!-?>)[\s\S]*?-->/; + block.html = edit$1(block.html, 'i').replace('comment', block._comment).replace('tag', block._tag).replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(); + block.paragraph = edit$1(block._paragraph).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs + .replace('blockquote', ' {0,3}>').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt + .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks + .getRegex(); + block.blockquote = edit$1(block.blockquote).replace('paragraph', block.paragraph).getRegex(); + /** + * Normal Block Grammar + */ + + block.normal = merge$1({}, block); + /** + * GFM Block Grammar + */ + + block.gfm = merge$1({}, block.normal, { + nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/, + table: '^ *\\|(.+)\\n' // Header + + ' *\\|?( *[-:]+[-| :]*)' // Align + + '(?:\\n((?:(?!^|>|\\n| |hr|heading|lheading|code|fences|list|html).*(?:\\n|$))*)\\n*|$)' // Cells - // Recurse. - this.token(item, false); + }); + block.gfm.table = edit$1(block.gfm.table).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('lheading', '([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)').replace('blockquote', ' {0,3}>').replace('code', ' {4}[^\\n]').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt + .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks + .getRegex(); + /** + * Pedantic grammar (original John Gruber's loose markdown specification) + */ + + block.pedantic = merge$1({}, block.normal, { + html: edit$1('^ *(?:comment *(?:\\n|\\s*$)' + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag + + '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))').replace('comment', block._comment).replace(/tag/g, '(?!(?:' + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b').getRegex(), + def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, + heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/, + fences: noopTest$1, + // fences not supported + paragraph: edit$1(block.normal._paragraph).replace('hr', block.hr).replace('heading', ' *#{1,6} *[^\n]').replace('lheading', block.lheading).replace('blockquote', ' {0,3}>').replace('|fences', '').replace('|list', '').replace('|html', '').getRegex() + }); + /** + * Inline-Level Grammar + */ + + var inline = { + escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/, + autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/, + url: noopTest$1, + tag: '^comment' + '|^</[a-zA-Z][\\w:-]*\\s*>' // self-closing tag + + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag + + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?> + + '|^<![a-zA-Z]+\\s[\\s\\S]*?>' // declaration, e.g. <!DOCTYPE html> + + '|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>', + // CDATA section + link: /^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/, + reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/, + nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/, + strong: /^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/, + em: /^_([^\s_])_(?!_)|^\*([^\s*<\[])\*(?!\*)|^_([^\s<][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_<][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s<"][\s\S]*?[^\s\*])\*(?!\*|[^\spunctuation])|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/, + code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/, + br: /^( {2,}|\\)\n(?!\s*$)/, + del: noopTest$1, + text: /^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*]|\b_|$)|[^ ](?= {2,}\n))|(?= {2,}\n))/ + }; // list of punctuation marks from common mark spec + // without ` and ] to workaround Rule 17 (inline code blocks/links) + + inline._punctuation = '!"#$%&\'()*+,\\-./:;<=>?@\\[^_{|}~'; + inline.em = edit$1(inline.em).replace(/punctuation/g, inline._punctuation).getRegex(); + inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g; + inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/; + inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/; + inline.autolink = edit$1(inline.autolink).replace('scheme', inline._scheme).replace('email', inline._email).getRegex(); + inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/; + inline.tag = edit$1(inline.tag).replace('comment', block._comment).replace('attribute', inline._attribute).getRegex(); + inline._label = /(?:\[[^\[\]]*\]|\\.|`[^`]*`|[^\[\]\\`])*?/; + inline._href = /<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*/; + inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/; + inline.link = edit$1(inline.link).replace('label', inline._label).replace('href', inline._href).replace('title', inline._title).getRegex(); + inline.reflink = edit$1(inline.reflink).replace('label', inline._label).getRegex(); + /** + * Normal Inline Grammar + */ + + inline.normal = merge$1({}, inline); + /** + * Pedantic Inline Grammar + */ + + inline.pedantic = merge$1({}, inline.normal, { + strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, + em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/, + link: edit$1(/^!?\[(label)\]\((.*?)\)/).replace('label', inline._label).getRegex(), + reflink: edit$1(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace('label', inline._label).getRegex() + }); + /** + * GFM Inline Grammar + */ + + inline.gfm = merge$1({}, inline.normal, { + escape: edit$1(inline.escape).replace('])', '~|])').getRegex(), + _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/, + url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/, + _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/, + del: /^~+(?=\S)([\s\S]*?\S)~+/, + text: /^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*~]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?= {2,}\n|[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/ + }); + inline.gfm.url = edit$1(inline.gfm.url, 'i').replace('email', inline.gfm._extended_email).getRegex(); + /** + * GFM + Line Breaks Inline Grammar + */ + + inline.breaks = merge$1({}, inline.gfm, { + br: edit$1(inline.br).replace('{2,}', '*').getRegex(), + text: edit$1(inline.gfm.text).replace('\\b_', '\\b_| {2,}\\n').replace(/\{2,\}/g, '*').getRegex() + }); + var rules = { + block: block, + inline: inline + }; - this.tokens.push({ - type: 'list_item_end' - }); - } + var defaults$1 = defaults.defaults; + var block$1 = rules.block; + var rtrim$1 = helpers.rtrim, + splitCells$1 = helpers.splitCells, + escape$1 = helpers.escape; + /** + * Block Lexer + */ + + var Lexer_1 = + /*#__PURE__*/ + function () { + function Lexer(options) { + this.tokens = []; + this.tokens.links = Object.create(null); + this.options = options || defaults$1; + this.rules = block$1.normal; - if (listStart.loose) { - l = listItems.length; - i = 0; - for (; i < l; i++) { - listItems[i].loose = true; - } + if (this.options.pedantic) { + this.rules = block$1.pedantic; + } else if (this.options.gfm) { + this.rules = block$1.gfm; } + } + /** + * Expose Block Rules + */ - this.tokens.push({ - type: 'list_end' - }); - continue; - } + /** + * Static Lex Method + */ + Lexer.lex = function lex(src, options) { + var lexer = new Lexer(options); + return lexer.lex(src); + }; - // html - if (cap = this.rules.html.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: this.options.sanitize - ? 'paragraph' - : 'html', - pre: !this.options.sanitizer - && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'), - text: cap[0] - }); - continue; - } + var _proto = Lexer.prototype; - // def - if (top && (cap = this.rules.def.exec(src))) { - src = src.substring(cap[0].length); - if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1); - tag = cap[1].toLowerCase().replace(/\s+/g, ' '); - if (!this.tokens.links[tag]) { - this.tokens.links[tag] = { - href: cap[2], - title: cap[3] - }; - } - continue; - } + /** + * Preprocessing + */ + _proto.lex = function lex(src) { + src = src.replace(/\r\n|\r/g, '\n').replace(/\t/g, ' '); + return this.token(src, true); + }; - // table (gfm) - if (cap = this.rules.table.exec(src)) { - item = { - type: 'table', - header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')), - align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), - cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : [] - }; + /** + * Lexing + */ + _proto.token = function token(src, top) { + src = src.replace(/^ +$/gm, ''); + var next, loose, cap, bull, b, item, listStart, listItems, t, space, i, tag, l, isordered, istask, ischecked; + + while (src) { + // newline + if (cap = this.rules.newline.exec(src)) { + src = src.substring(cap[0].length); + + if (cap[0].length > 1) { + this.tokens.push({ + type: 'space' + }); + } + } // code - if (item.header.length === item.align.length) { - src = src.substring(cap[0].length); - for (i = 0; i < item.align.length; i++) { - if (/^ *-+: *$/.test(item.align[i])) { - item.align[i] = 'right'; - } else if (/^ *:-+: *$/.test(item.align[i])) { - item.align[i] = 'center'; - } else if (/^ *:-+ *$/.test(item.align[i])) { - item.align[i] = 'left'; + if (cap = this.rules.code.exec(src)) { + var lastToken = this.tokens[this.tokens.length - 1]; + src = src.substring(cap[0].length); // An indented code block cannot interrupt a paragraph. + + if (lastToken && lastToken.type === 'paragraph') { + lastToken.text += '\n' + cap[0].trimRight(); } else { - item.align[i] = null; + cap = cap[0].replace(/^ {4}/gm, ''); + this.tokens.push({ + type: 'code', + codeBlockStyle: 'indented', + text: !this.options.pedantic ? rtrim$1(cap, '\n') : cap + }); + } + + continue; + } // fences + + + if (cap = this.rules.fences.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'code', + lang: cap[2] ? cap[2].trim() : cap[2], + text: cap[3] || '' + }); + continue; + } // heading + + + if (cap = this.rules.heading.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'heading', + depth: cap[1].length, + text: cap[2] + }); + continue; + } // table no leading pipe (gfm) + + + if (cap = this.rules.nptable.exec(src)) { + item = { + type: 'table', + header: splitCells$1(cap[1].replace(/^ *| *\| *$/g, '')), + align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), + cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : [] + }; + + if (item.header.length === item.align.length) { + src = src.substring(cap[0].length); + + for (i = 0; i < item.align.length; i++) { + if (/^ *-+: *$/.test(item.align[i])) { + item.align[i] = 'right'; + } else if (/^ *:-+: *$/.test(item.align[i])) { + item.align[i] = 'center'; + } else if (/^ *:-+ *$/.test(item.align[i])) { + item.align[i] = 'left'; + } else { + item.align[i] = null; + } + } + + for (i = 0; i < item.cells.length; i++) { + item.cells[i] = splitCells$1(item.cells[i], item.header.length); + } + + this.tokens.push(item); + continue; + } + } // hr + + + if (cap = this.rules.hr.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'hr' + }); + continue; + } // blockquote + + + if (cap = this.rules.blockquote.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'blockquote_start' + }); + cap = cap[0].replace(/^ *> ?/gm, ''); // Pass `top` to keep the current + // "toplevel" state. This is exactly + // how markdown.pl works. + + this.token(cap, top); + this.tokens.push({ + type: 'blockquote_end' + }); + continue; + } // list + + + if (cap = this.rules.list.exec(src)) { + src = src.substring(cap[0].length); + bull = cap[2]; + isordered = bull.length > 1; + listStart = { + type: 'list_start', + ordered: isordered, + start: isordered ? +bull : '', + loose: false + }; + this.tokens.push(listStart); // Get each top-level item. + + cap = cap[0].match(this.rules.item); + listItems = []; + next = false; + l = cap.length; + i = 0; + + for (; i < l; i++) { + item = cap[i]; // Remove the list item's bullet + // so it is seen as the next token. + + space = item.length; + item = item.replace(/^ *([*+-]|\d+\.) */, ''); // Outdent whatever the + // list item contains. Hacky. + + if (~item.indexOf('\n ')) { + space -= item.length; + item = !this.options.pedantic ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') : item.replace(/^ {1,4}/gm, ''); + } // Determine whether the next list item belongs here. + // Backpedal if it does not belong in this list. + + + if (i !== l - 1) { + b = block$1.bullet.exec(cap[i + 1])[0]; + + if (bull.length > 1 ? b.length === 1 : b.length > 1 || this.options.smartLists && b !== bull) { + src = cap.slice(i + 1).join('\n') + src; + i = l - 1; + } + } // Determine whether item is loose or not. + // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/ + // for discount behavior. + + + loose = next || /\n\n(?!\s*$)/.test(item); + + if (i !== l - 1) { + next = item.charAt(item.length - 1) === '\n'; + if (!loose) loose = next; + } + + if (loose) { + listStart.loose = true; + } // Check for task list items + + + istask = /^\[[ xX]\] /.test(item); + ischecked = undefined; + + if (istask) { + ischecked = item[1] !== ' '; + item = item.replace(/^\[[ xX]\] +/, ''); + } + + t = { + type: 'list_item_start', + task: istask, + checked: ischecked, + loose: loose + }; + listItems.push(t); + this.tokens.push(t); // Recurse. + + this.token(item, false); + this.tokens.push({ + type: 'list_item_end' + }); + } + + if (listStart.loose) { + l = listItems.length; + i = 0; + + for (; i < l; i++) { + listItems[i].loose = true; + } } + + this.tokens.push({ + type: 'list_end' + }); + continue; + } // html + + + if (cap = this.rules.html.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: this.options.sanitize ? 'paragraph' : 'html', + pre: !this.options.sanitizer && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'), + text: this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0]) : cap[0] + }); + continue; + } // def + + + if (top && (cap = this.rules.def.exec(src))) { + src = src.substring(cap[0].length); + if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1); + tag = cap[1].toLowerCase().replace(/\s+/g, ' '); + + if (!this.tokens.links[tag]) { + this.tokens.links[tag] = { + href: cap[2], + title: cap[3] + }; + } + + continue; + } // table (gfm) + + + if (cap = this.rules.table.exec(src)) { + item = { + type: 'table', + header: splitCells$1(cap[1].replace(/^ *| *\| *$/g, '')), + align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), + cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : [] + }; + + if (item.header.length === item.align.length) { + src = src.substring(cap[0].length); + + for (i = 0; i < item.align.length; i++) { + if (/^ *-+: *$/.test(item.align[i])) { + item.align[i] = 'right'; + } else if (/^ *:-+: *$/.test(item.align[i])) { + item.align[i] = 'center'; + } else if (/^ *:-+ *$/.test(item.align[i])) { + item.align[i] = 'left'; + } else { + item.align[i] = null; + } + } + + for (i = 0; i < item.cells.length; i++) { + item.cells[i] = splitCells$1(item.cells[i].replace(/^ *\| *| *\| *$/g, ''), item.header.length); + } + + this.tokens.push(item); + continue; + } + } // lheading + + + if (cap = this.rules.lheading.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'heading', + depth: cap[2].charAt(0) === '=' ? 1 : 2, + text: cap[1] + }); + continue; + } // top-level paragraph + + + if (top && (cap = this.rules.paragraph.exec(src))) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'paragraph', + text: cap[1].charAt(cap[1].length - 1) === '\n' ? cap[1].slice(0, -1) : cap[1] + }); + continue; + } // text + + + if (cap = this.rules.text.exec(src)) { + // Top-level should never reach here. + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'text', + text: cap[0] + }); + continue; } - for (i = 0; i < item.cells.length; i++) { - item.cells[i] = splitCells( - item.cells[i].replace(/^ *\| *| *\| *$/g, ''), - item.header.length); + if (src) { + throw new Error('Infinite loop on byte: ' + src.charCodeAt(0)); } + } - this.tokens.push(item); + return this.tokens; + }; - continue; + _createClass(Lexer, null, [{ + key: "rules", + get: function get() { + return block$1; } + }]); + + return Lexer; + }(); + + var defaults$2 = defaults.defaults; + var cleanUrl$1 = helpers.cleanUrl, + escape$2 = helpers.escape; + /** + * Renderer + */ + + var Renderer_1 = + /*#__PURE__*/ + function () { + function Renderer(options) { + this.options = options || defaults$2; } - // lheading - if (cap = this.rules.lheading.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'heading', - depth: cap[2] === '=' ? 1 : 2, - text: cap[1] - }); - continue; - } + var _proto = Renderer.prototype; - // top-level paragraph - if (top && (cap = this.rules.paragraph.exec(src))) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'paragraph', - text: cap[1].charAt(cap[1].length - 1) === '\n' - ? cap[1].slice(0, -1) - : cap[1] - }); - continue; - } + _proto.code = function code(_code, infostring, escaped) { + var lang = (infostring || '').match(/\S*/)[0]; - // text - if (cap = this.rules.text.exec(src)) { - // Top-level should never reach here. - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'text', - text: cap[0] - }); - continue; - } + if (this.options.highlight) { + var out = this.options.highlight(_code, lang); - if (src) { - throw new Error('Infinite loop on byte: ' + src.charCodeAt(0)); - } - } + if (out != null && out !== _code) { + escaped = true; + _code = out; + } + } + + if (!lang) { + return '<pre><code>' + (escaped ? _code : escape$2(_code, true)) + '</code></pre>'; + } - return this.tokens; -}; + return '<pre><code class="' + this.options.langPrefix + escape$2(lang, true) + '">' + (escaped ? _code : escape$2(_code, true)) + '</code></pre>\n'; + }; -/** - * Inline-Level Grammar - */ + _proto.blockquote = function blockquote(quote) { + return '<blockquote>\n' + quote + '</blockquote>\n'; + }; -var inline = { - escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/, - autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/, - url: noop, - tag: '^comment' - + '|^</[a-zA-Z][\\w:-]*\\s*>' // self-closing tag - + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag - + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?> - + '|^<![a-zA-Z]+\\s[\\s\\S]*?>' // declaration, e.g. <!DOCTYPE html> - + '|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>', // CDATA section - link: /^!?\[(label)\]\(href(?:\s+(title))?\s*\)/, - reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/, - nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/, - strong: /^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/, - em: /^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/, - code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/, - br: /^( {2,}|\\)\n(?!\s*$)/, - del: noop, - text: /^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*]|\b_|$)|[^ ](?= {2,}\n))|(?= {2,}\n))/ -}; - -// list of punctuation marks from common mark spec -// without ` and ] to workaround Rule 17 (inline code blocks/links) -inline._punctuation = '!"#$%&\'()*+,\\-./:;<=>?@\\[^_{|}~'; -inline.em = edit(inline.em).replace(/punctuation/g, inline._punctuation).getRegex(); - -inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g; - -inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/; -inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/; -inline.autolink = edit(inline.autolink) - .replace('scheme', inline._scheme) - .replace('email', inline._email) - .getRegex(); + _proto.html = function html(_html) { + return _html; + }; -inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/; + _proto.heading = function heading(text, level, raw, slugger) { + if (this.options.headerIds) { + return '<h' + level + ' id="' + this.options.headerPrefix + slugger.slug(raw) + '">' + text + '</h' + level + '>\n'; + } // ignore IDs -inline.tag = edit(inline.tag) - .replace('comment', block._comment) - .replace('attribute', inline._attribute) - .getRegex(); -inline._label = /(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|`(?!`)|[^\[\]\\`])*?/; -inline._href = /\s*(<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*)/; -inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/; + return '<h' + level + '>' + text + '</h' + level + '>\n'; + }; -inline.link = edit(inline.link) - .replace('label', inline._label) - .replace('href', inline._href) - .replace('title', inline._title) - .getRegex(); + _proto.hr = function hr() { + return this.options.xhtml ? '<hr/>\n' : '<hr>\n'; + }; -inline.reflink = edit(inline.reflink) - .replace('label', inline._label) - .getRegex(); + _proto.list = function list(body, ordered, start) { + var type = ordered ? 'ol' : 'ul', + startatt = ordered && start !== 1 ? ' start="' + start + '"' : ''; + return '<' + type + startatt + '>\n' + body + '</' + type + '>\n'; + }; -/** - * Normal Inline Grammar - */ + _proto.listitem = function listitem(text) { + return '<li>' + text + '</li>\n'; + }; -inline.normal = merge({}, inline); + _proto.checkbox = function checkbox(checked) { + return '<input ' + (checked ? 'checked="" ' : '') + 'disabled="" type="checkbox"' + (this.options.xhtml ? ' /' : '') + '> '; + }; -/** - * Pedantic Inline Grammar - */ + _proto.paragraph = function paragraph(text) { + return '<p>' + text + '</p>\n'; + }; -inline.pedantic = merge({}, inline.normal, { - strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, - em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/, - link: edit(/^!?\[(label)\]\((.*?)\)/) - .replace('label', inline._label) - .getRegex(), - reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/) - .replace('label', inline._label) - .getRegex() -}); + _proto.table = function table(header, body) { + if (body) body = '<tbody>' + body + '</tbody>'; + return '<table>\n' + '<thead>\n' + header + '</thead>\n' + body + '</table>\n'; + }; -/** - * GFM Inline Grammar - */ + _proto.tablerow = function tablerow(content) { + return '<tr>\n' + content + '</tr>\n'; + }; -inline.gfm = merge({}, inline.normal, { - escape: edit(inline.escape).replace('])', '~|])').getRegex(), - _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/, - url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/, - _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/, - del: /^~+(?=\S)([\s\S]*?\S)~+/, - text: /^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*~]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?= {2,}\n|[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/ -}); - -inline.gfm.url = edit(inline.gfm.url, 'i') - .replace('email', inline.gfm._extended_email) - .getRegex(); -/** - * GFM + Line Breaks Inline Grammar - */ + _proto.tablecell = function tablecell(content, flags) { + var type = flags.header ? 'th' : 'td'; + var tag = flags.align ? '<' + type + ' align="' + flags.align + '">' : '<' + type + '>'; + return tag + content + '</' + type + '>\n'; + }; -inline.breaks = merge({}, inline.gfm, { - br: edit(inline.br).replace('{2,}', '*').getRegex(), - text: edit(inline.gfm.text).replace(/\{2,\}/g, '*').getRegex() -}); + // span level renderer + _proto.strong = function strong(text) { + return '<strong>' + text + '</strong>'; + }; -/** - * Inline Lexer & Compiler - */ + _proto.em = function em(text) { + return '<em>' + text + '</em>'; + }; -function InlineLexer(links, options) { - this.options = options || marked.defaults; - this.links = links; - this.rules = inline.normal; - this.renderer = this.options.renderer || new Renderer(); - this.renderer.options = this.options; + _proto.codespan = function codespan(text) { + return '<code>' + text + '</code>'; + }; - if (!this.links) { - throw new Error('Tokens array requires a `links` property.'); - } + _proto.br = function br() { + return this.options.xhtml ? '<br/>' : '<br>'; + }; - if (this.options.pedantic) { - this.rules = inline.pedantic; - } else if (this.options.gfm) { - if (this.options.breaks) { - this.rules = inline.breaks; - } else { - this.rules = inline.gfm; - } - } -} + _proto.del = function del(text) { + return '<del>' + text + '</del>'; + }; -/** - * Expose Inline Rules - */ + _proto.link = function link(href, title, text) { + href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href); -InlineLexer.rules = inline; + if (href === null) { + return text; + } -/** - * Static Lexing/Compiling Method - */ + var out = '<a href="' + escape$2(href) + '"'; -InlineLexer.output = function(src, links, options) { - var inline = new InlineLexer(links, options); - return inline.output(src); -}; + if (title) { + out += ' title="' + title + '"'; + } -/** - * Lexing/Compiling - */ + out += '>' + text + '</a>'; + return out; + }; -InlineLexer.prototype.output = function(src) { - var out = '', - link, - text, - href, - title, - cap, - prevCapZero; - - while (src) { - // escape - if (cap = this.rules.escape.exec(src)) { - src = src.substring(cap[0].length); - out += escape(cap[1]); - continue; - } + _proto.image = function image(href, title, text) { + href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href); - // tag - if (cap = this.rules.tag.exec(src)) { - if (!this.inLink && /^<a /i.test(cap[0])) { - this.inLink = true; - } else if (this.inLink && /^<\/a>/i.test(cap[0])) { - this.inLink = false; - } - if (!this.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) { - this.inRawBlock = true; - } else if (this.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) { - this.inRawBlock = false; + if (href === null) { + return text; } - src = src.substring(cap[0].length); - out += this.options.sanitize - ? this.options.sanitizer - ? this.options.sanitizer(cap[0]) - : escape(cap[0]) - : cap[0]; - continue; - } + var out = '<img src="' + href + '" alt="' + text + '"'; - // link - if (cap = this.rules.link.exec(src)) { - var lastParenIndex = findClosingBracket(cap[2], '()'); - if (lastParenIndex > -1) { - var linkLen = cap[0].length - (cap[2].length - lastParenIndex) - (cap[3] || '').length; - cap[2] = cap[2].substring(0, lastParenIndex); - cap[0] = cap[0].substring(0, linkLen).trim(); - cap[3] = ''; + if (title) { + out += ' title="' + title + '"'; } - src = src.substring(cap[0].length); - this.inLink = true; - href = cap[2]; - if (this.options.pedantic) { - link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href); - if (link) { - href = link[1]; - title = link[3]; - } else { - title = ''; - } - } else { - title = cap[3] ? cap[3].slice(1, -1) : ''; - } - href = href.trim().replace(/^<([\s\S]*)>$/, '$1'); - out += this.outputLink(cap, { - href: InlineLexer.escapes(href), - title: InlineLexer.escapes(title) - }); - this.inLink = false; - continue; - } + out += this.options.xhtml ? '/>' : '>'; + return out; + }; - // reflink, nolink - if ((cap = this.rules.reflink.exec(src)) - || (cap = this.rules.nolink.exec(src))) { - src = src.substring(cap[0].length); - link = (cap[2] || cap[1]).replace(/\s+/g, ' '); - link = this.links[link.toLowerCase()]; - if (!link || !link.href) { - out += cap[0].charAt(0); - src = cap[0].substring(1) + src; - continue; - } - this.inLink = true; - out += this.outputLink(cap, link); - this.inLink = false; - continue; - } + _proto.text = function text(_text) { + return _text; + }; - // strong - if (cap = this.rules.strong.exec(src)) { - src = src.substring(cap[0].length); - out += this.renderer.strong(this.output(cap[4] || cap[3] || cap[2] || cap[1])); - continue; + return Renderer; + }(); + + /** + * Slugger generates header id + */ + var Slugger_1 = + /*#__PURE__*/ + function () { + function Slugger() { + this.seen = {}; } + /** + * Convert string to unique id + */ - // em - if (cap = this.rules.em.exec(src)) { - src = src.substring(cap[0].length); - out += this.renderer.em(this.output(cap[6] || cap[5] || cap[4] || cap[3] || cap[2] || cap[1])); - continue; - } - // code - if (cap = this.rules.code.exec(src)) { - src = src.substring(cap[0].length); - out += this.renderer.codespan(escape(cap[2].trim(), true)); - continue; - } + var _proto = Slugger.prototype; - // br - if (cap = this.rules.br.exec(src)) { - src = src.substring(cap[0].length); - out += this.renderer.br(); - continue; - } + _proto.slug = function slug(value) { + var slug = value.toLowerCase().trim().replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '').replace(/\s/g, '-'); - // del (gfm) - if (cap = this.rules.del.exec(src)) { - src = src.substring(cap[0].length); - out += this.renderer.del(this.output(cap[1])); - continue; - } + if (this.seen.hasOwnProperty(slug)) { + var originalSlug = slug; - // autolink - if (cap = this.rules.autolink.exec(src)) { - src = src.substring(cap[0].length); - if (cap[2] === '@') { - text = escape(this.mangle(cap[1])); - href = 'mailto:' + text; - } else { - text = escape(cap[1]); - href = text; + do { + this.seen[originalSlug]++; + slug = originalSlug + '-' + this.seen[originalSlug]; + } while (this.seen.hasOwnProperty(slug)); } - out += this.renderer.link(href, null, text); - continue; - } - // url (gfm) - if (!this.inLink && (cap = this.rules.url.exec(src))) { - if (cap[2] === '@') { - text = escape(cap[0]); - href = 'mailto:' + text; - } else { - // do extended autolink path validation - do { - prevCapZero = cap[0]; - cap[0] = this.rules._backpedal.exec(cap[0])[0]; - } while (prevCapZero !== cap[0]); - text = escape(cap[0]); - if (cap[1] === 'www.') { - href = 'http://' + text; + this.seen[slug] = 0; + return slug; + }; + + return Slugger; + }(); + + var defaults$3 = defaults.defaults; + var inline$1 = rules.inline; + var findClosingBracket$1 = helpers.findClosingBracket, + escape$3 = helpers.escape; + /** + * Inline Lexer & Compiler + */ + + var InlineLexer_1 = + /*#__PURE__*/ + function () { + function InlineLexer(links, options) { + this.options = options || defaults$3; + this.links = links; + this.rules = inline$1.normal; + this.options.renderer = this.options.renderer || new Renderer_1(); + this.renderer = this.options.renderer; + this.renderer.options = this.options; + + if (!this.links) { + throw new Error('Tokens array requires a `links` property.'); + } + + if (this.options.pedantic) { + this.rules = inline$1.pedantic; + } else if (this.options.gfm) { + if (this.options.breaks) { + this.rules = inline$1.breaks; } else { - href = text; + this.rules = inline$1.gfm; } } - src = src.substring(cap[0].length); - out += this.renderer.link(href, null, text); - continue; } + /** + * Expose Inline Rules + */ - // text - if (cap = this.rules.text.exec(src)) { - src = src.substring(cap[0].length); - if (this.inRawBlock) { - out += this.renderer.text(cap[0]); - } else { - out += this.renderer.text(escape(this.smartypants(cap[0]))); - } - continue; - } - if (src) { - throw new Error('Infinite loop on byte: ' + src.charCodeAt(0)); + /** + * Static Lexing/Compiling Method + */ + InlineLexer.output = function output(src, links, options) { + var inline = new InlineLexer(links, options); + return inline.output(src); } - } - - return out; -}; - -InlineLexer.escapes = function(text) { - return text ? text.replace(InlineLexer.rules._escapes, '$1') : text; -}; - -/** - * Compile Link - */ - -InlineLexer.prototype.outputLink = function(cap, link) { - var href = link.href, - title = link.title ? escape(link.title) : null; + /** + * Lexing/Compiling + */ + ; + + var _proto = InlineLexer.prototype; + + _proto.output = function output(src) { + var out = '', + link, + text, + href, + title, + cap, + prevCapZero; + + while (src) { + // escape + if (cap = this.rules.escape.exec(src)) { + src = src.substring(cap[0].length); + out += escape$3(cap[1]); + continue; + } // tag + + + if (cap = this.rules.tag.exec(src)) { + if (!this.inLink && /^<a /i.test(cap[0])) { + this.inLink = true; + } else if (this.inLink && /^<\/a>/i.test(cap[0])) { + this.inLink = false; + } - return cap[0].charAt(0) !== '!' - ? this.renderer.link(href, title, this.output(cap[1])) - : this.renderer.image(href, title, escape(cap[1])); -}; + if (!this.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) { + this.inRawBlock = true; + } else if (this.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) { + this.inRawBlock = false; + } -/** - * Smartypants Transformations - */ + src = src.substring(cap[0].length); + out += this.renderer.html(this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$3(cap[0]) : cap[0]); + continue; + } // link -InlineLexer.prototype.smartypants = function(text) { - if (!this.options.smartypants) return text; - return text - // em-dashes - .replace(/---/g, '\u2014') - // en-dashes - .replace(/--/g, '\u2013') - // opening singles - .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018') - // closing singles & apostrophes - .replace(/'/g, '\u2019') - // opening doubles - .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c') - // closing doubles - .replace(/"/g, '\u201d') - // ellipses - .replace(/\.{3}/g, '\u2026'); -}; -/** - * Mangle Links - */ + if (cap = this.rules.link.exec(src)) { + var lastParenIndex = findClosingBracket$1(cap[2], '()'); -InlineLexer.prototype.mangle = function(text) { - if (!this.options.mangle) return text; - var out = '', - l = text.length, - i = 0, - ch; - - for (; i < l; i++) { - ch = text.charCodeAt(i); - if (Math.random() > 0.5) { - ch = 'x' + ch.toString(16); - } - out += '&#' + ch + ';'; - } + if (lastParenIndex > -1) { + var start = cap[0].indexOf('!') === 0 ? 5 : 4; + var linkLen = start + cap[1].length + lastParenIndex; + cap[2] = cap[2].substring(0, lastParenIndex); + cap[0] = cap[0].substring(0, linkLen).trim(); + cap[3] = ''; + } - return out; -}; + src = src.substring(cap[0].length); + this.inLink = true; + href = cap[2]; -/** - * Renderer - */ - -function Renderer(options) { - this.options = options || marked.defaults; -} - -Renderer.prototype.code = function(code, infostring, escaped) { - var lang = (infostring || '').match(/\S*/)[0]; - if (this.options.highlight) { - var out = this.options.highlight(code, lang); - if (out != null && out !== code) { - escaped = true; - code = out; - } - } + if (this.options.pedantic) { + link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href); - if (!lang) { - return '<pre><code>' - + (escaped ? code : escape(code, true)) - + '</code></pre>'; - } + if (link) { + href = link[1]; + title = link[3]; + } else { + title = ''; + } + } else { + title = cap[3] ? cap[3].slice(1, -1) : ''; + } - return '<pre><code class="' - + this.options.langPrefix - + escape(lang, true) - + '">' - + (escaped ? code : escape(code, true)) - + '</code></pre>\n'; -}; - -Renderer.prototype.blockquote = function(quote) { - return '<blockquote>\n' + quote + '</blockquote>\n'; -}; - -Renderer.prototype.html = function(html) { - return html; -}; - -Renderer.prototype.heading = function(text, level, raw, slugger) { - if (this.options.headerIds) { - return '<h' - + level - + ' id="' - + this.options.headerPrefix - + slugger.slug(raw) - + '">' - + text - + '</h' - + level - + '>\n'; - } - // ignore IDs - return '<h' + level + '>' + text + '</h' + level + '>\n'; -}; - -Renderer.prototype.hr = function() { - return this.options.xhtml ? '<hr/>\n' : '<hr>\n'; -}; - -Renderer.prototype.list = function(body, ordered, start) { - var type = ordered ? 'ol' : 'ul', - startatt = (ordered && start !== 1) ? (' start="' + start + '"') : ''; - return '<' + type + startatt + '>\n' + body + '</' + type + '>\n'; -}; - -Renderer.prototype.listitem = function(text) { - return '<li>' + text + '</li>\n'; -}; - -Renderer.prototype.checkbox = function(checked) { - return '<input ' - + (checked ? 'checked="" ' : '') - + 'disabled="" type="checkbox"' - + (this.options.xhtml ? ' /' : '') - + '> '; -}; - -Renderer.prototype.paragraph = function(text) { - return '<p>' + text + '</p>\n'; -}; - -Renderer.prototype.table = function(header, body) { - if (body) body = '<tbody>' + body + '</tbody>'; - - return '<table>\n' - + '<thead>\n' - + header - + '</thead>\n' - + body - + '</table>\n'; -}; - -Renderer.prototype.tablerow = function(content) { - return '<tr>\n' + content + '</tr>\n'; -}; - -Renderer.prototype.tablecell = function(content, flags) { - var type = flags.header ? 'th' : 'td'; - var tag = flags.align - ? '<' + type + ' align="' + flags.align + '">' - : '<' + type + '>'; - return tag + content + '</' + type + '>\n'; -}; - -// span level renderer -Renderer.prototype.strong = function(text) { - return '<strong>' + text + '</strong>'; -}; - -Renderer.prototype.em = function(text) { - return '<em>' + text + '</em>'; -}; - -Renderer.prototype.codespan = function(text) { - return '<code>' + text + '</code>'; -}; - -Renderer.prototype.br = function() { - return this.options.xhtml ? '<br/>' : '<br>'; -}; - -Renderer.prototype.del = function(text) { - return '<del>' + text + '</del>'; -}; - -Renderer.prototype.link = function(href, title, text) { - href = cleanUrl(this.options.sanitize, this.options.baseUrl, href); - if (href === null) { - return text; - } - var out = '<a href="' + escape(href) + '"'; - if (title) { - out += ' title="' + title + '"'; - } - out += '>' + text + '</a>'; - return out; -}; - -Renderer.prototype.image = function(href, title, text) { - href = cleanUrl(this.options.sanitize, this.options.baseUrl, href); - if (href === null) { - return text; - } + href = href.trim().replace(/^<([\s\S]*)>$/, '$1'); + out += this.outputLink(cap, { + href: InlineLexer.escapes(href), + title: InlineLexer.escapes(title) + }); + this.inLink = false; + continue; + } // reflink, nolink + + + if ((cap = this.rules.reflink.exec(src)) || (cap = this.rules.nolink.exec(src))) { + src = src.substring(cap[0].length); + link = (cap[2] || cap[1]).replace(/\s+/g, ' '); + link = this.links[link.toLowerCase()]; + + if (!link || !link.href) { + out += cap[0].charAt(0); + src = cap[0].substring(1) + src; + continue; + } - var out = '<img src="' + href + '" alt="' + text + '"'; - if (title) { - out += ' title="' + title + '"'; - } - out += this.options.xhtml ? '/>' : '>'; - return out; -}; + this.inLink = true; + out += this.outputLink(cap, link); + this.inLink = false; + continue; + } // strong -Renderer.prototype.text = function(text) { - return text; -}; -/** - * TextRenderer - * returns only the textual part of the token - */ + if (cap = this.rules.strong.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.strong(this.output(cap[4] || cap[3] || cap[2] || cap[1])); + continue; + } // em -function TextRenderer() {} -// no need for block level renderers + if (cap = this.rules.em.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.em(this.output(cap[6] || cap[5] || cap[4] || cap[3] || cap[2] || cap[1])); + continue; + } // code -TextRenderer.prototype.strong = -TextRenderer.prototype.em = -TextRenderer.prototype.codespan = -TextRenderer.prototype.del = -TextRenderer.prototype.text = function (text) { - return text; -}; -TextRenderer.prototype.link = -TextRenderer.prototype.image = function(href, title, text) { - return '' + text; -}; + if (cap = this.rules.code.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.codespan(escape$3(cap[2].trim(), true)); + continue; + } // br -TextRenderer.prototype.br = function() { - return ''; -}; -/** - * Parsing & Compiling - */ + if (cap = this.rules.br.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.br(); + continue; + } // del (gfm) -function Parser(options) { - this.tokens = []; - this.token = null; - this.options = options || marked.defaults; - this.options.renderer = this.options.renderer || new Renderer(); - this.renderer = this.options.renderer; - this.renderer.options = this.options; - this.slugger = new Slugger(); -} -/** - * Static Parse Method - */ + if (cap = this.rules.del.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.del(this.output(cap[1])); + continue; + } // autolink -Parser.parse = function(src, options) { - var parser = new Parser(options); - return parser.parse(src); -}; -/** - * Parse Loop - */ + if (cap = this.rules.autolink.exec(src)) { + src = src.substring(cap[0].length); -Parser.prototype.parse = function(src) { - this.inline = new InlineLexer(src.links, this.options); - // use an InlineLexer with a TextRenderer to extract pure text - this.inlineText = new InlineLexer( - src.links, - merge({}, this.options, {renderer: new TextRenderer()}) - ); - this.tokens = src.reverse(); - - var out = ''; - while (this.next()) { - out += this.tok(); - } + if (cap[2] === '@') { + text = escape$3(this.mangle(cap[1])); + href = 'mailto:' + text; + } else { + text = escape$3(cap[1]); + href = text; + } - return out; -}; + out += this.renderer.link(href, null, text); + continue; + } // url (gfm) -/** - * Next Token - */ -Parser.prototype.next = function() { - return this.token = this.tokens.pop(); -}; + if (!this.inLink && (cap = this.rules.url.exec(src))) { + if (cap[2] === '@') { + text = escape$3(cap[0]); + href = 'mailto:' + text; + } else { + // do extended autolink path validation + do { + prevCapZero = cap[0]; + cap[0] = this.rules._backpedal.exec(cap[0])[0]; + } while (prevCapZero !== cap[0]); + + text = escape$3(cap[0]); + + if (cap[1] === 'www.') { + href = 'http://' + text; + } else { + href = text; + } + } -/** - * Preview Next Token - */ + src = src.substring(cap[0].length); + out += this.renderer.link(href, null, text); + continue; + } // text -Parser.prototype.peek = function() { - return this.tokens[this.tokens.length - 1] || 0; -}; -/** - * Parse Text Tokens - */ + if (cap = this.rules.text.exec(src)) { + src = src.substring(cap[0].length); -Parser.prototype.parseText = function() { - var body = this.token.text; + if (this.inRawBlock) { + out += this.renderer.text(this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$3(cap[0]) : cap[0]); + } else { + out += this.renderer.text(escape$3(this.smartypants(cap[0]))); + } - while (this.peek().type === 'text') { - body += '\n' + this.next().text; - } + continue; + } - return this.inline.output(body); -}; + if (src) { + throw new Error('Infinite loop on byte: ' + src.charCodeAt(0)); + } + } -/** - * Parse Current Token - */ + return out; + }; -Parser.prototype.tok = function() { - switch (this.token.type) { - case 'space': { - return ''; + InlineLexer.escapes = function escapes(text) { + return text ? text.replace(InlineLexer.rules._escapes, '$1') : text; } - case 'hr': { - return this.renderer.hr(); + /** + * Compile Link + */ + ; + + _proto.outputLink = function outputLink(cap, link) { + var href = link.href, + title = link.title ? escape$3(link.title) : null; + return cap[0].charAt(0) !== '!' ? this.renderer.link(href, title, this.output(cap[1])) : this.renderer.image(href, title, escape$3(cap[1])); } - case 'heading': { - return this.renderer.heading( - this.inline.output(this.token.text), - this.token.depth, - unescape(this.inlineText.output(this.token.text)), - this.slugger); + /** + * Smartypants Transformations + */ + ; + + _proto.smartypants = function smartypants(text) { + if (!this.options.smartypants) return text; + return text // em-dashes + .replace(/---/g, "\u2014") // en-dashes + .replace(/--/g, "\u2013") // opening singles + .replace(/(^|[-\u2014/(\[{"\s])'/g, "$1\u2018") // closing singles & apostrophes + .replace(/'/g, "\u2019") // opening doubles + .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, "$1\u201C") // closing doubles + .replace(/"/g, "\u201D") // ellipses + .replace(/\.{3}/g, "\u2026"); } - case 'code': { - return this.renderer.code(this.token.text, - this.token.lang, - this.token.escaped); - } - case 'table': { - var header = '', - body = '', - i, - row, - cell, - j; - - // header - cell = ''; - for (i = 0; i < this.token.header.length; i++) { - cell += this.renderer.tablecell( - this.inline.output(this.token.header[i]), - { header: true, align: this.token.align[i] } - ); - } - header += this.renderer.tablerow(cell); + /** + * Mangle Links + */ + ; + + _proto.mangle = function mangle(text) { + if (!this.options.mangle) return text; + var l = text.length; + var out = '', + i = 0, + ch; - for (i = 0; i < this.token.cells.length; i++) { - row = this.token.cells[i]; + for (; i < l; i++) { + ch = text.charCodeAt(i); - cell = ''; - for (j = 0; j < row.length; j++) { - cell += this.renderer.tablecell( - this.inline.output(row[j]), - { header: false, align: this.token.align[j] } - ); + if (Math.random() > 0.5) { + ch = 'x' + ch.toString(16); } - body += this.renderer.tablerow(cell); + out += '&#' + ch + ';'; } - return this.renderer.table(header, body); - } - case 'blockquote_start': { - body = ''; - while (this.next().type !== 'blockquote_end') { - body += this.tok(); + return out; + }; + + _createClass(InlineLexer, null, [{ + key: "rules", + get: function get() { + return inline$1; } + }]); - return this.renderer.blockquote(body); - } - case 'list_start': { - body = ''; - var ordered = this.token.ordered, - start = this.token.start; + return InlineLexer; + }(); - while (this.next().type !== 'list_end') { - body += this.tok(); - } + /** + * TextRenderer + * returns only the textual part of the token + */ + var TextRenderer_1 = + /*#__PURE__*/ + function () { + function TextRenderer() {} - return this.renderer.list(body, ordered, start); - } - case 'list_item_start': { - body = ''; - var loose = this.token.loose; - var checked = this.token.checked; - var task = this.token.task; - - if (this.token.task) { - body += this.renderer.checkbox(checked); - } + var _proto = TextRenderer.prototype; - while (this.next().type !== 'list_item_end') { - body += !loose && this.token.type === 'text' - ? this.parseText() - : this.tok(); - } - return this.renderer.listitem(body, task, checked); - } - case 'html': { - // TODO parse inline content if parameter markdown=1 - return this.renderer.html(this.token.text); - } - case 'paragraph': { - return this.renderer.paragraph(this.inline.output(this.token.text)); - } - case 'text': { - return this.renderer.paragraph(this.parseText()); - } - default: { - var errMsg = 'Token with "' + this.token.type + '" type was not found.'; - if (this.options.silent) { - console.log(errMsg); - } else { - throw new Error(errMsg); - } - } - } -}; + // no need for block level renderers + _proto.strong = function strong(text) { + return text; + }; -/** - * Slugger generates header id - */ + _proto.em = function em(text) { + return text; + }; -function Slugger () { - this.seen = {}; -} + _proto.codespan = function codespan(text) { + return text; + }; -/** - * Convert string to unique id - */ + _proto.del = function del(text) { + return text; + }; -Slugger.prototype.slug = function (value) { - var slug = value - .toLowerCase() - .trim() - .replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '') - .replace(/\s/g, '-'); - - if (this.seen.hasOwnProperty(slug)) { - var originalSlug = slug; - do { - this.seen[originalSlug]++; - slug = originalSlug + '-' + this.seen[originalSlug]; - } while (this.seen.hasOwnProperty(slug)); - } - this.seen[slug] = 0; + _proto.text = function text(_text) { + return _text; + }; - return slug; -}; + _proto.link = function link(href, title, text) { + return '' + text; + }; -/** - * Helpers - */ + _proto.image = function image(href, title, text) { + return '' + text; + }; -function escape(html, encode) { - if (encode) { - if (escape.escapeTest.test(html)) { - return html.replace(escape.escapeReplace, function (ch) { return escape.replacements[ch]; }); - } - } else { - if (escape.escapeTestNoEncode.test(html)) { - return html.replace(escape.escapeReplaceNoEncode, function (ch) { return escape.replacements[ch]; }); - } - } + _proto.br = function br() { + return ''; + }; - return html; -} - -escape.escapeTest = /[&<>"']/; -escape.escapeReplace = /[&<>"']/g; -escape.replacements = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' -}; - -escape.escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/; -escape.escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g; - -function unescape(html) { - // explicitly match decimal, hex, and named HTML entities - return html.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig, function(_, n) { - n = n.toLowerCase(); - if (n === 'colon') return ':'; - if (n.charAt(0) === '#') { - return n.charAt(1) === 'x' - ? String.fromCharCode(parseInt(n.substring(2), 16)) - : String.fromCharCode(+n.substring(1)); + return TextRenderer; + }(); + + var defaults$4 = defaults.defaults; + var merge$2 = helpers.merge, + unescape$1 = helpers.unescape; + /** + * Parsing & Compiling + */ + + var Parser_1 = + /*#__PURE__*/ + function () { + function Parser(options) { + this.tokens = []; + this.token = null; + this.options = options || defaults$4; + this.options.renderer = this.options.renderer || new Renderer_1(); + this.renderer = this.options.renderer; + this.renderer.options = this.options; + this.slugger = new Slugger_1(); } - return ''; - }); -} - -function edit(regex, opt) { - regex = regex.source || regex; - opt = opt || ''; - return { - replace: function(name, val) { - val = val.source || val; - val = val.replace(/(^|[^\[])\^/g, '$1'); - regex = regex.replace(name, val); - return this; - }, - getRegex: function() { - return new RegExp(regex, opt); - } - }; -} + /** + * Static Parse Method + */ -function cleanUrl(sanitize, base, href) { - if (sanitize) { - try { - var prot = decodeURIComponent(unescape(href)) - .replace(/[^\w:]/g, '') - .toLowerCase(); - } catch (e) { - return null; - } - if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) { - return null; - } - } - if (base && !originIndependentUrl.test(href)) { - href = resolveUrl(base, href); - } - try { - href = encodeURI(href).replace(/%25/g, '%'); - } catch (e) { - return null; - } - return href; -} - -function resolveUrl(base, href) { - if (!baseUrls[' ' + base]) { - // we can ignore everything in base after the last slash of its path component, - // but we might need to add _that_ - // https://tools.ietf.org/html/rfc3986#section-3 - if (/^[^:]+:\/*[^/]*$/.test(base)) { - baseUrls[' ' + base] = base + '/'; - } else { - baseUrls[' ' + base] = rtrim(base, '/', true); - } - } - base = baseUrls[' ' + base]; - - if (href.slice(0, 2) === '//') { - return base.replace(/:[\s\S]*/, ':') + href; - } else if (href.charAt(0) === '/') { - return base.replace(/(:\/*[^/]*)[\s\S]*/, '$1') + href; - } else { - return base + href; - } -} -var baseUrls = {}; -var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i; - -function noop() {} -noop.exec = noop; - -function merge(obj) { - var i = 1, - target, - key; - - for (; i < arguments.length; i++) { - target = arguments[i]; - for (key in target) { - if (Object.prototype.hasOwnProperty.call(target, key)) { - obj[key] = target[key]; - } - } - } - return obj; -} - -function splitCells(tableRow, count) { - // ensure that every cell-delimiting pipe has a space - // before it to distinguish it from an escaped pipe - var row = tableRow.replace(/\|/g, function (match, offset, str) { - var escaped = false, - curr = offset; - while (--curr >= 0 && str[curr] === '\\') escaped = !escaped; - if (escaped) { - // odd number of slashes means | is escaped - // so we leave it alone - return '|'; - } else { - // add space before unescaped | - return ' |'; - } - }), - cells = row.split(/ \|/), - i = 0; - - if (cells.length > count) { - cells.splice(count); - } else { - while (cells.length < count) cells.push(''); - } + Parser.parse = function parse(tokens, options) { + var parser = new Parser(options); + return parser.parse(tokens); + }; - for (; i < cells.length; i++) { - // leading or trailing whitespace is ignored per the gfm spec - cells[i] = cells[i].trim().replace(/\\\|/g, '|'); - } - return cells; -} - -// Remove trailing 'c's. Equivalent to str.replace(/c*$/, ''). -// /c*$/ is vulnerable to REDOS. -// invert: Remove suffix of non-c chars instead. Default falsey. -function rtrim(str, c, invert) { - if (str.length === 0) { - return ''; - } + var _proto = Parser.prototype; - // Length of suffix matching the invert condition. - var suffLen = 0; + /** + * Parse Loop + */ + _proto.parse = function parse(tokens) { + this.inline = new InlineLexer_1(tokens.links, this.options); // use an InlineLexer with a TextRenderer to extract pure text - // Step left until we fail to match the invert condition. - while (suffLen < str.length) { - var currChar = str.charAt(str.length - suffLen - 1); - if (currChar === c && !invert) { - suffLen++; - } else if (currChar !== c && invert) { - suffLen++; - } else { - break; - } - } + this.inlineText = new InlineLexer_1(tokens.links, merge$2({}, this.options, { + renderer: new TextRenderer_1() + })); + this.tokens = tokens.reverse(); + var out = ''; + + while (this.next()) { + out += this.tok(); + } - return str.substr(0, str.length - suffLen); -} + return out; + }; -function findClosingBracket(str, b) { - if (str.indexOf(b[1]) === -1) { - return -1; - } - var level = 0; - for (var i = 0; i < str.length; i++) { - if (str[i] === '\\') { - i++; - } else if (str[i] === b[0]) { - level++; - } else if (str[i] === b[1]) { - level--; - if (level < 0) { - return i; + /** + * Next Token + */ + _proto.next = function next() { + this.token = this.tokens.pop(); + return this.token; + }; + + /** + * Preview Next Token + */ + _proto.peek = function peek() { + return this.tokens[this.tokens.length - 1] || 0; + }; + + /** + * Parse Text Tokens + */ + _proto.parseText = function parseText() { + var body = this.token.text; + + while (this.peek().type === 'text') { + body += '\n' + this.next().text; } - } - } - return -1; -} -/** - * Marked - */ + return this.inline.output(body); + }; -function marked(src, opt, callback) { - // throw error in case of non string input - if (typeof src === 'undefined' || src === null) { - throw new Error('marked(): input parameter is undefined or null'); - } - if (typeof src !== 'string') { - throw new Error('marked(): input parameter is of type ' - + Object.prototype.toString.call(src) + ', string expected'); - } + /** + * Parse Current Token + */ + _proto.tok = function tok() { + var body = ''; - if (callback || typeof opt === 'function') { - if (!callback) { - callback = opt; - opt = null; - } + switch (this.token.type) { + case 'space': + { + return ''; + } - opt = merge({}, marked.defaults, opt || {}); + case 'hr': + { + return this.renderer.hr(); + } - var highlight = opt.highlight, - tokens, - pending, - i = 0; + case 'heading': + { + return this.renderer.heading(this.inline.output(this.token.text), this.token.depth, unescape$1(this.inlineText.output(this.token.text)), this.slugger); + } - try { - tokens = Lexer.lex(src, opt); - } catch (e) { - return callback(e); - } + case 'code': + { + return this.renderer.code(this.token.text, this.token.lang, this.token.escaped); + } - pending = tokens.length; + case 'table': + { + var header = '', + i, + row, + cell, + j; // header - var done = function(err) { - if (err) { - opt.highlight = highlight; - return callback(err); - } + cell = ''; - var out; + for (i = 0; i < this.token.header.length; i++) { + cell += this.renderer.tablecell(this.inline.output(this.token.header[i]), { + header: true, + align: this.token.align[i] + }); + } - try { - out = Parser.parse(tokens, opt); - } catch (e) { - err = e; - } + header += this.renderer.tablerow(cell); - opt.highlight = highlight; + for (i = 0; i < this.token.cells.length; i++) { + row = this.token.cells[i]; + cell = ''; + + for (j = 0; j < row.length; j++) { + cell += this.renderer.tablecell(this.inline.output(row[j]), { + header: false, + align: this.token.align[j] + }); + } + + body += this.renderer.tablerow(cell); + } + + return this.renderer.table(header, body); + } - return err - ? callback(err) - : callback(null, out); + case 'blockquote_start': + { + body = ''; + + while (this.next().type !== 'blockquote_end') { + body += this.tok(); + } + + return this.renderer.blockquote(body); + } + + case 'list_start': + { + body = ''; + var ordered = this.token.ordered, + start = this.token.start; + + while (this.next().type !== 'list_end') { + body += this.tok(); + } + + return this.renderer.list(body, ordered, start); + } + + case 'list_item_start': + { + body = ''; + var loose = this.token.loose; + var checked = this.token.checked; + var task = this.token.task; + + if (this.token.task) { + if (loose) { + if (this.peek().type === 'text') { + var nextToken = this.peek(); + nextToken.text = this.renderer.checkbox(checked) + ' ' + nextToken.text; + } else { + this.tokens.push({ + type: 'text', + text: this.renderer.checkbox(checked) + }); + } + } else { + body += this.renderer.checkbox(checked); + } + } + + while (this.next().type !== 'list_item_end') { + body += !loose && this.token.type === 'text' ? this.parseText() : this.tok(); + } + + return this.renderer.listitem(body, task, checked); + } + + case 'html': + { + // TODO parse inline content if parameter markdown=1 + return this.renderer.html(this.token.text); + } + + case 'paragraph': + { + return this.renderer.paragraph(this.inline.output(this.token.text)); + } + + case 'text': + { + return this.renderer.paragraph(this.parseText()); + } + + default: + { + var errMsg = 'Token with "' + this.token.type + '" type was not found.'; + + if (this.options.silent) { + console.log(errMsg); + } else { + throw new Error(errMsg); + } + } + } }; - if (!highlight || highlight.length < 3) { - return done(); + return Parser; + }(); + + var merge$3 = helpers.merge, + checkSanitizeDeprecation$1 = helpers.checkSanitizeDeprecation, + escape$4 = helpers.escape; + var getDefaults = defaults.getDefaults, + changeDefaults = defaults.changeDefaults, + defaults$5 = defaults.defaults; + /** + * Marked + */ + + function marked(src, opt, callback) { + // throw error in case of non string input + if (typeof src === 'undefined' || src === null) { + throw new Error('marked(): input parameter is undefined or null'); } - delete opt.highlight; + if (typeof src !== 'string') { + throw new Error('marked(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected'); + } - if (!pending) return done(); + if (callback || typeof opt === 'function') { + var _ret = function () { + if (!callback) { + callback = opt; + opt = null; + } - for (; i < tokens.length; i++) { - (function(token) { - if (token.type !== 'code') { - return --pending || done(); + opt = merge$3({}, marked.defaults, opt || {}); + checkSanitizeDeprecation$1(opt); + var highlight = opt.highlight; + var tokens, + pending, + i = 0; + + try { + tokens = Lexer_1.lex(src, opt); + } catch (e) { + return { + v: callback(e) + }; } - return highlight(token.text, token.lang, function(err, code) { - if (err) return done(err); - if (code == null || code === token.text) { - return --pending || done(); + + pending = tokens.length; + + var done = function done(err) { + if (err) { + opt.highlight = highlight; + return callback(err); } - token.text = code; - token.escaped = true; - --pending || done(); - }); - })(tokens[i]); - } - return; - } - try { - if (opt) opt = merge({}, marked.defaults, opt); - return Parser.parse(Lexer.lex(src, opt), opt); - } catch (e) { - e.message += '\nPlease report this to https://github.com/markedjs/marked.'; - if ((opt || marked.defaults).silent) { - return '<p>An error occurred:</p><pre>' - + escape(e.message + '', true) - + '</pre>'; - } - throw e; - } -} + var out; -/** - * Options - */ + try { + out = Parser_1.parse(tokens, opt); + } catch (e) { + err = e; + } -marked.options = -marked.setOptions = function(opt) { - merge(marked.defaults, opt); - return marked; -}; - -marked.getDefaults = function () { - return { - baseUrl: null, - breaks: false, - gfm: true, - headerIds: true, - headerPrefix: '', - highlight: null, - langPrefix: 'language-', - mangle: true, - pedantic: false, - renderer: new Renderer(), - sanitize: false, - sanitizer: null, - silent: false, - smartLists: false, - smartypants: false, - tables: true, - xhtml: false - }; -}; + opt.highlight = highlight; + return err ? callback(err) : callback(null, out); + }; -marked.defaults = marked.getDefaults(); + if (!highlight || highlight.length < 3) { + return { + v: done() + }; + } -/** - * Expose - */ + delete opt.highlight; + if (!pending) return { + v: done() + }; -marked.Parser = Parser; -marked.parser = Parser.parse; + for (; i < tokens.length; i++) { + (function (token) { + if (token.type !== 'code') { + return --pending || done(); + } -marked.Renderer = Renderer; -marked.TextRenderer = TextRenderer; + return highlight(token.text, token.lang, function (err, code) { + if (err) return done(err); -marked.Lexer = Lexer; -marked.lexer = Lexer.lex; + if (code == null || code === token.text) { + return --pending || done(); + } -marked.InlineLexer = InlineLexer; -marked.inlineLexer = InlineLexer.output; + token.text = code; + token.escaped = true; + --pending || done(); + }); + })(tokens[i]); + } + + return { + v: void 0 + }; + }(); + + if (typeof _ret === "object") return _ret.v; + } + + try { + opt = merge$3({}, marked.defaults, opt || {}); + checkSanitizeDeprecation$1(opt); + return Parser_1.parse(Lexer_1.lex(src, opt), opt); + } catch (e) { + e.message += '\nPlease report this to https://github.com/markedjs/marked.'; -marked.Slugger = Slugger; + if ((opt || marked.defaults).silent) { + return '<p>An error occurred:</p><pre>' + escape$4(e.message + '', true) + '</pre>'; + } -marked.parse = marked; + throw e; + } + } + /** + * Options + */ + + + marked.options = marked.setOptions = function (opt) { + merge$3(marked.defaults, opt); + changeDefaults(marked.defaults); + return marked; + }; -if (typeof module !== 'undefined' && typeof exports === 'object') { - module.exports = marked; -} else if (typeof define === 'function' && define.amd) { - define(function() { return marked; }); -} else { - root.marked = marked; -} -})(this || (typeof window !== 'undefined' ? window : global)); + marked.getDefaults = getDefaults; + marked.defaults = defaults$5; + /** + * Expose + */ + + marked.Parser = Parser_1; + marked.parser = Parser_1.parse; + marked.Renderer = Renderer_1; + marked.TextRenderer = TextRenderer_1; + marked.Lexer = Lexer_1; + marked.lexer = Lexer_1.lex; + marked.InlineLexer = InlineLexer_1; + marked.inlineLexer = InlineLexer_1.output; + marked.Slugger = Slugger_1; + marked.parse = marked; + var marked_1 = marked; + + return marked_1; + +}))); diff --git a/packages/markdown/marked/man/marked.1 b/packages/markdown/marked/man/marked.1 index 848b4424..5cc27ef8 100644 --- a/packages/markdown/marked/man/marked.1 +++ b/packages/markdown/marked/man/marked.1 @@ -8,7 +8,7 @@ marked \- a javascript markdown parser .B marked [\-o \fI<output>\fP] [\-i \fI<input>\fP] [\-\-help] [\-\-tokens] [\-\-pedantic] [\-\-gfm] -[\-\-breaks] [\-\-tables] [\-\-sanitize] +[\-\-breaks] [\-\-sanitize] [\-\-smart\-lists] [\-\-lang\-prefix \fI<prefix>\fP] [\-\-no\-etc...] [\-\-silent] [\fIfilename\fP] @@ -72,9 +72,6 @@ Enable github flavored markdown. .BI \-\-breaks Enable GFM line breaks. Only works with the gfm option. .TP -.BI \-\-tables -Enable GFM tables. Only works with the gfm option. -.TP .BI \-\-sanitize Sanitize output. Ignore any HTML input. .TP diff --git a/packages/markdown/marked/man/marked.1.txt b/packages/markdown/marked/man/marked.1.txt index ea07ad36..56a8634b 100644 --- a/packages/markdown/marked/man/marked.1.txt +++ b/packages/markdown/marked/man/marked.1.txt @@ -4,10 +4,10 @@ NAME marked - a javascript markdown parser SYNOPSIS - marked [-o <output>] [-i <input>] [--help] [--tokens] - [--pedantic] [--gfm] [--breaks] [--tables] [--sanitize] - [--smart-lists] [--lang-prefix <prefix>] [--no-etc...] [--silent] - [filename] + marked [-o <output>] [-i <input>] [--help] [--tokens] [--pedantic] + [--gfm] [--breaks] [--sanitize] [--smart-lists] [--lang-prefix <pre- + fix>] [--no-etc...] [--silent] [filename] + DESCRIPTION marked is a full-featured javascript markdown parser, built for speed. @@ -56,9 +56,6 @@ OPTIONS --breaks Enable GFM line breaks. Only works with the gfm option. - --tables - Enable GFM tables. Only works with the gfm option. - --sanitize Sanitize output. Ignore any HTML input. diff --git a/packages/markdown/marked/marked.min.js b/packages/markdown/marked/marked.min.js deleted file mode 100644 index 085cfb56..00000000 --- a/packages/markdown/marked/marked.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * marked - a markdown parser - * Copyright (c) 2011-2018, Christopher Jeffrey. (MIT Licensed) - * https://github.com/markedjs/marked - */ -!function(e){"use strict";var k={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:f,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,nptable:f,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|<![A-Z][\\s\\S]*?>\\n*|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,table:f,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,text:/^[^\n]+/};function a(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||b.defaults,this.rules=k.normal,this.options.pedantic?this.rules=k.pedantic:this.options.gfm&&(this.options.tables?this.rules=k.tables:this.rules=k.gfm)}k._label=/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,k._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/,k.def=i(k.def).replace("label",k._label).replace("title",k._title).getRegex(),k.bullet=/(?:[*+-]|\d{1,9}\.)/,k.item=/^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/,k.item=i(k.item,"gm").replace(/bull/g,k.bullet).getRegex(),k.list=i(k.list).replace(/bull/g,k.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+k.def.source+")").getRegex(),k._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",k._comment=/<!--(?!-?>)[\s\S]*?-->/,k.html=i(k.html,"i").replace("comment",k._comment).replace("tag",k._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),k.paragraph=i(k.paragraph).replace("hr",k.hr).replace("heading",k.heading).replace("lheading",k.lheading).replace("tag",k._tag).getRegex(),k.blockquote=i(k.blockquote).replace("paragraph",k.paragraph).getRegex(),k.normal=d({},k),k.gfm=d({},k.normal,{fences:/^ {0,3}(`{3,}|~{3,})([^`\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),k.gfm.paragraph=i(k.paragraph).replace("(?!","(?!"+k.gfm.fences.source.replace("\\1","\\2")+"|"+k.list.source.replace("\\1","\\3")+"|").getRegex(),k.tables=d({},k.gfm,{nptable:/^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,table:/^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/}),k.pedantic=d({},k.normal,{html:i("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",k._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/}),a.rules=k,a.lex=function(e,t){return new a(t).lex(e)},a.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},a.prototype.token=function(e,t){var n,r,s,i,l,o,a,h,p,u,c,g,f,d,m,b;for(e=e.replace(/^ +$/gm,"");e;)if((s=this.rules.newline.exec(e))&&(e=e.substring(s[0].length),1<s[0].length&&this.tokens.push({type:"space"})),s=this.rules.code.exec(e))e=e.substring(s[0].length),s=s[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?s:y(s,"\n")});else if(s=this.rules.fences.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"code",lang:s[2]?s[2].trim():s[2],text:s[3]||""});else if(s=this.rules.heading.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"heading",depth:s[1].length,text:s[2]});else if((s=this.rules.nptable.exec(e))&&(o={type:"table",header:x(s[1].replace(/^ *| *\| *$/g,"")),align:s[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:s[3]?s[3].replace(/\n$/,"").split("\n"):[]}).header.length===o.align.length){for(e=e.substring(s[0].length),c=0;c<o.align.length;c++)/^ *-+: *$/.test(o.align[c])?o.align[c]="right":/^ *:-+: *$/.test(o.align[c])?o.align[c]="center":/^ *:-+ *$/.test(o.align[c])?o.align[c]="left":o.align[c]=null;for(c=0;c<o.cells.length;c++)o.cells[c]=x(o.cells[c],o.header.length);this.tokens.push(o)}else if(s=this.rules.hr.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"hr"});else if(s=this.rules.blockquote.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"blockquote_start"}),s=s[0].replace(/^ *> ?/gm,""),this.token(s,t),this.tokens.push({type:"blockquote_end"});else if(s=this.rules.list.exec(e)){for(e=e.substring(s[0].length),a={type:"list_start",ordered:d=1<(i=s[2]).length,start:d?+i:"",loose:!1},this.tokens.push(a),n=!(h=[]),f=(s=s[0].match(this.rules.item)).length,c=0;c<f;c++)u=(o=s[c]).length,~(o=o.replace(/^ *([*+-]|\d+\.) */,"")).indexOf("\n ")&&(u-=o.length,o=this.options.pedantic?o.replace(/^ {1,4}/gm,""):o.replace(new RegExp("^ {1,"+u+"}","gm"),"")),c!==f-1&&(l=k.bullet.exec(s[c+1])[0],(1<i.length?1===l.length:1<l.length||this.options.smartLists&&l!==i)&&(e=s.slice(c+1).join("\n")+e,c=f-1)),r=n||/\n\n(?!\s*$)/.test(o),c!==f-1&&(n="\n"===o.charAt(o.length-1),r||(r=n)),r&&(a.loose=!0),b=void 0,(m=/^\[[ xX]\] /.test(o))&&(b=" "!==o[1],o=o.replace(/^\[[ xX]\] +/,"")),p={type:"list_item_start",task:m,checked:b,loose:r},h.push(p),this.tokens.push(p),this.token(o,!1),this.tokens.push({type:"list_item_end"});if(a.loose)for(f=h.length,c=0;c<f;c++)h[c].loose=!0;this.tokens.push({type:"list_end"})}else if(s=this.rules.html.exec(e))e=e.substring(s[0].length),this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&("pre"===s[1]||"script"===s[1]||"style"===s[1]),text:s[0]});else if(t&&(s=this.rules.def.exec(e)))e=e.substring(s[0].length),s[3]&&(s[3]=s[3].substring(1,s[3].length-1)),g=s[1].toLowerCase().replace(/\s+/g," "),this.tokens.links[g]||(this.tokens.links[g]={href:s[2],title:s[3]});else if((s=this.rules.table.exec(e))&&(o={type:"table",header:x(s[1].replace(/^ *| *\| *$/g,"")),align:s[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:s[3]?s[3].replace(/\n$/,"").split("\n"):[]}).header.length===o.align.length){for(e=e.substring(s[0].length),c=0;c<o.align.length;c++)/^ *-+: *$/.test(o.align[c])?o.align[c]="right":/^ *:-+: *$/.test(o.align[c])?o.align[c]="center":/^ *:-+ *$/.test(o.align[c])?o.align[c]="left":o.align[c]=null;for(c=0;c<o.cells.length;c++)o.cells[c]=x(o.cells[c].replace(/^ *\| *| *\| *$/g,""),o.header.length);this.tokens.push(o)}else if(s=this.rules.lheading.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"heading",depth:"="===s[2]?1:2,text:s[1]});else if(t&&(s=this.rules.paragraph.exec(e)))e=e.substring(s[0].length),this.tokens.push({type:"paragraph",text:"\n"===s[1].charAt(s[1].length-1)?s[1].slice(0,-1):s[1]});else if(s=this.rules.text.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"text",text:s[0]});else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0));return this.tokens};var n={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:f,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,strong:/^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,em:/^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:f,text:/^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*]|\b_|$)|[^ ](?= {2,}\n))|(?= {2,}\n))/};function p(e,t){if(this.options=t||b.defaults,this.links=e,this.rules=n.normal,this.renderer=this.options.renderer||new r,this.renderer.options=this.options,!this.links)throw new Error("Tokens array requires a `links` property.");this.options.pedantic?this.rules=n.pedantic:this.options.gfm&&(this.options.breaks?this.rules=n.breaks:this.rules=n.gfm)}function r(e){this.options=e||b.defaults}function s(){}function h(e){this.tokens=[],this.token=null,this.options=e||b.defaults,this.options.renderer=this.options.renderer||new r,this.renderer=this.options.renderer,this.renderer.options=this.options,this.slugger=new t}function t(){this.seen={}}function u(e,t){if(t){if(u.escapeTest.test(e))return e.replace(u.escapeReplace,function(e){return u.replacements[e]})}else if(u.escapeTestNoEncode.test(e))return e.replace(u.escapeReplaceNoEncode,function(e){return u.replacements[e]});return e}function c(e){return e.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi,function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}function i(n,e){return n=n.source||n,e=e||"",{replace:function(e,t){return t=(t=t.source||t).replace(/(^|[^\[])\^/g,"$1"),n=n.replace(e,t),this},getRegex:function(){return new RegExp(n,e)}}}function l(e,t,n){if(e){try{var r=decodeURIComponent(c(n)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return null}if(0===r.indexOf("javascript:")||0===r.indexOf("vbscript:")||0===r.indexOf("data:"))return null}t&&!g.test(n)&&(n=function(e,t){o[" "+e]||(/^[^:]+:\/*[^/]*$/.test(e)?o[" "+e]=e+"/":o[" "+e]=y(e,"/",!0));return e=o[" "+e],"//"===t.slice(0,2)?e.replace(/:[\s\S]*/,":")+t:"/"===t.charAt(0)?e.replace(/(:\/*[^/]*)[\s\S]*/,"$1")+t:e+t}(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n}n._punctuation="!\"#$%&'()*+,\\-./:;<=>?@\\[^_{|}~",n.em=i(n.em).replace(/punctuation/g,n._punctuation).getRegex(),n._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,n._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,n._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,n.autolink=i(n.autolink).replace("scheme",n._scheme).replace("email",n._email).getRegex(),n._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,n.tag=i(n.tag).replace("comment",k._comment).replace("attribute",n._attribute).getRegex(),n._label=/(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|`(?!`)|[^\[\]\\`])*?/,n._href=/\s*(<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*)/,n._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,n.link=i(n.link).replace("label",n._label).replace("href",n._href).replace("title",n._title).getRegex(),n.reflink=i(n.reflink).replace("label",n._label).getRegex(),n.normal=d({},n),n.pedantic=d({},n.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,link:i(/^!?\[(label)\]\((.*?)\)/).replace("label",n._label).getRegex(),reflink:i(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",n._label).getRegex()}),n.gfm=d({},n.normal,{escape:i(n.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~+(?=\S)([\s\S]*?\S)~+/,text:/^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*~]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?= {2,}\n|[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/}),n.gfm.url=i(n.gfm.url,"i").replace("email",n.gfm._extended_email).getRegex(),n.breaks=d({},n.gfm,{br:i(n.br).replace("{2,}","*").getRegex(),text:i(n.gfm.text).replace(/\{2,\}/g,"*").getRegex()}),p.rules=n,p.output=function(e,t,n){return new p(t,n).output(e)},p.prototype.output=function(e){for(var t,n,r,s,i,l,o="";e;)if(i=this.rules.escape.exec(e))e=e.substring(i[0].length),o+=u(i[1]);else if(i=this.rules.tag.exec(e))!this.inLink&&/^<a /i.test(i[0])?this.inLink=!0:this.inLink&&/^<\/a>/i.test(i[0])&&(this.inLink=!1),!this.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(i[0])?this.inRawBlock=!0:this.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(i[0])&&(this.inRawBlock=!1),e=e.substring(i[0].length),o+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(i[0]):u(i[0]):i[0];else if(i=this.rules.link.exec(e)){var a=m(i[2],"()");if(-1<a){var h=i[0].length-(i[2].length-a)-(i[3]||"").length;i[2]=i[2].substring(0,a),i[0]=i[0].substring(0,h).trim(),i[3]=""}e=e.substring(i[0].length),this.inLink=!0,r=i[2],s=this.options.pedantic?(t=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(r))?(r=t[1],t[3]):"":i[3]?i[3].slice(1,-1):"",r=r.trim().replace(/^<([\s\S]*)>$/,"$1"),o+=this.outputLink(i,{href:p.escapes(r),title:p.escapes(s)}),this.inLink=!1}else if((i=this.rules.reflink.exec(e))||(i=this.rules.nolink.exec(e))){if(e=e.substring(i[0].length),t=(i[2]||i[1]).replace(/\s+/g," "),!(t=this.links[t.toLowerCase()])||!t.href){o+=i[0].charAt(0),e=i[0].substring(1)+e;continue}this.inLink=!0,o+=this.outputLink(i,t),this.inLink=!1}else if(i=this.rules.strong.exec(e))e=e.substring(i[0].length),o+=this.renderer.strong(this.output(i[4]||i[3]||i[2]||i[1]));else if(i=this.rules.em.exec(e))e=e.substring(i[0].length),o+=this.renderer.em(this.output(i[6]||i[5]||i[4]||i[3]||i[2]||i[1]));else if(i=this.rules.code.exec(e))e=e.substring(i[0].length),o+=this.renderer.codespan(u(i[2].trim(),!0));else if(i=this.rules.br.exec(e))e=e.substring(i[0].length),o+=this.renderer.br();else if(i=this.rules.del.exec(e))e=e.substring(i[0].length),o+=this.renderer.del(this.output(i[1]));else if(i=this.rules.autolink.exec(e))e=e.substring(i[0].length),r="@"===i[2]?"mailto:"+(n=u(this.mangle(i[1]))):n=u(i[1]),o+=this.renderer.link(r,null,n);else if(this.inLink||!(i=this.rules.url.exec(e))){if(i=this.rules.text.exec(e))e=e.substring(i[0].length),this.inRawBlock?o+=this.renderer.text(i[0]):o+=this.renderer.text(u(this.smartypants(i[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else{if("@"===i[2])r="mailto:"+(n=u(i[0]));else{for(;l=i[0],i[0]=this.rules._backpedal.exec(i[0])[0],l!==i[0];);n=u(i[0]),r="www."===i[1]?"http://"+n:n}e=e.substring(i[0].length),o+=this.renderer.link(r,null,n)}return o},p.escapes=function(e){return e?e.replace(p.rules._escapes,"$1"):e},p.prototype.outputLink=function(e,t){var n=t.href,r=t.title?u(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,r,this.output(e[1])):this.renderer.image(n,r,u(e[1]))},p.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},p.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",r=e.length,s=0;s<r;s++)t=e.charCodeAt(s),.5<Math.random()&&(t="x"+t.toString(16)),n+="&#"+t+";";return n},r.prototype.code=function(e,t,n){var r=(t||"").match(/\S*/)[0];if(this.options.highlight){var s=this.options.highlight(e,r);null!=s&&s!==e&&(n=!0,e=s)}return r?'<pre><code class="'+this.options.langPrefix+u(r,!0)+'">'+(n?e:u(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:u(e,!0))+"</code></pre>"},r.prototype.blockquote=function(e){return"<blockquote>\n"+e+"</blockquote>\n"},r.prototype.html=function(e){return e},r.prototype.heading=function(e,t,n,r){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+r.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"},r.prototype.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"},r.prototype.list=function(e,t,n){var r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"</"+r+">\n"},r.prototype.listitem=function(e){return"<li>"+e+"</li>\n"},r.prototype.checkbox=function(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "},r.prototype.paragraph=function(e){return"<p>"+e+"</p>\n"},r.prototype.table=function(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"},r.prototype.tablerow=function(e){return"<tr>\n"+e+"</tr>\n"},r.prototype.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"</"+n+">\n"},r.prototype.strong=function(e){return"<strong>"+e+"</strong>"},r.prototype.em=function(e){return"<em>"+e+"</em>"},r.prototype.codespan=function(e){return"<code>"+e+"</code>"},r.prototype.br=function(){return this.options.xhtml?"<br/>":"<br>"},r.prototype.del=function(e){return"<del>"+e+"</del>"},r.prototype.link=function(e,t,n){if(null===(e=l(this.options.sanitize,this.options.baseUrl,e)))return n;var r='<a href="'+u(e)+'"';return t&&(r+=' title="'+t+'"'),r+=">"+n+"</a>"},r.prototype.image=function(e,t,n){if(null===(e=l(this.options.sanitize,this.options.baseUrl,e)))return n;var r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">"},r.prototype.text=function(e){return e},s.prototype.strong=s.prototype.em=s.prototype.codespan=s.prototype.del=s.prototype.text=function(e){return e},s.prototype.link=s.prototype.image=function(e,t,n){return""+n},s.prototype.br=function(){return""},h.parse=function(e,t){return new h(t).parse(e)},h.prototype.parse=function(e){this.inline=new p(e.links,this.options),this.inlineText=new p(e.links,d({},this.options,{renderer:new s})),this.tokens=e.reverse();for(var t="";this.next();)t+=this.tok();return t},h.prototype.next=function(){return this.token=this.tokens.pop()},h.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},h.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},h.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,c(this.inlineText.output(this.token.text)),this.slugger);case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,r,s="",i="";for(n="",e=0;e<this.token.header.length;e++)n+=this.renderer.tablecell(this.inline.output(this.token.header[e]),{header:!0,align:this.token.align[e]});for(s+=this.renderer.tablerow(n),e=0;e<this.token.cells.length;e++){for(t=this.token.cells[e],n="",r=0;r<t.length;r++)n+=this.renderer.tablecell(this.inline.output(t[r]),{header:!1,align:this.token.align[r]});i+=this.renderer.tablerow(n)}return this.renderer.table(s,i);case"blockquote_start":for(i="";"blockquote_end"!==this.next().type;)i+=this.tok();return this.renderer.blockquote(i);case"list_start":i="";for(var l=this.token.ordered,o=this.token.start;"list_end"!==this.next().type;)i+=this.tok();return this.renderer.list(i,l,o);case"list_item_start":i="";var a=this.token.loose,h=this.token.checked,p=this.token.task;for(this.token.task&&(i+=this.renderer.checkbox(h));"list_item_end"!==this.next().type;)i+=a||"text"!==this.token.type?this.tok():this.parseText();return this.renderer.listitem(i,p,h);case"html":return this.renderer.html(this.token.text);case"paragraph":return this.renderer.paragraph(this.inline.output(this.token.text));case"text":return this.renderer.paragraph(this.parseText());default:var u='Token with "'+this.token.type+'" type was not found.';if(!this.options.silent)throw new Error(u);console.log(u)}},t.prototype.slug=function(e){var t=e.toLowerCase().trim().replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-");if(this.seen.hasOwnProperty(t))for(var n=t;this.seen[n]++,t=n+"-"+this.seen[n],this.seen.hasOwnProperty(t););return this.seen[t]=0,t},u.escapeTest=/[&<>"']/,u.escapeReplace=/[&<>"']/g,u.replacements={"&":"&","<":"<",">":">",'"':""","'":"'"},u.escapeTestNoEncode=/[<>"']|&(?!#?\w+;)/,u.escapeReplaceNoEncode=/[<>"']|&(?!#?\w+;)/g;var o={},g=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function f(){}function d(e){for(var t,n,r=1;r<arguments.length;r++)for(n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}function x(e,t){var n=e.replace(/\|/g,function(e,t,n){for(var r=!1,s=t;0<=--s&&"\\"===n[s];)r=!r;return r?"|":" |"}).split(/ \|/),r=0;if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(/\\\|/g,"|");return n}function y(e,t,n){if(0===e.length)return"";for(var r=0;r<e.length;){var s=e.charAt(e.length-r-1);if(s!==t||n){if(s===t||!n)break;r++}else r++}return e.substr(0,e.length-r)}function m(e,t){if(-1===e.indexOf(t[1]))return-1;for(var n=0,r=0;r<e.length;r++)if("\\"===e[r])r++;else if(e[r]===t[0])n++;else if(e[r]===t[1]&&--n<0)return r;return-1}function b(e,n,r){if(null==e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if(r||"function"==typeof n){r||(r=n,n=null);var s,i,l=(n=d({},b.defaults,n||{})).highlight,t=0;try{s=a.lex(e,n)}catch(e){return r(e)}i=s.length;var o=function(t){if(t)return n.highlight=l,r(t);var e;try{e=h.parse(s,n)}catch(e){t=e}return n.highlight=l,t?r(t):r(null,e)};if(!l||l.length<3)return o();if(delete n.highlight,!i)return o();for(;t<s.length;t++)!function(n){"code"!==n.type?--i||o():l(n.text,n.lang,function(e,t){return e?o(e):null==t||t===n.text?--i||o():(n.text=t,n.escaped=!0,void(--i||o()))})}(s[t])}else try{return n&&(n=d({},b.defaults,n)),h.parse(a.lex(e,n),n)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",(n||b.defaults).silent)return"<p>An error occurred:</p><pre>"+u(e.message+"",!0)+"</pre>";throw e}}f.exec=f,b.options=b.setOptions=function(e){return d(b.defaults,e),b},b.getDefaults=function(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:new r,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tables:!0,xhtml:!1}},b.defaults=b.getDefaults(),b.Parser=h,b.parser=h.parse,b.Renderer=r,b.TextRenderer=s,b.Lexer=a,b.lexer=a.lex,b.InlineLexer=p,b.inlineLexer=p.output,b.Slugger=t,b.parse=b,"undefined"!=typeof module&&"object"==typeof exports?module.exports=b:"function"==typeof define&&define.amd?define(function(){return b}):e.marked=b}(this||("undefined"!=typeof window?window:global));
\ No newline at end of file diff --git a/packages/markdown/marked/package-lock.json b/packages/markdown/marked/package-lock.json new file mode 100644 index 00000000..8218e812 --- /dev/null +++ b/packages/markdown/marked/package-lock.json @@ -0,0 +1,3626 @@ +{ + "name": "marked", + "version": "0.8.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/compat-data": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.6.tgz", + "integrity": "sha512-CurCIKPTkS25Mb8mz267vU95vy+TyUpnctEX2lV33xWNmHAfjruztgiPBbXZRh3xZZy1CYvGx6XfxyTVS+sk7Q==", + "dev": true, + "requires": { + "browserslist": "^4.8.5", + "invariant": "^2.2.4", + "semver": "^5.5.0" + } + }, + "@babel/core": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.7.tgz", + "integrity": "sha512-rBlqF3Yko9cynC5CCFy6+K/w2N+Sq/ff2BPy+Krp7rHlABIr5epbA7OxVeKoMHB39LZOp1UY5SuLjy6uWi35yA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.7", + "@babel/helpers": "^7.8.4", + "@babel/parser": "^7.8.7", + "@babel/template": "^7.8.6", + "@babel/traverse": "^7.8.6", + "@babel/types": "^7.8.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/generator": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.8.tgz", + "integrity": "sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.7", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz", + "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz", + "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-call-delegate": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.7.tgz", + "integrity": "sha512-doAA5LAKhsFCR0LAFIf+r2RSMmC+m8f/oQ+URnUET/rWeEzC0yTRmAGyWkD4sSu3xwbS7MYQ2u+xlt1V5R56KQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.7" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.7.tgz", + "integrity": "sha512-4mWm8DCK2LugIS+p1yArqvG1Pf162upsIsjE7cNBjez+NjliQpVhj20obE520nao0o14DaTnFJv+Fw5a0JpoUw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.8.6", + "browserslist": "^4.9.1", + "invariant": "^2.2.4", + "levenary": "^1.1.1", + "semver": "^5.5.0" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz", + "integrity": "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-regex": "^7.8.3", + "regexpu-core": "^4.7.0" + } + }, + "@babel/helper-define-map": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz", + "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/types": "^7.8.3", + "lodash": "^4.17.13" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz", + "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@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==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz", + "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-module-transforms": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.6.tgz", + "integrity": "sha512-RDnGJSR5EFBJjG3deY0NiL0K9TO8SXxS9n/MPsbPK/s9LbQymuLNtlzvDiNS7IpecuL45cMeLVkA+HfmlrnkRg==", + "dev": true, + "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.8.6", + "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==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", + "dev": true + }, + "@babel/helper-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz", + "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==", + "dev": true, + "requires": { + "lodash": "^4.17.13" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz", + "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-wrap-function": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-wrap-function": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", + "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helpers": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz", + "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==", + "dev": true, + "requires": { + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.4", + "@babel/types": "^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/parser": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", + "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==", + "dev": true + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz", + "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3", + "@babel/plugin-syntax-async-generators": "^7.8.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz", + "integrity": "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz", + "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz", + "integrity": "sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz", + "integrity": "sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.8", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz", + "integrity": "sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz", + "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz", + "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz", + "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz", + "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "lodash": "^4.17.13" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.6.tgz", + "integrity": "sha512-k9r8qRay/R6v5aWZkrEclEhKO6mc1CCQr2dLsVHBmOQiMpN6I2bpjX3vgnldUWeEI1GHVNByULVxZ4BdP4Hmdg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-define-map": "^7.8.3", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-split-export-declaration": "^7.8.3", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz", + "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.8.tgz", + "integrity": "sha512-eRJu4Vs2rmttFCdhPUM3bV0Yo/xPSdPw6ML9KHs/bjB4bLA5HXlbvYXPOD5yASodGod+krjYx21xm1QmL8dCJQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz", + "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz", + "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz", + "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.6.tgz", + "integrity": "sha512-M0pw4/1/KI5WAxPsdcUL/w2LJ7o89YHN3yLkzNjg7Yl15GlVGgzHyCU+FMeAxevHGsLVmUqbirlUIKTafPmzdw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz", + "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz", + "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz", + "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz", + "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz", + "integrity": "sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-simple-access": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz", + "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.8.3", + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz", + "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", + "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz", + "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz", + "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.8.tgz", + "integrity": "sha512-hC4Ld/Ulpf1psQciWWwdnUspQoQco2bMzSrwU6TmzRlvoYQe4rQFy9vnCZDTlVeCQj0JPfL+1RX0V8hCJvkgBA==", + "dev": true, + "requires": { + "@babel/helper-call-delegate": "^7.8.7", + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz", + "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz", + "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz", + "integrity": "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz", + "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz", + "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz", + "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-regex": "^7.8.3" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz", + "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz", + "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz", + "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/preset-env": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.7.tgz", + "integrity": "sha512-BYftCVOdAYJk5ASsznKAUl53EMhfBbr8CJ1X+AJLfGPscQkwJFiaV/Wn9DPH/7fzm2v6iRYJKYHSqyynTGw0nw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.8.6", + "@babel/helper-compilation-targets": "^7.8.7", + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-proposal-async-generator-functions": "^7.8.3", + "@babel/plugin-proposal-dynamic-import": "^7.8.3", + "@babel/plugin-proposal-json-strings": "^7.8.3", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.8.3", + "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", + "@babel/plugin-proposal-optional-chaining": "^7.8.3", + "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.8.3", + "@babel/plugin-transform-async-to-generator": "^7.8.3", + "@babel/plugin-transform-block-scoped-functions": "^7.8.3", + "@babel/plugin-transform-block-scoping": "^7.8.3", + "@babel/plugin-transform-classes": "^7.8.6", + "@babel/plugin-transform-computed-properties": "^7.8.3", + "@babel/plugin-transform-destructuring": "^7.8.3", + "@babel/plugin-transform-dotall-regex": "^7.8.3", + "@babel/plugin-transform-duplicate-keys": "^7.8.3", + "@babel/plugin-transform-exponentiation-operator": "^7.8.3", + "@babel/plugin-transform-for-of": "^7.8.6", + "@babel/plugin-transform-function-name": "^7.8.3", + "@babel/plugin-transform-literals": "^7.8.3", + "@babel/plugin-transform-member-expression-literals": "^7.8.3", + "@babel/plugin-transform-modules-amd": "^7.8.3", + "@babel/plugin-transform-modules-commonjs": "^7.8.3", + "@babel/plugin-transform-modules-systemjs": "^7.8.3", + "@babel/plugin-transform-modules-umd": "^7.8.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", + "@babel/plugin-transform-new-target": "^7.8.3", + "@babel/plugin-transform-object-super": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.8.7", + "@babel/plugin-transform-property-literals": "^7.8.3", + "@babel/plugin-transform-regenerator": "^7.8.7", + "@babel/plugin-transform-reserved-words": "^7.8.3", + "@babel/plugin-transform-shorthand-properties": "^7.8.3", + "@babel/plugin-transform-spread": "^7.8.3", + "@babel/plugin-transform-sticky-regex": "^7.8.3", + "@babel/plugin-transform-template-literals": "^7.8.3", + "@babel/plugin-transform-typeof-symbol": "^7.8.4", + "@babel/plugin-transform-unicode-regex": "^7.8.3", + "@babel/types": "^7.8.7", + "browserslist": "^4.8.5", + "core-js-compat": "^3.6.2", + "invariant": "^2.2.2", + "levenary": "^1.1.1", + "semver": "^5.5.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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/traverse": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz", + "integrity": "sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.6", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@markedjs/html-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@markedjs/html-differ/-/html-differ-3.0.0.tgz", + "integrity": "sha512-ubvgDumynqq6PnWyEPeBqLmEcrXR5w48AlQK8uj2M9IY04GNZhQGBL7sX2UI2IW8EKX5nRimFvv2iEKyPTSc4g==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "coa": "^2.0.2", + "diff": "^4.0.1", + "parse5-sax-parser": "^5.1.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/concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-OU2+C7X+5Gs42JZzXoto7yOQ0A0=", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha1-yayFsqX9GENbjIXZ7LUObWyJP/g=", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "10.17.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.17.tgz", + "integrity": "sha512-gpNnRnZP3VWzzj5k3qrpRC6Rk3H/uclhAVo1aIvwzK5p5cOrs9yEyQ8H/HBsBY0u5rrWxXEiVPQ0dEB6pkjE8Q==", + "dev": true + }, + "@types/q": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", + "dev": true + }, + "@types/qs": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.1.tgz", + "integrity": "sha512-lhbQXx9HKZAPgBkISrBcmAcMpZsmpe/Cd/hY7LGZS5OfkySUBItnPZHgQPssWYUET8elF+yCFBbP1Q0RZPTdaw==", + "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==", + "dev": true + }, + "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==", + "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": "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": "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": "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" + } + }, + "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-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "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" + } + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "browserslist": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.9.1.tgz", + "integrity": "sha512-Q0DnKq20End3raFulq6Vfp1ecB9fh8yUNV55s8sekaDDeqBaCtWlRHCUdaWyUeSSBJM7IbM6HcsyaeYqgeDhnw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001030", + "electron-to-chromium": "^1.3.363", + "node-releases": "^1.1.50" + } + }, + "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==", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001035", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001035.tgz", + "integrity": "sha512-C1ZxgkuA4/bUEdMbU5WrGY4+UhMFFiXrgNAfxiMIqWgFTWfv/xsZCS2xEHT2LMq7xAZfuAnu6mcqyDl0ZR6wLQ==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "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 + }, + "cheerio": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", + "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", + "dev": true, + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash.assignin": "^4.0.9", + "lodash.bind": "^4.1.4", + "lodash.defaults": "^4.0.1", + "lodash.filter": "^4.4.0", + "lodash.flatten": "^4.2.0", + "lodash.foreach": "^4.3.0", + "lodash.map": "^4.4.0", + "lodash.merge": "^4.4.0", + "lodash.pick": "^4.2.1", + "lodash.reduce": "^4.4.0", + "lodash.reject": "^4.4.0", + "lodash.some": "^4.4.0" + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "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 + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "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==", + "dev": true + }, + "commenting": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/commenting/-/commenting-1.1.0.tgz", + "integrity": "sha512-YeNK4tavZwtH7jEgK1ZINXzLKm6DZdEMfsaaieOsCAN0S8vsY7UeuO3Q7d/M018EFgE+IeUAuBOKkFccBZsUZA==", + "dev": true + }, + "commonmark": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/commonmark/-/commonmark-0.29.1.tgz", + "integrity": "sha512-DafPdNYFXoEhsSiR4O+dJ45UJBfDL4cBTks4B+agKiaWt7qjG0bIhg5xuCE0RqU71ikJcBIf4/sRHh9vYQVF8Q==", + "dev": true, + "requires": { + "entities": "~1.1.1", + "mdurl": "~1.0.1", + "minimist": "~1.2.0", + "string.prototype.repeat": "^0.2.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "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" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": 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" + } + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "core-js-compat": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.4.tgz", + "integrity": "sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA==", + "dev": true, + "requires": { + "browserslist": "^4.8.3", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "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=", + "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" + } + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "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" + } + }, + "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" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "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" + } + }, + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "electron-to-chromium": { + "version": "1.3.376", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.376.tgz", + "integrity": "sha512-cv/PYVz5szeMz192ngilmezyPNFkUjuynuL2vNdiqIrio440nfTDdc0JJU0TS2KHLSVCs9gBbt4CFqM+HcBnjw==", + "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 + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.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" + } + }, + "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": { + "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" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "eslint-config-standard": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-14.1.0.tgz", + "integrity": "sha512-EF6XkrrGVbvv8hL/kYa/m6vnvmUT+K82pJJc4JJVMM6+Qgqh0pnwprSxdduDLB9p/7bIxD+YV5O0wfb8lmcPbA==", + "dev": true + }, + "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-es": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.0.tgz", + "integrity": "sha512-6/Jb/J/ZvSebydwbBJO1R9E5ky7YeElfK56Veh7e4QGFHCXoIXGH9HhVz+ibJLM3XJ1XjP+T7rKBLUa/Y7eIng==", + "dev": true, + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", + "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "regexpp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.0.0.tgz", + "integrity": "sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g==", + "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-node": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.0.0.tgz", + "integrity": "sha512-chUs/NVID+sknFiJzxoN9lM7uKSOEta8GC8365hw1nDfwIPIjjpRSwwPvQanWv8dt/pDe9EV4anmVSwdiSndNg==", + "dev": true, + "requires": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", + "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "ignore": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", + "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", + "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 + } + } + }, + "eslint-plugin-promise": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz", + "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==", + "dev": true + }, + "eslint-plugin-standard": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz", + "integrity": "sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ==", + "dev": true + }, + "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 + }, + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "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 + }, + "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" + } + }, + "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 + }, + "fast-json-stable-stringify": { + "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==", + "dev": true + }, + "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" + } + }, + "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 + }, + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "front-matter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-3.1.0.tgz", + "integrity": "sha512-RFEK8N6waWTdwBZOPNEtvwMjZ/hUfpwXkYUYkmmOhQGdhSulXhWrFwiUhdhkduLDiIwbROl/faF1X/PC/GGRMw==", + "dev": true, + "requires": { + "js-yaml": "^3.13.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", + "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "dev": true, + "optional": true + }, + "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 + }, + "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==", + "dev": true + }, + "get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "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": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "dev": true + }, + "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-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 + }, + "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 + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "dev": true, + "requires": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + } + }, + "http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "dev": true, + "requires": { + "@types/node": "^10.0.3" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "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 + }, + "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" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "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==", + "dev": true + }, + "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-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 + }, + "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": "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 + }, + "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-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-reference": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.4.tgz", + "integrity": "sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw==", + "dev": true, + "requires": { + "@types/estree": "0.0.39" + } + }, + "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-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=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "jasmine": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.5.0.tgz", + "integrity": "sha512-DYypSryORqzsGoMazemIHUfMkXM7I7easFaxAvNM3Mr6Xz3Fy36TupTrAOxZWN8MVKEU5xECv22J4tUQf3uBzQ==", + "dev": true, + "requires": { + "glob": "^7.1.4", + "jasmine-core": "~3.5.0" + } + }, + "jasmine-core": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.5.0.tgz", + "integrity": "sha512-nCeAiw37MIMA9w9IXso7bRaLl+c/ef3wnxsoSAlYrzS+Ot0zTG6nU8G/cIfGkqpkjX2wNaIW9RFG0TwIFnG6bA==", + "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" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "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 + }, + "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 + }, + "json5": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", + "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levenary": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", + "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", + "dev": true, + "requires": { + "leven": "^3.1.0" + } + }, + "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" + } + }, + "linkify-it": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "dev": true, + "requires": { + "uc.micro": "^1.0.1" + } + }, + "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.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=", + "dev": true + }, + "lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=", + "dev": true + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=", + "dev": true + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, + "lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=", + "dev": true + }, + "lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", + "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.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", + "dev": true + }, + "lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=", + "dev": true + }, + "lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=", + "dev": true + }, + "lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", + "dev": true + }, + "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" + } + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "markdown": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/markdown/-/markdown-0.5.0.tgz", + "integrity": "sha1-KCBbVlqK51kt4gdGPWY33BgnIrI=", + "dev": true, + "requires": { + "nopt": "~2.1.1" + } + }, + "markdown-it": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", + "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "entities": "~2.0.0", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", + "dev": true + } + } + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "dev": true + }, + "mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "dev": true, + "requires": { + "mime-db": "1.43.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "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=", + "dev": true + } + } + }, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": 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 + }, + "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-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", + "dev": true + }, + "node-releases": { + "version": "1.1.52", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.52.tgz", + "integrity": "sha512-snSiT1UypkgGt2wxPqS6ImEUICbNCMb31yaxWrOLXjhlt2z2/IBpaOxzONExqSm4y5oLnAqjjRWu+wsDzK5yNQ==", + "dev": true, + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "nopt": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.1.2.tgz", + "integrity": "sha1-bMzZd7gBMqB3MdbozljCyDA8+a8=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "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" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "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=", + "dev": true, + "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-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "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-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 + }, + "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-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=", + "dev": true + }, + "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" + } + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "parse5-sax-parser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-5.1.1.tgz", + "integrity": "sha512-9HIh6zd7bF1NJe95LPCUC311CekdOi55R+HWXNCsGY6053DWaMijVKOv1oPvdvPTvFicifZyimBVJ6/qvG039Q==", + "dev": true, + "requires": { + "parse5": "^5.1.1" + } + }, + "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=", + "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-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "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 + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "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==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "dev": true, + "requires": { + "asap": "~2.0.6" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "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==", + "dev": true + }, + "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": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "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 + }, + "regenerator-transform": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.3.tgz", + "integrity": "sha512-zXHNKJspmONxBViAb3ZUmFoFPnTBs3zFhCEZJiwp/gkNzxVbTqNJVjYKx6Qk1tQ1P4XLf4TbH9+KBB7wGoAaUw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4", + "private": "^0.1.8" + } + }, + "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 + }, + "regexpu-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", + "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + } + }, + "regjsgen": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", + "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", + "dev": true + }, + "regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "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": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "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" + } + }, + "rollup": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.0.6.tgz", + "integrity": "sha512-P42IlI6a/bxh52ed8hEXXe44LcHfep2f26OZybMJPN1TTQftibvQEl3CWeOmJrzqGbFxOA000QXDWO9WJaOQpA==", + "dev": true, + "requires": { + "fsevents": "~2.1.2" + } + }, + "rollup-plugin-babel": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz", + "integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "rollup-pluginutils": "^2.8.1" + } + }, + "rollup-plugin-commonjs": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz", + "integrity": "sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1", + "is-reference": "^1.1.2", + "magic-string": "^0.25.2", + "resolve": "^1.11.0", + "rollup-pluginutils": "^2.8.1" + } + }, + "rollup-plugin-license": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-license/-/rollup-plugin-license-0.13.0.tgz", + "integrity": "sha512-K1At1InQufYagn1zNTikWG6NorVjdBBoKtJdHqbyV/Z1ksM3wHtWlR/4rqdKxyZjTXNTDzM7mxn7j/HERexLFw==", + "dev": true, + "requires": { + "commenting": "1.1.0", + "glob": "7.1.6", + "lodash": "4.17.15", + "magic-string": "0.25.4", + "mkdirp": "0.5.1", + "moment": "2.24.0", + "spdx-expression-validate": "2.0.0", + "spdx-satisfies": "5.0.0" + }, + "dependencies": { + "magic-string": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.4.tgz", + "integrity": "sha512-oycWO9nEVAP2RVPbIoDoA4Y7LFIJ3xRYov93gAyJhZkET1tNuB0u7uWkZS2LpBWTJUWnmau/To8ECWRC+jKNfw==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + } + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + } + }, + "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==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "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=", + "dev": true + }, + "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.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "spdx-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spdx-compare/-/spdx-compare-1.0.0.tgz", + "integrity": "sha512-C1mDZOX0hnu0ep9dfmuoi03+eOdDoz2yvK79RxbcrVEG1NO1Ph35yW102DHWKN4pk80nwCgeMmSY5L25VE4D9A==", + "dev": true, + "requires": { + "array-find-index": "^1.0.2", + "spdx-expression-parse": "^3.0.0", + "spdx-ranges": "^2.0.0" + } + }, + "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-expression-validate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-validate/-/spdx-expression-validate-2.0.0.tgz", + "integrity": "sha512-b3wydZLM+Tc6CFvaRDBOF9d76oGIHNCLYFeHbftFXUWjnfZWganmDmvtM5sm1cRwJc/VDBMLyGGrsLFd1vOxbg==", + "dev": true, + "requires": { + "spdx-expression-parse": "^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 + }, + "spdx-ranges": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/spdx-ranges/-/spdx-ranges-2.1.1.tgz", + "integrity": "sha512-mcdpQFV7UDAgLpXEE/jOMqvK4LBoO0uTQg0uvXUewmEFhpiZx5yJSZITHB8w1ZahKdhfZqP5GPEOKLyEq5p8XA==", + "dev": true + }, + "spdx-satisfies": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/spdx-satisfies/-/spdx-satisfies-5.0.0.tgz", + "integrity": "sha512-/hGhwh20BeGmkA+P/lm06RvXD94JduwNxtx/oX3B5ClPt1/u/m5MCaDNo1tV3Y9laLkQr/NRde63b9lLMhlNfw==", + "dev": true, + "requires": { + "spdx-compare": "^1.0.0", + "spdx-expression-parse": "^3.0.0", + "spdx-ranges": "^2.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "string.prototype.repeat": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-0.2.0.tgz", + "integrity": "sha1-q6Nt4I3O5qWjN9SbLqHaGyj8Ds8=", + "dev": true + }, + "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.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "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" + }, + "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-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "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 + }, + "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" + } + }, + "sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "dev": true, + "requires": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + } + }, + "sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "dev": true, + "requires": { + "get-port": "^3.1.0" + } + }, + "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": { + "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 + }, + "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": "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" + } + } + } + }, + "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 + }, + "then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "dev": true, + "requires": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "dependencies": { + "@types/node": { + "version": "8.10.59", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.59.tgz", + "integrity": "sha512-8RkBivJrDCyPpBXhVZcjh7cQxVBSmRk9QM7hOketZzp6Tg79c0N8kkpAIito9bnJ3HCVCHVYz+KHTEbfQNfeVQ==", + "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-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=", + "dev": true + }, + "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 + }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "uglify-js": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.8.0.tgz", + "integrity": "sha512-ugNSTT8ierCsDHso2jkBHXYrU8Y5/fY2ZUprfrJUiD7YpuFvV4jODLFmb3h4btQjqr5Nh4TX4XtgDfCU1WdioQ==", + "dev": true, + "requires": { + "commander": "~2.20.3", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "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" + } + }, + "vuln-regex-detector": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/vuln-regex-detector/-/vuln-regex-detector-1.3.0.tgz", + "integrity": "sha512-QWm8buVznZjdcfMuFHYsiNfHd0YQ7dO41G0iEGVPlUng5eZUo8uy+QsVCmbgVZ2b96xprY1Tz9dQD7QtvbFHXw==", + "dev": true, + "requires": { + "sync-request": "^6.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" + } + }, + "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 + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "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" + } + } + } +} diff --git a/packages/markdown/marked/package.json b/packages/markdown/marked/package.json index 43cea559..6534e625 100644 --- a/packages/markdown/marked/package.json +++ b/packages/markdown/marked/package.json @@ -2,13 +2,14 @@ "name": "marked", "description": "A markdown parser built for speed", "author": "Christopher Jeffrey", - "version": "0.6.2", - "main": "./lib/marked.js", + "version": "0.8.0", + "main": "./src/marked.js", "bin": "./bin/marked", "man": "./man/marked.1", "files": [ "bin/", "lib/", + "src/", "man/", "marked.min.js" ], @@ -29,41 +30,48 @@ "html" ], "devDependencies": { - "@markedjs/html-differ": "^2.0.1", - "cheerio": "^1.0.0-rc.3", - "commonmark": "0.x", - "eslint": "^5.15.1", - "eslint-config-standard": "^12.0.0", - "eslint-plugin-import": "^2.16.0", - "eslint-plugin-node": "^8.0.1", - "eslint-plugin-promise": "^4.0.1", - "eslint-plugin-standard": "^4.0.0", - "eslint-plugin-vuln-regex-detector": "^1.0.4", - "front-matter": "^3.0.1", - "glob-to-regexp": "^0.4.0", - "jasmine": "^3.3.1", - "markdown": "0.x", - "markdown-it": "8.x", - "node-fetch": "^2.3.0", - "uglify-js": "^3.4.9" + "@babel/core": "^7.8.7", + "@babel/preset-env": "^7.8.7", + "@markedjs/html-differ": "^3.0.0", + "cheerio": "^0.22.0", + "commonmark": "^0.29.1", + "eslint": "^6.8.0", + "eslint-config-standard": "^14.1.0", + "eslint-plugin-import": "^2.20.1", + "eslint-plugin-node": "^11.0.0", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-standard": "^4.0.1", + "front-matter": "^3.1.0", + "jasmine": "^3.5.0", + "markdown": "^0.5.0", + "markdown-it": "^10.0.0", + "node-fetch": "^2.6.0", + "rollup": "^2.0.6", + "rollup-plugin-babel": "^4.4.0", + "rollup-plugin-commonjs": "^10.1.0", + "rollup-plugin-license": "^0.13.0", + "uglify-js": "^3.8.0", + "vuln-regex-detector": "^1.3.0" }, "scripts": { "test": "jasmine --config=jasmine.json", + "test:all": "npm test && npm run test:lint", "test:unit": "npm test -- test/unit/**/*-spec.js", "test:specs": "npm test -- test/specs/**/*-spec.js", - "test:cm": "npm test -- test/specs/commonmark/**/*-spec.js", - "test:gfm": "npm test -- test/specs/gfm/**/*-spec.js", - "test:marked": "npm test -- test/specs/marked/**/*-spec.js", - "test:old": "node test", "test:lint": "eslint bin/marked .", - "test:redos": "eslint --plugin vuln-regex-detector --rule '\"vuln-regex-detector/no-vuln-regex\": 2' lib/marked.js", - "test:node4": "npx node@4 ./node_modules/jasmine/bin/jasmine.js --config=jasmine.json", - "bench": "node test --bench", + "test:redos": "node test/vuln-regex.js", + "test:update": "node test/update-specs.js", + "bench": "npm run rollup && node test/bench.js", "lint": "eslint --fix bin/marked .", - "build": "uglifyjs lib/marked.js -cm --comments /Copyright/ -o marked.min.js", - "preversion": "npm run build && (git diff --quiet || git commit -am 'minify')" + "build:reset": "git checkout upstream/master lib/marked.js lib/marked.esm.js marked.min.js", + "build": "npm run rollup && npm run minify", + "rollup": "npm run rollup:umd && npm run rollup:esm", + "rollup:umd": "rollup -c rollup.config.js", + "rollup:esm": "rollup -c rollup.config.esm.js", + "minify": "uglifyjs lib/marked.js -cm --comments /Copyright/ -o marked.min.js", + "preversion": "npm run build && (git diff --quiet || git commit -am 'build')" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8.16.2" } } diff --git a/packages/markdown/marked/test/README b/packages/markdown/marked/test/README deleted file mode 100644 index 51f6560b..00000000 --- a/packages/markdown/marked/test/README +++ /dev/null @@ -1,10 +0,0 @@ -In this directory: - -# -# MarkdownTester -- Run tests for Markdown implementations -# -# Copyright (c) 2004-2005 John Gruber -# <http://daringfireball.net/projects/markdown/> -# - -Partially modified for testing purposes. diff --git a/packages/markdown/marked/test/browser/index.html b/packages/markdown/marked/test/browser/index.html deleted file mode 100644 index fbde1293..00000000 --- a/packages/markdown/marked/test/browser/index.html +++ /dev/null @@ -1,5 +0,0 @@ -<!doctype html> -<title>marked tests</title> -<p>testing...</p> -<script src="marked.js"></script> -<script src="test.js"></script> diff --git a/packages/markdown/marked/test/browser/index.js b/packages/markdown/marked/test/browser/index.js deleted file mode 100644 index 8208fa3f..00000000 --- a/packages/markdown/marked/test/browser/index.js +++ /dev/null @@ -1,39 +0,0 @@ -var fs = require('fs'), - path = require('path'); - -var testMod = require('../'), - load = testMod.load; - -var express = require('express'), - app = express(); - -var files = load(); - -app.use(function(req, res, next) { - var setHeader = res.setHeader; - res.setHeader = function(name) { - switch (name) { - case 'Cache-Control': - case 'Last-Modified': - case 'ETag': - return; - } - return setHeader.apply(res, arguments); - }; - next(); -}); - -app.get('/test.js', function(req, res, next) { - var test = fs.readFileSync(path.join(__dirname, 'test.js'), 'utf8'); - var testScript = test.replace('__TESTS__', JSON.stringify(files)) - .replace('__MAIN__', testMod.runTests + '') - .replace('__LIBS__', testMod.testFile + ''); - - res.contentType('.js'); - res.send(testScript); -}); - -app.use(express.static(path.join(__dirname, '/../../lib'))); -app.use(express.static(__dirname)); - -app.listen(8080); diff --git a/packages/markdown/marked/test/browser/test.js b/packages/markdown/marked/test/browser/test.js deleted file mode 100644 index 59917dd4..00000000 --- a/packages/markdown/marked/test/browser/test.js +++ /dev/null @@ -1,66 +0,0 @@ - -;(function() { - var console = {}, - files = __TESTS__; // eslint-disable-line no-undef - - console.log = function(text) { - var args = Array.prototype.slice.call(arguments, 1), - i = 0; - - text = text.replace(/%\w/g, function() { - return args[i++] || ''; - }); - - if (window.console) window.console.log(text); - document.body.innerHTML += '<pre>' + escape(text) + '</pre>'; - }; - - if (!Object.keys) { - Object.keys = function(obj) { - var out = [], - key; - - for (key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) { - out.push(key); - } - } - - return out; - }; - } - - if (!Array.prototype.forEach) { - // eslint-disable-next-line no-extend-native - Array.prototype.forEach = function(callback, context) { - for (var i = 0; i < this.length; i++) { - callback.call(context || null, this[i], i, this); - } - }; - } - - if (!String.prototype.trim) { - // eslint-disable-next-line no-extend-native - String.prototype.trim = function() { - return this.replace(/^\s+|\s+$/g, ''); - }; - } - - // eslint-disable-next-line no-unused-vars - function load() { - return files; - } - - function escape(html, encode) { - return html - .replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&') - .replace(/</g, '<') - .replace(/>/g, '>') - .replace(/"/g, '"') - .replace(/'/g, '''); - } - - __LIBS__; // eslint-disable-line no-undef, no-unused-expressions - - (__MAIN__)(); // eslint-disable-line no-undef -}).call(this); diff --git a/packages/markdown/marked/test/helpers/helpers.js b/packages/markdown/marked/test/helpers/helpers.js deleted file mode 100644 index 44632fcd..00000000 --- a/packages/markdown/marked/test/helpers/helpers.js +++ /dev/null @@ -1,26 +0,0 @@ -const marked = require('../../'); -const htmlDiffer = require('./html-differ.js'); - -beforeEach(() => { - marked.setOptions(marked.getDefaults()); - - jasmine.addMatchers({ - toRender: () => { - return { - compare: (spec, expected) => { - const result = {}; - const actual = marked(spec.markdown, spec.options); - result.pass = htmlDiffer.isEqual(expected, actual); - - if (result.pass) { - result.message = `${spec.markdown}\n------\n\nExpected: Should Fail`; - } else { - const diff = htmlDiffer.firstDiff(actual, expected); - result.message = `Expected: ${diff.expected}\n Actual: ${diff.actual}`; - } - return result; - } - }; - } - }); -}); diff --git a/packages/markdown/marked/test/helpers/html-differ.js b/packages/markdown/marked/test/helpers/html-differ.js deleted file mode 100644 index 44052be4..00000000 --- a/packages/markdown/marked/test/helpers/html-differ.js +++ /dev/null @@ -1,38 +0,0 @@ -const HtmlDiffer = require('@markedjs/html-differ').HtmlDiffer; -const htmlDiffer = new HtmlDiffer({ignoreSelfClosingSlash: true}); - -module.exports = { - isEqual: htmlDiffer.isEqual.bind(htmlDiffer), - firstDiff: (actual, expected, padding) => { - padding = padding || 30; - const result = htmlDiffer - .diffHtml(actual, expected) - .reduce((obj, diff) => { - if (diff.added) { - if (obj.firstIndex === null) { - obj.firstIndex = obj.expected.length; - } - obj.expected += diff.value; - } else if (diff.removed) { - if (obj.firstIndex === null) { - obj.firstIndex = obj.actual.length; - } - obj.actual += diff.value; - } else { - obj.actual += diff.value; - obj.expected += diff.value; - } - - return obj; - }, { - firstIndex: null, - actual: '', - expected: '' - }); - - return { - actual: result.actual.substring(result.firstIndex - padding, result.firstIndex + padding), - expected: result.expected.substring(result.firstIndex - padding, result.firstIndex + padding) - }; - } -}; diff --git a/packages/markdown/marked/test/index.js b/packages/markdown/marked/test/index.js deleted file mode 100644 index 5027ee5b..00000000 --- a/packages/markdown/marked/test/index.js +++ /dev/null @@ -1,551 +0,0 @@ -#!/usr/bin/env node -'use strict'; -// 'use strict' is here so we can use let and const in node 4 - -/** - * marked tests - * Copyright (c) 2011-2013, Christopher Jeffrey. (MIT Licensed) - * https://github.com/markedjs/marked - */ - -/** - * Modules - */ - -const fs = require('fs'); -const path = require('path'); -const fm = require('front-matter'); -const g2r = require('glob-to-regexp'); -let marked = require('../'); -const htmlDiffer = require('./helpers/html-differ.js'); - -/** - * Load Tests - */ - -function load(options) { - options = options || {}; - const dir = path.join(__dirname, 'compiled_tests'); - const glob = g2r(options.glob || '*', { extended: true }); - - const list = fs - .readdirSync(dir) - .filter(file => { - return path.extname(file) === '.md'; - }) - .sort(); - - const files = list.reduce((obj, item) => { - const name = path.basename(item, '.md'); - if (glob.test(name)) { - const file = path.join(dir, item); - const content = fm(fs.readFileSync(file, 'utf8')); - - obj[name] = { - options: content.attributes, - text: content.body, - html: fs.readFileSync(file.replace(/[^.]+$/, 'html'), 'utf8') - }; - } - return obj; - }, {}); - - if (options.bench || options.time) { - if (!options.glob) { - // Change certain tests to allow - // comparison to older benchmark times. - fs.readdirSync(path.join(__dirname, 'new')).forEach(name => { - if (path.extname(name) === '.html') return; - if (name === 'main.md') return; - delete files[name]; - }); - } - - if (files['backslash_escapes.md']) { - files['backslash_escapes.md'] = { - text: 'hello world \\[how](are you) today' - }; - } - - if (files['main.md']) { - files['main.md'].text = files['main.md'].text.replace('* * *\n\n', ''); - } - } - - return files; -} - -/** - * Test Runner - */ - -function runTests(engine, options) { - if (typeof engine !== 'function') { - options = engine; - engine = null; - } - - engine = engine || marked; - options = options || {}; - - let succeeded = 0; - let failed = 0; - const files = options.files || load(options); - const filenames = Object.keys(files); - - if (options.marked) { - marked.setOptions(options.marked); - } - - for (let i = 0; i < filenames.length; i++) { - const filename = filenames[i]; - const file = files[filename]; - - const success = testFile(engine, file, filename, i + 1); - - if (success) { - succeeded++; - } else { - failed++; - if (options.stop) { - break; - } - } - } - - console.log('\n%d/%d tests completed successfully.', succeeded, filenames.length); - if (failed) console.log('%d/%d tests failed.', failed, filenames.length); - - return !failed; -} - -/** - * Test a file - */ - -function testFile(engine, file, filename, index) { - const opts = Object.keys(file.options); - - if (marked._original) { - marked.defaults = marked._original; - delete marked._original; - } - - console.log('#%d. Test %s', index, filename); - - if (opts.length) { - marked._original = marked.defaults; - marked.defaults = {}; - Object.keys(marked._original).forEach(key => { - marked.defaults[key] = marked._original[key]; - }); - opts.forEach(key => { - if (marked.defaults.hasOwnProperty(key)) { - marked.defaults[key] = file.options[key]; - } - }); - } - - const before = process.hrtime(); - - let text, html, elapsed; - try { - text = engine(file.text); - html = file.html; - } catch (e) { - elapsed = process.hrtime(before); - console.log('\n failed in %dms\n', prettyElapsedTime(elapsed)); - throw e; - } - - elapsed = process.hrtime(before); - - if (htmlDiffer.isEqual(text, html)) { - if (elapsed[0] > 0) { - console.log('\n failed because it took too long.\n\n passed in %dms\n', prettyElapsedTime(elapsed)); - return false; - } - console.log(' passed in %dms', prettyElapsedTime(elapsed)); - return true; - } - - const diff = htmlDiffer.firstDiff(text, html); - - console.log('\n failed in %dms', prettyElapsedTime(elapsed)); - console.log(' Expected: %s', diff.expected); - console.log(' Actual: %s\n', diff.actual); - return false; -} - -/** - * Benchmark a function - */ - -function bench(name, files, engine) { - const start = Date.now(); - - for (let i = 0; i < 1000; i++) { - for (const filename in files) { - engine(files[filename].text); - } - } - - const end = Date.now(); - - console.log('%s completed in %dms.', name, end - start); -} - -/** - * Benchmark all engines - */ - -function runBench(options) { - options = options || {}; - const files = load(options); - - // Non-GFM, Non-pedantic - marked.setOptions({ - gfm: false, - tables: false, - breaks: false, - pedantic: false, - sanitize: false, - smartLists: false - }); - if (options.marked) { - marked.setOptions(options.marked); - } - bench('marked', files, marked); - - // GFM - marked.setOptions({ - gfm: true, - tables: false, - breaks: false, - pedantic: false, - sanitize: false, - smartLists: false - }); - if (options.marked) { - marked.setOptions(options.marked); - } - bench('marked (gfm)', files, marked); - - // Pedantic - marked.setOptions({ - gfm: false, - tables: false, - breaks: false, - pedantic: true, - sanitize: false, - smartLists: false - }); - if (options.marked) { - marked.setOptions(options.marked); - } - bench('marked (pedantic)', files, marked); - - try { - bench('commonmark', files, (() => { - const commonmark = require('commonmark'); - const parser = new commonmark.Parser(); - const writer = new commonmark.HtmlRenderer(); - return function (text) { - return writer.render(parser.parse(text)); - }; - })()); - } catch (e) { - console.log('Could not bench commonmark. (Error: %s)', e.message); - } - - try { - bench('markdown-it', files, (() => { - const MarkdownIt = require('markdown-it'); - const md = new MarkdownIt(); - return md.render.bind(md); - })()); - } catch (e) { - console.log('Could not bench markdown-it. (Error: %s)', e.message); - } - - try { - bench('markdown.js', files, (() => { - const markdown = require('markdown').markdown; - return markdown.toHTML.bind(markdown); - })()); - } catch (e) { - console.log('Could not bench markdown.js. (Error: %s)', e.message); - } - - return true; -} - -/** - * A simple one-time benchmark - */ - -function time(options) { - options = options || {}; - const files = load(options); - if (options.marked) { - marked.setOptions(options.marked); - } - bench('marked', files, marked); - - return true; -} - -/** - * Markdown Test Suite Fixer - * This function is responsible for "fixing" - * the markdown test suite. There are - * certain aspects of the suite that - * are strange or might make tests - * fail for reasons unrelated to - * conformance. - */ - -function fix() { - ['compiled_tests', 'original', 'new', 'redos'].forEach(dir => { - try { - fs.mkdirSync(path.resolve(__dirname, dir)); - } catch (e) { - // directory already exists - } - }); - - // rm -rf tests - fs.readdirSync(path.resolve(__dirname, 'compiled_tests')).forEach(file => { - fs.unlinkSync(path.resolve(__dirname, 'compiled_tests', file)); - }); - - // cp -r original tests - fs.readdirSync(path.resolve(__dirname, 'original')).forEach(file => { - let text = fs.readFileSync(path.resolve(__dirname, 'original', file), 'utf8'); - - if (path.extname(file) === '.md') { - if (fm.test(text)) { - text = fm(text); - text = `---\n${text.frontmatter}\ngfm: false\n---\n${text.body}`; - } else { - text = `---\ngfm: false\n---\n${text}`; - } - } - - fs.writeFileSync(path.resolve(__dirname, 'compiled_tests', file), text); - }); - - // node fix.js - const dir = path.join(__dirname, 'compiled_tests'); - - fs.readdirSync(dir).filter(file => { - return path.extname(file) === '.html'; - }).forEach(file => { - file = path.join(dir, file); - let html = fs.readFileSync(file, 'utf8'); - - // fix unencoded quotes - html = html - .replace(/='([^\n']*)'(?=[^<>\n]*>)/g, '=&__APOS__;$1&__APOS__;') - .replace(/="([^\n"]*)"(?=[^<>\n]*>)/g, '=&__QUOT__;$1&__QUOT__;') - .replace(/"/g, '"') - .replace(/'/g, ''') - .replace(/&__QUOT__;/g, '"') - .replace(/&__APOS__;/g, '\''); - - fs.writeFileSync(file, html); - }); - - // turn <hr /> into <hr> - fs.readdirSync(dir).forEach(file => { - file = path.join(dir, file); - let text = fs.readFileSync(file, 'utf8'); - - text = text.replace(/(<|<)hr\s*\/(>|>)/g, '$1hr$2'); - - fs.writeFileSync(file, text); - }); - - // markdown does some strange things. - // it does not encode naked `>`, marked does. - { - const file = `${dir}/amps_and_angles_encoding.html`; - const html = fs.readFileSync(file, 'utf8') - .replace('6 > 5.', '6 > 5.'); - - fs.writeFileSync(file, html); - } - - // cp new/* tests/ - fs.readdirSync(path.resolve(__dirname, 'new')).forEach(file => { - fs.writeFileSync(path.resolve(__dirname, 'compiled_tests', file), - fs.readFileSync(path.resolve(__dirname, 'new', file))); - }); - - // cp redos/* tests/ - fs.readdirSync(path.resolve(__dirname, 'redos')).forEach(file => { - fs.writeFileSync(path.resolve(__dirname, 'compiled_tests', file), - fs.readFileSync(path.resolve(__dirname, 'redos', file))); - }); -} - -/** - * Argument Parsing - */ - -function parseArg(argv) { - argv = argv.slice(2); - - const options = {}; - const orphans = []; - - function getarg() { - let arg = argv.shift(); - - if (arg.indexOf('--') === 0) { - // e.g. --opt - arg = arg.split('='); - if (arg.length > 1) { - // e.g. --opt=val - argv.unshift(arg.slice(1).join('=')); - } - arg = arg[0]; - } else if (arg[0] === '-') { - if (arg.length > 2) { - // e.g. -abc - argv = arg.substring(1).split('').map(ch => { - return `-${ch}`; - }).concat(argv); - arg = argv.shift(); - } else { - // e.g. -a - } - } else { - // e.g. foo - } - - return arg; - } - - while (argv.length) { - let arg = getarg(); - switch (arg) { - case '-f': - case '--fix': - case 'fix': - if (options.fix !== false) { - options.fix = true; - } - break; - case '--no-fix': - case 'no-fix': - options.fix = false; - break; - case '-b': - case '--bench': - options.bench = true; - break; - case '-s': - case '--stop': - options.stop = true; - break; - case '-t': - case '--time': - options.time = true; - break; - case '-m': - case '--minified': - options.minified = true; - break; - case '--glob': - arg = argv.shift(); - options.glob = arg.replace(/^=/, ''); - break; - default: - if (arg.indexOf('--') === 0) { - const opt = camelize(arg.replace(/^--(no-)?/, '')); - if (!marked.defaults.hasOwnProperty(opt)) { - continue; - } - options.marked = options.marked || {}; - if (arg.indexOf('--no-') === 0) { - options.marked[opt] = typeof marked.defaults[opt] !== 'boolean' - ? null - : false; - } else { - options.marked[opt] = typeof marked.defaults[opt] !== 'boolean' - ? argv.shift() - : true; - } - } else { - orphans.push(arg); - } - break; - } - } - - return options; -} - -/** - * Helpers - */ - -function camelize(text) { - return text.replace(/(\w)-(\w)/g, (_, a, b) => a + b.toUpperCase()); -} - -/** - * Main - */ - -function main(argv) { - const opt = parseArg(argv); - - if (opt.fix !== false) { - fix(); - } - - if (opt.fix) { - // only run fix - return; - } - - if (opt.bench) { - return runBench(opt); - } - - if (opt.time) { - return time(opt); - } - - if (opt.minified) { - marked = require('../marked.min.js'); - } - return runTests(opt); -} - -/** - * Execute - */ - -if (!module.parent) { - process.title = 'marked'; - process.exit(main(process.argv.slice()) ? 0 : 1); -} else { - exports = main; - exports.main = main; - exports.runTests = runTests; - exports.testFile = testFile; - exports.runBench = runBench; - exports.load = load; - exports.bench = bench; - module.exports = exports; -} - -// returns time to millisecond granularity -function prettyElapsedTime(hrtimeElapsed) { - const seconds = hrtimeElapsed[0]; - const frac = Math.round(hrtimeElapsed[1] / 1e3) / 1e3; - return seconds * 1e3 + frac; -} diff --git a/packages/markdown/marked/test/json-to-files.js b/packages/markdown/marked/test/json-to-files.js deleted file mode 100644 index d7e72aaf..00000000 --- a/packages/markdown/marked/test/json-to-files.js +++ /dev/null @@ -1,62 +0,0 @@ -const path = require('path'); -const fs = require('fs'); - -const folder = process.argv[2]; -const jsonFile = process.argv[3]; - -if (!folder || !jsonFile) { - console.log('node ./json-to-files.js {path to folder} {path to json file}'); - process.exit(1); -} - -const specs = require(jsonFile); - -const files = specs.reduce((obj, spec) => { - if (!obj[spec.section]) { - obj[spec.section] = { - md: [], - html: [], - options: {} - }; - } - - obj[spec.section].md.push(spec.markdown); - obj[spec.section].html.push(spec.html); - Object.assign(obj[spec.section].options, spec.options); - - return obj; -}, {}); - -try { - fs.mkdirSync(folder, {recursive: true}); -} catch (ex) { - // already exists -} - -for (const section in files) { - const file = files[section]; - const name = section.toLowerCase().replace(' ', '_'); - const frontMatter = Object.keys(file.options).map(opt => { - let value = file.options[opt]; - if (typeof value !== 'string') { - value = JSON.stringify(value); - } - return `${opt}: ${value}`; - }).join('\n'); - - let markdown = file.md.join('\n\n'); - if (frontMatter) { - markdown = `---\n${frontMatter}\n---\n\n${markdown}`; - } - const html = file.html.join('\n\n'); - - const mdFile = path.resolve(folder, `${name}.md`); - const htmlFile = path.resolve(folder, `${name}.html`); - - if (fs.existsSync(mdFile) || fs.existsSync(htmlFile)) { - throw new Error(`${name} already exists.`); - } - - fs.writeFileSync(mdFile, markdown); - fs.writeFileSync(htmlFile, html); -} diff --git a/packages/markdown/marked/test/new/adjacent_lists.html b/packages/markdown/marked/test/new/adjacent_lists.html deleted file mode 100644 index b4cd8f50..00000000 --- a/packages/markdown/marked/test/new/adjacent_lists.html +++ /dev/null @@ -1,9 +0,0 @@ -<ul> -<li>This should be</li> -<li>An unordered list</li> -</ul> - -<ol> -<li>This should be</li> -<li>An unordered list</li> -</ol> diff --git a/packages/markdown/marked/test/new/adjacent_lists.md b/packages/markdown/marked/test/new/adjacent_lists.md deleted file mode 100644 index 3fd460b3..00000000 --- a/packages/markdown/marked/test/new/adjacent_lists.md +++ /dev/null @@ -1,5 +0,0 @@ -* This should be -* An unordered list - -1. This should be -2. An unordered list diff --git a/packages/markdown/marked/test/new/autolink_lines.html b/packages/markdown/marked/test/new/autolink_lines.html deleted file mode 100644 index aa2bed4d..00000000 --- a/packages/markdown/marked/test/new/autolink_lines.html +++ /dev/null @@ -1,3 +0,0 @@ -<p>hello world -<a href="http://example.com">http://example.com</a> -</p> diff --git a/packages/markdown/marked/test/new/autolink_lines.md b/packages/markdown/marked/test/new/autolink_lines.md deleted file mode 100644 index c9b61a2c..00000000 --- a/packages/markdown/marked/test/new/autolink_lines.md +++ /dev/null @@ -1,2 +0,0 @@ -hello world -<http://example.com> diff --git a/packages/markdown/marked/test/new/autolinks.html b/packages/markdown/marked/test/new/autolinks.html deleted file mode 100644 index 8fa4837e..00000000 --- a/packages/markdown/marked/test/new/autolinks.html +++ /dev/null @@ -1,15 +0,0 @@ -<p>(See <a href="https://www.example.com/fhqwhgads">https://www.example.com/fhqwhgads</a>.)</p> - -<p>((<a href="http://foo.com">http://foo.com</a>))</p> - -<p>((<a href="http://foo.com">http://foo.com</a>.))</p> - -<p><a href="HTTP://FOO.COM">HTTP://FOO.COM</a></p> - -<p><a href="hTtP://fOo.CoM">hTtP://fOo.CoM</a></p> - -<p><del><a href="mailto:hello@email.com">hello@email.com</a></del></p> - -<p><strong><a href="mailto:me@example.com">me@example.com</a></strong></p> - -<p><strong><a href="mailto:test@test.com">test@test.com</a></strong></p>
\ No newline at end of file diff --git a/packages/markdown/marked/test/new/autolinks.md b/packages/markdown/marked/test/new/autolinks.md deleted file mode 100644 index 1f5f739c..00000000 --- a/packages/markdown/marked/test/new/autolinks.md +++ /dev/null @@ -1,15 +0,0 @@ -(See https://www.example.com/fhqwhgads.) - -((http://foo.com)) - -((http://foo.com.)) - -HTTP://FOO.COM - -hTtP://fOo.CoM - -~~hello@email.com~~ - -**me@example.com** - -__test@test.com__
\ No newline at end of file diff --git a/packages/markdown/marked/test/new/blockquote_list_item.html b/packages/markdown/marked/test/new/blockquote_list_item.html deleted file mode 100644 index 83cf0bdd..00000000 --- a/packages/markdown/marked/test/new/blockquote_list_item.html +++ /dev/null @@ -1,3 +0,0 @@ -<p>This fails in markdown.pl and upskirt:</p> - -<ul><li>hello<blockquote><p>world</p></blockquote></li></ul> diff --git a/packages/markdown/marked/test/new/blockquote_list_item.md b/packages/markdown/marked/test/new/blockquote_list_item.md deleted file mode 100644 index 19e93829..00000000 --- a/packages/markdown/marked/test/new/blockquote_list_item.md +++ /dev/null @@ -1,4 +0,0 @@ -This fails in markdown.pl and upskirt: - -* hello - > world diff --git a/packages/markdown/marked/test/new/case_insensitive_refs.html b/packages/markdown/marked/test/new/case_insensitive_refs.html deleted file mode 100644 index c54388ea..00000000 --- a/packages/markdown/marked/test/new/case_insensitive_refs.html +++ /dev/null @@ -1 +0,0 @@ -<p><a href="/url">hi</a></p> diff --git a/packages/markdown/marked/test/new/case_insensitive_refs.md b/packages/markdown/marked/test/new/case_insensitive_refs.md deleted file mode 100644 index 598915a8..00000000 --- a/packages/markdown/marked/test/new/case_insensitive_refs.md +++ /dev/null @@ -1,3 +0,0 @@ -[hi] - -[HI]: /url diff --git a/packages/markdown/marked/test/new/cm_autolinks.html b/packages/markdown/marked/test/new/cm_autolinks.html deleted file mode 100644 index e7ae0ee4..00000000 --- a/packages/markdown/marked/test/new/cm_autolinks.html +++ /dev/null @@ -1,91 +0,0 @@ -<p>Here are some valid autolinks:</p> - -<h3 id="example-565">Example 565</h3> - -<p><a href="http://foo.bar.baz">http://foo.bar.baz</a></p> - -<h3 id="example-566">Example 566</h3> - -<p><a href="http://foo.bar.baz/test?q=hello&id=22&boolean">http://foo.bar.baz/test?q=hello&id=22&boolean</a></p> - -<h3 id="example-567">Example 567</h3> - -<p><a href="irc://foo.bar:2233/baz">irc://foo.bar:2233/baz</a></p> - -<h3 id="example-568">Example 568</h3> - -<p>Uppercase is also fine:</p> - -<p><a href="MAILTO:FOO@BAR.BAZ">MAILTO:FOO@BAR.BAZ</a></p> - -<p>Note that many strings that count as absolute URIs for purposes of this spec are not valid URIs, because their schemes are not registered or because of other problems with their syntax:</p> - -<h3 id="example-569">Example 569</h3> - -<p><a href="a+b+c:d">a+b+c:d</a></p> - -<h3 id="example-570">Example 570</h3> - -<p><a href="made-up-scheme://foo,bar">made-up-scheme://foo,bar</a></p> - -<h3 id="example-571">Example 571</h3> - -<p><a href="http://../">http://../</a></p> - -<h3 id="example-572">Example 572</h3> - -<p><a href="localhost:5001/foo">localhost:5001/foo</a></p> - -<h3 id="example-573">Example 573</h3> - -<p>Spaces are not allowed in autolinks:</p> - -<p><http://foo.bar/baz bim></p> - -<h3 id="example-574">Example 574</h3> - -<p>Backslash-escapes do not work inside autolinks:</p> - -<p><a href="http://example.com/%5C%5B%5C">http://example.com/\[\</a></p> - -<p>Examples of email autolinks:</p> - -<h3 id="example-575">Example 575</h3> - -<p><a href="mailto:foo@bar.example.com">foo@bar.example.com</a></p> - -<h3 id="example-576">Example 576</h3> - -<p><a href="mailto:foo+special@Bar.baz-bar0.com">foo+special@Bar.baz-bar0.com</a></p> - -<h3 id="example-577">Example 577</h3> - -<p>Backslash-escapes do not work inside email autolinks:</p> - -<p><foo+@bar.example.com></p> - -<p>These are not autolinks:</p> - -<h3 id="example-578">Example 578</h3> - -<p><></p> - -<h3 id="example-579">Example 579</h3> - -<p>< http://foo.bar ></p> - -<h3 id="example-580">Example 580</h3> - -<p><m:abc></p> - -<h3 id="example-581">Example 581</h3> - -<p><foo.bar.baz></p> - -<h3 id="example-582">Example 582</h3> - -<p>http://example.com</p> - -<h3 id="example-583">Example 583</h3> - -<p>foo@bar.example.com</p>
\ No newline at end of file diff --git a/packages/markdown/marked/test/new/cm_autolinks.md b/packages/markdown/marked/test/new/cm_autolinks.md deleted file mode 100644 index a19d830c..00000000 --- a/packages/markdown/marked/test/new/cm_autolinks.md +++ /dev/null @@ -1,96 +0,0 @@ ---- -gfm: false -mangle: false ---- - -Here are some valid autolinks: - -### Example 565 - -<http://foo.bar.baz> - -### Example 566 - -<http://foo.bar.baz/test?q=hello&id=22&boolean> - -### Example 567 - -<irc://foo.bar:2233/baz> - -### Example 568 - -Uppercase is also fine: - -<MAILTO:FOO@BAR.BAZ> - -Note that many strings that count as absolute URIs for purposes of this spec are not valid URIs, because their schemes are not registered or because of other problems with their syntax: - -### Example 569 - -<a+b+c:d> - -### Example 570 - -<made-up-scheme://foo,bar> - -### Example 571 - -<http://../> - -### Example 572 - -<localhost:5001/foo> - -### Example 573 - -Spaces are not allowed in autolinks: - -<http://foo.bar/baz bim> - -### Example 574 - -Backslash-escapes do not work inside autolinks: - -<http://example.com/\[\> - -Examples of email autolinks: - -### Example 575 - -<foo@bar.example.com> - -### Example 576 - -<foo+special@Bar.baz-bar0.com> - -### Example 577 - -Backslash-escapes do not work inside email autolinks: - -<foo\+@bar.example.com> - -These are not autolinks: - -### Example 578 - -<> - -### Example 579 - -< http://foo.bar > - -### Example 580 - -<m:abc> - -### Example 581 - -<foo.bar.baz> - -### Example 582 - -http://example.com - -### Example 583 - -foo@bar.example.com
\ No newline at end of file diff --git a/packages/markdown/marked/test/new/cm_blockquotes.html b/packages/markdown/marked/test/new/cm_blockquotes.html deleted file mode 100644 index b4d51b1f..00000000 --- a/packages/markdown/marked/test/new/cm_blockquotes.html +++ /dev/null @@ -1,233 +0,0 @@ -<h3 id="example-191">Example 191</h3> - -<blockquote> -<h1 id="foo">Foo</h1> -<p>bar -baz</p> -</blockquote> - -<h3 id="example-192">Example 192</h3> - -<p>The spaces after the <code>></code> characters can be omitted:</p> - -<blockquote> -<h1 id="bar">Bar</h1> -<p>bar -baz</p> -</blockquote> - -<h3 id="example-193">Example 193</h3> - -<p>The <code>></code> characters can be indented 1-3 spaces:</p> - -<blockquote> -<h1 id="baz">Baz</h1> -<p>bar -baz</p> -</blockquote> - -<h3 id="example-194">Example 194</h3> - -<p>Four spaces gives us a code block:</p> - -<pre><code>> # Qux -> bar -> baz</code></pre> - -<h3 id="example-195">Example 195</h3> - -<p>The Laziness clause allows us to omit the <code>></code> before paragraph continuation text:</p> - -<blockquote> -<h1 id="quux">Quux</h1> -<p>bar -baz</p> -</blockquote> - -<h3 id="example-196">Example 196</h3> - -<p>A block quote can contain some lazy and some non-lazy continuation lines:</p> - -<blockquote> -<p>bar -baz -foo</p> -</blockquote> - -<h3 id="example-197">Example 197</h3> - -<p>Laziness only applies to lines that would have been continuations of paragraphs had they been prepended with block quote markers. For example, the <code>></code> cannot be omitted in the second line of</p> - -<blockquote> -<p>foo</p> -</blockquote> -<hr> - -<p>without changing the meaning.</p> - -<h3 id="example-198">Example 198</h3> - -<pre><code>Similarly, if we omit the `>` in the second line then the block quote ends after the first line: - -> - foo -- bar</code></pre> - -<h3 id="example-199">Example 199</h3> - -<p>For the same reason, we can’t omit the <code>></code> in front of subsequent lines of an indented or fenced code block:</p> - -<blockquote> -<pre><code>foo</code></pre> -</blockquote> -<pre><code>bar</code></pre> - -<h3 id="example-200">Example 200</h3> - -<pre><code>> ``` -foo -``` - -<blockquote> -<pre><code></code></pre> -</blockquote> -<p>foo</p> -<pre><code></code></pre></code></pre> - -<h3 id="example-201">Example 201</h3> -<pre><code>> foo - - bar - -<blockquote> -<p>foo -- bar</p> -</blockquote></code></pre> - -<h3 id="example-202">Example 202</h3> - -<p>A block quote can be empty:</p> - -<blockquote> -</blockquote> - -<h3 id="example-203">Example 203</h3> - -<blockquote> -</blockquote> - -<h3 id="example-204">Example 204</h3> - -<p>A block quote can have initial or final blank lines:</p> - -<blockquote> -<p>foo</p> -</blockquote> - - -<h3 id="example-205">Example 205</h3> - -<p>A blank line always separates block quotes:</p> - -<blockquote> -<p>foo</p> -</blockquote> -<blockquote> -<p>bar</p> -</blockquote> - -<h3 id="example-206">Example 206</h3> - -<p>Consecutiveness means that if we put these block quotes together, we get a single block quote:</p> - -<blockquote> -<p>foo -bar</p> -</blockquote> - -<h3 id="example-207">Example 207</h3> - -<p>To get a block quote with two paragraphs, use:</p> - -<blockquote> -<p>foo</p> -<p>bar</p> -</blockquote> - -<h3 id="example-208">Example 208</h3> - -<p>Block quotes can interrupt paragraphs:</p> - -<p>foo</p> -<blockquote> -<p>bar</p> -</blockquote> - -<h3 id="example-209">Example 209</h3> - -<p>In general, blank lines are not needed before or after block quotes:</p> - -<blockquote> -<p>aaa</p> -</blockquote> -<hr> -<blockquote> -<p>bbb</p> -</blockquote> - -<h3 id="example-210">Example 210</h3> - -<p>However, because of laziness, a blank line is needed between a block quote and a following paragraph:</p> - -<blockquote> -<p>bar -baz</p> -</blockquote> - -<h3 id="example-211">Example 211</h3> - -<blockquote> -<p>bar</p> -</blockquote> -<p>baz</p> - -<h3 id="example-212">Example 212</h3> - -<blockquote> -<p>bar</p> -</blockquote> -<p>baz</p> - -<h3 id="example-213">Example 213</h3> - -<p>It is a consequence of the Laziness rule that any number of initial <code>></code>s may be omitted on a continuation line of a nested block quote:</p> - -<blockquote> -<blockquote> -<blockquote> -<p>foo -bar</p> -</blockquote> -</blockquote> -</blockquote> - -<h3 id="example-214">Example 214</h3> - -<blockquote> -<blockquote> -<blockquote> -<p>foo -bar -baz</p> -</blockquote> -</blockquote> -</blockquote> - -<h3 id="example-215">Example 215</h3> - -<p>When including an indented code block in a block quote, remember that the block quote marker includes both the <code>></code> and a following space. So five spaces are needed after the <code>></code>:</p> - -<blockquote> -<pre><code>code</code></pre> -</blockquote> -<blockquote> -<p>not code</p> -</blockquote> diff --git a/packages/markdown/marked/test/new/cm_blockquotes.md b/packages/markdown/marked/test/new/cm_blockquotes.md deleted file mode 100644 index 6a80a6f3..00000000 --- a/packages/markdown/marked/test/new/cm_blockquotes.md +++ /dev/null @@ -1,189 +0,0 @@ -### Example 191 - -> # Foo -> bar -> baz - -### Example 192 - -The spaces after the `>` characters can be omitted: - -># Bar ->bar -> baz - -### Example 193 - -The `>` characters can be indented 1-3 spaces: - - > # Baz - > bar - > baz - -### Example 194 - -Four spaces gives us a code block: - - > # Qux - > bar - > baz - -### Example 195 - -The Laziness clause allows us to omit the `>` before paragraph continuation text: - -> # Quux -> bar -baz - -### Example 196 - -A block quote can contain some lazy and some non-lazy continuation lines: - -> bar -baz -> foo - -### Example 197 - -Laziness only applies to lines that would have been continuations of paragraphs had they been prepended with block quote markers. For example, the `>` cannot be omitted in the second line of - -> foo ---- - -without changing the meaning. - -### Example 198 - - Similarly, if we omit the `>` in the second line then the block quote ends after the first line: - - > - foo - - bar - -### Example 199 - -For the same reason, we can’t omit the `>` in front of subsequent lines of an indented or fenced code block: - -> foo - - bar - -### Example 200 - - > ``` - foo - ``` - - <blockquote> - <pre><code></code></pre> - </blockquote> - <p>foo</p> - <pre><code></code></pre> - -### Example 201 - - > foo - - bar - - <blockquote> - <p>foo - - bar</p> - </blockquote> - -### Example 202 - -A block quote can be empty: - -> - -### Example 203 - -> -> -> - -### Example 204 - -A block quote can have initial or final blank lines: - -> -> foo -> - -### Example 205 - -A blank line always separates block quotes: - -> foo - -> bar - -### Example 206 - -Consecutiveness means that if we put these block quotes together, we get a single block quote: - -> foo -> bar - -### Example 207 - -To get a block quote with two paragraphs, use: - -> foo -> -> bar - -### Example 208 - -Block quotes can interrupt paragraphs: - -foo -> bar - -### Example 209 - -In general, blank lines are not needed before or after block quotes: - -> aaa -*** -> bbb - -### Example 210 - -However, because of laziness, a blank line is needed between a block quote and a following paragraph: - -> bar -baz - -### Example 211 - -> bar - -baz - -### Example 212 - -> bar -> -baz - -### Example 213 - -It is a consequence of the Laziness rule that any number of initial `>`s may be omitted on a continuation line of a nested block quote: - -> > > foo -bar - -### Example 214 - ->>> foo -> bar ->>baz - -### Example 215 - -When including an indented code block in a block quote, remember that the block quote marker includes both the `>` and a following space. So five spaces are needed after the `>`: - -> code - -> not code diff --git a/packages/markdown/marked/test/new/cm_html_blocks.html b/packages/markdown/marked/test/new/cm_html_blocks.html deleted file mode 100644 index 80fdff57..00000000 --- a/packages/markdown/marked/test/new/cm_html_blocks.html +++ /dev/null @@ -1,300 +0,0 @@ -<h1 id="html-blocks">HTML blocks</h1> - -<h3 id="example-116">Example 116</h3> - -<table><tr><td> -<pre> -**Hello**, -<p><em>world</em>. -</pre></p> -</td></tr></table> - -<h3 id="example-117">Example 117</h3> - -<table> - <tr> - <td> - hi - </td> - </tr> -</table> -<p>okay.</p> - -<h3 id="example-118">Example 118</h3> - - <div> - *hello* - <foo><a> - -<h3 id="example-119">Example 119</h3> - -</div> -*foo* - -<h3 id="example-120">Example 120</h3> - -<DIV CLASS="foo"> -<p><em>Markdown</em></p> -</DIV> - -<h3 id="example-121">Example 121</h3> - -<div id="foo" - class="bar"> -</div> - -<h3 id="example-122">Example 122</h3> - -<div id="foo" class="bar - baz"> -</div> - -<h3 id="example-123">Example 123</h3> - -<div> -*foo* -<p><em>bar</em></p> - -<h3 id="example-124">Example 124</h3> - -<div id="foo" -*hi* - -<h3 id="example-125">Example 125</h3> - -<div class -foo - -<h3 id="example-126">Example 126</h3> - -<div *???-&&&-<--- -*foo* - -<h3 id="example-127">Example 127</h3> - -<div><a href="bar">*foo*</a></div> - -<h3 id="example-128">Example 128</h3> - -<table><tr><td> -foo -</td></tr></table> - -<h3 id="example-129">Example 129</h3> - -<div></div> -``` c -int x = 33; -``` - -<h3 id="example-130">Example 130</h3> - -<a href="foo"> -*bar* -</a> - -<h3 id="example-131">Example 131</h3> - -<Warning> -*bar* -</Warning> - -<h3 id="example-132">Example 132</h3> - -<i class="foo"> -*bar* -</i> - -<h3 id="example-133">Example 133</h3> - -</ins> -*bar* - -<h3 id="example-134">Example 134</h3> - -<del> -*foo* -</del> - -<h3 id="example-135">Example 135</h3> - -<del> -<p><em>foo</em></p> -</del> - -<h3 id="example-136">Example 136</h3> - -<p><del><em>foo</em></del></p> - -<h3 id="example-137">Example 137</h3> - -<pre language="haskell"><code> -import Text.HTML.TagSoup - -main :: IO () -main = print $ parseTags tags -</code></pre> -<p>okay</p> - -<h3 id="example-138">Example 138</h3> - -<script type="text/javascript"> -// JavaScript example - -document.getElementById("demo").innerHTML = "Hello JavaScript!"; -</script> -<p>okay</p> - -<h3 id="example-139">Example 139</h3> - -<style - type="text/css"> -h1 {color:red;} - -p {color:blue;} -</style> -<p>okay</p> - -<h3 id="example-141">Example 141</h3> - -<blockquote> -<div> -foo -</blockquote> -<p>bar</p> - -<h3 id="example-142">Example 142</h3> - -<ul> -<li> -<div> -</li> -<li>foo</li> -</ul> - -<h3 id="example-143">Example 143</h3> - -<style>p{color:red;}</style> -<p><em>foo</em></p> - -<h3 id="example-144">Example 144</h3> - -<!-- foo -->*bar* -<p><em>baz</em></p> - -<h3 id="example-145">Example 145</h3> - -<script> -foo -</script>1. *bar* - -<h3 id="example-146">Example 146</h3> - -<!-- Foo - -bar - baz --> -<p>okay</p> - -<h3 id="example-147">Example 147</h3> - -<?php - - echo '>'; - -?> -<p>okay</p> - -<h3 id="example-148">Example 148</h3> - -<!DOCTYPE html> - -<h3 id="example-149">Example 149</h3> - -<![CDATA[ -function matchwo(a,b) -{ - if (a < b && a < 0) then { - return 1; - - } else { - - return 0; - } -} -]]> -<p>okay</p> - -<h3 id="example-150">Example 150</h3> - - <!-- foo --> -<pre><code><!-- foo --> -</code></pre> - -<h3 id="example-151">Example 151</h3> - - <div> -<pre><code><div> -</code></pre> - -<h3 id="example-152">Example 152</h3> - -<p>Foo</p> -<div> -bar -</div> - -<h3 id="example-153">Example 153</h3> - -<div> -bar -</div> -*foo* - -<h3 id="example-154">Example 154</h3> - -<p>Foo -<a href="bar"> -baz</p> - -<h3 id="example-155">Example 155</h3> - -<div> -<p><em>Emphasized</em> text.</p> -</div> - -<h3 id="example-156">Example 156</h3> - -<div> -*Emphasized* text. -</div> - -<h3 id="example-157">Example 157</h3> - -<table> -<tr> -<td> -Hi -</td> -</tr> -</table> - -<h3 id="example-158">Example 158</h3> - -<table> - <tr> -<pre><code><td> - Hi -</td> -</code></pre> - </tr> -</table> - -<h3 id="example-140">Example 140</h3> - -<p>If there is no matching end tag, the block will end at the end of the document (or the enclosing block quote or list item):</p> - -<style - type="text/css"> - -foo diff --git a/packages/markdown/marked/test/new/cm_html_blocks.md b/packages/markdown/marked/test/new/cm_html_blocks.md deleted file mode 100644 index 0372245f..00000000 --- a/packages/markdown/marked/test/new/cm_html_blocks.md +++ /dev/null @@ -1,312 +0,0 @@ -HTML blocks -=================== - -### Example 116 - -<table><tr><td> -<pre> -**Hello**, - -_world_. -</pre> -</td></tr></table> - -### Example 117 - -<table> - <tr> - <td> - hi - </td> - </tr> -</table> - -okay. - -### Example 118 - - <div> - *hello* - <foo><a> - -### Example 119 - -</div> -*foo* - -### Example 120 - -<DIV CLASS="foo"> - -*Markdown* - -</DIV> - -### Example 121 - -<div id="foo" - class="bar"> -</div> - -### Example 122 - -<div id="foo" class="bar - baz"> -</div> - -### Example 123 - -<div> -*foo* - -*bar* - -### Example 124 - -<div id="foo" -*hi* - -### Example 125 - -<div class -foo - -### Example 126 - -<div *???-&&&-<--- -*foo* - -### Example 127 - -<div><a href="bar">*foo*</a></div> - -### Example 128 - -<table><tr><td> -foo -</td></tr></table> - -### Example 129 - -<div></div> -``` c -int x = 33; -``` - -### Example 130 - -<a href="foo"> -*bar* -</a> - -### Example 131 - -<Warning> -*bar* -</Warning> - -### Example 132 - -<i class="foo"> -*bar* -</i> - -### Example 133 - -</ins> -*bar* - -### Example 134 - -<del> -*foo* -</del> - -### Example 135 - -<del> - -*foo* - -</del> - -### Example 136 - -<del>*foo*</del> - -### Example 137 - -<pre language="haskell"><code> -import Text.HTML.TagSoup - -main :: IO () -main = print $ parseTags tags -</code></pre> -okay - -### Example 138 - -<script type="text/javascript"> -// JavaScript example - -document.getElementById("demo").innerHTML = "Hello JavaScript!"; -</script> -okay - -### Example 139 - -<style - type="text/css"> -h1 {color:red;} - -p {color:blue;} -</style> -okay - -### Example 141 - -> <div> -> foo - -bar - -### Example 142 - -- <div> -- foo - -### Example 143 - -<style>p{color:red;}</style> -*foo* - -### Example 144 - -<!-- foo -->*bar* -*baz* - -### Example 145 - -<script> -foo -</script>1. *bar* - -### Example 146 - -<!-- Foo - -bar - baz --> -okay - -### Example 147 - -<?php - - echo '>'; - -?> -okay - -### Example 148 - -<!DOCTYPE html> - -### Example 149 - -<![CDATA[ -function matchwo(a,b) -{ - if (a < b && a < 0) then { - return 1; - - } else { - - return 0; - } -} -]]> -okay - -### Example 150 - - <!-- foo --> - - <!-- foo --> - -### Example 151 - - <div> - - <div> - -### Example 152 - -Foo -<div> -bar -</div> - -### Example 153 - -<div> -bar -</div> -*foo* - -### Example 154 - -Foo -<a href="bar"> -baz - -### Example 155 - -<div> - -*Emphasized* text. - -</div> - -### Example 156 - -<div> -*Emphasized* text. -</div> - -### Example 157 - -<table> - -<tr> - -<td> -Hi -</td> - -</tr> - -</table> - -### Example 158 - -<table> - - <tr> - - <td> - Hi - </td> - - </tr> - -</table> - -### Example 140 - -If there is no matching end tag, the block will end at the end of the document (or the enclosing block quote or list item): - -<style - type="text/css"> - -foo
\ No newline at end of file diff --git a/packages/markdown/marked/test/new/cm_link_defs.html b/packages/markdown/marked/test/new/cm_link_defs.html deleted file mode 100644 index 8763ca15..00000000 --- a/packages/markdown/marked/test/new/cm_link_defs.html +++ /dev/null @@ -1,115 +0,0 @@ -<h3 id="example-159">Example 159</h3> - -<p><a href="/url" title="title">foo159</a></p> - -<h3 id="example-160">Example 160</h3> - -<p><a href="/url" title="the title">foo160</a></p> - -<h3 id="example-161">Example 161</h3> - -<p><a href="my_(url)" title="title (with parens)">Foo161*bar]</a></p> - -<h3 id="example-162">Example 162</h3> - -<p><a href="my%20url" title="title">Foo162 bar</a></p> - -<h3 id="example-163">Example 163</h3> - -<p><a href="/url" title=" -title -line1 -line2 -">foo163</a></p> - -<h3 id="example-164">Example 164</h3> - -<p>[foo164]: /url 'title</p> -<p>with blank line'</p> -<p>[foo164]</p> - -<h3 id="example-165">Example 165</h3> - -<p><a href="/url">foo165</a></p> - -<h3 id="example-166">Example 166</h3> - -<p>[foo166]:</p> -<p>[foo166]</p> - -<h3 id="example-167">Example 167</h3> - -<pre><code>[foo167]: /url\bar\*baz "foo\"bar\baz" - -[foo167] - -should render to - -<p><a href="/url%5Cbar*baz" title="foo&quot;bar\baz">foo167</a></p></code></pre> - -<h3 id="example-168">Example 168</h3> - -<p><a href="url">foo168</a></p> - -<h3 id="example-169">Example 169</h3> - -<p><a href="first">foo169</a></p> - -<h3 id="example-170">Example 170</h3> - -<p><a href="/url">Foo170</a></p> - -<h3 id="example-171">Example 171</h3> - -<p><a href="/%CF%86%CE%BF%CF%85">αγω</a></p> - -<h3 id="example-172">Example 172</h3> - -<h3 id="example-173">Example 173</h3> - -<p>bar</p> - -<h3 id="example-174">Example 174</h3> - -<p>[foo174]: /url "title" ok</p> - -<h3 id="example-175">Example 175</h3> - -<p>"title" ok</p> - -<h3 id="example-176">Example 176</h3> - -<pre><code>[foo176]: /url "title" -</code></pre> -<p>[foo176]</p> - -<h3 id="example-177">Example 177</h3> - -<pre><code>[foo177]: /url -</code></pre> -<p>[foo177]</p> - -<h3 id="example-178">Example 178</h3> - -<p>Foo -[bar178]: /baz</p> -<p>[bar178]</p> - -<h3 id="example-179">Example 179</h3> - -<h1 id="foo179"><a href="/url">Foo179</a></h1> -<blockquote> -<p>bar</p> -</blockquote> - -<h3 id="example-180">Example 180</h3> - -<p><a href="/foo-url" title="foo">foo180</a>, -<a href="/bar-url" title="bar">bar180</a>, -<a href="/baz-url">baz180</a></p> - -<h3 id="example-181">Example 181</h3> - -<p><a href="/url">foo181</a></p> -<blockquote> -</blockquote>
\ No newline at end of file diff --git a/packages/markdown/marked/test/new/cm_link_defs.md b/packages/markdown/marked/test/new/cm_link_defs.md deleted file mode 100644 index 74684f21..00000000 --- a/packages/markdown/marked/test/new/cm_link_defs.md +++ /dev/null @@ -1,157 +0,0 @@ -### Example 159 - -[foo159]: /url "title" - -[foo159] - -### Example 160 - - [foo160]: - /url - 'the title' - -[foo160] - -### Example 161 - -[Foo161*bar\]]:my_(url) 'title (with parens)' - -[Foo161*bar\]] - -### Example 162 - -[Foo162 bar]: -<my%20url> -'title' - -[Foo162 bar] - -### Example 163 - -[foo163]: /url ' -title -line1 -line2 -' - -[foo163] - -### Example 164 - -[foo164]: /url 'title - -with blank line' - -[foo164] - -### Example 165 - -[foo165]: -/url - -[foo165] - -### Example 166 - -[foo166]: - -[foo166] - -### Example 167 - - [foo167]: /url\bar\*baz "foo\"bar\baz" - - [foo167] - - should render to - - <p><a href="/url%5Cbar*baz" title="foo"bar\baz">foo167</a></p> - -### Example 168 - -[foo168] - -[foo168]: url - -### Example 169 - -[foo169] - -[foo169]: first -[foo169]: second - -### Example 170 - -[FOO170]: /url - -[Foo170] - -### Example 171 - -[ΑΓΩ]: /φου - -[αγω] - -### Example 172 - -[foo172]: /url - -### Example 173 - -[ -foo173 -]: /url -bar - -### Example 174 - -[foo174]: /url "title" ok - -### Example 175 - -[foo175]: /url -"title" ok - -### Example 176 - - [foo176]: /url "title" - -[foo176] - -### Example 177 - -``` -[foo177]: /url -``` - -[foo177] - -### Example 178 - -Foo -[bar178]: /baz - -[bar178] - -### Example 179 - -# [Foo179] -[foo179]: /url -> bar - -### Example 180 - -[foo180]: /foo-url "foo" -[bar180]: /bar-url - "bar" -[baz180]: /baz-url - -[foo180], -[bar180], -[baz180] - -### Example 181 - -[foo181] - -> [foo181]: /url
\ No newline at end of file diff --git a/packages/markdown/marked/test/new/cm_links.html b/packages/markdown/marked/test/new/cm_links.html deleted file mode 100644 index 08c65e7c..00000000 --- a/packages/markdown/marked/test/new/cm_links.html +++ /dev/null @@ -1,397 +0,0 @@ -<h1 id="links">Links</h1> - -<h3 id="example-459">Example 459</h3> - -<p><a href="/uri" title="title">link</a></p> - -<h3 id="example-460">Example 460</h3> - -<p><a href="/uri">link</a></p> - -<h3 id="example-461">Example 461</h3> - -<p><a href="">link</a></p> - -<h3 id="example-462">Example 462</h3> - -<p><a href="">link</a></p> - -<h3 id="example-463">Example 463</h3> - -<p>[link](/my uri)</p> - -<h3 id="example-464">Example 464</h3> - -<p>[link](</my uri>)</p> - -<h3 id="example-465">Example 465</h3> - -<p>[link](foo -bar)</p> - -<h3 id="example-466">Example 466</h3> - -<p>[link](<foo -bar>)</p> - -<h3 id="example-467">Example 467</h3> - -<p><a href="(foo)">link</a></p> - -<h3 id="example-4680">Example 4680</h3> - -<p>ONE LEVEL of parentheses are allowed without escaping, as long as they are balanced:</p> - -<p><a href="foo(bar)">link</a></p> - -<h3 id="example-469">Example 469</h3> - -<p><a href="foo(and(bar)">link</a></p> - -<h3 id="example-470">Example 470</h3> - -<p>However, if you have ANY unbalanced parentheses, you need to escape or use the <...> form:</p> - -<p><a href="foo(and(bar)">link</a></p> - -<h3 id="example-471">Example 471</h3> - -<p><a href="foo):">link</a></p> - -<h3 id="example-472">Example 472</h3> - -<p><a href="#fragment">link</a></p> -<p><a href="http://example.com#fragment">link</a></p> -<p><a href="http://example.com?foo=3#frag">link</a></p> - -<h3 id="example-473">Example 473</h3> - -<p><a href="foo%5Cbar">link</a></p> - -<h3 id="example-4740">Example 4740</h3> - -<p><a href="foo%20bä">link</a></p> - -<h3 id="example-475">Example 475</h3> - -<p><a href="%22title%22">link</a></p> - -<h3 id="example-476">Example 476</h3> - -<p><a href="/url" title="title">link</a> -<a href="/url" title="title">link</a> -<a href="/url" title="title">link</a></p> - -<h3 id="example-477">Example 477</h3> - -<p><a href="/url" title="title """>link</a></p> - -<h3 id="example-479">Example 479</h3> - -<p>[link](/url "title "and" title")</p> - -<h3 id="example-480">Example 480</h3> - -<p><a href="/url" title="title "and" title">link</a></p> - -<h3 id="example-481">Example 481</h3> - -<p><a href="/uri" title="title">link</a></p> - -<h3 id="example-482">Example 482</h3> - -<p>[link] (/uri)</p> - -<h3 id="example-4830">Example 4830</h3> - -<p>The link text may contain ONE LEVEL of balanced brackets, but not unbalanced ones, unless they are escaped:</p> - -<p><a href="/uri">link [foo4830]</a></p> - -<h3 id="example-484">Example 484</h3> - -<p>[link] bar](/uri)</p> - -<h3 id="example-485">Example 485</h3> - -<p>[link <a href="/uri">bar</a></p> - -<h3 id="example-486">Example 486</h3> - -<p><a href="/uri">link [bar</a></p> - -<h3 id="example-487">Example 487</h3> - -<p><a href="/uri">link <em>foo <strong>bar</strong> <code>#</code></em></a></p> - -<h3 id="example-488">Example 488</h3> - -<p><a href="/uri"><img src="moon.jpg" alt="moon" /></a></p> - -<h3 id="example-493">Example 493</h3> - -<p><a href="baz*">foo *bar</a></p> - -<h3 id="example-494">Example 494</h3> - -<p><em>foo [bar</em> baz]</p> - -<h3 id="example-498">Example 498</h3> - -<p><a href="/url" title="title">foo</a></p> - -<h3 id="example-4990">Example 4990</h3> - -<p><a href="/uri">link [foo499]</a></p> - -<h3 id="example-500">Example 500</h3> - -<p><a href="/uri">link [bar</a></p> - -<h3 id="example-501">Example 501</h3> - -<p><a href="/uri">link <em>foo <strong>bar</strong> <code>#</code></em></a></p> - -<h3 id="example-502">Example 502</h3> - -<p><a href="/uri"><img src="moon.jpg" alt="moon" /></a></p> - -<h3 id="example-5030">Example 5030</h3> - -<p><a href="/uri">foo <a href="/uri">bar</a></a></p> - -<h3 id="example-504">Example 504</h3> - -<p><a href="/uri">foo <em>bar <a href="/uri">baz</a></em></a></p> - -<h3 id="example-506">Example 506</h3> - -<p><a href="/uri">foo *bar</a></p> - -<h3 id="example-510">Example 510</h3> - -<p><a href="/url" title="title">foo</a></p> - -<h3 id="example-511">Example 511</h3> - -<p><a href="/url">Толпой</a> is a Russian word.</p> - -<h3 id="example-512">Example 512</h3> - -<p><a href="/url">Baz</a></p> - -<h3 id="example-513">Example 513</h3> - -<p>[foo513] <a href="/url" title="title">bar513</a></p> - -<h3 id="example-514">Example 514</h3> - -<p>[foo514] -<a href="/url" title="title">bar514</a></p> - -<h3 id="example-515">Example 515</h3> - -<p><a href="/url1">bar</a></p> - -<h3 id="example-516">Example 516</h3> - -<p>[bar][foo!516]</p> - -<h3 id="example-517">Example 517</h3> - -<p>[foo517][ref[517]</p> -<p>[ref[517]: /uri</p> - -<h3 id="example-518">Example 518</h3> - -<p>[foo518][ref[bar518]518]</p> -<p>[ref[bar518]518]: /uri</p> - -<h3 id="example-519">Example 519</h3> - -<p>[[[foo519]]]</p> -<p>[[[foo519]]]: /url</p> - -<h3 id="example-520">Example 520</h3> - -<p><a href="/uri">foo</a></p> - -<h3 id="example-521">Example 521</h3> - -<p><a href="/uri">bar\</a></p> - -<h3 id="example-522">Example 522</h3> - -<p>[]</p> -<p>[]: /uri</p> - -<h3 id="example-523">Example 523</h3> - -<p>[ - ]</p> -<p>[ - ]: /uri</p> - -<h3 id="example-524">Example 524</h3> - -<p><a href="/url" title="title">foo</a></p> - -<h3 id="example-525">Example 525</h3> - -<p><a href="/url" title="title"><em>foo</em> bar</a></p> - -<h3 id="example-526">Example 526</h3> - -<p><a href="/url" title="title">Foo</a></p> - -<h3 id="example-527">Example 527</h3> - -<p><a href="/url" title="title">foo</a> -[]</p> - -<h3 id="example-528">Example 528</h3> - -<p><a href="/url" title="title">foo</a></p> - -<h3 id="example-529">Example 529</h3> - -<p><a href="/url" title="title"><em>foo</em> bar</a></p> - -<h3 id="example-530">Example 530</h3> - -<p>[<a href="/url" title="title"><em>foo</em> bar</a>]</p> - -<h3 id="example-531">Example 531</h3> - -<p>[[bar <a href="/url">foo531</a></p> - -<h3 id="example-532">Example 532</h3> - -<p><a href="/url" title="title">Foo</a></p> - -<h3 id="example-533">Example 533</h3> - -<p><a href="/url">foo533</a> bar</p> - -<h3 id="example-534">Example 534</h3> - -<p>[foo]</p> - -<h3 id="example-536">Example 536</h3> - -<p><a href="/url2">foo536</a></p> - -<h3 id="example-537">Example 537</h3> - -<p><a href="/url1">foo537</a></p> - -<h3 id="example-538">Example 538</h3> - -<p><a href="">foo538</a></p> - -<h3 id="example-539">Example 539</h3> - -<p><a href="/url1">foo539</a>(not a link)</p> - -<h3 id="example-540">Example 540</h3> - -<p>[foo540]<a href="/url">bar540</a></p> - -<h3 id="example-541">Example 541</h3> - -<p><a href="/url2">foo541</a><a href="/url1">baz541</a></p> - -<h3 id="example-542">Example 542</h3> - -<p>[foo542]<a href="/url1">bar542</a></p> - -<h3 id="example-543">Example 543</h3> - -<p><img src="/url" alt="foo543" title="title" /></p> - -<h3 id="example-5440">Example 5440</h3> - -<p><img src="train.jpg" alt="foo *bar*544" title="train & tracks" /></p> - -<h3 id="example-5450">Example 5450</h3> - -<p><img src="/url2" alt="foo ![bar](/url)" /></p> - -<h3 id="example-5460">Example 5460</h3> - -<p><img src="/url2" alt="foo [bar](/url)" /></p> - -<h3 id="example-5470">Example 5470</h3> - -<p><img src="train.jpg" alt="foo *bar*547" title="train & tracks" /></p> - -<h3 id="example-5480">Example 5480</h3> - -<p><img src="train.jpg" alt="foo *bar*" title="train & tracks" /></p> - -<h3 id="example-549">Example 549</h3> - -<p><img src="train.jpg" alt="foo" /></p> - -<h3 id="example-550">Example 550</h3> - -<p>My <img src="/path/to/train.jpg" alt="foo bar" title="title" /></p> - -<h3 id="example-551">Example 551</h3> - -<p><img src="url" alt="foo" /></p> - -<h3 id="example-552">Example 552</h3> - -<p><img src="/url" alt="" /></p> - -<h3 id="example-553">Example 553</h3> - -<p><img src="/url" alt="foo" /></p> - -<h3 id="example-554">Example 554</h3> - -<p><img src="/url" alt="foo" /></p> - -<h3 id="example-555">Example 555</h3> - -<p><img src="/url" alt="foo" title="title" /></p> - -<h3 id="example-5560">Example 5560</h3> - -<p><img src="/url" alt="*foo* bar" title="title" /></p> - -<h3 id="example-557">Example 557</h3> - -<p><img src="/url" alt="Foo" title="title" /></p> - -<h3 id="example-558">Example 558</h3> - -<p><img src="/url" alt="foo" title="title" /> -[]</p> - -<h3 id="example-559">Example 559</h3> - -<p><img src="/url" alt="foo" title="title" /></p> - -<h3 id="example-5600">Example 5600</h3> - -<p><img src="/url" alt="*foo* bar" title="title" /></p> - -<h3 id="example-561">Example 561</h3> - -<p>![[foo561]]</p> -<p>[[foo561]]: /url "title"</p> - -<h3 id="example-562">Example 562</h3> - -<p><img src="/url" alt="Foo" title="title" /></p> - -<h3 id="example-563">Example 563</h3> - -<p>![foo]</p> - -<h3 id="example-564">Example 564</h3> - -<p>!<a href="/url" title="title">foo</a></p> - diff --git a/packages/markdown/marked/test/new/cm_links.md b/packages/markdown/marked/test/new/cm_links.md deleted file mode 100644 index 11e90144..00000000 --- a/packages/markdown/marked/test/new/cm_links.md +++ /dev/null @@ -1,515 +0,0 @@ ---- -xhtml: true ---- - -Links -=================== - -### Example 459 - -[link](/uri "title") - -### Example 460 - -[link](/uri) - -### Example 461 - -[link]() - -### Example 462 - -[link](<>) - -### Example 463 - -[link](/my uri) - -### Example 464 - -[link](</my uri>) - -### Example 465 - -[link](foo -bar) - -### Example 466 - -[link](<foo -bar>) - -### Example 467 - -[link](\(foo\)) - -### Example 4680 - -ONE LEVEL of parentheses are allowed without escaping, as long as they are balanced: - -[link](foo(bar)) - -### Example 469 - -[link](foo\(and\(bar\)) - -### Example 470 - -However, if you have ANY unbalanced parentheses, you need to escape or use the <...> form: - -[link](<foo(and(bar)>) - -### Example 471 - -[link](foo\)\:) - -### Example 472 - -[link](#fragment) - -[link](http://example.com#fragment) - -[link](http://example.com?foo=3#frag) - -### Example 473 - -[link](foo\bar) - -### Example 4740 - -[link](foo%20bä) - -### Example 475 - -[link]("title") - -### Example 476 - -[link](/url "title") -[link](/url 'title') -[link](/url (title)) - -### Example 477 - -[link](/url "title \""") - -### Example 479 - -[link](/url "title "and" title") - -### Example 480 - -[link](/url 'title "and" title') - -### Example 481 - -[link]( /uri - "title" ) - -### Example 482 - -[link] (/uri) - -### Example 4830 - -The link text may contain ONE LEVEL of balanced brackets, but not unbalanced ones, unless they are escaped: - -[link [foo4830]](/uri) - -### Example 484 - -[link] bar](/uri) - -### Example 485 - -[link [bar](/uri) - -### Example 486 - -[link \[bar](/uri) - -### Example 487 - -[link *foo **bar** `#`*](/uri) - -### Example 488 - -[![moon](moon.jpg)](/uri) - -### Example 493 - -[foo *bar](baz*) - -### Example 494 - -*foo [bar* baz] - -### Example 498 - -[foo][bar] - -[bar]: /url "title" - -### Example 4990 - -[link [foo499]][ref499] - -[ref499]: /uri - -### Example 500 - -[link \[bar][ref] - -[ref]: /uri - -### Example 501 - -[link *foo **bar** `#`*][ref] - -[ref]: /uri - -### Example 502 - -[![moon](moon.jpg)][ref] - -[ref]: /uri - -### Example 5030 - -[foo [bar](/uri)][ref503] - -[ref503]: /uri - -### Example 504 - -[foo *bar [baz][ref504]*][ref504] - -[ref504]: /uri - -### Example 506 - -[foo *bar][ref] - -[ref]: /uri - -### Example 510 - -[foo][BaR] - -[bar]: /url "title" - -### Example 511 - -[Толпой][Толпой] is a Russian word. - -[ТОЛПОЙ]: /url - -### Example 512 - -[Foo - bar]: /url - -[Baz][Foo bar] - -### Example 513 - -[foo513] [bar513] - -[bar513]: /url "title" - -### Example 514 - -[foo514] -[bar514] - -[bar514]: /url "title" - -### Example 515 - -[foo515]: /url1 - -[foo515]: /url2 - -[bar][foo515] - -### Example 516 - -[bar][foo\!516] - -[foo!516]: /url - -### Example 517 - -[foo517][ref[517] - -[ref[517]: /uri - -### Example 518 - -[foo518][ref[bar518]518] - -[ref[bar518]518]: /uri - -### Example 519 - -[[[foo519]]] - -[[[foo519]]]: /url - -### Example 520 - -[foo][ref\[] - -[ref\[]: /uri - -### Example 521 - -[bar\\]: /uri - -[bar\\] - -### Example 522 - -[] - -[]: /uri - -### Example 523 - -[ - ] - -[ - ]: /uri - -### Example 524 - -[foo][] - -[foo]: /url "title" - -### Example 525 - -[*foo* bar][] - -[*foo* bar]: /url "title" - -### Example 526 - -[Foo][] - -[foo]: /url "title" - -### Example 527 - -[foo] -[] - -[foo]: /url "title" - -### Example 528 - -[foo] - -[foo]: /url "title" - -### Example 529 - -[*foo* bar] - -[*foo* bar]: /url "title" - -### Example 530 - -[[*foo* bar]] - -[*foo* bar]: /url "title" - -### Example 531 - -[[bar [foo531] - -[foo531]: /url - -### Example 532 - -[Foo] - -[foo]: /url "title" - -### Example 533 - -[foo533] bar - -[foo533]: /url - -### Example 534 - -\[foo] - -[foo534]: /url "title" - -### Example 536 - -[foo536][bar536] - -[foo536]: /url1 -[bar536]: /url2 - -### Example 537 - -[foo537][] - -[foo537]: /url1 - -### Example 538 - -[foo538]() - -[foo538]: /url1 - -### Example 539 - -[foo539](not a link) - -[foo539]: /url1 - -### Example 540 - -[foo540][bar540][baz540] - -[baz540]: /url - -### Example 541 - -[foo541][bar541][baz541] - -[baz541]: /url1 -[bar541]: /url2 - -### Example 542 - -[foo542][bar542][baz542] - -[baz542]: /url1 -[foo542]: /url2 - -### Example 543 - -![foo543](/url "title") - -### Example 5440 - -![foo *bar*544] - -[foo *bar*544]: train.jpg "train & tracks" - -### Example 5450 - -![foo ![bar](/url)](/url2) - -### Example 5460 - -![foo [bar](/url)](/url2) - -### Example 5470 - -![foo *bar*547][] - -[foo *bar*547]: train.jpg "train & tracks" - -### Example 5480 - -![foo *bar*][foobar548] - -[FOOBAR548]: train.jpg "train & tracks" - -### Example 549 - -![foo](train.jpg) - -### Example 550 - -My ![foo bar](/path/to/train.jpg "title" ) - -### Example 551 - -![foo](<url>) - -### Example 552 - -![](/url) - -### Example 553 - -![foo][bar553] - -[bar553]: /url - -### Example 554 - -![foo][bar554] - -[BAR554]: /url - -### Example 555 - -![foo][] - -[foo]: /url "title" - -### Example 5560 - -![*foo* bar][] - -[*foo* bar]: /url "title" - -### Example 557 - -![Foo][] - -[foo]: /url "title" - -### Example 558 - -![foo] -[] - -[foo]: /url "title" - -### Example 559 - -![foo] - -[foo]: /url "title" - -### Example 5600 - -![*foo* bar] - -[*foo* bar]: /url "title" - -### Example 561 - -![[foo561]] - -[[foo561]]: /url "title" - -### Example 562 - -![Foo] - -[foo]: /url "title" - -### Example 563 - -!\[foo] - -[foo]: /url "title" - -### Example 564 - -\![foo] - -[foo]: /url "title" - diff --git a/packages/markdown/marked/test/new/cm_raw_html.html b/packages/markdown/marked/test/new/cm_raw_html.html deleted file mode 100644 index f3da050e..00000000 --- a/packages/markdown/marked/test/new/cm_raw_html.html +++ /dev/null @@ -1,77 +0,0 @@ -<h1 id="raw-html">Raw HTML</h1> - -<h3 id="example-584">Example 584</h3> - -<p><a><bab><c2c></p> - -<h3 id="example-585">Example 585</h3> - -<p><a/><b2/></p> - -<h3 id="example-586">Example 586</h3> - -<p><a /><b2 -data="foo" ></p> - -<h3 id="example-587">Example 587</h3> - -<p><a foo="bar" bam = 'baz <em>"</em>' -_boolean zoop:33=zoop:33 /></p> - -<h3 id="example-588">Example 588</h3> - -<p>Foo <responsive-image src="foo.jpg" /></p> - -<h3 id="example-589">Example 589</h3> - -<p><33> <__></p> - -<h3 id="example-590">Example 590</h3> - -<p><a h*#ref="hi"></p> - -<h3 id="example-591">Example 591</h3> - -<p><a href="hi'> <a href=hi'></p> - -<h3 id="example-592">Example 592</h3> - -<p>< a>< -foo><bar/ ></p> - -<h3 id="example-593">Example 593</h3> - -<p><a href='bar'title=title></p> - -<h3 id="example-594">Example 594</h3> - -<p></a></foo ></p> - -<h3 id="example-595">Example 595</h3> - -<p></a href="foo"></p> - -<h3 id="example-596">Example 596</h3> - -<p>foo <!-- this is a -comment - with hyphen --></p> - -<h3 id="example-599">Example 599</h3> - -<p>foo <?php echo $a; ?></p> - -<h3 id="example-600">Example 600</h3> - -<p>foo <!ELEMENT br EMPTY></p> - -<h3 id="example-601">Example 601</h3> - -<p>foo <![CDATA[>&<]]></p> - -<h3 id="example-602">Example 602</h3> - -<p>foo <a href="ö"></p> - -<h3 id="example-603">Example 603</h3> - -<p>foo <a href="\*"></p> diff --git a/packages/markdown/marked/test/new/cm_raw_html.md b/packages/markdown/marked/test/new/cm_raw_html.md deleted file mode 100644 index becbb8a6..00000000 --- a/packages/markdown/marked/test/new/cm_raw_html.md +++ /dev/null @@ -1,78 +0,0 @@ -Raw HTML -=================== - -### Example 584 - -<a><bab><c2c> - -### Example 585 - -<a/><b2/> - -### Example 586 - -<a /><b2 -data="foo" > - -### Example 587 - -<a foo="bar" bam = 'baz <em>"</em>' -_boolean zoop:33=zoop:33 /> - -### Example 588 - -Foo <responsive-image src="foo.jpg" /> - -### Example 589 - -<33> <__> - -### Example 590 - -<a h*#ref="hi"> - -### Example 591 - -<a href="hi'> <a href=hi'> - -### Example 592 - -< a>< -foo><bar/ > - -### Example 593 - -<a href='bar'title=title> - -### Example 594 - -</a></foo > - -### Example 595 - -</a href="foo"> - -### Example 596 - -foo <!-- this is a -comment - with hyphen --> - -### Example 599 - -foo <?php echo $a; ?> - -### Example 600 - -foo <!ELEMENT br EMPTY> - -### Example 601 - -foo <![CDATA[>&<]]> - -### Example 602 - -foo <a href="ö"> - -### Example 603 - -foo <a href="\*"> diff --git a/packages/markdown/marked/test/new/cm_strong_and_em.html b/packages/markdown/marked/test/new/cm_strong_and_em.html deleted file mode 100644 index 084f6381..00000000 --- a/packages/markdown/marked/test/new/cm_strong_and_em.html +++ /dev/null @@ -1,7 +0,0 @@ -<p>So <em>a</em> single <em>word</em> followed <em>b</em>y <em>a</em>nother</p> - -<p>So <strong>a</strong> single <strong>word</strong> followed <strong>b</strong>y <strong>a</strong>nother</p> - -<p>So <em>a</em> single <em>word</em> followed <em>b</em>y <em>a</em>nother</p> - -<p>So <strong>a</strong> single <strong>word</strong> followed <strong>b</strong>y <strong>a</strong>nother</p> diff --git a/packages/markdown/marked/test/new/cm_strong_and_em.md b/packages/markdown/marked/test/new/cm_strong_and_em.md deleted file mode 100644 index 34b4a20b..00000000 --- a/packages/markdown/marked/test/new/cm_strong_and_em.md +++ /dev/null @@ -1,7 +0,0 @@ -So *a* single *word* followed *b*y *a*nother - -So **a** single **word** followed **b**y **a**nother - -So _a_ single _word_ followed _b_y _a_nother - -So __a__ single __word__ followed __b__y __a__nother diff --git a/packages/markdown/marked/test/new/cm_thematic_breaks.html b/packages/markdown/marked/test/new/cm_thematic_breaks.html deleted file mode 100644 index ec3f9f74..00000000 --- a/packages/markdown/marked/test/new/cm_thematic_breaks.html +++ /dev/null @@ -1,106 +0,0 @@ -<h1 id="thematic-breaks">Thematic breaks</h1> - -<h3 id="example-13">Example 13</h3> - -<hr> -<hr> -<hr> - -<h3 id="example-14">Example 14</h3> - -<p>+++</p> - -<h3 id="example-15">Example 15</h3> - -<p>===</p> - -<h3 id="example-16">Example 16</h3> - -<p>-- -** -__</p> - -<h3 id="example-17">Example 17</h3> - -<hr> -<hr> -<hr> - -<h3 id="example-18">Example 18</h3> - -<pre><code>*** -</code></pre> - -<h3 id="example-19">Example 19</h3> - -<p>Foo - ***</p> - -<h3 id="example-20">Example 20</h3> - -<hr> - -<h3 id="example-21">Example 21</h3> - -<hr> - -<h3 id="example-22">Example 22</h3> - -<hr> - -<h3 id="example-23">Example 23</h3> - -<hr> - -<h3 id="example-24">Example 24</h3> - -<hr> - -<h3 id="example-25">Example 25</h3> - -<p>_ _ _ _ a</p> -<p>a------</p> -<p>---a---</p> - - -<h3 id="example-26">Example 26</h3> - -<p> <em>-</em></p> - -<h3 id="example-27">Example 27</h3> - -<ul> -<li>foo</li> -</ul> -<hr> -<ul> -<li>bar</li> -</ul> - -<h3 id="example-28">Example 28</h3> - -<p>Foo</p> -<hr> -<p>bar</p> - -<h3 id="example-29">Example 29</h3> - -<h2 id="foo">Foo</h2> -<p>bar</p> - -<h3 id="example-30">Example 30</h3> - -<ul> -<li>Foo</li> -</ul> -<hr> -<ul> -<li>Bar</li> -</ul> - -<h3 id="example-31">Example 31</h3> - -<ul> -<li>Foo</li> -<li><hr></li> -</ul>
\ No newline at end of file diff --git a/packages/markdown/marked/test/new/cm_thematic_breaks.md b/packages/markdown/marked/test/new/cm_thematic_breaks.md deleted file mode 100644 index af28f8dd..00000000 --- a/packages/markdown/marked/test/new/cm_thematic_breaks.md +++ /dev/null @@ -1,98 +0,0 @@ -Thematic breaks -=================== - -### Example 13 - -*** ---- -___ - -### Example 14 - -+++ - -### Example 15 - -=== - -### Example 16 - --- -** -__ - -### Example 17 - - *** - *** - *** - -### Example 18 - - *** - -### Example 19 - -Foo - *** - -### Example 20 - -_____________________________________ - -### Example 21 - - - - - - -### Example 22 - - ** * ** * ** * ** - -### Example 23 - -- - - - - -### Example 24 - -- - - - - -### Example 25 - -_ _ _ _ a - -a------ - ----a--- - -### Example 26 - - *-* - -### Example 27 - -- foo -*** -- bar - -### Example 28 - -Foo -*** -bar - -### Example 29 - -Foo ---- -bar - -### Example 30 - -* Foo -* * * -* Bar - -### Example 31 - -- Foo -- * * * diff --git a/packages/markdown/marked/test/new/code_spans.html b/packages/markdown/marked/test/new/code_spans.html deleted file mode 100644 index ca220d80..00000000 --- a/packages/markdown/marked/test/new/code_spans.html +++ /dev/null @@ -1,3 +0,0 @@ -<p><code>someone@example.com</code></p> - -<p>``<em>test`</em></p>
\ No newline at end of file diff --git a/packages/markdown/marked/test/new/code_spans.md b/packages/markdown/marked/test/new/code_spans.md deleted file mode 100644 index 845a116a..00000000 --- a/packages/markdown/marked/test/new/code_spans.md +++ /dev/null @@ -1,3 +0,0 @@ -`someone@example.com` - -``*test`*
\ No newline at end of file diff --git a/packages/markdown/marked/test/new/def_blocks.html b/packages/markdown/marked/test/new/def_blocks.html deleted file mode 100644 index 5d8de49c..00000000 --- a/packages/markdown/marked/test/new/def_blocks.html +++ /dev/null @@ -1,30 +0,0 @@ -<blockquote> - <p>hello -[1]: hello</p> -</blockquote> - -<hr> - -<blockquote> - <p>hello -[2]: hello</p> -</blockquote> - - -<ul> -<li>hello</li> -<li>[3]: hello</li> -</ul> - - -<ul> -<li>hello</li> -</ul> - - -<blockquote> - <p>foo -bar -[5]: foo -bar</p> -</blockquote> diff --git a/packages/markdown/marked/test/new/def_blocks.md b/packages/markdown/marked/test/new/def_blocks.md deleted file mode 100644 index f58fa4d3..00000000 --- a/packages/markdown/marked/test/new/def_blocks.md +++ /dev/null @@ -1,21 +0,0 @@ -> hello -> [1]: hello - -* * * - -> hello -[2]: hello - - -* hello -* [3]: hello - - -* hello -[4]: hello - - -> foo -> bar -[5]: foo -> bar diff --git a/packages/markdown/marked/test/new/double_link.html b/packages/markdown/marked/test/new/double_link.html deleted file mode 100644 index ff68395a..00000000 --- a/packages/markdown/marked/test/new/double_link.html +++ /dev/null @@ -1,5 +0,0 @@ -<p>Already linked: <a href="http://example.com/">http://example.com/</a>.</p> - -<p>Already linked: <a href="http://example.com/">http://example.com/</a>.</p> - -<p>Already linked: <a href="http://example.com/"><strong>http://example.com/</strong></a>.</p> diff --git a/packages/markdown/marked/test/new/double_link.md b/packages/markdown/marked/test/new/double_link.md deleted file mode 100644 index 50216736..00000000 --- a/packages/markdown/marked/test/new/double_link.md +++ /dev/null @@ -1,5 +0,0 @@ -<p>Already linked: <a href="http://example.com/">http://example.com/</a>.</p> - -Already linked: [http://example.com/](http://example.com/). - -Already linked: <a href="http://example.com/">**http://example.com/**</a>. diff --git a/packages/markdown/marked/test/new/em_2char.html b/packages/markdown/marked/test/new/em_2char.html deleted file mode 100644 index 81da0a00..00000000 --- a/packages/markdown/marked/test/new/em_2char.html +++ /dev/null @@ -1,25 +0,0 @@ -<p><em>123</em></p> - -<p><em>123</em></p> - -<p><em>12</em></p> - -<p><em>12</em></p> - -<p><em>1</em></p> - -<p><em>1</em></p> - -<p>__</p> - -<p>**</p> - -<p>_123 _</p> - -<p>*123 *</p> - -<p>_ 123_</p> - -<p><em>1_</em></p> - -<p><em>1*</em></p> diff --git a/packages/markdown/marked/test/new/em_2char.md b/packages/markdown/marked/test/new/em_2char.md deleted file mode 100644 index ca8689aa..00000000 --- a/packages/markdown/marked/test/new/em_2char.md +++ /dev/null @@ -1,25 +0,0 @@ -_123_ - -*123* - -_12_ - -*12* - -_1_ - -*1* - -__ - -** - -_123 _ - -*123 * - -_ 123_ - -_1__ - -*1** diff --git a/packages/markdown/marked/test/new/emphasis_extra tests.html b/packages/markdown/marked/test/new/emphasis_extra tests.html deleted file mode 100644 index 0e2609cd..00000000 --- a/packages/markdown/marked/test/new/emphasis_extra tests.html +++ /dev/null @@ -1 +0,0 @@ -<p><em>test</em>. <em>test</em>: <em>test</em>! <em>test</em>? <em>test</em>-</p>
\ No newline at end of file diff --git a/packages/markdown/marked/test/new/emphasis_extra tests.md b/packages/markdown/marked/test/new/emphasis_extra tests.md deleted file mode 100644 index bf8afdc7..00000000 --- a/packages/markdown/marked/test/new/emphasis_extra tests.md +++ /dev/null @@ -1 +0,0 @@ -_test_. _test_: _test_! _test_? _test_-
\ No newline at end of file diff --git a/packages/markdown/marked/test/new/escaped_angles.html b/packages/markdown/marked/test/new/escaped_angles.html deleted file mode 100644 index aa3e73a4..00000000 --- a/packages/markdown/marked/test/new/escaped_angles.html +++ /dev/null @@ -1 +0,0 @@ -<p>></p> diff --git a/packages/markdown/marked/test/new/escaped_angles.md b/packages/markdown/marked/test/new/escaped_angles.md deleted file mode 100644 index db7422f1..00000000 --- a/packages/markdown/marked/test/new/escaped_angles.md +++ /dev/null @@ -1 +0,0 @@ -\> diff --git a/packages/markdown/marked/test/new/gfm_autolinks.html b/packages/markdown/marked/test/new/gfm_autolinks.html deleted file mode 100644 index 9058f2f2..00000000 --- a/packages/markdown/marked/test/new/gfm_autolinks.html +++ /dev/null @@ -1,83 +0,0 @@ -<p>link with . <a href="http://example.com/hello-world">http://example.com/hello-world</a>.</p> - -<p>link with ! <a href="http://example.com/hello-world">http://example.com/hello-world</a>!</p> - -<p>link with : <a href="http://example.com/hello-world">http://example.com/hello-world</a>:</p> - -<p>link with , <a href="http://example.com/hello-world">http://example.com/hello-world</a>,</p> - -<p>link with ; <a href="http://example.com/hello-world">http://example.com/hello-world</a>;</p> - -<p>link with ) <a href="http://example.com/hello-world">http://example.com/hello-world</a>)</p> - -<p>link with nothing <a href="http://example.com/hello-world">http://example.com/hello-world</a></p> - -<h3 id="example-597">Example 597</h3> - -<p>The scheme http will be inserted automatically:</p> - -<p><a href="http://www.commonmark.org">www.commonmark.org</a></p> -<h3 id="example-598">Example 598</h3> - -<p>After a valid domain, zero or more non-space non-< characters may follow:</p> - -<p>Visit <a href="http://www.commonmark.org/help">www.commonmark.org/help</a> for more information.</p> - -<h3 id="example-599">Example 599</h3> - -<p>Trailing punctuation (specifically, ?, !, ., ,, :, *, _, and ~) will not be considered part of the autolink, though they may be included in the interior of the link:</p> - -<p>Visit <a href="http://www.commonmark.org">www.commonmark.org</a>.</p> - -<p>Visit <a href="http://www.commonmark.org/a.b">www.commonmark.org/a.b</a>.</p> - -<h3 id="example-600">Example 600</h3> - -<p><a href="http://www.google.com/search?q=Markup+(business)">www.google.com/search?q=Markup+(business)</a></p> - -<p>(<a href="http://www.google.com/search?q=Markup+(business)">www.google.com/search?q=Markup+(business)</a>)</p> - -<h3 id="example-601">Example 601</h3> - -<p><a href="http://www.google.com/search?q=(business))+ok">www.google.com/search?q=(business))+ok</a></p> - -<h3 id="example-602">Example 602</h3> - -<p><a href="http://www.google.com/search?q=commonmark&hl=en">www.google.com/search?q=commonmark&hl=en</a></p> - -<p><a href="http://www.google.com/search?q=commonmark">www.google.com/search?q=commonmark</a>&</p> - -<h3 id="example-603">Example 603</h3> - -<p>< immediately ends an autolink.</p> - -<p><a href="http://www.commonmark.org/he">www.commonmark.org/he</a><lp</p> - -<h3 id="example-604">Example 604</h3> - -<p><a href="http://commonmark.org">http://commonmark.org</a></p> - -<p>(Visit <a href="https://encrypted.google.com/search?q=Markup+(business)">https://encrypted.google.com/search?q=Markup+(business)</a>)</p> - -<p>Anonymous FTP is available at <a href="ftp://foo.bar.baz">ftp://foo.bar.baz</a>.</p> - -<p>Extended email autolinks:</p> - -<h3 id="example-605">Example 605</h3> - -<p><a href="mailto:foo@bar.baz">foo@bar.baz</a></p> - -<h3 id="example-606">Example 606</h3> - -<p>hello@mail+xyz.example isn't valid, but <a href="mailto:hello+xyz@mail.example">hello+xyz@mail.example</a> is.</p> - -<h3 id="example-607">Example 607</h3> - -<p><a href="mailto:a.b-c_d@a.b">a.b-c_d@a.b</a></p> - -<p><a href="mailto:a.b-c_d@a.b">a.b-c_d@a.b</a>.</p> - -<p>a.b-c_d@a.b-</p> - -<pre><code>a.b-c_d@a.b_ -</code></pre>
\ No newline at end of file diff --git a/packages/markdown/marked/test/new/gfm_autolinks.md b/packages/markdown/marked/test/new/gfm_autolinks.md deleted file mode 100644 index 86b9a3ee..00000000 --- a/packages/markdown/marked/test/new/gfm_autolinks.md +++ /dev/null @@ -1,83 +0,0 @@ -link with . http://example.com/hello-world. - -link with ! http://example.com/hello-world! - -link with : http://example.com/hello-world: - -link with , http://example.com/hello-world, - -link with ; http://example.com/hello-world; - -link with ) http://example.com/hello-world) - -link with nothing http://example.com/hello-world - -### Example 597 - -The scheme http will be inserted automatically: - -www.commonmark.org - -### Example 598 - -After a valid domain, zero or more non-space non-< characters may follow: - -Visit www.commonmark.org/help for more information. - -### Example 599 - -Trailing punctuation (specifically, ?, !, ., ,, :, \*, \_, and ~) will not be considered part of the autolink, though they may be included in the interior of the link: - -Visit www.commonmark.org. - -Visit www.commonmark.org/a.b. - -### Example 600 - -www.google.com/search?q=Markup+(business) - -(www.google.com/search?q=Markup+(business)) - -### Example 601 - -www.google.com/search?q=(business))+ok - -### Example 602 - -www.google.com/search?q=commonmark&hl=en - -www.google.com/search?q=commonmark& - -### Example 603 - -< immediately ends an autolink. - -www.commonmark.org/he<lp - -### Example 604 - -http://commonmark.org - -(Visit https://encrypted.google.com/search?q=Markup+(business)) - -Anonymous FTP is available at ftp://foo.bar.baz. - -Extended email autolinks: - -### Example 605 - -foo@bar.baz - -### Example 606 - -hello@mail+xyz.example isn't valid, but hello+xyz@mail.example is. - -### Example 607 - -a.b-c_d@a.b - -a.b-c_d@a.b. - -a.b-c_d@a.b- - - a.b-c_d@a.b_ diff --git a/packages/markdown/marked/test/new/gfm_break.html b/packages/markdown/marked/test/new/gfm_break.html deleted file mode 100644 index 398ba018..00000000 --- a/packages/markdown/marked/test/new/gfm_break.html +++ /dev/null @@ -1 +0,0 @@ -<p>Look at the<br>pretty line<br>breaks.</p> diff --git a/packages/markdown/marked/test/new/gfm_break.md b/packages/markdown/marked/test/new/gfm_break.md deleted file mode 100644 index 5bf79a2b..00000000 --- a/packages/markdown/marked/test/new/gfm_break.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -breaks: true ---- -Look at the -pretty line -breaks. diff --git a/packages/markdown/marked/test/new/gfm_code.html b/packages/markdown/marked/test/new/gfm_code.html deleted file mode 100644 index 3e6b946f..00000000 --- a/packages/markdown/marked/test/new/gfm_code.html +++ /dev/null @@ -1,21 +0,0 @@ -<pre><code class="language-js">var a = 'hello'; -console.log(a + ' world');</code></pre> -<pre><code class="language-bash">echo "hello, ${WORLD}"</code></pre> -<pre><code class="language-longfence">Q: What do you call a tall person who sells stolen goods?</code></pre> -<pre><code class="language-ManyTildes">A longfence!</code></pre> -<p>How about an empty code block?</p> -<pre><code class="language-js"></code></pre> -<p>How about a code block with only an empty line?</p> -<pre><code class="language-js"> -</code></pre> - -<p>With some trailing empty lines:</p> -<pre><code>ciao - - -</code></pre> - -<p>Closing fences must lay on a new line:</p> -<pre><code>hello() -^``` -"this should still be in the code block!"</code></pre> diff --git a/packages/markdown/marked/test/new/gfm_code.md b/packages/markdown/marked/test/new/gfm_code.md deleted file mode 100644 index 79d06b16..00000000 --- a/packages/markdown/marked/test/new/gfm_code.md +++ /dev/null @@ -1,43 +0,0 @@ -``` js -var a = 'hello'; -console.log(a + ' world'); -``` - -~~~bash -echo "hello, ${WORLD}" -~~~ - -```````longfence -Q: What do you call a tall person who sells stolen goods? -``````` - -~~~~~~~~~~ ManyTildes -A longfence! -~~~~~~~~~~ - -How about an empty code block? - -```js -``` - -How about a code block with only an empty line? - -```js - -``` - -With some trailing empty lines: - -``` -ciao - - -``` - -Closing fences must lay on a new line: - -``` -hello() -^``` -"this should still be in the code block!" -``` diff --git a/packages/markdown/marked/test/new/gfm_code_hr_list.html b/packages/markdown/marked/test/new/gfm_code_hr_list.html deleted file mode 100644 index d15b52fe..00000000 --- a/packages/markdown/marked/test/new/gfm_code_hr_list.html +++ /dev/null @@ -1,52 +0,0 @@ -<h2 id="foo">foo</h2> -<ol> -<li><p>bar:</p> -<blockquote> -<ul> -<li>one<ul> -<li>two<ul> -<li>three</li> -<li>four</li> -<li>five</li> -</ul> -</li> -</ul> -</li> -</ul> -</blockquote> -</li> -<li><p>foo:</p> -<pre><code> line 1 - line 2</code></pre> -</li> -<li><p>foo:</p> -<ol> -<li><p>foo <code>bar</code> bar:</p> -<pre><code class="language-erb"> some code here -</code></pre> -</li> -<li><p>foo <code>bar</code> bar:</p> -<pre><code class="language-erb"> foo - --- - bar - --- - foo - bar</code></pre> -</li> -<li><p>foo <code>bar</code> bar:</p> -<pre><code class="language-html"> --- - foo - foo - --- - bar</code></pre> -</li> -<li><p>foo <code>bar</code> bar:</p> -<pre><code> foo - --- - bar</code></pre> -</li> -<li><p>foo</p> -</li> -</ol> -</li> -</ol> diff --git a/packages/markdown/marked/test/new/gfm_code_hr_list.md b/packages/markdown/marked/test/new/gfm_code_hr_list.md deleted file mode 100644 index 0eba4059..00000000 --- a/packages/markdown/marked/test/new/gfm_code_hr_list.md +++ /dev/null @@ -1,53 +0,0 @@ -## foo - -1. bar: - - > - one - - two - - three - - four - - five - -1. foo: - - ``` - line 1 - line 2 - ``` - -1. foo: - - 1. foo `bar` bar: - - ``` erb - some code here - ``` - - 2. foo `bar` bar: - - ``` erb - foo - --- - bar - --- - foo - bar - ``` - - 3. foo `bar` bar: - - ``` html - --- - foo - foo - --- - bar - ``` - - 4. foo `bar` bar: - - foo - --- - bar - - 5. foo diff --git a/packages/markdown/marked/test/new/gfm_em.html b/packages/markdown/marked/test/new/gfm_em.html deleted file mode 100644 index 8fac3466..00000000 --- a/packages/markdown/marked/test/new/gfm_em.html +++ /dev/null @@ -1 +0,0 @@ -<p>These words should_not_be_emphasized.</p> diff --git a/packages/markdown/marked/test/new/gfm_em.md b/packages/markdown/marked/test/new/gfm_em.md deleted file mode 100644 index 6319874b..00000000 --- a/packages/markdown/marked/test/new/gfm_em.md +++ /dev/null @@ -1 +0,0 @@ -These words should_not_be_emphasized. diff --git a/packages/markdown/marked/test/new/gfm_hashtag.html b/packages/markdown/marked/test/new/gfm_hashtag.html deleted file mode 100644 index 6f9e43f5..00000000 --- a/packages/markdown/marked/test/new/gfm_hashtag.html +++ /dev/null @@ -1,5 +0,0 @@ -<p>#header</p> - -<h1 id="header1">header1</h1> - -<h1 id="header2">header2</h1> diff --git a/packages/markdown/marked/test/new/gfm_hashtag.md b/packages/markdown/marked/test/new/gfm_hashtag.md deleted file mode 100644 index 5eb26bf1..00000000 --- a/packages/markdown/marked/test/new/gfm_hashtag.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -gfm: true ---- -#header - -# header1 - -# header2 diff --git a/packages/markdown/marked/test/new/gfm_links_invalid.html b/packages/markdown/marked/test/new/gfm_links_invalid.html deleted file mode 100644 index 4052efea..00000000 --- a/packages/markdown/marked/test/new/gfm_links_invalid.html +++ /dev/null @@ -1 +0,0 @@ -<p>This should not be linked: http://example.com/%ff</p> diff --git a/packages/markdown/marked/test/new/gfm_links_invalid.md b/packages/markdown/marked/test/new/gfm_links_invalid.md deleted file mode 100644 index 1b295d05..00000000 --- a/packages/markdown/marked/test/new/gfm_links_invalid.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -sanitize: true ---- -This should not be linked: http://example.com/%ff diff --git a/packages/markdown/marked/test/new/gfm_tables.html b/packages/markdown/marked/test/new/gfm_tables.html deleted file mode 100644 index 1c596573..00000000 --- a/packages/markdown/marked/test/new/gfm_tables.html +++ /dev/null @@ -1,37 +0,0 @@ -<table> - <thead> - <tr><th>Heading 1</th><th>Heading 2</th></tr> - </thead> - <tbody> - <tr><td>Cell 1</td><td>Cell 2</td></tr> - <tr><td>Cell 3</td><td>Cell 4</td></tr> - </tbody> -</table> -<table> - <thead> - <tr><th align="center">Header 1</th><th align="right">Header 2</th><th align="left">Header 3</th><th>Header 4</th></tr> - </thead> - <tbody> - <tr><td align="center">Cell 1</td><td align="right">Cell 2</td><td align="left">Cell 3</td><td>Cell 4</td></tr> - <tr><td align="center">Cell 5</td><td align="right">Cell 6</td><td align="left">Cell 7</td><td>Cell 8</td></tr> - </tbody> -</table> -<pre><code>Test code</code></pre> -<table> - <thead> - <tr><th>Header 1</th><th>Header 2</th></tr> - </thead> - <tbody> - <tr><td>Cell 1</td><td>Cell 2</td></tr> - <tr><td>Cell 3</td><td>Cell 4</td></tr> - </tbody> -</table> -<table> - <thead> - <tr><th align="left">Header 1</th><th align="center">Header 2</th><th align="right">Header 3</th><th>Header 4</th></tr> - </thead> - <tbody> - <tr><td align="left">Cell 1</td><td align="center">Cell 2</td><td align="right">Cell 3</td><td>Cell 4</td></tr> - <tr><td align="left"><em>Cell 5</em></td><td align="center">Cell 6</td><td align="right">Cell 7</td><td>Cell 8</td></tr> - </tbody> -</table> diff --git a/packages/markdown/marked/test/new/gfm_tables.md b/packages/markdown/marked/test/new/gfm_tables.md deleted file mode 100644 index 5fd6321c..00000000 --- a/packages/markdown/marked/test/new/gfm_tables.md +++ /dev/null @@ -1,21 +0,0 @@ -| Heading 1 | Heading 2 -| --------- | --------- -| Cell 1 | Cell 2 -| Cell 3 | Cell 4 - -| Header 1 | Header 2 | Header 3 | Header 4 | -| :------: | -------: | :------- | -------- | -| Cell 1 | Cell 2 | Cell 3 | Cell 4 | -| Cell 5 | Cell 6 | Cell 7 | Cell 8 | - - Test code - -Header 1 | Header 2 --------- | -------- -Cell 1 | Cell 2 -Cell 3 | Cell 4 - -Header 1|Header 2|Header 3|Header 4 -:-------|:------:|-------:|-------- -Cell 1 |Cell 2 |Cell 3 |Cell 4 -*Cell 5*|Cell 6 |Cell 7 |Cell 8 diff --git a/packages/markdown/marked/test/new/headings_id.html b/packages/markdown/marked/test/new/headings_id.html deleted file mode 100644 index 6f0ae49e..00000000 --- a/packages/markdown/marked/test/new/headings_id.html +++ /dev/null @@ -1,13 +0,0 @@ -<h3 id="heading-with-a-link">Heading with a <a href="http://github.com/">link</a></h3> - -<h3 id="heading-with-some-italic-text">Heading with some <em>italic text</em></h3> - -<h3 id="or-some-strong">Or some <strong>strong</strong></h3> - -<p>(which doesn't really make any difference, here)</p> - -<h3 id="or-even-code">Or even <code>code</code></h3> - -<h3 id="what-about-strikethrough">What about <del>strikethrough</del></h3> - -<h2 id="and-a-ref-link">And a ref <a href="/some/url" title="link to nowhere">link</a></h2>
\ No newline at end of file diff --git a/packages/markdown/marked/test/new/headings_id.md b/packages/markdown/marked/test/new/headings_id.md deleted file mode 100644 index fa8a4d82..00000000 --- a/packages/markdown/marked/test/new/headings_id.md +++ /dev/null @@ -1,14 +0,0 @@ -### Heading with a [link](http://github.com/) - -### Heading with some _italic text_ - -### Or some **strong** -(which doesn't really make any difference, here) - -### Or even `code` - -### What about ~~strikethrough~~ - -## And a ref [link][destination] - -[destination]: /some/url "link to nowhere"
\ No newline at end of file diff --git a/packages/markdown/marked/test/new/hr_list_break.html b/packages/markdown/marked/test/new/hr_list_break.html deleted file mode 100644 index bd3ad1f7..00000000 --- a/packages/markdown/marked/test/new/hr_list_break.html +++ /dev/null @@ -1,10 +0,0 @@ -<ul> -<li>hello -world</li> -<li>how -are</li> -</ul> - -<hr> - -<p>you today?</p> diff --git a/packages/markdown/marked/test/new/hr_list_break.md b/packages/markdown/marked/test/new/hr_list_break.md deleted file mode 100644 index 036fe479..00000000 --- a/packages/markdown/marked/test/new/hr_list_break.md +++ /dev/null @@ -1,6 +0,0 @@ -* hello -world -* how -are -* * * -you today? diff --git a/packages/markdown/marked/test/new/html_comments.html b/packages/markdown/marked/test/new/html_comments.html deleted file mode 100644 index 872b45f6..00000000 --- a/packages/markdown/marked/test/new/html_comments.html +++ /dev/null @@ -1,57 +0,0 @@ -<h3 id="example-1">Example 1</h3> - -<!-- comment --> - -<h3 id="example-2">Example 2</h3> - -<!----> - -<h3 id="example-3">Example 3</h3> - -<!-- --> - -<h3 id="example-4">Example 4</h3> - -<!-- - --> - -<h3 id="example-5">Example 5</h3> - -<!-- -- --> - -<h3 id="example-6">Example 6</h3> - -<!-- ---> - -<h3 id="example-7">Example 7</h3> - -<!-----> - -<h3 id="example-8">Example 8</h3> - -<!------> - -<h3 id="example-9">Example 9</h3> - -<!-- My favorite operators are > and <!--> - -<h3 id="example-10">Example 10</h3> - -<!-- multi -line -comment ---> - -<h3 id="example-11">Example 11</h3> - - <!-- indented comment --> - -<pre><code><!-- too much indentation --> -</code></pre> - -<h3 id="example-12">Example 12</h3> - -<p><!--> not a comment --></p> - -<p><!---> not a comment --></p> - -<!-- <!-- not a comment? --> --> diff --git a/packages/markdown/marked/test/new/html_comments.md b/packages/markdown/marked/test/new/html_comments.md deleted file mode 100644 index 06aff02e..00000000 --- a/packages/markdown/marked/test/new/html_comments.md +++ /dev/null @@ -1,56 +0,0 @@ -### Example 1 - -<!-- comment --> - -### Example 2 - -<!----> - -### Example 3 - -<!-- --> - -### Example 4 - -<!-- - --> - -### Example 5 - -<!-- -- --> - -### Example 6 - -<!-- ---> - -### Example 7 - -<!-----> - -### Example 8 - -<!------> - -### Example 9 - -<!-- My favorite operators are > and <!--> - -### Example 10 - -<!-- multi -line -comment ---> - -### Example 11 - - <!-- indented comment --> - - <!-- too much indentation --> - -### Example 12 - -<!--> not a comment --> - -<!---> not a comment --> - -<!-- <!-- not a comment? --> -->
\ No newline at end of file diff --git a/packages/markdown/marked/test/new/html_no_new_line.html b/packages/markdown/marked/test/new/html_no_new_line.html deleted file mode 100644 index a82e4a1c..00000000 --- a/packages/markdown/marked/test/new/html_no_new_line.html +++ /dev/null @@ -1 +0,0 @@ -<img src='sdfg'>
\ No newline at end of file diff --git a/packages/markdown/marked/test/new/html_no_new_line.md b/packages/markdown/marked/test/new/html_no_new_line.md deleted file mode 100644 index a82e4a1c..00000000 --- a/packages/markdown/marked/test/new/html_no_new_line.md +++ /dev/null @@ -1 +0,0 @@ -<img src='sdfg'>
\ No newline at end of file diff --git a/packages/markdown/marked/test/new/images.html b/packages/markdown/marked/test/new/images.html deleted file mode 100644 index 2d3da7e8..00000000 --- a/packages/markdown/marked/test/new/images.html +++ /dev/null @@ -1,5 +0,0 @@ -<p>Image</p> -<p>Image</p> -<p>Image</p> -<p>Image</p> -<p>Image</p> diff --git a/packages/markdown/marked/test/new/images.md b/packages/markdown/marked/test/new/images.md deleted file mode 100644 index c9d994a9..00000000 --- a/packages/markdown/marked/test/new/images.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -sanitize: true ---- -![Image](javascript:alert) - -![Image](vbscript:alert) - -![Image](javascript:alert(1)) - -![Image](javascript:document;alert(1)) - -![Image](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K) diff --git a/packages/markdown/marked/test/new/lazy_blockquotes.html b/packages/markdown/marked/test/new/lazy_blockquotes.html deleted file mode 100644 index a701d42a..00000000 --- a/packages/markdown/marked/test/new/lazy_blockquotes.html +++ /dev/null @@ -1,4 +0,0 @@ -<blockquote> - <p>hi there -bud</p> -</blockquote> diff --git a/packages/markdown/marked/test/new/lazy_blockquotes.md b/packages/markdown/marked/test/new/lazy_blockquotes.md deleted file mode 100644 index c0e0b154..00000000 --- a/packages/markdown/marked/test/new/lazy_blockquotes.md +++ /dev/null @@ -1,2 +0,0 @@ -> hi there -bud diff --git a/packages/markdown/marked/test/new/link_lt.html b/packages/markdown/marked/test/new/link_lt.html deleted file mode 100644 index ea48caa9..00000000 --- a/packages/markdown/marked/test/new/link_lt.html +++ /dev/null @@ -1 +0,0 @@ -<p><a href="%3Ctest">URL</a></p> diff --git a/packages/markdown/marked/test/new/link_lt.md b/packages/markdown/marked/test/new/link_lt.md deleted file mode 100644 index f4f9addd..00000000 --- a/packages/markdown/marked/test/new/link_lt.md +++ /dev/null @@ -1 +0,0 @@ -[URL](<test) diff --git a/packages/markdown/marked/test/new/link_tick_redos.html b/packages/markdown/marked/test/new/link_tick_redos.html deleted file mode 100644 index 4e4423bf..00000000 --- a/packages/markdown/marked/test/new/link_tick_redos.html +++ /dev/null @@ -1,31 +0,0 @@ -<p>dash_capstyle: ['butt' | 'round' | 'projecting'] -dash_joinstyle: ['miter' | 'round' | 'bevel'] -dashes: sequence of on/off ink in points -drawstyle: ['default' | 'steps' | 'steps-pre' | 'steps-mid' | 'steps-post'] -figure: a <code>~.Figure</code> instance -fillstyle: ['full' | 'left' | 'right' | 'bottom' | 'top' | 'none'] -gid: an id string -label: object -linestyle or ls: ['solid' | 'dashed', 'dashdot', 'dotted' | (offset, on-off-dash-seq) | <code>'-'</code> | <code>'--'</code> | <code>'-.'</code> | <code>':'</code> | <code>'None'</code> | <code>' '</code> | <code>''</code>] -linewidth or lw: float value in points -marker: :mod:<code>A valid marker style <matplotlib.markers></code> -markeredgecolor or mec: any matplotlib color -markeredgewidth or mew: float value in points -markerfacecolor or mfc: any matplotlib color -markerfacecoloralt or mfcalt: any matplotlib color -markersize or ms: float -markevery: [None | int | length-2 tuple of int | slice | list/array of int | float | length-2 tuple of float] -path_effects: <code>~.AbstractPathEffect</code> -picker: float distance in points or callable pick function <code>fn(artist, event)</code> -pickradius: float distance in points -rasterized: bool or None -sketch_params: (scale: float, length: float, randomness: float) -snap: bool or None -solid_capstyle: ['butt' | 'round' | 'projecting'] -solid_joinstyle: ['miter' | 'round' | 'bevel'] -transform: a :class:<code>matplotlib.transforms.Transform</code> instance -url: a url string -visible: bool -xdata: 1D array -ydata: 1D array -zorder: float</p> diff --git a/packages/markdown/marked/test/new/link_tick_redos.md b/packages/markdown/marked/test/new/link_tick_redos.md deleted file mode 100644 index 38c1107d..00000000 --- a/packages/markdown/marked/test/new/link_tick_redos.md +++ /dev/null @@ -1,31 +0,0 @@ - dash_capstyle: ['butt' | 'round' | 'projecting'] - dash_joinstyle: ['miter' | 'round' | 'bevel'] - dashes: sequence of on/off ink in points - drawstyle: ['default' | 'steps' | 'steps-pre' | 'steps-mid' | 'steps-post'] - figure: a `~.Figure` instance - fillstyle: ['full' | 'left' | 'right' | 'bottom' | 'top' | 'none'] - gid: an id string - label: object - linestyle or ls: ['solid' | 'dashed', 'dashdot', 'dotted' | (offset, on-off-dash-seq) | ``'-'`` | ``'--'`` | ``'-.'`` | ``':'`` | ``'None'`` | ``' '`` | ``''``] - linewidth or lw: float value in points - marker: :mod:`A valid marker style <matplotlib.markers>` - markeredgecolor or mec: any matplotlib color - markeredgewidth or mew: float value in points - markerfacecolor or mfc: any matplotlib color - markerfacecoloralt or mfcalt: any matplotlib color - markersize or ms: float - markevery: [None | int | length-2 tuple of int | slice | list/array of int | float | length-2 tuple of float] - path_effects: `~.AbstractPathEffect` - picker: float distance in points or callable pick function ``fn(artist, event)`` - pickradius: float distance in points - rasterized: bool or None - sketch_params: (scale: float, length: float, randomness: float) - snap: bool or None - solid_capstyle: ['butt' | 'round' | 'projecting'] - solid_joinstyle: ['miter' | 'round' | 'bevel'] - transform: a :class:`matplotlib.transforms.Transform` instance - url: a url string - visible: bool - xdata: 1D array - ydata: 1D array - zorder: float diff --git a/packages/markdown/marked/test/new/links.html b/packages/markdown/marked/test/new/links.html deleted file mode 100644 index c3cbaa0c..00000000 --- a/packages/markdown/marked/test/new/links.html +++ /dev/null @@ -1,3 +0,0 @@ -<p>Link: <a href="https://example.org/">constructor</a>.</p> - -<p><a href="https://example.com/1">One</a> (<a href="https://example.com/2">Two</a>) <a href="https://example.com/3">Three</a></p> diff --git a/packages/markdown/marked/test/new/links.md b/packages/markdown/marked/test/new/links.md deleted file mode 100644 index f53cbf13..00000000 --- a/packages/markdown/marked/test/new/links.md +++ /dev/null @@ -1,5 +0,0 @@ -Link: [constructor][]. - -[One](https://example.com/1) ([Two](https://example.com/2)) [Three](https://example.com/3) - -[constructor]: https://example.org/ diff --git a/packages/markdown/marked/test/new/list_item_text.html b/packages/markdown/marked/test/new/list_item_text.html deleted file mode 100644 index 142df366..00000000 --- a/packages/markdown/marked/test/new/list_item_text.html +++ /dev/null @@ -1 +0,0 @@ -<ul><li><p>item1</p> <ul><li>item2 </li></ul> <p>text</p> </li></ul> diff --git a/packages/markdown/marked/test/new/list_item_text.md b/packages/markdown/marked/test/new/list_item_text.md deleted file mode 100644 index a8f81b14..00000000 --- a/packages/markdown/marked/test/new/list_item_text.md +++ /dev/null @@ -1,5 +0,0 @@ - * item1 - - * item2 - - text diff --git a/packages/markdown/marked/test/new/list_table.html b/packages/markdown/marked/test/new/list_table.html deleted file mode 100644 index 3a8b6388..00000000 --- a/packages/markdown/marked/test/new/list_table.html +++ /dev/null @@ -1,44 +0,0 @@ -<ul> - <li> - <p>Table in list:</p> - <table> - <thead> - <tr> - <th>column1</th> - <th>column2</th> - </tr> - </thead> - <tbody> - <tr> - <td>value1</td> - <td>value2</td> - </tr> - <tr> - <td>value3</td> - <td>value4</td> - </tr> - </tbody> - </table> - </li> - <li> - <p>No leading pipe table in list:</p> - <table> - <thead> - <tr> - <th>column1</th> - <th>column2</th> - </tr> - </thead> - <tbody> - <tr> - <td>value1</td> - <td>value2</td> - </tr> - <tr> - <td>value3</td> - <td>value4</td> - </tr> - </tbody> - </table> - </li> -</ul> diff --git a/packages/markdown/marked/test/new/list_table.md b/packages/markdown/marked/test/new/list_table.md deleted file mode 100644 index 95541b11..00000000 --- a/packages/markdown/marked/test/new/list_table.md +++ /dev/null @@ -1,13 +0,0 @@ -* Table in list: - - | column1 | column2 | - |---------|---------| - | value1 | value2 | - | value3 | value4 | - -* No leading pipe table in list: - - column1 | column2 - --------|-------- - value1 | value2 - value3 | value4 diff --git a/packages/markdown/marked/test/new/main.html b/packages/markdown/marked/test/new/main.html deleted file mode 100644 index 8f78c4d3..00000000 --- a/packages/markdown/marked/test/new/main.html +++ /dev/null @@ -1,4 +0,0 @@ -<h1 id="a-heading">A heading</h1> <p>Just a note, I've found that I can't test my markdown parser vs others. For example, both markdown.js and showdown code blocks in lists wrong. They're also completely <a href="http://google.com/" title="Google">inconsistent</a> with regards to paragraphs in list items.</p> <p>A link. Not anymore.</p> <aside>This will make me fail the test because -markdown.js doesnt acknowledge arbitrary html blocks =/</aside> <ul><li><p>List Item 1</p></li><li><p>List Item 2 </p><ul><li>New List Item 1 Hi, this is a list item.</li><li>New List Item 2 Another item <pre><code>Code goes here. -Lots of it...</code></pre></li><li>New List Item 3 The last item</li></ul></li><li><p>List Item 3 The final item.</p></li><li><p>List Item 4 The real final item.</p></li></ul> <p>Paragraph.</p> <blockquote><ul><li>bq Item 1</li><li>bq Item 2 <ul><li>New bq Item 1</li><li>New bq Item 2 Text here</li></ul></li></ul></blockquote> <hr> <blockquote><p> Another blockquote! I really need to get more creative with mockup text.. markdown.js breaks here again</p></blockquote> <h2 id="another-heading">Another Heading</h2> <p>Hello <em>world</em>. Here is a <a href="//hello">link</a>. And an image <img src="src" alt="alt">.</p> <pre><code>Code goes here. -Lots of it...</code></pre> diff --git a/packages/markdown/marked/test/new/main.md b/packages/markdown/marked/test/new/main.md deleted file mode 100644 index 58e17a6a..00000000 --- a/packages/markdown/marked/test/new/main.md +++ /dev/null @@ -1,55 +0,0 @@ -[test]: http://google.com/ "Google" - -# A heading - -Just a note, I've found that I can't test my markdown parser vs others. -For example, both markdown.js and showdown code blocks in lists wrong. They're -also completely [inconsistent][test] with regards to paragraphs in list items. - -A link. Not anymore. - -<aside>This will make me fail the test because -markdown.js doesnt acknowledge arbitrary html blocks =/</aside> - -* List Item 1 - -* List Item 2 - * New List Item 1 - Hi, this is a list item. - * New List Item 2 - Another item - Code goes here. - Lots of it... - * New List Item 3 - The last item - -* List Item 3 -The final item. - -* List Item 4 -The real final item. - -Paragraph. - -> * bq Item 1 -> * bq Item 2 -> * New bq Item 1 -> * New bq Item 2 -> Text here - -* * * - -> Another blockquote! -> I really need to get -> more creative with -> mockup text.. -> markdown.js breaks here again - -Another Heading -------------- - -Hello *world*. Here is a [link](//hello). -And an image ![alt](src). - - Code goes here. - Lots of it... diff --git a/packages/markdown/marked/test/new/mangle_xss.html b/packages/markdown/marked/test/new/mangle_xss.html deleted file mode 100644 index 3abcb67f..00000000 --- a/packages/markdown/marked/test/new/mangle_xss.html +++ /dev/null @@ -1,3 +0,0 @@ -<p><<svg/onload="alert(1)"//@x></p> - -<p><bar"onclick="alert('XSS')"@foo></p> diff --git a/packages/markdown/marked/test/new/mangle_xss.md b/packages/markdown/marked/test/new/mangle_xss.md deleted file mode 100644 index 419bd124..00000000 --- a/packages/markdown/marked/test/new/mangle_xss.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -sanatize: true -mangle: false ---- -<<svg/onload="alert(1)"//@x> - -<bar"onclick="alert('XSS')"@foo> diff --git a/packages/markdown/marked/test/new/nested_code.html b/packages/markdown/marked/test/new/nested_code.html deleted file mode 100644 index c28a1628..00000000 --- a/packages/markdown/marked/test/new/nested_code.html +++ /dev/null @@ -1,9 +0,0 @@ -<p><code>hi ther `` ok ```</code></p> - -<p><code>`</code></p> - -<p><code>There is a literal backtick (`) here.</code></p> - -<p>A backtick-delimited string in a code span: <code>`foo`</code></p> - -<p>Please don't use any <code><blink></code> tags.</p>
\ No newline at end of file diff --git a/packages/markdown/marked/test/new/nested_code.md b/packages/markdown/marked/test/new/nested_code.md deleted file mode 100644 index adde4177..00000000 --- a/packages/markdown/marked/test/new/nested_code.md +++ /dev/null @@ -1,9 +0,0 @@ -````` hi ther `` ok ``` ````` - -`` ` `` - -``There is a literal backtick (`) here.`` - -A backtick-delimited string in a code span: `` `foo` `` - -Please don't use any `<blink>` tags.
\ No newline at end of file diff --git a/packages/markdown/marked/test/new/nested_em.html b/packages/markdown/marked/test/new/nested_em.html deleted file mode 100644 index 3ab4ec89..00000000 --- a/packages/markdown/marked/test/new/nested_em.html +++ /dev/null @@ -1,3 +0,0 @@ -<p><em>test <strong>test</strong> test</em></p> - -<p><em>test <strong>test</strong> test</em></p> diff --git a/packages/markdown/marked/test/new/nested_em.md b/packages/markdown/marked/test/new/nested_em.md deleted file mode 100644 index 550d0eb9..00000000 --- a/packages/markdown/marked/test/new/nested_em.md +++ /dev/null @@ -1,3 +0,0 @@ -*test **test** test* - -_test __test__ test_ diff --git a/packages/markdown/marked/test/new/nested_square_link.html b/packages/markdown/marked/test/new/nested_square_link.html deleted file mode 100644 index 7b6986a1..00000000 --- a/packages/markdown/marked/test/new/nested_square_link.html +++ /dev/null @@ -1,3 +0,0 @@ -<p><a href="/url">the <code>]</code> character</a></p> - -<p><a href="/url">the ` character</a></p> diff --git a/packages/markdown/marked/test/new/nested_square_link.md b/packages/markdown/marked/test/new/nested_square_link.md deleted file mode 100644 index 0f311e95..00000000 --- a/packages/markdown/marked/test/new/nested_square_link.md +++ /dev/null @@ -1,3 +0,0 @@ -[the `]` character](/url) - -[the ` character](/url) diff --git a/packages/markdown/marked/test/new/nogfm_hashtag.html b/packages/markdown/marked/test/new/nogfm_hashtag.html deleted file mode 100644 index ecd95d69..00000000 --- a/packages/markdown/marked/test/new/nogfm_hashtag.html +++ /dev/null @@ -1,5 +0,0 @@ -<h1 id="header">header</h1> - -<h1 id="header1">header1</h1> - -<h1 id="header2">header2</h1> diff --git a/packages/markdown/marked/test/new/nogfm_hashtag.md b/packages/markdown/marked/test/new/nogfm_hashtag.md deleted file mode 100644 index 4b805db4..00000000 --- a/packages/markdown/marked/test/new/nogfm_hashtag.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -gfm: false ---- -#header - -# header1 - -# header2 diff --git a/packages/markdown/marked/test/new/not_a_link.html b/packages/markdown/marked/test/new/not_a_link.html deleted file mode 100644 index a01685d2..00000000 --- a/packages/markdown/marked/test/new/not_a_link.html +++ /dev/null @@ -1 +0,0 @@ -<p>[test](not a link)</p> diff --git a/packages/markdown/marked/test/new/not_a_link.md b/packages/markdown/marked/test/new/not_a_link.md deleted file mode 100644 index 26f60437..00000000 --- a/packages/markdown/marked/test/new/not_a_link.md +++ /dev/null @@ -1 +0,0 @@ -\[test](not a link) diff --git a/packages/markdown/marked/test/new/ref_paren.html b/packages/markdown/marked/test/new/ref_paren.html deleted file mode 100644 index cff6977f..00000000 --- a/packages/markdown/marked/test/new/ref_paren.html +++ /dev/null @@ -1 +0,0 @@ -<p><a href="/url" title="there">hi</a></p> diff --git a/packages/markdown/marked/test/new/ref_paren.md b/packages/markdown/marked/test/new/ref_paren.md deleted file mode 100644 index aa97c91a..00000000 --- a/packages/markdown/marked/test/new/ref_paren.md +++ /dev/null @@ -1,3 +0,0 @@ -[hi] - -[hi]: /url (there) diff --git a/packages/markdown/marked/test/new/relative_urls.html b/packages/markdown/marked/test/new/relative_urls.html deleted file mode 100644 index ee7f3bff..00000000 --- a/packages/markdown/marked/test/new/relative_urls.html +++ /dev/null @@ -1,35 +0,0 @@ -<h1 id="absolutization-of-rfc-3986-uris">Absolutization of RFC 3986 URIs</h1> - -<h2 id="absolute-uri">Absolute URI</h2> - -<p><a href="http://example.com/"><img src="http://example.com/logo" alt="section 4.3"></a></p> - -<h2 id="network-path-reference">Network-path reference</h2> - -<p><a href="http://example.com/"><img src="http://example.com/logo" alt="section 4.2"></a></p> - -<h2 id="absolute-path">Absolute path</h2> - -<p><a href="http://example.com/path/to/content"><img src="http://example.com/path/to/img" alt="section 4.2"></a></p> - -<h2 id="relative-path">Relative path</h2> - -<p><a href="http://example.com/base/content"><img src="http://example.com/base/img" alt="section 4.2"></a></p> - -<h2 id="dot-relative-path">Dot-relative path</h2> - -<p><a href="http://example.com/base/./content"><img src="http://example.com/base/./img" alt="section 3.3"></a></p> - -<p><a href="http://example.com/base/../content"><img src="http://example.com/base/../img" alt="section 3.3"></a></p> - -<h2 id="same-document-query">Same-document query</h2> - -<p><a href="?"><img src="?type=image" alt="section 4.4"></a></p> - -<h2 id="same-document-fragment">Same-document fragment</h2> - -<p><a href="#"><img src="#img" alt="section 4.4"></a></p> - -<h2 id="empty">Empty</h2> - -<p><a href="">section 4.2</a></p> diff --git a/packages/markdown/marked/test/new/relative_urls.md b/packages/markdown/marked/test/new/relative_urls.md deleted file mode 100644 index 5ced8915..00000000 --- a/packages/markdown/marked/test/new/relative_urls.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -baseUrl: "http://example.com/base/" ---- -# Absolutization of RFC 3986 URIs - -## Absolute URI -[![section 4.3](http://example.com/logo)](http://example.com/) - -## Network-path reference -[![section 4.2](//example.com/logo)](//example.com/) - -## Absolute path -[![section 4.2](/path/to/img)](/path/to/content) - -## Relative path -[![section 4.2](img)](content) - -## Dot-relative path -[![section 3.3](./img)](./content) - -[![section 3.3](../img)](../content) - -## Same-document query -[![section 4.4](?type=image)](?) - -## Same-document fragment -[![section 4.4](#img)](#) - -## Empty -[section 4.2]() diff --git a/packages/markdown/marked/test/new/same_bullet.html b/packages/markdown/marked/test/new/same_bullet.html deleted file mode 100644 index 9220741c..00000000 --- a/packages/markdown/marked/test/new/same_bullet.html +++ /dev/null @@ -1,5 +0,0 @@ -<ul> -<li>test</li> -<li>test</li> -<li>test</li> -</ul> diff --git a/packages/markdown/marked/test/new/same_bullet.md b/packages/markdown/marked/test/new/same_bullet.md deleted file mode 100644 index 27a89675..00000000 --- a/packages/markdown/marked/test/new/same_bullet.md +++ /dev/null @@ -1,3 +0,0 @@ -* test -+ test -- test diff --git a/packages/markdown/marked/test/new/sanitize_links.html b/packages/markdown/marked/test/new/sanitize_links.html deleted file mode 100644 index 092ea471..00000000 --- a/packages/markdown/marked/test/new/sanitize_links.html +++ /dev/null @@ -1,5 +0,0 @@ -<p>URL</p> -<p>URL</p> -<p>URL</p> -<p>URL</p> -<p>URL</p> diff --git a/packages/markdown/marked/test/new/sanitize_links.md b/packages/markdown/marked/test/new/sanitize_links.md deleted file mode 100644 index 1850be4e..00000000 --- a/packages/markdown/marked/test/new/sanitize_links.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -sanitize: true ---- -[URL](javascript:alert) - -[URL](vbscript:alert) - -[URL](javascript:alert(1)) - -[URL](javascript:document;alert(1)) - -[URL](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K) diff --git a/packages/markdown/marked/test/new/smartypants.html b/packages/markdown/marked/test/new/smartypants.html deleted file mode 100644 index 33718eea..00000000 --- a/packages/markdown/marked/test/new/smartypants.html +++ /dev/null @@ -1,6 +0,0 @@ -<p>Hello world ‘how’ “are” you – today…</p> - -<p>“It’s a more ‘challenging’ smartypants test…”</p> - -<p>‘And,’ as a bonus — “one -multiline” test!</p> diff --git a/packages/markdown/marked/test/new/smartypants.md b/packages/markdown/marked/test/new/smartypants.md deleted file mode 100644 index 69225546..00000000 --- a/packages/markdown/marked/test/new/smartypants.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -smartypants: true ---- -Hello world 'how' "are" you -- today... - -"It's a more 'challenging' smartypants test..." - -'And,' as a bonus --- "one -multiline" test! diff --git a/packages/markdown/marked/test/new/smartypants_code.html b/packages/markdown/marked/test/new/smartypants_code.html deleted file mode 100644 index 3ceb5094..00000000 --- a/packages/markdown/marked/test/new/smartypants_code.html +++ /dev/null @@ -1,11 +0,0 @@ -<pre>&</pre> -<p><code>--foo</code> -<kbd>---foo</kbd></p> -<script>--foo</script> - -<p>Ensure that text such as custom tags that happen to -begin with the same letters as the above tags don’t -match and thus benefit from Smartypants-ing.</p> - -<p><script-custom>–foo</script-custom> -<code>--foo</code> <codebar –foo codebar></p> diff --git a/packages/markdown/marked/test/new/smartypants_code.md b/packages/markdown/marked/test/new/smartypants_code.md deleted file mode 100644 index 6c4c5233..00000000 --- a/packages/markdown/marked/test/new/smartypants_code.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -smartypants: true -description: SmartyPants does not modify characters within <pre>, <code>, <kbd>, or <script> tag blocks. -spec: https://daringfireball.net/projects/smartypants/ ---- -<pre>&</pre> -<code>--foo</code> -<kbd>---foo</kbd> -<script>--foo</script> - -Ensure that text such as custom tags that happen to -begin with the same letters as the above tags don't -match and thus benefit from Smartypants-ing. -<script-custom>--foo</script-custom> -`--foo` <codebar --foo codebar> diff --git a/packages/markdown/marked/test/new/table_cells.html b/packages/markdown/marked/test/new/table_cells.html deleted file mode 100644 index 694f7ddd..00000000 --- a/packages/markdown/marked/test/new/table_cells.html +++ /dev/null @@ -1,27 +0,0 @@ -<table><thead><tr><th>1</th></tr></thead><tbody><tr><td>1</td></tr></tbody></table> - -<table><thead><tr><th>1</th></tr></thead><tbody><tr><td>|</td></tr></tbody></table> - -<table><thead><tr><th>1</th></tr></thead><tbody><tr><td>1\1</td></tr></tbody></table> - -<table><thead><tr><th>1</th></tr></thead><tbody><tr><td>\\</td></tr></tbody></table> - -<table><thead><tr><th>1</th></tr></thead><tbody><tr><td>\\|</td></tr></tbody></table> - -<table><thead><tr><th>1</th><th>2</th></tr></thead><tbody><tr><td></td><td>2</td></tr></tbody></table> - -<table><thead><tr><th>1</th><th>2</th></tr></thead><tbody><tr><td>1|\</td><td>2|\</td></tr></tbody></table> - -<table><thead><tr><th>1</th><th>2</th></tr></thead><tbody><tr><td></td><td>2</td></tr></tbody></table> - -<table><thead><tr><th>1</th><th>2</th></tr></thead><tbody><tr><td>1|\</td><td>2|\</td></tr></tbody></table> - -<table><thead><tr><th>1</th><th>2</th></tr></thead><tbody><tr><td></td><td>2</td></tr></tbody></table> - -<table><thead><tr><th>1</th><th>2</th></tr></thead><tbody><tr><td>1</td><td>2|</td></tr></tbody></table> - -<table><thead><tr><th>1</th><th>2</th></tr></thead><tbody><tr><td>1</td><td>2|</td></tr></tbody></table> - -<table><thead><tr><th>1</th><th>2</th></tr></thead><tbody><tr><td>1</td><td>2|</td></tr></tbody></table> - -<table><thead><tr><th>1</th><th>2</th></tr></thead><tbody><tr><td>1</td><td>2|</td></tr></tbody></table> diff --git a/packages/markdown/marked/test/new/table_cells.md b/packages/markdown/marked/test/new/table_cells.md deleted file mode 100644 index 332298a6..00000000 --- a/packages/markdown/marked/test/new/table_cells.md +++ /dev/null @@ -1,55 +0,0 @@ -|1| -|-| -|1| - -|1| -|-| -|\|| - -|1| -|-| -|1\\1| - -|1| -|-| -|\\\\|| - -|1| -|-| -|\\\\\|| - -|1|2| -|-|-| -||2| - -|1|2| -|-|-| -|1\|\\|2\|\\| - -|1|2| -|-|-| -| |2| - -1|2 --|- -1\|\\|2\|\\ - -1|2 --|- - |2 - -1|2 --|- -1|2\| - -1|2 --|- -1|2\| - -|1|2| -|-|-| -|1|2\|| - -|1|2| -|-|-| -|1|2\|| diff --git a/packages/markdown/marked/test/new/toplevel_paragraphs.html b/packages/markdown/marked/test/new/toplevel_paragraphs.html deleted file mode 100644 index 7fd50947..00000000 --- a/packages/markdown/marked/test/new/toplevel_paragraphs.html +++ /dev/null @@ -1,34 +0,0 @@ -<p>hello world - text after spaces - text after spaces</p> - -<p>paragraph before code</p> -<pre><code>text inside block code</code></pre> - -<p>paragraph before hr</p> -<hr> - -<p>paragraph before head with hash</p> -<h1 id="how-are-you">how are you</h1> - -<p>paragraph before head with equals</p> -<h1 id="how-are-you-again">how are you again</h1> - -<p>paragraph before blockquote</p> -<blockquote><p>text for blockquote</p></blockquote> - -<p>paragraph before list</p> -<ul><li>text inside list</li></ul> - -<p>paragraph before div</p> -<div>text inside div</div> - -<p>paragraph with span -<span>text inside span</span></p> - -<p>hello <a href="/are/you">world</a> -</p> - -<div>hello</div> - -<p><span>hello</span></p> diff --git a/packages/markdown/marked/test/new/toplevel_paragraphs.md b/packages/markdown/marked/test/new/toplevel_paragraphs.md deleted file mode 100644 index f344fbe3..00000000 --- a/packages/markdown/marked/test/new/toplevel_paragraphs.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -gfm: true ---- -hello world - text after spaces - text after spaces - -paragraph before code -``` -text inside block code -``` - -paragraph before hr -* * * - -paragraph before head with hash -# how are you - -paragraph before head with equals -how are you again -=========== - -paragraph before blockquote -> text for blockquote - -paragraph before list -* text inside list - -paragraph before div -<div>text inside div</div> - -paragraph with span -<span>text inside span</span> - -hello [world][how] - -[how]: /are/you - -<div>hello</div> - -<span>hello</span> diff --git a/packages/markdown/marked/test/new/tricky_list.html b/packages/markdown/marked/test/new/tricky_list.html deleted file mode 100644 index 764a3352..00000000 --- a/packages/markdown/marked/test/new/tricky_list.html +++ /dev/null @@ -1,23 +0,0 @@ -<p><strong>hello</strong> <em>world</em></p> - -<ul> -<li>hello world</li> -</ul> - -<p><strong>hello</strong> <em>world</em></p> - -<ul> -<li>hello world</li> -</ul> - -<p><strong>hello</strong> <em>world</em></p> - -<ul> -<li>Hello world</li> -</ul> - -<p><strong>hello</strong> <em>world</em></p> - -<ul> -<li>hello world</li> -</ul> diff --git a/packages/markdown/marked/test/new/tricky_list.md b/packages/markdown/marked/test/new/tricky_list.md deleted file mode 100644 index 9aa76ceb..00000000 --- a/packages/markdown/marked/test/new/tricky_list.md +++ /dev/null @@ -1,15 +0,0 @@ -**hello** _world_ - -* hello world - -**hello** _world_ - -* hello world - -**hello** _world_ - -* Hello world - -**hello** _world_ - -* hello world diff --git a/packages/markdown/marked/test/new/uppercase_hex.html b/packages/markdown/marked/test/new/uppercase_hex.html deleted file mode 100644 index 97f55535..00000000 --- a/packages/markdown/marked/test/new/uppercase_hex.html +++ /dev/null @@ -1,2 +0,0 @@ -<p>lowerclick melower -upperclick meupper</p> diff --git a/packages/markdown/marked/test/new/uppercase_hex.md b/packages/markdown/marked/test/new/uppercase_hex.md deleted file mode 100644 index b4b228ab..00000000 --- a/packages/markdown/marked/test/new/uppercase_hex.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -sanitize: true ---- -lower[click me](javascript:...)lower -upper[click me](javascript:...)upper diff --git a/packages/markdown/marked/test/original/amps_and_angles_encoding.html b/packages/markdown/marked/test/original/amps_and_angles_encoding.html deleted file mode 100644 index 9606860b..00000000 --- a/packages/markdown/marked/test/original/amps_and_angles_encoding.html +++ /dev/null @@ -1,17 +0,0 @@ -<p>AT&T has an ampersand in their name.</p> - -<p>AT&T is another way to write it.</p> - -<p>This & that.</p> - -<p>4 < 5.</p> - -<p>6 > 5.</p> - -<p>Here's a <a href="http://example.com/?foo=1&bar=2">link</a> with an ampersand in the URL.</p> - -<p>Here's a link with an amersand in the link text: <a href="http://att.com/" title="AT&T">AT&T</a>.</p> - -<p>Here's an inline <a href="/script?foo=1&bar=2">link</a>.</p> - -<p>Here's an inline <a href="/script?foo=1&bar=2">link</a>.</p> diff --git a/packages/markdown/marked/test/original/amps_and_angles_encoding.md b/packages/markdown/marked/test/original/amps_and_angles_encoding.md deleted file mode 100644 index d7fd65c1..00000000 --- a/packages/markdown/marked/test/original/amps_and_angles_encoding.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -pedantic: true ---- - -AT&T has an ampersand in their name. - -AT&T is another way to write it. - -This & that. - -4 < 5. - -6 > 5. - -Here's a [link] [1] with an ampersand in the URL. - -Here's a link with an amersand in the link text: [AT&T] [2]. - -Here's an inline [link](/script?foo=1&bar=2). - -Here's an inline [link](</script?foo=1&bar=2>). - - -[1]: http://example.com/?foo=1&bar=2 -[2]: http://att.com/ "AT&T" diff --git a/packages/markdown/marked/test/original/auto_links.html b/packages/markdown/marked/test/original/auto_links.html deleted file mode 100644 index f8df9852..00000000 --- a/packages/markdown/marked/test/original/auto_links.html +++ /dev/null @@ -1,18 +0,0 @@ -<p>Link: <a href="http://example.com/">http://example.com/</a>.</p> - -<p>With an ampersand: <a href="http://example.com/?foo=1&bar=2">http://example.com/?foo=1&bar=2</a></p> - -<ul> -<li>In a list?</li> -<li><a href="http://example.com/">http://example.com/</a></li> -<li>It should.</li> -</ul> - -<blockquote> - <p>Blockquoted: <a href="http://example.com/">http://example.com/</a></p> -</blockquote> - -<p>Auto-links should not occur here: <code><http://example.com/></code></p> - -<pre><code>or here: <http://example.com/> -</code></pre> diff --git a/packages/markdown/marked/test/original/auto_links.md b/packages/markdown/marked/test/original/auto_links.md deleted file mode 100644 index f85767b4..00000000 --- a/packages/markdown/marked/test/original/auto_links.md +++ /dev/null @@ -1,13 +0,0 @@ -Link: <http://example.com/>. - -With an ampersand: <http://example.com/?foo=1&bar=2> - -* In a list? -* <http://example.com/> -* It should. - -> Blockquoted: <http://example.com/> - -Auto-links should not occur here: `<http://example.com/>` - - or here: <http://example.com/> diff --git a/packages/markdown/marked/test/original/backslash_escapes.html b/packages/markdown/marked/test/original/backslash_escapes.html deleted file mode 100644 index 7241d11f..00000000 --- a/packages/markdown/marked/test/original/backslash_escapes.html +++ /dev/null @@ -1,118 +0,0 @@ -<p>These should all get escaped:</p> - -<p>Backslash: \</p> - -<p>Backtick: `</p> - -<p>Asterisk: *</p> - -<p>Underscore: _</p> - -<p>Left brace: {</p> - -<p>Right brace: }</p> - -<p>Left bracket: [</p> - -<p>Right bracket: ]</p> - -<p>Left paren: (</p> - -<p>Right paren: )</p> - -<p>Greater-than: ></p> - -<p>Hash: #</p> - -<p>Period: .</p> - -<p>Bang: !</p> - -<p>Plus: +</p> - -<p>Minus: -</p> - -<p>These should not, because they occur within a code block:</p> - -<pre><code>Backslash: \\ - -Backtick: \` - -Asterisk: \* - -Underscore: \_ - -Left brace: \{ - -Right brace: \} - -Left bracket: \[ - -Right bracket: \] - -Left paren: \( - -Right paren: \) - -Greater-than: \> - -Hash: \# - -Period: \. - -Bang: \! - -Plus: \+ - -Minus: \- -</code></pre> - -<p>Nor should these, which occur in code spans:</p> - -<p>Backslash: <code>\\</code></p> - -<p>Backtick: <code>\`</code></p> - -<p>Asterisk: <code>\*</code></p> - -<p>Underscore: <code>\_</code></p> - -<p>Left brace: <code>\{</code></p> - -<p>Right brace: <code>\}</code></p> - -<p>Left bracket: <code>\[</code></p> - -<p>Right bracket: <code>\]</code></p> - -<p>Left paren: <code>\(</code></p> - -<p>Right paren: <code>\)</code></p> - -<p>Greater-than: <code>\></code></p> - -<p>Hash: <code>\#</code></p> - -<p>Period: <code>\.</code></p> - -<p>Bang: <code>\!</code></p> - -<p>Plus: <code>\+</code></p> - -<p>Minus: <code>\-</code></p> - - -<p>These should get escaped, even though they're matching pairs for -other Markdown constructs:</p> - -<p>*asterisks*</p> - -<p>_underscores_</p> - -<p>`backticks`</p> - -<p>This is a code span with a literal backslash-backtick sequence: <code>\`</code></p> - -<p>This is a tag with unescaped backticks <span attr='`ticks`'>bar</span>.</p> - -<p>This is a tag with backslashes <span attr='\\backslashes\\'>bar</span>.</p> diff --git a/packages/markdown/marked/test/original/backslash_escapes.md b/packages/markdown/marked/test/original/backslash_escapes.md deleted file mode 100644 index 5b014cb3..00000000 --- a/packages/markdown/marked/test/original/backslash_escapes.md +++ /dev/null @@ -1,120 +0,0 @@ -These should all get escaped: - -Backslash: \\ - -Backtick: \` - -Asterisk: \* - -Underscore: \_ - -Left brace: \{ - -Right brace: \} - -Left bracket: \[ - -Right bracket: \] - -Left paren: \( - -Right paren: \) - -Greater-than: \> - -Hash: \# - -Period: \. - -Bang: \! - -Plus: \+ - -Minus: \- - - - -These should not, because they occur within a code block: - - Backslash: \\ - - Backtick: \` - - Asterisk: \* - - Underscore: \_ - - Left brace: \{ - - Right brace: \} - - Left bracket: \[ - - Right bracket: \] - - Left paren: \( - - Right paren: \) - - Greater-than: \> - - Hash: \# - - Period: \. - - Bang: \! - - Plus: \+ - - Minus: \- - - -Nor should these, which occur in code spans: - -Backslash: `\\` - -Backtick: `` \` `` - -Asterisk: `\*` - -Underscore: `\_` - -Left brace: `\{` - -Right brace: `\}` - -Left bracket: `\[` - -Right bracket: `\]` - -Left paren: `\(` - -Right paren: `\)` - -Greater-than: `\>` - -Hash: `\#` - -Period: `\.` - -Bang: `\!` - -Plus: `\+` - -Minus: `\-` - - -These should get escaped, even though they're matching pairs for -other Markdown constructs: - -\*asterisks\* - -\_underscores\_ - -\`backticks\` - -This is a code span with a literal backslash-backtick sequence: `` \` `` - -This is a tag with unescaped backticks <span attr='`ticks`'>bar</span>. - -This is a tag with backslashes <span attr='\\backslashes\\'>bar</span>. diff --git a/packages/markdown/marked/test/original/blockquotes_with_code_blocks.html b/packages/markdown/marked/test/original/blockquotes_with_code_blocks.html deleted file mode 100644 index 990202a1..00000000 --- a/packages/markdown/marked/test/original/blockquotes_with_code_blocks.html +++ /dev/null @@ -1,15 +0,0 @@ -<blockquote> - <p>Example:</p> - -<pre><code>sub status { - print "working"; -} -</code></pre> - - <p>Or:</p> - -<pre><code>sub status { - return "working"; -} -</code></pre> -</blockquote> diff --git a/packages/markdown/marked/test/original/blockquotes_with_code_blocks.md b/packages/markdown/marked/test/original/blockquotes_with_code_blocks.md deleted file mode 100644 index c31d1710..00000000 --- a/packages/markdown/marked/test/original/blockquotes_with_code_blocks.md +++ /dev/null @@ -1,11 +0,0 @@ -> Example: -> -> sub status { -> print "working"; -> } -> -> Or: -> -> sub status { -> return "working"; -> } diff --git a/packages/markdown/marked/test/original/code_blocks.html b/packages/markdown/marked/test/original/code_blocks.html deleted file mode 100644 index 32703f5c..00000000 --- a/packages/markdown/marked/test/original/code_blocks.html +++ /dev/null @@ -1,18 +0,0 @@ -<pre><code>code block on the first line -</code></pre> - -<p>Regular text.</p> - -<pre><code>code block indented by spaces -</code></pre> - -<p>Regular text.</p> - -<pre><code>the lines in this block -all contain trailing spaces -</code></pre> - -<p>Regular Text.</p> - -<pre><code>code block on the last line -</code></pre> diff --git a/packages/markdown/marked/test/original/code_blocks.md b/packages/markdown/marked/test/original/code_blocks.md deleted file mode 100644 index 01f9a733..00000000 --- a/packages/markdown/marked/test/original/code_blocks.md +++ /dev/null @@ -1,14 +0,0 @@ - code block on the first line - -Regular text. - - code block indented by spaces - -Regular text. - - the lines in this block - all contain trailing spaces - -Regular Text. - - code block on the last line diff --git a/packages/markdown/marked/test/original/code_spans.html b/packages/markdown/marked/test/original/code_spans.html deleted file mode 100644 index 4b8afbb7..00000000 --- a/packages/markdown/marked/test/original/code_spans.html +++ /dev/null @@ -1,6 +0,0 @@ -<p><code><test a="</code> content of attribute <code>"></code></p> - -<p>Fix for backticks within HTML tag: <span attr='`ticks`'>like this</span></p> - -<p>Here's how you put <code>`backticks`</code> in a code span.</p> - diff --git a/packages/markdown/marked/test/original/code_spans.md b/packages/markdown/marked/test/original/code_spans.md deleted file mode 100644 index 750a1973..00000000 --- a/packages/markdown/marked/test/original/code_spans.md +++ /dev/null @@ -1,6 +0,0 @@ -`<test a="` content of attribute `">` - -Fix for backticks within HTML tag: <span attr='`ticks`'>like this</span> - -Here's how you put `` `backticks` `` in a code span. - diff --git a/packages/markdown/marked/test/original/hard_wrapped_paragraphs_with_list_like_lines.html b/packages/markdown/marked/test/original/hard_wrapped_paragraphs_with_list_like_lines.html deleted file mode 100644 index e21ac79a..00000000 --- a/packages/markdown/marked/test/original/hard_wrapped_paragraphs_with_list_like_lines.html +++ /dev/null @@ -1,8 +0,0 @@ -<p>In Markdown 1.0.0 and earlier. Version -8. This line turns into a list item. -Because a hard-wrapped line in the -middle of a paragraph looked like a -list item.</p> - -<p>Here's one with a bullet. -* criminey.</p> diff --git a/packages/markdown/marked/test/original/hard_wrapped_paragraphs_with_list_like_lines.md b/packages/markdown/marked/test/original/hard_wrapped_paragraphs_with_list_like_lines.md deleted file mode 100644 index f8a5b27b..00000000 --- a/packages/markdown/marked/test/original/hard_wrapped_paragraphs_with_list_like_lines.md +++ /dev/null @@ -1,8 +0,0 @@ -In Markdown 1.0.0 and earlier. Version -8. This line turns into a list item. -Because a hard-wrapped line in the -middle of a paragraph looked like a -list item. - -Here's one with a bullet. -* criminey. diff --git a/packages/markdown/marked/test/original/horizontal_rules.html b/packages/markdown/marked/test/original/horizontal_rules.html deleted file mode 100644 index b84ba925..00000000 --- a/packages/markdown/marked/test/original/horizontal_rules.html +++ /dev/null @@ -1,85 +0,0 @@ -<p>Dashes:</p> - -<hr /> - -<hr /> - -<hr /> - -<hr /> - -<pre><code>--- -</code></pre> - -<hr /> - -<hr /> - -<hr /> - -<hr /> - -<pre><code>- - - -</code></pre> - -<p>Asterisks:</p> - -<hr /> - -<hr /> - -<hr /> - -<hr /> - -<pre><code>*** -</code></pre> - -<hr /> - -<hr /> - -<hr /> - -<hr /> - -<pre><code>* * * -</code></pre> - -<p>Underscores:</p> - -<hr /> - -<hr /> - -<hr /> - -<hr /> - -<pre><code>___ -</code></pre> - -<hr /> - -<hr /> - -<hr /> - -<hr /> - -<pre><code>_ _ _ -</code></pre> - -<p>Not horizontal rules:</p> -<p>--*</p> -<p>-*-</p> -<p>*--</p> -<p>-_-</p> -<p>__-</p> -<p>-__</p> -<pre><code>_-_ -</code></pre> -<p>Long rules:</p> -<hr> -<hr> -<hr> diff --git a/packages/markdown/marked/test/original/horizontal_rules.md b/packages/markdown/marked/test/original/horizontal_rules.md deleted file mode 100644 index 49bbcfad..00000000 --- a/packages/markdown/marked/test/original/horizontal_rules.md +++ /dev/null @@ -1,94 +0,0 @@ -Dashes: - ---- - - --- - - --- - - --- - - --- - -- - - - - - - - - - - - - - - - - - - - - - - - - -Asterisks: - -*** - - *** - - *** - - *** - - *** - -* * * - - * * * - - * * * - - * * * - - * * * - - -Underscores: - -___ - - ___ - - ___ - - ___ - - ___ - -_ _ _ - - _ _ _ - - _ _ _ - - _ _ _ - - _ _ _ - - - -Not horizontal rules: - ---* - --*- - -*-- - - -_- - - __- - - -__ - - _-_ - - -Long rules: - ------------ - -___________ - -*********** diff --git a/packages/markdown/marked/test/original/inline_html_advanced.html b/packages/markdown/marked/test/original/inline_html_advanced.html deleted file mode 100644 index 3af9cafb..00000000 --- a/packages/markdown/marked/test/original/inline_html_advanced.html +++ /dev/null @@ -1,15 +0,0 @@ -<p>Simple block on one line:</p> - -<div>foo</div> - -<p>And nested without indentation:</p> - -<div> -<div> -<div> -foo -</div> -<div style=">"/> -</div> -<div>bar</div> -</div> diff --git a/packages/markdown/marked/test/original/inline_html_advanced.md b/packages/markdown/marked/test/original/inline_html_advanced.md deleted file mode 100644 index 86b7206d..00000000 --- a/packages/markdown/marked/test/original/inline_html_advanced.md +++ /dev/null @@ -1,15 +0,0 @@ -Simple block on one line: - -<div>foo</div> - -And nested without indentation: - -<div> -<div> -<div> -foo -</div> -<div style=">"/> -</div> -<div>bar</div> -</div> diff --git a/packages/markdown/marked/test/original/inline_html_comments.html b/packages/markdown/marked/test/original/inline_html_comments.html deleted file mode 100644 index 3f167a16..00000000 --- a/packages/markdown/marked/test/original/inline_html_comments.html +++ /dev/null @@ -1,13 +0,0 @@ -<p>Paragraph one.</p> - -<!-- This is a simple comment --> - -<!-- - This is another comment. ---> - -<p>Paragraph two.</p> - -<!-- one comment block -- -- with two comments --> - -<p>The end.</p> diff --git a/packages/markdown/marked/test/original/inline_html_comments.md b/packages/markdown/marked/test/original/inline_html_comments.md deleted file mode 100644 index 41d830d0..00000000 --- a/packages/markdown/marked/test/original/inline_html_comments.md +++ /dev/null @@ -1,13 +0,0 @@ -Paragraph one. - -<!-- This is a simple comment --> - -<!-- - This is another comment. ---> - -Paragraph two. - -<!-- one comment block -- -- with two comments --> - -The end. diff --git a/packages/markdown/marked/test/original/inline_html_simple.html b/packages/markdown/marked/test/original/inline_html_simple.html deleted file mode 100644 index 6bf78f8f..00000000 --- a/packages/markdown/marked/test/original/inline_html_simple.html +++ /dev/null @@ -1,72 +0,0 @@ -<p>Here's a simple block:</p> - -<div> - foo -</div> - -<p>This should be a code block, though:</p> - -<pre><code><div> - foo -</div> -</code></pre> - -<p>As should this:</p> - -<pre><code><div>foo</div> -</code></pre> - -<p>Now, nested:</p> - -<div> - <div> - <div> - foo - </div> - </div> -</div> - -<p>This should just be an HTML comment:</p> - -<!-- Comment --> - -<p>Multiline:</p> - -<!-- -Blah -Blah ---> - -<p>Code block:</p> - -<pre><code><!-- Comment --> -</code></pre> - -<p>Just plain comment, with trailing spaces on the line:</p> - -<!-- foo --> - -<p>Code:</p> - -<pre><code><hr /> -</code></pre> - -<p>Hr's:</p> - -<hr> - -<hr/> - -<hr /> - -<hr> - -<hr/> - -<hr /> - -<hr class="foo" id="bar" /> - -<hr class="foo" id="bar"/> - -<hr class="foo" id="bar" > diff --git a/packages/markdown/marked/test/original/inline_html_simple.md b/packages/markdown/marked/test/original/inline_html_simple.md deleted file mode 100644 index 14aa2dc2..00000000 --- a/packages/markdown/marked/test/original/inline_html_simple.md +++ /dev/null @@ -1,69 +0,0 @@ -Here's a simple block: - -<div> - foo -</div> - -This should be a code block, though: - - <div> - foo - </div> - -As should this: - - <div>foo</div> - -Now, nested: - -<div> - <div> - <div> - foo - </div> - </div> -</div> - -This should just be an HTML comment: - -<!-- Comment --> - -Multiline: - -<!-- -Blah -Blah ---> - -Code block: - - <!-- Comment --> - -Just plain comment, with trailing spaces on the line: - -<!-- foo --> - -Code: - - <hr /> - -Hr's: - -<hr> - -<hr/> - -<hr /> - -<hr> - -<hr/> - -<hr /> - -<hr class="foo" id="bar" /> - -<hr class="foo" id="bar"/> - -<hr class="foo" id="bar" > - diff --git a/packages/markdown/marked/test/original/links_inline_style.html b/packages/markdown/marked/test/original/links_inline_style.html deleted file mode 100644 index 12ec391c..00000000 --- a/packages/markdown/marked/test/original/links_inline_style.html +++ /dev/null @@ -1,15 +0,0 @@ -<p>Just a <a href="/url/">URL</a>.</p> - -<p><a href="/url/" title="title">URL and title</a>.</p> - -<p><a href="/url/" title="title preceded by two spaces">URL and title</a>.</p> - -<p><a href="/url/" title="title preceded by a tab">URL and title</a>.</p> - -<p><a href="/url/" title="title has spaces afterward">URL and title</a>.</p> - -<p><a href="/url/has%20space">URL and title</a>.</p> - -<p><a href="/url/has%20space/" title="url has space and title">URL and title</a>.</p> - -<p><a href="">Empty</a>.</p> diff --git a/packages/markdown/marked/test/original/links_inline_style.md b/packages/markdown/marked/test/original/links_inline_style.md deleted file mode 100644 index 1dc692be..00000000 --- a/packages/markdown/marked/test/original/links_inline_style.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -pedantic: true ---- - -Just a [URL](/url/). - -[URL and title](/url/ "title"). - -[URL and title](/url/ "title preceded by two spaces"). - -[URL and title](/url/ "title preceded by a tab"). - -[URL and title](/url/ "title has spaces afterward" ). - -[URL and title]( /url/has space ). - -[URL and title]( /url/has space/ "url has space and title"). - -[Empty](). diff --git a/packages/markdown/marked/test/original/links_reference_style.html b/packages/markdown/marked/test/original/links_reference_style.html deleted file mode 100644 index 8e70c32f..00000000 --- a/packages/markdown/marked/test/original/links_reference_style.html +++ /dev/null @@ -1,52 +0,0 @@ -<p>Foo <a href="/url/" title="Title">bar</a>.</p> - -<p>Foo <a href="/url/" title="Title">bar</a>.</p> - -<p>Foo <a href="/url/" title="Title">bar</a>.</p> - -<p>With <a href="/url/">embedded [brackets]</a>.</p> - -<p>Indented <a href="/url">once</a>.</p> - -<p>Indented <a href="/url">twice</a>.</p> - -<p>Indented <a href="/url">thrice</a>.</p> - -<p>Indented [four][] times.</p> - -<pre><code>[four]: /url -</code></pre> - -<hr /> - -<p><a href="foo">this</a> should work</p> - -<p>So should <a href="foo">this</a>.</p> - -<p>And <a href="foo">this</a>.</p> - -<p>And <a href="foo">this</a>.</p> - -<p>And <a href="foo">this</a>.</p> - -<p>But not [that] [].</p> - -<p>Nor [that][].</p> - -<p>Nor [that].</p> - -<p>[Something in brackets like <a href="foo">this</a> should work]</p> - -<p>[Same with <a href="foo">this</a>.]</p> - -<p>In this case, <a href="/somethingelse/">this</a> points to something else.</p> - -<p>Backslashing should suppress [this] and [this].</p> - -<hr /> - -<p>Here's one where the <a href="/url/">link -breaks</a> across lines.</p> - -<p>Here's another where the <a href="/url/">link -breaks</a> across lines, but with a line-ending space.</p> diff --git a/packages/markdown/marked/test/original/links_reference_style.md b/packages/markdown/marked/test/original/links_reference_style.md deleted file mode 100644 index 10ab1606..00000000 --- a/packages/markdown/marked/test/original/links_reference_style.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -pedantic: true ---- - -Foo [bar] [1]. - -Foo [bar][1]. - -Foo [bar] -[1]. - -[1]: /url/ "Title" - - -With [embedded [brackets]] [b]. - - -Indented [once][]. - -Indented [twice][]. - -Indented [thrice][]. - -Indented [four][] times. - - [once]: /url - - [twice]: /url - - [thrice]: /url - - [four]: /url - - -[b]: /url/ - -* * * - -[this] [this] should work - -So should [this][this]. - -And [this] []. - -And [this][]. - -And [this]. - -But not [that] []. - -Nor [that][]. - -Nor [that]. - -[Something in brackets like [this][] should work] - -[Same with [this].] - -In this case, [this](/somethingelse/) points to something else. - -Backslashing should suppress \[this] and [this\]. - -[this]: foo - - -* * * - -Here's one where the [link -breaks] across lines. - -Here's another where the [link -breaks] across lines, but with a line-ending space. - - -[link breaks]: /url/ diff --git a/packages/markdown/marked/test/original/links_shortcut_references.html b/packages/markdown/marked/test/original/links_shortcut_references.html deleted file mode 100644 index bf81e939..00000000 --- a/packages/markdown/marked/test/original/links_shortcut_references.html +++ /dev/null @@ -1,9 +0,0 @@ -<p>This is the <a href="/simple">simple case</a>.</p> - -<p>This one has a <a href="/foo">line -break</a>.</p> - -<p>This one has a <a href="/foo">line -break</a> with a line-ending space.</p> - -<p><a href="/that">this</a> and the <a href="/other">other</a></p> diff --git a/packages/markdown/marked/test/original/links_shortcut_references.md b/packages/markdown/marked/test/original/links_shortcut_references.md deleted file mode 100644 index 0ff031fa..00000000 --- a/packages/markdown/marked/test/original/links_shortcut_references.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -pedantic: true ---- - -This is the [simple case]. - -[simple case]: /simple - - - -This one has a [line -break]. - -This one has a [line -break] with a line-ending space. - -[line break]: /foo - - -[this] [that] and the [other] - -[this]: /this -[that]: /that -[other]: /other diff --git a/packages/markdown/marked/test/original/literal_quotes_in_titles.html b/packages/markdown/marked/test/original/literal_quotes_in_titles.html deleted file mode 100644 index 611c1ac6..00000000 --- a/packages/markdown/marked/test/original/literal_quotes_in_titles.html +++ /dev/null @@ -1,3 +0,0 @@ -<p>Foo <a href="/url/" title="Title with "quotes" inside">bar</a>.</p> - -<p>Foo <a href="/url/" title="Title with "quotes" inside">bar</a>.</p> diff --git a/packages/markdown/marked/test/original/literal_quotes_in_titles.md b/packages/markdown/marked/test/original/literal_quotes_in_titles.md deleted file mode 100644 index 74de60d8..00000000 --- a/packages/markdown/marked/test/original/literal_quotes_in_titles.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -pedantic: true ---- - -Foo [bar][]. - -Foo [bar](/url/ "Title with "quotes" inside"). - - - [bar]: /url/ "Title with "quotes" inside" - diff --git a/packages/markdown/marked/test/original/markdown_documentation_basics.html b/packages/markdown/marked/test/original/markdown_documentation_basics.html deleted file mode 100644 index dede9d74..00000000 --- a/packages/markdown/marked/test/original/markdown_documentation_basics.html +++ /dev/null @@ -1,314 +0,0 @@ -<h1 id="markdown-basics">Markdown: Basics</h1> - -<ul id="ProjectSubmenu"> - <li><a href="/projects/markdown/" title="Markdown Project Page">Main</a></li> - <li><a class="selected" title="Markdown Basics">Basics</a></li> - <li><a href="/projects/markdown/syntax" title="Markdown Syntax Documentation">Syntax</a></li> - <li><a href="/projects/markdown/license" title="Pricing and License Information">License</a></li> - <li><a href="/projects/markdown/dingus" title="Online Markdown Web Form">Dingus</a></li> -</ul> - -<h2 id="getting-the-gist-of-markdowns-formatting-syntax">Getting the Gist of Markdown's Formatting Syntax</h2> - -<p>This page offers a brief overview of what it's like to use Markdown. -The <a href="/projects/markdown/syntax" title="Markdown Syntax">syntax page</a> provides complete, detailed documentation for -every feature, but Markdown should be very easy to pick up simply by -looking at a few examples of it in action. The examples on this page -are written in a before/after style, showing example syntax and the -HTML output produced by Markdown.</p> - -<p>It's also helpful to simply try Markdown out; the <a href="/projects/markdown/dingus" title="Markdown Dingus">Dingus</a> is a -web application that allows you type your own Markdown-formatted text -and translate it to XHTML.</p> - -<p><strong>Note:</strong> This document is itself written using Markdown; you -can <a href="/projects/markdown/basics.text">see the source for it by adding '.text' to the URL</a>.</p> - -<h2 id="paragraphs-headers-blockquotes">Paragraphs, Headers, Blockquotes</h2> - -<p>A paragraph is simply one or more consecutive lines of text, separated -by one or more blank lines. (A blank line is any line that looks like a -blank line -- a line containing nothing spaces or tabs is considered -blank.) Normal paragraphs should not be intended with spaces or tabs.</p> - -<p>Markdown offers two styles of headers: <em>Setext</em> and <em>atx</em>. -Setext-style headers for <code><h1></code> and <code><h2></code> are created by -"underlining" with equal signs (<code>=</code>) and hyphens (<code>-</code>), respectively. -To create an atx-style header, you put 1-6 hash marks (<code>#</code>) at the -beginning of the line -- the number of hashes equals the resulting -HTML header level.</p> - -<p>Blockquotes are indicated using email-style '<code>></code>' angle brackets.</p> - -<p>Markdown:</p> - -<pre><code>A First Level Header -==================== - -A Second Level Header ---------------------- - -Now is the time for all good men to come to -the aid of their country. This is just a -regular paragraph. - -The quick brown fox jumped over the lazy -dog's back. - -### Header 3 - -> This is a blockquote. -> -> This is the second paragraph in the blockquote. -> -> ## This is an H2 in a blockquote -</code></pre> - -<p>Output:</p> - -<pre><code><h1>A First Level Header</h1> - -<h2>A Second Level Header</h2> - -<p>Now is the time for all good men to come to -the aid of their country. This is just a -regular paragraph.</p> - -<p>The quick brown fox jumped over the lazy -dog's back.</p> - -<h3>Header 3</h3> - -<blockquote> - <p>This is a blockquote.</p> - - <p>This is the second paragraph in the blockquote.</p> - - <h2>This is an H2 in a blockquote</h2> -</blockquote> -</code></pre> - -<h3 id="phrase-emphasis">Phrase Emphasis</h3> - -<p>Markdown uses asterisks and underscores to indicate spans of emphasis.</p> - -<p>Markdown:</p> - -<pre><code>Some of these words *are emphasized*. -Some of these words _are emphasized also_. - -Use two asterisks for **strong emphasis**. -Or, if you prefer, __use two underscores instead__. -</code></pre> - -<p>Output:</p> - -<pre><code><p>Some of these words <em>are emphasized</em>. -Some of these words <em>are emphasized also</em>.</p> - -<p>Use two asterisks for <strong>strong emphasis</strong>. -Or, if you prefer, <strong>use two underscores instead</strong>.</p> -</code></pre> - -<h2 id="lists">Lists</h2> - -<p>Unordered (bulleted) lists use asterisks, pluses, and hyphens (<code>*</code>, -<code>+</code>, and <code>-</code>) as list markers. These three markers are -interchangable; this:</p> - -<pre><code>* Candy. -* Gum. -* Booze. -</code></pre> - -<p>this:</p> - -<pre><code>+ Candy. -+ Gum. -+ Booze. -</code></pre> - -<p>and this:</p> - -<pre><code>- Candy. -- Gum. -- Booze. -</code></pre> - -<p>all produce the same output:</p> - -<pre><code><ul> -<li>Candy.</li> -<li>Gum.</li> -<li>Booze.</li> -</ul> -</code></pre> - -<p>Ordered (numbered) lists use regular numbers, followed by periods, as -list markers:</p> - -<pre><code>1. Red -2. Green -3. Blue -</code></pre> - -<p>Output:</p> - -<pre><code><ol> -<li>Red</li> -<li>Green</li> -<li>Blue</li> -</ol> -</code></pre> - -<p>If you put blank lines between items, you'll get <code><p></code> tags for the -list item text. You can create multi-paragraph list items by indenting -the paragraphs by 4 spaces or 1 tab:</p> - -<pre><code>* A list item. - - With multiple paragraphs. - -* Another item in the list. -</code></pre> - -<p>Output:</p> - -<pre><code><ul> -<li><p>A list item.</p> -<p>With multiple paragraphs.</p></li> -<li><p>Another item in the list.</p></li> -</ul> -</code></pre> - -<h3 id="links">Links</h3> - -<p>Markdown supports two styles for creating links: <em>inline</em> and -<em>reference</em>. With both styles, you use square brackets to delimit the -text you want to turn into a link.</p> - -<p>Inline-style links use parentheses immediately after the link text. -For example:</p> - -<pre><code>This is an [example link](http://example.com/). -</code></pre> - -<p>Output:</p> - -<pre><code><p>This is an <a href="http://example.com/"> -example link</a>.</p> -</code></pre> - -<p>Optionally, you may include a title attribute in the parentheses:</p> - -<pre><code>This is an [example link](http://example.com/ "With a Title"). -</code></pre> - -<p>Output:</p> - -<pre><code><p>This is an <a href="http://example.com/" title="With a Title"> -example link</a>.</p> -</code></pre> - -<p>Reference-style links allow you to refer to your links by names, which -you define elsewhere in your document:</p> - -<pre><code>I get 10 times more traffic from [Google][1] than from -[Yahoo][2] or [MSN][3]. - -[1]: http://google.com/ "Google" -[2]: http://search.yahoo.com/ "Yahoo Search" -[3]: http://search.msn.com/ "MSN Search" -</code></pre> - -<p>Output:</p> - -<pre><code><p>I get 10 times more traffic from <a href="http://google.com/" -title="Google">Google</a> than from <a href="http://search.yahoo.com/" -title="Yahoo Search">Yahoo</a> or <a href="http://search.msn.com/" -title="MSN Search">MSN</a>.</p> -</code></pre> - -<p>The title attribute is optional. Link names may contain letters, -numbers and spaces, but are <em>not</em> case sensitive:</p> - -<pre><code>I start my morning with a cup of coffee and -[The New York Times][NY Times]. - -[ny times]: http://www.nytimes.com/ -</code></pre> - -<p>Output:</p> - -<pre><code><p>I start my morning with a cup of coffee and -<a href="http://www.nytimes.com/">The New York Times</a>.</p> -</code></pre> - -<h3 id="images">Images</h3> - -<p>Image syntax is very much like link syntax.</p> - -<p>Inline (titles are optional):</p> - -<pre><code>![alt text](/path/to/img.jpg "Title") -</code></pre> - -<p>Reference-style:</p> - -<pre><code>![alt text][id] - -[id]: /path/to/img.jpg "Title" -</code></pre> - -<p>Both of the above examples produce the same output:</p> - -<pre><code><img src="/path/to/img.jpg" alt="alt text" title="Title" /> -</code></pre> - -<h3 id="code">Code</h3> - -<p>In a regular paragraph, you can create code span by wrapping text in -backtick quotes. Any ampersands (<code>&</code>) and angle brackets (<code><</code> or -<code>></code>) will automatically be translated into HTML entities. This makes -it easy to use Markdown to write about HTML example code:</p> - -<pre><code>I strongly recommend against using any `<blink>` tags. - -I wish SmartyPants used named entities like `&mdash;` -instead of decimal-encoded entites like `&#8212;`. -</code></pre> - -<p>Output:</p> - -<pre><code><p>I strongly recommend against using any -<code>&lt;blink&gt;</code> tags.</p> - -<p>I wish SmartyPants used named entities like -<code>&amp;mdash;</code> instead of decimal-encoded -entites like <code>&amp;#8212;</code>.</p> -</code></pre> - -<p>To specify an entire block of pre-formatted code, indent every line of -the block by 4 spaces or 1 tab. Just like with code spans, <code>&</code>, <code><</code>, -and <code>></code> characters will be escaped automatically.</p> - -<p>Markdown:</p> - -<pre><code>If you want your page to validate under XHTML 1.0 Strict, -you've got to put paragraph tags in your blockquotes: - - <blockquote> - <p>For example.</p> - </blockquote> -</code></pre> - -<p>Output:</p> - -<pre><code><p>If you want your page to validate under XHTML 1.0 Strict, -you've got to put paragraph tags in your blockquotes:</p> - -<pre><code>&lt;blockquote&gt; - &lt;p&gt;For example.&lt;/p&gt; -&lt;/blockquote&gt; -</code></pre> -</code></pre> diff --git a/packages/markdown/marked/test/original/markdown_documentation_basics.md b/packages/markdown/marked/test/original/markdown_documentation_basics.md deleted file mode 100644 index 23079a33..00000000 --- a/packages/markdown/marked/test/original/markdown_documentation_basics.md +++ /dev/null @@ -1,310 +0,0 @@ ---- -pedantic: true ---- - -Markdown: Basics -================ - -<ul id="ProjectSubmenu"> - <li><a href="/projects/markdown/" title="Markdown Project Page">Main</a></li> - <li><a class="selected" title="Markdown Basics">Basics</a></li> - <li><a href="/projects/markdown/syntax" title="Markdown Syntax Documentation">Syntax</a></li> - <li><a href="/projects/markdown/license" title="Pricing and License Information">License</a></li> - <li><a href="/projects/markdown/dingus" title="Online Markdown Web Form">Dingus</a></li> -</ul> - - -Getting the Gist of Markdown's Formatting Syntax ------------------------------------------------- - -This page offers a brief overview of what it's like to use Markdown. -The [syntax page] [s] provides complete, detailed documentation for -every feature, but Markdown should be very easy to pick up simply by -looking at a few examples of it in action. The examples on this page -are written in a before/after style, showing example syntax and the -HTML output produced by Markdown. - -It's also helpful to simply try Markdown out; the [Dingus] [d] is a -web application that allows you type your own Markdown-formatted text -and translate it to XHTML. - -**Note:** This document is itself written using Markdown; you -can [see the source for it by adding '.text' to the URL] [src]. - - [s]: /projects/markdown/syntax "Markdown Syntax" - [d]: /projects/markdown/dingus "Markdown Dingus" - [src]: /projects/markdown/basics.text - - -## Paragraphs, Headers, Blockquotes ## - -A paragraph is simply one or more consecutive lines of text, separated -by one or more blank lines. (A blank line is any line that looks like a -blank line -- a line containing nothing spaces or tabs is considered -blank.) Normal paragraphs should not be intended with spaces or tabs. - -Markdown offers two styles of headers: *Setext* and *atx*. -Setext-style headers for `<h1>` and `<h2>` are created by -"underlining" with equal signs (`=`) and hyphens (`-`), respectively. -To create an atx-style header, you put 1-6 hash marks (`#`) at the -beginning of the line -- the number of hashes equals the resulting -HTML header level. - -Blockquotes are indicated using email-style '`>`' angle brackets. - -Markdown: - - A First Level Header - ==================== - - A Second Level Header - --------------------- - - Now is the time for all good men to come to - the aid of their country. This is just a - regular paragraph. - - The quick brown fox jumped over the lazy - dog's back. - - ### Header 3 - - > This is a blockquote. - > - > This is the second paragraph in the blockquote. - > - > ## This is an H2 in a blockquote - - -Output: - - <h1>A First Level Header</h1> - - <h2>A Second Level Header</h2> - - <p>Now is the time for all good men to come to - the aid of their country. This is just a - regular paragraph.</p> - - <p>The quick brown fox jumped over the lazy - dog's back.</p> - - <h3>Header 3</h3> - - <blockquote> - <p>This is a blockquote.</p> - - <p>This is the second paragraph in the blockquote.</p> - - <h2>This is an H2 in a blockquote</h2> - </blockquote> - - - -### Phrase Emphasis ### - -Markdown uses asterisks and underscores to indicate spans of emphasis. - -Markdown: - - Some of these words *are emphasized*. - Some of these words _are emphasized also_. - - Use two asterisks for **strong emphasis**. - Or, if you prefer, __use two underscores instead__. - -Output: - - <p>Some of these words <em>are emphasized</em>. - Some of these words <em>are emphasized also</em>.</p> - - <p>Use two asterisks for <strong>strong emphasis</strong>. - Or, if you prefer, <strong>use two underscores instead</strong>.</p> - - - -## Lists ## - -Unordered (bulleted) lists use asterisks, pluses, and hyphens (`*`, -`+`, and `-`) as list markers. These three markers are -interchangable; this: - - * Candy. - * Gum. - * Booze. - -this: - - + Candy. - + Gum. - + Booze. - -and this: - - - Candy. - - Gum. - - Booze. - -all produce the same output: - - <ul> - <li>Candy.</li> - <li>Gum.</li> - <li>Booze.</li> - </ul> - -Ordered (numbered) lists use regular numbers, followed by periods, as -list markers: - - 1. Red - 2. Green - 3. Blue - -Output: - - <ol> - <li>Red</li> - <li>Green</li> - <li>Blue</li> - </ol> - -If you put blank lines between items, you'll get `<p>` tags for the -list item text. You can create multi-paragraph list items by indenting -the paragraphs by 4 spaces or 1 tab: - - * A list item. - - With multiple paragraphs. - - * Another item in the list. - -Output: - - <ul> - <li><p>A list item.</p> - <p>With multiple paragraphs.</p></li> - <li><p>Another item in the list.</p></li> - </ul> - - - -### Links ### - -Markdown supports two styles for creating links: *inline* and -*reference*. With both styles, you use square brackets to delimit the -text you want to turn into a link. - -Inline-style links use parentheses immediately after the link text. -For example: - - This is an [example link](http://example.com/). - -Output: - - <p>This is an <a href="http://example.com/"> - example link</a>.</p> - -Optionally, you may include a title attribute in the parentheses: - - This is an [example link](http://example.com/ "With a Title"). - -Output: - - <p>This is an <a href="http://example.com/" title="With a Title"> - example link</a>.</p> - -Reference-style links allow you to refer to your links by names, which -you define elsewhere in your document: - - I get 10 times more traffic from [Google][1] than from - [Yahoo][2] or [MSN][3]. - - [1]: http://google.com/ "Google" - [2]: http://search.yahoo.com/ "Yahoo Search" - [3]: http://search.msn.com/ "MSN Search" - -Output: - - <p>I get 10 times more traffic from <a href="http://google.com/" - title="Google">Google</a> than from <a href="http://search.yahoo.com/" - title="Yahoo Search">Yahoo</a> or <a href="http://search.msn.com/" - title="MSN Search">MSN</a>.</p> - -The title attribute is optional. Link names may contain letters, -numbers and spaces, but are *not* case sensitive: - - I start my morning with a cup of coffee and - [The New York Times][NY Times]. - - [ny times]: http://www.nytimes.com/ - -Output: - - <p>I start my morning with a cup of coffee and - <a href="http://www.nytimes.com/">The New York Times</a>.</p> - - -### Images ### - -Image syntax is very much like link syntax. - -Inline (titles are optional): - - ![alt text](/path/to/img.jpg "Title") - -Reference-style: - - ![alt text][id] - - [id]: /path/to/img.jpg "Title" - -Both of the above examples produce the same output: - - <img src="/path/to/img.jpg" alt="alt text" title="Title" /> - - - -### Code ### - -In a regular paragraph, you can create code span by wrapping text in -backtick quotes. Any ampersands (`&`) and angle brackets (`<` or -`>`) will automatically be translated into HTML entities. This makes -it easy to use Markdown to write about HTML example code: - - I strongly recommend against using any `<blink>` tags. - - I wish SmartyPants used named entities like `—` - instead of decimal-encoded entites like `—`. - -Output: - - <p>I strongly recommend against using any - <code><blink></code> tags.</p> - - <p>I wish SmartyPants used named entities like - <code>&mdash;</code> instead of decimal-encoded - entites like <code>&#8212;</code>.</p> - - -To specify an entire block of pre-formatted code, indent every line of -the block by 4 spaces or 1 tab. Just like with code spans, `&`, `<`, -and `>` characters will be escaped automatically. - -Markdown: - - If you want your page to validate under XHTML 1.0 Strict, - you've got to put paragraph tags in your blockquotes: - - <blockquote> - <p>For example.</p> - </blockquote> - -Output: - - <p>If you want your page to validate under XHTML 1.0 Strict, - you've got to put paragraph tags in your blockquotes:</p> - - <pre><code><blockquote> - <p>For example.</p> - </blockquote> - </code></pre> diff --git a/packages/markdown/marked/test/original/markdown_documentation_syntax.html b/packages/markdown/marked/test/original/markdown_documentation_syntax.html deleted file mode 100644 index 5c01306c..00000000 --- a/packages/markdown/marked/test/original/markdown_documentation_syntax.html +++ /dev/null @@ -1,942 +0,0 @@ -<h1>Markdown: Syntax</h1> - -<ul id="ProjectSubmenu"> - <li><a href="/projects/markdown/" title="Markdown Project Page">Main</a></li> - <li><a href="/projects/markdown/basics" title="Markdown Basics">Basics</a></li> - <li><a class="selected" title="Markdown Syntax Documentation">Syntax</a></li> - <li><a href="/projects/markdown/license" title="Pricing and License Information">License</a></li> - <li><a href="/projects/markdown/dingus" title="Online Markdown Web Form">Dingus</a></li> -</ul> - -<ul> -<li><a href="#overview">Overview</a> -<ul> -<li><a href="#philosophy">Philosophy</a></li> -<li><a href="#html">Inline HTML</a></li> -<li><a href="#autoescape">Automatic Escaping for Special Characters</a></li> -</ul></li> -<li><a href="#block">Block Elements</a> -<ul> -<li><a href="#p">Paragraphs and Line Breaks</a></li> -<li><a href="#header">Headers</a></li> -<li><a href="#blockquote">Blockquotes</a></li> -<li><a href="#list">Lists</a></li> -<li><a href="#precode">Code Blocks</a></li> -<li><a href="#hr">Horizontal Rules</a></li> -</ul></li> -<li><a href="#span">Span Elements</a> -<ul> -<li><a href="#link">Links</a></li> -<li><a href="#em">Emphasis</a></li> -<li><a href="#code">Code</a></li> -<li><a href="#img">Images</a></li> -</ul></li> -<li><a href="#misc">Miscellaneous</a> -<ul> -<li><a href="#backslash">Backslash Escapes</a></li> -<li><a href="#autolink">Automatic Links</a></li> -</ul></li> -</ul> - -<p><strong>Note:</strong> This document is itself written using Markdown; you -can <a href="/projects/markdown/syntax.text">see the source for it by adding '.text' to the URL</a>.</p> - -<hr /> - -<h2 id="overview">Overview</h2> - -<h3 id="philosophy">Philosophy</h3> - -<p>Markdown is intended to be as easy-to-read and easy-to-write as is feasible.</p> - -<p>Readability, however, is emphasized above all else. A Markdown-formatted -document should be publishable as-is, as plain text, without looking -like it's been marked up with tags or formatting instructions. While -Markdown's syntax has been influenced by several existing text-to-HTML -filters -- including <a href="http://docutils.sourceforge.net/mirror/setext.html">Setext</a>, <a href="http://www.aaronsw.com/2002/atx/">atx</a>, <a href="http://textism.com/tools/textile/">Textile</a>, <a href="http://docutils.sourceforge.net/rst.html">reStructuredText</a>, -<a href="http://www.triptico.com/software/grutatxt.html">Grutatext</a>, and <a href="http://ettext.taint.org/doc/">EtText</a> -- the single biggest source of -inspiration for Markdown's syntax is the format of plain text email.</p> - -<p>To this end, Markdown's syntax is comprised entirely of punctuation -characters, which punctuation characters have been carefully chosen so -as to look like what they mean. E.g., asterisks around a word actually -look like *emphasis*. Markdown lists look like, well, lists. Even -blockquotes look like quoted passages of text, assuming you've ever -used email.</p> - -<h3 id="html">Inline HTML</h3> - -<p>Markdown's syntax is intended for one purpose: to be used as a -format for <em>writing</em> for the web.</p> - -<p>Markdown is not a replacement for HTML, or even close to it. Its -syntax is very small, corresponding only to a very small subset of -HTML tags. The idea is <em>not</em> to create a syntax that makes it easier -to insert HTML tags. In my opinion, HTML tags are already easy to -insert. The idea for Markdown is to make it easy to read, write, and -edit prose. HTML is a <em>publishing</em> format; Markdown is a <em>writing</em> -format. Thus, Markdown's formatting syntax only addresses issues that -can be conveyed in plain text.</p> - -<p>For any markup that is not covered by Markdown's syntax, you simply -use HTML itself. There's no need to preface it or delimit it to -indicate that you're switching from Markdown to HTML; you just use -the tags.</p> - -<p>The only restrictions are that block-level HTML elements -- e.g. <code><div></code>, -<code><table></code>, <code><pre></code>, <code><p></code>, etc. -- must be separated from surrounding -content by blank lines, and the start and end tags of the block should -not be indented with tabs or spaces. Markdown is smart enough not -to add extra (unwanted) <code><p></code> tags around HTML block-level tags.</p> - -<p>For example, to add an HTML table to a Markdown article:</p> - -<pre><code>This is a regular paragraph. - -<table> - <tr> - <td>Foo</td> - </tr> -</table> - -This is another regular paragraph. -</code></pre> - -<p>Note that Markdown formatting syntax is not processed within block-level -HTML tags. E.g., you can't use Markdown-style <code>*emphasis*</code> inside an -HTML block.</p> - -<p>Span-level HTML tags -- e.g. <code><span></code>, <code><cite></code>, or <code><del></code> -- can be -used anywhere in a Markdown paragraph, list item, or header. If you -want, you can even use HTML tags instead of Markdown formatting; e.g. if -you'd prefer to use HTML <code><a></code> or <code><img></code> tags instead of Markdown's -link or image syntax, go right ahead.</p> - -<p>Unlike block-level HTML tags, Markdown syntax <em>is</em> processed within -span-level tags.</p> - -<h3 id="autoescape">Automatic Escaping for Special Characters</h3> - -<p>In HTML, there are two characters that demand special treatment: <code><</code> -and <code>&</code>. Left angle brackets are used to start tags; ampersands are -used to denote HTML entities. If you want to use them as literal -characters, you must escape them as entities, e.g. <code>&lt;</code>, and -<code>&amp;</code>.</p> - -<p>Ampersands in particular are bedeviling for web writers. If you want to -write about 'AT&T', you need to write '<code>AT&amp;T</code>'. You even need to -escape ampersands within URLs. Thus, if you want to link to:</p> - -<pre><code>http://images.google.com/images?num=30&q=larry+bird -</code></pre> - -<p>you need to encode the URL as:</p> - -<pre><code>http://images.google.com/images?num=30&amp;q=larry+bird -</code></pre> - -<p>in your anchor tag <code>href</code> attribute. Needless to say, this is easy to -forget, and is probably the single most common source of HTML validation -errors in otherwise well-marked-up web sites.</p> - -<p>Markdown allows you to use these characters naturally, taking care of -all the necessary escaping for you. If you use an ampersand as part of -an HTML entity, it remains unchanged; otherwise it will be translated -into <code>&amp;</code>.</p> - -<p>So, if you want to include a copyright symbol in your article, you can write:</p> - -<pre><code>&copy; -</code></pre> - -<p>and Markdown will leave it alone. But if you write:</p> - -<pre><code>AT&T -</code></pre> - -<p>Markdown will translate it to:</p> - -<pre><code>AT&amp;T -</code></pre> - -<p>Similarly, because Markdown supports <a href="#html">inline HTML</a>, if you use -angle brackets as delimiters for HTML tags, Markdown will treat them as -such. But if you write:</p> - -<pre><code>4 < 5 -</code></pre> - -<p>Markdown will translate it to:</p> - -<pre><code>4 &lt; 5 -</code></pre> - -<p>However, inside Markdown code spans and blocks, angle brackets and -ampersands are <em>always</em> encoded automatically. This makes it easy to use -Markdown to write about HTML code. (As opposed to raw HTML, which is a -terrible format for writing about HTML syntax, because every single <code><</code> -and <code>&</code> in your example code needs to be escaped.)</p> - -<hr /> - -<h2 id="block">Block Elements</h2> - -<h3 id="p">Paragraphs and Line Breaks</h3> - -<p>A paragraph is simply one or more consecutive lines of text, separated -by one or more blank lines. (A blank line is any line that looks like a -blank line -- a line containing nothing but spaces or tabs is considered -blank.) Normal paragraphs should not be intended with spaces or tabs.</p> - -<p>The implication of the "one or more consecutive lines of text" rule is -that Markdown supports "hard-wrapped" text paragraphs. This differs -significantly from most other text-to-HTML formatters (including Movable -Type's "Convert Line Breaks" option) which translate every line break -character in a paragraph into a <code><br /></code> tag.</p> - -<p>When you <em>do</em> want to insert a <code><br /></code> break tag using Markdown, you -end a line with two or more spaces, then type return.</p> - -<p>Yes, this takes a tad more effort to create a <code><br /></code>, but a simplistic -"every line break is a <code><br /></code>" rule wouldn't work for Markdown. -Markdown's email-style <a href="#blockquote">blockquoting</a> and multi-paragraph <a href="#list">list items</a> -work best -- and look better -- when you format them with hard breaks.</p> - -<h3 id="header">Headers</h3> - -<p>Markdown supports two styles of headers, <a href="http://docutils.sourceforge.net/mirror/setext.html">Setext</a> and <a href="http://www.aaronsw.com/2002/atx/">atx</a>.</p> - -<p>Setext-style headers are "underlined" using equal signs (for first-level -headers) and dashes (for second-level headers). For example:</p> - -<pre><code>This is an H1 -============= - -This is an H2 -------------- -</code></pre> - -<p>Any number of underlining <code>=</code>'s or <code>-</code>'s will work.</p> - -<p>Atx-style headers use 1-6 hash characters at the start of the line, -corresponding to header levels 1-6. For example:</p> - -<pre><code># This is an H1 - -## This is an H2 - -###### This is an H6 -</code></pre> - -<p>Optionally, you may "close" atx-style headers. This is purely -cosmetic -- you can use this if you think it looks better. The -closing hashes don't even need to match the number of hashes -used to open the header. (The number of opening hashes -determines the header level.) :</p> - -<pre><code># This is an H1 # - -## This is an H2 ## - -### This is an H3 ###### -</code></pre> - -<h3 id="blockquote">Blockquotes</h3> - -<p>Markdown uses email-style <code>></code> characters for blockquoting. If you're -familiar with quoting passages of text in an email message, then you -know how to create a blockquote in Markdown. It looks best if you hard -wrap the text and put a <code>></code> before every line:</p> - -<pre><code>> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, -> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. -> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. -> -> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse -> id sem consectetuer libero luctus adipiscing. -</code></pre> - -<p>Markdown allows you to be lazy and only put the <code>></code> before the first -line of a hard-wrapped paragraph:</p> - -<pre><code>> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, -consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. -Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. - -> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse -id sem consectetuer libero luctus adipiscing. -</code></pre> - -<p>Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by -adding additional levels of <code>></code>:</p> - -<pre><code>> This is the first level of quoting. -> -> > This is nested blockquote. -> -> Back to the first level. -</code></pre> - -<p>Blockquotes can contain other Markdown elements, including headers, lists, -and code blocks:</p> - -<pre><code>> ## This is a header. -> -> 1. This is the first list item. -> 2. This is the second list item. -> -> Here's some example code: -> -> return shell_exec("echo $input | $markdown_script"); -</code></pre> - -<p>Any decent text editor should make email-style quoting easy. For -example, with BBEdit, you can make a selection and choose Increase -Quote Level from the Text menu.</p> - -<h3 id="list">Lists</h3> - -<p>Markdown supports ordered (numbered) and unordered (bulleted) lists.</p> - -<p>Unordered lists use asterisks, pluses, and hyphens -- interchangably --- as list markers:</p> - -<pre><code>* Red -* Green -* Blue -</code></pre> - -<p>is equivalent to:</p> - -<pre><code>+ Red -+ Green -+ Blue -</code></pre> - -<p>and:</p> - -<pre><code>- Red -- Green -- Blue -</code></pre> - -<p>Ordered lists use numbers followed by periods:</p> - -<pre><code>1. Bird -2. McHale -3. Parish -</code></pre> - -<p>It's important to note that the actual numbers you use to mark the -list have no effect on the HTML output Markdown produces. The HTML -Markdown produces from the above list is:</p> - -<pre><code><ol> -<li>Bird</li> -<li>McHale</li> -<li>Parish</li> -</ol> -</code></pre> - -<p>If you instead wrote the list in Markdown like this:</p> - -<pre><code>1. Bird -1. McHale -1. Parish -</code></pre> - -<p>or even:</p> - -<pre><code>3. Bird -1. McHale -8. Parish -</code></pre> - -<p>you'd get the exact same HTML output. The point is, if you want to, -you can use ordinal numbers in your ordered Markdown lists, so that -the numbers in your source match the numbers in your published HTML. -But if you want to be lazy, you don't have to.</p> - -<p>If you do use lazy list numbering, however, you should still start the -list with the number 1. At some point in the future, Markdown may support -starting ordered lists at an arbitrary number.</p> - -<p>List markers typically start at the left margin, but may be indented by -up to three spaces. List markers must be followed by one or more spaces -or a tab.</p> - -<p>To make lists look nice, you can wrap items with hanging indents:</p> - -<pre><code>* Lorem ipsum dolor sit amet, consectetuer adipiscing elit. - Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, - viverra nec, fringilla in, laoreet vitae, risus. -* Donec sit amet nisl. Aliquam semper ipsum sit amet velit. - Suspendisse id sem consectetuer libero luctus adipiscing. -</code></pre> - -<p>But if you want to be lazy, you don't have to:</p> - -<pre><code>* Lorem ipsum dolor sit amet, consectetuer adipiscing elit. -Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, -viverra nec, fringilla in, laoreet vitae, risus. -* Donec sit amet nisl. Aliquam semper ipsum sit amet velit. -Suspendisse id sem consectetuer libero luctus adipiscing. -</code></pre> - -<p>If list items are separated by blank lines, Markdown will wrap the -items in <code><p></code> tags in the HTML output. For example, this input:</p> - -<pre><code>* Bird -* Magic -</code></pre> - -<p>will turn into:</p> - -<pre><code><ul> -<li>Bird</li> -<li>Magic</li> -</ul> -</code></pre> - -<p>But this:</p> - -<pre><code>* Bird - -* Magic -</code></pre> - -<p>will turn into:</p> - -<pre><code><ul> -<li><p>Bird</p></li> -<li><p>Magic</p></li> -</ul> -</code></pre> - -<p>List items may consist of multiple paragraphs. Each subsequent -paragraph in a list item must be intended by either 4 spaces -or one tab:</p> - -<pre><code>1. This is a list item with two paragraphs. Lorem ipsum dolor - sit amet, consectetuer adipiscing elit. Aliquam hendrerit - mi posuere lectus. - - Vestibulum enim wisi, viverra nec, fringilla in, laoreet - vitae, risus. Donec sit amet nisl. Aliquam semper ipsum - sit amet velit. - -2. Suspendisse id sem consectetuer libero luctus adipiscing. -</code></pre> - -<p>It looks nice if you indent every line of the subsequent -paragraphs, but here again, Markdown will allow you to be -lazy:</p> - -<pre><code>* This is a list item with two paragraphs. - - This is the second paragraph in the list item. You're -only required to indent the first line. Lorem ipsum dolor -sit amet, consectetuer adipiscing elit. - -* Another item in the same list. -</code></pre> - -<p>To put a blockquote within a list item, the blockquote's <code>></code> -delimiters need to be indented:</p> - -<pre><code>* A list item with a blockquote: - - > This is a blockquote - > inside a list item. -</code></pre> - -<p>To put a code block within a list item, the code block needs -to be indented <em>twice</em> -- 8 spaces or two tabs:</p> - -<pre><code>* A list item with a code block: - - <code goes here> -</code></pre> - -<p>It's worth noting that it's possible to trigger an ordered list by -accident, by writing something like this:</p> - -<pre><code>1986. What a great season. -</code></pre> - -<p>In other words, a <em>number-period-space</em> sequence at the beginning of a -line. To avoid this, you can backslash-escape the period:</p> - -<pre><code>1986\. What a great season. -</code></pre> - -<h3 id="precode">Code Blocks</h3> - -<p>Pre-formatted code blocks are used for writing about programming or -markup source code. Rather than forming normal paragraphs, the lines -of a code block are interpreted literally. Markdown wraps a code block -in both <code><pre></code> and <code><code></code> tags.</p> - -<p>To produce a code block in Markdown, simply indent every line of the -block by at least 4 spaces or 1 tab. For example, given this input:</p> - -<pre><code>This is a normal paragraph: - - This is a code block. -</code></pre> - -<p>Markdown will generate:</p> - -<pre><code><p>This is a normal paragraph:</p> - -<pre><code>This is a code block. -</code></pre> -</code></pre> - -<p>One level of indentation -- 4 spaces or 1 tab -- is removed from each -line of the code block. For example, this:</p> - -<pre><code>Here is an example of AppleScript: - - tell application "Foo" - beep - end tell -</code></pre> - -<p>will turn into:</p> - -<pre><code><p>Here is an example of AppleScript:</p> - -<pre><code>tell application "Foo" - beep -end tell -</code></pre> -</code></pre> - -<p>A code block continues until it reaches a line that is not indented -(or the end of the article).</p> - -<p>Within a code block, ampersands (<code>&</code>) and angle brackets (<code><</code> and <code>></code>) -are automatically converted into HTML entities. This makes it very -easy to include example HTML source code using Markdown -- just paste -it and indent it, and Markdown will handle the hassle of encoding the -ampersands and angle brackets. For example, this:</p> - -<pre><code> <div class="footer"> - &copy; 2004 Foo Corporation - </div> -</code></pre> - -<p>will turn into:</p> - -<pre><code><pre><code>&lt;div class="footer"&gt; - &amp;copy; 2004 Foo Corporation -&lt;/div&gt; -</code></pre> -</code></pre> - -<p>Regular Markdown syntax is not processed within code blocks. E.g., -asterisks are just literal asterisks within a code block. This means -it's also easy to use Markdown to write about Markdown's own syntax.</p> - -<h3 id="hr">Horizontal Rules</h3> - -<p>You can produce a horizontal rule tag (<code><hr /></code>) by placing three or -more hyphens, asterisks, or underscores on a line by themselves. If you -wish, you may use spaces between the hyphens or asterisks. Each of the -following lines will produce a horizontal rule:</p> - -<pre><code>* * * - -*** - -***** - -- - - - ---------------------------------------- - -_ _ _ -</code></pre> - -<hr /> - -<h2 id="span">Span Elements</h2> - -<h3 id="link">Links</h3> - -<p>Markdown supports two style of links: <em>inline</em> and <em>reference</em>.</p> - -<p>In both styles, the link text is delimited by [square brackets].</p> - -<p>To create an inline link, use a set of regular parentheses immediately -after the link text's closing square bracket. Inside the parentheses, -put the URL where you want the link to point, along with an <em>optional</em> -title for the link, surrounded in quotes. For example:</p> - -<pre><code>This is [an example](http://example.com/ "Title") inline link. - -[This link](http://example.net/) has no title attribute. -</code></pre> - -<p>Will produce:</p> - -<pre><code><p>This is <a href="http://example.com/" title="Title"> -an example</a> inline link.</p> - -<p><a href="http://example.net/">This link</a> has no -title attribute.</p> -</code></pre> - -<p>If you're referring to a local resource on the same server, you can -use relative paths:</p> - -<pre><code>See my [About](/about/) page for details. -</code></pre> - -<p>Reference-style links use a second set of square brackets, inside -which you place a label of your choosing to identify the link:</p> - -<pre><code>This is [an example][id] reference-style link. -</code></pre> - -<p>You can optionally use a space to separate the sets of brackets:</p> - -<pre><code>This is [an example] [id] reference-style link. -</code></pre> - -<p>Then, anywhere in the document, you define your link label like this, -on a line by itself:</p> - -<pre><code>[id]: http://example.com/ "Optional Title Here" -</code></pre> - -<p>That is:</p> - -<ul> -<li>Square brackets containing the link identifier (optionally -indented from the left margin using up to three spaces);</li> -<li>followed by a colon;</li> -<li>followed by one or more spaces (or tabs);</li> -<li>followed by the URL for the link;</li> -<li>optionally followed by a title attribute for the link, enclosed -in double or single quotes.</li> -</ul> - -<p>The link URL may, optionally, be surrounded by angle brackets:</p> - -<pre><code>[id]: <http://example.com/> "Optional Title Here" -</code></pre> - -<p>You can put the title attribute on the next line and use extra spaces -or tabs for padding, which tends to look better with longer URLs:</p> - -<pre><code>[id]: http://example.com/longish/path/to/resource/here - "Optional Title Here" -</code></pre> - -<p>Link definitions are only used for creating links during Markdown -processing, and are stripped from your document in the HTML output.</p> - -<p>Link definition names may constist of letters, numbers, spaces, and punctuation -- but they are <em>not</em> case sensitive. E.g. these two links:</p> - -<pre><code>[link text][a] -[link text][A] -</code></pre> - -<p>are equivalent.</p> - -<p>The <em>implicit link name</em> shortcut allows you to omit the name of the -link, in which case the link text itself is used as the name. -Just use an empty set of square brackets -- e.g., to link the word -"Google" to the google.com web site, you could simply write:</p> - -<pre><code>[Google][] -</code></pre> - -<p>And then define the link:</p> - -<pre><code>[Google]: http://google.com/ -</code></pre> - -<p>Because link names may contain spaces, this shortcut even works for -multiple words in the link text:</p> - -<pre><code>Visit [Daring Fireball][] for more information. -</code></pre> - -<p>And then define the link:</p> - -<pre><code>[Daring Fireball]: http://daringfireball.net/ -</code></pre> - -<p>Link definitions can be placed anywhere in your Markdown document. I -tend to put them immediately after each paragraph in which they're -used, but if you want, you can put them all at the end of your -document, sort of like footnotes.</p> - -<p>Here's an example of reference links in action:</p> - -<pre><code>I get 10 times more traffic from [Google] [1] than from -[Yahoo] [2] or [MSN] [3]. - - [1]: http://google.com/ "Google" - [2]: http://search.yahoo.com/ "Yahoo Search" - [3]: http://search.msn.com/ "MSN Search" -</code></pre> - -<p>Using the implicit link name shortcut, you could instead write:</p> - -<pre><code>I get 10 times more traffic from [Google][] than from -[Yahoo][] or [MSN][]. - - [google]: http://google.com/ "Google" - [yahoo]: http://search.yahoo.com/ "Yahoo Search" - [msn]: http://search.msn.com/ "MSN Search" -</code></pre> - -<p>Both of the above examples will produce the following HTML output:</p> - -<pre><code><p>I get 10 times more traffic from <a href="http://google.com/" -title="Google">Google</a> than from -<a href="http://search.yahoo.com/" title="Yahoo Search">Yahoo</a> -or <a href="http://search.msn.com/" title="MSN Search">MSN</a>.</p> -</code></pre> - -<p>For comparison, here is the same paragraph written using -Markdown's inline link style:</p> - -<pre><code>I get 10 times more traffic from [Google](http://google.com/ "Google") -than from [Yahoo](http://search.yahoo.com/ "Yahoo Search") or -[MSN](http://search.msn.com/ "MSN Search"). -</code></pre> - -<p>The point of reference-style links is not that they're easier to -write. The point is that with reference-style links, your document -source is vastly more readable. Compare the above examples: using -reference-style links, the paragraph itself is only 81 characters -long; with inline-style links, it's 176 characters; and as raw HTML, -it's 234 characters. In the raw HTML, there's more markup than there -is text.</p> - -<p>With Markdown's reference-style links, a source document much more -closely resembles the final output, as rendered in a browser. By -allowing you to move the markup-related metadata out of the paragraph, -you can add links without interrupting the narrative flow of your -prose.</p> - -<h3 id="em">Emphasis</h3> - -<p>Markdown treats asterisks (<code>*</code>) and underscores (<code>_</code>) as indicators of -emphasis. Text wrapped with one <code>*</code> or <code>_</code> will be wrapped with an -HTML <code><em></code> tag; double <code>*</code>'s or <code>_</code>'s will be wrapped with an HTML -<code><strong></code> tag. E.g., this input:</p> - -<pre><code>*single asterisks* - -_single underscores_ - -**double asterisks** - -__double underscores__ -</code></pre> - -<p>will produce:</p> - -<pre><code><em>single asterisks</em> - -<em>single underscores</em> - -<strong>double asterisks</strong> - -<strong>double underscores</strong> -</code></pre> - -<p>You can use whichever style you prefer; the lone restriction is that -the same character must be used to open and close an emphasis span.</p> - -<p>Emphasis can be used in the middle of a word:</p> - -<pre><code>un*fucking*believable -</code></pre> - -<p>But if you surround an <code>*</code> or <code>_</code> with spaces, it'll be treated as a -literal asterisk or underscore.</p> - -<p>To produce a literal asterisk or underscore at a position where it -would otherwise be used as an emphasis delimiter, you can backslash -escape it:</p> - -<pre><code>\*this text is surrounded by literal asterisks\* -</code></pre> - -<h3 id="code">Code</h3> - -<p>To indicate a span of code, wrap it with backtick quotes (<code>`</code>). -Unlike a pre-formatted code block, a code span indicates code within a -normal paragraph. For example:</p> - -<pre><code>Use the `printf()` function. -</code></pre> - -<p>will produce:</p> - -<pre><code><p>Use the <code>printf()</code> function.</p> -</code></pre> - -<p>To include a literal backtick character within a code span, you can use -multiple backticks as the opening and closing delimiters:</p> - -<pre><code>``There is a literal backtick (`) here.`` -</code></pre> - -<p>which will produce this:</p> - -<pre><code><p><code>There is a literal backtick (`) here.</code></p> -</code></pre> - -<p>The backtick delimiters surrounding a code span may include spaces -- -one after the opening, one before the closing. This allows you to place -literal backtick characters at the beginning or end of a code span:</p> - -<pre><code>A single backtick in a code span: `` ` `` - -A backtick-delimited string in a code span: `` `foo` `` -</code></pre> - -<p>will produce:</p> - -<pre><code><p>A single backtick in a code span: <code>`</code></p> - -<p>A backtick-delimited string in a code span: <code>`foo`</code></p> -</code></pre> - -<p>With a code span, ampersands and angle brackets are encoded as HTML -entities automatically, which makes it easy to include example HTML -tags. Markdown will turn this:</p> - -<pre><code>Please don't use any `<blink>` tags. -</code></pre> - -<p>into:</p> - -<pre><code><p>Please don't use any <code>&lt;blink&gt;</code> tags.</p> -</code></pre> - -<p>You can write this:</p> - -<pre><code>`&#8212;` is the decimal-encoded equivalent of `&mdash;`. -</code></pre> - -<p>to produce:</p> - -<pre><code><p><code>&amp;#8212;</code> is the decimal-encoded -equivalent of <code>&amp;mdash;</code>.</p> -</code></pre> - -<h3 id="img">Images</h3> - -<p>Admittedly, it's fairly difficult to devise a "natural" syntax for -placing images into a plain text document format.</p> - -<p>Markdown uses an image syntax that is intended to resemble the syntax -for links, allowing for two styles: <em>inline</em> and <em>reference</em>.</p> - -<p>Inline image syntax looks like this:</p> - -<pre><code>![Alt text](/path/to/img.jpg) - -![Alt text](/path/to/img.jpg "Optional title") -</code></pre> - -<p>That is:</p> - -<ul> -<li>An exclamation mark: <code>!</code>;</li> -<li>followed by a set of square brackets, containing the <code>alt</code> -attribute text for the image;</li> -<li>followed by a set of parentheses, containing the URL or path to -the image, and an optional <code>title</code> attribute enclosed in double -or single quotes.</li> -</ul> - -<p>Reference-style image syntax looks like this:</p> - -<pre><code>![Alt text][id] -</code></pre> - -<p>Where "id" is the name of a defined image reference. Image references -are defined using syntax identical to link references:</p> - -<pre><code>[id]: url/to/image "Optional title attribute" -</code></pre> - -<p>As of this writing, Markdown has no syntax for specifying the -dimensions of an image; if this is important to you, you can simply -use regular HTML <code><img></code> tags.</p> - -<hr /> - -<h2 id="misc">Miscellaneous</h2> - -<h3 id="autolink">Automatic Links</h3> - -<p>Markdown supports a shortcut style for creating "automatic" links for URLs and email addresses: simply surround the URL or email address with angle brackets. What this means is that if you want to show the actual text of a URL or email address, and also have it be a clickable link, you can do this:</p> - -<pre><code><http://example.com/> -</code></pre> - -<p>Markdown will turn this into:</p> - -<pre><code><a href="http://example.com/">http://example.com/</a> -</code></pre> - -<p>Automatic links for email addresses work similarly, except that -Markdown will also perform a bit of randomized decimal and hex -entity-encoding to help obscure your address from address-harvesting -spambots. For example, Markdown will turn this:</p> - -<pre><code><address@example.com> -</code></pre> - -<p>into something like this:</p> - -<pre><code><a href="&#x6D;&#x61;i&#x6C;&#x74;&#x6F;:&#x61;&#x64;&#x64;&#x72;&#x65; -&#115;&#115;&#64;&#101;&#120;&#x61;&#109;&#x70;&#x6C;e&#x2E;&#99;&#111; -&#109;">&#x61;&#x64;&#x64;&#x72;&#x65;&#115;&#115;&#64;&#101;&#120;&#x61; -&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;&#109;</a> -</code></pre> - -<p>which will render in a browser as a clickable link to "address@example.com".</p> - -<p>(This sort of entity-encoding trick will indeed fool many, if not -most, address-harvesting bots, but it definitely won't fool all of -them. It's better than nothing, but an address published in this way -will probably eventually start receiving spam.)</p> - -<h3 id="backslash">Backslash Escapes</h3> - -<p>Markdown allows you to use backslash escapes to generate literal -characters which would otherwise have special meaning in Markdown's -formatting syntax. For example, if you wanted to surround a word with -literal asterisks (instead of an HTML <code><em></code> tag), you can backslashes -before the asterisks, like this:</p> - -<pre><code>\*literal asterisks\* -</code></pre> - -<p>Markdown provides backslash escapes for the following characters:</p> - -<pre><code>\ backslash -` backtick -* asterisk -_ underscore -{} curly braces -[] square brackets -() parentheses -# hash mark -+ plus sign -- minus sign (hyphen) -. dot -! exclamation mark -</code></pre> diff --git a/packages/markdown/marked/test/original/markdown_documentation_syntax.md b/packages/markdown/marked/test/original/markdown_documentation_syntax.md deleted file mode 100644 index e3bd4a7f..00000000 --- a/packages/markdown/marked/test/original/markdown_documentation_syntax.md +++ /dev/null @@ -1,892 +0,0 @@ ---- -pedantic: true -headerIds: false ---- - -Markdown: Syntax -================ - -<ul id="ProjectSubmenu"> - <li><a href="/projects/markdown/" title="Markdown Project Page">Main</a></li> - <li><a href="/projects/markdown/basics" title="Markdown Basics">Basics</a></li> - <li><a class="selected" title="Markdown Syntax Documentation">Syntax</a></li> - <li><a href="/projects/markdown/license" title="Pricing and License Information">License</a></li> - <li><a href="/projects/markdown/dingus" title="Online Markdown Web Form">Dingus</a></li> -</ul> - - -* [Overview](#overview) - * [Philosophy](#philosophy) - * [Inline HTML](#html) - * [Automatic Escaping for Special Characters](#autoescape) -* [Block Elements](#block) - * [Paragraphs and Line Breaks](#p) - * [Headers](#header) - * [Blockquotes](#blockquote) - * [Lists](#list) - * [Code Blocks](#precode) - * [Horizontal Rules](#hr) -* [Span Elements](#span) - * [Links](#link) - * [Emphasis](#em) - * [Code](#code) - * [Images](#img) -* [Miscellaneous](#misc) - * [Backslash Escapes](#backslash) - * [Automatic Links](#autolink) - - -**Note:** This document is itself written using Markdown; you -can [see the source for it by adding '.text' to the URL][src]. - - [src]: /projects/markdown/syntax.text - -* * * - -<h2 id="overview">Overview</h2> - -<h3 id="philosophy">Philosophy</h3> - -Markdown is intended to be as easy-to-read and easy-to-write as is feasible. - -Readability, however, is emphasized above all else. A Markdown-formatted -document should be publishable as-is, as plain text, without looking -like it's been marked up with tags or formatting instructions. While -Markdown's syntax has been influenced by several existing text-to-HTML -filters -- including [Setext] [1], [atx] [2], [Textile] [3], [reStructuredText] [4], -[Grutatext] [5], and [EtText] [6] -- the single biggest source of -inspiration for Markdown's syntax is the format of plain text email. - - [1]: http://docutils.sourceforge.net/mirror/setext.html - [2]: http://www.aaronsw.com/2002/atx/ - [3]: http://textism.com/tools/textile/ - [4]: http://docutils.sourceforge.net/rst.html - [5]: http://www.triptico.com/software/grutatxt.html - [6]: http://ettext.taint.org/doc/ - -To this end, Markdown's syntax is comprised entirely of punctuation -characters, which punctuation characters have been carefully chosen so -as to look like what they mean. E.g., asterisks around a word actually -look like \*emphasis\*. Markdown lists look like, well, lists. Even -blockquotes look like quoted passages of text, assuming you've ever -used email. - - - -<h3 id="html">Inline HTML</h3> - -Markdown's syntax is intended for one purpose: to be used as a -format for *writing* for the web. - -Markdown is not a replacement for HTML, or even close to it. Its -syntax is very small, corresponding only to a very small subset of -HTML tags. The idea is *not* to create a syntax that makes it easier -to insert HTML tags. In my opinion, HTML tags are already easy to -insert. The idea for Markdown is to make it easy to read, write, and -edit prose. HTML is a *publishing* format; Markdown is a *writing* -format. Thus, Markdown's formatting syntax only addresses issues that -can be conveyed in plain text. - -For any markup that is not covered by Markdown's syntax, you simply -use HTML itself. There's no need to preface it or delimit it to -indicate that you're switching from Markdown to HTML; you just use -the tags. - -The only restrictions are that block-level HTML elements -- e.g. `<div>`, -`<table>`, `<pre>`, `<p>`, etc. -- must be separated from surrounding -content by blank lines, and the start and end tags of the block should -not be indented with tabs or spaces. Markdown is smart enough not -to add extra (unwanted) `<p>` tags around HTML block-level tags. - -For example, to add an HTML table to a Markdown article: - - This is a regular paragraph. - - <table> - <tr> - <td>Foo</td> - </tr> - </table> - - This is another regular paragraph. - -Note that Markdown formatting syntax is not processed within block-level -HTML tags. E.g., you can't use Markdown-style `*emphasis*` inside an -HTML block. - -Span-level HTML tags -- e.g. `<span>`, `<cite>`, or `<del>` -- can be -used anywhere in a Markdown paragraph, list item, or header. If you -want, you can even use HTML tags instead of Markdown formatting; e.g. if -you'd prefer to use HTML `<a>` or `<img>` tags instead of Markdown's -link or image syntax, go right ahead. - -Unlike block-level HTML tags, Markdown syntax *is* processed within -span-level tags. - - -<h3 id="autoescape">Automatic Escaping for Special Characters</h3> - -In HTML, there are two characters that demand special treatment: `<` -and `&`. Left angle brackets are used to start tags; ampersands are -used to denote HTML entities. If you want to use them as literal -characters, you must escape them as entities, e.g. `<`, and -`&`. - -Ampersands in particular are bedeviling for web writers. If you want to -write about 'AT&T', you need to write '`AT&T`'. You even need to -escape ampersands within URLs. Thus, if you want to link to: - - http://images.google.com/images?num=30&q=larry+bird - -you need to encode the URL as: - - http://images.google.com/images?num=30&q=larry+bird - -in your anchor tag `href` attribute. Needless to say, this is easy to -forget, and is probably the single most common source of HTML validation -errors in otherwise well-marked-up web sites. - -Markdown allows you to use these characters naturally, taking care of -all the necessary escaping for you. If you use an ampersand as part of -an HTML entity, it remains unchanged; otherwise it will be translated -into `&`. - -So, if you want to include a copyright symbol in your article, you can write: - - © - -and Markdown will leave it alone. But if you write: - - AT&T - -Markdown will translate it to: - - AT&T - -Similarly, because Markdown supports [inline HTML](#html), if you use -angle brackets as delimiters for HTML tags, Markdown will treat them as -such. But if you write: - - 4 < 5 - -Markdown will translate it to: - - 4 < 5 - -However, inside Markdown code spans and blocks, angle brackets and -ampersands are *always* encoded automatically. This makes it easy to use -Markdown to write about HTML code. (As opposed to raw HTML, which is a -terrible format for writing about HTML syntax, because every single `<` -and `&` in your example code needs to be escaped.) - - -* * * - - -<h2 id="block">Block Elements</h2> - - -<h3 id="p">Paragraphs and Line Breaks</h3> - -A paragraph is simply one or more consecutive lines of text, separated -by one or more blank lines. (A blank line is any line that looks like a -blank line -- a line containing nothing but spaces or tabs is considered -blank.) Normal paragraphs should not be intended with spaces or tabs. - -The implication of the "one or more consecutive lines of text" rule is -that Markdown supports "hard-wrapped" text paragraphs. This differs -significantly from most other text-to-HTML formatters (including Movable -Type's "Convert Line Breaks" option) which translate every line break -character in a paragraph into a `<br />` tag. - -When you *do* want to insert a `<br />` break tag using Markdown, you -end a line with two or more spaces, then type return. - -Yes, this takes a tad more effort to create a `<br />`, but a simplistic -"every line break is a `<br />`" rule wouldn't work for Markdown. -Markdown's email-style [blockquoting][bq] and multi-paragraph [list items][l] -work best -- and look better -- when you format them with hard breaks. - - [bq]: #blockquote - [l]: #list - - - -<h3 id="header">Headers</h3> - -Markdown supports two styles of headers, [Setext] [1] and [atx] [2]. - -Setext-style headers are "underlined" using equal signs (for first-level -headers) and dashes (for second-level headers). For example: - - This is an H1 - ============= - - This is an H2 - ------------- - -Any number of underlining `=`'s or `-`'s will work. - -Atx-style headers use 1-6 hash characters at the start of the line, -corresponding to header levels 1-6. For example: - - # This is an H1 - - ## This is an H2 - - ###### This is an H6 - -Optionally, you may "close" atx-style headers. This is purely -cosmetic -- you can use this if you think it looks better. The -closing hashes don't even need to match the number of hashes -used to open the header. (The number of opening hashes -determines the header level.) : - - # This is an H1 # - - ## This is an H2 ## - - ### This is an H3 ###### - - -<h3 id="blockquote">Blockquotes</h3> - -Markdown uses email-style `>` characters for blockquoting. If you're -familiar with quoting passages of text in an email message, then you -know how to create a blockquote in Markdown. It looks best if you hard -wrap the text and put a `>` before every line: - - > This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, - > consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. - > Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. - > - > Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse - > id sem consectetuer libero luctus adipiscing. - -Markdown allows you to be lazy and only put the `>` before the first -line of a hard-wrapped paragraph: - - > This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, - consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. - Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. - - > Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse - id sem consectetuer libero luctus adipiscing. - -Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by -adding additional levels of `>`: - - > This is the first level of quoting. - > - > > This is nested blockquote. - > - > Back to the first level. - -Blockquotes can contain other Markdown elements, including headers, lists, -and code blocks: - - > ## This is a header. - > - > 1. This is the first list item. - > 2. This is the second list item. - > - > Here's some example code: - > - > return shell_exec("echo $input | $markdown_script"); - -Any decent text editor should make email-style quoting easy. For -example, with BBEdit, you can make a selection and choose Increase -Quote Level from the Text menu. - - -<h3 id="list">Lists</h3> - -Markdown supports ordered (numbered) and unordered (bulleted) lists. - -Unordered lists use asterisks, pluses, and hyphens -- interchangably --- as list markers: - - * Red - * Green - * Blue - -is equivalent to: - - + Red - + Green - + Blue - -and: - - - Red - - Green - - Blue - -Ordered lists use numbers followed by periods: - - 1. Bird - 2. McHale - 3. Parish - -It's important to note that the actual numbers you use to mark the -list have no effect on the HTML output Markdown produces. The HTML -Markdown produces from the above list is: - - <ol> - <li>Bird</li> - <li>McHale</li> - <li>Parish</li> - </ol> - -If you instead wrote the list in Markdown like this: - - 1. Bird - 1. McHale - 1. Parish - -or even: - - 3. Bird - 1. McHale - 8. Parish - -you'd get the exact same HTML output. The point is, if you want to, -you can use ordinal numbers in your ordered Markdown lists, so that -the numbers in your source match the numbers in your published HTML. -But if you want to be lazy, you don't have to. - -If you do use lazy list numbering, however, you should still start the -list with the number 1. At some point in the future, Markdown may support -starting ordered lists at an arbitrary number. - -List markers typically start at the left margin, but may be indented by -up to three spaces. List markers must be followed by one or more spaces -or a tab. - -To make lists look nice, you can wrap items with hanging indents: - - * Lorem ipsum dolor sit amet, consectetuer adipiscing elit. - Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, - viverra nec, fringilla in, laoreet vitae, risus. - * Donec sit amet nisl. Aliquam semper ipsum sit amet velit. - Suspendisse id sem consectetuer libero luctus adipiscing. - -But if you want to be lazy, you don't have to: - - * Lorem ipsum dolor sit amet, consectetuer adipiscing elit. - Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, - viverra nec, fringilla in, laoreet vitae, risus. - * Donec sit amet nisl. Aliquam semper ipsum sit amet velit. - Suspendisse id sem consectetuer libero luctus adipiscing. - -If list items are separated by blank lines, Markdown will wrap the -items in `<p>` tags in the HTML output. For example, this input: - - * Bird - * Magic - -will turn into: - - <ul> - <li>Bird</li> - <li>Magic</li> - </ul> - -But this: - - * Bird - - * Magic - -will turn into: - - <ul> - <li><p>Bird</p></li> - <li><p>Magic</p></li> - </ul> - -List items may consist of multiple paragraphs. Each subsequent -paragraph in a list item must be intended by either 4 spaces -or one tab: - - 1. This is a list item with two paragraphs. Lorem ipsum dolor - sit amet, consectetuer adipiscing elit. Aliquam hendrerit - mi posuere lectus. - - Vestibulum enim wisi, viverra nec, fringilla in, laoreet - vitae, risus. Donec sit amet nisl. Aliquam semper ipsum - sit amet velit. - - 2. Suspendisse id sem consectetuer libero luctus adipiscing. - -It looks nice if you indent every line of the subsequent -paragraphs, but here again, Markdown will allow you to be -lazy: - - * This is a list item with two paragraphs. - - This is the second paragraph in the list item. You're - only required to indent the first line. Lorem ipsum dolor - sit amet, consectetuer adipiscing elit. - - * Another item in the same list. - -To put a blockquote within a list item, the blockquote's `>` -delimiters need to be indented: - - * A list item with a blockquote: - - > This is a blockquote - > inside a list item. - -To put a code block within a list item, the code block needs -to be indented *twice* -- 8 spaces or two tabs: - - * A list item with a code block: - - <code goes here> - - -It's worth noting that it's possible to trigger an ordered list by -accident, by writing something like this: - - 1986. What a great season. - -In other words, a *number-period-space* sequence at the beginning of a -line. To avoid this, you can backslash-escape the period: - - 1986\. What a great season. - - - -<h3 id="precode">Code Blocks</h3> - -Pre-formatted code blocks are used for writing about programming or -markup source code. Rather than forming normal paragraphs, the lines -of a code block are interpreted literally. Markdown wraps a code block -in both `<pre>` and `<code>` tags. - -To produce a code block in Markdown, simply indent every line of the -block by at least 4 spaces or 1 tab. For example, given this input: - - This is a normal paragraph: - - This is a code block. - -Markdown will generate: - - <p>This is a normal paragraph:</p> - - <pre><code>This is a code block. - </code></pre> - -One level of indentation -- 4 spaces or 1 tab -- is removed from each -line of the code block. For example, this: - - Here is an example of AppleScript: - - tell application "Foo" - beep - end tell - -will turn into: - - <p>Here is an example of AppleScript:</p> - - <pre><code>tell application "Foo" - beep - end tell - </code></pre> - -A code block continues until it reaches a line that is not indented -(or the end of the article). - -Within a code block, ampersands (`&`) and angle brackets (`<` and `>`) -are automatically converted into HTML entities. This makes it very -easy to include example HTML source code using Markdown -- just paste -it and indent it, and Markdown will handle the hassle of encoding the -ampersands and angle brackets. For example, this: - - <div class="footer"> - © 2004 Foo Corporation - </div> - -will turn into: - - <pre><code><div class="footer"> - &copy; 2004 Foo Corporation - </div> - </code></pre> - -Regular Markdown syntax is not processed within code blocks. E.g., -asterisks are just literal asterisks within a code block. This means -it's also easy to use Markdown to write about Markdown's own syntax. - - - -<h3 id="hr">Horizontal Rules</h3> - -You can produce a horizontal rule tag (`<hr />`) by placing three or -more hyphens, asterisks, or underscores on a line by themselves. If you -wish, you may use spaces between the hyphens or asterisks. Each of the -following lines will produce a horizontal rule: - - * * * - - *** - - ***** - - - - - - - --------------------------------------- - - _ _ _ - - -* * * - -<h2 id="span">Span Elements</h2> - -<h3 id="link">Links</h3> - -Markdown supports two style of links: *inline* and *reference*. - -In both styles, the link text is delimited by [square brackets]. - -To create an inline link, use a set of regular parentheses immediately -after the link text's closing square bracket. Inside the parentheses, -put the URL where you want the link to point, along with an *optional* -title for the link, surrounded in quotes. For example: - - This is [an example](http://example.com/ "Title") inline link. - - [This link](http://example.net/) has no title attribute. - -Will produce: - - <p>This is <a href="http://example.com/" title="Title"> - an example</a> inline link.</p> - - <p><a href="http://example.net/">This link</a> has no - title attribute.</p> - -If you're referring to a local resource on the same server, you can -use relative paths: - - See my [About](/about/) page for details. - -Reference-style links use a second set of square brackets, inside -which you place a label of your choosing to identify the link: - - This is [an example][id] reference-style link. - -You can optionally use a space to separate the sets of brackets: - - This is [an example] [id] reference-style link. - -Then, anywhere in the document, you define your link label like this, -on a line by itself: - - [id]: http://example.com/ "Optional Title Here" - -That is: - -* Square brackets containing the link identifier (optionally - indented from the left margin using up to three spaces); -* followed by a colon; -* followed by one or more spaces (or tabs); -* followed by the URL for the link; -* optionally followed by a title attribute for the link, enclosed - in double or single quotes. - -The link URL may, optionally, be surrounded by angle brackets: - - [id]: <http://example.com/> "Optional Title Here" - -You can put the title attribute on the next line and use extra spaces -or tabs for padding, which tends to look better with longer URLs: - - [id]: http://example.com/longish/path/to/resource/here - "Optional Title Here" - -Link definitions are only used for creating links during Markdown -processing, and are stripped from your document in the HTML output. - -Link definition names may constist of letters, numbers, spaces, and punctuation -- but they are *not* case sensitive. E.g. these two links: - - [link text][a] - [link text][A] - -are equivalent. - -The *implicit link name* shortcut allows you to omit the name of the -link, in which case the link text itself is used as the name. -Just use an empty set of square brackets -- e.g., to link the word -"Google" to the google.com web site, you could simply write: - - [Google][] - -And then define the link: - - [Google]: http://google.com/ - -Because link names may contain spaces, this shortcut even works for -multiple words in the link text: - - Visit [Daring Fireball][] for more information. - -And then define the link: - - [Daring Fireball]: http://daringfireball.net/ - -Link definitions can be placed anywhere in your Markdown document. I -tend to put them immediately after each paragraph in which they're -used, but if you want, you can put them all at the end of your -document, sort of like footnotes. - -Here's an example of reference links in action: - - I get 10 times more traffic from [Google] [1] than from - [Yahoo] [2] or [MSN] [3]. - - [1]: http://google.com/ "Google" - [2]: http://search.yahoo.com/ "Yahoo Search" - [3]: http://search.msn.com/ "MSN Search" - -Using the implicit link name shortcut, you could instead write: - - I get 10 times more traffic from [Google][] than from - [Yahoo][] or [MSN][]. - - [google]: http://google.com/ "Google" - [yahoo]: http://search.yahoo.com/ "Yahoo Search" - [msn]: http://search.msn.com/ "MSN Search" - -Both of the above examples will produce the following HTML output: - - <p>I get 10 times more traffic from <a href="http://google.com/" - title="Google">Google</a> than from - <a href="http://search.yahoo.com/" title="Yahoo Search">Yahoo</a> - or <a href="http://search.msn.com/" title="MSN Search">MSN</a>.</p> - -For comparison, here is the same paragraph written using -Markdown's inline link style: - - I get 10 times more traffic from [Google](http://google.com/ "Google") - than from [Yahoo](http://search.yahoo.com/ "Yahoo Search") or - [MSN](http://search.msn.com/ "MSN Search"). - -The point of reference-style links is not that they're easier to -write. The point is that with reference-style links, your document -source is vastly more readable. Compare the above examples: using -reference-style links, the paragraph itself is only 81 characters -long; with inline-style links, it's 176 characters; and as raw HTML, -it's 234 characters. In the raw HTML, there's more markup than there -is text. - -With Markdown's reference-style links, a source document much more -closely resembles the final output, as rendered in a browser. By -allowing you to move the markup-related metadata out of the paragraph, -you can add links without interrupting the narrative flow of your -prose. - - -<h3 id="em">Emphasis</h3> - -Markdown treats asterisks (`*`) and underscores (`_`) as indicators of -emphasis. Text wrapped with one `*` or `_` will be wrapped with an -HTML `<em>` tag; double `*`'s or `_`'s will be wrapped with an HTML -`<strong>` tag. E.g., this input: - - *single asterisks* - - _single underscores_ - - **double asterisks** - - __double underscores__ - -will produce: - - <em>single asterisks</em> - - <em>single underscores</em> - - <strong>double asterisks</strong> - - <strong>double underscores</strong> - -You can use whichever style you prefer; the lone restriction is that -the same character must be used to open and close an emphasis span. - -Emphasis can be used in the middle of a word: - - un*fucking*believable - -But if you surround an `*` or `_` with spaces, it'll be treated as a -literal asterisk or underscore. - -To produce a literal asterisk or underscore at a position where it -would otherwise be used as an emphasis delimiter, you can backslash -escape it: - - \*this text is surrounded by literal asterisks\* - - - -<h3 id="code">Code</h3> - -To indicate a span of code, wrap it with backtick quotes (`` ` ``). -Unlike a pre-formatted code block, a code span indicates code within a -normal paragraph. For example: - - Use the `printf()` function. - -will produce: - - <p>Use the <code>printf()</code> function.</p> - -To include a literal backtick character within a code span, you can use -multiple backticks as the opening and closing delimiters: - - ``There is a literal backtick (`) here.`` - -which will produce this: - - <p><code>There is a literal backtick (`) here.</code></p> - -The backtick delimiters surrounding a code span may include spaces -- -one after the opening, one before the closing. This allows you to place -literal backtick characters at the beginning or end of a code span: - - A single backtick in a code span: `` ` `` - - A backtick-delimited string in a code span: `` `foo` `` - -will produce: - - <p>A single backtick in a code span: <code>`</code></p> - - <p>A backtick-delimited string in a code span: <code>`foo`</code></p> - -With a code span, ampersands and angle brackets are encoded as HTML -entities automatically, which makes it easy to include example HTML -tags. Markdown will turn this: - - Please don't use any `<blink>` tags. - -into: - - <p>Please don't use any <code><blink></code> tags.</p> - -You can write this: - - `—` is the decimal-encoded equivalent of `—`. - -to produce: - - <p><code>&#8212;</code> is the decimal-encoded - equivalent of <code>&mdash;</code>.</p> - - - -<h3 id="img">Images</h3> - -Admittedly, it's fairly difficult to devise a "natural" syntax for -placing images into a plain text document format. - -Markdown uses an image syntax that is intended to resemble the syntax -for links, allowing for two styles: *inline* and *reference*. - -Inline image syntax looks like this: - - ![Alt text](/path/to/img.jpg) - - ![Alt text](/path/to/img.jpg "Optional title") - -That is: - -* An exclamation mark: `!`; -* followed by a set of square brackets, containing the `alt` - attribute text for the image; -* followed by a set of parentheses, containing the URL or path to - the image, and an optional `title` attribute enclosed in double - or single quotes. - -Reference-style image syntax looks like this: - - ![Alt text][id] - -Where "id" is the name of a defined image reference. Image references -are defined using syntax identical to link references: - - [id]: url/to/image "Optional title attribute" - -As of this writing, Markdown has no syntax for specifying the -dimensions of an image; if this is important to you, you can simply -use regular HTML `<img>` tags. - - -* * * - - -<h2 id="misc">Miscellaneous</h2> - -<h3 id="autolink">Automatic Links</h3> - -Markdown supports a shortcut style for creating "automatic" links for URLs and email addresses: simply surround the URL or email address with angle brackets. What this means is that if you want to show the actual text of a URL or email address, and also have it be a clickable link, you can do this: - - <http://example.com/> - -Markdown will turn this into: - - <a href="http://example.com/">http://example.com/</a> - -Automatic links for email addresses work similarly, except that -Markdown will also perform a bit of randomized decimal and hex -entity-encoding to help obscure your address from address-harvesting -spambots. For example, Markdown will turn this: - - <address@example.com> - -into something like this: - - <a href="mailto:addre - ss@example.co - m">address@exa - mple.com</a> - -which will render in a browser as a clickable link to "address@example.com". - -(This sort of entity-encoding trick will indeed fool many, if not -most, address-harvesting bots, but it definitely won't fool all of -them. It's better than nothing, but an address published in this way -will probably eventually start receiving spam.) - - - -<h3 id="backslash">Backslash Escapes</h3> - -Markdown allows you to use backslash escapes to generate literal -characters which would otherwise have special meaning in Markdown's -formatting syntax. For example, if you wanted to surround a word with -literal asterisks (instead of an HTML `<em>` tag), you can backslashes -before the asterisks, like this: - - \*literal asterisks\* - -Markdown provides backslash escapes for the following characters: - - \ backslash - ` backtick - * asterisk - _ underscore - {} curly braces - [] square brackets - () parentheses - # hash mark - + plus sign - - minus sign (hyphen) - . dot - ! exclamation mark diff --git a/packages/markdown/marked/test/original/nested_blockquotes.html b/packages/markdown/marked/test/original/nested_blockquotes.html deleted file mode 100644 index d8ec7f8e..00000000 --- a/packages/markdown/marked/test/original/nested_blockquotes.html +++ /dev/null @@ -1,9 +0,0 @@ -<blockquote> - <p>foo</p> - - <blockquote> - <p>bar</p> - </blockquote> - - <p>foo</p> -</blockquote> diff --git a/packages/markdown/marked/test/original/nested_blockquotes.md b/packages/markdown/marked/test/original/nested_blockquotes.md deleted file mode 100644 index ed3c624f..00000000 --- a/packages/markdown/marked/test/original/nested_blockquotes.md +++ /dev/null @@ -1,5 +0,0 @@ -> foo -> -> > bar -> -> foo diff --git a/packages/markdown/marked/test/original/ordered_and_unordered_lists.html b/packages/markdown/marked/test/original/ordered_and_unordered_lists.html deleted file mode 100644 index 45469479..00000000 --- a/packages/markdown/marked/test/original/ordered_and_unordered_lists.html +++ /dev/null @@ -1,164 +0,0 @@ -<h2>Unordered</h2> - -<p>Asterisks tight:</p> - -<ul> -<li>asterisk 1</li> -<li>asterisk 2</li> -<li>asterisk 3</li> -</ul> - -<p>Asterisks loose:</p> - -<ul> -<li><p>asterisk 1</p></li> -<li><p>asterisk 2</p></li> -<li><p>asterisk 3</p></li> -</ul> - -<hr /> - -<p>Pluses tight:</p> - -<ul> -<li>Plus 1</li> -<li>Plus 2</li> -<li>Plus 3</li> -</ul> - -<p>Pluses loose:</p> - -<ul> -<li><p>Plus 1</p></li> -<li><p>Plus 2</p></li> -<li><p>Plus 3</p></li> -</ul> - -<hr /> - -<p>Minuses tight:</p> - -<ul> -<li>Minus 1</li> -<li>Minus 2</li> -<li>Minus 3</li> -</ul> - -<p>Minuses loose:</p> - -<ul> -<li><p>Minus 1</p></li> -<li><p>Minus 2</p></li> -<li><p>Minus 3</p></li> -</ul> - -<h2>Ordered</h2> - -<p>Tight:</p> - -<ol> -<li>First</li> -<li>Second</li> -<li>Third</li> -</ol> - -<p>and:</p> - -<ol> -<li>One</li> -<li>Two</li> -<li>Three</li> -</ol> - -<p>Loose using tabs:</p> - -<ol> -<li><p>First</p></li> -<li><p>Second</p></li> -<li><p>Third</p></li> -</ol> - -<p>and using spaces:</p> - -<ol> -<li><p>One</p></li> -<li><p>Two</p></li> -<li><p>Three</p></li> -</ol> - -<p>Multiple paragraphs:</p> - -<ol> -<li><p>Item 1, graf one.</p> - -<p>Item 2. graf two. The quick brown fox jumped over the lazy dog's -back.</p></li> -<li><p>Item 2.</p></li> -<li><p>Item 3.</p></li> -</ol> - -<h2>Nested</h2> - -<ul> -<li>Tab -<ul> -<li>Tab -<ul> -<li>Tab</li> -</ul></li> -</ul></li> -</ul> - -<p>Here's another:</p> - -<ol> -<li>First</li> -<li>Second: -<ul> -<li>Fee</li> -<li>Fie</li> -<li>Foe</li> -</ul></li> -<li>Third</li> -</ol> - -<p>Same thing but with paragraphs:</p> - -<ol> -<li><p>First</p></li> -<li><p>Second:</p> - -<ul> -<li>Fee</li> -<li>Fie</li> -<li>Foe</li> -</ul></li> -<li><p>Third</p></li> -</ol> - - -<p>This was an error in Markdown 1.0.1:</p> - -<ul> -<li><p>this</p> - -<ul><li>sub</li></ul> - -<p>that</p></li> -</ul> - - -<p>Ordered lists start from initial number:</p> - -<ol start="3"> -<li>Three</li> -<li>Four</li> -</ol> - - -<p>Ordered lists start from initial zero:</p> - -<ol start="0"> -<li>Zero</li> -<li>One</li> -</ol> diff --git a/packages/markdown/marked/test/original/ordered_and_unordered_lists.md b/packages/markdown/marked/test/original/ordered_and_unordered_lists.md deleted file mode 100644 index d11fb5d8..00000000 --- a/packages/markdown/marked/test/original/ordered_and_unordered_lists.md +++ /dev/null @@ -1,144 +0,0 @@ ---- -headerIds: false ---- -## Unordered - -Asterisks tight: - -* asterisk 1 -* asterisk 2 -* asterisk 3 - - -Asterisks loose: - -* asterisk 1 - -* asterisk 2 - -* asterisk 3 - -* * * - -Pluses tight: - -+ Plus 1 -+ Plus 2 -+ Plus 3 - - -Pluses loose: - -+ Plus 1 - -+ Plus 2 - -+ Plus 3 - -* * * - - -Minuses tight: - -- Minus 1 -- Minus 2 -- Minus 3 - - -Minuses loose: - -- Minus 1 - -- Minus 2 - -- Minus 3 - - -## Ordered - -Tight: - -1. First -2. Second -3. Third - -and: - -1. One -2. Two -3. Three - - -Loose using tabs: - -1. First - -2. Second - -3. Third - -and using spaces: - -1. One - -2. Two - -3. Three - -Multiple paragraphs: - -1. Item 1, graf one. - - Item 2. graf two. The quick brown fox jumped over the lazy dog's - back. - -2. Item 2. - -3. Item 3. - - - -## Nested - -* Tab - * Tab - * Tab - -Here's another: - -1. First -2. Second: - * Fee - * Fie - * Foe -3. Third - -Same thing but with paragraphs: - -1. First - -2. Second: - * Fee - * Fie - * Foe - -3. Third - - -This was an error in Markdown 1.0.1: - -* this - - * sub - - that - -Ordered lists start from initial number: - -3. Three -1. Four - -Ordered lists start from initial zero: - -0. Zero -1. One diff --git a/packages/markdown/marked/test/original/strong_and_em_together.html b/packages/markdown/marked/test/original/strong_and_em_together.html deleted file mode 100644 index 71ec78c7..00000000 --- a/packages/markdown/marked/test/original/strong_and_em_together.html +++ /dev/null @@ -1,7 +0,0 @@ -<p><strong><em>This is strong and em.</em></strong></p> - -<p>So is <strong><em>this</em></strong> word.</p> - -<p><strong><em>This is strong and em.</em></strong></p> - -<p>So is <strong><em>this</em></strong> word.</p> diff --git a/packages/markdown/marked/test/original/strong_and_em_together.md b/packages/markdown/marked/test/original/strong_and_em_together.md deleted file mode 100644 index 95ee690d..00000000 --- a/packages/markdown/marked/test/original/strong_and_em_together.md +++ /dev/null @@ -1,7 +0,0 @@ -***This is strong and em.*** - -So is ***this*** word. - -___This is strong and em.___ - -So is ___this___ word. diff --git a/packages/markdown/marked/test/original/tabs.html b/packages/markdown/marked/test/original/tabs.html deleted file mode 100644 index 3301ba80..00000000 --- a/packages/markdown/marked/test/original/tabs.html +++ /dev/null @@ -1,25 +0,0 @@ -<ul> -<li><p>this is a list item -indented with tabs</p></li> -<li><p>this is a list item -indented with spaces</p></li> -</ul> - -<p>Code:</p> - -<pre><code>this code block is indented by one tab -</code></pre> - -<p>And:</p> - -<pre><code> this code block is indented by two tabs -</code></pre> - -<p>And:</p> - -<pre><code>+ this is an example list item - indented with tabs - -+ this is an example list item - indented with spaces -</code></pre> diff --git a/packages/markdown/marked/test/original/tabs.md b/packages/markdown/marked/test/original/tabs.md deleted file mode 100644 index 589d1136..00000000 --- a/packages/markdown/marked/test/original/tabs.md +++ /dev/null @@ -1,21 +0,0 @@ -+ this is a list item - indented with tabs - -+ this is a list item - indented with spaces - -Code: - - this code block is indented by one tab - -And: - - this code block is indented by two tabs - -And: - - + this is an example list item - indented with tabs - - + this is an example list item - indented with spaces diff --git a/packages/markdown/marked/test/original/tidyness.html b/packages/markdown/marked/test/original/tidyness.html deleted file mode 100644 index f2a8ce70..00000000 --- a/packages/markdown/marked/test/original/tidyness.html +++ /dev/null @@ -1,8 +0,0 @@ -<blockquote> -<p>A list within a blockquote:</p> -<ul> -<li>asterisk 1</li> -<li>asterisk 2</li> -<li>asterisk 3</li> -</ul> -</blockquote> diff --git a/packages/markdown/marked/test/original/tidyness.md b/packages/markdown/marked/test/original/tidyness.md deleted file mode 100644 index 5f18b8da..00000000 --- a/packages/markdown/marked/test/original/tidyness.md +++ /dev/null @@ -1,5 +0,0 @@ -> A list within a blockquote: -> -> * asterisk 1 -> * asterisk 2 -> * asterisk 3 diff --git a/packages/markdown/marked/test/redos/link_redos.html b/packages/markdown/marked/test/redos/link_redos.html deleted file mode 100644 index fdbeb4d3..00000000 --- a/packages/markdown/marked/test/redos/link_redos.html +++ /dev/null @@ -1,5 +0,0 @@ -<ul> -<li>伪类:<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:active">:active</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:any-link">:any-link</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:blank">:blank</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:checked">:checked</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:current">:current</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:default">:default</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:defined">:defined</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:dir">:dir()</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:disabled">:disabled</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:drop">:drop</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:empty">:empty</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:enabled">:enabled</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:first">:first</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:first-child">:first-child</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:first-of-type">:first-of-type</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:fullscreen">:fullscreen</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:future">:future</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:focus">:focus</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible">:focus-visible</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-within">:focus-within</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:has">:has()</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:host">:host</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:host()">:host()</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:host-context()">:host-context()</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:hover">:hover</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:indeterminate">:indeterminate</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:in-range">:in-range</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:invalid">:invalid</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:is">:is()</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:lang">:lang()</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:last-child">:last-child</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:last-of-type">:last-of-type</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:left">:left</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:link">:link</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:local-link">:local-link</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:not">:not()</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-child">:nth-child()</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-col">:nth-col()</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-last-child">:nth-last-child()</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-last-col">:nth-last-col()</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-last-of-type">:nth-last-of-type()</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-of-type">:nth-of-type()</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:only-child">:only-child</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:only-of-type">:only-of-type</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:optional">:optional</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:out-of-range">:out-of-range</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:past">:past</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:placeholder-shown">:placeholder-shown</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:read-only">:read-only</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:read-write">:read-write</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:required">:required</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:right">:right</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:root">:root</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:scope">:scope</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:target">:target</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:target-within">:target-within</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:user-invalid">:user-invalid</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:valid">:valid</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:visited">:visited</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:where">:where()</a></li> -<li>伪元素:<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/::after">::after (:after)</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/::backdrop">::backdrop</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/::before">::before (:before)</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/::cue">::cue (:cue)</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/::first-letter">::first-letter (:first-letter)</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/::first-line">::first-line (:first-line)</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/::grammar-error">::grammar-error</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/::marker">::marker</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/::placeholder">::placeholder</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/::selection">::selection</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/::slotted">::slotted()</a>、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/::spelling-error">::spelling-error</a> </li> -</ul> - diff --git a/packages/markdown/marked/test/redos/link_redos.md b/packages/markdown/marked/test/redos/link_redos.md deleted file mode 100644 index effafa37..00000000 --- a/packages/markdown/marked/test/redos/link_redos.md +++ /dev/null @@ -1,2 +0,0 @@ -* 伪类:[:active](https://developer.mozilla.org/en-US/docs/Web/CSS/:active)、[:any-link](https://developer.mozilla.org/en-US/docs/Web/CSS/:any-link)、[:blank](https://developer.mozilla.org/en-US/docs/Web/CSS/:blank)、[:checked](https://developer.mozilla.org/en-US/docs/Web/CSS/:checked)、[:current](https://developer.mozilla.org/en-US/docs/Web/CSS/:current)、[:default](https://developer.mozilla.org/en-US/docs/Web/CSS/:default)、[:defined](https://developer.mozilla.org/en-US/docs/Web/CSS/:defined)、[:dir()](https://developer.mozilla.org/en-US/docs/Web/CSS/:dir)、[:disabled](https://developer.mozilla.org/en-US/docs/Web/CSS/:disabled)、[:drop](https://developer.mozilla.org/en-US/docs/Web/CSS/:drop)、[:empty](https://developer.mozilla.org/en-US/docs/Web/CSS/:empty)、[:enabled](https://developer.mozilla.org/en-US/docs/Web/CSS/:enabled)、[:first](https://developer.mozilla.org/en-US/docs/Web/CSS/:first)、[:first-child](https://developer.mozilla.org/en-US/docs/Web/CSS/:first-child)、[:first-of-type](https://developer.mozilla.org/en-US/docs/Web/CSS/:first-of-type)、[:fullscreen](https://developer.mozilla.org/en-US/docs/Web/CSS/:fullscreen)、[:future](https://developer.mozilla.org/en-US/docs/Web/CSS/:future)、[:focus](https://developer.mozilla.org/en-US/docs/Web/CSS/:focus)、[:focus-visible](https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible)、[:focus-within](https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-within)、[:has()](https://developer.mozilla.org/en-US/docs/Web/CSS/:has)、[:host](https://developer.mozilla.org/en-US/docs/Web/CSS/:host)、[:host()](https://developer.mozilla.org/en-US/docs/Web/CSS/:host())、[:host-context()](https://developer.mozilla.org/en-US/docs/Web/CSS/:host-context())、[:hover](https://developer.mozilla.org/en-US/docs/Web/CSS/:hover)、[:indeterminate](https://developer.mozilla.org/en-US/docs/Web/CSS/:indeterminate)、[:in-range](https://developer.mozilla.org/en-US/docs/Web/CSS/:in-range)、[:invalid](https://developer.mozilla.org/en-US/docs/Web/CSS/:invalid)、[:is()](https://developer.mozilla.org/en-US/docs/Web/CSS/:is)、[:lang()](https://developer.mozilla.org/en-US/docs/Web/CSS/:lang)、[:last-child](https://developer.mozilla.org/en-US/docs/Web/CSS/:last-child)、[:last-of-type](https://developer.mozilla.org/en-US/docs/Web/CSS/:last-of-type)、[:left](https://developer.mozilla.org/en-US/docs/Web/CSS/:left)、[:link](https://developer.mozilla.org/en-US/docs/Web/CSS/:link)、[:local-link](https://developer.mozilla.org/en-US/docs/Web/CSS/:local-link)、[:not()](https://developer.mozilla.org/en-US/docs/Web/CSS/:not)、[:nth-child()](https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-child)、[:nth-col()](https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-col)、[:nth-last-child()](https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-last-child)、[:nth-last-col()](https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-last-col)、[:nth-last-of-type()](https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-last-of-type)、[:nth-of-type()](https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-of-type)、[:only-child](https://developer.mozilla.org/en-US/docs/Web/CSS/:only-child)、[:only-of-type](https://developer.mozilla.org/en-US/docs/Web/CSS/:only-of-type)、[:optional](https://developer.mozilla.org/en-US/docs/Web/CSS/:optional)、[:out-of-range](https://developer.mozilla.org/en-US/docs/Web/CSS/:out-of-range)、[:past](https://developer.mozilla.org/en-US/docs/Web/CSS/:past)、[:placeholder-shown](https://developer.mozilla.org/en-US/docs/Web/CSS/:placeholder-shown)、[:read-only](https://developer.mozilla.org/en-US/docs/Web/CSS/:read-only)、[:read-write](https://developer.mozilla.org/en-US/docs/Web/CSS/:read-write)、[:required](https://developer.mozilla.org/en-US/docs/Web/CSS/:required)、[:right](https://developer.mozilla.org/en-US/docs/Web/CSS/:right)、[:root](https://developer.mozilla.org/en-US/docs/Web/CSS/:root)、[:scope](https://developer.mozilla.org/en-US/docs/Web/CSS/:scope)、[:target](https://developer.mozilla.org/en-US/docs/Web/CSS/:target)、[:target-within](https://developer.mozilla.org/en-US/docs/Web/CSS/:target-within)、[:user-invalid](https://developer.mozilla.org/en-US/docs/Web/CSS/:user-invalid)、[:valid](https://developer.mozilla.org/en-US/docs/Web/CSS/:valid)、[:visited](https://developer.mozilla.org/en-US/docs/Web/CSS/:visited)、[:where()](https://developer.mozilla.org/en-US/docs/Web/CSS/:where) -* 伪元素:[::after (:after)](https://developer.mozilla.org/en-US/docs/Web/CSS/::after)、[::backdrop](https://developer.mozilla.org/en-US/docs/Web/CSS/::backdrop)、[::before (:before)](https://developer.mozilla.org/en-US/docs/Web/CSS/::before)、[::cue (:cue)](https://developer.mozilla.org/en-US/docs/Web/CSS/::cue)、[::first-letter (:first-letter)](https://developer.mozilla.org/en-US/docs/Web/CSS/::first-letter)、[::first-line (:first-line)](https://developer.mozilla.org/en-US/docs/Web/CSS/::first-line)、[::grammar-error](https://developer.mozilla.org/en-US/docs/Web/CSS/::grammar-error)、[::marker](https://developer.mozilla.org/en-US/docs/Web/CSS/::marker)、[::placeholder](https://developer.mozilla.org/en-US/docs/Web/CSS/::placeholder)、[::selection](https://developer.mozilla.org/en-US/docs/Web/CSS/::selection)、[::slotted()](https://developer.mozilla.org/en-US/docs/Web/CSS/::slotted)、[::spelling-error](https://developer.mozilla.org/en-US/docs/Web/CSS/::spelling-error)
\ No newline at end of file diff --git a/packages/markdown/marked/test/redos/quadratic_br.js b/packages/markdown/marked/test/redos/quadratic_br.js deleted file mode 100644 index 48456b8a..00000000 --- a/packages/markdown/marked/test/redos/quadratic_br.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - markdown: `a${' '.repeat(50000)}`, - html: `<p>a${' '.repeat(50000)}</p>` -}; diff --git a/packages/markdown/marked/test/redos/quadratic_email.js b/packages/markdown/marked/test/redos/quadratic_email.js deleted file mode 100644 index 08243fe5..00000000 --- a/packages/markdown/marked/test/redos/quadratic_email.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - markdown: 'a'.repeat(50000), - html: `<p>${'a'.repeat(50000)}</p>` -}; diff --git a/packages/markdown/marked/test/redos/redos_html_closing.html b/packages/markdown/marked/test/redos/redos_html_closing.html deleted file mode 100644 index 543e775a..00000000 --- a/packages/markdown/marked/test/redos/redos_html_closing.html +++ /dev/null @@ -1 +0,0 @@ -<p><tag "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""<" />a'a</p> diff --git a/packages/markdown/marked/test/redos/redos_html_closing.md b/packages/markdown/marked/test/redos/redos_html_closing.md deleted file mode 100644 index 65bc5f73..00000000 --- a/packages/markdown/marked/test/redos/redos_html_closing.md +++ /dev/null @@ -1 +0,0 @@ -<tag "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""<" />a'a diff --git a/packages/markdown/marked/test/redos/redos_nolink.html b/packages/markdown/marked/test/redos/redos_nolink.html deleted file mode 100644 index 59153753..00000000 --- a/packages/markdown/marked/test/redos/redos_nolink.html +++ /dev/null @@ -1 +0,0 @@ -<p>![[[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[]!\</p> diff --git a/packages/markdown/marked/test/redos/redos_nolink.md b/packages/markdown/marked/test/redos/redos_nolink.md deleted file mode 100644 index a43a1568..00000000 --- a/packages/markdown/marked/test/redos/redos_nolink.md +++ /dev/null @@ -1 +0,0 @@ -![\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]!\ diff --git a/packages/markdown/marked/test/specs/commonmark/commonmark.0.29.json b/packages/markdown/marked/test/specs/commonmark/commonmark.0.29.json deleted file mode 100644 index db23d3bb..00000000 --- a/packages/markdown/marked/test/specs/commonmark/commonmark.0.29.json +++ /dev/null @@ -1,5327 +0,0 @@ -[ - { - "markdown": "\tfoo\tbaz\t\tbim\n", - "html": "<pre><code>foo\tbaz\t\tbim\n</code></pre>\n", - "example": 1, - "start_line": 352, - "end_line": 357, - "section": "Tabs" - }, - { - "markdown": " \tfoo\tbaz\t\tbim\n", - "html": "<pre><code>foo\tbaz\t\tbim\n</code></pre>\n", - "example": 2, - "start_line": 359, - "end_line": 364, - "section": "Tabs" - }, - { - "markdown": " a\ta\n ὐ\ta\n", - "html": "<pre><code>a\ta\nὐ\ta\n</code></pre>\n", - "example": 3, - "start_line": 366, - "end_line": 373, - "section": "Tabs" - }, - { - "markdown": " - foo\n\n\tbar\n", - "html": "<ul>\n<li>\n<p>foo</p>\n<p>bar</p>\n</li>\n</ul>\n", - "example": 4, - "start_line": 379, - "end_line": 390, - "section": "Tabs" - }, - { - "markdown": "- foo\n\n\t\tbar\n", - "html": "<ul>\n<li>\n<p>foo</p>\n<pre><code> bar\n</code></pre>\n</li>\n</ul>\n", - "example": 5, - "start_line": 392, - "end_line": 404, - "section": "Tabs" - }, - { - "markdown": ">\t\tfoo\n", - "html": "<blockquote>\n<pre><code> foo\n</code></pre>\n</blockquote>\n", - "example": 6, - "start_line": 415, - "end_line": 422, - "section": "Tabs" - }, - { - "markdown": "-\t\tfoo\n", - "html": "<ul>\n<li>\n<pre><code> foo\n</code></pre>\n</li>\n</ul>\n", - "example": 7, - "start_line": 424, - "end_line": 433, - "section": "Tabs", - "shouldFail": true - }, - { - "markdown": " foo\n\tbar\n", - "html": "<pre><code>foo\nbar\n</code></pre>\n", - "example": 8, - "start_line": 436, - "end_line": 443, - "section": "Tabs" - }, - { - "markdown": " - foo\n - bar\n\t - baz\n", - "html": "<ul>\n<li>foo\n<ul>\n<li>bar\n<ul>\n<li>baz</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n", - "example": 9, - "start_line": 445, - "end_line": 461, - "section": "Tabs" - }, - { - "markdown": "#\tFoo\n", - "html": "<h1>Foo</h1>\n", - "example": 10, - "start_line": 463, - "end_line": 467, - "section": "Tabs" - }, - { - "markdown": "*\t*\t*\t\n", - "html": "<hr />\n", - "example": 11, - "start_line": 469, - "end_line": 473, - "section": "Tabs" - }, - { - "markdown": "- `one\n- two`\n", - "html": "<ul>\n<li>`one</li>\n<li>two`</li>\n</ul>\n", - "example": 12, - "start_line": 496, - "end_line": 504, - "section": "Precedence" - }, - { - "markdown": "***\n---\n___\n", - "html": "<hr />\n<hr />\n<hr />\n", - "example": 13, - "start_line": 535, - "end_line": 543, - "section": "Thematic breaks" - }, - { - "markdown": "+++\n", - "html": "<p>+++</p>\n", - "example": 14, - "start_line": 548, - "end_line": 552, - "section": "Thematic breaks" - }, - { - "markdown": "===\n", - "html": "<p>===</p>\n", - "example": 15, - "start_line": 555, - "end_line": 559, - "section": "Thematic breaks" - }, - { - "markdown": "--\n**\n__\n", - "html": "<p>--\n**\n__</p>\n", - "example": 16, - "start_line": 564, - "end_line": 572, - "section": "Thematic breaks" - }, - { - "markdown": " ***\n ***\n ***\n", - "html": "<hr />\n<hr />\n<hr />\n", - "example": 17, - "start_line": 577, - "end_line": 585, - "section": "Thematic breaks" - }, - { - "markdown": " ***\n", - "html": "<pre><code>***\n</code></pre>\n", - "example": 18, - "start_line": 590, - "end_line": 595, - "section": "Thematic breaks" - }, - { - "markdown": "Foo\n ***\n", - "html": "<p>Foo\n***</p>\n", - "example": 19, - "start_line": 598, - "end_line": 604, - "section": "Thematic breaks" - }, - { - "markdown": "_____________________________________\n", - "html": "<hr />\n", - "example": 20, - "start_line": 609, - "end_line": 613, - "section": "Thematic breaks" - }, - { - "markdown": " - - -\n", - "html": "<hr />\n", - "example": 21, - "start_line": 618, - "end_line": 622, - "section": "Thematic breaks" - }, - { - "markdown": " ** * ** * ** * **\n", - "html": "<hr />\n", - "example": 22, - "start_line": 625, - "end_line": 629, - "section": "Thematic breaks" - }, - { - "markdown": "- - - -\n", - "html": "<hr />\n", - "example": 23, - "start_line": 632, - "end_line": 636, - "section": "Thematic breaks" - }, - { - "markdown": "- - - - \n", - "html": "<hr />\n", - "example": 24, - "start_line": 641, - "end_line": 645, - "section": "Thematic breaks" - }, - { - "markdown": "_ _ _ _ a\n\na------\n\n---a---\n", - "html": "<p>_ _ _ _ a</p>\n<p>a------</p>\n<p>---a---</p>\n", - "example": 25, - "start_line": 650, - "end_line": 660, - "section": "Thematic breaks" - }, - { - "markdown": " *-*\n", - "html": "<p><em>-</em></p>\n", - "example": 26, - "start_line": 666, - "end_line": 670, - "section": "Thematic breaks" - }, - { - "markdown": "- foo\n***\n- bar\n", - "html": "<ul>\n<li>foo</li>\n</ul>\n<hr />\n<ul>\n<li>bar</li>\n</ul>\n", - "example": 27, - "start_line": 675, - "end_line": 687, - "section": "Thematic breaks" - }, - { - "markdown": "Foo\n***\nbar\n", - "html": "<p>Foo</p>\n<hr />\n<p>bar</p>\n", - "example": 28, - "start_line": 692, - "end_line": 700, - "section": "Thematic breaks" - }, - { - "markdown": "Foo\n---\nbar\n", - "html": "<h2>Foo</h2>\n<p>bar</p>\n", - "example": 29, - "start_line": 709, - "end_line": 716, - "section": "Thematic breaks" - }, - { - "markdown": "* Foo\n* * *\n* Bar\n", - "html": "<ul>\n<li>Foo</li>\n</ul>\n<hr />\n<ul>\n<li>Bar</li>\n</ul>\n", - "example": 30, - "start_line": 722, - "end_line": 734, - "section": "Thematic breaks" - }, - { - "markdown": "- Foo\n- * * *\n", - "html": "<ul>\n<li>Foo</li>\n<li>\n<hr />\n</li>\n</ul>\n", - "example": 31, - "start_line": 739, - "end_line": 749, - "section": "Thematic breaks" - }, - { - "markdown": "# foo\n## foo\n### foo\n#### foo\n##### foo\n###### foo\n", - "html": "<h1>foo</h1>\n<h2>foo</h2>\n<h3>foo</h3>\n<h4>foo</h4>\n<h5>foo</h5>\n<h6>foo</h6>\n", - "example": 32, - "start_line": 768, - "end_line": 782, - "section": "ATX headings" - }, - { - "markdown": "####### foo\n", - "html": "<p>####### foo</p>\n", - "example": 33, - "start_line": 787, - "end_line": 791, - "section": "ATX headings" - }, - { - "markdown": "#5 bolt\n\n#hashtag\n", - "html": "<p>#5 bolt</p>\n<p>#hashtag</p>\n", - "example": 34, - "start_line": 802, - "end_line": 809, - "section": "ATX headings" - }, - { - "markdown": "\\## foo\n", - "html": "<p>## foo</p>\n", - "example": 35, - "start_line": 814, - "end_line": 818, - "section": "ATX headings" - }, - { - "markdown": "# foo *bar* \\*baz\\*\n", - "html": "<h1>foo <em>bar</em> *baz*</h1>\n", - "example": 36, - "start_line": 823, - "end_line": 827, - "section": "ATX headings" - }, - { - "markdown": "# foo \n", - "html": "<h1>foo</h1>\n", - "example": 37, - "start_line": 832, - "end_line": 836, - "section": "ATX headings" - }, - { - "markdown": " ### foo\n ## foo\n # foo\n", - "html": "<h3>foo</h3>\n<h2>foo</h2>\n<h1>foo</h1>\n", - "example": 38, - "start_line": 841, - "end_line": 849, - "section": "ATX headings" - }, - { - "markdown": " # foo\n", - "html": "<pre><code># foo\n</code></pre>\n", - "example": 39, - "start_line": 854, - "end_line": 859, - "section": "ATX headings" - }, - { - "markdown": "foo\n # bar\n", - "html": "<p>foo\n# bar</p>\n", - "example": 40, - "start_line": 862, - "end_line": 868, - "section": "ATX headings", - "shouldFail": true - }, - { - "markdown": "## foo ##\n ### bar ###\n", - "html": "<h2>foo</h2>\n<h3>bar</h3>\n", - "example": 41, - "start_line": 873, - "end_line": 879, - "section": "ATX headings" - }, - { - "markdown": "# foo ##################################\n##### foo ##\n", - "html": "<h1>foo</h1>\n<h5>foo</h5>\n", - "example": 42, - "start_line": 884, - "end_line": 890, - "section": "ATX headings" - }, - { - "markdown": "### foo ### \n", - "html": "<h3>foo</h3>\n", - "example": 43, - "start_line": 895, - "end_line": 899, - "section": "ATX headings" - }, - { - "markdown": "### foo ### b\n", - "html": "<h3>foo ### b</h3>\n", - "example": 44, - "start_line": 906, - "end_line": 910, - "section": "ATX headings" - }, - { - "markdown": "# foo#\n", - "html": "<h1>foo#</h1>\n", - "example": 45, - "start_line": 915, - "end_line": 919, - "section": "ATX headings", - "shouldFail": true - }, - { - "markdown": "### foo \\###\n## foo #\\##\n# foo \\#\n", - "html": "<h3>foo ###</h3>\n<h2>foo ###</h2>\n<h1>foo #</h1>\n", - "example": 46, - "start_line": 925, - "end_line": 933, - "section": "ATX headings", - "shouldFail": true - }, - { - "markdown": "****\n## foo\n****\n", - "html": "<hr />\n<h2>foo</h2>\n<hr />\n", - "example": 47, - "start_line": 939, - "end_line": 947, - "section": "ATX headings" - }, - { - "markdown": "Foo bar\n# baz\nBar foo\n", - "html": "<p>Foo bar</p>\n<h1>baz</h1>\n<p>Bar foo</p>\n", - "example": 48, - "start_line": 950, - "end_line": 958, - "section": "ATX headings" - }, - { - "markdown": "## \n#\n### ###\n", - "html": "<h2></h2>\n<h1></h1>\n<h3></h3>\n", - "example": 49, - "start_line": 963, - "end_line": 971, - "section": "ATX headings", - "shouldFail": true - }, - { - "markdown": "Foo *bar*\n=========\n\nFoo *bar*\n---------\n", - "html": "<h1>Foo <em>bar</em></h1>\n<h2>Foo <em>bar</em></h2>\n", - "example": 50, - "start_line": 1006, - "end_line": 1015, - "section": "Setext headings" - }, - { - "markdown": "Foo *bar\nbaz*\n====\n", - "html": "<h1>Foo <em>bar\nbaz</em></h1>\n", - "example": 51, - "start_line": 1020, - "end_line": 1027, - "section": "Setext headings", - "shouldFail": true - }, - { - "markdown": " Foo *bar\nbaz*\t\n====\n", - "html": "<h1>Foo <em>bar\nbaz</em></h1>\n", - "example": 52, - "start_line": 1034, - "end_line": 1041, - "section": "Setext headings", - "shouldFail": true - }, - { - "markdown": "Foo\n-------------------------\n\nFoo\n=\n", - "html": "<h2>Foo</h2>\n<h1>Foo</h1>\n", - "example": 53, - "start_line": 1046, - "end_line": 1055, - "section": "Setext headings", - "shouldFail": true - }, - { - "markdown": " Foo\n---\n\n Foo\n-----\n\n Foo\n ===\n", - "html": "<h2>Foo</h2>\n<h2>Foo</h2>\n<h1>Foo</h1>\n", - "example": 54, - "start_line": 1061, - "end_line": 1074, - "section": "Setext headings" - }, - { - "markdown": " Foo\n ---\n\n Foo\n---\n", - "html": "<pre><code>Foo\n---\n\nFoo\n</code></pre>\n<hr />\n", - "example": 55, - "start_line": 1079, - "end_line": 1092, - "section": "Setext headings" - }, - { - "markdown": "Foo\n ---- \n", - "html": "<h2>Foo</h2>\n", - "example": 56, - "start_line": 1098, - "end_line": 1103, - "section": "Setext headings" - }, - { - "markdown": "Foo\n ---\n", - "html": "<p>Foo\n---</p>\n", - "example": 57, - "start_line": 1108, - "end_line": 1114, - "section": "Setext headings", - "shouldFail": true - }, - { - "markdown": "Foo\n= =\n\nFoo\n--- -\n", - "html": "<p>Foo\n= =</p>\n<p>Foo</p>\n<hr />\n", - "example": 58, - "start_line": 1119, - "end_line": 1130, - "section": "Setext headings" - }, - { - "markdown": "Foo \n-----\n", - "html": "<h2>Foo</h2>\n", - "example": 59, - "start_line": 1135, - "end_line": 1140, - "section": "Setext headings" - }, - { - "markdown": "Foo\\\n----\n", - "html": "<h2>Foo\\</h2>\n", - "example": 60, - "start_line": 1145, - "end_line": 1150, - "section": "Setext headings" - }, - { - "markdown": "`Foo\n----\n`\n\n<a title=\"a lot\n---\nof dashes\"/>\n", - "html": "<h2>`Foo</h2>\n<p>`</p>\n<h2><a title="a lot</h2>\n<p>of dashes"/></p>\n", - "example": 61, - "start_line": 1156, - "end_line": 1169, - "section": "Setext headings" - }, - { - "markdown": "> Foo\n---\n", - "html": "<blockquote>\n<p>Foo</p>\n</blockquote>\n<hr />\n", - "example": 62, - "start_line": 1175, - "end_line": 1183, - "section": "Setext headings" - }, - { - "markdown": "> foo\nbar\n===\n", - "html": "<blockquote>\n<p>foo\nbar\n===</p>\n</blockquote>\n", - "example": 63, - "start_line": 1186, - "end_line": 1196, - "section": "Setext headings", - "shouldFail": true - }, - { - "markdown": "- Foo\n---\n", - "html": "<ul>\n<li>Foo</li>\n</ul>\n<hr />\n", - "example": 64, - "start_line": 1199, - "end_line": 1207, - "section": "Setext headings" - }, - { - "markdown": "Foo\nBar\n---\n", - "html": "<h2>Foo\nBar</h2>\n", - "example": 65, - "start_line": 1214, - "end_line": 1221, - "section": "Setext headings", - "shouldFail": true - }, - { - "markdown": "---\nFoo\n---\nBar\n---\nBaz\n", - "html": "<hr />\n<h2>Foo</h2>\n<h2>Bar</h2>\n<p>Baz</p>\n", - "example": 66, - "start_line": 1227, - "end_line": 1239, - "section": "Setext headings" - }, - { - "markdown": "\n====\n", - "html": "<p>====</p>\n", - "example": 67, - "start_line": 1244, - "end_line": 1249, - "section": "Setext headings" - }, - { - "markdown": "---\n---\n", - "html": "<hr />\n<hr />\n", - "example": 68, - "start_line": 1256, - "end_line": 1262, - "section": "Setext headings" - }, - { - "markdown": "- foo\n-----\n", - "html": "<ul>\n<li>foo</li>\n</ul>\n<hr />\n", - "example": 69, - "start_line": 1265, - "end_line": 1273, - "section": "Setext headings" - }, - { - "markdown": " foo\n---\n", - "html": "<pre><code>foo\n</code></pre>\n<hr />\n", - "example": 70, - "start_line": 1276, - "end_line": 1283, - "section": "Setext headings" - }, - { - "markdown": "> foo\n-----\n", - "html": "<blockquote>\n<p>foo</p>\n</blockquote>\n<hr />\n", - "example": 71, - "start_line": 1286, - "end_line": 1294, - "section": "Setext headings" - }, - { - "markdown": "\\> foo\n------\n", - "html": "<h2>> foo</h2>\n", - "example": 72, - "start_line": 1300, - "end_line": 1305, - "section": "Setext headings" - }, - { - "markdown": "Foo\n\nbar\n---\nbaz\n", - "html": "<p>Foo</p>\n<h2>bar</h2>\n<p>baz</p>\n", - "example": 73, - "start_line": 1331, - "end_line": 1341, - "section": "Setext headings" - }, - { - "markdown": "Foo\nbar\n\n---\n\nbaz\n", - "html": "<p>Foo\nbar</p>\n<hr />\n<p>baz</p>\n", - "example": 74, - "start_line": 1347, - "end_line": 1359, - "section": "Setext headings" - }, - { - "markdown": "Foo\nbar\n* * *\nbaz\n", - "html": "<p>Foo\nbar</p>\n<hr />\n<p>baz</p>\n", - "example": 75, - "start_line": 1365, - "end_line": 1375, - "section": "Setext headings" - }, - { - "markdown": "Foo\nbar\n\\---\nbaz\n", - "html": "<p>Foo\nbar\n---\nbaz</p>\n", - "example": 76, - "start_line": 1380, - "end_line": 1390, - "section": "Setext headings" - }, - { - "markdown": " a simple\n indented code block\n", - "html": "<pre><code>a simple\n indented code block\n</code></pre>\n", - "example": 77, - "start_line": 1408, - "end_line": 1415, - "section": "Indented code blocks" - }, - { - "markdown": " - foo\n\n bar\n", - "html": "<ul>\n<li>\n<p>foo</p>\n<p>bar</p>\n</li>\n</ul>\n", - "example": 78, - "start_line": 1422, - "end_line": 1433, - "section": "Indented code blocks" - }, - { - "markdown": "1. foo\n\n - bar\n", - "html": "<ol>\n<li>\n<p>foo</p>\n<ul>\n<li>bar</li>\n</ul>\n</li>\n</ol>\n", - "example": 79, - "start_line": 1436, - "end_line": 1449, - "section": "Indented code blocks" - }, - { - "markdown": " <a/>\n *hi*\n\n - one\n", - "html": "<pre><code><a/>\n*hi*\n\n- one\n</code></pre>\n", - "example": 80, - "start_line": 1456, - "end_line": 1467, - "section": "Indented code blocks" - }, - { - "markdown": " chunk1\n\n chunk2\n \n \n \n chunk3\n", - "html": "<pre><code>chunk1\n\nchunk2\n\n\n\nchunk3\n</code></pre>\n", - "example": 81, - "start_line": 1472, - "end_line": 1489, - "section": "Indented code blocks" - }, - { - "markdown": " chunk1\n \n chunk2\n", - "html": "<pre><code>chunk1\n \n chunk2\n</code></pre>\n", - "example": 82, - "start_line": 1495, - "end_line": 1504, - "section": "Indented code blocks" - }, - { - "markdown": "Foo\n bar\n\n", - "html": "<p>Foo\nbar</p>\n", - "example": 83, - "start_line": 1510, - "end_line": 1517, - "section": "Indented code blocks" - }, - { - "markdown": " foo\nbar\n", - "html": "<pre><code>foo\n</code></pre>\n<p>bar</p>\n", - "example": 84, - "start_line": 1524, - "end_line": 1531, - "section": "Indented code blocks" - }, - { - "markdown": "# Heading\n foo\nHeading\n------\n foo\n----\n", - "html": "<h1>Heading</h1>\n<pre><code>foo\n</code></pre>\n<h2>Heading</h2>\n<pre><code>foo\n</code></pre>\n<hr />\n", - "example": 85, - "start_line": 1537, - "end_line": 1552, - "section": "Indented code blocks" - }, - { - "markdown": " foo\n bar\n", - "html": "<pre><code> foo\nbar\n</code></pre>\n", - "example": 86, - "start_line": 1557, - "end_line": 1564, - "section": "Indented code blocks" - }, - { - "markdown": "\n \n foo\n \n\n", - "html": "<pre><code>foo\n</code></pre>\n", - "example": 87, - "start_line": 1570, - "end_line": 1579, - "section": "Indented code blocks" - }, - { - "markdown": " foo \n", - "html": "<pre><code>foo \n</code></pre>\n", - "example": 88, - "start_line": 1584, - "end_line": 1589, - "section": "Indented code blocks" - }, - { - "markdown": "```\n<\n >\n```\n", - "html": "<pre><code><\n >\n</code></pre>\n", - "example": 89, - "start_line": 1639, - "end_line": 1648, - "section": "Fenced code blocks" - }, - { - "markdown": "~~~\n<\n >\n~~~\n", - "html": "<pre><code><\n >\n</code></pre>\n", - "example": 90, - "start_line": 1653, - "end_line": 1662, - "section": "Fenced code blocks" - }, - { - "markdown": "``\nfoo\n``\n", - "html": "<p><code>foo</code></p>\n", - "example": 91, - "start_line": 1666, - "end_line": 1672, - "section": "Fenced code blocks" - }, - { - "markdown": "```\naaa\n~~~\n```\n", - "html": "<pre><code>aaa\n~~~\n</code></pre>\n", - "example": 92, - "start_line": 1677, - "end_line": 1686, - "section": "Fenced code blocks" - }, - { - "markdown": "~~~\naaa\n```\n~~~\n", - "html": "<pre><code>aaa\n```\n</code></pre>\n", - "example": 93, - "start_line": 1689, - "end_line": 1698, - "section": "Fenced code blocks" - }, - { - "markdown": "````\naaa\n```\n``````\n", - "html": "<pre><code>aaa\n```\n</code></pre>\n", - "example": 94, - "start_line": 1703, - "end_line": 1712, - "section": "Fenced code blocks" - }, - { - "markdown": "~~~~\naaa\n~~~\n~~~~\n", - "html": "<pre><code>aaa\n~~~\n</code></pre>\n", - "example": 95, - "start_line": 1715, - "end_line": 1724, - "section": "Fenced code blocks" - }, - { - "markdown": "```\n", - "html": "<pre><code></code></pre>\n", - "example": 96, - "start_line": 1730, - "end_line": 1734, - "section": "Fenced code blocks" - }, - { - "markdown": "`````\n\n```\naaa\n", - "html": "<pre><code>\n```\naaa\n</code></pre>\n", - "example": 97, - "start_line": 1737, - "end_line": 1747, - "section": "Fenced code blocks" - }, - { - "markdown": "> ```\n> aaa\n\nbbb\n", - "html": "<blockquote>\n<pre><code>aaa\n</code></pre>\n</blockquote>\n<p>bbb</p>\n", - "example": 98, - "start_line": 1750, - "end_line": 1761, - "section": "Fenced code blocks" - }, - { - "markdown": "```\n\n \n```\n", - "html": "<pre><code>\n \n</code></pre>\n", - "example": 99, - "start_line": 1766, - "end_line": 1775, - "section": "Fenced code blocks" - }, - { - "markdown": "```\n```\n", - "html": "<pre><code></code></pre>\n", - "example": 100, - "start_line": 1780, - "end_line": 1785, - "section": "Fenced code blocks" - }, - { - "markdown": " ```\n aaa\naaa\n```\n", - "html": "<pre><code>aaa\naaa\n</code></pre>\n", - "example": 101, - "start_line": 1792, - "end_line": 1801, - "section": "Fenced code blocks" - }, - { - "markdown": " ```\naaa\n aaa\naaa\n ```\n", - "html": "<pre><code>aaa\naaa\naaa\n</code></pre>\n", - "example": 102, - "start_line": 1804, - "end_line": 1815, - "section": "Fenced code blocks" - }, - { - "markdown": " ```\n aaa\n aaa\n aaa\n ```\n", - "html": "<pre><code>aaa\n aaa\naaa\n</code></pre>\n", - "example": 103, - "start_line": 1818, - "end_line": 1829, - "section": "Fenced code blocks" - }, - { - "markdown": " ```\n aaa\n ```\n", - "html": "<pre><code>```\naaa\n```\n</code></pre>\n", - "example": 104, - "start_line": 1834, - "end_line": 1843, - "section": "Fenced code blocks" - }, - { - "markdown": "```\naaa\n ```\n", - "html": "<pre><code>aaa\n</code></pre>\n", - "example": 105, - "start_line": 1849, - "end_line": 1856, - "section": "Fenced code blocks" - }, - { - "markdown": " ```\naaa\n ```\n", - "html": "<pre><code>aaa\n</code></pre>\n", - "example": 106, - "start_line": 1859, - "end_line": 1866, - "section": "Fenced code blocks" - }, - { - "markdown": "```\naaa\n ```\n", - "html": "<pre><code>aaa\n ```\n</code></pre>\n", - "example": 107, - "start_line": 1871, - "end_line": 1879, - "section": "Fenced code blocks" - }, - { - "markdown": "``` ```\naaa\n", - "html": "<p><code> </code>\naaa</p>\n", - "example": 108, - "start_line": 1885, - "end_line": 1891, - "section": "Fenced code blocks" - }, - { - "markdown": "~~~~~~\naaa\n~~~ ~~\n", - "html": "<pre><code>aaa\n~~~ ~~\n</code></pre>\n", - "example": 109, - "start_line": 1894, - "end_line": 1902, - "section": "Fenced code blocks" - }, - { - "markdown": "foo\n```\nbar\n```\nbaz\n", - "html": "<p>foo</p>\n<pre><code>bar\n</code></pre>\n<p>baz</p>\n", - "example": 110, - "start_line": 1908, - "end_line": 1919, - "section": "Fenced code blocks" - }, - { - "markdown": "foo\n---\n~~~\nbar\n~~~\n# baz\n", - "html": "<h2>foo</h2>\n<pre><code>bar\n</code></pre>\n<h1>baz</h1>\n", - "example": 111, - "start_line": 1925, - "end_line": 1937, - "section": "Fenced code blocks" - }, - { - "markdown": "```ruby\ndef foo(x)\n return 3\nend\n```\n", - "html": "<pre><code class=\"language-ruby\">def foo(x)\n return 3\nend\n</code></pre>\n", - "example": 112, - "start_line": 1947, - "end_line": 1958, - "section": "Fenced code blocks" - }, - { - "markdown": "~~~~ ruby startline=3 $%@#$\ndef foo(x)\n return 3\nend\n~~~~~~~\n", - "html": "<pre><code class=\"language-ruby\">def foo(x)\n return 3\nend\n</code></pre>\n", - "example": 113, - "start_line": 1961, - "end_line": 1972, - "section": "Fenced code blocks" - }, - { - "markdown": "````;\n````\n", - "html": "<pre><code class=\"language-;\"></code></pre>\n", - "example": 114, - "start_line": 1975, - "end_line": 1980, - "section": "Fenced code blocks" - }, - { - "markdown": "``` aa ```\nfoo\n", - "html": "<p><code>aa</code>\nfoo</p>\n", - "example": 115, - "start_line": 1985, - "end_line": 1991, - "section": "Fenced code blocks" - }, - { - "markdown": "~~~ aa ``` ~~~\nfoo\n~~~\n", - "html": "<pre><code class=\"language-aa\">foo\n</code></pre>\n", - "example": 116, - "start_line": 1996, - "end_line": 2003, - "section": "Fenced code blocks", - "shouldFail": true - }, - { - "markdown": "```\n``` aaa\n```\n", - "html": "<pre><code>``` aaa\n</code></pre>\n", - "example": 117, - "start_line": 2008, - "end_line": 2015, - "section": "Fenced code blocks" - }, - { - "markdown": "<table><tr><td>\n<pre>\n**Hello**,\n\n_world_.\n</pre>\n</td></tr></table>\n", - "html": "<table><tr><td>\n<pre>\n**Hello**,\n<p><em>world</em>.\n</pre></p>\n</td></tr></table>\n", - "example": 118, - "start_line": 2087, - "end_line": 2102, - "section": "HTML blocks" - }, - { - "markdown": "<table>\n <tr>\n <td>\n hi\n </td>\n </tr>\n</table>\n\nokay.\n", - "html": "<table>\n <tr>\n <td>\n hi\n </td>\n </tr>\n</table>\n<p>okay.</p>\n", - "example": 119, - "start_line": 2116, - "end_line": 2135, - "section": "HTML blocks" - }, - { - "markdown": " <div>\n *hello*\n <foo><a>\n", - "html": " <div>\n *hello*\n <foo><a>\n", - "example": 120, - "start_line": 2138, - "end_line": 2146, - "section": "HTML blocks" - }, - { - "markdown": "</div>\n*foo*\n", - "html": "</div>\n*foo*\n", - "example": 121, - "start_line": 2151, - "end_line": 2157, - "section": "HTML blocks" - }, - { - "markdown": "<DIV CLASS=\"foo\">\n\n*Markdown*\n\n</DIV>\n", - "html": "<DIV CLASS=\"foo\">\n<p><em>Markdown</em></p>\n</DIV>\n", - "example": 122, - "start_line": 2162, - "end_line": 2172, - "section": "HTML blocks" - }, - { - "markdown": "<div id=\"foo\"\n class=\"bar\">\n</div>\n", - "html": "<div id=\"foo\"\n class=\"bar\">\n</div>\n", - "example": 123, - "start_line": 2178, - "end_line": 2186, - "section": "HTML blocks" - }, - { - "markdown": "<div id=\"foo\" class=\"bar\n baz\">\n</div>\n", - "html": "<div id=\"foo\" class=\"bar\n baz\">\n</div>\n", - "example": 124, - "start_line": 2189, - "end_line": 2197, - "section": "HTML blocks" - }, - { - "markdown": "<div>\n*foo*\n\n*bar*\n", - "html": "<div>\n*foo*\n<p><em>bar</em></p>\n", - "example": 125, - "start_line": 2201, - "end_line": 2210, - "section": "HTML blocks" - }, - { - "markdown": "<div id=\"foo\"\n*hi*\n", - "html": "<div id=\"foo\"\n*hi*\n", - "example": 126, - "start_line": 2217, - "end_line": 2223, - "section": "HTML blocks" - }, - { - "markdown": "<div class\nfoo\n", - "html": "<div class\nfoo\n", - "example": 127, - "start_line": 2226, - "end_line": 2232, - "section": "HTML blocks" - }, - { - "markdown": "<div *???-&&&-<---\n*foo*\n", - "html": "<div *???-&&&-<---\n*foo*\n", - "example": 128, - "start_line": 2238, - "end_line": 2244, - "section": "HTML blocks" - }, - { - "markdown": "<div><a href=\"bar\">*foo*</a></div>\n", - "html": "<div><a href=\"bar\">*foo*</a></div>\n", - "example": 129, - "start_line": 2250, - "end_line": 2254, - "section": "HTML blocks" - }, - { - "markdown": "<table><tr><td>\nfoo\n</td></tr></table>\n", - "html": "<table><tr><td>\nfoo\n</td></tr></table>\n", - "example": 130, - "start_line": 2257, - "end_line": 2265, - "section": "HTML blocks" - }, - { - "markdown": "<div></div>\n``` c\nint x = 33;\n```\n", - "html": "<div></div>\n``` c\nint x = 33;\n```\n", - "example": 131, - "start_line": 2274, - "end_line": 2284, - "section": "HTML blocks" - }, - { - "markdown": "<a href=\"foo\">\n*bar*\n</a>\n", - "html": "<a href=\"foo\">\n*bar*\n</a>\n", - "example": 132, - "start_line": 2291, - "end_line": 2299, - "section": "HTML blocks" - }, - { - "markdown": "<Warning>\n*bar*\n</Warning>\n", - "html": "<Warning>\n*bar*\n</Warning>\n", - "example": 133, - "start_line": 2304, - "end_line": 2312, - "section": "HTML blocks" - }, - { - "markdown": "<i class=\"foo\">\n*bar*\n</i>\n", - "html": "<i class=\"foo\">\n*bar*\n</i>\n", - "example": 134, - "start_line": 2315, - "end_line": 2323, - "section": "HTML blocks" - }, - { - "markdown": "</ins>\n*bar*\n", - "html": "</ins>\n*bar*\n", - "example": 135, - "start_line": 2326, - "end_line": 2332, - "section": "HTML blocks" - }, - { - "markdown": "<del>\n*foo*\n</del>\n", - "html": "<del>\n*foo*\n</del>\n", - "example": 136, - "start_line": 2341, - "end_line": 2349, - "section": "HTML blocks" - }, - { - "markdown": "<del>\n\n*foo*\n\n</del>\n", - "html": "<del>\n<p><em>foo</em></p>\n</del>\n", - "example": 137, - "start_line": 2356, - "end_line": 2366, - "section": "HTML blocks" - }, - { - "markdown": "<del>*foo*</del>\n", - "html": "<p><del><em>foo</em></del></p>\n", - "example": 138, - "start_line": 2374, - "end_line": 2378, - "section": "HTML blocks" - }, - { - "markdown": "<pre language=\"haskell\"><code>\nimport Text.HTML.TagSoup\n\nmain :: IO ()\nmain = print $ parseTags tags\n</code></pre>\nokay\n", - "html": "<pre language=\"haskell\"><code>\nimport Text.HTML.TagSoup\n\nmain :: IO ()\nmain = print $ parseTags tags\n</code></pre>\n<p>okay</p>\n", - "example": 139, - "start_line": 2390, - "end_line": 2406, - "section": "HTML blocks" - }, - { - "markdown": "<script type=\"text/javascript\">\n// JavaScript example\n\ndocument.getElementById(\"demo\").innerHTML = \"Hello JavaScript!\";\n</script>\nokay\n", - "html": "<script type=\"text/javascript\">\n// JavaScript example\n\ndocument.getElementById(\"demo\").innerHTML = \"Hello JavaScript!\";\n</script>\n<p>okay</p>\n", - "example": 140, - "start_line": 2411, - "end_line": 2425, - "section": "HTML blocks" - }, - { - "markdown": "<style\n type=\"text/css\">\nh1 {color:red;}\n\np {color:blue;}\n</style>\nokay\n", - "html": "<style\n type=\"text/css\">\nh1 {color:red;}\n\np {color:blue;}\n</style>\n<p>okay</p>\n", - "example": 141, - "start_line": 2430, - "end_line": 2446, - "section": "HTML blocks" - }, - { - "markdown": "<style\n type=\"text/css\">\n\nfoo\n", - "html": "<style\n type=\"text/css\">\n\nfoo\n", - "example": 142, - "start_line": 2453, - "end_line": 2463, - "section": "HTML blocks" - }, - { - "markdown": "> <div>\n> foo\n\nbar\n", - "html": "<blockquote>\n<div>\nfoo\n</blockquote>\n<p>bar</p>\n", - "example": 143, - "start_line": 2466, - "end_line": 2477, - "section": "HTML blocks" - }, - { - "markdown": "- <div>\n- foo\n", - "html": "<ul>\n<li>\n<div>\n</li>\n<li>foo</li>\n</ul>\n", - "example": 144, - "start_line": 2480, - "end_line": 2490, - "section": "HTML blocks" - }, - { - "markdown": "<style>p{color:red;}</style>\n*foo*\n", - "html": "<style>p{color:red;}</style>\n<p><em>foo</em></p>\n", - "example": 145, - "start_line": 2495, - "end_line": 2501, - "section": "HTML blocks" - }, - { - "markdown": "<!-- foo -->*bar*\n*baz*\n", - "html": "<!-- foo -->*bar*\n<p><em>baz</em></p>\n", - "example": 146, - "start_line": 2504, - "end_line": 2510, - "section": "HTML blocks" - }, - { - "markdown": "<script>\nfoo\n</script>1. *bar*\n", - "html": "<script>\nfoo\n</script>1. *bar*\n", - "example": 147, - "start_line": 2516, - "end_line": 2524, - "section": "HTML blocks" - }, - { - "markdown": "<!-- Foo\n\nbar\n baz -->\nokay\n", - "html": "<!-- Foo\n\nbar\n baz -->\n<p>okay</p>\n", - "example": 148, - "start_line": 2529, - "end_line": 2541, - "section": "HTML blocks" - }, - { - "markdown": "<?php\n\n echo '>';\n\n?>\nokay\n", - "html": "<?php\n\n echo '>';\n\n?>\n<p>okay</p>\n", - "example": 149, - "start_line": 2547, - "end_line": 2561, - "section": "HTML blocks" - }, - { - "markdown": "<!DOCTYPE html>\n", - "html": "<!DOCTYPE html>\n", - "example": 150, - "start_line": 2566, - "end_line": 2570, - "section": "HTML blocks" - }, - { - "markdown": "<![CDATA[\nfunction matchwo(a,b)\n{\n if (a < b && a < 0) then {\n return 1;\n\n } else {\n\n return 0;\n }\n}\n]]>\nokay\n", - "html": "<![CDATA[\nfunction matchwo(a,b)\n{\n if (a < b && a < 0) then {\n return 1;\n\n } else {\n\n return 0;\n }\n}\n]]>\n<p>okay</p>\n", - "example": 151, - "start_line": 2575, - "end_line": 2603, - "section": "HTML blocks" - }, - { - "markdown": " <!-- foo -->\n\n <!-- foo -->\n", - "html": " <!-- foo -->\n<pre><code><!-- foo -->\n</code></pre>\n", - "example": 152, - "start_line": 2608, - "end_line": 2616, - "section": "HTML blocks" - }, - { - "markdown": " <div>\n\n <div>\n", - "html": " <div>\n<pre><code><div>\n</code></pre>\n", - "example": 153, - "start_line": 2619, - "end_line": 2627, - "section": "HTML blocks" - }, - { - "markdown": "Foo\n<div>\nbar\n</div>\n", - "html": "<p>Foo</p>\n<div>\nbar\n</div>\n", - "example": 154, - "start_line": 2633, - "end_line": 2643, - "section": "HTML blocks" - }, - { - "markdown": "<div>\nbar\n</div>\n*foo*\n", - "html": "<div>\nbar\n</div>\n*foo*\n", - "example": 155, - "start_line": 2650, - "end_line": 2660, - "section": "HTML blocks" - }, - { - "markdown": "Foo\n<a href=\"bar\">\nbaz\n", - "html": "<p>Foo\n<a href=\"bar\">\nbaz</p>\n", - "example": 156, - "start_line": 2665, - "end_line": 2673, - "section": "HTML blocks" - }, - { - "markdown": "<div>\n\n*Emphasized* text.\n\n</div>\n", - "html": "<div>\n<p><em>Emphasized</em> text.</p>\n</div>\n", - "example": 157, - "start_line": 2706, - "end_line": 2716, - "section": "HTML blocks" - }, - { - "markdown": "<div>\n*Emphasized* text.\n</div>\n", - "html": "<div>\n*Emphasized* text.\n</div>\n", - "example": 158, - "start_line": 2719, - "end_line": 2727, - "section": "HTML blocks" - }, - { - "markdown": "<table>\n\n<tr>\n\n<td>\nHi\n</td>\n\n</tr>\n\n</table>\n", - "html": "<table>\n<tr>\n<td>\nHi\n</td>\n</tr>\n</table>\n", - "example": 159, - "start_line": 2741, - "end_line": 2761, - "section": "HTML blocks" - }, - { - "markdown": "<table>\n\n <tr>\n\n <td>\n Hi\n </td>\n\n </tr>\n\n</table>\n", - "html": "<table>\n <tr>\n<pre><code><td>\n Hi\n</td>\n</code></pre>\n </tr>\n</table>\n", - "example": 160, - "start_line": 2768, - "end_line": 2789, - "section": "HTML blocks" - }, - { - "markdown": "[foo]: /url \"title\"\n\n[foo]\n", - "html": "<p><a href=\"/url\" title=\"title\">foo</a></p>\n", - "example": 161, - "start_line": 2816, - "end_line": 2822, - "section": "Link reference definitions" - }, - { - "markdown": " [foo]: \n /url \n 'the title' \n\n[foo]\n", - "html": "<p><a href=\"/url\" title=\"the title\">foo</a></p>\n", - "example": 162, - "start_line": 2825, - "end_line": 2833, - "section": "Link reference definitions" - }, - { - "markdown": "[Foo*bar\\]]:my_(url) 'title (with parens)'\n\n[Foo*bar\\]]\n", - "html": "<p><a href=\"my_(url)\" title=\"title (with parens)\">Foo*bar]</a></p>\n", - "example": 163, - "start_line": 2836, - "end_line": 2842, - "section": "Link reference definitions" - }, - { - "markdown": "[Foo bar]:\n<my url>\n'title'\n\n[Foo bar]\n", - "html": "<p><a href=\"my%20url\" title=\"title\">Foo bar</a></p>\n", - "example": 164, - "start_line": 2845, - "end_line": 2853, - "section": "Link reference definitions", - "shouldFail": true - }, - { - "markdown": "[foo]: /url '\ntitle\nline1\nline2\n'\n\n[foo]\n", - "html": "<p><a href=\"/url\" title=\"\ntitle\nline1\nline2\n\">foo</a></p>\n", - "example": 165, - "start_line": 2858, - "end_line": 2872, - "section": "Link reference definitions" - }, - { - "markdown": "[foo]: /url 'title\n\nwith blank line'\n\n[foo]\n", - "html": "<p>[foo]: /url 'title</p>\n<p>with blank line'</p>\n<p>[foo]</p>\n", - "example": 166, - "start_line": 2877, - "end_line": 2887, - "section": "Link reference definitions" - }, - { - "markdown": "[foo]:\n/url\n\n[foo]\n", - "html": "<p><a href=\"/url\">foo</a></p>\n", - "example": 167, - "start_line": 2892, - "end_line": 2899, - "section": "Link reference definitions" - }, - { - "markdown": "[foo]:\n\n[foo]\n", - "html": "<p>[foo]:</p>\n<p>[foo]</p>\n", - "example": 168, - "start_line": 2904, - "end_line": 2911, - "section": "Link reference definitions" - }, - { - "markdown": "[foo]: <>\n\n[foo]\n", - "html": "<p><a href=\"\">foo</a></p>\n", - "example": 169, - "start_line": 2916, - "end_line": 2922, - "section": "Link reference definitions", - "shouldFail": true - }, - { - "markdown": "[foo]: <bar>(baz)\n\n[foo]\n", - "html": "<p>[foo]: <bar>(baz)</p>\n<p>[foo]</p>\n", - "example": 170, - "start_line": 2927, - "end_line": 2934, - "section": "Link reference definitions" - }, - { - "markdown": "[foo]: /url\\bar\\*baz \"foo\\\"bar\\baz\"\n\n[foo]\n", - "html": "<p><a href=\"/url%5Cbar*baz\" title=\"foo"bar\\baz\">foo</a></p>\n", - "example": 171, - "start_line": 2940, - "end_line": 2946, - "section": "Link reference definitions", - "shouldFail": true - }, - { - "markdown": "[foo]\n\n[foo]: url\n", - "html": "<p><a href=\"url\">foo</a></p>\n", - "example": 172, - "start_line": 2951, - "end_line": 2957, - "section": "Link reference definitions" - }, - { - "markdown": "[foo]\n\n[foo]: first\n[foo]: second\n", - "html": "<p><a href=\"first\">foo</a></p>\n", - "example": 173, - "start_line": 2963, - "end_line": 2970, - "section": "Link reference definitions" - }, - { - "markdown": "[FOO]: /url\n\n[Foo]\n", - "html": "<p><a href=\"/url\">Foo</a></p>\n", - "example": 174, - "start_line": 2976, - "end_line": 2982, - "section": "Link reference definitions" - }, - { - "markdown": "[ΑΓΩ]: /φου\n\n[αγω]\n", - "html": "<p><a href=\"/%CF%86%CE%BF%CF%85\">αγω</a></p>\n", - "example": 175, - "start_line": 2985, - "end_line": 2991, - "section": "Link reference definitions" - }, - { - "markdown": "[foo]: /url\n", - "html": "", - "example": 176, - "start_line": 2997, - "end_line": 3000, - "section": "Link reference definitions" - }, - { - "markdown": "[\nfoo\n]: /url\nbar\n", - "html": "<p>bar</p>\n", - "example": 177, - "start_line": 3005, - "end_line": 3012, - "section": "Link reference definitions" - }, - { - "markdown": "[foo]: /url \"title\" ok\n", - "html": "<p>[foo]: /url "title" ok</p>\n", - "example": 178, - "start_line": 3018, - "end_line": 3022, - "section": "Link reference definitions" - }, - { - "markdown": "[foo]: /url\n\"title\" ok\n", - "html": "<p>"title" ok</p>\n", - "example": 179, - "start_line": 3027, - "end_line": 3032, - "section": "Link reference definitions" - }, - { - "markdown": " [foo]: /url \"title\"\n\n[foo]\n", - "html": "<pre><code>[foo]: /url "title"\n</code></pre>\n<p>[foo]</p>\n", - "example": 180, - "start_line": 3038, - "end_line": 3046, - "section": "Link reference definitions" - }, - { - "markdown": "```\n[foo]: /url\n```\n\n[foo]\n", - "html": "<pre><code>[foo]: /url\n</code></pre>\n<p>[foo]</p>\n", - "example": 181, - "start_line": 3052, - "end_line": 3062, - "section": "Link reference definitions" - }, - { - "markdown": "Foo\n[bar]: /baz\n\n[bar]\n", - "html": "<p>Foo\n[bar]: /baz</p>\n<p>[bar]</p>\n", - "example": 182, - "start_line": 3067, - "end_line": 3076, - "section": "Link reference definitions" - }, - { - "markdown": "# [Foo]\n[foo]: /url\n> bar\n", - "html": "<h1><a href=\"/url\">Foo</a></h1>\n<blockquote>\n<p>bar</p>\n</blockquote>\n", - "example": 183, - "start_line": 3082, - "end_line": 3091, - "section": "Link reference definitions" - }, - { - "markdown": "[foo]: /url\nbar\n===\n[foo]\n", - "html": "<h1>bar</h1>\n<p><a href=\"/url\">foo</a></p>\n", - "example": 184, - "start_line": 3093, - "end_line": 3101, - "section": "Link reference definitions" - }, - { - "markdown": "[foo]: /url\n===\n[foo]\n", - "html": "<p>===\n<a href=\"/url\">foo</a></p>\n", - "example": 185, - "start_line": 3103, - "end_line": 3110, - "section": "Link reference definitions" - }, - { - "markdown": "[foo]: /foo-url \"foo\"\n[bar]: /bar-url\n \"bar\"\n[baz]: /baz-url\n\n[foo],\n[bar],\n[baz]\n", - "html": "<p><a href=\"/foo-url\" title=\"foo\">foo</a>,\n<a href=\"/bar-url\" title=\"bar\">bar</a>,\n<a href=\"/baz-url\">baz</a></p>\n", - "example": 186, - "start_line": 3116, - "end_line": 3129, - "section": "Link reference definitions" - }, - { - "markdown": "[foo]\n\n> [foo]: /url\n", - "html": "<p><a href=\"/url\">foo</a></p>\n<blockquote>\n</blockquote>\n", - "example": 187, - "start_line": 3137, - "end_line": 3145, - "section": "Link reference definitions" - }, - { - "markdown": "[foo]: /url\n", - "html": "", - "example": 188, - "start_line": 3154, - "end_line": 3157, - "section": "Link reference definitions" - }, - { - "markdown": "aaa\n\nbbb\n", - "html": "<p>aaa</p>\n<p>bbb</p>\n", - "example": 189, - "start_line": 3171, - "end_line": 3178, - "section": "Paragraphs" - }, - { - "markdown": "aaa\nbbb\n\nccc\nddd\n", - "html": "<p>aaa\nbbb</p>\n<p>ccc\nddd</p>\n", - "example": 190, - "start_line": 3183, - "end_line": 3194, - "section": "Paragraphs" - }, - { - "markdown": "aaa\n\n\nbbb\n", - "html": "<p>aaa</p>\n<p>bbb</p>\n", - "example": 191, - "start_line": 3199, - "end_line": 3207, - "section": "Paragraphs" - }, - { - "markdown": " aaa\n bbb\n", - "html": "<p>aaa\nbbb</p>\n", - "example": 192, - "start_line": 3212, - "end_line": 3218, - "section": "Paragraphs" - }, - { - "markdown": "aaa\n bbb\n ccc\n", - "html": "<p>aaa\nbbb\nccc</p>\n", - "example": 193, - "start_line": 3224, - "end_line": 3232, - "section": "Paragraphs" - }, - { - "markdown": " aaa\nbbb\n", - "html": "<p>aaa\nbbb</p>\n", - "example": 194, - "start_line": 3238, - "end_line": 3244, - "section": "Paragraphs" - }, - { - "markdown": " aaa\nbbb\n", - "html": "<pre><code>aaa\n</code></pre>\n<p>bbb</p>\n", - "example": 195, - "start_line": 3247, - "end_line": 3254, - "section": "Paragraphs" - }, - { - "markdown": "aaa \nbbb \n", - "html": "<p>aaa<br />\nbbb</p>\n", - "example": 196, - "start_line": 3261, - "end_line": 3267, - "section": "Paragraphs" - }, - { - "markdown": " \n\naaa\n \n\n# aaa\n\n \n", - "html": "<p>aaa</p>\n<h1>aaa</h1>\n", - "example": 197, - "start_line": 3278, - "end_line": 3290, - "section": "Blank lines" - }, - { - "markdown": "> # Foo\n> bar\n> baz\n", - "html": "<blockquote>\n<h1>Foo</h1>\n<p>bar\nbaz</p>\n</blockquote>\n", - "example": 198, - "start_line": 3344, - "end_line": 3354, - "section": "Block quotes" - }, - { - "markdown": "># Foo\n>bar\n> baz\n", - "html": "<blockquote>\n<h1>Foo</h1>\n<p>bar\nbaz</p>\n</blockquote>\n", - "example": 199, - "start_line": 3359, - "end_line": 3369, - "section": "Block quotes" - }, - { - "markdown": " > # Foo\n > bar\n > baz\n", - "html": "<blockquote>\n<h1>Foo</h1>\n<p>bar\nbaz</p>\n</blockquote>\n", - "example": 200, - "start_line": 3374, - "end_line": 3384, - "section": "Block quotes" - }, - { - "markdown": " > # Foo\n > bar\n > baz\n", - "html": "<pre><code>> # Foo\n> bar\n> baz\n</code></pre>\n", - "example": 201, - "start_line": 3389, - "end_line": 3398, - "section": "Block quotes" - }, - { - "markdown": "> # Foo\n> bar\nbaz\n", - "html": "<blockquote>\n<h1>Foo</h1>\n<p>bar\nbaz</p>\n</blockquote>\n", - "example": 202, - "start_line": 3404, - "end_line": 3414, - "section": "Block quotes" - }, - { - "markdown": "> bar\nbaz\n> foo\n", - "html": "<blockquote>\n<p>bar\nbaz\nfoo</p>\n</blockquote>\n", - "example": 203, - "start_line": 3420, - "end_line": 3430, - "section": "Block quotes" - }, - { - "markdown": "> foo\n---\n", - "html": "<blockquote>\n<p>foo</p>\n</blockquote>\n<hr />\n", - "example": 204, - "start_line": 3444, - "end_line": 3452, - "section": "Block quotes" - }, - { - "markdown": "> - foo\n- bar\n", - "html": "<blockquote>\n<ul>\n<li>foo</li>\n</ul>\n</blockquote>\n<ul>\n<li>bar</li>\n</ul>\n", - "example": 205, - "start_line": 3464, - "end_line": 3476, - "section": "Block quotes", - "shouldFail": true - }, - { - "markdown": "> foo\n bar\n", - "html": "<blockquote>\n<pre><code>foo\n</code></pre>\n</blockquote>\n<pre><code>bar\n</code></pre>\n", - "example": 206, - "start_line": 3482, - "end_line": 3492, - "section": "Block quotes", - "shouldFail": true - }, - { - "markdown": "> ```\nfoo\n```\n", - "html": "<blockquote>\n<pre><code></code></pre>\n</blockquote>\n<p>foo</p>\n<pre><code></code></pre>\n", - "example": 207, - "start_line": 3495, - "end_line": 3505, - "section": "Block quotes", - "shouldFail": true - }, - { - "markdown": "> foo\n - bar\n", - "html": "<blockquote>\n<p>foo\n- bar</p>\n</blockquote>\n", - "example": 208, - "start_line": 3511, - "end_line": 3519, - "section": "Block quotes" - }, - { - "markdown": ">\n", - "html": "<blockquote>\n</blockquote>\n", - "example": 209, - "start_line": 3535, - "end_line": 3540, - "section": "Block quotes" - }, - { - "markdown": ">\n> \n> \n", - "html": "<blockquote>\n</blockquote>\n", - "example": 210, - "start_line": 3543, - "end_line": 3550, - "section": "Block quotes" - }, - { - "markdown": ">\n> foo\n> \n", - "html": "<blockquote>\n<p>foo</p>\n</blockquote>\n", - "example": 211, - "start_line": 3555, - "end_line": 3563, - "section": "Block quotes" - }, - { - "markdown": "> foo\n\n> bar\n", - "html": "<blockquote>\n<p>foo</p>\n</blockquote>\n<blockquote>\n<p>bar</p>\n</blockquote>\n", - "example": 212, - "start_line": 3568, - "end_line": 3579, - "section": "Block quotes" - }, - { - "markdown": "> foo\n> bar\n", - "html": "<blockquote>\n<p>foo\nbar</p>\n</blockquote>\n", - "example": 213, - "start_line": 3590, - "end_line": 3598, - "section": "Block quotes" - }, - { - "markdown": "> foo\n>\n> bar\n", - "html": "<blockquote>\n<p>foo</p>\n<p>bar</p>\n</blockquote>\n", - "example": 214, - "start_line": 3603, - "end_line": 3612, - "section": "Block quotes" - }, - { - "markdown": "foo\n> bar\n", - "html": "<p>foo</p>\n<blockquote>\n<p>bar</p>\n</blockquote>\n", - "example": 215, - "start_line": 3617, - "end_line": 3625, - "section": "Block quotes" - }, - { - "markdown": "> aaa\n***\n> bbb\n", - "html": "<blockquote>\n<p>aaa</p>\n</blockquote>\n<hr />\n<blockquote>\n<p>bbb</p>\n</blockquote>\n", - "example": 216, - "start_line": 3631, - "end_line": 3643, - "section": "Block quotes" - }, - { - "markdown": "> bar\nbaz\n", - "html": "<blockquote>\n<p>bar\nbaz</p>\n</blockquote>\n", - "example": 217, - "start_line": 3649, - "end_line": 3657, - "section": "Block quotes" - }, - { - "markdown": "> bar\n\nbaz\n", - "html": "<blockquote>\n<p>bar</p>\n</blockquote>\n<p>baz</p>\n", - "example": 218, - "start_line": 3660, - "end_line": 3669, - "section": "Block quotes" - }, - { - "markdown": "> bar\n>\nbaz\n", - "html": "<blockquote>\n<p>bar</p>\n</blockquote>\n<p>baz</p>\n", - "example": 219, - "start_line": 3672, - "end_line": 3681, - "section": "Block quotes" - }, - { - "markdown": "> > > foo\nbar\n", - "html": "<blockquote>\n<blockquote>\n<blockquote>\n<p>foo\nbar</p>\n</blockquote>\n</blockquote>\n</blockquote>\n", - "example": 220, - "start_line": 3688, - "end_line": 3700, - "section": "Block quotes" - }, - { - "markdown": ">>> foo\n> bar\n>>baz\n", - "html": "<blockquote>\n<blockquote>\n<blockquote>\n<p>foo\nbar\nbaz</p>\n</blockquote>\n</blockquote>\n</blockquote>\n", - "example": 221, - "start_line": 3703, - "end_line": 3717, - "section": "Block quotes" - }, - { - "markdown": "> code\n\n> not code\n", - "html": "<blockquote>\n<pre><code>code\n</code></pre>\n</blockquote>\n<blockquote>\n<p>not code</p>\n</blockquote>\n", - "example": 222, - "start_line": 3725, - "end_line": 3737, - "section": "Block quotes" - }, - { - "markdown": "A paragraph\nwith two lines.\n\n indented code\n\n> A block quote.\n", - "html": "<p>A paragraph\nwith two lines.</p>\n<pre><code>indented code\n</code></pre>\n<blockquote>\n<p>A block quote.</p>\n</blockquote>\n", - "example": 223, - "start_line": 3779, - "end_line": 3794, - "section": "List items" - }, - { - "markdown": "1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n", - "html": "<ol>\n<li>\n<p>A paragraph\nwith two lines.</p>\n<pre><code>indented code\n</code></pre>\n<blockquote>\n<p>A block quote.</p>\n</blockquote>\n</li>\n</ol>\n", - "example": 224, - "start_line": 3801, - "end_line": 3820, - "section": "List items" - }, - { - "markdown": "- one\n\n two\n", - "html": "<ul>\n<li>one</li>\n</ul>\n<p>two</p>\n", - "example": 225, - "start_line": 3834, - "end_line": 3843, - "section": "List items", - "shouldFail": true - }, - { - "markdown": "- one\n\n two\n", - "html": "<ul>\n<li>\n<p>one</p>\n<p>two</p>\n</li>\n</ul>\n", - "example": 226, - "start_line": 3846, - "end_line": 3857, - "section": "List items" - }, - { - "markdown": " - one\n\n two\n", - "html": "<ul>\n<li>one</li>\n</ul>\n<pre><code> two\n</code></pre>\n", - "example": 227, - "start_line": 3860, - "end_line": 3870, - "section": "List items", - "shouldFail": true - }, - { - "markdown": " - one\n\n two\n", - "html": "<ul>\n<li>\n<p>one</p>\n<p>two</p>\n</li>\n</ul>\n", - "example": 228, - "start_line": 3873, - "end_line": 3884, - "section": "List items" - }, - { - "markdown": " > > 1. one\n>>\n>> two\n", - "html": "<blockquote>\n<blockquote>\n<ol>\n<li>\n<p>one</p>\n<p>two</p>\n</li>\n</ol>\n</blockquote>\n</blockquote>\n", - "example": 229, - "start_line": 3895, - "end_line": 3910, - "section": "List items" - }, - { - "markdown": ">>- one\n>>\n > > two\n", - "html": "<blockquote>\n<blockquote>\n<ul>\n<li>one</li>\n</ul>\n<p>two</p>\n</blockquote>\n</blockquote>\n", - "example": 230, - "start_line": 3922, - "end_line": 3935, - "section": "List items" - }, - { - "markdown": "-one\n\n2.two\n", - "html": "<p>-one</p>\n<p>2.two</p>\n", - "example": 231, - "start_line": 3941, - "end_line": 3948, - "section": "List items" - }, - { - "markdown": "- foo\n\n\n bar\n", - "html": "<ul>\n<li>\n<p>foo</p>\n<p>bar</p>\n</li>\n</ul>\n", - "example": 232, - "start_line": 3954, - "end_line": 3966, - "section": "List items", - "shouldFail": true - }, - { - "markdown": "1. foo\n\n ```\n bar\n ```\n\n baz\n\n > bam\n", - "html": "<ol>\n<li>\n<p>foo</p>\n<pre><code>bar\n</code></pre>\n<p>baz</p>\n<blockquote>\n<p>bam</p>\n</blockquote>\n</li>\n</ol>\n", - "example": 233, - "start_line": 3971, - "end_line": 3993, - "section": "List items" - }, - { - "markdown": "- Foo\n\n bar\n\n\n baz\n", - "html": "<ul>\n<li>\n<p>Foo</p>\n<pre><code>bar\n\n\nbaz\n</code></pre>\n</li>\n</ul>\n", - "example": 234, - "start_line": 3999, - "end_line": 4017, - "section": "List items", - "shouldFail": true - }, - { - "markdown": "123456789. ok\n", - "html": "<ol start=\"123456789\">\n<li>ok</li>\n</ol>\n", - "example": 235, - "start_line": 4021, - "end_line": 4027, - "section": "List items" - }, - { - "markdown": "1234567890. not ok\n", - "html": "<p>1234567890. not ok</p>\n", - "example": 236, - "start_line": 4030, - "end_line": 4034, - "section": "List items" - }, - { - "markdown": "0. ok\n", - "html": "<ol start=\"0\">\n<li>ok</li>\n</ol>\n", - "example": 237, - "start_line": 4039, - "end_line": 4045, - "section": "List items" - }, - { - "markdown": "003. ok\n", - "html": "<ol start=\"3\">\n<li>ok</li>\n</ol>\n", - "example": 238, - "start_line": 4048, - "end_line": 4054, - "section": "List items" - }, - { - "markdown": "-1. not ok\n", - "html": "<p>-1. not ok</p>\n", - "example": 239, - "start_line": 4059, - "end_line": 4063, - "section": "List items" - }, - { - "markdown": "- foo\n\n bar\n", - "html": "<ul>\n<li>\n<p>foo</p>\n<pre><code>bar\n</code></pre>\n</li>\n</ul>\n", - "example": 240, - "start_line": 4082, - "end_line": 4094, - "section": "List items" - }, - { - "markdown": " 10. foo\n\n bar\n", - "html": "<ol start=\"10\">\n<li>\n<p>foo</p>\n<pre><code>bar\n</code></pre>\n</li>\n</ol>\n", - "example": 241, - "start_line": 4099, - "end_line": 4111, - "section": "List items" - }, - { - "markdown": " indented code\n\nparagraph\n\n more code\n", - "html": "<pre><code>indented code\n</code></pre>\n<p>paragraph</p>\n<pre><code>more code\n</code></pre>\n", - "example": 242, - "start_line": 4118, - "end_line": 4130, - "section": "List items" - }, - { - "markdown": "1. indented code\n\n paragraph\n\n more code\n", - "html": "<ol>\n<li>\n<pre><code>indented code\n</code></pre>\n<p>paragraph</p>\n<pre><code>more code\n</code></pre>\n</li>\n</ol>\n", - "example": 243, - "start_line": 4133, - "end_line": 4149, - "section": "List items", - "shouldFail": true - }, - { - "markdown": "1. indented code\n\n paragraph\n\n more code\n", - "html": "<ol>\n<li>\n<pre><code> indented code\n</code></pre>\n<p>paragraph</p>\n<pre><code>more code\n</code></pre>\n</li>\n</ol>\n", - "example": 244, - "start_line": 4155, - "end_line": 4171, - "section": "List items", - "shouldFail": true - }, - { - "markdown": " foo\n\nbar\n", - "html": "<p>foo</p>\n<p>bar</p>\n", - "example": 245, - "start_line": 4182, - "end_line": 4189, - "section": "List items" - }, - { - "markdown": "- foo\n\n bar\n", - "html": "<ul>\n<li>foo</li>\n</ul>\n<p>bar</p>\n", - "example": 246, - "start_line": 4192, - "end_line": 4201, - "section": "List items", - "shouldFail": true - }, - { - "markdown": "- foo\n\n bar\n", - "html": "<ul>\n<li>\n<p>foo</p>\n<p>bar</p>\n</li>\n</ul>\n", - "example": 247, - "start_line": 4209, - "end_line": 4220, - "section": "List items" - }, - { - "markdown": "-\n foo\n-\n ```\n bar\n ```\n-\n baz\n", - "html": "<ul>\n<li>foo</li>\n<li>\n<pre><code>bar\n</code></pre>\n</li>\n<li>\n<pre><code>baz\n</code></pre>\n</li>\n</ul>\n", - "example": 248, - "start_line": 4237, - "end_line": 4258, - "section": "List items", - "shouldFail": true - }, - { - "markdown": "- \n foo\n", - "html": "<ul>\n<li>foo</li>\n</ul>\n", - "example": 249, - "start_line": 4263, - "end_line": 4270, - "section": "List items" - }, - { - "markdown": "-\n\n foo\n", - "html": "<ul>\n<li></li>\n</ul>\n<p>foo</p>\n", - "example": 250, - "start_line": 4277, - "end_line": 4286, - "section": "List items", - "shouldFail": true - }, - { - "markdown": "- foo\n-\n- bar\n", - "html": "<ul>\n<li>foo</li>\n<li></li>\n<li>bar</li>\n</ul>\n", - "example": 251, - "start_line": 4291, - "end_line": 4301, - "section": "List items" - }, - { - "markdown": "- foo\n- \n- bar\n", - "html": "<ul>\n<li>foo</li>\n<li></li>\n<li>bar</li>\n</ul>\n", - "example": 252, - "start_line": 4306, - "end_line": 4316, - "section": "List items" - }, - { - "markdown": "1. foo\n2.\n3. bar\n", - "html": "<ol>\n<li>foo</li>\n<li></li>\n<li>bar</li>\n</ol>\n", - "example": 253, - "start_line": 4321, - "end_line": 4331, - "section": "List items" - }, - { - "markdown": "*\n", - "html": "<ul>\n<li></li>\n</ul>\n", - "example": 254, - "start_line": 4336, - "end_line": 4342, - "section": "List items", - "shouldFail": true - }, - { - "markdown": "foo\n*\n\nfoo\n1.\n", - "html": "<p>foo\n*</p>\n<p>foo\n1.</p>\n", - "example": 255, - "start_line": 4346, - "end_line": 4357, - "section": "List items" - }, - { - "markdown": " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n", - "html": "<ol>\n<li>\n<p>A paragraph\nwith two lines.</p>\n<pre><code>indented code\n</code></pre>\n<blockquote>\n<p>A block quote.</p>\n</blockquote>\n</li>\n</ol>\n", - "example": 256, - "start_line": 4368, - "end_line": 4387, - "section": "List items" - }, - { - "markdown": " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n", - "html": "<ol>\n<li>\n<p>A paragraph\nwith two lines.</p>\n<pre><code>indented code\n</code></pre>\n<blockquote>\n<p>A block quote.</p>\n</blockquote>\n</li>\n</ol>\n", - "example": 257, - "start_line": 4392, - "end_line": 4411, - "section": "List items" - }, - { - "markdown": " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n", - "html": "<ol>\n<li>\n<p>A paragraph\nwith two lines.</p>\n<pre><code>indented code\n</code></pre>\n<blockquote>\n<p>A block quote.</p>\n</blockquote>\n</li>\n</ol>\n", - "example": 258, - "start_line": 4416, - "end_line": 4435, - "section": "List items" - }, - { - "markdown": " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n", - "html": "<pre><code>1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n</code></pre>\n", - "example": 259, - "start_line": 4440, - "end_line": 4455, - "section": "List items" - }, - { - "markdown": " 1. A paragraph\nwith two lines.\n\n indented code\n\n > A block quote.\n", - "html": "<ol>\n<li>\n<p>A paragraph\nwith two lines.</p>\n<pre><code>indented code\n</code></pre>\n<blockquote>\n<p>A block quote.</p>\n</blockquote>\n</li>\n</ol>\n", - "example": 260, - "start_line": 4470, - "end_line": 4489, - "section": "List items" - }, - { - "markdown": " 1. A paragraph\n with two lines.\n", - "html": "<ol>\n<li>A paragraph\nwith two lines.</li>\n</ol>\n", - "example": 261, - "start_line": 4494, - "end_line": 4502, - "section": "List items" - }, - { - "markdown": "> 1. > Blockquote\ncontinued here.\n", - "html": "<blockquote>\n<ol>\n<li>\n<blockquote>\n<p>Blockquote\ncontinued here.</p>\n</blockquote>\n</li>\n</ol>\n</blockquote>\n", - "example": 262, - "start_line": 4507, - "end_line": 4521, - "section": "List items" - }, - { - "markdown": "> 1. > Blockquote\n> continued here.\n", - "html": "<blockquote>\n<ol>\n<li>\n<blockquote>\n<p>Blockquote\ncontinued here.</p>\n</blockquote>\n</li>\n</ol>\n</blockquote>\n", - "example": 263, - "start_line": 4524, - "end_line": 4538, - "section": "List items" - }, - { - "markdown": "- foo\n - bar\n - baz\n - boo\n", - "html": "<ul>\n<li>foo\n<ul>\n<li>bar\n<ul>\n<li>baz\n<ul>\n<li>boo</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n", - "example": 264, - "start_line": 4552, - "end_line": 4573, - "section": "List items" - }, - { - "markdown": "- foo\n - bar\n - baz\n - boo\n", - "html": "<ul>\n<li>foo</li>\n<li>bar</li>\n<li>baz</li>\n<li>boo</li>\n</ul>\n", - "example": 265, - "start_line": 4578, - "end_line": 4590, - "section": "List items", - "shouldFail": true - }, - { - "markdown": "10) foo\n - bar\n", - "html": "<ol start=\"10\">\n<li>foo\n<ul>\n<li>bar</li>\n</ul>\n</li>\n</ol>\n", - "example": 266, - "start_line": 4595, - "end_line": 4606, - "section": "List items", - "shouldFail": true - }, - { - "markdown": "10) foo\n - bar\n", - "html": "<ol start=\"10\">\n<li>foo</li>\n</ol>\n<ul>\n<li>bar</li>\n</ul>\n", - "example": 267, - "start_line": 4611, - "end_line": 4621, - "section": "List items", - "shouldFail": true - }, - { - "markdown": "- - foo\n", - "html": "<ul>\n<li>\n<ul>\n<li>foo</li>\n</ul>\n</li>\n</ul>\n", - "example": 268, - "start_line": 4626, - "end_line": 4636, - "section": "List items" - }, - { - "markdown": "1. - 2. foo\n", - "html": "<ol>\n<li>\n<ul>\n<li>\n<ol start=\"2\">\n<li>foo</li>\n</ol>\n</li>\n</ul>\n</li>\n</ol>\n", - "example": 269, - "start_line": 4639, - "end_line": 4653, - "section": "List items" - }, - { - "markdown": "- # Foo\n- Bar\n ---\n baz\n", - "html": "<ul>\n<li>\n<h1>Foo</h1>\n</li>\n<li>\n<h2>Bar</h2>\nbaz</li>\n</ul>\n", - "example": 270, - "start_line": 4658, - "end_line": 4672, - "section": "List items" - }, - { - "markdown": "- foo\n- bar\n+ baz\n", - "html": "<ul>\n<li>foo</li>\n<li>bar</li>\n</ul>\n<ul>\n<li>baz</li>\n</ul>\n", - "example": 271, - "start_line": 4894, - "end_line": 4906, - "section": "Lists", - "shouldFail": true - }, - { - "markdown": "1. foo\n2. bar\n3) baz\n", - "html": "<ol>\n<li>foo</li>\n<li>bar</li>\n</ol>\n<ol start=\"3\">\n<li>baz</li>\n</ol>\n", - "example": 272, - "start_line": 4909, - "end_line": 4921, - "section": "Lists", - "shouldFail": true - }, - { - "markdown": "Foo\n- bar\n- baz\n", - "html": "<p>Foo</p>\n<ul>\n<li>bar</li>\n<li>baz</li>\n</ul>\n", - "example": 273, - "start_line": 4928, - "end_line": 4938, - "section": "Lists" - }, - { - "markdown": "The number of windows in my house is\n14. The number of doors is 6.\n", - "html": "<p>The number of windows in my house is\n14. The number of doors is 6.</p>\n", - "example": 274, - "start_line": 5005, - "end_line": 5011, - "section": "Lists", - "shouldFail": true - }, - { - "markdown": "The number of windows in my house is\n1. The number of doors is 6.\n", - "html": "<p>The number of windows in my house is</p>\n<ol>\n<li>The number of doors is 6.</li>\n</ol>\n", - "example": 275, - "start_line": 5015, - "end_line": 5023, - "section": "Lists" - }, - { - "markdown": "- foo\n\n- bar\n\n\n- baz\n", - "html": "<ul>\n<li>\n<p>foo</p>\n</li>\n<li>\n<p>bar</p>\n</li>\n<li>\n<p>baz</p>\n</li>\n</ul>\n", - "example": 276, - "start_line": 5029, - "end_line": 5048, - "section": "Lists", - "shouldFail": true - }, - { - "markdown": "- foo\n - bar\n - baz\n\n\n bim\n", - "html": "<ul>\n<li>foo\n<ul>\n<li>bar\n<ul>\n<li>\n<p>baz</p>\n<p>bim</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n", - "example": 277, - "start_line": 5050, - "end_line": 5072, - "section": "Lists", - "shouldFail": true - }, - { - "markdown": "- foo\n- bar\n\n<!-- -->\n\n- baz\n- bim\n", - "html": "<ul>\n<li>foo</li>\n<li>bar</li>\n</ul>\n<!-- -->\n<ul>\n<li>baz</li>\n<li>bim</li>\n</ul>\n", - "example": 278, - "start_line": 5080, - "end_line": 5098, - "section": "Lists" - }, - { - "markdown": "- foo\n\n notcode\n\n- foo\n\n<!-- -->\n\n code\n", - "html": "<ul>\n<li>\n<p>foo</p>\n<p>notcode</p>\n</li>\n<li>\n<p>foo</p>\n</li>\n</ul>\n<!-- -->\n<pre><code>code\n</code></pre>\n", - "example": 279, - "start_line": 5101, - "end_line": 5124, - "section": "Lists" - }, - { - "markdown": "- a\n - b\n - c\n - d\n - e\n - f\n- g\n", - "html": "<ul>\n<li>a</li>\n<li>b</li>\n<li>c</li>\n<li>d</li>\n<li>e</li>\n<li>f</li>\n<li>g</li>\n</ul>\n", - "example": 280, - "start_line": 5132, - "end_line": 5150, - "section": "Lists", - "shouldFail": true - }, - { - "markdown": "1. a\n\n 2. b\n\n 3. c\n", - "html": "<ol>\n<li>\n<p>a</p>\n</li>\n<li>\n<p>b</p>\n</li>\n<li>\n<p>c</p>\n</li>\n</ol>\n", - "example": 281, - "start_line": 5153, - "end_line": 5171, - "section": "Lists", - "shouldFail": true - }, - { - "markdown": "- a\n - b\n - c\n - d\n - e\n", - "html": "<ul>\n<li>a</li>\n<li>b</li>\n<li>c</li>\n<li>d\n- e</li>\n</ul>\n", - "example": 282, - "start_line": 5177, - "end_line": 5191, - "section": "Lists", - "shouldFail": true - }, - { - "markdown": "1. a\n\n 2. b\n\n 3. c\n", - "html": "<ol>\n<li>\n<p>a</p>\n</li>\n<li>\n<p>b</p>\n</li>\n</ol>\n<pre><code>3. c\n</code></pre>\n", - "example": 283, - "start_line": 5197, - "end_line": 5214, - "section": "Lists", - "shouldFail": true - }, - { - "markdown": "- a\n- b\n\n- c\n", - "html": "<ul>\n<li>\n<p>a</p>\n</li>\n<li>\n<p>b</p>\n</li>\n<li>\n<p>c</p>\n</li>\n</ul>\n", - "example": 284, - "start_line": 5220, - "end_line": 5237, - "section": "Lists" - }, - { - "markdown": "* a\n*\n\n* c\n", - "html": "<ul>\n<li>\n<p>a</p>\n</li>\n<li></li>\n<li>\n<p>c</p>\n</li>\n</ul>\n", - "example": 285, - "start_line": 5242, - "end_line": 5257, - "section": "Lists" - }, - { - "markdown": "- a\n- b\n\n c\n- d\n", - "html": "<ul>\n<li>\n<p>a</p>\n</li>\n<li>\n<p>b</p>\n<p>c</p>\n</li>\n<li>\n<p>d</p>\n</li>\n</ul>\n", - "example": 286, - "start_line": 5264, - "end_line": 5283, - "section": "Lists" - }, - { - "markdown": "- a\n- b\n\n [ref]: /url\n- d\n", - "html": "<ul>\n<li>\n<p>a</p>\n</li>\n<li>\n<p>b</p>\n</li>\n<li>\n<p>d</p>\n</li>\n</ul>\n", - "example": 287, - "start_line": 5286, - "end_line": 5304, - "section": "Lists", - "shouldFail": true - }, - { - "markdown": "- a\n- ```\n b\n\n\n ```\n- c\n", - "html": "<ul>\n<li>a</li>\n<li>\n<pre><code>b\n\n\n</code></pre>\n</li>\n<li>c</li>\n</ul>\n", - "example": 288, - "start_line": 5309, - "end_line": 5328, - "section": "Lists", - "shouldFail": true - }, - { - "markdown": "- a\n - b\n\n c\n- d\n", - "html": "<ul>\n<li>a\n<ul>\n<li>\n<p>b</p>\n<p>c</p>\n</li>\n</ul>\n</li>\n<li>d</li>\n</ul>\n", - "example": 289, - "start_line": 5335, - "end_line": 5353, - "section": "Lists", - "shouldFail": true - }, - { - "markdown": "* a\n > b\n >\n* c\n", - "html": "<ul>\n<li>a\n<blockquote>\n<p>b</p>\n</blockquote>\n</li>\n<li>c</li>\n</ul>\n", - "example": 290, - "start_line": 5359, - "end_line": 5373, - "section": "Lists" - }, - { - "markdown": "- a\n > b\n ```\n c\n ```\n- d\n", - "html": "<ul>\n<li>a\n<blockquote>\n<p>b</p>\n</blockquote>\n<pre><code>c\n</code></pre>\n</li>\n<li>d</li>\n</ul>\n", - "example": 291, - "start_line": 5379, - "end_line": 5397, - "section": "Lists", - "shouldFail": true - }, - { - "markdown": "- a\n", - "html": "<ul>\n<li>a</li>\n</ul>\n", - "example": 292, - "start_line": 5402, - "end_line": 5408, - "section": "Lists" - }, - { - "markdown": "- a\n - b\n", - "html": "<ul>\n<li>a\n<ul>\n<li>b</li>\n</ul>\n</li>\n</ul>\n", - "example": 293, - "start_line": 5411, - "end_line": 5422, - "section": "Lists" - }, - { - "markdown": "1. ```\n foo\n ```\n\n bar\n", - "html": "<ol>\n<li>\n<pre><code>foo\n</code></pre>\n<p>bar</p>\n</li>\n</ol>\n", - "example": 294, - "start_line": 5428, - "end_line": 5442, - "section": "Lists" - }, - { - "markdown": "* foo\n * bar\n\n baz\n", - "html": "<ul>\n<li>\n<p>foo</p>\n<ul>\n<li>bar</li>\n</ul>\n<p>baz</p>\n</li>\n</ul>\n", - "example": 295, - "start_line": 5447, - "end_line": 5462, - "section": "Lists" - }, - { - "markdown": "- a\n - b\n - c\n\n- d\n - e\n - f\n", - "html": "<ul>\n<li>\n<p>a</p>\n<ul>\n<li>b</li>\n<li>c</li>\n</ul>\n</li>\n<li>\n<p>d</p>\n<ul>\n<li>e</li>\n<li>f</li>\n</ul>\n</li>\n</ul>\n", - "example": 296, - "start_line": 5465, - "end_line": 5490, - "section": "Lists" - }, - { - "markdown": "`hi`lo`\n", - "html": "<p><code>hi</code>lo`</p>\n", - "example": 297, - "start_line": 5499, - "end_line": 5503, - "section": "Inlines" - }, - { - "markdown": "\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\-\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\\\\\]\\^\\_\\`\\{\\|\\}\\~\n", - "html": "<p>!"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~</p>\n", - "example": 298, - "start_line": 5513, - "end_line": 5517, - "section": "Backslash escapes" - }, - { - "markdown": "\\\t\\A\\a\\ \\3\\φ\\«\n", - "html": "<p>\\\t\\A\\a\\ \\3\\φ\\«</p>\n", - "example": 299, - "start_line": 5523, - "end_line": 5527, - "section": "Backslash escapes" - }, - { - "markdown": "\\*not emphasized*\n\\<br/> not a tag\n\\[not a link](/foo)\n\\`not code`\n1\\. not a list\n\\* not a list\n\\# not a heading\n\\[foo]: /url \"not a reference\"\n\\ö not a character entity\n", - "html": "<p>*not emphasized*\n<br/> not a tag\n[not a link](/foo)\n`not code`\n1. not a list\n* not a list\n# not a heading\n[foo]: /url "not a reference"\n&ouml; not a character entity</p>\n", - "example": 300, - "start_line": 5533, - "end_line": 5553, - "section": "Backslash escapes" - }, - { - "markdown": "\\\\*emphasis*\n", - "html": "<p>\\<em>emphasis</em></p>\n", - "example": 301, - "start_line": 5558, - "end_line": 5562, - "section": "Backslash escapes" - }, - { - "markdown": "foo\\\nbar\n", - "html": "<p>foo<br />\nbar</p>\n", - "example": 302, - "start_line": 5567, - "end_line": 5573, - "section": "Backslash escapes" - }, - { - "markdown": "`` \\[\\` ``\n", - "html": "<p><code>\\[\\`</code></p>\n", - "example": 303, - "start_line": 5579, - "end_line": 5583, - "section": "Backslash escapes" - }, - { - "markdown": " \\[\\]\n", - "html": "<pre><code>\\[\\]\n</code></pre>\n", - "example": 304, - "start_line": 5586, - "end_line": 5591, - "section": "Backslash escapes" - }, - { - "markdown": "~~~\n\\[\\]\n~~~\n", - "html": "<pre><code>\\[\\]\n</code></pre>\n", - "example": 305, - "start_line": 5594, - "end_line": 5601, - "section": "Backslash escapes" - }, - { - "markdown": "<http://example.com?find=\\*>\n", - "html": "<p><a href=\"http://example.com?find=%5C*\">http://example.com?find=\\*</a></p>\n", - "example": 306, - "start_line": 5604, - "end_line": 5608, - "section": "Backslash escapes" - }, - { - "markdown": "<a href=\"/bar\\/)\">\n", - "html": "<a href=\"/bar\\/)\">\n", - "example": 307, - "start_line": 5611, - "end_line": 5615, - "section": "Backslash escapes" - }, - { - "markdown": "[foo](/bar\\* \"ti\\*tle\")\n", - "html": "<p><a href=\"/bar*\" title=\"ti*tle\">foo</a></p>\n", - "example": 308, - "start_line": 5621, - "end_line": 5625, - "section": "Backslash escapes" - }, - { - "markdown": "[foo]\n\n[foo]: /bar\\* \"ti\\*tle\"\n", - "html": "<p><a href=\"/bar*\" title=\"ti*tle\">foo</a></p>\n", - "example": 309, - "start_line": 5628, - "end_line": 5634, - "section": "Backslash escapes", - "shouldFail": true - }, - { - "markdown": "``` foo\\+bar\nfoo\n```\n", - "html": "<pre><code class=\"language-foo+bar\">foo\n</code></pre>\n", - "example": 310, - "start_line": 5637, - "end_line": 5644, - "section": "Backslash escapes", - "shouldFail": true - }, - { - "markdown": " & © Æ Ď\n¾ ℋ ⅆ\n∲ ≧̸\n", - "html": "<p> & © Æ Ď\n¾ ℋ ⅆ\n∲ ≧̸</p>\n", - "example": 311, - "start_line": 5674, - "end_line": 5682, - "section": "Entity and numeric character references" - }, - { - "markdown": "# Ӓ Ϡ �\n", - "html": "<p># Ӓ Ϡ �</p>\n", - "example": 312, - "start_line": 5693, - "end_line": 5697, - "section": "Entity and numeric character references" - }, - { - "markdown": "" ആ ಫ\n", - "html": "<p>" ആ ಫ</p>\n", - "example": 313, - "start_line": 5706, - "end_line": 5710, - "section": "Entity and numeric character references" - }, - { - "markdown": "  &x; &#; &#x;\n�\n&#abcdef0;\n&ThisIsNotDefined; &hi?;\n", - "html": "<p>&nbsp &x; &#; &#x;\n&#987654321;\n&#abcdef0;\n&ThisIsNotDefined; &hi?;</p>\n", - "example": 314, - "start_line": 5715, - "end_line": 5725, - "section": "Entity and numeric character references", - "shouldFail": true - }, - { - "markdown": "©\n", - "html": "<p>&copy</p>\n", - "example": 315, - "start_line": 5732, - "end_line": 5736, - "section": "Entity and numeric character references" - }, - { - "markdown": "&MadeUpEntity;\n", - "html": "<p>&MadeUpEntity;</p>\n", - "example": 316, - "start_line": 5742, - "end_line": 5746, - "section": "Entity and numeric character references" - }, - { - "markdown": "<a href=\"öö.html\">\n", - "html": "<a href=\"öö.html\">\n", - "example": 317, - "start_line": 5753, - "end_line": 5757, - "section": "Entity and numeric character references" - }, - { - "markdown": "[foo](/föö \"föö\")\n", - "html": "<p><a href=\"/f%C3%B6%C3%B6\" title=\"föö\">foo</a></p>\n", - "example": 318, - "start_line": 5760, - "end_line": 5764, - "section": "Entity and numeric character references", - "shouldFail": true - }, - { - "markdown": "[foo]\n\n[foo]: /föö \"föö\"\n", - "html": "<p><a href=\"/f%C3%B6%C3%B6\" title=\"föö\">foo</a></p>\n", - "example": 319, - "start_line": 5767, - "end_line": 5773, - "section": "Entity and numeric character references", - "shouldFail": true - }, - { - "markdown": "``` föö\nfoo\n```\n", - "html": "<pre><code class=\"language-föö\">foo\n</code></pre>\n", - "example": 320, - "start_line": 5776, - "end_line": 5783, - "section": "Entity and numeric character references", - "shouldFail": true - }, - { - "markdown": "`föö`\n", - "html": "<p><code>f&ouml;&ouml;</code></p>\n", - "example": 321, - "start_line": 5789, - "end_line": 5793, - "section": "Entity and numeric character references" - }, - { - "markdown": " föfö\n", - "html": "<pre><code>f&ouml;f&ouml;\n</code></pre>\n", - "example": 322, - "start_line": 5796, - "end_line": 5801, - "section": "Entity and numeric character references" - }, - { - "markdown": "*foo*\n*foo*\n", - "html": "<p>*foo*\n<em>foo</em></p>\n", - "example": 323, - "start_line": 5808, - "end_line": 5814, - "section": "Entity and numeric character references" - }, - { - "markdown": "* foo\n\n* foo\n", - "html": "<p>* foo</p>\n<ul>\n<li>foo</li>\n</ul>\n", - "example": 324, - "start_line": 5816, - "end_line": 5825, - "section": "Entity and numeric character references" - }, - { - "markdown": "foo bar\n", - "html": "<p>foo\n\nbar</p>\n", - "example": 325, - "start_line": 5827, - "end_line": 5833, - "section": "Entity and numeric character references" - }, - { - "markdown": "	foo\n", - "html": "<p>\tfoo</p>\n", - "example": 326, - "start_line": 5835, - "end_line": 5839, - "section": "Entity and numeric character references" - }, - { - "markdown": "[a](url "tit")\n", - "html": "<p>[a](url "tit")</p>\n", - "example": 327, - "start_line": 5842, - "end_line": 5846, - "section": "Entity and numeric character references" - }, - { - "markdown": "`foo`\n", - "html": "<p><code>foo</code></p>\n", - "example": 328, - "start_line": 5870, - "end_line": 5874, - "section": "Code spans" - }, - { - "markdown": "`` foo ` bar ``\n", - "html": "<p><code>foo ` bar</code></p>\n", - "example": 329, - "start_line": 5881, - "end_line": 5885, - "section": "Code spans" - }, - { - "markdown": "` `` `\n", - "html": "<p><code>``</code></p>\n", - "example": 330, - "start_line": 5891, - "end_line": 5895, - "section": "Code spans" - }, - { - "markdown": "` `` `\n", - "html": "<p><code> `` </code></p>\n", - "example": 331, - "start_line": 5899, - "end_line": 5903, - "section": "Code spans" - }, - { - "markdown": "` a`\n", - "html": "<p><code> a</code></p>\n", - "example": 332, - "start_line": 5908, - "end_line": 5912, - "section": "Code spans" - }, - { - "markdown": "` b `\n", - "html": "<p><code> b </code></p>\n", - "example": 333, - "start_line": 5917, - "end_line": 5921, - "section": "Code spans" - }, - { - "markdown": "` `\n` `\n", - "html": "<p><code> </code>\n<code> </code></p>\n", - "example": 334, - "start_line": 5925, - "end_line": 5931, - "section": "Code spans" - }, - { - "markdown": "``\nfoo\nbar \nbaz\n``\n", - "html": "<p><code>foo bar baz</code></p>\n", - "example": 335, - "start_line": 5936, - "end_line": 5944, - "section": "Code spans" - }, - { - "markdown": "``\nfoo \n``\n", - "html": "<p><code>foo </code></p>\n", - "example": 336, - "start_line": 5946, - "end_line": 5952, - "section": "Code spans" - }, - { - "markdown": "`foo bar \nbaz`\n", - "html": "<p><code>foo bar baz</code></p>\n", - "example": 337, - "start_line": 5957, - "end_line": 5962, - "section": "Code spans" - }, - { - "markdown": "`foo\\`bar`\n", - "html": "<p><code>foo\\</code>bar`</p>\n", - "example": 338, - "start_line": 5974, - "end_line": 5978, - "section": "Code spans" - }, - { - "markdown": "``foo`bar``\n", - "html": "<p><code>foo`bar</code></p>\n", - "example": 339, - "start_line": 5985, - "end_line": 5989, - "section": "Code spans" - }, - { - "markdown": "` foo `` bar `\n", - "html": "<p><code>foo `` bar</code></p>\n", - "example": 340, - "start_line": 5991, - "end_line": 5995, - "section": "Code spans" - }, - { - "markdown": "*foo`*`\n", - "html": "<p>*foo<code>*</code></p>\n", - "example": 341, - "start_line": 6003, - "end_line": 6007, - "section": "Code spans", - "shouldFail": true - }, - { - "markdown": "[not a `link](/foo`)\n", - "html": "<p>[not a <code>link](/foo</code>)</p>\n", - "example": 342, - "start_line": 6012, - "end_line": 6016, - "section": "Code spans", - "shouldFail": true - }, - { - "markdown": "`<a href=\"`\">`\n", - "html": "<p><code><a href="</code>">`</p>\n", - "example": 343, - "start_line": 6022, - "end_line": 6026, - "section": "Code spans" - }, - { - "markdown": "<a href=\"`\">`\n", - "html": "<p><a href=\"`\">`</p>\n", - "example": 344, - "start_line": 6031, - "end_line": 6035, - "section": "Code spans" - }, - { - "markdown": "`<http://foo.bar.`baz>`\n", - "html": "<p><code><http://foo.bar.</code>baz>`</p>\n", - "example": 345, - "start_line": 6040, - "end_line": 6044, - "section": "Code spans" - }, - { - "markdown": "<http://foo.bar.`baz>`\n", - "html": "<p><a href=\"http://foo.bar.%60baz\">http://foo.bar.`baz</a>`</p>\n", - "example": 346, - "start_line": 6049, - "end_line": 6053, - "section": "Code spans" - }, - { - "markdown": "```foo``\n", - "html": "<p>```foo``</p>\n", - "example": 347, - "start_line": 6059, - "end_line": 6063, - "section": "Code spans" - }, - { - "markdown": "`foo\n", - "html": "<p>`foo</p>\n", - "example": 348, - "start_line": 6066, - "end_line": 6070, - "section": "Code spans" - }, - { - "markdown": "`foo``bar``\n", - "html": "<p>`foo<code>bar</code></p>\n", - "example": 349, - "start_line": 6075, - "end_line": 6079, - "section": "Code spans" - }, - { - "markdown": "*foo bar*\n", - "html": "<p><em>foo bar</em></p>\n", - "example": 350, - "start_line": 6292, - "end_line": 6296, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "a * foo bar*\n", - "html": "<p>a * foo bar*</p>\n", - "example": 351, - "start_line": 6302, - "end_line": 6306, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "a*\"foo\"*\n", - "html": "<p>a*"foo"*</p>\n", - "example": 352, - "start_line": 6313, - "end_line": 6317, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "* a *\n", - "html": "<p>* a *</p>\n", - "example": 353, - "start_line": 6322, - "end_line": 6326, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "foo*bar*\n", - "html": "<p>foo<em>bar</em></p>\n", - "example": 354, - "start_line": 6331, - "end_line": 6335, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "5*6*78\n", - "html": "<p>5<em>6</em>78</p>\n", - "example": 355, - "start_line": 6338, - "end_line": 6342, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "_foo bar_\n", - "html": "<p><em>foo bar</em></p>\n", - "example": 356, - "start_line": 6347, - "end_line": 6351, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "_ foo bar_\n", - "html": "<p>_ foo bar_</p>\n", - "example": 357, - "start_line": 6357, - "end_line": 6361, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "a_\"foo\"_\n", - "html": "<p>a_"foo"_</p>\n", - "example": 358, - "start_line": 6367, - "end_line": 6371, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "foo_bar_\n", - "html": "<p>foo_bar_</p>\n", - "example": 359, - "start_line": 6376, - "end_line": 6380, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "5_6_78\n", - "html": "<p>5_6_78</p>\n", - "example": 360, - "start_line": 6383, - "end_line": 6387, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "пристаням_стремятся_\n", - "html": "<p>пристаням_стремятся_</p>\n", - "example": 361, - "start_line": 6390, - "end_line": 6394, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "aa_\"bb\"_cc\n", - "html": "<p>aa_"bb"_cc</p>\n", - "example": 362, - "start_line": 6400, - "end_line": 6404, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "foo-_(bar)_\n", - "html": "<p>foo-<em>(bar)</em></p>\n", - "example": 363, - "start_line": 6411, - "end_line": 6415, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "_foo*\n", - "html": "<p>_foo*</p>\n", - "example": 364, - "start_line": 6423, - "end_line": 6427, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "*foo bar *\n", - "html": "<p>*foo bar *</p>\n", - "example": 365, - "start_line": 6433, - "end_line": 6437, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "*foo bar\n*\n", - "html": "<p>*foo bar\n*</p>\n", - "example": 366, - "start_line": 6442, - "end_line": 6448, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "*(*foo)\n", - "html": "<p>*(*foo)</p>\n", - "example": 367, - "start_line": 6455, - "end_line": 6459, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "*(*foo*)*\n", - "html": "<p><em>(<em>foo</em>)</em></p>\n", - "example": 368, - "start_line": 6465, - "end_line": 6469, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "*foo*bar\n", - "html": "<p><em>foo</em>bar</p>\n", - "example": 369, - "start_line": 6474, - "end_line": 6478, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "_foo bar _\n", - "html": "<p>_foo bar _</p>\n", - "example": 370, - "start_line": 6487, - "end_line": 6491, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "_(_foo)\n", - "html": "<p>_(_foo)</p>\n", - "example": 371, - "start_line": 6497, - "end_line": 6501, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "_(_foo_)_\n", - "html": "<p><em>(<em>foo</em>)</em></p>\n", - "example": 372, - "start_line": 6506, - "end_line": 6510, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "_foo_bar\n", - "html": "<p>_foo_bar</p>\n", - "example": 373, - "start_line": 6515, - "end_line": 6519, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "_пристаням_стремятся\n", - "html": "<p>_пристаням_стремятся</p>\n", - "example": 374, - "start_line": 6522, - "end_line": 6526, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "_foo_bar_baz_\n", - "html": "<p><em>foo_bar_baz</em></p>\n", - "example": 375, - "start_line": 6529, - "end_line": 6533, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "_(bar)_.\n", - "html": "<p><em>(bar)</em>.</p>\n", - "example": 376, - "start_line": 6540, - "end_line": 6544, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "**foo bar**\n", - "html": "<p><strong>foo bar</strong></p>\n", - "example": 377, - "start_line": 6549, - "end_line": 6553, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "** foo bar**\n", - "html": "<p>** foo bar**</p>\n", - "example": 378, - "start_line": 6559, - "end_line": 6563, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "a**\"foo\"**\n", - "html": "<p>a**"foo"**</p>\n", - "example": 379, - "start_line": 6570, - "end_line": 6574, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "foo**bar**\n", - "html": "<p>foo<strong>bar</strong></p>\n", - "example": 380, - "start_line": 6579, - "end_line": 6583, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "__foo bar__\n", - "html": "<p><strong>foo bar</strong></p>\n", - "example": 381, - "start_line": 6588, - "end_line": 6592, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "__ foo bar__\n", - "html": "<p>__ foo bar__</p>\n", - "example": 382, - "start_line": 6598, - "end_line": 6602, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "__\nfoo bar__\n", - "html": "<p>__\nfoo bar__</p>\n", - "example": 383, - "start_line": 6606, - "end_line": 6612, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "a__\"foo\"__\n", - "html": "<p>a__"foo"__</p>\n", - "example": 384, - "start_line": 6618, - "end_line": 6622, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "foo__bar__\n", - "html": "<p>foo__bar__</p>\n", - "example": 385, - "start_line": 6627, - "end_line": 6631, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "5__6__78\n", - "html": "<p>5__6__78</p>\n", - "example": 386, - "start_line": 6634, - "end_line": 6638, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "пристаням__стремятся__\n", - "html": "<p>пристаням__стремятся__</p>\n", - "example": 387, - "start_line": 6641, - "end_line": 6645, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "__foo, __bar__, baz__\n", - "html": "<p><strong>foo, <strong>bar</strong>, baz</strong></p>\n", - "example": 388, - "start_line": 6648, - "end_line": 6652, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "foo-__(bar)__\n", - "html": "<p>foo-<strong>(bar)</strong></p>\n", - "example": 389, - "start_line": 6659, - "end_line": 6663, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "**foo bar **\n", - "html": "<p>**foo bar **</p>\n", - "example": 390, - "start_line": 6672, - "end_line": 6676, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "**(**foo)\n", - "html": "<p>**(**foo)</p>\n", - "example": 391, - "start_line": 6685, - "end_line": 6689, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "*(**foo**)*\n", - "html": "<p><em>(<strong>foo</strong>)</em></p>\n", - "example": 392, - "start_line": 6695, - "end_line": 6699, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "**Gomphocarpus (*Gomphocarpus physocarpus*, syn.\n*Asclepias physocarpa*)**\n", - "html": "<p><strong>Gomphocarpus (<em>Gomphocarpus physocarpus</em>, syn.\n<em>Asclepias physocarpa</em>)</strong></p>\n", - "example": 393, - "start_line": 6702, - "end_line": 6708, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "**foo \"*bar*\" foo**\n", - "html": "<p><strong>foo "<em>bar</em>" foo</strong></p>\n", - "example": 394, - "start_line": 6711, - "end_line": 6715, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "**foo**bar\n", - "html": "<p><strong>foo</strong>bar</p>\n", - "example": 395, - "start_line": 6720, - "end_line": 6724, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "__foo bar __\n", - "html": "<p>__foo bar __</p>\n", - "example": 396, - "start_line": 6732, - "end_line": 6736, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "__(__foo)\n", - "html": "<p>__(__foo)</p>\n", - "example": 397, - "start_line": 6742, - "end_line": 6746, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "_(__foo__)_\n", - "html": "<p><em>(<strong>foo</strong>)</em></p>\n", - "example": 398, - "start_line": 6752, - "end_line": 6756, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "__foo__bar\n", - "html": "<p>__foo__bar</p>\n", - "example": 399, - "start_line": 6761, - "end_line": 6765, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "__пристаням__стремятся\n", - "html": "<p>__пристаням__стремятся</p>\n", - "example": 400, - "start_line": 6768, - "end_line": 6772, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "__foo__bar__baz__\n", - "html": "<p><strong>foo__bar__baz</strong></p>\n", - "example": 401, - "start_line": 6775, - "end_line": 6779, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "__(bar)__.\n", - "html": "<p><strong>(bar)</strong>.</p>\n", - "example": 402, - "start_line": 6786, - "end_line": 6790, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "*foo [bar](/url)*\n", - "html": "<p><em>foo <a href=\"/url\">bar</a></em></p>\n", - "example": 403, - "start_line": 6798, - "end_line": 6802, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "*foo\nbar*\n", - "html": "<p><em>foo\nbar</em></p>\n", - "example": 404, - "start_line": 6805, - "end_line": 6811, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "_foo __bar__ baz_\n", - "html": "<p><em>foo <strong>bar</strong> baz</em></p>\n", - "example": 405, - "start_line": 6817, - "end_line": 6821, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "_foo _bar_ baz_\n", - "html": "<p><em>foo <em>bar</em> baz</em></p>\n", - "example": 406, - "start_line": 6824, - "end_line": 6828, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "__foo_ bar_\n", - "html": "<p><em><em>foo</em> bar</em></p>\n", - "example": 407, - "start_line": 6831, - "end_line": 6835, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "*foo *bar**\n", - "html": "<p><em>foo <em>bar</em></em></p>\n", - "example": 408, - "start_line": 6838, - "end_line": 6842, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "*foo **bar** baz*\n", - "html": "<p><em>foo <strong>bar</strong> baz</em></p>\n", - "example": 409, - "start_line": 6845, - "end_line": 6849, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "*foo**bar**baz*\n", - "html": "<p><em>foo<strong>bar</strong>baz</em></p>\n", - "example": 410, - "start_line": 6851, - "end_line": 6855, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "*foo**bar*\n", - "html": "<p><em>foo**bar</em></p>\n", - "example": 411, - "start_line": 6875, - "end_line": 6879, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "***foo** bar*\n", - "html": "<p><em><strong>foo</strong> bar</em></p>\n", - "example": 412, - "start_line": 6888, - "end_line": 6892, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "*foo **bar***\n", - "html": "<p><em>foo <strong>bar</strong></em></p>\n", - "example": 413, - "start_line": 6895, - "end_line": 6899, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "*foo**bar***\n", - "html": "<p><em>foo<strong>bar</strong></em></p>\n", - "example": 414, - "start_line": 6902, - "end_line": 6906, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "foo***bar***baz\n", - "html": "<p>foo<em><strong>bar</strong></em>baz</p>\n", - "example": 415, - "start_line": 6913, - "end_line": 6917, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "foo******bar*********baz\n", - "html": "<p>foo<strong><strong><strong>bar</strong></strong></strong>***baz</p>\n", - "example": 416, - "start_line": 6919, - "end_line": 6923, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "*foo **bar *baz* bim** bop*\n", - "html": "<p><em>foo <strong>bar <em>baz</em> bim</strong> bop</em></p>\n", - "example": 417, - "start_line": 6928, - "end_line": 6932, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "*foo [*bar*](/url)*\n", - "html": "<p><em>foo <a href=\"/url\"><em>bar</em></a></em></p>\n", - "example": 418, - "start_line": 6935, - "end_line": 6939, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "** is not an empty emphasis\n", - "html": "<p>** is not an empty emphasis</p>\n", - "example": 419, - "start_line": 6944, - "end_line": 6948, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "**** is not an empty strong emphasis\n", - "html": "<p>**** is not an empty strong emphasis</p>\n", - "example": 420, - "start_line": 6951, - "end_line": 6955, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "**foo [bar](/url)**\n", - "html": "<p><strong>foo <a href=\"/url\">bar</a></strong></p>\n", - "example": 421, - "start_line": 6964, - "end_line": 6968, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "**foo\nbar**\n", - "html": "<p><strong>foo\nbar</strong></p>\n", - "example": 422, - "start_line": 6971, - "end_line": 6977, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "__foo _bar_ baz__\n", - "html": "<p><strong>foo <em>bar</em> baz</strong></p>\n", - "example": 423, - "start_line": 6983, - "end_line": 6987, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "__foo __bar__ baz__\n", - "html": "<p><strong>foo <strong>bar</strong> baz</strong></p>\n", - "example": 424, - "start_line": 6990, - "end_line": 6994, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "____foo__ bar__\n", - "html": "<p><strong><strong>foo</strong> bar</strong></p>\n", - "example": 425, - "start_line": 6997, - "end_line": 7001, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "**foo **bar****\n", - "html": "<p><strong>foo <strong>bar</strong></strong></p>\n", - "example": 426, - "start_line": 7004, - "end_line": 7008, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "**foo *bar* baz**\n", - "html": "<p><strong>foo <em>bar</em> baz</strong></p>\n", - "example": 427, - "start_line": 7011, - "end_line": 7015, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "**foo*bar*baz**\n", - "html": "<p><strong>foo<em>bar</em>baz</strong></p>\n", - "example": 428, - "start_line": 7018, - "end_line": 7022, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "***foo* bar**\n", - "html": "<p><strong><em>foo</em> bar</strong></p>\n", - "example": 429, - "start_line": 7025, - "end_line": 7029, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "**foo *bar***\n", - "html": "<p><strong>foo <em>bar</em></strong></p>\n", - "example": 430, - "start_line": 7032, - "end_line": 7036, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "**foo *bar **baz**\nbim* bop**\n", - "html": "<p><strong>foo <em>bar <strong>baz</strong>\nbim</em> bop</strong></p>\n", - "example": 431, - "start_line": 7041, - "end_line": 7047, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "**foo [*bar*](/url)**\n", - "html": "<p><strong>foo <a href=\"/url\"><em>bar</em></a></strong></p>\n", - "example": 432, - "start_line": 7050, - "end_line": 7054, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "__ is not an empty emphasis\n", - "html": "<p>__ is not an empty emphasis</p>\n", - "example": 433, - "start_line": 7059, - "end_line": 7063, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "____ is not an empty strong emphasis\n", - "html": "<p>____ is not an empty strong emphasis</p>\n", - "example": 434, - "start_line": 7066, - "end_line": 7070, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "foo ***\n", - "html": "<p>foo ***</p>\n", - "example": 435, - "start_line": 7076, - "end_line": 7080, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "foo *\\**\n", - "html": "<p>foo <em>*</em></p>\n", - "example": 436, - "start_line": 7083, - "end_line": 7087, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "foo *_*\n", - "html": "<p>foo <em>_</em></p>\n", - "example": 437, - "start_line": 7090, - "end_line": 7094, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "foo *****\n", - "html": "<p>foo *****</p>\n", - "example": 438, - "start_line": 7097, - "end_line": 7101, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "foo **\\***\n", - "html": "<p>foo <strong>*</strong></p>\n", - "example": 439, - "start_line": 7104, - "end_line": 7108, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "foo **_**\n", - "html": "<p>foo <strong>_</strong></p>\n", - "example": 440, - "start_line": 7111, - "end_line": 7115, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "**foo*\n", - "html": "<p>*<em>foo</em></p>\n", - "example": 441, - "start_line": 7122, - "end_line": 7126, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "*foo**\n", - "html": "<p><em>foo</em>*</p>\n", - "example": 442, - "start_line": 7129, - "end_line": 7133, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "***foo**\n", - "html": "<p>*<strong>foo</strong></p>\n", - "example": 443, - "start_line": 7136, - "end_line": 7140, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "****foo*\n", - "html": "<p>***<em>foo</em></p>\n", - "example": 444, - "start_line": 7143, - "end_line": 7147, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "**foo***\n", - "html": "<p><strong>foo</strong>*</p>\n", - "example": 445, - "start_line": 7150, - "end_line": 7154, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "*foo****\n", - "html": "<p><em>foo</em>***</p>\n", - "example": 446, - "start_line": 7157, - "end_line": 7161, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "foo ___\n", - "html": "<p>foo ___</p>\n", - "example": 447, - "start_line": 7167, - "end_line": 7171, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "foo _\\__\n", - "html": "<p>foo <em>_</em></p>\n", - "example": 448, - "start_line": 7174, - "end_line": 7178, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "foo _*_\n", - "html": "<p>foo <em>*</em></p>\n", - "example": 449, - "start_line": 7181, - "end_line": 7185, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "foo _____\n", - "html": "<p>foo _____</p>\n", - "example": 450, - "start_line": 7188, - "end_line": 7192, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "foo __\\___\n", - "html": "<p>foo <strong>_</strong></p>\n", - "example": 451, - "start_line": 7195, - "end_line": 7199, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "foo __*__\n", - "html": "<p>foo <strong>*</strong></p>\n", - "example": 452, - "start_line": 7202, - "end_line": 7206, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "__foo_\n", - "html": "<p>_<em>foo</em></p>\n", - "example": 453, - "start_line": 7209, - "end_line": 7213, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "_foo__\n", - "html": "<p><em>foo</em>_</p>\n", - "example": 454, - "start_line": 7220, - "end_line": 7224, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "___foo__\n", - "html": "<p>_<strong>foo</strong></p>\n", - "example": 455, - "start_line": 7227, - "end_line": 7231, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "____foo_\n", - "html": "<p>___<em>foo</em></p>\n", - "example": 456, - "start_line": 7234, - "end_line": 7238, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "__foo___\n", - "html": "<p><strong>foo</strong>_</p>\n", - "example": 457, - "start_line": 7241, - "end_line": 7245, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "_foo____\n", - "html": "<p><em>foo</em>___</p>\n", - "example": 458, - "start_line": 7248, - "end_line": 7252, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "**foo**\n", - "html": "<p><strong>foo</strong></p>\n", - "example": 459, - "start_line": 7258, - "end_line": 7262, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "*_foo_*\n", - "html": "<p><em><em>foo</em></em></p>\n", - "example": 460, - "start_line": 7265, - "end_line": 7269, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "__foo__\n", - "html": "<p><strong>foo</strong></p>\n", - "example": 461, - "start_line": 7272, - "end_line": 7276, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "_*foo*_\n", - "html": "<p><em><em>foo</em></em></p>\n", - "example": 462, - "start_line": 7279, - "end_line": 7283, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "****foo****\n", - "html": "<p><strong><strong>foo</strong></strong></p>\n", - "example": 463, - "start_line": 7289, - "end_line": 7293, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "____foo____\n", - "html": "<p><strong><strong>foo</strong></strong></p>\n", - "example": 464, - "start_line": 7296, - "end_line": 7300, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "******foo******\n", - "html": "<p><strong><strong><strong>foo</strong></strong></strong></p>\n", - "example": 465, - "start_line": 7307, - "end_line": 7311, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "***foo***\n", - "html": "<p><em><strong>foo</strong></em></p>\n", - "example": 466, - "start_line": 7316, - "end_line": 7320, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "_____foo_____\n", - "html": "<p><em><strong><strong>foo</strong></strong></em></p>\n", - "example": 467, - "start_line": 7323, - "end_line": 7327, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "*foo _bar* baz_\n", - "html": "<p><em>foo _bar</em> baz_</p>\n", - "example": 468, - "start_line": 7332, - "end_line": 7336, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "*foo __bar *baz bim__ bam*\n", - "html": "<p><em>foo <strong>bar *baz bim</strong> bam</em></p>\n", - "example": 469, - "start_line": 7339, - "end_line": 7343, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "**foo **bar baz**\n", - "html": "<p>**foo <strong>bar baz</strong></p>\n", - "example": 470, - "start_line": 7348, - "end_line": 7352, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "*foo *bar baz*\n", - "html": "<p>*foo <em>bar baz</em></p>\n", - "example": 471, - "start_line": 7355, - "end_line": 7359, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "*[bar*](/url)\n", - "html": "<p>*<a href=\"/url\">bar*</a></p>\n", - "example": 472, - "start_line": 7364, - "end_line": 7368, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "_foo [bar_](/url)\n", - "html": "<p>_foo <a href=\"/url\">bar_</a></p>\n", - "example": 473, - "start_line": 7371, - "end_line": 7375, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "*<img src=\"foo\" title=\"*\"/>\n", - "html": "<p>*<img src=\"foo\" title=\"*\"/></p>\n", - "example": 474, - "start_line": 7378, - "end_line": 7382, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "**<a href=\"**\">\n", - "html": "<p>**<a href=\"**\"></p>\n", - "example": 475, - "start_line": 7385, - "end_line": 7389, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "__<a href=\"__\">\n", - "html": "<p>__<a href=\"__\"></p>\n", - "example": 476, - "start_line": 7392, - "end_line": 7396, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "*a `*`*\n", - "html": "<p><em>a <code>*</code></em></p>\n", - "example": 477, - "start_line": 7399, - "end_line": 7403, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "_a `_`_\n", - "html": "<p><em>a <code>_</code></em></p>\n", - "example": 478, - "start_line": 7406, - "end_line": 7410, - "section": "Emphasis and strong emphasis" - }, - { - "markdown": "**a<http://foo.bar/?q=**>\n", - "html": "<p>**a<a href=\"http://foo.bar/?q=**\">http://foo.bar/?q=**</a></p>\n", - "example": 479, - "start_line": 7413, - "end_line": 7417, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "__a<http://foo.bar/?q=__>\n", - "html": "<p>__a<a href=\"http://foo.bar/?q=__\">http://foo.bar/?q=__</a></p>\n", - "example": 480, - "start_line": 7420, - "end_line": 7424, - "section": "Emphasis and strong emphasis", - "shouldFail": true - }, - { - "markdown": "[link](/uri \"title\")\n", - "html": "<p><a href=\"/uri\" title=\"title\">link</a></p>\n", - "example": 481, - "start_line": 7503, - "end_line": 7507, - "section": "Links" - }, - { - "markdown": "[link](/uri)\n", - "html": "<p><a href=\"/uri\">link</a></p>\n", - "example": 482, - "start_line": 7512, - "end_line": 7516, - "section": "Links" - }, - { - "markdown": "[link]()\n", - "html": "<p><a href=\"\">link</a></p>\n", - "example": 483, - "start_line": 7521, - "end_line": 7525, - "section": "Links" - }, - { - "markdown": "[link](<>)\n", - "html": "<p><a href=\"\">link</a></p>\n", - "example": 484, - "start_line": 7528, - "end_line": 7532, - "section": "Links" - }, - { - "markdown": "[link](/my uri)\n", - "html": "<p>[link](/my uri)</p>\n", - "example": 485, - "start_line": 7537, - "end_line": 7541, - "section": "Links" - }, - { - "markdown": "[link](</my uri>)\n", - "html": "<p><a href=\"/my%20uri\">link</a></p>\n", - "example": 486, - "start_line": 7543, - "end_line": 7547, - "section": "Links", - "shouldFail": true - }, - { - "markdown": "[link](foo\nbar)\n", - "html": "<p>[link](foo\nbar)</p>\n", - "example": 487, - "start_line": 7552, - "end_line": 7558, - "section": "Links" - }, - { - "markdown": "[link](<foo\nbar>)\n", - "html": "<p>[link](<foo\nbar>)</p>\n", - "example": 488, - "start_line": 7560, - "end_line": 7566, - "section": "Links" - }, - { - "markdown": "[a](<b)c>)\n", - "html": "<p><a href=\"b)c\">a</a></p>\n", - "example": 489, - "start_line": 7571, - "end_line": 7575, - "section": "Links", - "shouldFail": true - }, - { - "markdown": "[link](<foo\\>)\n", - "html": "<p>[link](<foo>)</p>\n", - "example": 490, - "start_line": 7579, - "end_line": 7583, - "section": "Links", - "shouldFail": true - }, - { - "markdown": "[a](<b)c\n[a](<b)c>\n[a](<b>c)\n", - "html": "<p>[a](<b)c\n[a](<b)c>\n[a](<b>c)</p>\n", - "example": 491, - "start_line": 7588, - "end_line": 7596, - "section": "Links", - "shouldFail": true - }, - { - "markdown": "[link](\\(foo\\))\n", - "html": "<p><a href=\"(foo)\">link</a></p>\n", - "example": 492, - "start_line": 7600, - "end_line": 7604, - "section": "Links" - }, - { - "markdown": "[link](foo(and(bar)))\n", - "html": "<p><a href=\"foo(and(bar))\">link</a></p>\n", - "example": 493, - "start_line": 7609, - "end_line": 7613, - "section": "Links" - }, - { - "markdown": "[link](foo\\(and\\(bar\\))\n", - "html": "<p><a href=\"foo(and(bar)\">link</a></p>\n", - "example": 494, - "start_line": 7618, - "end_line": 7622, - "section": "Links" - }, - { - "markdown": "[link](<foo(and(bar)>)\n", - "html": "<p><a href=\"foo(and(bar)\">link</a></p>\n", - "example": 495, - "start_line": 7625, - "end_line": 7629, - "section": "Links" - }, - { - "markdown": "[link](foo\\)\\:)\n", - "html": "<p><a href=\"foo):\">link</a></p>\n", - "example": 496, - "start_line": 7635, - "end_line": 7639, - "section": "Links" - }, - { - "markdown": "[link](#fragment)\n\n[link](http://example.com#fragment)\n\n[link](http://example.com?foo=3#frag)\n", - "html": "<p><a href=\"#fragment\">link</a></p>\n<p><a href=\"http://example.com#fragment\">link</a></p>\n<p><a href=\"http://example.com?foo=3#frag\">link</a></p>\n", - "example": 497, - "start_line": 7644, - "end_line": 7654, - "section": "Links" - }, - { - "markdown": "[link](foo\\bar)\n", - "html": "<p><a href=\"foo%5Cbar\">link</a></p>\n", - "example": 498, - "start_line": 7660, - "end_line": 7664, - "section": "Links" - }, - { - "markdown": "[link](foo%20bä)\n", - "html": "<p><a href=\"foo%20b%C3%A4\">link</a></p>\n", - "example": 499, - "start_line": 7676, - "end_line": 7680, - "section": "Links", - "shouldFail": true - }, - { - "markdown": "[link](\"title\")\n", - "html": "<p><a href=\"%22title%22\">link</a></p>\n", - "example": 500, - "start_line": 7687, - "end_line": 7691, - "section": "Links" - }, - { - "markdown": "[link](/url \"title\")\n[link](/url 'title')\n[link](/url (title))\n", - "html": "<p><a href=\"/url\" title=\"title\">link</a>\n<a href=\"/url\" title=\"title\">link</a>\n<a href=\"/url\" title=\"title\">link</a></p>\n", - "example": 501, - "start_line": 7696, - "end_line": 7704, - "section": "Links" - }, - { - "markdown": "[link](/url \"title \\\""\")\n", - "html": "<p><a href=\"/url\" title=\"title ""\">link</a></p>\n", - "example": 502, - "start_line": 7710, - "end_line": 7714, - "section": "Links" - }, - { - "markdown": "[link](/url \"title\")\n", - "html": "<p><a href=\"/url%C2%A0%22title%22\">link</a></p>\n", - "example": 503, - "start_line": 7720, - "end_line": 7724, - "section": "Links", - "shouldFail": true - }, - { - "markdown": "[link](/url \"title \"and\" title\")\n", - "html": "<p>[link](/url "title "and" title")</p>\n", - "example": 504, - "start_line": 7729, - "end_line": 7733, - "section": "Links" - }, - { - "markdown": "[link](/url 'title \"and\" title')\n", - "html": "<p><a href=\"/url\" title=\"title "and" title\">link</a></p>\n", - "example": 505, - "start_line": 7738, - "end_line": 7742, - "section": "Links" - }, - { - "markdown": "[link]( /uri\n \"title\" )\n", - "html": "<p><a href=\"/uri\" title=\"title\">link</a></p>\n", - "example": 506, - "start_line": 7762, - "end_line": 7767, - "section": "Links" - }, - { - "markdown": "[link] (/uri)\n", - "html": "<p>[link] (/uri)</p>\n", - "example": 507, - "start_line": 7773, - "end_line": 7777, - "section": "Links" - }, - { - "markdown": "[link [foo [bar]]](/uri)\n", - "html": "<p><a href=\"/uri\">link [foo [bar]]</a></p>\n", - "example": 508, - "start_line": 7783, - "end_line": 7787, - "section": "Links", - "shouldFail": true - }, - { - "markdown": "[link] bar](/uri)\n", - "html": "<p>[link] bar](/uri)</p>\n", - "example": 509, - "start_line": 7790, - "end_line": 7794, - "section": "Links" - }, - { - "markdown": "[link [bar](/uri)\n", - "html": "<p>[link <a href=\"/uri\">bar</a></p>\n", - "example": 510, - "start_line": 7797, - "end_line": 7801, - "section": "Links" - }, - { - "markdown": "[link \\[bar](/uri)\n", - "html": "<p><a href=\"/uri\">link [bar</a></p>\n", - "example": 511, - "start_line": 7804, - "end_line": 7808, - "section": "Links" - }, - { - "markdown": "[link *foo **bar** `#`*](/uri)\n", - "html": "<p><a href=\"/uri\">link <em>foo <strong>bar</strong> <code>#</code></em></a></p>\n", - "example": 512, - "start_line": 7813, - "end_line": 7817, - "section": "Links" - }, - { - "markdown": "[![moon](moon.jpg)](/uri)\n", - "html": "<p><a href=\"/uri\"><img src=\"moon.jpg\" alt=\"moon\" /></a></p>\n", - "example": 513, - "start_line": 7820, - "end_line": 7824, - "section": "Links" - }, - { - "markdown": "[foo [bar](/uri)](/uri)\n", - "html": "<p>[foo <a href=\"/uri\">bar</a>](/uri)</p>\n", - "example": 514, - "start_line": 7829, - "end_line": 7833, - "section": "Links", - "shouldFail": true - }, - { - "markdown": "[foo *[bar [baz](/uri)](/uri)*](/uri)\n", - "html": "<p>[foo <em>[bar <a href=\"/uri\">baz</a>](/uri)</em>](/uri)</p>\n", - "example": 515, - "start_line": 7836, - "end_line": 7840, - "section": "Links", - "shouldFail": true - }, - { - "markdown": "![[[foo](uri1)](uri2)](uri3)\n", - "html": "<p><img src=\"uri3\" alt=\"[foo](uri2)\" /></p>\n", - "example": 516, - "start_line": 7843, - "end_line": 7847, - "section": "Links", - "shouldFail": true - }, - { - "markdown": "*[foo*](/uri)\n", - "html": "<p>*<a href=\"/uri\">foo*</a></p>\n", - "example": 517, - "start_line": 7853, - "end_line": 7857, - "section": "Links" - }, - { - "markdown": "[foo *bar](baz*)\n", - "html": "<p><a href=\"baz*\">foo *bar</a></p>\n", - "example": 518, - "start_line": 7860, - "end_line": 7864, - "section": "Links" - }, - { - "markdown": "*foo [bar* baz]\n", - "html": "<p><em>foo [bar</em> baz]</p>\n", - "example": 519, - "start_line": 7870, - "end_line": 7874, - "section": "Links" - }, - { - "markdown": "[foo <bar attr=\"](baz)\">\n", - "html": "<p>[foo <bar attr=\"](baz)\"></p>\n", - "example": 520, - "start_line": 7880, - "end_line": 7884, - "section": "Links", - "shouldFail": true - }, - { - "markdown": "[foo`](/uri)`\n", - "html": "<p>[foo<code>](/uri)</code></p>\n", - "example": 521, - "start_line": 7887, - "end_line": 7891, - "section": "Links", - "shouldFail": true - }, - { - "markdown": "[foo<http://example.com/?search=](uri)>\n", - "html": "<p>[foo<a href=\"http://example.com/?search=%5D(uri)\">http://example.com/?search=](uri)</a></p>\n", - "example": 522, - "start_line": 7894, - "end_line": 7898, - "section": "Links", - "shouldFail": true - }, - { - "markdown": "[foo][bar]\n\n[bar]: /url \"title\"\n", - "html": "<p><a href=\"/url\" title=\"title\">foo</a></p>\n", - "example": 523, - "start_line": 7932, - "end_line": 7938, - "section": "Links" - }, - { - "markdown": "[link [foo [bar]]][ref]\n\n[ref]: /uri\n", - "html": "<p><a href=\"/uri\">link [foo [bar]]</a></p>\n", - "example": 524, - "start_line": 7947, - "end_line": 7953, - "section": "Links", - "shouldFail": true - }, - { - "markdown": "[link \\[bar][ref]\n\n[ref]: /uri\n", - "html": "<p><a href=\"/uri\">link [bar</a></p>\n", - "example": 525, - "start_line": 7956, - "end_line": 7962, - "section": "Links" - }, - { - "markdown": "[link *foo **bar** `#`*][ref]\n\n[ref]: /uri\n", - "html": "<p><a href=\"/uri\">link <em>foo <strong>bar</strong> <code>#</code></em></a></p>\n", - "example": 526, - "start_line": 7967, - "end_line": 7973, - "section": "Links" - }, - { - "markdown": "[![moon](moon.jpg)][ref]\n\n[ref]: /uri\n", - "html": "<p><a href=\"/uri\"><img src=\"moon.jpg\" alt=\"moon\" /></a></p>\n", - "example": 527, - "start_line": 7976, - "end_line": 7982, - "section": "Links" - }, - { - "markdown": "[foo [bar](/uri)][ref]\n\n[ref]: /uri\n", - "html": "<p>[foo <a href=\"/uri\">bar</a>]<a href=\"/uri\">ref</a></p>\n", - "example": 528, - "start_line": 7987, - "end_line": 7993, - "section": "Links", - "shouldFail": true - }, - { - "markdown": "[foo *bar [baz][ref]*][ref]\n\n[ref]: /uri\n", - "html": "<p>[foo <em>bar <a href=\"/uri\">baz</a></em>]<a href=\"/uri\">ref</a></p>\n", - "example": 529, - "start_line": 7996, - "end_line": 8002, - "section": "Links", - "shouldFail": true - }, - { - "markdown": "*[foo*][ref]\n\n[ref]: /uri\n", - "html": "<p>*<a href=\"/uri\">foo*</a></p>\n", - "example": 530, - "start_line": 8011, - "end_line": 8017, - "section": "Links" - }, - { - "markdown": "[foo *bar][ref]\n\n[ref]: /uri\n", - "html": "<p><a href=\"/uri\">foo *bar</a></p>\n", - "example": 531, - "start_line": 8020, - "end_line": 8026, - "section": "Links" - }, - { - "markdown": "[foo <bar attr=\"][ref]\">\n\n[ref]: /uri\n", - "html": "<p>[foo <bar attr=\"][ref]\"></p>\n", - "example": 532, - "start_line": 8032, - "end_line": 8038, - "section": "Links", - "shouldFail": true - }, - { - "markdown": "[foo`][ref]`\n\n[ref]: /uri\n", - "html": "<p>[foo<code>][ref]</code></p>\n", - "example": 533, - "start_line": 8041, - "end_line": 8047, - "section": "Links", - "shouldFail": true - }, - { - "markdown": "[foo<http://example.com/?search=][ref]>\n\n[ref]: /uri\n", - "html": "<p>[foo<a href=\"http://example.com/?search=%5D%5Bref%5D\">http://example.com/?search=][ref]</a></p>\n", - "example": 534, - "start_line": 8050, - "end_line": 8056, - "section": "Links", - "shouldFail": true - }, - { - "markdown": "[foo][BaR]\n\n[bar]: /url \"title\"\n", - "html": "<p><a href=\"/url\" title=\"title\">foo</a></p>\n", - "example": 535, - "start_line": 8061, - "end_line": 8067, - "section": "Links" - }, - { - "markdown": "[Толпой][Толпой] is a Russian word.\n\n[ТОЛПОЙ]: /url\n", - "html": "<p><a href=\"/url\">Толпой</a> is a Russian word.</p>\n", - "example": 536, - "start_line": 8072, - "end_line": 8078, - "section": "Links" - }, - { - "markdown": "[Foo\n bar]: /url\n\n[Baz][Foo bar]\n", - "html": "<p><a href=\"/url\">Baz</a></p>\n", - "example": 537, - "start_line": 8084, - "end_line": 8091, - "section": "Links" - }, - { - "markdown": "[foo] [bar]\n\n[bar]: /url \"title\"\n", - "html": "<p>[foo] <a href=\"/url\" title=\"title\">bar</a></p>\n", - "example": 538, - "start_line": 8097, - "end_line": 8103, - "section": "Links" - }, - { - "markdown": "[foo]\n[bar]\n\n[bar]: /url \"title\"\n", - "html": "<p>[foo]\n<a href=\"/url\" title=\"title\">bar</a></p>\n", - "example": 539, - "start_line": 8106, - "end_line": 8114, - "section": "Links" - }, - { - "markdown": "[foo]: /url1\n\n[foo]: /url2\n\n[bar][foo]\n", - "html": "<p><a href=\"/url1\">bar</a></p>\n", - "example": 540, - "start_line": 8147, - "end_line": 8155, - "section": "Links" - }, - { - "markdown": "[bar][foo\\!]\n\n[foo!]: /url\n", - "html": "<p>[bar][foo!]</p>\n", - "example": 541, - "start_line": 8162, - "end_line": 8168, - "section": "Links" - }, - { - "markdown": "[foo][ref[]\n\n[ref[]: /uri\n", - "html": "<p>[foo][ref[]</p>\n<p>[ref[]: /uri</p>\n", - "example": 542, - "start_line": 8174, - "end_line": 8181, - "section": "Links" - }, - { - "markdown": "[foo][ref[bar]]\n\n[ref[bar]]: /uri\n", - "html": "<p>[foo][ref[bar]]</p>\n<p>[ref[bar]]: /uri</p>\n", - "example": 543, - "start_line": 8184, - "end_line": 8191, - "section": "Links" - }, - { - "markdown": "[[[foo]]]\n\n[[[foo]]]: /url\n", - "html": "<p>[[[foo]]]</p>\n<p>[[[foo]]]: /url</p>\n", - "example": 544, - "start_line": 8194, - "end_line": 8201, - "section": "Links" - }, - { - "markdown": "[foo][ref\\[]\n\n[ref\\[]: /uri\n", - "html": "<p><a href=\"/uri\">foo</a></p>\n", - "example": 545, - "start_line": 8204, - "end_line": 8210, - "section": "Links" - }, - { - "markdown": "[bar\\\\]: /uri\n\n[bar\\\\]\n", - "html": "<p><a href=\"/uri\">bar\\</a></p>\n", - "example": 546, - "start_line": 8215, - "end_line": 8221, - "section": "Links" - }, - { - "markdown": "[]\n\n[]: /uri\n", - "html": "<p>[]</p>\n<p>[]: /uri</p>\n", - "example": 547, - "start_line": 8226, - "end_line": 8233, - "section": "Links" - }, - { - "markdown": "[\n ]\n\n[\n ]: /uri\n", - "html": "<p>[\n]</p>\n<p>[\n]: /uri</p>\n", - "example": 548, - "start_line": 8236, - "end_line": 8247, - "section": "Links" - }, - { - "markdown": "[foo][]\n\n[foo]: /url \"title\"\n", - "html": "<p><a href=\"/url\" title=\"title\">foo</a></p>\n", - "example": 549, - "start_line": 8259, - "end_line": 8265, - "section": "Links" - }, - { - "markdown": "[*foo* bar][]\n\n[*foo* bar]: /url \"title\"\n", - "html": "<p><a href=\"/url\" title=\"title\"><em>foo</em> bar</a></p>\n", - "example": 550, - "start_line": 8268, - "end_line": 8274, - "section": "Links" - }, - { - "markdown": "[Foo][]\n\n[foo]: /url \"title\"\n", - "html": "<p><a href=\"/url\" title=\"title\">Foo</a></p>\n", - "example": 551, - "start_line": 8279, - "end_line": 8285, - "section": "Links" - }, - { - "markdown": "[foo] \n[]\n\n[foo]: /url \"title\"\n", - "html": "<p><a href=\"/url\" title=\"title\">foo</a>\n[]</p>\n", - "example": 552, - "start_line": 8292, - "end_line": 8300, - "section": "Links" - }, - { - "markdown": "[foo]\n\n[foo]: /url \"title\"\n", - "html": "<p><a href=\"/url\" title=\"title\">foo</a></p>\n", - "example": 553, - "start_line": 8312, - "end_line": 8318, - "section": "Links" - }, - { - "markdown": "[*foo* bar]\n\n[*foo* bar]: /url \"title\"\n", - "html": "<p><a href=\"/url\" title=\"title\"><em>foo</em> bar</a></p>\n", - "example": 554, - "start_line": 8321, - "end_line": 8327, - "section": "Links" - }, - { - "markdown": "[[*foo* bar]]\n\n[*foo* bar]: /url \"title\"\n", - "html": "<p>[<a href=\"/url\" title=\"title\"><em>foo</em> bar</a>]</p>\n", - "example": 555, - "start_line": 8330, - "end_line": 8336, - "section": "Links" - }, - { - "markdown": "[[bar [foo]\n\n[foo]: /url\n", - "html": "<p>[[bar <a href=\"/url\">foo</a></p>\n", - "example": 556, - "start_line": 8339, - "end_line": 8345, - "section": "Links" - }, - { - "markdown": "[Foo]\n\n[foo]: /url \"title\"\n", - "html": "<p><a href=\"/url\" title=\"title\">Foo</a></p>\n", - "example": 557, - "start_line": 8350, - "end_line": 8356, - "section": "Links" - }, - { - "markdown": "[foo] bar\n\n[foo]: /url\n", - "html": "<p><a href=\"/url\">foo</a> bar</p>\n", - "example": 558, - "start_line": 8361, - "end_line": 8367, - "section": "Links" - }, - { - "markdown": "\\[foo]\n\n[foo]: /url \"title\"\n", - "html": "<p>[foo]</p>\n", - "example": 559, - "start_line": 8373, - "end_line": 8379, - "section": "Links" - }, - { - "markdown": "[foo*]: /url\n\n*[foo*]\n", - "html": "<p>*<a href=\"/url\">foo*</a></p>\n", - "example": 560, - "start_line": 8385, - "end_line": 8391, - "section": "Links" - }, - { - "markdown": "[foo][bar]\n\n[foo]: /url1\n[bar]: /url2\n", - "html": "<p><a href=\"/url2\">foo</a></p>\n", - "example": 561, - "start_line": 8397, - "end_line": 8404, - "section": "Links" - }, - { - "markdown": "[foo][]\n\n[foo]: /url1\n", - "html": "<p><a href=\"/url1\">foo</a></p>\n", - "example": 562, - "start_line": 8406, - "end_line": 8412, - "section": "Links" - }, - { - "markdown": "[foo]()\n\n[foo]: /url1\n", - "html": "<p><a href=\"\">foo</a></p>\n", - "example": 563, - "start_line": 8416, - "end_line": 8422, - "section": "Links" - }, - { - "markdown": "[foo](not a link)\n\n[foo]: /url1\n", - "html": "<p><a href=\"/url1\">foo</a>(not a link)</p>\n", - "example": 564, - "start_line": 8424, - "end_line": 8430, - "section": "Links" - }, - { - "markdown": "[foo][bar][baz]\n\n[baz]: /url\n", - "html": "<p>[foo]<a href=\"/url\">bar</a></p>\n", - "example": 565, - "start_line": 8435, - "end_line": 8441, - "section": "Links" - }, - { - "markdown": "[foo][bar][baz]\n\n[baz]: /url1\n[bar]: /url2\n", - "html": "<p><a href=\"/url2\">foo</a><a href=\"/url1\">baz</a></p>\n", - "example": 566, - "start_line": 8447, - "end_line": 8454, - "section": "Links" - }, - { - "markdown": "[foo][bar][baz]\n\n[baz]: /url1\n[foo]: /url2\n", - "html": "<p>[foo]<a href=\"/url1\">bar</a></p>\n", - "example": 567, - "start_line": 8460, - "end_line": 8467, - "section": "Links" - }, - { - "markdown": "![foo](/url \"title\")\n", - "html": "<p><img src=\"/url\" alt=\"foo\" title=\"title\" /></p>\n", - "example": 568, - "start_line": 8483, - "end_line": 8487, - "section": "Images" - }, - { - "markdown": "![foo *bar*]\n\n[foo *bar*]: train.jpg \"train & tracks\"\n", - "html": "<p><img src=\"train.jpg\" alt=\"foo bar\" title=\"train & tracks\" /></p>\n", - "example": 569, - "start_line": 8490, - "end_line": 8496, - "section": "Images", - "shouldFail": true - }, - { - "markdown": "![foo ![bar](/url)](/url2)\n", - "html": "<p><img src=\"/url2\" alt=\"foo bar\" /></p>\n", - "example": 570, - "start_line": 8499, - "end_line": 8503, - "section": "Images", - "shouldFail": true - }, - { - "markdown": "![foo [bar](/url)](/url2)\n", - "html": "<p><img src=\"/url2\" alt=\"foo bar\" /></p>\n", - "example": 571, - "start_line": 8506, - "end_line": 8510, - "section": "Images", - "shouldFail": true - }, - { - "markdown": "![foo *bar*][]\n\n[foo *bar*]: train.jpg \"train & tracks\"\n", - "html": "<p><img src=\"train.jpg\" alt=\"foo bar\" title=\"train & tracks\" /></p>\n", - "example": 572, - "start_line": 8520, - "end_line": 8526, - "section": "Images", - "shouldFail": true - }, - { - "markdown": "![foo *bar*][foobar]\n\n[FOOBAR]: train.jpg \"train & tracks\"\n", - "html": "<p><img src=\"train.jpg\" alt=\"foo bar\" title=\"train & tracks\" /></p>\n", - "example": 573, - "start_line": 8529, - "end_line": 8535, - "section": "Images", - "shouldFail": true - }, - { - "markdown": "![foo](train.jpg)\n", - "html": "<p><img src=\"train.jpg\" alt=\"foo\" /></p>\n", - "example": 574, - "start_line": 8538, - "end_line": 8542, - "section": "Images" - }, - { - "markdown": "My ![foo bar](/path/to/train.jpg \"title\" )\n", - "html": "<p>My <img src=\"/path/to/train.jpg\" alt=\"foo bar\" title=\"title\" /></p>\n", - "example": 575, - "start_line": 8545, - "end_line": 8549, - "section": "Images" - }, - { - "markdown": "![foo](<url>)\n", - "html": "<p><img src=\"url\" alt=\"foo\" /></p>\n", - "example": 576, - "start_line": 8552, - "end_line": 8556, - "section": "Images" - }, - { - "markdown": "![](/url)\n", - "html": "<p><img src=\"/url\" alt=\"\" /></p>\n", - "example": 577, - "start_line": 8559, - "end_line": 8563, - "section": "Images" - }, - { - "markdown": "![foo][bar]\n\n[bar]: /url\n", - "html": "<p><img src=\"/url\" alt=\"foo\" /></p>\n", - "example": 578, - "start_line": 8568, - "end_line": 8574, - "section": "Images" - }, - { - "markdown": "![foo][bar]\n\n[BAR]: /url\n", - "html": "<p><img src=\"/url\" alt=\"foo\" /></p>\n", - "example": 579, - "start_line": 8577, - "end_line": 8583, - "section": "Images" - }, - { - "markdown": "![foo][]\n\n[foo]: /url \"title\"\n", - "html": "<p><img src=\"/url\" alt=\"foo\" title=\"title\" /></p>\n", - "example": 580, - "start_line": 8588, - "end_line": 8594, - "section": "Images" - }, - { - "markdown": "![*foo* bar][]\n\n[*foo* bar]: /url \"title\"\n", - "html": "<p><img src=\"/url\" alt=\"foo bar\" title=\"title\" /></p>\n", - "example": 581, - "start_line": 8597, - "end_line": 8603, - "section": "Images", - "shouldFail": true - }, - { - "markdown": "![Foo][]\n\n[foo]: /url \"title\"\n", - "html": "<p><img src=\"/url\" alt=\"Foo\" title=\"title\" /></p>\n", - "example": 582, - "start_line": 8608, - "end_line": 8614, - "section": "Images" - }, - { - "markdown": "![foo] \n[]\n\n[foo]: /url \"title\"\n", - "html": "<p><img src=\"/url\" alt=\"foo\" title=\"title\" />\n[]</p>\n", - "example": 583, - "start_line": 8620, - "end_line": 8628, - "section": "Images" - }, - { - "markdown": "![foo]\n\n[foo]: /url \"title\"\n", - "html": "<p><img src=\"/url\" alt=\"foo\" title=\"title\" /></p>\n", - "example": 584, - "start_line": 8633, - "end_line": 8639, - "section": "Images" - }, - { - "markdown": "![*foo* bar]\n\n[*foo* bar]: /url \"title\"\n", - "html": "<p><img src=\"/url\" alt=\"foo bar\" title=\"title\" /></p>\n", - "example": 585, - "start_line": 8642, - "end_line": 8648, - "section": "Images", - "shouldFail": true - }, - { - "markdown": "![[foo]]\n\n[[foo]]: /url \"title\"\n", - "html": "<p>![[foo]]</p>\n<p>[[foo]]: /url "title"</p>\n", - "example": 586, - "start_line": 8653, - "end_line": 8660, - "section": "Images" - }, - { - "markdown": "![Foo]\n\n[foo]: /url \"title\"\n", - "html": "<p><img src=\"/url\" alt=\"Foo\" title=\"title\" /></p>\n", - "example": 587, - "start_line": 8665, - "end_line": 8671, - "section": "Images" - }, - { - "markdown": "!\\[foo]\n\n[foo]: /url \"title\"\n", - "html": "<p>![foo]</p>\n", - "example": 588, - "start_line": 8677, - "end_line": 8683, - "section": "Images" - }, - { - "markdown": "\\![foo]\n\n[foo]: /url \"title\"\n", - "html": "<p>!<a href=\"/url\" title=\"title\">foo</a></p>\n", - "example": 589, - "start_line": 8689, - "end_line": 8695, - "section": "Images" - }, - { - "markdown": "<http://foo.bar.baz>\n", - "html": "<p><a href=\"http://foo.bar.baz\">http://foo.bar.baz</a></p>\n", - "example": 590, - "start_line": 8722, - "end_line": 8726, - "section": "Autolinks" - }, - { - "markdown": "<http://foo.bar.baz/test?q=hello&id=22&boolean>\n", - "html": "<p><a href=\"http://foo.bar.baz/test?q=hello&id=22&boolean\">http://foo.bar.baz/test?q=hello&id=22&boolean</a></p>\n", - "example": 591, - "start_line": 8729, - "end_line": 8733, - "section": "Autolinks" - }, - { - "markdown": "<irc://foo.bar:2233/baz>\n", - "html": "<p><a href=\"irc://foo.bar:2233/baz\">irc://foo.bar:2233/baz</a></p>\n", - "example": 592, - "start_line": 8736, - "end_line": 8740, - "section": "Autolinks" - }, - { - "markdown": "<MAILTO:FOO@BAR.BAZ>\n", - "html": "<p><a href=\"MAILTO:FOO@BAR.BAZ\">MAILTO:FOO@BAR.BAZ</a></p>\n", - "example": 593, - "start_line": 8745, - "end_line": 8749, - "section": "Autolinks" - }, - { - "markdown": "<a+b+c:d>\n", - "html": "<p><a href=\"a+b+c:d\">a+b+c:d</a></p>\n", - "example": 594, - "start_line": 8757, - "end_line": 8761, - "section": "Autolinks" - }, - { - "markdown": "<made-up-scheme://foo,bar>\n", - "html": "<p><a href=\"made-up-scheme://foo,bar\">made-up-scheme://foo,bar</a></p>\n", - "example": 595, - "start_line": 8764, - "end_line": 8768, - "section": "Autolinks" - }, - { - "markdown": "<http://../>\n", - "html": "<p><a href=\"http://../\">http://../</a></p>\n", - "example": 596, - "start_line": 8771, - "end_line": 8775, - "section": "Autolinks" - }, - { - "markdown": "<localhost:5001/foo>\n", - "html": "<p><a href=\"localhost:5001/foo\">localhost:5001/foo</a></p>\n", - "example": 597, - "start_line": 8778, - "end_line": 8782, - "section": "Autolinks" - }, - { - "markdown": "<http://foo.bar/baz bim>\n", - "html": "<p><http://foo.bar/baz bim></p>\n", - "example": 598, - "start_line": 8787, - "end_line": 8791, - "section": "Autolinks", - "shouldFail": true - }, - { - "markdown": "<http://example.com/\\[\\>\n", - "html": "<p><a href=\"http://example.com/%5C%5B%5C\">http://example.com/\\[\\</a></p>\n", - "example": 599, - "start_line": 8796, - "end_line": 8800, - "section": "Autolinks" - }, - { - "markdown": "<foo@bar.example.com>\n", - "html": "<p><a href=\"mailto:foo@bar.example.com\">foo@bar.example.com</a></p>\n", - "example": 600, - "start_line": 8818, - "end_line": 8822, - "section": "Autolinks" - }, - { - "markdown": "<foo+special@Bar.baz-bar0.com>\n", - "html": "<p><a href=\"mailto:foo+special@Bar.baz-bar0.com\">foo+special@Bar.baz-bar0.com</a></p>\n", - "example": 601, - "start_line": 8825, - "end_line": 8829, - "section": "Autolinks" - }, - { - "markdown": "<foo\\+@bar.example.com>\n", - "html": "<p><foo+@bar.example.com></p>\n", - "example": 602, - "start_line": 8834, - "end_line": 8838, - "section": "Autolinks" - }, - { - "markdown": "<>\n", - "html": "<p><></p>\n", - "example": 603, - "start_line": 8843, - "end_line": 8847, - "section": "Autolinks" - }, - { - "markdown": "< http://foo.bar >\n", - "html": "<p>< http://foo.bar ></p>\n", - "example": 604, - "start_line": 8850, - "end_line": 8854, - "section": "Autolinks", - "shouldFail": true - }, - { - "markdown": "<m:abc>\n", - "html": "<p><m:abc></p>\n", - "example": 605, - "start_line": 8857, - "end_line": 8861, - "section": "Autolinks" - }, - { - "markdown": "<foo.bar.baz>\n", - "html": "<p><foo.bar.baz></p>\n", - "example": 606, - "start_line": 8864, - "end_line": 8868, - "section": "Autolinks" - }, - { - "markdown": "http://example.com\n", - "html": "<p>http://example.com</p>\n", - "example": 607, - "start_line": 8871, - "end_line": 8875, - "section": "Autolinks", - "shouldFail": true - }, - { - "markdown": "foo@bar.example.com\n", - "html": "<p>foo@bar.example.com</p>\n", - "example": 608, - "start_line": 8878, - "end_line": 8882, - "section": "Autolinks", - "shouldFail": true - }, - { - "markdown": "<a><bab><c2c>\n", - "html": "<p><a><bab><c2c></p>\n", - "example": 609, - "start_line": 8960, - "end_line": 8964, - "section": "Raw HTML" - }, - { - "markdown": "<a/><b2/>\n", - "html": "<p><a/><b2/></p>\n", - "example": 610, - "start_line": 8969, - "end_line": 8973, - "section": "Raw HTML" - }, - { - "markdown": "<a /><b2\ndata=\"foo\" >\n", - "html": "<p><a /><b2\ndata=\"foo\" ></p>\n", - "example": 611, - "start_line": 8978, - "end_line": 8984, - "section": "Raw HTML" - }, - { - "markdown": "<a foo=\"bar\" bam = 'baz <em>\"</em>'\n_boolean zoop:33=zoop:33 />\n", - "html": "<p><a foo=\"bar\" bam = 'baz <em>\"</em>'\n_boolean zoop:33=zoop:33 /></p>\n", - "example": 612, - "start_line": 8989, - "end_line": 8995, - "section": "Raw HTML" - }, - { - "markdown": "Foo <responsive-image src=\"foo.jpg\" />\n", - "html": "<p>Foo <responsive-image src=\"foo.jpg\" /></p>\n", - "example": 613, - "start_line": 9000, - "end_line": 9004, - "section": "Raw HTML" - }, - { - "markdown": "<33> <__>\n", - "html": "<p><33> <__></p>\n", - "example": 614, - "start_line": 9009, - "end_line": 9013, - "section": "Raw HTML" - }, - { - "markdown": "<a h*#ref=\"hi\">\n", - "html": "<p><a h*#ref="hi"></p>\n", - "example": 615, - "start_line": 9018, - "end_line": 9022, - "section": "Raw HTML" - }, - { - "markdown": "<a href=\"hi'> <a href=hi'>\n", - "html": "<p><a href="hi'> <a href=hi'></p>\n", - "example": 616, - "start_line": 9027, - "end_line": 9031, - "section": "Raw HTML" - }, - { - "markdown": "< a><\nfoo><bar/ >\n<foo bar=baz\nbim!bop />\n", - "html": "<p>< a><\nfoo><bar/ >\n<foo bar=baz\nbim!bop /></p>\n", - "example": 617, - "start_line": 9036, - "end_line": 9046, - "section": "Raw HTML" - }, - { - "markdown": "<a href='bar'title=title>\n", - "html": "<p><a href='bar'title=title></p>\n", - "example": 618, - "start_line": 9051, - "end_line": 9055, - "section": "Raw HTML" - }, - { - "markdown": "</a></foo >\n", - "html": "<p></a></foo ></p>\n", - "example": 619, - "start_line": 9060, - "end_line": 9064, - "section": "Raw HTML" - }, - { - "markdown": "</a href=\"foo\">\n", - "html": "<p></a href="foo"></p>\n", - "example": 620, - "start_line": 9069, - "end_line": 9073, - "section": "Raw HTML" - }, - { - "markdown": "foo <!-- this is a\ncomment - with hyphen -->\n", - "html": "<p>foo <!-- this is a\ncomment - with hyphen --></p>\n", - "example": 621, - "start_line": 9078, - "end_line": 9084, - "section": "Raw HTML" - }, - { - "markdown": "foo <!-- not a comment -- two hyphens -->\n", - "html": "<p>foo <!-- not a comment -- two hyphens --></p>\n", - "example": 622, - "start_line": 9087, - "end_line": 9091, - "section": "Raw HTML", - "shouldFail": true - }, - { - "markdown": "foo <!--> foo -->\n\nfoo <!-- foo--->\n", - "html": "<p>foo <!--> foo --></p>\n<p>foo <!-- foo---></p>\n", - "example": 623, - "start_line": 9096, - "end_line": 9103, - "section": "Raw HTML", - "shouldFail": true - }, - { - "markdown": "foo <?php echo $a; ?>\n", - "html": "<p>foo <?php echo $a; ?></p>\n", - "example": 624, - "start_line": 9108, - "end_line": 9112, - "section": "Raw HTML" - }, - { - "markdown": "foo <!ELEMENT br EMPTY>\n", - "html": "<p>foo <!ELEMENT br EMPTY></p>\n", - "example": 625, - "start_line": 9117, - "end_line": 9121, - "section": "Raw HTML" - }, - { - "markdown": "foo <![CDATA[>&<]]>\n", - "html": "<p>foo <![CDATA[>&<]]></p>\n", - "example": 626, - "start_line": 9126, - "end_line": 9130, - "section": "Raw HTML" - }, - { - "markdown": "foo <a href=\"ö\">\n", - "html": "<p>foo <a href=\"ö\"></p>\n", - "example": 627, - "start_line": 9136, - "end_line": 9140, - "section": "Raw HTML" - }, - { - "markdown": "foo <a href=\"\\*\">\n", - "html": "<p>foo <a href=\"\\*\"></p>\n", - "example": 628, - "start_line": 9145, - "end_line": 9149, - "section": "Raw HTML" - }, - { - "markdown": "<a href=\"\\\"\">\n", - "html": "<p><a href="""></p>\n", - "example": 629, - "start_line": 9152, - "end_line": 9156, - "section": "Raw HTML" - }, - { - "markdown": "foo \nbaz\n", - "html": "<p>foo<br />\nbaz</p>\n", - "example": 630, - "start_line": 9166, - "end_line": 9172, - "section": "Hard line breaks" - }, - { - "markdown": "foo\\\nbaz\n", - "html": "<p>foo<br />\nbaz</p>\n", - "example": 631, - "start_line": 9178, - "end_line": 9184, - "section": "Hard line breaks" - }, - { - "markdown": "foo \nbaz\n", - "html": "<p>foo<br />\nbaz</p>\n", - "example": 632, - "start_line": 9189, - "end_line": 9195, - "section": "Hard line breaks" - }, - { - "markdown": "foo \n bar\n", - "html": "<p>foo<br />\nbar</p>\n", - "example": 633, - "start_line": 9200, - "end_line": 9206, - "section": "Hard line breaks" - }, - { - "markdown": "foo\\\n bar\n", - "html": "<p>foo<br />\nbar</p>\n", - "example": 634, - "start_line": 9209, - "end_line": 9215, - "section": "Hard line breaks" - }, - { - "markdown": "*foo \nbar*\n", - "html": "<p><em>foo<br />\nbar</em></p>\n", - "example": 635, - "start_line": 9221, - "end_line": 9227, - "section": "Hard line breaks" - }, - { - "markdown": "*foo\\\nbar*\n", - "html": "<p><em>foo<br />\nbar</em></p>\n", - "example": 636, - "start_line": 9230, - "end_line": 9236, - "section": "Hard line breaks" - }, - { - "markdown": "`code \nspan`\n", - "html": "<p><code>code span</code></p>\n", - "example": 637, - "start_line": 9241, - "end_line": 9246, - "section": "Hard line breaks" - }, - { - "markdown": "`code\\\nspan`\n", - "html": "<p><code>code\\ span</code></p>\n", - "example": 638, - "start_line": 9249, - "end_line": 9254, - "section": "Hard line breaks" - }, - { - "markdown": "<a href=\"foo \nbar\">\n", - "html": "<p><a href=\"foo \nbar\"></p>\n", - "example": 639, - "start_line": 9259, - "end_line": 9265, - "section": "Hard line breaks" - }, - { - "markdown": "<a href=\"foo\\\nbar\">\n", - "html": "<p><a href=\"foo\\\nbar\"></p>\n", - "example": 640, - "start_line": 9268, - "end_line": 9274, - "section": "Hard line breaks" - }, - { - "markdown": "foo\\\n", - "html": "<p>foo\\</p>\n", - "example": 641, - "start_line": 9281, - "end_line": 9285, - "section": "Hard line breaks" - }, - { - "markdown": "foo \n", - "html": "<p>foo</p>\n", - "example": 642, - "start_line": 9288, - "end_line": 9292, - "section": "Hard line breaks" - }, - { - "markdown": "### foo\\\n", - "html": "<h3>foo\\</h3>\n", - "example": 643, - "start_line": 9295, - "end_line": 9299, - "section": "Hard line breaks" - }, - { - "markdown": "### foo \n", - "html": "<h3>foo</h3>\n", - "example": 644, - "start_line": 9302, - "end_line": 9306, - "section": "Hard line breaks" - }, - { - "markdown": "foo\nbaz\n", - "html": "<p>foo\nbaz</p>\n", - "example": 645, - "start_line": 9317, - "end_line": 9323, - "section": "Soft line breaks" - }, - { - "markdown": "foo \n baz\n", - "html": "<p>foo\nbaz</p>\n", - "example": 646, - "start_line": 9329, - "end_line": 9335, - "section": "Soft line breaks" - }, - { - "markdown": "hello $.;'there\n", - "html": "<p>hello $.;'there</p>\n", - "example": 647, - "start_line": 9349, - "end_line": 9353, - "section": "Textual content" - }, - { - "markdown": "Foo χρῆν\n", - "html": "<p>Foo χρῆν</p>\n", - "example": 648, - "start_line": 9356, - "end_line": 9360, - "section": "Textual content" - }, - { - "markdown": "Multiple spaces\n", - "html": "<p>Multiple spaces</p>\n", - "example": 649, - "start_line": 9365, - "end_line": 9369, - "section": "Textual content" - } -] diff --git a/packages/markdown/marked/test/specs/commonmark/getSpecs.js b/packages/markdown/marked/test/specs/commonmark/getSpecs.js deleted file mode 100644 index f22e00c0..00000000 --- a/packages/markdown/marked/test/specs/commonmark/getSpecs.js +++ /dev/null @@ -1,24 +0,0 @@ -const fetch = require('node-fetch'); -const marked = require('../../../'); -const htmlDiffer = require('../../helpers/html-differ.js'); -const fs = require('fs'); - -fetch('https://raw.githubusercontent.com/commonmark/commonmark.js/master/package.json') - .then(res => res.json()) - .then(pkg => pkg.version.replace(/^(\d+\.\d+).*$/, '$1')) - .then(version => - fetch(`https://spec.commonmark.org/${version}/spec.json`) - .then(res => res.json()) - .then(specs => { - specs.forEach(spec => { - const html = marked(spec.markdown, {headerIds: false}); - if (!htmlDiffer.isEqual(html, spec.html)) { - spec.shouldFail = true; - } - }); - fs.writeFileSync(`commonmark.${version}.json`, JSON.stringify(specs, null, 2) + '\n'); - }) - ) - .catch((err) => { - console.error(err); - }); diff --git a/packages/markdown/marked/test/specs/gfm/getSpecs.js b/packages/markdown/marked/test/specs/gfm/getSpecs.js deleted file mode 100644 index 2746bdbb..00000000 --- a/packages/markdown/marked/test/specs/gfm/getSpecs.js +++ /dev/null @@ -1,44 +0,0 @@ -const fetch = require('node-fetch'); -const cheerio = require('cheerio'); -const marked = require('../../../'); -const htmlDiffer = require('../../helpers/html-differ.js'); -const fs = require('fs'); - -fetch('https://github.github.com/gfm/') - .then(res => res.text()) - .then(html => cheerio.load(html)) - .then($ => { - const version = $('.version').text().match(/\d+\.\d+/)[0]; - if (!version) { - throw new Error('No version found'); - } - const specs = []; - $('.extension').each((i, ext) => { - const section = $('.definition', ext).text().trim().replace(/^\d+\.\d+(.*?) \(extension\)[\s\S]*$/, '$1'); - $('.example', ext).each((j, exa) => { - const example = +$(exa).attr('id').replace(/\D/g, ''); - const markdown = $('.language-markdown', exa).text().trim(); - const html = $('.language-html', exa).text().trim(); - specs.push({ - section, - html, - markdown, - example - }); - }); - }); - - return [version, specs]; - }) - .then(([version, specs]) => { - specs.forEach(spec => { - const html = marked(spec.markdown, {gfm: true}); - if (!htmlDiffer.isEqual(html, spec.html)) { - spec.shouldFail = true; - } - }); - fs.writeFileSync(`gfm.${version}.json`, JSON.stringify(specs, null, 2) + '\n'); - }) - .catch((err) => { - console.error(err); - }); diff --git a/packages/markdown/marked/test/specs/gfm/gfm.0.29.json b/packages/markdown/marked/test/specs/gfm/gfm.0.29.json deleted file mode 100644 index 7d1d43e4..00000000 --- a/packages/markdown/marked/test/specs/gfm/gfm.0.29.json +++ /dev/null @@ -1,147 +0,0 @@ -[ - { - "section": "Tables", - "html": "<table>\n<thead>\n<tr>\n<th>foo</th>\n<th>bar</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>baz</td>\n<td>bim</td>\n</tr>\n</tbody>\n</table>", - "markdown": "| foo | bar |\n| --- | --- |\n| baz | bim |", - "example": 198 - }, - { - "section": "Tables", - "html": "<table>\n<thead>\n<tr>\n<th align=\"center\">abc</th>\n<th align=\"right\">defghi</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td align=\"center\">bar</td>\n<td align=\"right\">baz</td>\n</tr>\n</tbody>\n</table>", - "markdown": "| abc | defghi |\n:-: | -----------:\nbar | baz", - "example": 199 - }, - { - "section": "Tables", - "html": "<table>\n<thead>\n<tr>\n<th>f|oo</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>b <code>|</code> az</td>\n</tr>\n<tr>\n<td>b <strong>|</strong> im</td>\n</tr>\n</tbody>\n</table>", - "markdown": "| f\\|oo |\n| ------ |\n| b `\\|` az |\n| b **\\|** im |", - "example": 200 - }, - { - "section": "Tables", - "html": "<table>\n<thead>\n<tr>\n<th>abc</th>\n<th>def</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>bar</td>\n<td>baz</td>\n</tr>\n</tbody>\n</table>\n<blockquote>\n<p>bar</p>\n</blockquote>", - "markdown": "| abc | def |\n| --- | --- |\n| bar | baz |\n> bar", - "example": 201 - }, - { - "section": "Tables", - "html": "<table>\n<thead>\n<tr>\n<th>abc</th>\n<th>def</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>bar</td>\n<td>baz</td>\n</tr>\n<tr>\n<td>bar</td>\n<td></td>\n</tr>\n</tbody>\n</table>\n<p>bar</p>", - "markdown": "| abc | def |\n| --- | --- |\n| bar | baz |\nbar\n\nbar", - "example": 202 - }, - { - "section": "Tables", - "html": "<p>| abc | def |\n| --- |\n| bar |</p>", - "markdown": "| abc | def |\n| --- |\n| bar |", - "example": 203 - }, - { - "section": "Tables", - "html": "<table>\n<thead>\n<tr>\n<th>abc</th>\n<th>def</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>bar</td>\n<td></td>\n</tr>\n<tr>\n<td>bar</td>\n<td>baz</td>\n</tr>\n</tbody>\n</table>", - "markdown": "| abc | def |\n| --- | --- |\n| bar |\n| bar | baz | boo |", - "example": 204 - }, - { - "section": "Tables", - "html": "<table>\n<thead>\n<tr>\n<th>abc</th>\n<th>def</th>\n</tr>\n</thead>\n</table>", - "markdown": "| abc | def |\n| --- | --- |", - "example": 205 - }, - { - "section": "Task list items", - "html": "<ul>\n<li><input disabled=\"\" type=\"checkbox\"> foo</li>\n<li><input checked=\"\" disabled=\"\" type=\"checkbox\"> bar</li>\n</ul>", - "markdown": "- [ ] foo\n- [x] bar", - "example": 279 - }, - { - "section": "Task list items", - "html": "<ul>\n<li><input checked=\"\" disabled=\"\" type=\"checkbox\"> foo\n<ul>\n<li><input disabled=\"\" type=\"checkbox\"> bar</li>\n<li><input checked=\"\" disabled=\"\" type=\"checkbox\"> baz</li>\n</ul>\n</li>\n<li><input disabled=\"\" type=\"checkbox\"> bim</li>\n</ul>", - "markdown": "- [x] foo\n - [ ] bar\n - [x] baz\n- [ ] bim", - "example": 280 - }, - { - "section": "Strikethrough", - "html": "<p><del>Hi</del> Hello, world!</p>", - "markdown": "~~Hi~~ Hello, world!", - "example": 491 - }, - { - "section": "Strikethrough", - "html": "<p>This ~~has a</p>\n<p>new paragraph~~.</p>", - "markdown": "This ~~has a\n\nnew paragraph~~.", - "example": 492 - }, - { - "section": "Autolinks", - "html": "<p><a href=\"http://www.commonmark.org\">www.commonmark.org</a></p>", - "markdown": "www.commonmark.org", - "example": 621 - }, - { - "section": "Autolinks", - "html": "<p>Visit <a href=\"http://www.commonmark.org/help\">www.commonmark.org/help</a> for more information.</p>", - "markdown": "Visit www.commonmark.org/help for more information.", - "example": 622 - }, - { - "section": "Autolinks", - "html": "<p>Visit <a href=\"http://www.commonmark.org\">www.commonmark.org</a>.</p>\n<p>Visit <a href=\"http://www.commonmark.org/a.b\">www.commonmark.org/a.b</a>.</p>", - "markdown": "Visit www.commonmark.org.\n\nVisit www.commonmark.org/a.b.", - "example": 623 - }, - { - "section": "Autolinks", - "html": "<p><a href=\"http://www.google.com/search?q=Markup+(business)\">www.google.com/search?q=Markup+(business)</a></p>\n<p>(<a href=\"http://www.google.com/search?q=Markup+(business)\">www.google.com/search?q=Markup+(business)</a>)</p>", - "markdown": "www.google.com/search?q=Markup+(business)\n\n(www.google.com/search?q=Markup+(business))", - "example": 624 - }, - { - "section": "Autolinks", - "html": "<p><a href=\"http://www.google.com/search?q=(business))+ok\">www.google.com/search?q=(business))+ok</a></p>", - "markdown": "www.google.com/search?q=(business))+ok", - "example": 625 - }, - { - "section": "Autolinks", - "html": "<p><a href=\"http://www.google.com/search?q=commonmark&hl=en\">www.google.com/search?q=commonmark&hl=en</a></p>\n<p><a href=\"http://www.google.com/search?q=commonmark\">www.google.com/search?q=commonmark</a>&hl;</p>", - "markdown": "www.google.com/search?q=commonmark&hl=en\n\nwww.google.com/search?q=commonmark&hl;", - "example": 626 - }, - { - "section": "Autolinks", - "html": "<p><a href=\"http://www.commonmark.org/he\">www.commonmark.org/he</a><lp</p>", - "markdown": "www.commonmark.org/he<lp", - "example": 627 - }, - { - "section": "Autolinks", - "html": "<p><a href=\"http://commonmark.org\">http://commonmark.org</a></p>\n<p>(Visit <a href=\"https://encrypted.google.com/search?q=Markup+(business)\">https://encrypted.google.com/search?q=Markup+(business)</a>)</p>\n<p>Anonymous FTP is available at <a href=\"ftp://foo.bar.baz\">ftp://foo.bar.baz</a>.</p>", - "markdown": "http://commonmark.org\n\n(Visit https://encrypted.google.com/search?q=Markup+(business))\n\nAnonymous FTP is available at ftp://foo.bar.baz.", - "example": 628 - }, - { - "section": "Autolinks", - "html": "<p><a href=\"mailto:foo@bar.baz\">foo@bar.baz</a></p>", - "markdown": "foo@bar.baz", - "example": 629 - }, - { - "section": "Autolinks", - "html": "<p>hello@mail+xyz.example isn't valid, but <a href=\"mailto:hello+xyz@mail.example\">hello+xyz@mail.example</a> is.</p>", - "markdown": "hello@mail+xyz.example isn't valid, but hello+xyz@mail.example is.", - "example": 630 - }, - { - "section": "Autolinks", - "html": "<p><a href=\"mailto:a.b-c_d@a.b\">a.b-c_d@a.b</a></p>\n<p><a href=\"mailto:a.b-c_d@a.b\">a.b-c_d@a.b</a>.</p>\n<p>a.b-c_d@a.b-</p>\n<p>a.b-c_d@a.b_</p>", - "markdown": "a.b-c_d@a.b\n\na.b-c_d@a.b.\n\na.b-c_d@a.b-\n\na.b-c_d@a.b_", - "example": 631 - }, - { - "section": "Disallowed Raw HTML", - "html": "<p><strong> <title> <style> <em></p>\n<blockquote>\n <xmp> is disallowed. <XMP> is also disallowed.\n</blockquote>", - "markdown": "<strong> <title> <style> <em>\n\n<blockquote>\n <xmp> is disallowed. <XMP> is also disallowed.\n</blockquote>", - "example": 653, - "shouldFail": true - } -] diff --git a/packages/markdown/marked/test/specs/original/specs-spec.js b/packages/markdown/marked/test/specs/original/specs-spec.js deleted file mode 100644 index 82d300a5..00000000 --- a/packages/markdown/marked/test/specs/original/specs-spec.js +++ /dev/null @@ -1,12 +0,0 @@ -var specTests = require('../../'); - -it('should run spec tests', () => { - // hide output - spyOn(console, 'log'); - if (!specTests(['', '', '--stop'])) { - // if tests fail rerun tests and show output - console.log.and.callThrough(); - specTests([]); - fail(); - } -}); diff --git a/packages/markdown/marked/test/specs/redos-spec.js b/packages/markdown/marked/test/specs/redos-spec.js deleted file mode 100644 index 1f94a42e..00000000 --- a/packages/markdown/marked/test/specs/redos-spec.js +++ /dev/null @@ -1,24 +0,0 @@ -const path = require('path'); -const fs = require('fs'); - -const redosDir = path.resolve(__dirname, '../redos'); - -describe('ReDOS tests', () => { - const files = fs.readdirSync(redosDir); - files.forEach(file => { - if (!file.match(/\.js$/)) { - return; - } - - it(file, () => { - const spec = require(path.resolve(redosDir, file)); - const before = process.hrtime(); - expect(spec).toRender(spec.html); - const elapsed = process.hrtime(before); - if (elapsed[0] > 0) { - const s = (elapsed[0] + elapsed[1] * 1e-9).toFixed(3); - fail(`took too long: ${s}s`); - } - }); - }); -}); diff --git a/packages/markdown/marked/test/specs/run-spec.js b/packages/markdown/marked/test/specs/run-spec.js deleted file mode 100644 index 3af0aa45..00000000 --- a/packages/markdown/marked/test/specs/run-spec.js +++ /dev/null @@ -1,52 +0,0 @@ -function runSpecs(title, file, options) { - const json = require(file); - let longestName = 0; - let maxSpecs = 0; - const specs = json.reduce((obj, spec) => { - if (!obj[spec.section]) { - longestName = Math.max(spec.section.length, longestName); - obj[spec.section] = { - specs: [], - pass: 0, - total: 0 - }; - } - obj[spec.section].total++; - maxSpecs = Math.max(obj[spec.section].total, maxSpecs); - if (!spec.shouldFail) { - obj[spec.section].pass++; - } - obj[spec.section].specs.push(spec); - return obj; - }, {}); - - describe(title, () => { - const maxSpecsLen = ('' + maxSpecs).length; - const spaces = maxSpecsLen * 2 + longestName + 11; - console.log('-'.padEnd(spaces + 4, '-')); - console.log(`| ${title.padStart(Math.ceil((spaces + title.length) / 2)).padEnd(spaces)} |`); - console.log(`| ${' '.padEnd(spaces)} |`); - Object.keys(specs).forEach(section => { - console.log(`| ${section.padEnd(longestName)} ${('' + specs[section].pass).padStart(maxSpecsLen)} of ${('' + specs[section].total).padStart(maxSpecsLen)} ${(100 * specs[section].pass / specs[section].total).toFixed().padStart(4)}% |`); - describe(section, () => { - specs[section].specs.forEach((spec) => { - if (options) { - spec.options = Object.assign({}, options, (spec.options || {})); - } - (spec.only ? fit : it)('should ' + (spec.shouldFail ? 'fail' : 'pass') + ' example ' + spec.example, () => { - if (spec.shouldFail) { - expect(spec).not.toRender(spec.html); - } else { - expect(spec).toRender(spec.html); - } - }); - }); - }); - }); - console.log('-'.padEnd(spaces + 4, '-')); - console.log(); - }); -}; - -runSpecs('GFM 0.29', './gfm/gfm.0.29.json', {gfm: true}); -runSpecs('CommonMark 0.29', './commonmark/commonmark.0.29.json', {headerIds: false}); diff --git a/packages/markdown/marked/test/unit/marked-spec.js b/packages/markdown/marked/test/unit/marked-spec.js deleted file mode 100644 index 994c5dc8..00000000 --- a/packages/markdown/marked/test/unit/marked-spec.js +++ /dev/null @@ -1,73 +0,0 @@ -var marked = require('../../lib/marked.js'); - -describe('Test heading ID functionality', () => { - it('should add id attribute by default', () => { - var renderer = new marked.Renderer(); - var slugger = new marked.Slugger(); - var header = renderer.heading('test', 1, 'test', slugger); - expect(header).toBe('<h1 id="test">test</h1>\n'); - }); - - it('should NOT add id attribute when options set false', () => { - var renderer = new marked.Renderer({ headerIds: false }); - var header = renderer.heading('test', 1, 'test'); - expect(header).toBe('<h1>test</h1>\n'); - }); -}); - -describe('Test slugger functionality', () => { - it('should use lowercase slug', () => { - var slugger = new marked.Slugger(); - expect(slugger.slug('Test')).toBe('test'); - }); - - it('should be unique to avoid collisions 1280', () => { - var slugger = new marked.Slugger(); - expect(slugger.slug('test')).toBe('test'); - expect(slugger.slug('test')).toBe('test-1'); - expect(slugger.slug('test')).toBe('test-2'); - }); - - it('should be unique when slug ends with number', () => { - var slugger = new marked.Slugger(); - expect(slugger.slug('test 1')).toBe('test-1'); - expect(slugger.slug('test')).toBe('test'); - expect(slugger.slug('test')).toBe('test-2'); - }); - - it('should be unique when slug ends with hyphen number', () => { - var slugger = new marked.Slugger(); - expect(slugger.slug('foo')).toBe('foo'); - expect(slugger.slug('foo')).toBe('foo-1'); - expect(slugger.slug('foo 1')).toBe('foo-1-1'); - expect(slugger.slug('foo-1')).toBe('foo-1-2'); - expect(slugger.slug('foo')).toBe('foo-2'); - }); - - it('should allow non-latin chars', () => { - var slugger = new marked.Slugger(); - expect(slugger.slug('привет')).toBe('привет'); - }); - - it('should remove ampersands 857', () => { - var slugger = new marked.Slugger(); - expect(slugger.slug('This & That Section')).toBe('this--that-section'); - }); - - it('should remove periods', () => { - var slugger = new marked.Slugger(); - expect(slugger.slug('file.txt')).toBe('filetxt'); - }); -}); - -describe('Test paragraph token type', () => { - it('should use the "paragraph" type on top level', () => { - const md = 'A Paragraph.\n\n> A blockquote\n\n- list item\n'; - - const tokens = marked.lexer(md); - - expect(tokens[0].type).toBe('paragraph'); - expect(tokens[3].type).toBe('paragraph'); - expect(tokens[7].type).toBe('text'); - }); -}); diff --git a/packages/wekan-oidc/oidc_server.js b/packages/wekan-oidc/oidc_server.js index f6e23a15..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 = {}; @@ -72,7 +73,6 @@ var getToken = function (query) { client_secret: OAuth.openSecret(config.secret), redirect_uri: OAuth._redirectUri('oidc', config), grant_type: 'authorization_code', - scope: requestPermissions, state: query.state } } diff --git a/packages/wekan-scrollbar/jquery.mCustomScrollbar.js b/packages/wekan-scrollbar/jquery.mCustomScrollbar.js index 056e4284..e7d49997 100644 --- a/packages/wekan-scrollbar/jquery.mCustomScrollbar.js +++ b/packages/wekan-scrollbar/jquery.mCustomScrollbar.js @@ -109,9 +109,9 @@ and dependencies (minified). scrollbarPosition:"inside", /* scrolling inertia - values: integer (milliseconds) + values: integer (milliseconds). default: 0 */ - scrollInertia:0, + scrollInertia:Meteor.settings.public.SCROLLINERTIA, /* auto-adjust scrollbar dragger length values: boolean @@ -161,7 +161,7 @@ and dependencies (minified). scrolling amount in pixels values: "auto", integer */ - scrollAmount:"auto", + scrollAmount:Meteor.settings.public.SCROLLAMOUNT, /* mouse-wheel scrolling axis the default scrolling direction when both vertical and horizontal scrollbars are present diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png Binary files differnew file mode 100644 index 00000000..7d29824e --- /dev/null +++ b/public/android-chrome-192x192.png diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png Binary files differnew file mode 100644 index 00000000..7ecf363a --- /dev/null +++ b/public/android-chrome-512x512.png diff --git a/public/api/wekan.html b/public/api/wekan.html index 80c776e8..cb4772e4 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,547 +1477,552 @@ 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.77">Wekan REST API v3.77</a> - + <a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v4.01">Wekan REST API v4.01</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.77</h1> + <h1 id="wekan-rest-api">Wekan REST API v4.01</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> @@ -2155,7 +2160,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}) @@ -2430,7 +2435,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}) @@ -2713,7 +2718,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}) @@ -2919,7 +2924,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}) @@ -3214,7 +3219,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}) @@ -3293,6 +3298,8 @@ System.out.println(response.toString()); <span class="hljs-attr">"allowsAttachments"</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">"allowsChecklists"</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">"allowsComments"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsDescriptionTitle"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsDescriptionText"</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">"allowsActivities"</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">"allowsLabels"</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">"allowsAssignee"</span>: <span class="hljs-literal">true</span>, @@ -3309,7 +3316,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> @@ -3436,7 +3444,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}) @@ -3598,7 +3606,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}) @@ -3781,7 +3789,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}) @@ -3986,7 +3994,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}) @@ -4208,7 +4216,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}) @@ -4413,7 +4421,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}) @@ -4590,7 +4598,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}) @@ -4784,7 +4792,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}) @@ -4957,7 +4965,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}) @@ -5131,7 +5139,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}) @@ -5322,7 +5330,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}) @@ -5530,7 +5538,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}) @@ -5719,7 +5727,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}) @@ -5950,7 +5958,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}) @@ -6144,7 +6152,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}) @@ -6317,7 +6325,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}) @@ -6499,7 +6507,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}) @@ -6732,7 +6740,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}) @@ -6992,7 +7000,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}) @@ -7158,7 +7166,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}) @@ -7333,7 +7341,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}) @@ -7627,7 +7635,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}) @@ -7849,7 +7857,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}) @@ -8061,7 +8069,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}) @@ -8323,7 +8331,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}) @@ -8525,7 +8533,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}) @@ -8701,7 +8709,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}) @@ -8896,7 +8904,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}) @@ -9117,7 +9125,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}) @@ -9339,7 +9347,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}) @@ -9542,7 +9550,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}) @@ -9755,7 +9763,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}) @@ -9997,7 +10005,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}) @@ -10259,7 +10267,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}) @@ -10460,7 +10468,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}) @@ -10797,7 +10805,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}) @@ -10970,7 +10978,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}) @@ -11157,7 +11165,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}) @@ -11424,7 +11432,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}) @@ -11618,7 +11626,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}) @@ -11663,10 +11671,11 @@ System.out.println(response.toString()); <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-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">"startDayOfWeek"</span>: <span class="hljs-number">0</span>, <span class="hljs-attr">"starredBoards"</span>: [ <span class="hljs-string">"string"</span> ], @@ -11818,7 +11827,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}) @@ -12019,7 +12028,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}) @@ -12249,7 +12258,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}) @@ -12318,10 +12327,11 @@ System.out.println(response.toString()); <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-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">"startDayOfWeek"</span>: <span class="hljs-number">0</span>, <span class="hljs-attr">"starredBoards"</span>: [ <span class="hljs-string">"string"</span> ], @@ -12482,7 +12492,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}) @@ -12719,7 +12729,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}) @@ -12923,7 +12933,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}) @@ -13144,7 +13154,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}) @@ -13366,7 +13376,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}) @@ -13554,7 +13564,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}) @@ -13657,6 +13667,8 @@ UserSecurity <span class="hljs-attr">"allowsAttachments"</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">"allowsChecklists"</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">"allowsComments"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsDescriptionTitle"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsDescriptionText"</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">"allowsActivities"</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">"allowsLabels"</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">"allowsAssignee"</span>: <span class="hljs-literal">true</span>, @@ -13673,7 +13685,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> @@ -13824,6 +13837,20 @@ UserSecurity <td>Does the board allows comments?</td> </tr> <tr> +<td>allowsDescriptionTitle</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows description title?</td> +</tr> +<tr> +<td>allowsDescriptionText</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows description text?</td> +</tr> +<tr> <td>allowsActivities</td> <td>boolean</td> <td>true</td> @@ -13942,6 +13969,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> @@ -14358,7 +14392,18 @@ UserSecurity <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">"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>, + <span class="hljs-attr">"public"</span>: <span class="hljs-literal">true</span> + } } </code></pre> @@ -14577,6 +14622,13 @@ UserSecurity <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> @@ -14690,6 +14742,70 @@ UserSecurity </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>, + <span class="hljs-attr">"public"</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>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> +<tr> +<td>public</td> +<td>boolean</td> +<td>true</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>{} @@ -15607,10 +15723,11 @@ UserSecurity <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-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">"startDayOfWeek"</span>: <span class="hljs-number">0</span>, <span class="hljs-attr">"starredBoards"</span>: [ <span class="hljs-string">"string"</span> ], @@ -15775,10 +15892,11 @@ UserSecurity <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-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">"startDayOfWeek"</span>: <span class="hljs-number">0</span>, <span class="hljs-attr">"starredBoards"</span>: [ <span class="hljs-string">"string"</span> ], @@ -15869,12 +15987,26 @@ UserSecurity </tr> <tr> <td>notifications</td> -<td>[string]</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> @@ -15882,6 +16014,13 @@ UserSecurity <td>showCardCountAt field of the user</td> </tr> <tr> +<td>startDayOfWeek</td> +<td>number</td> +<td>false</td> +<td>none</td> +<td>startDayOfWeek field of the user</td> +</tr> +<tr> <td>starredBoards</td> <td>[string]</td> <td>false</td> @@ -15989,43 +16128,43 @@ UserSecurity </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 ab3d9770..1e3c2498 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.77 + version: v4.01 description: | The REST API allows you to control and extend Wekan with ease. @@ -2115,6 +2115,14 @@ definitions: description: | Does the board allows comments? type: boolean + allowsDescriptionTitle: + description: | + Does the board allows description title? + type: boolean + allowsDescriptionText: + description: | + Does the board allows description text? + type: boolean allowsActivities: description: | Does the board allows comments? @@ -2201,6 +2209,10 @@ definitions: description: | The type of board type: string + sort: + description: | + Sort value + type: number required: - title - slug @@ -2215,6 +2227,8 @@ definitions: - allowsAttachments - allowsChecklists - allowsComments + - allowsDescriptionTitle + - allowsDescriptionText - allowsActivities - allowsLabels - allowsAssignee @@ -2226,6 +2240,7 @@ definitions: - allowsEndDate - allowsDueDate - type + - sort BoardsLabels: type: object properties: @@ -2513,6 +2528,11 @@ definitions: 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 @@ -2522,6 +2542,32 @@ definitions: - 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 + public: + type: boolean + required: + - question + - public CardsCustomfields: type: object ChecklistItems: @@ -3015,12 +3061,23 @@ definitions: enabled notifications for the user type: array items: - type: string - x-nullable: true + $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 + startDayOfWeek: + description: | + startDayOfWeek field of the user + type: number starredBoards: description: | list of starred board IDs @@ -3068,6 +3125,7 @@ definitions: Reference to the board templates swimlane Id type: string required: + - activity - templatesBoardId - cardTemplatesSwimlaneId - listTemplatesSwimlaneId diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png Binary files differnew file mode 100644 index 00000000..bcd46115 --- /dev/null +++ b/public/apple-touch-icon.png diff --git a/public/browserconfig.xml b/public/browserconfig.xml new file mode 100644 index 00000000..a47e5a5b --- /dev/null +++ b/public/browserconfig.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<browserconfig> + <msapplication> + <tile> + <square150x150logo src="/mstile-150x150.png"/> + <TileColor>#2d89ef</TileColor> + </tile> + </msapplication> +</browserconfig> diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png Binary files differnew file mode 100644 index 00000000..57eee764 --- /dev/null +++ b/public/favicon-16x16.png diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png Binary files differnew file mode 100644 index 00000000..8fb6ae02 --- /dev/null +++ b/public/favicon-32x32.png diff --git a/public/favicon.ico b/public/favicon.ico Binary files differnew file mode 100644 index 00000000..df376031 --- /dev/null +++ b/public/favicon.ico diff --git a/public/mstile-144x144.png b/public/mstile-144x144.png Binary files differnew file mode 100644 index 00000000..dbc184f4 --- /dev/null +++ b/public/mstile-144x144.png diff --git a/public/mstile-150x150.png b/public/mstile-150x150.png Binary files differnew file mode 100644 index 00000000..943e0972 --- /dev/null +++ b/public/mstile-150x150.png diff --git a/public/mstile-310x150.png b/public/mstile-310x150.png Binary files differnew file mode 100644 index 00000000..f80bea7a --- /dev/null +++ b/public/mstile-310x150.png diff --git a/public/mstile-310x310.png b/public/mstile-310x310.png Binary files differnew file mode 100644 index 00000000..4d7ac651 --- /dev/null +++ b/public/mstile-310x310.png diff --git a/public/mstile-70x70.png b/public/mstile-70x70.png Binary files differnew file mode 100644 index 00000000..8b306ba5 --- /dev/null +++ b/public/mstile-70x70.png diff --git a/public/pwa-service-worker.js b/public/pwa-service-worker.js new file mode 100644 index 00000000..3cc74ec9 --- /dev/null +++ b/public/pwa-service-worker.js @@ -0,0 +1,4 @@ +self.addEventListener('install', function(event) { + // Dummy service worker that does nothing, + // for mobile browsers "Add to home screen". +}); 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/public/safari-pinned-tab.svg b/public/safari-pinned-tab.svg new file mode 100644 index 00000000..4320882c --- /dev/null +++ b/public/safari-pinned-tab.svg @@ -0,0 +1,51 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" + "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> +<svg version="1.0" xmlns="http://www.w3.org/2000/svg" + width="700.000000pt" height="700.000000pt" viewBox="0 0 700.000000 700.000000" + preserveAspectRatio="xMidYMid meet"> +<metadata> +Created by potrace 1.11, written by Peter Selinger 2001-2013 +</metadata> +<g transform="translate(0.000000,700.000000) scale(0.100000,-0.100000)" +fill="#000000" stroke="none"> +<path d="M4950 5425 c-18 -22 -5 -69 38 -139 51 -82 70 -131 85 -229 23 -139 +13 -332 -24 -517 -43 -212 -156 -565 -234 -737 -8 -17 -15 -34 -15 -37 0 -7 +-28 -69 -108 -241 -291 -626 -622 -1090 -904 -1267 -23 -15 -27 -15 -32 -2 -7 +17 0 285 8 329 3 17 10 57 16 90 6 33 12 74 15 90 3 17 8 46 11 65 2 19 9 58 +14 85 5 28 12 66 15 85 3 19 17 89 30 155 13 66 26 131 29 145 2 14 9 45 15 +70 13 54 141 635 147 670 3 14 12 48 20 76 8 28 16 60 18 70 3 11 9 39 15 64 +32 141 32 217 1 263 -29 42 -49 55 -277 176 -132 70 -195 99 -210 95 -24 -7 +-45 -50 -88 -184 -15 -47 -43 -125 -62 -175 -19 -49 -44 -115 -55 -145 -12 +-30 -29 -73 -38 -95 -10 -22 -39 -94 -65 -160 -83 -213 -154 -384 -272 -650 +-347 -786 -602 -1192 -728 -1161 -18 5 -23 15 -28 58 -6 53 -1 162 9 208 4 14 +8 39 10 55 16 106 72 359 136 605 22 85 41 163 43 174 3 10 11 42 19 70 12 41 +95 360 111 426 5 18 42 151 85 305 18 61 36 128 41 149 6 22 30 103 54 180 64 +207 77 265 70 303 -8 43 -56 98 -109 125 -23 11 -96 54 -164 95 -210 127 -225 +130 -397 70 -181 -64 -611 -244 -642 -269 -7 -6 -13 -8 -13 -5 0 9 -340 -162 +-476 -239 -322 -182 -495 -303 -629 -438 -99 -99 -139 -161 -161 -246 -58 +-230 48 -440 307 -610 87 -57 130 -72 144 -50 4 6 8 67 11 136 2 70 10 153 18 +185 33 125 132 280 278 429 82 85 242 230 303 275 22 17 42 32 45 35 36 40 +339 241 485 323 143 79 391 194 401 185 1 -2 -15 -69 -36 -148 -45 -169 -79 +-300 -121 -460 -17 -63 -43 -164 -59 -225 -46 -173 -89 -342 -94 -367 -3 -13 +-30 -126 -61 -253 -31 -126 -58 -239 -61 -250 -2 -11 -17 -85 -33 -165 -17 +-80 -32 -156 -34 -170 -3 -14 -8 -36 -11 -50 -11 -42 -13 -181 -4 -233 32 +-175 198 -333 386 -367 173 -31 345 65 509 285 220 293 421 705 633 1295 29 +80 59 161 66 180 17 41 16 28 -14 -115 -12 -55 -24 -114 -26 -131 -18 -104 +-46 -274 -50 -304 -3 -19 -7 -44 -9 -55 -3 -11 -8 -42 -12 -70 -5 -27 -9 -52 +-10 -55 -1 -3 -5 -34 -9 -70 -5 -36 -10 -72 -11 -80 -2 -8 -6 -44 -10 -80 -4 +-36 -9 -73 -10 -82 -24 -121 -22 -299 3 -369 26 -76 90 -167 151 -218 65 -54 +199 -116 283 -130 84 -14 132 -4 236 48 155 78 309 210 565 485 l65 70 1 -60 +c3 -212 132 -378 383 -493 147 -67 251 -90 434 -96 144 -4 282 20 404 72 70 +30 86 38 164 85 43 27 101 58 130 70 80 34 178 102 236 165 93 103 205 288 +225 375 6 22 3 27 -17 30 -12 2 -39 0 -58 -5 -31 -8 -40 -19 -87 -105 -120 +-221 -314 -431 -483 -524 -114 -62 -298 -87 -399 -53 -104 34 -180 132 -220 +285 -26 101 -22 311 9 450 11 52 23 105 26 118 10 50 58 189 82 241 71 155 +183 227 241 157 20 -23 18 -163 -4 -261 -56 -262 -154 -450 -287 -550 -71 -54 +-60 -73 27 -48 167 47 235 72 368 136 197 95 348 216 402 322 93 184 -27 371 +-291 453 -186 57 -388 48 -593 -28 -30 -11 -56 -18 -58 -17 -1 2 24 47 57 101 +33 53 60 101 60 106 0 6 5 10 10 10 6 0 10 4 10 9 0 5 28 57 62 117 122 215 +214 422 288 644 124 374 136 570 49 756 -52 112 -125 175 -259 222 -213 76 +-421 111 -450 77z"/> +</g> +</svg> diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 00000000..997a52ec --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,20 @@ +{ + "name": "Wekan", + "short_name": "Wekan", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "start_url": "/sign-in", + "display": "standalone" +} diff --git a/public/svg-etc/manifest.json b/public/svg-etc/manifest.json new file mode 100644 index 00000000..ef9dbfd2 --- /dev/null +++ b/public/svg-etc/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "Wekan", + "short_name": "Wekan", + "description": "Open-Source kanban", + "icons": [ + { + "src": "wekan-logo-150.png", + "sizes": "150x150", + "type": "image/png" + }, + { + "src": "wekan-logo-150.svg", + "sizes": "150x150", + "type": "image/svg+xml" + }, + { + "src": "wekan-logo-256.png", + "sizes": "256x256", + "type": "image/png" + }, + { + "src": "wekan-logo-256.svg", + "sizes": "256x256", + "type": "image/svg+xml" + }, + { + "src": "wekan-logo-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "wekan-logo-512.svg", + "sizes": "512x512", + "type": "image/svg+xml" + } + ], + "display": "fullscreen", + "background_color": "#dedede", + "theme_color": "#dedede", + "start_url": "/" +} diff --git a/public/wekan-favicon.png b/public/svg-etc/wekan-favicon.png Binary files differindex 8beb85f4..8beb85f4 100644 --- a/public/wekan-favicon.png +++ b/public/svg-etc/wekan-favicon.png diff --git a/public/wekan-logo-150.png b/public/svg-etc/wekan-logo-150.png Binary files differindex e8e89c62..e8e89c62 100644 --- a/public/wekan-logo-150.png +++ b/public/svg-etc/wekan-logo-150.png diff --git a/public/wekan-logo-150.svg b/public/svg-etc/wekan-logo-150.svg index 51d4eede..51d4eede 100644 --- a/public/wekan-logo-150.svg +++ b/public/svg-etc/wekan-logo-150.svg diff --git a/public/svg-etc/wekan-logo-256.png b/public/svg-etc/wekan-logo-256.png Binary files differnew file mode 100644 index 00000000..3f29a897 --- /dev/null +++ b/public/svg-etc/wekan-logo-256.png diff --git a/public/svg-etc/wekan-logo-256.svg b/public/svg-etc/wekan-logo-256.svg new file mode 100644 index 00000000..2a9c5e88 --- /dev/null +++ b/public/svg-etc/wekan-logo-256.svg @@ -0,0 +1,203 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Layer_1" + x="0px" + y="0px" + viewBox="-21 1 256 256" + xml:space="preserve" + sodipodi:docname="wekan-logo-256.svg" + width="256" + height="256" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)" + inkscape:export-filename="/home/wekan/repos/wekan/public/wekan-logo-256.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96"><metadata + id="metadata3853"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs + id="defs3851" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1680" + inkscape:window-height="920" + id="namedview3849" + showgrid="false" + inkscape:zoom="1.6593439" + inkscape:cx="204.3279" + inkscape:cy="154.24848" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="Layer_1" /> +<style + type="text/css" + id="style3803"> + .st0{opacity:0.6;clip-path:url(#SVGID_2_);fill:#D1D1D1;} + .st1{clip-path:url(#SVGID_2_);fill:url(#SVGID_3_);} + .st2{clip-path:url(#SVGID_2_);fill:none;stroke:#7ADDFC;stroke-miterlimit:10;} + .st3{clip-path:url(#SVGID_2_);fill:none;stroke:#529FDD;stroke-miterlimit:10;} + .st4{clip-path:url(#SVGID_2_);fill:none;} + .st5{clip-path:url(#SVGID_2_);fill:#FFFFFF;} +</style> +<g + id="g3846" + transform="matrix(1.7073027,0,0,1.7073027,14.853357,-0.80271142)"> + <defs + id="defs3806"> + <rect + id="SVGID_1_" + x="-21" + y="1" + width="150" + height="150" /> + </defs> + <clipPath + id="SVGID_2_"> + <use + xlink:href="#SVGID_1_" + style="overflow:visible" + id="use3808" + x="0" + y="0" + width="100%" + height="100%" /> + </clipPath> + <path + class="st0" + d="M 127.8,156 H -8.7 c -3.7,0 -6.8,-3 -6.8,-6.8 V 12.7 c 0,-3.7 3,-6.8 6.8,-6.8 h 136.5 c 3.7,0 6.7,3 6.7,6.8 v 136.5 c 0,3.7 -3,6.8 -6.7,6.8 z" + clip-path="url(#SVGID_2_)" + id="path3811" + inkscape:connector-curvature="0" + style="opacity:0.6;fill:#d1d1d1" /> + <linearGradient + id="SVGID_3_" + gradientUnits="userSpaceOnUse" + x1="54" + y1="151" + x2="54" + y2="1"> + <stop + offset="0" + style="stop-color:#007C8F" + id="stop3813" /> + <stop + offset="0.3707" + style="stop-color:#007088" + id="stop3815" /> + <stop + offset="1" + style="stop-color:#005377" + id="stop3817" /> + </linearGradient> + <rect + x="-21" + y="1" + class="st1" + width="150" + height="150" + clip-path="url(#SVGID_2_)" + id="rect3820" + style="fill:url(#SVGID_3_)" /> + <path + class="st2" + d="M 90.3,110.9 H 16.9 c -1.7,0 -3,-1.3 -3,-3 V 42.4 c 0,-1.7 1.3,-3 3,-3 h 73.4 c 1.7,0 3,1.3 3,3 v 65.4 c 0,1.7 -1.3,3.1 -3,3.1 z" + clip-path="url(#SVGID_2_)" + id="path3822" + inkscape:connector-curvature="0" + style="fill:none;stroke:#7addfc;stroke-miterlimit:10" /> + <path + class="st3" + d="M 90.3,32.6 H 16.9 c -1.7,0 -3,-1.3 -3,-3 v -46.7 c 0,-1.7 1.3,-3 3,-3 h 73.4 c 1.7,0 3,1.3 3,3 v 46.7 c 0,1.6 -1.3,3 -3,3 z" + clip-path="url(#SVGID_2_)" + id="path3824" + inkscape:connector-curvature="0" + style="fill:none;stroke:#529fdd;stroke-miterlimit:10" /> + <path + class="st3" + d="M 90.3,170.5 H 16.9 c -1.7,0 -3,-1.3 -3,-3 v -46.7 c 0,-1.7 1.3,-3 3,-3 h 73.4 c 1.7,0 3,1.3 3,3 v 46.7 c 0,1.6 -1.3,3 -3,3 z" + clip-path="url(#SVGID_2_)" + id="path3826" + inkscape:connector-curvature="0" + style="fill:none;stroke:#529fdd;stroke-miterlimit:10" /> + <path + class="st3" + d="m 177.3,69.7 h -73.4 c -1.7,0 -3,-1.3 -3,-3 v -82.3 c 0,-1.7 1.3,-3 3,-3 h 73.4 c 1.7,0 3,1.3 3,3 v 82.3 c 0,1.6 -1.4,3 -3,3 z" + clip-path="url(#SVGID_2_)" + id="path3828" + inkscape:connector-curvature="0" + style="fill:none;stroke:#529fdd;stroke-miterlimit:10" /> + <path + class="st3" + d="m 177.3,179 h -73.4 c -1.7,0 -3,-1.3 -3,-3 V 79.5 c 0,-1.7 1.3,-3 3,-3 h 73.4 c 1.7,0 3,1.3 3,3 V 176 c 0,1.6 -1.4,3 -3,3 z" + clip-path="url(#SVGID_2_)" + id="path3830" + inkscape:connector-curvature="0" + style="fill:none;stroke:#529fdd;stroke-miterlimit:10" /> + <path + class="st3" + d="m 3.8,69.7 h -73.4 c -1.7,0 -3,-1.3 -3,-3 v -82.3 c 0,-1.7 1.3,-3 3,-3 H 3.8 c 1.7,0 3,1.3 3,3 v 82.3 c 0,1.6 -1.4,3 -3,3 z" + clip-path="url(#SVGID_2_)" + id="path3832" + inkscape:connector-curvature="0" + style="fill:none;stroke:#529fdd;stroke-miterlimit:10" /> + <path + class="st3" + d="m 3.8,179 h -73.4 c -1.7,0 -3,-1.3 -3,-3 V 79.5 c 0,-1.7 1.3,-3 3,-3 H 3.8 c 1.7,0 3,1.3 3,3 V 176 c 0,1.6 -1.4,3 -3,3 z" + clip-path="url(#SVGID_2_)" + id="path3834" + inkscape:connector-curvature="0" + style="fill:none;stroke:#529fdd;stroke-miterlimit:10" /> + <path + class="st4" + d="M 115.7,151 H -7.7 C -15.1,151 -21,145 -21,137.7 V 14.3 C -21,7 -15,1 -7.7,1 H 115.6 C 123,1 129,7 129,14.3 v 123.3 c 0,7.4 -6,13.4 -13.3,13.4 z" + clip-path="url(#SVGID_2_)" + id="path3836" + inkscape:connector-curvature="0" + style="fill:none" /> + <path + class="st4" + d="M 122.3,151 H -14.3 c -3.7,0 -6.8,-3 -6.8,-6.8 V 7.8 C -21,4 -18,1 -14.3,1 h 136.5 c 3.7,0 6.8,3 6.8,6.8 v 136.5 c 0,3.7 -3,6.7 -6.7,6.7 z" + clip-path="url(#SVGID_2_)" + id="path3838" + inkscape:connector-curvature="0" + style="fill:none" /> + <path + class="st5" + d="m 81.4,86.2 c 0.5,-0.7 0.9,-1.5 1.2,-2.2 0.1,-0.1 0.1,-0.2 0.1,-0.4 0,-0.1 0.1,-0.2 0,-0.2 0,-0.1 -0.8,-0.1 -1.1,0.1 -0.2,0.2 -1.1,2.7 -3.9,5.2 -1.6,1.4 -3.3,1.9 -4.9,1.7 -1.2,-0.1 -2.1,-0.9 -2.6,-2.2 -0.5,-1.4 -0.6,-3 -0.2,-5.1 0.8,-3.8 1.8,-5.7 3.1,-5.7 0.8,0 0.9,1.4 0.1,4.3 -0.6,2 -1.5,3.4 -2.5,4.1 -0.4,0.2 -0.5,0.4 -0.5,0.5 0,0.2 0.3,0.2 0.8,0 1.9,-0.5 3.6,-1.2 5.1,-2.1 1.5,-1 2.5,-2 2.8,-3 0.3,-1.2 -0.1,-2.2 -1.1,-3 -1,-0.8 -2.4,-1.3 -4,-1.4 -1.6,-0.1 -3.2,0.2 -4.7,0.9 0,-0.1 0.1,-0.1 0.1,-0.2 2.5,-3.9 4.3,-7.5 5.3,-11.1 1.1,-3.5 0.8,-6.1 -0.9,-7.7 -0.6,-0.5 -1.5,-0.9 -2.7,-1.2 -2.3,-0.6 -4.8,-1.4 -2.9,1.2 0.3,0.5 0.5,1 0.6,1.5 0.4,1.8 0.3,4.1 -0.4,6.9 -0.7,2.8 -1.8,5.8 -3.2,8.8 -1.4,3 -2.9,5.8 -4.6,8.2 -1.7,2.4 -3.3,4.1 -4.9,5 -0.1,-0.2 -0.1,-0.4 -0.1,-0.6 0,-0.5 0,-1 0,-1.5 0,-0.5 0.1,-0.9 0.1,-1.2 0.4,-2.4 0.8,-5 1.4,-7.7 0.6,-2.7 1.1,-5.1 1.6,-7.3 0.4,-1.4 0.6,-2.4 0.7,-3.1 0.1,-0.7 0,-1.2 -0.2,-1.5 -0.2,-0.3 -0.8,-0.7 -1.6,-1.1 -0.5,-0.3 -1.1,-0.6 -1.9,-1 -1.5,-0.9 -1.6,-0.9 -2.1,0.7 -0.4,1.4 -1.2,3.4 -2.3,6.1 -1,2.7 -2.2,5.4 -3.5,8.3 -1.3,2.9 -2.5,5.3 -3.7,7.2 -1.2,2 -2.1,3 -2.9,3 -0.2,0 -0.3,-0.1 -0.3,-0.3 0,-0.2 -0.1,-0.4 -0.1,-0.7 0,-0.5 0.1,-1 0.1,-1.5 0.1,-0.5 0.2,-0.9 0.2,-1.2 0.3,-1.6 0.8,-3.5 1.3,-5.7 0.6,-2.2 1.2,-4.4 1.7,-6.5 0.6,-2.1 1.1,-3.9 1.5,-5.4 0.6,-1.9 1,-3.1 1.1,-3.8 0.1,-0.6 -0.3,-1.2 -1,-1.6 -0.6,-0.3 -1.6,-0.9 -2.9,-1.7 -1,-0.6 -1.4,-0.5 -2.4,-0.2 -2.5,0.9 -4.9,1.9 -7.5,3.1 -3,1.4 -5.6,2.9 -7.8,4.3 -2.2,1.5 -3.6,2.8 -4.2,4 -0.7,1.5 -0.6,3 0.2,4.4 0.5,0.8 1.1,1.5 1.9,2.1 3,2.1 2,0.9 2.3,-1.5 0.1,-0.9 0.4,-1.7 0.8,-2.4 1,-1.7 2.8,-3.6 5.6,-5.8 2.7,-2.1 5.7,-3.9 9,-5.2 -0.6,2.2 -1.2,4.6 -1.9,7.2 -0.7,2.6 -1.3,5.1 -1.9,7.5 -0.6,2.4 -1,4.4 -1.3,6 -0.2,0.8 -0.2,1.5 -0.2,2.2 0,0.7 0.3,1.4 0.7,2.1 0.5,0.7 1.1,1.2 1.8,1.6 0.7,0.4 1.4,0.6 2.2,0.6 1.6,-0.1 3.1,-1.1 4.5,-3.1 1.5,-2 2.8,-4.4 4,-7.2 1.2,-2.8 2.3,-5.6 3.2,-8.4 -0.5,2.2 -0.9,4.4 -1.2,6.5 -0.4,2.1 -0.6,4 -0.8,5.6 -0.1,0.8 -0.1,1.5 -0.1,2.2 0.1,0.7 0.4,1.4 0.9,2.1 0.5,0.7 1.1,1.2 1.9,1.6 0.7,0.4 1.5,0.6 2.3,0.7 1.5,0 3.6,-1.4 6.3,-4.1 0.6,-0.7 1.3,-1.4 1.9,-2.1 -0.1,1.9 0.5,3.4 2,4.5 1.7,1.3 3.7,2 6.1,2.1 2.4,0.1 4.7,-0.7 6.6,-2.1 1.9,-0.6 3,-1.8 3.9,-3.1 z" + clip-path="url(#SVGID_2_)" + id="path3840" + inkscape:connector-curvature="0" + style="fill:#ffffff" /> + <path + class="st4" + d="M 122.3,151 H -14.3 c -3.7,0 -6.8,-3 -6.8,-6.8 V 7.8 C -21,4 -18,1 -14.3,1 h 136.5 c 3.7,0 6.8,3 6.8,6.8 v 136.5 c 0,3.7 -3,6.7 -6.7,6.7 z" + clip-path="url(#SVGID_2_)" + id="path3842" + inkscape:connector-curvature="0" + style="fill:none" /> + <path + class="st4" + d="M 122.3,151 H -14.3 c -3.7,0 -6.8,-3 -6.8,-6.8 V 7.8 C -21,4 -18,1 -14.3,1 H 129 v 143.3 c 0,3.7 -3,6.7 -6.7,6.7 z" + clip-path="url(#SVGID_2_)" + id="path3844" + inkscape:connector-curvature="0" + style="fill:none" /> +</g> +</svg>
\ No newline at end of file diff --git a/public/svg-etc/wekan-logo-32.png b/public/svg-etc/wekan-logo-32.png Binary files differnew file mode 100644 index 00000000..c5bdffda --- /dev/null +++ b/public/svg-etc/wekan-logo-32.png diff --git a/public/svg-etc/wekan-logo-512.png b/public/svg-etc/wekan-logo-512.png Binary files differnew file mode 100644 index 00000000..0bb90497 --- /dev/null +++ b/public/svg-etc/wekan-logo-512.png diff --git a/public/svg-etc/wekan-logo-512.svg b/public/svg-etc/wekan-logo-512.svg new file mode 100644 index 00000000..e945a40d --- /dev/null +++ b/public/svg-etc/wekan-logo-512.svg @@ -0,0 +1,200 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Layer_1" + x="0px" + y="0px" + viewBox="-21 1 512 512" + xml:space="preserve" + sodipodi:docname="wekan-logo-512.svg" + width="512" + height="512" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)"><metadata + id="metadata3853"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs + id="defs3851" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1680" + inkscape:window-height="920" + id="namedview3849" + showgrid="false" + inkscape:zoom="0.58666667" + inkscape:cx="76.238961" + inkscape:cy="-15.764866" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="Layer_1" /> +<style + type="text/css" + id="style3803"> + .st0{opacity:0.6;clip-path:url(#SVGID_2_);fill:#D1D1D1;} + .st1{clip-path:url(#SVGID_2_);fill:url(#SVGID_3_);} + .st2{clip-path:url(#SVGID_2_);fill:none;stroke:#7ADDFC;stroke-miterlimit:10;} + .st3{clip-path:url(#SVGID_2_);fill:none;stroke:#529FDD;stroke-miterlimit:10;} + .st4{clip-path:url(#SVGID_2_);fill:none;} + .st5{clip-path:url(#SVGID_2_);fill:#FFFFFF;} +</style> +<g + id="g3846" + transform="matrix(3.4104695,0,0,3.4104695,50.61986,-1.9809013)"> + <defs + id="defs3806"> + <rect + id="SVGID_1_" + x="-21" + y="1" + width="150" + height="150" /> + </defs> + <clipPath + id="SVGID_2_"> + <use + xlink:href="#SVGID_1_" + style="overflow:visible" + id="use3808" + x="0" + y="0" + width="100%" + height="100%" /> + </clipPath> + <path + class="st0" + d="M 127.8,156 H -8.7 c -3.7,0 -6.8,-3 -6.8,-6.8 V 12.7 c 0,-3.7 3,-6.8 6.8,-6.8 h 136.5 c 3.7,0 6.7,3 6.7,6.8 v 136.5 c 0,3.7 -3,6.8 -6.7,6.8 z" + clip-path="url(#SVGID_2_)" + id="path3811" + inkscape:connector-curvature="0" + style="opacity:0.6;fill:#d1d1d1" /> + <linearGradient + id="SVGID_3_" + gradientUnits="userSpaceOnUse" + x1="54" + y1="151" + x2="54" + y2="1"> + <stop + offset="0" + style="stop-color:#007C8F" + id="stop3813" /> + <stop + offset="0.3707" + style="stop-color:#007088" + id="stop3815" /> + <stop + offset="1" + style="stop-color:#005377" + id="stop3817" /> + </linearGradient> + <rect + x="-21" + y="1" + class="st1" + width="150" + height="150" + clip-path="url(#SVGID_2_)" + id="rect3820" + style="fill:url(#SVGID_3_)" /> + <path + class="st2" + d="M 90.3,110.9 H 16.9 c -1.7,0 -3,-1.3 -3,-3 V 42.4 c 0,-1.7 1.3,-3 3,-3 h 73.4 c 1.7,0 3,1.3 3,3 v 65.4 c 0,1.7 -1.3,3.1 -3,3.1 z" + clip-path="url(#SVGID_2_)" + id="path3822" + inkscape:connector-curvature="0" + style="fill:none;stroke:#7addfc;stroke-miterlimit:10" /> + <path + class="st3" + d="M 90.3,32.6 H 16.9 c -1.7,0 -3,-1.3 -3,-3 v -46.7 c 0,-1.7 1.3,-3 3,-3 h 73.4 c 1.7,0 3,1.3 3,3 v 46.7 c 0,1.6 -1.3,3 -3,3 z" + clip-path="url(#SVGID_2_)" + id="path3824" + inkscape:connector-curvature="0" + style="fill:none;stroke:#529fdd;stroke-miterlimit:10" /> + <path + class="st3" + d="M 90.3,170.5 H 16.9 c -1.7,0 -3,-1.3 -3,-3 v -46.7 c 0,-1.7 1.3,-3 3,-3 h 73.4 c 1.7,0 3,1.3 3,3 v 46.7 c 0,1.6 -1.3,3 -3,3 z" + clip-path="url(#SVGID_2_)" + id="path3826" + inkscape:connector-curvature="0" + style="fill:none;stroke:#529fdd;stroke-miterlimit:10" /> + <path + class="st3" + d="m 177.3,69.7 h -73.4 c -1.7,0 -3,-1.3 -3,-3 v -82.3 c 0,-1.7 1.3,-3 3,-3 h 73.4 c 1.7,0 3,1.3 3,3 v 82.3 c 0,1.6 -1.4,3 -3,3 z" + clip-path="url(#SVGID_2_)" + id="path3828" + inkscape:connector-curvature="0" + style="fill:none;stroke:#529fdd;stroke-miterlimit:10" /> + <path + class="st3" + d="m 177.3,179 h -73.4 c -1.7,0 -3,-1.3 -3,-3 V 79.5 c 0,-1.7 1.3,-3 3,-3 h 73.4 c 1.7,0 3,1.3 3,3 V 176 c 0,1.6 -1.4,3 -3,3 z" + clip-path="url(#SVGID_2_)" + id="path3830" + inkscape:connector-curvature="0" + style="fill:none;stroke:#529fdd;stroke-miterlimit:10" /> + <path + class="st3" + d="m 3.8,69.7 h -73.4 c -1.7,0 -3,-1.3 -3,-3 v -82.3 c 0,-1.7 1.3,-3 3,-3 H 3.8 c 1.7,0 3,1.3 3,3 v 82.3 c 0,1.6 -1.4,3 -3,3 z" + clip-path="url(#SVGID_2_)" + id="path3832" + inkscape:connector-curvature="0" + style="fill:none;stroke:#529fdd;stroke-miterlimit:10" /> + <path + class="st3" + d="m 3.8,179 h -73.4 c -1.7,0 -3,-1.3 -3,-3 V 79.5 c 0,-1.7 1.3,-3 3,-3 H 3.8 c 1.7,0 3,1.3 3,3 V 176 c 0,1.6 -1.4,3 -3,3 z" + clip-path="url(#SVGID_2_)" + id="path3834" + inkscape:connector-curvature="0" + style="fill:none;stroke:#529fdd;stroke-miterlimit:10" /> + <path + class="st4" + d="M 115.7,151 H -7.7 C -15.1,151 -21,145 -21,137.7 V 14.3 C -21,7 -15,1 -7.7,1 H 115.6 C 123,1 129,7 129,14.3 v 123.3 c 0,7.4 -6,13.4 -13.3,13.4 z" + clip-path="url(#SVGID_2_)" + id="path3836" + inkscape:connector-curvature="0" + style="fill:none" /> + <path + class="st4" + d="M 122.3,151 H -14.3 c -3.7,0 -6.8,-3 -6.8,-6.8 V 7.8 C -21,4 -18,1 -14.3,1 h 136.5 c 3.7,0 6.8,3 6.8,6.8 v 136.5 c 0,3.7 -3,6.7 -6.7,6.7 z" + clip-path="url(#SVGID_2_)" + id="path3838" + inkscape:connector-curvature="0" + style="fill:none" /> + <path + class="st5" + d="m 81.4,86.2 c 0.5,-0.7 0.9,-1.5 1.2,-2.2 0.1,-0.1 0.1,-0.2 0.1,-0.4 0,-0.1 0.1,-0.2 0,-0.2 0,-0.1 -0.8,-0.1 -1.1,0.1 -0.2,0.2 -1.1,2.7 -3.9,5.2 -1.6,1.4 -3.3,1.9 -4.9,1.7 -1.2,-0.1 -2.1,-0.9 -2.6,-2.2 -0.5,-1.4 -0.6,-3 -0.2,-5.1 0.8,-3.8 1.8,-5.7 3.1,-5.7 0.8,0 0.9,1.4 0.1,4.3 -0.6,2 -1.5,3.4 -2.5,4.1 -0.4,0.2 -0.5,0.4 -0.5,0.5 0,0.2 0.3,0.2 0.8,0 1.9,-0.5 3.6,-1.2 5.1,-2.1 1.5,-1 2.5,-2 2.8,-3 0.3,-1.2 -0.1,-2.2 -1.1,-3 -1,-0.8 -2.4,-1.3 -4,-1.4 -1.6,-0.1 -3.2,0.2 -4.7,0.9 0,-0.1 0.1,-0.1 0.1,-0.2 2.5,-3.9 4.3,-7.5 5.3,-11.1 1.1,-3.5 0.8,-6.1 -0.9,-7.7 -0.6,-0.5 -1.5,-0.9 -2.7,-1.2 -2.3,-0.6 -4.8,-1.4 -2.9,1.2 0.3,0.5 0.5,1 0.6,1.5 0.4,1.8 0.3,4.1 -0.4,6.9 -0.7,2.8 -1.8,5.8 -3.2,8.8 -1.4,3 -2.9,5.8 -4.6,8.2 -1.7,2.4 -3.3,4.1 -4.9,5 -0.1,-0.2 -0.1,-0.4 -0.1,-0.6 0,-0.5 0,-1 0,-1.5 0,-0.5 0.1,-0.9 0.1,-1.2 0.4,-2.4 0.8,-5 1.4,-7.7 0.6,-2.7 1.1,-5.1 1.6,-7.3 0.4,-1.4 0.6,-2.4 0.7,-3.1 0.1,-0.7 0,-1.2 -0.2,-1.5 -0.2,-0.3 -0.8,-0.7 -1.6,-1.1 -0.5,-0.3 -1.1,-0.6 -1.9,-1 -1.5,-0.9 -1.6,-0.9 -2.1,0.7 -0.4,1.4 -1.2,3.4 -2.3,6.1 -1,2.7 -2.2,5.4 -3.5,8.3 -1.3,2.9 -2.5,5.3 -3.7,7.2 -1.2,2 -2.1,3 -2.9,3 -0.2,0 -0.3,-0.1 -0.3,-0.3 0,-0.2 -0.1,-0.4 -0.1,-0.7 0,-0.5 0.1,-1 0.1,-1.5 0.1,-0.5 0.2,-0.9 0.2,-1.2 0.3,-1.6 0.8,-3.5 1.3,-5.7 0.6,-2.2 1.2,-4.4 1.7,-6.5 0.6,-2.1 1.1,-3.9 1.5,-5.4 0.6,-1.9 1,-3.1 1.1,-3.8 0.1,-0.6 -0.3,-1.2 -1,-1.6 -0.6,-0.3 -1.6,-0.9 -2.9,-1.7 -1,-0.6 -1.4,-0.5 -2.4,-0.2 -2.5,0.9 -4.9,1.9 -7.5,3.1 -3,1.4 -5.6,2.9 -7.8,4.3 -2.2,1.5 -3.6,2.8 -4.2,4 -0.7,1.5 -0.6,3 0.2,4.4 0.5,0.8 1.1,1.5 1.9,2.1 3,2.1 2,0.9 2.3,-1.5 0.1,-0.9 0.4,-1.7 0.8,-2.4 1,-1.7 2.8,-3.6 5.6,-5.8 2.7,-2.1 5.7,-3.9 9,-5.2 -0.6,2.2 -1.2,4.6 -1.9,7.2 -0.7,2.6 -1.3,5.1 -1.9,7.5 -0.6,2.4 -1,4.4 -1.3,6 -0.2,0.8 -0.2,1.5 -0.2,2.2 0,0.7 0.3,1.4 0.7,2.1 0.5,0.7 1.1,1.2 1.8,1.6 0.7,0.4 1.4,0.6 2.2,0.6 1.6,-0.1 3.1,-1.1 4.5,-3.1 1.5,-2 2.8,-4.4 4,-7.2 1.2,-2.8 2.3,-5.6 3.2,-8.4 -0.5,2.2 -0.9,4.4 -1.2,6.5 -0.4,2.1 -0.6,4 -0.8,5.6 -0.1,0.8 -0.1,1.5 -0.1,2.2 0.1,0.7 0.4,1.4 0.9,2.1 0.5,0.7 1.1,1.2 1.9,1.6 0.7,0.4 1.5,0.6 2.3,0.7 1.5,0 3.6,-1.4 6.3,-4.1 0.6,-0.7 1.3,-1.4 1.9,-2.1 -0.1,1.9 0.5,3.4 2,4.5 1.7,1.3 3.7,2 6.1,2.1 2.4,0.1 4.7,-0.7 6.6,-2.1 1.9,-0.6 3,-1.8 3.9,-3.1 z" + clip-path="url(#SVGID_2_)" + id="path3840" + inkscape:connector-curvature="0" + style="fill:#ffffff" /> + <path + class="st4" + d="M 122.3,151 H -14.3 c -3.7,0 -6.8,-3 -6.8,-6.8 V 7.8 C -21,4 -18,1 -14.3,1 h 136.5 c 3.7,0 6.8,3 6.8,6.8 v 136.5 c 0,3.7 -3,6.7 -6.7,6.7 z" + clip-path="url(#SVGID_2_)" + id="path3842" + inkscape:connector-curvature="0" + style="fill:none" /> + <path + class="st4" + d="M 122.3,151 H -14.3 c -3.7,0 -6.8,-3 -6.8,-6.8 V 7.8 C -21,4 -18,1 -14.3,1 H 129 v 143.3 c 0,3.7 -3,6.7 -6.7,6.7 z" + clip-path="url(#SVGID_2_)" + id="path3844" + inkscape:connector-curvature="0" + style="fill:none" /> +</g> +</svg>
\ No newline at end of file diff --git a/public/wekan-manifest.json b/public/wekan-manifest.json deleted file mode 100644 index ee223e8c..00000000 --- a/public/wekan-manifest.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "Wekan", - "short_name": "Wekan", - "description": "The open-source kanban", - "lang": "en-US", - "icons": [ - { - "src": "/wekan-logo-150.png", - "type": "image/png", - "sizes": "150x150" - }, - { - "src": "/wekan-logo-150.svg", - "type": "image/svg+xml", - "sizes": "150x150" - } - ], - "display": "standalone", - "background_color": "#dedede", - "theme_color": "#dedede", - "start_url": "/" -} diff --git a/rebuild-wekan.bat b/rebuild-wekan.bat index 9072c494..0d88d948 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/v8.17.0/node-v12.15.0-x64.msi -call node-v12.15.0-x64.msi +curl -O https://nodejs.org/dist/v12.16.3/node-v12.16.2-x64.msi +call node-v12.16.3-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 f068059e..1655d8f7 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.15.0 +#NODE_VERSION=12.16.3 #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.15.0 + sudo n 12.16.3 #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 e8393313..02b862d0 100755 --- a/releases/rebuild-release.sh +++ b/releases/rebuild-release.sh @@ -9,8 +9,10 @@ sudo chown -R $(id -u):$(id -g) $HOME/.npm $HOME/.meteor rm -rf node_modules meteor npm install rm -rf .build -meteor build .build --directory +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 2c289194..22e9bef6 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 @@ -8,44 +8,24 @@ #cd ~/repos/wekan #./releases/rebuild-release.sh +REPODIR=/home/wekan/repos +WEKANDIR=/home/wekan/repos/wekan + +# Ensure sudo access +sudo echo . # Build Sandstorm -cd ~/repos/wekan -# 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 +cd $REPODIR +rm -rf $WEKANDIR +git clone git@github.com:wekan/wekan.git +cd $WEKANDIR +sudo n 12.16.3 sudo mkdir -p /usr/local/lib/node_modules/fibers/.node-gyp -sudo npm -g uninstall node-gyp node-pre-gyp fibers -sudo npm -g install node-gyp node-pre-gyp fibers -./releases/rebuild-release.sh -rm -rf .build -mkdir ../sandstorm-build -cp -pR .meteor ../sandstorm-build/ -cp -pR .snap-meteor-1.8 ../sandstorm-build/ -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 -# Build bundle with Meteor 1.8.x and Node 8.17.0 +# Build Wekan ./releases/rebuild-release.sh +cd .build/bundle/programs/server +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 - +#spk publish wekan-$1.spk +#scp wekan-$1.spk x2:/var/snap/wekan/common/releases.wekan.team/ diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp index 1f702891..eb6c7c5b 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 = 378, + appVersion = 401, # Increment this for every release. - appMarketingVersion = (defaultText = "3.78.0~2020-02-12"), + appMarketingVersion = (defaultText = "4.01.0~2020-04-28"), # Human-readable presentation of the app version. minUpgradableAppVersion = 0, @@ -239,7 +239,10 @@ const myCommand :Spk.Manifest.Command = ( (key = "PATH", value = "/usr/local/bin:/usr/bin:/bin"), (key = "WITH_API", value = "true"), (key = "RICHER_CARD_COMMENT_EDITOR", value="false"), + (key = "SCROLLINERTIA", value="0"), + (key = "SCROLLAMOUNT", value="auto"), (key = "CARD_OPENED_WEBHOOK_ENABLED", value="false"), + (key = "NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE", value=""), (key = "BIGEVENTS_PATTERN", value="NONE"), (key = "MATOMO_ADDRESS", value=""), (key = "MATOMO_SITE_ID", value=""), @@ -256,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}}"), (key = "ATTACHMENTS_STORE_PATH", value = "/var/attachments/") 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/card-opened-webhook.js b/server/card-opened-webhook.js index 242ae7ca..3c94d104 100644 --- a/server/card-opened-webhook.js +++ b/server/card-opened-webhook.js @@ -1,5 +1,7 @@ Meteor.startup(() => { - if (process.env.CARD_OPENED_WEBHOOK_ENABLED) { + if (process.env.CARD_OPENED_WEBHOOK_ENABLED === 'true') { Meteor.settings.public.CARD_OPENED_WEBHOOK_ENABLED = true; + } else { + Meteor.settings.public.CARD_OPENED_WEBHOOK_ENABLED = false; } }); diff --git a/server/migrations.js b/server/migrations.js index b02ca246..e330f043 100644 --- a/server/migrations.js +++ b/server/migrations.js @@ -1034,10 +1034,13 @@ Migrations.add('add-description-text-allowed', () => { ); }); -Migrations.add('fix-incorrect-dates', () => { - cas = CFSAttachments.find(); - console.log('cas', cas); -}); +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); + } + }); +}); import { MongoInternals } from 'meteor/mongo'; diff --git a/server/notifications/outgoing.js b/server/notifications/outgoing.js index 5bc2c540..9a741ea1 100644 --- a/server/notifications/outgoing.js +++ b/server/notifications/outgoing.js @@ -1,192 +1,199 @@ -const postCatchError = Meteor.wrapAsync((url, options, resolve) => { - HTTP.post(url, options, (err, res) => { - if (err) { - resolve(null, err.response); - } else { - resolve(null, res); - } +if (Meteor.isServer) { + const postCatchError = Meteor.wrapAsync((url, options, resolve) => { + HTTP.post(url, options, (err, res) => { + if (err) { + resolve(null, err.response); + } else { + resolve(null, res); + } + }); }); -}); -const Lock = { - _lock: {}, - _timer: {}, - echoDelay: 500, // echo should be happening much faster - normalDelay: 1e3, // normally user typed comment will be much slower - ECHO: 2, - NORMAL: 1, - NULL: 0, - has(id, value) { - const existing = this._lock[id]; - let ret = this.NULL; - if (existing) { - ret = existing === value ? this.ECHO : this.NORMAL; - } - return ret; - }, - clear(id, delay) { - const previous = this._timer[id]; - if (previous) { - Meteor.clearTimeout(previous); - } - this._timer[id] = Meteor.setTimeout(() => this.unset(id), delay); - }, - set(id, value) { - const state = this.has(id, value); - let delay = this.normalDelay; - if (state === this.ECHO) { - delay = this.echoDelay; - } - if (!value) { - // user commented, we set a lock - value = 1; - } - this._lock[id] = value; - this.clear(id, delay); // always auto reset the locker after delay - }, - unset(id) { - delete this._lock[id]; - }, -}; + const Lock = { + _lock: {}, + _timer: {}, + echoDelay: 500, // echo should be happening much faster + normalDelay: 1e3, // normally user typed comment will be much slower + ECHO: 2, + NORMAL: 1, + NULL: 0, + has(id, value) { + const existing = this._lock[id]; + let ret = this.NULL; + if (existing) { + ret = existing === value ? this.ECHO : this.NORMAL; + } + return ret; + }, + clear(id, delay) { + const previous = this._timer[id]; + if (previous) { + Meteor.clearTimeout(previous); + } + this._timer[id] = Meteor.setTimeout(() => this.unset(id), delay); + }, + set(id, value) { + const state = this.has(id, value); + let delay = this.normalDelay; + if (state === this.ECHO) { + delay = this.echoDelay; + } + if (!value) { + // user commented, we set a lock + value = 1; + } + this._lock[id] = value; + this.clear(id, delay); // always auto reset the locker after delay + }, + unset(id) { + delete this._lock[id]; + }, + }; -const webhooksAtbts = (process.env.WEBHOOKS_ATTRIBUTES && - process.env.WEBHOOKS_ATTRIBUTES.split(',')) || [ - 'cardId', - 'listId', - 'oldListId', - 'boardId', - 'comment', - 'user', - 'card', - 'commentId', - 'swimlaneId', -]; -const responseFunc = data => { - const paramCommentId = data.commentId; - const paramCardId = data.cardId; - const paramBoardId = data.boardId; - const newComment = data.comment; - if (paramCardId && paramBoardId && newComment) { - // only process data with the cardid, boardid and comment text, TODO can expand other functions here to react on returned data - const comment = CardComments.findOne({ - _id: paramCommentId, - cardId: paramCardId, - boardId: paramBoardId, - }); - const board = Boards.findOne(paramBoardId); - const card = Cards.findOne(paramCardId); - if (board && card) { - if (comment) { - Lock.set(comment._id, newComment); - CardComments.direct.update(comment._id, { - $set: { + const webhooksAtbts = (process.env.WEBHOOKS_ATTRIBUTES && + process.env.WEBHOOKS_ATTRIBUTES.split(',')) || [ + 'cardId', + 'listId', + 'oldListId', + 'boardId', + 'comment', + 'user', + 'card', + 'commentId', + 'swimlaneId', + ]; + const responseFunc = data => { + const paramCommentId = data.commentId; + const paramCardId = data.cardId; + const paramBoardId = data.boardId; + const newComment = data.comment; + if (paramCardId && paramBoardId && newComment) { + // only process data with the cardid, boardid and comment text, TODO can expand other functions here to react on returned data + const comment = CardComments.findOne({ + _id: paramCommentId, + cardId: paramCardId, + boardId: paramBoardId, + }); + const board = Boards.findOne(paramBoardId); + const card = Cards.findOne(paramCardId); + if (board && card) { + if (comment) { + Lock.set(comment._id, newComment); + CardComments.direct.update(comment._id, { + $set: { + text: newComment, + }, + }); + } + } else { + const userId = data.userId; + if (userId) { + const inserted = CardComments.direct.insert({ text: newComment, - }, - }); - } - } else { - const userId = data.userId; - if (userId) { - const inserted = CardComments.direct.insert({ - text: newComment, - userId, - cardId, - boardId, - }); - Lock.set(inserted._id, newComment); + userId, + cardId, + boardId, + }); + Lock.set(inserted._id, newComment); + } } } - } -}; -Meteor.methods({ - outgoingWebhooks(integration, description, params) { - check(integration, Object); - check(description, String); - check(params, Object); - this.unblock(); + }; + Meteor.methods({ + outgoingWebhooks(integration, description, params) { + if (Meteor.user()) { + check(integration, Object); + check(description, String); + check(params, Object); + this.unblock(); - // label activity did not work yet, see wekan/models/activities.js - const quoteParams = _.clone(params); - const clonedParams = _.clone(params); - [ - 'card', - 'list', - 'oldList', - 'board', - 'oldBoard', - 'comment', - 'checklist', - 'swimlane', - 'oldSwimlane', - 'label', - 'attachment', - ].forEach(key => { - if (quoteParams[key]) quoteParams[key] = `"${params[key]}"`; - }); + // label activity did not work yet, see wekan/models/activities.js + const quoteParams = _.clone(params); + const clonedParams = _.clone(params); + [ + 'card', + 'list', + 'oldList', + 'board', + 'oldBoard', + 'comment', + 'checklist', + 'swimlane', + 'oldSwimlane', + 'label', + 'attachment', + ].forEach(key => { + if (quoteParams[key]) quoteParams[key] = `"${params[key]}"`; + }); - const userId = params.userId ? params.userId : integrations[0].userId; - const user = Users.findOne(userId); - const text = `${params.user} ${TAPi18n.__( - description, - quoteParams, - user.getLanguage(), - )}\n${params.url}`; + const userId = params.userId ? params.userId : integrations[0].userId; + const user = Users.findOne(userId); + const text = `${params.user} ${TAPi18n.__( + description, + quoteParams, + user.getLanguage(), + )}\n${params.url}`; - if (text.length === 0) return; + if (text.length === 0) return; - const value = { - text: `${text}`, - }; + const value = { + text: `${text}`, + }; - webhooksAtbts.forEach(key => { - if (params[key]) value[key] = params[key]; - }); - value.description = description; - //integrations.forEach(integration => { - const is2way = integration.type === Integrations.Const.TWOWAY; - const token = integration.token || ''; - const headers = { - 'Content-Type': 'application/json', - }; - if (token) headers['X-Wekan-Token'] = token; - const options = { - headers, - data: is2way ? { description, ...clonedParams } : value, - }; - const url = integration.url; - if (is2way) { - const cid = params.commentId; - const comment = params.comment; - const lockState = cid && Lock.has(cid, comment); - if (cid && lockState !== Lock.NULL) { - // it's a comment and there is a previous lock - return; - } else if (cid) { - Lock.set(cid, comment); // set a lock here - } - } - const response = postCatchError(url, options); + webhooksAtbts.forEach(key => { + if (params[key]) value[key] = params[key]; + }); + value.description = description; + //integrations.forEach(integration => { + const is2way = integration.type === Integrations.Const.TWOWAY; + const token = integration.token || ''; + const headers = { + 'Content-Type': 'application/json', + }; + if (token) headers['X-Wekan-Token'] = token; + const options = { + headers, + data: is2way ? { description, ...clonedParams } : value, + }; - if ( - response && - response.statusCode && - response.statusCode >= 200 && - response.statusCode < 300 - ) { - if (is2way) { - const data = response.data; // only an JSON encoded response will be actioned - if (data) { - try { - responseFunc(data); - } catch (e) { - throw new Meteor.Error('error-process-data'); + if (!Integrations.findOne({ url: integration.url })) return; + + const url = integration.url; + + if (is2way) { + const cid = params.commentId; + const comment = params.comment; + const lockState = cid && Lock.has(cid, comment); + if (cid && lockState !== Lock.NULL) { + // it's a comment and there is a previous lock + return; + } else if (cid) { + Lock.set(cid, comment); // set a lock here } } + const response = postCatchError(url, options); + + if ( + response && + response.statusCode && + response.statusCode >= 200 && + response.statusCode < 300 + ) { + if (is2way) { + const data = response.data; // only an JSON encoded response will be actioned + if (data) { + try { + responseFunc(data); + } catch (e) { + throw new Meteor.Error('error-process-data'); + } + } + } + return response; // eslint-disable-line consistent-return + } else { + throw new Meteor.Error('error-invalid-webhook-response'); + } } - return response; // eslint-disable-line consistent-return - } else { - throw new Meteor.Error('error-invalid-webhook-response'); - } - //}); - }, -}); + }, + }); +} diff --git a/server/notifications/profile.js b/server/notifications/profile.js index 6d9c7018..608931cf 100644 --- a/server/notifications/profile.js +++ b/server/notifications/profile.js @@ -1,9 +1,5 @@ Meteor.startup(() => { - // XXX: add activity id to profile.notifications, - // it can be displayed and rendered on web or mobile UI - // will uncomment the following code once UI implemented - // - // Notifications.subscribe('profile', (user, title, description, params) => { - // user.addNotification(params.activityId); - // }); + Notifications.subscribe('profile', (user, title, description, params) => { + user.addNotification(params.activityId); + }); }); diff --git a/server/publications/boards.js b/server/publications/boards.js index 79e578b8..ae82d28c 100644 --- a/server/publications/boards.js +++ b/server/publications/boards.js @@ -18,7 +18,7 @@ Meteor.publish('boards', function() { archived: false, $or: [ { - _id: { $in: starredBoards }, + // _id: { $in: starredBoards }, // Commented out, to get a list of all public boards permission: 'public', }, { members: { $elemMatch: { userId, isActive: true } } }, @@ -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 })); @@ -192,6 +195,7 @@ Meteor.publishRelations('board', function(boardId, isArchived) { username: 1, 'profile.fullname': 1, 'profile.avatarUrl': 1, + 'profile.initials': 1, }, }, ), diff --git a/server/publications/notifications.js b/server/publications/notifications.js new file mode 100644 index 00000000..bc55a37c --- /dev/null +++ b/server/publications/notifications.js @@ -0,0 +1,101 @@ +// We use these when displaying notifications in the notificationsDrawer + +// gets all activities associated with the current user +Meteor.publish('notificationActivities', () => { + return activities(); +}); + +// gets all attachments associated with activities associated with the current user +Meteor.publish('notificationAttachments', function() { + return Attachments.find({ + _id: { + $in: activities() + .map(v => v.attachmentId) + .filter(v => !!v), + }, + }); +}); + +// gets all cards associated with activities associated with the current user +Meteor.publish('notificationCards', function() { + return Cards.find({ + _id: { + $in: activities() + .map(v => v.cardId) + .filter(v => !!v), + }, + }); +}); + +// gets all checklistItems associated with activities associated with the current user +Meteor.publish('notificationChecklistItems', function() { + return ChecklistItems.find({ + _id: { + $in: activities() + .map(v => v.checklistItemId) + .filter(v => !!v), + }, + }); +}); + +// gets all checklists associated with activities associated with the current user +Meteor.publish('notificationChecklists', function() { + return Checklists.find({ + _id: { + $in: activities() + .map(v => v.checklistId) + .filter(v => !!v), + }, + }); +}); + +// gets all comments associated with activities associated with the current user +Meteor.publish('notificationComments', function() { + return CardComments.find({ + _id: { + $in: activities() + .map(v => v.commentId) + .filter(v => !!v), + }, + }); +}); + +// gets all lists associated with activities associated with the current user +Meteor.publish('notificationLists', function() { + return Lists.find({ + _id: { + $in: activities() + .map(v => v.listId) + .filter(v => !!v), + }, + }); +}); + +// gets all swimlanes associated with activities associated with the current user +Meteor.publish('notificationSwimlanes', function() { + return Swimlanes.find({ + _id: { + $in: activities() + .map(v => v.swimlaneId) + .filter(v => !!v), + }, + }); +}); + +// gets all users associated with activities associated with the current user +Meteor.publish('notificationUsers', function() { + return Users.find({ + _id: { + $in: activities() + .map(v => v.userId) + .filter(v => !!v), + }, + }); +}); + +function activities() { + const notifications = Meteor.user().profile.notifications || []; + return Activities.find({ + _id: { $in: notifications.map(v => v.activity) }, + }); +} diff --git a/server/publications/users.js b/server/publications/users.js index 59411ca0..c04f8c5c 100644 --- a/server/publications/users.js +++ b/server/publications/users.js @@ -6,6 +6,7 @@ Meteor.publish('user-miniprofile', function(userId) { username: 1, 'profile.fullname': 1, 'profile.avatarUrl': 1, + 'profile.initials': 1, }, }); }); diff --git a/server/scroll.js b/server/scroll.js new file mode 100644 index 00000000..c2cc797e --- /dev/null +++ b/server/scroll.js @@ -0,0 +1,15 @@ +Meteor.startup(() => { + // Mouse Scroll Intertia, issue #2949. Integer. + if (process.env.SCROLLINERTIA !== '0') { + Meteor.settings.public.SCROLLINERTIA = process.env.SCROLLINERTIA; + } else { + Meteor.settings.public.SCROLLINERTIA = 0; + } + + // Mouse Scroll Amount, issue #2949. "auto" or Integer. + if (process.env.SCROLLAMOUNT !== 'auto') { + Meteor.settings.public.SCROLLAMOUNT = process.env.SCROLLAMOUNT; + } else { + Meteor.settings.public.SCROLLAMOUNT = 'auto'; + } +}); diff --git a/server/statistics.js b/server/statistics.js index 997fd86f..0ead840f 100644 --- a/server/statistics.js +++ b/server/statistics.js @@ -1,68 +1,76 @@ import { MongoInternals } from 'meteor/mongo'; -Meteor.methods({ - getStatistics() { - const os = require('os'); - const pjson = require('/package.json'); - const statistics = {}; - let wekanVersion = pjson.version; - wekanVersion = wekanVersion.replace('v', ''); - statistics.version = wekanVersion; - statistics.os = { - type: os.type(), - platform: os.platform(), - arch: os.arch(), - release: os.release(), - uptime: os.uptime(), - loadavg: os.loadavg(), - totalmem: os.totalmem(), - freemem: os.freemem(), - cpus: os.cpus(), - }; - let nodeVersion = process.version; - nodeVersion = nodeVersion.replace('v', ''); - statistics.process = { - nodeVersion, - pid: process.pid, - uptime: process.uptime(), - }; - // Remove beginning of Meteor release text METEOR@ - let meteorVersion = Meteor.release; - meteorVersion = meteorVersion.replace('METEOR@', ''); - statistics.meteor = { - meteorVersion, - }; - // Thanks to RocketChat for MongoDB version detection ! - // https://github.com/RocketChat/Rocket.Chat/blob/develop/app/utils/server/functions/getMongoInfo.js - let mongoVersion; - let mongoStorageEngine; - let mongoOplogEnabled; - try { - const { mongo } = MongoInternals.defaultRemoteCollectionDriver(); - oplogEnabled = Boolean( - mongo._oplogHandle && mongo._oplogHandle.onOplogEntry, - ); - const { version, storageEngine } = Promise.await( - mongo.db.command({ serverStatus: 1 }), - ); - mongoVersion = version; - mongoStorageEngine = storageEngine.name; - mongoOplogEnabled = oplogEnabled; - } catch (e) { - try { - const { version } = Promise.await(mongo.db.command({ buildinfo: 1 })); - mongoVersion = version; - mongoStorageEngine = 'unknown'; - } catch (e) { - mongoVersion = 'unknown'; - mongoStorageEngine = 'unknown'; +if (Meteor.isServer) { + Meteor.methods({ + getStatistics() { + if (Meteor.user() && Meteor.user().isAdmin) { + const os = require('os'); + const pjson = require('/package.json'); + const statistics = {}; + let wekanVersion = pjson.version; + wekanVersion = wekanVersion.replace('v', ''); + statistics.version = wekanVersion; + statistics.os = { + type: os.type(), + platform: os.platform(), + arch: os.arch(), + release: os.release(), + uptime: os.uptime(), + loadavg: os.loadavg(), + totalmem: os.totalmem(), + freemem: os.freemem(), + cpus: os.cpus(), + }; + let nodeVersion = process.version; + nodeVersion = nodeVersion.replace('v', ''); + statistics.process = { + nodeVersion, + pid: process.pid, + uptime: process.uptime(), + }; + // Remove beginning of Meteor release text METEOR@ + let meteorVersion = Meteor.release; + meteorVersion = meteorVersion.replace('METEOR@', ''); + statistics.meteor = { + meteorVersion, + }; + // Thanks to RocketChat for MongoDB version detection ! + // https://github.com/RocketChat/Rocket.Chat/blob/develop/app/utils/server/functions/getMongoInfo.js + let mongoVersion; + let mongoStorageEngine; + let mongoOplogEnabled; + try { + const { mongo } = MongoInternals.defaultRemoteCollectionDriver(); + oplogEnabled = Boolean( + mongo._oplogHandle && mongo._oplogHandle.onOplogEntry, + ); + const { version, storageEngine } = Promise.await( + mongo.db.command({ serverStatus: 1 }), + ); + mongoVersion = version; + mongoStorageEngine = storageEngine.name; + mongoOplogEnabled = oplogEnabled; + } catch (e) { + try { + const { version } = Promise.await( + mongo.db.command({ buildinfo: 1 }), + ); + mongoVersion = version; + mongoStorageEngine = 'unknown'; + } catch (e) { + mongoVersion = 'unknown'; + mongoStorageEngine = 'unknown'; + } + } + statistics.mongo = { + mongoVersion, + mongoStorageEngine, + mongoOplogEnabled, + }; + return statistics; + } else { + return false; } - } - statistics.mongo = { - mongoVersion, - mongoStorageEngine, - mongoOplogEnabled, - }; - return statistics; - }, -}); + }, + }); +} diff --git a/snap-src/bin/config b/snap-src/bin/config index a4c23a42..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 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" +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'" @@ -104,6 +104,10 @@ DESCRIPTION_IMAGE_COMPRESS_RATIO="Image compress ratio: Allow to shrink attached DEFAULT_IMAGE_COMPRESS_RATIO="" KEY_IMAGE_COMPRESS_RATIO="image-compress-ratio" +DESCRIPTION_NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE="Number of days after a notification is read before we remove it. Default: 2." +DEFAULT_NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE="" +KEY_NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE="notification-tray-after-read-days-before-remove" + DESCRIPTION_BIGEVENTS_PATTERN="Big events pattern: Notify always due etc regardless of notification settings. Default: NONE, All: received|start|due|end, Disabled: NONE" DEFAULT_BIGEVENTS_PATTERN="NONE" KEY_BIGEVENTS_PATTERN="bigevents-pattern" @@ -338,19 +342,19 @@ DESCRIPTION_LDAP_GROUP_FILTER_OBJECTCLASS="The object class for filtering" DEFAULT_LDAP_GROUP_FILTER_OBJECTCLASS="" KEY_LDAP_GROUP_FILTER_OBJECTCLASS="ldap-group-filter-objectclass" -DESCRIPTION_LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE="ldap-group-filter-id-attribute. Default: ''" +DESCRIPTION_LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE="The attribute of a group identifying it. Default: ''" DEFAULT_LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE="" KEY_LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE="ldap-group-filter-id-attribute" -DESCRIPTION_LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE="ldap-group-filter-member-attibute. Default: ''" +DESCRIPTION_LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE="The attribute inside a group object listing its members. Default: ''" DEFAULT_LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE="" KEY_LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE="ldap-group-filter-member-attribute" -DESCRIPTION_LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT="ldap-group-filter-group-member-format. Default: ''" +DESCRIPTION_LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT="The format of the value of ldap-group-filter-member-attribute (e.g. 'dn' if the user's dn ist saved as value into the attribute). Default: ''" DEFAULT_LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT="" KEY_LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT="ldap-group-filter-member-format" -DESCRIPTION_LDAP_GROUP_FILTER_GROUP_NAME="ldap-group-filter-group-name. Default: ''" +DESCRIPTION_LDAP_GROUP_FILTER_GROUP_NAME="The group name (id) that matches all users. Default: ''" DEFAULT_LDAP_GROUP_FILTER_GROUP_NAME="" KEY_LDAP_GROUP_FILTER_GROUP_NAME="ldap-group-filter-group-name" @@ -449,3 +453,16 @@ KEY_LOGOUT_ON_MINUTES="logout-on-minutes" DESCRIPTION_DEFAULT_AUTHENTICATION_METHOD="The default authentication method used if a user does not exist to create and authenticate. Method can be password or ldap." DEFAULT_DEFAULT_AUTHENTICATION_METHOD="" KEY_DEFAULT_AUTHENTICATION_METHOD="default-authentication-method" + +DESCRIPTION_SCROLLINERTIA="Mousewheel scroll inertia, issue #2949. Default: 0" +DEFAULT_SCROLLINERTIA="0" +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 5d222b5d..dfcf40a5 100755 --- a/snap-src/bin/wekan-help +++ b/snap-src/bin/wekan-help @@ -69,6 +69,18 @@ echo -e "\t$ snap set $SNAP_NAME richer-card-comment-editor='true'" echo -e "Disabled:" echo -e "\t$ snap set $SNAP_NAME richer-card-comment-editor='false'" echo -e "\n" +echo -e "Mousewheel scroll inertia. Default: 0. https://github.com/wekan/wekan/issues/2949" +echo -e "Enable:" +echo -e "\t$ snap set $SNAP_NAME scrollinertia='950'" +echo -e "Disable, default:" +echo -e "\t$ snap set $SNAP_NAME scrollinertia='0'" +echo -e "\n" +echo -e "Mousewheel scroll amount. Default: 'auto'. Allowed: 'auto' or Integer number. https://github.com/wekan/wekan/issues/2949" +echo -e "Enable:" +echo -e "\t$ snap set $SNAP_NAME scrollamount='950'" +echo -e "Disable, default:" +echo -e "\t$ snap set $SNAP_NAME scrollamount='auto'" +echo -e "\n" echo -e "Card opened, send webhook message. Default: false https://github.com/wekan/wekan/issues/2518" echo -e "Enable:" echo -e "\t$ snap set $SNAP_NAME card-opened-webhook-enabled='true'" @@ -93,6 +105,11 @@ echo -e "\t$ snap set $SNAP_NAME attachments-store-path='/var/snap/wekan/common/ echo -e "Disabled:" echo -e "\t$ snap set $SNAP_NAME attachments-store-path=''" echo -e "\n" +echo -e "NOTIFICATION TRAY AFTER READ DAYS BEFORE REMOVE https://github.com/wekan/wekan/pull/2998" +echo -e "Number of days after a notification is read before we remove it. Default: 2." +echo -e "Default:" +echo -e "\t$ snap set $SNAP_NAME notification-tray-after-read-days-before-remove='2'" +echo -e "\n" echo -e "BIGEVENTS DUE ETC NOTIFICATIONS https://github.com/wekan/wekan/pull/2541" echo -e "Big events pattern: Notify always due etc regardless of notification settings. Default: due, All: received|start|due|end, Disabled: NONE" echo -e "Default:" @@ -344,7 +361,7 @@ echo -e "Ldap Search Size Limit." echo -e "The limit number of entries (0=unlimited):" echo -e "\t$ snap set $SNAP_NAME ldap-search-size-limit='12345'" echo -e "\n" -echo -e "Ldap Group Filter Enable." +echo -e "Ldap Group Filter Enable. Note the authenticated ldap user must be able to query all relevant group data with own login data from ldap." echo -e "Enable group filtering:" echo -e "\t$ snap set $SNAP_NAME ldap-group-filter-enable='true'" echo -e "\n" @@ -444,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 254c84f7..378a2202 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -81,7 +81,7 @@ parts: wekan: source: . plugin: nodejs - node-engine: 12.15.0 + node-engine: 12.16.3 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 bbedee35..17bef18e 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.15.0 +NODE_VERSION=v12.16.3 #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 718025ed..272e963e 100755 --- a/start-wekan.bat +++ b/start-wekan.bat @@ -25,6 +25,11 @@ REM # ==== RICH TEXT EDITOR IN CARD COMMENTS ==== REM # https://github.com/wekan/wekan/pull/2560 SET RICHER_CARD_COMMENT_EDITOR=false +REM # ==== MOUSE SCROLL ==== +REM # https://github.com/wekan/wekan/issues/2949 +SET SCROLLINERTIA=0 +SET SCROLLAMOUNT=auto + REM # ==== CARD OPENED, SEND WEBHOOK MESSAGE ==== SET CARD_OPENED_WEBHOOK_ENABLED=false @@ -43,6 +48,11 @@ REM SET ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE=3 REM SET ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60 REM SET ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15 +REM # ==== NOTIFICATION TRAY AFTER READ DAYS BEFORE REMOVE ===== +REM # Number of days after a notification is read before we remove it. +REM # Default: 2 +REM SET NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE=2 + REM # ==== BIGEVENTS DUE ETC NOTIFICATIONS ===== REM # https://github.com/wekan/wekan/pull/2541 REM # Introduced a system env var BIGEVENTS_PATTERN default as "NONE", @@ -353,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 8dade1cc..f3fb18e9 100755 --- a/start-wekan.sh +++ b/start-wekan.sh @@ -7,7 +7,7 @@ # Debug OIDC OAuth2 etc. #export DEBUG=true #--------------------------------------------- - export MONGO_URL='mongodb://127.0.0.1:27018/wekan' + export MONGO_URL='mongodb://127.0.0.1:27017/wekan' #--------------------------------------------- # Production: https://example.com/wekan # Local: http://localhost:2000 @@ -41,6 +41,11 @@ # https://github.com/wekan/wekan/pull/2560 export RICHER_CARD_COMMENT_EDITOR=false #--------------------------------------------------------------- + # ==== MOUSE SCROLL ==== + # https://github.com/wekan/wekan/issues/2949 + export SCROLLINERTIA=0 + export SCROLLAMOUNT=auto + #--------------------------------------------------------------- # ==== CARD OPENED, SEND WEBHOOK MESSAGE ==== export CARD_OPENED_WEBHOOK_ENABLED=false #--------------------------------------------------------------- @@ -49,6 +54,11 @@ #export MAX_IMAGE_PIXEL=1024 #export IMAGE_COMPRESS_RATIO=80 #--------------------------------------------------------------- + # ==== NOTIFICATION TRAY AFTER READ DAYS BEFORE REMOVE ===== + # Number of days after a notification is read before we remove it. + # Default: 2 + #- NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE=2 + #--------------------------------------------------------------- # ==== BIGEVENTS DUE ETC NOTIFICATIONS ===== # https://github.com/wekan/wekan/pull/2541 # Introduced a system env var BIGEVENTS_PATTERN default as "NONE", @@ -352,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 01a39fc0..793a9b4f 100644 --- a/torodb-postgresql/docker-compose.yml +++ b/torodb-postgresql/docker-compose.yml @@ -230,6 +230,11 @@ services: # https://github.com/wekan/wekan/pull/2560 - RICHER_CARD_COMMENT_EDITOR=false #--------------------------------------------------------------- + # ==== MOUSE SCROLL ==== + # https://github.com/wekan/wekan/issues/2949 + - SCROLLINERTIA=0 + - SCROLLAMOUNT=auto + #--------------------------------------------------------------- # ==== CARD OPENED, SEND WEBHOOK MESSAGE ==== # https://github.com/wekan/wekan/issues/2518 - CARD_OPENED_WEBHOOK_ENABLED=false @@ -239,6 +244,11 @@ services: #-MAX_IMAGE_PIXEL=1024 #-IMAGE_COMPRESS_RATIO=80 #--------------------------------------------------------------- + # ==== NOTIFICATION TRAY AFTER READ DAYS BEFORE REMOVE ===== + # Number of days after a notification is read before we remove it. + # Default: 2 + #- NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE=2 + #--------------------------------------------------------------- # ==== BIGEVENTS DUE ETC NOTIFICATIONS ===== # https://github.com/wekan/wekan/pull/2541 # Introduced a system env var BIGEVENTS_PATTERN default as "NONE", @@ -441,7 +451,7 @@ services: # example : LDAP_SEARCH_SIZE_LIMIT=12345 #- LDAP_SEARCH_SIZE_LIMIT=0 # - # LDAP_GROUP_FILTER_ENABLE : Enable group filtering + # LDAP_GROUP_FILTER_ENABLE : Enable group filtering. Note the authenticated ldap user must be able to query all relevant group data with own login data from ldap # example : LDAP_GROUP_FILTER_ENABLE=true #- LDAP_GROUP_FILTER_ENABLE=false # @@ -449,20 +459,20 @@ services: # example : LDAP_GROUP_FILTER_OBJECTCLASS=group #- LDAP_GROUP_FILTER_OBJECTCLASS= # - # LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE : - # example : + # LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE : The attribute of a group identifying it + # example : LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE=cn #- LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE= # - # LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE : - # example : + # LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE : The attribute inside a group object listing its members + # example : member #- LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE= # - # LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT : - # example : + # LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT : The format of the value of LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE + # example : dn #- LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT= # - # LDAP_GROUP_FILTER_GROUP_NAME : - # example : + # LDAP_GROUP_FILTER_GROUP_NAME : The group name (id) that matches all users + # example : wekan_users #- LDAP_GROUP_FILTER_GROUP_NAME= # # LDAP_UNIQUE_IDENTIFIER_FIELD : This field is sometimes class GUID (Globally Unique Identifier) @@ -517,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 |