89 lines
2.7 KiB
Python
89 lines
2.7 KiB
Python
from importlib import import_module
|
|
|
|
from django.conf import settings
|
|
|
|
BOOTSTRAP5_DEFAULTS = {
|
|
"css_url": {
|
|
"href": "https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css",
|
|
"integrity": "sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3",
|
|
"crossorigin": "anonymous",
|
|
},
|
|
"javascript_url": {
|
|
"url": "https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js",
|
|
"integrity": "sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p",
|
|
"crossorigin": "anonymous",
|
|
},
|
|
"theme_url": None,
|
|
"javascript_in_head": False,
|
|
"use_i18n": False,
|
|
"horizontal_label_class": "col-md-3",
|
|
"horizontal_field_class": "col-md-9",
|
|
"set_placeholder": True,
|
|
"required_css_class": "",
|
|
"error_css_class": "is-invalid",
|
|
"success_css_class": "is-valid",
|
|
"formset_renderers": {"default": "bootstrap5.renderers.FormsetRenderer"},
|
|
"form_renderers": {"default": "bootstrap5.renderers.FormRenderer"},
|
|
"field_renderers": {
|
|
"default": "bootstrap5.renderers.FieldRenderer",
|
|
"inline": "bootstrap5.renderers.InlineFieldRenderer",
|
|
"horizontal": "bootstrap5.renderers.HorizontalFieldRenderer",
|
|
},
|
|
}
|
|
|
|
|
|
def get_bootstrap_setting(name, default=None):
|
|
"""Read a setting."""
|
|
# Start with a copy of default settings
|
|
BOOTSTRAP5 = BOOTSTRAP5_DEFAULTS.copy()
|
|
|
|
# Override with user settings from settings.py
|
|
BOOTSTRAP5.update(getattr(settings, "BOOTSTRAP5", {}))
|
|
|
|
# Update use_i18n
|
|
BOOTSTRAP5["use_i18n"] = i18n_enabled()
|
|
|
|
return BOOTSTRAP5.get(name, default)
|
|
|
|
|
|
def javascript_url():
|
|
"""Return the full url to the Bootstrap JavaScript file."""
|
|
return get_bootstrap_setting("javascript_url")
|
|
|
|
|
|
def css_url():
|
|
"""Return the full url to the Bootstrap CSS file."""
|
|
return get_bootstrap_setting("css_url")
|
|
|
|
|
|
def theme_url():
|
|
"""Return the full url to the theme CSS file."""
|
|
return get_bootstrap_setting("theme_url")
|
|
|
|
|
|
def i18n_enabled():
|
|
"""Return the projects i18n setting."""
|
|
return getattr(settings, "USE_I18N", False)
|
|
|
|
|
|
def get_renderer(renderers, **kwargs):
|
|
layout = kwargs.get("layout", "")
|
|
path = renderers.get(layout, renderers["default"])
|
|
mod, cls = path.rsplit(".", 1)
|
|
return getattr(import_module(mod), cls)
|
|
|
|
|
|
def get_formset_renderer(**kwargs):
|
|
renderers = get_bootstrap_setting("formset_renderers")
|
|
return get_renderer(renderers, **kwargs)
|
|
|
|
|
|
def get_form_renderer(**kwargs):
|
|
renderers = get_bootstrap_setting("form_renderers")
|
|
return get_renderer(renderers, **kwargs)
|
|
|
|
|
|
def get_field_renderer(**kwargs):
|
|
renderers = get_bootstrap_setting("field_renderers")
|
|
return get_renderer(renderers, **kwargs)
|