Merge branch 'LQDJudge:master' into master

This commit is contained in:
pcthuoc 2024-06-22 16:38:36 +07:00 committed by GitHub
commit ff9b86ea13
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2370 changed files with 30872 additions and 13914 deletions

View file

@ -1,24 +1,49 @@
from django import forms
from django.templatetags.static import static
from django.utils.html import format_html
from django.forms.utils import flatatt
from django.utils.dateparse import parse_datetime, parse_date
class DateTimePickerWidget(forms.DateTimeInput):
template_name = "widgets/datetimepicker.html"
input_type = "datetime-local"
def get_context(self, name, value, attrs):
datetimepicker_id = "datetimepicker_{name}".format(name=name)
if attrs is None:
attrs = dict()
attrs["data-target"] = "#{id}".format(id=datetimepicker_id)
attrs["class"] = "form-control datetimepicker-input"
context = super().get_context(name, value, attrs)
context["widget"]["datetimepicker_id"] = datetimepicker_id
return context
def render(self, name, value, attrs=None, renderer=None):
if value is None:
value = ""
elif isinstance(value, str):
# Attempt to parse the string back to datetime
parsed_date = parse_datetime(value)
if parsed_date is not None:
value = parsed_date.strftime("%Y-%m-%dT%H:%M")
else:
value = ""
else:
value = value.strftime("%Y-%m-%dT%H:%M")
@property
def media(self):
css_url = "/static/datetime-picker/datetimepicker.min.css"
js_url = "/static/datetime-picker/datetimepicker.full.min.js"
return forms.Media(
js=[js_url],
css={"screen": [css_url]},
final_attrs = self.build_attrs(
attrs, {"type": self.input_type, "name": name, "value": value}
)
return format_html("<input{}>", flatatt(final_attrs))
class DatePickerWidget(forms.DateInput):
input_type = "date"
def render(self, name, value, attrs=None, renderer=None):
if value is None:
value = ""
elif isinstance(value, str):
# Attempt to parse the string back to date
parsed_date = parse_date(value)
if parsed_date is not None:
value = parsed_date.strftime("%Y-%m-%d")
else:
value = ""
else:
value = value.strftime("%Y-%m-%d")
final_attrs = self.build_attrs(
attrs, {"type": self.input_type, "name": name, "value": value}
)
return format_html("<input{}>", flatatt(final_attrs))

View file

@ -10,8 +10,8 @@ from judge.widgets.mixins import CompressorWidgetMixin
__all__ = [
"PagedownWidget",
"AdminPagedownWidget",
"MathJaxPagedownWidget",
"MathJaxAdminPagedownWidget",
"KatexPagedownWidget",
"KatexAdminPagedownWidget",
"HeavyPreviewPageDownWidget",
"HeavyPreviewAdminPageDownWidget",
]
@ -21,8 +21,8 @@ try:
except ImportError:
PagedownWidget = None
AdminPagedownWidget = None
MathJaxPagedownWidget = None
MathJaxAdminPagedownWidget = None
KatexPagedownWidget = None
KatexAdminPagedownWidget = None
HeavyPreviewPageDownWidget = None
HeavyPreviewAdminPageDownWidget = None
else:
@ -61,15 +61,19 @@ else:
}
js = ["admin/js/pagedown.js"]
class MathJaxPagedownWidget(PagedownWidget):
class KatexPagedownWidget(PagedownWidget):
class Media:
css = {
"all": ["https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css"]
}
js = [
"mathjax3_config.js",
"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js",
"katex_config.js",
"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js",
"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js",
"pagedown_math.js",
]
class MathJaxAdminPagedownWidget(AdminPagedownWidget, MathJaxPagedownWidget):
class KatexAdminPagedownWidget(AdminPagedownWidget, KatexPagedownWidget):
pass
class HeavyPreviewPageDownWidget(PagedownWidget):
@ -112,12 +116,11 @@ else:
js = ["dmmd-preview.js"]
class HeavyPreviewAdminPageDownWidget(
AdminPagedownWidget, HeavyPreviewPageDownWidget
KatexPagedownWidget, AdminPagedownWidget, HeavyPreviewPageDownWidget
):
class Media:
css = {
"all": [
"pygment-github.css",
"table.css",
"ranks.css",
"dmmd-preview.css",