diff --git a/base/components/components.py b/base/components/components.py index 9dee4bb1..9cc72c7d 100644 --- a/base/components/components.py +++ b/base/components/components.py @@ -7,6 +7,25 @@ from base.templatetags.base_templatetags import querystring +@register("icon") +class Icon(Component): + + class Kwargs(BaseModel): + kind: Literal["heart", "bookmark"] + color: str + label: str + + template_file = "icon.html" + + def get_template_data(self, args, kwargs, slots, context): + return { + "kind": kwargs.kind, + "label": kwargs.label, + "color": kwargs.color, + "classes": "w-[18px] h-[18px]", + } + + class PaginationItem(BaseModel): kind: Literal["current", "ellipsis", "number"] text: Optional[str | int] = None diff --git a/base/components/icon.html b/base/components/icon.html new file mode 100644 index 00000000..067c9ce6 --- /dev/null +++ b/base/components/icon.html @@ -0,0 +1,5 @@ +{% if kind == 'heart' %} + +{% elif kind == 'bookmark' %} + +{% endif %} diff --git a/base/main.py b/base/main.py new file mode 100644 index 00000000..ec29a514 --- /dev/null +++ b/base/main.py @@ -0,0 +1,31 @@ +from .pagination import PAGE_VAR, Pagination + + +class ObjectList: + pagination_class = Pagination + + def __init__(self, request, model, queryset, list_per_page): + self.model = model + self.queryset = queryset + self.list_per_page = list_per_page + self.params = dict(request.GET.lists()) + if PAGE_VAR in self.params: + del self.params[PAGE_VAR] + self.result_objects = self.get_objects(request) + + def __iter__(self): + return iter(self.result_objects) + + def paginate(self, request, queryset): + pagination = self.pagination_class( + request, + self.model, + queryset, + self.list_per_page, + ) + self.pagination = pagination + return pagination.get_objects() + + def get_objects(self, request): + paginate_result = self.paginate(request, self.queryset) + return paginate_result diff --git a/cab/components/components.py b/cab/components/components.py new file mode 100644 index 00000000..2138a5e1 --- /dev/null +++ b/cab/components/components.py @@ -0,0 +1,19 @@ +from django_components import Component, register +from pydantic import BaseModel + +from base.main import ObjectList + + +@register("snippet_list") +class SnippetListComponent(Component): + + template_file = "snippet_list.html" + + class Kwargs(BaseModel): + snippet_list: ObjectList + model_config = {"arbitrary_types_allowed": True} + + def get_template_data(self, args, kwargs, slots, context): + return { + "snippet_list": kwargs.snippet_list.result_objects, + } diff --git a/cab/components/snippet_list.html b/cab/components/snippet_list.html new file mode 100644 index 00000000..a79277e9 --- /dev/null +++ b/cab/components/snippet_list.html @@ -0,0 +1,46 @@ +
+

Snippet List

+
+ {% for snippet in snippet_list %} +
+
+

{{ snippet.title }}

+

{{ snippet.description }}

+
+
    + {% for tag in snippet.tags.all %} +
  • {{ tag.name }}
  • + {% endfor %} +
+
+ + + Read More + + + + + +
+
+
+ +
+ {% endfor %} +
+
diff --git a/cab/utils.py b/cab/utils.py index 1cd8de11..34dafd87 100644 --- a/cab/utils.py +++ b/cab/utils.py @@ -7,6 +7,7 @@ from django.utils.safestring import mark_safe from markdown import markdown as markdown_func +from base.main import ObjectList from base.pagination import Pagination @@ -35,23 +36,29 @@ def object_list( hits number of objects, total """ + from cab.models import Snippet + if extra_context is None: extra_context = {} queryset = queryset._clone() model = queryset.model opts = model._meta if paginate_by: - pagination = Pagination(request, model, queryset, paginate_by) - object_list = pagination.get_objects() + if queryset.model == Snippet: + object_list = ObjectList(request, queryset.model, queryset, 15) + pagination = object_list.pagination + else: + pagination = Pagination(request, model, queryset, paginate_by) + object_list = pagination.get_objects() context = { - "%s_list" % template_object_name: object_list, + "object_list": object_list, "pagination": pagination, "hits": pagination.result_count, } else: context = { - "%s_list" % template_object_name: object_list, + "object_list": queryset, } if not allow_empty and len(queryset) == 0: raise Http404 diff --git a/djangosnippets/templates/base.html b/djangosnippets/templates/base.html index 54e937ec..2441d9f7 100644 --- a/djangosnippets/templates/base.html +++ b/djangosnippets/templates/base.html @@ -6,6 +6,9 @@ + + + {% block feeds %}{% endblock %} @@ -35,7 +38,7 @@ -
+
{% block secondary_nav %}