├── .gitignore ├── CONTRIBUTING.md ├── LICENSE.md ├── Procfile ├── README.md ├── package-lock.json ├── package.json ├── public ├── assets │ ├── Alex.png │ ├── Alondra.png │ ├── Alyssha.jpg │ ├── Bianca.jpg │ ├── Brian.png │ ├── Dana.jpg │ ├── Erika.jpg │ ├── Jacob.jpg │ ├── JacobGood.jpg │ ├── Sebastian.png │ └── logo.svg ├── css │ ├── normalize.css │ └── style.css └── js │ └── main.js ├── resources.js ├── server.js └── views └── index.ejs /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Contributing 4 | 5 | Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. 6 | 7 | Please make sure to follow our guidelines below before making any contributions. 8 | 9 | - [Contributing](#contributing) 10 | - [Understanding Coding-Resources-API branch structure](#understanding-coding-resources-api-branch-structure) 11 | - [Permanent Branches](#permanent-branches) 12 | - [Main](#main) 13 | - [Test](#test) 14 | - [Resources](#resources) 15 | - [How often should I stage changes?](#how-often-should-i-stage-changes) 16 | - [Where should I make my pull request to?](#where-should-i-make-my-pull-request-to) 17 | - [Creating an Issue](#creating-an-issue) 18 | - [How to make a PR](#how-to-make-a-pr) 19 | 20 | ## Understanding Coding-Resources-API branch structure 21 | ### Permanent Branches 22 | #### Main 23 | - This branch is reserved for tested versions of our code-base. Do not make a PR directly into this branch, as we require testing before we can confirm any feature. 24 | 25 | 26 | 27 | #### Test 28 | - This branch is used to test a collection of newly added features, which will eventually become a future iteration of our application after thoroughly testing for bugs and code/guideline consistency. If you are interested in creating your own feature, we suggest that you first open an issue here: https://github.com/the-api-administration/coding-resources-api/issues and wait for our team to respond to your message and approve the implementation. If you are interested in taking responsibility for the implementation, please assign yourself to the issue once you submit it, so that our team can note your interest. 29 | 30 | 31 | 32 | #### Resources 33 | - This branch is reserved for adding new resources to our resources.js file. When adding a resource, follow these styling guidelines or we will be unable to address your contribution. 34 | 35 | Resource Addition Guidelines: 36 | 37 | - The resource must strictly pertain to coding. Please do not include resources that represent non-coding-related content. 38 | - The resources provided must strictly pertain to specific coding related topics, technologies, and content. We will not accept resources that are too broad and/or do not provide a specific focus. 39 | 40 | Resource Styling: 41 | 42 | - Object values must contain single quotes only. 43 | - Keywords array should contain strings only. 44 | - Keywords are preferred in lower case. 45 | - Keywords must be specific. Do not include broad keywords such as 'guide', 'tutorial', 'information' or we will be unable to process your PR. Please opt for keywords that are specific to the content. 46 | - Description should be clear and concise. 47 | 48 | Resource Format: 49 | 50 | ``` 51 | { 52 | name: 'resource name', 53 | url: 'url here', 54 | description: 'add a detailed description', 55 | keywords: ['each', 'keyword', 'should', 'be', 'a', 'string'] 56 | }, 57 | ``` 58 | 59 | 60 | 61 | ## How often should I stage changes? 62 | 63 | We require that you stage your changes for each section of code you develop. Do not stage changes with a single large commit, or we will instantly close your pull request. We would like you to make commits for every task you complete in your code and avoid working through multiple files when possible. Your commit message should include a detailed view of the work you are implementing and an issue you are solving if you have assigned yourself to an issue. 64 | 65 | 66 | 67 | ## Where should I make my pull request to? 68 | 69 | Never make a pull request into our main branch. If you plan on adding a feature, wait until you have completely finished that feature and then make a pull request into "test" with a clear description of the issue you are solving. If you are planning on adding a resource, please make a pull request to the resources branch. 70 | 71 | 72 | 73 | ## Creating an Issue 74 | 75 | We'd love to hear your advice, feature suggestions and/or read about any bugs you've encountered. Please create an issue here: https://github.com/the-api-administration/coding-resources-api/issues. If you wish to implement a feature on your own, please add yourself as an assignee to the issue you create, so that we can note your interest. When creating an issue, please attempt to outline in detail the topic of the issue, and a thorough description of what the issue attempts to solve. 76 | 77 | If you have encountered a bug, please provide as much information as you can to help us replicate the issue on our own end. Depending on the issue, it may be useful to communicate your browser, screen width, and/or anything that relates to your specific encounter. 78 | 79 | 80 | 81 | ## How to make a PR 82 | 83 | If you want to help us improve our API, please fork the repo and follow these steps before creating a pull request. 84 | 85 | 1. Visit [our Issues](https://github.com/the-api-administration/coding-resources-api/issues) page to check if an issue exists and does not yet have an assignee. Assign yourself to the issue if you find what you are planning to solve. 86 | 2. Fork the Project 87 | 3. Clone your fork on your local device. The link can be found under the code drop-down at the base of your fork (`git clone `) 88 | 4. If you are adding a resource, please skip to step 6. 89 | 5. Create a new branch for your Feature (`git branch AmazingFeature`) 90 | 6. Switch to the branch you are working on (`git checkout AmazingFeature`) 91 | 7. Make your changes, commit after every isolated task. 92 | 8. Add all of your changes (`git add ` or `git add .`). Do not push any changes to dependencies unless the Issue calls for it. 93 | 9. Commit your changes with a detailed description (`git commit -m 'added a, solved b, etc...'`) 94 | 10. Push to the Branch (`git push origin AmazingFeature`) 95 | 11. Open a Pull Request and follow the rules under "Where should I make my pull request to?" 96 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 the-api-administration 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: node server.js 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Coding-Resources-API 2 | 3 |
4 | 5 | [![Contributors][contributors-shield]][contributors-url] 6 | [![Forks][forks-shield]][forks-url] 7 | [![Stargazers][stars-shield]][stars-url] 8 | [![Pull Requests][pullrequests-shield]][pullrequests-url] 9 | [![Issues][issues-shield]][issues-url] 10 | [![MIT License][license-shield]][license-url] 11 | 12 | 13 |
14 |
15 | 16 | Logo 17 | 18 | 19 |

Coding Resources API

20 | 21 |

22 | Provides Coding Resources 23 |
24 | Explore the docs » 25 |
26 |
27 | View Demo 28 | · 29 | Report Bug 30 | · 31 | Request Feature 32 |

33 |
34 | 35 | 36 |
37 | Table of Contents 38 |
    39 |
  1. 40 | About The Project 41 | 44 |
  2. 45 |
  3. Getting Started
  4. 46 |
  5. Usage
  6. 47 |
  7. Roadmap
  8. 48 |
  9. Contributing
  10. 49 |
  11. License
  12. 50 |
  13. Acknowledgments
  14. 51 |
52 |
53 | 54 | 55 | 56 | ## About The Project 57 | 58 | Search for coding resources by relevant keywords. This API serves educational content for a wide variety of computer science topics, languages and technologies relevant to web development. 59 | 60 |

(back to top)

61 | 62 | ### Built With 63 | 64 | - EJS 65 | - CSS 66 | - JavaScript 67 | - Node.js 68 | - Express 69 | 70 |

(back to top)

71 | 72 | 73 | 74 | ## Getting Started 75 | 76 | Simply visit: https://coding-resources-api.up.railway.app/ and read our documentation to learn how to interact with our API! If you would like to help us out, feel free to create issues through our github repo. 77 | 78 |

(back to top)

79 | 80 | 81 | 82 | ## Usage 83 | 84 | Access our API endpoints to receive coding resource data in JSON format. 85 | 86 |

(back to top)

87 | 88 | 89 | 90 | ## Roadmap 91 | 92 | - [X] Add search functionality 93 | - [ ] Offer more resources 94 | - [X] Support mobile devices 95 | - [ ] Create more endpoints 96 | 97 | See the [open issues](https://github.com/the-api-administration/coding-resources-api/issues) for a full list of proposed features (and known issues). 98 | 99 |

(back to top)

100 | 101 | 102 | 103 | ## Contributing 104 | 105 | Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. 106 | 107 | Please visit `CONTRIBUTING.md` to read about our guidelines before making a contribution to our project. Thank you! 108 | 109 |

(back to top)

110 | 111 | 112 | 113 | ## License 114 | 115 | Distributed under the MIT License. See `LICENSE.md` for more information. 116 | 117 |

(back to top)

118 | 119 | 120 | 121 | ## Acknowledgments 122 | 123 | - [@AlexisInTech](https://twitter.com/alexisintech) 124 | - [@AlysshaLewin](https://twitter.com/AlysshaLewin) 125 | - [@Asper_Jacob](https://twitter.com/asper_jacob) 126 | - [@BrianSchneeDev](https://twitter.com/BrianSchneeDev) 127 | - [@BytesByBianca](https://twitter.com/bytesbybianca) 128 | - [@DanaMiteCoder](https://twitter.com/danamitecoder) 129 | - [@Dev_Ethos](https://twitter.com/dev_ethos/) 130 | - [@ErikaTeal_](https://twitter.com/erikateal_) 131 | - [@JacobEGood](https://twitter.com/jacobegood) 132 | - [@MERN_Man_Luke](https://twitter.com/MERN_Man_Luke) 133 | - [@MoraCodes](https://twitter.com/moracodes) 134 | 135 |

(back to top)

136 | 137 | 138 | 139 | [contributors-shield]: https://img.shields.io/github/contributors/the-api-administration/coding-resources-api.svg?style=for-the-badge 140 | [contributors-url]: https://github.com/the-api-administration/coding-resources-api/graphs/contributors 141 | [forks-shield]: https://img.shields.io/github/forks/the-api-administration/coding-resources-api.svg?style=for-the-badge 142 | [forks-url]: https://github.com/the-api-administration/coding-resources-api/network/members 143 | [stars-shield]: https://img.shields.io/github/stars/the-api-administration/coding-resources-api.svg?style=for-the-badge 144 | [stars-url]: https://github.com/the-api-administration/coding-resources-api/stargazers 145 | [pullrequests-shield]: https://img.shields.io/github/issues-pr/the-api-administration/coding-resources-api?color=red&label=Pull%20Requests&style=for-the-badge 146 | [pullrequests-url]: https://github.com/the-api-administration/coding-resources-api/pulls 147 | [issues-shield]: https://img.shields.io/github/issues/the-api-administration/coding-resources-api.svg?style=for-the-badge 148 | [issues-url]: https://github.com/the-api-administration/coding-resources-api/issues 149 | [license-shield]: https://img.shields.io/github/license/the-api-administration/coding-resources-api.svg?style=for-the-badge 150 | [license-url]: https://github.com/the-api-administration/coding-resources-api/blob/master/LICENSE.md 151 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "resources_api", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "resources_api", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "cors": "^2.8.5", 13 | "ejs": "^3.1.8", 14 | "express": "^4.18.1" 15 | } 16 | }, 17 | "node_modules/accepts": { 18 | "version": "1.3.8", 19 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 20 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 21 | "dependencies": { 22 | "mime-types": "~2.1.34", 23 | "negotiator": "0.6.3" 24 | }, 25 | "engines": { 26 | "node": ">= 0.6" 27 | } 28 | }, 29 | "node_modules/ansi-styles": { 30 | "version": "4.3.0", 31 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 32 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 33 | "dependencies": { 34 | "color-convert": "^2.0.1" 35 | }, 36 | "engines": { 37 | "node": ">=8" 38 | }, 39 | "funding": { 40 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 41 | } 42 | }, 43 | "node_modules/array-flatten": { 44 | "version": "1.1.1", 45 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 46 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 47 | }, 48 | "node_modules/async": { 49 | "version": "3.2.4", 50 | "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", 51 | "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" 52 | }, 53 | "node_modules/balanced-match": { 54 | "version": "1.0.2", 55 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 56 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 57 | }, 58 | "node_modules/body-parser": { 59 | "version": "1.20.0", 60 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", 61 | "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", 62 | "dependencies": { 63 | "bytes": "3.1.2", 64 | "content-type": "~1.0.4", 65 | "debug": "2.6.9", 66 | "depd": "2.0.0", 67 | "destroy": "1.2.0", 68 | "http-errors": "2.0.0", 69 | "iconv-lite": "0.4.24", 70 | "on-finished": "2.4.1", 71 | "qs": "6.10.3", 72 | "raw-body": "2.5.1", 73 | "type-is": "~1.6.18", 74 | "unpipe": "1.0.0" 75 | }, 76 | "engines": { 77 | "node": ">= 0.8", 78 | "npm": "1.2.8000 || >= 1.4.16" 79 | } 80 | }, 81 | "node_modules/brace-expansion": { 82 | "version": "1.1.11", 83 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 84 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 85 | "dependencies": { 86 | "balanced-match": "^1.0.0", 87 | "concat-map": "0.0.1" 88 | } 89 | }, 90 | "node_modules/bytes": { 91 | "version": "3.1.2", 92 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 93 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 94 | "engines": { 95 | "node": ">= 0.8" 96 | } 97 | }, 98 | "node_modules/call-bind": { 99 | "version": "1.0.2", 100 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 101 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 102 | "dependencies": { 103 | "function-bind": "^1.1.1", 104 | "get-intrinsic": "^1.0.2" 105 | }, 106 | "funding": { 107 | "url": "https://github.com/sponsors/ljharb" 108 | } 109 | }, 110 | "node_modules/chalk": { 111 | "version": "4.1.2", 112 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 113 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 114 | "dependencies": { 115 | "ansi-styles": "^4.1.0", 116 | "supports-color": "^7.1.0" 117 | }, 118 | "engines": { 119 | "node": ">=10" 120 | }, 121 | "funding": { 122 | "url": "https://github.com/chalk/chalk?sponsor=1" 123 | } 124 | }, 125 | "node_modules/color-convert": { 126 | "version": "2.0.1", 127 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 128 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 129 | "dependencies": { 130 | "color-name": "~1.1.4" 131 | }, 132 | "engines": { 133 | "node": ">=7.0.0" 134 | } 135 | }, 136 | "node_modules/color-name": { 137 | "version": "1.1.4", 138 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 139 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 140 | }, 141 | "node_modules/concat-map": { 142 | "version": "0.0.1", 143 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 144 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 145 | }, 146 | "node_modules/content-disposition": { 147 | "version": "0.5.4", 148 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 149 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 150 | "dependencies": { 151 | "safe-buffer": "5.2.1" 152 | }, 153 | "engines": { 154 | "node": ">= 0.6" 155 | } 156 | }, 157 | "node_modules/content-type": { 158 | "version": "1.0.4", 159 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 160 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", 161 | "engines": { 162 | "node": ">= 0.6" 163 | } 164 | }, 165 | "node_modules/cookie": { 166 | "version": "0.5.0", 167 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 168 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 169 | "engines": { 170 | "node": ">= 0.6" 171 | } 172 | }, 173 | "node_modules/cookie-signature": { 174 | "version": "1.0.6", 175 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 176 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 177 | }, 178 | "node_modules/cors": { 179 | "version": "2.8.5", 180 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 181 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 182 | "dependencies": { 183 | "object-assign": "^4", 184 | "vary": "^1" 185 | }, 186 | "engines": { 187 | "node": ">= 0.10" 188 | } 189 | }, 190 | "node_modules/debug": { 191 | "version": "2.6.9", 192 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 193 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 194 | "dependencies": { 195 | "ms": "2.0.0" 196 | } 197 | }, 198 | "node_modules/depd": { 199 | "version": "2.0.0", 200 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 201 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 202 | "engines": { 203 | "node": ">= 0.8" 204 | } 205 | }, 206 | "node_modules/destroy": { 207 | "version": "1.2.0", 208 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 209 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 210 | "engines": { 211 | "node": ">= 0.8", 212 | "npm": "1.2.8000 || >= 1.4.16" 213 | } 214 | }, 215 | "node_modules/ee-first": { 216 | "version": "1.1.1", 217 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 218 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 219 | }, 220 | "node_modules/ejs": { 221 | "version": "3.1.8", 222 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", 223 | "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", 224 | "dependencies": { 225 | "jake": "^10.8.5" 226 | }, 227 | "bin": { 228 | "ejs": "bin/cli.js" 229 | }, 230 | "engines": { 231 | "node": ">=0.10.0" 232 | } 233 | }, 234 | "node_modules/encodeurl": { 235 | "version": "1.0.2", 236 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 237 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 238 | "engines": { 239 | "node": ">= 0.8" 240 | } 241 | }, 242 | "node_modules/escape-html": { 243 | "version": "1.0.3", 244 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 245 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 246 | }, 247 | "node_modules/etag": { 248 | "version": "1.8.1", 249 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 250 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 251 | "engines": { 252 | "node": ">= 0.6" 253 | } 254 | }, 255 | "node_modules/express": { 256 | "version": "4.18.1", 257 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", 258 | "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", 259 | "dependencies": { 260 | "accepts": "~1.3.8", 261 | "array-flatten": "1.1.1", 262 | "body-parser": "1.20.0", 263 | "content-disposition": "0.5.4", 264 | "content-type": "~1.0.4", 265 | "cookie": "0.5.0", 266 | "cookie-signature": "1.0.6", 267 | "debug": "2.6.9", 268 | "depd": "2.0.0", 269 | "encodeurl": "~1.0.2", 270 | "escape-html": "~1.0.3", 271 | "etag": "~1.8.1", 272 | "finalhandler": "1.2.0", 273 | "fresh": "0.5.2", 274 | "http-errors": "2.0.0", 275 | "merge-descriptors": "1.0.1", 276 | "methods": "~1.1.2", 277 | "on-finished": "2.4.1", 278 | "parseurl": "~1.3.3", 279 | "path-to-regexp": "0.1.7", 280 | "proxy-addr": "~2.0.7", 281 | "qs": "6.10.3", 282 | "range-parser": "~1.2.1", 283 | "safe-buffer": "5.2.1", 284 | "send": "0.18.0", 285 | "serve-static": "1.15.0", 286 | "setprototypeof": "1.2.0", 287 | "statuses": "2.0.1", 288 | "type-is": "~1.6.18", 289 | "utils-merge": "1.0.1", 290 | "vary": "~1.1.2" 291 | }, 292 | "engines": { 293 | "node": ">= 0.10.0" 294 | } 295 | }, 296 | "node_modules/filelist": { 297 | "version": "1.0.4", 298 | "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", 299 | "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", 300 | "dependencies": { 301 | "minimatch": "^5.0.1" 302 | } 303 | }, 304 | "node_modules/filelist/node_modules/brace-expansion": { 305 | "version": "2.0.1", 306 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 307 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 308 | "dependencies": { 309 | "balanced-match": "^1.0.0" 310 | } 311 | }, 312 | "node_modules/filelist/node_modules/minimatch": { 313 | "version": "5.1.0", 314 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", 315 | "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", 316 | "dependencies": { 317 | "brace-expansion": "^2.0.1" 318 | }, 319 | "engines": { 320 | "node": ">=10" 321 | } 322 | }, 323 | "node_modules/finalhandler": { 324 | "version": "1.2.0", 325 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 326 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 327 | "dependencies": { 328 | "debug": "2.6.9", 329 | "encodeurl": "~1.0.2", 330 | "escape-html": "~1.0.3", 331 | "on-finished": "2.4.1", 332 | "parseurl": "~1.3.3", 333 | "statuses": "2.0.1", 334 | "unpipe": "~1.0.0" 335 | }, 336 | "engines": { 337 | "node": ">= 0.8" 338 | } 339 | }, 340 | "node_modules/forwarded": { 341 | "version": "0.2.0", 342 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 343 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 344 | "engines": { 345 | "node": ">= 0.6" 346 | } 347 | }, 348 | "node_modules/fresh": { 349 | "version": "0.5.2", 350 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 351 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 352 | "engines": { 353 | "node": ">= 0.6" 354 | } 355 | }, 356 | "node_modules/function-bind": { 357 | "version": "1.1.1", 358 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 359 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 360 | }, 361 | "node_modules/get-intrinsic": { 362 | "version": "1.1.1", 363 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 364 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 365 | "dependencies": { 366 | "function-bind": "^1.1.1", 367 | "has": "^1.0.3", 368 | "has-symbols": "^1.0.1" 369 | }, 370 | "funding": { 371 | "url": "https://github.com/sponsors/ljharb" 372 | } 373 | }, 374 | "node_modules/has": { 375 | "version": "1.0.3", 376 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 377 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 378 | "dependencies": { 379 | "function-bind": "^1.1.1" 380 | }, 381 | "engines": { 382 | "node": ">= 0.4.0" 383 | } 384 | }, 385 | "node_modules/has-flag": { 386 | "version": "4.0.0", 387 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 388 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 389 | "engines": { 390 | "node": ">=8" 391 | } 392 | }, 393 | "node_modules/has-symbols": { 394 | "version": "1.0.3", 395 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 396 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 397 | "engines": { 398 | "node": ">= 0.4" 399 | }, 400 | "funding": { 401 | "url": "https://github.com/sponsors/ljharb" 402 | } 403 | }, 404 | "node_modules/http-errors": { 405 | "version": "2.0.0", 406 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 407 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 408 | "dependencies": { 409 | "depd": "2.0.0", 410 | "inherits": "2.0.4", 411 | "setprototypeof": "1.2.0", 412 | "statuses": "2.0.1", 413 | "toidentifier": "1.0.1" 414 | }, 415 | "engines": { 416 | "node": ">= 0.8" 417 | } 418 | }, 419 | "node_modules/iconv-lite": { 420 | "version": "0.4.24", 421 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 422 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 423 | "dependencies": { 424 | "safer-buffer": ">= 2.1.2 < 3" 425 | }, 426 | "engines": { 427 | "node": ">=0.10.0" 428 | } 429 | }, 430 | "node_modules/inherits": { 431 | "version": "2.0.4", 432 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 433 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 434 | }, 435 | "node_modules/ipaddr.js": { 436 | "version": "1.9.1", 437 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 438 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 439 | "engines": { 440 | "node": ">= 0.10" 441 | } 442 | }, 443 | "node_modules/jake": { 444 | "version": "10.8.5", 445 | "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", 446 | "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", 447 | "dependencies": { 448 | "async": "^3.2.3", 449 | "chalk": "^4.0.2", 450 | "filelist": "^1.0.1", 451 | "minimatch": "^3.0.4" 452 | }, 453 | "bin": { 454 | "jake": "bin/cli.js" 455 | }, 456 | "engines": { 457 | "node": ">=10" 458 | } 459 | }, 460 | "node_modules/media-typer": { 461 | "version": "0.3.0", 462 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 463 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 464 | "engines": { 465 | "node": ">= 0.6" 466 | } 467 | }, 468 | "node_modules/merge-descriptors": { 469 | "version": "1.0.1", 470 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 471 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 472 | }, 473 | "node_modules/methods": { 474 | "version": "1.1.2", 475 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 476 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 477 | "engines": { 478 | "node": ">= 0.6" 479 | } 480 | }, 481 | "node_modules/mime": { 482 | "version": "1.6.0", 483 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 484 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 485 | "bin": { 486 | "mime": "cli.js" 487 | }, 488 | "engines": { 489 | "node": ">=4" 490 | } 491 | }, 492 | "node_modules/mime-db": { 493 | "version": "1.52.0", 494 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 495 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 496 | "engines": { 497 | "node": ">= 0.6" 498 | } 499 | }, 500 | "node_modules/mime-types": { 501 | "version": "2.1.35", 502 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 503 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 504 | "dependencies": { 505 | "mime-db": "1.52.0" 506 | }, 507 | "engines": { 508 | "node": ">= 0.6" 509 | } 510 | }, 511 | "node_modules/minimatch": { 512 | "version": "3.1.2", 513 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 514 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 515 | "dependencies": { 516 | "brace-expansion": "^1.1.7" 517 | }, 518 | "engines": { 519 | "node": "*" 520 | } 521 | }, 522 | "node_modules/ms": { 523 | "version": "2.0.0", 524 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 525 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 526 | }, 527 | "node_modules/negotiator": { 528 | "version": "0.6.3", 529 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 530 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 531 | "engines": { 532 | "node": ">= 0.6" 533 | } 534 | }, 535 | "node_modules/object-assign": { 536 | "version": "4.1.1", 537 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 538 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 539 | "engines": { 540 | "node": ">=0.10.0" 541 | } 542 | }, 543 | "node_modules/object-inspect": { 544 | "version": "1.12.2", 545 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", 546 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", 547 | "funding": { 548 | "url": "https://github.com/sponsors/ljharb" 549 | } 550 | }, 551 | "node_modules/on-finished": { 552 | "version": "2.4.1", 553 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 554 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 555 | "dependencies": { 556 | "ee-first": "1.1.1" 557 | }, 558 | "engines": { 559 | "node": ">= 0.8" 560 | } 561 | }, 562 | "node_modules/parseurl": { 563 | "version": "1.3.3", 564 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 565 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 566 | "engines": { 567 | "node": ">= 0.8" 568 | } 569 | }, 570 | "node_modules/path-to-regexp": { 571 | "version": "0.1.7", 572 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 573 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 574 | }, 575 | "node_modules/proxy-addr": { 576 | "version": "2.0.7", 577 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 578 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 579 | "dependencies": { 580 | "forwarded": "0.2.0", 581 | "ipaddr.js": "1.9.1" 582 | }, 583 | "engines": { 584 | "node": ">= 0.10" 585 | } 586 | }, 587 | "node_modules/qs": { 588 | "version": "6.10.3", 589 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", 590 | "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", 591 | "dependencies": { 592 | "side-channel": "^1.0.4" 593 | }, 594 | "engines": { 595 | "node": ">=0.6" 596 | }, 597 | "funding": { 598 | "url": "https://github.com/sponsors/ljharb" 599 | } 600 | }, 601 | "node_modules/range-parser": { 602 | "version": "1.2.1", 603 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 604 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 605 | "engines": { 606 | "node": ">= 0.6" 607 | } 608 | }, 609 | "node_modules/raw-body": { 610 | "version": "2.5.1", 611 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 612 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 613 | "dependencies": { 614 | "bytes": "3.1.2", 615 | "http-errors": "2.0.0", 616 | "iconv-lite": "0.4.24", 617 | "unpipe": "1.0.0" 618 | }, 619 | "engines": { 620 | "node": ">= 0.8" 621 | } 622 | }, 623 | "node_modules/safe-buffer": { 624 | "version": "5.2.1", 625 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 626 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 627 | "funding": [ 628 | { 629 | "type": "github", 630 | "url": "https://github.com/sponsors/feross" 631 | }, 632 | { 633 | "type": "patreon", 634 | "url": "https://www.patreon.com/feross" 635 | }, 636 | { 637 | "type": "consulting", 638 | "url": "https://feross.org/support" 639 | } 640 | ] 641 | }, 642 | "node_modules/safer-buffer": { 643 | "version": "2.1.2", 644 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 645 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 646 | }, 647 | "node_modules/send": { 648 | "version": "0.18.0", 649 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 650 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 651 | "dependencies": { 652 | "debug": "2.6.9", 653 | "depd": "2.0.0", 654 | "destroy": "1.2.0", 655 | "encodeurl": "~1.0.2", 656 | "escape-html": "~1.0.3", 657 | "etag": "~1.8.1", 658 | "fresh": "0.5.2", 659 | "http-errors": "2.0.0", 660 | "mime": "1.6.0", 661 | "ms": "2.1.3", 662 | "on-finished": "2.4.1", 663 | "range-parser": "~1.2.1", 664 | "statuses": "2.0.1" 665 | }, 666 | "engines": { 667 | "node": ">= 0.8.0" 668 | } 669 | }, 670 | "node_modules/send/node_modules/ms": { 671 | "version": "2.1.3", 672 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 673 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 674 | }, 675 | "node_modules/serve-static": { 676 | "version": "1.15.0", 677 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 678 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 679 | "dependencies": { 680 | "encodeurl": "~1.0.2", 681 | "escape-html": "~1.0.3", 682 | "parseurl": "~1.3.3", 683 | "send": "0.18.0" 684 | }, 685 | "engines": { 686 | "node": ">= 0.8.0" 687 | } 688 | }, 689 | "node_modules/setprototypeof": { 690 | "version": "1.2.0", 691 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 692 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 693 | }, 694 | "node_modules/side-channel": { 695 | "version": "1.0.4", 696 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 697 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 698 | "dependencies": { 699 | "call-bind": "^1.0.0", 700 | "get-intrinsic": "^1.0.2", 701 | "object-inspect": "^1.9.0" 702 | }, 703 | "funding": { 704 | "url": "https://github.com/sponsors/ljharb" 705 | } 706 | }, 707 | "node_modules/statuses": { 708 | "version": "2.0.1", 709 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 710 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 711 | "engines": { 712 | "node": ">= 0.8" 713 | } 714 | }, 715 | "node_modules/supports-color": { 716 | "version": "7.2.0", 717 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 718 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 719 | "dependencies": { 720 | "has-flag": "^4.0.0" 721 | }, 722 | "engines": { 723 | "node": ">=8" 724 | } 725 | }, 726 | "node_modules/toidentifier": { 727 | "version": "1.0.1", 728 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 729 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 730 | "engines": { 731 | "node": ">=0.6" 732 | } 733 | }, 734 | "node_modules/type-is": { 735 | "version": "1.6.18", 736 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 737 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 738 | "dependencies": { 739 | "media-typer": "0.3.0", 740 | "mime-types": "~2.1.24" 741 | }, 742 | "engines": { 743 | "node": ">= 0.6" 744 | } 745 | }, 746 | "node_modules/unpipe": { 747 | "version": "1.0.0", 748 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 749 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", 750 | "engines": { 751 | "node": ">= 0.8" 752 | } 753 | }, 754 | "node_modules/utils-merge": { 755 | "version": "1.0.1", 756 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 757 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", 758 | "engines": { 759 | "node": ">= 0.4.0" 760 | } 761 | }, 762 | "node_modules/vary": { 763 | "version": "1.1.2", 764 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 765 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", 766 | "engines": { 767 | "node": ">= 0.8" 768 | } 769 | } 770 | }, 771 | "dependencies": { 772 | "accepts": { 773 | "version": "1.3.8", 774 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 775 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 776 | "requires": { 777 | "mime-types": "~2.1.34", 778 | "negotiator": "0.6.3" 779 | } 780 | }, 781 | "ansi-styles": { 782 | "version": "4.3.0", 783 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 784 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 785 | "requires": { 786 | "color-convert": "^2.0.1" 787 | } 788 | }, 789 | "array-flatten": { 790 | "version": "1.1.1", 791 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 792 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 793 | }, 794 | "async": { 795 | "version": "3.2.4", 796 | "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", 797 | "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" 798 | }, 799 | "balanced-match": { 800 | "version": "1.0.2", 801 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 802 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 803 | }, 804 | "body-parser": { 805 | "version": "1.20.0", 806 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", 807 | "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", 808 | "requires": { 809 | "bytes": "3.1.2", 810 | "content-type": "~1.0.4", 811 | "debug": "2.6.9", 812 | "depd": "2.0.0", 813 | "destroy": "1.2.0", 814 | "http-errors": "2.0.0", 815 | "iconv-lite": "0.4.24", 816 | "on-finished": "2.4.1", 817 | "qs": "6.10.3", 818 | "raw-body": "2.5.1", 819 | "type-is": "~1.6.18", 820 | "unpipe": "1.0.0" 821 | } 822 | }, 823 | "brace-expansion": { 824 | "version": "1.1.11", 825 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 826 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 827 | "requires": { 828 | "balanced-match": "^1.0.0", 829 | "concat-map": "0.0.1" 830 | } 831 | }, 832 | "bytes": { 833 | "version": "3.1.2", 834 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 835 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" 836 | }, 837 | "call-bind": { 838 | "version": "1.0.2", 839 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 840 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 841 | "requires": { 842 | "function-bind": "^1.1.1", 843 | "get-intrinsic": "^1.0.2" 844 | } 845 | }, 846 | "chalk": { 847 | "version": "4.1.2", 848 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 849 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 850 | "requires": { 851 | "ansi-styles": "^4.1.0", 852 | "supports-color": "^7.1.0" 853 | } 854 | }, 855 | "color-convert": { 856 | "version": "2.0.1", 857 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 858 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 859 | "requires": { 860 | "color-name": "~1.1.4" 861 | } 862 | }, 863 | "color-name": { 864 | "version": "1.1.4", 865 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 866 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 867 | }, 868 | "concat-map": { 869 | "version": "0.0.1", 870 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 871 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 872 | }, 873 | "content-disposition": { 874 | "version": "0.5.4", 875 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 876 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 877 | "requires": { 878 | "safe-buffer": "5.2.1" 879 | } 880 | }, 881 | "content-type": { 882 | "version": "1.0.4", 883 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 884 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 885 | }, 886 | "cookie": { 887 | "version": "0.5.0", 888 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 889 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" 890 | }, 891 | "cookie-signature": { 892 | "version": "1.0.6", 893 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 894 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 895 | }, 896 | "cors": { 897 | "version": "2.8.5", 898 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 899 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 900 | "requires": { 901 | "object-assign": "^4", 902 | "vary": "^1" 903 | } 904 | }, 905 | "debug": { 906 | "version": "2.6.9", 907 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 908 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 909 | "requires": { 910 | "ms": "2.0.0" 911 | } 912 | }, 913 | "depd": { 914 | "version": "2.0.0", 915 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 916 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" 917 | }, 918 | "destroy": { 919 | "version": "1.2.0", 920 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 921 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" 922 | }, 923 | "ee-first": { 924 | "version": "1.1.1", 925 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 926 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 927 | }, 928 | "ejs": { 929 | "version": "3.1.8", 930 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", 931 | "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", 932 | "requires": { 933 | "jake": "^10.8.5" 934 | } 935 | }, 936 | "encodeurl": { 937 | "version": "1.0.2", 938 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 939 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" 940 | }, 941 | "escape-html": { 942 | "version": "1.0.3", 943 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 944 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 945 | }, 946 | "etag": { 947 | "version": "1.8.1", 948 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 949 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" 950 | }, 951 | "express": { 952 | "version": "4.18.1", 953 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", 954 | "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", 955 | "requires": { 956 | "accepts": "~1.3.8", 957 | "array-flatten": "1.1.1", 958 | "body-parser": "1.20.0", 959 | "content-disposition": "0.5.4", 960 | "content-type": "~1.0.4", 961 | "cookie": "0.5.0", 962 | "cookie-signature": "1.0.6", 963 | "debug": "2.6.9", 964 | "depd": "2.0.0", 965 | "encodeurl": "~1.0.2", 966 | "escape-html": "~1.0.3", 967 | "etag": "~1.8.1", 968 | "finalhandler": "1.2.0", 969 | "fresh": "0.5.2", 970 | "http-errors": "2.0.0", 971 | "merge-descriptors": "1.0.1", 972 | "methods": "~1.1.2", 973 | "on-finished": "2.4.1", 974 | "parseurl": "~1.3.3", 975 | "path-to-regexp": "0.1.7", 976 | "proxy-addr": "~2.0.7", 977 | "qs": "6.10.3", 978 | "range-parser": "~1.2.1", 979 | "safe-buffer": "5.2.1", 980 | "send": "0.18.0", 981 | "serve-static": "1.15.0", 982 | "setprototypeof": "1.2.0", 983 | "statuses": "2.0.1", 984 | "type-is": "~1.6.18", 985 | "utils-merge": "1.0.1", 986 | "vary": "~1.1.2" 987 | } 988 | }, 989 | "filelist": { 990 | "version": "1.0.4", 991 | "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", 992 | "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", 993 | "requires": { 994 | "minimatch": "^5.0.1" 995 | }, 996 | "dependencies": { 997 | "brace-expansion": { 998 | "version": "2.0.1", 999 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 1000 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 1001 | "requires": { 1002 | "balanced-match": "^1.0.0" 1003 | } 1004 | }, 1005 | "minimatch": { 1006 | "version": "5.1.0", 1007 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", 1008 | "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", 1009 | "requires": { 1010 | "brace-expansion": "^2.0.1" 1011 | } 1012 | } 1013 | } 1014 | }, 1015 | "finalhandler": { 1016 | "version": "1.2.0", 1017 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 1018 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 1019 | "requires": { 1020 | "debug": "2.6.9", 1021 | "encodeurl": "~1.0.2", 1022 | "escape-html": "~1.0.3", 1023 | "on-finished": "2.4.1", 1024 | "parseurl": "~1.3.3", 1025 | "statuses": "2.0.1", 1026 | "unpipe": "~1.0.0" 1027 | } 1028 | }, 1029 | "forwarded": { 1030 | "version": "0.2.0", 1031 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 1032 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 1033 | }, 1034 | "fresh": { 1035 | "version": "0.5.2", 1036 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 1037 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" 1038 | }, 1039 | "function-bind": { 1040 | "version": "1.1.1", 1041 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1042 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 1043 | }, 1044 | "get-intrinsic": { 1045 | "version": "1.1.1", 1046 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 1047 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 1048 | "requires": { 1049 | "function-bind": "^1.1.1", 1050 | "has": "^1.0.3", 1051 | "has-symbols": "^1.0.1" 1052 | } 1053 | }, 1054 | "has": { 1055 | "version": "1.0.3", 1056 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1057 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1058 | "requires": { 1059 | "function-bind": "^1.1.1" 1060 | } 1061 | }, 1062 | "has-flag": { 1063 | "version": "4.0.0", 1064 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1065 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 1066 | }, 1067 | "has-symbols": { 1068 | "version": "1.0.3", 1069 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 1070 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" 1071 | }, 1072 | "http-errors": { 1073 | "version": "2.0.0", 1074 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 1075 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 1076 | "requires": { 1077 | "depd": "2.0.0", 1078 | "inherits": "2.0.4", 1079 | "setprototypeof": "1.2.0", 1080 | "statuses": "2.0.1", 1081 | "toidentifier": "1.0.1" 1082 | } 1083 | }, 1084 | "iconv-lite": { 1085 | "version": "0.4.24", 1086 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1087 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1088 | "requires": { 1089 | "safer-buffer": ">= 2.1.2 < 3" 1090 | } 1091 | }, 1092 | "inherits": { 1093 | "version": "2.0.4", 1094 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1095 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1096 | }, 1097 | "ipaddr.js": { 1098 | "version": "1.9.1", 1099 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 1100 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 1101 | }, 1102 | "jake": { 1103 | "version": "10.8.5", 1104 | "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", 1105 | "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", 1106 | "requires": { 1107 | "async": "^3.2.3", 1108 | "chalk": "^4.0.2", 1109 | "filelist": "^1.0.1", 1110 | "minimatch": "^3.0.4" 1111 | } 1112 | }, 1113 | "media-typer": { 1114 | "version": "0.3.0", 1115 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1116 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" 1117 | }, 1118 | "merge-descriptors": { 1119 | "version": "1.0.1", 1120 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 1121 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 1122 | }, 1123 | "methods": { 1124 | "version": "1.1.2", 1125 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1126 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" 1127 | }, 1128 | "mime": { 1129 | "version": "1.6.0", 1130 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1131 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 1132 | }, 1133 | "mime-db": { 1134 | "version": "1.52.0", 1135 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1136 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" 1137 | }, 1138 | "mime-types": { 1139 | "version": "2.1.35", 1140 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1141 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1142 | "requires": { 1143 | "mime-db": "1.52.0" 1144 | } 1145 | }, 1146 | "minimatch": { 1147 | "version": "3.1.2", 1148 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1149 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1150 | "requires": { 1151 | "brace-expansion": "^1.1.7" 1152 | } 1153 | }, 1154 | "ms": { 1155 | "version": "2.0.0", 1156 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1157 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 1158 | }, 1159 | "negotiator": { 1160 | "version": "0.6.3", 1161 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 1162 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" 1163 | }, 1164 | "object-assign": { 1165 | "version": "4.1.1", 1166 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1167 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" 1168 | }, 1169 | "object-inspect": { 1170 | "version": "1.12.2", 1171 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", 1172 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" 1173 | }, 1174 | "on-finished": { 1175 | "version": "2.4.1", 1176 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 1177 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 1178 | "requires": { 1179 | "ee-first": "1.1.1" 1180 | } 1181 | }, 1182 | "parseurl": { 1183 | "version": "1.3.3", 1184 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1185 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 1186 | }, 1187 | "path-to-regexp": { 1188 | "version": "0.1.7", 1189 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1190 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 1191 | }, 1192 | "proxy-addr": { 1193 | "version": "2.0.7", 1194 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 1195 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 1196 | "requires": { 1197 | "forwarded": "0.2.0", 1198 | "ipaddr.js": "1.9.1" 1199 | } 1200 | }, 1201 | "qs": { 1202 | "version": "6.10.3", 1203 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", 1204 | "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", 1205 | "requires": { 1206 | "side-channel": "^1.0.4" 1207 | } 1208 | }, 1209 | "range-parser": { 1210 | "version": "1.2.1", 1211 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1212 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 1213 | }, 1214 | "raw-body": { 1215 | "version": "2.5.1", 1216 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 1217 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 1218 | "requires": { 1219 | "bytes": "3.1.2", 1220 | "http-errors": "2.0.0", 1221 | "iconv-lite": "0.4.24", 1222 | "unpipe": "1.0.0" 1223 | } 1224 | }, 1225 | "safe-buffer": { 1226 | "version": "5.2.1", 1227 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1228 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 1229 | }, 1230 | "safer-buffer": { 1231 | "version": "2.1.2", 1232 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1233 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1234 | }, 1235 | "send": { 1236 | "version": "0.18.0", 1237 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 1238 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 1239 | "requires": { 1240 | "debug": "2.6.9", 1241 | "depd": "2.0.0", 1242 | "destroy": "1.2.0", 1243 | "encodeurl": "~1.0.2", 1244 | "escape-html": "~1.0.3", 1245 | "etag": "~1.8.1", 1246 | "fresh": "0.5.2", 1247 | "http-errors": "2.0.0", 1248 | "mime": "1.6.0", 1249 | "ms": "2.1.3", 1250 | "on-finished": "2.4.1", 1251 | "range-parser": "~1.2.1", 1252 | "statuses": "2.0.1" 1253 | }, 1254 | "dependencies": { 1255 | "ms": { 1256 | "version": "2.1.3", 1257 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1258 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1259 | } 1260 | } 1261 | }, 1262 | "serve-static": { 1263 | "version": "1.15.0", 1264 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 1265 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 1266 | "requires": { 1267 | "encodeurl": "~1.0.2", 1268 | "escape-html": "~1.0.3", 1269 | "parseurl": "~1.3.3", 1270 | "send": "0.18.0" 1271 | } 1272 | }, 1273 | "setprototypeof": { 1274 | "version": "1.2.0", 1275 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 1276 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 1277 | }, 1278 | "side-channel": { 1279 | "version": "1.0.4", 1280 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1281 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1282 | "requires": { 1283 | "call-bind": "^1.0.0", 1284 | "get-intrinsic": "^1.0.2", 1285 | "object-inspect": "^1.9.0" 1286 | } 1287 | }, 1288 | "statuses": { 1289 | "version": "2.0.1", 1290 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 1291 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" 1292 | }, 1293 | "supports-color": { 1294 | "version": "7.2.0", 1295 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1296 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1297 | "requires": { 1298 | "has-flag": "^4.0.0" 1299 | } 1300 | }, 1301 | "toidentifier": { 1302 | "version": "1.0.1", 1303 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 1304 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" 1305 | }, 1306 | "type-is": { 1307 | "version": "1.6.18", 1308 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1309 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1310 | "requires": { 1311 | "media-typer": "0.3.0", 1312 | "mime-types": "~2.1.24" 1313 | } 1314 | }, 1315 | "unpipe": { 1316 | "version": "1.0.0", 1317 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1318 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 1319 | }, 1320 | "utils-merge": { 1321 | "version": "1.0.1", 1322 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1323 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 1324 | }, 1325 | "vary": { 1326 | "version": "1.1.2", 1327 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1328 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 1329 | } 1330 | } 1331 | } 1332 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "resources_api", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "node server.js" 9 | }, 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "cors": "^2.8.5", 14 | "ejs": "^3.1.8", 15 | "express": "^4.18.1" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /public/assets/Alex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/the-api-administration/coding-resources-api/8441132d80adcb31242b173d343954ef5d6a7aca/public/assets/Alex.png -------------------------------------------------------------------------------- /public/assets/Alondra.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/the-api-administration/coding-resources-api/8441132d80adcb31242b173d343954ef5d6a7aca/public/assets/Alondra.png -------------------------------------------------------------------------------- /public/assets/Alyssha.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/the-api-administration/coding-resources-api/8441132d80adcb31242b173d343954ef5d6a7aca/public/assets/Alyssha.jpg -------------------------------------------------------------------------------- /public/assets/Bianca.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/the-api-administration/coding-resources-api/8441132d80adcb31242b173d343954ef5d6a7aca/public/assets/Bianca.jpg -------------------------------------------------------------------------------- /public/assets/Brian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/the-api-administration/coding-resources-api/8441132d80adcb31242b173d343954ef5d6a7aca/public/assets/Brian.png -------------------------------------------------------------------------------- /public/assets/Dana.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/the-api-administration/coding-resources-api/8441132d80adcb31242b173d343954ef5d6a7aca/public/assets/Dana.jpg -------------------------------------------------------------------------------- /public/assets/Erika.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/the-api-administration/coding-resources-api/8441132d80adcb31242b173d343954ef5d6a7aca/public/assets/Erika.jpg -------------------------------------------------------------------------------- /public/assets/Jacob.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/the-api-administration/coding-resources-api/8441132d80adcb31242b173d343954ef5d6a7aca/public/assets/Jacob.jpg -------------------------------------------------------------------------------- /public/assets/JacobGood.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/the-api-administration/coding-resources-api/8441132d80adcb31242b173d343954ef5d6a7aca/public/assets/JacobGood.jpg -------------------------------------------------------------------------------- /public/assets/Sebastian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/the-api-administration/coding-resources-api/8441132d80adcb31242b173d343954ef5d6a7aca/public/assets/Sebastian.png -------------------------------------------------------------------------------- /public/assets/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 11 | 12 | 20 | 27 | 34 | 44 | 52 | 57 | 63 | 68 | 73 | 79 | 84 | 89 | 94 | 99 | 104 | 109 | 113 | 115 | 118 | 121 | 122 | 123 | -------------------------------------------------------------------------------- /public/css/normalize.css: -------------------------------------------------------------------------------- 1 | /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ 2 | 3 | /* Document 4 | ========================================================================== */ 5 | 6 | /** 7 | * 1. Correct the line height in all browsers. 8 | * 2. Prevent adjustments of font size after orientation changes in iOS. 9 | */ 10 | 11 | html { 12 | line-height: 1.15; /* 1 */ 13 | -webkit-text-size-adjust: 100%; /* 2 */ 14 | } 15 | 16 | /* Sections 17 | ========================================================================== */ 18 | 19 | /** 20 | * Remove the margin in all browsers. 21 | */ 22 | 23 | body { 24 | margin: 0; 25 | } 26 | 27 | /** 28 | * Render the `main` element consistently in IE. 29 | */ 30 | 31 | main { 32 | display: block; 33 | } 34 | 35 | /** 36 | * Correct the font size and margin on `h1` elements within `section` and 37 | * `article` contexts in Chrome, Firefox, and Safari. 38 | */ 39 | 40 | h1 { 41 | font-size: 2em; 42 | margin: 0.67em 0; 43 | } 44 | 45 | /* Grouping content 46 | ========================================================================== */ 47 | 48 | /** 49 | * 1. Add the correct box sizing in Firefox. 50 | * 2. Show the overflow in Edge and IE. 51 | */ 52 | 53 | hr { 54 | box-sizing: content-box; /* 1 */ 55 | height: 0; /* 1 */ 56 | overflow: visible; /* 2 */ 57 | } 58 | 59 | /** 60 | * 1. Correct the inheritance and scaling of font size in all browsers. 61 | * 2. Correct the odd `em` font sizing in all browsers. 62 | */ 63 | 64 | pre { 65 | font-family: monospace, monospace; /* 1 */ 66 | font-size: 1em; /* 2 */ 67 | } 68 | 69 | /* Text-level semantics 70 | ========================================================================== */ 71 | 72 | /** 73 | * Remove the gray background on active links in IE 10. 74 | */ 75 | 76 | a { 77 | background-color: transparent; 78 | } 79 | 80 | /** 81 | * 1. Remove the bottom border in Chrome 57- 82 | * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. 83 | */ 84 | 85 | abbr[title] { 86 | border-bottom: none; /* 1 */ 87 | text-decoration: underline; /* 2 */ 88 | text-decoration: underline dotted; /* 2 */ 89 | } 90 | 91 | /** 92 | * Add the correct font weight in Chrome, Edge, and Safari. 93 | */ 94 | 95 | b, 96 | strong { 97 | font-weight: bolder; 98 | } 99 | 100 | /** 101 | * 1. Correct the inheritance and scaling of font size in all browsers. 102 | * 2. Correct the odd `em` font sizing in all browsers. 103 | */ 104 | 105 | code, 106 | kbd, 107 | samp { 108 | font-family: monospace, monospace; /* 1 */ 109 | font-size: 1em; /* 2 */ 110 | } 111 | 112 | /** 113 | * Add the correct font size in all browsers. 114 | */ 115 | 116 | small { 117 | font-size: 80%; 118 | } 119 | 120 | /** 121 | * Prevent `sub` and `sup` elements from affecting the line height in 122 | * all browsers. 123 | */ 124 | 125 | sub, 126 | sup { 127 | font-size: 75%; 128 | line-height: 0; 129 | position: relative; 130 | vertical-align: baseline; 131 | } 132 | 133 | sub { 134 | bottom: -0.25em; 135 | } 136 | 137 | sup { 138 | top: -0.5em; 139 | } 140 | 141 | /* Embedded content 142 | ========================================================================== */ 143 | 144 | /** 145 | * Remove the border on images inside links in IE 10. 146 | */ 147 | 148 | img { 149 | border-style: none; 150 | } 151 | 152 | /* Forms 153 | ========================================================================== */ 154 | 155 | /** 156 | * 1. Change the font styles in all browsers. 157 | * 2. Remove the margin in Firefox and Safari. 158 | */ 159 | 160 | button, 161 | input, 162 | optgroup, 163 | select, 164 | textarea { 165 | font-family: inherit; /* 1 */ 166 | font-size: 100%; /* 1 */ 167 | line-height: 1.15; /* 1 */ 168 | margin: 0; /* 2 */ 169 | } 170 | 171 | /** 172 | * Show the overflow in IE. 173 | * 1. Show the overflow in Edge. 174 | */ 175 | 176 | button, 177 | input { 178 | /* 1 */ 179 | overflow: visible; 180 | } 181 | 182 | /** 183 | * Remove the inheritance of text transform in Edge, Firefox, and IE. 184 | * 1. Remove the inheritance of text transform in Firefox. 185 | */ 186 | 187 | button, 188 | select { 189 | /* 1 */ 190 | text-transform: none; 191 | } 192 | 193 | /** 194 | * Correct the inability to style clickable types in iOS and Safari. 195 | */ 196 | 197 | button, 198 | [type="button"], 199 | [type="reset"], 200 | [type="submit"] { 201 | -webkit-appearance: button; 202 | } 203 | 204 | /** 205 | * Remove the inner border and padding in Firefox. 206 | */ 207 | 208 | button::-moz-focus-inner, 209 | [type="button"]::-moz-focus-inner, 210 | [type="reset"]::-moz-focus-inner, 211 | [type="submit"]::-moz-focus-inner { 212 | border-style: none; 213 | padding: 0; 214 | } 215 | 216 | /** 217 | * Restore the focus styles unset by the previous rule. 218 | */ 219 | 220 | button:-moz-focusring, 221 | [type="button"]:-moz-focusring, 222 | [type="reset"]:-moz-focusring, 223 | [type="submit"]:-moz-focusring { 224 | outline: 1px dotted ButtonText; 225 | } 226 | 227 | /** 228 | * Correct the padding in Firefox. 229 | */ 230 | 231 | fieldset { 232 | padding: 0.35em 0.75em 0.625em; 233 | } 234 | 235 | /** 236 | * 1. Correct the text wrapping in Edge and IE. 237 | * 2. Correct the color inheritance from `fieldset` elements in IE. 238 | * 3. Remove the padding so developers are not caught out when they zero out 239 | * `fieldset` elements in all browsers. 240 | */ 241 | 242 | legend { 243 | box-sizing: border-box; /* 1 */ 244 | color: inherit; /* 2 */ 245 | display: table; /* 1 */ 246 | max-width: 100%; /* 1 */ 247 | padding: 0; /* 3 */ 248 | white-space: normal; /* 1 */ 249 | } 250 | 251 | /** 252 | * Add the correct vertical alignment in Chrome, Firefox, and Opera. 253 | */ 254 | 255 | progress { 256 | vertical-align: baseline; 257 | } 258 | 259 | /** 260 | * Remove the default vertical scrollbar in IE 10+. 261 | */ 262 | 263 | textarea { 264 | overflow: auto; 265 | } 266 | 267 | /** 268 | * 1. Add the correct box sizing in IE 10. 269 | * 2. Remove the padding in IE 10. 270 | */ 271 | 272 | [type="checkbox"], 273 | [type="radio"] { 274 | box-sizing: border-box; /* 1 */ 275 | padding: 0; /* 2 */ 276 | } 277 | 278 | /** 279 | * Correct the cursor style of increment and decrement buttons in Chrome. 280 | */ 281 | 282 | [type="number"]::-webkit-inner-spin-button, 283 | [type="number"]::-webkit-outer-spin-button { 284 | height: auto; 285 | } 286 | 287 | /** 288 | * 1. Correct the odd appearance in Chrome and Safari. 289 | * 2. Correct the outline style in Safari. 290 | */ 291 | 292 | [type="search"] { 293 | -webkit-appearance: textfield; /* 1 */ 294 | outline-offset: -2px; /* 2 */ 295 | } 296 | 297 | /** 298 | * Remove the inner padding in Chrome and Safari on macOS. 299 | */ 300 | 301 | [type="search"]::-webkit-search-decoration { 302 | -webkit-appearance: none; 303 | } 304 | 305 | /** 306 | * 1. Correct the inability to style clickable types in iOS and Safari. 307 | * 2. Change font properties to `inherit` in Safari. 308 | */ 309 | 310 | ::-webkit-file-upload-button { 311 | -webkit-appearance: button; /* 1 */ 312 | font: inherit; /* 2 */ 313 | } 314 | 315 | /* Interactive 316 | ========================================================================== */ 317 | 318 | /* 319 | * Add the correct display in Edge, IE 10+, and Firefox. 320 | */ 321 | 322 | details { 323 | display: block; 324 | } 325 | 326 | /* 327 | * Add the correct display in all browsers. 328 | */ 329 | 330 | summary { 331 | display: list-item; 332 | } 333 | 334 | /* Misc 335 | ========================================================================== */ 336 | 337 | /** 338 | * Add the correct display in IE 10+. 339 | */ 340 | 341 | template { 342 | display: none; 343 | } 344 | 345 | /** 346 | * Add the correct display in IE 10. 347 | */ 348 | 349 | [hidden] { 350 | display: none; 351 | } 352 | -------------------------------------------------------------------------------- /public/css/style.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;800&display=swap'); 2 | 3 | /* 4 | ================= Base Styles ================= 5 | */ 6 | 7 | ul { 8 | margin: 1.5rem 2.5rem; 9 | list-style: none; 10 | padding: 0; 11 | } 12 | 13 | pre { 14 | margin: 0; 15 | } 16 | 17 | a { 18 | font-weight: 700; 19 | text-decoration: none; 20 | color: #4c8bf5; 21 | } 22 | 23 | a:hover { 24 | color: #3670d5; 25 | } 26 | 27 | html { 28 | scroll-behavior: smooth; 29 | } 30 | 31 | /* 32 | ================= Additional Styles ================= 33 | */ 34 | 35 | /* html */ 36 | 37 | html { 38 | font-family: 'Montserrat', sans-serif; 39 | color: rgb(30, 30, 30); 40 | } 41 | 42 | html * { 43 | box-sizing: border-box; 44 | } 45 | 46 | /* frame */ 47 | 48 | .frame { 49 | padding: 0; 50 | margin: 0; 51 | border: solid 8px rgb(30, 30, 30); 52 | margin: 2rem; 53 | border-radius: 4rem; 54 | overflow: hidden; 55 | } 56 | 57 | /* nav */ 58 | 59 | nav { 60 | height: 10rem; 61 | background-color: transparent; 62 | display: flex; 63 | align-items: center; 64 | justify-content: space-between; 65 | padding: 0 3rem; 66 | background-color: lightgrey; 67 | } 68 | 69 | nav > img { 70 | height: 100px; 71 | } 72 | 73 | /* contributors button */ 74 | 75 | #contributors { 76 | --color: rgb(30, 30, 30); 77 | background-color: #fff; 78 | position: relative; 79 | overflow: hidden; 80 | border: 3px solid var(--color); 81 | transition: color 0.5s; 82 | z-index: 1; 83 | font-size: 1.5rem; 84 | padding: 1rem; 85 | border-radius: 15px; 86 | font-weight: 600; 87 | color: var(--color); 88 | } 89 | 90 | #contributors:before { 91 | content: ''; 92 | position: absolute; 93 | z-index: -1; 94 | background: var(--color); 95 | height: 200px; 96 | width: 250px; 97 | border-radius: 50%; 98 | top: 100%; 99 | left: 100%; 100 | transition: all 0.4s; 101 | } 102 | 103 | #contributors:hover { 104 | color: #fff; 105 | cursor: pointer; 106 | } 107 | 108 | #contributors:hover:before { 109 | top: -32px; 110 | left: -30px; 111 | } 112 | 113 | #contributors:active:before { 114 | background: rgb(30, 30, 30); 115 | transition: background 0s; 116 | } 117 | 118 | /* main */ 119 | 120 | main { 121 | display: flex; 122 | padding: 1.5rem; 123 | margin-bottom: 2rem; 124 | } 125 | 126 | /* description */ 127 | 128 | .description { 129 | width: 50%; 130 | display: flex; 131 | flex-direction: column; 132 | align-items: center; 133 | justify-content: center; 134 | } 135 | 136 | .description > h1 { 137 | width: 80%; 138 | font-size: 2.5rem; 139 | font-weight: 800; 140 | margin: 0; 141 | } 142 | 143 | .description > p { 144 | font-size: 2rem; 145 | width: 80%; 146 | margin-top: 2rem; 147 | margin-bottom: 0; 148 | } 149 | 150 | /* api-test */ 151 | 152 | .api-test { 153 | width: 50%; 154 | display: flex; 155 | flex-direction: column; 156 | align-items: center; 157 | justify-content: space-around; 158 | } 159 | 160 | .api-test form { 161 | width: 100%; 162 | height: 3.5rem; 163 | display: flex; 164 | justify-content: center; 165 | } 166 | 167 | .api-test form input { 168 | width: 65%; 169 | padding: 0 0; 170 | border-radius: 15px 0px 0px 15px; 171 | font-size: 0.8rem; 172 | padding-left: 1rem; 173 | transition: width 500ms ease; 174 | border: solid 3px rgb(30, 30, 30); 175 | font-size: 1rem; 176 | font-weight: 600; 177 | } 178 | 179 | .api-test form input::placeholder { 180 | font-size: 1rem; 181 | color: #afafaf; 182 | font-weight: 600; 183 | } 184 | 185 | .api-test form input:focus { 186 | width: 70%; 187 | } 188 | 189 | .api-test form input:focus { 190 | outline: none; 191 | } 192 | 193 | .api-test form button { 194 | width: 10%; 195 | background-color: rgb(30, 30, 30); 196 | border: solid 2px rgb(30, 30, 30); 197 | border-radius: 0 15px 15px 0; 198 | font-size: 20px; 199 | } 200 | 201 | .api-test form button i { 202 | color: lightgray; 203 | transition: 0.3s; 204 | } 205 | 206 | .api-test form button:hover { 207 | cursor: pointer; 208 | } 209 | 210 | .api-test form button:hover > i { 211 | color: #fff; 212 | } 213 | /* result */ 214 | 215 | .result { 216 | width: 80%; 217 | overflow: hidden; 218 | border-radius: 25px; 219 | } 220 | 221 | 222 | 223 | .scroll-container { 224 | overflow-y: scroll; 225 | overflow-x: hidden; 226 | width: 100%; 227 | height: 300px; 228 | border: dashed lightgray 2px; 229 | border-radius: 25px; 230 | } 231 | 232 | .scroll-container::-webkit-scrollbar { 233 | width: 12px; 234 | background-color: #F5F5F5; 235 | } 236 | 237 | .scroll-container::-webkit-scrollbar-thumb { 238 | border-radius: 10px; 239 | background-color: rgb(177, 177, 177); 240 | } 241 | 242 | .scroll-container::-webkit-scrollbar-track { 243 | border-radius: 10px; 244 | background-color: #dbdbdb; 245 | } 246 | 247 | .text-truncate { 248 | display: inline-block; 249 | max-width: 100%; 250 | white-space: nowrap; 251 | overflow: hidden; 252 | text-overflow: ellipsis; 253 | } 254 | 255 | .json, 256 | code { 257 | white-space: pre-line; 258 | } 259 | 260 | .indent h4, 261 | .indent h5, 262 | .indent h6 { 263 | padding: 0; 264 | } 265 | 266 | .indent { 267 | padding-left: 2rem; 268 | } 269 | 270 | .indent * { 271 | line-height: 1.5; /* If this value is changed, make sure it is atleast 1 to avoid clipping when text wraps */ 272 | font-size: 1em; 273 | margin: 0; 274 | text-align: left; 275 | font-weight: 400; 276 | } 277 | 278 | .indent a { 279 | font-weight: 700; 280 | } 281 | 282 | /* documentation */ 283 | 284 | .documentation { 285 | padding: 3rem; 286 | padding-bottom: 2rem; 287 | background-color: lightgray; 288 | } 289 | 290 | h4 { 291 | font-size: 0.8rem; 292 | margin: -1rem; 293 | margin-bottom: 1rem; 294 | font-weight: 500; 295 | padding-left: 2rem; 296 | } 297 | 298 | h2 { 299 | margin: 0; 300 | font-size: 1.8rem; 301 | text-align: center; 302 | } 303 | 304 | .object-table { 305 | margin: 3rem 0; 306 | display: flex; 307 | flex-direction: column; 308 | align-items: center; 309 | } 310 | 311 | .object-table h3 { 312 | font-size: 1.5rem; 313 | font-weight: 500; 314 | margin: 0; 315 | margin-bottom: 3rem; 316 | } 317 | 318 | 319 | 320 | /* table */ 321 | 322 | table.darkTable { 323 | background-color: #FFFFFF; 324 | width: 80%; 325 | height: 200px; 326 | text-align: center; 327 | border-collapse: collapse; 328 | border-radius: 15px; 329 | } 330 | 331 | table.darkTable td, table.darkTable th { 332 | padding: 2px 2px; 333 | padding-top: 7px; 334 | } 335 | 336 | table.darkTable tbody td { 337 | font-size: 16px; 338 | color: #1E1E1E; 339 | } 340 | 341 | table.darkTable tr:nth-child(even) { 342 | background: #e7e7e7; 343 | } 344 | 345 | table.darkTable thead { 346 | background: #1E1E1E; 347 | border-bottom: 3px solid #1E1E1E; 348 | 349 | } 350 | 351 | table.darkTable thead th { 352 | font-size: 17px; 353 | font-weight: bold; 354 | color: #E6E6E6; 355 | text-align: center; 356 | } 357 | 358 | table.darkTable thead th:first-child { 359 | border-left: none; 360 | } 361 | 362 | table.darkTable tfoot td { 363 | font-size: 12px; 364 | } 365 | 366 | table.darkTable #property { 367 | border-radius: 15px 0 0 0; 368 | border-right: 2px solid rgba(211, 211, 211, 0.3); 369 | } 370 | 371 | table.darkTable #description{ 372 | border-radius: 0 15px 0 0; 373 | } 374 | 375 | table.darkTable #array{ 376 | border-radius: 0 0 15px 0; 377 | } 378 | 379 | table.darkTable #keywords{ 380 | border-radius: 0 0 0 15px; 381 | } 382 | 383 | #name, #url, #keywords { 384 | border-right: 2px solid lightgray; 385 | } 386 | 387 | /* Endpoints */ 388 | 389 | .endpoints { 390 | margin: 3rem 0; 391 | gap: 5rem; 392 | display: flex; 393 | justify-content: space-around; 394 | } 395 | 396 | .endpoints h3 { 397 | font-size: 1rem; 398 | font-weight: 500; 399 | margin: 0; 400 | } 401 | 402 | .url, .js-fetch { 403 | display: flex; 404 | flex-direction: column; 405 | gap: 2rem; 406 | width: 50%; 407 | } 408 | 409 | .js-fetch h3 { 410 | text-align: center; 411 | } 412 | 413 | .url code, .js-fetch code { 414 | font-size: 1.2rem; 415 | background: #fff; 416 | padding: 0.8rem 1.2rem; 417 | border-radius: 15px; 418 | } 419 | 420 | .js-fetch code { 421 | color: white; 422 | font-size: 1.2rem; 423 | background: #979797; 424 | padding: 0.8rem 1.2rem; 425 | border-radius: 15px; 426 | } 427 | 428 | .endpoints span { 429 | color: #F7BF50; 430 | font-weight: 700; 431 | } 432 | 433 | /* Contributor cards */ 434 | 435 | #contributors-title { 436 | padding-top: 3rem; 437 | } 438 | 439 | .contributors { 440 | margin: 3rem 15rem; 441 | display: flex; 442 | flex-direction: row; 443 | justify-content: center; 444 | } 445 | 446 | .contributors .section { 447 | padding: 0 2rem; 448 | width: 435px; 449 | display: flex; 450 | flex-direction: column; 451 | justify-content: center; 452 | align-items: center; 453 | } 454 | .card * { 455 | margin: 0; 456 | padding: 0; 457 | } 458 | 459 | .card { 460 | width: 100%; 461 | height: 150px; 462 | margin: 1.5rem; 463 | border-radius: 12px; 464 | box-shadow: 0.5px 0.5px 12px 0px #80808042; 465 | display: flex; 466 | align-items: center; 467 | gap: 25px; 468 | position: relative; 469 | z-index: 2; 470 | padding-left: 1.3rem; 471 | } 472 | 473 | .card::after { 474 | position: absolute; 475 | content: ''; 476 | width: 20%; 477 | height: 100%; 478 | background-color: lightgray; 479 | z-index: -2; 480 | border-radius: 12px 0 0 12px; 481 | top: 0; 482 | left: 0; 483 | } 484 | 485 | .card img { 486 | height: 109px; 487 | width: 109px; 488 | border-radius: 50%; 489 | border: solid 3px lightgray; 490 | object-fit: cover; 491 | } 492 | 493 | .cont-info { 494 | display: flex; 495 | flex-direction: column; 496 | align-items: center; 497 | justify-content: center; 498 | gap: 10px; 499 | } 500 | .cont-info h4 { 501 | color: #7a7a7a; 502 | font-size: 1.7rem; 503 | font-weight: 700; 504 | } 505 | 506 | .icons { 507 | display: flex; 508 | gap: 1.5rem; 509 | font-size: 1.8rem; 510 | } 511 | 512 | #jacob::after { 513 | background-color: #F37121; 514 | } 515 | 516 | #jacob i { 517 | color: #F37121; 518 | } 519 | 520 | #erika::after { 521 | background-color: #A6B4A2; 522 | } 523 | 524 | #erika i { 525 | color: #A6B4A2; 526 | } 527 | 528 | #alexisintech::after { 529 | background-color: #961711; 530 | } 531 | 532 | #alexisintech i{ 533 | color: #961711; 534 | } 535 | 536 | #brian::after { 537 | background-color: #0075bd; 538 | } 539 | 540 | #brian i{ 541 | color: #0075bd; 542 | } 543 | 544 | #sebastian::after { 545 | background-color: #0CA4BD; 546 | } 547 | 548 | #sebastian i{ 549 | color: #0CA4BD; 550 | } 551 | 552 | #bianca::after { 553 | background-color: #AE5ADB; 554 | } 555 | 556 | #bianca i{ 557 | color: #AE5ADB; 558 | } 559 | 560 | #jacobg::after { 561 | background-color: rgb(0, 85, 255); 562 | } 563 | 564 | #jacobg i{ 565 | color: rgb(0, 85, 255); 566 | } 567 | 568 | #alondra::after { 569 | background-color: #C2A08F; 570 | } 571 | 572 | #alondra i{ 573 | color: #C2A08F; 574 | } 575 | 576 | #alyssha::after { 577 | background-color: #ADB0E0; 578 | } 579 | 580 | #alyssha i{ 581 | color: #ADB0E0; 582 | } 583 | 584 | #dana::after { 585 | background-color: #2de6e2; 586 | } 587 | 588 | #dana i{ 589 | color: #2de6e2; 590 | } 591 | 592 | /* Footer */ 593 | 594 | footer { 595 | background-color: lightgray; 596 | display: flex; 597 | flex-direction: column; 598 | align-items: center; 599 | text-align: center; 600 | padding-top: 2rem; 601 | } 602 | 603 | footer h2 { 604 | font-weight: 500; 605 | } 606 | 607 | footer i { 608 | font-size: 2rem; 609 | } 610 | 611 | hr { 612 | border: #979797 solid 1px; 613 | width: 80% ; 614 | } 615 | 616 | /* MOBILE RESPONSIVESS */ 617 | 618 | /* Main */ 619 | 620 | @media all and (min-width: 1px) and (max-width: 800px) { 621 | 622 | nav { 623 | justify-content: center; 624 | height: 5rem; 625 | } 626 | 627 | nav img { 628 | height: 60px; 629 | } 630 | 631 | main { 632 | flex-wrap: wrap; 633 | flex-direction: column; 634 | } 635 | 636 | .description > h1 { 637 | width: 100%; 638 | font-size: 3rem; 639 | } 640 | 641 | .description > p { 642 | width: 100%; 643 | font-size: 1.5rem; 644 | } 645 | 646 | .description, .api-test { 647 | width: 100%; 648 | } 649 | 650 | .api-test { 651 | margin-top: 2rem; 652 | } 653 | 654 | .api-test form{ 655 | margin-bottom: 2rem; 656 | } 657 | 658 | .api-test form input{ 659 | width: 80%; 660 | } 661 | .api-test form input:focus{ 662 | width: 80%; 663 | } 664 | 665 | .api-test form button{ 666 | width: 20%; 667 | } 668 | 669 | .api-test .result{ 670 | width: 100%; 671 | } 672 | 673 | #contributors { 674 | display: none; 675 | } 676 | } 677 | 678 | @media all and (min-width: 801px) and (max-width: 1024px) { 679 | 680 | nav { 681 | justify-content: center; 682 | height: 6rem; 683 | } 684 | 685 | nav img { 686 | height: 70px; 687 | } 688 | 689 | main { 690 | flex-wrap: wrap; 691 | flex-direction: column; 692 | align-items: center; 693 | } 694 | 695 | .description{ 696 | text-align: justify; 697 | } 698 | 699 | .description > h1 { 700 | width: 100%; 701 | font-size: 3rem; 702 | } 703 | 704 | .description > p { 705 | width: 100%; 706 | font-size: 1.5rem; 707 | } 708 | 709 | .description{ 710 | width: 100%; 711 | } 712 | 713 | .api-test { 714 | margin-top: 2rem; 715 | width: 80%; 716 | } 717 | 718 | 719 | .api-test form{ 720 | width: 100%; 721 | margin-bottom: 2rem; 722 | } 723 | 724 | .api-test form input{ 725 | width: 80%; 726 | } 727 | .api-test form input:focus{ 728 | width: 80%; 729 | } 730 | 731 | .api-test form button{ 732 | width: 20%; 733 | } 734 | 735 | .api-test .result{ 736 | width: 100%; 737 | } 738 | 739 | #contributors { 740 | display: none; 741 | } 742 | 743 | } 744 | 745 | 746 | @media all and (min-width: 1026px) and (max-width: 1180px) { 747 | main { 748 | gap: 2rem; 749 | padding: 3rem; 750 | margin: 0; 751 | } 752 | 753 | .description { 754 | display: flex; 755 | align-items: flex-start; 756 | } 757 | 758 | .description h1, .description p { 759 | width: 100%; 760 | } 761 | 762 | .api-test { 763 | justify-content: space-between; 764 | } 765 | 766 | .api-test form input { 767 | width: 80% 768 | } 769 | 770 | .api-test form button { 771 | width: 20% 772 | } 773 | 774 | .api-test form input:focus { 775 | width: 80% 776 | } 777 | 778 | .api-test .result { 779 | width: 100% 780 | } 781 | } 782 | 783 | 784 | @media all and (max-width: 500px) { 785 | ul { 786 | margin: 1.5rem 1rem; 787 | list-style: none; 788 | padding: 0; 789 | } 790 | } 791 | 792 | @media all and (min-width: 1300px) { 793 | 794 | .api-test form { 795 | margin-bottom: 2rem; 796 | } 797 | } 798 | 799 | 800 | /* Documentation */ 801 | 802 | @media all and (min-width: 1px) and (max-width: 800px) { 803 | 804 | .frame { 805 | border: 0; 806 | } 807 | 808 | .documentation { 809 | padding: 3rem 1rem; 810 | } 811 | 812 | table.darkTable { 813 | width: 100%; 814 | } 815 | 816 | .endpoints { 817 | margin: 3rem 0; 818 | gap: 5rem; 819 | display: flex; 820 | flex-wrap: wrap; 821 | } 822 | 823 | .endpoints div { 824 | width: 100%; 825 | } 826 | 827 | .endpoints h3 { 828 | font-size: 1rem; 829 | font-weight: 500; 830 | margin: 0; 831 | } 832 | } 833 | 834 | @media all and (min-width: 320px) and (max-width: 450px) { 835 | 836 | .object-table h3 { 837 | text-align: center; 838 | } 839 | 840 | table.darkTable tbody td { 841 | font-size: 14px; 842 | } 843 | 844 | table.darkTable thead th { 845 | font-size: 12px; 846 | 847 | } 848 | 849 | .endpoints code { 850 | font-size: 1rem; 851 | } 852 | 853 | .endpoints h3 { 854 | text-align: center; 855 | } 856 | 857 | .endpoints h4 { 858 | padding: 0 1rem; 859 | text-align: center; 860 | } 861 | 862 | } 863 | 864 | 865 | @media all and (min-width: 320px) and (max-width: 1024px) { 866 | 867 | .endpoints h4 { 868 | padding: 0 2rem; 869 | } 870 | 871 | .endpoints h3 { 872 | padding: 0; 873 | } 874 | 875 | } 876 | 877 | 878 | @media all and (min-width: 801px) and (max-width: 1024px) { 879 | .endpoints { 880 | margin: 3rem 0; 881 | gap: 5rem; 882 | display: flex; 883 | flex-wrap: wrap; 884 | } 885 | 886 | .endpoints div { 887 | width: 80%; 888 | } 889 | 890 | .endpoints h3 { 891 | font-size: 1rem; 892 | font-weight: 500; 893 | margin: 0; 894 | } 895 | } 896 | 897 | 898 | /* Contributors */ 899 | 900 | @media all and (min-width: 1px) and (max-width: 319px) { 901 | .frame { 902 | margin: 0; 903 | padding: 0; 904 | border-radius: 0; 905 | } 906 | 907 | .contributors { 908 | width: 100%; 909 | margin: 0; 910 | margin-bottom: 3rem; 911 | padding: 0; 912 | flex-direction: column; 913 | display: flex; 914 | align-items: center; 915 | gap: 15px; 916 | } 917 | 918 | .contributors .section { 919 | padding: 0 2rem; 920 | gap: 20px; 921 | } 922 | 923 | .card { 924 | height: 120px; 925 | width: 70%; 926 | padding-left: 0.8rem; 927 | margin: 0; 928 | gap: 15px; 929 | } 930 | 931 | .card img { 932 | height: 80px; 933 | width: 80px; 934 | } 935 | 936 | .cont-info h4 { 937 | font-size: 1.2rem; 938 | } 939 | 940 | 941 | .icons { 942 | gap: 1rem; 943 | font-size: 1.5rem; 944 | } 945 | } 946 | 947 | @media all and (min-width: 320px) and (max-width: 1024px) { 948 | .frame { 949 | margin: 0; 950 | padding: 0; 951 | border-radius: 0; 952 | } 953 | 954 | .contributors { 955 | width: 100%; 956 | margin: 0; 957 | margin-bottom: 3rem; 958 | padding: 0; 959 | flex-direction: column; 960 | display: flex; 961 | align-items: center; 962 | } 963 | 964 | .contributors .section { 965 | padding: 0; 966 | } 967 | 968 | .section { 969 | width: 100vw; 970 | padding: 0; 971 | margin: 0; 972 | } 973 | 974 | .card { 975 | width: 340px; 976 | padding-left: 1rem; 977 | margin: 0; 978 | margin-top: 1rem; 979 | } 980 | 981 | .card h4 { 982 | font-size: 1.5rem; 983 | } 984 | #contributors-title { 985 | padding-bottom: 2rem; 986 | } 987 | } 988 | 989 | @media all and (min-width: 1025px) and (max-width: 1180px) { 990 | 991 | #contributors-title { 992 | padding-top: 3rem; 993 | } 994 | 995 | .contributors { 996 | margin: 3rem 0rem; 997 | } 998 | 999 | .contributors .section { 1000 | padding: 0 2rem; 1001 | gap: 20px; 1002 | } 1003 | 1004 | .card { 1005 | height: 120px; 1006 | padding-left: 0.8rem; 1007 | margin: 0; 1008 | gap: 15px; 1009 | } 1010 | 1011 | .card img { 1012 | height: 80px; 1013 | width: 80px; 1014 | } 1015 | 1016 | .cont-info h4 { 1017 | font-size: 1.2rem; 1018 | } 1019 | 1020 | 1021 | .icons { 1022 | gap: 1rem; 1023 | font-size: 1.5rem; 1024 | } 1025 | 1026 | } 1027 | 1028 | @media all and (min-width: 1181px){ 1029 | 1030 | #contributors-title { 1031 | padding-top: 3rem; 1032 | } 1033 | 1034 | .contributors { 1035 | margin: 3rem 0rem; 1036 | } 1037 | 1038 | .contributors .section { 1039 | padding: 0 2rem; 1040 | width: 380px; 1041 | } 1042 | 1043 | .card { 1044 | padding-left: 0.8rem; 1045 | } 1046 | 1047 | .cont-info h4 { 1048 | font-size: 1.3rem; 1049 | } 1050 | 1051 | .icons { 1052 | gap: 1rem; 1053 | font-size: 1.5rem; 1054 | } 1055 | 1056 | } 1057 | -------------------------------------------------------------------------------- /public/js/main.js: -------------------------------------------------------------------------------- 1 | const scrollBtn = document.getElementById('contributors') 2 | const targetScroll = document.getElementById('contributors-title') 3 | const elemRect = targetScroll.getBoundingClientRect() 4 | scrollBtn.addEventListener("click", function () { 5 | window.scrollTo({ 6 | top: elemRect.top, 7 | left: 0, 8 | }); 9 | }); 10 | 11 | const input = document.querySelector('input') 12 | const scrollContainer = document.querySelector('.scroll-container') 13 | //add event listener for when input is focused 14 | input.addEventListener('keydown', (e) => { 15 | if (e.key === 'Enter') { 16 | //stop browser from refreshing 17 | e.preventDefault() 18 | getMatches() 19 | } 20 | }); 21 | 22 | 23 | const btn = document.getElementById('keyword-btn'); 24 | btn.addEventListener('click', getMatches); 25 | 26 | /** 27 | * Name: getMatches 28 | * Description: Find resources with keywords matching the user input 29 | */ 30 | async function getMatches() { 31 | //gets the input from the text box and trims white space and makes it lower case 32 | const keyword = document.querySelector('input').value.toLowerCase().trim(); 33 | 34 | try { 35 | const res = await fetch('/api'); 36 | const data = await res.json(); 37 | // Filters array from the API for resources with keywords containing user value 38 | const matches = data.filter(resource => resource.keywords.some(str => str.toLowerCase().includes(keyword))); 39 | renderMatches(matches); 40 | } catch (err) { 41 | console.error(err); 42 | } 43 | //reset search bar to empty 44 | document.querySelector('input').value = '' 45 | //scroll back to the top 46 | scrollContainer.scrollTop = 0 47 | } 48 | 49 | /** 50 | * Name: renderMatches 51 | * Description: takes an array of matches, each match represents resources that had contained a resource's keyword and renders each match to the DOM. 52 | * @param {*} matches - accepts an array of objects had contained a resource's keyword. 53 | */ 54 | function renderMatches(matches) { 55 | const list = document.getElementById('result-list'); 56 | list.innerHTML = ''; 57 | 58 | // If matches exist, render each match to the DOM 59 | if(matches.length) { 60 | // For every match found, render the objects to the DOM in JSON format 61 | matches.forEach(match => { 62 | const li = document.createElement('li'); 63 | 64 | // Create an element that looks like a JSON object for every match 65 | li.innerHTML = ` 66 |
67 | 					
68 | 						{
69 | 							
70 |

name: ${match.name},

71 |
url: '${match.url}',
72 |

description: ${match.description},

73 |
keywords: [${match.keywords.map(keyword => `'${keyword}'`).join(", ")}]
74 |
75 | }, 76 |
77 |
78 | `; 79 | 80 | list.appendChild(li); 81 | }); 82 | } else { 83 | // Display "No matches were found" in result-list