From a86816a3229a0b283131e6b92c2663cd40e41334 Mon Sep 17 00:00:00 2001 From: Fluffy-Bean Date: Sat, 13 May 2023 15:11:06 +0100 Subject: [PATCH] Initial push of DV8 Expo website --- DV8-Expo/poetry.lock | 487 +++++++++++++++++++ DV8-Expo/pyproject.toml | 25 + DV8-Expo/website/__init__.py | 26 + DV8-Expo/website/config.py | 4 + DV8-Expo/website/extensions.py | 7 + DV8-Expo/website/models.py | 35 ++ DV8-Expo/website/static/gen/packed.css | 1 + DV8-Expo/website/static/gen/packed.js | 1 + DV8-Expo/website/static/images/3.jpg | Bin 0 -> 58030 bytes DV8-Expo/website/static/js/nav.js | 15 + DV8-Expo/website/static/sass/animations.sass | 10 + DV8-Expo/website/static/sass/header.sass | 28 ++ DV8-Expo/website/static/sass/nav.sass | 55 +++ DV8-Expo/website/static/sass/sections.sass | 168 +++++++ DV8-Expo/website/static/sass/styles.sass | 109 +++++ DV8-Expo/website/templates/base.html | 47 ++ DV8-Expo/website/templates/index.html | 36 ++ DV8-Expo/website/templates/login.html | 21 + 18 files changed, 1075 insertions(+) create mode 100644 DV8-Expo/poetry.lock create mode 100644 DV8-Expo/pyproject.toml create mode 100644 DV8-Expo/website/__init__.py create mode 100644 DV8-Expo/website/config.py create mode 100644 DV8-Expo/website/extensions.py create mode 100644 DV8-Expo/website/models.py create mode 100644 DV8-Expo/website/static/gen/packed.css create mode 100644 DV8-Expo/website/static/gen/packed.js create mode 100644 DV8-Expo/website/static/images/3.jpg create mode 100644 DV8-Expo/website/static/js/nav.js create mode 100644 DV8-Expo/website/static/sass/animations.sass create mode 100644 DV8-Expo/website/static/sass/header.sass create mode 100644 DV8-Expo/website/static/sass/nav.sass create mode 100644 DV8-Expo/website/static/sass/sections.sass create mode 100644 DV8-Expo/website/static/sass/styles.sass create mode 100644 DV8-Expo/website/templates/base.html create mode 100644 DV8-Expo/website/templates/index.html create mode 100644 DV8-Expo/website/templates/login.html diff --git a/DV8-Expo/poetry.lock b/DV8-Expo/poetry.lock new file mode 100644 index 0000000..666a7c6 --- /dev/null +++ b/DV8-Expo/poetry.lock @@ -0,0 +1,487 @@ +# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. + +[[package]] +name = "blinker" +version = "1.6.2" +description = "Fast, simple object-to-object and broadcast signaling" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "blinker-1.6.2-py3-none-any.whl", hash = "sha256:c3d739772abb7bc2860abf5f2ec284223d9ad5c76da018234f6f50d6f31ab1f0"}, + {file = "blinker-1.6.2.tar.gz", hash = "sha256:4afd3de66ef3a9f8067559fb7a1cbe555c17dcbe15971b05d1b625c3e7abe213"}, +] + +[[package]] +name = "cachelib" +version = "0.9.0" +description = "A collection of cache libraries in the same API interface." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "cachelib-0.9.0-py3-none-any.whl", hash = "sha256:811ceeb1209d2fe51cd2b62810bd1eccf70feba5c52641532498be5c675493b3"}, + {file = "cachelib-0.9.0.tar.gz", hash = "sha256:38222cc7c1b79a23606de5c2607f4925779e37cdcea1c2ad21b8bae94b5425a5"}, +] + +[[package]] +name = "click" +version = "8.1.3" +description = "Composable command line interface toolkit" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "cssmin" +version = "0.2.0" +description = "A Python port of the YUI CSS compression algorithm." +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "cssmin-0.2.0.tar.gz", hash = "sha256:e012f0cc8401efcf2620332339011564738ae32be8c84b2e43ce8beaec1067b6"}, +] + +[[package]] +name = "flask" +version = "2.3.2" +description = "A simple framework for building complex web applications." +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "Flask-2.3.2-py3-none-any.whl", hash = "sha256:77fd4e1249d8c9923de34907236b747ced06e5467ecac1a7bb7115ae0e9670b0"}, + {file = "Flask-2.3.2.tar.gz", hash = "sha256:8c2f9abd47a9e8df7f0c3f091ce9497d011dc3b31effcf4c85a6e2b50f4114ef"}, +] + +[package.dependencies] +blinker = ">=1.6.2" +click = ">=8.1.3" +itsdangerous = ">=2.1.2" +Jinja2 = ">=3.1.2" +Werkzeug = ">=2.3.3" + +[package.extras] +async = ["asgiref (>=3.2)"] +dotenv = ["python-dotenv"] + +[[package]] +name = "flask-assets" +version = "2.0" +description = "Asset management for Flask, to compress and merge CSS and Javascript files." +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "Flask-Assets-2.0.tar.gz", hash = "sha256:1dfdea35e40744d46aada72831f7613d67bf38e8b20ccaaa9e91fdc37aa3b8c2"}, + {file = "Flask_Assets-2.0-py3-none-any.whl", hash = "sha256:2845bd3b479be9db8556801e7ebc2746ce2d9edb4e7b64a1c786ecbfc1e5867b"}, +] + +[package.dependencies] +Flask = ">=0.8" +webassets = ">=2.0" + +[[package]] +name = "flask-caching" +version = "2.0.2" +description = "Adds caching support to Flask applications." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Flask-Caching-2.0.2.tar.gz", hash = "sha256:24b60c552d59a9605cc1b6a42c56cdb39a82a28dab4532bbedb9222ae54ecb4e"}, + {file = "Flask_Caching-2.0.2-py3-none-any.whl", hash = "sha256:19571f2570e9b8dd9dd9d2f49d7cbee69c14ebe8cc001100b1eb98c379dd80ad"}, +] + +[package.dependencies] +cachelib = ">=0.9.0,<0.10.0" +Flask = "<3" + +[[package]] +name = "flask-sqlalchemy" +version = "3.0.3" +description = "Add SQLAlchemy support to your Flask application." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Flask-SQLAlchemy-3.0.3.tar.gz", hash = "sha256:2764335f3c9d7ebdc9ed6044afaf98aae9fa50d7a074cef55dde307ec95903ec"}, + {file = "Flask_SQLAlchemy-3.0.3-py3-none-any.whl", hash = "sha256:add5750b2f9cd10512995261ee2aa23fab85bd5626061aa3c564b33bb4aa780a"}, +] + +[package.dependencies] +Flask = ">=2.2" +SQLAlchemy = ">=1.4.18" + +[[package]] +name = "flask-wtf" +version = "1.1.1" +description = "Form rendering, validation, and CSRF protection for Flask with WTForms." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Flask-WTF-1.1.1.tar.gz", hash = "sha256:41c4244e9ae626d63bed42ae4785b90667b885b1535d5a4095e1f63060d12aa9"}, + {file = "Flask_WTF-1.1.1-py3-none-any.whl", hash = "sha256:7887d6f1ebb3e17bf648647422f0944c9a469d0fcf63e3b66fb9a83037e38b2c"}, +] + +[package.dependencies] +Flask = "*" +itsdangerous = "*" +WTForms = "*" + +[package.extras] +email = ["email-validator"] + +[[package]] +name = "greenlet" +version = "2.0.2" +description = "Lightweight in-process concurrent programming" +category = "main" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" +files = [ + {file = "greenlet-2.0.2-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d"}, + {file = "greenlet-2.0.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9"}, + {file = "greenlet-2.0.2-cp27-cp27m-win32.whl", hash = "sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74"}, + {file = "greenlet-2.0.2-cp27-cp27m-win_amd64.whl", hash = "sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343"}, + {file = "greenlet-2.0.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae"}, + {file = "greenlet-2.0.2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df"}, + {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088"}, + {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb"}, + {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470"}, + {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a"}, + {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91"}, + {file = "greenlet-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645"}, + {file = "greenlet-2.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c"}, + {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca"}, + {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0"}, + {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2"}, + {file = "greenlet-2.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:eff4eb9b7eb3e4d0cae3d28c283dc16d9bed6b193c2e1ace3ed86ce48ea8df19"}, + {file = "greenlet-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3"}, + {file = "greenlet-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5"}, + {file = "greenlet-2.0.2-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6"}, + {file = "greenlet-2.0.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43"}, + {file = "greenlet-2.0.2-cp35-cp35m-win32.whl", hash = "sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a"}, + {file = "greenlet-2.0.2-cp35-cp35m-win_amd64.whl", hash = "sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394"}, + {file = "greenlet-2.0.2-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0"}, + {file = "greenlet-2.0.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3"}, + {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db"}, + {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099"}, + {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75"}, + {file = "greenlet-2.0.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf"}, + {file = "greenlet-2.0.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292"}, + {file = "greenlet-2.0.2-cp36-cp36m-win32.whl", hash = "sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9"}, + {file = "greenlet-2.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f"}, + {file = "greenlet-2.0.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b"}, + {file = "greenlet-2.0.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1"}, + {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7"}, + {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca"}, + {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73"}, + {file = "greenlet-2.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86"}, + {file = "greenlet-2.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33"}, + {file = "greenlet-2.0.2-cp37-cp37m-win32.whl", hash = "sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7"}, + {file = "greenlet-2.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3"}, + {file = "greenlet-2.0.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30"}, + {file = "greenlet-2.0.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b"}, + {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526"}, + {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b"}, + {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857"}, + {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a"}, + {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a"}, + {file = "greenlet-2.0.2-cp38-cp38-win32.whl", hash = "sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249"}, + {file = "greenlet-2.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40"}, + {file = "greenlet-2.0.2-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8"}, + {file = "greenlet-2.0.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6"}, + {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df"}, + {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b"}, + {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b"}, + {file = "greenlet-2.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8"}, + {file = "greenlet-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9"}, + {file = "greenlet-2.0.2-cp39-cp39-win32.whl", hash = "sha256:ea9872c80c132f4663822dd2a08d404073a5a9b5ba6155bea72fb2a79d1093b5"}, + {file = "greenlet-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564"}, + {file = "greenlet-2.0.2.tar.gz", hash = "sha256:e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0"}, +] + +[package.extras] +docs = ["Sphinx", "docutils (<0.18)"] +test = ["objgraph", "psutil"] + +[[package]] +name = "itsdangerous" +version = "2.1.2" +description = "Safely pass data to untrusted environments and back." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "itsdangerous-2.1.2-py3-none-any.whl", hash = "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44"}, + {file = "itsdangerous-2.1.2.tar.gz", hash = "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a"}, +] + +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "jsmin" +version = "3.0.1" +description = "JavaScript minifier." +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "jsmin-3.0.1.tar.gz", hash = "sha256:c0959a121ef94542e807a674142606f7e90214a2b3d1eb17300244bbb5cc2bfc"}, +] + +[[package]] +name = "libsass-bin" +version = "0.22.0.post1" +description = "Sass for Python (binary wheels)" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "libsass_bin-0.22.0.post1-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:bf6ba8af4efd67407f1a6e53fd73559e8eba1216f4307e6635c73f598fae9f8b"}, + {file = "libsass_bin-0.22.0.post1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb54bbd88449eede99cbb3e120deab4f922da9f6f1547490170e0064a80eebb2"}, + {file = "libsass_bin-0.22.0.post1-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:8cad5c0e4328192233659e8b347fe9fd80a55f79981207509d00681b8bbdf90d"}, + {file = "libsass_bin-0.22.0.post1-cp37-abi3-win32.whl", hash = "sha256:244d492d45ba76891392f38d38de065df6314754e31a71371dc1a2a0e37d14f8"}, + {file = "libsass_bin-0.22.0.post1-cp37-abi3-win_amd64.whl", hash = "sha256:174e31fdae51d08d2424efb107f60629da36f5e03fe8e4d2ed3050848283bfc8"}, +] + +[[package]] +name = "markupsafe" +version = "2.1.2" +description = "Safely add untrusted strings to HTML/XML markup." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, + {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, +] + +[[package]] +name = "sqlalchemy" +version = "2.0.13" +description = "Database Abstraction Library" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "SQLAlchemy-2.0.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7ad24c85f2a1caf0cd1ae8c2fdb668777a51a02246d9039420f94bd7dbfd37ed"}, + {file = "SQLAlchemy-2.0.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db24d2738add6db19d66ca820479d2f8f96d3f5a13c223f27fa28dd2f268a4bd"}, + {file = "SQLAlchemy-2.0.13-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72746ec17a7d9c5acf2c57a6e6190ceba3dad7127cd85bb17f24e90acc0e8e3f"}, + {file = "SQLAlchemy-2.0.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:755f653d693f9b8f4286d987aec0d4279821bf8d179a9de8e8a5c685e77e57d6"}, + {file = "SQLAlchemy-2.0.13-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e0d20f27edfd6f35b388da2bdcd7769e4ffa374fef8994980ced26eb287e033a"}, + {file = "SQLAlchemy-2.0.13-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:37de4010f53f452e94e5ed6684480432cfe6a7a8914307ef819cd028b05b98d5"}, + {file = "SQLAlchemy-2.0.13-cp310-cp310-win32.whl", hash = "sha256:31f72bb300eed7bfdb373c7c046121d84fa0ae6f383089db9505ff553ac27cef"}, + {file = "SQLAlchemy-2.0.13-cp310-cp310-win_amd64.whl", hash = "sha256:ec2f525273528425ed2f51861b7b88955160cb95dddb17af0914077040aff4a5"}, + {file = "SQLAlchemy-2.0.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2424a84f131901fbb20a99844d47b38b517174c6e964c8efb15ea6bb9ced8c2b"}, + {file = "SQLAlchemy-2.0.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4f9832815257969b3ca9bf0501351e4c02c8d60cbd3ec9f9070d5b0f8852900e"}, + {file = "SQLAlchemy-2.0.13-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a30e4db983faa5145e00ef6eaf894a2d503b3221dbf40a595f3011930d3d0bac"}, + {file = "SQLAlchemy-2.0.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f717944aee40e9f48776cf85b523bb376aa2d9255a268d6d643c57ab387e7264"}, + {file = "SQLAlchemy-2.0.13-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9119795d2405eb23bf7e6707e228fe38124df029494c1b3576459aa3202ea432"}, + {file = "SQLAlchemy-2.0.13-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2ad9688debf1f0ae9c6e0706a4e2d33b1a01281317cee9bd1d7eef8020c5baac"}, + {file = "SQLAlchemy-2.0.13-cp311-cp311-win32.whl", hash = "sha256:c61b89803a87a3b2a394089a7dadb79a6c64c89f2e8930cc187fec43b319f8d2"}, + {file = "SQLAlchemy-2.0.13-cp311-cp311-win_amd64.whl", hash = "sha256:0aa2cbde85a6eab9263ab480f19e8882d022d30ebcdc14d69e6a8d7c07b0a871"}, + {file = "SQLAlchemy-2.0.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9ad883ac4f5225999747f0849643c4d0ec809d9ffe0ddc81a81dd3e68d0af463"}, + {file = "SQLAlchemy-2.0.13-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e481e54db8cec1457ee7c05f6d2329e3298a304a70d3b5e2e82e77170850b385"}, + {file = "SQLAlchemy-2.0.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4e08e3831671008888bad5d160d757ef35ce34dbb73b78c3998d16aa1334c97"}, + {file = "SQLAlchemy-2.0.13-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f234ba3bb339ad17803009c8251f5ee65dcf283a380817fe486823b08b26383d"}, + {file = "SQLAlchemy-2.0.13-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:375b7ba88f261dbd79d044f20cbcd919d88befb63f26af9d084614f10cdf97a6"}, + {file = "SQLAlchemy-2.0.13-cp37-cp37m-win32.whl", hash = "sha256:9136d596111c742d061c0f99bab95c5370016c4101a32e72c2b634ad5e0757e6"}, + {file = "SQLAlchemy-2.0.13-cp37-cp37m-win_amd64.whl", hash = "sha256:7612a7366a0855a04430363fb4ab392dc6818aaece0b2e325ff30ee77af9b21f"}, + {file = "SQLAlchemy-2.0.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:49c138856035cb97f0053e5e57ba90ec936b28a0b8b0020d44965c7b0c0bf03a"}, + {file = "SQLAlchemy-2.0.13-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a5e9e78332a5d841422b88b8c490dfd7f761e64b3430249b66c05d02f72ceab0"}, + {file = "SQLAlchemy-2.0.13-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd0febae872a4042da44e972c070f0fd49a85a0a7727ab6b85425f74348be14e"}, + {file = "SQLAlchemy-2.0.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:566a0ac347cf4632f551e7b28bbd0d215af82e6ffaa2556f565a3b6b51dc3f81"}, + {file = "SQLAlchemy-2.0.13-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e5e5dc300a0ca8755ada1569f5caccfcdca28607dfb98b86a54996b288a8ebd3"}, + {file = "SQLAlchemy-2.0.13-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a25b4c4fdd633501233924f873e6f6cd8970732859ecfe4ecfb60635881f70be"}, + {file = "SQLAlchemy-2.0.13-cp38-cp38-win32.whl", hash = "sha256:6777673d346071451bf7cccf8d0499024f1bd6a835fc90b4fe7af50373d92ce6"}, + {file = "SQLAlchemy-2.0.13-cp38-cp38-win_amd64.whl", hash = "sha256:2f0a355264af0952570f18457102984e1f79510f856e5e0ae652e63316d1ca23"}, + {file = "SQLAlchemy-2.0.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d93ebbff3dcf05274843ad8cf650b48ee634626e752c5d73614e5ec9df45f0ce"}, + {file = "SQLAlchemy-2.0.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fec56c7d1b6a22c8f01557de3975d962ee40270b81b60d1cfdadf2a105d10e84"}, + {file = "SQLAlchemy-2.0.13-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0eb14a386a5b610305bec6639b35540b47f408b0a59f75999199aed5b3d40079"}, + {file = "SQLAlchemy-2.0.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f3b5236079bc3e318a92bab2cc3f669cc32127075ab03ff61cacbae1c392b8"}, + {file = "SQLAlchemy-2.0.13-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bf1aae95e80acea02a0a622e1c12d3fefc52ffd0fe7bda70a30d070373fbb6c3"}, + {file = "SQLAlchemy-2.0.13-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cdf80359b641185ae7e580afb9f88cf560298f309a38182972091165bfe1225d"}, + {file = "SQLAlchemy-2.0.13-cp39-cp39-win32.whl", hash = "sha256:f463598f9e51ccc04f0fe08500f9a0c3251a7086765350be418598b753b5561d"}, + {file = "SQLAlchemy-2.0.13-cp39-cp39-win_amd64.whl", hash = "sha256:881cc388dded44ae6e17a1666364b98bd76bcdc71b869014ae725f06ba298e0e"}, + {file = "SQLAlchemy-2.0.13-py3-none-any.whl", hash = "sha256:0d6979c9707f8b82366ba34b38b5a6fe32f75766b2e901f9820e271e95384070"}, + {file = "SQLAlchemy-2.0.13.tar.gz", hash = "sha256:8d97b37b4e60073c38bcf94e289e3be09ef9be870de88d163f16e08f2b9ded1a"}, +] + +[package.dependencies] +greenlet = {version = "!=0.4.17", markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\""} +typing-extensions = ">=4.2.0" + +[package.extras] +aiomysql = ["aiomysql", "greenlet (!=0.4.17)"] +aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing-extensions (!=3.10.0.1)"] +asyncio = ["greenlet (!=0.4.17)"] +asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (!=0.4.17)"] +mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5)"] +mssql = ["pyodbc"] +mssql-pymssql = ["pymssql"] +mssql-pyodbc = ["pyodbc"] +mypy = ["mypy (>=0.910)"] +mysql = ["mysqlclient (>=1.4.0)"] +mysql-connector = ["mysql-connector-python"] +oracle = ["cx-oracle (>=7)"] +oracle-oracledb = ["oracledb (>=1.0.1)"] +postgresql = ["psycopg2 (>=2.7)"] +postgresql-asyncpg = ["asyncpg", "greenlet (!=0.4.17)"] +postgresql-pg8000 = ["pg8000 (>=1.29.1)"] +postgresql-psycopg = ["psycopg (>=3.0.7)"] +postgresql-psycopg2binary = ["psycopg2-binary"] +postgresql-psycopg2cffi = ["psycopg2cffi"] +pymysql = ["pymysql"] +sqlcipher = ["sqlcipher3-binary"] + +[[package]] +name = "typing-extensions" +version = "4.5.0" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, + {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, +] + +[[package]] +name = "webassets" +version = "2.0" +description = "Media asset management for Python, with glue code for various web frameworks" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "webassets-2.0-py3-none-any.whl", hash = "sha256:a31a55147752ba1b3dc07dee0ad8c8efff274464e08bbdb88c1fd59ffd552724"}, + {file = "webassets-2.0.tar.gz", hash = "sha256:167132337677c8cedc9705090f6d48da3fb262c8e0b2773b29f3352f050181cd"}, +] + +[[package]] +name = "werkzeug" +version = "2.3.4" +description = "The comprehensive WSGI web application library." +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "Werkzeug-2.3.4-py3-none-any.whl", hash = "sha256:48e5e61472fee0ddee27ebad085614ebedb7af41e88f687aaf881afb723a162f"}, + {file = "Werkzeug-2.3.4.tar.gz", hash = "sha256:1d5a58e0377d1fe39d061a5de4469e414e78ccb1e1e59c0f5ad6fa1c36c52b76"}, +] + +[package.dependencies] +MarkupSafe = ">=2.1.1" + +[package.extras] +watchdog = ["watchdog (>=2.3)"] + +[[package]] +name = "wtforms" +version = "3.0.1" +description = "Form validation and rendering for Python web development." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "WTForms-3.0.1-py3-none-any.whl", hash = "sha256:837f2f0e0ca79481b92884962b914eba4e72b7a2daaf1f939c890ed0124b834b"}, + {file = "WTForms-3.0.1.tar.gz", hash = "sha256:6b351bbb12dd58af57ffef05bc78425d08d1914e0fd68ee14143b7ade023c5bc"}, +] + +[package.dependencies] +MarkupSafe = "*" + +[package.extras] +email = ["email-validator"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.11" +content-hash = "0eaf80270df1df786073f7641821fe9f9dc3a97b2424e12f10252a75189ed9de" diff --git a/DV8-Expo/pyproject.toml b/DV8-Expo/pyproject.toml new file mode 100644 index 0000000..0029a17 --- /dev/null +++ b/DV8-Expo/pyproject.toml @@ -0,0 +1,25 @@ +[tool.poetry] +name = "dv8-expo" +version = "0.1.0" +description = "Website to display all the awesome creations everyone made" +authors = ["Fluffy-Bean "] +license = "MIT" +readme = "README.md" +packages = [{include = "dv8_expo"}] + +[tool.poetry.dependencies] +python = "^3.11" +Flask = "^2.3.2" +Flask-Caching = "^2.0.2" +Flask-Assets = "^2.0" +flask-sqlalchemy = "^3.0.3" +flask-wtf = "^1.1.1" + +[tool.poetry.group.dev.dependencies] +libsass-bin = "^0.22.0.post1" +jsmin = "^3.0.1" +cssmin = "^0.2.0" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/DV8-Expo/website/__init__.py b/DV8-Expo/website/__init__.py new file mode 100644 index 0000000..244b2dc --- /dev/null +++ b/DV8-Expo/website/__init__.py @@ -0,0 +1,26 @@ +from flask import Flask, render_template +from flask_assets import Bundle +from website.extensions import db, assets +from website.config import INSTANCE_DIR + +app = Flask(__name__) # instance_path=INSTANCE_DIR +app.config.from_pyfile('config.py') + +db.init_app(app) +with app.app_context(): + db.create_all() + +assets.init_app(app) +styles = Bundle('sass/styles.sass', filters='libsass, cssmin', output='gen/packed.css', depends='sass/*.sass') +assets.register('styles', styles) +scripts = Bundle('js/*.js', filters='jsmin', output='gen/packed.js') +assets.register('scripts', scripts) + + +@app.route('/') +def index(): + return render_template('index.html') + +@app.route('/login') +def login(): + return render_template('login.html') diff --git a/DV8-Expo/website/config.py b/DV8-Expo/website/config.py new file mode 100644 index 0000000..0a67c42 --- /dev/null +++ b/DV8-Expo/website/config.py @@ -0,0 +1,4 @@ +SQLALCHEMY_DATABASE_URI = 'sqlite:///site.db' + +MIGRATION_DIR = "/data/storage/migrations" +INSTANCE_DIR = "/data/storage/instance" diff --git a/DV8-Expo/website/extensions.py b/DV8-Expo/website/extensions.py new file mode 100644 index 0000000..7819cfc --- /dev/null +++ b/DV8-Expo/website/extensions.py @@ -0,0 +1,7 @@ +from flask_sqlalchemy import SQLAlchemy +from flask_caching import Cache +from flask_assets import Environment + +db = SQLAlchemy() +cache = Cache() +assets = Environment() diff --git a/DV8-Expo/website/models.py b/DV8-Expo/website/models.py new file mode 100644 index 0000000..780801a --- /dev/null +++ b/DV8-Expo/website/models.py @@ -0,0 +1,35 @@ +""" +Database models for the server +""" +from website.extensions import db + + +class Games(db.Model): + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String, nullable=False) + downloadLink = db.Column(db.String, nullable=False) + approved = db.Column(db.Boolean, nullable=False, default=False) + + +class Tags(db.Model): + id = db.Column(db.Integer, primary_key=True) + tag = db.Column(db.String, nullable=False) + game_id = db.Column(db.Integer, db.ForeignKey('games.id')) + + +class TriggerWarning(db.Model): + id = db.Column(db.Integer, primary_key=True) + warning = db.Column(db.String, nullable=False) + game_id = db.Column(db.Integer, db.ForeignKey('games.id')) + + +class Authros(db.Model): + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String, nullable=False) + role = db.Column(db.String, nullable=False, default='Developer') + game_id = db.Column(db.Integer, db.ForeignKey('games.id')) + + +class Users(db.Model): + id = db.Column(db.Integer, primary_key=True) + uuid = db.Column(db.String, nullable=False) diff --git a/DV8-Expo/website/static/gen/packed.css b/DV8-Expo/website/static/gen/packed.css new file mode 100644 index 0000000..82f8307 --- /dev/null +++ b/DV8-Expo/website/static/gen/packed.css @@ -0,0 +1 @@ +:root{--primary:#332f2f;--secondary:#d7cec9;--primary-button:#C0AB83;--secondary-button:#DDD1C1;--accent:#c2a588;--radius:1rem;--main-font:'Rubik',sans-serif;--monospace-font:'JetBrains Mono',monospace;--nav:#262323}@keyframes glow{0%{opacity:0}50%{opacity:1}100%{opacity:0}}nav{padding:0 .5rem;width:100%;height:3rem;display:flex;flex-direction:row;align-items:center;position:fixed;top:0;left:0;background:transparent;color:var(--primary);z-index:100;transition:color .2s ease-in-out}nav::before{content:"";position:absolute;top:-100%;left:0;width:100%;height:100%;background:var(--nav);transition:top .2s ease-in-out;z-index:-1}nav>span{width:100%}nav>a{margin:0 .75rem;font-size:1.1rem;font-weight:bold;font-family:var(--main-font);text-decoration:none;color:inherit;transition:color .2s ease-in-out,font-weight .2s}nav>a:hover{color:var(--accent)}nav.scrolled{color:var(--secondary)}nav.scrolled>a{font-weight:normal}nav.scrolled::before{top:0}header{margin-bottom:3rem;padding:2rem;height:calc(100vh - 6rem);display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;font-family:var(--main-font);color:var(--primary)}header>h1{margin:0;font-size:3rem}header>h1>span{font-family:var(--monospace-font);color:var(--accent)}header>p{margin:0;font-size:1.2rem}header>i{margin:1rem 0 0;font-size:1.2rem;animation:glow 3s ease-in-out infinite}section{margin:0 auto 1rem;padding:1rem;max-width:75rem;display:flex;flex-direction:column;justify-content:center;text-align:center}section>h2{margin:0 0 1rem;font-size:2rem;font-weight:bold}section>p{margin:0 0 1rem;font-size:1rem}section.center{height:100%;justify-content:center;align-items:center}div.games{margin:1rem;display:grid;grid-template-columns:repeat(auto-fit,minmax(20rem,1fr));gap:2rem}@media(max-width:24rem){div.games{margin:0;display:flex;flex-direction:column;gap:1rem}}div.login{padding:.5rem;background-color:var(--primary);color:var(--secondary);border-radius:var(--radius)}div.login>p{margin:0 0 .5rem;padding:.5rem;background-color:var(--accent);color:var(--primary);border-radius:calc(calc(var(--radius) - .5rem) / 2)}div.login>p:first-child{border-top-left-radius:calc(var(--radius) - .5rem);border-top-right-radius:calc(var(--radius) - .5rem)}div.login>form{display:flex;flex-direction:row}div.login>form>input{padding:.5rem 1rem;width:100%;font-size:1rem;font-family:var(--monospace-font);background-color:var(--secondary);color:var(--primary);border-radius:calc(calc(var(--radius) - .5rem) / 2) 0 0 calc(var(--radius) - .5rem);border:none;transition:transform .1s ease-in-out,border-radius .1s ease-in-out}div.login>form>input:hover,div.login>form>input:focus-visible{outline:none}div.login>form>button{padding:.5rem 1rem;font-size:1rem;background-color:var(--primary-button);color:var(--primary);border-radius:0 calc(calc(var(--radius) - .5rem) / 2) calc(var(--radius) - .5rem) 0;border:none;transition:transform .1s ease-in-out,border-radius .1s ease-in-out}div.login>form>button:hover,div.login>form>button:focus-visible{outline:none;background-color:var(--secondary-button)}.game-box{margin:0 auto;padding:.5rem;width:100%;height:auto;display:flex;flex-direction:column;font-family:var(--main-font);background-color:var(--primary);color:var(--secondary);border-radius:var(--radius);box-shadow:0 .2rem 1rem 0 var(--primary);overflow:hidden;transition:box-shadow .1s ease-in-out,transform .1s ease-in-out}.game-box>img{margin:0 0 .5rem;width:auto;height:10rem;object-fit:cover;display:block;border-radius:calc(var(--radius) - .5rem) calc(var(--radius) - .5rem) calc(calc(var(--radius) - .5rem) / 2) calc(calc(var(--radius) - .5rem) / 2)}.game-box>h2{margin:0 0 .5rem;font-size:1.5rem;font-weight:bold}.game-box>p{height:100%;margin:0 0 1rem;font-size:1rem}.game-box>.options{display:flex;flex-direction:row;gap:.5rem;font-family:var(--monospace-font)}.game-box>.options>a{margin:0;padding:.5rem 1rem;height:2.5rem;display:flex;justify-content:center;align-items:center;font-size:1rem;text-decoration:none;background-color:var(--primary-button);color:var(--primary);border-radius:calc(calc(var(--radius) - .5rem) / 2);transition:transform .1s ease-in-out,border-radius .1s ease-in-out}.game-box>.options>a>i{font-size:1.2rem}.game-box>.options>a:first-child{border-bottom-left-radius:calc(var(--radius) - .5rem)}.game-box>.options>a:last-child{border-bottom-right-radius:calc(var(--radius) - .5rem)}.game-box>.options>a:hover,.game-box>.options>a:focus-visible{outline:none;transform:translateY(-0.1rem)}*{box-sizing:border-box}html{font-family:var(--main-font);background-color:var(--secondary);color:var(--primary)}body{margin:0;padding:0;min-height:100vh;display:grid;grid-template-rows:1fr auto}.background{background-color:var(--primary);position:absolute;inset:0;overflow:hidden;z-index:1}.background>img{position:absolute;inset:-5%;width:110%;height:110%;object-fit:cover;filter:blur(0.25rem);opacity:.3}.background::after{content:'';position:absolute;inset:0;background-image:linear-gradient(to top,var(--secondary),transparent);z-index:+1}main{padding-top:3rem;position:relative;z-index:2}footer{margin:auto 0 0;padding:.5rem;position:relative;display:flex;justify-content:center;align-items:center;background-color:var(--primary);color:var(--secondary);z-index:2}footer>p{margin:0;font-size:.8rem;font-family:var(--monospace-font);text-align:center;color:var(--secondary)}footer>p>a{margin:0;font-size:inherit;font-family:inherit;color:var(--accent);text-decoration:none;cursor:pointer}footer>p>a:hover{text-decoration:underline} \ No newline at end of file diff --git a/DV8-Expo/website/static/gen/packed.js b/DV8-Expo/website/static/gen/packed.js new file mode 100644 index 0000000..e6961b2 --- /dev/null +++ b/DV8-Expo/website/static/gen/packed.js @@ -0,0 +1 @@ +window.onscroll=()=>{scrollFunction()};window.onload=()=>{scrollFunction()};function scrollFunction(){let nav=document.querySelector("nav");let scrollHeight=0;if(document.body.scrollTop>scrollHeight||document.documentElement.scrollTop>scrollHeight){nav.classList.add("scrolled");}else{nav.classList.remove("scrolled");}} \ No newline at end of file diff --git a/DV8-Expo/website/static/images/3.jpg b/DV8-Expo/website/static/images/3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..638ee6ca749fa87188bf871dfd4b8565dabf44a2 GIT binary patch literal 58030 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%0A3;} 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 literal 0 HcmV?d00001 diff --git a/DV8-Expo/website/static/js/nav.js b/DV8-Expo/website/static/js/nav.js new file mode 100644 index 0000000..2aaa700 --- /dev/null +++ b/DV8-Expo/website/static/js/nav.js @@ -0,0 +1,15 @@ +window.onscroll = () => { scrollFunction() }; +window.onload = () => { scrollFunction() }; + +function scrollFunction() { + let nav = document.querySelector("nav"); + // let scrollHeight = window.innerHeight - nav.offsetHeight; + let scrollHeight = 0; + + if (document.body.scrollTop > scrollHeight || + document.documentElement.scrollTop > scrollHeight) { + nav.classList.add("scrolled"); + } else { + nav.classList.remove("scrolled"); + } +} \ No newline at end of file diff --git a/DV8-Expo/website/static/sass/animations.sass b/DV8-Expo/website/static/sass/animations.sass new file mode 100644 index 0000000..90a4441 --- /dev/null +++ b/DV8-Expo/website/static/sass/animations.sass @@ -0,0 +1,10 @@ +@keyframes glow + 0% + opacity: 0 + // text-shadow: 0 0 0 $primary + 50% + opacity: 1 + // text-shadow: 0 0.25rem 0.5rem $primary + 100% + opacity: 0 + // text-shadow: 0 0 0 $primary diff --git a/DV8-Expo/website/static/sass/header.sass b/DV8-Expo/website/static/sass/header.sass new file mode 100644 index 0000000..e0eee82 --- /dev/null +++ b/DV8-Expo/website/static/sass/header.sass @@ -0,0 +1,28 @@ +header + margin-bottom: 3rem + padding: 2rem + height: calc(100vh - 6rem) + display: flex + flex-direction: column + justify-content: center + align-items: center + text-align: center + font-family: $main-font + color: $primary + + > h1 + margin: 0 + font-size: 3rem + + > span + font-family: $monospace-font + color: $accent + + > p + margin: 0 + font-size: 1.2rem + + > i + margin: 1rem 0 0 + font-size: 1.2rem + animation: glow 3s ease-in-out infinite diff --git a/DV8-Expo/website/static/sass/nav.sass b/DV8-Expo/website/static/sass/nav.sass new file mode 100644 index 0000000..24c2dc8 --- /dev/null +++ b/DV8-Expo/website/static/sass/nav.sass @@ -0,0 +1,55 @@ +nav + padding: 0 0.5rem + width: 100% + height: 3rem + + display: flex + flex-direction: row + align-items: center + + position: fixed + top: 0 + left: 0 + + background: transparent + color: $primary + + z-index: 100 + transition: color 0.2s ease-in-out + + &::before + content: "" + position: absolute + top: -100% + left: 0 + width: 100% + height: 100% + background: var(--nav) + transition: top 0.2s ease-in-out + z-index: -1 + + > span + width: 100% + + > a + margin: 0 0.75rem + + font-size: 1.1rem + font-weight: bold + font-family: $main-font + text-decoration: none + + color: inherit + transition: color 0.2s ease-in-out, font-weight 0.2s + + &:hover + color: $accent + + &.scrolled + color: $secondary + + > a + font-weight: normal + + &::before + top: 0 \ No newline at end of file diff --git a/DV8-Expo/website/static/sass/sections.sass b/DV8-Expo/website/static/sass/sections.sass new file mode 100644 index 0000000..0f09d26 --- /dev/null +++ b/DV8-Expo/website/static/sass/sections.sass @@ -0,0 +1,168 @@ +section + margin: 0 auto 1rem + padding: 1rem + max-width: 75rem + display: flex + flex-direction: column + justify-content: center + text-align: center + + > h2 + margin: 0 0 1rem + font-size: 2rem + font-weight: bold + + > p + margin: 0 0 1rem + font-size: 1rem + + &.center + height: 100% + justify-content: center + align-items: center + +div.games + margin: 1rem + display: grid + grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)) + gap: 2rem + +@media (max-width: 24rem) + div.games + margin: 0 + display: flex + flex-direction: column + gap: 1rem + +div.login + padding: 0.5rem + + background-color: $primary + color: $secondary + border-radius: $radius + + > p + margin: 0 0 0.5rem + padding: 0.5rem + + background-color: $accent + color: $primary + border-radius: calc(calc(#{$radius} - 0.5rem) / 2) + + &:first-child + border-top-left-radius: calc(#{$radius} - 0.5rem) + border-top-right-radius: calc(#{$radius} - 0.5rem) + + > form + display: flex + flex-direction: row + + > input + padding: 0.5rem 1rem + + width: 100% + + font-size: 1rem + font-family: $monospace-font + + background-color: $secondary + color: $primary + border-radius: calc(calc(#{$radius} - 0.5rem) / 2) 0 0 calc(#{$radius} - 0.5rem) + border: none + + transition: transform 0.1s ease-in-out, border-radius 0.1s ease-in-out + + &:hover, &:focus-visible + outline: none + + > button + padding: 0.5rem 1rem + + font-size: 1rem + + background-color: $primary-button + color: $primary + border-radius: 0 calc(calc(#{$radius} - 0.5rem) / 2) calc(#{$radius} - 0.5rem) 0 + border: none + + transition: transform 0.1s ease-in-out, border-radius 0.1s ease-in-out + + &:hover, &:focus-visible + outline: none + background-color: $secondary-button + +.game-box + margin: 0 auto + padding: 0.5rem + + width: 100% + height: auto + + display: flex + flex-direction: column + + font-family: $main-font + + background-color: $primary + color: $secondary + border-radius: $radius + box-shadow: 0 0.2rem 1rem 0 $primary + + overflow: hidden + transition: box-shadow 0.1s ease-in-out, transform 0.1s ease-in-out + + > img + margin: 0 0 0.5rem + width: auto + height: 10rem + object-fit: cover + display: block + border-radius: calc(#{$radius} - 0.5rem) calc(#{$radius} - 0.5rem) calc(calc(#{$radius} - 0.5rem) / 2) calc(calc(#{$radius} - 0.5rem) / 2) + + > h2 + margin: 0 0 0.5rem + font-size: 1.5rem + font-weight: bold + + > p + height: 100% + margin: 0 0 1rem + font-size: 1rem + + > .options + display: flex + flex-direction: row + gap: 0.5rem + font-family: $monospace-font + + > a + margin: 0 + padding: 0.5rem 1rem + + height: 2.5rem + + display: flex + justify-content: center + align-items: center + + font-size: 1rem + text-decoration: none + + background-color: $primary-button + color: $primary + border-radius: calc(calc(#{$radius} - 0.5rem) / 2) + + transition: transform 0.1s ease-in-out, border-radius 0.1s ease-in-out + + > i + font-size: 1.2rem + + &:first-child + border-bottom-left-radius: calc(#{$radius} - 0.5rem) + + &:last-child + border-bottom-right-radius: calc(#{$radius} - 0.5rem) + + &:hover, &:focus-visible + outline: none + transform: translateY(-0.1rem) diff --git a/DV8-Expo/website/static/sass/styles.sass b/DV8-Expo/website/static/sass/styles.sass new file mode 100644 index 0000000..81c27d9 --- /dev/null +++ b/DV8-Expo/website/static/sass/styles.sass @@ -0,0 +1,109 @@ +$primary: var(--primary) +$secondary: var(--secondary) +$primary-button: var(--primary-button) +$secondary-button: var(--secondary-button) +$accent: var(--accent) + +$radius: var(--radius) + +$main-font: var(--main-font) +$monospace-font: var(--monospace-font) + +\:root + --primary: #332f2f + --secondary: #d7cec9 + --primary-button: #C0AB83 + --secondary-button: #DDD1C1 + --accent: #c2a588 + + --radius: 1rem + + --main-font: 'Rubik', sans-serif + --monospace-font: 'JetBrains Mono', monospace + + --nav: #{ darken(#332f2f, 5%) } + +@import "animations" +@import "nav" +@import "header" +@import "sections" + +* + box-sizing: border-box + +html + font-family: $main-font + background-color: $secondary + color: $primary + +body + margin: 0 + padding: 0 + min-height: 100vh + display: grid + grid-template-rows: 1fr auto + +.background + background-color: $primary + position: absolute + inset: 0 + overflow: hidden + z-index: 1 + + > img + position: absolute + inset: -5% + width: 110% + height: 110% + object-fit: cover + filter: blur(0.25rem) + opacity: 0.3 + + &::after + content: '' + position: absolute + inset: 0 + background-image: linear-gradient(to top, $secondary, transparent) + z-index: +1 + +main + padding-top: 3rem + position: relative + z-index: 2 + +footer + margin: auto 0 0 + padding: 0.5rem + + position: relative + + display: flex + justify-content: center + align-items: center + + background-color: $primary + color: $secondary + + z-index: 2 + + > p + margin: 0 + + font-size: 0.8rem + font-family: $monospace-font + text-align: center + + color: $secondary + + > a + margin: 0 + + font-size: inherit + font-family: inherit + + color: $accent + text-decoration: none + cursor: pointer + + &:hover + text-decoration: underline \ No newline at end of file diff --git a/DV8-Expo/website/templates/base.html b/DV8-Expo/website/templates/base.html new file mode 100644 index 0000000..c004b1b --- /dev/null +++ b/DV8-Expo/website/templates/base.html @@ -0,0 +1,47 @@ + + + + + + + Game Event 23 + + + + + + + + + + {% assets "scripts" %} + + {% endassets %} + + + {% assets "styles" %} + + {% endassets %} + + +

+ + + Background + +
+ {% block content %}{% endblock %} +
+ + + + \ No newline at end of file diff --git a/DV8-Expo/website/templates/index.html b/DV8-Expo/website/templates/index.html new file mode 100644 index 0000000..b2fd067 --- /dev/null +++ b/DV8-Expo/website/templates/index.html @@ -0,0 +1,36 @@ +{% extends "base.html" %} +{% block background %}{{ url_for('static', filename='images/3.jpg') }}{% endblock %} +{% block content %} +
+

Welcome to the

+

DV8 Game Expo 2023!

+ +
+ +
+

About

+

Tap to add text

+
+ +
+

Games

+

Here are some games AAAA

+ +
+ {% for game in range(10) %} +
+ game image +

game name

+

mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow

+ +
+ View + + +
+
+ {% endfor %} +
+
+ +{% endblock %} \ No newline at end of file diff --git a/DV8-Expo/website/templates/login.html b/DV8-Expo/website/templates/login.html new file mode 100644 index 0000000..8bec60f --- /dev/null +++ b/DV8-Expo/website/templates/login.html @@ -0,0 +1,21 @@ +{% extends "base.html" %} +{% block background %}{{ url_for('static', filename='images/3.jpg') }}{% endblock %} +{% block content %} +
+ +
+{% endblock %} \ No newline at end of file