update
This commit is contained in:
22
.gitignore
vendored
Normal file
22
.gitignore
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
# Python virtual environments
|
||||
.venv/
|
||||
venv/
|
||||
env/
|
||||
|
||||
# All .env secret files (root + all subdirectories)
|
||||
.env
|
||||
.env.*
|
||||
**/.env
|
||||
**/.env.*
|
||||
|
||||
# ENV.env style folders/files
|
||||
ENV.env
|
||||
**/ENV.env
|
||||
|
||||
# Any folder named *.env pattern
|
||||
*.env/
|
||||
**/*.env/
|
||||
|
||||
|
||||
node_modules/
|
||||
node_modules/*
|
||||
14
1_upload_to_gitEa.sh
Normal file
14
1_upload_to_gitEa.sh
Normal file
@@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
source "$(dirname "$0")/.env"
|
||||
|
||||
COMMIT_MSG="${1:-update}"
|
||||
|
||||
git remote remove origin 2>/dev/null || true
|
||||
git remote add origin https://${GITEA_USER}:${GITEA_TOKEN}@${GITEA_REPO_URL#https://}
|
||||
|
||||
git add -A
|
||||
git commit -m "$COMMIT_MSG" || echo "nothing to commit"
|
||||
git branch -M main
|
||||
git push -u origin ${GITEA_BRANCH}
|
||||
778
package-lock.json
generated
Normal file
778
package-lock.json
generated
Normal file
@@ -0,0 +1,778 @@
|
||||
{
|
||||
"name": "ai_frontend",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "ai_frontend",
|
||||
"version": "1.0.0",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"express": "^5.2.1"
|
||||
}
|
||||
},
|
||||
"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==",
|
||||
"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==",
|
||||
"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/bytes": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
|
||||
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
|
||||
"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==",
|
||||
"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==",
|
||||
"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/content-disposition": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz",
|
||||
"integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==",
|
||||
"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==",
|
||||
"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==",
|
||||
"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==",
|
||||
"engines": {
|
||||
"node": ">=6.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/debug": {
|
||||
"version": "4.4.3",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
|
||||
"integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
|
||||
"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==",
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"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==",
|
||||
"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=="
|
||||
},
|
||||
"node_modules/encodeurl": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
|
||||
"integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/es-define-property": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
|
||||
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
|
||||
"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==",
|
||||
"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==",
|
||||
"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=="
|
||||
},
|
||||
"node_modules/etag": {
|
||||
"version": "1.8.1",
|
||||
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
|
||||
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
|
||||
"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==",
|
||||
"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==",
|
||||
"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==",
|
||||
"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==",
|
||||
"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==",
|
||||
"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==",
|
||||
"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==",
|
||||
"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==",
|
||||
"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==",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/hasown": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz",
|
||||
"integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==",
|
||||
"dependencies": {
|
||||
"function-bind": "^1.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"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==",
|
||||
"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==",
|
||||
"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=="
|
||||
},
|
||||
"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==",
|
||||
"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=="
|
||||
},
|
||||
"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==",
|
||||
"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==",
|
||||
"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==",
|
||||
"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==",
|
||||
"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==",
|
||||
"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=="
|
||||
},
|
||||
"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==",
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"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==",
|
||||
"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==",
|
||||
"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==",
|
||||
"dependencies": {
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"node_modules/parseurl": {
|
||||
"version": "1.3.3",
|
||||
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
|
||||
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
|
||||
"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==",
|
||||
"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==",
|
||||
"dependencies": {
|
||||
"forwarded": "0.2.0",
|
||||
"ipaddr.js": "1.9.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.10"
|
||||
}
|
||||
},
|
||||
"node_modules/qs": {
|
||||
"version": "6.15.1",
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz",
|
||||
"integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==",
|
||||
"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==",
|
||||
"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==",
|
||||
"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==",
|
||||
"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=="
|
||||
},
|
||||
"node_modules/send": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz",
|
||||
"integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==",
|
||||
"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==",
|
||||
"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=="
|
||||
},
|
||||
"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==",
|
||||
"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.1",
|
||||
"resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz",
|
||||
"integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==",
|
||||
"dependencies": {
|
||||
"es-errors": "^1.3.0",
|
||||
"object-inspect": "^1.13.4"
|
||||
},
|
||||
"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==",
|
||||
"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==",
|
||||
"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==",
|
||||
"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==",
|
||||
"engines": {
|
||||
"node": ">=0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/type-is": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz",
|
||||
"integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==",
|
||||
"dependencies": {
|
||||
"content-type": "^2.0.0",
|
||||
"media-typer": "^1.1.0",
|
||||
"mime-types": "^3.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 18"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/express"
|
||||
}
|
||||
},
|
||||
"node_modules/type-is/node_modules/content-type": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz",
|
||||
"integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==",
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/express"
|
||||
}
|
||||
},
|
||||
"node_modules/unpipe": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
|
||||
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
|
||||
"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==",
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"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=="
|
||||
}
|
||||
}
|
||||
}
|
||||
16
package.json
Normal file
16
package.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "ai_frontend",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "server.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"start": "node server.js"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"express": "^5.2.1"
|
||||
}
|
||||
}
|
||||
80
public/1/index.html
Normal file
80
public/1/index.html
Normal file
@@ -0,0 +1,80 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Jarvis</title>
|
||||
<meta name="description" content="" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="../style/Style.css" />
|
||||
</head>
|
||||
<body >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div style="display: flex;flex-direction: row;flex-wrap: wrap; justify-content: center; ">
|
||||
<iframe src="../2/left.html" id="leftmenu" style="background-color: rgb(0, 0, 0);border-color: aqua; margin: 0; padding: 0; box-sizing: border-box; flex-grow: 0.1; "></iframe>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<iframe src="../3/center.html" id="center" class="flex_parent" style="background-color: rgb(0, 0, 0);border-color: aqua; margin: 0; padding: 0; box-sizing: border-box; flex-grow: 2; padding-right: 0px;margin-left: 0px; min-height: 400px;"></iframe>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<iframe src="../4/right.html" id="rightmenu" style="background-color: rgb(0, 0, 0);border-color: aqua; margin: 0; padding: 0; box-sizing: border-box; flex-grow: 0.1; height: 99.6vh;"></iframe>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
// Listen for messages from iframes
|
||||
window.addEventListener('message', (event) => {
|
||||
if (event.origin !== window.location.origin) return; // Security check
|
||||
|
||||
const { target, message } = event.data;
|
||||
|
||||
const id_of_recipant__iframe_element = document.getElementById(target).contentWindow;
|
||||
id_of_recipant__iframe_element.postMessage(event.data , '*'); // Forward to center.html
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
<!-- <iframe id="iframe1" src="iframe1.html"></iframe>
|
||||
<iframe id="iframe2" src="iframe2.html"></iframe> -->
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- <script src="./index_JS.js"></script>
|
||||
<script src="./app.js"></script> -->
|
||||
</body>
|
||||
</html>
|
||||
209
public/2/left.html
Normal file
209
public/2/left.html
Normal file
@@ -0,0 +1,209 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Jarvis</title>
|
||||
<meta name="description" content="" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="../style/Style.css" />
|
||||
</head>
|
||||
<body >
|
||||
|
||||
|
||||
<div class="main_scrollable " style="background-color: rgba(4, 0, 255, 0);">
|
||||
<div id="date_time" style="background-color: rgba(0, 255, 21, 0); overflow: hidden; width: fit-content;" >
|
||||
<div id="date" class="semi_arc e4">
|
||||
<div class="semi_arc_2 e4_1">
|
||||
<div class="counterspin4"></div>
|
||||
</div>
|
||||
<div style="font-size: 40px; margin-top: 25px" id="dateValue" >12</div>
|
||||
<div style="font-size: 25px" id="monthValue">february</div>
|
||||
</div>
|
||||
|
||||
<div id="time" class="arc e1">
|
||||
<div
|
||||
style="font-size: 23px; margin-left: -10px; margin-top: 23px"
|
||||
id="timeValue"
|
||||
>8:03 pm</div>
|
||||
<div
|
||||
style="font-size: 17px; margin-top: 10px"
|
||||
id="weekDayValue"
|
||||
>Saturday</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<p class="title">Performance</p>
|
||||
<div class="hline title_underline"></div>
|
||||
|
||||
<span
|
||||
class=" entypo-gauge "
|
||||
style="font-size: 30px; padding-left: 10px;"
|
||||
>
|
||||
<p id="cpu" class="caption" style="font-size: 20px">CPU Usage: 19%</p>
|
||||
</span>
|
||||
<br />
|
||||
|
||||
<span
|
||||
class=" entypo-chart-area "
|
||||
style="font-size: 30px; padding-left: 10px;"
|
||||
>
|
||||
<p id="ram" class="caption" style="font-size: 20px">Battery: 100%</p>
|
||||
</span>
|
||||
<br />
|
||||
|
||||
<span
|
||||
class=" entypo-chart-pie "
|
||||
style="font-size: 30px; padding-left: 10px;"
|
||||
>
|
||||
<p id="proc" class="caption" style="font-size: 20px">Processes: 73/500</p>
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<p class="title">Al models</p>
|
||||
<div class="hline title_underline"></div>
|
||||
|
||||
<div class="menu">
|
||||
<button class="menuitem">
|
||||
<span class="entypo-right-open entypo__-right-open" />
|
||||
<p class="caption" onclick="playAudio()">User</p>
|
||||
</button>
|
||||
<button class="menuitem">
|
||||
<span class="entypo-right-open entypo__-right-open" />
|
||||
<p class="caption" onclick="playAudio()">Documents</p>
|
||||
</button>
|
||||
<button class="menuitem">
|
||||
<span class="entypo-right-open entypo__-right-open" />
|
||||
<p class="caption" onclick="playAudio()">Computer</p>
|
||||
</button>
|
||||
<button class="menuitem">
|
||||
<span class="entypo-right-open entypo__-right-open" />
|
||||
<p class="caption">Control Panel</p>
|
||||
</button>
|
||||
|
||||
<hr style="border-color: transparent; margin: 0" />
|
||||
<div class="hline" style="margin-top: 5px; margin-bottom: 5px"></div>
|
||||
|
||||
<button class="menuitem">
|
||||
<span class="entypo-right-open entypo__-right-open" />
|
||||
<p class="caption">Custom Path 1</p>
|
||||
</button>
|
||||
<button class="menuitem">
|
||||
<span class="entypo-right-open entypo__-right-open" />
|
||||
<p class="caption">Custom Path 2</p>
|
||||
</button>
|
||||
<button class="menuitem">
|
||||
<span class="entypo-right-open entypo__-right-open" />
|
||||
<p class="caption">Custom Path 3</p>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<p class="title">Al models</p>
|
||||
<div class="hline title_underline"></div>
|
||||
|
||||
<div class="menu">
|
||||
<button class="menuitem">
|
||||
<span class="entypo-right-open entypo__-right-open" />
|
||||
<p class="caption" onclick="playAudio()">User</p>
|
||||
</button>
|
||||
<button class="menuitem">
|
||||
<span class="entypo-right-open entypo__-right-open" />
|
||||
<p class="caption" onclick="playAudio()">Documents</p>
|
||||
</button>
|
||||
<button class="menuitem">
|
||||
<span class="entypo-right-open entypo__-right-open" />
|
||||
<p class="caption" onclick="playAudio()">Computer</p>
|
||||
</button>
|
||||
<button class="menuitem">
|
||||
<span class="entypo-right-open entypo__-right-open" />
|
||||
<p class="caption">Control Panel</p>
|
||||
</button>
|
||||
|
||||
<hr style="border-color: transparent; margin: 0" />
|
||||
<div class="hline" style="margin-top: 5px; margin-bottom: 5px"></div>
|
||||
|
||||
<button class="menuitem">
|
||||
<span class="entypo-right-open entypo__-right-open" />
|
||||
<p class="caption">Custom Path 1</p>
|
||||
</button>
|
||||
<button class="menuitem">
|
||||
<span class="entypo-right-open entypo__-right-open" />
|
||||
<p class="caption">Custom Path 2</p>
|
||||
</button>
|
||||
<button class="menuitem">
|
||||
<span class="entypo-right-open entypo__-right-open" />
|
||||
<p class="caption">Custom Path 3</p>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<p class="title">Al models last</p>
|
||||
<div class="hline title_underline"></div>
|
||||
|
||||
<div class="menu">
|
||||
<button class="menuitem">
|
||||
<span class="entypo-right-open entypo__-right-open" />
|
||||
<p class="caption" onclick="playAudio()">User</p>
|
||||
</button>
|
||||
<button class="menuitem">
|
||||
<span class="entypo-right-open entypo__-right-open" />
|
||||
<p class="caption" onclick="playAudio()">Documents</p>
|
||||
</button>
|
||||
<button class="menuitem">
|
||||
<span class="entypo-right-open entypo__-right-open" />
|
||||
<p class="caption" onclick="playAudio()">Computer</p>
|
||||
</button>
|
||||
<button class="menuitem">
|
||||
<span class="entypo-right-open entypo__-right-open" />
|
||||
<p class="caption">Control Panel</p>
|
||||
</button>
|
||||
|
||||
<hr style="border-color: transparent; margin: 0" />
|
||||
<div class="hline" style="margin-top: 5px; margin-bottom: 5px"></div>
|
||||
|
||||
<button class="menuitem">
|
||||
<span class="entypo-right-open entypo__-right-open" />
|
||||
<p class="caption">Custom Path 1</p>
|
||||
</button>
|
||||
<button class="menuitem">
|
||||
<span class="entypo-right-open entypo__-right-open" />
|
||||
<p class="caption">Custom Path 2</p>
|
||||
</button>
|
||||
<button class="menuitem">
|
||||
<span class="entypo-right-open entypo__-right-open" />
|
||||
<p class="caption">Custom Path 3</p>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<div style="background-color: rgb(0, 0, 0);">
|
||||
<br>
|
||||
</div>
|
||||
<!-- <br> -->
|
||||
<!-- <br> -->
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
151
public/3/Chat_page.html
Normal file
151
public/3/Chat_page.html
Normal file
@@ -0,0 +1,151 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Processed Content</title>
|
||||
<style>
|
||||
.chat-block {
|
||||
background-color: #f9f9f9;
|
||||
border-radius: 8px;
|
||||
padding: 12px;
|
||||
margin: 20px auto;
|
||||
width: 80%;
|
||||
box-shadow: 0 2px 6px rgba(0,0,0,0.1);
|
||||
}
|
||||
.chat-block time {
|
||||
font-size: 12px;
|
||||
color: #555;
|
||||
display: block;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
.question-text {
|
||||
background-color: lightgrey;
|
||||
color: black;
|
||||
border-radius: 5px;
|
||||
padding: 5px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.normal-text {
|
||||
background-color: #a1a0a0;
|
||||
color: black;
|
||||
border-radius: 5px;
|
||||
padding: 5px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.code-block {
|
||||
background-color: black;
|
||||
color: white;
|
||||
white-space: pre-wrap;
|
||||
font-family: monospace;
|
||||
border-radius: 5px;
|
||||
padding: 24px 8px 8px 8px;
|
||||
margin-top: 10px;
|
||||
position: relative;
|
||||
}
|
||||
.copy-btn {
|
||||
position: absolute;
|
||||
top: 4px;
|
||||
right: 8px;
|
||||
font-size: 12px;
|
||||
padding: 2px 6px;
|
||||
cursor: pointer;
|
||||
border: none;
|
||||
background: #01e0ce;
|
||||
color: rgb(0, 0, 0);
|
||||
border-radius: 3px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="main"></div>
|
||||
|
||||
<script>
|
||||
const inputStrings = [
|
||||
`
|
||||
<date_time>07/14/2025, 06:43:02 PM</date_time>
|
||||
<think>This is my first thought block for the first message.</think>
|
||||
Here's a regular message.
|
||||
\`\`\`js
|
||||
console.log('This is code block 1');
|
||||
\`\`\``,
|
||||
|
||||
|
||||
`
|
||||
<date_time>07/14/2025, 07:15:30 PM</date_time>
|
||||
<think>This is a second thought block for the second message.</think>
|
||||
This is another message body.
|
||||
\`\`\`python
|
||||
def say_hello():
|
||||
print("Hello from second block")
|
||||
\`\`\`
|
||||
More explanation here.`,
|
||||
|
||||
|
||||
`
|
||||
<date_time>07/14/2025, 06:43:02 PM</date_time>
|
||||
<think>This is my first thought block for the first message.</think>
|
||||
Here's a regular message.
|
||||
\`\`\`js
|
||||
console.log('This is code block 1');
|
||||
\`\`\``,
|
||||
|
||||
|
||||
|
||||
`
|
||||
<date_time>07/14/2025, 06:43:02 PM</date_time>
|
||||
<think>This is my first thought block for the first message.</think>
|
||||
Here's a regular message.
|
||||
\`\`\`js
|
||||
console.log('This is code block 1');
|
||||
\`\`\`
|
||||
hello`,
|
||||
];
|
||||
|
||||
function processContent(str) {
|
||||
const timestampMatch = str.match(/<date_time>([\s\S]*?)<\/date_time>/);
|
||||
const timestamp = timestampMatch ? timestampMatch[1] : 'Unknown time';
|
||||
|
||||
let html = `<div class="chat-block"><time>${timestamp}</time>`;
|
||||
|
||||
// <think> block
|
||||
const thinkMatch = str.match(/<think>([\s\S]*?)<\/think>/);
|
||||
if (thinkMatch) {
|
||||
html += `<details style="margin-bottom: 10px;"><summary>Think</summary><div>${thinkMatch[1]}</div></details>`;
|
||||
str = str.replace(/<think>[\s\S]*?<\/think>/, '');
|
||||
}
|
||||
|
||||
// Remove <date_time> tag from remaining string
|
||||
str = str.replace(/<date_time>[\s\S]*?<\/date_time>/, '');
|
||||
|
||||
// Split into code and text
|
||||
str.split(/\`\`\`/).forEach((part, i) => {
|
||||
if (i % 2 === 0) {
|
||||
if (part.trim()) html += `<div class="normal-text">${part}</div>`;
|
||||
} else {
|
||||
html += `
|
||||
<div class="code-block">
|
||||
<button class="copy-btn" onclick="navigator.clipboard.writeText(this.nextElementSibling.textContent).then(() => this.textContent='Copied!').catch(() => this.textContent='Error'); setTimeout(() => this.textContent='Copy', 1500)">Copy</button>
|
||||
<code>${part}</code>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
});
|
||||
|
||||
html += `</div>`;
|
||||
return html;
|
||||
}
|
||||
|
||||
// Render all messages
|
||||
const container = document.getElementById('main');
|
||||
inputStrings.forEach(str => {
|
||||
container.innerHTML += processContent(str);
|
||||
});
|
||||
</script>
|
||||
|
||||
<div >
|
||||
<!-- input -->
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
102
public/3/arc_reactor.html
Normal file
102
public/3/arc_reactor.html
Normal file
@@ -0,0 +1,102 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Jarvis</title>
|
||||
<meta name="description" content="" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="../style/Style.css" />
|
||||
</head>
|
||||
<body >
|
||||
|
||||
<div class="flex_parent">
|
||||
|
||||
<div id="arc_container">
|
||||
<!-- <div id="titleBar" style="align-items: center;">
|
||||
<div id="pointer" style="color: black;font-size: 20px;display: inline;">Hello</div>
|
||||
<div id="pointer" style="color: black;font-size: 30px;display: inline;">Hello</div>
|
||||
</div> -->
|
||||
|
||||
<div class="arc_reactor">
|
||||
<div class="case_container">
|
||||
<div class="e7">
|
||||
<div class="semi_arc_3 e5_1">
|
||||
<div class="semi_arc_3 e5_2">
|
||||
<div class="semi_arc_3 e5_3">
|
||||
<div class="semi_arc_3 e5_4" id="mainCircle"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="core2"></div>
|
||||
</div>
|
||||
<ul class="marks">
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
89
public/3/center.html
Normal file
89
public/3/center.html
Normal file
@@ -0,0 +1,89 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Stacked Iframes with Opacity & Scrollbar</title>
|
||||
<style>
|
||||
/* common full-screen container */
|
||||
.full-screen {
|
||||
position: fixed;
|
||||
top: 0; left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
margin: 0; padding: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* background layer (fills entire screen again) */
|
||||
#layer1 {
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
/* top layer: semi-transparent + scrollable */
|
||||
#layer2 {
|
||||
z-index: 2;
|
||||
opacity: 0.7;
|
||||
/* overflow-y: scroll; */
|
||||
}
|
||||
|
||||
/* restore: every full-screen iframe fills its parent */
|
||||
.full-screen iframe {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* stack two 100vh-high iframes inside layer2 */
|
||||
#layer2 iframe {
|
||||
height: 100vh; /* overrides the 100% so each iframe is full viewport */
|
||||
}
|
||||
|
||||
/* custom cyan scrollbar for WebKit */
|
||||
#layer2::-webkit-scrollbar {
|
||||
width: 12px;
|
||||
}
|
||||
#layer2::-webkit-scrollbar-thumb {
|
||||
background: cyan;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
/* custom scrollbar for Firefox */
|
||||
#layer2 {
|
||||
scrollbar-color: cyan transparent;
|
||||
scrollbar-width: thin;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<!-- Background layer, now again truly full-screen -->
|
||||
<div id="layer1" class="full-screen">
|
||||
<iframe src="../3/arc_reactor.html"></iframe>
|
||||
</div>
|
||||
|
||||
<!-- Top layer: semi-transparent, scrollable, two iframes -->
|
||||
<div id="layer2" class="full-screen">
|
||||
<iframe id="chat" src="../3/Chat_page.html"></iframe>
|
||||
<!-- <iframe src="../3/Chat_page.html"></iframe> -->
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
// Listen for messages from the parent
|
||||
window.addEventListener('message', (event) => {
|
||||
if (event.origin !== window.location.origin) return; // Security check
|
||||
|
||||
const message__object = event.data;
|
||||
|
||||
const id_of_recipant__iframe_element = document.getElementById('chat').contentWindow;
|
||||
id_of_recipant__iframe_element.postMessage(message__object, '*'); // Forward to iframe2
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- <p id="output">No message yet.</p> -->
|
||||
</body>
|
||||
</html>
|
||||
60
public/4/4.html
Normal file
60
public/4/4.html
Normal file
@@ -0,0 +1,60 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>Live Python Stream</title>
|
||||
<style>
|
||||
body { font-family: sans-serif; padding: 20px; }
|
||||
button { padding: 8px 16px; }
|
||||
pre { background: #f5f5f5; padding: 10px; border: 1px solid #ccc; white-space: pre-wrap; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Python → Client Streaming</h1>
|
||||
<input id="inputParam" placeholder="Enter param" value="Hello" />
|
||||
<button onclick="chat('inputParam','output')">Start Stream</button>
|
||||
<pre id="output"></pre>
|
||||
|
||||
<script>
|
||||
function chat(inputId, outputId) {
|
||||
const param = document.getElementById(inputId).value;
|
||||
const outputEl = document.getElementById(outputId);
|
||||
outputEl.textContent = '';
|
||||
|
||||
fetch('http://localhost:3000/stream', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ param })
|
||||
})
|
||||
.then(res => {
|
||||
if (!res.ok) throw new Error(res.statusText);
|
||||
const reader = res.body.getReader();
|
||||
const decoder = new TextDecoder();
|
||||
let started = false; // flag for first chunk
|
||||
|
||||
function read() {
|
||||
reader.read().then(({ done, value }) => {
|
||||
if (done) {
|
||||
console.log('chunk finish'); // All chunks received
|
||||
return;
|
||||
}
|
||||
if (!started) {
|
||||
console.log('chunk started'); // First chunk received
|
||||
started = true;
|
||||
}
|
||||
outputEl.textContent += decoder.decode(value);
|
||||
read();
|
||||
}).catch(err => {
|
||||
console.error('Stream error:', err);
|
||||
});
|
||||
}
|
||||
|
||||
read();
|
||||
})
|
||||
.catch(err => {
|
||||
outputEl.textContent = 'Error: ' + err.message;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
63
public/4/load.html
Normal file
63
public/4/load.html
Normal file
@@ -0,0 +1,63 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Enable/Disable Element with Loader</title>
|
||||
<style>
|
||||
/* Reset default margins and padding */
|
||||
html, body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: hidden; /* prevent scrolling */
|
||||
background-color: rgba(0, 0, 255, 0); /* body background */
|
||||
}
|
||||
|
||||
/* Loader container covers full viewport */
|
||||
#loader {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: rgba(127, 255, 212, 0);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 9999;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="loader">
|
||||
<script>
|
||||
function getQueryParam(key, defaultValue = 0) {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const value = urlParams.get(key);
|
||||
return value !== null ? value : defaultValue;
|
||||
}
|
||||
|
||||
const show_background = getQueryParam('width_height', 0);
|
||||
const loader = document.getElementById('loader');
|
||||
if (show_background != 0) {
|
||||
loader.style.width = show_background + 'px';
|
||||
loader.style.height = show_background + 'px';
|
||||
} else {
|
||||
loader.style.width = '100vw';
|
||||
loader.style.height = '100vh';
|
||||
}
|
||||
</script>
|
||||
|
||||
<script
|
||||
src="https://unpkg.com/@dotlottie/player-component@2.7.12/dist/dotlottie-player.mjs"
|
||||
type="module">
|
||||
</script>
|
||||
<dotlottie-player
|
||||
src="https://lottie.host/1cb2c811-f2b9-4ec8-a92c-e834ad6d2be8/WVsHVPkOXw.lottie"
|
||||
background="transparent"
|
||||
speed="1"
|
||||
loop
|
||||
autoplay>
|
||||
</dotlottie-player>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
247
public/4/right.html
Normal file
247
public/4/right.html
Normal file
@@ -0,0 +1,247 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Jarvis</title>
|
||||
<meta name="description" content="" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="../style/Style.css" />
|
||||
|
||||
</head>
|
||||
<body >
|
||||
|
||||
<!-- Right Menu -->
|
||||
<div class="main_scrollable">
|
||||
<p class="title" style="text-align: left; margin-left: 10px">Codes...</p>
|
||||
|
||||
<div class="note_input" style="overflow: hidden; margin: 0px; padding: 0px; width: 100%; height: 20rem; position: relative; background-color: rgba(135, 167, 235, 0);">
|
||||
<div class="ai_face" >
|
||||
<iframe src="http://localhost:3000/5/index.html?number1=6&number2=6&show_background=0&display_none=1&move_lipps_randomly=0&move_face_imotions_randomly=1" width="300px" height="400px" style="padding-top: 0px; overflow: hidden; overflow: hidden; border: none;"
|
||||
scrolling="no"></iframe>
|
||||
<!-- I am 50% of my parent -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="temperature">
|
||||
<div id="date_time">
|
||||
<div id="date" class="semi_arc e4">
|
||||
<div class="semi_arc_2 e4_1">
|
||||
<div class="counterspin4"></div>
|
||||
</div>
|
||||
<div
|
||||
style="font-size: 34px; margin-top: 25px"
|
||||
id="tempValue"
|
||||
></div>
|
||||
<div style="font-size: 30px"><sup>0</sup>c</div>
|
||||
<div style="font-size: 25px">Temp.</div>
|
||||
</div>
|
||||
|
||||
<div id="time" class="arc e1">
|
||||
<div
|
||||
style="font-size: 23px; margin-right: 8px; margin-top: 23px"
|
||||
id="humidityValue"
|
||||
></div>
|
||||
<div style="font-size: 17px; margin-top: 10px">Humidity</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
|
||||
|
||||
|
||||
// Function to make the POST request
|
||||
async function postData(endpoint_url, data) {
|
||||
// const hostname = window.location.hostname;
|
||||
// const port = window.location.port;
|
||||
const hostname = '192.168.1.2';
|
||||
const port = '3000';
|
||||
|
||||
const base_url = `http://${hostname}:${port}${endpoint_url}`;
|
||||
console.log(base_url)
|
||||
var response = await fetch(base_url, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(data)
|
||||
});
|
||||
return await response.json();
|
||||
}
|
||||
|
||||
// 🛠️ User-defined function to extract the text inside the textarea
|
||||
function getNoteInputValue(id_) {
|
||||
const textarea = document.getElementById(id_);
|
||||
if (textarea) {
|
||||
return textarea.value;
|
||||
} else {
|
||||
console.error('Textarea with id "note_input__id" not found.');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async function fun1(){
|
||||
console.log("moooooooooooooooooooooooooooooooooooo");
|
||||
|
||||
const chat_input = getNoteInputValue('note_input__id');
|
||||
console.log("Extracted Content:", chat_input);
|
||||
// let chat_input = textarea.value;
|
||||
let result = await postData('/chatBot', { input_prompt: chat_input });
|
||||
|
||||
console.log(result.message_from_server);
|
||||
if(result.message_from_server == "success"){
|
||||
console.log("response complete")
|
||||
console.log(result.chat);
|
||||
}else{
|
||||
console.log("request fail")
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
let chat_count = 0;
|
||||
function chat(inputId, outputId) {
|
||||
chat_count = (chat_count+1);
|
||||
document.getElementById('loading_animation').style.display = 'block';// show loading animation
|
||||
|
||||
const param = document.getElementById(inputId).value;
|
||||
const outputEl = document.getElementById(outputId);
|
||||
outputEl.textContent = '';
|
||||
const origin = window.location.origin; // Protocol + hostname + port example 'http://localhost:3000/stream'
|
||||
|
||||
fetch(origin, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ param })
|
||||
})
|
||||
.then(res => {
|
||||
if (!res.ok) throw new Error(res.statusText);
|
||||
const reader = res.body.getReader();
|
||||
const decoder = new TextDecoder();
|
||||
let started = false;
|
||||
let chunkCount = 0; // ← chunk counter
|
||||
|
||||
function read() {
|
||||
reader.read().then(({ done, value }) => {
|
||||
if (done) {
|
||||
console.log(`chunk finish (total chunks: ${chunkCount})`);
|
||||
|
||||
document.getElementById('loading_animation').style.display = 'none';
|
||||
// window.parent.postMessage({ target: 'center', message: '' , status: 'ended', chat_id: chat_count },'*'); // clear the fast note menu
|
||||
window.parent.postMessage({ target: 'center', message: '' , status: 'ended', question:param , chat_id: chat_count },'*'); // clear the fast note menu
|
||||
|
||||
return;
|
||||
}
|
||||
if (!started) {
|
||||
console.log('chunk started');
|
||||
document.getElementById('loading_animation').style.display = 'block';
|
||||
window.parent.postMessage({ target: 'center', message: '' , status: 'started', chat_id: chat_count },'*'); // clear the fast note menu
|
||||
started = true;
|
||||
}
|
||||
chunkCount += 1; // ← increment per chunk
|
||||
const text = decoder.decode(value);
|
||||
// console.log(`chunk #${chunkCount}:`, text);
|
||||
outputEl.textContent += text;
|
||||
|
||||
window.parent.postMessage({ target: 'center', message: text, status: 'chunk_message___looping' , chat_id: chat_count},'*'); //send the chunked response
|
||||
read();
|
||||
}).catch(err => {
|
||||
console.error('Stream error:', err);
|
||||
});
|
||||
}
|
||||
|
||||
read();
|
||||
})
|
||||
.catch(err => {
|
||||
outputEl.textContent = 'Error: ' + err.message;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
<pre id="chunked_output_box"></pre>
|
||||
<!-- <div id="weather_Name" style="font-size: 15px; top: 10px;left: 200px;"></div> -->
|
||||
<div >
|
||||
|
||||
<script>
|
||||
// Send a message to the parent to forward it to iframe2
|
||||
function sendMessageToIframe2() {
|
||||
window.parent.postMessage({ target: 'center', message: 'Hello from iframe 1' }, '*');
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
<!-- <button onclick="sendMessageToIframe2()">Send to Iframe 2</button> -->
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<button class="arc e1 bgb" onclick="chat('note_input__id','chunked_output_box')" style="color: rgb(33, 245, 156); margin-top: 0px; padding-top: 0px;">Chat AI</button>
|
||||
<button class="arc e1 bgb" onclick="fun1()" style="color: rgb(33, 245, 156); margin-top: 0px; padding-top: 0px;">talk AI</button>
|
||||
|
||||
<!-- <div style="font-size: 23px; margin-left: -10px; margin-top: 23px;">23:41</div>
|
||||
<div style="font-size: 15px; margin-left: 40px; margin-top: -30px; display: inline;">31</div>
|
||||
<div style="font-size: 17px; margin-top: 10px;">Tuesday</div> -->
|
||||
</div>
|
||||
|
||||
<br>
|
||||
|
||||
|
||||
|
||||
<div id="particle10" class="hline"></div>
|
||||
<div id="particle11" class="hline"></div>
|
||||
<div id="particle12" class="vline"></div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div style="position:relative;">
|
||||
<!-- Bottom iframe dims in back -->
|
||||
<br> <br> <br>
|
||||
<iframe
|
||||
id="loading_animation"
|
||||
src="http://127.0.0.1:5500/4/load.html"
|
||||
style="position:absolute;top:20;left:0;border:none;z-index:1;opacity:0.9;pointer-events:none;display: none;">
|
||||
</iframe>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<textarea id="note_input__id" class="note_input" rows="12" cols="44" placeholder="hello , how can i assist ?" style="color: aqua; position:absolute;top:0;left:0;border:none;z-index:2;"></textarea>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<br> <br> <br>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
24
public/4/stack_iframe.html
Normal file
24
public/4/stack_iframe.html
Normal file
@@ -0,0 +1,24 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Stacked Iframes - Fullscreen</title>
|
||||
</head>
|
||||
<body style="margin:0;padding:0;width:100%;height:100%;overflow:hidden;">
|
||||
<div style="position:relative;width:100vw;height:100vh;">
|
||||
<!-- Bottom iframe dims in back -->
|
||||
<iframe
|
||||
id="iframe-bottom"
|
||||
src="http://127.0.0.1:5500/4/load.html"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:none;z-index:1;opacity:0.3;pointer-events:none;">
|
||||
</iframe>
|
||||
|
||||
<!-- Top iframe interactive in front -->
|
||||
<iframe
|
||||
id="iframe-top"
|
||||
src="https://python.langchain.com/docs/introduction/"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:none;z-index:2;">
|
||||
</iframe>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
1
public/5
Submodule
1
public/5
Submodule
Submodule public/5 added at 592c762317
39
public/OLD/README.md
Normal file
39
public/OLD/README.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# Jarvis-in-Javascript🚀🚀
|
||||

|
||||
|
||||
|
||||
Welcome everyone..🙏🙏
|
||||
|
||||
✔️ To get started with project download this repo and follow below steps accordingly:
|
||||
step 1:
|
||||
Download repo...
|
||||
step 2:
|
||||
Open the folder with vscode code editor...
|
||||
step 3:
|
||||
Now visit this website 👉https://openweathermap.org/appid create your account and get api key.
|
||||
⚠️⚠️ Please get your 👉API_KEY prior otherwise project won't work...
|
||||
This will help you to get weather details for your area...
|
||||
step 4:
|
||||
Now open index.html file in root directory with live server extension in VScode...
|
||||
|
||||
Here you go... you have succefully setup your JARVIS 👏👏
|
||||
|
||||
**Note:**
|
||||
✔️ To add additional function:
|
||||
Create a function in app1.js file which is available at mic/app1.js for example
|
||||
function createAlarm(){
|
||||
// Write some code
|
||||
}
|
||||
And then call this function in process.json with it's respective command for example...
|
||||
// In process.json
|
||||
{
|
||||
"Jarvis set an alarm" : "createAlarm()"
|
||||
}
|
||||
|
||||
✔️ Please allow the necessary permission required to perform certain task like
|
||||
camera permission for taking pictures,location for weather details, etc...
|
||||
|
||||
✔️ Sometimes JARVIS starting message/sound does not come so click on center so new small JARVIS window will come and then press 'ctrl+s' in
|
||||
vscode this is quite annoying but this will solve issue...
|
||||
|
||||
Hopefully now you will be able to setup your project but still if you face any issue comment down in video section I will be happy to help you...
|
||||
142
public/OLD/index2.html
Normal file
142
public/OLD/index2.html
Normal file
@@ -0,0 +1,142 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Processed Content</title>
|
||||
<link rel="stylesheet" href="../style/Style.css" />
|
||||
<style>
|
||||
/* Styling for the <think> block */
|
||||
.think {
|
||||
background-color: grey;
|
||||
color: white;
|
||||
padding: 10px;
|
||||
margin: 10px 0;
|
||||
}
|
||||
/* Styling for normal text (outside code blocks) */
|
||||
.normal-text {
|
||||
background-color: lightgrey;
|
||||
color: black;
|
||||
padding: 10px;
|
||||
margin: 10px 0;
|
||||
}
|
||||
/* Styling for code blocks */
|
||||
.code-block {
|
||||
background-color: black;
|
||||
color: white;
|
||||
padding: 10px;
|
||||
margin: 10px 0;
|
||||
white-space: pre-wrap;
|
||||
font-family: monospace;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="main_scrollable " style="background-color: rgba(4, 0, 255, 0);">
|
||||
|
||||
<main id="main"></main>
|
||||
|
||||
<!-- <p id="output" style="background-color: rgb(4, 40, 201);">No message yet.</p> -->
|
||||
<script>
|
||||
// The input string containing a <think> block, text, and a triple backtick code block.
|
||||
const inputString = `
|
||||
<think>
|
||||
Okay, I need to help the user write a concise PyBullet code to simulate the default humanoid. Let me think about what they're asking for.
|
||||
|
||||
First, I remember that PyBullet is a physics simulation library. The user wants to simulate the built-in humanoid model. So, I should start by importing PyBullet and maybe some necessary modules like math.
|
||||
|
||||
I'll need to connect to PyBullet's server. Usually, you use bullet.start(). Then, create a physics client using p = bc.connect().
|
||||
|
||||
Next, set up the simulation parameters: gravity with bc.setGravity(), and enable real-time stepping for smoother visualization with bc.realTimeSimulation(1).
|
||||
|
||||
Loading the humanoid is next. The default model can be loaded with loadURDF. I'll place it at (0, 0, 1) to stand on the ground.
|
||||
|
||||
Then, I need a way to reset the simulation each time. Wrapping everything in a while loop that resets and steps the physics makes sense.
|
||||
|
||||
Adding a camera for visualization is important too. Set up a camera position and orientation, then enable it with bc.startStateLogging().
|
||||
|
||||
Finally, run the simulation until the user presses 'Q' to exit.
|
||||
|
||||
I should make sure the code is short and concise, avoiding unnecessary details. Including comments will help explain each part briefly.
|
||||
</think>
|
||||
|
||||
Here's a concise PyBullet code to simulate the default humanoid:
|
||||
|
||||
\`\`\`python
|
||||
import pybullet as p
|
||||
import time
|
||||
|
||||
# Initialize PyBullet
|
||||
p.connect(p.GUI)
|
||||
|
||||
# Set gravity
|
||||
p.setGravity(0, 0, -10)
|
||||
|
||||
# Load the default humanoid (built-in model)
|
||||
humanoid = p.loadURDF("humanoid.urdf", [0, 0, 1])
|
||||
|
||||
# Enable real-time simulation
|
||||
p.realTimeSimulation(1)
|
||||
|
||||
# Simulation loop
|
||||
while True:
|
||||
# Step physics
|
||||
p.stepSimulation()
|
||||
time.sleep(1/240) # Adjust the timestep as needed
|
||||
|
||||
# Check for 'Q' key to exit
|
||||
if ord(p.readKey()) == ord('Q'):
|
||||
break
|
||||
|
||||
# Cleanup and disconnect
|
||||
p.disconnect()
|
||||
\`\`\`
|
||||
|
||||
This code will load and simulate the default humanoid model that comes with PyBullet, allowing you to interact with it in the PyBullet GUI. The humanoid will stand upright by default, but you can modify its behavior by adding
|
||||
additional control code.`;
|
||||
|
||||
function processContent(str) {
|
||||
let processedHTML = '';
|
||||
|
||||
// Extract and process the <think> block first.
|
||||
const thinkRegex = /<think>([\s\S]*?)<\/think>/;
|
||||
const thinkMatch = str.match(thinkRegex);
|
||||
if (thinkMatch) {
|
||||
const thinkContent = thinkMatch[1];
|
||||
processedHTML += '<div class="think">' + thinkContent + '</div>';
|
||||
// Remove the <think> block from the string.
|
||||
str = str.replace(thinkRegex, '');
|
||||
}
|
||||
|
||||
// Process the rest of the string by splitting at triple backticks.
|
||||
// This will alternate between normal text and code blocks.
|
||||
const parts = str.split(/```/);
|
||||
parts.forEach((part, index) => {
|
||||
if (index % 2 === 0) {
|
||||
// Normal text outside code blocks.
|
||||
if (part.trim()) {
|
||||
processedHTML += '<div class="normal-text">' + part + '</div>';
|
||||
}
|
||||
} else {
|
||||
// Code block content.
|
||||
processedHTML += '<pre class="code-block">' + part + '</pre>';
|
||||
}
|
||||
});
|
||||
return processedHTML;
|
||||
}
|
||||
|
||||
// Process the input string and update the <main> tag.
|
||||
document.getElementById('main').innerHTML = processContent(inputString);
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
100
public/OLD/index3.html
Normal file
100
public/OLD/index3.html
Normal file
@@ -0,0 +1,100 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Realistic Avatar with TTS Sync</title>
|
||||
<style>
|
||||
.avatar-container {
|
||||
position: relative;
|
||||
width: 300px;
|
||||
margin: 50px auto;
|
||||
}
|
||||
/* The base avatar image */
|
||||
#avatar {
|
||||
width: 100%;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
border: 5px solid #ccc;
|
||||
}
|
||||
/* Overlay for mouth animation (position and size must be adjusted for your image) */
|
||||
.mouth-overlay {
|
||||
position: absolute;
|
||||
bottom: 30px; /* Adjust to position over the mouth */
|
||||
left: 50%;
|
||||
width: 60px;
|
||||
height: 20px;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
border-radius: 0 0 30px 30px;
|
||||
transform: translateX(-50%);
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
}
|
||||
/* Keyframe animation for a more natural mouth movement */
|
||||
@keyframes speakAnimation {
|
||||
0% {
|
||||
opacity: 0;
|
||||
transform: translateX(-50%) scaleY(0.5);
|
||||
}
|
||||
25% {
|
||||
opacity: 1;
|
||||
transform: translateX(-50%) scaleY(1.2);
|
||||
}
|
||||
50% {
|
||||
opacity: 0.5;
|
||||
transform: translateX(-50%) scaleY(0.8);
|
||||
}
|
||||
75% {
|
||||
opacity: 1;
|
||||
transform: translateX(-50%) scaleY(1.1);
|
||||
}
|
||||
100% {
|
||||
opacity: 0;
|
||||
transform: translateX(-50%) scaleY(0.5);
|
||||
}
|
||||
}
|
||||
/* Class added to trigger the animation */
|
||||
.mouth-speaking {
|
||||
animation: speakAnimation 0.5s infinite;
|
||||
}
|
||||
button {
|
||||
display: block;
|
||||
margin: 20px auto;
|
||||
padding: 10px 20px;
|
||||
font-size: 16px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="avatar-container">
|
||||
<!-- Replace "avatar.jpg" with the path to your photo -->
|
||||
<img id="avatar" src="ben_10.jpg" alt="Avatar">
|
||||
<div class="mouth-overlay" id="mouthOverlay"></div>
|
||||
</div>
|
||||
<button id="speakBtn">Speak</button>
|
||||
|
||||
<script>
|
||||
// The sentence to be spoken
|
||||
const text = "hellow how are you";
|
||||
const speakBtn = document.getElementById('speakBtn');
|
||||
const mouthOverlay = document.getElementById('mouthOverlay');
|
||||
|
||||
function speakText() {
|
||||
const utterance = new SpeechSynthesisUtterance(text);
|
||||
|
||||
// When speech starts, add the animation class
|
||||
utterance.onstart = () => {
|
||||
mouthOverlay.classList.add('mouth-speaking');
|
||||
};
|
||||
|
||||
// When speech ends, remove the animation class
|
||||
utterance.onend = () => {
|
||||
mouthOverlay.classList.remove('mouth-speaking');
|
||||
};
|
||||
|
||||
window.speechSynthesis.speak(utterance);
|
||||
}
|
||||
|
||||
speakBtn.addEventListener('click', speakText);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
87
public/OLD/index_JS.js
Normal file
87
public/OLD/index_JS.js
Normal file
@@ -0,0 +1,87 @@
|
||||
|
||||
const speechRecognition=window.webkitSpeechRecognition //Google Chrome
|
||||
||
|
||||
window.SpeechRecognition; //Firefox
|
||||
|
||||
|
||||
//To get a Battery
|
||||
let batteryPromise = navigator.getBattery();
|
||||
batteryPromise.then(batteryCallback1);
|
||||
|
||||
function batteryCallback1(batteryObject) {
|
||||
printBatteryStatus(batteryObject);
|
||||
}
|
||||
function printBatteryStatus(batteryObject) {
|
||||
const batteryLevel = batteryObject.level*100;
|
||||
// console.log("Percentage", batteryLevel+"%");
|
||||
document.getElementById('ram').innerHTML = "Battery: " + batteryLevel + "%";
|
||||
}
|
||||
|
||||
|
||||
function getDate1()
|
||||
{
|
||||
var d = new Date();
|
||||
var months = ["January","February","March","April","May","June","July","August","September","October","November","December"];
|
||||
document.getElementById("monthValue").innerHTML = months[d.getMonth()];
|
||||
document.getElementById("dateValue").innerHTML = d.getDate();
|
||||
document.getElementById("timeValue").innerHTML = d.getHours() + ":" + d.getMinutes();
|
||||
var days = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
|
||||
document.getElementById("weekDayValue").innerHTML = days[d.getDay()];
|
||||
}
|
||||
|
||||
// jarvisStartingReply();
|
||||
function startListening()
|
||||
{
|
||||
const recong = new speechRecognition();
|
||||
recong.start();
|
||||
|
||||
recong.onresult =function(data)
|
||||
{
|
||||
handleResults(data);
|
||||
}
|
||||
}
|
||||
function handleResults(data)
|
||||
{
|
||||
let text=data.results[0][0].transcript;
|
||||
text = text.toLowerCase();
|
||||
console.log(text);
|
||||
|
||||
ProcessCommand(text);
|
||||
}
|
||||
function ProcessCommand(UserText)
|
||||
{
|
||||
if(UserText.includes("push enable"))
|
||||
{
|
||||
// UserText=UserText.slice(16);
|
||||
// Speak('Searching initiated...'+UserText);
|
||||
// searchOnGoogle(UserText);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
getDate1();
|
||||
function getDate1()
|
||||
{
|
||||
var d = new Date();
|
||||
var months = ["January","February","March","April","May","June","July","August","September","October","November","December"];
|
||||
// document.getElementById("monthValue").innerHTML = months[d.getMonth()];
|
||||
//document.getElementById("dateValue").innerHTML = d.getDate();
|
||||
//document.getElementById("timeValue").innerHTML = d.getHours() + ":" + d.getMinutes();
|
||||
// var days = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
|
||||
// document.getElementById("weekDayValue").innerHTML = days[d.getDay()];
|
||||
}
|
||||
function Speak(TEXT)
|
||||
{
|
||||
const utter = new SpeechSynthesisUtterance();
|
||||
|
||||
utter.text = TEXT;
|
||||
utter.voice = window.speechSynthesis.getVoices()[1];
|
||||
window.speechSynthesis.speak(utter);
|
||||
window.speechSynthesis.getVoices().forEach(i=>{
|
||||
console.log(i);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
67
public/OLD/left_design.html
Normal file
67
public/OLD/left_design.html
Normal file
@@ -0,0 +1,67 @@
|
||||
|
||||
<!-- Particles -->
|
||||
<!-- Left Menu Particles -->
|
||||
<canvas id="particle1" width="20" height="500"></canvas>
|
||||
<script>
|
||||
var canvas = document.getElementById("particle1");
|
||||
var context = canvas.getContext("2d");
|
||||
context.beginPath();
|
||||
context.moveTo(0, 0);
|
||||
context.lineTo(0, 70);
|
||||
context.lineTo(10, 85);
|
||||
context.lineTo(10, 135);
|
||||
context.lineTo(0, 150);
|
||||
context.lineTo(0, 480);
|
||||
context.lineTo(5, 490);
|
||||
context.lineTo(10, 490);
|
||||
context.lineTo(20, 490);
|
||||
context.lineTo(20, 250);
|
||||
context.lineTo(10, 235);
|
||||
context.lineTo(10, 185);
|
||||
context.lineTo(20, 170);
|
||||
context.lineTo(20, 40);
|
||||
context.lineTo(10, 30);
|
||||
context.lineTo(10, 20);
|
||||
context.closePath();
|
||||
context.lineWidth = 1;
|
||||
context.fillStyle = "rgba(2,254,255,0.3)";
|
||||
context.fill();
|
||||
context.strokeStyle = "transparent";
|
||||
context.stroke();
|
||||
</script>
|
||||
|
||||
<canvas id="particle1_1" width="40" height="510"></canvas>
|
||||
<script>
|
||||
var canvas = document.getElementById("particle1_1");
|
||||
var context = canvas.getContext("2d");
|
||||
context.beginPath();
|
||||
context.lineTo(0, 0);
|
||||
context.lineTo(10, 15);
|
||||
context.lineTo(10, 65);
|
||||
context.lineTo(0, 80);
|
||||
context.lineTo(0, 0);
|
||||
context.closePath();
|
||||
context.lineWidth = 1;
|
||||
context.fillStyle = "rgba(2,254,255,0.3)";
|
||||
context.fill();
|
||||
context.strokeStyle = "transparent";
|
||||
context.stroke();
|
||||
</script>
|
||||
|
||||
<canvas id="particle1_2" width="40" height="510"></canvas>
|
||||
<script>
|
||||
var canvas = document.getElementById("particle1_2");
|
||||
var context = canvas.getContext("2d");
|
||||
context.beginPath();
|
||||
context.lineTo(10, 80);
|
||||
context.lineTo(0, 65);
|
||||
context.lineTo(0, 15);
|
||||
context.lineTo(10, 0);
|
||||
context.lineTo(10, 80);
|
||||
context.closePath();
|
||||
context.lineWidth = 1;
|
||||
context.fillStyle = "rgba(2,254,255,0.3)";
|
||||
context.fill();
|
||||
context.strokeStyle = "transparent";
|
||||
context.stroke();
|
||||
</script>
|
||||
106
public/OLD/xyz.html
Normal file
106
public/OLD/xyz.html
Normal file
@@ -0,0 +1,106 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Custom Draggable Items</title>
|
||||
<style>
|
||||
/* The container remains the parent element */
|
||||
draggable-container {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
background-color: #f0f0f0;
|
||||
border: 1px solid #ccc;
|
||||
padding: 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
/* Each draggable item is an absolutely positioned wrapper */
|
||||
.draggable {
|
||||
position: absolute;
|
||||
cursor: grab;
|
||||
/* Optional: add a subtle shadow to show the item floating */
|
||||
box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
/* Style the iframe as needed */
|
||||
.draggable iframe {
|
||||
display: block;
|
||||
width: 300px;
|
||||
height: 200px;
|
||||
border: 2px solid aqua;
|
||||
background-color: black;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<button onclick="document.querySelector('draggable-container').toggleDraggable()">
|
||||
Enable/Disable Drag
|
||||
</button>
|
||||
|
||||
<draggable-container>
|
||||
<!-- Wrap each iframe in a .draggable wrapper -->
|
||||
<div class="draggable" style="top: 50px; left: 50px;">
|
||||
<iframe src="./main_left_menu.html"></iframe>
|
||||
</div>
|
||||
<div class="draggable" style="top: 200px; left: 100px;">
|
||||
<iframe src="./arc_reactor.html"></iframe>
|
||||
</div>
|
||||
<div class="draggable" style="top: 400px; left: 300px;">
|
||||
<iframe src="./right.html"></iframe>
|
||||
</div>
|
||||
</draggable-container>
|
||||
|
||||
<script>
|
||||
class DraggableContainer extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
this.isDraggable = true;
|
||||
// Bind our event handler so that it can be removed properly.
|
||||
this.onMouseDown = this.onMouseDown.bind(this);
|
||||
}
|
||||
|
||||
connectedCallback() {
|
||||
// Use event delegation: listen for mousedown on the container.
|
||||
this.addEventListener("mousedown", this.onMouseDown);
|
||||
}
|
||||
|
||||
onMouseDown(e) {
|
||||
if (!this.isDraggable) return;
|
||||
|
||||
// Find the closest draggable wrapper that is a direct child of the container.
|
||||
let draggableElem = e.target.closest(".draggable");
|
||||
if (!draggableElem || draggableElem.parentElement !== this) return;
|
||||
|
||||
// Calculate the offset between the mouse position and the element's top-left corner.
|
||||
let offsetX = e.clientX - draggableElem.offsetLeft;
|
||||
let offsetY = e.clientY - draggableElem.offsetTop;
|
||||
|
||||
// Change the cursor to indicate dragging.
|
||||
draggableElem.style.cursor = "grabbing";
|
||||
|
||||
const onMouseMove = (event) => {
|
||||
draggableElem.style.left = (event.clientX - offsetX) + "px";
|
||||
draggableElem.style.top = (event.clientY - offsetY) + "px";
|
||||
};
|
||||
|
||||
const onMouseUp = () => {
|
||||
draggableElem.style.cursor = "grab";
|
||||
document.removeEventListener("mousemove", onMouseMove);
|
||||
document.removeEventListener("mouseup", onMouseUp);
|
||||
};
|
||||
|
||||
document.addEventListener("mousemove", onMouseMove);
|
||||
document.addEventListener("mouseup", onMouseUp);
|
||||
}
|
||||
|
||||
toggleDraggable() {
|
||||
this.isDraggable = !this.isDraggable;
|
||||
alert(this.isDraggable ? "Dragging Enabled" : "Dragging Disabled");
|
||||
}
|
||||
}
|
||||
|
||||
customElements.define("draggable-container", DraggableContainer);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
1126
public/style/Style.css
Normal file
1126
public/style/Style.css
Normal file
File diff suppressed because it is too large
Load Diff
11
server.js
Normal file
11
server.js
Normal file
@@ -0,0 +1,11 @@
|
||||
const express = require('express');
|
||||
const path = require('path');
|
||||
|
||||
const app = express();
|
||||
const PORT = 3000;
|
||||
|
||||
app.use(express.static(path.join(__dirname, 'public')));
|
||||
|
||||
app.listen(PORT, () => {
|
||||
console.log(`Server running at http://localhost:${PORT}`);
|
||||
});
|
||||
73
system_design_Diagram.drawio
Normal file
73
system_design_Diagram.drawio
Normal file
@@ -0,0 +1,73 @@
|
||||
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0" version="26.2.14">
|
||||
<diagram name="Page-1" id="2-nt3jOTfl_Kn9T9kgvj">
|
||||
<mxGraphModel dx="2026" dy="2186" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="pHJzHVpNcDGfqc-xGZxY-1" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="920" y="120" width="930" height="510" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pHJzHVpNcDGfqc-xGZxY-2" value="index.html" style="text;strokeColor=none;fillColor=none;html=1;fontSize=24;fontStyle=1;verticalAlign=middle;align=center;" vertex="1" parent="1">
|
||||
<mxGeometry x="1210" y="120" width="160" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pHJzHVpNcDGfqc-xGZxY-3" value="1st" style="text;strokeColor=none;fillColor=none;html=1;fontSize=24;fontStyle=1;verticalAlign=middle;align=center;" vertex="1" parent="1">
|
||||
<mxGeometry x="1430" y="127.5" width="160" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pHJzHVpNcDGfqc-xGZxY-4" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="510" y="-220" width="525" height="210" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pHJzHVpNcDGfqc-xGZxY-5" value="2nd" style="text;strokeColor=none;fillColor=none;html=1;fontSize=24;fontStyle=1;verticalAlign=middle;align=center;" vertex="1" parent="1">
|
||||
<mxGeometry x="690" y="-70" width="160" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pHJzHVpNcDGfqc-xGZxY-6" value="left.html" style="text;strokeColor=none;fillColor=none;html=1;fontSize=24;fontStyle=1;verticalAlign=middle;align=center;" vertex="1" parent="1">
|
||||
<mxGeometry x="680" y="-210" width="160" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pHJzHVpNcDGfqc-xGZxY-16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="pHJzHVpNcDGfqc-xGZxY-7" target="pHJzHVpNcDGfqc-xGZxY-14">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pHJzHVpNcDGfqc-xGZxY-7" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="-220" width="525" height="210" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pHJzHVpNcDGfqc-xGZxY-8" value="3rd" style="text;strokeColor=none;fillColor=none;html=1;fontSize=24;fontStyle=1;verticalAlign=middle;align=center;" vertex="1" parent="1">
|
||||
<mxGeometry x="1260" y="-70" width="160" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pHJzHVpNcDGfqc-xGZxY-9" value="center.html" style="text;strokeColor=none;fillColor=none;html=1;fontSize=24;fontStyle=1;verticalAlign=middle;align=center;" vertex="1" parent="1">
|
||||
<mxGeometry x="1250" y="-210" width="160" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pHJzHVpNcDGfqc-xGZxY-10" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1640" y="-220" width="525" height="210" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pHJzHVpNcDGfqc-xGZxY-11" value="4th" style="text;strokeColor=none;fillColor=none;html=1;fontSize=24;fontStyle=1;verticalAlign=middle;align=center;" vertex="1" parent="1">
|
||||
<mxGeometry x="1820" y="-70" width="160" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pHJzHVpNcDGfqc-xGZxY-12" value="right.html" style="text;strokeColor=none;fillColor=none;html=1;fontSize=24;fontStyle=1;verticalAlign=middle;align=center;" vertex="1" parent="1">
|
||||
<mxGeometry x="1810" y="-210" width="160" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pHJzHVpNcDGfqc-xGZxY-13" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="930" y="170" width="220" height="435" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pHJzHVpNcDGfqc-xGZxY-14" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1150" y="170" width="490" height="435" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pHJzHVpNcDGfqc-xGZxY-15" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1640" y="167.5" width="200" height="435" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pHJzHVpNcDGfqc-xGZxY-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.552;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="pHJzHVpNcDGfqc-xGZxY-4" target="pHJzHVpNcDGfqc-xGZxY-13">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pHJzHVpNcDGfqc-xGZxY-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.534;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="pHJzHVpNcDGfqc-xGZxY-11" target="pHJzHVpNcDGfqc-xGZxY-15">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pHJzHVpNcDGfqc-xGZxY-19" value="right.html" style="text;strokeColor=none;fillColor=none;html=1;fontSize=24;fontStyle=1;verticalAlign=middle;align=center;" vertex="1" parent="1">
|
||||
<mxGeometry x="1670" y="365" width="160" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pHJzHVpNcDGfqc-xGZxY-20" value="center.html" style="text;strokeColor=none;fillColor=none;html=1;fontSize=24;fontStyle=1;verticalAlign=middle;align=center;" vertex="1" parent="1">
|
||||
<mxGeometry x="1320" y="355" width="160" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pHJzHVpNcDGfqc-xGZxY-21" value="left.html" style="text;strokeColor=none;fillColor=none;html=1;fontSize=24;fontStyle=1;verticalAlign=middle;align=center;" vertex="1" parent="1">
|
||||
<mxGeometry x="970" y="350" width="160" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
Reference in New Issue
Block a user