diff --git a/.github/workflows/test-image.yml b/.github/workflows/test-image.yml new file mode 100644 index 00000000..65dc6622 --- /dev/null +++ b/.github/workflows/test-image.yml @@ -0,0 +1,22 @@ +name: Check Team Image Size + +on: [push] + +jobs: + teamImageSize: + runs-on: ubuntu-latest + + steps: + - name: check out git repository + uses: actions/checkout@v2 + + - name: install Node.js + uses: actions/setup-node@v1 + with: + node-version: '14.x' + + - name: install dependencies + run: npm ci + + - name: check team image size + run: npm run test:team-image \ No newline at end of file diff --git a/.gitignore b/.gitignore index a86f424e..57728feb 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ _site/ .jekyll-metadata .DS_Store .vscode -*.*~ \ No newline at end of file +*.*~ +node_modules \ No newline at end of file diff --git a/_team/ggeorge.md b/_team/ggeorge.md index 906c7bd6..db79269b 100644 --- a/_team/ggeorge.md +++ b/_team/ggeorge.md @@ -2,7 +2,7 @@ name: "Getty George V" title: "Developer" group: "member" -img: "ggeorge.jpg" +img: "ggeorge.jpeg" github: "phreakester" --- diff --git a/_team/kpablo.md b/_team/kpablo.md index 1c91454f..69526a91 100644 --- a/_team/kpablo.md +++ b/_team/kpablo.md @@ -3,7 +3,7 @@ name: "Keona Mae Pablo" group: "member" title: "Developer" pronouns: "she/her" -img: "kpablo.jpg" +img: "kpablo.jpeg" graduating_year: 2022 github: "knayan11" --- \ No newline at end of file diff --git a/_team/ldalton.md b/_team/ldalton.md index 70a0c2e1..7deb2f54 100644 --- a/_team/ldalton.md +++ b/_team/ldalton.md @@ -2,7 +2,7 @@ name: "Luke Dalton" title: "Developer" group: "member" -img: "ldalton.jpg" +img: "ldalton.jpeg" github: ldalton02 diff --git a/_team/lxu.md b/_team/lxu.md index a8a15765..560e7387 100644 --- a/_team/lxu.md +++ b/_team/lxu.md @@ -2,7 +2,7 @@ name: "Lydia Xu" group: "member" title: "Developer" -img: "lxu.jpg" +img: "lxu.jpeg" github: "lydiaxuu" email: "lydiaxu@g.ucla.edu" --- \ No newline at end of file diff --git a/_team/mli.md b/_team/mli.md index 77b8101c..d3125ba4 100644 --- a/_team/mli.md +++ b/_team/mli.md @@ -4,7 +4,7 @@ pronouns: "she/her" group: "member" title: Developer graduating_year: 2024 -img: "mli.JPG" +img: "mli.png" github: "maggieelli" email: maggieelli@g.ucla.edu diff --git a/_team/mnieva.md b/_team/mnieva.md index de1265df..a31eecfb 100644 --- a/_team/mnieva.md +++ b/_team/mnieva.md @@ -2,7 +2,7 @@ name: "Matthew Nieva" title: "Dev Team Training Director" group: "dev board" -img: "mnieva.jpeg" +img: "mnieva.jpg" github: "matthewcn56" email: "matthewcn56@gmail.com" pronouns: "he/him" diff --git a/img/team/aasmani.png b/img/team/aasmani.png index dcbe06e9..eef71fac 100644 Binary files a/img/team/aasmani.png and b/img/team/aasmani.png differ diff --git a/img/team/agautier.jpg b/img/team/agautier.jpg index b675c738..1a8ee566 100644 Binary files a/img/team/agautier.jpg and b/img/team/agautier.jpg differ diff --git a/img/team/aghodsian.jpg b/img/team/aghodsian.jpg index 9ca7251f..e14ae1dc 100644 Binary files a/img/team/aghodsian.jpg and b/img/team/aghodsian.jpg differ diff --git a/img/team/agowrishetty.png b/img/team/agowrishetty.png index 4b5ac718..1e901969 100644 Binary files a/img/team/agowrishetty.png and b/img/team/agowrishetty.png differ diff --git a/img/team/anguyen2.jpg b/img/team/anguyen2.jpg index 93000ef5..56f1869d 100644 Binary files a/img/team/anguyen2.jpg and b/img/team/anguyen2.jpg differ diff --git a/img/team/apun.jpg b/img/team/apun.jpg index c3607614..cb5aada7 100644 Binary files a/img/team/apun.jpg and b/img/team/apun.jpg differ diff --git a/img/team/archie.jpeg b/img/team/archie.jpeg index c46b5027..a4c6adec 100644 Binary files a/img/team/archie.jpeg and b/img/team/archie.jpeg differ diff --git a/img/team/aung.jpg b/img/team/aung.jpg index b34d5eba..969a96d5 100644 Binary files a/img/team/aung.jpg and b/img/team/aung.jpg differ diff --git a/img/team/ckapler.png b/img/team/ckapler.png index b1032d2a..a7160408 100644 Binary files a/img/team/ckapler.png and b/img/team/ckapler.png differ diff --git a/img/team/cuy.png b/img/team/cuy.png index afe82664..a3084667 100644 Binary files a/img/team/cuy.png and b/img/team/cuy.png differ diff --git a/img/team/dolson.jpg b/img/team/dolson.jpg index 524b9c4f..d73b65ab 100644 Binary files a/img/team/dolson.jpg and b/img/team/dolson.jpg differ diff --git a/img/team/dponniah.png b/img/team/dponniah.png index 0b91e705..06331f9f 100644 Binary files a/img/team/dponniah.png and b/img/team/dponniah.png differ diff --git a/img/team/echeng.png b/img/team/echeng.png index bd3c971a..eb40f674 100644 Binary files a/img/team/echeng.png and b/img/team/echeng.png differ diff --git a/img/team/eyu.jpg b/img/team/eyu.jpg index 4a025831..9064711a 100644 Binary files a/img/team/eyu.jpg and b/img/team/eyu.jpg differ diff --git a/img/team/ezhong.jpg b/img/team/ezhong.jpg index 9377778c..7cb6e7fd 100644 Binary files a/img/team/ezhong.jpg and b/img/team/ezhong.jpg differ diff --git a/img/team/ggeorge.jpeg b/img/team/ggeorge.jpeg new file mode 100644 index 00000000..32a785cf Binary files /dev/null and b/img/team/ggeorge.jpeg differ diff --git a/img/team/ggeorge.jpg b/img/team/ggeorge.jpg deleted file mode 100644 index 291b9a49..00000000 Binary files a/img/team/ggeorge.jpg and /dev/null differ diff --git a/img/team/hwoo.png b/img/team/hwoo.png index bc1d9aef..a2fa8f36 100644 Binary files a/img/team/hwoo.png and b/img/team/hwoo.png differ diff --git a/img/team/isarkar.png b/img/team/isarkar.png index bf17df57..62aacd0f 100644 Binary files a/img/team/isarkar.png and b/img/team/isarkar.png differ diff --git a/img/team/ishah.jpg b/img/team/ishah.jpg index 06c48181..3f9fdb0c 100644 Binary files a/img/team/ishah.jpg and b/img/team/ishah.jpg differ diff --git a/img/team/jglickstein.jpg b/img/team/jglickstein.jpg index d877dde1..a68337f1 100644 Binary files a/img/team/jglickstein.jpg and b/img/team/jglickstein.jpg differ diff --git a/img/team/jiinkim.png b/img/team/jiinkim.png index 494da719..67810bd5 100644 Binary files a/img/team/jiinkim.png and b/img/team/jiinkim.png differ diff --git a/img/team/kpablo.jpeg b/img/team/kpablo.jpeg new file mode 100644 index 00000000..8e2623c9 Binary files /dev/null and b/img/team/kpablo.jpeg differ diff --git a/img/team/kpablo.jpg b/img/team/kpablo.jpg deleted file mode 100644 index 813cf02e..00000000 Binary files a/img/team/kpablo.jpg and /dev/null differ diff --git a/img/team/ldalton.jpeg b/img/team/ldalton.jpeg new file mode 100644 index 00000000..7487c9cb Binary files /dev/null and b/img/team/ldalton.jpeg differ diff --git a/img/team/ldalton.jpg b/img/team/ldalton.jpg deleted file mode 100644 index c617cbc2..00000000 Binary files a/img/team/ldalton.jpg and /dev/null differ diff --git a/img/team/lxu.jpeg b/img/team/lxu.jpeg new file mode 100644 index 00000000..f9a00145 Binary files /dev/null and b/img/team/lxu.jpeg differ diff --git a/img/team/lxu.jpg b/img/team/lxu.jpg deleted file mode 100644 index 458552f0..00000000 Binary files a/img/team/lxu.jpg and /dev/null differ diff --git a/img/team/matruiz.jpg b/img/team/matruiz.jpg index e4178799..cf4af4d9 100644 Binary files a/img/team/matruiz.jpg and b/img/team/matruiz.jpg differ diff --git a/img/team/mkearney.png b/img/team/mkearney.png index a7c31838..fe1840a1 100644 Binary files a/img/team/mkearney.png and b/img/team/mkearney.png differ diff --git a/img/team/mli.JPG b/img/team/mli.JPG deleted file mode 100644 index 5f8ee2c5..00000000 Binary files a/img/team/mli.JPG and /dev/null differ diff --git a/img/team/mli.png b/img/team/mli.png new file mode 100644 index 00000000..7f40ceb3 Binary files /dev/null and b/img/team/mli.png differ diff --git a/img/team/mnieva.jpeg b/img/team/mnieva.jpeg deleted file mode 100644 index ab34d2d6..00000000 Binary files a/img/team/mnieva.jpeg and /dev/null differ diff --git a/img/team/mnieva.jpg b/img/team/mnieva.jpg new file mode 100644 index 00000000..0bcd3321 Binary files /dev/null and b/img/team/mnieva.jpg differ diff --git a/img/team/njeong.jpg b/img/team/njeong.jpg index a76678a8..ef3020a7 100644 Binary files a/img/team/njeong.jpg and b/img/team/njeong.jpg differ diff --git a/img/team/nvan.jpg b/img/team/nvan.jpg index ee06da24..13653aed 100644 Binary files a/img/team/nvan.jpg and b/img/team/nvan.jpg differ diff --git a/img/team/rtran.jpg b/img/team/rtran.jpg index 2d7f7153..a626bdd4 100644 Binary files a/img/team/rtran.jpg and b/img/team/rtran.jpg differ diff --git a/img/team/rwang.png b/img/team/rwang.png index bb638542..55d87b91 100644 Binary files a/img/team/rwang.png and b/img/team/rwang.png differ diff --git a/img/team/sharvani.png b/img/team/sharvani.png index 812e30e0..df55500f 100644 Binary files a/img/team/sharvani.png and b/img/team/sharvani.png differ diff --git a/img/team/skelman.jpg b/img/team/skelman.jpg index 607f1afd..dab9eb4f 100644 Binary files a/img/team/skelman.jpg and b/img/team/skelman.jpg differ diff --git a/img/team/spark.jpg b/img/team/spark.jpg index 5b68e9aa..efd79479 100644 Binary files a/img/team/spark.jpg and b/img/team/spark.jpg differ diff --git a/img/team/sschoenmeyer.png b/img/team/sschoenmeyer.png index 77e85d5a..6d35e57f 100644 Binary files a/img/team/sschoenmeyer.png and b/img/team/sschoenmeyer.png differ diff --git a/img/team/ssharfuddin.jpg b/img/team/ssharfuddin.jpg index e744975b..b3a45ff9 100644 Binary files a/img/team/ssharfuddin.jpg and b/img/team/ssharfuddin.jpg differ diff --git a/img/team/vha.png b/img/team/vha.png index 7183bf3e..4a1be9aa 100644 Binary files a/img/team/vha.png and b/img/team/vha.png differ diff --git a/img/team/zxue.jpg b/img/team/zxue.jpg index a18f24da..95fbe959 100644 Binary files a/img/team/zxue.jpg and b/img/team/zxue.jpg differ diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..6db0e449 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,569 @@ +{ + "name": "teach-la-website", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "array-flatten": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", + "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.4" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", + "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "requires": { + "mimic-response": "^2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "image-size": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.9.3.tgz", + "integrity": "sha512-5SakFa79uhUVSjKeQE30GVzzLJ0QNzB53+I+/VD1vIesD6GP6uatWIlgU0uisFNLt1u0d6kBydp7yfk+lLJhLQ==", + "requires": { + "queue": "6.0.1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, + "node-abi": { + "version": "2.19.3", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.19.3.tgz", + "integrity": "sha512-9xZrlyfvKhWme2EXFKQhZRp1yNWT/uI1luYPr3sFl+H4keYY4xR+1jO7mvTTijIsHf1M+QDe9uWuKeEpLInIlg==", + "requires": { + "semver": "^5.4.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "node-addon-api": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz", + "integrity": "sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==" + }, + "noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "prebuild-install": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.0.1.tgz", + "integrity": "sha512-7GOJrLuow8yeiyv75rmvZyeMGzl8mdEX5gY69d6a6bHWmiPevwqFw+tQavhK0EYMaSg3/KD24cWqeQv1EWsqDQ==", + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.7.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" + }, + "dependencies": { + "simple-get": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", + "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "requires": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + } + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "queue": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.1.tgz", + "integrity": "sha512-AJBQabRCCNr9ANq8v77RJEv73DPbn55cdTb+Giq4X0AVnNVZvMHlYp7XlQiN+1npCZj1DuSmaA2hYVUUDgxFDg==", + "requires": { + "inherits": "~2.0.3" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "sharp": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.27.1.tgz", + "integrity": "sha512-IQNXWdspb4nZcJemXa6cfgz+JvKONsuqP8Mwi1Oti23Uo7+J+UF2jihJDf6I1BQbrmhcZ0lagH/1WYG+ReAzyQ==", + "requires": { + "array-flatten": "^3.0.0", + "color": "^3.1.3", + "detect-libc": "^1.0.3", + "node-addon-api": "^3.1.0", + "npmlog": "^4.1.2", + "prebuild-install": "^6.0.0", + "semver": "^7.3.4", + "simple-get": "^4.0.0", + "tar-fs": "^2.1.1", + "tunnel-agent": "^0.6.0" + } + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "simple-get": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.0.tgz", + "integrity": "sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ==", + "requires": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + }, + "dependencies": { + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "requires": { + "mimic-response": "^3.1.0" + } + }, + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + } + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..491ac1ac --- /dev/null +++ b/package.json @@ -0,0 +1,28 @@ +{ + "name": "teach-la-website", + "version": "1.0.0", + "description": "Tests for the TeachLA Website", + "type": "module", + "directories": { + "test": "test" + }, + "scripts": { + "test": "npm run test:team-image", + "test:team-image": "node ./test/checkImageSize.js", + "test:fix-team-image": "node ./test/fixImageSize.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/uclaacm/teach-la-website.git" + }, + "author": "acm teach la", + "license": "MIT", + "bugs": { + "url": "https://github.com/uclaacm/teach-la-website/issues" + }, + "homepage": "https://github.com/uclaacm/teach-la-website#readme", + "dependencies": { + "image-size": "^0.9.3", + "sharp": "^0.27.1" + } +} diff --git a/test/checkImageSize.js b/test/checkImageSize.js new file mode 100644 index 00000000..d951f3d4 --- /dev/null +++ b/test/checkImageSize.js @@ -0,0 +1,24 @@ +import { imageSizeChecker, getAllFiles } from './library.js'; + +const finalFilesArray = getAllFiles("./img/team"); +let incorrectFiles = 0; +let fixableFiles = 0; +for (const file of finalFilesArray){ //Check the image size of all image files + const imageStatus = imageSizeChecker(file); + if (imageStatus.error){ + console.error("Error: " + file + " -- " + imageStatus.message); + incorrectFiles++; + if (imageStatus.fixable){ + fixableFiles++; + console.log("Image is fixable. To fix the image, type the following line: npm run test:fix-team-image") + } + console.log("\n") + } +} + +if (incorrectFiles != 0){ + console.log("------------------------------------------------------------------------------------------------------") + console.log(incorrectFiles + " files have errors\n" + fixableFiles +" files are fixable"); + process.exit(1); +} + diff --git a/test/fixImageSize.js b/test/fixImageSize.js new file mode 100644 index 00000000..92c499b1 --- /dev/null +++ b/test/fixImageSize.js @@ -0,0 +1,18 @@ +import { imageSizeChecker, getAllFiles, fixImage } from './library.js'; + +let fixedFiles = 0; +const finalFilesArray = getAllFiles("./img/team"); +for (const file of finalFilesArray){ + const imageStatus = imageSizeChecker(file); + if (imageStatus.error && imageStatus.fixable){ + try{ + fixImage(file); + fixedFiles++; + } + catch{ + console.log("Could not fix " + file + ". You should fix it manually. Type npm run test:team-image and see what needs to be fixed.") + } + } +} +console.log(fixedFiles + " Files have been fixed"); +console.log("------------------------------------------------------------------------------------------------------\n"); diff --git a/test/library.js b/test/library.js new file mode 100644 index 00000000..ff219642 --- /dev/null +++ b/test/library.js @@ -0,0 +1,121 @@ +import { readdirSync, statSync, rename } from 'fs'; +import sizeOf from 'image-size'; +import sharp from "sharp"; + +function getFileSizeMB(fileStats){ + return (fileStats.size) / (1024*1024); +} + +function getFileSizeKB(fileStats){ + return (fileStats.size) / 1024; +} + +//Check if image is larger than 1MB +function isFileSizeBig(fileStats){ + return getFileSizeMB(fileStats) > 1; +} + +function isImageWidthLarge(imageSize){ + let width = imageSize.width; + return (width >1024); +} + +function isImageWidthSmall(imageSize){ + let width = imageSize.width; + return (width <512); +} + +function isAValidExtension(imageFileName){ + return (imageFileName.includes(".jpg") | imageFileName.includes(".png") | imageFileName.includes(".jpeg")); +} + +const errorType = { + ASPECT_RATIO_ERROR: { + error: true, + message: "Not a square aspect ratio", + fixable: false + }, + SMALL_IMAGE_ERROR: { + error: true, + message: "Your image is too small and should be 512px by 512px", + fixable: false + }, + LARGE_IMAGE_ERROR: { + error: true, + message: "Your image is too large and should be 512px by 512px", + fixable: true + }, + EXTENSION_ERROR: { + error: true, + message: "Image File Name does not have lower case extension", + fixable: true + }, + FILE_SIZE_ERROR: { + error: true, + message: "Your file should be below 1MB", + fixable: true + }, + NO_ERROR: { + error: false, + message: "No Error" + } +} + +function imageSizeChecker(input){ //input here is the image file + //let inputName = "./img/" + input; + const imageSize = sizeOf(input); + const width = imageSize.width; + const height = imageSize.height; + const imageStats = statSync(input); + if (width != height){ + return errorType.ASPECT_RATIO_ERROR; + } + else if (isImageWidthSmall(imageSize)){ + return errorType.SMALL_IMAGE_ERROR; + } + else if (isFileSizeBig(imageStats)){ + return errorType.FILE_SIZE_ERROR; + } + else if(isImageWidthLarge(imageSize)){ + return errorType.LARGE_IMAGE_ERROR; + } + else if (!isAValidExtension(input)){ + return errorType.EXTENSION_ERROR; + } + else { + return errorType.NO_ERROR; + } +}; + +function getAllFiles(directoryName){ + const teamFiles = readdirSync(directoryName); + const finalFilesArray = []; + for (const file of teamFiles){ + if (isAValidExtension(file.toLowerCase())){ + finalFilesArray.push(directoryName + "/" + file); + } + else{ + continue; + } + } + return finalFilesArray; +} + +function fixImage(imageFileName){ + sharp(imageFileName) + .resize({width: 512, height: 512}) + .toFile(imageFileName+ "1").then(()=>{ + rename(imageFileName+ "1",imageFileName, (err) => { + if (err) throw err; + const imageSize = sizeOf(imageFileName); + const width = imageSize.width; + const height = imageSize.height; + const imageStats = statSync(imageFileName); + console.log(imageFileName + " has been fixed\n" + + imageFileName + " has size " + getFileSizeKB(imageStats).toFixed(2)+"KB\n" + + imageFileName + " has dimensions "+width +"px by " +height+"px'\n"); + }); + }); +} + +export { imageSizeChecker, getAllFiles, fixImage }; \ No newline at end of file