NDOJ/judge/widgets/mixins.py
2020-01-21 15:35:58 +09:00

47 lines
1.4 KiB
Python

from textwrap import dedent
from django import forms
from django.conf import settings
from django.template import Context, Template
from lxml import html
class CompressorWidgetMixin(object):
__template_css = dedent('''\
{% compress css %}
{{ media.css }}
{% endcompress %}
''')
__template_js = dedent('''\
{% compress js %}
{{ media.js }}
{% endcompress %}
''')
__templates = {
(False, False): Template(''),
(True, False): Template('{% load compress %}' + __template_css),
(False, True): Template('{% load compress %}' + __template_js),
(True, True): Template('{% load compress %}' + __template_js + __template_css),
}
compress_css = False
compress_js = False
try:
import compressor
except ImportError:
pass
else:
if getattr(settings, 'COMPRESS_ENABLED', not settings.DEBUG):
@property
def media(self):
media = super().media
template = self.__templates[self.compress_css, self.compress_js]
result = html.fromstring(template.render(Context({'media': media})))
return forms.Media(
css={'all': [result.find('.//link').get('href')]} if self.compress_css else media._css,
js=[result.find('.//script').get('src')] if self.compress_js else media._js,
)