73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
from django import forms
|
|
from django.urls import reverse_lazy
|
|
|
|
|
|
def _append_css_class(attrs, class_name: str):
|
|
"""
|
|
Django-idiomatic helper to append a CSS class without clobbering existing ones.
|
|
"""
|
|
existing = (attrs.get("class") or "").strip()
|
|
attrs["class"] = (f"{existing} {class_name}").strip() if existing else class_name
|
|
return attrs
|
|
|
|
|
|
class ChainedSelectWidget(forms.Select):
|
|
class Media:
|
|
js = ("django_nepkit/js/address-chaining.js",)
|
|
|
|
|
|
class ProvinceSelectWidget(ChainedSelectWidget):
|
|
def __init__(self, *args, **kwargs):
|
|
attrs = kwargs.get("attrs", {})
|
|
_append_css_class(attrs, "nepkit-province-select")
|
|
kwargs["attrs"] = attrs
|
|
super().__init__(*args, **kwargs)
|
|
|
|
|
|
class DistrictSelectWidget(ChainedSelectWidget):
|
|
def __init__(self, *args, **kwargs):
|
|
attrs = kwargs.get("attrs", {})
|
|
_append_css_class(attrs, "nepkit-district-select")
|
|
attrs["data-url"] = reverse_lazy("django_nepkit:district-list")
|
|
kwargs["attrs"] = attrs
|
|
super().__init__(*args, **kwargs)
|
|
|
|
|
|
class MunicipalitySelectWidget(ChainedSelectWidget):
|
|
def __init__(self, *args, **kwargs):
|
|
attrs = kwargs.get("attrs", {})
|
|
_append_css_class(attrs, "nepkit-municipality-select")
|
|
attrs["data-url"] = reverse_lazy("django_nepkit:municipality-list")
|
|
kwargs["attrs"] = attrs
|
|
super().__init__(*args, **kwargs)
|
|
|
|
|
|
class NepaliDatePickerWidget(forms.TextInput):
|
|
input_type = "text"
|
|
|
|
class Media:
|
|
css = {
|
|
"all": (
|
|
"https://unpkg.com/nepali-date-picker@2.0.2/dist/nepaliDatePicker.min.css",
|
|
)
|
|
}
|
|
js = (
|
|
"https://code.jquery.com/jquery-3.5.1.slim.min.js",
|
|
"https://unpkg.com/nepali-date-picker@2.0.2/dist/nepaliDatePicker.min.js",
|
|
"django_nepkit/js/nepali-datepicker-init.js",
|
|
)
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
attrs = kwargs.get("attrs", {})
|
|
# Ensure we don't have vDateField class which triggers Django admin calendar
|
|
classes = attrs.get("class", "")
|
|
if "vDateField" in classes:
|
|
classes = classes.replace("vDateField", "")
|
|
|
|
attrs["class"] = (classes or "").strip()
|
|
_append_css_class(attrs, "nepkit-datepicker")
|
|
attrs["autocomplete"] = "off"
|
|
attrs["placeholder"] = "YYYY-MM-DD"
|
|
kwargs["attrs"] = attrs
|
|
super().__init__(*args, **kwargs)
|