Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "django-smartbase-admin"
version = "0.2.4"
version = "0.2.5"
description = ""
authors = ["SmartBase <[email protected]>"]
readme = "README.md"
Expand Down
7 changes: 3 additions & 4 deletions src/django_smartbase_admin/admin/admin_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -59,10 +59,9 @@
SBAdminToggleWidget,
SBAdminNullBooleanSelectWidget,
SBAdminArrayWidget,
SBAdminImageWidget,
SBAdminPasswordInputWidget,
SBAdminReadOnlyPasswordHashWidget,
SBAdminHiddenWidget,
SBAdminHiddenWidget, SBAdminFilerImageWidget,
)
from django_smartbase_admin.engine.admin_base_view import (
SBAdminBaseListView,
Expand Down Expand Up @@ -103,7 +102,7 @@ class SBAdminFormFieldWidgetsMixin:
forms.TypedChoiceField: SBAdminSelectWidget,
forms.NullBooleanField: SBAdminNullBooleanSelectWidget,
SimpleArrayField: SBAdminArrayWidget,
AdminImageFormField: SBAdminImageWidget,
AdminImageFormField: SBAdminFilerImageWidget,
ReadOnlyPasswordHashWidget: SBAdminReadOnlyPasswordHashWidget,
forms.HiddenInput: SBAdminHiddenWidget,
}
Expand Down
60 changes: 57 additions & 3 deletions src/django_smartbase_admin/admin/widgets.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -499,4 +462,4 @@
.dropdown-menu {
@apply py-0;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{% extends "sb_admin/sb_admin_base.html" %}
{% load i18n %}
{% load i18n static %}

{% block additional_js %}
{{ block.super }}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{% extends 'admin/filer/widgets/admin_file.html' %}