From eb87c89ae6f47e6f9e60b00cea29b9d41bdbbebb Mon Sep 17 00:00:00 2001 From: Daniel Grams Date: Fri, 17 Mar 2023 23:26:04 +0100 Subject: [PATCH 1/4] White label #382 --- Dockerfile | 1 + deployment/docker-compose/.env.example | 5 +- deployment/docker-compose/docker-compose.yml | 1 + .../docker-compose/nginx.config.example | 87 +- messages.pot | 140 +-- migrations/versions/3f77c8693ae3_.py | 43 + project/__init__.py | 2 + project/forms/admin.py | 1 + project/maputils.py | 4 +- project/models.py | 10 +- project/static/klaro-config.js | 66 -- project/static/klaro.css | 1037 ----------------- project/static/landing-page.css | 86 +- project/templates/admin/settings.html | 1 + project/templates/home.html | 47 +- project/templates/layout.html | 36 +- project/templates/layout_widget.html | 6 - .../translations/de/LC_MESSAGES/messages.mo | Bin 34975 -> 35013 bytes .../translations/de/LC_MESSAGES/messages.po | 141 +-- .../translations/en/LC_MESSAGES/messages.mo | Bin 3565 -> 3565 bytes .../translations/en/LC_MESSAGES/messages.po | 140 +-- project/views/event_date.py | 13 +- project/views/root.py | 12 +- project/views/utils.py | 16 +- 24 files changed, 387 insertions(+), 1508 deletions(-) create mode 100644 migrations/versions/3f77c8693ae3_.py delete mode 100644 project/static/klaro-config.js delete mode 100644 project/static/klaro.css diff --git a/Dockerfile b/Dockerfile index 8849bff..9b0b13b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,6 +22,7 @@ ENV SECURITY_PASSWORD_HASH="" ENV SERVER_NAME="" ENV STATIC_FILES_MIRROR="" ENV REDIS_URL="" +ENV DOCS_URL="" # Install pip requirements COPY requirements.txt . diff --git a/deployment/docker-compose/.env.example b/deployment/docker-compose/.env.example index 932af89..ff70286 100644 --- a/deployment/docker-compose/.env.example +++ b/deployment/docker-compose/.env.example @@ -23,7 +23,8 @@ MAIL_USERNAME= MAIL_PASSWORD= MAIL_DEFAULT_SENDER= MAIL_USE_TLS=True -GOOGLE_MAPS_API_KEY=AIzaDummy +GOOGLE_MAPS_API_KEY= SEO_SITEMAP_PING_GOOGLE=False JWT_PRIVATE_KEY="" -JWT_PUBLIC_JWKS='' \ No newline at end of file +JWT_PUBLIC_JWKS='' +DOCS_URL='' \ No newline at end of file diff --git a/deployment/docker-compose/docker-compose.yml b/deployment/docker-compose/docker-compose.yml index fb991ed..6bbf774 100644 --- a/deployment/docker-compose/docker-compose.yml +++ b/deployment/docker-compose/docker-compose.yml @@ -23,6 +23,7 @@ x-web-env: CACHE_PATH: tmp JWT_PRIVATE_KEY: ${JWT_PRIVATE_KEY} JWT_PUBLIC_JWKS: ${JWT_PUBLIC_JWKS} + DOCS_URL: ${DOCS_URL} x-web: &default-web diff --git a/deployment/docker-compose/nginx.config.example b/deployment/docker-compose/nginx.config.example index 26ba50f..a060bf7 100644 --- a/deployment/docker-compose/nginx.config.example +++ b/deployment/docker-compose/nginx.config.example @@ -1,42 +1,55 @@ -location ^~ /image/ { - root "/var/www/vhosts/gsevpt.de/cache/img"; - expires 1h; +events {} +http { + server { + listen 80 default_server; + listen [::]:80 default_server; + root /var/www/vhosts/gsevpt.de; + server_name _; - location ~ ^/image/(?[0-9]+)/(?[0-9]+) { - if ($arg_s = '') { - rewrite (.*) $1?s=500 last; - } - try_files /${id}-${hash}-${arg_s}-${arg_s}.png /${id}-${hash}-${arg_s}-${arg_s}.jpg @docker; - } + location ^~ /image/ { + root "/var/www/vhosts/gsevpt.de/cache/img"; + expires 1h; - location ~ ^/image/(?[0-9]+) { - if ($arg_s = '') { - rewrite (.*) $1?s=500 last; + location ~ ^/image/(?[0-9]+)/(?[0-9]+) { + if ($arg_s = '') { + rewrite (.*) $1?s=500 last; + } + try_files /${id}-${hash}-${arg_s}-${arg_s}.png /${id}-${hash}-${arg_s}-${arg_s}.jpg @docker; + } + + location ~ ^/image/(?[0-9]+) { + if ($arg_s = '') { + rewrite (.*) $1?s=500 last; + } + try_files /${id}-${arg_s}-${arg_s}.png /${id}-${arg_s}-${arg_s}.jpg @docker; + } + } + location ^~ /static/ { + root "/var/www/vhosts/gsevpt.de/"; + + location ~ ^/static/(.*)$ { + try_files /static-custom/$1 /static/$1 @docker; + } + } + location ^~ /dump/ { + alias "/var/www/vhosts/gsevpt.de/cache/dump/"; + } + location ^~ /sitemap.xml { + alias "/var/www/vhosts/gsevpt.de/cache/sitemap.xml"; + } + location ^~ /robots.txt { + alias "/var/www/vhosts/gsevpt.de/cache/robots.txt"; + } + location ^~ /favicon.ico { + alias "/var/www/vhosts/gsevpt.de/static/favicon.ico"; + expires 12h; + } + location @docker { + proxy_pass http://0.0.0.0:5000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; } - try_files /${id}-${arg_s}-${arg_s}.png /${id}-${arg_s}-${arg_s}.jpg @docker; } -} -location ^~ /static/ { - alias "/var/www/vhosts/gsevpt.de/static/"; - expires 1h; -} -location ^~ /dump/ { - alias "/var/www/vhosts/gsevpt.de/cache/dump/"; -} -location ^~ /sitemap.xml { - alias "/var/www/vhosts/gsevpt.de/cache/sitemap.xml"; -} -location ^~ /robots.txt { - alias "/var/www/vhosts/gsevpt.de/cache/robots.txt"; -} -location ^~ /favicon.ico { - alias "/var/www/vhosts/gsevpt.de/static/favicon.ico"; - expires 12h; -} -location @docker { - proxy_pass http://0.0.0.0:5000; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; } \ No newline at end of file diff --git a/messages.pot b/messages.pot index daed23f..982956a 100644 --- a/messages.pot +++ b/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2023-03-15 19:10+0100\n" +"POT-Creation-Date: 2023-03-16 19:11+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -198,85 +198,89 @@ msgstr "" msgid "You have received an invitation" msgstr "" -#: project/forms/admin.py:10 project/templates/layout.html:317 -#: project/views/root.py:55 +#: project/forms/admin.py:10 project/templates/layout.html:294 +#: project/views/root.py:57 msgid "Terms of service" msgstr "" -#: project/forms/admin.py:11 project/templates/layout.html:321 -#: project/views/root.py:63 +#: project/forms/admin.py:11 project/templates/layout.html:298 +#: project/views/root.py:65 msgid "Legal notice" msgstr "" #: project/forms/admin.py:12 project/templates/_macros.html:1395 -#: project/templates/layout.html:325 +#: project/templates/layout.html:302 #: project/templates/widget/event_suggestion/create.html:204 -#: project/views/admin_unit.py:73 project/views/root.py:71 +#: project/views/admin_unit.py:73 project/views/root.py:73 msgid "Contact" msgstr "" -#: project/forms/admin.py:13 project/templates/layout.html:329 -#: project/views/root.py:79 +#: project/forms/admin.py:13 project/templates/layout.html:306 +#: project/views/root.py:81 msgid "Privacy" msgstr "" -#: project/forms/admin.py:15 project/forms/oauth2_client.py:24 +#: project/forms/admin.py:14 +msgid "Start page" +msgstr "" + +#: project/forms/admin.py:16 project/forms/oauth2_client.py:24 msgid "Save" msgstr "" -#: project/forms/admin.py:19 project/forms/admin_unit_member.py:12 +#: project/forms/admin.py:20 project/forms/admin_unit_member.py:12 #: project/forms/admin_unit_member.py:32 msgid "Roles" msgstr "" -#: project/forms/admin.py:20 project/templates/admin/update_user.html:4 +#: project/forms/admin.py:21 project/templates/admin/update_user.html:4 #: project/templates/admin/update_user.html:8 msgid "Update user" msgstr "" -#: project/forms/admin.py:25 +#: project/forms/admin.py:26 msgid "Incoming reference requests allowed" msgstr "" -#: project/forms/admin.py:26 +#: project/forms/admin.py:27 msgid "" "If set, other organizations can ask this organization to reference their " "event." msgstr "" -#: project/forms/admin.py:32 +#: project/forms/admin.py:33 msgid "Suggestions enabled" msgstr "" -#: project/forms/admin.py:33 +#: project/forms/admin.py:34 msgid "If set, the organization can work with suggestions." msgstr "" -#: project/forms/admin.py:37 +#: project/forms/admin.py:38 msgid "Create other organizations" msgstr "" -#: project/forms/admin.py:38 +#: project/forms/admin.py:39 msgid "If set, members of the organization can create other organizations." msgstr "" -#: project/forms/admin.py:44 +#: project/forms/admin.py:45 msgid "Invite other organizations" msgstr "" -#: project/forms/admin.py:45 +#: project/forms/admin.py:46 msgid "If set, members of the organization can invite other organizations." msgstr "" -#: project/forms/admin.py:51 +#: project/forms/admin.py:52 msgid "Verify other organizations" msgstr "" -#: project/forms/admin.py:52 +#: project/forms/admin.py:53 msgid "If set, members of the organization can verify other organizations." msgstr "" -#: project/forms/admin.py:57 project/templates/admin/update_admin_unit.html:4 +#: project/forms/admin.py:58 project/templates/admin/update_admin_unit.html:4 #: project/templates/admin/update_admin_unit.html:8 msgid "Update organization" msgstr "" @@ -647,7 +651,7 @@ msgid "If the participants needs to register for the event." msgstr "" #: project/forms/event.py:170 project/templates/_macros.html:249 -#: project/templates/layout.html:128 +#: project/templates/layout.html:110 msgid "Booked up" msgstr "" @@ -703,11 +707,11 @@ msgstr "" msgid "EventAttendanceMode.offline" msgstr "" -#: project/forms/event.py:217 project/templates/layout.html:116 +#: project/forms/event.py:217 project/templates/layout.html:98 msgid "EventAttendanceMode.online" msgstr "" -#: project/forms/event.py:219 project/templates/layout.html:119 +#: project/forms/event.py:219 project/templates/layout.html:101 msgid "EventAttendanceMode.mixed" msgstr "" @@ -846,23 +850,23 @@ msgstr "" msgid "EventStatus.scheduled" msgstr "" -#: project/forms/event.py:389 project/templates/layout.html:82 -#: project/templates/layout.html:97 +#: project/forms/event.py:389 project/templates/layout.html:64 +#: project/templates/layout.html:79 msgid "EventStatus.cancelled" msgstr "" -#: project/forms/event.py:390 project/templates/layout.html:85 -#: project/templates/layout.html:100 +#: project/forms/event.py:390 project/templates/layout.html:67 +#: project/templates/layout.html:82 msgid "EventStatus.movedOnline" msgstr "" -#: project/forms/event.py:391 project/templates/layout.html:88 -#: project/templates/layout.html:103 +#: project/forms/event.py:391 project/templates/layout.html:70 +#: project/templates/layout.html:85 msgid "EventStatus.postponed" msgstr "" -#: project/forms/event.py:392 project/templates/layout.html:91 -#: project/templates/layout.html:106 +#: project/forms/event.py:392 project/templates/layout.html:73 +#: project/templates/layout.html:88 msgid "EventStatus.rescheduled" msgstr "" @@ -1067,7 +1071,7 @@ msgstr "" #: project/templates/_macros.html:489 project/templates/_macros.html:652 #: project/templates/admin_unit/create.html:28 #: project/templates/admin_unit/update.html:29 -#: project/templates/layout.html:265 +#: project/templates/layout.html:242 msgid "Organization" msgstr "" @@ -1225,7 +1229,7 @@ msgstr "" msgid "The event takes place both offline and online." msgstr "" -#: project/templates/_macros.html:585 project/templates/layout.html:191 +#: project/templates/_macros.html:585 project/templates/layout.html:168 #: project/templates/user/favorite_events.html:4 msgid "Favorite events" msgstr "" @@ -1370,7 +1374,7 @@ msgstr "" msgid "Register for free" msgstr "" -#: project/templates/layout.html:175 project/templates/layout.html:223 +#: project/templates/layout.html:152 project/templates/layout.html:200 #: project/templates/manage/events.html:6 #: project/templates/manage/events.html:42 #: project/templates/manage/events_vue.html:4 @@ -1380,22 +1384,22 @@ msgstr "" #: project/templates/admin/admin.html:19 #: project/templates/admin/admin_units.html:4 #: project/templates/admin/admin_units.html:11 -#: project/templates/layout.html:176 project/templates/layout.html:189 +#: project/templates/layout.html:153 project/templates/layout.html:166 #: project/templates/manage/admin_units.html:3 #: project/templates/manage/admin_units.html:25 #: project/templates/organization/main.html:4 msgid "Organizations" msgstr "" -#: project/templates/layout.html:177 +#: project/templates/layout.html:154 msgid "Planing" msgstr "" -#: project/templates/layout.html:181 +#: project/templates/layout.html:158 msgid "Docs" msgstr "" -#: project/templates/layout.html:190 project/templates/layout.html:279 +#: project/templates/layout.html:167 project/templates/layout.html:256 #: project/templates/oauth2_client/list.html:10 #: project/templates/oauth2_client/read.html:10 #: project/templates/oauth2_token/list.html:10 project/templates/profile.html:4 @@ -1405,86 +1409,86 @@ msgstr "" #: project/templates/admin/admin.html:3 project/templates/admin/admin.html:9 #: project/templates/admin/admin_units.html:10 -#: project/templates/admin/users.html:10 project/templates/layout.html:194 +#: project/templates/admin/users.html:10 project/templates/layout.html:171 msgid "Admin" msgstr "" -#: project/templates/layout.html:198 +#: project/templates/layout.html:175 msgid "Logout" msgstr "" -#: project/templates/layout.html:229 +#: project/templates/layout.html:206 msgid "Show events" msgstr "" #: project/templates/event/create.html:5 -#: project/templates/event/create.html:221 project/templates/layout.html:230 +#: project/templates/event/create.html:221 project/templates/layout.html:207 #: project/templates/manage/events.html:45 #: project/templates/manage/organizers.html:21 msgid "Create event" msgstr "" -#: project/templates/layout.html:231 +#: project/templates/layout.html:208 msgid "Import event" msgstr "" -#: project/templates/layout.html:233 +#: project/templates/layout.html:210 #: project/templates/manage/event_lists.html:4 msgid "Event lists" msgstr "" -#: project/templates/layout.html:236 +#: project/templates/layout.html:213 msgid "Review suggestions" msgstr "" -#: project/templates/layout.html:246 +#: project/templates/layout.html:223 #: project/templates/manage/references_incoming.html:5 #: project/templates/manage/references_outgoing.html:5 msgid "References" msgstr "" -#: project/templates/layout.html:252 +#: project/templates/layout.html:229 #: project/templates/manage/references_incoming.html:9 msgid "Incoming references" msgstr "" -#: project/templates/layout.html:253 +#: project/templates/layout.html:230 #: project/templates/manage/references_outgoing.html:9 msgid "Outgoing references" msgstr "" -#: project/templates/layout.html:255 +#: project/templates/layout.html:232 #: project/templates/manage/reference_requests_incoming.html:9 msgid "Incoming reference requests" msgstr "" -#: project/templates/layout.html:260 +#: project/templates/layout.html:237 #: project/templates/manage/reference_requests_outgoing.html:9 msgid "Outgoing reference requests" msgstr "" -#: project/templates/layout.html:268 project/templates/manage/organizers.html:5 +#: project/templates/layout.html:245 project/templates/manage/organizers.html:5 #: project/templates/manage/organizers.html:9 msgid "Organizers" msgstr "" #: project/templates/event_place/list.html:3 -#: project/templates/event_place/list.html:7 project/templates/layout.html:269 +#: project/templates/event_place/list.html:7 project/templates/layout.html:246 #: project/templates/manage/places.html:5 #: project/templates/manage/places.html:9 msgid "Places" msgstr "" -#: project/templates/layout.html:271 project/templates/manage/members.html:5 +#: project/templates/layout.html:248 project/templates/manage/members.html:5 #: project/templates/manage/members.html:28 msgid "Members" msgstr "" -#: project/templates/layout.html:272 project/templates/manage/relations.html:4 +#: project/templates/layout.html:249 project/templates/manage/relations.html:4 msgid "Relations" msgstr "" -#: project/templates/layout.html:274 +#: project/templates/layout.html:251 #: project/templates/manage/admin_units.html:17 #: project/templates/manage/organization_invitations.html:4 #: project/templates/user/organization_invitations.html:4 @@ -1496,27 +1500,27 @@ msgstr "" #: project/templates/admin/settings.html:8 #: project/templates/admin_unit/update.html:6 #: project/templates/admin_unit/update.html:23 -#: project/templates/layout.html:276 project/templates/manage/widgets.html:11 +#: project/templates/layout.html:253 project/templates/manage/widgets.html:11 #: project/templates/manage/widgets.html:15 project/templates/profile.html:19 msgid "Settings" msgstr "" -#: project/templates/layout.html:277 +#: project/templates/layout.html:254 #: project/templates/manage/custom_widgets.html:13 msgid "Custom widgets" msgstr "" -#: project/templates/layout.html:278 project/templates/manage/reviews.html:10 +#: project/templates/layout.html:255 project/templates/manage/reviews.html:10 #: project/templates/manage/widgets.html:5 #: project/templates/manage/widgets.html:9 msgid "Widgets" msgstr "" -#: project/templates/layout.html:289 +#: project/templates/layout.html:266 msgid "Switch organization" msgstr "" -#: project/templates/developer/read.html:4 project/templates/layout.html:339 +#: project/templates/developer/read.html:4 project/templates/layout.html:310 #: project/templates/profile.html:29 msgid "Developer" msgstr "" @@ -2213,26 +2217,26 @@ msgid "" "verified automatically." msgstr "" -#: project/views/utils.py:77 +#: project/views/utils.py:65 msgid "" "An entry with the entered values ​​already exists. Duplicate entries are " "not allowed." msgstr "" -#: project/views/utils.py:128 +#: project/views/utils.py:116 #, python-format msgid "Error in the %s field - %s" msgstr "" -#: project/views/utils.py:135 +#: project/views/utils.py:123 msgid "Show" msgstr "" -#: project/views/utils.py:143 +#: project/views/utils.py:131 msgid "You do not have permission for this action" msgstr "" -#: project/views/utils.py:258 +#: project/views/utils.py:246 msgid "" "The invitation was issued to another user. Sign in with the email address" " the invitation was sent to." diff --git a/migrations/versions/3f77c8693ae3_.py b/migrations/versions/3f77c8693ae3_.py new file mode 100644 index 0000000..03e3ffe --- /dev/null +++ b/migrations/versions/3f77c8693ae3_.py @@ -0,0 +1,43 @@ +"""empty message + +Revision ID: 3f77c8693ae3 +Revises: ec7a6b157860 +Create Date: 2023-03-16 19:08:17.051573 + +""" +import sqlalchemy as sa +import sqlalchemy_utils +from alembic import op +from sqlalchemy.dialects import postgresql + +from project import dbtypes + +# revision identifiers, used by Alembic. +revision = "3f77c8693ae3" +down_revision = "ec7a6b157860" +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table("analytics") + op.add_column("settings", sa.Column("start_page", sa.UnicodeText(), nullable=True)) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column("settings", "start_page") + op.create_table( + "analytics", + sa.Column("id", sa.INTEGER(), autoincrement=True, nullable=False), + sa.Column("key", sa.VARCHAR(length=255), autoincrement=False, nullable=True), + sa.Column("value1", sa.VARCHAR(length=255), autoincrement=False, nullable=True), + sa.Column("value2", sa.VARCHAR(length=255), autoincrement=False, nullable=True), + sa.Column( + "created_at", postgresql.TIMESTAMP(), autoincrement=False, nullable=True + ), + sa.PrimaryKeyConstraint("id", name="analytics_pkey"), + ) + # ### end Alembic commands ### diff --git a/project/__init__.py b/project/__init__.py index ee86c22..862319b 100644 --- a/project/__init__.py +++ b/project/__init__.py @@ -36,10 +36,12 @@ app.config["SECURITY_EMAIL_SENDER"] = os.getenv("MAIL_DEFAULT_SENDER") app.config["LANGUAGES"] = ["en", "de"] app.config["SITE_NAME"] = os.getenv("SITE_NAME", "gsevpt") app.config["SERVER_NAME"] = os.getenv("SERVER_NAME") +app.config["DOCS_URL"] = os.getenv("DOCS_URL") app.config["ADMIN_UNIT_CREATE_REQUIRES_ADMIN"] = os.getenv( "ADMIN_UNIT_CREATE_REQUIRES_ADMIN", False ) app.config["SEO_SITEMAP_PING_GOOGLE"] = getenv_bool("SEO_SITEMAP_PING_GOOGLE", "False") +app.config["GOOGLE_MAPS_API_KEY"] = os.getenv("GOOGLE_MAPS_API_KEY") # Proxy handling if os.getenv("PREFERRED_URL_SCHEME"): # pragma: no cover diff --git a/project/forms/admin.py b/project/forms/admin.py index 8842681..4898be8 100644 --- a/project/forms/admin.py +++ b/project/forms/admin.py @@ -11,6 +11,7 @@ class AdminSettingsForm(FlaskForm): legal_notice = TextAreaField(lazy_gettext("Legal notice"), validators=[Optional()]) contact = TextAreaField(lazy_gettext("Contact"), validators=[Optional()]) privacy = TextAreaField(lazy_gettext("Privacy"), validators=[Optional()]) + start_page = TextAreaField(lazy_gettext("Start page"), validators=[Optional()]) submit = SubmitField(lazy_gettext("Save")) diff --git a/project/maputils.py b/project/maputils.py index e39e98d..132ceed 100644 --- a/project/maputils.py +++ b/project/maputils.py @@ -1,10 +1,8 @@ -import os - import googlemaps from project import app -google_maps_api_key = os.getenv("GOOGLE_MAPS_API_KEY") +google_maps_api_key = app.config["GOOGLE_MAPS_API_KEY"] gmaps = googlemaps.Client(key=google_maps_api_key) if google_maps_api_key else None diff --git a/project/models.py b/project/models.py index de6149b..c361b2e 100644 --- a/project/models.py +++ b/project/models.py @@ -134,6 +134,7 @@ class Settings(db.Model, TrackableMixin): legal_notice = Column(UnicodeText()) contact = Column(UnicodeText()) privacy = Column(UnicodeText()) + start_page = Column(UnicodeText()) # Multi purpose @@ -1173,15 +1174,6 @@ class UserFavoriteEvents(db.Model): event_id = db.Column(db.Integer, db.ForeignKey("event.id"), nullable=False) -class Analytics(db.Model): - __tablename__ = "analytics" - id = Column(Integer(), primary_key=True) - key = Column(Unicode(255)) - value1 = Column(Unicode(255)) - value2 = Column(Unicode(255)) - created_at = Column(DateTime, default=datetime.datetime.utcnow) - - class CustomWidget(db.Model, TrackableMixin): __tablename__ = "customwidget" id = Column(Integer(), primary_key=True) diff --git a/project/static/klaro-config.js b/project/static/klaro-config.js deleted file mode 100644 index 2e51b09..0000000 --- a/project/static/klaro-config.js +++ /dev/null @@ -1,66 +0,0 @@ -var klaroConfig = { - version: 1, - styling: { - theme: ['top', 'wide'], - }, - noticeAsModal: true, - acceptAll: true, - hideDeclineAll: true, - services: [ - { - name: 'google-tag-manager', - title: 'Google Tag Manager', - purposes: ['analytics'], - }, - { - name: 'google-analytics', - title: 'Google Analytics', - purposes: ['analytics'], - cookies: [ - /^_ga(_.*)?/ - ], - callback: function(consent, app) { - if(consent !== false) { - window.dataLayer.push({'event' : 'consent-google-analytics'}); - } - }, - required: false, - optOut: false, - onlyOnce: true, - }, - { - name: 'hotjar', - title: 'Hotjar', - purposes: ['analytics'], - cookies: [ - /^_hj.*/ - ], - callback: function(consent, app) { - if(consent !== false) { - window.dataLayer.push({'event' : 'consent-hotjar'}); - } - }, - required: false, - optOut: false, - onlyOnce: true, - }, - ], - translations: { - de: { - privacyPolicyUrl: '/privacy', - consentNotice: { - description: 'Hallo! Könnten wir bitte einige zusätzliche Dienste für die Verbesserung der Benutzererfahrung aktivieren? Sie können Ihre Zustimmung später jederzeit ändern oder zurückziehen.', - learnMore: 'Einstellen', - }, - purposes: { - analytics: 'Verbesserung der Benutzererfahrung', - }, - }, - en: { - privacyPolicyUrl: '/privacy', - purposes: { - analytics: 'Improvement of the user experience', - }, - }, - } - }; \ No newline at end of file diff --git a/project/static/klaro.css b/project/static/klaro.css deleted file mode 100644 index ccec3d8..0000000 --- a/project/static/klaro.css +++ /dev/null @@ -1,1037 +0,0 @@ -/* -We declare all variables here as default so that they are easy to override... -*/ -/* Border, shadows, ... */ -/* -Variables that begin with $var- should NEVER be used directly in CSS rules. -they should only be included via the "@include var(property, var-name)" -mechanism. -*/ -/* Border styles */ -/* Cookie notice positioning */ -/* Text colors */ -/* Font Families */ -/* White */ -/* Differently shaded colors */ -/* -Use @include var(property, varname) to include a variable, e.g. - - @include var(background-color, white1); - -to create a white background. -*/ -/* Spacing */ -/* Breakpoints */ -.klaro { - font-family: inherit; - font-family: var(--font-family, inherit); - font-size: 14px; - font-size: var(--font-size, 14px); -} - -.klaro button { - font-family: inherit; - font-family: var(--font-family, inherit); - font-size: 14px; - font-size: var(--font-size, 14px); -} - -.klaro.cm-as-context-notice { - height: 100%; - padding-bottom: 12px; - padding-top: 12px; -} - -.klaro .cookie-modal, -.klaro .context-notice, -.klaro .cookie-notice { - /* The switch - the box around the slider */ -} - -.klaro .cookie-modal .cm-switch-container, -.klaro .context-notice .cm-switch-container, -.klaro .cookie-notice .cm-switch-container { - border-bottom-style: solid; - border-bottom-style: var(--border-style, solid); - border-bottom-width: 1px; - border-bottom-width: var(--border-width, 1px); - border-bottom-color: #c8c8c8; - border-bottom-color: var(--light2, #c8c8c8); - display: block; - position: relative; - padding: 10px; - padding-left: 66px; - line-height: 20px; - vertical-align: middle; - min-height: 40px; -} - -.klaro .cookie-modal .cm-switch-container:last-child, -.klaro .context-notice .cm-switch-container:last-child, -.klaro .cookie-notice .cm-switch-container:last-child { - border-bottom: 0; -} - -.klaro .cookie-modal .cm-switch-container:first-child, -.klaro .context-notice .cm-switch-container:first-child, -.klaro .cookie-notice .cm-switch-container:first-child { - margin-top: 0; -} - -.klaro .cookie-modal .cm-switch-container p, -.klaro .context-notice .cm-switch-container p, -.klaro .cookie-notice .cm-switch-container p { - margin-top: 0; -} - -.klaro .cookie-modal .cm-switch, -.klaro .context-notice .cm-switch, -.klaro .cookie-notice .cm-switch { - position: relative; - display: inline-block; - width: 50px; - height: 30px; -} - -.klaro .cookie-modal .cm-list-input:checked + .cm-list-label .slider, -.klaro .context-notice .cm-list-input:checked + .cm-list-label .slider, -.klaro .cookie-notice .cm-list-input:checked + .cm-list-label .slider { - background-color: #007bff; - background-color: var(--green1, #007bff); -} - -.klaro - .cookie-modal - .cm-list-input.half-checked:checked - + .cm-list-label - .slider, -.klaro - .context-notice - .cm-list-input.half-checked:checked - + .cm-list-label - .slider, -.klaro - .cookie-notice - .cm-list-input.half-checked:checked - + .cm-list-label - .slider { - background-color: #007bff; - background-color: var(--green1, #007bff); - opacity: 0.6; -} - -.klaro - .cookie-modal - .cm-list-input.half-checked:checked - + .cm-list-label - .slider::before, -.klaro - .context-notice - .cm-list-input.half-checked:checked - + .cm-list-label - .slider::before, -.klaro - .cookie-notice - .cm-list-input.half-checked:checked - + .cm-list-label - .slider::before { - -ms-transform: translateX(10px); - transform: translateX(10px); -} - -.klaro .cookie-modal .cm-list-input.only-required + .cm-list-label .slider, -.klaro .context-notice .cm-list-input.only-required + .cm-list-label .slider, -.klaro .cookie-notice .cm-list-input.only-required + .cm-list-label .slider { - background-color: #24cc9a; - background-color: var(--green2, #24cc9a); - opacity: 0.8; -} - -.klaro - .cookie-modal - .cm-list-input.only-required - + .cm-list-label - .slider::before, -.klaro - .context-notice - .cm-list-input.only-required - + .cm-list-label - .slider::before, -.klaro - .cookie-notice - .cm-list-input.only-required - + .cm-list-label - .slider::before { - -ms-transform: translateX(10px); - transform: translateX(10px); -} - -.klaro .cookie-modal .cm-list-input.required:checked + .cm-list-label .slider, -.klaro .context-notice .cm-list-input.required:checked + .cm-list-label .slider, -.klaro .cookie-notice .cm-list-input.required:checked + .cm-list-label .slider { - background-color: #24cc9a; - background-color: var(--green2, #24cc9a); - opacity: 0.8; - cursor: not-allowed; -} - -.klaro .cookie-modal .slider, -.klaro .context-notice .slider, -.klaro .cookie-notice .slider { - box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.2), 5px 5px 10px 0 rgba(0, 0, 0, 0.19); -} - -.klaro .cookie-modal .cm-list-input, -.klaro .context-notice .cm-list-input, -.klaro .cookie-notice .cm-list-input { - position: absolute; - top: 0; - left: 0; - opacity: 0; - width: 50px; - height: 30px; -} - -.klaro .cookie-modal .cm-list-title, -.klaro .context-notice .cm-list-title, -.klaro .cookie-notice .cm-list-title { - font-size: 0.9em; - font-weight: 600; -} - -.klaro .cookie-modal .cm-list-description, -.klaro .context-notice .cm-list-description, -.klaro .cookie-notice .cm-list-description { - color: #7c7c7c; - color: var(--dark3, #7c7c7c); - font-size: 0.9em; - padding-top: 4px; -} - -.klaro .cookie-modal .cm-list-label, -.klaro .context-notice .cm-list-label, -.klaro .cookie-notice .cm-list-label { - /* The slider */ - /* Rounded sliders */ -} - -.klaro .cookie-modal .cm-list-label .cm-switch, -.klaro .context-notice .cm-list-label .cm-switch, -.klaro .cookie-notice .cm-list-label .cm-switch { - position: absolute; - left: 0; -} - -.klaro .cookie-modal .cm-list-label .slider, -.klaro .context-notice .cm-list-label .slider, -.klaro .cookie-notice .cm-list-label .slider { - background-color: #f2f2f2; - background-color: var(--white2, #f2f2f2); - position: absolute; - cursor: pointer; - top: 0; - left: 0; - right: 0; - bottom: 0; - transition: 0.4s; - width: 50px; - display: inline-block; -} - -.klaro .cookie-modal .cm-list-label .slider::before, -.klaro .context-notice .cm-list-label .slider::before, -.klaro .cookie-notice .cm-list-label .slider::before { - background-color: #e6e6e6; - background-color: var(--white3, #e6e6e6); - position: absolute; - content: ""; - height: 20px; - width: 20px; - left: 5px; - bottom: 5px; - transition: 0.4s; -} - -.klaro .cookie-modal .cm-list-label .slider.round, -.klaro .context-notice .cm-list-label .slider.round, -.klaro .cookie-notice .cm-list-label .slider.round { - border-radius: 30px; -} - -.klaro .cookie-modal .cm-list-label .slider.round::before, -.klaro .context-notice .cm-list-label .slider.round::before, -.klaro .cookie-notice .cm-list-label .slider.round::before { - border-radius: 50%; -} - -.klaro .cookie-modal .cm-list-label input:focus + .slider, -.klaro .context-notice .cm-list-label input:focus + .slider, -.klaro .cookie-notice .cm-list-label input:focus + .slider { - box-shadow-color: #48dfb2; - box-shadow-color: var(--green3, #48dfb2); - box-shadow: 0 0 1px var(color, green3); -} - -.klaro .cookie-modal .cm-list-label input:checked + .slider::before, -.klaro .context-notice .cm-list-label input:checked + .slider::before, -.klaro .cookie-notice .cm-list-label input:checked + .slider::before { - -ms-transform: translateX(20px); - transform: translateX(20px); -} - -.klaro .cookie-modal .cm-list-input:focus + .cm-list-label .slider, -.klaro .context-notice .cm-list-input:focus + .cm-list-label .slider, -.klaro .cookie-notice .cm-list-input:focus + .cm-list-label .slider { - box-shadow: 0 4px 6px 0 rgba(125, 125, 125, 0.2), - 5px 5px 10px 0 rgba(125, 125, 125, 0.19); -} - -.klaro .cookie-modal .cm-list-input:checked + .cm-list-label .slider::before, -.klaro .context-notice .cm-list-input:checked + .cm-list-label .slider::before, -.klaro .cookie-notice .cm-list-input:checked + .cm-list-label .slider::before { - -ms-transform: translateX(20px); - transform: translateX(20px); -} - -.klaro .cookie-modal .slider, -.klaro .context-notice .slider, -.klaro .cookie-notice .slider { - box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.2), 5px 5px 10px 0 rgba(0, 0, 0, 0.19); -} - -.klaro .cookie-modal a, -.klaro .context-notice a, -.klaro .cookie-notice a { - color: #007bff; - color: var(--green1, #007bff); - text-decoration: none; -} - -.klaro .cookie-modal p, -.klaro .cookie-modal strong, -.klaro .cookie-modal h1, -.klaro .cookie-modal h2, -.klaro .cookie-modal ul, -.klaro .cookie-modal li, -.klaro .context-notice p, -.klaro .context-notice strong, -.klaro .context-notice h1, -.klaro .context-notice h2, -.klaro .context-notice ul, -.klaro .context-notice li, -.klaro .cookie-notice p, -.klaro .cookie-notice strong, -.klaro .cookie-notice h1, -.klaro .cookie-notice h2, -.klaro .cookie-notice ul, -.klaro .cookie-notice li { - color: #fafafa; - color: var(--light1, #fafafa); -} - -.klaro .cookie-modal p, -.klaro .cookie-modal h1, -.klaro .cookie-modal h2, -.klaro .cookie-modal ul, -.klaro .cookie-modal li, -.klaro .context-notice p, -.klaro .context-notice h1, -.klaro .context-notice h2, -.klaro .context-notice ul, -.klaro .context-notice li, -.klaro .cookie-notice p, -.klaro .cookie-notice h1, -.klaro .cookie-notice h2, -.klaro .cookie-notice ul, -.klaro .cookie-notice li { - display: block; - text-align: left; - margin: 0; - padding: 0; - margin-top: 0.7em; -} - -.klaro .cookie-modal h1, -.klaro .cookie-modal h2, -.klaro .cookie-modal h3, -.klaro .cookie-modal h4, -.klaro .cookie-modal h5, -.klaro .cookie-modal h6, -.klaro .context-notice h1, -.klaro .context-notice h2, -.klaro .context-notice h3, -.klaro .context-notice h4, -.klaro .context-notice h5, -.klaro .context-notice h6, -.klaro .cookie-notice h1, -.klaro .cookie-notice h2, -.klaro .cookie-notice h3, -.klaro .cookie-notice h4, -.klaro .cookie-notice h5, -.klaro .cookie-notice h6 { - font-family: inherit; - font-family: var(--title-font-family, inherit); -} - -.klaro .cookie-modal .cm-link, -.klaro .context-notice .cm-link, -.klaro .cookie-notice .cm-link { - margin-right: 0.5em; - vertical-align: middle; -} - -.klaro .cookie-modal .cm-btn, -.klaro .context-notice .cm-btn, -.klaro .cookie-notice .cm-btn { - color: #fff; - color: var(--button-text-color, #fff); - background-color: #5c5c5c; - background-color: var(--dark2, #5c5c5c); - border-radius: 4px; - border-radius: var(--border-radius, 4px); - padding: 0.375rem 0.75rem; - margin-right: 0.5em; - border-style: none; - padding: 0.4em; - font-size: 1rem; - cursor: pointer; -} - -.klaro .cookie-modal .cm-btn:disabled, -.klaro .context-notice .cm-btn:disabled, -.klaro .cookie-notice .cm-btn:disabled { - opacity: 0.5; -} - -.klaro .cookie-modal .cm-btn.cm-btn-close, -.klaro .context-notice .cm-btn.cm-btn-close, -.klaro .cookie-notice .cm-btn.cm-btn-close { - background-color: #c8c8c8; - background-color: var(--light2, #c8c8c8); -} - -.klaro .cookie-modal .cm-btn.cm-btn-success, -.klaro .context-notice .cm-btn.cm-btn-success, -.klaro .cookie-notice .cm-btn.cm-btn-success { - background-color: #007bff; - background-color: var(--green1, #007bff); -} - -.klaro .cookie-modal .cm-btn.cm-btn-success-var, -.klaro .context-notice .cm-btn.cm-btn-success-var, -.klaro .cookie-notice .cm-btn.cm-btn-success-var { - background-color: #24cc9a; - background-color: var(--green2, #24cc9a); -} - -.klaro .cookie-modal .cm-btn.cm-btn-info, -.klaro .context-notice .cm-btn.cm-btn-info, -.klaro .cookie-notice .cm-btn.cm-btn-info { - font-weight: 400; - color: #212529; - background-color: #f8f9fa; -} - -.klaro .context-notice { - border-radius: 4px; - border-radius: var(--border-radius, 4px); - border-style: solid; - border-style: var(--border-style, solid); - border-width: 1px; - border-width: var(--border-width, 1px); - border-color: #c8c8c8; - border-color: var(--light2, #c8c8c8); - background-color: #fafafa; - background-color: var(--light1, #fafafa); - display: flex; - flex-direction: column; - flex-wrap: wrap; - align-items: center; - justify-content: center; - padding: 12px; - height: 100%; -} - -.klaro .context-notice.cm-dark { - background-color: #333; - background-color: var(--dark1, #333); - border-color: #5c5c5c; - border-color: var(--dark2, #5c5c5c); -} - -.klaro .context-notice.cm-dark p { - color: #fafafa; - color: var(--light1, #fafafa); -} - -.klaro .context-notice.cm-dark p a { - color: #459cdc; - color: var(--blue2, #459cdc); -} - -.klaro .context-notice p { - color: #333; - color: var(--dark1, #333); - flex-grow: 0; - text-align: center; - padding-top: 0; - margin-top: 0; -} - -.klaro .context-notice p a { - color: #24cc9a; - color: var(--green2, #24cc9a); -} - -.klaro .context-notice p.cm-buttons { - margin-top: 12px; -} - -.klaro .cookie-modal { - width: 100%; - height: 100%; - position: fixed; - overflow: hidden; - left: 0; - top: 0; - z-index: 1000; -} - -.klaro .cookie-modal.cm-embedded { - position: relative; - height: inherit; - width: inherit; - left: inherit; - right: inherit; - z-index: 0; -} - -.klaro .cookie-modal.cm-embedded .cm-modal.cm-klaro { - position: relative; - -ms-transform: none; - transform: none; -} - -.klaro .cookie-modal .cm-bg { - background: rgba(0, 0, 0, 0.5); - height: 100%; - width: 100%; - position: fixed; - top: 0; - left: 0; -} - -.klaro .cookie-modal .cm-modal.cm-klaro { - background-color: #333; - background-color: var(--dark1, #333); - color: #fafafa; - color: var(--light1, #fafafa); - z-index: 1001; - box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.2), 5px 5px 10px 0 rgba(0, 0, 0, 0.19); - width: 100%; - max-height: 98%; - top: 50%; - -ms-transform: translateY(-50%); - transform: translateY(-50%); - position: fixed; - overflow: auto; -} - -@media (min-width: 660px) { - .klaro .cookie-modal .cm-modal.cm-klaro { - border-radius: 4px; - border-radius: var(--border-radius, 4px); - position: relative; - margin: 0 auto; - max-width: 640px; - height: auto; - width: auto; - } -} - -.klaro .cookie-modal .cm-modal .hide { - border-style: none; - background: none; - cursor: pointer; - position: absolute; - top: 20px; - right: 20px; - z-index: 1; -} - -.klaro .cookie-modal .cm-modal .hide svg { - stroke: #fafafa; - stroke: var(--light1, #fafafa); -} - -.klaro .cookie-modal .cm-modal .cm-footer { - border-top-color: #5c5c5c; - border-top-color: var(--dark2, #5c5c5c); - border-top-width: 1px; - border-top-width: var(--border-width, 1px); - border-top-style: solid; - border-top-style: var(--border-style, solid); - padding: 1em; -} - -.klaro .cookie-modal .cm-modal .cm-footer-buttons { - display: flex; - flex-flow: row; - justify-content: space-between; -} - -.klaro .cookie-modal .cm-modal .cm-footer .cm-powered-by { - font-size: 0.8em; - padding-top: 4px; - text-align: right; - padding-right: 8px; -} - -.klaro .cookie-modal .cm-modal .cm-footer .cm-powered-by a { - color: #5c5c5c; - color: var(--dark2, #5c5c5c); -} - -.klaro .cookie-modal .cm-modal .cm-header { - border-bottom-width: 1px; - border-bottom-width: var(--border-width, 1px); - border-bottom-style: solid; - border-bottom-style: var(--border-style, solid); - border-bottom-color: #5c5c5c; - border-bottom-color: var(--dark2, #5c5c5c); - padding: 1em; - padding-right: 24px; -} - -.klaro .cookie-modal .cm-modal .cm-header h1 { - margin: 0; - font-size: 2em; - display: block; -} - -.klaro .cookie-modal .cm-modal .cm-header h1.title { - padding-right: 20px; -} - -.klaro .cookie-modal .cm-modal .cm-body { - padding: 1em; -} - -.klaro .cookie-modal .cm-modal .cm-body ul { - display: block; -} - -.klaro .cookie-modal .cm-modal .cm-body span { - display: inline-block; - width: auto; -} - -.klaro .cookie-modal .cm-modal .cm-body ul.cm-services, -.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes { - padding: 0; - margin: 0; -} - -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-services - li.cm-purpose - .cm-services - .cm-caret, -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-purposes - li.cm-purpose - .cm-services - .cm-caret { - color: #a0a0a0; - color: var(--light3, #a0a0a0); -} - -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-services - li.cm-purpose - .cm-services - .cm-content, -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-purposes - li.cm-purpose - .cm-services - .cm-content { - margin-left: -40px; - display: none; -} - -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-services - li.cm-purpose - .cm-services - .cm-content.expanded, -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-purposes - li.cm-purpose - .cm-services - .cm-content.expanded { - margin-top: 10px; - display: block; -} - -.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-service, -.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose, -.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-service, -.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose { - position: relative; - line-height: 20px; - vertical-align: middle; - padding-left: 60px; - min-height: 40px; -} - -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-services - li.cm-service:first-child, -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-services - li.cm-purpose:first-child, -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-purposes - li.cm-service:first-child, -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-purposes - li.cm-purpose:first-child { - margin-top: 0; -} - -.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-service p, -.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose p, -.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-service p, -.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose p { - margin-top: 0; -} - -.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-service p.purposes, -.klaro .cookie-modal .cm-modal .cm-body ul.cm-services li.cm-purpose p.purposes, -.klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-service p.purposes, -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-purposes - li.cm-purpose - p.purposes { - color: #a0a0a0; - color: var(--light3, #a0a0a0); - font-size: 0.8em; -} - -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-services - li.cm-service.cm-toggle-all, -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-services - li.cm-purpose.cm-toggle-all, -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-purposes - li.cm-service.cm-toggle-all, -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-purposes - li.cm-purpose.cm-toggle-all { - border-top-width: 1px; - border-top-width: var(--border-width, 1px); - border-top-style: solid; - border-top-style: var(--border-style, solid); - border-top-color: #5c5c5c; - border-top-color: var(--dark2, #5c5c5c); - padding-top: 1em; -} - -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-services - li.cm-service - span.cm-list-title, -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-services - li.cm-purpose - span.cm-list-title, -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-purposes - li.cm-service - span.cm-list-title, -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-purposes - li.cm-purpose - span.cm-list-title { - font-weight: 600; -} - -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-services - li.cm-service - span.cm-opt-out, -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-services - li.cm-service - span.cm-required, -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-services - li.cm-purpose - span.cm-opt-out, -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-services - li.cm-purpose - span.cm-required, -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-purposes - li.cm-service - span.cm-opt-out, -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-purposes - li.cm-service - span.cm-required, -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-purposes - li.cm-purpose - span.cm-opt-out, -.klaro - .cookie-modal - .cm-modal - .cm-body - ul.cm-purposes - li.cm-purpose - span.cm-required { - color: #5c5c5c; - color: var(--dark2, #5c5c5c); - padding-left: 0.2em; - font-size: 0.8em; -} - -.klaro .cookie-notice:not(.cookie-modal-notice) { - background-color: #333; - background-color: var(--dark1, #333); - z-index: 999; - position: fixed; - width: 100%; - bottom: 0; - right: 0; -} - -@media (min-width: 1024px) { - .klaro .cookie-notice:not(.cookie-modal-notice) { - border-radius: 4px; - border-radius: var(--border-radius, 4px); - position: fixed; - position: var(--notice-position, fixed); - right: 20px; - right: var(--notice-right, 20px); - left: auto; - left: var(--notice-left, auto); - bottom: 20px; - bottom: var(--notice-bottom, 20px); - top: auto; - top: var(--notice-top, auto); - max-width: 400px; - max-width: var(--notice-max-width, 400px); - box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.2), - 5px 5px 10px 0 rgba(0, 0, 0, 0.19); - } -} - -@media (max-width: 1023px) { - .klaro .cookie-notice:not(.cookie-modal-notice) { - border-style: none; - border-radius: 0; - } -} - -.klaro .cookie-notice:not(.cookie-modal-notice).cn-embedded { - position: relative; - height: inherit; - width: inherit; - left: inherit; - right: inherit; - bottom: inherit; - z-index: 0; -} - -.klaro .cookie-notice:not(.cookie-modal-notice).cn-embedded .cn-body { - padding-top: 0.5em; -} - -.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body { - margin-bottom: 0; - margin-right: 0; - bottom: 0; - padding: 1em; - padding-top: 0; -} - -.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body p { - margin-bottom: 0.5em; -} - -.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body p.cn-changes { - text-decoration: underline; -} - -.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body .cn-learn-more { - display: inline-block; - flex-grow: 1; -} - -.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body .cn-buttons { - display: inline-block; - margin-top: -0.5em; -} - -@media (max-width: 384px) { - .klaro .cookie-notice:not(.cookie-modal-notice) .cn-body .cn-buttons { - width: 100%; - } -} - -.klaro - .cookie-notice:not(.cookie-modal-notice) - .cn-body - .cn-buttons - button.cm-btn { - margin-top: 0.5em; -} - -@media (max-width: 384px) { - .klaro - .cookie-notice:not(.cookie-modal-notice) - .cn-body - .cn-buttons - button.cm-btn { - width: calc(50% - 0.5em); - } -} - -.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body .cn-ok { - margin-top: -0.5em; - display: flex; - flex-flow: row; - flex-wrap: wrap; - justify-content: right; - align-items: baseline; -} - -.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body .cn-ok a, -.klaro .cookie-notice:not(.cookie-modal-notice) .cn-body .cn-ok div { - margin-top: 0.5em; -} - -.klaro .cookie-modal-notice { - background-color: #333; - background-color: var(--dark1, #333); - color: #fafafa; - color: var(--light1, #fafafa); - z-index: 1001; - box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.2), 5px 5px 10px 0 rgba(0, 0, 0, 0.19); - width: 100%; - max-height: 98%; - top: 50%; - -ms-transform: translateY(-50%); - transform: translateY(-50%); - position: fixed; - overflow: auto; - padding: 1em; - padding-top: 0.2em; -} - -@media (min-width: 400px) { - .klaro .cookie-modal-notice { - border-radius: 4px; - border-radius: var(--border-radius, 4px); - position: relative; - margin: 0 auto; - max-width: 400px; - height: auto; - width: auto; - } -} - -.klaro .cookie-modal-notice .cn-ok { - display: flex; - flex-flow: row; - justify-content: space-between; - align-items: center; - margin-top: 1em; -} - -.klaro .cookie-notice-hidden { - display: none !important; -} diff --git a/project/static/landing-page.css b/project/static/landing-page.css index f77ed83..d67386d 100644 --- a/project/static/landing-page.css +++ b/project/static/landing-page.css @@ -1,41 +1,54 @@ /* lato-300 - latin */ @font-face { - font-family: 'Lato'; + font-family: "Lato"; font-style: normal; font-weight: 300; - src: url('/static/fonts/lato-v23-latin-300.eot'); /* IE9 Compat Modes */ - src: local(''), - url('/static/fonts/lato-v23-latin-300.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('/static/fonts/lato-v23-latin-300.woff2') format('woff2'), /* Super Modern Browsers */ - url('/static/fonts/lato-v23-latin-300.woff') format('woff'), /* Modern Browsers */ - url('/static/fonts/lato-v23-latin-300.ttf') format('truetype'), /* Safari, Android, iOS */ - url('/static/fonts/lato-v23-latin-300.svg#Lato') format('svg'); /* Legacy iOS */ + src: url("/static/fonts/lato-v23-latin-300.eot"); /* IE9 Compat Modes */ + src: local(""), + url("/static/fonts/lato-v23-latin-300.eot?#iefix") + format("embedded-opentype"), + /* IE6-IE8 */ url("/static/fonts/lato-v23-latin-300.woff2") format("woff2"), + /* Super Modern Browsers */ url("/static/fonts/lato-v23-latin-300.woff") + format("woff"), + /* Modern Browsers */ url("/static/fonts/lato-v23-latin-300.ttf") + format("truetype"), + /* Safari, Android, iOS */ url("/static/fonts/lato-v23-latin-300.svg#Lato") + format("svg"); /* Legacy iOS */ } /* lato-regular - latin */ @font-face { - font-family: 'Lato'; + font-family: "Lato"; font-style: normal; font-weight: 400; - src: url('/static/fonts/lato-v23-latin-regular.eot'); /* IE9 Compat Modes */ - src: local(''), - url('/static/fonts/lato-v23-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('/static/fonts/lato-v23-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ - url('/static/fonts/lato-v23-latin-regular.woff') format('woff'), /* Modern Browsers */ - url('/static/fonts/lato-v23-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ - url('/static/fonts/lato-v23-latin-regular.svg#Lato') format('svg'); /* Legacy iOS */ + src: url("/static/fonts/lato-v23-latin-regular.eot"); /* IE9 Compat Modes */ + src: local(""), + url("/static/fonts/lato-v23-latin-regular.eot?#iefix") + format("embedded-opentype"), + /* IE6-IE8 */ url("/static/fonts/lato-v23-latin-regular.woff2") + format("woff2"), + /* Super Modern Browsers */ url("/static/fonts/lato-v23-latin-regular.woff") + format("woff"), + /* Modern Browsers */ url("/static/fonts/lato-v23-latin-regular.ttf") + format("truetype"), + /* Safari, Android, iOS */ + url("/static/fonts/lato-v23-latin-regular.svg#Lato") format("svg"); /* Legacy iOS */ } /* lato-700 - latin */ @font-face { - font-family: 'Lato'; + font-family: "Lato"; font-style: normal; font-weight: 700; - src: url('/static/fonts/lato-v23-latin-700.eot'); /* IE9 Compat Modes */ - src: local(''), - url('/static/fonts/lato-v23-latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('/static/fonts/lato-v23-latin-700.woff2') format('woff2'), /* Super Modern Browsers */ - url('/static/fonts/lato-v23-latin-700.woff') format('woff'), /* Modern Browsers */ - url('/static/fonts/lato-v23-latin-700.ttf') format('truetype'), /* Safari, Android, iOS */ - url('/static/fonts/lato-v23-latin-700.svg#Lato') format('svg'); /* Legacy iOS */ + src: url("/static/fonts/lato-v23-latin-700.eot"); /* IE9 Compat Modes */ + src: local(""), + url("/static/fonts/lato-v23-latin-700.eot?#iefix") + format("embedded-opentype"), + /* IE6-IE8 */ url("/static/fonts/lato-v23-latin-700.woff2") format("woff2"), + /* Super Modern Browsers */ url("/static/fonts/lato-v23-latin-700.woff") + format("woff"), + /* Modern Browsers */ url("/static/fonts/lato-v23-latin-700.ttf") + format("truetype"), + /* Safari, Android, iOS */ url("/static/fonts/lato-v23-latin-700.svg#Lato") + format("svg"); /* Legacy iOS */ } /*! @@ -141,28 +154,3 @@ header.masthead h1 { max-width: 12rem; box-shadow: 0px 5px 5px 0px #adb5bd; } - -.call-to-action { - position: relative; - background-color: #343a40; - background: url("../static/img/landing-page//bg-masthead.jpg") no-repeat - center center; - background-size: cover; - padding-top: 7rem; - padding-bottom: 7rem; -} - -.call-to-action .overlay { - position: absolute; - background-color: #212529; - height: 100%; - width: 100%; - top: 0; - left: 0; - opacity: 0.3; -} - -footer.footer { - padding-top: 1rem; - padding-bottom: 1rem; -} diff --git a/project/templates/admin/settings.html b/project/templates/admin/settings.html index 1e070e1..f06f06b 100644 --- a/project/templates/admin/settings.html +++ b/project/templates/admin/settings.html @@ -10,6 +10,7 @@
{{ form.hidden_tag() }} + {{ render_field_with_errors(form.start_page) }} {{ render_field_with_errors(form.tos) }} {{ render_field_with_errors(form.legal_notice) }} {{ render_field_with_errors(form.contact) }} diff --git a/project/templates/home.html b/project/templates/home.html index ef19115..f475462 100644 --- a/project/templates/home.html +++ b/project/templates/home.html @@ -1,5 +1,4 @@ {% extends "layout.html" %} -{% from "_macros.html" import render_place, render_events_sub_menu %} {%- block title -%} {{ config["SITE_NAME"] }} {%- endblock -%} @@ -9,45 +8,33 @@ {% block body_content__attribs %} style="padding:0;"{% endblock %} {% block content_container_attribs %}{% endblock %} {% block content %} +{% if content %} +{{ content }} +{% else %} - -
-
+
-

Offene Veranstaltungs-Datenbank

-

Events einfach bekannt machen!

+

{{ config["SITE_NAME"] }}

- -
-
- {% if current_user.is_authenticated %} - {{ _('Manage') }} - {% elif not admin_unit_create_requires_admin %} - {{ _('Register for free') }} - {% endif %} -
+ {% if current_user.is_authenticated %} + - + {% elif not config["ADMIN_UNIT_CREATE_REQUIRES_ADMIN"] %} + + + {% endif %}
-
-
-
-
-
- Logo machmit! -
MachMit! Goslar
-

Die offene Veranstaltungsdatenbank ist eine Idee der MachMit!-Initiative der Stadt Goslar.

-
-
-
-
-
- +{% endif %} {% endblock %} \ No newline at end of file diff --git a/project/templates/layout.html b/project/templates/layout.html index e95f2a7..09ee3b0 100644 --- a/project/templates/layout.html +++ b/project/templates/layout.html @@ -50,24 +50,6 @@ {%- block styles %} {%- endblock styles %} - {%- block gtm_header %} - {% set gtm_id = None | env_override('GTM_ID') %} - {% if gtm_id %} - - - - - - - {% endif %} - {%- endblock gtm_header %} - @@ -157,15 +139,10 @@ {% block body -%} - {%- block gtm_body %} - {% if gtm_id %} - - {% endif %} - {%- endblock gtm_body %} {% block navbar %}