Merge branch 'LQDJudge:master' into master
This commit is contained in:
commit
ff9b86ea13
2370 changed files with 30872 additions and 13914 deletions
|
@ -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))
|
||||
|
|
|
@ -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",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue