From 62bba1537103acecacc17cc0bf277254cb45a11b Mon Sep 17 00:00:00 2001 From: Habeebah Aleilo Date: Mon, 16 Dec 2024 12:32:15 +0100 Subject: [PATCH 1/3] Add all necessary directories and files --- code/server/server-final-project/app.js | 0 .../server-final-project/package-lock.json | 820 ++++++++++++++++++ code/server/server-final-project/package.json | 15 + .../public/images/icon1.jpg | Bin 0 -> 2352 bytes .../public/images/icon2.jpg | Bin 0 -> 4332 bytes .../public/images/icon3.jpg | Bin 0 -> 2825 bytes .../public/images/icon4.jpg | Bin 0 -> 8369 bytes .../public/images/java.jpg | Bin 0 -> 9504 bytes .../public/images/javajs.png | Bin 0 -> 4225 bytes .../public/images/logo.jpg | Bin 0 -> 6216 bytes .../public/images/programming.png | Bin 0 -> 5780 bytes .../public/images/sdlc.jpg | Bin 0 -> 5639 bytes .../server-final-project/public/index.html | 125 +++ .../server-final-project/public/index.js | 36 + .../server-final-project/public/profile.html | 77 ++ .../server-final-project/public/style.css | 245 ++++++ 16 files changed, 1318 insertions(+) create mode 100644 code/server/server-final-project/app.js create mode 100644 code/server/server-final-project/package-lock.json create mode 100644 code/server/server-final-project/package.json create mode 100644 code/server/server-final-project/public/images/icon1.jpg create mode 100644 code/server/server-final-project/public/images/icon2.jpg create mode 100644 code/server/server-final-project/public/images/icon3.jpg create mode 100644 code/server/server-final-project/public/images/icon4.jpg create mode 100644 code/server/server-final-project/public/images/java.jpg create mode 100644 code/server/server-final-project/public/images/javajs.png create mode 100644 code/server/server-final-project/public/images/logo.jpg create mode 100644 code/server/server-final-project/public/images/programming.png create mode 100644 code/server/server-final-project/public/images/sdlc.jpg create mode 100644 code/server/server-final-project/public/index.html create mode 100644 code/server/server-final-project/public/index.js create mode 100644 code/server/server-final-project/public/profile.html create mode 100644 code/server/server-final-project/public/style.css diff --git a/code/server/server-final-project/app.js b/code/server/server-final-project/app.js new file mode 100644 index 00000000..e69de29b diff --git a/code/server/server-final-project/package-lock.json b/code/server/server-final-project/package-lock.json new file mode 100644 index 00000000..55ed60fb --- /dev/null +++ b/code/server/server-final-project/package-lock.json @@ -0,0 +1,820 @@ +{ + "name": "server-final-project", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "server-final-project", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "express": "^4.21.2" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", + "integrity": "sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "function-bind": "^1.1.2", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/math-intrinsics": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.0.0.tgz", + "integrity": "sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + } + } +} diff --git a/code/server/server-final-project/package.json b/code/server/server-final-project/package.json new file mode 100644 index 00000000..75aeccdf --- /dev/null +++ b/code/server/server-final-project/package.json @@ -0,0 +1,15 @@ +{ + "name": "server-final-project", + "version": "1.0.0", + "main": "app.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "express": "^4.21.2" + } +} diff --git a/code/server/server-final-project/public/images/icon1.jpg b/code/server/server-final-project/public/images/icon1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..826398fd2b19b60559d9839a9e7cc3d62c981214 GIT binary patch literal 2352 zcmb7Ec{CJi8=tYw7&FW;G?rnql&skr%b>|JV>Dz-*@c_3FOepRY$*oecF~lwjJ0fO zhBSu42wAdAD6(d$sFY9Ld(J)I`TqKT?|FacJun+|8M+~BK}u827q$!U5emF0E_|MEtU&`lcLMv0j{YI}DVTlWG|LB=wDH&rCIVvK8+bolx()jedO87x@m}f8Ofd67t9X9a zfu>fy46uCxNkA~lT}qpEzTi>T7x|! zw_D);dF%T;JiNWQKa9%V9`bS069I~;^~*yK*@>KgaDAk=A|tgiwq{g{H5b$*lc1wHY8>``!7lB&ByGJy zUFiqGl?Sf#J(HKNt%>Wj5TY+9AGuxNFe+Tt5saLEf+uvH3LuTl7yDGNs_L|?ue?m- zBFcQvImzN0)>)pRS~;9-kaaSTs*o#qzom#94w*?jedvzl?K2rHuI0DVDIHH%HG@yK zM5Zu**g1v>+YVX{d#>9NSQ~wvI~V|E(`d;}PWl5TIT@UM^*2>1#&oldi$UwDWKl$@HY<3{3@KA0W<2;JJjn}Lod zS(q1wv?5W5mCs0gBZ>vNk;i1HaSGqYrHNIS(-+m%#fVCt#s07K9ht=Ki8V0F!+_$w ziQ8}XnH+T8a z@xF}}mNsjwaL+!f#!{|GEo`%GlRCBS)?5<*TvF~bH7oJ$)9;KaoGP|Wf^2YR087cr z;ke%@zseF4gr>=ReZnB6{gogJcpw6fKw*GPfE5jaFhGag~;Edup-M|M&zy+t z#00H0DC7@>OVqRnH@o_$54ei|C{WSS-pIF97hu#+xj9!ly1T6kKGCmE$f`d1v=(y6 ztL>Fx1r&FbdPViyy;sTXY}1VsM@>z6O!tTv(TR5*D@_gHWM)5^p+%T$?E(%0x9}f+ z@E=`@$ari=>>o}x$>(2;{9ZB6&PBy*XdbvCrmY=~bc3H}G#5IcyWwYp;}5MB#0$fV z*k$$!d^gp#$85%OX;tPX*gREsY9>wQy5ESP{)~2(mNAY zAwRAz>+vp?o=LkniR`N(z5$21OkBH@GW|x`SCX8<9a`ThubQPdB~>hz*v-_L&4ZxVLg^jNX&&kJPiiHkZQXfstC-ka*x-~r1O0W>mjCv!N z`k>T6-EM&*C2^_M(!WH~bfW3*%gt@-V%&DZen>SWFHYbrtnc_V6Vs!pNJk2nl5VdS zvB7HYvpb^d1L0ccT4c19!c;I3XMACBt)40pu;CJJ#sLfP6r@rtze07-zF$xPk-kTwoxG0|`{hOZn@$Z3vz`(MOtPVtS_! zm%UXKi$@YqI9S>jVlwP#s6~$){#>+Fg$l)57Tf|U;CO{gTMug=cD`WfBWiTfbAQ#r z@<*B{fsp}`(>x7%_2m98SEzda*UVOXqHmj+?Pm4aboL6Bsxpxi@*?d>2(xWTG{=?V*OmbyFBapHN?pz z?JvsDw#_QabX1v_l~%3T1tkW{&e@|x(&Uk)zffd6Tozl-x%8if3m(Rc^d z=5|*{D?%PrkfPP4n2d{dcC>MIP;hX0m~&3bW&UYf=9RLzzq{^V*WV|h-O>L5;-B(? literal 0 HcmV?d00001 diff --git a/code/server/server-final-project/public/images/icon2.jpg b/code/server/server-final-project/public/images/icon2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f7d847f41b6f90b38e86d7926cbb6d863c80ec2c GIT binary patch literal 4332 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 literal 0 HcmV?d00001 diff --git a/code/server/server-final-project/public/images/icon4.jpg b/code/server/server-final-project/public/images/icon4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26a7f6518fd7d5db0c860e3dda7683ea712610d5 GIT binary patch literal 8369 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 Ybr17;lT0Lck?0rurlTRW?Dfz80e~R?C;$Ke literal 0 HcmV?d00001 diff --git a/code/server/server-final-project/public/images/java.jpg b/code/server/server-final-project/public/images/java.jpg new file mode 100644 index 0000000000000000000000000000000000000000..18b8e26c0ec5f55b63e288932637d5b8d2b8a94a GIT binary patch literal 9504 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 literal 0 HcmV?d00001 diff --git a/code/server/server-final-project/public/images/javajs.png b/code/server/server-final-project/public/images/javajs.png new file mode 100644 index 0000000000000000000000000000000000000000..597a1be5cdef38690b29f94d1509a338e4a1c658 GIT binary patch literal 4225 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%0ALyr0S)N98(;7OHGu?LovT;rSww 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 literal 0 HcmV?d00001 diff --git a/code/server/server-final-project/public/images/programming.png b/code/server/server-final-project/public/images/programming.png new file mode 100644 index 0000000000000000000000000000000000000000..e8473d6c12b21147da8d0a1ae2ddfc8d2170ba20 GIT binary patch literal 5780 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%0AXx zQ4(5^;6@g~Vj*tSV|P1|g{_+<_>o{o?n++#=>5y$@Yg%6gZ@@qy~Al6w4#1jt9NgY zr?tPOzRtR7>8RheEDqGyW9|3(khjN+{CmCaU{#&S-s5aW4!>bndI=71bB7Im>-2WJ zY#qqsIpFu(JCU=;*^N5guUo9`_bF$O(Cu>}53;m+e6|iBvi9^_>)qaZ>j9q|byxOU zQSVuNUGuGEZGErbqpIa~z3&zA4H+_I$dDmJh71`pWXO;qLxv1hn}~K3OHsWAwV^i( z6AXW832qhrp^HlFYCaL8pfO|Ytzwt1f<+zwE>P}oQXLA!Pt1H|u-a0(Nh)G6{{5qm zj!fLER#scJNTqD0D59bqjL&`l!~T!Dx_b8SUdlFo|G*#i4eS9}U0nxzdo@$4Y-#} z+}lE7y%NgX-js*Lb*xytn*A=GiHBZSz0diYH#XPQbd>OWltl2g6PIsujcNZSwR6FI zPB>TLPMKlFP#x@=e*EOde%;Gz z7|tLgc~9!yzwZzGjsUC2pqGDt_U!1+dKXE<&z(uJ^4H6$&<%3T5R{$)Ew};z1m%y-Cmo@%x|;t zUsZ;c9bTxENwH$+>GJaO^HvL6B8;HW5Zls%2-Q0uXO;hb@Z$gV-~aQ!|2X>W*^`%# zA5S05|Yke--2M`?Uflxbl#yVut+|rd{)v9hE zD8ZSQLi6dLe;zrcUTwfugz$B@_OMfcoNFlk%Aa#P`gH86E$@&2{x3%cj`enJkzc7M z;{pe>!4r?2HHoeszr|Bivp2)aUT1SV2Wx67!?5UbI-P!HMH?@IA~I6a=@BdQJ$@;f zh?dhME`AAK9-b)X+QE&igdWvqEX=Ib`~bMwZ5^;v$i^$7&j;;g{=cJlA%)$p>y>-` zrFDc~?FugeE7%ZO11M9@ihETaF@7T}eLZOBVXB$6h+1Q4ty7)OqOr1ctJ|Iuoo#Uf zAZu%{oUvQo#i`_20lOB&UiK7qj-`^y%CsR~LE|_y^z-oW2s{q`{5$~< zKM%nVrrG}Iud7S861S_~E~bMAyB@#%@&Eq$j{vhP$QkN7Iv{S>vsA05+1As{05w~? zxer3r>U0CEy;f#tp3S-(*U3|)Wds$mJA6tyR=(inWT8yT;+5a6@ zzBv+2{f$4#Bio^YxDOKdzdmD_rn`ENT-3FL7P~!LzPRn$F5Mm=CfF-z55yihM(QGlAhupNq})QcAL$=(U;Z9nzsJJ!*#XHQl4iy~wiiN&I^5!S`W z%E4G{G4+d^XAL26H!JH5B$P-*r0H19$JX7-tB?7IBl`w2vAxRsMWF_qe-TT?VzH;m zL~?$FJ$rEo@f3=)Vnrfmr6NJ;*sq6pzf3;e@wuGgLl~Pt&wq{S_2MV3^H#GfE)ij> zvdU8$tFCN*RlPpQ%4Ox19@dM0W%z_%{QB?Ab7o7ge*O2MyobZq<)X|7FW&pON~g*2 z4m{z|3ys#VFMjLvXUiR%$D^4T>=BXGxzq-A`y3#oF3~T%H9y-j94^B^iwExlf!2r;%)_F3R_wXSk+5LXMlaCW*MkGXb zA09FDV{FhBlYG08#r*^Oj(xQMhmViPgMm!1eRYN_#M?D!_OO0O=9zAtamI=iuznQz z;fHg;(bCXS)7_$HyvurriHm`nhFu)SB@Pu35u{@g zl@aBa6yEM4*2PZ^Y1lF)*m$ zjRJOK`RBTB11JfAERY-+#17z4g20rZ>n?!t&lK_gO!a>k1O&##!^a`G(W+4ZI5;32 zTrdtk8H50QV*Su@!1t1TDPCOg(M^q(9m*-h(6TuNX)4k8Ksuce)jrP zwV1f2mHW%eT5iSm8&~u zyIs!$B;Xq}N-!lL52RbN>&wo;x>{n}iHcRX zSOkykrD!mxksC>Et%Sbt)xF81+)mk}thnS?v4!&*5&k=8xfgbXsw6*B^9vH6=5mh= z>iE+=-Rd=Lj@0F+Ej?UUElRHLynkOB>0r(||7H!_=Y+!2Nij_uP4^th+WI3`e!@Lt zWriD5Nsi|aRZsep&ozIlnwU`1ZxllkO-tIfc@DpsP-SHnWzKd8>@_A5!+7yp}LTg|#ca z;UhkULtKqfks}UdWy!>-I~-N&c?`C2Y6~iomrisXEwd3Xo#He|w*CUa4Sx73vKro?-&RX1DT9&}CeKrtef&RBWlA z@-kIu+KfKcG4`tV8c2M$qubTG5(vKrIMYArTT8dbXbf+Vo+I1@Pg#tvfnE{#k$<-X zYEy$k*Z%3@l>hS(HZ{Hn5OAwmwpF>kSeIj152TRk8Zg-nIZ?^dC|t!(qZe(@i4ZVL zVbyhiKp(ua<3AK_0rz=fOEWpw)N&N@tz^K#7+h;$p~8S`haOTYCtYG3$PG@Nq?mc+ z`bF}mOF9W-xNQEsI8slTWIZx0ff7VXLHVBqA0oS)MR5U9Kfa6K&ED9)-CR9>@c>_5 zED9aGOs2gUW^85LCv$gPVr8xD>{utv5f_Yom$8zz4Gl3Y9YGY?_L(~C9y&sKwf45H z;$jIY$*DIst-&@f`Y;A+CvR#!xNbcU57B_|Sd0JRhsDz2CDhKB>bO|Jg0$F-o**Qi zQ*8ISD|zzazE@}QFnUdIP?8=u_^ghxCr@PFYtovZjL^9&7qr{c!qT1U-c2oizQaBF zcw4osq+==x@p~#X{ioci-FE%cfryT5V!q0SJS{h)U3f~x&)Gn%jb& z_UOS#rYER`V8<9FYw2CqWp7I)`B#rwUv()op29?kF-(eP7O>R81ADvN^TMt%pW2x( zrEU4Y$0LS2(D9lej5ls0AhO{O*#U{a_R4AiFpmoAP4dA^f5&k*Ij=`%^Dh;v5&A-3 z8(q6QW3Z2*wmEo=pE@vx5&WFI(<>45+9dDq)Aj^0lSu6?RSj$J6o7q^~a z+}Lo;Nsk8iL8+l2qOo7WgmGuyBQE|Z$*ww+&^Ad4F)IwOHrX8OGX@0vZVLq6?;k5I z4NG6dr2Fn*m)Kt%{8d8l8K0@_P;W>zqPES}YIHy6XbmVmZw~0mIrSen35m;@Af|OC z!8dhXU!T$AdooGit#VVVEQSf<_qtZ*8pFX(O?)*(J5`f1ueJ5Swc1$D;!7ljK&*_W)3L!<@m zTZFG-Mj0j)7p;g&REFles0=HoUI1Bf+1T{2N2WnapPKfUq97j4+D; z-;*CwfznhmN6O2aQu%sQMMRAma-(1HX}TPPe*_Y6K*owVT5zpOj>>!FD4lLMHW#|K^^j53aULg_O?A<*_{{C;Vp1mgnlT)pV&V`yq*>bBZvW`R9A(jSo)Ef%Z za#j+x=MTo;HlT=!eP+} z%e{12y+pgqyXKs$e(cs0JWSO=P9?>HEKK}Deh<9d%V>9anoAuH8M<<9^ylsLzXs@= zR&mVBd-Odh`+)2g9UAD*s?_<4c)D^F9f8?`F|*?Vzug^yqEaHC*->nXf_XfpE8LSN+-;#s0Sv8W~uy?EI$=wwsbeX_J{;zk`QRPL2$@a zB~yGFMfhqatD4wHuV7HoL2twcrt$@qT3l66n%HxW8}J)?WOr#z9j41N-1{hWMOvPNRrDBI&ckA zyatkFHyN|=W6xk5Ym5pHE)$L(2SG@#fl}RTAi6L^^HB0a{2JKO!&|H@+`F%O@bT5W zufSgD@mtk()MY2T;J-_=jspKB1^;|ixvH=fmw@@hjm7ZkHE=L^4b%$~!Vmqh>W~* z#nUd<7#qO;aSJouh@<*-zU!NtIl-@k73wja+ZZFEJN_{Kas=_Jygx&9Vh=0ev6~Sv z=@Yz^?f0_!iQmEtmN?C;_VZT6iCmR1(I8azdH4~cQ(mm}&}thR5oE8wG4z^);+?6C zc)Dn?z1T`!X7r}*x*-KV$9z)@_g6xL#2O{lhwN;eN)MEjaQ{w7$V5!^@}(PSo{c7G zxqqIRBd9Kzvyk48CyU+x@C?81ez0`NQ$J^|6rVR^fYll^8UJ+aSc=%FQ2JP4MQXvoz_M@ z#hu$7kOb-(o$K2lbwG`&r_jZ@Ew1+dLEluQWYz$o5dipwaQ$SK3bKQncT-!!z?8fpncJO+07+nHcVqgHo#a}AK*9P@MPbf-+lJzCnv>XMS* z`d|4c^m~hMrzhSniA#OK`CZMWXMx$_v%GVtdK_HmqxysvvB9|~HH}j=;bw$Y+&hTm zk=PYauK$Yh-0~YNCU+J$a`E(WQGZPcf`GsjgE& zSw~520(#y(X-(Uo@A6jM5;ODC9I?riy>>^miN2ryK=Fo4ZvZ$n7Ke;XMKvc?j1dy! zHt%3wiuw|yTy>0`($>k#K&+5t76R6*Re_Jm^QAmeN>Z#+tdU8(TngOQn&L$OXc~Zg zn5H)}|903vU1fc%r5(;K;R%G(*0^r_#%246vJK^yL?C0?eJ%`R5F()uzo z;Bmm!wF<(_vLxM3mK*4~15b5!#MFc~4G3+xH|z?^hl{tZRX6uqyVqqir1V2|NlaXN zQ56vL$B!0&q#k0hg4z4@SrQvQL3NF(PtPX{R(~|)$_HroCX=GANe*vS96evURPBI{ zELs`r&JZ|S4!i?dNHXU?!nHWU#(G9J+IK6>LSJ-0V^q>;`U_v(G%Lviws^LU!GnRZ z-eD-M+amgvF}^Xmal+Ve*6+SHS8S!!dPfw~T3LKD^{$Wvkk$B^h6#&mFOt`&vl7lP z&TBL~C4+R$OBCtK%sURrqWTbQq4y7;$W6EEzA)kg-V_Vx+jM$d&z|lZ9iiQDGLgo@ z%*mdv@hl&zXH-zI;G_3|$#JHdQ)o!ypdBlhn#r6m+a`aPs;1i7PBA`TJVDKl{$LC8ZKIz*vs40@q5tmxfD*x&$jmyRRd-Au4YY^Bvi{iq-{P>+!4t7u&q&i5;(F(`qGR4PXQ(SzL ziT*_{KeA6%I2ys=F-MY=IS-t2WwLc3q74m{8-zY}YBx})s#H~o2%}l)57q;@b{NWx zRh?4qK0K&qtE=iqL&G`2p_#ueGh0ga!;Zh8q&tP^4IgmX%!mEY%cw~+eVc|8$WGL> zfOyCbkV)plU!FxL|3H<^wx7%pP(-cAoMhDqa1{B!%5`v7Hcze*FH)25Ze^EX2N#O@1;+ z_SEIfEwcMH2PIg>ofh|L;Y=X z-?qk$8chw%Y(A{chJqsLXZxqAK<&(1mL3<9-B_El+1CzuD9>vDR9*k#3T>vR@#x|z z;fOg^wbEZ@A8G>(`SX~v2m=irgGepMEarEHl}{h17c{2EC{4}`cLYU7l}`M9X7X<% z6zIUF($)+; z=I?CRUflQSvLC|=G){0L#EMj`D{3<&P^D{6W;i`NzNVQjKM~O}GwUmU)owEuqS-~$ z^Q;LgQtc=-u>>uYO5S@v5RBdPrhf^4re(!$=fS7#7Lxb~6Av72-)#|E=C1bc;9muv zTqfhSxrV*gFMl60s&ZtGF&oYD;Nux)ahcQHue&sQmExT_^f}P^(@5UL_v!YxUct93 zwGv}<3tS0tttu&Lql`6U^0#Zbx(e)4D|Kul!K~Kt_-bt|YE(Og4Xe|D8Y@7^84rNR zKOpO4cSyvFhXWjNzHb+P(7<)b++uo*Uas6)z+%xJ23;Er?#_X=ciF3r$0?>95|x|1 z8RKQ%Ww5?D*?l9{cusc*z_ip)kRHwzrl5>!ccB#7GGxy)d&o1^+kr;v%?4{LSZ{Q$W zbM5Emq5QDqXP(#Cn$l`b?a4yiZ6-BlWKZ$wS_cQkN9<_z``7H8W&Z&@{tt(c3C{Kq zRcn13d{C`rIbTDPm}6)R9uJ;5jeY0i@|LQk=I}T1o$yDR!hp>a7qcjIx{04KpAZ54 zK<1;5f0&0!c_PgQVak|d3pD5XkZ=;OcxJ`w#J3uZCl5i?eH-mbhd-pD{be}=mBxI@ zFtdQW^BE1YO#@l=hYRJsUfs(-Yl(epiM>Ds_#^c%n77nqwpng4mHBCFY+&xM;X&v% zAi0-NH*k7q@r5cg%bt^zV3B(YyH-P$@5fM62|aJiYP3!AcZ4*svSi7e*sF#Zgv0w literal 0 HcmV?d00001 diff --git a/code/server/server-final-project/public/index.html b/code/server/server-final-project/public/index.html new file mode 100644 index 00000000..b737039e --- /dev/null +++ b/code/server/server-final-project/public/index.html @@ -0,0 +1,125 @@ + + + + + + + + + + + Web API Final Project + + +
+
+ + + + + Profile + + profile-icon + + +
+
+
+ +

Effortless Publishing

+

+ Lorem ipsum dolor, sit amet consectetur adipisicing elit. Doloremque + fugiat, alias sunt tempora, vitae numquam exercitationem ipsam + suscipit saepe hic neque ad magni impedit possimus corrupti quas aut + ex quam. +

+
+ +
+
+ +

Software Development Life Cycle

+
+ +

Web Genius

+
+
+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. + Repellat voluptate optio nihil minus, dolores accusamus? Vero, + repellendus. Ad quam cumque alias non, ducimus ut iure + temporibus sit magnam dicta molestias? +

+ +
+ Read more ... +
+ +
+ +

Java vs JavaScript

+
+ +

Techgurl

+
+
+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. + Repellat voluptate optio nihil minus, dolores accusamus? Vero, + repellendus. Ad quam cumque alias non, ducimus ut iure + temporibus sit magnam dicta molestias? +

+ +
+ Read more ... +
+ +
+ +

Components of Java

+
+ +

Brainie

+
+
+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. + Repellat voluptate optio nihil minus, dolores accusamus? Vero, + repellendus. Ad quam cumque alias non, ducimus ut iure + temporibus sit magnam dicta molestias? +

+ +
+ Read more ... +
+ +
+ +

Software Development Languages

+
+ +

App Crafter

+
+
+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. + Repellat voluptate optio nihil minus, dolores accusamus? Vero, + repellendus. Ad quam cumque alias non, ducimus ut iure + temporibus sit magnam dicta molestias? +

+ +
+ Read more ... +
+
+
+
+ + diff --git a/code/server/server-final-project/public/index.js b/code/server/server-final-project/public/index.js new file mode 100644 index 00000000..0e7ec3f1 --- /dev/null +++ b/code/server/server-final-project/public/index.js @@ -0,0 +1,36 @@ +const postParagragh = document.querySelector(".content p"); +const postTitle = document.querySelector(".post > h3"); +const username = document.querySelector(".username") + +// console.log(postParagragh.innerText); + +const fetchPosts = async () => { + const res = await fetch( + "https://jsonplaceholder.typicode.com/posts?userId=1" + ); + const data = await res.json(); + + data.forEach((post) => { + showPosts(post); + // console.log (showPosts(post)); + + }); +}; + +const showPosts = async (blogPost) => { + const res = await fetch( + "https://jsonplaceholder.typicode.com/users/1" + ); + const data = await res.json(); + postTitle.innerText = blogPost.title; + + postParagragh.innerText = blogPost.body; + + username.innerText = data.username + + +// console.log(username.innerText); +// console.log(postParagragh.innerText); +}; + +fetchPosts(); \ No newline at end of file diff --git a/code/server/server-final-project/public/profile.html b/code/server/server-final-project/public/profile.html new file mode 100644 index 00000000..cd0ce4c1 --- /dev/null +++ b/code/server/server-final-project/public/profile.html @@ -0,0 +1,77 @@ + + + + + + + + + + + + Web API Final Project + + +
+
+ + + + + Home + + profile-icon + + +
+
+
+ +

@ Techgurl

+

Sumayyah AbdulHakeem

+

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Doloremque fugiat, alias sunt tempora, vitae numquam exercitationem ipsam suscipit saepe hic neque ad magni impedit possimus corrupti quas aut ex quam.

+ 📆 Joined February 2023 +
+ +
+

Recent Post by You

+
+ +

Software Development Life Cycle

+
+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellat voluptate optio nihil minus, dolores accusamus? Vero, repellendus. Ad quam cumque alias non, ducimus ut iure temporibus sit magnam dicta molestias? +

+ +
+ Read more ... +
+ +
+ +

Java vs JavaScript

+
+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellat voluptate optio nihil minus, dolores accusamus? Vero, repellendus. Ad quam cumque alias non, ducimus ut iure temporibus sit magnam dicta molestias? +

+ +
+ Read more ... +
+ +
+ +

Components of Java

+
+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellat voluptate optio nihil minus, dolores accusamus? Vero, repellendus. Ad quam cumque alias non, ducimus ut iure temporibus sit magnam dicta molestias? +

+ +
+ Read more ... +
+
+
+
+ + \ No newline at end of file diff --git a/code/server/server-final-project/public/style.css b/code/server/server-final-project/public/style.css new file mode 100644 index 00000000..88bee1e7 --- /dev/null +++ b/code/server/server-final-project/public/style.css @@ -0,0 +1,245 @@ +/* General and Index.html Styling Begins */ +*{ + margin: 0; +} +body{ + background-color: #fff; + font-family: "Roboto", sans-serif; + font-weight: 400; + font-style: normal; +} +.wrapper{ + display: grid; + grid-template-rows: 5rem 1fr; + grid-template-areas: + "header" + "main" + ; +} +header{ + background-color: #e5e5e5; + display: flex; + justify-content: space-between; + align-items: center; +} +.logo{ + height: 2rem; + width: 15rem; + margin-left: 1rem; + border-radius: 5px; +} +menu{ + display: flex; + justify-content: space-evenly; + align-items: center; +} +.nav{ + text-decoration: none; + margin: 1rem; + font-size: 2em; +} +.icon{ + height: 3rem; + width: 3rem; + border-radius: 50%; + margin-right: 1rem; +} +.intro{ + background-color: #fca311; + text-align: center; + font-family: "Roboto", sans-serif; + font-weight: 700; + font-style: italic; +} +.intro > img{ + margin-top: 1rem; + height: 3rem; + width: 25rem; + border-radius: 5px; +} +.intro > h1{ + font-size: 4em; + padding: 2rem 0; +} +.intro > p{ + font-size: 1.5em; + padding: 0 0 2rem 0; + width: 60%; + margin: auto; +} +.blogpost{ + background-color: #14213d; + color: #fff; + padding: 2rem 1rem; + + +} +.post{ + margin: 0 auto 1rem; + border: solid 1px #e5e5e5; + border-radius: 1rem; + padding: 10px; +} +.post.even{ + background-color: #000; + color: #fca311; +} +time{ + font-family: "Roboto", sans-serif; + font-weight: 300; + font-style: italic; +} +.post > h3{ + margin: 10px 0; +} +.poster{ + display: flex; + flex-direction: column; + justify-content: flex-start; + margin-bottom: 10px; +} +.content p{ + margin-bottom: 10px; +} +.content img{ + height: 120px; + width: 80%; + display: block; + border-radius: 1rem; + margin-bottom: 10px; +} +/* General and Index.html Styling Ends */ + + +/* Profile.html Styling Begins */ +.main{ + background-color: #14213d; + text-align: left; + padding: 2rem; +} +.profile{ + color: #e5e5e5; +} +.icon.big{ + height: 12rem; + width: 12rem; + border-radius: 0px; +} +.profile h1:first-of-type{ + margin: 1.5rem 0; + font-family: "Roboto", sans-serif; + font-weight: 700; + font-style: italic; +} +.profile h1:nth-of-type(2){ + margin: 1.5rem 0; + font-family: "Roboto", sans-serif; + font-weight: 700; + font-style:normal; +} +.bio{ + margin: 1.5rem 0; +} +.mainprofile .blogpost{ + margin-top: 1.5rem; +} +.blogpost > h1{ + font-family: "Roboto", sans-serif; + font-weight: 700; + font-style: italic; +} +.recent{ + margin-top: 1.5rem; +} +.fa.fa-edit{ + font-size: 20px; +} +/* Profile.html Styling Ends */ + + +/* Media Query for Tablet */ + +@media only screen and (min-width: 600px) { + .icon{ + height: 4rem; + width: 4rem + } + .blogpost{ + background-color: #fff; + color: #000; + } + .post{ + border: solid 2px #fca311; + margin-bottom: 1rem; + } + .post > h3{ + text-align: center; + font-size: 2em; + } + .post.even{ + background-color: #14213d; + color:#fff; + } + .poster{ + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + } + .content{ + display: flex; + align-items: center; + justify-content: space-evenly; + } + .post.even .content{ + flex-direction: row-reverse; + } + + .content img{ + height: 130px; + width: 30%; + margin-right: 10px; + } + +} + +/* Media Query for Desktop */ +@media only screen and (min-width: 768px) { + .wrapper{ + display: grid; + grid-template-columns: 10rem 1fr; + grid-template-rows: 1fr; + grid-template-areas: + "sidebar main" + ; + } + header{ + grid-area: sidebar; + display: flex; + flex-direction: column; + justify-content: flex-start; + } + .logo{ + height: 5rem; + width: 7rem; + margin: 2rem; + } + menu{ + display: flex; + flex-direction: column; + } + .icon{ + height: 5rem; + width: 5rem + } + .main{ + grid-area: main; + } + .intro > img{ + height: 5rem; + width: 30rem; + } + .post > h3{ + font-size: 3em; + } +} \ No newline at end of file From 67d05e36cd72be68dc022fef7ac9e749227e49f7 Mon Sep 17 00:00:00 2001 From: Habeebah Aleilo Date: Sat, 11 Jan 2025 22:29:01 +0100 Subject: [PATCH 2/3] Debug and Perfect project --- code/server/server-final-project/app.js | 34 ++++++++++ .../server-final-project/data/blog.json | 39 +++++++++++ code/server/server-final-project/package.json | 4 +- .../server-final-project/public/index.html | 6 +- .../server-final-project/public/index.js | 64 +++++++++++++------ .../server-final-project/public/style.css | 2 +- 6 files changed, 126 insertions(+), 23 deletions(-) create mode 100644 code/server/server-final-project/data/blog.json diff --git a/code/server/server-final-project/app.js b/code/server/server-final-project/app.js index e69de29b..18e04a6f 100644 --- a/code/server/server-final-project/app.js +++ b/code/server/server-final-project/app.js @@ -0,0 +1,34 @@ +import express from "express" +import fs from "fs" +import path from "path" +import { fileURLToPath } from "url" + +const app = express() +const PORT = 4000 + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) + +app.use(express.json()) +app.use(express.static("public")) + +app.get("/blogs", (req, res) => { + const blogs = JSON.parse(fs.readFileSync(path.join(__dirname, '/data/blog.json'), 'utf8')) + res.json(blogs) +}) + +app.get('/blogs/:id', (req, res) => { + const blogs = JSON.parse(fs.readFileSync(path.join(__dirname, 'data/blog.json'), 'utf8')); + const blog = blogs.find(b => b.id === parseInt(req.params.id)); + + if (!blog) { + return res.status(404).json({ error: 'Blog post not found' }); + } + + res.json(blog); + }); + +app.listen(PORT, () =>{ + console.log(`Listening at port ${PORT}`); + +}) \ No newline at end of file diff --git a/code/server/server-final-project/data/blog.json b/code/server/server-final-project/data/blog.json new file mode 100644 index 00000000..a355ebba --- /dev/null +++ b/code/server/server-final-project/data/blog.json @@ -0,0 +1,39 @@ +[ + { + "id": 1, + "userId": 1, + "title": "Software Development Life Cycle", + "body": "Lorem ipsum dolor sit amet consectetur adipisicing...", + "blogWriter": "Web Genius", + "posterIcon": "images/icon1.jpg", + "blogImg": "images/sdlc.jpg" + }, + { + "id": 2, + "userId": 2, + "title": "Java vs JavaScript", + "body": "Lorem ipsum dolor sit amet consectetur adipisicing...", + "blogWriter": "Techgurl", + "posterIcon": "images/icon2.jpg", + "blogImg": "images/javajs.png" + }, + { + "id": 3, + "userId": 3, + "title": "Components of Java", + "body": "Lorem ipsum dolor sit amet consectetur adipisicing...", + "blogWriter": "Brainie", + "posterIcon": "images/icon3.jpg", + "blogImg": "images/java.jpg" + }, + { + "id": 4, + "userId": 4, + "title": "Software Development Languages", + "body": "Lorem ipsum dolor sit amet consectetur adipisicing...", + "blogWriter": "App Crafter", + "posterIcon": "images/icon4.jpg", + "blogImg": "images/programming.png" + } + + ] \ No newline at end of file diff --git a/code/server/server-final-project/package.json b/code/server/server-final-project/package.json index 75aeccdf..9978b7a9 100644 --- a/code/server/server-final-project/package.json +++ b/code/server/server-final-project/package.json @@ -2,8 +2,10 @@ "name": "server-final-project", "version": "1.0.0", "main": "app.js", + "type": "module", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node --watch app.js" }, "keywords": [], "author": "", diff --git a/code/server/server-final-project/public/index.html b/code/server/server-final-project/public/index.html index b737039e..2c6a7336 100644 --- a/code/server/server-final-project/public/index.html +++ b/code/server/server-final-project/public/index.html @@ -10,8 +10,8 @@ href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel="stylesheet" /> - - Web API Final Project + + Server Final Project
@@ -43,7 +43,7 @@

Effortless Publishing

-
+

Software Development Life Cycle

diff --git a/code/server/server-final-project/public/index.js b/code/server/server-final-project/public/index.js index 0e7ec3f1..b1cd154a 100644 --- a/code/server/server-final-project/public/index.js +++ b/code/server/server-final-project/public/index.js @@ -1,36 +1,64 @@ -const postParagragh = document.querySelector(".content p"); -const postTitle = document.querySelector(".post > h3"); -const username = document.querySelector(".username") +// const postParagragh = document.querySelector(".content p"); +// const postTitle = document.querySelector(".post > h3"); +// const username = document.querySelector(".username") // console.log(postParagragh.innerText); const fetchPosts = async () => { - const res = await fetch( - "https://jsonplaceholder.typicode.com/posts?userId=1" - ); + const res = await fetch("http://localhost:4000/blogs"); const data = await res.json(); data.forEach((post) => { showPosts(post); // console.log (showPosts(post)); - }); }; -const showPosts = async (blogPost) => { - const res = await fetch( - "https://jsonplaceholder.typicode.com/users/1" - ); - const data = await res.json(); - postTitle.innerText = blogPost.title; +const showPosts = (blogPost) => { + const postContainer = document.createElement("div"); + postContainer.classList.add("post-container"); + + const titleElement = document.createElement("h3"); + titleElement.innerText = blogPost.title; - postParagragh.innerText = blogPost.body; + const bodyElement = document.createElement("p"); + bodyElement.innerText = blogPost.body; - username.innerText = data.username + const userElement = document.createElement("div"); + userElement.classList.add("poster"); + + const userName = document.createElement("span"); + userName.innerText = blogPost.blogWriter; + const userIcon = document.createElement("img"); + userElement.classList.add("icon"); + userIcon.src = `http://localhost:4000/${blogPost.posterIcon}`; + userIcon.alt = "Poster Icon" -// console.log(username.innerText); -// console.log(postParagragh.innerText); + userElement.appendChild(userName) + userElement.appendChild(userIcon) + + const blogImage = document.createElement("img"); + userElement.classList.add("content"); + blogImage.src = `http://localhost:4000/${blogPost.blogImg}`; + blogImage.alt = "Blog Image" + + postContainer.appendChild(titleElement); + postContainer.appendChild(bodyElement); + postContainer.appendChild(userElement); + + document.querySelector(".content").appendChild(postContainer); + + // postTitle.innerText = blogPost.title; + + // postParagragh.innerText = blogPost.body; + + // username.innerText = blogPost.blogWriter + + // username.innerText = data.username + + // console.log(username.innerText); + // console.log(postParagragh.innerText); }; -fetchPosts(); \ No newline at end of file +fetchPosts(); diff --git a/code/server/server-final-project/public/style.css b/code/server/server-final-project/public/style.css index 88bee1e7..522640b8 100644 --- a/code/server/server-final-project/public/style.css +++ b/code/server/server-final-project/public/style.css @@ -74,7 +74,7 @@ menu{ } -.post{ +.post-container{ margin: 0 auto 1rem; border: solid 1px #e5e5e5; border-radius: 1rem; From 6b111f6703ce1345e80afbc3c82e3e4120359903 Mon Sep 17 00:00:00 2001 From: Habeebah Aleilo Date: Mon, 13 Jan 2025 16:12:36 +0100 Subject: [PATCH 3/3] Complete the project --- .../server-final-project/data/blog.json | 75 +++++++++---------- .../server-final-project/public/index.html | 26 +++---- .../server-final-project/public/index.js | 65 +++++++++------- .../server-final-project/public/style.css | 14 ++-- 4 files changed, 94 insertions(+), 86 deletions(-) diff --git a/code/server/server-final-project/data/blog.json b/code/server/server-final-project/data/blog.json index a355ebba..711fad5c 100644 --- a/code/server/server-final-project/data/blog.json +++ b/code/server/server-final-project/data/blog.json @@ -1,39 +1,38 @@ [ - { - "id": 1, - "userId": 1, - "title": "Software Development Life Cycle", - "body": "Lorem ipsum dolor sit amet consectetur adipisicing...", - "blogWriter": "Web Genius", - "posterIcon": "images/icon1.jpg", - "blogImg": "images/sdlc.jpg" - }, - { - "id": 2, - "userId": 2, - "title": "Java vs JavaScript", - "body": "Lorem ipsum dolor sit amet consectetur adipisicing...", - "blogWriter": "Techgurl", - "posterIcon": "images/icon2.jpg", - "blogImg": "images/javajs.png" - }, - { - "id": 3, - "userId": 3, - "title": "Components of Java", - "body": "Lorem ipsum dolor sit amet consectetur adipisicing...", - "blogWriter": "Brainie", - "posterIcon": "images/icon3.jpg", - "blogImg": "images/java.jpg" - }, - { - "id": 4, - "userId": 4, - "title": "Software Development Languages", - "body": "Lorem ipsum dolor sit amet consectetur adipisicing...", - "blogWriter": "App Crafter", - "posterIcon": "images/icon4.jpg", - "blogImg": "images/programming.png" - } - - ] \ No newline at end of file + { + "id": 1, + "userId": 1, + "title": "Software Development Life Cycle", + "body": "Lorem ipsum dolor sit amet consectetur adipisicing...Lorem ipsum dolor sit amet consectetur adipisicing...Lorem ipsum dolor sit amet consectetur adipisicing...Lorem ipsum dolor sit amet consectetur adipisicing...Lorem ipsum dolor sit amet consectetur adipisicing...Lorem ipsum dolor sit amet consectetur adipisicing...", + "blogWriter": "Web Genius", + "posterIcon": "images/icon1.jpg", + "blogImg": "images/sdlc.jpg" + }, + { + "id": 2, + "userId": 2, + "title": "Java vs JavaScript", + "body": "Lorem ipsum dolor sit amet consectetur adipisicing...Lorem ipsum dolor sit amet consectetur adipisicing...Lorem ipsum dolor sit amet consectetur adipisicing...", + "blogWriter": "Techgurl", + "posterIcon": "images/icon2.jpg", + "blogImg": "images/javajs.png" + }, + { + "id": 3, + "userId": 3, + "title": "Components of Java", + "body": "Lorem ipsum dolor sit amet consectetur adipisicing...Lorem ipsum dolor sit amet consectetur adipisicing...Lorem ipsum dolor sit amet consectetur adipisicing...", + "blogWriter": "Brainie", + "posterIcon": "images/icon3.jpg", + "blogImg": "images/java.jpg" + }, + { + "id": 4, + "userId": 4, + "title": "Software Development Languages", + "body": "Lorem ipsum dolor sit amet consectetur adipisicing...Lorem ipsum dolor sit amet consectetur adipisicing...Lorem ipsum dolor sit amet consectetur adipisicing...", + "blogWriter": "App Crafter", + "posterIcon": "images/icon4.jpg", + "blogImg": "images/programming.png" + } +] diff --git a/code/server/server-final-project/public/index.html b/code/server/server-final-project/public/index.html index 2c6a7336..cc1ff2d3 100644 --- a/code/server/server-final-project/public/index.html +++ b/code/server/server-final-project/public/index.html @@ -42,10 +42,10 @@

Effortless Publishing

-
-
- -

Software Development Life Cycle

+
+ + + + + -
+ -
+ -
+
diff --git a/code/server/server-final-project/public/index.js b/code/server/server-final-project/public/index.js index b1cd154a..ada5f2e1 100644 --- a/code/server/server-final-project/public/index.js +++ b/code/server/server-final-project/public/index.js @@ -15,50 +15,59 @@ const fetchPosts = async () => { }; const showPosts = (blogPost) => { + // Create container for each blog post and add a class list const postContainer = document.createElement("div"); - postContainer.classList.add("post-container"); + postContainer.classList.add("post"); + // Create the title element const titleElement = document.createElement("h3"); titleElement.innerText = blogPost.title; + // Create the element for the main blog-content + const contentElement = document.createElement("div"); + contentElement.classList.add("content"); + + // Create the body element that you will add to the main content element const bodyElement = document.createElement("p"); bodyElement.innerText = blogPost.body; + bodyElement.classList.add("content-p"); - const userElement = document.createElement("div"); - userElement.classList.add("poster"); - - const userName = document.createElement("span"); - userName.innerText = blogPost.blogWriter; - - const userIcon = document.createElement("img"); - userElement.classList.add("icon"); - userIcon.src = `http://localhost:4000/${blogPost.posterIcon}`; - userIcon.alt = "Poster Icon" - - userElement.appendChild(userName) - userElement.appendChild(userIcon) - + // Create the image element for the content const blogImage = document.createElement("img"); - userElement.classList.add("content"); blogImage.src = `http://localhost:4000/${blogPost.blogImg}`; - blogImage.alt = "Blog Image" - - postContainer.appendChild(titleElement); - postContainer.appendChild(bodyElement); - postContainer.appendChild(userElement); + blogImage.alt = "Blog Image"; + blogImage.classList.add("content-img"); - document.querySelector(".content").appendChild(postContainer); + // Place the body and the image inside the contentElement + contentElement.appendChild(bodyElement); + contentElement.appendChild(blogImage); - // postTitle.innerText = blogPost.title; + // Create a div for the user information + const userElement = document.createElement("div"); + userElement.classList.add("poster"); + + // Create an image element for the user icon + const userIcon = document.createElement("img"); + userIcon.classList.add("icon"); + userIcon.src = `http://localhost:4000/${blogPost.posterIcon}`; + userIcon.alt = "Poster Icon"; - // postParagragh.innerText = blogPost.body; + // Create a span element fpr the username + const userName = document.createElement("span"); + userName.innerText = blogPost.blogWriter; - // username.innerText = blogPost.blogWriter + // Place both the user icon and the user image in the user-info div + userElement.appendChild(userName); + userElement.appendChild(userIcon); - // username.innerText = data.username + // Place all the post divs inside the individual postContainer + postContainer.appendChild(titleElement); + postContainer.appendChild(userElement); + postContainer.appendChild(bodyElement); + // postContainer.appendChild(blogImage); - // console.log(username.innerText); - // console.log(postParagragh.innerText); + // Create a larger container for all the blog containers + document.querySelector(".blog-post").appendChild(postContainer); }; fetchPosts(); diff --git a/code/server/server-final-project/public/style.css b/code/server/server-final-project/public/style.css index 522640b8..63ae7e51 100644 --- a/code/server/server-final-project/public/style.css +++ b/code/server/server-final-project/public/style.css @@ -67,14 +67,14 @@ menu{ width: 60%; margin: auto; } -.blogpost{ +.blog-post{ background-color: #14213d; color: #fff; padding: 2rem 1rem; } -.post-container{ +.post{ margin: 0 auto 1rem; border: solid 1px #e5e5e5; border-radius: 1rem; @@ -98,10 +98,10 @@ time{ justify-content: flex-start; margin-bottom: 10px; } -.content p{ +.content-p{ margin-bottom: 10px; } -.content img{ +.content-img{ height: 120px; width: 80%; display: block; @@ -140,10 +140,10 @@ time{ .bio{ margin: 1.5rem 0; } -.mainprofile .blogpost{ +.mainprofile .blog-post{ margin-top: 1.5rem; } -.blogpost > h1{ +.blog-post > h1{ font-family: "Roboto", sans-serif; font-weight: 700; font-style: italic; @@ -164,7 +164,7 @@ time{ height: 4rem; width: 4rem } - .blogpost{ + .blog-post{ background-color: #fff; color: #000; }