Widget: deprecate v1 and deliver v2 instead (#5273)

* Widget: deprecate v1 and redirect to v2

* Make redirect permanent

* remove v1 files

* do not redirect, just serve version_min

* add version-comment to delivered css/js-file

* fix tests
This commit is contained in:
Richard Schreiber
2025-06-25 11:20:34 +02:00
committed by GitHub
parent 0c7c50cffc
commit 9bf302e5ae
5 changed files with 12 additions and 3614 deletions

View File

@@ -1,5 +0,0 @@
{% load compress %}
{% load static %}
{% compress css %}
<link rel="stylesheet" type="text/x-scss" href="{% static "pretixpresale/scss/widget.v1.scss" %}"/>
{% endcompress %}

View File

@@ -83,7 +83,7 @@ logger = logging.getLogger(__name__)
# we never change static source without restart, so we can cache this thread-wise
_source_cache_key = None
version_min = 1
version_min = 2
version_max = 2
version_default = 2 # used for output in widget-embed-code
@@ -109,6 +109,8 @@ def indent(s):
def widget_css_etag(request, version, **kwargs):
if version < version_min:
version = version_min
# This makes sure a new version of the theme is loaded whenever settings or the source files have changed
if hasattr(request, 'event'):
return (f'{_get_source_cache_key(version)}-'
@@ -130,11 +132,7 @@ def widget_css(request, version, **kwargs):
if version > version_max:
raise Http404()
if version < version_min:
return redirect(reverse('presale:event.widget.css' if hasattr(request, 'event') else 'organizer.widget.css', kwargs={
'version': version_min,
'organizer': request.organizer.slug,
'event': request.event.slug if hasattr(request, 'event') else None,
}))
version = version_min
o = getattr(request, 'event', request.organizer)
template_path = 'pretixpresale/widget_dummy.html' if version == version_max else 'pretixpresale/widget_dummy.v{}.html'.format(version)
@@ -145,7 +143,7 @@ def widget_css(request, version, **kwargs):
widget_css = f.read()
theme_css = get_theme_vars_css(o, widget=True)
css = theme_css + widget_css
css = f"/* v{version} */\n" + theme_css + widget_css
resp = FileResponse(css, content_type='text/css')
resp._csp_ignore = True
@@ -202,7 +200,7 @@ def generate_widget_js(version, lang):
code.append('})({});\n')
code = ''.join(code)
code = rJSMinFilter(content=code).output()
return code
return f"/* v{version} */\n" + code
@gzip_page
@@ -212,10 +210,7 @@ def widget_js(request, version, lang, **kwargs):
raise Http404()
if version < version_min:
return redirect(reverse('presale:widget.js', kwargs={
'version': version_min,
'lang': lang,
}))
version = version_min
cached_js = cache.get('widget_js_data_v{}_{}'.format(version, lang))
if cached_js and not settings.DEBUG:

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -542,7 +542,7 @@ class WidgetCartTest(CartTestMixin, TestCase):
@override_settings(COMPRESS_PRECOMPILERS=settings.COMPRESS_PRECOMPILERS_ORIGINAL)
def test_css_customized(self):
response = self.client.get('/%s/%s/widget/v1.css' % (self.orga.slug, self.event.slug))
response = self.client.get('/%s/%s/widget/v2.css' % (self.orga.slug, self.event.slug))
c = b"".join(response.streaming_content).decode()
assert '#8E44B3' in c
assert '#33c33c' not in c
@@ -550,7 +550,7 @@ class WidgetCartTest(CartTestMixin, TestCase):
self.orga.settings.primary_color = "#33c33c"
self.orga.cache.clear()
response = self.client.get('/%s/%s/widget/v1.css' % (self.orga.slug, self.event.slug))
response = self.client.get('/%s/%s/widget/v2.css' % (self.orga.slug, self.event.slug))
c = b"".join(response.streaming_content).decode()
assert '#8E44B3' not in c
assert '#33c33c' in c
@@ -558,18 +558,18 @@ class WidgetCartTest(CartTestMixin, TestCase):
self.event.settings.primary_color = "#34c34c"
self.event.cache.clear()
response = self.client.get('/%s/%s/widget/v1.css' % (self.orga.slug, self.event.slug))
response = self.client.get('/%s/%s/widget/v2.css' % (self.orga.slug, self.event.slug))
c = b"".join(response.streaming_content).decode()
assert '#8E44B3' not in c
assert '#33c33c' not in c
assert '#34c34c' in c
def test_js_localized(self):
response = self.client.get('/widget/v1.en.js')
response = self.client.get('/widget/v2.en.js')
c = response.content.decode()
assert '%m/%d/%Y' in c
assert '%d.%m.%Y' not in c
response = self.client.get('/widget/v1.de.js')
response = self.client.get('/widget/v2.de.js')
c = response.content.decode()
assert '%m/%d/%Y' not in c
assert '%d.%m.%Y' in c