mirror of
https://github.com/pretix/pretix.git
synced 2026-05-07 15:34:02 +00:00
Added runtime SASS compliation and color settings
This commit is contained in:
@@ -5,4 +5,8 @@ class PretixPresaleConfig(AppConfig):
|
||||
name = 'pretix.presale'
|
||||
label = 'pretixpresale'
|
||||
|
||||
def ready(self):
|
||||
from . import style # noqa
|
||||
|
||||
|
||||
default_app_config = 'pretix.presale.PretixPresaleConfig'
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
from django.conf import settings
|
||||
from django.core.files.storage import default_storage
|
||||
from django.core.urlresolvers import Resolver404, resolve
|
||||
|
||||
from .signals import footer_link, html_head
|
||||
@@ -16,6 +17,7 @@ def contextprocessor(request):
|
||||
return {}
|
||||
|
||||
ctx = {
|
||||
'css_file': None
|
||||
}
|
||||
_html_head = []
|
||||
_footer = []
|
||||
@@ -24,6 +26,10 @@ def contextprocessor(request):
|
||||
_html_head.append(response)
|
||||
for receiver, response in footer_link.send(request.event, request=request):
|
||||
_footer.append(response)
|
||||
|
||||
if request.event.settings.presale_css_file:
|
||||
ctx['css_file'] = default_storage.url(request.event.settings.presale_css_file)
|
||||
|
||||
ctx['html_head'] = "".join(_html_head)
|
||||
ctx['footer'] = _footer
|
||||
ctx['site_url'] = settings.SITE_URL
|
||||
|
||||
0
src/pretix/presale/management/__init__.py
Normal file
0
src/pretix/presale/management/__init__.py
Normal file
0
src/pretix/presale/management/commands/__init__.py
Normal file
0
src/pretix/presale/management/commands/__init__.py
Normal file
13
src/pretix/presale/management/commands/updatestyles.py
Normal file
13
src/pretix/presale/management/commands/updatestyles.py
Normal file
@@ -0,0 +1,13 @@
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
from pretix.base.models import EventSetting
|
||||
|
||||
from ...style import regenerate_css
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = "Re-generate all custom stylesheets"
|
||||
|
||||
def handle(self, *args, **options):
|
||||
for es in EventSetting.objects.filter(key="presale_css_file"):
|
||||
regenerate_css(es.object_id)
|
||||
47
src/pretix/presale/style.py
Normal file
47
src/pretix/presale/style.py
Normal file
@@ -0,0 +1,47 @@
|
||||
import hashlib
|
||||
import logging
|
||||
import os
|
||||
|
||||
import django_libsass
|
||||
import sass
|
||||
from django.conf import settings
|
||||
from django.core.files.base import ContentFile
|
||||
from django.core.files.storage import default_storage
|
||||
|
||||
from pretix.base.models import Event
|
||||
|
||||
logger = logging.getLogger('pretix.presale.style')
|
||||
|
||||
|
||||
def regenerate_css(event_id: int):
|
||||
event = Event.objects.select_related('organizer').get(pk=event_id)
|
||||
sassdir = os.path.join(settings.STATIC_ROOT, 'pretixpresale/scss')
|
||||
|
||||
sassrules = [
|
||||
'$brand-primary: {};'.format(event.settings.get('primary_color')),
|
||||
'@import "main.scss";',
|
||||
]
|
||||
|
||||
css = sass.compile(
|
||||
string="\n".join(sassrules),
|
||||
include_paths=[sassdir], output_style='compressed',
|
||||
custom_functions=django_libsass.CUSTOM_FUNCTIONS
|
||||
)
|
||||
checksum = hashlib.sha1(css.encode('utf-8')).hexdigest()
|
||||
fname = '{}/{}/presale.{}.css'.format(
|
||||
event.organizer.slug, event.slug, checksum[:16]
|
||||
)
|
||||
|
||||
if event.settings.get('presale_css_checksum', '') != checksum:
|
||||
newname = default_storage.save(fname, ContentFile(css))
|
||||
event.settings.set('presale_css_file', newname)
|
||||
event.settings.set('presale_css_checksum', checksum)
|
||||
|
||||
|
||||
if settings.HAS_CELERY:
|
||||
from pretix.celery import app
|
||||
|
||||
regenerate_css_task = app.task(regenerate_css)
|
||||
|
||||
def regenerate_css(*args, **kwargs):
|
||||
regenerate_css_task.apply_async(args=args, kwargs=kwargs)
|
||||
@@ -7,8 +7,14 @@
|
||||
<title>{% block thetitle %}{% endblock %}</title>
|
||||
{% compress css %}
|
||||
<link rel="stylesheet" type="text/css" href="{% static "lightbox/css/lightbox.css" %}" />
|
||||
<link rel="stylesheet" type="text/x-scss" href="{% static "pretixpresale/scss/main.scss" %}" />
|
||||
{% endcompress %}
|
||||
{% if css_file %}
|
||||
<link rel="stylesheet" type="text/css" href="{{ css_file }}"/>
|
||||
{% else %}
|
||||
{% compress css %}
|
||||
<link rel="stylesheet" type="text/x-scss" href="{% static "pretixpresale/scss/main.scss" %}"/>
|
||||
{% endcompress %}
|
||||
{% endif %}
|
||||
<script type="text/javascript" src="{% url 'javascript-catalog' %}"></script>
|
||||
{% compress js %}
|
||||
<script type="text/javascript" src="{% static "jquery/js/jquery-2.1.1.min.js" %}"></script>
|
||||
|
||||
Reference in New Issue
Block a user