diff --git a/Dockerfile b/Dockerfile
index 4950ca7..eee93c9 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -34,8 +34,9 @@ RUN rm -rf /pretix/src/pretix/static.dist/CACHE && \
USER root
-# 6. Vorkompilierte CSS-Dateien bereinigen & statische Theme-Assets bereitstellen
-RUN find /pretix/src/pretix/static.dist -type f -name "*.css" -exec sed -i \
+# 6. Vorkompilierte CSS-Dateien bereinigen, Widget-JS prüfen & statische Theme-Assets bereitstellen
+RUN python3 /tmp/pretix-falkenthal-theme/patch_templates.py && \
+ find /pretix/src/pretix/static.dist -type f -name "*.css" -exec sed -i \
-e 's/#3b1c4a/#4f46e5/gI' \
-e 's/#5f2977/#4f46e5/gI' \
-e 's/#7f4a88/#475569/gI' \
diff --git a/patch_templates.py b/patch_templates.py
index 32c998d..1f65414 100644
--- a/patch_templates.py
+++ b/patch_templates.py
@@ -1,3 +1,4 @@
+import glob
import os
import re
import sys
@@ -5,7 +6,7 @@ import sys
THEME_REPO_URL = "https://git.falkenthal.me/falkenthal/pretix-falkenthal-theme"
PLATFORM_IMPRINT_URL = "https://tickets.falkenthal.me/impressum"
PLATFORM_PRIVACY_URL = "https://tickets.falkenthal.me/datenschutz"
-ASSET_VERSION = "1.8.3"
+ASSET_VERSION = "1.8.4"
control_files = [
'/pretix/src/pretix/control/templates/pretixcontrol/base.html',
@@ -137,5 +138,58 @@ for err_name in ['400.html', '403.html', '403_csrf.html', '404.html', '500.html'
with open(err_path, 'w', encoding='utf-8') as f:
f.write(ec)
-print(f"Pretix templates patched and verified successfully (v{ASSET_VERSION}).")
+# 4. Eingebettetes Pretix-Widget (widget.js / v1.*.js):
+# Einheitliche Plattform-Pflichtangaben auch direkt unter dem Inline-Widget auf externen Veranstalter-Websites!
+widget_platform_bar_js = r"""
+;(function(){
+ if (typeof document === 'undefined' || window.__falkenthalWidgetPatched) return;
+ window.__falkenthalWidgetPatched = true;
+ var BAR_HTML = 'Technischer Plattformbetrieb: FALKENTHAL' +
+ ' · Plattform-Impressum' +
+ ' · Plattform-Datenschutz' +
+ ' · Theme & Quellcode (AGPLv3)';
+ function injectWidgetBar() {
+ var footers = document.querySelectorAll('.pretix-widget-attribution');
+ for (var i = 0; i < footers.length; i++) {
+ var el = footers[i];
+ if (!el.getAttribute('data-falkenthal-bar')) {
+ el.setAttribute('data-falkenthal-bar', '1');
+ var bar = document.createElement('div');
+ bar.className = 'pretix-widget-falkenthal-bar';
+ bar.style.cssText = 'margin-top:6px;padding-top:6px;border-top:1px solid rgba(128,128,128,0.2);font-size:11px;line-height:1.5;text-align:center;opacity:0.85;';
+ bar.innerHTML = BAR_HTML;
+ el.appendChild(bar);
+ }
+ }
+ }
+ if (document.readyState === 'loading') {
+ document.addEventListener('DOMContentLoaded', injectWidgetBar);
+ } else {
+ injectWidgetBar();
+ }
+ if (typeof MutationObserver !== 'undefined') {
+ var obs = new MutationObserver(function() { injectWidgetBar(); });
+ var startObs = function() {
+ if (document.body) obs.observe(document.body, { childList: true, subtree: true });
+ };
+ if (document.body) startObs();
+ else document.addEventListener('DOMContentLoaded', startObs);
+ }
+ setInterval(injectWidgetBar, 1500);
+})();
+"""
+
+widget_js_candidates = (
+ glob.glob('/pretix/src/pretix/presale/static/pretixpresale/js/widget/*.js')
+ + glob.glob('/pretix/src/pretix/static.dist/**/widget/*.js', recursive=True)
+)
+for wjs in widget_js_candidates:
+ if os.path.isfile(wjs):
+ with open(wjs, 'r', encoding='utf-8') as f:
+ wc = f.read()
+ if '__falkenthalWidgetPatched' not in wc:
+ with open(wjs, 'a', encoding='utf-8') as f:
+ f.write('\n' + widget_platform_bar_js)
+
+print(f"Pretix templates and widget assets patched and verified successfully (v{ASSET_VERSION}).")
diff --git a/pretix_whitelabel/__init__.py b/pretix_whitelabel/__init__.py
index ac01530..cdbff14 100644
--- a/pretix_whitelabel/__init__.py
+++ b/pretix_whitelabel/__init__.py
@@ -13,7 +13,7 @@ class WhiteLabelApp(AppConfig):
"Custom Slate & Blue-Violet theme plugin for pretix control and presale UI."
)
visible = False
- version = "1.8.3"
+ version = "1.8.4"
category = "CUSTOMIZATION"
diff --git a/pretix_whitelabel/signals.py b/pretix_whitelabel/signals.py
index 0f05113..7e63c5a 100644
--- a/pretix_whitelabel/signals.py
+++ b/pretix_whitelabel/signals.py
@@ -1,5 +1,5 @@
"""
-Pretix signal receivers for pretix-falkenthal-theme (v1.8.3).
+Pretix signal receivers for pretix-falkenthal-theme (v1.8.4).
Hinweis zur Architektur:
Die Plattform-Pflichtangaben (Plattform-Impressum, Plattform-Datenschutz sowie
diff --git a/pretix_whitelabel/static/whitelabel/control.css b/pretix_whitelabel/static/whitelabel/control.css
index cb1f7b9..f4a83a5 100644
--- a/pretix_whitelabel/static/whitelabel/control.css
+++ b/pretix_whitelabel/static/whitelabel/control.css
@@ -1,5 +1,5 @@
/* ==========================================================================
- FALKENTHAL ADMIN BACKEND & LOGIN THEME (control.css - v1.8.3)
+ FALKENTHAL ADMIN BACKEND & LOGIN THEME (control.css - v1.8.4)
========================================================================== */
:root {
@@ -63,7 +63,7 @@ nav.navbar-inverse {
a.navbar-brand {
font-size: 0 !important;
color: transparent !important;
- background-image: url('/static/whitelabel/logo.svg?v=1.8.3') !important;
+ background-image: url('/static/whitelabel/logo.svg?v=1.8.4') !important;
background-repeat: no-repeat !important;
background-position: 14px center !important;
background-size: auto 34px !important;
@@ -868,7 +868,7 @@ body:not(:has(#wrapper)):has(img.logo) > .container [class*="col-"] {
body.falkenthal-auth-body .container img.logo,
body:not(:has(#wrapper)):has(img.logo) .container img.logo,
.form-signin img.logo {
- content: url('/static/whitelabel/login-logo.svg?v=1.8.3') !important;
+ content: url('/static/whitelabel/login-logo.svg?v=1.8.4') !important;
height: 115px !important;
max-height: 115px !important;
width: auto !important;
diff --git a/pretix_whitelabel/static/whitelabel/presale.css b/pretix_whitelabel/static/whitelabel/presale.css
index 638e02b..7407462 100644
--- a/pretix_whitelabel/static/whitelabel/presale.css
+++ b/pretix_whitelabel/static/whitelabel/presale.css
@@ -1,5 +1,5 @@
/* ==========================================================================
- FALKENTHAL MODERN SHOP UI/UX UPGRADE (presale.css - v1.8.3)
+ FALKENTHAL MODERN SHOP UI/UX UPGRADE (presale.css - v1.8.4)
Farb-, Geometrie- & Kontrastneutral: Respektiert 100 % der Veranstalter-Farben,
Logos, Bootstrap-Input-Groups sowie helle UND dunkle Veranstalter-Hintergründe!
========================================================================== */
@@ -22,23 +22,27 @@ body {
font-weight: 600;
}
-/* 2. BUTTONS, EINGABEFELDER & MENGENAUSWAHL (SICHERE RAHMEN & HOVER OHNE TRANSPARENZ) */
+/* 2. BUTTONS, EINGABEFELDER & MENGENAUSWAHL (ADAPTIVE RAHMEN FÜR LIGHT & DARK THEMES) */
.btn {
border-radius: 6px;
font-weight: 600;
transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
}
-/* Sekundäre Buttons & Mengenauswahl-Buttons ([-][+]) behalten beim Hover IMMER einen klaren Rahmen! */
+/* Sekundäre Buttons & Mengenauswahl-Buttons ([-][+]) behalten auf hellen UND dunklen
+ Veranstalter-Hintergründen beim Hover immer einen klaren, sichtbaren Rahmen! */
.btn-default {
- border: 1px solid #ccc;
+ border: 1px solid rgba(128, 128, 128, 0.35);
+ border-color: color-mix(in srgb, currentColor 25%, transparent);
}
.btn-default:hover,
.btn-default:focus,
.btn-default:active {
- border-color: #adadad !important;
+ border-color: rgba(128, 128, 128, 0.55) !important;
+ border-color: color-mix(in srgb, currentColor 42%, transparent) !important;
background-color: rgba(128, 128, 128, 0.08);
+ background-color: color-mix(in srgb, currentColor 6%, transparent);
}
/* Standalone-Eingabefelder (außerhalb von .input-group) dezent abrunden */
@@ -96,7 +100,7 @@ body {
}
/* ==========================================================================
- 6. FOOTER & PLATTFORM-RECHTSTEXTE (ADAPTIV FÜR HELLE & DUNKLE VERANSTALTER-SHOPS)
+ 6. FOOTER & PLATTFORM-RECHTSTEXTE (ADAPTIV IN SHOP & WIDGET-IFRAME)
========================================================================== */
footer {
display: flex;
@@ -169,13 +173,23 @@ footer nav ul li a {
opacity: 0.55;
}
-/* Kompakter Modus für eingebettete Pretix-Widgets (iFrame) & Mobilgeräte */
+/* Garantierte Sichtbarkeit der Plattform-Pflichtangaben im eingebetteten Pretix-Widget (Checkout-iFrame) */
.is-iframe footer,
-body.iframe footer {
+body.iframe footer,
+body[data-iframe] footer {
+ display: flex !important;
+ visibility: visible !important;
margin-top: 20px;
padding-bottom: 14px;
}
+.is-iframe .falkenthal-platform-bar,
+body.iframe .falkenthal-platform-bar,
+body[data-iframe] .falkenthal-platform-bar {
+ display: block !important;
+ visibility: visible !important;
+}
+
@media (max-width: 767px) {
.falkenthal-platform-bar {
font-size: 11px;
diff --git a/setup.py b/setup.py
index cf2b277..ecd094d 100644
--- a/setup.py
+++ b/setup.py
@@ -5,7 +5,7 @@ with open("README.md", encoding="utf-8") as f:
setup(
name="pretix-falkenthal-theme",
- version="1.8.3",
+ version="1.8.4",
description="Modern Slate & Blue-Violet White-Label Theme Plugin for pretix",
long_description=long_description,
long_description_content_type="text/markdown",