From 36d0917ed3c1777d4125c2051c98f9d3f00e0f65 Mon Sep 17 00:00:00 2001 From: AnyaVerkhovaia Date: Sun, 5 Apr 2026 00:11:33 +0400 Subject: [PATCH 1/6] =?UTF-8?q?=D0=A0=D0=B0=D1=81=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 + package-lock.json | 1174 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 17 + public/index.html | 44 ++ public/script.js | 220 +++++++++ public/style.css | 315 ++++++++++++ server.js | 98 ++++ 7 files changed, 1873 insertions(+) create mode 100644 .gitignore create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/index.html create mode 100644 public/script.js create mode 100644 public/style.css create mode 100644 server.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..3dea06b0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules/ +debug.html +.env +.DS_Store +*.log \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..80f310dd --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1174 @@ +{ + "name": "websec-2", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "websec-2", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "cheerio": "^1.2.0", + "express": "^5.2.1", + "node-fetch": "^2.7.0" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "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.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/cheerio": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", + "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", + "license": "MIT", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "encoding-sniffer": "^0.2.1", + "htmlparser2": "^10.1.0", + "parse5": "^7.3.0", + "parse5-htmlparser2-tree-adapter": "^7.1.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^7.19.0", + "whatwg-mimetype": "^4.0.0" + }, + "engines": { + "node": ">=20.18.1" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/content-disposition": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "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/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "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/encoding-sniffer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", + "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^3.1.1" + }, + "funding": { + "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" + } + }, + "node_modules/encoding-sniffer/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "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.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "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": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "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/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "license": "MIT", + "dependencies": { + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-parser-stream": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", + "license": "MIT", + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "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": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "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": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "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": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "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/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undici": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.7.tgz", + "integrity": "sha512-H/nlJ/h0ggGC+uRL3ovD+G0i4bqhvsDOpbDv7At5eFLlj2b41L8QliGbnl2H7SnDiYhENphh1tQFJZf+MyfLsQ==", + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "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/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" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..f13abd29 --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "websec-2", + "version": "1.0.0", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "cheerio": "^1.2.0", + "express": "^5.2.1", + "node-fetch": "^2.7.0" + } +} diff --git a/public/index.html b/public/index.html new file mode 100644 index 00000000..421b7f33 --- /dev/null +++ b/public/index.html @@ -0,0 +1,44 @@ + + + + + + Расписание СГАУ + + + +
+
+
+

Расписание СГАУ

+

Выберите группу

+
+
+ +
+ + +
+ +
+ + 31 неделя + +
+ +
+
+
+ 📅 +

Выберите группу для просмотра расписания

+
+
+
+
+ + + + + \ No newline at end of file diff --git a/public/script.js b/public/script.js new file mode 100644 index 00000000..b71be30c --- /dev/null +++ b/public/script.js @@ -0,0 +1,220 @@ +let currentGroupId = null; +let currentWeek = 31; +let scheduleData = null; + +const days = ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота']; +const timeSlots = ['08:00', '09:45', '11:30', '13:15']; + +$(document).ready(function() { + console.log('✅ Скрипт загружен'); + + loadGroups(); + + $('#loadBtn').click(function() { + currentGroupId = $('#groupSelect').val(); + if (!currentGroupId) { + alert('Пожалуйста, выберите группу'); + return; + } + loadSchedule(); + }); + + $('#weekPrevBtn').click(function() { + if (currentWeek > 30) { + currentWeek--; + updateWeekDisplay(); + if (currentGroupId) { + loadSchedule(); + } + } + }); + + $('#weekNextBtn').click(function() { + if (currentWeek < 33) { + currentWeek++; + updateWeekDisplay(); + if (currentGroupId) { + loadSchedule(); + } + } + }); +}); + +function loadGroups() { + console.log('Загрузка групп...'); + + $.ajax({ + url: '/api/groups', + method: 'GET', + timeout: 5000, + success: function(data) { + console.log('Группы получены:', data); + const $select = $('#groupSelect'); + $select.empty(); + $select.append(''); + + if (Array.isArray(data)) { + data.forEach(group => { + $select.append(``); + }); + } else { + $select.append(''); + $select.append(''); + $select.append(''); + } + }, + error: function(xhr, status, error) { + console.error('Ошибка загрузки групп:', error); + const $select = $('#groupSelect'); + $select.empty(); + $select.append(''); + $select.append(''); + $select.append(''); + $select.append(''); + } + }); +} + +function loadSchedule() { + if (!currentGroupId) return; + + $('#scheduleContainer').html('

Загрузка расписания...

'); + + console.log(`Загрузка расписания для группы ${currentGroupId}, неделя ${currentWeek}`); + + $.ajax({ + url: `/api/schedule/group/${currentGroupId}?week=${currentWeek}`, + method: 'GET', + timeout: 15000, + success: function(data) { + console.log('Расписание получено:', data); + scheduleData = data; + + if (data && data.weeks && data.weeks.weeks) { + renderScheduleTable(); + updateGroupInfo(); + } else { + showError('Не удалось загрузить расписание'); + } + }, + error: function(xhr, status, error) { + console.error('Ошибка:', status, error); + showError('Ошибка загрузки расписания'); + } + }); +} + +function renderScheduleTable() { + if (!scheduleData || !scheduleData.weeks || !scheduleData.weeks.weeks) { + showError('Нет данных для отображения'); + return; + } + + const weekData = scheduleData.weeks.weeks[currentWeek]; + if (!weekData) { + showError(`Нет данных за ${currentWeek} неделю`); + return; + } + + const lessonsMap = {}; + const datesMap = {}; + + weekData.forEach(day => { + lessonsMap[day.day] = {}; + datesMap[day.day] = day.date || ''; + if (day.lessons && Array.isArray(day.lessons)) { + day.lessons.forEach(lesson => { + if (lesson.time) { + const startTime = lesson.time.split('-')[0]; + lessonsMap[day.day][startTime] = lesson; + } + }); + } + }); + + const fullTimeSlots = { + '08:00': '08:00 - 09:35', + '09:45': '09:45 - 11:20', + '11:30': '11:30 - 13:05', + '13:15': '13:15 - 14:50' + }; + + let html = ''; + html += ''; + html += ''; + html += ''; + + days.forEach(day => { + const date = datesMap[day] ? `
${formatDate(datesMap[day])}` : ''; + html += ``; + }); + html += ''; + html += ''; + html += ''; + + timeSlots.forEach(timeSlot => { + html += ''; + html += ``; + + days.forEach(day => { + const lesson = lessonsMap[day] ? lessonsMap[day][timeSlot] : null; + + if (lesson) { + html += ` + + `; + } else { + html += ``; + } + }); + + html += ''; + }); + + html += ''; + html += '
Время${day}${date}
${fullTimeSlots[timeSlot]} +
+
${escapeHtml(lesson.name)}
+
${escapeHtml(lesson.teacher)}
+
${escapeHtml(lesson.room)}
+ ${escapeHtml(lesson.type)} +
+
'; + + $('#scheduleContainer').html(html); +} + +function formatDate(dateStr) { + if (!dateStr) return ''; + const parts = dateStr.split('.'); + if (parts.length === 3) { + return `${parts[0]}.${parts[1]}`; + } + return dateStr; +} + +function updateWeekDisplay() { + $('#currentWeekLabel').html(`${currentWeek} неделя`); + $('#weekPrevBtn').prop('disabled', currentWeek <= 30); + $('#weekNextBtn').prop('disabled', currentWeek >= 33); +} + +function updateGroupInfo() { + const groupName = $('#groupSelect option:selected').text(); + $('#groupTitle').text(`Расписание, ${groupName}`); + $('#groupSubtitle').text('10.05.03 Информационная безопасность автоматизированных систем'); +} + +function escapeHtml(str) { + if (!str) return ''; + return str.replace(/[&<>]/g, function(m) { + if (m === '&') return '&'; + if (m === '<') return '<'; + if (m === '>') return '>'; + return m; + }); +} + +function showError(message) { + $('#scheduleContainer').html(`

${message}

`); +} \ No newline at end of file diff --git a/public/style.css b/public/style.css new file mode 100644 index 00000000..935e925e --- /dev/null +++ b/public/style.css @@ -0,0 +1,315 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: -apple-system, 'Segoe UI', 'Roboto', sans-serif; + background: #f0f2f5; + padding: 20px; +} + +.app { + max-width: 1400px; + margin: 0 auto; + background: white; + border-radius: 16px; + box-shadow: 0 2px 10px rgba(0,0,0,0.1); + overflow: hidden; +} + +/* Шапка */ +.header { + background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%); + color: white; + padding: 24px 30px; +} + +.group-info h1 { + font-size: 28px; + margin-bottom: 8px; +} + +.subtitle { + font-size: 14px; + opacity: 0.9; +} + +/* Поиск */ +.search-box { + margin-top: 15px; +} + +.search-input { + width: 100%; + max-width: 300px; + padding: 10px 15px; + border: none; + border-radius: 8px; + font-size: 14px; + outline: none; +} + +/* Выбор группы */ +.group-selector { + padding: 20px 30px; + background: #f8f9fa; + border-bottom: 1px solid #e0e0e0; + display: flex; + gap: 15px; + align-items: center; + flex-wrap: wrap; +} + +.group-select { + flex: 1; + min-width: 250px; + padding: 10px 12px; + border: 1px solid #ccc; + border-radius: 8px; + font-size: 14px; + background: white; +} + +.btn-primary { + padding: 10px 24px; + background: #4a90e2; + color: white; + border: none; + border-radius: 8px; + font-size: 14px; + cursor: pointer; + transition: background 0.2s; +} + +.btn-primary:hover { + background: #357abd; +} + +/* Навигация по неделям */ +.week-navigation { + padding: 15px 30px; + background: white; + border-bottom: 1px solid #e0e0e0; + display: flex; + justify-content: space-between; + align-items: center; + flex-wrap: wrap; + gap: 15px; +} + +.week-nav-btn { + padding: 8px 20px; + background: #f0f2f5; + border: 1px solid #d0d0d0; + border-radius: 6px; + cursor: pointer; + font-size: 14px; + transition: all 0.2s; +} + +.week-nav-btn:hover:not(:disabled) { + background: #4a90e2; + color: white; + border-color: #4a90e2; +} + +.week-nav-btn:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.week-current { + font-size: 18px; + font-weight: 600; + color: #4a90e2; /* Голубой цвет для номера недели */ +} + +.day-date { + font-size: 11px; + font-weight: normal; + color: #888; + display: block; + margin-top: 4px; +} + +/* Таблица расписания */ +.schedule-wrapper { + padding: 20px 30px; + overflow-x: auto; +} + +.schedule-table { + width: 100%; + border-collapse: collapse; + font-size: 13px; + min-width: 700px; +} + +.schedule-table th { + background: #f8f9fa; + padding: 12px 10px; + text-align: center; + font-weight: 600; + border: 1px solid #e0e0e0; + font-size: 13px; +} + +.schedule-table td { + border: 1px solid #e0e0e0; + padding: 10px; + vertical-align: top; + background: white; +} + +.time-column { + background: #fafbfc; + font-weight: 500; + color: #000000; + text-align: left; + width: 110px; + font-size: 12px; +} + +.time-column strong { + font-weight: 500; + color: #000000; +} + +.lesson-cell { + min-height: 80px; +} + +.lesson-item { + margin-bottom: 8px; + padding: 8px; + background: #f8f9fa; + border-radius: 6px; + transition: all 0.2s; +} + +.lesson-item:hover { + background: #e8f0fe; + transform: translateX(2px); +} + +.lesson-name { + font-weight: 600; + color: #1a1a2e; + margin-bottom: 5px; + font-size: 13px; +} + +.lesson-teacher { + font-size: 11px; + color: #666; + margin-bottom: 3px; +} + +.lesson-room { + font-size: 11px; + color: #4a90e2; + font-weight: 500; +} + +.lesson-type { + display: inline-block; + font-size: 10px; + padding: 2px 6px; + border-radius: 4px; + background: #e8f0fe; + color: #4a90e2; + margin-top: 5px; +} + +.no-lessons { + color: #ccc; + font-size: 12px; + text-align: center; + padding: 15px 0; +} + +.placeholder { + text-align: center; + padding: 60px 20px; + color: #999; +} + +.placeholder span { + font-size: 48px; + display: block; + margin-bottom: 15px; +} + +/* Подсветка поиска */ +.highlight { + background: #fff3cd !important; + border-radius: 4px; + padding: 4px; +} + +/* Адаптация для мобилки */ +@media (max-width: 768px) { + body { + padding: 10px; + } + + .header { + padding: 20px; + } + + .group-info h1 { + font-size: 20px; + } + + .group-selector { + padding: 15px 20px; + flex-direction: column; + } + + .group-select { + width: 100%; + } + + .btn-primary { + width: 100%; + } + + .week-navigation { + padding: 12px 20px; + } + + .week-current { + font-size: 14px; + } + + .schedule-wrapper { + padding: 15px 20px; + } + + .schedule-table { + font-size: 11px; + min-width: 600px; + } + + .schedule-table th, + .schedule-table td { + padding: 6px; + } + + .time-column { + width: 85px; + font-size: 10px; + } + + + + .lesson-item { + padding: 5px; + } + + .day-date { + font-size: 9px; + } +} \ No newline at end of file diff --git a/server.js b/server.js new file mode 100644 index 00000000..cea19160 --- /dev/null +++ b/server.js @@ -0,0 +1,98 @@ +const express = require('express'); +const app = express(); +const PORT = 3000; + +app.use(express.static('public')); + +app.get('/api/groups', (req, res) => { + res.json([ + { id: '1213641978', name: '6413-100503D' }, + { id: '1213641979', name: '6411-100503D' }, + { id: '1213641980', name: '6412-100503D' } + ]); +}); + +app.get('/api/schedule/group/:id', (req, res) => { + const groupId = req.params.id; + const week = req.query.week || '31'; + + console.log(`Запрос расписания: группа ${groupId}, неделя ${week}`); + res.json(getScheduleData(groupId, week)); +}); + +function getScheduleData(groupId, weekNum) { + const schedules = { + '1213641978': { + '30': [ + { day: 'Понедельник', date: '23.03.2026', lessons: [{ time: '08:00-09:35', name: 'Военная подготовка', teacher: 'Преподаватели Военной Кафедры', room: 'Военная кафедра - 4', type: 'Другое' }] }, + { day: 'Вторник', date: '24.03.2026', lessons: [] }, + { day: 'Среда', date: '25.03.2026', lessons: [{ time: '09:45-11:20', name: 'Современные технологии информационной безопасности', teacher: 'Максимов А.И.', room: 'online', type: 'Лекция' }] }, + { day: 'Четверг', date: '26.03.2026', lessons: [] }, + { day: 'Пятница', date: '27.03.2026', lessons: [] }, + { day: 'Суббота', date: '28.03.2026', lessons: [] } + ], + '31': [ + { day: 'Понедельник', date: '30.03.2026', lessons: [{ time: '08:00-09:35', name: 'Военная подготовка', teacher: 'Преподаватели Военной Кафедры', room: 'Военная кафедра - 4', type: 'Другое' }] }, + { day: 'Вторник', date: '31.03.2026', lessons: [] }, + { day: 'Среда', date: '01.04.2026', lessons: [{ time: '09:45-11:20', name: 'Современные технологии информационной безопасности', teacher: 'Максимов А.И.', room: 'online', type: 'Лекция' }] }, + { day: 'Четверг', date: '02.04.2026', lessons: [{ time: '11:30-13:05', name: 'Безопасность открытых информационных систем', teacher: 'Борисов А.Н.', room: '101а - 3', type: 'Лабораторная' }] }, + { day: 'Пятница', date: '03.04.2026', lessons: [{ time: '09:45-11:20', name: 'Современные технологии информационной безопасности', teacher: 'Максимов А.И.', room: 'online', type: 'Лабораторная' }] }, + { day: 'Суббота', date: '04.04.2026', lessons: [] } + ], + '32': [ + { day: 'Понедельник', date: '06.04.2026', lessons: [{ time: '08:00-09:35', name: 'Форензика', teacher: 'Веричев А.В.', room: 'online', type: 'Лекция' }] }, + { day: 'Вторник', date: '07.04.2026', lessons: [] }, + { day: 'Среда', date: '08.04.2026', lessons: [{ time: '09:45-11:20', name: 'Безопасность открытых информационных систем', teacher: 'Борисов А.Н.', room: '101а - 3', type: 'Лабораторная' }] }, + { day: 'Четверг', date: '09.04.2026', lessons: [] }, + { day: 'Пятница', date: '10.04.2026', lessons: [{ time: '11:30-13:05', name: 'Безопасность систем баз данных', teacher: 'Агафонов А.А.', room: 'online', type: 'Лекция' }] }, + { day: 'Суббота', date: '11.04.2026', lessons: [] } + ], + '33': [ + { day: 'Понедельник', date: '13.04.2026', lessons: [{ time: '08:00-09:35', name: 'Веб-разработка', teacher: 'Агафонов А.А.', room: 'online', type: 'Лекция' }] }, + { day: 'Вторник', date: '14.04.2026', lessons: [{ time: '09:45-11:20', name: 'Компьютерная алгебра', teacher: 'Веричев А.В.', room: '313 - адм', type: 'Лекция' }] }, + { day: 'Среда', date: '15.04.2026', lessons: [] }, + { day: 'Четверг', date: '16.04.2026', lessons: [{ time: '11:30-13:05', name: 'Компьютерная алгебра', teacher: 'Позднякова Д.С.', room: '608 - 18', type: 'Практика' }] }, + { day: 'Пятница', date: '17.04.2026', lessons: [{ time: '13:30-15:05', name: 'Безопасность открытых информационных систем', teacher: 'Кузнецов А.В.', room: 'online', type: 'Лекция' }] }, + { day: 'Суббота', date: '18.04.2026', lessons: [{ time: '09:45-11:20', name: 'Цифровая обработка сигналов', teacher: 'Шапиро Д.А.', room: '102а - 3', type: 'Лабораторная' }] } + ] + }, + '1213641979': { + '31': [ + { day: 'Понедельник', date: '30.03.2026', lessons: [{ time: '08:00-09:35', name: 'Военная подготовка', teacher: 'Преподаватели Военной Кафедры', room: 'Военная кафедра - 4', type: 'Другое' }] }, + { day: 'Вторник', date: '31.03.2026', lessons: [] }, + { day: 'Среда', date: '01.04.2026', lessons: [{ time: '09:45-11:20', name: 'Современные технологии информационной безопасности', teacher: 'Максимов А.И.', room: 'online', type: 'Лекция' }] }, + { day: 'Четверг', date: '02.04.2026', lessons: [] }, + { day: 'Пятница', date: '03.04.2026', lessons: [] }, + { day: 'Суббота', date: '04.04.2026', lessons: [] } + ] + }, + '1213641980': { + '31': [ + { day: 'Понедельник', date: '30.03.2026', lessons: [{ time: '08:00-09:35', name: 'Военная подготовка', teacher: 'Преподаватели Военной Кафедры', room: 'Военная кафедра - 4', type: 'Другое' }] }, + { day: 'Вторник', date: '31.03.2026', lessons: [] }, + { day: 'Среда', date: '01.04.2026', lessons: [{ time: '09:45-11:20', name: 'Современные технологии информационной безопасности', teacher: 'Максимов А.И.', room: 'online', type: 'Лекция' }] }, + { day: 'Четверг', date: '02.04.2026', lessons: [] }, + { day: 'Пятница', date: '03.04.2026', lessons: [] }, + { day: 'Суббота', date: '04.04.2026', lessons: [] } + ] + } + }; + + const groupSchedule = schedules[groupId] || schedules['1213641978']; + const weekData = groupSchedule[weekNum] || groupSchedule['31'] || []; + + return { + group: groupId, + fullName: '10.05.03 Информационная безопасность автоматизированных систем', + weeks: { + current: parseInt(weekNum) || 31, + weeks: { + [weekNum]: weekData + } + } + }; +} + +app.listen(PORT, () => { + console.log(`Server running at http://localhost:${PORT}`); +}); \ No newline at end of file From 1b11257ad74a28eaf122c3b564fb44c3cb2450a5 Mon Sep 17 00:00:00 2001 From: AnyaVerkhovaia Date: Sun, 5 Apr 2026 02:56:27 +0400 Subject: [PATCH 2/6] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B0=D1=80=D1=81=D0=B8=D0=BD=D0=B3?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 135 +++++++++++++++++++++++++++ package.json | 1 + public/script.js | 17 ++-- public/style.css | 77 ++++++++++----- server.js | 233 +++++++++++++++++++++++++++++++++++----------- 5 files changed, 377 insertions(+), 86 deletions(-) diff --git a/package-lock.json b/package-lock.json index 80f310dd..dc7683c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "axios": "^1.14.0", "cheerio": "^1.2.0", "express": "^5.2.1", "node-fetch": "^2.7.0" @@ -27,6 +28,23 @@ "node": ">= 0.6" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.14.0.tgz", + "integrity": "sha512-3Y8yrqLSwjuzpXuZ0oIYZ/XGgLwUIBU3uLvbcpb0pidD9ctpShJd43KSlEEkVQg6DS0G9NKyzOvBfUtDKEyHvQ==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^2.1.0" + } + }, "node_modules/body-parser": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", @@ -137,6 +155,18 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/content-disposition": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", @@ -222,6 +252,15 @@ } } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -382,6 +421,21 @@ "node": ">= 0.4" } }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "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", @@ -461,6 +515,63 @@ "url": "https://opencollective.com/express" } }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data/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/form-data/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/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -549,6 +660,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "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", @@ -865,6 +991,15 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/qs": { "version": "6.15.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", diff --git a/package.json b/package.json index f13abd29..fdad9e82 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "license": "ISC", "description": "", "dependencies": { + "axios": "^1.14.0", "cheerio": "^1.2.0", "express": "^5.2.1", "node-fetch": "^2.7.0" diff --git a/public/script.js b/public/script.js index b71be30c..aa203e78 100644 --- a/public/script.js +++ b/public/script.js @@ -3,10 +3,11 @@ let currentWeek = 31; let scheduleData = null; const days = ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота']; -const timeSlots = ['08:00', '09:45', '11:30', '13:15']; + +const timeSlots = ['08:00', '09:45', '11:30', '13:30', '15:15', '17:00']; $(document).ready(function() { - console.log('✅ Скрипт загружен'); + console.log('Скрипт загружен'); loadGroups(); @@ -59,8 +60,8 @@ function loadGroups() { }); } else { $select.append(''); - $select.append(''); - $select.append(''); + $select.append(''); + $select.append(''); } }, error: function(xhr, status, error) { @@ -69,8 +70,8 @@ function loadGroups() { $select.empty(); $select.append(''); $select.append(''); - $select.append(''); - $select.append(''); + $select.append(''); + $select.append(''); } }); } @@ -136,7 +137,9 @@ function renderScheduleTable() { '08:00': '08:00 - 09:35', '09:45': '09:45 - 11:20', '11:30': '11:30 - 13:05', - '13:15': '13:15 - 14:50' + '13:30': '13:30 - 15:05', + '15:15': '15:15 - 16:50', + '17:00': '17:00 - 18:35' }; let html = ''; diff --git a/public/style.css b/public/style.css index 935e925e..b569e4be 100644 --- a/public/style.css +++ b/public/style.css @@ -19,7 +19,6 @@ body { overflow: hidden; } -/* Шапка */ .header { background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%); color: white; @@ -36,7 +35,6 @@ body { opacity: 0.9; } -/* Поиск */ .search-box { margin-top: 15px; } @@ -51,7 +49,6 @@ body { outline: none; } -/* Выбор группы */ .group-selector { padding: 20px 30px; background: #f8f9fa; @@ -87,7 +84,6 @@ body { background: #357abd; } -/* Навигация по неделям */ .week-navigation { padding: 15px 30px; background: white; @@ -123,7 +119,7 @@ body { .week-current { font-size: 18px; font-weight: 600; - color: #4a90e2; /* Голубой цвет для номера недели */ + color: #4a90e2; } .day-date { @@ -134,7 +130,6 @@ body { margin-top: 4px; } -/* Таблица расписания */ .schedule-wrapper { padding: 20px 30px; overflow-x: auto; @@ -168,8 +163,9 @@ body { font-weight: 500; color: #000000; text-align: left; - width: 110px; + width: 100px; font-size: 12px; + white-space: nowrap; } .time-column strong { @@ -182,8 +178,8 @@ body { } .lesson-item { - margin-bottom: 8px; - padding: 8px; + margin-bottom: 6px; + padding: 6px; background: #f8f9fa; border-radius: 6px; transition: all 0.2s; @@ -197,18 +193,18 @@ body { .lesson-name { font-weight: 600; color: #1a1a2e; - margin-bottom: 5px; - font-size: 13px; + margin-bottom: 3px; + font-size: 12px; } .lesson-teacher { - font-size: 11px; + font-size: 10px; color: #666; - margin-bottom: 3px; + margin-bottom: 2px; } .lesson-room { - font-size: 11px; + font-size: 10px; color: #4a90e2; font-weight: 500; } @@ -220,7 +216,7 @@ body { border-radius: 4px; background: #e8f0fe; color: #4a90e2; - margin-top: 5px; + margin-top: 4px; } .no-lessons { @@ -242,14 +238,16 @@ body { margin-bottom: 15px; } -/* Подсветка поиска */ .highlight { background: #fff3cd !important; border-radius: 4px; padding: 4px; } -/* Адаптация для мобилки */ +.schedule-table tbody tr { + height: auto; +} + @media (max-width: 768px) { body { padding: 10px; @@ -289,8 +287,8 @@ body { } .schedule-table { - font-size: 11px; - min-width: 600px; + font-size: 10px; + min-width: 650px; } .schedule-table th, @@ -299,17 +297,48 @@ body { } .time-column { - width: 85px; - font-size: 10px; + width: 75px; + font-size: 9px; + } + + .time-column strong { + font-size: 9px; } - - .lesson-item { - padding: 5px; + padding: 4px; + margin-bottom: 4px; + } + + .lesson-name { + font-size: 10px; + } + + .lesson-teacher, .lesson-room { + font-size: 9px; + } + + .lesson-type { + font-size: 8px; + padding: 1px 4px; } .day-date { font-size: 9px; } +} + +@media (max-width: 480px) { + .schedule-wrapper { + padding: 10px 15px; + } + + .schedule-table { + font-size: 9px; + min-width: 550px; + } + + .time-column { + width: 60px; + } } \ No newline at end of file diff --git a/server.js b/server.js index cea19160..57d4099b 100644 --- a/server.js +++ b/server.js @@ -1,36 +1,196 @@ const express = require('express'); +const fetch = require('node-fetch'); +const cheerio = require('cheerio'); const app = express(); const PORT = 3000; app.use(express.static('public')); +const groups = { + '6413-100503D': '1213641978', + '6411-100503D': '1282690301', + '6412-100503D': '1282690279' +}; + app.get('/api/groups', (req, res) => { res.json([ { id: '1213641978', name: '6413-100503D' }, - { id: '1213641979', name: '6411-100503D' }, - { id: '1213641980', name: '6412-100503D' } + { id: '1282690301', name: '6411-100503D' }, + { id: '1282690279', name: '6412-100503D' } ]); }); -app.get('/api/schedule/group/:id', (req, res) => { +app.get('/api/schedule/group/:id', async (req, res) => { const groupId = req.params.id; const week = req.query.week || '31'; - console.log(`Запрос расписания: группа ${groupId}, неделя ${week}`); - res.json(getScheduleData(groupId, week)); + let groupName = '6413-100503D'; + for (const [name, id] of Object.entries(groups)) { + if (id === groupId) { + groupName = name; + break; + } + } + + try { + const url = `https://ssau.ru/rasp?groupId=${groupId}&selectedWeek=${week}`; + console.log(`Parsing: ${url}`); + + const response = await fetch(url, { + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' + } + }); + + const html = await response.text(); + const schedule = parseSchedule(html, groupId, groupName, week); + res.json(schedule); + + } catch (error) { + console.error('Parse error:', error.message); + res.json(getMockSchedule(groupId, groupName, week)); + } }); -function getScheduleData(groupId, weekNum) { - const schedules = { - '1213641978': { - '30': [ - { day: 'Понедельник', date: '23.03.2026', lessons: [{ time: '08:00-09:35', name: 'Военная подготовка', teacher: 'Преподаватели Военной Кафедры', room: 'Военная кафедра - 4', type: 'Другое' }] }, - { day: 'Вторник', date: '24.03.2026', lessons: [] }, - { day: 'Среда', date: '25.03.2026', lessons: [{ time: '09:45-11:20', name: 'Современные технологии информационной безопасности', teacher: 'Максимов А.И.', room: 'online', type: 'Лекция' }] }, - { day: 'Четверг', date: '26.03.2026', lessons: [] }, - { day: 'Пятница', date: '27.03.2026', lessons: [] }, - { day: 'Суббота', date: '28.03.2026', lessons: [] } - ], +function parseSchedule(html, groupId, groupName, weekNum) { + const $ = cheerio.load(html); + + const scheduleItems = $('.schedule__items'); + if (scheduleItems.length === 0) { + console.log('Schedule container not found'); + return getMockSchedule(groupId, groupName, weekNum); + } + + const days = []; + scheduleItems.find('.schedule__head:not(:has(.schedule__time-item))').each((i, el) => { + const weekday = $(el).find('.schedule__head-weekday').text().trim(); + const date = $(el).find('.schedule__head-date').text().trim(); + if (weekday && date) { + days.push({ weekday: capitalizeDay(weekday), date, index: i }); + } + }); + + if (days.length === 0) { + console.log('No days found'); + return getMockSchedule(groupId, groupName, weekNum); + } + + console.log(`Found days: ${days.length}`); + + const weekData = []; + days.forEach((day, idx) => { + weekData.push({ + day: day.weekday, + date: day.date, + lessons: [] + }); + }); + + const timeBlocks = scheduleItems.find('.schedule__time'); + + timeBlocks.each((timeBlockIndex, timeBlock) => { + const $timeBlock = $(timeBlock); + + const timeItems = $timeBlock.find('.schedule__time-item'); + const timeRange = []; + timeItems.each((i, timeEl) => { + const timeText = $(timeEl).text().trim(); + const time = timeText.split(' ')[0]; + if (time) timeRange.push(time); + }); + + let timeInterval = ''; + if (timeRange.length === 2) { + timeInterval = `${timeRange[0]}-${timeRange[1]}`; + } else if (timeRange.length === 1) { + timeInterval = timeRange[0]; + } else { + timeInterval = timeRange.join(', '); + } + + let nextElement = $timeBlock.next(); + let dayIndex = 0; + + while (nextElement.length && !nextElement.hasClass('schedule__time')) { + if (nextElement.hasClass('schedule__item') && !nextElement.hasClass('schedule__head')) { + const $lesson = nextElement.find('.schedule__lesson'); + + if ($lesson.length && dayIndex < days.length) { + const subject = $lesson.find('.schedule__discipline').text().trim(); + if (subject) { + const type = $lesson.find('.schedule__lesson-type-chip').text().trim(); + const place = $lesson.find('.schedule__place').text().trim(); + + let teacherName = ''; + const teacherLink = $lesson.find('.schedule__teacher a'); + if (teacherLink.length) { + teacherName = teacherLink.text().trim(); + } else { + teacherName = $lesson.find('.schedule__teacher').text().trim(); + } + + weekData[dayIndex].lessons.push({ + time: formatTimeRange(timeInterval), + name: subject, + teacher: teacherName || 'Не указан', + room: place || 'Не указана', + type: type || 'Занятие' + }); + } + } + dayIndex++; + } + nextElement = nextElement.next(); + } + }); + + const totalLessons = weekData.reduce((sum, day) => sum + day.lessons.length, 0); + console.log(`Parsed lessons: ${totalLessons}`); + + return { + group: groupName, + fullName: '10.05.03 Информационная безопасность автоматизированных систем', + weeks: { + current: parseInt(weekNum) || 31, + weeks: { + [weekNum]: weekData + } + } + }; +} + +function capitalizeDay(day) { + const days = { + 'понедельник': 'Понедельник', + 'вторник': 'Вторник', + 'среда': 'Среда', + 'четверг': 'Четверг', + 'пятница': 'Пятница', + 'суббота': 'Суббота' + }; + return days[day.toLowerCase()] || day; +} + +function formatTimeRange(timeStr) { + const timeMap = { + '08:00': '08:00-09:35', + '09:35': '09:35-11:20', + '09:45': '09:45-11:20', + '11:20': '11:20-13:05', + '11:30': '11:30-13:05', + '13:05': '13:05-14:50', + '13:30': '13:30-15:05', + '15:05': '15:05-16:50', + '15:15': '15:15-16:50', + '16:50': '16:50-18:35', + '17:00': '17:00-18:35' + }; + return timeMap[timeStr] || timeStr; +} + +function getMockSchedule(groupId, groupName, weekNum) { + const mockData = { + '6413-100503D': { '31': [ { day: 'Понедельник', date: '30.03.2026', lessons: [{ time: '08:00-09:35', name: 'Военная подготовка', teacher: 'Преподаватели Военной Кафедры', room: 'Военная кафедра - 4', type: 'Другое' }] }, { day: 'Вторник', date: '31.03.2026', lessons: [] }, @@ -38,51 +198,14 @@ function getScheduleData(groupId, weekNum) { { day: 'Четверг', date: '02.04.2026', lessons: [{ time: '11:30-13:05', name: 'Безопасность открытых информационных систем', teacher: 'Борисов А.Н.', room: '101а - 3', type: 'Лабораторная' }] }, { day: 'Пятница', date: '03.04.2026', lessons: [{ time: '09:45-11:20', name: 'Современные технологии информационной безопасности', teacher: 'Максимов А.И.', room: 'online', type: 'Лабораторная' }] }, { day: 'Суббота', date: '04.04.2026', lessons: [] } - ], - '32': [ - { day: 'Понедельник', date: '06.04.2026', lessons: [{ time: '08:00-09:35', name: 'Форензика', teacher: 'Веричев А.В.', room: 'online', type: 'Лекция' }] }, - { day: 'Вторник', date: '07.04.2026', lessons: [] }, - { day: 'Среда', date: '08.04.2026', lessons: [{ time: '09:45-11:20', name: 'Безопасность открытых информационных систем', teacher: 'Борисов А.Н.', room: '101а - 3', type: 'Лабораторная' }] }, - { day: 'Четверг', date: '09.04.2026', lessons: [] }, - { day: 'Пятница', date: '10.04.2026', lessons: [{ time: '11:30-13:05', name: 'Безопасность систем баз данных', teacher: 'Агафонов А.А.', room: 'online', type: 'Лекция' }] }, - { day: 'Суббота', date: '11.04.2026', lessons: [] } - ], - '33': [ - { day: 'Понедельник', date: '13.04.2026', lessons: [{ time: '08:00-09:35', name: 'Веб-разработка', teacher: 'Агафонов А.А.', room: 'online', type: 'Лекция' }] }, - { day: 'Вторник', date: '14.04.2026', lessons: [{ time: '09:45-11:20', name: 'Компьютерная алгебра', teacher: 'Веричев А.В.', room: '313 - адм', type: 'Лекция' }] }, - { day: 'Среда', date: '15.04.2026', lessons: [] }, - { day: 'Четверг', date: '16.04.2026', lessons: [{ time: '11:30-13:05', name: 'Компьютерная алгебра', teacher: 'Позднякова Д.С.', room: '608 - 18', type: 'Практика' }] }, - { day: 'Пятница', date: '17.04.2026', lessons: [{ time: '13:30-15:05', name: 'Безопасность открытых информационных систем', teacher: 'Кузнецов А.В.', room: 'online', type: 'Лекция' }] }, - { day: 'Суббота', date: '18.04.2026', lessons: [{ time: '09:45-11:20', name: 'Цифровая обработка сигналов', teacher: 'Шапиро Д.А.', room: '102а - 3', type: 'Лабораторная' }] } - ] - }, - '1213641979': { - '31': [ - { day: 'Понедельник', date: '30.03.2026', lessons: [{ time: '08:00-09:35', name: 'Военная подготовка', teacher: 'Преподаватели Военной Кафедры', room: 'Военная кафедра - 4', type: 'Другое' }] }, - { day: 'Вторник', date: '31.03.2026', lessons: [] }, - { day: 'Среда', date: '01.04.2026', lessons: [{ time: '09:45-11:20', name: 'Современные технологии информационной безопасности', teacher: 'Максимов А.И.', room: 'online', type: 'Лекция' }] }, - { day: 'Четверг', date: '02.04.2026', lessons: [] }, - { day: 'Пятница', date: '03.04.2026', lessons: [] }, - { day: 'Суббота', date: '04.04.2026', lessons: [] } - ] - }, - '1213641980': { - '31': [ - { day: 'Понедельник', date: '30.03.2026', lessons: [{ time: '08:00-09:35', name: 'Военная подготовка', teacher: 'Преподаватели Военной Кафедры', room: 'Военная кафедра - 4', type: 'Другое' }] }, - { day: 'Вторник', date: '31.03.2026', lessons: [] }, - { day: 'Среда', date: '01.04.2026', lessons: [{ time: '09:45-11:20', name: 'Современные технологии информационной безопасности', teacher: 'Максимов А.И.', room: 'online', type: 'Лекция' }] }, - { day: 'Четверг', date: '02.04.2026', lessons: [] }, - { day: 'Пятница', date: '03.04.2026', lessons: [] }, - { day: 'Суббота', date: '04.04.2026', lessons: [] } ] } }; - const groupSchedule = schedules[groupId] || schedules['1213641978']; - const weekData = groupSchedule[weekNum] || groupSchedule['31'] || []; + const weekData = (mockData[groupName] && mockData[groupName][weekNum]) || []; return { - group: groupId, + group: groupName, fullName: '10.05.03 Информационная безопасность автоматизированных систем', weeks: { current: parseInt(weekNum) || 31, From fbccf9f722791897b5e2aa67b9358f4792b0f062 Mon Sep 17 00:00:00 2001 From: AnyaVerkhovaia Date: Sun, 5 Apr 2026 19:27:35 +0400 Subject: [PATCH 3/6] =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B0=D1=80=D0=BD=D1=8B=D1=85=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B5=D0=B4=D0=BC=D0=B5=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/index.html | 2 +- public/script.js | 36 +++++++++++++++++++++++++++-------- public/style.css | 10 ++++++++++ server.js | 48 +++++++++-------------------------------------- 4 files changed, 48 insertions(+), 48 deletions(-) diff --git a/public/index.html b/public/index.html index 421b7f33..20e844eb 100644 --- a/public/index.html +++ b/public/index.html @@ -3,7 +3,7 @@ - Расписание СГАУ + Расписание diff --git a/public/script.js b/public/script.js index aa203e78..239e6ec5 100644 --- a/public/script.js +++ b/public/script.js @@ -127,7 +127,14 @@ function renderScheduleTable() { day.lessons.forEach(lesson => { if (lesson.time) { const startTime = lesson.time.split('-')[0]; - lessonsMap[day.day][startTime] = lesson; + if (lessonsMap[day.day][startTime]) { + if (!Array.isArray(lessonsMap[day.day][startTime])) { + lessonsMap[day.day][startTime] = [lessonsMap[day.day][startTime]]; + } + lessonsMap[day.day][startTime].push(lesson); + } else { + lessonsMap[day.day][startTime] = lesson; + } } }); } @@ -160,22 +167,35 @@ function renderScheduleTable() { html += ``; days.forEach(day => { - const lesson = lessonsMap[day] ? lessonsMap[day][timeSlot] : null; + const lessonData = lessonsMap[day] ? lessonsMap[day][timeSlot] : null; - if (lesson) { - html += ` - - `; + `; + if (idx < lessons.length - 1) { + html += `
`; + } + }); } else { - html += ``; + html += `
`; } + + html += ``; }); html += ''; diff --git a/public/style.css b/public/style.css index b569e4be..29808542 100644 --- a/public/style.css +++ b/public/style.css @@ -219,6 +219,16 @@ body { margin-top: 4px; } +.lesson-separator { + height: 1px; + background: #e0e0e0; + margin: 8px 0; +} + +.lesson-item:last-child { + margin-bottom: 0; +} + .no-lessons { color: #ccc; font-size: 12px; diff --git a/server.js b/server.js index 57d4099b..96d47231 100644 --- a/server.js +++ b/server.js @@ -48,7 +48,7 @@ app.get('/api/schedule/group/:id', async (req, res) => { } catch (error) { console.error('Parse error:', error.message); - res.json(getMockSchedule(groupId, groupName, week)); + res.status(500).json({ error: error.message }); } }); @@ -57,8 +57,7 @@ function parseSchedule(html, groupId, groupName, weekNum) { const scheduleItems = $('.schedule__items'); if (scheduleItems.length === 0) { - console.log('Schedule container not found'); - return getMockSchedule(groupId, groupName, weekNum); + throw new Error('Schedule container not found'); } const days = []; @@ -71,8 +70,7 @@ function parseSchedule(html, groupId, groupName, weekNum) { }); if (days.length === 0) { - console.log('No days found'); - return getMockSchedule(groupId, groupName, weekNum); + throw new Error('No days found'); } console.log(`Found days: ${days.length}`); @@ -104,8 +102,6 @@ function parseSchedule(html, groupId, groupName, weekNum) { timeInterval = `${timeRange[0]}-${timeRange[1]}`; } else if (timeRange.length === 1) { timeInterval = timeRange[0]; - } else { - timeInterval = timeRange.join(', '); } let nextElement = $timeBlock.next(); @@ -113,11 +109,13 @@ function parseSchedule(html, groupId, groupName, weekNum) { while (nextElement.length && !nextElement.hasClass('schedule__time')) { if (nextElement.hasClass('schedule__item') && !nextElement.hasClass('schedule__head')) { - const $lesson = nextElement.find('.schedule__lesson'); + const lessonElements = nextElement.find('.schedule__lesson'); - if ($lesson.length && dayIndex < days.length) { + lessonElements.each((lessonIdx, lessonElem) => { + const $lesson = $(lessonElem); + const subject = $lesson.find('.schedule__discipline').text().trim(); - if (subject) { + if (subject && dayIndex < days.length) { const type = $lesson.find('.schedule__lesson-type-chip').text().trim(); const place = $lesson.find('.schedule__place').text().trim(); @@ -137,7 +135,7 @@ function parseSchedule(html, groupId, groupName, weekNum) { type: type || 'Занятие' }); } - } + }); dayIndex++; } nextElement = nextElement.next(); @@ -188,34 +186,6 @@ function formatTimeRange(timeStr) { return timeMap[timeStr] || timeStr; } -function getMockSchedule(groupId, groupName, weekNum) { - const mockData = { - '6413-100503D': { - '31': [ - { day: 'Понедельник', date: '30.03.2026', lessons: [{ time: '08:00-09:35', name: 'Военная подготовка', teacher: 'Преподаватели Военной Кафедры', room: 'Военная кафедра - 4', type: 'Другое' }] }, - { day: 'Вторник', date: '31.03.2026', lessons: [] }, - { day: 'Среда', date: '01.04.2026', lessons: [{ time: '09:45-11:20', name: 'Современные технологии информационной безопасности', teacher: 'Максимов А.И.', room: 'online', type: 'Лекция' }] }, - { day: 'Четверг', date: '02.04.2026', lessons: [{ time: '11:30-13:05', name: 'Безопасность открытых информационных систем', teacher: 'Борисов А.Н.', room: '101а - 3', type: 'Лабораторная' }] }, - { day: 'Пятница', date: '03.04.2026', lessons: [{ time: '09:45-11:20', name: 'Современные технологии информационной безопасности', teacher: 'Максимов А.И.', room: 'online', type: 'Лабораторная' }] }, - { day: 'Суббота', date: '04.04.2026', lessons: [] } - ] - } - }; - - const weekData = (mockData[groupName] && mockData[groupName][weekNum]) || []; - - return { - group: groupName, - fullName: '10.05.03 Информационная безопасность автоматизированных систем', - weeks: { - current: parseInt(weekNum) || 31, - weeks: { - [weekNum]: weekData - } - } - }; -} - app.listen(PORT, () => { console.log(`Server running at http://localhost:${PORT}`); }); \ No newline at end of file From c3e45018490a1f4b9df562ec7da53f7f41fe2426 Mon Sep 17 00:00:00 2001 From: AnyaVerkhovaia Date: Sun, 5 Apr 2026 21:58:51 +0400 Subject: [PATCH 4/6] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D0=BF=D1=80=D0=B5=D0=BF=D0=BE=D0=B4=D0=B0=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D0=B5=D0=BB=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/index.html | 11 ++- public/script.js | 211 +++++++++++++++++++++++++++++++++++++++++++--- public/style.css | 65 ++++++++++++++ server.js | 191 ++++++++++++++++++++++++++++++++++++++++- 4 files changed, 460 insertions(+), 18 deletions(-) diff --git a/public/index.html b/public/index.html index 20e844eb..cf21943c 100644 --- a/public/index.html +++ b/public/index.html @@ -11,7 +11,7 @@

Расписание СГАУ

-

Выберите группу

+

Выберите группу или найдите преподавателя

@@ -19,7 +19,12 @@

Расписание СГАУ

- + + + +
@@ -31,8 +36,8 @@

Расписание СГАУ

- 📅

Выберите группу для просмотра расписания

+

или введите фамилию преподавателя

diff --git a/public/script.js b/public/script.js index 239e6ec5..8e80cdc9 100644 --- a/public/script.js +++ b/public/script.js @@ -1,14 +1,30 @@ let currentGroupId = null; let currentWeek = 31; let scheduleData = null; +let currentView = 'group'; +let currentTeacherId = null; +let currentTeacherName = ''; const days = ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота']; - const timeSlots = ['08:00', '09:45', '11:30', '13:30', '15:15', '17:00']; +function getCurrentWeek() { + const today = new Date(); + const startDate = new Date(2026, 2, 30); + const diffTime = today - startDate; + const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24)); + let weekNumber = Math.floor(diffDays / 7) + 31; + if (weekNumber < 29) weekNumber = 29; + if (weekNumber > 35) weekNumber = 35; + return weekNumber; +} + $(document).ready(function() { console.log('Скрипт загружен'); + currentWeek = getCurrentWeek(); + updateWeekDisplay(); + loadGroups(); $('#loadBtn').click(function() { @@ -17,25 +33,39 @@ $(document).ready(function() { alert('Пожалуйста, выберите группу'); return; } + currentView = 'group'; loadSchedule(); }); + $('#searchTeacherBtn').click(function() { + const query = $('#teacherSearchInput').val().trim(); + if (query.length < 2) { + alert('Введите минимум 2 символа'); + return; + } + searchTeacher(query); + }); + $('#weekPrevBtn').click(function() { - if (currentWeek > 30) { + if (currentWeek > 29) { currentWeek--; updateWeekDisplay(); - if (currentGroupId) { + if (currentView === 'group' && currentGroupId) { loadSchedule(); + } else if (currentView === 'teacher' && currentTeacherId) { + loadTeacherSchedule(currentTeacherId, currentTeacherName); } } }); $('#weekNextBtn').click(function() { - if (currentWeek < 33) { + if (currentWeek < 35) { currentWeek++; updateWeekDisplay(); - if (currentGroupId) { + if (currentView === 'group' && currentGroupId) { loadSchedule(); + } else if (currentView === 'teacher' && currentTeacherId) { + loadTeacherSchedule(currentTeacherId, currentTeacherName); } } }); @@ -79,7 +109,7 @@ function loadGroups() { function loadSchedule() { if (!currentGroupId) return; - $('#scheduleContainer').html('

Загрузка расписания...

'); + $('#scheduleContainer').html('

Загрузка расписания...

'); console.log(`Загрузка расписания для группы ${currentGroupId}, неделя ${currentWeek}`); @@ -94,6 +124,7 @@ function loadSchedule() { if (data && data.weeks && data.weeks.weeks) { renderScheduleTable(); updateGroupInfo(); + currentView = 'group'; } else { showError('Не удалось загрузить расписание'); } @@ -105,6 +136,68 @@ function loadSchedule() { }); } +function searchTeacher(query) { + $('#scheduleContainer').html('

Поиск преподавателя...

'); + + $.ajax({ + url: `/api/search/teacher?q=${encodeURIComponent(query)}`, + method: 'GET', + success: function(teachers) { + if (teachers.length === 0) { + showError('Преподаватель не найден'); + return; + } + + let html = '

Найденные преподаватели:

'; + teachers.forEach(teacher => { + html += ` +
+ ${escapeHtml(teacher.name)} + +
+ `; + }); + html += '
'; + $('#scheduleContainer').html(html); + + $('.btn-select-teacher').click(function() { + const teacherId = $(this).closest('.teacher-result').data('id'); + const teacherName = $(this).closest('.teacher-result').data('name'); + loadTeacherSchedule(teacherId, teacherName); + }); + }, + error: function() { + showError('Ошибка поиска'); + } + }); +} + +function loadTeacherSchedule(teacherId, teacherName) { + currentView = 'teacher'; + currentTeacherId = teacherId; + currentTeacherName = teacherName; + + $('#scheduleContainer').html('

Загрузка расписания преподавателя...

'); + + $.ajax({ + url: `/api/schedule/teacher?id=${teacherId}&week=${currentWeek}`, + method: 'GET', + success: function(data) { + scheduleData = data; + if (data && data.weeks && data.weeks.weeks) { + renderScheduleTableTeacher(); + $('#groupTitle').text(`Расписание: ${teacherName}`); + $('#groupSubtitle').text('Преподаватель'); + } else { + showError('Не удалось загрузить расписание'); + } + }, + error: function() { + showError('Ошибка загрузки'); + } + }); +} + function renderScheduleTable() { if (!scheduleData || !scheduleData.weeks || !scheduleData.weeks.weeks) { showError('Нет данных для отображения'); @@ -173,18 +266,112 @@ function renderScheduleTable() { if (lessonData) { const lessons = Array.isArray(lessonData) ? lessonData : [lessonData]; + + lessons.forEach((lesson, idx) => { + html += ` +
+
${escapeHtml(lesson.name)}
+
${escapeHtml(lesson.teacher)}
+
${escapeHtml(lesson.room)}
+ ${escapeHtml(lesson.type)} +
+ `; + if (idx < lessons.length - 1) { + html += `
`; + } + }); + } else { + html += `
`; + } + + html += ``; + }); + + html += ''; + }); + + html += '
'; + html += '
${fullTimeSlots[timeSlot]} + html += ``; + + if (lessonData) { + const lessons = Array.isArray(lessonData) ? lessonData : [lessonData]; + + if (lessons.length > 1) { + console.log('Найдено несколько занятий в ячейке:', lessons.length); + } + + lessons.forEach((lesson, idx) => { + html += `
${escapeHtml(lesson.name)}
${escapeHtml(lesson.teacher)}
${escapeHtml(lesson.room)}
${escapeHtml(lesson.type)}
-
'; + + $('#scheduleContainer').html(html); +} - if (lessons.length > 1) { - console.log('Найдено несколько занятий в ячейке:', lessons.length); +function renderScheduleTableTeacher() { + if (!scheduleData || !scheduleData.weeks || !scheduleData.weeks.weeks) { + showError('Нет данных для отображения'); + return; + } + + const weekData = scheduleData.weeks.weeks[currentWeek]; + if (!weekData) { + showError(`Нет данных за ${currentWeek} неделю`); + return; + } + + const lessonsMap = {}; + const datesMap = {}; + + weekData.forEach(day => { + lessonsMap[day.day] = {}; + datesMap[day.day] = day.date || ''; + if (day.lessons && Array.isArray(day.lessons)) { + day.lessons.forEach(lesson => { + if (lesson.time) { + const startTime = lesson.time.split('-')[0]; + if (lessonsMap[day.day][startTime]) { + if (!Array.isArray(lessonsMap[day.day][startTime])) { + lessonsMap[day.day][startTime] = [lessonsMap[day.day][startTime]]; + } + lessonsMap[day.day][startTime].push(lesson); + } else { + lessonsMap[day.day][startTime] = lesson; + } } + }); + } + }); + + const fullTimeSlots = { + '08:00': '08:00 - 09:35', + '09:45': '09:45 - 11:20', + '11:30': '11:30 - 13:05', + '13:30': '13:30 - 15:05', + '15:15': '15:15 - 16:50', + '17:00': '17:00 - 18:35' + }; + + let html = ''; + html += ''; + html += ''; + html += ''; + + days.forEach(day => { + const date = datesMap[day] ? `
${formatDate(datesMap[day])}` : ''; + html += ``; + }); + html += ''; + html += ''; + html += ''; + + timeSlots.forEach(timeSlot => { + html += ''; + html += ``; + + days.forEach(day => { + const lessonData = lessonsMap[day] ? lessonsMap[day][timeSlot] : null; + + html += `
Время${day}${date}
${fullTimeSlots[timeSlot]}`; + + if (lessonData) { + const lessons = Array.isArray(lessonData) ? lessonData : [lessonData]; lessons.forEach((lesson, idx) => { html += `
${escapeHtml(lesson.name)}
-
${escapeHtml(lesson.teacher)}
${escapeHtml(lesson.room)}
${escapeHtml(lesson.type)} + ${lesson.groups ? `
Группы: ${escapeHtml(lesson.groups)}
` : ''}
`; if (idx < lessons.length - 1) { @@ -218,8 +405,8 @@ function formatDate(dateStr) { function updateWeekDisplay() { $('#currentWeekLabel').html(`${currentWeek} неделя`); - $('#weekPrevBtn').prop('disabled', currentWeek <= 30); - $('#weekNextBtn').prop('disabled', currentWeek >= 33); + $('#weekPrevBtn').prop('disabled', currentWeek <= 29); + $('#weekNextBtn').prop('disabled', currentWeek >= 35); } function updateGroupInfo() { @@ -239,5 +426,5 @@ function escapeHtml(str) { } function showError(message) { - $('#scheduleContainer').html(`

${message}

`); + $('#scheduleContainer').html(`

${message}

`); } \ No newline at end of file diff --git a/public/style.css b/public/style.css index 29808542..711a3c32 100644 --- a/public/style.css +++ b/public/style.css @@ -351,4 +351,69 @@ body { .time-column { width: 60px; } +} + +.teacher-search { + padding: 15px 30px; + background: #f8f9fa; + border-bottom: 1px solid #e0e0e0; + display: flex; + gap: 15px; + align-items: center; + flex-wrap: wrap; +} + +.teacher-search-input { + flex: 1; + min-width: 250px; + padding: 10px 12px; + border: 1px solid #ccc; + border-radius: 8px; + font-size: 14px; +} + +.btn-secondary { + padding: 10px 24px; + background: #6c757d; + color: white; + border: none; + border-radius: 8px; + font-size: 14px; + cursor: pointer; + transition: background 0.2s; +} + +.btn-secondary:hover { + background: #5a6268; +} + +.search-results { + padding: 20px; +} + +.search-results h3 { + margin-bottom: 15px; +} + +.teacher-result { + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px; + border-bottom: 1px solid #eee; +} + +.btn-select-teacher { + padding: 5px 15px; + background: #4a90e2; + color: white; + border: none; + border-radius: 5px; + cursor: pointer; +} + +.lesson-groups { + font-size: 10px; + color: #666; + margin-top: 4px; } \ No newline at end of file diff --git a/server.js b/server.js index 96d47231..a75d485b 100644 --- a/server.js +++ b/server.js @@ -12,6 +12,18 @@ const groups = { '6412-100503D': '1282690279' }; +const knownTeachers = [ + { id: '335824546', name: 'Максимов А.И.' }, + { id: '664017039', name: 'Борисов А.Н.' }, + { id: '364272302', name: 'Агафонов А.А.' }, + { id: '333991624', name: 'Веричев А.В.' }, + { id: '432837452', name: 'Юзькив Р.Р.' }, + { id: '544973937', name: 'Шапиро Д.А.' }, + { id: '147619112', name: 'Кузнецов А.В.' }, + { id: '651422674', name: 'Позднякова Д.С.' }, + { id: '62061001', name: 'Мясников В.В.' } +]; + app.get('/api/groups', (req, res) => { res.json([ { id: '1213641978', name: '6413-100503D' }, @@ -34,7 +46,7 @@ app.get('/api/schedule/group/:id', async (req, res) => { try { const url = `https://ssau.ru/rasp?groupId=${groupId}&selectedWeek=${week}`; - console.log(`Parsing: ${url}`); + console.log(`Parsing group: ${url}`); const response = await fetch(url, { headers: { @@ -43,7 +55,7 @@ app.get('/api/schedule/group/:id', async (req, res) => { }); const html = await response.text(); - const schedule = parseSchedule(html, groupId, groupName, week); + const schedule = parseGroupSchedule(html, groupName, week); res.json(schedule); } catch (error) { @@ -52,7 +64,84 @@ app.get('/api/schedule/group/:id', async (req, res) => { } }); -function parseSchedule(html, groupId, groupName, weekNum) { +app.get('/api/search/teacher', async (req, res) => { + const query = req.query.q; + if (!query || query.length < 2) { + return res.json([]); + } + + try { + const url = `https://ssau.ru/rasp?search=${encodeURIComponent(query)}`; + console.log(`Searching teacher: ${url}`); + + const response = await fetch(url, { + headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' } + }); + + const html = await response.text(); + const $ = cheerio.load(html); + + const teachers = []; + + $('.schedule__teacher a').each((i, el) => { + const name = $(el).text().trim(); + const href = $(el).attr('href'); + const match = href && href.match(/staffId=(\d+)/); + if (match && name && name.toLowerCase().includes(query.toLowerCase())) { + if (!teachers.find(t => t.id === match[1])) { + teachers.push({ id: match[1], name: name }); + } + } + }); + + if (teachers.length === 0) { + const matched = knownTeachers.filter(t => + t.name.toLowerCase().includes(query.toLowerCase()) + ); + return res.json(matched); + } + + res.json(teachers.slice(0, 10)); + + } catch (error) { + console.error('Search error:', error); + const matched = knownTeachers.filter(t => + t.name.toLowerCase().includes(query.toLowerCase()) + ); + res.json(matched); + } +}); + +app.get('/api/schedule/teacher', async (req, res) => { + const teacherId = req.query.id; + const week = req.query.week || '31'; + + try { + const url = `https://ssau.ru/rasp?staffId=${teacherId}&selectedWeek=${week}`; + console.log(`Parsing teacher: ${url}`); + + const response = await fetch(url, { + headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' } + }); + + const html = await response.text(); + const schedule = parseTeacherSchedule(html, teacherId, week); + res.json(schedule); + + } catch (error) { + console.error('Teacher parse error:', error); + + const teacher = knownTeachers.find(t => t.id === teacherId); + if (teacher) { + res.json(getMockTeacherSchedule(teacherId, week)); + } else { + res.status(500).json({ error: error.message }); + } + } +}); + + +function parseGroupSchedule(html, groupName, weekNum) { const $ = cheerio.load(html); const scheduleItems = $('.schedule__items'); @@ -157,6 +246,102 @@ function parseSchedule(html, groupId, groupName, weekNum) { }; } +function parseTeacherSchedule(html, teacherId, weekNum) { + const $ = cheerio.load(html); + + const scheduleItems = $('.schedule__items'); + if (scheduleItems.length === 0) { + throw new Error('Schedule container not found'); + } + + const weekData = []; + const daysMap = {}; + + scheduleItems.find('.schedule__head:not(:has(.schedule__time-item))').each((i, el) => { + const weekday = $(el).find('.schedule__head-weekday').text().trim(); + const date = $(el).find('.schedule__head-date').text().trim(); + if (weekday && date) { + daysMap[i] = { weekday: capitalizeDay(weekday), date }; + } + }); + + const timeBlocks = scheduleItems.find('.schedule__time'); + + timeBlocks.each((timeBlockIndex, timeBlock) => { + const $timeBlock = $(timeBlock); + + const timeItems = $timeBlock.find('.schedule__time-item'); + const timeRange = []; + timeItems.each((i, timeEl) => { + const timeText = $(timeEl).text().trim(); + const time = timeText.split(' ')[0]; + if (time) timeRange.push(time); + }); + + let timeInterval = ''; + if (timeRange.length === 2) { + timeInterval = `${timeRange[0]}-${timeRange[1]}`; + } else if (timeRange.length === 1) { + timeInterval = timeRange[0]; + } + + let nextElement = $timeBlock.next(); + let dayIndex = 0; + + while (nextElement.length && !nextElement.hasClass('schedule__time')) { + if (nextElement.hasClass('schedule__item') && !nextElement.hasClass('schedule__head')) { + const lessonElements = nextElement.find('.schedule__lesson'); + + lessonElements.each((lessonIdx, lessonElem) => { + const $lesson = $(lessonElem); + + const subject = $lesson.find('.schedule__discipline').text().trim(); + if (subject && daysMap[dayIndex]) { + const type = $lesson.find('.schedule__lesson-type-chip').text().trim(); + const place = $lesson.find('.schedule__place').text().trim(); + + const groupsList = []; + $lesson.find('.schedule__groups a').each((i, groupEl) => { + groupsList.push($(groupEl).text().trim()); + }); + + let dayObj = weekData.find(d => d.day === daysMap[dayIndex].weekday); + if (!dayObj) { + dayObj = { + day: daysMap[dayIndex].weekday, + date: daysMap[dayIndex].date, + lessons: [] + }; + weekData.push(dayObj); + } + + dayObj.lessons.push({ + time: formatTimeRange(timeInterval), + name: subject, + room: place || 'Не указана', + type: type || 'Занятие', + groups: groupsList.join(', ') + }); + } + }); + dayIndex++; + } + nextElement = nextElement.next(); + } + }); + + return { + teacherId: teacherId, + fullName: 'Расписание преподавателя', + weeks: { + current: parseInt(weekNum) || 31, + weeks: { + [weekNum]: weekData + } + } + }; +} + function capitalizeDay(day) { const days = { 'понедельник': 'Понедельник', From e001a2e9ff58f51075751a38e8eda9d03ef25559 Mon Sep 17 00:00:00 2001 From: AnyaVerkhovaia Date: Sun, 5 Apr 2026 22:49:41 +0400 Subject: [PATCH 5/6] =?UTF-8?q?=D0=B2=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/index.html | 2 +- public/script.js | 147 ++++-------------- public/style.css | 142 ++++++----------- server.js | 8 +- ...1\201\320\260\320\275\320\270\320\265.jpg" | Bin 0 -> 140349 bytes ...0\260\321\202\320\265\320\273\321\217.jpg" | Bin 0 -> 130124 bytes 6 files changed, 82 insertions(+), 217 deletions(-) create mode 100644 "\320\236\320\261\321\211\320\265\320\265 \321\200\320\260\321\201\320\277\320\270\321\201\320\260\320\275\320\270\320\265.jpg" create mode 100644 "\320\240\320\260\321\201\320\277\320\270\321\201\320\260\320\275\320\270\320\265 \320\277\321\200\320\265\320\277\320\276\320\264\320\260\320\262\320\260\321\202\320\265\320\273\321\217.jpg" diff --git a/public/index.html b/public/index.html index cf21943c..df4f0839 100644 --- a/public/index.html +++ b/public/index.html @@ -10,7 +10,7 @@
-

Расписание СГАУ

+

Расписание

Выберите группу или найдите преподавателя

diff --git a/public/script.js b/public/script.js index 8e80cdc9..c36ce017 100644 --- a/public/script.js +++ b/public/script.js @@ -8,6 +8,15 @@ let currentTeacherName = ''; const days = ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота']; const timeSlots = ['08:00', '09:45', '11:30', '13:30', '15:15', '17:00']; +const fullTimeSlots = { + '08:00': '08:00 - 09:35', + '09:45': '09:45 - 11:20', + '11:30': '11:30 - 13:05', + '13:30': '13:30 - 15:05', + '15:15': '15:15 - 16:50', + '17:00': '17:00 - 18:35' +}; + function getCurrentWeek() { const today = new Date(); const startDate = new Date(2026, 2, 30); @@ -122,7 +131,7 @@ function loadSchedule() { scheduleData = data; if (data && data.weeks && data.weeks.weeks) { - renderScheduleTable(); + renderScheduleTable(false); updateGroupInfo(); currentView = 'group'; } else { @@ -137,7 +146,7 @@ function loadSchedule() { } function searchTeacher(query) { - $('#scheduleContainer').html('

Поиск преподавателя...

'); + $('#scheduleContainer').html('

Поиск преподавателя...

'); $.ajax({ url: `/api/search/teacher?q=${encodeURIComponent(query)}`, @@ -185,7 +194,7 @@ function loadTeacherSchedule(teacherId, teacherName) { success: function(data) { scheduleData = data; if (data && data.weeks && data.weeks.weeks) { - renderScheduleTableTeacher(); + renderScheduleTable(true); $('#groupTitle').text(`Расписание: ${teacherName}`); $('#groupSubtitle').text('Преподаватель'); } else { @@ -198,7 +207,7 @@ function loadTeacherSchedule(teacherId, teacherName) { }); } -function renderScheduleTable() { +function renderScheduleTable(isTeacher) { if (!scheduleData || !scheduleData.weeks || !scheduleData.weeks.weeks) { showError('Нет данных для отображения'); return; @@ -233,15 +242,6 @@ function renderScheduleTable() { } }); - const fullTimeSlots = { - '08:00': '08:00 - 09:35', - '09:45': '09:45 - 11:20', - '11:30': '11:30 - 13:05', - '13:30': '13:30 - 15:05', - '15:15': '15:15 - 16:50', - '17:00': '17:00 - 18:35' - }; - let html = ''; html += ''; html += ''; @@ -268,112 +268,25 @@ function renderScheduleTable() { const lessons = Array.isArray(lessonData) ? lessonData : [lessonData]; lessons.forEach((lesson, idx) => { - html += ` -
-
${escapeHtml(lesson.name)}
-
${escapeHtml(lesson.teacher)}
-
${escapeHtml(lesson.room)}
- ${escapeHtml(lesson.type)} -
- `; - if (idx < lessons.length - 1) { - html += `
`; - } - }); - } else { - html += `
`; - } - - html += ``; - }); - - html += ''; - }); - - html += ''; - html += '
'; - - $('#scheduleContainer').html(html); -} - -function renderScheduleTableTeacher() { - if (!scheduleData || !scheduleData.weeks || !scheduleData.weeks.weeks) { - showError('Нет данных для отображения'); - return; - } - - const weekData = scheduleData.weeks.weeks[currentWeek]; - if (!weekData) { - showError(`Нет данных за ${currentWeek} неделю`); - return; - } - - const lessonsMap = {}; - const datesMap = {}; - - weekData.forEach(day => { - lessonsMap[day.day] = {}; - datesMap[day.day] = day.date || ''; - if (day.lessons && Array.isArray(day.lessons)) { - day.lessons.forEach(lesson => { - if (lesson.time) { - const startTime = lesson.time.split('-')[0]; - if (lessonsMap[day.day][startTime]) { - if (!Array.isArray(lessonsMap[day.day][startTime])) { - lessonsMap[day.day][startTime] = [lessonsMap[day.day][startTime]]; - } - lessonsMap[day.day][startTime].push(lesson); + if (isTeacher) { + html += ` +
+
${escapeHtml(lesson.name)}
+
${escapeHtml(lesson.room)}
+ ${escapeHtml(lesson.type)} + ${lesson.groups ? `
Группы: ${escapeHtml(lesson.groups)}
` : ''} +
+ `; } else { - lessonsMap[day.day][startTime] = lesson; + html += ` +
+
${escapeHtml(lesson.name)}
+
${escapeHtml(lesson.teacher)}
+
${escapeHtml(lesson.room)}
+ ${escapeHtml(lesson.type)} +
+ `; } - } - }); - } - }); - - const fullTimeSlots = { - '08:00': '08:00 - 09:35', - '09:45': '09:45 - 11:20', - '11:30': '11:30 - 13:05', - '13:30': '13:30 - 15:05', - '15:15': '15:15 - 16:50', - '17:00': '17:00 - 18:35' - }; - - let html = ''; - html += ''; - html += ''; - html += ''; - - days.forEach(day => { - const date = datesMap[day] ? `
${formatDate(datesMap[day])}` : ''; - html += ``; - }); - html += ''; - html += ''; - html += ''; - - timeSlots.forEach(timeSlot => { - html += ''; - html += ``; - - days.forEach(day => { - const lessonData = lessonsMap[day] ? lessonsMap[day][timeSlot] : null; - - html += `
Время${day}${date}
${fullTimeSlots[timeSlot]}`; - - if (lessonData) { - const lessons = Array.isArray(lessonData) ? lessonData : [lessonData]; - - lessons.forEach((lesson, idx) => { - html += ` -
-
${escapeHtml(lesson.name)}
-
${escapeHtml(lesson.room)}
- ${escapeHtml(lesson.type)} - ${lesson.groups ? `
Группы: ${escapeHtml(lesson.groups)}
` : ''} -
- `; if (idx < lessons.length - 1) { html += `
`; } diff --git a/public/style.css b/public/style.css index 711a3c32..e50cf112 100644 --- a/public/style.css +++ b/public/style.css @@ -35,21 +35,7 @@ body { opacity: 0.9; } -.search-box { - margin-top: 15px; -} - -.search-input { - width: 100%; - max-width: 300px; - padding: 10px 15px; - border: none; - border-radius: 8px; - font-size: 14px; - outline: none; -} - -.group-selector { +.group-selector, .teacher-search { padding: 20px 30px; background: #f8f9fa; border-bottom: 1px solid #e0e0e0; @@ -59,7 +45,7 @@ body { flex-wrap: wrap; } -.group-select { +.group-select, .teacher-search-input { flex: 1; min-width: 250px; padding: 10px 12px; @@ -69,9 +55,8 @@ body { background: white; } -.btn-primary { +.btn-primary, .btn-secondary { padding: 10px 24px; - background: #4a90e2; color: white; border: none; border-radius: 8px; @@ -80,10 +65,22 @@ body { transition: background 0.2s; } +.btn-primary { + background: #4a90e2; +} + .btn-primary:hover { background: #357abd; } +.btn-secondary { + background: #6c757d; +} + +.btn-secondary:hover { + background: #5a6268; +} + .week-navigation { padding: 15px 30px; background: white; @@ -248,16 +245,41 @@ body { margin-bottom: 15px; } -.highlight { - background: #fff3cd !important; - border-radius: 4px; - padding: 4px; -} - .schedule-table tbody tr { height: auto; } +.search-results { + padding: 20px; +} + +.search-results h3 { + margin-bottom: 15px; +} + +.teacher-result { + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px; + border-bottom: 1px solid #eee; +} + +.btn-select-teacher { + padding: 5px 15px; + background: #4a90e2; + color: white; + border: none; + border-radius: 5px; + cursor: pointer; +} + +.lesson-groups { + font-size: 10px; + color: #666; + margin-top: 4px; +} + @media (max-width: 768px) { body { padding: 10px; @@ -271,16 +293,17 @@ body { font-size: 20px; } - .group-selector { + .group-selector, .teacher-search { padding: 15px 20px; flex-direction: column; } - .group-select { + .group-select, .teacher-search-input { width: 100%; + min-width: auto; } - .btn-primary { + .btn-primary, .btn-secondary { width: 100%; } @@ -351,69 +374,4 @@ body { .time-column { width: 60px; } -} - -.teacher-search { - padding: 15px 30px; - background: #f8f9fa; - border-bottom: 1px solid #e0e0e0; - display: flex; - gap: 15px; - align-items: center; - flex-wrap: wrap; -} - -.teacher-search-input { - flex: 1; - min-width: 250px; - padding: 10px 12px; - border: 1px solid #ccc; - border-radius: 8px; - font-size: 14px; -} - -.btn-secondary { - padding: 10px 24px; - background: #6c757d; - color: white; - border: none; - border-radius: 8px; - font-size: 14px; - cursor: pointer; - transition: background 0.2s; -} - -.btn-secondary:hover { - background: #5a6268; -} - -.search-results { - padding: 20px; -} - -.search-results h3 { - margin-bottom: 15px; -} - -.teacher-result { - display: flex; - justify-content: space-between; - align-items: center; - padding: 10px; - border-bottom: 1px solid #eee; -} - -.btn-select-teacher { - padding: 5px 15px; - background: #4a90e2; - color: white; - border: none; - border-radius: 5px; - cursor: pointer; -} - -.lesson-groups { - font-size: 10px; - color: #666; - margin-top: 4px; } \ No newline at end of file diff --git a/server.js b/server.js index a75d485b..cd7ff507 100644 --- a/server.js +++ b/server.js @@ -130,13 +130,7 @@ app.get('/api/schedule/teacher', async (req, res) => { } catch (error) { console.error('Teacher parse error:', error); - - const teacher = knownTeachers.find(t => t.id === teacherId); - if (teacher) { - res.json(getMockTeacherSchedule(teacherId, week)); - } else { - res.status(500).json({ error: error.message }); - } + res.status(500).json({ error: error.message }); } }); diff --git "a/\320\236\320\261\321\211\320\265\320\265 \321\200\320\260\321\201\320\277\320\270\321\201\320\260\320\275\320\270\320\265.jpg" "b/\320\236\320\261\321\211\320\265\320\265 \321\200\320\260\321\201\320\277\320\270\321\201\320\260\320\275\320\270\320\265.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..b541c2def2a58da26ffc78aec92394c5a1ee1cd2 GIT binary patch literal 140349 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 Vga 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 Qi3bg*g>>D}Qu#9QKdnnFLI3~& literal 0 HcmV?d00001 diff --git "a/\320\240\320\260\321\201\320\277\320\270\321\201\320\260\320\275\320\270\320\265 \320\277\321\200\320\265\320\277\320\276\320\264\320\260\320\262\320\260\321\202\320\265\320\273\321\217.jpg" "b/\320\240\320\260\321\201\320\277\320\270\321\201\320\260\320\275\320\270\320\265 \320\277\321\200\320\265\320\277\320\276\320\264\320\260\320\262\320\260\321\202\320\265\320\273\321\217.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..23eb44732e84167459781bf0b7533113585e6179 GIT binary patch literal 130124 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�oKUyb5W^k5$#d5aWDT!U;5da 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 E14)jP5dZ)H literal 0 HcmV?d00001 From 6efb71418f9a76caadfda894ab044d5b7797ccee Mon Sep 17 00:00:00 2001 From: AnyaVerkhovaia Date: Mon, 6 Apr 2026 15:55:40 +0400 Subject: [PATCH 6/6] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20Readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 47 ++++++++++++++++++++--------------------------- 1 file changed, 20 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 163d41b9..1b454d00 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,5 @@ # Безопасность веб-приложений. Лабораторка №2 -## Схема сдачи - -1. Получить задание -2. Сделать форк данного репозитория -3. Выполнить задание согласно полученному варианту -4. Сделать PR (pull request) в данный репозиторий -6. Исправить замечания после code review -7. Получить approve -8. Прийти на занятие и защитить работу - Что нужно проявить в работе: - умение разработать завершенное целое веб-приложение, с клиентской и серверной частями (допустимы открытые АПИ) - навыки верстки на html в объеме 200-300 тегов @@ -30,28 +20,31 @@ - обеспечить возможность смотреть расписания в разрезе группы или препода - обеспечить возможность выбора учебной недели (по умолчанию выбирается автоматически) -## Вариант 2. Аналог Прибывалки для электричек +### Функциональность -Сделать веб-версию Прибывалки, только для электричек +#### 1. Просмотр расписания группы +- Выбор группы из выпадающего списка (6413-100503D, 6411-100503D, 6412-100503D) +- Динамическая загрузка расписания через AJAX +- Отображение в виде таблицы: время × дни недели +- Дата под каждым днём недели -Какие нужны возможности: -- находить желаемую ЖД-станцию поиском по названию и по карте -- отображать расписания всех проходящих поездов через выбранную станцию -- отображать расписания для поездов между двумя станциями -- работа через АПИ Яндекс.Расписаний https://yandex.ru/dev/rasp/doc/ru/ (доступ получите сами) -- хорошая работа в условиях экрана смартфона -- бонус: функция "любимых остановок" +#### 2. Просмотр расписания преподавателя +- Поиск преподавателя по фамилии +- Выбор из найденных результатов +- Отображение расписания с указанием групп -## Вариант 3. Прогноз погоды +#### 3. Выбор учебной недели +- Автоматическое определение текущей недели при загрузке +- Ручной выбор недели кнопками "Предыдущая неделя" / "Следующая неделя" +- Диапазон недель: 29-35 + +#### 4. Парсинг реального сайта СГАУ +- Данные извлекаются с `https://ssau.ru/rasp` +- Используется Cheerio для парсинга HTML +- Поддерживаются несколько занятий в одной ячейке +- Для преподавателей используется список известных ID -Сделать одностраничный сайт с картой, на которой можно выбрать населенный пункт и получить прогноз погоды на несколько дней по нему. -Какие нужны возможности: - - увидеть на карте точки с населенными пунктами. Координаты населенных пунктов взять из https://tochno.st/datasets/allsettlements - но все 150 тысяч не нужно, выберите 1 тысячу с самым большим населением. - - при нажатии на точку получить всплывающее окошко с графиками изменения температуры, осадков, силы ветра. API для прогнозов возьмите с https://projecteol.ru/ru/ с соблюдением правил. - - графики рисовать каким-нибудь приличным компонентом, например, https://www.chartjs.org/ - - находить населенный пункт по названию - - можете реализовать с собственным серверным компонентом или придумать, как обойтись без него