angrybeanie_wagtail/env/lib/python3.12/site-packages/wagtail/admin/widgets/datetime.py

166 lines
4.7 KiB
Python
Raw Normal View History

2025-07-25 21:32:16 +10:00
import json
from django import forms
from django.conf import settings
from django.forms import widgets
from django.utils.formats import get_format
from wagtail.admin.datetimepicker import to_datetimepicker_format
from wagtail.admin.staticfiles import versioned_static
from wagtail.telepath import register
from wagtail.widget_adapters import WidgetAdapter
DEFAULT_DATE_FORMAT = "%Y-%m-%d"
DEFAULT_DATETIME_FORMAT = "%Y-%m-%d %H:%M"
DEFAULT_TIME_FORMAT = "%H:%M"
class AdminDateInput(widgets.DateInput):
template_name = "wagtailadmin/widgets/date_input.html"
def __init__(self, attrs=None, format=None):
default_attrs = {"autocomplete": "off"}
fmt = format
if attrs:
default_attrs.update(attrs)
if fmt is None:
fmt = getattr(settings, "WAGTAIL_DATE_FORMAT", DEFAULT_DATE_FORMAT)
self.js_format = to_datetimepicker_format(fmt)
super().__init__(attrs=default_attrs, format=fmt)
def get_config(self):
return {
"dayOfWeekStart": get_format("FIRST_DAY_OF_WEEK"),
"format": self.js_format,
}
def get_context(self, name, value, attrs):
context = super().get_context(name, value, attrs)
context["widget"]["config_json"] = json.dumps(self.get_config())
return context
@property
def media(self):
return forms.Media(
js=[
versioned_static("wagtailadmin/js/date-time-chooser.js"),
]
)
class AdminDateInputAdapter(WidgetAdapter):
js_constructor = "wagtail.widgets.AdminDateInput"
def js_args(self, widget):
return [
widget.get_config(),
]
register(AdminDateInputAdapter(), AdminDateInput)
class AdminTimeInput(widgets.TimeInput):
template_name = "wagtailadmin/widgets/time_input.html"
def __init__(self, attrs=None, format=None):
default_attrs = {"autocomplete": "off"}
if attrs:
default_attrs.update(attrs)
fmt = format
if fmt is None:
fmt = getattr(settings, "WAGTAIL_TIME_FORMAT", DEFAULT_TIME_FORMAT)
self.js_format = to_datetimepicker_format(fmt)
super().__init__(attrs=default_attrs, format=fmt)
def get_config(self):
return {"format": self.js_format, "formatTime": self.js_format}
def get_context(self, name, value, attrs):
context = super().get_context(name, value, attrs)
context["widget"]["config_json"] = json.dumps(self.get_config())
return context
@property
def media(self):
return forms.Media(
js=[
versioned_static("wagtailadmin/js/date-time-chooser.js"),
]
)
class AdminTimeInputAdapter(WidgetAdapter):
js_constructor = "wagtail.widgets.AdminTimeInput"
def js_args(self, widget):
return [
widget.get_config(),
]
register(AdminTimeInputAdapter(), AdminTimeInput)
class AdminDateTimeInput(widgets.DateTimeInput):
template_name = "wagtailadmin/widgets/datetime_input.html"
def __init__(
self,
attrs=None,
format=None,
time_format=None,
js_overlay_parent_selector="body",
):
default_attrs = {"autocomplete": "off"}
fmt = format
if attrs:
default_attrs.update(attrs)
if fmt is None:
fmt = getattr(settings, "WAGTAIL_DATETIME_FORMAT", DEFAULT_DATETIME_FORMAT)
time_fmt = time_format
if time_fmt is None:
time_fmt = getattr(settings, "WAGTAIL_TIME_FORMAT", DEFAULT_TIME_FORMAT)
self.js_format = to_datetimepicker_format(fmt)
self.js_time_format = to_datetimepicker_format(time_fmt)
self.js_overlay_parent_selector = js_overlay_parent_selector
super().__init__(attrs=default_attrs, format=fmt)
def get_config(self):
return {
"dayOfWeekStart": get_format("FIRST_DAY_OF_WEEK"),
"format": self.js_format,
"formatTime": self.js_time_format,
# The parentID option actually takes a CSS selector instead of an ID
"parentID": self.js_overlay_parent_selector,
}
def get_context(self, name, value, attrs):
context = super().get_context(name, value, attrs)
context["widget"]["config_json"] = json.dumps(self.get_config())
return context
@property
def media(self):
return forms.Media(
js=[
versioned_static("wagtailadmin/js/date-time-chooser.js"),
]
)
class AdminDateTimeInputAdapter(WidgetAdapter):
js_constructor = "wagtail.widgets.AdminDateTimeInput"
def js_args(self, widget):
return [
widget.get_config(),
]
register(AdminDateTimeInputAdapter(), AdminDateTimeInput)