├── BMI Calculator ├── bmiCalculator.html ├── calculator.js ├── index.html ├── package-lock.json └── package.json ├── Blog Website ├── Procfile ├── app.js ├── package.json ├── public │ └── css │ │ └── styles.css └── views │ ├── about.ejs │ ├── compose.ejs │ ├── contact.ejs │ ├── home.ejs │ ├── partials │ ├── footer.ejs │ └── header.ejs │ └── post.ejs ├── CSS-MySite ├── css │ ├── favicon.ico │ └── styles.css ├── images │ ├── cloud.png │ ├── code.png │ ├── layout.png │ ├── mountain.png │ └── profile-pic.png └── index.html ├── Calculator.gif ├── Dice-Project ├── images │ ├── dice1.png │ ├── dice2.png │ ├── dice3.png │ ├── dice4.png │ ├── dice5.png │ └── dice6.png ├── index.html ├── index.js └── styles.css ├── Drum-Kit ├── images │ ├── crash.png │ ├── kick.png │ ├── snare.png │ ├── tom1.png │ ├── tom2.png │ ├── tom3.png │ └── tom4.png ├── index.html ├── index.js ├── sounds │ ├── crash.mp3 │ ├── kick-bass.mp3 │ ├── snare.mp3 │ ├── tom-1.mp3 │ ├── tom-2.mp3 │ ├── tom-3.mp3 │ └── tom-4.mp3 └── styles.css ├── FullStack.jpg ├── HTML-PersonalSite ├── contact.html ├── css │ └── styles.css ├── hobbies.html ├── img │ └── AdobeBadge.png └── index.html ├── Newsletter-signup ├── Procfile ├── app.js ├── failure.html ├── package-lock.json ├── package.json ├── public │ ├── css │ │ └── styles.css │ └── images │ │ └── newsletter.png ├── signup.html └── success.html ├── README.md ├── Simon-Game-Challenge ├── game.js ├── index.html ├── sounds │ ├── blue.mp3 │ ├── green.mp3 │ ├── red.mp3 │ ├── wrong.mp3 │ └── yellow.mp3 └── styles.css ├── TinDog.png ├── Udemy-TinDog ├── README.md ├── css │ └── styles.css ├── images │ ├── bizinsider.png │ ├── dog-img.jpg │ ├── iphone6-1.png │ ├── iphone6.png │ ├── lady-img.jpg │ ├── mashable.png │ ├── techcrunch.png │ └── tnw.png └── index.html ├── WeatherApp.gif ├── WeatherProject ├── app.js ├── index.html ├── package-lock.json └── package.json ├── Web+Dev+Syllabus.pdf ├── gitignore └── Node.gitignore ├── intro-to-node ├── index.js ├── node_modules │ ├── superheroes │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ ├── readme.md │ │ └── superheroes.json │ ├── supervillains │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ ├── readme.md │ │ └── supervillains.json │ ├── unique-random-array │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ └── unique-random │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md ├── package-lock.json └── package.json ├── jQuery ├── index.html ├── index.js └── styles.css ├── todolist-v1 ├── app.js ├── date.js ├── index.html ├── package-lock.json ├── package.json ├── public │ └── css │ │ └── styles.css └── views │ ├── about.ejs │ ├── footer.ejs │ ├── header.ejs │ └── list.ejs └── todolist-v2-completed ├── Procfile ├── app.js ├── index.html ├── package-lock.json ├── package.json ├── public └── css │ └── styles.css └── views ├── about.ejs ├── footer.ejs ├── header.ejs └── list.ejs /BMI Calculator/bmiCalculator.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BMI Calculator 6 | 7 | 8 |

BMI Calculator

9 |
10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /BMI Calculator/calculator.js: -------------------------------------------------------------------------------- 1 | //jshint eversion:6 2 | const express = require("express"); 3 | const bodyParser = require("body-parser"); 4 | 5 | const app = express(); 6 | app.use(bodyParser.urlencoded({extended: true})); 7 | //body Paser has few modes such as bodyPaser.json, bodyPaser.text 8 | 9 | //the home page 10 | app.get("/", function(req,res){ 11 | res.sendFile(__dirname+"/index.html"); 12 | }); 13 | 14 | app.post("/", function(req, res){ 15 | 16 | var num1 = Number(req.body.num1); 17 | var num2 = Number(req.body.num2); 18 | //num1 and num2 comes from index.html 19 | 20 | var result = num1 + num2; 21 | 22 | res.send("The result is "+ result); 23 | }); 24 | // for BMI Calculator page 25 | app.get("/bmicalculator", function(req,res){ 26 | res.sendFile(__dirname+ "/bmiCalculator.html"); 27 | }); 28 | 29 | app.post("/bmicalculator", function(req,res){ 30 | var height = Number(req.body.height); 31 | var weight = Number(req.body.weight); 32 | 33 | var bmi = weight/(height*height); 34 | 35 | res.send("Your BMI is "+bmi); 36 | }); 37 | 38 | app.listen(3000, function(){ 39 | console.log("Server is running on port 3000"); 40 | }); 41 | -------------------------------------------------------------------------------- /BMI Calculator/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Calculator 6 | 7 | 8 |

Calculator

9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /BMI Calculator/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "calculator", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "accepts": { 8 | "version": "1.3.7", 9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 10 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 11 | "requires": { 12 | "mime-types": "~2.1.24", 13 | "negotiator": "0.6.2" 14 | } 15 | }, 16 | "array-flatten": { 17 | "version": "1.1.1", 18 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 19 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 20 | }, 21 | "body-parser": { 22 | "version": "1.19.0", 23 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", 24 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", 25 | "requires": { 26 | "bytes": "3.1.0", 27 | "content-type": "~1.0.4", 28 | "debug": "2.6.9", 29 | "depd": "~1.1.2", 30 | "http-errors": "1.7.2", 31 | "iconv-lite": "0.4.24", 32 | "on-finished": "~2.3.0", 33 | "qs": "6.7.0", 34 | "raw-body": "2.4.0", 35 | "type-is": "~1.6.17" 36 | } 37 | }, 38 | "bytes": { 39 | "version": "3.1.0", 40 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 41 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 42 | }, 43 | "content-disposition": { 44 | "version": "0.5.3", 45 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", 46 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", 47 | "requires": { 48 | "safe-buffer": "5.1.2" 49 | } 50 | }, 51 | "content-type": { 52 | "version": "1.0.4", 53 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 54 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 55 | }, 56 | "cookie": { 57 | "version": "0.4.0", 58 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", 59 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" 60 | }, 61 | "cookie-signature": { 62 | "version": "1.0.6", 63 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 64 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 65 | }, 66 | "debug": { 67 | "version": "2.6.9", 68 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 69 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 70 | "requires": { 71 | "ms": "2.0.0" 72 | } 73 | }, 74 | "depd": { 75 | "version": "1.1.2", 76 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 77 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 78 | }, 79 | "destroy": { 80 | "version": "1.0.4", 81 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 82 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 83 | }, 84 | "ee-first": { 85 | "version": "1.1.1", 86 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 87 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 88 | }, 89 | "encodeurl": { 90 | "version": "1.0.2", 91 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 92 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 93 | }, 94 | "escape-html": { 95 | "version": "1.0.3", 96 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 97 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 98 | }, 99 | "etag": { 100 | "version": "1.8.1", 101 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 102 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 103 | }, 104 | "express": { 105 | "version": "4.17.1", 106 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", 107 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", 108 | "requires": { 109 | "accepts": "~1.3.7", 110 | "array-flatten": "1.1.1", 111 | "body-parser": "1.19.0", 112 | "content-disposition": "0.5.3", 113 | "content-type": "~1.0.4", 114 | "cookie": "0.4.0", 115 | "cookie-signature": "1.0.6", 116 | "debug": "2.6.9", 117 | "depd": "~1.1.2", 118 | "encodeurl": "~1.0.2", 119 | "escape-html": "~1.0.3", 120 | "etag": "~1.8.1", 121 | "finalhandler": "~1.1.2", 122 | "fresh": "0.5.2", 123 | "merge-descriptors": "1.0.1", 124 | "methods": "~1.1.2", 125 | "on-finished": "~2.3.0", 126 | "parseurl": "~1.3.3", 127 | "path-to-regexp": "0.1.7", 128 | "proxy-addr": "~2.0.5", 129 | "qs": "6.7.0", 130 | "range-parser": "~1.2.1", 131 | "safe-buffer": "5.1.2", 132 | "send": "0.17.1", 133 | "serve-static": "1.14.1", 134 | "setprototypeof": "1.1.1", 135 | "statuses": "~1.5.0", 136 | "type-is": "~1.6.18", 137 | "utils-merge": "1.0.1", 138 | "vary": "~1.1.2" 139 | } 140 | }, 141 | "finalhandler": { 142 | "version": "1.1.2", 143 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", 144 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 145 | "requires": { 146 | "debug": "2.6.9", 147 | "encodeurl": "~1.0.2", 148 | "escape-html": "~1.0.3", 149 | "on-finished": "~2.3.0", 150 | "parseurl": "~1.3.3", 151 | "statuses": "~1.5.0", 152 | "unpipe": "~1.0.0" 153 | } 154 | }, 155 | "forwarded": { 156 | "version": "0.1.2", 157 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 158 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 159 | }, 160 | "fresh": { 161 | "version": "0.5.2", 162 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 163 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 164 | }, 165 | "http-errors": { 166 | "version": "1.7.2", 167 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 168 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 169 | "requires": { 170 | "depd": "~1.1.2", 171 | "inherits": "2.0.3", 172 | "setprototypeof": "1.1.1", 173 | "statuses": ">= 1.5.0 < 2", 174 | "toidentifier": "1.0.0" 175 | } 176 | }, 177 | "iconv-lite": { 178 | "version": "0.4.24", 179 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 180 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 181 | "requires": { 182 | "safer-buffer": ">= 2.1.2 < 3" 183 | } 184 | }, 185 | "inherits": { 186 | "version": "2.0.3", 187 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 188 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 189 | }, 190 | "ipaddr.js": { 191 | "version": "1.9.1", 192 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 193 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 194 | }, 195 | "media-typer": { 196 | "version": "0.3.0", 197 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 198 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 199 | }, 200 | "merge-descriptors": { 201 | "version": "1.0.1", 202 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 203 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 204 | }, 205 | "methods": { 206 | "version": "1.1.2", 207 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 208 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 209 | }, 210 | "mime": { 211 | "version": "1.6.0", 212 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 213 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 214 | }, 215 | "mime-db": { 216 | "version": "1.44.0", 217 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", 218 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" 219 | }, 220 | "mime-types": { 221 | "version": "2.1.27", 222 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", 223 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", 224 | "requires": { 225 | "mime-db": "1.44.0" 226 | } 227 | }, 228 | "ms": { 229 | "version": "2.0.0", 230 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 231 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 232 | }, 233 | "negotiator": { 234 | "version": "0.6.2", 235 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 236 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 237 | }, 238 | "on-finished": { 239 | "version": "2.3.0", 240 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 241 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 242 | "requires": { 243 | "ee-first": "1.1.1" 244 | } 245 | }, 246 | "parseurl": { 247 | "version": "1.3.3", 248 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 249 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 250 | }, 251 | "path-to-regexp": { 252 | "version": "0.1.7", 253 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 254 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 255 | }, 256 | "proxy-addr": { 257 | "version": "2.0.6", 258 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", 259 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", 260 | "requires": { 261 | "forwarded": "~0.1.2", 262 | "ipaddr.js": "1.9.1" 263 | } 264 | }, 265 | "qs": { 266 | "version": "6.7.0", 267 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", 268 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" 269 | }, 270 | "range-parser": { 271 | "version": "1.2.1", 272 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 273 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 274 | }, 275 | "raw-body": { 276 | "version": "2.4.0", 277 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", 278 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", 279 | "requires": { 280 | "bytes": "3.1.0", 281 | "http-errors": "1.7.2", 282 | "iconv-lite": "0.4.24", 283 | "unpipe": "1.0.0" 284 | } 285 | }, 286 | "safe-buffer": { 287 | "version": "5.1.2", 288 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 289 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 290 | }, 291 | "safer-buffer": { 292 | "version": "2.1.2", 293 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 294 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 295 | }, 296 | "send": { 297 | "version": "0.17.1", 298 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", 299 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", 300 | "requires": { 301 | "debug": "2.6.9", 302 | "depd": "~1.1.2", 303 | "destroy": "~1.0.4", 304 | "encodeurl": "~1.0.2", 305 | "escape-html": "~1.0.3", 306 | "etag": "~1.8.1", 307 | "fresh": "0.5.2", 308 | "http-errors": "~1.7.2", 309 | "mime": "1.6.0", 310 | "ms": "2.1.1", 311 | "on-finished": "~2.3.0", 312 | "range-parser": "~1.2.1", 313 | "statuses": "~1.5.0" 314 | }, 315 | "dependencies": { 316 | "ms": { 317 | "version": "2.1.1", 318 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 319 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" 320 | } 321 | } 322 | }, 323 | "serve-static": { 324 | "version": "1.14.1", 325 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", 326 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", 327 | "requires": { 328 | "encodeurl": "~1.0.2", 329 | "escape-html": "~1.0.3", 330 | "parseurl": "~1.3.3", 331 | "send": "0.17.1" 332 | } 333 | }, 334 | "setprototypeof": { 335 | "version": "1.1.1", 336 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 337 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 338 | }, 339 | "statuses": { 340 | "version": "1.5.0", 341 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 342 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 343 | }, 344 | "toidentifier": { 345 | "version": "1.0.0", 346 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 347 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 348 | }, 349 | "type-is": { 350 | "version": "1.6.18", 351 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 352 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 353 | "requires": { 354 | "media-typer": "0.3.0", 355 | "mime-types": "~2.1.24" 356 | } 357 | }, 358 | "unpipe": { 359 | "version": "1.0.0", 360 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 361 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 362 | }, 363 | "utils-merge": { 364 | "version": "1.0.1", 365 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 366 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 367 | }, 368 | "vary": { 369 | "version": "1.1.2", 370 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 371 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 372 | } 373 | } 374 | } 375 | -------------------------------------------------------------------------------- /BMI Calculator/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "calculator", 3 | "version": "1.0.0", 4 | "description": "The is a calculator app build to compute on the server side.", 5 | "main": "calculator.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "Deepa Subramanian", 10 | "license": "ISC", 11 | "dependencies": { 12 | "body-parser": "^1.19.0", 13 | "express": "^4.17.1" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Blog Website/Procfile: -------------------------------------------------------------------------------- 1 | web: node app.js -------------------------------------------------------------------------------- /Blog Website/app.js: -------------------------------------------------------------------------------- 1 | //jshint esversion:6 2 | 3 | const express = require("express"); 4 | const bodyParser = require("body-parser"); 5 | const ejs = require("ejs"); 6 | const mongoose = require('mongoose'); 7 | 8 | const homeStartingContent = "Lacus vel facilisis volutpat est velit egestas dui id ornare. Semper auctor neque vitae tempus quam. Sit amet cursus sit amet dictum sit amet justo. Viverra tellus in hac habitasse. Imperdiet proin fermentum leo vel orci porta. Donec ultrices tincidunt arcu non sodales neque sodales ut. Mattis molestie a iaculis at erat pellentesque adipiscing. Magnis dis parturient montes nascetur ridiculus mus mauris vitae ultricies. Adipiscing elit ut aliquam purus sit amet luctus venenatis lectus. Ultrices vitae auctor eu augue ut lectus arcu bibendum at. Odio euismod lacinia at quis risus sed vulputate odio ut. Cursus mattis molestie a iaculis at erat pellentesque adipiscing."; 9 | const aboutContent = "Hac habitasse platea dictumst vestibulum rhoncus est pellentesque. Dictumst vestibulum rhoncus est pellentesque elit ullamcorper. Non diam phasellus vestibulum lorem sed. Platea dictumst quisque sagittis purus sit. Egestas sed sed risus pretium quam vulputate dignissim suspendisse. Mauris in aliquam sem fringilla. Semper risus in hendrerit gravida rutrum quisque non tellus orci. Amet massa vitae tortor condimentum lacinia quis vel eros. Enim ut tellus elementum sagittis vitae. Mauris ultrices eros in cursus turpis massa tincidunt dui."; 10 | const contactContent = "Scelerisque eleifend donec pretium vulputate sapien. Rhoncus urna neque viverra justo nec ultrices. Arcu dui vivamus arcu felis bibendum. Consectetur adipiscing elit duis tristique. Risus viverra adipiscing at in tellus integer feugiat. Sapien nec sagittis aliquam malesuada bibendum arcu vitae. Consequat interdum varius sit amet mattis. Iaculis nunc sed augue lacus. Interdum posuere lorem ipsum dolor sit amet consectetur adipiscing elit. Pulvinar elementum integer enim neque. Ultrices gravida dictum fusce ut placerat orci nulla. Mauris in aliquam sem fringilla ut morbi tincidunt. Tortor posuere ac ut consequat semper viverra nam libero."; 11 | 12 | const app = express(); 13 | 14 | app.set('view engine', 'ejs'); 15 | 16 | app.use(bodyParser.urlencoded({extended: true})); 17 | app.use(express.static("public")); 18 | 19 | mongoose.connect("",{useNewUrlParser: true},{useUnifiedTopology: true}); 20 | 21 | //Creating a Schema 22 | const postSchema = { 23 | title: String, 24 | content: String 25 | }; 26 | //mongoose model 27 | const Post = mongoose.model("Post", postSchema); 28 | 29 | //the home route 30 | app.get("/", function(req, res){ 31 | 32 | Post.find({}, function(err, posts){ 33 | res.render("home", { 34 | startingContent: homeStartingContent, 35 | posts: posts 36 | }); 37 | }); 38 | }); 39 | 40 | // fetching "/compose" page 41 | app.get("/compose", function(req, res){ 42 | res.render("compose"); 43 | }); 44 | 45 | //posting title and content in /compose page 46 | app.post("/compose", function(req, res){ 47 | const post = new Post({ 48 | title: req.body.postTitle, 49 | content: req.body.postBody 50 | }); 51 | // composed blog gets saved and the user is redirected to "/" route 52 | post.save(function(err){ 53 | if (!err){ 54 | res.redirect("/"); 55 | } 56 | }); 57 | }); 58 | //clicking on readmore on the home screen bring up the post with the id on the url 59 | app.get("/posts/:postId", function(req, res){ 60 | 61 | const requestedPostId = req.params.postId; 62 | 63 | Post.findOne({_id: requestedPostId}, function(err, post){ 64 | res.render("post", { 65 | title: post.title, 66 | content: post.content 67 | }); 68 | }); 69 | 70 | }); 71 | 72 | app.get("/about", function(req, res){ 73 | res.render("about", {aboutContent: aboutContent}); 74 | }); 75 | 76 | app.get("/contact", function(req, res){ 77 | res.render("contact", {contactContent: contactContent}); 78 | }); 79 | 80 | 81 | let port = process.env.PORT; 82 | if (port == null || port == "") { 83 | port = 3000; 84 | } 85 | 86 | app.listen(port, function() { 87 | console.log("Server has started in port 3000 successfully"); 88 | }); 89 | -------------------------------------------------------------------------------- /Blog Website/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ejs-challenge", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "app.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "engines": { 12 | "node": "12.18.3" 13 | }, 14 | "dependencies": { 15 | "body-parser": "^1.18.3", 16 | "ejs": "^2.6.1", 17 | "express": "^4.17.1", 18 | "lodash": "^4.17.20", 19 | "mongoose": "^5.10.7" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Blog Website/public/css/styles.css: -------------------------------------------------------------------------------- 1 | html { 2 | min-height: 100%; 3 | position: relative; 4 | } 5 | 6 | .container-fluid { 7 | padding-top: 70px; 8 | padding-bottom: 70px; 9 | } 10 | .navbar { 11 | padding-top: 15px; 12 | padding-bottom: 15px; 13 | border: 0; 14 | border-radius: 0; 15 | margin-bottom: 0; 16 | font-size: 12px; 17 | letter-spacing: 5px; 18 | } 19 | .navbar-nav li a:hover { 20 | color: #1abc9c !important; 21 | } 22 | 23 | .footer-padding { 24 | padding-bottom: 60px; 25 | } 26 | 27 | .footer { 28 | position: absolute; 29 | text-align: center; 30 | bottom: 0; 31 | width: 100%; 32 | height: 60px; 33 | background-color: #97A7AF; 34 | } 35 | 36 | .footer p { 37 | margin-top: 25px; 38 | font-size: 12px; 39 | color: #fff; 40 | } 41 | -------------------------------------------------------------------------------- /Blog Website/views/about.ejs: -------------------------------------------------------------------------------- 1 | <%- include("partials/header"); -%> 2 |

About

3 |

<%= aboutContent %>

4 | <%- include("partials/footer"); -%> 5 | -------------------------------------------------------------------------------- /Blog Website/views/compose.ejs: -------------------------------------------------------------------------------- 1 | 2 | <%- include("partials/header"); -%> 3 |

Compose

4 |
5 |
6 | 7 | 8 | 9 | 10 |
11 | 12 |
13 | 14 | <%- include("partials/footer"); -%> 15 | -------------------------------------------------------------------------------- /Blog Website/views/contact.ejs: -------------------------------------------------------------------------------- 1 | <%- include("partials/header"); -%> 2 |

Contact

3 |

<%= contactContent %>

4 | <%- include("partials/footer"); -%> 5 | -------------------------------------------------------------------------------- /Blog Website/views/home.ejs: -------------------------------------------------------------------------------- 1 | 2 | <%- include("partials/header"); -%> 3 |

Home

4 |

<%= startingContent %>

5 | 6 | 7 | <% posts.forEach(function(post){ %> 8 | 9 |

<%=post.title%>

10 |

11 | <%=post.content.substring(0, 100) + " ..."%> 12 | Read More 13 |

14 | 15 | 16 | <% }) %> 17 | 18 | 19 | <%- include("partials/footer"); -%> 20 | -------------------------------------------------------------------------------- /Blog Website/views/partials/footer.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /Blog Website/views/partials/header.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Daily Journal 7 | 8 | 9 | 10 | 22 | 23 | 24 |
25 | -------------------------------------------------------------------------------- /Blog Website/views/post.ejs: -------------------------------------------------------------------------------- 1 | <%- include("partials/header"); -%> 2 | 3 |

<%=title%>

4 |

<%=content%>

5 | 6 | <%- include("partials/footer"); -%> 7 | -------------------------------------------------------------------------------- /CSS-MySite/css/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/CSS-MySite/css/favicon.ico -------------------------------------------------------------------------------- /CSS-MySite/css/styles.css: -------------------------------------------------------------------------------- 1 | body { 2 | color: #40514E; 3 | font-family: 'Merriweather', serif; 4 | margin: 0; 5 | text-align: center; 6 | } 7 | 8 | h1 { 9 | color: #66BFBF; 10 | font-size: 5.625rem; 11 | margin: 50px auto 0 auto; 12 | font-family: 'Sacramento', cursive; 13 | } 14 | 15 | h2 { 16 | color: #66BFBF; 17 | font-family: 'Montserrat', sans-serif; 18 | font-size: 2.5rem; 19 | font-weight: normal; 20 | padding-bottom: 10px; 21 | } 22 | 23 | h3 { 24 | color: #11999E; 25 | font-family: 'Montserrat', sans-serif; 26 | } 27 | 28 | p { 29 | line-height: 2; 30 | } 31 | 32 | hr { 33 | border: dotted #EAF6F6 6px; 34 | border-bottom: none; 35 | width: 4%; 36 | margin: 100px auto; 37 | } 38 | 39 | a{ 40 | color: #11999E; 41 | font-family: 'Montserrat', sans-serif; 42 | margin: 10px 20px; 43 | text-decoration: none; 44 | } 45 | 46 | a:hover { 47 | color: #EAF6F6; 48 | } 49 | 50 | .top-container { 51 | background-color: #E4F9F5; 52 | position: relative; 53 | padding-top: 100px; 54 | } 55 | 56 | .middle-container { 57 | margin: 100px 0; 58 | } 59 | 60 | .bottom-container { 61 | background-color: #66BFBF; 62 | padding: 50px 0 20px; 63 | } 64 | 65 | .skill-row { 66 | width: 50%; 67 | margin: 100px auto 100px auto; 68 | text-align: left; 69 | } 70 | 71 | .intro { 72 | width: 30%; 73 | margin: auto; 74 | } 75 | 76 | .contact-message { 77 | width: 40%; 78 | margin: 40px auto 60px; 79 | } 80 | 81 | .copyright { 82 | color: #EAF6F6; 83 | font-size: 0.75rem; 84 | padding: 20px 0; 85 | } 86 | 87 | .top-cloud { 88 | position: absolute; 89 | right: 300px; 90 | top: 40px; 91 | } 92 | 93 | .bottom-cloud { 94 | position: absolute; 95 | left: 150px; 96 | bottom: 250px; 97 | } 98 | 99 | .code-icon { 100 | width: 25%; 101 | float: left; 102 | margin-right: 30px; 103 | } 104 | 105 | .web-icon { 106 | width: 25%; 107 | float: right; 108 | margin-left: 30px; 109 | } 110 | 111 | .btn { 112 | background: #11cdd4; 113 | background-image: -webkit-linear-gradient(top, #11cdd4, #11999e); 114 | background-image: -moz-linear-gradient(top, #11cdd4, #11999e); 115 | background-image: -ms-linear-gradient(top, #11cdd4, #11999e); 116 | background-image: -o-linear-gradient(top, #11cdd4, #11999e); 117 | background-image: linear-gradient(to bottom, #11cdd4, #11999e); 118 | -webkit-border-radius: 8; 119 | -moz-border-radius: 8; 120 | border-radius: 8px; 121 | font-family: 'Montserrat', sans-serif; 122 | color: #ffffff; 123 | font-size: 20px; 124 | padding: 10px 20px 10px 20px; 125 | text-decoration: none; 126 | } 127 | 128 | .btn:hover { 129 | background: #30e3cb; 130 | background-image: -webkit-linear-gradient(top, #30e3cb, #2bc4ad); 131 | background-image: -moz-linear-gradient(top, #30e3cb, #2bc4ad); 132 | background-image: -ms-linear-gradient(top, #30e3cb, #2bc4ad); 133 | background-image: -o-linear-gradient(top, #30e3cb, #2bc4ad); 134 | background-image: linear-gradient(to bottom, #30e3cb, #2bc4ad); 135 | text-decoration: none; 136 | } -------------------------------------------------------------------------------- /CSS-MySite/images/cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/CSS-MySite/images/cloud.png -------------------------------------------------------------------------------- /CSS-MySite/images/code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/CSS-MySite/images/code.png -------------------------------------------------------------------------------- /CSS-MySite/images/layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/CSS-MySite/images/layout.png -------------------------------------------------------------------------------- /CSS-MySite/images/mountain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/CSS-MySite/images/mountain.png -------------------------------------------------------------------------------- /CSS-MySite/images/profile-pic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/CSS-MySite/images/profile-pic.png -------------------------------------------------------------------------------- /CSS-MySite/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Deepa Subramanian 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | cloud 16 |

I'm Deepa.

17 |

Test Engineer

18 | cloud 19 | mountain 20 |
21 |
22 |
23 | Deepa Subramanian 24 |

Hello!

25 |

26 | I am Software test professional who aspires to become a full stack 27 | developer. I like to draw and paint. My favorite 28 | medium is chalk pastel. I ❤️ coffee !!!. 29 |

30 |
31 |
32 |
33 |

My Skills

34 |
35 | code icon 36 |

Coursera

37 |

38 | This is a five part course on front end web development. HTML5, 39 | CSS3, JavaScript, JQuery and Boostrap. Capstone course was completed 40 | using a bootstrap theme. This was my first web design course. I was 41 | just getting my feet wet here. 42 |

43 |
44 |
45 | web stack icon 46 |

Udemy

47 |

48 | I took the complete 2020 web development bootcamp from Udemy from 49 | Angela Yu. This is an intense course has 469 lectures which focuses 50 | on full stack development. I like this course as it gave me more 51 | confidence to be able to code than the first one. 52 |

53 |
54 |
55 |
56 |
57 |

Get In Touch

58 |

If you are an aspiring developer, let's connect.

59 | 63 | CONTACT ME 64 |
65 |
66 |
67 | LinkedIn 68 | Twitter 69 | Github 70 | 71 |
72 | 73 | 74 | -------------------------------------------------------------------------------- /Calculator.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Calculator.gif -------------------------------------------------------------------------------- /Dice-Project/images/dice1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Dice-Project/images/dice1.png -------------------------------------------------------------------------------- /Dice-Project/images/dice2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Dice-Project/images/dice2.png -------------------------------------------------------------------------------- /Dice-Project/images/dice3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Dice-Project/images/dice3.png -------------------------------------------------------------------------------- /Dice-Project/images/dice4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Dice-Project/images/dice4.png -------------------------------------------------------------------------------- /Dice-Project/images/dice5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Dice-Project/images/dice5.png -------------------------------------------------------------------------------- /Dice-Project/images/dice6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Dice-Project/images/dice6.png -------------------------------------------------------------------------------- /Dice-Project/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Dicee 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 |

Refresh Me

14 | 15 |
16 |

Player 1

17 | 18 |
19 | 20 |
21 |

Player 2

22 | 23 |
24 |
25 | 26 | 27 | 28 | 29 |
30 | www 🎲 App Brewery 🎲 com 31 |
32 | 33 | -------------------------------------------------------------------------------- /Dice-Project/index.js: -------------------------------------------------------------------------------- 1 | var randomNumber1 = Math.floor(Math.random() * 6) + 1; //1-6 2 | 3 | var randomDiceImage = "dice" + randomNumber1 + ".png"; //dice1.png - dice6.png 4 | 5 | var randomImageSource = "images/" + randomDiceImage; //images/dice1.png - images/dice6.png 6 | 7 | var image1 = document.querySelectorAll("img")[0]; 8 | 9 | image1.setAttribute("src", randomImageSource); 10 | 11 | // For second Image 12 | var randomNumber2 = Math.floor(Math.random() * 6 )+ 1 ; 13 | var randomImageSource2 = "images/dice" + randomNumber2 + ".png"; //images/dice1.png - images/dice6.png 14 | var image2 = document.querySelectorAll("img")[1].setAttribute("src", randomImageSource2); 15 | 16 | if (randomNumber1 > randomNumber2){ 17 | document.querySelector("h1").innerHTML="🚩Player 1 Wins!"; 18 | } else if (randomNumber1 < randomNumber2){ 19 | document.querySelector("h1").innerHTML="Player 2 Wins! 🚩"; 20 | } else { 21 | document.querySelector("h1").innerHTML="It's a Draw!"; 22 | } -------------------------------------------------------------------------------- /Dice-Project/styles.css: -------------------------------------------------------------------------------- 1 | .container { 2 | width: 70%; 3 | margin: auto; 4 | text-align: center; 5 | } 6 | 7 | .dice { 8 | text-align: center; 9 | display: inline-block; 10 | 11 | } 12 | 13 | body { 14 | background-color: #393E46; 15 | } 16 | 17 | h1 { 18 | margin: 30px; 19 | font-family: 'Lobster', cursive; 20 | text-shadow: 5px 0 #232931; 21 | font-size: 8rem; 22 | color: #4ECCA3; 23 | } 24 | 25 | p { 26 | font-size: 2rem; 27 | color: #4ECCA3; 28 | font-family: 'Indie Flower', cursive; 29 | } 30 | 31 | img { 32 | width: 80%; 33 | } 34 | 35 | footer { 36 | margin-top: 5%; 37 | color: #EEEEEE; 38 | text-align: center; 39 | font-family: 'Indie Flower', cursive; 40 | 41 | } 42 | -------------------------------------------------------------------------------- /Drum-Kit/images/crash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Drum-Kit/images/crash.png -------------------------------------------------------------------------------- /Drum-Kit/images/kick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Drum-Kit/images/kick.png -------------------------------------------------------------------------------- /Drum-Kit/images/snare.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Drum-Kit/images/snare.png -------------------------------------------------------------------------------- /Drum-Kit/images/tom1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Drum-Kit/images/tom1.png -------------------------------------------------------------------------------- /Drum-Kit/images/tom2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Drum-Kit/images/tom2.png -------------------------------------------------------------------------------- /Drum-Kit/images/tom3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Drum-Kit/images/tom3.png -------------------------------------------------------------------------------- /Drum-Kit/images/tom4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Drum-Kit/images/tom4.png -------------------------------------------------------------------------------- /Drum-Kit/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Drum Kit 7 | 8 | 9 | 10 | 11 | 12 | 13 |

Drum 🥁 Kit

14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 |
28 | Made with ❤️ in California. 29 |
30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /Drum-Kit/index.js: -------------------------------------------------------------------------------- 1 | 2 | //Detecting Button Press 3 | 4 | // the dom method here will give all the buttoms with drum class 5 | var numberOfDrumButtons = document.querySelectorAll(".drum").length; 6 | // here we are using anonymous function so that we use one function for all drum clicks 7 | for (var i = 0; i < numberOfDrumButtons; i++){ 8 | document.querySelectorAll(".drum")[i].addEventListener("click", function(){ 9 | 10 | var buttonInnerHTML = this.innerHTML; 11 | 12 | makeSound(buttonInnerHTML); 13 | makeAnimation(buttonInnerHTML); 14 | 15 | }); 16 | 17 | } 18 | 19 | //Detecting Keyboard Press 20 | 21 | document.addEventListener('keydown',function(event){ 22 | 23 | makeSound(event.key); 24 | makeAnimation(event.key); 25 | 26 | }); 27 | 28 | function makeSound(key){ 29 | 30 | switch (key) { 31 | case "w": 32 | var tom1 = new Audio('sounds/tom-1.mp3'); 33 | tom1.play(); 34 | break; 35 | 36 | case "a": 37 | var tom2 = new Audio('sounds/tom-2.mp3'); 38 | tom2.play(); 39 | break; 40 | 41 | case "s": 42 | var tom3 = new Audio('sounds/tom-3.mp3'); 43 | tom3.play(); 44 | break; 45 | 46 | case "d": 47 | var tom4 = new Audio('sounds/tom-4.mp3'); 48 | tom4.play(); 49 | break; 50 | 51 | case "j": 52 | var crash = new Audio('sounds/crash.mp3'); 53 | crash.play(); 54 | break; 55 | 56 | case "k": 57 | var kick = new Audio('sounds/kick-bass.mp3'); 58 | kick.play(); 59 | break; 60 | 61 | case "l": 62 | var snare = new Audio('sounds/snare.mp3'); 63 | snare.play(); 64 | break; 65 | 66 | default: console.log(); 67 | 68 | } 69 | 70 | } 71 | 72 | function makeAnimation(currentKey){ 73 | 74 | var activeButton=document.querySelector("."+currentKey); 75 | activeButton.classList.add("pressed"); 76 | setTimeout(function(){ 77 | activeButton.classList.remove("pressed"); 78 | },100); 79 | } 80 | -------------------------------------------------------------------------------- /Drum-Kit/sounds/crash.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Drum-Kit/sounds/crash.mp3 -------------------------------------------------------------------------------- /Drum-Kit/sounds/kick-bass.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Drum-Kit/sounds/kick-bass.mp3 -------------------------------------------------------------------------------- /Drum-Kit/sounds/snare.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Drum-Kit/sounds/snare.mp3 -------------------------------------------------------------------------------- /Drum-Kit/sounds/tom-1.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Drum-Kit/sounds/tom-1.mp3 -------------------------------------------------------------------------------- /Drum-Kit/sounds/tom-2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Drum-Kit/sounds/tom-2.mp3 -------------------------------------------------------------------------------- /Drum-Kit/sounds/tom-3.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Drum-Kit/sounds/tom-3.mp3 -------------------------------------------------------------------------------- /Drum-Kit/sounds/tom-4.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Drum-Kit/sounds/tom-4.mp3 -------------------------------------------------------------------------------- /Drum-Kit/styles.css: -------------------------------------------------------------------------------- 1 | body { 2 | text-align: center; 3 | background-color: #283149; 4 | } 5 | 6 | h1 { 7 | font-size: 5rem; 8 | color: #DBEDF3; 9 | font-family: "Arvo", cursive; 10 | text-shadow: 3px 0 #DA0463; 11 | 12 | } 13 | 14 | footer { 15 | color: #DBEDF3; 16 | font-family: sans-serif; 17 | } 18 | 19 | .w { 20 | background-image: url('images/tom1.png'); 21 | } 22 | 23 | .a { 24 | background-image: url('images/tom2.png'); 25 | 26 | } 27 | 28 | .s { 29 | background-image: url('images/tom3.png'); 30 | } 31 | 32 | .d { 33 | background-image: url('images/tom4.png'); 34 | } 35 | 36 | .j { 37 | background-image: url('images/crash.png'); 38 | } 39 | 40 | .k { 41 | background-image: url('images/snare.png'); 42 | } 43 | 44 | .l { 45 | background-image: url('images/kick.png'); 46 | } 47 | 48 | .set { 49 | margin: 10% auto; 50 | } 51 | 52 | .game-over { 53 | background-color: red; 54 | opacity: 0.8; 55 | } 56 | 57 | .pressed { 58 | box-shadow: 0 3px 4px 0 #DBEDF3; 59 | opacity: 0.5; 60 | } 61 | 62 | .red { 63 | color: red; 64 | } 65 | 66 | .drum { 67 | outline: none; 68 | border: 10px solid #404B69; 69 | font-size: 5rem; 70 | font-family: 'Arvo', cursive; 71 | line-height: 2; 72 | font-weight: 900; 73 | color: #DA0463; 74 | text-shadow: 3px 0 #DBEDF3; 75 | border-radius: 15px; 76 | display: inline-block; 77 | width: 150px; 78 | height: 150px; 79 | text-align: center; 80 | margin: 10px; 81 | background-color: white; 82 | } 83 | -------------------------------------------------------------------------------- /FullStack.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/FullStack.jpg -------------------------------------------------------------------------------- /HTML-PersonalSite/contact.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Deepa's Contact 7 | 8 | 9 | 10 |

My Contact info

11 | 15 |
16 |
17 | 18 |
19 | 20 |
21 |
22 |
23 | 24 |
25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /HTML-PersonalSite/css/styles.css: -------------------------------------------------------------------------------- 1 | body{ 2 | background-color: #e3fdfd; 3 | } 4 | 5 | h1{ 6 | color:#66BFBF; 7 | } 8 | 9 | h3{ 10 | color:#66BFBF; 11 | } 12 | 13 | hr{ 14 | background-color:white; 15 | border-style: none; 16 | border-top:dotted; 17 | border-color: grey; 18 | border-width: 5px; 19 | width: 5%; 20 | } 21 | 22 | -------------------------------------------------------------------------------- /HTML-PersonalSite/hobbies.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | My Hobbies 5 | 6 | 7 | 8 |

Hobbies

9 |
    10 |
  1. Painting
  2. 11 |
  3. Biking
  4. 12 |
  5. Scrap book
  6. 13 |
14 | 15 | 16 | -------------------------------------------------------------------------------- /HTML-PersonalSite/img/AdobeBadge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/HTML-PersonalSite/img/AdobeBadge.png -------------------------------------------------------------------------------- /HTML-PersonalSite/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ↁ🎯Deepa's Website 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |

Deepa Subramanian

17 | 18 |

Software QE Developer at Adobe

19 |

Software test professional who lives in the Bay Area. Extensive experience in mobile, desktop and web applications, embedded software system and Operating systems such as Android TV, iOS and Windows. I love ❤️ coffee and my birthday is on National Cappuccino day! 20 |

21 |
22 |

Certification and Skills

23 | 37 |

Work Experience

38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 |
DatesWork
2019-Present Quality Engineer Developer
2018-2019Quality Engineer
2016-2018Mobile Test Engineer
60 |
61 |

Skills

62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 |
HTML5 ⭐️⭐️⭐️⭐️⭐️CSS3 ⭐️⭐️⭐️⭐️
JavaScript ⭐️⭐️⭐️Bootstrap 4 ⭐️⭐️
78 |
79 | My Hobbies 80 | Contact 81 | 82 | 83 | -------------------------------------------------------------------------------- /Newsletter-signup/Procfile: -------------------------------------------------------------------------------- 1 | web: node app.js 2 | -------------------------------------------------------------------------------- /Newsletter-signup/app.js: -------------------------------------------------------------------------------- 1 | //*jshint esversion: 6 */ 2 | 3 | // ----------required packages---------// 4 | const express = require("express"); 5 | const request = require("request"); 6 | const bodyParser = require("body-parser"); 7 | const https = require("https"); 8 | 9 | // new instance of express 10 | const app = express(); 11 | 12 | //mailChimp api key 13 | //api key 14 | //Mailchimp list id 15 | 16 | //app.use 17 | app.use(express.static("public")); 18 | app.use(bodyParser.urlencoded({extended:true})); 19 | 20 | app.get("/", function(req,res){ 21 | res.sendFile(__dirname +"/signup.html"); 22 | }); 23 | 24 | app.post("/", function(req,res){ 25 | const firstName = req.body.fName; 26 | const lastName = req.body.lName; 27 | const email = req.body.email; 28 | const data = { 29 | //the members, status,merge_fields ---comes from mailChimp api 30 | 'members':[ 31 | { 32 | email_address:email, 33 | status:"subscribed", 34 | merge_fields:{ 35 | FNAME:firstName, 36 | LNAME:lastName 37 | } 38 | } 39 | ], 40 | } 41 | var jsonData = JSON.stringify(data) 42 | 43 | console.log(firstName, lastName, email); 44 | 45 | // NOTE: The API KEY BELOW HAS BEEN DISABLED ON MAILCHIMP 46 | // AS THIS CODE WILL BE PUSHED TO PUBLIC GITHUB 47 | 48 | var jsonData = JSON.stringify(data); 49 | const url = "https://us2.api.mailchimp.com/3.0/lists/abacdefghijk"; 50 | 51 | const options = { 52 | method:"POST", 53 | auth:"" 54 | } 55 | 56 | const request = https.request(url, options, function(response){ 57 | if (response.statusCode === 200){ 58 | res.sendFile(__dirname + "/success.html"); 59 | }else { 60 | res.sendFile(__dirname + "/failure.html"); 61 | } 62 | 63 | response.on("data",function(data){ 64 | console.log(JSON.parse(data)); 65 | }) 66 | }) 67 | 68 | request.write(jsonData); 69 | request.end(); 70 | }); 71 | 72 | 73 | app.post("/failure", function (req, res){ 74 | res.redirect("/"); 75 | }); 76 | 77 | //to test the app locally in port 3000 78 | // app.listen(process.env.PORT || 3000, function(){ 79 | app.listen(process.env.PORT || 3000, function(){ 80 | console.log("Server is running in port 3000") 81 | }); 82 | -------------------------------------------------------------------------------- /Newsletter-signup/failure.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Failure 6 | 7 | 8 | 9 | 10 |
11 |
12 |

Uh oh!

13 |

There was a problem signing up. Please try again.

14 |
15 | 16 |
17 | 18 |
19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /Newsletter-signup/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "newsletter-signup", 3 | "version": "1.0.0", 4 | "description": "Newsletter project", 5 | "main": "app.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [ 10 | "Newsletter", 11 | "signup" 12 | ], 13 | "author": "Deepa Subramanian", 14 | "license": "ISC", 15 | "dependencies": { 16 | "body-parser": "^1.19.0", 17 | "express": "^4.17.1", 18 | "request": "^2.88.2" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Newsletter-signup/public/css/styles.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | height: 100%; 4 | } 5 | 6 | body { 7 | display: -ms-flexbox; 8 | display: flex; 9 | -ms-flex-align: center; 10 | align-items: center; 11 | padding-top: 40px; 12 | padding-bottom: 40px; 13 | background-color: #f5f5f5; 14 | } 15 | 16 | .form-signin { 17 | width: 100%; 18 | max-width: 330px; 19 | padding: 15px; 20 | margin: auto; 21 | } 22 | .form-signin .checkbox { 23 | font-weight: 400; 24 | } 25 | .form-signin .form-control { 26 | position: relative; 27 | box-sizing: border-box; 28 | height: auto; 29 | padding: 10px; 30 | font-size: 16px; 31 | } 32 | .form-signin .form-control:focus { 33 | z-index: 2; 34 | } 35 | .top { 36 | margin-bottom: -1px; 37 | border-bottom-right-radius: 0; 38 | border-bottom-left-radius: 0; 39 | } 40 | 41 | .middle{ 42 | border-radius: 0; 43 | margin-bottom: -1px; 44 | } 45 | .bottom { 46 | margin-bottom: 10px; 47 | border-top-left-radius: 0; 48 | border-top-right-radius: 0; 49 | } 50 | -------------------------------------------------------------------------------- /Newsletter-signup/public/images/newsletter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Newsletter-signup/public/images/newsletter.png -------------------------------------------------------------------------------- /Newsletter-signup/signup.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Newsletter Signup 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /Newsletter-signup/success.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Success 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |

Brilliant!

14 |

You have been sucessfully signed up for the newsletter.

15 |
16 |
17 | 18 | 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # The complete web development bootcamp 2 | 3 | ![Alt text](FullStack.jpg?raw=true "certificate") 4 | 5 | ## Resources 6 | 7 | https://www.appbrewery.co/p/web-development-course-resources 8 | 9 | ## Projects 10 | 11 | - Project 1 : Using HTML created personal site - https://sdkdeepa.github.io/resume/ 12 | 13 | - Project 2 : Intro to CSS - https://sdkdeepa.github.io/profile/ 14 | 15 | - Project 2 final : HTML, CSS and Bootstrap - https://sdkdeepa.github.io/udemy-bootstrap/ 16 | 17 | - Project 3 : Dice game - JS and DOM methods - https://sdkdeepa.github.io/dice 18 | 19 | - Project 4 : Drum kit - JS Keyboard events - https://sdkdeepa.github.io/drumming/ 20 | 21 | - Project 5 : Simon Game - JS and jQuery - https://sdkdeepa.github.io/Simon-Game-Jquery/ 22 | 23 | - Project 6: BMI Calculator - Node.js and Express.js. This project using API methods such as GET and POST to calculate the BMI 24 | 25 |

26 | 27 |

28 | 29 | --- 30 | 31 | - Project 7: Weather App - Node.js and Express.js. This project uses external weather API to make GET call to get the weather data after a POST request is sent. 32 | 33 |

34 | 35 |

36 | 37 | - Project 8: Newsletter Sign up - Html, CSS, Bootstrap, JS, Nodejs, express,API, NPM, Nodemon, body-parser etc - https://shrouded-river-17694.herokuapp.com/ 38 | 39 | - Project 9 and 10: Todo List app - Continuation of Todo list app v2. Added get, post and delete routes. You can now create and delete todo list for today and for custom list. Custom list can be added to the home route (ex: /work). Using MongoDB Altas cloud database the data is collected. Hosted application through Heroku. 40 | Check out: https://tranquil-earth-77166.herokuapp.com/ 41 | 42 | - Project 11: Multipage Personal Blog Website - Created a multi page personal blog application using HTML, CSS, Bootstrap, JS, Node.js, Express.js, body-parser, API, EJS, Heroku, Mongoose, MogoDB Altas cloud cluster. Checkout: https://morning-brook-32061.herokuapp.com/ 43 | 44 | ### Example of wireframing a project 45 | 46 | - Project 2. wireframing TinDog.png 47 | 48 | ## Topics covered 49 | 50 | HTML, CSS, JavaScript, Bootstrap 4, DOM & DOM Manipulation, jQuery, Node.js, Express, React EJS, body-parser, nodemon, lodash, MongoDB, MongoDB Atlas, 51 | mongoose, mongoose-encryption, dotenv, md5, bcrypt, passport, passport-local, passport-local-mongoose, passport-google-path20, mongoose-findorcreate, express-session, API, JSON, Authentication, Mailchimp API, Build REST API from scratch, Heroku. 52 | 53 | ### Section 9: Introduction to JavaScript ES6 54 | 55 | - 116-117: Challenge: Changing Casing in Text 56 | - 118: Basic Arithmetic and Modulo Operator in Javascript 57 | - 121-122: Functions Part 1: Challenge - The Karel Robot 58 | - 124: Functions Part 2: Parameters and Arguments 59 | 60 | #### Section 10: Intermediate JavaScript 61 | 62 | - 131: Random Number Generation in Javascript: Building a Love Calculator 63 | - 132: Control Statements: Using If-Else Conditionals & Logic 64 | - Coding Exercise 5: BMI Calculator Advanced (IF/ELSE) 65 | - Coding Exercise 6: Leap Year 66 | - 138: Adding Elements and Intermediate Array Techniques 67 | 68 | ### Section 12: Boss Level Challenge 1 - The Dicee Game 69 | 70 | - Create an External JS File 71 | - Add Dice Images 72 | - Create a Random Number 73 | - Change both img to a Random Dice 74 | - Change both img Elements 75 | - Change the Title to Display a Winner 76 | 77 | ### Section 13: Advanced JavaScript and DOM Manipulation 78 | 79 | - 172: Higher Order Function Challenge 80 | 81 | ### Section 14: Drum Kit 82 | 83 | - 171: Adding Event Listners to a Button 84 | - 174: How to Play Sounds on a Website 85 | - 176: How to Use Switch Statements in JavaScript 86 | - 179: Using Keyboard Event Listeners to Check for Key Presses 87 | - 181: Adding Animation to Websites 88 | 89 | ### Section 15: Boss Level Challenge 2 - The Simon Game 90 | 91 | - Add JS and jQuery 92 | - Create a New Pattern 93 | - Show the Sequence to the User with Animations and Sounds 94 | - Check Which Button is Pressed 95 | - Add Sounds to Button Clicks 96 | - Add Animations to User Clicks 97 | - Start the Game 98 | - Check the User's Answer Against the Game Sequence 99 | - Game Over 100 | - Restart the Game 101 | 102 | ### Section 19: Express.js with Node.js 103 | 104 | - 241: Creating Our First Server with Express 105 | - 242: Handling Requests and Responses: the GET Request 106 | - 244: Understanding and Working with Routes 107 | - 246: Calculator Challenge Setup 108 | - 248: Responding to Requests with HTML Files 109 | - 249: Processing Post Requests with Body Parser 110 | - 250: BMI Routing Challenge 111 | 112 | ### Section 20: APIs - Application Programming Interfaces 113 | 114 | - 258: Making GET Requests with the Node HTTPS Module 115 | - 259: How to Parse JSON 116 | - 260: Using Express to Render a Website with Live API Data 117 | - 261: Using Body Parser to Parse POST Requests to the Server 118 | Project: Weather Project 119 | 120 | ### Section 21: Newsletter Signup 121 | 122 | - 263: Setting up the Sign Up Page 123 | - 264: Posting Data to Mailchimp's Servers via their API 124 | - 265: Adding Success and Failure Pages 125 | - 266: Deploying Your Server with Heroku 126 | 127 | Project: https://shrouded-river-17694.herokuapp.com/ 128 | 129 | ### Section 22: EJS 130 | 131 | - 282: Templates? Why Do We Need Templates? 132 | - 283: Creating Your First EJS Template 133 | - 284: Running Code Inside the EJS Template 134 | - 285: Passing Data from Your Webpage to Your Server 135 | - 287: Adding Pre-Made CSS Stylesheets to Your Website 136 | - 288: Understanding Templating vs Layouts 137 | - 289: Understanding Node Module Exports: How to Pass Functions and Data between Files 138 | 139 | ### Section 23: Boss Level Challenge 3 - Blog Website 140 | 141 | - Get Home route and add content to home.ejs 142 | - Pass data from homeStartingContent to home.ejs 143 | - Add header and footer partials to home.ejs 144 | - Moved header and footer to partials folder 145 | - Add About and Contact routes, pass content to about and contact.ejs 146 | - Add nav href to header 147 | - Add compose form and POST route 148 | - Add text fields to compose form and use bootstrap 149 | - Create JS object for post 150 | - Push post into posts array 151 | - Add posts to render array 152 | - Loop through all posts 153 | - Refactor for loop to use forEach 154 | - Render each post onto Home 155 | - Add express routing parameters /posts/:blogPost 156 | - Loop through posts array to check if it matches title in url 157 | - Add lodash and use \_.lowerCase on titles 158 | - Separate page for each blog post 159 | - Truncate post body on Home page to 100 characters 160 | - Add Read More to posts 161 | 162 | ### Section 27: Mongoose 163 | 164 | - 357: Introduction to Mongoose 165 | - 358: Reading from Your Database with Mongoose 166 | - 359: Data Validation with Mongoose 167 | - 360: Updating and Deleting Data Using Mongoose 168 | - 361: Establishing Relationships and Embedding Documents using Mongoose 169 | 170 | ### Section 28: Putting Everything Together 171 | 172 | - 364: Take ToDoList Project to the Next Level and Connect it with Mongoose 173 | - 365: Rendering Database Items into the ToDoList App 174 | - 366: Adding New Items to our ToDoList Database 175 | - 367: Deleting Items from our ToDoList Database 176 | - 368: Creating Custom Lists using Express Route Parameters 177 | - 369: Adding New Items to the Custom ToDoLists 178 | - 370: Revisiting Lodash and Deleting Items from Custom ToDo Lists 179 | 180 | ### Section 29 - Deploying Your Web Application 181 | 182 | - 374: How to Deploy Web Apps with a Database 183 | - 374: How to Setup MongoDB Atlas 184 | - 375: Deploying An App with a Database to Heroku 185 | 186 | Folder: Project 9 and 10: Todo List 187 | https://tranquil-earth-77166.herokuapp.com/ 188 | 189 | ### Section 30 - Boss Level Challenge 4 - Blog Website Upgrade 190 | 191 | - 381: Save Composed Posts with MongoDB 192 | - 382: Get Home Page to Render the Posts 193 | - 383: Redirect to Home Page after save() is completed with no errors 194 | - 384: Render correct blog post based on post \_id 195 | 196 | Folder: Project 11: Blog website completed 197 | https://morning-brook-32061.herokuapp.com/ 198 | 199 | ### Section 31 - Build Your Own RESTful API From Scratch 200 | 201 | - 389: Set Up Server Challenge 202 | - 391: GET All Articles 203 | - 392: POST a New Article 204 | - 393: Delete All Articles 205 | - 394: Chained Route Handlers Using Express 206 | - 395: GET a Specific Article 207 | - 396: PUT a Specific Article 208 | - 397: PATCH a Specific Article 209 | - 398: DELETE a Specific Article 210 | 211 | Folder: Wiki-API 212 | 213 | ## Section 32 - Authentication & Security 214 | 215 | - 403: Getting Set Up 216 | - 404: Level 1 - Register Users with Username and Password 217 | - 406: Level 2 - Database Encryption 218 | - 407: Using Environment Variables to Keep Secrets Safe 219 | - 408: Level 3 - Hashing Passwords 220 | - 410: Level 4 - Salting and Hashing Passwords with bcrypt 221 | - 412: Level 5 - Using Passport.js to Add Cookies and Sessions 222 | - 413a: Level 6 - OAuth 2.0 & How to Implement Sign In with Google 223 | - 413b: Level 6 - OAuth 2.0 with Facebook 224 | - 414: Letting Users Submit Secrets 225 | 226 | Folder: Secrets 227 | 228 | ### Section 33 - React.js 229 | 230 | - 422: JSX Code Practice 231 | - 423: JavaScript Expressions in JSX & ES6 Template Literals 232 | - 424: JavaScript Expressions in JSX Practice 233 | - 425: Attributes and Styling React Elements 234 | - 426: Inline Styling for React Elements 235 | - 427: React Styling Practice 236 | - 428: React Components 237 | - 429: React Components Practice 238 | - 431: JavaScript ES6 Import, Export and Modules Practice 239 | - 434: Keeper App Project - Part 1 240 | - 436: React Props 241 | - 437: React Props Practice 242 | - 438: React DevTools - https://990sq.csb.app/ 243 | - 439: Mapping Data to Components - https://0lrqy.csb.app/ 244 | - 440: Mapping Data to Components Practice - https://1kzup.csb.app/ 245 | - 441: JavaScript ES6 Map/Filter/Reduce 246 | - 442: JavaScript ES6 Arrow functions 247 | - 443: Keeper App Project - Part 2 248 | - 444: React Conditional Rendering with the Ternary Operator & AND Operator 249 | - 445: Conditional Rendering Practice - https://pr7ow.csb.app/ 250 | - 447: React Hooks - useState 251 | - 448: useState Hook Practice 252 | - 449: JavaScript ES6 Object & Array Destructuring 253 | - 450: JavaScript ES6 Destructuring Challenge 254 | - 451: Event Handling in React 255 | - 452: React Forms 256 | - 454: Changing Complex State 257 | - 455: Changing Complex State Practice 258 | - 456: JavaScript ES6 Spread Operator 259 | - 457: JavaScript ES6 Spread Operator Practice 260 | - 458: Managing a Component Tree 261 | - 459: Managing a Component Tree Practice 262 | - 460: Keeper App Project - Part 3 263 | - 461: React Dependencies & Styling the Keeper App - https://pbt9b.csb.app/ 264 | 265 | ### Tools used 266 | 267 | - codepen 268 | - Atom 269 | - Postman 270 | - Hyper terminal 271 | - Visual Studio Code 272 | - https://codesandbox.io/ 273 | -------------------------------------------------------------------------------- /Simon-Game-Challenge/game.js: -------------------------------------------------------------------------------- 1 | 2 | var buttonColours = ["red", "blue", "green", "yellow"]; 3 | var gamePattern = []; 4 | var userClickedPattern = []; 5 | var started = false; 6 | var level = 0; 7 | 8 | $(document).keypress(function() { 9 | if (!started) { 10 | $("#level-title").text("Level " + level); 11 | nextSequence(); 12 | started = true; 13 | }else { 14 | startOver(); 15 | } 16 | }); 17 | 18 | $(".btn").click(function() { 19 | var userChosenColour = $(this).attr("id"); 20 | userClickedPattern.push(userChosenColour); 21 | playSound(userChosenColour); 22 | animatePress(userChosenColour); 23 | checkAnswer(userClickedPattern.length-1); 24 | }); 25 | 26 | function checkAnswer(currentLevel) { 27 | 28 | if (gamePattern[currentLevel] === userClickedPattern[currentLevel]) { 29 | console.log("Correct"); 30 | if (userClickedPattern.length === gamePattern.length){ 31 | setTimeout(function () { 32 | nextSequence(); 33 | }, 1000); 34 | } 35 | } else { 36 | playSound("wrong"); 37 | playSound("wrong"); 38 | $("body").addClass("game-over"); 39 | setTimeout(function () { 40 | $("body").removeClass("game-over"); 41 | }, 200); 42 | $("#level-title").text("Game Over, Press Any Key to Restart"); 43 | } 44 | } 45 | 46 | 47 | function nextSequence() { 48 | userClickedPattern = []; 49 | level++; 50 | $("#level-title").text("Level " + level); 51 | var randomNumber = Math.floor(Math.random() * 4); 52 | var randomChosenColour = buttonColours[randomNumber]; 53 | gamePattern.push(randomChosenColour); 54 | 55 | $("#" + randomChosenColour).fadeIn(100).fadeOut(100).fadeIn(100); 56 | playSound(randomChosenColour); 57 | } 58 | 59 | function animatePress(currentColor) { 60 | $("#" + currentColor).addClass("pressed"); 61 | setTimeout(function () { 62 | $("#" + currentColor).removeClass("pressed"); 63 | }, 100); 64 | } 65 | 66 | function playSound(name) { 67 | var audio = new Audio("sounds/" + name + ".mp3"); 68 | audio.play(); 69 | } 70 | 71 | function startOver() { 72 | console.log("starting Over"); 73 | level = 0; 74 | gamePattern = []; 75 | started = false; 76 | $("#level-title").text("Level 0"); 77 | nextSequence(); 78 | } 79 | -------------------------------------------------------------------------------- /Simon-Game-Challenge/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Simon 7 | 8 | 9 | 10 | 11 | 12 |

Press A Key to Start

13 |
14 |
15 | 16 |
17 | 18 |
19 | 20 |
21 | 22 |
23 |
24 | 25 |
26 | 27 |
28 | 29 |
30 |
31 | 32 |
33 | 34 |
35 | 36 |
37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /Simon-Game-Challenge/sounds/blue.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Simon-Game-Challenge/sounds/blue.mp3 -------------------------------------------------------------------------------- /Simon-Game-Challenge/sounds/green.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Simon-Game-Challenge/sounds/green.mp3 -------------------------------------------------------------------------------- /Simon-Game-Challenge/sounds/red.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Simon-Game-Challenge/sounds/red.mp3 -------------------------------------------------------------------------------- /Simon-Game-Challenge/sounds/wrong.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Simon-Game-Challenge/sounds/wrong.mp3 -------------------------------------------------------------------------------- /Simon-Game-Challenge/sounds/yellow.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Simon-Game-Challenge/sounds/yellow.mp3 -------------------------------------------------------------------------------- /Simon-Game-Challenge/styles.css: -------------------------------------------------------------------------------- 1 | body { 2 | text-align: center; 3 | background-color: #011F3F; 4 | } 5 | 6 | #level-title { 7 | font-family: 'Roboto', sans-serif; 8 | font-size: 3rem; 9 | margin: 5%; 10 | color: #FEF2BF; 11 | } 12 | 13 | .container { 14 | display: block; 15 | width: 50%; 16 | margin: auto; 17 | 18 | } 19 | 20 | .btn { 21 | margin: 25px; 22 | display: inline-block; 23 | height: 200px; 24 | width: 200px; 25 | border: 10px solid black; 26 | border-radius: 20%; 27 | } 28 | 29 | .game-over { 30 | background-color: red; 31 | opacity: 0.8; 32 | } 33 | 34 | .red { 35 | background-color: red; 36 | } 37 | 38 | .green { 39 | background-color: green; 40 | } 41 | 42 | .blue { 43 | background-color: blue; 44 | } 45 | 46 | .yellow { 47 | background-color: yellow; 48 | } 49 | 50 | .pressed { 51 | box-shadow: 0 0 20px white; 52 | background-color: grey; 53 | } 54 | -------------------------------------------------------------------------------- /TinDog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/TinDog.png -------------------------------------------------------------------------------- /Udemy-TinDog/README.md: -------------------------------------------------------------------------------- 1 | TinDog Starting Files 2 | -------------------------------------------------------------------------------- /Udemy-TinDog/css/styles.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: "Montserrat"; 3 | text-align: center; 4 | } 5 | 6 | h1, h2, h3, h4, h5, h6 { 7 | font-family: "Montserrat"; 8 | font-weight: 800; 9 | } 10 | 11 | p { 12 | color: #8f8f8f; 13 | } 14 | 15 | a { 16 | color: black; 17 | } 18 | 19 | /* Heading */ 20 | .big-heading { 21 | font-family: "Montserrat"; 22 | font-size: 3rem; 23 | line-height: 1.5; 24 | } 25 | 26 | .section-heading { 27 | font-size: 2.5rem; 28 | line-height: 1.5; 29 | } 30 | 31 | /*Containers*/ 32 | .container-fluid { 33 | padding: 7% 15%; 34 | } 35 | 36 | /*Page Section*/ 37 | .colored-section { 38 | background-color: #ff4c68; 39 | color: #fff; 40 | } 41 | 42 | .white-section { 43 | background-color: #fff; 44 | } 45 | 46 | /* Navigation bar */ 47 | .navbar { 48 | padding: 0 0 4.5rem; 49 | } 50 | 51 | .navbar-brand { 52 | font-family: "Ubuntu"; 53 | font-size: 3.5rem; 54 | font-weight: bold; 55 | } 56 | 57 | .nav-item { 58 | padding: 0 18px; 59 | } 60 | 61 | .nav-links { 62 | font-size: 1.2rem; 63 | font-family: "Monserrat light"; 64 | } 65 | 66 | /* Download buttons */ 67 | .download-button { 68 | margin: 5% 3% 5% 0; 69 | } 70 | 71 | /*Title section*/ 72 | #title { 73 | background-color: #ff4c68; 74 | color: white; 75 | text-align: left; 76 | } 77 | 78 | #title .container-fluid { 79 | padding: 3% 15% 7%; 80 | } 81 | 82 | /* Title Image */ 83 | .rotate-15 { 84 | width: 50%; 85 | transform: rotate(15deg); 86 | position: absolute; 87 | right: 20%; 88 | } 89 | 90 | /* Features section */ 91 | #features { 92 | position: relative; 93 | } 94 | .feature-title { 95 | font-size: 1.25rem; 96 | } 97 | 98 | .feature-box { 99 | padding: 4.5%; 100 | } 101 | 102 | .icon { 103 | color: #ef8172; 104 | margin-bottom: 1rem; 105 | } 106 | 107 | .icon:hover { 108 | color: #ff4c68; 109 | } 110 | 111 | /* Testimonials Section */ 112 | #testimonials { 113 | background-color: #ef8172; 114 | } 115 | 116 | .testimonial-text { 117 | font-size: 3rem; 118 | line-height: 1.5; 119 | } 120 | 121 | .testimonial-image { 122 | width: 10%; 123 | border-radius: 100%; 124 | margin: 20px; 125 | } 126 | 127 | .carousel-item { 128 | padding: 7% 15%; 129 | } 130 | 131 | #press { 132 | background-color: #ef8172; 133 | padding-bottom: 3%; 134 | } 135 | 136 | .press-logo { 137 | width: 15%; 138 | margin: 20px 20px 50px; 139 | } 140 | 141 | /* Pricing section */ 142 | #pricing { 143 | padding: 100px; 144 | } 145 | 146 | .price-text { 147 | font-size: 3rem; 148 | line-height: 1.5; 149 | } 150 | 151 | .pricing-column { 152 | padding: 3% 2%; 153 | } 154 | 155 | /* CTA section - styled with other css*/ 156 | 157 | /* Footer Section*/ 158 | .social-icon { 159 | color: black; 160 | margin: 20px 10px; 161 | } 162 | 163 | .copyright { 164 | font-size: x-small; 165 | color: #8f8f8f; 166 | } 167 | 168 | /* Adding Media Query for responsive site for tablet and mobile view */ 169 | @media (max-width: 1028px) { 170 | #title { 171 | text-align: center; 172 | } 173 | .rotate-15 { 174 | position: static; 175 | transform: rotate(0); 176 | } 177 | } 178 | -------------------------------------------------------------------------------- /Udemy-TinDog/images/bizinsider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Udemy-TinDog/images/bizinsider.png -------------------------------------------------------------------------------- /Udemy-TinDog/images/dog-img.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Udemy-TinDog/images/dog-img.jpg -------------------------------------------------------------------------------- /Udemy-TinDog/images/iphone6-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Udemy-TinDog/images/iphone6-1.png -------------------------------------------------------------------------------- /Udemy-TinDog/images/iphone6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Udemy-TinDog/images/iphone6.png -------------------------------------------------------------------------------- /Udemy-TinDog/images/lady-img.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Udemy-TinDog/images/lady-img.jpg -------------------------------------------------------------------------------- /Udemy-TinDog/images/mashable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Udemy-TinDog/images/mashable.png -------------------------------------------------------------------------------- /Udemy-TinDog/images/techcrunch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Udemy-TinDog/images/techcrunch.png -------------------------------------------------------------------------------- /Udemy-TinDog/images/tnw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Udemy-TinDog/images/tnw.png -------------------------------------------------------------------------------- /Udemy-TinDog/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | TinDog 6 | 7 | 13 | 14 | 15 | 16 | 20 | 21 | 22 | 26 | 27 | 28 | 33 | 38 | 43 | 44 | 45 | 46 |
47 |
48 | 49 | 78 | 79 | 80 | 81 |
82 |
83 |

Meet new and interesting dogs nearby.

84 | 87 | 88 | 94 |
95 | 96 |
97 | iphone-mockup 102 |
103 |
104 |
105 | 106 |
107 | 108 | 109 | 110 |
111 | 112 |
113 | 114 |
115 |
116 | 117 | 118 |

Easy to use

119 |

So easy to use, even your dog could do it.

120 |
121 | 122 |
123 | 124 | 125 |

Elite Clientele

126 |

We have all the dogs, the greatest dogs.

127 |
128 | 129 |
130 | 131 | 132 |

Guaranteed to work

133 |

Find the love of your dog's life or your money back.

134 |
135 |
136 | 137 |
138 |
139 | 140 | 141 | 142 |
143 | 197 |
198 | 199 | 200 | 201 |
202 | 203 | 204 | 209 | 210 |
211 | 212 | 213 | 214 |
215 | 216 |

A Plan for Every Dog's Needs

217 |

Simple and affordable price plans for your and your dog.

218 | 219 |
220 | 221 |
222 |
223 |
224 |

Chihuahua

225 |
226 |
227 |

Free

228 |

5 Matches Per Day

229 |

10 Messages Per Day

230 | 236 |
237 |
238 |
239 | 240 |
241 |
242 |
243 |

Labrador

244 |
245 |
246 |

$49 / mo

247 |

Unlimited Matches

248 |

Unlimited Messages

249 | 252 |
253 |
254 |
255 | 256 |
257 |
258 |
259 |

Mastiff

260 |
261 | 262 |
263 |

$99 / mo

264 |

Pirority and Unlimited Matches

265 |

Unlimited Messages

266 | 269 |
270 |
271 |
272 |
273 |
274 | 275 | 276 | 277 |
278 |
279 | 280 |

Find the True Love of Your Dog's Life Today.

281 | 284 | 290 |
291 |
292 | 293 | 294 | 295 |
296 |
297 | 300 | 303 | 306 | 309 | 310 |
311 |
312 | 313 | 314 | 315 | -------------------------------------------------------------------------------- /WeatherApp.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/WeatherApp.gif -------------------------------------------------------------------------------- /WeatherProject/app.js: -------------------------------------------------------------------------------- 1 | /*jshint esversion: 6 */ 2 | const express = require("express"); 3 | const https = require("https"); 4 | const bodyParser = require("body-parser"); 5 | const app = express(); 6 | //to parser the post request using body-parser package 7 | app.use(bodyParser.urlencoded({extended:true})); 8 | 9 | //app get request 10 | app.get("/", function(req,res){ 11 | res.sendFile(__dirname+ "/index.html") 12 | }); 13 | //app post request 14 | app.post("/",function(req, res){ 15 | const query =req.body.cityName; 16 | const apiKey =" "; 17 | const unit = "metric"; 18 | const url = "https://api.openweathermap.org/data/2.5/weather?q="+query+"&appid=" +apiKey+ "&units="+unit; 19 | 20 | https.get(url, function(response){ 21 | console.log(response.statusCode); 22 | 23 | response.on("data", function(data){ 24 | const weatherData = JSON.parse(data); 25 | const temp = weatherData.main.temp; 26 | const weatherDescription= weatherData.weather[0].description; 27 | const icon = weatherData.weather[0].icon; 28 | const iconURL = "http://openweathermap.org/img/wn/" +icon+ "@2x.png" 29 | res.write("

The weather is currently "+ weatherDescription + "

"); 30 | //we can write res.write as we cannot write res.send again 31 | res.write("

The current temperature in " + query+ " is "+temp+ " degree Celcius.

"); 32 | res.write(""); 33 | res.send(); 34 | // there can be only one res. send for any app.get method 35 | }) 36 | 37 | }) 38 | // res.send("Server is running"); 39 | }) 40 | app.listen(3000, function(){ 41 | console.log("Server is running on port 3000"); 42 | }) 43 | -------------------------------------------------------------------------------- /WeatherProject/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Weathe App 6 | 7 | 8 |
9 | 10 | 11 | 12 |
13 | 14 | -------------------------------------------------------------------------------- /WeatherProject/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "weatherproject", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "accepts": { 8 | "version": "1.3.7", 9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 10 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 11 | "requires": { 12 | "mime-types": "~2.1.24", 13 | "negotiator": "0.6.2" 14 | } 15 | }, 16 | "array-flatten": { 17 | "version": "1.1.1", 18 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 19 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 20 | }, 21 | "body-parser": { 22 | "version": "1.19.0", 23 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", 24 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", 25 | "requires": { 26 | "bytes": "3.1.0", 27 | "content-type": "~1.0.4", 28 | "debug": "2.6.9", 29 | "depd": "~1.1.2", 30 | "http-errors": "1.7.2", 31 | "iconv-lite": "0.4.24", 32 | "on-finished": "~2.3.0", 33 | "qs": "6.7.0", 34 | "raw-body": "2.4.0", 35 | "type-is": "~1.6.17" 36 | } 37 | }, 38 | "bytes": { 39 | "version": "3.1.0", 40 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 41 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 42 | }, 43 | "content-disposition": { 44 | "version": "0.5.3", 45 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", 46 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", 47 | "requires": { 48 | "safe-buffer": "5.1.2" 49 | } 50 | }, 51 | "content-type": { 52 | "version": "1.0.4", 53 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 54 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 55 | }, 56 | "cookie": { 57 | "version": "0.4.0", 58 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", 59 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" 60 | }, 61 | "cookie-signature": { 62 | "version": "1.0.6", 63 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 64 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 65 | }, 66 | "debug": { 67 | "version": "2.6.9", 68 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 69 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 70 | "requires": { 71 | "ms": "2.0.0" 72 | } 73 | }, 74 | "depd": { 75 | "version": "1.1.2", 76 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 77 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 78 | }, 79 | "destroy": { 80 | "version": "1.0.4", 81 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 82 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 83 | }, 84 | "ee-first": { 85 | "version": "1.1.1", 86 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 87 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 88 | }, 89 | "encodeurl": { 90 | "version": "1.0.2", 91 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 92 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 93 | }, 94 | "escape-html": { 95 | "version": "1.0.3", 96 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 97 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 98 | }, 99 | "etag": { 100 | "version": "1.8.1", 101 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 102 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 103 | }, 104 | "express": { 105 | "version": "4.17.1", 106 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", 107 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", 108 | "requires": { 109 | "accepts": "~1.3.7", 110 | "array-flatten": "1.1.1", 111 | "body-parser": "1.19.0", 112 | "content-disposition": "0.5.3", 113 | "content-type": "~1.0.4", 114 | "cookie": "0.4.0", 115 | "cookie-signature": "1.0.6", 116 | "debug": "2.6.9", 117 | "depd": "~1.1.2", 118 | "encodeurl": "~1.0.2", 119 | "escape-html": "~1.0.3", 120 | "etag": "~1.8.1", 121 | "finalhandler": "~1.1.2", 122 | "fresh": "0.5.2", 123 | "merge-descriptors": "1.0.1", 124 | "methods": "~1.1.2", 125 | "on-finished": "~2.3.0", 126 | "parseurl": "~1.3.3", 127 | "path-to-regexp": "0.1.7", 128 | "proxy-addr": "~2.0.5", 129 | "qs": "6.7.0", 130 | "range-parser": "~1.2.1", 131 | "safe-buffer": "5.1.2", 132 | "send": "0.17.1", 133 | "serve-static": "1.14.1", 134 | "setprototypeof": "1.1.1", 135 | "statuses": "~1.5.0", 136 | "type-is": "~1.6.18", 137 | "utils-merge": "1.0.1", 138 | "vary": "~1.1.2" 139 | } 140 | }, 141 | "finalhandler": { 142 | "version": "1.1.2", 143 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", 144 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 145 | "requires": { 146 | "debug": "2.6.9", 147 | "encodeurl": "~1.0.2", 148 | "escape-html": "~1.0.3", 149 | "on-finished": "~2.3.0", 150 | "parseurl": "~1.3.3", 151 | "statuses": "~1.5.0", 152 | "unpipe": "~1.0.0" 153 | } 154 | }, 155 | "forwarded": { 156 | "version": "0.1.2", 157 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 158 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 159 | }, 160 | "fresh": { 161 | "version": "0.5.2", 162 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 163 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 164 | }, 165 | "http-errors": { 166 | "version": "1.7.2", 167 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 168 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 169 | "requires": { 170 | "depd": "~1.1.2", 171 | "inherits": "2.0.3", 172 | "setprototypeof": "1.1.1", 173 | "statuses": ">= 1.5.0 < 2", 174 | "toidentifier": "1.0.0" 175 | } 176 | }, 177 | "iconv-lite": { 178 | "version": "0.4.24", 179 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 180 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 181 | "requires": { 182 | "safer-buffer": ">= 2.1.2 < 3" 183 | } 184 | }, 185 | "inherits": { 186 | "version": "2.0.3", 187 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 188 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 189 | }, 190 | "ipaddr.js": { 191 | "version": "1.9.1", 192 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 193 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 194 | }, 195 | "media-typer": { 196 | "version": "0.3.0", 197 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 198 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 199 | }, 200 | "merge-descriptors": { 201 | "version": "1.0.1", 202 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 203 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 204 | }, 205 | "methods": { 206 | "version": "1.1.2", 207 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 208 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 209 | }, 210 | "mime": { 211 | "version": "1.6.0", 212 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 213 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 214 | }, 215 | "mime-db": { 216 | "version": "1.44.0", 217 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", 218 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" 219 | }, 220 | "mime-types": { 221 | "version": "2.1.27", 222 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", 223 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", 224 | "requires": { 225 | "mime-db": "1.44.0" 226 | } 227 | }, 228 | "ms": { 229 | "version": "2.0.0", 230 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 231 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 232 | }, 233 | "negotiator": { 234 | "version": "0.6.2", 235 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 236 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 237 | }, 238 | "on-finished": { 239 | "version": "2.3.0", 240 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 241 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 242 | "requires": { 243 | "ee-first": "1.1.1" 244 | } 245 | }, 246 | "parseurl": { 247 | "version": "1.3.3", 248 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 249 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 250 | }, 251 | "path-to-regexp": { 252 | "version": "0.1.7", 253 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 254 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 255 | }, 256 | "proxy-addr": { 257 | "version": "2.0.6", 258 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", 259 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", 260 | "requires": { 261 | "forwarded": "~0.1.2", 262 | "ipaddr.js": "1.9.1" 263 | } 264 | }, 265 | "qs": { 266 | "version": "6.7.0", 267 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", 268 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" 269 | }, 270 | "range-parser": { 271 | "version": "1.2.1", 272 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 273 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 274 | }, 275 | "raw-body": { 276 | "version": "2.4.0", 277 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", 278 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", 279 | "requires": { 280 | "bytes": "3.1.0", 281 | "http-errors": "1.7.2", 282 | "iconv-lite": "0.4.24", 283 | "unpipe": "1.0.0" 284 | } 285 | }, 286 | "safe-buffer": { 287 | "version": "5.1.2", 288 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 289 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 290 | }, 291 | "safer-buffer": { 292 | "version": "2.1.2", 293 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 294 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 295 | }, 296 | "send": { 297 | "version": "0.17.1", 298 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", 299 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", 300 | "requires": { 301 | "debug": "2.6.9", 302 | "depd": "~1.1.2", 303 | "destroy": "~1.0.4", 304 | "encodeurl": "~1.0.2", 305 | "escape-html": "~1.0.3", 306 | "etag": "~1.8.1", 307 | "fresh": "0.5.2", 308 | "http-errors": "~1.7.2", 309 | "mime": "1.6.0", 310 | "ms": "2.1.1", 311 | "on-finished": "~2.3.0", 312 | "range-parser": "~1.2.1", 313 | "statuses": "~1.5.0" 314 | }, 315 | "dependencies": { 316 | "ms": { 317 | "version": "2.1.1", 318 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 319 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" 320 | } 321 | } 322 | }, 323 | "serve-static": { 324 | "version": "1.14.1", 325 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", 326 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", 327 | "requires": { 328 | "encodeurl": "~1.0.2", 329 | "escape-html": "~1.0.3", 330 | "parseurl": "~1.3.3", 331 | "send": "0.17.1" 332 | } 333 | }, 334 | "setprototypeof": { 335 | "version": "1.1.1", 336 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 337 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 338 | }, 339 | "statuses": { 340 | "version": "1.5.0", 341 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 342 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 343 | }, 344 | "toidentifier": { 345 | "version": "1.0.0", 346 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 347 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 348 | }, 349 | "type-is": { 350 | "version": "1.6.18", 351 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 352 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 353 | "requires": { 354 | "media-typer": "0.3.0", 355 | "mime-types": "~2.1.24" 356 | } 357 | }, 358 | "unpipe": { 359 | "version": "1.0.0", 360 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 361 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 362 | }, 363 | "utils-merge": { 364 | "version": "1.0.1", 365 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 366 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 367 | }, 368 | "vary": { 369 | "version": "1.1.2", 370 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 371 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 372 | } 373 | } 374 | } 375 | -------------------------------------------------------------------------------- /WeatherProject/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "weatherproject", 3 | "version": "1.0.0", 4 | "description": "Weather project", 5 | "main": "app.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "Deepa Subramanian", 10 | "license": "ISC", 11 | "dependencies": { 12 | "body-parser": "^1.19.0", 13 | "express": "^4.17.1" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Web+Dev+Syllabus.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sdkdeepa/Udemy-web-bootcamp/bfa5666380c9377ec5e0f01653895be2c77dafce/Web+Dev+Syllabus.pdf -------------------------------------------------------------------------------- /gitignore/Node.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # Snowpack dependency directory (https://snowpack.dev/) 45 | web_modules/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | .parcel-cache 78 | 79 | # Next.js build output 80 | .next 81 | out 82 | 83 | # Nuxt.js build / generate output 84 | .nuxt 85 | dist 86 | 87 | # Gatsby files 88 | .cache/ 89 | # Comment in the public line in if your project uses Gatsby and not Next.js 90 | # https://nextjs.org/blog/next-9-1#public-directory-support 91 | # public 92 | 93 | # vuepress build output 94 | .vuepress/dist 95 | 96 | # Serverless directories 97 | .serverless/ 98 | 99 | # FuseBox cache 100 | .fusebox/ 101 | 102 | # DynamoDB Local files 103 | .dynamodb/ 104 | 105 | # TernJS port file 106 | .tern-port 107 | 108 | # Stores VSCode versions used for testing VSCode extensions 109 | .vscode-test 110 | 111 | # yarn v2 112 | .yarn/cache 113 | .yarn/unplugged 114 | .yarn/build-state.yml 115 | .yarn/install-state.gz 116 | .pnp.* 117 | -------------------------------------------------------------------------------- /intro-to-node/index.js: -------------------------------------------------------------------------------- 1 | 2 | var superheroes = require("superheroes"); 3 | var supervillains = require("supervillains"); 4 | 5 | var mySuperheroName = superheroes.random(); 6 | var mySuperVillian = supervillains.random(); 7 | console.log(mySuperheroName, mySuperVillian); 8 | 9 | 10 | // console.log(mySuperVillian); 11 | -------------------------------------------------------------------------------- /intro-to-node/node_modules/superheroes/index.d.ts: -------------------------------------------------------------------------------- 1 | import superheroesJson = require('./superheroes.json'); 2 | 3 | declare const superheroes: { 4 | /** 5 | Superhero names in alphabetical order. 6 | 7 | @example 8 | ``` 9 | import superheroes = require('superheroes'); 10 | 11 | superheroes.all; 12 | //=> ['3-D Man', 'A-Bomb', …] 13 | ``` 14 | */ 15 | readonly all: Readonly; 16 | 17 | /** 18 | Random superhero name. 19 | 20 | @example 21 | ``` 22 | import superheroes = require('superheroes'); 23 | 24 | superheroes.random(); 25 | //=> 'Spider-Ham' 26 | ``` 27 | */ 28 | random(): string; 29 | } 30 | 31 | export = superheroes; 32 | -------------------------------------------------------------------------------- /intro-to-node/node_modules/superheroes/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const uniqueRandomArray = require('unique-random-array'); 3 | const superheroes = require('./superheroes.json'); 4 | 5 | exports.all = superheroes; 6 | exports.random = uniqueRandomArray(superheroes); 7 | -------------------------------------------------------------------------------- /intro-to-node/node_modules/superheroes/license: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Sindre Sorhus (sindresorhus.com) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /intro-to-node/node_modules/superheroes/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "superheroes", 3 | "_id": "superheroes@3.0.0", 4 | "_inBundle": false, 5 | "_integrity": "sha512-XXXzeKHMnf0rmZItYkGU803JlqYpoxvxzKFoe6k8C4bolcKfLZH716Rm4DyNJhxPTurbzDEB/QC7TXGsoei+ew==", 6 | "_location": "/superheroes", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "tag", 10 | "registry": true, 11 | "raw": "superheroes", 12 | "name": "superheroes", 13 | "escapedName": "superheroes", 14 | "rawSpec": "", 15 | "saveSpec": null, 16 | "fetchSpec": "latest" 17 | }, 18 | "_requiredBy": [ 19 | "#USER", 20 | "/" 21 | ], 22 | "_resolved": "https://registry.npmjs.org/superheroes/-/superheroes-3.0.0.tgz", 23 | "_shasum": "5a94fa6a7db87a95dd57ba1a5acd5e1daabad941", 24 | "_spec": "superheroes", 25 | "_where": "/Users/deepa/Desktop/Udemy/Web-development/intro-to-node", 26 | "author": { 27 | "name": "Sindre Sorhus", 28 | "email": "sindresorhus@gmail.com", 29 | "url": "sindresorhus.com" 30 | }, 31 | "bugs": { 32 | "url": "https://github.com/sindresorhus/superheroes/issues" 33 | }, 34 | "bundleDependencies": false, 35 | "dependencies": { 36 | "unique-random-array": "^2.0.0" 37 | }, 38 | "deprecated": false, 39 | "description": "Get superhero names", 40 | "devDependencies": { 41 | "ava": "^1.4.1", 42 | "tsd": "^0.7.2", 43 | "xo": "^0.24.0" 44 | }, 45 | "engines": { 46 | "node": ">=8" 47 | }, 48 | "files": [ 49 | "index.js", 50 | "index.d.ts", 51 | "superheroes.json" 52 | ], 53 | "homepage": "https://github.com/sindresorhus/superheroes#readme", 54 | "keywords": [ 55 | "word", 56 | "words", 57 | "list", 58 | "array", 59 | "random", 60 | "superheroes", 61 | "superhero", 62 | "heroes", 63 | "hero", 64 | "marvel", 65 | "dc", 66 | "comics" 67 | ], 68 | "license": "MIT", 69 | "name": "superheroes", 70 | "repository": { 71 | "type": "git", 72 | "url": "git+https://github.com/sindresorhus/superheroes.git" 73 | }, 74 | "scripts": { 75 | "test": "xo && ava && tsd" 76 | }, 77 | "tsd": { 78 | "compilerOptions": { 79 | "resolveJsonModule": true 80 | } 81 | }, 82 | "version": "3.0.0" 83 | } 84 | -------------------------------------------------------------------------------- /intro-to-node/node_modules/superheroes/readme.md: -------------------------------------------------------------------------------- 1 | # superheroes [![Build Status](https://travis-ci.org/sindresorhus/superheroes.svg?branch=master)](https://travis-ci.org/sindresorhus/superheroes) 2 | 3 | > Get superhero names 4 | 5 | 6 | 7 | The list is just a [JSON file](superheroes.json) and can be used anywhere. 8 | 9 | 10 | ## Install 11 | 12 | ``` 13 | $ npm install superheroes 14 | ``` 15 | 16 | 17 | ## Usage 18 | 19 | ```js 20 | const superheroes = require('superheroes'); 21 | 22 | superheroes.all; 23 | //=> ['3-D Man', 'A-Bomb', …] 24 | 25 | superheroes.random(); 26 | //=> 'Spider-Ham' 27 | ``` 28 | 29 | 30 | ## API 31 | 32 | ### .all 33 | 34 | Type: `string[]` 35 | 36 | Superhero names in alphabetical order. 37 | 38 | ### .random() 39 | 40 | Type: `Function` 41 | 42 | Random superhero name. 43 | 44 | 45 | ## Related 46 | 47 | - [superheroes-cli](https://github.com/sindresorhus/superheroes-cli) - CLI for this module 48 | - [supervillains](https://github.com/sindresorhus/supervillains) - Get supervillain names 49 | - [cat-names](https://github.com/sindresorhus/cat-names) - Get popular cat names 50 | - [dog-names](https://github.com/sindresorhus/dog-names) - Get popular dog names 51 | - [pokemon](https://github.com/sindresorhus/pokemon) - Get Pokémon names 52 | - [superb](https://github.com/sindresorhus/superb) - Get superb like words 53 | - [yes-no-words](https://github.com/sindresorhus/yes-no-words) - Get yes/no like words 54 | 55 | 56 | ## License 57 | 58 | MIT © [Sindre Sorhus](https://sindresorhus.com) 59 | -------------------------------------------------------------------------------- /intro-to-node/node_modules/supervillains/index.d.ts: -------------------------------------------------------------------------------- 1 | import supervillainsJson = require('./supervillains.json'); 2 | 3 | declare const supervillains: { 4 | /** 5 | Supervillain names in alphabetical order. 6 | 7 | @example 8 | ``` 9 | const supervillains = require('supervillains'); 10 | 11 | supervillains.all; 12 | //=> ['Abattoir', 'Able Crown', …] 13 | ``` 14 | */ 15 | readonly all: Readonly; 16 | 17 | /** 18 | Random supervillain name. 19 | 20 | @example 21 | ``` 22 | const supervillains = require('supervillains'); 23 | 24 | supervillains.random(); 25 | //=> 'Mud Pack' 26 | ``` 27 | */ 28 | random(): string; 29 | }; 30 | 31 | export = supervillains; 32 | -------------------------------------------------------------------------------- /intro-to-node/node_modules/supervillains/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const uniqueRandomArray = require('unique-random-array'); 3 | const supervillains = require('./supervillains.json'); 4 | 5 | exports.all = supervillains; 6 | exports.random = uniqueRandomArray(supervillains); 7 | -------------------------------------------------------------------------------- /intro-to-node/node_modules/supervillains/license: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Sindre Sorhus (sindresorhus.com) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /intro-to-node/node_modules/supervillains/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "supervillains", 3 | "_id": "supervillains@3.0.0", 4 | "_inBundle": false, 5 | "_integrity": "sha512-L3vram05h2SLW8eeHff0JmXA+P0kYI/Be9t5JXLFmV7vJ3tnBC1es5Sg0ym70CgeolowMObR5Jl+xpEv5bSvZg==", 6 | "_location": "/supervillains", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "tag", 10 | "registry": true, 11 | "raw": "supervillains", 12 | "name": "supervillains", 13 | "escapedName": "supervillains", 14 | "rawSpec": "", 15 | "saveSpec": null, 16 | "fetchSpec": "latest" 17 | }, 18 | "_requiredBy": [ 19 | "#USER", 20 | "/" 21 | ], 22 | "_resolved": "https://registry.npmjs.org/supervillains/-/supervillains-3.0.0.tgz", 23 | "_shasum": "aa8862fdc29dca5f62f1802b6f5c9d8e6fbd1f4e", 24 | "_spec": "supervillains", 25 | "_where": "/Users/deepa/Desktop/Udemy/Web-development/intro-to-node", 26 | "author": { 27 | "name": "Sindre Sorhus", 28 | "email": "sindresorhus@gmail.com", 29 | "url": "sindresorhus.com" 30 | }, 31 | "bugs": { 32 | "url": "https://github.com/sindresorhus/supervillains/issues" 33 | }, 34 | "bundleDependencies": false, 35 | "dependencies": { 36 | "unique-random-array": "^2.0.0" 37 | }, 38 | "deprecated": false, 39 | "description": "Get supervillain names", 40 | "devDependencies": { 41 | "ava": "^1.4.1", 42 | "tsd": "^0.7.2", 43 | "xo": "^0.24.0" 44 | }, 45 | "engines": { 46 | "node": ">=8" 47 | }, 48 | "files": [ 49 | "index.js", 50 | "index.d.ts", 51 | "supervillains.json" 52 | ], 53 | "homepage": "https://github.com/sindresorhus/supervillains#readme", 54 | "keywords": [ 55 | "word", 56 | "words", 57 | "list", 58 | "array", 59 | "random", 60 | "rand", 61 | "supervillains", 62 | "supervillain", 63 | "villains", 64 | "villain", 65 | "marvel", 66 | "dc", 67 | "comics" 68 | ], 69 | "license": "MIT", 70 | "name": "supervillains", 71 | "repository": { 72 | "type": "git", 73 | "url": "git+https://github.com/sindresorhus/supervillains.git" 74 | }, 75 | "scripts": { 76 | "test": "xo && ava && tsd" 77 | }, 78 | "tsd": { 79 | "compilerOptions": { 80 | "resolveJsonModule": true 81 | } 82 | }, 83 | "version": "3.0.0" 84 | } 85 | -------------------------------------------------------------------------------- /intro-to-node/node_modules/supervillains/readme.md: -------------------------------------------------------------------------------- 1 | # supervillains [![Build Status](https://travis-ci.org/sindresorhus/supervillains.svg?branch=master)](https://travis-ci.org/sindresorhus/supervillains) 2 | 3 | 4 | 5 | > Get supervillain names 6 | 7 | The list is just a [JSON file](supervillains.json) and can be used anywhere. 8 | 9 | 10 | ## Install 11 | 12 | ``` 13 | $ npm install supervillains 14 | ``` 15 | 16 | 17 | ## Usage 18 | 19 | ```js 20 | const supervillains = require('supervillains'); 21 | 22 | supervillains.all; 23 | //=> ['Abattoir', 'Able Crown', …] 24 | 25 | supervillains.random(); 26 | //=> 'Mud Pack' 27 | ``` 28 | 29 | 30 | ## API 31 | 32 | ### .all 33 | 34 | Type: `string[]` 35 | 36 | Supervillain names in alphabetical order. 37 | 38 | ### .random() 39 | 40 | Type: `Function` 41 | 42 | Random supervillain name. 43 | 44 | 45 | ## Related 46 | 47 | - [supervillains-cli](https://github.com/sindresorhus/supervillains-cli) - CLI for this module 48 | - [superheroes](https://github.com/sindresorhus/superheroes) - Get superhero names 49 | - [cat-names](https://github.com/sindresorhus/cat-names) - Get popular cat names 50 | - [dog-names](https://github.com/sindresorhus/dog-names) - Get popular dog names 51 | - [pokemon](https://github.com/sindresorhus/pokemon) - Get Pokémon names 52 | - [superb](https://github.com/sindresorhus/superb) - Get superb like words 53 | - [yes-no-words](https://github.com/sindresorhus/yes-no-words) - Get yes/no like words 54 | 55 | 56 | ## License 57 | 58 | MIT © [Sindre Sorhus](https://sindresorhus.com) 59 | -------------------------------------------------------------------------------- /intro-to-node/node_modules/supervillains/supervillains.json: -------------------------------------------------------------------------------- 1 | [ 2 | "Abattoir", 3 | "Able Crown", 4 | "Abra Kadabra", 5 | "Absorbing Man", 6 | "Acolytes", 7 | "Acrobat", 8 | "Advanced Idea Mechanics", 9 | "Agamemno", 10 | "Agent H of HYDRA", 11 | "Al-Tariq", 12 | "Alberto Falcone", 13 | "Alex Wilder", 14 | "Alkhema", 15 | "Allatou", 16 | "Amazing Grace", 17 | "Amazo", 18 | "Americop", 19 | "Amos Fortune", 20 | "Amygdala", 21 | "Anaconda", 22 | "Anarky", 23 | "Animora", 24 | "Annihilus", 25 | "Anomaly", 26 | "Answer", 27 | "Anthony Lupus", 28 | "Apocalypse", 29 | "Appa Ali Apsa", 30 | "Aqueduct", 31 | "Arcade", 32 | "Aries", 33 | "Arkon", 34 | "Armadillo", 35 | "Artemis Crock", 36 | "Artemiz", 37 | "Asbestos Man", 38 | "Assembly of Evil", 39 | "Atomic Skull", 40 | "Attuma", 41 | "Axis Amerika", 42 | "Ballox the Monstroid", 43 | "Bane", 44 | "Baron Blitzkrieg", 45 | "Baron Blood", 46 | "Baron Mordo", 47 | "Baron Zemo", 48 | "Barracuda", 49 | "Batroc the Leaper", 50 | "Battleaxe", 51 | "Batzarro", 52 | "Bernadeth", 53 | "Bizarro", 54 | "Black Adam", 55 | "Black Flash", 56 | "Black Hand", 57 | "Black Knight", 58 | "Black Manta", 59 | "Black Mask", 60 | "Black Spider", 61 | "Black Talon", 62 | "Black Widow", 63 | "Black Zero", 64 | "Blackfire", 65 | "Blackout", 66 | "Blackrock", 67 | "Blacksmith", 68 | "Blastaar", 69 | "Blaze", 70 | "Blockbuster", 71 | "Bloodsport", 72 | "Bloody Mary", 73 | "Blue Snowman", 74 | "Blue Streak", 75 | "Bolivar Trask", 76 | "Brainiac", 77 | "Brainwave", 78 | "Bronze Tiger", 79 | "Brutale", 80 | "Bug-Eyed Bandit", 81 | "Bullseye", 82 | "Byth", 83 | "Calculator", 84 | "Calendar Man", 85 | "Captain Boomerang", 86 | "Captain Cold", 87 | "Captain Nazi", 88 | "Captain Stingaree", 89 | "Carmine Falcone", 90 | "Carnage", 91 | "Catman", 92 | "Catwoman", 93 | "Cavalier", 94 | "Chameleon", 95 | "Cheetah", 96 | "Cheshire", 97 | "Chessure", 98 | "Chronos", 99 | "Chthon", 100 | "Cicada", 101 | "Circe", 102 | "Clayface", 103 | "Clock King", 104 | "Cluemaster", 105 | "Cobalt Blue", 106 | "Cobalt Man", 107 | "Cold War", 108 | "Commissioner Gillian B. Loeb", 109 | "Composite Superman", 110 | "Conduit", 111 | "Constrictor", 112 | "Copperhead", 113 | "Cornelius Stirk", 114 | "Count Nefaria", 115 | "Count Vertigo", 116 | "Crazy Quilt", 117 | "Crime Doctor", 118 | "Crimesmith", 119 | "Crimson Dynamo", 120 | "Crossbones", 121 | "Crossfire", 122 | "Cutthroat", 123 | "Cyborgirl", 124 | "Dansen Macabre", 125 | "Dark Angel", 126 | "Darkseid", 127 | "Darth Vader", 128 | "David Cain", 129 | "Deacon Blackfire", 130 | "Deadline", 131 | "Deadpool", 132 | "Deadshot", 133 | "Death Storm", 134 | "Deathbird", 135 | "Deathbolt", 136 | "Deathstroke", 137 | "Decay", 138 | "Deep Six", 139 | "Desaad", 140 | "Despero", 141 | "Destiny", 142 | "Destroyer", 143 | "Deuce", 144 | "Deuce, Charger", 145 | "Devastation", 146 | "Devilance", 147 | "Diablo", 148 | "Diamond Lil", 149 | "Doctor Achilles Milo", 150 | "Doctor Alchemy", 151 | "Doctor Bedlam", 152 | "Doctor Cyber", 153 | "Doctor Demonicus", 154 | "Doctor Destiny", 155 | "Doctor Doom", 156 | "Doctor Double X", 157 | "Doctor Moon", 158 | "Doctor Octopus", 159 | "Doctor Phosphorus", 160 | "Doctor Poison", 161 | "Doctor Polaris", 162 | "Doctor Sivana", 163 | "Doctor Spectrum", 164 | "Dominus", 165 | "Doomsday", 166 | "Dormammu", 167 | "Double Dare", 168 | "Double Down", 169 | "Dr. Death", 170 | "Dr. Evil", 171 | "Dr. Horrible", 172 | "Dr. Light", 173 | "Dragon Man", 174 | "Dragonfly", 175 | "Dragonrider", 176 | "Duela Dent", 177 | "Eclipso", 178 | "Eduardo", 179 | "Effron the Sorcerer", 180 | "Egghead", 181 | "Electro", 182 | "Electrocutioner", 183 | "Elektro", 184 | "Emerald Empress", 185 | "Emma Frost", 186 | "Enchantress", 187 | "Equus", 188 | "Ereshkigal", 189 | "Evil Ernie", 190 | "Eviless", 191 | "Evinlea", 192 | "Executioner", 193 | "Exemplars", 194 | "Fabian Cortez", 195 | "Facade", 196 | "Factor Three", 197 | "Fadeaway Man", 198 | "Famine", 199 | "Faora", 200 | "Fatality", 201 | "Fault Zone", 202 | "Fearsome Five", 203 | "Fel Andar", 204 | "Felix Faust", 205 | "Fem Paragon", 206 | "Female Furies", 207 | "Fer-de-Lance", 208 | "Film Freak", 209 | "Fin Fang Foom", 210 | "Firebug", 211 | "Firefly", 212 | "Fisherman", 213 | "Fixer", 214 | "Flag-Smasher", 215 | "Floronic Man", 216 | "Freedom Force", 217 | "Frightful Four", 218 | "Fuzzy Lumpkins", 219 | "Galactus", 220 | "Gambler", 221 | "Gargantua", 222 | "Gargantus", 223 | "Gargoyle", 224 | "Gearhead", 225 | "Gemini", 226 | "General", 227 | "General Zod", 228 | "Gentleman Ghost", 229 | "Ghaur", 230 | "Giganta", 231 | "Gilotina", 232 | "Girder", 233 | "Gizmo", 234 | "Gladiator", 235 | "Glorious Godfrey", 236 | "Glorith", 237 | "Goddess", 238 | "Godiva", 239 | "Gog", 240 | "Golden Glider", 241 | "Goldface", 242 | "Goldilocks", 243 | "Googam", 244 | "Goom", 245 | "Gorilla Grodd", 246 | "Gorilla-Man", 247 | "Grand Director", 248 | "Granny Goodness", 249 | "Graviton", 250 | "Grayven", 251 | "Great White", 252 | "Green Goblin", 253 | "Griffin", 254 | "Grim Reaper", 255 | "Grottu", 256 | "Growing Man", 257 | "H.I.V.E.", 258 | "HYDRA", 259 | "Hades", 260 | "Halflife", 261 | "Hangman", 262 | "Hank Henshaw", 263 | "Harlequin", 264 | "Harley Quinn", 265 | "Harpy", 266 | "Hate-Monger", 267 | "Hath-Set", 268 | "Hazard", 269 | "Headlok", 270 | "Heat Wave", 271 | "Hector Hammond", 272 | "Heggra", 273 | "Hela", 274 | "Hellgrammite", 275 | "High Evolutionary", 276 | "Hitman", 277 | "Hobgoblin", 278 | "Holiday", 279 | "Hugo Strange", 280 | "Hulk Robot", 281 | "Humpty Dumpty", 282 | "Hush", 283 | "Hyathis", 284 | "Hyena", 285 | "Hyperion", 286 | "Hypnota", 287 | "Ibac", 288 | "Ignition", 289 | "Immortus", 290 | "Impala", 291 | "Imperiex", 292 | "Impossible Man", 293 | "Indigo", 294 | "Inertia", 295 | "Infant Terrible", 296 | "Inferno", 297 | "Ingra", 298 | "Intergang", 299 | "Ion", 300 | "Iron Maiden", 301 | "Jack Frost", 302 | "Jack O'Lantern", 303 | "Jason Kreis", 304 | "Jason Todd", 305 | "Javelin", 306 | "Jax-Ur", 307 | "Jewelee", 308 | "Jigsaw", 309 | "Jinx", 310 | "Joker", 311 | "Juggernaut", 312 | "KGBeast", 313 | "Kalibak", 314 | "Kang the Conqueror", 315 | "Kanjar Ro", 316 | "Kanto", 317 | "Killer Croc", 318 | "Killer Frost", 319 | "Killer Moth", 320 | "King Ghidorah", 321 | "King Shark", 322 | "King Snake", 323 | "Kingpin", 324 | "Kira", 325 | "Kite Man", 326 | "Klaw", 327 | "Kleinstocks", 328 | "Knockout", 329 | "Korvac", 330 | "Kraven the Hunter", 331 | "Krona", 332 | "Kryptonite Man", 333 | "Kulan Gath", 334 | "Kurrgo", 335 | "Kyle Abbot", 336 | "Lady Clay", 337 | "Lady Death", 338 | "Lady Deathstrike", 339 | "Lady Dorma", 340 | "Lady Mastermind", 341 | "Lady Octopus", 342 | "Lady Shiva", 343 | "Lady Spellbinder", 344 | "Lady Vic", 345 | "Lagomorph", 346 | "Lashina", 347 | "Lava Men", 348 | "Law", 349 | "Lazara", 350 | "League of Assassins", 351 | "Leap-Frog", 352 | "Leather", 353 | "Legion of the Unliving", 354 | "Letha", 355 | "Lethal Legion", 356 | "Lex Luthor", 357 | "Lion-Mane", 358 | "Livewire", 359 | "Living Laser", 360 | "Lloigoroth", 361 | "Llyra", 362 | "Lock-Up", 363 | "Lodestone", 364 | "Loki", 365 | "Lorelei", 366 | "Lotso", 367 | "Lucifer", 368 | "Lynx", 369 | "MODOK", 370 | "Mace Blitzkrieg", 371 | "Mad Harriet", 372 | "Mad Hatter", 373 | "Mad Thinker", 374 | "Madvillain", 375 | "Madame Masque", 376 | "Madame Rouge", 377 | "Madelyne Pryor", 378 | "Maelstrom", 379 | "Magenta", 380 | "Magneta", 381 | "Magneto", 382 | "Magpie", 383 | "Magus", 384 | "Mai Shen", 385 | "Major Disaster", 386 | "Major Force", 387 | "Malebolgia", 388 | "Malice", 389 | "Malice Vundabar", 390 | "Mammon", 391 | "Mammoth", 392 | "Man Beast", 393 | "Man-Bat", 394 | "Man-Killer", 395 | "Manchester Black", 396 | "Mandarin", 397 | "Mandarin's Minions", 398 | "Manhunters", 399 | "Mantis", 400 | "Marrow", 401 | "Massacre", 402 | "Master Mold", 403 | "Master Pandemonium", 404 | "Master of the World", 405 | "Mastermind", 406 | "Masters of Evil", 407 | "Matter Master", 408 | "Maxie Zeus", 409 | "Maxima", 410 | "Maximus", 411 | "Medusa", 412 | "Menace", 413 | "Mephisto", 414 | "Mercy", 415 | "Merlyn", 416 | "Metallo", 417 | "MF DOOM", 418 | "Midnight Sun", 419 | "Mimic", 420 | "Mindblast", 421 | "Miracle Man", 422 | "Mirror Master", 423 | "Misfit", 424 | "Mist", 425 | "Mister Hyde", 426 | "Mister Sinister", 427 | "Mojo Jojo", 428 | "Mole Man", 429 | "Molecule Man", 430 | "Molloch", 431 | "Moloid subterraneans", 432 | "Molten Man", 433 | "Molten Man-Thing", 434 | "Mongal", 435 | "Mongul", 436 | "Mongul II", 437 | "Monocle", 438 | "Monsieur Stigmonus", 439 | "Moondark", 440 | "Moonstone", 441 | "Morgan Edge", 442 | "Morgan le Fay", 443 | "Morlun", 444 | "Mortalla", 445 | "Mortician", 446 | "Moses Magnum", 447 | "Mothergod", 448 | "Mr. Felonious Gru", 449 | "Mr. Freeze", 450 | "Mr. Mxyzptlk", 451 | "Mr. Twister", 452 | "Mud Pack", 453 | "Murmur", 454 | "Mysteria", 455 | "Mysterio", 456 | "Mystique", 457 | "NKVDemon", 458 | "Naga", 459 | "Nebula", 460 | "Needle", 461 | "Nemesis Kid", 462 | "Nero", 463 | "Neron", 464 | "Neutron", 465 | "New Wave", 466 | "Nightmare", 467 | "Nocturna", 468 | "Northwind", 469 | "Nyssa Raatko", 470 | "O.G.R.E.", 471 | "Ocean Master", 472 | "Omega Red", 473 | "Onimar Synn", 474 | "Onomatopoeia", 475 | "Onslaught", 476 | "Orca", 477 | "Ord", 478 | "Orka", 479 | "Osira", 480 | "Overlord", 481 | "Owen Mercer", 482 | "Owlman", 483 | "Ozymandias", 484 | "Parademon", 485 | "Parademons", 486 | "Paragon", 487 | "Parallax", 488 | "Parasite", 489 | "Paste-Pot Pete", 490 | "Peek-a-Boo", 491 | "Penguin", 492 | "Penny Plunderer", 493 | "Persuader", 494 | "Phantazia", 495 | "Pharaoh Rama Tut", 496 | "Pharzoof", 497 | "Phobia", 498 | "Pied Piper", 499 | "Pink Pearl", 500 | "Plantman", 501 | "Plastique", 502 | "Poison Ivy", 503 | "Porcupine", 504 | "Portal", 505 | "Poundcakes", 506 | "Power Man", 507 | "Prank", 508 | "Prankster", 509 | "Pretty Persuasions", 510 | "Preus", 511 | "Princess Morbucks", 512 | "Princess Python", 513 | "Professor Hugo Strange", 514 | "Professor Ivo", 515 | "Professor Padraic Ratigan", 516 | "Prometheus", 517 | "Psycho-Man", 518 | "Psycho-Pirate", 519 | "Punisher", 520 | "Purgatori", 521 | "Quantum", 522 | "Queen Bee", 523 | "Queen Clea", 524 | "Queen of Fables", 525 | "Quicksand", 526 | "Quicksilver", 527 | "Qwsp", 528 | "Ra's al Ghul", 529 | "Rad", 530 | "Radioactive Man", 531 | "Rag Doll", 532 | "Rainbow Raider", 533 | "Rainbow Raiders", 534 | "Rampage", 535 | "Ratcatcher", 536 | "Reaper", 537 | "Red Ghost", 538 | "Red Hood", 539 | "Red Skull", 540 | "Resistants", 541 | "Reverse Flash", 542 | "Riddler", 543 | "Riddler's Daughter", 544 | "Ringmaster", 545 | "Ronan the Accuser", 546 | "Rose, Thorn", 547 | "Roulette", 548 | "Roxy Rocket", 549 | "Royal Flush Gang", 550 | "Rupert Thorne", 551 | "Russian", 552 | "SKULL", 553 | "Sabbac", 554 | "Sabretooth", 555 | "Salome", 556 | "Sandman", 557 | "Sat-Yr9", 558 | "Saturn Queen", 559 | "Savitar", 560 | "Scandal", 561 | "Scarecrow", 562 | "Scarlet Witch", 563 | "Scavenger", 564 | "Scorch", 565 | "Scorpia", 566 | "Scream", 567 | "Sebastian Shaw", 568 | "Sedusa", 569 | "Selene", 570 | "Sensei", 571 | "Sentinels", 572 | "Set", 573 | "Shadow Thief", 574 | "Shark", 575 | "Shimmer", 576 | "Shredder", 577 | "Shriek", 578 | "Shrike", 579 | "Signalman", 580 | "Silk Fever", 581 | "Silver Banshee", 582 | "Silver Sable", 583 | "Silver Swan", 584 | "Sin", 585 | "Sinestro", 586 | "Sinister Six", 587 | "Snapdragon", 588 | "Solaris", 589 | "Solomon Grundy", 590 | "Sonar", 591 | "Southpaw", 592 | "Space Phantom", 593 | "Speed Queen", 594 | "Spellbinder", 595 | "Spencer Smythe", 596 | "Sphinx", 597 | "Spider Girl", 598 | "Spider-Woman", 599 | "Spiral", 600 | "Sportsmaster", 601 | "Spragg", 602 | "Stained Glass Scarlet", 603 | "Star Sapphire", 604 | "Starro", 605 | "Stegron", 606 | "Stompa", 607 | "Sun Girl", 608 | "Super-Skrull", 609 | "Superia", 610 | "Superman Revenge Squad", 611 | "Supreme Intelligence", 612 | "Swordsman", 613 | "Syndrome", 614 | "T.O. Morrow", 615 | "Tala", 616 | "Talia al Ghul", 617 | "Tally Man", 618 | "Talon", 619 | "Tar Pit", 620 | "Tarantula", 621 | "Tattooed Man", 622 | "Ten-Eyed Man", 623 | "Terra", 624 | "Terra-Man", 625 | "Terraxia", 626 | "Terrible Trio", 627 | "Thanos", 628 | "The Amoeba Boys", 629 | "The Awesome Android", 630 | "The Basilisk", 631 | "The Blob", 632 | "The Borg", 633 | "The Chameleon", 634 | "The Crimson Ghost", 635 | "The Fat Man", 636 | "The Fiddler", 637 | "The Gargoyle", 638 | "The Ganggreen Gang", 639 | "The General", 640 | "The Joker", 641 | "The Kree", 642 | "The Leader", 643 | "The Lightning", 644 | "The Lizard", 645 | "The Mad Mod", 646 | "The Man-Killer", 647 | "The Mekon", 648 | "The Monk", 649 | "The Orb", 650 | "The Penguin", 651 | "The Puppet Master", 652 | "The Puzzler", 653 | "The Rhino", 654 | "The Rival", 655 | "The Rowdyruff Boys", 656 | "The Scorpion", 657 | "The Separated Man", 658 | "The Shade", 659 | "The Shocker", 660 | "The Skrulls", 661 | "The Stranger", 662 | "The Terrible Tinkerer", 663 | "The Terrible Trio", 664 | "The Top", 665 | "The Vulture", 666 | "The Wingless Wizard", 667 | "The Wink", 668 | "The Yellow Claw", 669 | "They Who Wield Power", 670 | "Thinker", 671 | "Tigress", 672 | "Tim Boo Ba", 673 | "Titan", 674 | "Titania", 675 | "Titanium Man", 676 | "Titano", 677 | "Toad", 678 | "Tony Zucco", 679 | "Toyman", 680 | "Trickster", 681 | "Trigger Twins", 682 | "Trinity", 683 | "Tsunami", 684 | "Turtle", 685 | "Tweedledum", 686 | "Two-Face", 687 | "Typhoid Mary", 688 | "Ultra-Humanite", 689 | "Ultraman", 690 | "Ultron", 691 | "Umar", 692 | "Unicron", 693 | "Unus the Untouchable", 694 | "Ursa", 695 | "Valentina", 696 | "Vandal Savage", 697 | "Vanisher", 698 | "Vapor", 699 | "Venom", 700 | "Ventriloquist", 701 | "Vermin", 702 | "Vertigo", 703 | "Victor Zsasz", 704 | "Violator", 705 | "Viper", 706 | "Virman Vundabar", 707 | "Volcana", 708 | "Vulture", 709 | "Warlord Zemu", 710 | "Warmaker", 711 | "Weather Wizard", 712 | "Whiplash", 713 | "White Rabbit", 714 | "Winter Soldier", 715 | "Xemnu", 716 | "Yancy Street Gang", 717 | "Yellowjacket", 718 | "Yuga Khan", 719 | "Zaladane", 720 | "Zaran", 721 | "Zeiss", 722 | "Zoom", 723 | "Zsasz" 724 | ] 725 | -------------------------------------------------------------------------------- /intro-to-node/node_modules/unique-random-array/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | Get consecutively unique elements from an array. 3 | 4 | @returns A function, that when called, will return a random element that is never the same as the previous. 5 | 6 | @example 7 | ``` 8 | import uniqueRandomArray = require('unique-random-array'); 9 | 10 | const random = uniqueRandomArray([1, 2, 3, 4]); 11 | 12 | console.log(random(), random(), random(), random()); 13 | //=> 4 2 1 4 14 | ``` 15 | */ 16 | declare function uniqueRandomArray( 17 | array: readonly ValueType[] 18 | ): () => ValueType; 19 | 20 | export = uniqueRandomArray; 21 | -------------------------------------------------------------------------------- /intro-to-node/node_modules/unique-random-array/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const uniqueRandom = require('unique-random'); 3 | 4 | module.exports = array => { 5 | const random = uniqueRandom(0, array.length - 1); 6 | return () => array[random()]; 7 | }; 8 | -------------------------------------------------------------------------------- /intro-to-node/node_modules/unique-random-array/license: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Sindre Sorhus (sindresorhus.com) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /intro-to-node/node_modules/unique-random-array/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "unique-random-array@^2.0.0", 3 | "_id": "unique-random-array@2.0.0", 4 | "_inBundle": false, 5 | "_integrity": "sha512-xR87O95fZ7hljw84J8r1YDXrvffPLWN513BNOP4Bv0KcgG5dyEUrHwsvP7mVAOKg4Y80uqRbpUk0GKr8il70qg==", 6 | "_location": "/unique-random-array", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "range", 10 | "registry": true, 11 | "raw": "unique-random-array@^2.0.0", 12 | "name": "unique-random-array", 13 | "escapedName": "unique-random-array", 14 | "rawSpec": "^2.0.0", 15 | "saveSpec": null, 16 | "fetchSpec": "^2.0.0" 17 | }, 18 | "_requiredBy": [ 19 | "/superheroes" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/unique-random-array/-/unique-random-array-2.0.0.tgz", 22 | "_shasum": "9e639b1a9dc141e97350a6fc6f17da4b0717b1ad", 23 | "_spec": "unique-random-array@^2.0.0", 24 | "_where": "/Users/deepa/Desktop/Udemy/Web-development/intro-to-node/node_modules/superheroes", 25 | "author": { 26 | "name": "Sindre Sorhus", 27 | "email": "sindresorhus@gmail.com", 28 | "url": "sindresorhus.com" 29 | }, 30 | "bugs": { 31 | "url": "https://github.com/sindresorhus/unique-random-array/issues" 32 | }, 33 | "bundleDependencies": false, 34 | "dependencies": { 35 | "unique-random": "^2.1.0" 36 | }, 37 | "deprecated": false, 38 | "description": "Get consecutively unique elements from an array", 39 | "devDependencies": { 40 | "ava": "^1.4.1", 41 | "tsd": "^0.7.2", 42 | "xo": "^0.24.0" 43 | }, 44 | "engines": { 45 | "node": ">=8" 46 | }, 47 | "files": [ 48 | "index.js", 49 | "index.d.ts" 50 | ], 51 | "homepage": "https://github.com/sindresorhus/unique-random-array#readme", 52 | "keywords": [ 53 | "unique", 54 | "random", 55 | "number", 56 | "single", 57 | "generate", 58 | "non-repeating", 59 | "array", 60 | "item", 61 | "element" 62 | ], 63 | "license": "MIT", 64 | "name": "unique-random-array", 65 | "repository": { 66 | "type": "git", 67 | "url": "git+https://github.com/sindresorhus/unique-random-array.git" 68 | }, 69 | "scripts": { 70 | "test": "xo && ava && tsd" 71 | }, 72 | "version": "2.0.0" 73 | } 74 | -------------------------------------------------------------------------------- /intro-to-node/node_modules/unique-random-array/readme.md: -------------------------------------------------------------------------------- 1 | # unique-random-array [![Build Status](https://travis-ci.org/sindresorhus/unique-random-array.svg?branch=master)](https://travis-ci.org/sindresorhus/unique-random-array) 2 | 3 | > Get consecutively unique elements from an array 4 | 5 | Useful for things like slideshows where you don't want to have the same slide twice in a row. 6 | 7 | 8 | ## Install 9 | 10 | ``` 11 | $ npm install unique-random-array 12 | ``` 13 | 14 | 15 | ## Usage 16 | 17 | ```js 18 | const uniqueRandomArray = require('unique-random-array'); 19 | 20 | const random = uniqueRandomArray([1, 2, 3, 4]); 21 | 22 | console.log(random(), random(), random(), random()); 23 | //=> 4 2 1 4 24 | ``` 25 | 26 | 27 | ## API 28 | 29 | ### uniqueRandomArray(array) 30 | 31 | Returns a function, that when called, will return a random element that's never the same as the previous. 32 | 33 | #### array 34 | 35 | Type: `unknown[]` 36 | 37 | 38 | ## Related 39 | 40 | - [unique-random](https://github.com/sindresorhus/unique-random) - Generate random numbers that are consecutively unique 41 | - [random-int](https://github.com/sindresorhus/random-int) - Generate a random integer 42 | - [random-float](https://github.com/sindresorhus/random-float) - Generate a random float 43 | - [random-item](https://github.com/sindresorhus/random-item) - Get a random item from an array 44 | - [random-obj-key](https://github.com/sindresorhus/random-obj-key) - Get a random key from an object 45 | - [random-obj-prop](https://github.com/sindresorhus/random-obj-prop) - Get a random property from an object 46 | - [crypto-random-string](https://github.com/sindresorhus/crypto-random-string) - Generate a cryptographically strong random string 47 | 48 | 49 | ## License 50 | 51 | MIT © [Sindre Sorhus](https://sindresorhus.com) 52 | -------------------------------------------------------------------------------- /intro-to-node/node_modules/unique-random/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | Generate random numbers that are consecutively unique. 3 | 4 | @returns A function, that when called, will return a random number that is never the same as the previous. 5 | 6 | @example 7 | ``` 8 | import uniqueRandom = require('unique-random'); 9 | 10 | const random = uniqueRandom(1, 10); 11 | 12 | console.log(random(), random(), random()); 13 | //=> 5 2 6 14 | ``` 15 | */ 16 | declare function uniqueRandom( 17 | minimum: number, 18 | maximum: number 19 | ): () => number; 20 | 21 | export = uniqueRandom; 22 | -------------------------------------------------------------------------------- /intro-to-node/node_modules/unique-random/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (minimum, maximum) => { 4 | let previousValue; 5 | return function random() { 6 | const number = Math.floor( 7 | (Math.random() * (maximum - minimum + 1)) + minimum 8 | ); 9 | previousValue = number === previousValue && minimum !== maximum ? random() : number; 10 | return previousValue; 11 | }; 12 | }; 13 | -------------------------------------------------------------------------------- /intro-to-node/node_modules/unique-random/license: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Sindre Sorhus (sindresorhus.com) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /intro-to-node/node_modules/unique-random/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "unique-random@^2.1.0", 3 | "_id": "unique-random@2.1.0", 4 | "_inBundle": false, 5 | "_integrity": "sha512-iQ1ZgWac3b8YxGThecQFRQiqgk6xFERRwHZIWeVVsqlbmgCRl0PY13R4mUkodNgctmg5b5odG1nyW/IbOxQTqg==", 6 | "_location": "/unique-random", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "range", 10 | "registry": true, 11 | "raw": "unique-random@^2.1.0", 12 | "name": "unique-random", 13 | "escapedName": "unique-random", 14 | "rawSpec": "^2.1.0", 15 | "saveSpec": null, 16 | "fetchSpec": "^2.1.0" 17 | }, 18 | "_requiredBy": [ 19 | "/unique-random-array" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/unique-random/-/unique-random-2.1.0.tgz", 22 | "_shasum": "7a8413da5176d028567168b57125ac5c0cec5c25", 23 | "_spec": "unique-random@^2.1.0", 24 | "_where": "/Users/deepa/Desktop/Udemy/Web-development/intro-to-node/node_modules/unique-random-array", 25 | "author": { 26 | "name": "Sindre Sorhus", 27 | "email": "sindresorhus@gmail.com", 28 | "url": "sindresorhus.com" 29 | }, 30 | "bugs": { 31 | "url": "https://github.com/sindresorhus/unique-random/issues" 32 | }, 33 | "bundleDependencies": false, 34 | "deprecated": false, 35 | "description": "Generate random numbers that are consecutively unique", 36 | "devDependencies": { 37 | "ava": "^1.4.1", 38 | "tsd": "^0.7.2", 39 | "xo": "^0.24.0" 40 | }, 41 | "engines": { 42 | "node": ">=6" 43 | }, 44 | "files": [ 45 | "index.js", 46 | "index.d.ts" 47 | ], 48 | "homepage": "https://github.com/sindresorhus/unique-random#readme", 49 | "keywords": [ 50 | "unique", 51 | "random", 52 | "number", 53 | "single", 54 | "generate", 55 | "non-repeating", 56 | "consecutively" 57 | ], 58 | "license": "MIT", 59 | "name": "unique-random", 60 | "repository": { 61 | "type": "git", 62 | "url": "git+https://github.com/sindresorhus/unique-random.git" 63 | }, 64 | "scripts": { 65 | "test": "xo && ava && tsd" 66 | }, 67 | "version": "2.1.0" 68 | } 69 | -------------------------------------------------------------------------------- /intro-to-node/node_modules/unique-random/readme.md: -------------------------------------------------------------------------------- 1 | # unique-random [![Build Status](https://travis-ci.org/sindresorhus/unique-random.svg?branch=master)](https://travis-ci.org/sindresorhus/unique-random) 2 | 3 | > Generate random numbers that are consecutively unique 4 | 5 | Useful for things like slideshows where you don't want to have the same slide twice in a row. 6 | 7 | 8 | ## Install 9 | 10 | ``` 11 | $ npm install unique-random 12 | ``` 13 | 14 | 15 | ## Usage 16 | 17 | ```js 18 | const uniqueRandom = require('unique-random'); 19 | 20 | const random = uniqueRandom(1, 10); 21 | 22 | console.log(random(), random(), random()); 23 | //=> 5 2 6 24 | ``` 25 | 26 | 27 | ## API 28 | 29 | ### uniqueRandom(minimum, maximum) 30 | 31 | Returns a function, that when called, will return a random number that is never the same as the previous. 32 | 33 | 34 | ## Related 35 | 36 | - [unique-random-array](https://github.com/sindresorhus/unique-random-array) - Get consecutively unique elements from an array 37 | - [random-int](https://github.com/sindresorhus/random-int) - Generate a random integer 38 | - [random-float](https://github.com/sindresorhus/random-float) - Generate a random float 39 | - [random-item](https://github.com/sindresorhus/random-item) - Get a random item from an array 40 | - [random-obj-key](https://github.com/sindresorhus/random-obj-key) - Get a random key from an object 41 | - [random-obj-prop](https://github.com/sindresorhus/random-obj-prop) - Get a random property from an object 42 | - [unique-random-at-depth](https://github.com/Aweary/unique-random-at-depth) - This module with an optional depth argument 43 | - [crypto-random-string](https://github.com/sindresorhus/crypto-random-string) - Generate a cryptographically strong random string 44 | 45 | 46 | ## License 47 | 48 | MIT © [Sindre Sorhus](https://sindresorhus.com) 49 | -------------------------------------------------------------------------------- /intro-to-node/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "intro-to-node", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "superheroes": { 8 | "version": "3.0.0", 9 | "resolved": "https://registry.npmjs.org/superheroes/-/superheroes-3.0.0.tgz", 10 | "integrity": "sha512-XXXzeKHMnf0rmZItYkGU803JlqYpoxvxzKFoe6k8C4bolcKfLZH716Rm4DyNJhxPTurbzDEB/QC7TXGsoei+ew==", 11 | "requires": { 12 | "unique-random-array": "^2.0.0" 13 | } 14 | }, 15 | "supervillains": { 16 | "version": "3.0.0", 17 | "resolved": "https://registry.npmjs.org/supervillains/-/supervillains-3.0.0.tgz", 18 | "integrity": "sha512-L3vram05h2SLW8eeHff0JmXA+P0kYI/Be9t5JXLFmV7vJ3tnBC1es5Sg0ym70CgeolowMObR5Jl+xpEv5bSvZg==", 19 | "requires": { 20 | "unique-random-array": "^2.0.0" 21 | } 22 | }, 23 | "unique-random": { 24 | "version": "2.1.0", 25 | "resolved": "https://registry.npmjs.org/unique-random/-/unique-random-2.1.0.tgz", 26 | "integrity": "sha512-iQ1ZgWac3b8YxGThecQFRQiqgk6xFERRwHZIWeVVsqlbmgCRl0PY13R4mUkodNgctmg5b5odG1nyW/IbOxQTqg==" 27 | }, 28 | "unique-random-array": { 29 | "version": "2.0.0", 30 | "resolved": "https://registry.npmjs.org/unique-random-array/-/unique-random-array-2.0.0.tgz", 31 | "integrity": "sha512-xR87O95fZ7hljw84J8r1YDXrvffPLWN513BNOP4Bv0KcgG5dyEUrHwsvP7mVAOKg4Y80uqRbpUk0GKr8il70qg==", 32 | "requires": { 33 | "unique-random": "^2.1.0" 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /intro-to-node/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "intro-to-node", 3 | "version": "1.0.0", 4 | "description": "This is intro to node project.", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "Deepa Subramanian", 10 | "license": "ISC", 11 | "dependencies": { 12 | "superheroes": "^3.0.0", 13 | "supervillains": "^3.0.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /jQuery/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | jQuery 6 | 7 | 8 | 9 |

Hello

10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /jQuery/index.js: -------------------------------------------------------------------------------- 1 | 2 | $(document).ready(function(){ 3 | $("h1").css("color","red"); 4 | }); 5 | 6 | //Changing Text attributes 7 | // $("h1").text("Bye"); 8 | // $("button").text("Don't Click Me"); 9 | // $("button").html("HEY"); 10 | 11 | // Add events such as Clicks 12 | 13 | // $("button").click(function(){ 14 | // $("h1").css("color","purple"); 15 | // }); 16 | 17 | $(document).keydown(function(event){ 18 | // console.log(event.key); 19 | $("h1").text(event.key); 20 | }); 21 | -------------------------------------------------------------------------------- /jQuery/styles.css: -------------------------------------------------------------------------------- 1 | body{ 2 | background-color: cyan; 3 | } 4 | 5 | .big-heading{ 6 | font-size: 10rem; 7 | font-family: cursive; 8 | color: yellow; 9 | } 10 | -------------------------------------------------------------------------------- /todolist-v1/app.js: -------------------------------------------------------------------------------- 1 | // jshint esversion:6 2 | 3 | const express = require("express"); 4 | const bodyParser = require("body-parser"); 5 | const date = require(__dirname+"/date.js"); 6 | 7 | const app = express(); 8 | //place below the const app = exress(); 9 | //copy exactly the same. 10 | const items = ["Buy Food", "Cook Food", "Eat Food"]; 11 | const workItems = []; 12 | 13 | app.set('view engine', 'ejs'); 14 | app.use(bodyParser.urlencoded({extended: true})); 15 | app.use(express.static("public")); // to be able to access css in list.ejs 16 | 17 | //GET function for home route 18 | app.get ("/", function(req,res){ 19 | const day = date.getDate(); //date module from date.js 20 | res.render("list", {listTitle:day, newListItems: items}); 21 | 22 | }); 23 | //POST function for home route 24 | app.post("/", function(req, res){ 25 | // console.log(req.body); 26 | const item = req.body.newItem; 27 | 28 | if(req.body.list === "Work list"){ 29 | workItems.push(item); 30 | res.redirect ("/work"); 31 | }else{ 32 | items.push(item); 33 | res.redirect ("/"); 34 | } 35 | }); 36 | //GET function for Work route 37 | app.get("/work", function(req,res){ 38 | res.render("list", {listTitle:"Work list", newListItems:workItems}); 39 | }); 40 | 41 | //POST function for home route 42 | app.post("/work", function(req,res){ 43 | const item = req.body.newItem; 44 | workItems.push(item); 45 | res.redirect("/work"); 46 | }); 47 | 48 | //GET function for About route 49 | 50 | app.get("/about", function(req,res){ 51 | res.render("about"); 52 | }); 53 | 54 | 55 | app.listen(3000, function(){ 56 | console.log("Server is running on port 3000"); 57 | }); 58 | -------------------------------------------------------------------------------- /todolist-v1/date.js: -------------------------------------------------------------------------------- 1 | //jshint esversion:6 2 | 3 | exports.getDate = function(){ 4 | 5 | const today = new Date(); 6 | 7 | const options = { 8 | weekday: 'long', 9 | month: 'long', 10 | day: 'numeric' 11 | }; 12 | 13 | return today.toLocaleDateString("en-US", options); 14 | 15 | }; 16 | 17 | exports.getDay = function (){ 18 | 19 | const today = new Date(); 20 | 21 | const options = { 22 | weekday: 'long' 23 | }; 24 | 25 | return today.toLocaleDateString("en-US", options); 26 | 27 | }; 28 | -------------------------------------------------------------------------------- /todolist-v1/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | To do List 6 | 7 | 8 |

It's a weekday, even better!

9 |

It's going to be an awesome week.

10 | 11 | 12 | -------------------------------------------------------------------------------- /todolist-v1/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "todolist-v1", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "accepts": { 8 | "version": "1.3.7", 9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 10 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 11 | "requires": { 12 | "mime-types": "~2.1.24", 13 | "negotiator": "0.6.2" 14 | } 15 | }, 16 | "ansi-styles": { 17 | "version": "3.2.1", 18 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 19 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 20 | "requires": { 21 | "color-convert": "^1.9.0" 22 | } 23 | }, 24 | "array-flatten": { 25 | "version": "1.1.1", 26 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 27 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 28 | }, 29 | "async": { 30 | "version": "0.9.2", 31 | "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", 32 | "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" 33 | }, 34 | "balanced-match": { 35 | "version": "1.0.0", 36 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 37 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 38 | }, 39 | "body-parser": { 40 | "version": "1.19.0", 41 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", 42 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", 43 | "requires": { 44 | "bytes": "3.1.0", 45 | "content-type": "~1.0.4", 46 | "debug": "2.6.9", 47 | "depd": "~1.1.2", 48 | "http-errors": "1.7.2", 49 | "iconv-lite": "0.4.24", 50 | "on-finished": "~2.3.0", 51 | "qs": "6.7.0", 52 | "raw-body": "2.4.0", 53 | "type-is": "~1.6.17" 54 | } 55 | }, 56 | "brace-expansion": { 57 | "version": "1.1.11", 58 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 59 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 60 | "requires": { 61 | "balanced-match": "^1.0.0", 62 | "concat-map": "0.0.1" 63 | } 64 | }, 65 | "bytes": { 66 | "version": "3.1.0", 67 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 68 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 69 | }, 70 | "chalk": { 71 | "version": "2.4.2", 72 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 73 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 74 | "requires": { 75 | "ansi-styles": "^3.2.1", 76 | "escape-string-regexp": "^1.0.5", 77 | "supports-color": "^5.3.0" 78 | } 79 | }, 80 | "color-convert": { 81 | "version": "1.9.3", 82 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 83 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 84 | "requires": { 85 | "color-name": "1.1.3" 86 | } 87 | }, 88 | "color-name": { 89 | "version": "1.1.3", 90 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 91 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 92 | }, 93 | "concat-map": { 94 | "version": "0.0.1", 95 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 96 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 97 | }, 98 | "content-disposition": { 99 | "version": "0.5.3", 100 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", 101 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", 102 | "requires": { 103 | "safe-buffer": "5.1.2" 104 | } 105 | }, 106 | "content-type": { 107 | "version": "1.0.4", 108 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 109 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 110 | }, 111 | "cookie": { 112 | "version": "0.4.0", 113 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", 114 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" 115 | }, 116 | "cookie-signature": { 117 | "version": "1.0.6", 118 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 119 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 120 | }, 121 | "debug": { 122 | "version": "2.6.9", 123 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 124 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 125 | "requires": { 126 | "ms": "2.0.0" 127 | } 128 | }, 129 | "depd": { 130 | "version": "1.1.2", 131 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 132 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 133 | }, 134 | "destroy": { 135 | "version": "1.0.4", 136 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 137 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 138 | }, 139 | "ee-first": { 140 | "version": "1.1.1", 141 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 142 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 143 | }, 144 | "ejs": { 145 | "version": "3.1.5", 146 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.5.tgz", 147 | "integrity": "sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w==", 148 | "requires": { 149 | "jake": "^10.6.1" 150 | } 151 | }, 152 | "encodeurl": { 153 | "version": "1.0.2", 154 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 155 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 156 | }, 157 | "escape-html": { 158 | "version": "1.0.3", 159 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 160 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 161 | }, 162 | "escape-string-regexp": { 163 | "version": "1.0.5", 164 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 165 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 166 | }, 167 | "etag": { 168 | "version": "1.8.1", 169 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 170 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 171 | }, 172 | "express": { 173 | "version": "4.17.1", 174 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", 175 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", 176 | "requires": { 177 | "accepts": "~1.3.7", 178 | "array-flatten": "1.1.1", 179 | "body-parser": "1.19.0", 180 | "content-disposition": "0.5.3", 181 | "content-type": "~1.0.4", 182 | "cookie": "0.4.0", 183 | "cookie-signature": "1.0.6", 184 | "debug": "2.6.9", 185 | "depd": "~1.1.2", 186 | "encodeurl": "~1.0.2", 187 | "escape-html": "~1.0.3", 188 | "etag": "~1.8.1", 189 | "finalhandler": "~1.1.2", 190 | "fresh": "0.5.2", 191 | "merge-descriptors": "1.0.1", 192 | "methods": "~1.1.2", 193 | "on-finished": "~2.3.0", 194 | "parseurl": "~1.3.3", 195 | "path-to-regexp": "0.1.7", 196 | "proxy-addr": "~2.0.5", 197 | "qs": "6.7.0", 198 | "range-parser": "~1.2.1", 199 | "safe-buffer": "5.1.2", 200 | "send": "0.17.1", 201 | "serve-static": "1.14.1", 202 | "setprototypeof": "1.1.1", 203 | "statuses": "~1.5.0", 204 | "type-is": "~1.6.18", 205 | "utils-merge": "1.0.1", 206 | "vary": "~1.1.2" 207 | } 208 | }, 209 | "filelist": { 210 | "version": "1.0.1", 211 | "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.1.tgz", 212 | "integrity": "sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ==", 213 | "requires": { 214 | "minimatch": "^3.0.4" 215 | } 216 | }, 217 | "finalhandler": { 218 | "version": "1.1.2", 219 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", 220 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 221 | "requires": { 222 | "debug": "2.6.9", 223 | "encodeurl": "~1.0.2", 224 | "escape-html": "~1.0.3", 225 | "on-finished": "~2.3.0", 226 | "parseurl": "~1.3.3", 227 | "statuses": "~1.5.0", 228 | "unpipe": "~1.0.0" 229 | } 230 | }, 231 | "forwarded": { 232 | "version": "0.1.2", 233 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 234 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 235 | }, 236 | "fresh": { 237 | "version": "0.5.2", 238 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 239 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 240 | }, 241 | "has-flag": { 242 | "version": "3.0.0", 243 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 244 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 245 | }, 246 | "http-errors": { 247 | "version": "1.7.2", 248 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 249 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 250 | "requires": { 251 | "depd": "~1.1.2", 252 | "inherits": "2.0.3", 253 | "setprototypeof": "1.1.1", 254 | "statuses": ">= 1.5.0 < 2", 255 | "toidentifier": "1.0.0" 256 | } 257 | }, 258 | "iconv-lite": { 259 | "version": "0.4.24", 260 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 261 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 262 | "requires": { 263 | "safer-buffer": ">= 2.1.2 < 3" 264 | } 265 | }, 266 | "inherits": { 267 | "version": "2.0.3", 268 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 269 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 270 | }, 271 | "ipaddr.js": { 272 | "version": "1.9.1", 273 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 274 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 275 | }, 276 | "jake": { 277 | "version": "10.8.2", 278 | "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", 279 | "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", 280 | "requires": { 281 | "async": "0.9.x", 282 | "chalk": "^2.4.2", 283 | "filelist": "^1.0.1", 284 | "minimatch": "^3.0.4" 285 | } 286 | }, 287 | "media-typer": { 288 | "version": "0.3.0", 289 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 290 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 291 | }, 292 | "merge-descriptors": { 293 | "version": "1.0.1", 294 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 295 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 296 | }, 297 | "methods": { 298 | "version": "1.1.2", 299 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 300 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 301 | }, 302 | "mime": { 303 | "version": "1.6.0", 304 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 305 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 306 | }, 307 | "mime-db": { 308 | "version": "1.44.0", 309 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", 310 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" 311 | }, 312 | "mime-types": { 313 | "version": "2.1.27", 314 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", 315 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", 316 | "requires": { 317 | "mime-db": "1.44.0" 318 | } 319 | }, 320 | "minimatch": { 321 | "version": "3.0.4", 322 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 323 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 324 | "requires": { 325 | "brace-expansion": "^1.1.7" 326 | } 327 | }, 328 | "ms": { 329 | "version": "2.0.0", 330 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 331 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 332 | }, 333 | "negotiator": { 334 | "version": "0.6.2", 335 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 336 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 337 | }, 338 | "on-finished": { 339 | "version": "2.3.0", 340 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 341 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 342 | "requires": { 343 | "ee-first": "1.1.1" 344 | } 345 | }, 346 | "parseurl": { 347 | "version": "1.3.3", 348 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 349 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 350 | }, 351 | "path-to-regexp": { 352 | "version": "0.1.7", 353 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 354 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 355 | }, 356 | "proxy-addr": { 357 | "version": "2.0.6", 358 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", 359 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", 360 | "requires": { 361 | "forwarded": "~0.1.2", 362 | "ipaddr.js": "1.9.1" 363 | } 364 | }, 365 | "qs": { 366 | "version": "6.7.0", 367 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", 368 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" 369 | }, 370 | "range-parser": { 371 | "version": "1.2.1", 372 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 373 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 374 | }, 375 | "raw-body": { 376 | "version": "2.4.0", 377 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", 378 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", 379 | "requires": { 380 | "bytes": "3.1.0", 381 | "http-errors": "1.7.2", 382 | "iconv-lite": "0.4.24", 383 | "unpipe": "1.0.0" 384 | } 385 | }, 386 | "safe-buffer": { 387 | "version": "5.1.2", 388 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 389 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 390 | }, 391 | "safer-buffer": { 392 | "version": "2.1.2", 393 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 394 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 395 | }, 396 | "send": { 397 | "version": "0.17.1", 398 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", 399 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", 400 | "requires": { 401 | "debug": "2.6.9", 402 | "depd": "~1.1.2", 403 | "destroy": "~1.0.4", 404 | "encodeurl": "~1.0.2", 405 | "escape-html": "~1.0.3", 406 | "etag": "~1.8.1", 407 | "fresh": "0.5.2", 408 | "http-errors": "~1.7.2", 409 | "mime": "1.6.0", 410 | "ms": "2.1.1", 411 | "on-finished": "~2.3.0", 412 | "range-parser": "~1.2.1", 413 | "statuses": "~1.5.0" 414 | }, 415 | "dependencies": { 416 | "ms": { 417 | "version": "2.1.1", 418 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 419 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" 420 | } 421 | } 422 | }, 423 | "serve-static": { 424 | "version": "1.14.1", 425 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", 426 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", 427 | "requires": { 428 | "encodeurl": "~1.0.2", 429 | "escape-html": "~1.0.3", 430 | "parseurl": "~1.3.3", 431 | "send": "0.17.1" 432 | } 433 | }, 434 | "setprototypeof": { 435 | "version": "1.1.1", 436 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 437 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 438 | }, 439 | "statuses": { 440 | "version": "1.5.0", 441 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 442 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 443 | }, 444 | "supports-color": { 445 | "version": "5.5.0", 446 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 447 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 448 | "requires": { 449 | "has-flag": "^3.0.0" 450 | } 451 | }, 452 | "toidentifier": { 453 | "version": "1.0.0", 454 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 455 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 456 | }, 457 | "type-is": { 458 | "version": "1.6.18", 459 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 460 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 461 | "requires": { 462 | "media-typer": "0.3.0", 463 | "mime-types": "~2.1.24" 464 | } 465 | }, 466 | "unpipe": { 467 | "version": "1.0.0", 468 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 469 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 470 | }, 471 | "utils-merge": { 472 | "version": "1.0.1", 473 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 474 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 475 | }, 476 | "vary": { 477 | "version": "1.1.2", 478 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 479 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 480 | } 481 | } 482 | } 483 | -------------------------------------------------------------------------------- /todolist-v1/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "todolist-v1", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "app.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "Deepa Subramanian", 10 | "license": "ISC", 11 | "dependencies": { 12 | "body-parser": "^1.19.0", 13 | "ejs": "^3.1.5", 14 | "express": "^4.17.1" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /todolist-v1/public/css/styles.css: -------------------------------------------------------------------------------- 1 | html { 2 | background-color: #E4E9FD; 3 | background-image: -webkit-linear-gradient(65deg, #a6e3e9 50%, #e3fdfd 50%); 4 | min-height: 1000px; 5 | font-family: 'helvetica neue'; 6 | } 7 | 8 | h1 { 9 | color: #006a71; 10 | padding: 10px; 11 | } 12 | 13 | .box { 14 | max-width: 400px; 15 | margin: 50px auto; 16 | background: white; 17 | border-radius: 5px; 18 | box-shadow: 5px 5px 15px -5px rgba(0, 0, 0, 0.3); 19 | } 20 | 21 | #heading { 22 | background-color: #71c9ce; 23 | text-align: center; 24 | } 25 | 26 | .item { 27 | min-height: 70px; 28 | display: flex; 29 | align-items: center; 30 | border-bottom: 1px solid #F1F1F1; 31 | } 32 | 33 | .item:last-child { 34 | border-bottom: 0; 35 | } 36 | 37 | input:checked+p { 38 | text-decoration: line-through; 39 | text-decoration-color: #679b9b; 40 | } 41 | 42 | input[type="checkbox"] { 43 | margin: 20px; 44 | } 45 | 46 | p { 47 | margin: 0; 48 | padding: 20px; 49 | font-size: 20px; 50 | font-weight: 200; 51 | color: #00204a; 52 | } 53 | 54 | form { 55 | text-align: center; 56 | margin-left: 20px; 57 | } 58 | 59 | button { 60 | min-height: 50px; 61 | width: 50px; 62 | border-radius: 50%; 63 | border-color: transparent; 64 | background-color: #71c9ce; 65 | color: #fff; 66 | font-size: 30px; 67 | padding-bottom: 6px; 68 | border-width: 0; 69 | } 70 | 71 | input[type="text"] { 72 | text-align: center; 73 | height: 60px; 74 | top: 10px; 75 | border: none; 76 | background: transparent; 77 | font-size: 20px; 78 | font-weight: 200; 79 | width: 313px; 80 | } 81 | 82 | input[type="text"]:focus { 83 | outline: none; 84 | box-shadow: inset 0 -3px 0 0 #679b9b; 85 | } 86 | 87 | ::placeholder { 88 | color: grey; 89 | opacity: 1; 90 | } 91 | 92 | footer { 93 | color: white; 94 | color: rgba(0, 0, 0, 0.5); 95 | text-align: center; 96 | } 97 | -------------------------------------------------------------------------------- /todolist-v1/views/about.ejs: -------------------------------------------------------------------------------- 1 | 2 | <%- include("header") -%> 3 | 4 |

This is the about page.

5 | 6 |

7 | Hummus is a Middle Eastern invention, and I am thankful for it. Chickpeas are a sweet and nutty legume that become incredibly creamy when blended, especially once you add a few spoonfuls of sesame tahini and a healthy glug of good olive oil. Lemon juice gives the blend a tart balance, while garlic adds its own pungent punch. It’s fantastic with just these five ingredients (plus salt and pepper), but can be even better with spices like sumac, cumin, and smoked paprika. 8 |

9 | 10 | <%- include("footer") -%> 11 | -------------------------------------------------------------------------------- /todolist-v1/views/footer.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | Copyright 2020 Deepa Subramanian 5 |
6 | 7 | 8 | -------------------------------------------------------------------------------- /todolist-v1/views/header.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | To do List 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /todolist-v1/views/list.ejs: -------------------------------------------------------------------------------- 1 | <%- include("header") -%> 2 |
3 |

<%=listTitle %>

4 |
5 | 6 |
7 | <% for (let i =0 ; i 8 |
9 | 10 | 11 |

<%= newListItems[i]%>

12 |
13 | 14 | <% } %> 15 |
16 | 17 | 18 |
19 |
20 | 21 | <%# This tag comes from EJS Template%> 22 | <%# https://ejs.co/#docs%> 23 | <%# look at the Tags section%> 24 | 25 | <%- include("footer") -%> 26 | -------------------------------------------------------------------------------- /todolist-v2-completed/Procfile: -------------------------------------------------------------------------------- 1 | web: node app.js 2 | -------------------------------------------------------------------------------- /todolist-v2-completed/app.js: -------------------------------------------------------------------------------- 1 | //jshint esversion:6 2 | 3 | const express = require("express"); 4 | const bodyParser = require("body-parser"); 5 | const mongoose = require("mongoose"); 6 | const _ = require("lodash"); 7 | 8 | const app = express(); 9 | 10 | app.set('view engine', 'ejs'); 11 | 12 | app.use(bodyParser.urlencoded({extended: true})); 13 | app.use(express.static("public")); 14 | 15 | mongoose.connect("mongoDb/todolistDB", {useNewUrlParser: true}); 16 | 17 | const itemsSchema = { 18 | name: String 19 | }; 20 | 21 | const Item = mongoose.model("Item", itemsSchema); 22 | 23 | 24 | const item1 = new Item({ 25 | name: "Welcome to your todolist!" 26 | }); 27 | 28 | const item2 = new Item({ 29 | name: "Tap + button to add an item." 30 | }); 31 | 32 | const item3 = new Item({ 33 | name: "click checkbox to delete item." 34 | }); 35 | 36 | const defaultItems = [item1, item2, item3]; 37 | 38 | const listSchema = { 39 | name: String, 40 | items: [itemsSchema] 41 | }; 42 | 43 | const List = mongoose.model("List", listSchema); 44 | 45 | 46 | app.get("/", function(req, res) { 47 | 48 | Item.find({}, function(err, foundItems){ 49 | 50 | if (foundItems.length === 0) { 51 | Item.insertMany(defaultItems, function(err){ 52 | if (err) { 53 | console.log(err); 54 | } else { 55 | console.log("Successfully saved default items to DB."); 56 | } 57 | }); 58 | res.redirect("/"); 59 | } else { 60 | res.render("list", {listTitle: "Today", newListItems: foundItems}); 61 | } 62 | }); 63 | 64 | }); 65 | 66 | app.get("/:customListName", function(req, res){ 67 | const customListName = _.capitalize(req.params.customListName); 68 | 69 | List.findOne({name: customListName}, function(err, foundList){ 70 | if (!err){ 71 | if (!foundList){ 72 | //Create a new list 73 | const list = new List({ 74 | name: customListName, 75 | items: defaultItems 76 | }); 77 | list.save(); 78 | res.redirect("/" + customListName); 79 | } else { 80 | //Show an existing list 81 | 82 | res.render("list", {listTitle: foundList.name, newListItems: foundList.items}); 83 | } 84 | } 85 | }); 86 | 87 | 88 | 89 | }); 90 | 91 | app.post("/", function(req, res){ 92 | 93 | const itemName = req.body.newItem; 94 | const listName = req.body.list; 95 | 96 | const item = new Item({ 97 | name: itemName 98 | }); 99 | 100 | if (listName === "Today"){ 101 | item.save(); 102 | res.redirect("/"); 103 | } else { 104 | List.findOne({name: listName}, function(err, foundList){ 105 | foundList.items.push(item); 106 | foundList.save(); 107 | res.redirect("/" + listName); 108 | }); 109 | } 110 | }); 111 | 112 | app.post("/delete", function(req, res){ 113 | const checkedItemId = req.body.checkbox; 114 | const listName = req.body.listName; 115 | 116 | if (listName === "Today") { 117 | Item.findByIdAndRemove(checkedItemId, function(err){ 118 | if (!err) { 119 | console.log("Successfully deleted checked item."); 120 | res.redirect("/"); 121 | } 122 | }); 123 | } else { 124 | List.findOneAndUpdate({name: listName}, {$pull: {items: {_id: checkedItemId}}}, function(err, foundList){ 125 | if (!err){ 126 | res.redirect("/" + listName); 127 | } 128 | }); 129 | } 130 | 131 | 132 | }); 133 | 134 | app.get("/about", function(req, res){ 135 | res.render("about"); 136 | }); 137 | let port = process.env.PORT; 138 | if (port == null || port == "") { 139 | port = 3000; 140 | } 141 | 142 | app.listen(port, function() { 143 | console.log("Server has started in port 3000 successfully"); 144 | }); 145 | -------------------------------------------------------------------------------- /todolist-v2-completed/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | To Do List 6 | 7 | 8 |

It's a weekday!

9 |

Why are you not working!

10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /todolist-v2-completed/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "todolist-v1", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "accepts": { 8 | "version": "1.3.5", 9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", 10 | "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", 11 | "requires": { 12 | "mime-types": "~2.1.18", 13 | "negotiator": "0.6.1" 14 | } 15 | }, 16 | "array-flatten": { 17 | "version": "1.1.1", 18 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 19 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 20 | }, 21 | "async": { 22 | "version": "2.6.1", 23 | "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", 24 | "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", 25 | "requires": { 26 | "lodash": "^4.17.10" 27 | } 28 | }, 29 | "bluebird": { 30 | "version": "3.5.1", 31 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", 32 | "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" 33 | }, 34 | "body-parser": { 35 | "version": "1.18.3", 36 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", 37 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", 38 | "requires": { 39 | "bytes": "3.0.0", 40 | "content-type": "~1.0.4", 41 | "debug": "2.6.9", 42 | "depd": "~1.1.2", 43 | "http-errors": "~1.6.3", 44 | "iconv-lite": "0.4.23", 45 | "on-finished": "~2.3.0", 46 | "qs": "6.5.2", 47 | "raw-body": "2.3.3", 48 | "type-is": "~1.6.16" 49 | } 50 | }, 51 | "bson": { 52 | "version": "1.0.9", 53 | "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.9.tgz", 54 | "integrity": "sha512-IQX9/h7WdMBIW/q/++tGd+emQr0XMdeZ6icnT/74Xk9fnabWn+gZgpE+9V+gujL3hhJOoNrnDVY7tWdzc7NUTg==" 55 | }, 56 | "bytes": { 57 | "version": "3.0.0", 58 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 59 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" 60 | }, 61 | "content-disposition": { 62 | "version": "0.5.2", 63 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 64 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" 65 | }, 66 | "content-type": { 67 | "version": "1.0.4", 68 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 69 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 70 | }, 71 | "cookie": { 72 | "version": "0.3.1", 73 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 74 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 75 | }, 76 | "cookie-signature": { 77 | "version": "1.0.6", 78 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 79 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 80 | }, 81 | "debug": { 82 | "version": "2.6.9", 83 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 84 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 85 | "requires": { 86 | "ms": "2.0.0" 87 | } 88 | }, 89 | "depd": { 90 | "version": "1.1.2", 91 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 92 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 93 | }, 94 | "destroy": { 95 | "version": "1.0.4", 96 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 97 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 98 | }, 99 | "ee-first": { 100 | "version": "1.1.1", 101 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 102 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 103 | }, 104 | "ejs": { 105 | "version": "2.6.1", 106 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", 107 | "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==" 108 | }, 109 | "encodeurl": { 110 | "version": "1.0.2", 111 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 112 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 113 | }, 114 | "escape-html": { 115 | "version": "1.0.3", 116 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 117 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 118 | }, 119 | "etag": { 120 | "version": "1.8.1", 121 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 122 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 123 | }, 124 | "express": { 125 | "version": "4.16.3", 126 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", 127 | "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", 128 | "requires": { 129 | "accepts": "~1.3.5", 130 | "array-flatten": "1.1.1", 131 | "body-parser": "1.18.2", 132 | "content-disposition": "0.5.2", 133 | "content-type": "~1.0.4", 134 | "cookie": "0.3.1", 135 | "cookie-signature": "1.0.6", 136 | "debug": "2.6.9", 137 | "depd": "~1.1.2", 138 | "encodeurl": "~1.0.2", 139 | "escape-html": "~1.0.3", 140 | "etag": "~1.8.1", 141 | "finalhandler": "1.1.1", 142 | "fresh": "0.5.2", 143 | "merge-descriptors": "1.0.1", 144 | "methods": "~1.1.2", 145 | "on-finished": "~2.3.0", 146 | "parseurl": "~1.3.2", 147 | "path-to-regexp": "0.1.7", 148 | "proxy-addr": "~2.0.3", 149 | "qs": "6.5.1", 150 | "range-parser": "~1.2.0", 151 | "safe-buffer": "5.1.1", 152 | "send": "0.16.2", 153 | "serve-static": "1.13.2", 154 | "setprototypeof": "1.1.0", 155 | "statuses": "~1.4.0", 156 | "type-is": "~1.6.16", 157 | "utils-merge": "1.0.1", 158 | "vary": "~1.1.2" 159 | }, 160 | "dependencies": { 161 | "body-parser": { 162 | "version": "1.18.2", 163 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", 164 | "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", 165 | "requires": { 166 | "bytes": "3.0.0", 167 | "content-type": "~1.0.4", 168 | "debug": "2.6.9", 169 | "depd": "~1.1.1", 170 | "http-errors": "~1.6.2", 171 | "iconv-lite": "0.4.19", 172 | "on-finished": "~2.3.0", 173 | "qs": "6.5.1", 174 | "raw-body": "2.3.2", 175 | "type-is": "~1.6.15" 176 | } 177 | }, 178 | "iconv-lite": { 179 | "version": "0.4.19", 180 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", 181 | "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" 182 | }, 183 | "qs": { 184 | "version": "6.5.1", 185 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", 186 | "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" 187 | }, 188 | "raw-body": { 189 | "version": "2.3.2", 190 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", 191 | "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", 192 | "requires": { 193 | "bytes": "3.0.0", 194 | "http-errors": "1.6.2", 195 | "iconv-lite": "0.4.19", 196 | "unpipe": "1.0.0" 197 | }, 198 | "dependencies": { 199 | "depd": { 200 | "version": "1.1.1", 201 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", 202 | "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" 203 | }, 204 | "http-errors": { 205 | "version": "1.6.2", 206 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", 207 | "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", 208 | "requires": { 209 | "depd": "1.1.1", 210 | "inherits": "2.0.3", 211 | "setprototypeof": "1.0.3", 212 | "statuses": ">= 1.3.1 < 2" 213 | } 214 | }, 215 | "setprototypeof": { 216 | "version": "1.0.3", 217 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", 218 | "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" 219 | } 220 | } 221 | }, 222 | "statuses": { 223 | "version": "1.4.0", 224 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 225 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 226 | } 227 | } 228 | }, 229 | "finalhandler": { 230 | "version": "1.1.1", 231 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", 232 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", 233 | "requires": { 234 | "debug": "2.6.9", 235 | "encodeurl": "~1.0.2", 236 | "escape-html": "~1.0.3", 237 | "on-finished": "~2.3.0", 238 | "parseurl": "~1.3.2", 239 | "statuses": "~1.4.0", 240 | "unpipe": "~1.0.0" 241 | }, 242 | "dependencies": { 243 | "statuses": { 244 | "version": "1.4.0", 245 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 246 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 247 | } 248 | } 249 | }, 250 | "forwarded": { 251 | "version": "0.1.2", 252 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 253 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 254 | }, 255 | "fresh": { 256 | "version": "0.5.2", 257 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 258 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 259 | }, 260 | "http-errors": { 261 | "version": "1.6.3", 262 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 263 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 264 | "requires": { 265 | "depd": "~1.1.2", 266 | "inherits": "2.0.3", 267 | "setprototypeof": "1.1.0", 268 | "statuses": ">= 1.4.0 < 2" 269 | } 270 | }, 271 | "iconv-lite": { 272 | "version": "0.4.23", 273 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", 274 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", 275 | "requires": { 276 | "safer-buffer": ">= 2.1.2 < 3" 277 | } 278 | }, 279 | "inherits": { 280 | "version": "2.0.3", 281 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 282 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 283 | }, 284 | "ipaddr.js": { 285 | "version": "1.6.0", 286 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", 287 | "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" 288 | }, 289 | "kareem": { 290 | "version": "2.3.0", 291 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.0.tgz", 292 | "integrity": "sha512-6hHxsp9e6zQU8nXsP+02HGWXwTkOEw6IROhF2ZA28cYbUk4eJ6QbtZvdqZOdD9YPKghG3apk5eOCvs+tLl3lRg==" 293 | }, 294 | "lodash": { 295 | "version": "4.17.11", 296 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", 297 | "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" 298 | }, 299 | "lodash.get": { 300 | "version": "4.4.2", 301 | "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", 302 | "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" 303 | }, 304 | "media-typer": { 305 | "version": "0.3.0", 306 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 307 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 308 | }, 309 | "memory-pager": { 310 | "version": "1.1.0", 311 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.1.0.tgz", 312 | "integrity": "sha512-Mf9OHV/Y7h6YWDxTzX/b4ZZ4oh9NSXblQL8dtPCOomOtZciEHxePR78+uHFLLlsk01A6jVHhHsQZZ/WcIPpnzg==", 313 | "optional": true 314 | }, 315 | "merge-descriptors": { 316 | "version": "1.0.1", 317 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 318 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 319 | }, 320 | "methods": { 321 | "version": "1.1.2", 322 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 323 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 324 | }, 325 | "mime": { 326 | "version": "1.4.1", 327 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 328 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" 329 | }, 330 | "mime-db": { 331 | "version": "1.33.0", 332 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", 333 | "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" 334 | }, 335 | "mime-types": { 336 | "version": "2.1.18", 337 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", 338 | "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", 339 | "requires": { 340 | "mime-db": "~1.33.0" 341 | } 342 | }, 343 | "mongodb": { 344 | "version": "3.1.6", 345 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.1.6.tgz", 346 | "integrity": "sha512-E5QJuXQoMlT7KyCYqNNMfAkhfQD79AT4F8Xd+6x37OX+8BL17GyXyWvfm6wuyx4wnzCCPoCSLeMeUN2S7dU9yw==", 347 | "requires": { 348 | "mongodb-core": "3.1.5", 349 | "safe-buffer": "^5.1.2" 350 | }, 351 | "dependencies": { 352 | "safe-buffer": { 353 | "version": "5.1.2", 354 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 355 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 356 | } 357 | } 358 | }, 359 | "mongodb-core": { 360 | "version": "3.1.5", 361 | "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.1.5.tgz", 362 | "integrity": "sha512-emT/tM4ZBinqd6RZok+EzDdtN4LjYJIckv71qQVOEFmvXgT5cperZegVmTgox/1cx4XQu6LJ5ZuIwipP/eKdQg==", 363 | "requires": { 364 | "bson": "^1.1.0", 365 | "require_optional": "^1.0.1", 366 | "safe-buffer": "^5.1.2", 367 | "saslprep": "^1.0.0" 368 | }, 369 | "dependencies": { 370 | "bson": { 371 | "version": "1.1.0", 372 | "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.0.tgz", 373 | "integrity": "sha512-9Aeai9TacfNtWXOYarkFJRW2CWo+dRon+fuLZYJmvLV3+MiUp0bEI6IAZfXEIg7/Pl/7IWlLaDnhzTsD81etQA==" 374 | }, 375 | "safe-buffer": { 376 | "version": "5.1.2", 377 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 378 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 379 | } 380 | } 381 | }, 382 | "mongoose": { 383 | "version": "5.3.4", 384 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.3.4.tgz", 385 | "integrity": "sha512-DIUWOyYgZv2zGi/BoFEaFiaCVuDonnzGhW3cnc3JFjBScYn6z24tS2j3VB0dtMoX8FFjxmmMVnlmHPEIbV4PKA==", 386 | "requires": { 387 | "async": "2.6.1", 388 | "bson": "~1.0.5", 389 | "kareem": "2.3.0", 390 | "lodash.get": "4.4.2", 391 | "mongodb": "3.1.6", 392 | "mongodb-core": "3.1.5", 393 | "mongoose-legacy-pluralize": "1.0.2", 394 | "mpath": "0.5.1", 395 | "mquery": "3.2.0", 396 | "ms": "2.0.0", 397 | "regexp-clone": "0.0.1", 398 | "safe-buffer": "5.1.2", 399 | "sliced": "1.0.1" 400 | }, 401 | "dependencies": { 402 | "safe-buffer": { 403 | "version": "5.1.2", 404 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 405 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 406 | } 407 | } 408 | }, 409 | "mongoose-legacy-pluralize": { 410 | "version": "1.0.2", 411 | "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", 412 | "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" 413 | }, 414 | "mpath": { 415 | "version": "0.5.1", 416 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.5.1.tgz", 417 | "integrity": "sha512-H8OVQ+QEz82sch4wbODFOz+3YQ61FYz/z3eJ5pIdbMEaUzDqA268Wd+Vt4Paw9TJfvDgVKaayC0gBzMIw2jhsg==" 418 | }, 419 | "mquery": { 420 | "version": "3.2.0", 421 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.0.tgz", 422 | "integrity": "sha512-qPJcdK/yqcbQiKoemAt62Y0BAc0fTEKo1IThodBD+O5meQRJT/2HSe5QpBNwaa4CjskoGrYWsEyjkqgiE0qjhg==", 423 | "requires": { 424 | "bluebird": "3.5.1", 425 | "debug": "3.1.0", 426 | "regexp-clone": "0.0.1", 427 | "safe-buffer": "5.1.2", 428 | "sliced": "1.0.1" 429 | }, 430 | "dependencies": { 431 | "debug": { 432 | "version": "3.1.0", 433 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 434 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 435 | "requires": { 436 | "ms": "2.0.0" 437 | } 438 | }, 439 | "safe-buffer": { 440 | "version": "5.1.2", 441 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 442 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 443 | } 444 | } 445 | }, 446 | "ms": { 447 | "version": "2.0.0", 448 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 449 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 450 | }, 451 | "negotiator": { 452 | "version": "0.6.1", 453 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 454 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" 455 | }, 456 | "on-finished": { 457 | "version": "2.3.0", 458 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 459 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 460 | "requires": { 461 | "ee-first": "1.1.1" 462 | } 463 | }, 464 | "parseurl": { 465 | "version": "1.3.2", 466 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", 467 | "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" 468 | }, 469 | "path-to-regexp": { 470 | "version": "0.1.7", 471 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 472 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 473 | }, 474 | "proxy-addr": { 475 | "version": "2.0.3", 476 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", 477 | "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", 478 | "requires": { 479 | "forwarded": "~0.1.2", 480 | "ipaddr.js": "1.6.0" 481 | } 482 | }, 483 | "qs": { 484 | "version": "6.5.2", 485 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 486 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 487 | }, 488 | "range-parser": { 489 | "version": "1.2.0", 490 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 491 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" 492 | }, 493 | "raw-body": { 494 | "version": "2.3.3", 495 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", 496 | "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", 497 | "requires": { 498 | "bytes": "3.0.0", 499 | "http-errors": "1.6.3", 500 | "iconv-lite": "0.4.23", 501 | "unpipe": "1.0.0" 502 | } 503 | }, 504 | "regexp-clone": { 505 | "version": "0.0.1", 506 | "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", 507 | "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=" 508 | }, 509 | "require_optional": { 510 | "version": "1.0.1", 511 | "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", 512 | "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", 513 | "requires": { 514 | "resolve-from": "^2.0.0", 515 | "semver": "^5.1.0" 516 | } 517 | }, 518 | "resolve-from": { 519 | "version": "2.0.0", 520 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", 521 | "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" 522 | }, 523 | "safe-buffer": { 524 | "version": "5.1.1", 525 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 526 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" 527 | }, 528 | "safer-buffer": { 529 | "version": "2.1.2", 530 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 531 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 532 | }, 533 | "saslprep": { 534 | "version": "1.0.2", 535 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.2.tgz", 536 | "integrity": "sha512-4cDsYuAjXssUSjxHKRe4DTZC0agDwsCqcMqtJAQPzC74nJ7LfAJflAtC1Zed5hMzEQKj82d3tuzqdGNRsLJ4Gw==", 537 | "optional": true, 538 | "requires": { 539 | "sparse-bitfield": "^3.0.3" 540 | } 541 | }, 542 | "semver": { 543 | "version": "5.6.0", 544 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", 545 | "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" 546 | }, 547 | "send": { 548 | "version": "0.16.2", 549 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", 550 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", 551 | "requires": { 552 | "debug": "2.6.9", 553 | "depd": "~1.1.2", 554 | "destroy": "~1.0.4", 555 | "encodeurl": "~1.0.2", 556 | "escape-html": "~1.0.3", 557 | "etag": "~1.8.1", 558 | "fresh": "0.5.2", 559 | "http-errors": "~1.6.2", 560 | "mime": "1.4.1", 561 | "ms": "2.0.0", 562 | "on-finished": "~2.3.0", 563 | "range-parser": "~1.2.0", 564 | "statuses": "~1.4.0" 565 | }, 566 | "dependencies": { 567 | "statuses": { 568 | "version": "1.4.0", 569 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 570 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 571 | } 572 | } 573 | }, 574 | "serve-static": { 575 | "version": "1.13.2", 576 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", 577 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", 578 | "requires": { 579 | "encodeurl": "~1.0.2", 580 | "escape-html": "~1.0.3", 581 | "parseurl": "~1.3.2", 582 | "send": "0.16.2" 583 | } 584 | }, 585 | "setprototypeof": { 586 | "version": "1.1.0", 587 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 588 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 589 | }, 590 | "sliced": { 591 | "version": "1.0.1", 592 | "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", 593 | "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" 594 | }, 595 | "sparse-bitfield": { 596 | "version": "3.0.3", 597 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 598 | "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", 599 | "optional": true, 600 | "requires": { 601 | "memory-pager": "^1.0.2" 602 | } 603 | }, 604 | "statuses": { 605 | "version": "1.5.0", 606 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 607 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 608 | }, 609 | "type-is": { 610 | "version": "1.6.16", 611 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", 612 | "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", 613 | "requires": { 614 | "media-typer": "0.3.0", 615 | "mime-types": "~2.1.18" 616 | } 617 | }, 618 | "unpipe": { 619 | "version": "1.0.0", 620 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 621 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 622 | }, 623 | "utils-merge": { 624 | "version": "1.0.1", 625 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 626 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 627 | }, 628 | "vary": { 629 | "version": "1.1.2", 630 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 631 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 632 | } 633 | } 634 | } 635 | -------------------------------------------------------------------------------- /todolist-v2-completed/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "todolist-v1", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "app.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "engines": { 12 | "node": "12.18.3" 13 | }, 14 | "dependencies": { 15 | "body-parser": "^1.18.3", 16 | "ejs": "^2.6.1", 17 | "express": "^4.16.3", 18 | "lodash": "^4.17.11", 19 | "mongoose": "^5.3.4" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /todolist-v2-completed/public/css/styles.css: -------------------------------------------------------------------------------- 1 | html { 2 | background-color: #E4E9FD; 3 | background-image: -webkit-linear-gradient(65deg, #a6e3e9 50%, #e3fdfd 50%); 4 | min-height: 1000px; 5 | font-family: 'helvetica neue'; 6 | } 7 | 8 | h1 { 9 | color: #006a71; 10 | padding: 10px; 11 | } 12 | 13 | .box { 14 | max-width: 400px; 15 | margin: 50px auto; 16 | background: white; 17 | border-radius: 5px; 18 | box-shadow: 5px 5px 15px -5px rgba(0, 0, 0, 0.3); 19 | } 20 | 21 | #heading { 22 | background-color: #71c9ce; 23 | text-align: center; 24 | } 25 | 26 | .item { 27 | min-height: 70px; 28 | display: flex; 29 | align-items: center; 30 | border-bottom: 1px solid #F1F1F1; 31 | } 32 | 33 | .item:last-child { 34 | border-bottom: 0; 35 | } 36 | 37 | input:checked+p { 38 | text-decoration: line-through; 39 | text-decoration-color: #679b9b; 40 | } 41 | 42 | input[type="checkbox"] { 43 | margin: 20px; 44 | } 45 | 46 | p { 47 | margin: 0; 48 | padding: 20px; 49 | font-size: 20px; 50 | font-weight: 200; 51 | color: #00204a; 52 | } 53 | 54 | form.item { 55 | text-align: center; 56 | margin-left: 20px; 57 | } 58 | 59 | button { 60 | min-height: 50px; 61 | width: 50px; 62 | border-radius: 50%; 63 | border-color: transparent; 64 | background-color: #71c9ce; 65 | color: #fff; 66 | font-size: 30px; 67 | padding-bottom: 6px; 68 | border-width: 0; 69 | } 70 | 71 | input[type="text"] { 72 | text-align: center; 73 | height: 60px; 74 | top: 10px; 75 | border: none; 76 | background: transparent; 77 | font-size: 20px; 78 | font-weight: 200; 79 | width: 313px; 80 | } 81 | 82 | input[type="text"]:focus { 83 | outline: none; 84 | box-shadow: inset 0 -3px 0 0 #679b9b; 85 | } 86 | 87 | ::placeholder { 88 | color: grey; 89 | opacity: 1; 90 | } 91 | 92 | footer { 93 | color: white; 94 | color: rgba(0, 0, 0, 0.5); 95 | text-align: center; 96 | } 97 | -------------------------------------------------------------------------------- /todolist-v2-completed/views/about.ejs: -------------------------------------------------------------------------------- 1 | <%- include("header") -%> 2 | 3 |

About

4 | 5 |

This web application project is created by Deepa Subramanian.
6 | This is a part of the Udemy full stack web development course conducted by Angela Yu. 7 |

8 | 9 | <%- include("footer") -%> 10 | -------------------------------------------------------------------------------- /todolist-v2-completed/views/footer.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | Copyright 2020 Deepa Subramanian 7 |
8 | 9 | 10 | -------------------------------------------------------------------------------- /todolist-v2-completed/views/header.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | To Do List 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /todolist-v2-completed/views/list.ejs: -------------------------------------------------------------------------------- 1 | <%- include("header") -%> 2 | 3 |
4 |

<%= listTitle %>

5 |
6 | 7 |
8 | 9 | 10 | <% newListItems.forEach(function(item){ %> 11 | 12 |
13 |
14 | 15 |

<%=item.name%>

16 |
17 | 18 |
19 | <% }) %> 20 | 21 | 22 |
23 | 24 | 25 |
26 |
27 | 28 | <%- include("footer") -%> 29 | --------------------------------------------------------------------------------