Update auf Version 1.8.5

This commit is contained in:
tino committed 2026-11-10 13:07:50 +01:00
1 parent ce9b7db8c5
commit 3a39e4a5e6
6 files changed
+59 -27

No files matched your search

+52 -20
View File
@@ -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 <pretix-widget> (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"""
' &middot; <a href="https://tickets.falkenthal.me/datenschutz" target="_blank" rel="noopener" style="color:inherit;text-decoration:underline;">Plattform-Datenschutz</a>' +
' &middot; <a href="https://git.falkenthal.me/falkenthal/pretix-falkenthal-theme" target="_blank" rel="noopener" style="color:inherit;text-decoration:underline;">Theme &amp; Quellcode (AGPLv3)</a>';
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}).")