diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 0000000000..ebd18f91fd
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,29 @@
+# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
+# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
+
+name: Node.js CI
+
+on:
+ push:
+ branches: [ main ]
+ pull_request:
+ branches: [ main ]
+
+jobs:
+ test:
+
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix:
+ node-version: [14.x]
+ # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
+
+ steps:
+ - uses: actions/checkout@v2
+ - name: Use Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v1
+ with:
+ node-version: ${{ matrix.node-version }}
+ - run: npm ci
+ - run: npm test
diff --git a/Gruntfile.js b/Gruntfile.js
index dae05b1038..f715c31d72 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -12,6 +12,8 @@ const fse = require('fs-extra');
const git = require('simple-git');
const pkg = require('./package.json');
const update_i18n = require('./updatei18nFiles.js');
+const mozjpeg = require('imagemin-mozjpeg');
+const pngquant = require('imagemin-pngquant');
module.exports = function(grunt) {
require('time-grunt')(grunt);
@@ -151,7 +153,8 @@ module.exports = function(grunt) {
imagemin: {
images: {
options: {
- optimizationLevel: 2
+ optimizationLevel: 2,
+ use: [mozjpeg({quality: 70}), pngquant()] //plugins for jpeg & png image compression
},
files: [{
expand: true,
@@ -502,4 +505,4 @@ module.exports = function(grunt) {
// runs with just grunt command
grunt.registerTask('default', ['build']);
-};
\ No newline at end of file
+};
diff --git a/contributor_docs/automated_reference_update.md b/contributor_docs/automated_reference_update.md
index f9eceae8bb..41191cabc8 100644
--- a/contributor_docs/automated_reference_update.md
+++ b/contributor_docs/automated_reference_update.md
@@ -1,4 +1,4 @@
-##Automated Reference update
+## Automated Reference update
The p5.js documentation needs to be updated every time a new p5.js release gets published.
This process is done by the `update-enJSON` [grunt task](https://github.com/processing/p5.js-website/blob/main/Gruntfile.js).
@@ -16,6 +16,6 @@ Every time a new p5.js release gets published, the update-p5jswebsite workflow (
When the update-documentation workflow commits the updated Reference files, the commit message will show both the p5.js release tag and the commit's sha.
-###Notes:
+### Notes:
- For the repository_dispatch event of the update-p5jswebsite workflow, [this GitHub action](https://github.com/peter-evans/repository-dispatch) was used.
- In order for the update-p5jswebsite workflow to trigger the update-documentation workflow, **it requires a repo scoped Personal Access Token created on a user with write access to the p5.js-website repository**. The Personal Access Token needs to be stored as secret in the p5.js repository.
diff --git a/i18n-tracking.yml b/i18n-tracking.yml
index 3384b5e9f7..0ea836b188 100644
--- a/i18n-tracking.yml
+++ b/i18n-tracking.yml
@@ -1,5 +1,10 @@
es:
src/data/en.yml:
+ line 162: ' library in your html. To learn more visit '
+ line 163: ' library in your html. To learn more visit '
+ line 164: ' your-first-sketch7'
+ line 97: ' get-started-button'
+ line 96: ' get-started7'
line 114: ' environment15'
line 113: ' environment14'
line 115: ' environment16'
@@ -149,7 +154,6 @@ es:
line 244: ' download-title'
line 245: ' hosted-title'
line 50: footerxh1
- line 97: ' p1xh1'
line 98: ' p1x1'
line 99: ' p5.js is a JavaScript library for creative coding, with a focus on making'
line 100: ' coding accessible and inclusive for artists, designers, educators,'
@@ -161,10 +165,8 @@ es:
line 134: ' p4xp4'
line 141: ' project-a-2-5-phuong'
line 144: ' project-a-2-7-phuong'
- line 163: ' teach-case1-content1'
line 64: ' color-p3x3'
line 70: ' color-rgb-p1x1'
- line 164: ' teach-case1-content1-1'
line 87: ' color-custom-ranges-p2x1'
line 24: footer1
line 25: footer2
@@ -184,7 +186,6 @@ es:
line 159: ' processing-transition1'
line 160: ' processing-transition2'
line 161: ' processing-transition3'
- line 162: ' processing-transition4'
line 357: ' link-2-chung'
line 358: ' link-3-chung'
line 359: ' project-a-1-1-chung'
@@ -289,7 +290,6 @@ es:
line 52: footer2
line 53: footer3
line 58: tagline3
- line 96: ' start-creating'
line 101: ' beginners, and anyone else! p5.js is free and open-source because we believe'
line 106: ' think of your whole browser page as your sketch, including HTML5 objects for'
line 107: ' text, input, video, webcam, and sound.'
@@ -1817,8 +1817,16 @@ es:
line 2555: ' coding concepts.'
line 2556: ' teach-case12-content5-1'
line 2557: ' teach-case12-content5-2'
+ line 598: ' color-custom-ranges-li1x2'
+ line 601: ' color-custom-ranges-li2x2'
+ line 604: ' color-custom-ranges-li3x2'
ko:
src/data/en.yml:
+ line 162: ' library in your html. To learn more visit '
+ line 163: ' library in your html. To learn more visit '
+ line 164: ' your-first-sketch7'
+ line 97: ' get-started-button'
+ line 96: ' get-started7'
line 114: ' environment15'
line 113: ' environment14'
line 115: ' environment16'
@@ -1969,7 +1977,6 @@ ko:
line 244: ' download-title'
line 245: ' hosted-title'
line 50: footerxh1
- line 97: ' p1xh1'
line 98: ' p1x1'
line 99: ' p5.js is a JavaScript library for creative coding, with a focus on making'
line 100: ' coding accessible and inclusive for artists, designers, educators,'
@@ -1981,10 +1988,8 @@ ko:
line 134: ' p4xp4'
line 141: ' project-a-2-5-phuong'
line 144: ' project-a-2-7-phuong'
- line 163: ' teach-case1-content1'
line 64: ' color-p3x3'
line 70: ' color-rgb-p1x1'
- line 164: ' teach-case1-content1-1'
line 87: ' color-custom-ranges-p2x1'
line 24: footer1
line 25: footer2
@@ -2004,7 +2009,6 @@ ko:
line 159: ' processing-transition1'
line 160: ' processing-transition2'
line 161: ' processing-transition3'
- line 162: ' processing-transition4'
line 357: ' link-2-chung'
line 358: ' link-3-chung'
line 359: ' project-a-1-1-chung'
@@ -2109,7 +2113,6 @@ ko:
line 52: footer2
line 53: footer3
line 58: tagline3
- line 96: ' start-creating'
line 101: ' beginners, and anyone else! p5.js is free and open-source because we believe'
line 106: ' think of your whole browser page as your sketch, including HTML5 objects for'
line 107: ' text, input, video, webcam, and sound.'
@@ -3636,8 +3639,16 @@ ko:
line 2555: ' coding concepts.'
line 2556: ' teach-case12-content5-1'
line 2557: ' teach-case12-content5-2'
+ line 598: ' color-custom-ranges-li1x2'
+ line 601: ' color-custom-ranges-li2x2'
+ line 604: ' color-custom-ranges-li3x2'
zh-Hans:
src/data/en.yml:
+ line 162: ' library in your html. To learn more visit '
+ line 163: ' library in your html. To learn more visit '
+ line 164: ' your-first-sketch7'
+ line 97: ' get-started-button'
+ line 96: ' get-started7'
line 114: ' environment15'
line 113: ' environment14'
line 115: ' environment16'
@@ -3787,7 +3798,6 @@ zh-Hans:
line 244: ' download-title'
line 245: ' hosted-title'
line 50: footerxh1
- line 97: ' p1xh1'
line 98: ' p1x1'
line 99: ' p5.js is a JavaScript library for creative coding, with a focus on making'
line 100: ' coding accessible and inclusive for artists, designers, educators,'
@@ -3799,10 +3809,8 @@ zh-Hans:
line 134: ' p4xp4'
line 141: ' project-a-2-5-phuong'
line 144: ' project-a-2-7-phuong'
- line 163: ' teach-case1-content1'
line 64: ' color-p3x3'
line 70: ' color-rgb-p1x1'
- line 164: ' teach-case1-content1-1'
line 87: ' color-custom-ranges-p2x1'
line 24: footer1
line 25: footer2
@@ -3822,7 +3830,6 @@ zh-Hans:
line 159: ' processing-transition1'
line 160: ' processing-transition2'
line 161: ' processing-transition3'
- line 162: ' processing-transition4'
line 357: ' link-2-chung'
line 358: ' link-3-chung'
line 359: ' project-a-1-1-chung'
@@ -3927,7 +3934,6 @@ zh-Hans:
line 52: footer2
line 53: footer3
line 58: tagline3
- line 96: ' start-creating'
line 101: ' beginners, and anyone else! p5.js is free and open-source because we believe'
line 106: ' think of your whole browser page as your sketch, including HTML5 objects for'
line 107: ' text, input, video, webcam, and sound.'
@@ -5455,3 +5461,6 @@ zh-Hans:
line 2555: ' coding concepts.'
line 2556: ' teach-case12-content5-1'
line 2557: ' teach-case12-content5-2'
+ line 598: ' color-custom-ranges-li1x2'
+ line 601: ' color-custom-ranges-li2x2'
+ line 604: ' color-custom-ranges-li3x2'
diff --git a/package-lock.json b/package-lock.json
index 85ab5d5e1e..2d76bdc862 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -61,8 +61,7 @@
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz",
"integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==",
- "dev": true,
- "optional": true
+ "dev": true
},
"@types/events": {
"version": "3.0.0",
@@ -538,15 +537,13 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz",
"integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==",
- "dev": true,
- "optional": true
+ "dev": true
},
"archive-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz",
"integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=",
"dev": true,
- "optional": true,
"requires": {
"file-type": "^4.2.0"
},
@@ -555,8 +552,7 @@
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz",
"integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=",
- "dev": true,
- "optional": true
+ "dev": true
}
}
},
@@ -2586,7 +2582,6 @@
"resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz",
"integrity": "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==",
"dev": true,
- "optional": true,
"requires": {
"decompress": "^4.0.0",
"download": "^6.2.2",
@@ -2600,7 +2595,6 @@
"resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz",
"integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==",
"dev": true,
- "optional": true,
"requires": {
"execa": "^0.7.0",
"executable": "^4.1.0"
@@ -2611,7 +2605,6 @@
"resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz",
"integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==",
"dev": true,
- "optional": true,
"requires": {
"execa": "^1.0.0",
"find-versions": "^3.0.0"
@@ -2622,7 +2615,6 @@
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
"integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
"dev": true,
- "optional": true,
"requires": {
"nice-try": "^1.0.4",
"path-key": "^2.0.1",
@@ -2636,7 +2628,6 @@
"resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
"integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
"dev": true,
- "optional": true,
"requires": {
"cross-spawn": "^6.0.0",
"get-stream": "^4.0.0",
@@ -2652,7 +2643,6 @@
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
"integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
"dev": true,
- "optional": true,
"requires": {
"pump": "^3.0.0"
}
@@ -2662,7 +2652,6 @@
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"dev": true,
- "optional": true,
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
@@ -2675,7 +2664,6 @@
"resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz",
"integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==",
"dev": true,
- "optional": true,
"requires": {
"bin-version": "^3.0.0",
"semver": "^5.6.0",
@@ -2686,8 +2674,7 @@
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "optional": true
+ "dev": true
}
}
},
@@ -2696,7 +2683,6 @@
"resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz",
"integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==",
"dev": true,
- "optional": true,
"requires": {
"bin-check": "^4.1.0",
"bin-version-check": "^4.0.0",
@@ -2711,7 +2697,6 @@
"resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz",
"integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==",
"dev": true,
- "optional": true,
"requires": {
"archive-type": "^4.0.0",
"caw": "^2.0.1",
@@ -2731,8 +2716,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true,
- "optional": true
+ "dev": true
}
}
},
@@ -2740,15 +2724,13 @@
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz",
"integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==",
- "dev": true,
- "optional": true
+ "dev": true
},
"got": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz",
"integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==",
"dev": true,
- "optional": true,
"requires": {
"@sindresorhus/is": "^0.7.0",
"cacheable-request": "^2.1.1",
@@ -2773,8 +2755,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true,
- "optional": true
+ "dev": true
}
}
},
@@ -2782,15 +2763,13 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz",
"integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==",
- "dev": true,
- "optional": true
+ "dev": true
},
"p-event": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz",
"integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==",
"dev": true,
- "optional": true,
"requires": {
"p-timeout": "^2.0.1"
}
@@ -2800,7 +2779,6 @@
"resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz",
"integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==",
"dev": true,
- "optional": true,
"requires": {
"p-finally": "^1.0.0"
}
@@ -2809,22 +2787,19 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "dev": true,
- "optional": true
+ "dev": true
},
"prepend-http": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
"integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
- "dev": true,
- "optional": true
+ "dev": true
},
"url-parse-lax": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
"integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
"dev": true,
- "optional": true,
"requires": {
"prepend-http": "^2.0.0"
}
@@ -2999,7 +2974,6 @@
"resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz",
"integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=",
"dev": true,
- "optional": true,
"requires": {
"clone-response": "1.0.2",
"get-stream": "3.0.0",
@@ -3014,15 +2988,13 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
"integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=",
- "dev": true,
- "optional": true
+ "dev": true
},
"normalize-url": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz",
"integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==",
"dev": true,
- "optional": true,
"requires": {
"prepend-http": "^2.0.0",
"query-string": "^5.0.1",
@@ -3033,15 +3005,13 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
"integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
- "dev": true,
- "optional": true
+ "dev": true
},
"query-string": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz",
"integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==",
"dev": true,
- "optional": true,
"requires": {
"decode-uri-component": "^0.2.0",
"object-assign": "^4.1.0",
@@ -3053,7 +3023,6 @@
"resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz",
"integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=",
"dev": true,
- "optional": true,
"requires": {
"is-plain-obj": "^1.0.0"
}
@@ -3186,7 +3155,6 @@
"resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz",
"integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==",
"dev": true,
- "optional": true,
"requires": {
"get-proxy": "^2.0.0",
"isurl": "^1.0.0-alpha5",
@@ -3386,7 +3354,6 @@
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
"integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
"dev": true,
- "optional": true,
"requires": {
"mimic-response": "^1.0.0"
}
@@ -3539,7 +3506,6 @@
"resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
"integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
"dev": true,
- "optional": true,
"requires": {
"graceful-readlink": ">= 1.0.0"
}
@@ -3898,7 +3864,6 @@
"resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
"integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
"dev": true,
- "optional": true,
"requires": {
"ini": "^1.3.4",
"proto-list": "~1.2.1"
@@ -3933,15 +3898,13 @@
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz",
"integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=",
- "dev": true,
- "optional": true
+ "dev": true
},
"content-disposition": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
"integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
"dev": true,
- "optional": true,
"requires": {
"safe-buffer": "5.1.2"
}
@@ -4671,22 +4634,10 @@
}
},
"dateformat": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
- "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
- "dev": true,
- "requires": {
- "get-stdin": "^4.0.1",
- "meow": "^3.3.0"
- },
- "dependencies": {
- "get-stdin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
- "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
- "dev": true
- }
- }
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
+ "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
+ "dev": true
},
"debug": {
"version": "2.6.9",
@@ -4722,7 +4673,6 @@
"resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz",
"integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==",
"dev": true,
- "optional": true,
"requires": {
"decompress-tar": "^4.0.0",
"decompress-tarbz2": "^4.0.0",
@@ -4739,7 +4689,6 @@
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
"integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
"dev": true,
- "optional": true,
"requires": {
"mimic-response": "^1.0.0"
}
@@ -4749,7 +4698,6 @@
"resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz",
"integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==",
"dev": true,
- "optional": true,
"requires": {
"file-type": "^5.2.0",
"is-stream": "^1.1.0",
@@ -4760,8 +4708,7 @@
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
"integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
- "dev": true,
- "optional": true
+ "dev": true
}
}
},
@@ -4770,7 +4717,6 @@
"resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz",
"integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==",
"dev": true,
- "optional": true,
"requires": {
"decompress-tar": "^4.1.0",
"file-type": "^6.1.0",
@@ -4783,8 +4729,7 @@
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz",
"integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==",
- "dev": true,
- "optional": true
+ "dev": true
}
}
},
@@ -4793,7 +4738,6 @@
"resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz",
"integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==",
"dev": true,
- "optional": true,
"requires": {
"decompress-tar": "^4.1.1",
"file-type": "^5.2.0",
@@ -4804,8 +4748,7 @@
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
"integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
- "dev": true,
- "optional": true
+ "dev": true
}
}
},
@@ -4814,7 +4757,6 @@
"resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz",
"integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=",
"dev": true,
- "optional": true,
"requires": {
"file-type": "^3.8.0",
"get-stream": "^2.2.0",
@@ -4826,15 +4768,13 @@
"version": "3.9.0",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
"integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
- "dev": true,
- "optional": true
+ "dev": true
},
"get-stream": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
"integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=",
"dev": true,
- "optional": true,
"requires": {
"object-assign": "^4.0.1",
"pinkie-promise": "^2.0.0"
@@ -5133,7 +5073,6 @@
"resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz",
"integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==",
"dev": true,
- "optional": true,
"requires": {
"caw": "^2.0.0",
"content-disposition": "^0.5.2",
@@ -5152,15 +5091,13 @@
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
"integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
- "dev": true,
- "optional": true
+ "dev": true
},
"pify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true,
- "optional": true
+ "dev": true
}
}
},
@@ -5174,8 +5111,7 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
"integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
- "dev": true,
- "optional": true
+ "dev": true
},
"duplexify": {
"version": "3.6.0",
@@ -5787,7 +5723,6 @@
"resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
"integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
"dev": true,
- "optional": true,
"requires": {
"cross-spawn": "^5.0.1",
"get-stream": "^3.0.0",
@@ -5803,7 +5738,6 @@
"resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
"integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
"dev": true,
- "optional": true,
"requires": {
"pify": "^2.2.0"
}
@@ -6082,7 +6016,6 @@
"resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz",
"integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==",
"dev": true,
- "optional": true,
"requires": {
"mime-db": "^1.28.0"
}
@@ -6092,7 +6025,6 @@
"resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz",
"integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==",
"dev": true,
- "optional": true,
"requires": {
"ext-list": "^2.0.0",
"sort-keys-length": "^1.0.0"
@@ -6538,7 +6470,6 @@
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
"integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
"dev": true,
- "optional": true,
"requires": {
"pend": "~1.2.0"
}
@@ -6653,15 +6584,13 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
"integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=",
- "dev": true,
- "optional": true
+ "dev": true
},
"filenamify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz",
"integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==",
"dev": true,
- "optional": true,
"requires": {
"filename-reserved-regex": "^2.0.0",
"strip-outer": "^1.0.0",
@@ -6770,7 +6699,6 @@
"resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz",
"integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==",
"dev": true,
- "optional": true,
"requires": {
"semver-regex": "^2.0.0"
}
@@ -6845,21 +6773,10 @@
"dev": true
},
"flat": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.0.tgz",
- "integrity": "sha512-6KSMM+cHHzXC/hpldXApL2S8Uz+QZv+tq5o/L0KQYleoG+GcwrnIJhTWC7tCOiKQp8D/fIvryINU1OZCCwevjA==",
- "dev": true,
- "requires": {
- "is-buffer": "~2.0.4"
- },
- "dependencies": {
- "is-buffer": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz",
- "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==",
- "dev": true
- }
- }
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+ "dev": true
},
"flat-cache": {
"version": "1.3.0",
@@ -6942,7 +6859,6 @@
"resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
"integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
"dev": true,
- "optional": true,
"requires": {
"inherits": "^2.0.1",
"readable-stream": "^2.0.0"
@@ -7168,7 +7084,6 @@
"resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz",
"integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==",
"dev": true,
- "optional": true,
"requires": {
"npm-conf": "^1.1.0"
}
@@ -7183,8 +7098,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
- "dev": true,
- "optional": true
+ "dev": true
},
"get-value": {
"version": "2.0.6",
@@ -7585,7 +7499,6 @@
"resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz",
"integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==",
"dev": true,
- "optional": true,
"requires": {
"decompress-response": "^3.2.0",
"duplexer3": "^0.1.4",
@@ -7613,8 +7526,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
"integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
- "dev": true,
- "optional": true
+ "dev": true
},
"gray-matter": {
"version": "3.1.1",
@@ -7671,36 +7583,28 @@
}
},
"grunt": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.1.0.tgz",
- "integrity": "sha512-+NGod0grmviZ7Nzdi9am7vuRS/h76PcWDsV635mEXF0PEQMUV6Kb+OjTdsVxbi0PZmfQOjCMKb3w8CVZcqsn1g==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.3.0.tgz",
+ "integrity": "sha512-6ILlMXv11/4cxuhSMfSU+SfvbxrPuqZrAtLN64+tZpQ3DAKfSQPQHRbTjSbdtxfyQhGZPtN0bDZJ/LdCM5WXXA==",
"dev": true,
"requires": {
- "coffeescript": "~1.10.0",
- "dateformat": "~1.0.12",
+ "dateformat": "~3.0.3",
"eventemitter2": "~0.4.13",
- "exit": "~0.1.1",
+ "exit": "~0.1.2",
"findup-sync": "~0.3.0",
- "glob": "~7.0.0",
- "grunt-cli": "~1.2.0",
+ "glob": "~7.1.6",
+ "grunt-cli": "~1.3.2",
"grunt-known-options": "~1.1.0",
- "grunt-legacy-log": "~2.0.0",
- "grunt-legacy-util": "~1.1.1",
+ "grunt-legacy-log": "~3.0.0",
+ "grunt-legacy-util": "~2.0.0",
"iconv-lite": "~0.4.13",
- "js-yaml": "~3.13.1",
- "minimatch": "~3.0.2",
- "mkdirp": "~1.0.3",
+ "js-yaml": "~3.14.0",
+ "minimatch": "~3.0.4",
+ "mkdirp": "~1.0.4",
"nopt": "~3.0.6",
- "path-is-absolute": "~1.0.0",
- "rimraf": "~2.6.2"
+ "rimraf": "~3.0.2"
},
"dependencies": {
- "coffeescript": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.10.0.tgz",
- "integrity": "sha1-56qDAZF+9iGzXYo580jc3R234z4=",
- "dev": true
- },
"findup-sync": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
@@ -7726,31 +7630,19 @@
}
},
"glob": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
- "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
+ "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.2",
+ "minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
- "grunt-cli": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz",
- "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=",
- "dev": true,
- "requires": {
- "findup-sync": "~0.3.0",
- "grunt-known-options": "~1.1.0",
- "nopt": "~3.0.6",
- "resolve": "~1.1.0"
- }
- },
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -7766,11 +7658,14 @@
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
"dev": true
},
- "resolve": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
- "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
- "dev": true
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
}
}
},
@@ -8185,76 +8080,90 @@
"dev": true
},
"grunt-legacy-log": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz",
- "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz",
+ "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==",
"dev": true,
"requires": {
"colors": "~1.1.2",
- "grunt-legacy-log-utils": "~2.0.0",
+ "grunt-legacy-log-utils": "~2.1.0",
"hooker": "~0.2.3",
- "lodash": "~4.17.5"
+ "lodash": "~4.17.19"
}
},
"grunt-legacy-log-utils": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz",
- "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz",
+ "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==",
"dev": true,
"requires": {
- "chalk": "~2.4.1",
- "lodash": "~4.17.10"
+ "chalk": "~4.1.0",
+ "lodash": "~4.17.19"
},
"dependencies": {
"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==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
- "color-convert": "^1.9.0"
+ "color-convert": "^2.0.1"
}
},
"chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "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": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
- "has-flag": "^3.0.0"
+ "has-flag": "^4.0.0"
}
}
}
},
"grunt-legacy-util": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz",
- "integrity": "sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.0.tgz",
+ "integrity": "sha512-ZEmYFB44bblwPE2oz3q3ygfF6hseQja9tx8I3UZIwbUik32FMWewA+d1qSFicMFB+8dNXDkh35HcDCWlpRsGlA==",
"dev": true,
"requires": {
"async": "~1.5.2",
"exit": "~0.1.1",
"getobject": "~0.1.0",
"hooker": "~0.2.3",
- "lodash": "~4.17.10",
- "underscore.string": "~3.3.4",
+ "lodash": "~4.17.20",
+ "underscore.string": "~3.3.5",
"which": "~1.3.0"
},
"dependencies": {
@@ -8752,8 +8661,7 @@
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz",
"integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==",
- "dev": true,
- "optional": true
+ "dev": true
},
"has-symbols": {
"version": "1.0.1",
@@ -8766,7 +8674,6 @@
"resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz",
"integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==",
"dev": true,
- "optional": true,
"requires": {
"has-symbol-support-x": "^1.4.1"
}
@@ -8997,8 +8904,7 @@
"version": "3.8.1",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz",
"integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==",
- "dev": true,
- "optional": true
+ "dev": true
},
"http-errors": {
"version": "1.6.3",
@@ -9035,6 +8941,12 @@
"integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=",
"dev": true
},
+ "human-signals": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
+ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
+ "dev": true
+ },
"husky": {
"version": "0.14.3",
"resolved": "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz",
@@ -9157,42 +9069,282 @@
}
}
},
- "imagemin-gifsicle": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-6.0.1.tgz",
- "integrity": "sha512-kuu47c6iKDQ6R9J10xCwL0lgs0+sMz3LRHqRcJ2CRBWdcNmo3T5hUaM8hSZfksptZXJLGKk8heSAvwtSdB1Fng==",
- "dev": true,
- "optional": true,
- "requires": {
- "exec-buffer": "^3.0.0",
- "gifsicle": "^4.0.0",
- "is-gif": "^3.0.0"
- }
- },
- "imagemin-jpegtran": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/imagemin-jpegtran/-/imagemin-jpegtran-6.0.0.tgz",
- "integrity": "sha512-Ih+NgThzqYfEWv9t58EItncaaXIHR0u9RuhKa8CtVBlMBvY0dCIxgQJQCfwImA4AV1PMfmUKlkyIHJjb7V4z1g==",
- "dev": true,
- "optional": true,
- "requires": {
- "exec-buffer": "^3.0.0",
- "is-jpg": "^2.0.0",
- "jpegtran-bin": "^4.0.0"
- }
- },
- "imagemin-optipng": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-6.0.0.tgz",
- "integrity": "sha512-FoD2sMXvmoNm/zKPOWdhKpWdFdF9qiJmKC17MxZJPH42VMAp17/QENI/lIuP7LCUnLVAloO3AUoTSNzfhpyd8A==",
- "dev": true,
- "optional": true,
- "requires": {
- "exec-buffer": "^3.0.0",
- "is-png": "^1.0.0",
- "optipng-bin": "^5.0.0"
- }
- },
+ "imagemin-gifsicle": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-6.0.1.tgz",
+ "integrity": "sha512-kuu47c6iKDQ6R9J10xCwL0lgs0+sMz3LRHqRcJ2CRBWdcNmo3T5hUaM8hSZfksptZXJLGKk8heSAvwtSdB1Fng==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "exec-buffer": "^3.0.0",
+ "gifsicle": "^4.0.0",
+ "is-gif": "^3.0.0"
+ }
+ },
+ "imagemin-jpegtran": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/imagemin-jpegtran/-/imagemin-jpegtran-6.0.0.tgz",
+ "integrity": "sha512-Ih+NgThzqYfEWv9t58EItncaaXIHR0u9RuhKa8CtVBlMBvY0dCIxgQJQCfwImA4AV1PMfmUKlkyIHJjb7V4z1g==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "exec-buffer": "^3.0.0",
+ "is-jpg": "^2.0.0",
+ "jpegtran-bin": "^4.0.0"
+ }
+ },
+ "imagemin-mozjpeg": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/imagemin-mozjpeg/-/imagemin-mozjpeg-9.0.0.tgz",
+ "integrity": "sha512-TwOjTzYqCFRgROTWpVSt5UTT0JeCuzF1jswPLKALDd89+PmrJ2PdMMYeDLYZ1fs9cTovI9GJd68mRSnuVt691w==",
+ "dev": true,
+ "requires": {
+ "execa": "^4.0.0",
+ "is-jpg": "^2.0.0",
+ "mozjpeg": "^7.0.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "execa": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
+ "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.0",
+ "get-stream": "^5.0.0",
+ "human-signals": "^1.1.1",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.0",
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2",
+ "strip-final-newline": "^2.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "is-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
+ "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
+ "dev": true
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "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
+ },
+ "npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.0.0"
+ }
+ },
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
+ "imagemin-optipng": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-6.0.0.tgz",
+ "integrity": "sha512-FoD2sMXvmoNm/zKPOWdhKpWdFdF9qiJmKC17MxZJPH42VMAp17/QENI/lIuP7LCUnLVAloO3AUoTSNzfhpyd8A==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "exec-buffer": "^3.0.0",
+ "is-png": "^1.0.0",
+ "optipng-bin": "^5.0.0"
+ }
+ },
+ "imagemin-pngquant": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/imagemin-pngquant/-/imagemin-pngquant-9.0.1.tgz",
+ "integrity": "sha512-PYyo9G/xwddf+Qqlqe3onz5ZH7p6vHYVVkiuuczUjxZmfekyY77RXaOA/AR6FnVoeQxGa/pDtEK5xUKOcVo+sA==",
+ "dev": true,
+ "requires": {
+ "execa": "^4.0.0",
+ "is-png": "^2.0.0",
+ "is-stream": "^2.0.0",
+ "ow": "^0.17.0",
+ "pngquant-bin": "^6.0.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "execa": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
+ "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.0",
+ "get-stream": "^5.0.0",
+ "human-signals": "^1.1.1",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.0",
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2",
+ "strip-final-newline": "^2.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "is-png": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-png/-/is-png-2.0.0.tgz",
+ "integrity": "sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
+ "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
+ "dev": true
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "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
+ },
+ "npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.0.0"
+ }
+ },
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
"imagemin-svgo": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-7.0.0.tgz",
@@ -9330,8 +9482,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz",
"integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==",
- "dev": true,
- "optional": true
+ "dev": true
},
"imurmurhash": {
"version": "0.1.4",
@@ -9389,9 +9540,9 @@
"dev": true
},
"ini": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
"dev": true
},
"inquirer": {
@@ -9578,7 +9729,6 @@
"resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz",
"integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=",
"dev": true,
- "optional": true,
"requires": {
"from2": "^2.1.1",
"p-is-promise": "^1.1.0"
@@ -9853,15 +10003,13 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz",
"integrity": "sha1-LhmX+m6RZuqsAkLarkQ0A+TvHZc=",
- "dev": true,
- "optional": true
+ "dev": true
},
"is-natural-number": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz",
"integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=",
- "dev": true,
- "optional": true
+ "dev": true
},
"is-number": {
"version": "2.1.0",
@@ -9902,8 +10050,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz",
"integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=",
- "dev": true,
- "optional": true
+ "dev": true
},
"is-observable": {
"version": "1.1.0",
@@ -9971,8 +10118,7 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
"integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
- "dev": true,
- "optional": true
+ "dev": true
},
"is-plain-object": {
"version": "2.0.4",
@@ -10063,8 +10209,7 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
"integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==",
- "dev": true,
- "optional": true
+ "dev": true
},
"is-stream": {
"version": "1.1.0",
@@ -10186,7 +10331,6 @@
"resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz",
"integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==",
"dev": true,
- "optional": true,
"requires": {
"has-to-string-tag-x": "^1.2.0",
"is-object": "^1.0.1"
@@ -10223,9 +10367,9 @@
"dev": true
},
"js-yaml": {
- "version": "3.13.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
- "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
@@ -10276,8 +10420,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
"integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
- "dev": true,
- "optional": true
+ "dev": true
},
"json-parse-better-errors": {
"version": "1.0.2",
@@ -10336,7 +10479,6 @@
"resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz",
"integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==",
"dev": true,
- "optional": true,
"requires": {
"json-buffer": "3.0.0"
}
@@ -12016,7 +12158,6 @@
"resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz",
"integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=",
"dev": true,
- "optional": true,
"requires": {
"figures": "^1.3.5",
"squeak": "^1.0.0"
@@ -12067,15 +12208,13 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
"integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
- "dev": true,
- "optional": true
+ "dev": true
},
"lpad-align": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz",
"integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=",
"dev": true,
- "optional": true,
"requires": {
"get-stdin": "^4.0.1",
"indent-string": "^2.1.0",
@@ -12087,8 +12226,7 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
"integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
- "dev": true,
- "optional": true
+ "dev": true
}
}
},
@@ -12665,8 +12803,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
"integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
- "dev": true,
- "optional": true
+ "dev": true
},
"minimatch": {
"version": "3.0.4",
@@ -12739,9 +12876,9 @@
"optional": 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==",
+ "version": "2.29.1",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
+ "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==",
"dev": true
},
"morgan": {
@@ -12757,6 +12894,17 @@
"on-headers": "~1.0.1"
}
},
+ "mozjpeg": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/mozjpeg/-/mozjpeg-7.0.0.tgz",
+ "integrity": "sha512-mH7atSbIusVTO3A4H43sEdmveN3aWn54k6V0edefzCEvOsTrbjg5murY2TsNznaztWnIgaRbWxeLVp4IgKdedQ==",
+ "dev": true,
+ "requires": {
+ "bin-build": "^3.0.0",
+ "bin-wrapper": "^4.0.0",
+ "logalot": "^2.1.0"
+ }
+ },
"ms": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz",
@@ -12983,8 +13131,7 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
- "dev": true,
- "optional": true
+ "dev": true
},
"no-case": {
"version": "2.3.2",
@@ -13156,7 +13303,6 @@
"resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz",
"integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==",
"dev": true,
- "optional": true,
"requires": {
"config-chain": "^1.1.11",
"pify": "^3.0.0"
@@ -13166,8 +13312,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true,
- "optional": true
+ "dev": true
}
}
},
@@ -13530,7 +13675,6 @@
"resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz",
"integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==",
"dev": true,
- "optional": true,
"requires": {
"arch": "^2.1.0"
}
@@ -13557,19 +13701,26 @@
"os-tmpdir": "^1.0.0"
}
},
+ "ow": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/ow/-/ow-0.17.0.tgz",
+ "integrity": "sha512-i3keDzDQP5lWIe4oODyDFey1qVrq2hXKTuTH2VpqwpYtzPiKZt2ziRI4NBQmgW40AnV5Euz17OyWweCb+bNEQA==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.11.0"
+ }
+ },
"p-cancelable": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz",
"integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==",
- "dev": true,
- "optional": true
+ "dev": true
},
"p-event": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz",
"integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=",
"dev": true,
- "optional": true,
"requires": {
"p-timeout": "^1.1.1"
}
@@ -13578,15 +13729,13 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
"integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
- "dev": true,
- "optional": true
+ "dev": true
},
"p-is-promise": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
"integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=",
- "dev": true,
- "optional": true
+ "dev": true
},
"p-limit": {
"version": "2.2.2",
@@ -13617,7 +13766,6 @@
"resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz",
"integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=",
"dev": true,
- "optional": true,
"requires": {
"p-reduce": "^1.0.0"
}
@@ -13632,15 +13780,13 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz",
"integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=",
- "dev": true,
- "optional": true
+ "dev": true
},
"p-timeout": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz",
"integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=",
"dev": true,
- "optional": true,
"requires": {
"p-finally": "^1.0.0"
}
@@ -13906,8 +14052,7 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
"integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
- "dev": true,
- "optional": true
+ "dev": true
},
"performance-now": {
"version": "2.1.0",
@@ -14182,6 +14327,123 @@
"integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
"dev": true
},
+ "pngquant-bin": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-6.0.0.tgz",
+ "integrity": "sha512-oXWAS9MQ9iiDAJRdAZ9KO1mC5UwhzKkJsmetiu0iqIjJuW7JsuLhmc4JdRm7uJkIWRzIAou/Vq2VcjfJwz30Ow==",
+ "dev": true,
+ "requires": {
+ "bin-build": "^3.0.0",
+ "bin-wrapper": "^4.0.1",
+ "execa": "^4.0.0",
+ "logalot": "^2.0.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "execa": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
+ "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.0",
+ "get-stream": "^5.0.0",
+ "human-signals": "^1.1.1",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.0",
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2",
+ "strip-final-newline": "^2.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "is-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
+ "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
+ "dev": true
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "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
+ },
+ "npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.0.0"
+ }
+ },
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
"portscanner": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz",
@@ -16297,8 +16559,7 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
"integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
- "dev": true,
- "optional": true
+ "dev": true
},
"preserve": {
"version": "0.2.0",
@@ -16374,8 +16635,7 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
"integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
- "dev": true,
- "optional": true
+ "dev": true
},
"pseudomap": {
"version": "1.0.2",
@@ -16394,7 +16654,6 @@
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"dev": true,
- "optional": true,
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
@@ -16413,9 +16672,9 @@
"dev": true
},
"qs": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.0.4.tgz",
- "integrity": "sha1-UQGdhHIMk5uCc36EVWp4Izjs6ns=",
+ "version": "6.9.4",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz",
+ "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==",
"dev": true
},
"querystring": {
@@ -17277,7 +17536,6 @@
"resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
"integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
"dev": true,
- "optional": true,
"requires": {
"lowercase-keys": "^1.0.0"
}
@@ -17464,7 +17722,6 @@
"resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz",
"integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=",
"dev": true,
- "optional": true,
"requires": {
"commander": "~2.8.1"
}
@@ -17485,15 +17742,13 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz",
"integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==",
- "dev": true,
- "optional": true
+ "dev": true
},
"semver-truncate": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz",
"integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=",
"dev": true,
- "optional": true,
"requires": {
"semver": "^5.3.0"
}
@@ -17995,7 +18250,6 @@
"resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
"integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
"dev": true,
- "optional": true,
"requires": {
"is-plain-obj": "^1.0.0"
}
@@ -18005,7 +18259,6 @@
"resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz",
"integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=",
"dev": true,
- "optional": true,
"requires": {
"sort-keys": "^1.0.0"
}
@@ -18128,7 +18381,6 @@
"resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz",
"integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=",
"dev": true,
- "optional": true,
"requires": {
"chalk": "^1.0.0",
"console-stream": "^0.1.1",
@@ -18315,8 +18567,7 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
"integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
- "dev": true,
- "optional": true
+ "dev": true
},
"string-argv": {
"version": "0.3.1",
@@ -18496,7 +18747,6 @@
"resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz",
"integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==",
"dev": true,
- "optional": true,
"requires": {
"is-natural-number": "^4.0.1"
}
@@ -18505,8 +18755,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
- "dev": true,
- "optional": true
+ "dev": true
},
"strip-final-newline": {
"version": "2.0.0",
@@ -18542,7 +18791,6 @@
"resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz",
"integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==",
"dev": true,
- "optional": true,
"requires": {
"escape-string-regexp": "^1.0.2"
}
@@ -18818,9 +19066,9 @@
},
"dependencies": {
"bl": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz",
- "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz",
+ "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==",
"dev": true,
"optional": true,
"requires": {
@@ -18885,15 +19133,13 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz",
"integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=",
- "dev": true,
- "optional": true
+ "dev": true
},
"tempfile": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz",
"integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=",
"dev": true,
- "optional": true,
"requires": {
"temp-dir": "^1.0.0",
"uuid": "^3.0.1"
@@ -19234,8 +19480,7 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
"integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
- "dev": true,
- "optional": true
+ "dev": true
},
"timers-browserify": {
"version": "2.0.2",
@@ -19533,7 +19778,6 @@
"resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
"integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
"dev": true,
- "optional": true,
"requires": {
"escape-string-regexp": "^1.0.2"
}
@@ -19568,6 +19812,12 @@
"prelude-ls": "~1.1.2"
}
},
+ "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
+ },
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
@@ -19617,7 +19867,6 @@
"resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz",
"integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==",
"dev": true,
- "optional": true,
"requires": {
"buffer": "^5.2.1",
"through": "^2.3.8"
@@ -19628,7 +19877,6 @@
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz",
"integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==",
"dev": true,
- "optional": true,
"requires": {
"base64-js": "^1.0.2",
"ieee754": "^1.1.4"
@@ -19856,9 +20104,9 @@
}
},
"upath": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
- "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw=="
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="
},
"upper-case": {
"version": "1.1.3",
@@ -19910,7 +20158,6 @@
"resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
"integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
"dev": true,
- "optional": true,
"requires": {
"prepend-http": "^1.0.1"
}
@@ -19919,8 +20166,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz",
"integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=",
- "dev": true,
- "optional": true
+ "dev": true
},
"use": {
"version": "1.1.2",
@@ -20452,7 +20698,6 @@
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
"integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
"dev": true,
- "optional": true,
"requires": {
"buffer-crc32": "~0.2.3",
"fd-slicer": "~1.1.0"
diff --git a/package.json b/package.json
index ec3a92343d..8a92f3b068 100644
--- a/package.json
+++ b/package.json
@@ -47,9 +47,9 @@
"eslint": "^4.19.1",
"eslint-config-prettier": "^2.10.0",
"eslint-plugin-prettier": "^2.7.0",
- "flat": "^5.0.0",
+ "flat": "^5.0.2",
"fs-extra": "^9.0.1",
- "grunt": "^1.1.0",
+ "grunt": "^1.3.0",
"grunt-assemble": "^0.6.3",
"grunt-cli": "^1.3.2",
"grunt-contrib-clean": "^0.6.0",
@@ -71,15 +71,17 @@
"grunt-uncss": "^0.8.6",
"handlebars": "^4.7.6",
"husky": "^0.14.3",
- "js-yaml": "^3.13.1",
+ "imagemin-mozjpeg": "^9.0.0",
+ "imagemin-pngquant": "^9.0.1",
+ "js-yaml": "^3.14.1",
"lint-staged": "^9.5.0",
"load-grunt-tasks": "^5.1.0",
"lodash": "^4.17.20",
"marked": "^0.8.2",
- "moment": "^2.24.0",
+ "moment": "^2.29.1",
"ms": "^0.7.3",
"prettier": "^1.19.1",
- "qs": "^6.0.4",
+ "qs": "^6.9.4",
"send": "^0.16.2",
"serve-index": "^1.9.1",
"simple-git": "^1.132.0",
@@ -88,6 +90,6 @@
"yaml": "^1.10.0"
},
"dependencies": {
- "upath": "^1.1.0"
+ "upath": "^1.2.0"
}
}
diff --git a/src/assets/css/main.css b/src/assets/css/main.css
index 427dd401bc..4674278e54 100644
--- a/src/assets/css/main.css
+++ b/src/assets/css/main.css
@@ -441,7 +441,32 @@ textarea {
GET STARTED
//////////////////////////////////////////////////
*/
-
+#get-started-page .edit_space {
+ position: relative;
+ order: 3;
+}
+#get-started-page .edit_space .copy_button{
+ color: #2d7bb6;
+ border-color: rgba(45, 123, 182, 0.25);
+ float: right;
+ margin: 0.5em 0 0 0.5em;
+ background: rgba(255, 255, 255, 0.7);
+ position: absolute;
+ z-index: 2;
+ left: 31.33em;
+ top: -1.5em;
+}
+/* To make get-started-page responsive */
+@media (max-width: 780px) {
+ #get-started-page .edit_space .copy_button{
+ left: 6.44em;
+ }
+}
+@media (max-width: 600px) {
+ #get-started-page .edit_space .copy_button{
+ left: 5.91em;
+ }
+}
/*
//////////////////////////////////////////////////
EXAMPLES
diff --git a/src/assets/js/get-started.js b/src/assets/js/get-started.js
new file mode 100644
index 0000000000..4686d623e8
--- /dev/null
+++ b/src/assets/js/get-started.js
@@ -0,0 +1,31 @@
+const copyToClipboard = (element)=> {
+ const value = document.getElementById(element).innerText;
+ const el = document.createElement('textarea');
+ el.value = value;
+ el.setAttribute('readonly', '');
+ el.style.position = 'absolute';
+ el.style.left = '-9999px';
+ el.setAttribute('aria-hidden','true');
+ document.body.appendChild(el);
+ el.select();
+ document.execCommand('copy');
+ document.body.removeChild(el);
+}
+$("#copy_sketch1").click(()=>{
+ copyToClipboard("first-sketch1");
+})
+$("#copy_sketch2").click(()=>{
+ copyToClipboard("first-sketch2");
+});
+$("#copy_sketch3").click(()=>{
+ copyToClipboard("first-sketch3");
+});
+$("#copy_p5_script").click(()=>{
+ copyToClipboard("markup1");
+});
+$("#copy_p5_link").click(()=>{
+ copyToClipboard("cdn-link");
+});
+$("#copy_p5_html").click(()=>{
+ copyToClipboard("sample-html");
+});
diff --git a/src/assets/js/init.js b/src/assets/js/init.js
index 0e50e982bd..f015d97d09 100644
--- a/src/assets/js/init.js
+++ b/src/assets/js/init.js
@@ -198,6 +198,16 @@ window.onload = function() {
}
}
+ // =================================================
+ // Checking hash in URL
+ // this function runs when the DOM is ready, i.e. when the document has been parsed
+ setTimeout(function() {
+ if (location.hash) {
+ location.href = location.hash;
+ }
+ }, 1000);
+
+
// =================================================
// Chinese spacing
if (window.pangu) {
diff --git a/src/data/en.yml b/src/data/en.yml
index 9b8e89572e..fdd9b9b022 100644
--- a/src/data/en.yml
+++ b/src/data/en.yml
@@ -92,7 +92,8 @@ get started:
get-started6: >-
. If you would like to work on the the desktop version of p5.js you can
scroll down to
- get-started7: downloading instructions
+ get-started7: downloading instructions,
+ get-started-button: 'Copy'
settingUp-title: Setting up p5.js with an editor on your own computer
download-title: Downloading a copy of the p5.js library
hosted-title: Using a hosted version of the p5.js library
@@ -157,8 +158,8 @@ get started:
your-first-sketch6: >-
If you are using a screen reader, you must turn on the accessible outputs in
the p5 online editor, outside the editor you must add the accessibility
- library in your html. To learn more visit
- your-first-sketch7: using p5 with a screen reader tutorial
+ library in your html. To learn more visit
+ your-first-sketch7: 'using p5 with a screen reader tutorial'
your-first-sketch8: >-
If you've typed everything correctly, this will appear in the display
window:
@@ -594,11 +595,11 @@ learn:
and brightness) mode. Without getting into too much detail, HSB color works
as follows:
color-custom-ranges-li1x1: Hue
- color-custom-ranges-li1x2: '—The color type, ranges from 0 to 255 by default.'
+ color-custom-ranges-li1x2: '—The color type, ranges from 0 to 360 by default.'
color-custom-ranges-li2x1: Saturation
- color-custom-ranges-li2x2: '—The vibrancy of the color, 0 to 255 by default.'
+ color-custom-ranges-li2x2: '—The vibrancy of the color, 0 to 100 by default.'
color-custom-ranges-li3x1: Brightness
- color-custom-ranges-li3x2: '—The, well, brightness of the color, 0 to 255 by default.'
+ color-custom-ranges-li3x2: '—The, well, brightness of the color, 0 to 100 by default.'
color-custom-ranges-p6x1: 'With '
color-custom-ranges-p6x2: ' you can set your own ranges for these values. Some prefer a range of 0-360 for hue (think of 360 degrees on a color wheel) and 0-100 for saturation and brightness (think of 0-100%).'
coordinate-system-description1: 'This tutorial is from the book '
diff --git a/src/data/es.yml b/src/data/es.yml
index 9a447579cc..c000954839 100644
--- a/src/data/es.yml
+++ b/src/data/es.yml
@@ -94,6 +94,7 @@ get started:
get-started5: tu primer bosquejo
get-started6: '. Si deseas trabajar en la versión de escritorio de p5.js, puedes ir a las '
get-started7: instrucciones de descarga
+ get-started-button: Copy
settingUp-title: Configura p5.js con un editor en tu computadora personal
download-title: Descarga una copia de la biblioteca p5.js
hosted-title: Utiliza una versión alojada de la biblioteca p5.js
@@ -622,11 +623,11 @@ learn:
saturación y brillo). Sin entrar mayormente en detalle, el color HSB
funciona como sigue:
color-custom-ranges-li1x1: Tono o Matiz
- color-custom-ranges-li1x2: '—El tipo de color, valores por definición van de 0 a 255.'
+ color-custom-ranges-li1x2: '—El tipo de color, valores por definición van de 0 a 360.'
color-custom-ranges-li2x1: Saturación
- color-custom-ranges-li2x2: '—La vivacidad del color, 0 a 255 por definición.'
+ color-custom-ranges-li2x2: '—La vivacidad del color, 0 a 100 por definición.'
color-custom-ranges-li3x1: Brillo
- color-custom-ranges-li3x2: '—Es el brillo del color, 0 a 255 por definición.'
+ color-custom-ranges-li3x2: '—Es el brillo del color, 0 a 100 por definición.'
color-custom-ranges-p6x1: 'Con '
color-custom-ranges-p6x2: ' puedes definir tu propio rango de valores. Algunos prefieren un rango de 0-360 para el tono (piensa en los 360 grados de la rueda de color) y 0-100 para la saturación y brillo (piensa en 0-100%).'
coordinate-system-description1: 'Este tutorial proviene del libro '
diff --git a/src/data/examples/en/11_Objects/04_Inheritance.js b/src/data/examples/en/11_Objects/04_Inheritance.js
index 32b6a630e3..9070daa336 100644
--- a/src/data/examples/en/11_Objects/04_Inheritance.js
+++ b/src/data/examples/en/11_Objects/04_Inheritance.js
@@ -21,7 +21,7 @@ function draw() {
spots.display();
}
-class SpinArm {
+class Spin {
constructor(x, y, s) {
this.x = x;
this.y = y;
@@ -32,6 +32,12 @@ class SpinArm {
update() {
this.angle += this.speed;
}
+}
+
+class SpinArm extends Spin {
+ constructor(x, y, s) {
+ super(x, y, s)
+ }
display() {
strokeWeight(1);
@@ -45,17 +51,10 @@ class SpinArm {
}
}
-class SpinSpots {
+class SpinSpots extends Spin {
constructor(x, y, s, d) {
- this.x = x;
- this.y = y;
- this.speed = s;
+ super(x, y, s)
this.dim = d;
- this.angle = 0.0;
- }
-
- update() {
- this.angle += this.speed;
}
display() {
@@ -68,4 +67,4 @@ class SpinSpots {
ellipse(this.dim/2, 0, this.dim, this.dim);
pop();
}
-}
+}
\ No newline at end of file
diff --git a/src/data/examples/en/13_Motion/07_Circle_Collision.js b/src/data/examples/en/13_Motion/07_Circle_Collision.js
new file mode 100644
index 0000000000..876bc23d6e
--- /dev/null
+++ b/src/data/examples/en/13_Motion/07_Circle_Collision.js
@@ -0,0 +1,145 @@
+/*
+ * @name Circle Collision
+ * @frame 710,400 (optional)
+ * @description This is a port of the "Circle Collision" example from processing.org/examples
This example uses vectors for better visualization of physical Quantity
+ */
+class Ball {
+ constructor(x, y, r) {
+ this.position = new p5.Vector(x, y);
+ this.velocity = p5.Vector.random2D();
+ this.velocity.mult(3);
+ this.r = r;
+ this.m = r * 0.1;
+ }
+ update() {
+ this.position.add(this.velocity);
+ }
+
+ checkBoundaryCollision() {
+ if (this.position.x > width - this.r) {
+ this.position.x = width - this.r;
+ this.velocity.x *= -1;
+ } else if (this.position.x < this.r) {
+ this.position.x = this.r;
+ this.velocity.x *= -1;
+ } else if (this.position.y > height - this.r) {
+ this.position.y = height - this.r;
+ this.velocity.y *= -1;
+ } else if (this.position.y < this.r) {
+ this.position.y = this.r;
+ this.velocity.y *= -1;
+ }
+ }
+
+ checkCollision(other) {
+ // Get distances between the balls components
+ let distanceVect = p5.Vector.sub(other.position, this.position);
+
+ // Calculate magnitude of the vector separating the balls
+ let distanceVectMag = distanceVect.mag();
+
+ // Minimum distance before they are touching
+ let minDistance = this.r + other.r;
+
+ if (distanceVectMag < minDistance) {
+ let distanceCorrection = (minDistance - distanceVectMag) / 2.0;
+ let d = distanceVect.copy();
+ let correctionVector = d.normalize().mult(distanceCorrection);
+ other.position.add(correctionVector);
+ this.position.sub(correctionVector);
+
+ // get angle of distanceVect
+ let theta = distanceVect.heading();
+ // precalculate trig values
+ let sine = sin(theta);
+ let cosine = cos(theta);
+
+ /* bTemp will hold rotated ball this.positions. You
+ just need to worry about bTemp[1] this.position*/
+ let bTemp = [new p5.Vector(), new p5.Vector()];
+
+ /* this ball's this.position is relative to the other
+ so you can use the vector between them (bVect) as the
+ reference point in the rotation expressions.
+ bTemp[0].this.position.x and bTemp[0].this.position.y will initialize
+ automatically to 0.0, which is what you want
+ since b[1] will rotate around b[0] */
+ bTemp[1].x = cosine * distanceVect.x + sine * distanceVect.y;
+ bTemp[1].y = cosine * distanceVect.y - sine * distanceVect.x;
+
+ // rotate Temporary velocities
+ let vTemp = [new p5.Vector(), new p5.Vector()];
+
+ vTemp[0].x = cosine * this.velocity.x + sine * this.velocity.y;
+ vTemp[0].y = cosine * this.velocity.y - sine * this.velocity.x;
+ vTemp[1].x = cosine * other.velocity.x + sine * other.velocity.y;
+ vTemp[1].y = cosine * other.velocity.y - sine * other.velocity.x;
+
+ /* Now that velocities are rotated, you can use 1D
+ conservation of momentum equations to calculate
+ the final this.velocity along the x-axis. */
+ let vFinal = [new p5.Vector(), new p5.Vector()];
+
+ // final rotated this.velocity for b[0]
+ vFinal[0].x =
+ ((this.m - other.m) * vTemp[0].x + 2 * other.m * vTemp[1].x) /
+ (this.m + other.m);
+ vFinal[0].y = vTemp[0].y;
+
+ // final rotated this.velocity for b[0]
+ vFinal[1].x =
+ ((other.m - this.m) * vTemp[1].x + 2 * this.m * vTemp[0].x) /
+ (this.m + other.m);
+ vFinal[1].y = vTemp[1].y;
+
+ // hack to avoid clumping
+ bTemp[0].x += vFinal[0].x;
+ bTemp[1].x += vFinal[1].x;
+
+ /* Rotate ball this.positions and velocities back
+ Reverse signs in trig expressions to rotate
+ in the opposite direction */
+ // rotate balls
+ let bFinal = [new p5.Vector(), new p5.Vector()];
+
+ bFinal[0].x = cosine * bTemp[0].x - sine * bTemp[0].y;
+ bFinal[0].y = cosine * bTemp[0].y + sine * bTemp[0].x;
+ bFinal[1].x = cosine * bTemp[1].x - sine * bTemp[1].y;
+ bFinal[1].y = cosine * bTemp[1].y + sine * bTemp[1].x;
+
+ // update balls to screen this.position
+ other.position.x = this.position.x + bFinal[1].x;
+ other.position.y = this.position.y + bFinal[1].y;
+
+ this.position.add(bFinal[0]);
+
+ // update velocities
+ this.velocity.x = cosine * vFinal[0].x - sine * vFinal[0].y;
+ this.velocity.y = cosine * vFinal[0].y + sine * vFinal[0].x;
+ other.velocity.x = cosine * vFinal[1].x - sine * vFinal[1].y;
+ other.velocity.y = cosine * vFinal[1].y + sine * vFinal[1].x;
+ }
+ }
+
+ display() {
+ noStroke();
+ fill(204);
+ ellipse(this.position.x, this.position.y, this.r * 2, this.r * 2);
+ }
+}
+let balls = [new Ball(100, 400, 20), new Ball(700, 400, 80)];
+console.log(balls);
+function setup() {
+ createCanvas(710, 400);
+}
+
+function draw() {
+ background(51);
+ for (let i = 0; i < balls.length; i++) {
+ let b = balls[i];
+ b.update();
+ b.display();
+ b.checkBoundaryCollision();
+ balls[0].checkCollision(balls[1]);
+ }
+}
diff --git a/src/data/examples/es/11_Objects/04_Inheritance.js b/src/data/examples/es/11_Objects/04_Inheritance.js
index d1b44272f3..b1a0af4203 100644
--- a/src/data/examples/es/11_Objects/04_Inheritance.js
+++ b/src/data/examples/es/11_Objects/04_Inheritance.js
@@ -21,7 +21,7 @@ function draw() {
spots.display();
}
-class SpinArm {
+class Spin {
constructor(x, y, s) {
this.x = x;
this.y = y;
@@ -32,6 +32,12 @@ class SpinArm {
update() {
this.angle += this.speed;
}
+}
+
+class SpinArm extends Spin {
+ constructor(x, y, s) {
+ super(x, y, s)
+ }
display() {
strokeWeight(1);
@@ -45,17 +51,10 @@ class SpinArm {
}
}
-class SpinSpots {
+class SpinSpots extends Spin {
constructor(x, y, s, d) {
- this.x = x;
- this.y = y;
- this.speed = s;
+ super(x, y, s)
this.dim = d;
- this.angle = 0.0;
- }
-
- update() {
- this.angle += this.speed;
}
display() {
@@ -68,4 +67,4 @@ class SpinSpots {
ellipse(this.dim/2, 0, this.dim, this.dim);
pop();
}
-}
+}
\ No newline at end of file
diff --git a/src/data/examples/es/13_Motion/07_Circle_Collision.js b/src/data/examples/es/13_Motion/07_Circle_Collision.js
new file mode 100644
index 0000000000..876bc23d6e
--- /dev/null
+++ b/src/data/examples/es/13_Motion/07_Circle_Collision.js
@@ -0,0 +1,145 @@
+/*
+ * @name Circle Collision
+ * @frame 710,400 (optional)
+ * @description This is a port of the "Circle Collision" example from processing.org/examples
This example uses vectors for better visualization of physical Quantity
+ */
+class Ball {
+ constructor(x, y, r) {
+ this.position = new p5.Vector(x, y);
+ this.velocity = p5.Vector.random2D();
+ this.velocity.mult(3);
+ this.r = r;
+ this.m = r * 0.1;
+ }
+ update() {
+ this.position.add(this.velocity);
+ }
+
+ checkBoundaryCollision() {
+ if (this.position.x > width - this.r) {
+ this.position.x = width - this.r;
+ this.velocity.x *= -1;
+ } else if (this.position.x < this.r) {
+ this.position.x = this.r;
+ this.velocity.x *= -1;
+ } else if (this.position.y > height - this.r) {
+ this.position.y = height - this.r;
+ this.velocity.y *= -1;
+ } else if (this.position.y < this.r) {
+ this.position.y = this.r;
+ this.velocity.y *= -1;
+ }
+ }
+
+ checkCollision(other) {
+ // Get distances between the balls components
+ let distanceVect = p5.Vector.sub(other.position, this.position);
+
+ // Calculate magnitude of the vector separating the balls
+ let distanceVectMag = distanceVect.mag();
+
+ // Minimum distance before they are touching
+ let minDistance = this.r + other.r;
+
+ if (distanceVectMag < minDistance) {
+ let distanceCorrection = (minDistance - distanceVectMag) / 2.0;
+ let d = distanceVect.copy();
+ let correctionVector = d.normalize().mult(distanceCorrection);
+ other.position.add(correctionVector);
+ this.position.sub(correctionVector);
+
+ // get angle of distanceVect
+ let theta = distanceVect.heading();
+ // precalculate trig values
+ let sine = sin(theta);
+ let cosine = cos(theta);
+
+ /* bTemp will hold rotated ball this.positions. You
+ just need to worry about bTemp[1] this.position*/
+ let bTemp = [new p5.Vector(), new p5.Vector()];
+
+ /* this ball's this.position is relative to the other
+ so you can use the vector between them (bVect) as the
+ reference point in the rotation expressions.
+ bTemp[0].this.position.x and bTemp[0].this.position.y will initialize
+ automatically to 0.0, which is what you want
+ since b[1] will rotate around b[0] */
+ bTemp[1].x = cosine * distanceVect.x + sine * distanceVect.y;
+ bTemp[1].y = cosine * distanceVect.y - sine * distanceVect.x;
+
+ // rotate Temporary velocities
+ let vTemp = [new p5.Vector(), new p5.Vector()];
+
+ vTemp[0].x = cosine * this.velocity.x + sine * this.velocity.y;
+ vTemp[0].y = cosine * this.velocity.y - sine * this.velocity.x;
+ vTemp[1].x = cosine * other.velocity.x + sine * other.velocity.y;
+ vTemp[1].y = cosine * other.velocity.y - sine * other.velocity.x;
+
+ /* Now that velocities are rotated, you can use 1D
+ conservation of momentum equations to calculate
+ the final this.velocity along the x-axis. */
+ let vFinal = [new p5.Vector(), new p5.Vector()];
+
+ // final rotated this.velocity for b[0]
+ vFinal[0].x =
+ ((this.m - other.m) * vTemp[0].x + 2 * other.m * vTemp[1].x) /
+ (this.m + other.m);
+ vFinal[0].y = vTemp[0].y;
+
+ // final rotated this.velocity for b[0]
+ vFinal[1].x =
+ ((other.m - this.m) * vTemp[1].x + 2 * this.m * vTemp[0].x) /
+ (this.m + other.m);
+ vFinal[1].y = vTemp[1].y;
+
+ // hack to avoid clumping
+ bTemp[0].x += vFinal[0].x;
+ bTemp[1].x += vFinal[1].x;
+
+ /* Rotate ball this.positions and velocities back
+ Reverse signs in trig expressions to rotate
+ in the opposite direction */
+ // rotate balls
+ let bFinal = [new p5.Vector(), new p5.Vector()];
+
+ bFinal[0].x = cosine * bTemp[0].x - sine * bTemp[0].y;
+ bFinal[0].y = cosine * bTemp[0].y + sine * bTemp[0].x;
+ bFinal[1].x = cosine * bTemp[1].x - sine * bTemp[1].y;
+ bFinal[1].y = cosine * bTemp[1].y + sine * bTemp[1].x;
+
+ // update balls to screen this.position
+ other.position.x = this.position.x + bFinal[1].x;
+ other.position.y = this.position.y + bFinal[1].y;
+
+ this.position.add(bFinal[0]);
+
+ // update velocities
+ this.velocity.x = cosine * vFinal[0].x - sine * vFinal[0].y;
+ this.velocity.y = cosine * vFinal[0].y + sine * vFinal[0].x;
+ other.velocity.x = cosine * vFinal[1].x - sine * vFinal[1].y;
+ other.velocity.y = cosine * vFinal[1].y + sine * vFinal[1].x;
+ }
+ }
+
+ display() {
+ noStroke();
+ fill(204);
+ ellipse(this.position.x, this.position.y, this.r * 2, this.r * 2);
+ }
+}
+let balls = [new Ball(100, 400, 20), new Ball(700, 400, 80)];
+console.log(balls);
+function setup() {
+ createCanvas(710, 400);
+}
+
+function draw() {
+ background(51);
+ for (let i = 0; i < balls.length; i++) {
+ let b = balls[i];
+ b.update();
+ b.display();
+ b.checkBoundaryCollision();
+ balls[0].checkCollision(balls[1]);
+ }
+}
diff --git a/src/data/examples/ko/11_Objects/04_Inheritance.js b/src/data/examples/ko/11_Objects/04_Inheritance.js
index 12b3737c05..ab5a51bafa 100644
--- a/src/data/examples/ko/11_Objects/04_Inheritance.js
+++ b/src/data/examples/ko/11_Objects/04_Inheritance.js
@@ -21,7 +21,7 @@ function draw() {
spots.display();
}
-class SpinArm {
+class Spin {
constructor(x, y, s) {
this.x = x;
this.y = y;
@@ -32,6 +32,12 @@ class SpinArm {
update() {
this.angle += this.speed;
}
+}
+
+class SpinArm extends Spin {
+ constructor(x, y, s) {
+ super(x, y, s)
+ }
display() {
strokeWeight(1);
@@ -45,17 +51,10 @@ class SpinArm {
}
}
-class SpinSpots {
+class SpinSpots extends Spin {
constructor(x, y, s, d) {
- this.x = x;
- this.y = y;
- this.speed = s;
+ super(x, y, s)
this.dim = d;
- this.angle = 0.0;
- }
-
- update() {
- this.angle += this.speed;
}
display() {
@@ -68,4 +67,4 @@ class SpinSpots {
ellipse(this.dim/2, 0, this.dim, this.dim);
pop();
}
-}
+}
\ No newline at end of file
diff --git a/src/data/examples/ko/13_Motion/07_Circle_Collision.js b/src/data/examples/ko/13_Motion/07_Circle_Collision.js
new file mode 100644
index 0000000000..876bc23d6e
--- /dev/null
+++ b/src/data/examples/ko/13_Motion/07_Circle_Collision.js
@@ -0,0 +1,145 @@
+/*
+ * @name Circle Collision
+ * @frame 710,400 (optional)
+ * @description This is a port of the "Circle Collision" example from processing.org/examples
This example uses vectors for better visualization of physical Quantity
+ */
+class Ball {
+ constructor(x, y, r) {
+ this.position = new p5.Vector(x, y);
+ this.velocity = p5.Vector.random2D();
+ this.velocity.mult(3);
+ this.r = r;
+ this.m = r * 0.1;
+ }
+ update() {
+ this.position.add(this.velocity);
+ }
+
+ checkBoundaryCollision() {
+ if (this.position.x > width - this.r) {
+ this.position.x = width - this.r;
+ this.velocity.x *= -1;
+ } else if (this.position.x < this.r) {
+ this.position.x = this.r;
+ this.velocity.x *= -1;
+ } else if (this.position.y > height - this.r) {
+ this.position.y = height - this.r;
+ this.velocity.y *= -1;
+ } else if (this.position.y < this.r) {
+ this.position.y = this.r;
+ this.velocity.y *= -1;
+ }
+ }
+
+ checkCollision(other) {
+ // Get distances between the balls components
+ let distanceVect = p5.Vector.sub(other.position, this.position);
+
+ // Calculate magnitude of the vector separating the balls
+ let distanceVectMag = distanceVect.mag();
+
+ // Minimum distance before they are touching
+ let minDistance = this.r + other.r;
+
+ if (distanceVectMag < minDistance) {
+ let distanceCorrection = (minDistance - distanceVectMag) / 2.0;
+ let d = distanceVect.copy();
+ let correctionVector = d.normalize().mult(distanceCorrection);
+ other.position.add(correctionVector);
+ this.position.sub(correctionVector);
+
+ // get angle of distanceVect
+ let theta = distanceVect.heading();
+ // precalculate trig values
+ let sine = sin(theta);
+ let cosine = cos(theta);
+
+ /* bTemp will hold rotated ball this.positions. You
+ just need to worry about bTemp[1] this.position*/
+ let bTemp = [new p5.Vector(), new p5.Vector()];
+
+ /* this ball's this.position is relative to the other
+ so you can use the vector between them (bVect) as the
+ reference point in the rotation expressions.
+ bTemp[0].this.position.x and bTemp[0].this.position.y will initialize
+ automatically to 0.0, which is what you want
+ since b[1] will rotate around b[0] */
+ bTemp[1].x = cosine * distanceVect.x + sine * distanceVect.y;
+ bTemp[1].y = cosine * distanceVect.y - sine * distanceVect.x;
+
+ // rotate Temporary velocities
+ let vTemp = [new p5.Vector(), new p5.Vector()];
+
+ vTemp[0].x = cosine * this.velocity.x + sine * this.velocity.y;
+ vTemp[0].y = cosine * this.velocity.y - sine * this.velocity.x;
+ vTemp[1].x = cosine * other.velocity.x + sine * other.velocity.y;
+ vTemp[1].y = cosine * other.velocity.y - sine * other.velocity.x;
+
+ /* Now that velocities are rotated, you can use 1D
+ conservation of momentum equations to calculate
+ the final this.velocity along the x-axis. */
+ let vFinal = [new p5.Vector(), new p5.Vector()];
+
+ // final rotated this.velocity for b[0]
+ vFinal[0].x =
+ ((this.m - other.m) * vTemp[0].x + 2 * other.m * vTemp[1].x) /
+ (this.m + other.m);
+ vFinal[0].y = vTemp[0].y;
+
+ // final rotated this.velocity for b[0]
+ vFinal[1].x =
+ ((other.m - this.m) * vTemp[1].x + 2 * this.m * vTemp[0].x) /
+ (this.m + other.m);
+ vFinal[1].y = vTemp[1].y;
+
+ // hack to avoid clumping
+ bTemp[0].x += vFinal[0].x;
+ bTemp[1].x += vFinal[1].x;
+
+ /* Rotate ball this.positions and velocities back
+ Reverse signs in trig expressions to rotate
+ in the opposite direction */
+ // rotate balls
+ let bFinal = [new p5.Vector(), new p5.Vector()];
+
+ bFinal[0].x = cosine * bTemp[0].x - sine * bTemp[0].y;
+ bFinal[0].y = cosine * bTemp[0].y + sine * bTemp[0].x;
+ bFinal[1].x = cosine * bTemp[1].x - sine * bTemp[1].y;
+ bFinal[1].y = cosine * bTemp[1].y + sine * bTemp[1].x;
+
+ // update balls to screen this.position
+ other.position.x = this.position.x + bFinal[1].x;
+ other.position.y = this.position.y + bFinal[1].y;
+
+ this.position.add(bFinal[0]);
+
+ // update velocities
+ this.velocity.x = cosine * vFinal[0].x - sine * vFinal[0].y;
+ this.velocity.y = cosine * vFinal[0].y + sine * vFinal[0].x;
+ other.velocity.x = cosine * vFinal[1].x - sine * vFinal[1].y;
+ other.velocity.y = cosine * vFinal[1].y + sine * vFinal[1].x;
+ }
+ }
+
+ display() {
+ noStroke();
+ fill(204);
+ ellipse(this.position.x, this.position.y, this.r * 2, this.r * 2);
+ }
+}
+let balls = [new Ball(100, 400, 20), new Ball(700, 400, 80)];
+console.log(balls);
+function setup() {
+ createCanvas(710, 400);
+}
+
+function draw() {
+ background(51);
+ for (let i = 0; i < balls.length; i++) {
+ let b = balls[i];
+ b.update();
+ b.display();
+ b.checkBoundaryCollision();
+ balls[0].checkCollision(balls[1]);
+ }
+}
diff --git a/src/data/examples/zh-Hans/11_Objects/04_Inheritance.js b/src/data/examples/zh-Hans/11_Objects/04_Inheritance.js
index fd4681e71a..2218f3c83f 100644
--- a/src/data/examples/zh-Hans/11_Objects/04_Inheritance.js
+++ b/src/data/examples/zh-Hans/11_Objects/04_Inheritance.js
@@ -20,7 +20,7 @@ function draw() {
spots.display();
}
-class SpinArm {
+class Spin {
constructor(x, y, s) {
this.x = x;
this.y = y;
@@ -31,6 +31,12 @@ class SpinArm {
update() {
this.angle += this.speed;
}
+}
+
+class SpinArm extends Spin {
+ constructor(x, y, s) {
+ super(x, y, s)
+ }
display() {
strokeWeight(1);
@@ -44,17 +50,10 @@ class SpinArm {
}
}
-class SpinSpots {
+class SpinSpots extends Spin {
constructor(x, y, s, d) {
- this.x = x;
- this.y = y;
- this.speed = s;
+ super(x, y, s)
this.dim = d;
- this.angle = 0.0;
- }
-
- update() {
- this.angle += this.speed;
}
display() {
@@ -67,4 +66,4 @@ class SpinSpots {
ellipse(this.dim/2, 0, this.dim, this.dim);
pop();
}
-}
+}
\ No newline at end of file
diff --git a/src/data/examples/zh-Hans/13_Motion/07_Circle_Collision.js b/src/data/examples/zh-Hans/13_Motion/07_Circle_Collision.js
new file mode 100644
index 0000000000..876bc23d6e
--- /dev/null
+++ b/src/data/examples/zh-Hans/13_Motion/07_Circle_Collision.js
@@ -0,0 +1,145 @@
+/*
+ * @name Circle Collision
+ * @frame 710,400 (optional)
+ * @description This is a port of the "Circle Collision" example from processing.org/examples
This example uses vectors for better visualization of physical Quantity
+ */
+class Ball {
+ constructor(x, y, r) {
+ this.position = new p5.Vector(x, y);
+ this.velocity = p5.Vector.random2D();
+ this.velocity.mult(3);
+ this.r = r;
+ this.m = r * 0.1;
+ }
+ update() {
+ this.position.add(this.velocity);
+ }
+
+ checkBoundaryCollision() {
+ if (this.position.x > width - this.r) {
+ this.position.x = width - this.r;
+ this.velocity.x *= -1;
+ } else if (this.position.x < this.r) {
+ this.position.x = this.r;
+ this.velocity.x *= -1;
+ } else if (this.position.y > height - this.r) {
+ this.position.y = height - this.r;
+ this.velocity.y *= -1;
+ } else if (this.position.y < this.r) {
+ this.position.y = this.r;
+ this.velocity.y *= -1;
+ }
+ }
+
+ checkCollision(other) {
+ // Get distances between the balls components
+ let distanceVect = p5.Vector.sub(other.position, this.position);
+
+ // Calculate magnitude of the vector separating the balls
+ let distanceVectMag = distanceVect.mag();
+
+ // Minimum distance before they are touching
+ let minDistance = this.r + other.r;
+
+ if (distanceVectMag < minDistance) {
+ let distanceCorrection = (minDistance - distanceVectMag) / 2.0;
+ let d = distanceVect.copy();
+ let correctionVector = d.normalize().mult(distanceCorrection);
+ other.position.add(correctionVector);
+ this.position.sub(correctionVector);
+
+ // get angle of distanceVect
+ let theta = distanceVect.heading();
+ // precalculate trig values
+ let sine = sin(theta);
+ let cosine = cos(theta);
+
+ /* bTemp will hold rotated ball this.positions. You
+ just need to worry about bTemp[1] this.position*/
+ let bTemp = [new p5.Vector(), new p5.Vector()];
+
+ /* this ball's this.position is relative to the other
+ so you can use the vector between them (bVect) as the
+ reference point in the rotation expressions.
+ bTemp[0].this.position.x and bTemp[0].this.position.y will initialize
+ automatically to 0.0, which is what you want
+ since b[1] will rotate around b[0] */
+ bTemp[1].x = cosine * distanceVect.x + sine * distanceVect.y;
+ bTemp[1].y = cosine * distanceVect.y - sine * distanceVect.x;
+
+ // rotate Temporary velocities
+ let vTemp = [new p5.Vector(), new p5.Vector()];
+
+ vTemp[0].x = cosine * this.velocity.x + sine * this.velocity.y;
+ vTemp[0].y = cosine * this.velocity.y - sine * this.velocity.x;
+ vTemp[1].x = cosine * other.velocity.x + sine * other.velocity.y;
+ vTemp[1].y = cosine * other.velocity.y - sine * other.velocity.x;
+
+ /* Now that velocities are rotated, you can use 1D
+ conservation of momentum equations to calculate
+ the final this.velocity along the x-axis. */
+ let vFinal = [new p5.Vector(), new p5.Vector()];
+
+ // final rotated this.velocity for b[0]
+ vFinal[0].x =
+ ((this.m - other.m) * vTemp[0].x + 2 * other.m * vTemp[1].x) /
+ (this.m + other.m);
+ vFinal[0].y = vTemp[0].y;
+
+ // final rotated this.velocity for b[0]
+ vFinal[1].x =
+ ((other.m - this.m) * vTemp[1].x + 2 * this.m * vTemp[0].x) /
+ (this.m + other.m);
+ vFinal[1].y = vTemp[1].y;
+
+ // hack to avoid clumping
+ bTemp[0].x += vFinal[0].x;
+ bTemp[1].x += vFinal[1].x;
+
+ /* Rotate ball this.positions and velocities back
+ Reverse signs in trig expressions to rotate
+ in the opposite direction */
+ // rotate balls
+ let bFinal = [new p5.Vector(), new p5.Vector()];
+
+ bFinal[0].x = cosine * bTemp[0].x - sine * bTemp[0].y;
+ bFinal[0].y = cosine * bTemp[0].y + sine * bTemp[0].x;
+ bFinal[1].x = cosine * bTemp[1].x - sine * bTemp[1].y;
+ bFinal[1].y = cosine * bTemp[1].y + sine * bTemp[1].x;
+
+ // update balls to screen this.position
+ other.position.x = this.position.x + bFinal[1].x;
+ other.position.y = this.position.y + bFinal[1].y;
+
+ this.position.add(bFinal[0]);
+
+ // update velocities
+ this.velocity.x = cosine * vFinal[0].x - sine * vFinal[0].y;
+ this.velocity.y = cosine * vFinal[0].y + sine * vFinal[0].x;
+ other.velocity.x = cosine * vFinal[1].x - sine * vFinal[1].y;
+ other.velocity.y = cosine * vFinal[1].y + sine * vFinal[1].x;
+ }
+ }
+
+ display() {
+ noStroke();
+ fill(204);
+ ellipse(this.position.x, this.position.y, this.r * 2, this.r * 2);
+ }
+}
+let balls = [new Ball(100, 400, 20), new Ball(700, 400, 80)];
+console.log(balls);
+function setup() {
+ createCanvas(710, 400);
+}
+
+function draw() {
+ background(51);
+ for (let i = 0; i < balls.length; i++) {
+ let b = balls[i];
+ b.update();
+ b.display();
+ b.checkBoundaryCollision();
+ balls[0].checkCollision(balls[1]);
+ }
+}
diff --git a/src/data/ko.yml b/src/data/ko.yml
index 5e13b4fda9..a0062fde55 100644
--- a/src/data/ko.yml
+++ b/src/data/ko.yml
@@ -81,6 +81,7 @@ get started:
get-started5: 나의 첫 스케치
get-started6: '로 내려가 코드 작성법을 확인하세요. p5.js를 데스크탑 에디터에서 사용하는 방법은 여기서 확인하세요:'
get-started7: 데스크탑에 다운받기
+ get-started-button: Copy
settingUp-title: 데스크탑 에디터에 p5.js 설정하기
download-title: 다운로드 & 파일 설정
hosted-title: 호스팅된 p5.js 라이브러리 사용하기
@@ -477,11 +478,11 @@ learn:
여러분은 사실상 RGB값 설정만으로도 프로그래밍에 필요한 모든 색상을 누릴 수 있을텐데요, 마지막으로 RGB 외에 조정할 수 있는 색상
요소인 HSB(색조 Hue, 채도 Saturation, 밝기 Brightness)를 소개합니다
color-custom-ranges-li1x1: 색조 Hue
- color-custom-ranges-li1x2: '—색상의 종류, 기본 범위 0부터 255까지'
+ color-custom-ranges-li1x2: '—색상의 종류, 기본 범위 0부터 360까지'
color-custom-ranges-li2x1: 채도 Saturation
- color-custom-ranges-li2x2: '—색상의 생생함 정도, 기본 범위 0부터 255까지'
+ color-custom-ranges-li2x2: '—색상의 생생함 정도, 기본 범위 0부터 100까지'
color-custom-ranges-li3x1: 밝기 Brightness
- color-custom-ranges-li3x2: '—(당연히) 색상의 밝은 정도, 기본 범위 0부터 255까지'
+ color-custom-ranges-li3x2: '—(당연히) 색상의 밝은 정도, 기본 범위 0부터 100까지'
color-custom-ranges-p6x1: '이 '
color-custom-ranges-p6x2: ' 함수를 이용하여 HSB값 범위 또한 설정할 수 있습니다. 어떤 사람들은 색조(Hue)를 0부터 360까지 설정하거나(위의 사진처럼 360도의 둥근 색상띠가 생각나지요), 채도와 밝기는 0부터 100까지 설정(0-100% 퍼센티지와 유비되지요)하는 것을 선호하기도 합니다.'
coordinate-system-description1: '이 튜토리얼은 다니엘 쉬프만(Daniel Shiffman)저, 모건 카우프만(Morgan Kaufmann) 출판 도서 '
diff --git a/src/data/zh-Hans.yml b/src/data/zh-Hans.yml
index bdb16169f1..c86fa4f9f9 100644
--- a/src/data/zh-Hans.yml
+++ b/src/data/zh-Hans.yml
@@ -4,7 +4,7 @@ Sidebar-Title: 网站导航
Home: 主页
Editor: 编辑器
Download: 下载
-Donate: Donate
+Donate: 捐献
Start: 入门
Reference: 参考文献
Libraries: 程式库
@@ -14,7 +14,7 @@ Books: 书籍
Community: 社群
Contribute: 贡献
Forum: 论坛
-Showcase: Showcase
+Showcase: 案例展示
footerxh1: 归功于
footer1: p5.js 目前由
footer2: 的原
@@ -81,6 +81,7 @@ get started:
. If you would like to work on the the desktop version of p5.js you can
scroll down to
get-started7: downloading instructions
+ get-started-button: Copy
settingUp-title: Setting up p5.js with an editor on your own computer
download-title: Downloading a copy of the p5.js library
hosted-title: Using a hosted version of the p5.js library
@@ -91,7 +92,7 @@ get started:
download9: here
download10: >-
. Run your local server within the downloaded folder and on your browser, go
- to
+ to
download11: 'http://localhost:{your-port-num}/empty-example'
download4: >-
查看 index.html 您可以发现其中有个 p5.js 的链接。如果您想要使用极简化的档案(以加速网页加载的速度),将链接档案名改为
@@ -138,7 +139,7 @@ get started:
your-first-sketch6: >-
If you are using a screen reader, you must turn on the accessible outputs in
the p5 online editor, outside the editor you must add the accessibility
- library in your html. To learn more visit
+ library in your html. To learn more visit
your-first-sketch7: using p5 with a screen reader tutorial
your-first-sketch8: >-
If you've typed everything correctly, this will appear in the display
@@ -225,13 +226,8 @@ download:
supported-browsers: 浏览器支持
support-title: 支持 p5.js!
support-options: 支持方式
- support-1: >-
- We need your help! p5.js is free, open-source software. We want to make our
- community as open and inclusive as possible. You can support this work by
- making a donation to the
- support-2: >-
- , the organization that supports p5.js. Your donation supports software
- development for p5.js, education resources like code examples and tutorials,
+ support-1: 我们需要您的帮助!p5.js 是免费的开源软件。我们希望使我们的社区尽可能的开放和包容。您可以通过向支持 p5.js 的组织
+ support-2: 捐款来支持这项工作。您的捐款可以支持 p5.js 的软件开发、制作范例代码及教程之类的教育资源、
support-3: 奖学金
support-4: 及
support-5: 社群活动。
@@ -419,15 +415,15 @@ learn:
color-p2x3: ' 函数,我们能设置任何图形的颜色。我们也能使用 '
color-p2x4: ' 函数来设定窗口的背景颜色。如下范例。'
color-code1: |-
- background(255); // 设置背景颜色为白色
- stroke(0); // 设置外线颜色为黑色
- fill(150); // 设置填充色为灰色
+ background(255); // 设置背景颜色为白色
+ stroke(0); // 设置外线颜色为黑色
+ fill(150); // 设置填充色为灰色
rect(50,50,75,100); // 绘制四方形
color-p3x1: '使用 '
color-p3x2: ' 及 '
color-p3x3: >-
函数将会分别去除外线色灰填充色。我们直觉上可能会以为“ stroke(0) ”表示没有外线,可是我们必须记得 0
- 在这并不代表“无”,然而是代表黑色。此外,我们必须记得不要同时去除
+ 在这并不代表“无”,然而是代表黑色。此外,我们必须记得不要同时去除
color-p3x4: ' 及 '
color-p3x5: ' 不然不会有任何图形出现在画布上!'
color-p4x1: 以此同时,如果我们绘制两个图形,p5.js 将会使用最近(代码内从上至下)所定义的外线色及填充色值。
@@ -457,7 +453,7 @@ learn:
color-custom-ranges-title: 自定义颜色值范围
color-custom-ranges-p1x1: >-
介于 0 与 255 之间的 RGB 颜色值并不是 p5.js 唯一定义颜色的方法,事实上,我们能使用多种方法来定义颜色。比如说,您可能比较偏向于使用
- 0 至 100(如百分比)来定义颜色。为此您可以使用
+ 0 至 100(如百分比)来定义颜色。为此您可以使用
color-custom-ranges-p2x1: 以上函数表示:“OK,我们要使用红、绿、蓝值来定义颜色。而他们的值将介于 0 至 100 之间。
color-custom-ranges-p3x1: 虽然一般上这么做不会提供任何便利,您可以为个别颜色值提供不同的数值范围:
color-custom-ranges-p4x1: >-
@@ -465,11 +461,11 @@ learn:
至将会是介于 0 至 255 之间。
color-custom-ranges-p5x1: 最后,虽然您通常在编程时只需要用到 RGB 色值,您也能使用 HSB(色调、饱和度及亮度)模式来定义颜色。简单来说,HSB 色值使用方法如下:
color-custom-ranges-li1x1: 色调
- color-custom-ranges-li1x2: —色调值,默认上介于 0 至 255 之间。
+ color-custom-ranges-li1x2: —色调值,默认上介于 0 至 360 之间。
color-custom-ranges-li2x1: 饱和度
- color-custom-ranges-li2x2: —该颜色的饱和度,默认上介于 0 至 255 之间。
+ color-custom-ranges-li2x2: —该颜色的饱和度,默认上介于 0 至 100 之间。
color-custom-ranges-li3x1: 亮度
- color-custom-ranges-li3x2: —该颜色的亮度,默认上介于 0 至 255 之间。
+ color-custom-ranges-li3x2: —该颜色的亮度,默认上介于 0 至 100 之间。
color-custom-ranges-p6x1: '使用函数 '
color-custom-ranges-p6x2: ' 您就能设定您自选的数字范围。有些人会比较偏好使用介于 0 至 360 之间的数值来定义色调(就如色轮的 360 度一样)及 0 至 100 之间的数值来定义饱和度及亮度(介于 0% 至 100%)。'
coordinate-system-description1: '以下教程来自于由 Daniel Shiffman 篇写的《 '
@@ -803,7 +799,7 @@ books:
vastly popular JavaScript with the programming library p5.js. The skills you
will acquire from this book are highly transferable to a myriad of
industries and can be used towards building web applications, programmable
- robots, or generative art.
+ robots, or generative art.
book-5-order-a: Order from Apress
book-5-order-b: Order from Amazon
examples:
@@ -905,14 +901,14 @@ showcase:
project-q-2: How did you use p5.js in this project?
project-a-2-1-roni-cantor: >-
I used p5.js in this project to generate the sine wave and lerp (linear
- interpolation) formulas and display the visuals in the
+ interpolation) formulas and display the visuals in the
project-a-2-2-roni-cantor: >-
. I then used a feature in my code that exported my programmed graphic into
- an
+ an
project-a-2-3-roni-cantor: ' file. I needed an SVG file to give to the plotter—an '
project-a-2-4-roni-cantor: >-
—so that it understood where to draw the lines that I programmed. I sent
- this information to the plotter with a program called
+ this information to the plotter with a program called
project-a-2-5-roni-cantor: '!'
project-q-3: What's your favorite p5.js feature?
project-a-3-roni-cantor: ' because lines are fun and "lerp" is a fun word to say!'
@@ -989,7 +985,7 @@ showcase:
project-a-1-4-phuong: '," mainly taught by '
project-a-2-1-phuong: >-
I used p5.js to work on the visual part of the game. The animation sprites
- for Airi and the ghosts were drawn on an iPad app called
+ for Airi and the ghosts were drawn on an iPad app called
project-a-2-2-phuong: ' and then integrated into '
project-a-2-3-phuong: ' code. I mainly used examples at p5.play as a reference.'
project-a-2-4-phuong: 'For the endless scrolling background, I found a '
@@ -1003,7 +999,7 @@ showcase:
project-a-2-7-phuong: ' (currently, there is a beta version not available in public yet, but it will be very soon!). I added around 120 samples of my classmates saying the word "pew" with different intonations and 80 samples of background noise to train it. Then I integrated the model into the game with '
project-a-3-1-phuong: >-
I really love how easily you can create, manipulate, and delete HTML blocks
- and classes with the
+ and classes with the
project-a-3-2-phuong: ' via '
project-a-3-3-phuong: ' etc. But my most favorite function is '
project-a-3-4-phuong: ', since this is where you create magic.'
@@ -1032,13 +1028,12 @@ showcase:
project-a-2-1-chung: >-
This summer, I gave myself a challenge of making typographic posters with
coding, and this is one of the posters I made. I didn’t know until very
- recently that I could use motion sensor data with p5.js. I was also
- watching
+ recently that I could use motion sensor data with p5.js. I was also watching
dan-shiffman-matterjs-tutorial: Dan Shiffman’s matter.js tutorial videos
project-a-2-2-chung: ', so I thought why not combine the two and practice what I was learning?'
project-a-3-1-chung: >-
There are many things I love about p5.js such as the online community and
- beginner friendliness. What I really like right now is the
+ beginner friendliness. What I really like right now is the
project-a-3-2-chung: >-
, with which I can not only work online for myself but also share URLs
quickly in the present mode. For this project in particular, I had to do a
@@ -1049,7 +1044,7 @@ showcase:
project-a-4-3-chung: ' and build a tool for myself.'
project-a-5-1-chung: >-
As mentioned above, if you want to render out frames and video files out of
- p5.js sketches, check out my
+ p5.js sketches, check out my
project-a-5-2-chung: ' and let me know what you think.'
creator-from-casey-louise: 'From New York, New York'
project-a-1-1-casey-louise: >-
@@ -1060,7 +1055,7 @@ showcase:
interactive spaces based on sensor technologies.
project-a-1-3-casey-louise: >-
Casey: I started learning p5.js in 2018 in my first semester at ITP, though
- I had been dabbling in
+ I had been dabbling in
project-a-1-4-casey-louise: ' since 2012. I was introduced to Processing by my friend Pedro while I was studying graphic design, and it blew my mind. The idea of making my own tools for creating graphics and interactive art piqued my interest, but once I actually tried it, I was hooked. The first project I can remember was an eye that followed you around the screen, and it was sad when you left it alone.'
project-a-1-5-casey-louise: >-
Louise: I initially learned p5.js to make a website I was creating more
@@ -1069,7 +1064,7 @@ showcase:
project-a-2-1-casey-louise: >-
Casey: I was putting off learning shaders for a long time, and I was also
curious if I could use them in p5.js. Then I heard about a grant for open
- source, storytelling, and learning resource projects at ITP called
+ source, storytelling, and learning resource projects at ITP called
project-a-2-2-casey-louise: >-
. Since I wasn't finding much in the way of p5.js + shader documentation, I
decided to figure out how they're implemented in p5.js and create a resource
@@ -1085,7 +1080,7 @@ showcase:
project-a-4-1-casey-louise: >-
Casey: The beginning of the project (figuring out how things work) was us
reaching out to amazing people, asking questions, and asking for permission
- to use their examples in our project.
+ to use their examples in our project.
adam-ferris-repo-casey-louise: Adam Ferriss' GitHub repo
project-a-4-2-casey-louise: ' really laid the groundwork for us in understanding how shaders work in p5.js and provided a framework of approachable examples for us to build on. For some specific p5.js-related issues we were having, we reached out to '
project-a-4-3-casey-louise: ' and '
@@ -1098,7 +1093,7 @@ showcase:
Ferriss. Our aim was to do so in a way that a complete beginner can
understand how to implement it, so it was as much a technical challenge as
it was a challenge in teaching code to strangers and beginners. Here we drew
- inspiration from the way the
+ inspiration from the way the
openframeworks-book-casey-louise: openFrameworks book
project-a-4-7-casey-louise: ' is written. A fun "hey, it’s not hard and you can do it too" approach is what we believe in.'
project-a-5-1-casey-louise: 'Check out the '
@@ -1141,10 +1136,10 @@ teach:
teach-title2: Teach
teach-intro1: >-
Every teaching has its own unique goals, messages, conditions, and
- environments.
+ environments.
teach-intro2: >-
By documenting and sharing p5 workshops, classes, and materials, we hope to
- better connect the p5.js learner and educator communities around the world.
+ better connect the p5.js learner and educator communities around the world.
teach-intro3: Share or recommend
teach-intro4: 'your own teaching experiences, too!'
teach-heading: p5 Teaching Resources
@@ -1192,14 +1187,14 @@ teach:
teach-case1-content3: Advanced
teach-case1-content4: >-
To introduce a new public to programming through fun and compelling
- examples.
+ examples.
teach-case1-content5: >-
Method: in-person workshop, 1 hour per session, with different participant
each times. The students were using (Ubuntu) machines with the p5.js web
editor. I was teaching using a video projector as well as a board.
teach-case1-content5-1: >-
Materials: The exercises I gave where accessible through p5.js web-editor
- links available in
+ links available in
teach-case2-title: >-
Making The Thing that Makes the Thing: Exploring Generative Art & Design
with p5.js
@@ -1212,7 +1207,7 @@ teach:
teach-case2-content3: 'Priti: Intermediate & Ajith: Advanced'
teach-case2-content4: >-
To explore generative art & design and recreate some classical works
- with p5.js.
+ with p5.js.
teach-case2-content5: 'Methods: In-person, collaborative, hands-on workshop.'
teach-case2-content5-1: 'Materials: '
teach-case2-content5-2: 'course page '
@@ -1327,7 +1322,7 @@ teach:
ml5.js and p5.js.
teach-case9-content5: >-
This class is a mix of lectures, coding sessions, group discussions, and
- presentations. I used
+ presentations. I used
teach-case9-content5-1: GitHub
teach-case9-content5-2: ' to host class syllabus and all the coding materials, Google Slides for lectures and p5.js Web Editor for live coding sessions. Every week, there were one-on-one office hours to talk about any difficulties of coming up with an idea for the homework or any coding changes.'
teach-case9-content5-3: 'Methods: online/offline lectures and critiques.'
@@ -1342,7 +1337,7 @@ teach:
teach-case10-content5: >-
p5.js source code (for the introductory project), JavaScript source code
(illustrating some basic JavaScript functionalities), accompanying slides in
- .pdf format, all hosted publicly on GitHub.
+ .pdf format, all hosted publicly on GitHub.
teach-case10-content5-1: Overview
teach-case10-content5-2: ' of the workshop and its contents (including all links to the material hosted on GitHub) on my academic webpage.'
teach-case11-title: Digital Weaving & Physical Computing Workshop Series
diff --git a/src/templates/pages/community/index.hbs b/src/templates/pages/community/index.hbs
index 0875cef393..dc52d1d953 100644
--- a/src/templates/pages/community/index.hbs
+++ b/src/templates/pages/community/index.hbs
@@ -59,7 +59,7 @@ slug: community/
{{#i18n "teach-title"}}{{/i18n}}{{#i18n "teach1"}}{{/i18n}}
- {{#i18n "create-title"}}{{/i18n}}{{#i18n "create1"}}{{/i18n}}{{#i18n "create2"}}{{/i18n}}{{#i18n "create3"}}{{/i18n}}
+ {{#i18n "create-title"}}{{/i18n}}{{#i18n "create1"}}{{/i18n}}{{#i18n "create2"}}{{/i18n}}{{#i18n "create3"}}{{/i18n}}
{{#i18n "donate-title"}}{{/i18n}}{{#i18n "donate1"}}{{/i18n}}{{#i18n "donate2"}}{{/i18n}}{{#i18n "donate3"}}{{/i18n}}
diff --git a/src/templates/pages/get-started/index.hbs b/src/templates/pages/get-started/index.hbs
index 3f1ba168e6..365ae2b652 100644
--- a/src/templates/pages/get-started/index.hbs
+++ b/src/templates/pages/get-started/index.hbs
@@ -24,7 +24,7 @@ slug: get-started/
{{#i18n "first-sketch-heading1"}}{{/i18n}}
{{#i18n "your-first-sketch-intro1"}}{{/i18n}}{{#i18n "your-first-sketch-intro3"}}{{/i18n}}{{#i18n "your-first-sketch-intro4"}}{{/i18n}}
-
+
function setup() {
createCanvas(400, 400);
}
@@ -34,12 +34,15 @@ function draw() {
}
+
+
+
{{#i18n "your-first-sketch1"}}{{/i18n}}background(220);{{#i18n "your-first-sketch2"}}{{/i18n}}ellipse(50,50,80,80);.
{{#i18n "your-first-sketch3"}}{{/i18n}}
{{#i18n "first-sketch-heading1"}}{{/i18n}}
-
+
function setup() {
createCanvas(400, 400);
}
@@ -50,7 +53,10 @@ function draw() {
}
- {{#i18n "your-first-sketch4"}}{{/i18n}}
+
+
+
+ {{#i18n "your-first-sketch4"}}{{/i18n}}
{{#i18n "your-first-sketch5"}}{{/i18n}}
{{#i18n "first-sketch-heading2"}}{{/i18n}}
{{#i18n "your-first-sketch6"}}{{/i18n}}{{#i18n "your-first-sketch7"}}{{/i18n}}.
@@ -66,7 +72,7 @@ function draw() {
{{#i18n "first-sketch-heading3"}}{{/i18n}}
{{#i18n "your-first-sketch12"}}{{/i18n}}
-
+
function setup() {
createCanvas(400, 400);
}
@@ -80,8 +86,10 @@ function draw() {
ellipse(mouseX, mouseY, 80, 80);
}
-
- {{#i18n "your-first-sketch13"}}{{/i18n}}
+
+
+
+ {{#i18n "your-first-sketch13"}}{{/i18n}}
@@ -132,7 +140,10 @@ function draw() {
{{#i18n "download4"}}{{/i18n}}
- <script src="../p5.min.js"></script>
+ <script src="../p5.min.js"></script>
+
+
+
{{#i18n "hosted-title"}}{{/i18n}}
@@ -142,11 +153,13 @@ function draw() {
p5.js CDN{{#i18n "download6"}}{{/i18n}}
- <script src="https://cdn.jsdelivr.net/npm/p5@[p5_version]/lib/p5.js"></script>
-
+ <script src="https://cdn.jsdelivr.net/npm/p5@[p5_version]/lib/p5.js"></script>
+
+
+
{{#i18n "download7"}}{{/i18n}}
-
+
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/p5@[p5_version]/lib/p5.js"></script>
@@ -158,7 +171,9 @@ function draw() {
</body>
</html>
-
+
+
+
{{#i18n "environment-title"}}{{/i18n}}
@@ -188,9 +203,7 @@ function draw() {
$(this).html(html);
});
});
-
-
{{> footer}}
@@ -198,5 +211,5 @@ function draw() {
{{> asterisk}}
-
+
diff --git a/src/templates/pages/learn/index.hbs b/src/templates/pages/learn/index.hbs
deleted file mode 100644
index c7cf7d45cd..0000000000
--- a/src/templates/pages/learn/index.hbs
+++ /dev/null
@@ -1,362 +0,0 @@
----
-title: learn
-slug: learn/
----
-
-
-
- {{> sidebar}}
-
-
-
-
- {{#i18n "learn-title"}}{{/i18n}}
-
- {{#i18n "learn1"}}{{/i18n}}
- {{#i18n "learn2"}}{{/i18n}}
- {{#i18n "learn3"}}{{/i18n}}
-
-
-
- {{#i18n "introduction-to-p5js-title"}}{{/i18n}}
-
-
-
-
-
-
{{#i18n "getting-started"}}{{/i18n}}
-
-
-
-
-
-
-
-
-
{{#i18n "p5js-overview"}}{{/i18n}}
-
-
-
-
-
-
-
-
-
-
-
{{#i18n "p5js-processing"}}{{/i18n}}
-
-
-
-
-
-
-
-
-
{{#i18n "using-local-server"}}{{/i18n}}
-
-
-
-
-
-
-
-
-
-
-
{{#i18n "p5js-wiki"}}{{/i18n}}
-
-
-
-
-
-
-
-
-
{{#i18n "p5-screen-reader"}}{{/i18n}}
-
-
-
-
-
-
-
- {{#i18n "connecting-p5js-title"}}{{/i18n}}
-
-
-
-
-
-
{{#i18n "nodejs-and-socketio"}}{{/i18n}}
-
-
-
-
-
-
-
- {{#i18n "programming-topics-title"}}{{/i18n}}
-
-
-
-
-
-
{{#i18n "beyond-the-canvas"}}{{/i18n}}
-
-
-
-
-
-
-
-
-
{{#i18n "3d-webgl"}}{{/i18n}}
-
-
-
-
-
-
-
-
-
-
-
{{#i18n "color"}}{{/i18n}}
-
-
-
-
-
-
-
-
-
{{#i18n "coordinate-system-and-shapes"}}{{/i18n}}
-
-
-
-
-
-
-
-
-
-
-
{{#i18n "curves"}}{{/i18n}}
-
-
-
-
-
-
-
-
-
{{#i18n "interactivity"}}{{/i18n}}
-
-
-
-
-
-
-
-
-
-
-
{{#i18n "program-flow"}}{{/i18n}}
-
-
-
-
-
-
-
- {{#i18n "becoming-a-better-programmer-title"}}{{/i18n}}
-
-
-
-
-
-
{{#i18n "debugging"}}{{/i18n}}
-
-
-
-
-
-
-
-
-
{{#i18n "optimizing"}}{{/i18n}}
-
-
-
-
-
-
-
-
-
-
-
{{#i18n "test-driven-development"}}{{/i18n}}
-
-
-
-
-
-
-
- {{#i18n "contributing-to-the-community-title"}}{{/i18n}}
-
-
-
-
-
-
{{#i18n "development"}}{{/i18n}}
-
-
-
-
-
-
-
-
-
{{#i18n "looking-inside"}}{{/i18n}}
-
-
-
-
-
-
-
-
-
-
-
{{#i18n "writing-tutorial"}}{{/i18n}}
-
-
-
-
-
-
-
-
-
{{#i18n "creating-libraries"}}{{/i18n}}
-
-
-
-
-
-
-
-
-
- {{> footer}}
-
-
-
- {{> asterisk}}
-
-
diff --git a/src/templates/pages/reference/index.hbs b/src/templates/pages/reference/index.hbs
index 300e35920c..4d339460b3 100644
--- a/src/templates/pages/reference/index.hbs
+++ b/src/templates/pages/reference/index.hbs
@@ -26,7 +26,6 @@ slug: reference/
-
diff --git a/src/templates/partials/header.hbs b/src/templates/partials/header.hbs
index 0217663ba4..601f00c75c 100644
--- a/src/templates/partials/header.hbs
+++ b/src/templates/partials/header.hbs
@@ -11,8 +11,7 @@ title: header
Processing for Pi
Processing Foundation
-
Skip to main content
- This season, we need your help! Click here to #SupportP5!
-
\ No newline at end of file
+ {{!-- This season, we need your help! Click here to #SupportP5!
--}}
+