From 244f290075da77400a4c0b2f1a289404f9d13baa Mon Sep 17 00:00:00 2001 From: Viliam Mihalik Date: Wed, 3 Apr 2024 14:19:14 +0200 Subject: [PATCH 1/2] fix: fixed missing static in template and removed unused css --- pyproject.toml | 2 +- .../static/sb_admin/src/css/_components.css | 39 +------------------ .../sb_admin/actions/translations-detail.html | 2 +- 3 files changed, 3 insertions(+), 40 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index eed51889..431db1e3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "django-smartbase-admin" -version = "0.2.4" +version = "0.2.5" description = "" authors = ["SmartBase "] readme = "README.md" diff --git a/src/django_smartbase_admin/static/sb_admin/src/css/_components.css b/src/django_smartbase_admin/static/sb_admin/src/css/_components.css index 46301399..8efb1bb8 100644 --- a/src/django_smartbase_admin/static/sb_admin/src/css/_components.css +++ b/src/django_smartbase_admin/static/sb_admin/src/css/_components.css @@ -376,43 +376,6 @@ } } - .purchase-process-steps { - @apply flex items-start py-32 text-center flex-wrap; - >li { - @apply flex-1 text-center relative p-8 min-w-128 max-w-128; - &:before { - content: ''; - @apply block w-full border-b border-dark-200; - @apply absolute left-0 right-0 top-32; - } - &:first-child{ - &:before { - @apply w-1/2 left-auto; - } - } - &:last-child { - &:before { - @apply w-1/2 right-auto; - } - } - >span { - @apply w-48 h-48; - @apply flex-center rounded-full mx-auto relative; - @apply bg-primary text-light border-8 border-dark-100; - } - >p { - @apply mt-8 text-14; - } - &.active { - ~ li { - > span { - @apply bg-dark-200 text-dark; - } - } - } - } - } - .mermaid { &:not([data-processed="true"]) { @apply hidden; @@ -499,4 +462,4 @@ .dropdown-menu { @apply py-0; } -} +} \ No newline at end of file diff --git a/src/django_smartbase_admin/templates/sb_admin/actions/translations-detail.html b/src/django_smartbase_admin/templates/sb_admin/actions/translations-detail.html index c3fa8d83..e7ab8d1c 100644 --- a/src/django_smartbase_admin/templates/sb_admin/actions/translations-detail.html +++ b/src/django_smartbase_admin/templates/sb_admin/actions/translations-detail.html @@ -1,5 +1,5 @@ {% extends "sb_admin/sb_admin_base.html" %} -{% load i18n %} +{% load i18n static %} {% block additional_js %} {{ block.super }} From c6f4f93d9c18f173cdb2e9edbc4af89697c845d7 Mon Sep 17 00:00:00 2001 From: Viliam Mihalik Date: Wed, 17 Apr 2024 10:29:14 +0200 Subject: [PATCH 2/2] triv: preparation for SBAdminFilerImageWidget to be styled --- .../admin/admin_base.py | 7 +-- src/django_smartbase_admin/admin/widgets.py | 60 ++++++++++++++++++- .../sb_admin/widgets/filer_image_input.html | 1 + 3 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 src/django_smartbase_admin/templates/sb_admin/widgets/filer_image_input.html diff --git a/src/django_smartbase_admin/admin/admin_base.py b/src/django_smartbase_admin/admin/admin_base.py index 4e4e1c3a..00db72bc 100644 --- a/src/django_smartbase_admin/admin/admin_base.py +++ b/src/django_smartbase_admin/admin/admin_base.py @@ -16,7 +16,7 @@ from django.utils.safestring import mark_safe from django.utils.translation import gettext_lazy as _ from django_admin_inline_paginator.admin import TabularInlinePaginated -from filer.fields.image import AdminImageFormField +from filer.fields.image import AdminImageFormField, FilerImageField from nested_admin.nested import ( NestedModelAdmin, NestedTabularInline, @@ -59,10 +59,9 @@ SBAdminToggleWidget, SBAdminNullBooleanSelectWidget, SBAdminArrayWidget, - SBAdminImageWidget, SBAdminPasswordInputWidget, SBAdminReadOnlyPasswordHashWidget, - SBAdminHiddenWidget, + SBAdminHiddenWidget, SBAdminFilerImageWidget, ) from django_smartbase_admin.engine.admin_base_view import ( SBAdminBaseListView, @@ -103,7 +102,7 @@ class SBAdminFormFieldWidgetsMixin: forms.TypedChoiceField: SBAdminSelectWidget, forms.NullBooleanField: SBAdminNullBooleanSelectWidget, SimpleArrayField: SBAdminArrayWidget, - AdminImageFormField: SBAdminImageWidget, + AdminImageFormField: SBAdminFilerImageWidget, ReadOnlyPasswordHashWidget: SBAdminReadOnlyPasswordHashWidget, forms.HiddenInput: SBAdminHiddenWidget, } diff --git a/src/django_smartbase_admin/admin/widgets.py b/src/django_smartbase_admin/admin/widgets.py index afc909ba..5f0ad5e9 100644 --- a/src/django_smartbase_admin/admin/widgets.py +++ b/src/django_smartbase_admin/admin/widgets.py @@ -1,19 +1,26 @@ import json +import logging from ckeditor.widgets import CKEditorWidget from django import forms from django.contrib.admin.widgets import ( - AdminURLFieldWidget, + AdminURLFieldWidget, ForeignKeyRawIdWidget, ) from django.contrib.auth.forms import ReadOnlyPasswordHashWidget +from django.template.loader import render_to_string +from django.urls import reverse +from django.utils.http import urlencode +from django.utils.safestring import mark_safe from django.utils.translation import gettext_lazy as _ from django.views.generic.base import ContextMixin +from filer import settings as filer_settings +from filer.models import File from filer.fields.image import AdminImageWidget from django_smartbase_admin.engine.filter_widgets import ( AutocompleteFilterWidget, ) - +logger = logging.getLogger(__name__) class SBAdminBaseWidget(ContextMixin): sb_admin_widget = True @@ -286,13 +293,60 @@ class SBAdminFileWidget(SBAdminBaseWidget, forms.ClearableFileInput): input_text = _("Change file") -class SBAdminImageWidget(SBAdminBaseWidget, AdminImageWidget): +class SBAdminFilerImageWidget(SBAdminBaseWidget, AdminImageWidget): + template_name = "sb_admin/widgets/filer_image_input.html" + def __init__(self, form_field=None, *args, **kwargs): self.form_field = form_field super(AdminImageWidget, self).__init__( form_field.rel, form_field.view.admin_site ) + def render(self, name, value, attrs=None, renderer=None): + obj = self.obj_for_value(value) + css_id = attrs.get('id', 'id_image_x') + related_url = None + change_url = '' + if value: + try: + file_obj = File.objects.get(pk=value) + related_url = file_obj.logical_folder.get_admin_directory_listing_url_path() + change_url = file_obj.get_admin_change_url() + except Exception as e: + # catch exception and manage it. We can re-raise it for debugging + # purposes and/or just logging it, provided user configured + # proper logging configuration + if filer_settings.FILER_ENABLE_LOGGING: + logger.error('Error while rendering file widget: %s', e) + if filer_settings.FILER_DEBUG: + raise + if not related_url: + related_url = reverse('admin:filer-directory_listing-last') + params = self.url_parameters() + params['_pick'] = 'file' + if params: + lookup_url = '?' + urlencode(sorted(params.items())) + else: + lookup_url = '' + if 'class' not in attrs: + # The JavaScript looks for this hook. + attrs['class'] = 'vForeignKeyRawIdAdminField' + # rendering the super for ForeignKeyRawIdWidget on purpose here because + # we only need the input and none of the other stuff that + # ForeignKeyRawIdWidget adds + hidden_input = super(ForeignKeyRawIdWidget, self).render(name, value, attrs) # grandparent super + context = { + 'hidden_input': hidden_input, + 'lookup_url': '{}{}'.format(related_url, lookup_url), + 'change_url': change_url, + 'object': obj, + 'lookup_name': name, + 'id': css_id, + 'admin_icon_delete': ('admin/img/icon-deletelink.svg'), + } + html = render_to_string(self.template_name, context) + return mark_safe(html) + class SBAdminReadOnlyPasswordHashWidget(SBAdminBaseWidget, ReadOnlyPasswordHashWidget): template_name = "sb_admin/widgets/read_only_password_hash.html" diff --git a/src/django_smartbase_admin/templates/sb_admin/widgets/filer_image_input.html b/src/django_smartbase_admin/templates/sb_admin/widgets/filer_image_input.html new file mode 100644 index 00000000..c4f0699f --- /dev/null +++ b/src/django_smartbase_admin/templates/sb_admin/widgets/filer_image_input.html @@ -0,0 +1 @@ +{% extends 'admin/filer/widgets/admin_file.html' %} \ No newline at end of file