diff --git a/patch_templates.py b/patch_templates.py index 1f65414..a2ec1fc 100644 --- a/patch_templates.py +++ b/patch_templates.py @@ -6,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.4" +ASSET_VERSION = "1.8.5" control_files = [ '/pretix/src/pretix/control/templates/pretixcontrol/base.html', @@ -138,8 +138,8 @@ 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) -# 4. Eingebettetes Pretix-Widget (widget.js / v1.*.js): -# Einheitliche Plattform-Pflichtangaben auch direkt unter dem Inline-Widget auf externen Veranstalter-Websites! +# 4. Eingebettetes Pretix-Widget (/widget/v1.*.js & widget.py): +# Einheitliche Plattform-Pflichtangaben garantiert in jedem (auch auf Jimdo & bei leeren Events)! widget_platform_bar_js = r""" ;(function(){ if (typeof document === 'undefined' || window.__falkenthalWidgetPatched) return; @@ -149,17 +149,18 @@ widget_platform_bar_js = r""" ' · 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); - } + var containers = document.querySelectorAll('.pretix-widget-attribution, .pretix-widget'); + for (var i = 0; i < containers.length; i++) { + var el = containers[i]; + var widgetRoot = el.classList.contains('pretix-widget') ? el : el.closest('.pretix-widget'); + var checkTarget = widgetRoot || el; + if (checkTarget.querySelector('.pretix-widget-falkenthal-bar')) continue; + var target = checkTarget.querySelector('.pretix-widget-attribution') || checkTarget; + var bar = document.createElement('div'); + bar.className = 'pretix-widget-falkenthal-bar'; + bar.style.cssText = 'margin-top:8px;padding-top:8px;border-top:1px solid rgba(128,128,128,0.22);font-size:11px;line-height:1.5;text-align:center;opacity:0.85;clear:both;'; + bar.innerHTML = BAR_HTML; + target.appendChild(bar); } } if (document.readyState === 'loading') { @@ -175,21 +176,52 @@ widget_platform_bar_js = r""" if (document.body) startObs(); else document.addEventListener('DOMContentLoaded', startObs); } - setInterval(injectWidgetBar, 1500); + setInterval(injectWidgetBar, 1000); })(); """ +# 4a. Alle statischen Widget-JS-Dateien im gesamten Pretix-Baum finden (z.B. ui/widget.js, widget/*.js, static.dist) 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) + glob.glob('/pretix/src/pretix/presale/static/**/*widget*.js', recursive=True) + + glob.glob('/pretix/src/pretix/static.dist/**/*widget*.js', recursive=True) ) -for wjs in widget_js_candidates: - if os.path.isfile(wjs): +patched_js_count = 0 +for wjs in set(widget_js_candidates): + if os.path.isfile(wjs) and not wjs.endswith('.min.js.map'): 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) + patched_js_count += 1 -print(f"Pretix templates and widget assets patched and verified successfully (v{ASSET_VERSION}).") +# 4b. Zusätzlich direkt die Django-View /pretix/src/pretix/presale/views/widget.py patchen, +# da Pretix /widget/v1.de.js dynamisch über diese View generiert, im Dateisystem speichert und ausliefert! +widget_view_py = '/pretix/src/pretix/presale/views/widget.py' +if os.path.exists(widget_view_py): + with open(widget_view_py, 'r', encoding='utf-8') as f: + wpy = f.read() + if '__falkenthalWidgetPatched' not in wpy: + wpy_patch = ( + f"\n\n# --- FALKENTHAL PLATFORM LEGAL BAR INJECTION ---\n" + f"_FALKENTHAL_WIDGET_JS = {repr(widget_platform_bar_js)}\n" + f"if 'generate_widget_js' in globals():\n" + f" _orig_generate_widget_js = generate_widget_js\n" + f" def generate_widget_js(lang):\n" + f" code = _orig_generate_widget_js(lang)\n" + f" if '__falkenthalWidgetPatched' not in code:\n" + f" code = code + '\\n' + _FALKENTHAL_WIDGET_JS\n" + f" return code\n" + f"if 'widget_js' in globals():\n" + f" _orig_widget_js = widget_js\n" + f" def widget_js(request, *args, **kwargs):\n" + f" resp = _orig_widget_js(request, *args, **kwargs)\n" + f" if hasattr(resp, 'content') and b'__falkenthalWidgetPatched' not in resp.content:\n" + f" resp.content = resp.content + _FALKENTHAL_WIDGET_JS.encode('utf-8')\n" + f" return resp\n" + ) + with open(widget_view_py, 'a', encoding='utf-8') as f: + f.write(wpy_patch) + +print(f"Pretix templates and widget assets ({patched_js_count} JS files + widget.py) patched and verified successfully (v{ASSET_VERSION}).") diff --git a/pretix_whitelabel/__init__.py b/pretix_whitelabel/__init__.py index cdbff14..7542a9d 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.4" + version = "1.8.5" category = "CUSTOMIZATION" diff --git a/pretix_whitelabel/signals.py b/pretix_whitelabel/signals.py index 7e63c5a..0050765 100644 --- a/pretix_whitelabel/signals.py +++ b/pretix_whitelabel/signals.py @@ -1,5 +1,5 @@ """ -Pretix signal receivers for pretix-falkenthal-theme (v1.8.4). +Pretix signal receivers for pretix-falkenthal-theme (v1.8.5). 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 f4a83a5..0eb1ebf 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.4) + FALKENTHAL ADMIN BACKEND & LOGIN THEME (control.css - v1.8.5) ========================================================================== */ :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.4') !important; + background-image: url('/static/whitelabel/logo.svg?v=1.8.5') !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.4') !important; + content: url('/static/whitelabel/login-logo.svg?v=1.8.5') !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 7407462..2fb5217 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.4) + FALKENTHAL MODERN SHOP UI/UX UPGRADE (presale.css - v1.8.5) Farb-, Geometrie- & Kontrastneutral: Respektiert 100 % der Veranstalter-Farben, Logos, Bootstrap-Input-Groups sowie helle UND dunkle Veranstalter-Hintergründe! ========================================================================== */ diff --git a/setup.py b/setup.py index ecd094d..2f797cd 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.4", + version="1.8.5", description="Modern Slate & Blue-Violet White-Label Theme Plugin for pretix", long_description=long_description, long_description_content_type="text/markdown",