diff --git a/.gitignore b/.gitignore index dca8225..3d492e8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ __pycache__ .venv db.sqlite3 -tailwindcss.exe \ No newline at end of file +tailwindcss.exe +t-style.css \ No newline at end of file diff --git a/core/accounts/static/accounts/css/base.css b/core/accounts/static/accounts/css/base.css deleted file mode 100644 index e351427..0000000 --- a/core/accounts/static/accounts/css/base.css +++ /dev/null @@ -1,21 +0,0 @@ -/*color vars*/ -:root { - --main_bg: #1e1e1e; - --main_text_color: #d3d3d3; - --main_color: #3399cc; - --hover_main_color: #3399ccb0; - - } - - - -body { - background-color: var(--main_bg); - color: var(--main_text_color); - font-family: Arial, sans-serif; - display: flex; - justify-content: center; - align-items: center; - height: 100vh; - margin: 0; -} \ No newline at end of file diff --git a/core/accounts/static/accounts/css/login.css b/core/accounts/static/accounts/css/login.css deleted file mode 100644 index c47f90e..0000000 --- a/core/accounts/static/accounts/css/login.css +++ /dev/null @@ -1,128 +0,0 @@ - -.register_link { - color:var(--main_text_color); - background-color: #2e2e2e; -} - -.register_button { - color:var(--main_text_color); - background-color: #2e2e2e; - border-radius: 5px; - border:none; - margin-top: 10px; -} - - - -.login-container { - background-color: #2e2e2e; - padding: 30px; - border-radius: 15px; - width: 400px; - box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.5); - text-align: center; - border: 2px solid var(--main_color); -} - -.login-header { - color: var(--main_text_color); - font-size: 24px; - margin-bottom: 20px; -} - - -.input-group { - width: 350px; - margin-bottom: 15px; - display: flex; - flex-direction: column; - align-items: center; - padding-left: 25px; - padding-right: 25px; -} - - -.input-group input { - width: 100%; - padding: 10px; - border: 1px solid #555; - border-radius: 15px; - background-color: #4a4a4a; - color: var(--main_text_color); - outline: none; - transition: transform 0.2s ease; -} - - -.input-group input:focus { - transform: scale(1.06); - border-color: var(--main_color); -} - - -.login-button { - width: 50%; - padding: 13px; - background-color: var(--main_color); - color: var(--main_text_color); - border: none; - border-radius: 15px; - cursor: pointer; - transition: background-color 0.3s ease; - font-size: 20px; - font-weight: bold; - margin-top: 10px; - transition: transform 0.2s ease; -} - - -.login-button:hover { - background-color: var(--hover_main_color); - transform: scale(1.06); -} - - -.login-logo { - width: 400px; - height: auto; - margin-bottom: 20px; - display: flex; - justify-content: center; - align-items: center; - border-radius: 10px; -} -.login-logo-mobile { - width: 150px; -} - - -.login-container { - text-align: center; -} - -/* MOBILE DEVICES */ -@media (max-width: 768px) { - .login-container { - width: 250px; - padding: 10px; - } - .input-group { - width: 200px; - } - .login-logo { - display:none; - } - .login-button { - height: auto; - } - .login-form { - padding-bottom: 12px; - } -} - -/* DESKTOP DEVICES*/ -@media (min-width: 768px) { - .login-logo-mobile { - display: none; - } -} diff --git a/core/accounts/templates/accounts/home.html b/core/accounts/templates/accounts/home.html index 62a18a9..a074ad8 100644 --- a/core/accounts/templates/accounts/home.html +++ b/core/accounts/templates/accounts/home.html @@ -1,11 +1,25 @@ {% extends 'accounts/base.html'%} {% block title %}Home{% endblock %} {% block content %} -
-

Moin moin!

-
- {% csrf_token %} - -
+ + +
+
+
+ +

Willkommen, {{ request.user.username }}!

+ +
+ {% csrf_token %} + +
+
+
+ qivip + +
+
+ + {% endblock %} \ No newline at end of file diff --git a/core/accounts/templates/accounts/login.html b/core/accounts/templates/accounts/login.html index 2167670..d716735 100644 --- a/core/accounts/templates/accounts/login.html +++ b/core/accounts/templates/accounts/login.html @@ -2,12 +2,12 @@ {% load static %} {% block title %}Anmeldung{% endblock %} {% block content %} -
-
+
+

Anmeldung

{% if form.errors %} -
+
    {% for field, errors in form.errors.items %} {% for error in errors %} @@ -18,11 +18,11 @@
{% endif %} {% csrf_token %} -
- +
+
-
- +
+
diff --git a/core/accounts/templates/accounts/register.html b/core/accounts/templates/accounts/register.html index 795701c..1d8d7b4 100644 --- a/core/accounts/templates/accounts/register.html +++ b/core/accounts/templates/accounts/register.html @@ -1,8 +1,9 @@ {% extends 'accounts/base.html' %} {% block title %}Registrierung{% endblock %} {% block content %} -
-
+
+ +

Registrieren

diff --git a/core/core/settings.py b/core/core/settings.py index a85af6b..f9789b6 100644 --- a/core/core/settings.py +++ b/core/core/settings.py @@ -127,4 +127,4 @@ BASE_DIR='static' #von ben8 hinzugefügt DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' -LOGIN_URL = '/login/' \ No newline at end of file +LOGIN_URL = '/account/login/' \ No newline at end of file diff --git a/core/homepage/static/homepage/t-input.css b/core/homepage/static/homepage/t-input.css index bc69ff2..6be4a59 100644 --- a/core/homepage/static/homepage/t-input.css +++ b/core/homepage/static/homepage/t-input.css @@ -7,7 +7,10 @@ nav div ul.qp-nav-list li { a.qp-a-button { @apply p-6 rounded-md font-extrabold hover:scale-105 transition duration-300 shadow-md; } -.register input{@apply p-3 rounded-full bg-gray-200 focus:scale-105 transition duration-200 font-black;} +a.qp-a-button-small { + @apply p-1 rounded-md hover:scale-105 transition duration-300 shadow-md; +} +.register input{@apply p-3 rounded-full bg-gray-200 focus:scale-105 transition duration-200 font-black w-full;} .input-group { @apply flex flex-col gap-4 max-w-md mx-auto p-6 bg-white rounded-xl shadow-lg; diff --git a/core/homepage/static/homepage/t-style.css b/core/homepage/static/homepage/t-style.css index 22eaf3b..69dcd01 100644 --- a/core/homepage/static/homepage/t-style.css +++ b/core/homepage/static/homepage/t-style.css @@ -1,4 +1,4 @@ -/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ +/*! tailwindcss v4.0.12 | MIT License | https://tailwindcss.com */ @layer theme, base, components, utilities; @layer theme { :root, :host { @@ -8,6 +8,10 @@ monospace; --color-red-100: oklch(0.936 0.032 17.717); --color-red-200: oklch(0.885 0.062 18.334); + --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", + "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", + "Courier New", monospace; --color-red-500: oklch(0.637 0.237 25.331); --color-red-600: oklch(0.577 0.245 27.325); --color-red-700: oklch(0.505 0.213 27.518); @@ -41,10 +45,6 @@ --spacing: 0.25rem; --breakpoint-lg: 64rem; --container-md: 28rem; - --container-lg: 32rem; - --container-7xl: 80rem; - --text-xs: 0.75rem; - --text-xs--line-height: calc(1 / 0.75); --text-sm: 0.875rem; --text-sm--line-height: calc(1.25 / 0.875); --text-lg: 1.125rem; @@ -53,6 +53,8 @@ --text-xl--line-height: calc(1.75 / 1.25); --text-2xl: 1.5rem; --text-2xl--line-height: calc(2 / 1.5); + --text-3xl: 1.875rem; + --text-3xl--line-height: calc(2.25 / 1.875); --text-6xl: 3.75rem; --text-6xl--line-height: 1; --text-8xl: 6rem; @@ -72,10 +74,16 @@ --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); --default-font-family: var(--font-sans); --default-font-feature-settings: var(--font-sans--font-feature-settings); - --default-font-variation-settings: var(--font-sans--font-variation-settings); + --default-font-variation-settings: var( + --font-sans--font-variation-settings + ); --default-mono-font-family: var(--font-mono); - --default-mono-font-feature-settings: var(--font-mono--font-feature-settings); - --default-mono-font-variation-settings: var(--font-mono--font-variation-settings); + --default-mono-font-feature-settings: var( + --font-mono--font-feature-settings + ); + --default-mono-font-variation-settings: var( + --font-mono--font-variation-settings + ); } } @layer base { @@ -89,9 +97,9 @@ line-height: 1.5; -webkit-text-size-adjust: 100%; tab-size: 4; - font-family: var( --default-font-family, ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji' ); + font-family: var( --default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" ); font-feature-settings: var(--default-font-feature-settings, normal); - font-variation-settings: var(--default-font-variation-settings, normal); + font-variation-settings: var( --default-font-variation-settings, normal ); -webkit-tap-highlight-color: transparent; } body { @@ -119,9 +127,9 @@ font-weight: bolder; } code, kbd, samp, pre { - font-family: var( --default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace ); - font-feature-settings: var(--default-mono-font-feature-settings, normal); - font-variation-settings: var(--default-mono-font-variation-settings, normal); + font-family: var( --default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace ); + font-feature-settings: var( --default-mono-font-feature-settings, normal ); + font-variation-settings: var( --default-mono-font-variation-settings, normal ); font-size: 1em; } small { @@ -209,32 +217,23 @@ :-moz-ui-invalid { box-shadow: none; } - button, input:where([type='button'], [type='reset'], [type='submit']), ::file-selector-button { + button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button { appearance: button; } ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { height: auto; } - [hidden]:where(:not([hidden='until-found'])) { + [hidden]:where(:not([hidden="until-found"])) { display: none !important; } } @layer utilities { - .collapse { - visibility: collapse; - } .absolute { position: absolute; } - .relative { - position: relative; - } .static { position: static; } - .sticky { - position: sticky; - } .top-0 { top: calc(var(--spacing) * 0); } @@ -286,6 +285,9 @@ .mx-auto { margin-inline: auto; } + .my-8 { + margin-block: calc(var(--spacing) * 8); + } .mt-1 { margin-top: calc(var(--spacing) * 1); } @@ -304,35 +306,17 @@ .mt-8 { margin-top: calc(var(--spacing) * 8); } - .mt-10 { - margin-top: calc(var(--spacing) * 10); - } - .mr-0 { - margin-right: calc(var(--spacing) * 0); + .mt-12 { + margin-top: calc(var(--spacing) * 12); } .mr-0\.75 { margin-right: calc(var(--spacing) * 0.75); } - .mr-1\.5 { - margin-right: calc(var(--spacing) * 1.5); - } - .mb-2 { - margin-bottom: calc(var(--spacing) * 2); - } - .mb-3 { - margin-bottom: calc(var(--spacing) * 3); - } - .mb-4 { - margin-bottom: calc(var(--spacing) * 4); - } .mb-6 { margin-bottom: calc(var(--spacing) * 6); } - .mb-8 { - margin-bottom: calc(var(--spacing) * 8); - } - .ml-0 { - margin-left: calc(var(--spacing) * 0); + .mb-12 { + margin-bottom: calc(var(--spacing) * 12); } .ml-0\.75 { margin-left: calc(var(--spacing) * 0.75); @@ -358,21 +342,6 @@ .hidden { display: none; } - .inline-flex { - display: inline-flex; - } - .list-item { - display: list-item; - } - .table { - display: table; - } - .h-4 { - height: calc(var(--spacing) * 4); - } - .h-5 { - height: calc(var(--spacing) * 5); - } .h-12 { height: calc(var(--spacing) * 12); } @@ -397,42 +366,15 @@ .w-12 { width: calc(var(--spacing) * 12); } + .w-80 { + width: calc(var(--spacing) * 80); + } .w-full { width: 100%; } - .max-w-7xl { - max-width: var(--container-7xl); - } - .max-w-lg { - max-width: var(--container-lg); - } .max-w-screen-lg { max-width: var(--breakpoint-lg); } - .flex-shrink-0 { - flex-shrink: 0; - } - .flex-grow { - flex-grow: 1; - } - .border-collapse { - border-collapse: collapse; - } - .transform { - transform: var(--tw-rotate-x) var(--tw-rotate-y) var(--tw-rotate-z) var(--tw-skew-x) var(--tw-skew-y); - } - .cursor-pointer { - cursor: pointer; - } - .resize { - resize: both; - } - .list-inside { - list-style-position: inside; - } - .list-disc { - list-style-type: disc; - } .grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); } @@ -606,12 +548,6 @@ .bg-blue-600 { background-color: var(--color-blue-600); } - .bg-gray-50 { - background-color: var(--color-gray-50); - } - .bg-gray-100 { - background-color: var(--color-gray-100); - } .bg-gray-200 { background-color: var(--color-gray-200); } @@ -636,9 +572,6 @@ .bg-red-500 { background-color: var(--color-red-500); } - .bg-red-600 { - background-color: var(--color-red-600); - } .bg-white { background-color: var(--color-white); } @@ -648,9 +581,6 @@ .object-cover { object-fit: cover; } - .p-0 { - padding: calc(var(--spacing) * 0); - } .p-0\.75 { padding: calc(var(--spacing) * 0.75); } @@ -672,15 +602,6 @@ .px-1 { padding-inline: calc(var(--spacing) * 1); } - .px-2 { - padding-inline: calc(var(--spacing) * 2); - } - .px-2\.5 { - padding-inline: calc(var(--spacing) * 2.5); - } - .px-3 { - padding-inline: calc(var(--spacing) * 3); - } .px-4 { padding-inline: calc(var(--spacing) * 4); } @@ -696,31 +617,20 @@ .py-2 { padding-block: calc(var(--spacing) * 2); } - .py-4 { - padding-block: calc(var(--spacing) * 4); - } - .py-5 { - padding-block: calc(var(--spacing) * 5); - } - .py-8 { - padding-block: calc(var(--spacing) * 8); - } - .py-12 { - padding-block: calc(var(--spacing) * 12); - } .pb-4 { padding-bottom: calc(var(--spacing) * 4); } .text-center { text-align: center; } - .font-mono { - font-family: var(--font-mono); - } .text-2xl { font-size: var(--text-2xl); line-height: var(--tw-leading, var(--text-2xl--line-height)); } + .text-3xl { + font-size: var(--text-3xl); + line-height: var(--tw-leading, var(--text-3xl--line-height)); + } .text-6xl { font-size: var(--text-6xl); line-height: var(--tw-leading, var(--text-6xl--line-height)); @@ -783,12 +693,6 @@ .break-words { overflow-wrap: break-word; } - .break-all { - word-break: break-all; - } - .whitespace-pre-wrap { - white-space: pre-wrap; - } .text-blue-600 { color: var(--color-blue-600); } @@ -804,27 +708,6 @@ .text-gray-600 { color: var(--color-gray-600); } - .text-gray-700 { - color: var(--color-gray-700); - } - .text-gray-900 { - color: var(--color-gray-900); - } - .text-green-500 { - color: var(--color-green-500); - } - .text-green-600 { - color: var(--color-green-600); - } - .text-green-700 { - color: var(--color-green-700); - } - .text-purple-800 { - color: var(--color-purple-800); - } - .text-red-500 { - color: var(--color-red-500); - } .text-red-600 { color: var(--color-red-600); } @@ -840,13 +723,6 @@ .italic { font-style: italic; } - .underline { - text-decoration-line: underline; - } - .shadow { - --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } .shadow-\[0_2px_2px_rgba\(0\,0\,0\,0\.1\)\] { --tw-shadow: 0 2px 2px var(--tw-shadow-color, rgba(0,0,0,0.1)); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); @@ -855,21 +731,6 @@ --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } - .shadow-sm { - --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - .outline { - outline-style: var(--tw-outline-style); - outline-width: 1px; - } - .filter { - filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); - } - .backdrop-filter { - -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); - backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); - } .transition { transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter; transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); @@ -904,83 +765,6 @@ } } } - .hover\:bg-blue-600 { - &:hover { - @media (hover: hover) { - background-color: var(--color-blue-600); - } - } - } - .hover\:bg-blue-700 { - &:hover { - @media (hover: hover) { - background-color: var(--color-blue-700); - } - } - } - .hover\:bg-gray-50 { - &:hover { - @media (hover: hover) { - background-color: var(--color-gray-50); - } - } - } - .hover\:bg-gray-200 { - &:hover { - @media (hover: hover) { - background-color: var(--color-gray-200); - } - } - } - .hover\:bg-gray-600 { - &:hover { - @media (hover: hover) { - background-color: var(--color-gray-600); - } - } - } - .hover\:bg-green-600 { - &:hover { - @media (hover: hover) { - background-color: var(--color-green-600); - } - } - } - .hover\:bg-red-200 { - &:hover { - @media (hover: hover) { - background-color: var(--color-red-200); - } - } - } - .hover\:bg-red-600 { - &:hover { - @media (hover: hover) { - background-color: var(--color-red-600); - } - } - } - .hover\:bg-red-700 { - &:hover { - @media (hover: hover) { - background-color: var(--color-red-700); - } - } - } - .hover\:text-gray-700 { - &:hover { - @media (hover: hover) { - color: var(--color-gray-700); - } - } - } - .hover\:text-red-800 { - &:hover { - @media (hover: hover) { - color: var(--color-red-800); - } - } - } .focus\:scale-105 { &:focus { --tw-scale-x: 105%; @@ -1027,11 +811,6 @@ grid-template-columns: repeat(3, minmax(0, 1fr)); } } - .sm\:rounded-lg { - @media (width >= 40rem) { - border-radius: var(--radius-lg); - } - } .sm\:px-6 { @media (width >= 40rem) { padding-inline: calc(var(--spacing) * 6); @@ -1070,6 +849,11 @@ line-height: var(--tw-leading, var(--text-8xl--line-height)); } } + .lg\:w-90 { + @media (width >= 64rem) { + width: calc(var(--spacing) * 90); + } + } .lg\:grid-cols-3 { @media (width >= 64rem) { grid-template-columns: repeat(3, minmax(0, 1fr)); @@ -1080,6 +864,12 @@ padding-inline: calc(var(--spacing) * 8); } } + .lg\:text-6xl { + @media (width >= 64rem) { + font-size: var(--text-6xl); + line-height: var(--tw-leading, var(--text-6xl--line-height)); + } + } .dark\:bg-gray-900 { @media (prefers-color-scheme: dark) { background-color: var(--color-gray-900); @@ -1134,7 +924,27 @@ a.qp-a-button { } } } +a.qp-a-button-small { + border-radius: var(--radius-md); + padding: calc(var(--spacing) * 1); + --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-duration: 300ms; + transition-duration: 300ms; + &:hover { + @media (hover: hover) { + --tw-scale-x: 105%; + --tw-scale-y: 105%; + --tw-scale-z: 105%; + scale: var(--tw-scale-x) var(--tw-scale-y); + } + } +} .register input { + width: 100%; border-radius: calc(infinity * 1px); background-color: var(--color-gray-200); padding: calc(var(--spacing) * 3); @@ -1310,31 +1120,6 @@ a.qp-a-button { scale: var(--tw-scale-x) var(--tw-scale-y); } } -@property --tw-rotate-x { - syntax: "*"; - inherits: false; - initial-value: rotateX(0); -} -@property --tw-rotate-y { - syntax: "*"; - inherits: false; - initial-value: rotateY(0); -} -@property --tw-rotate-z { - syntax: "*"; - inherits: false; - initial-value: rotateZ(0); -} -@property --tw-skew-x { - syntax: "*"; - inherits: false; - initial-value: skewX(0); -} -@property --tw-skew-y { - syntax: "*"; - inherits: false; - initial-value: skewY(0); -} @property --tw-space-y-reverse { syntax: "*"; inherits: false; @@ -1414,87 +1199,6 @@ a.qp-a-button { inherits: false; initial-value: 0 0 #0000; } -@property --tw-outline-style { - syntax: "*"; - inherits: false; - initial-value: solid; -} -@property --tw-blur { - syntax: "*"; - inherits: false; -} -@property --tw-brightness { - syntax: "*"; - inherits: false; -} -@property --tw-contrast { - syntax: "*"; - inherits: false; -} -@property --tw-grayscale { - syntax: "*"; - inherits: false; -} -@property --tw-hue-rotate { - syntax: "*"; - inherits: false; -} -@property --tw-invert { - syntax: "*"; - inherits: false; -} -@property --tw-opacity { - syntax: "*"; - inherits: false; -} -@property --tw-saturate { - syntax: "*"; - inherits: false; -} -@property --tw-sepia { - syntax: "*"; - inherits: false; -} -@property --tw-drop-shadow { - syntax: "*"; - inherits: false; -} -@property --tw-backdrop-blur { - syntax: "*"; - inherits: false; -} -@property --tw-backdrop-brightness { - syntax: "*"; - inherits: false; -} -@property --tw-backdrop-contrast { - syntax: "*"; - inherits: false; -} -@property --tw-backdrop-grayscale { - syntax: "*"; - inherits: false; -} -@property --tw-backdrop-hue-rotate { - syntax: "*"; - inherits: false; -} -@property --tw-backdrop-invert { - syntax: "*"; - inherits: false; -} -@property --tw-backdrop-opacity { - syntax: "*"; - inherits: false; -} -@property --tw-backdrop-saturate { - syntax: "*"; - inherits: false; -} -@property --tw-backdrop-sepia { - syntax: "*"; - inherits: false; -} @property --tw-duration { syntax: "*"; inherits: false; diff --git a/core/homepage/static/icons/favicon.png b/core/homepage/static/icons/favicon.png new file mode 100644 index 0000000..1abaa4f Binary files /dev/null and b/core/homepage/static/icons/favicon.png differ diff --git a/core/homepage/templates/homepage/base.html b/core/homepage/templates/homepage/base.html index 4dc5151..a51baaa 100644 --- a/core/homepage/templates/homepage/base.html +++ b/core/homepage/templates/homepage/base.html @@ -2,6 +2,7 @@ + diff --git a/core/homepage/templates/homepage/impress.html b/core/homepage/templates/homepage/impress.html new file mode 100644 index 0000000..6331821 --- /dev/null +++ b/core/homepage/templates/homepage/impress.html @@ -0,0 +1,34 @@ +{% load static %} + + + + + + Impressum + + + + + {% include 'homepage/partials/_nav.html' %} +
+ {% block content%}{% endblock %} +
+
+
+

Impressum

+
+
+ +

+ Katharineum zu Lübeck +

+

+ Königsstraße 27-31 +

+

+ 23552 Lübeck +

+
+ {% include 'homepage/partials/_footer.html' %} + + \ No newline at end of file diff --git a/core/homepage/templates/homepage/partials/_footer.html b/core/homepage/templates/homepage/partials/_footer.html index 6fa3a61..a448ec7 100644 --- a/core/homepage/templates/homepage/partials/_footer.html +++ b/core/homepage/templates/homepage/partials/_footer.html @@ -1,7 +1,7 @@ \ No newline at end of file diff --git a/core/homepage/templates/homepage/privacy.html b/core/homepage/templates/homepage/privacy.html new file mode 100644 index 0000000..3659d69 --- /dev/null +++ b/core/homepage/templates/homepage/privacy.html @@ -0,0 +1,23 @@ +{% load static %} + + + + + + Impressum + + + + + {% include 'homepage/partials/_nav.html' %} +
+ {% block content%}{% endblock %} +
+

+ Hallo, ich bin die Datenschutzerklärung! +

+
+
+ {% include 'homepage/partials/_footer.html' %} + + \ No newline at end of file diff --git a/core/homepage/urls.py b/core/homepage/urls.py index 0d53b21..394c0b9 100644 --- a/core/homepage/urls.py +++ b/core/homepage/urls.py @@ -5,4 +5,6 @@ app_name = 'homepage' # Verhindert Konflikt mit anderen Apps urlpatterns = [ path('', views.home, name="home"), + path('impress', views.impress, name="impress"), + path('privacy', views.privacy, name="privacy"), ] \ No newline at end of file diff --git a/core/homepage/views.py b/core/homepage/views.py index 290bfb8..b9d452e 100644 --- a/core/homepage/views.py +++ b/core/homepage/views.py @@ -1,4 +1,9 @@ from django.shortcuts import render, redirect def home(request): - return render(request, 'homepage/home.html') \ No newline at end of file + return render(request, 'homepage/home.html') + +def impress(request): + return render(request, 'homepage/impress.html') +def privacy(request): + return render(request, 'homepage/privacy.html') \ No newline at end of file diff --git a/core/library/forms.py b/core/library/forms.py index 7a239ec..dc78d02 100644 --- a/core/library/forms.py +++ b/core/library/forms.py @@ -4,7 +4,7 @@ from .models import QivipQuiz, QivipQuestion class QuizForm(forms.ModelForm): class Meta: model = QivipQuiz - fields = ['name', 'description', 'status', 'category', 'tags'] + fields = ['name', 'description', 'status', 'category', 'tags',"difficulty"] class QuestionForm(forms.ModelForm): class Meta: diff --git a/core/library/migrations/0002_alter_qivipquiz_status.py b/core/library/migrations/0002_alter_qivipquiz_status.py new file mode 100644 index 0000000..16c68b9 --- /dev/null +++ b/core/library/migrations/0002_alter_qivipquiz_status.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.3 on 2025-03-08 13:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('library', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='qivipquiz', + name='status', + field=models.CharField(choices=[('public', 'Öffentlich'), ('hidden', 'Versteckt'), ('private', 'Privat')], default='private', max_length=10), + ), + ] diff --git a/core/library/migrations/0003_alter_qivipquiz_status.py b/core/library/migrations/0003_alter_qivipquiz_status.py new file mode 100644 index 0000000..a9d4258 --- /dev/null +++ b/core/library/migrations/0003_alter_qivipquiz_status.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.3 on 2025-03-08 13:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('library', '0002_alter_qivipquiz_status'), + ] + + operations = [ + migrations.AlterField( + model_name='qivipquiz', + name='status', + field=models.CharField(choices=[('public', 'Öffentlich'), ('hidden', 'Versteckt'), ('private', 'Privat')], default='Privat', max_length=10), + ), + ] diff --git a/core/library/migrations/0004_alter_qivipquiz_status.py b/core/library/migrations/0004_alter_qivipquiz_status.py new file mode 100644 index 0000000..0657e69 --- /dev/null +++ b/core/library/migrations/0004_alter_qivipquiz_status.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.3 on 2025-03-08 13:18 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('library', '0003_alter_qivipquiz_status'), + ] + + operations = [ + migrations.AlterField( + model_name='qivipquiz', + name='status', + field=models.CharField(choices=[('public', 'Öffentlich'), ('hidden', 'Versteckt'), ('private', 'Privat')], default='private', max_length=10), + ), + ] diff --git a/core/library/migrations/0005_alter_qivipquiz_status.py b/core/library/migrations/0005_alter_qivipquiz_status.py new file mode 100644 index 0000000..eeacb47 --- /dev/null +++ b/core/library/migrations/0005_alter_qivipquiz_status.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.3 on 2025-03-08 13:23 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('library', '0004_alter_qivipquiz_status'), + ] + + operations = [ + migrations.AlterField( + model_name='qivipquiz', + name='status', + field=models.CharField(choices=[('public', 'Öffentlich'), ('hidden', 'Versteckt'), ('private', 'Privat')], default='public', max_length=10), + ), + ] diff --git a/core/library/migrations/0006_alter_qivipquiz_description.py b/core/library/migrations/0006_alter_qivipquiz_description.py new file mode 100644 index 0000000..6878dec --- /dev/null +++ b/core/library/migrations/0006_alter_qivipquiz_description.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.3 on 2025-03-08 13:30 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('library', '0005_alter_qivipquiz_status'), + ] + + operations = [ + migrations.AlterField( + model_name='qivipquiz', + name='description', + field=models.TextField(blank=True, default='In dem Quiz geht es um ...', null=True), + ), + ] diff --git a/core/library/migrations/0007_alter_qivipquiz_description.py b/core/library/migrations/0007_alter_qivipquiz_description.py new file mode 100644 index 0000000..4cd5eb8 --- /dev/null +++ b/core/library/migrations/0007_alter_qivipquiz_description.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.3 on 2025-03-08 13:31 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('library', '0006_alter_qivipquiz_description'), + ] + + operations = [ + migrations.AlterField( + model_name='qivipquiz', + name='description', + field=models.TextField(blank=True, default='Das Quiz ist ein ... Quiz. In dem Quiz geht es um ...', null=True), + ), + ] diff --git a/core/library/migrations/0008_alter_qivipquiz_description.py b/core/library/migrations/0008_alter_qivipquiz_description.py new file mode 100644 index 0000000..cb07882 --- /dev/null +++ b/core/library/migrations/0008_alter_qivipquiz_description.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.3 on 2025-03-08 13:32 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('library', '0007_alter_qivipquiz_description'), + ] + + operations = [ + migrations.AlterField( + model_name='qivipquiz', + name='description', + field=models.TextField(blank=True, default='Das Quiz ist ein ... Quiz. \n In dem Quiz geht es um ...', null=True), + ), + ] diff --git a/core/library/migrations/0009_alter_qivipquiz_description.py b/core/library/migrations/0009_alter_qivipquiz_description.py new file mode 100644 index 0000000..5039d71 --- /dev/null +++ b/core/library/migrations/0009_alter_qivipquiz_description.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.3 on 2025-03-08 13:32 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('library', '0008_alter_qivipquiz_description'), + ] + + operations = [ + migrations.AlterField( + model_name='qivipquiz', + name='description', + field=models.TextField(blank=True, default='Das Quiz ist ein ... Quiz. \nIn dem Quiz geht es um ...', null=True), + ), + ] diff --git a/core/library/migrations/0010_alter_qivipquiz_description.py b/core/library/migrations/0010_alter_qivipquiz_description.py new file mode 100644 index 0000000..d1ff79a --- /dev/null +++ b/core/library/migrations/0010_alter_qivipquiz_description.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.3 on 2025-03-08 13:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('library', '0009_alter_qivipquiz_description'), + ] + + operations = [ + migrations.AlterField( + model_name='qivipquiz', + name='description', + field=models.TextField(blank=True, default='In dem Quiz geht es um ...', null=True), + ), + ] diff --git a/core/library/migrations/0011_qivipquiz_difficulty.py b/core/library/migrations/0011_qivipquiz_difficulty.py new file mode 100644 index 0000000..688e2ed --- /dev/null +++ b/core/library/migrations/0011_qivipquiz_difficulty.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.3 on 2025-03-08 13:37 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('library', '0010_alter_qivipquiz_description'), + ] + + operations = [ + migrations.AddField( + model_name='qivipquiz', + name='difficulty', + field=models.CharField(choices=[('public', 'Öffentlich'), ('hidden', 'Versteckt'), ('private', 'Privat')], default='public', max_length=10), + ), + ] diff --git a/core/library/migrations/0012_alter_qivipquiz_difficulty.py b/core/library/migrations/0012_alter_qivipquiz_difficulty.py new file mode 100644 index 0000000..525ae9c --- /dev/null +++ b/core/library/migrations/0012_alter_qivipquiz_difficulty.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.3 on 2025-03-08 13:39 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('library', '0011_qivipquiz_difficulty'), + ] + + operations = [ + migrations.AlterField( + model_name='qivipquiz', + name='difficulty', + field=models.CharField(choices=[('public', 'Öffentlich'), ('hidden', 'Versteckt'), ('private', 'Privat')], default='not defined', max_length=10), + ), + ] diff --git a/core/library/migrations/0013_alter_qivipquiz_difficulty.py b/core/library/migrations/0013_alter_qivipquiz_difficulty.py new file mode 100644 index 0000000..8da2c6c --- /dev/null +++ b/core/library/migrations/0013_alter_qivipquiz_difficulty.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.3 on 2025-03-08 13:40 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('library', '0012_alter_qivipquiz_difficulty'), + ] + + operations = [ + migrations.AlterField( + model_name='qivipquiz', + name='difficulty', + field=models.CharField(choices=[('1', '1'), ('2', '2'), ('3', '3'), ('4', '4'), ('5', '5'), ('not defined', 'nicht gesetzt')], default='not defined', max_length=11), + ), + ] diff --git a/core/library/migrations/0014_alter_qivipquiz_difficulty.py b/core/library/migrations/0014_alter_qivipquiz_difficulty.py new file mode 100644 index 0000000..0570a39 --- /dev/null +++ b/core/library/migrations/0014_alter_qivipquiz_difficulty.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.3 on 2025-03-08 13:43 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('library', '0013_alter_qivipquiz_difficulty'), + ] + + operations = [ + migrations.AlterField( + model_name='qivipquiz', + name='difficulty', + field=models.CharField(choices=[('1', '1'), ('2', '2'), ('3', '3'), ('4', '4'), ('5', '5'), ('not defined', 'nicht gesetzt')], default='not defined', help_text='1: niedrigste Schwierigkeit, 2: höchste Schwierigkeit', max_length=11), + ), + ] diff --git a/core/library/migrations/0015_alter_qivipquiz_difficulty.py b/core/library/migrations/0015_alter_qivipquiz_difficulty.py new file mode 100644 index 0000000..398f202 --- /dev/null +++ b/core/library/migrations/0015_alter_qivipquiz_difficulty.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.3 on 2025-03-08 13:44 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('library', '0014_alter_qivipquiz_difficulty'), + ] + + operations = [ + migrations.AlterField( + model_name='qivipquiz', + name='difficulty', + field=models.CharField(choices=[('1', '1'), ('2', '2'), ('3', '3'), ('4', '4'), ('5', '5'), ('not defined', 'nicht gesetzt')], default='not defined', help_text='1: niedrigste Schwierigkeit und 5: höchste Schwierigkeit', max_length=11), + ), + ] diff --git a/core/library/models.py b/core/library/models.py index 837210b..3d76970 100644 --- a/core/library/models.py +++ b/core/library/models.py @@ -9,16 +9,26 @@ class QivipQuiz(models.Model): "hidden": "Versteckt", "private": "Privat", } + DIFFICULTY_VALUES = { + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "not defined":"nicht gesetzt", + + } uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True) user_id = models.ForeignKey(User, on_delete=models.CASCADE, related_name='quiz') creation_date = models.DateTimeField(auto_now_add=True) update_date = models.DateTimeField(auto_now=True) - status = models.CharField(max_length=10, choices=STATUS_VALUES.items()) + status = models.CharField(max_length=10, choices=list(STATUS_VALUES.items()), default="public") category = models.ForeignKey('QuizCategory', related_name='quiz', on_delete=models.CASCADE) tags = models.ManyToManyField('Tag', blank=True) name = models.CharField(max_length=255) - description = models.TextField(blank=True, null=True) + description = models.TextField(blank=True, null=True, default="In dem Quiz geht es um ...") + difficulty= models.CharField(max_length=11, choices=list(DIFFICULTY_VALUES.items()), default="not defined", help_text="1: niedrigste Schwierigkeit und 5: höchste Schwierigkeit") def __str__(self): return self.name diff --git a/core/library/templates/library/overview_quiz.html b/core/library/templates/library/overview_quiz.html index 47685a2..e8a66ba 100644 --- a/core/library/templates/library/overview_quiz.html +++ b/core/library/templates/library/overview_quiz.html @@ -9,10 +9,10 @@ {% for quiz in quizzes %}

{{ quiz.name }}

-

{{ quiz.description }}

- Spiel starten - Bearbeiten - Löschen +

{{ quiz.description }}

+ Spiel starten + + Löschen
{% endfor %}