Skip to content

Commit

Permalink
Fix size code
Browse files Browse the repository at this point in the history
  • Loading branch information
dyve committed Mar 27, 2021
1 parent 89445be commit dd922f4
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 38 deletions.
27 changes: 0 additions & 27 deletions src/django_bootstrap5/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,6 @@

from django.conf import settings

from django_bootstrap5.exceptions import BootstrapError
from django_bootstrap5.text import text_value

SIZE_XS = "xs"
SIZE_SM = "sm"
SIZE_MD = "md"
SIZE_LG = "lg"
SIZES = [SIZE_SM, SIZE_MD, SIZE_LG]
DEFAULT_SIZE = SIZE_MD

BOOTSTRAP5_DEFAULTS = {
"css_url": {
"url": "https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css",
Expand Down Expand Up @@ -94,20 +84,3 @@ def get_form_renderer(**kwargs):
def get_field_renderer(**kwargs):
renderers = get_bootstrap_setting("field_renderers")
return get_renderer(renderers, **kwargs)


def parse_size(value, default=None):
"""Return size if it is valid, default size if size is empty, or throws exception."""
size = text_value(value or default)
if size not in SIZES:
valid_sizes = ", ".join(SIZES)
raise BootstrapError(f'Invalid value "{size}" for parameter "size" (valid values are {valid_sizes}).')
return size


def get_size_class(size, prefix, *, default=None, skip=None):
"""Return CSS class for size with given prefix, unless size needs to be skipped."""
size = parse_size(size, default=default)
if skip and size in list(skip):
return ""
return f"{prefix}{size}"
13 changes: 3 additions & 10 deletions src/django_bootstrap5/forms.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,11 @@
from django.forms import EmailInput, NumberInput, PasswordInput, Textarea, TextInput, URLInput
from django.utils.safestring import mark_safe

from .core import (
DEFAULT_SIZE,
SIZE_MD,
get_bootstrap_setting,
get_field_renderer,
get_form_renderer,
get_formset_renderer,
get_size_class,
)
from .core import get_bootstrap_setting, get_field_renderer, get_form_renderer, get_formset_renderer
from .css import merge_css_classes
from .exceptions import BootstrapError
from .html import render_tag
from .size import DEFAULT_SIZE, SIZE_MD, get_size_class

WRAPPER_CLASS = ""
WRAPPER_TAG = "div"
Expand Down Expand Up @@ -75,7 +68,7 @@ def render_button(
):
"""Render a button with content."""
attrs = {}
size_class = get_size_class(size, prefix="btn-", skip=SIZE_MD, default=DEFAULT_SIZE)
size_class = get_size_class(size, prefix="btn", skip=SIZE_MD, default=DEFAULT_SIZE)
classes = merge_css_classes("btn", button_class, size_class)

if button_type:
Expand Down
3 changes: 2 additions & 1 deletion src/django_bootstrap5/renderers.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,11 @@
from django.utils.html import conditional_escape, format_html, strip_tags
from django.utils.safestring import mark_safe

from .core import DEFAULT_SIZE, SIZE_MD, SIZE_XS, get_bootstrap_setting, get_size_class, parse_size
from .core import get_bootstrap_setting
from .css import merge_css_classes
from .exceptions import BootstrapError
from .forms import WRAPPER_CLASS, WRAPPER_TAG, is_widget_with_placeholder, render_field, render_form, render_label
from .size import DEFAULT_SIZE, SIZE_MD, SIZE_XS, get_size_class, parse_size
from .text import text_value
from .utils import render_template_file

Expand Down
30 changes: 30 additions & 0 deletions src/django_bootstrap5/size.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from django_bootstrap5.css import merge_css_classes
from django_bootstrap5.exceptions import BootstrapError
from django_bootstrap5.text import text_value

SIZE_XS = "xs"
SIZE_SM = "sm"
SIZE_MD = "md"
SIZE_LG = "lg"
SIZES = [SIZE_SM, SIZE_MD, SIZE_LG]
DEFAULT_SIZE = SIZE_MD


def parse_size(value, default=None):
"""Return size if it is valid, default size if size is empty, or throws exception."""
size = text_value(value or default)
if size not in SIZES:
valid_sizes = ", ".join(SIZES)
raise BootstrapError(f'Invalid value "{size}" for parameter "size" (valid values are {valid_sizes}).')
return size


def get_size_class(size, prefix, *, default=None, skip=None):
"""Return CSS class for size with given prefix, unless size needs to be skipped."""
size = parse_size(size, default=default)
if skip:
if isinstance(skip, str):
skip = merge_css_classes(skip).split(" ")
if size in skip:
return ""
return f"{prefix}-{size}"

0 comments on commit dd922f4

Please sign in to comment.