From 24b8febc2aaba0e9f80e114d14a68edd1cf0c192 Mon Sep 17 00:00:00 2001 From: Todd Dembrey <todd.dembrey@torchbox.com> Date: Fri, 22 Feb 2019 12:59:10 +0000 Subject: [PATCH] reuse the image url generation function --- opentech/apply/funds/forms.py | 18 +++++++++++++----- opentech/apply/funds/tables.py | 10 ++-------- opentech/apply/funds/widgets.py | 12 +----------- opentech/apply/utils/image.py | 11 +++++++++++ 4 files changed, 27 insertions(+), 24 deletions(-) create mode 100644 opentech/apply/utils/image.py diff --git a/opentech/apply/funds/forms.py b/opentech/apply/funds/forms.py index 8c5154799..a53561320 100644 --- a/opentech/apply/funds/forms.py +++ b/opentech/apply/funds/forms.py @@ -1,11 +1,13 @@ from django import forms -from django.utils.text import slugify +from django.utils.text import mark_safe, slugify from django.utils.translation import ugettext_lazy as _ +from django_select2.forms import Select2Widget from opentech.apply.users.models import User +from opentech.apply.utils.image import generate_image_url from .models import ApplicationSubmission, AssignedReviewers, ReviewerRole -from .widgets import Select2MultiCheckboxesWidget, Select2IconWidget +from .widgets import Select2MultiCheckboxesWidget from .workflow import get_action_mapping @@ -107,11 +109,11 @@ class UpdateReviewersForm(forms.ModelForm): self.fields[field_name] = forms.ModelChoiceField( queryset=staff_reviewers, - widget=Select2IconWidget(attrs={ - 'data-placeholder': 'Select a reviewer', 'icon': role.icon + widget=Select2Widget(attrs={ + 'data-placeholder': 'Select a reviewer', }), required=False, - label=f'{role.name} Reviewer', + label=mark_safe(self.render_icon(role.icon) + f'{role.name} Reviewer'), ) # Pre-populate form field self.fields[field_name].initial = assigned_roles.get(role) @@ -134,6 +136,12 @@ class UpdateReviewersForm(forms.ModelForm): else: self.fields.pop('reviewer_reviewers') + def render_icon(self, image): + if not image: + return '' + filter_spec = 'fill-20x20' + return generate_image_url(image, filter_spec) + def prepare_field(self, field_name, initial, excluded): field = self.fields[field_name] field.queryset = field.queryset.exclude(id__in=excluded) diff --git a/opentech/apply/funds/tables.py b/opentech/apply/funds/tables.py index 198373c99..86cebfc35 100644 --- a/opentech/apply/funds/tables.py +++ b/opentech/apply/funds/tables.py @@ -17,6 +17,7 @@ from wagtail.core.models import Page from opentech.apply.funds.models import ApplicationSubmission, Round, ScreeningStatus from opentech.apply.funds.workflow import STATUSES from opentech.apply.users.groups import STAFF_GROUP_NAME +from opentech.apply.utils.image import generate_image_url from .widgets import Select2MultiCheckboxesWidget @@ -131,18 +132,11 @@ class SummarySubmissionsTableWithRole(BaseAdminSubmissionsTable): orderable = False def render_role_icon(self, value): - from django.urls import reverse - from wagtail.images.views.serve import generate_signature - from opentech.images.models import CustomImage - if value: image = CustomImage.objects.filter(id=value).first() if image: filter_spec = 'fill-20x20' - signature = generate_signature(image.id, filter_spec) - url = reverse('wagtailimages_serve', args=(signature, image.id, filter_spec)) - url += image.file.name[len('original_images/'):] - return format_html(f'<img alt="{image.title}" height="20" width="20" src="{url}">') + return generate_image_url(image, filter_spec) return '' diff --git a/opentech/apply/funds/widgets.py b/opentech/apply/funds/widgets.py index dbaf8ba22..d7ac9d879 100644 --- a/opentech/apply/funds/widgets.py +++ b/opentech/apply/funds/widgets.py @@ -1,6 +1,6 @@ from django.contrib.staticfiles.templatetags.staticfiles import static -from django_select2.forms import Select2Widget, Select2MultipleWidget +from django_select2.forms import Select2MultipleWidget class Select2MultiCheckboxesWidget(Select2MultipleWidget): @@ -20,13 +20,3 @@ class Select2MultiCheckboxesWidget(Select2MultipleWidget): attrs = super().build_attrs(*args, **kwargs) attrs['class'] = attrs['class'].replace('django-select2', 'django-select2-checkboxes') return attrs - - -class Select2IconWidget(Select2Widget): - template_name = 'funds/widgets/icon_select2.html' - - def __init__(self, *args, **kwargs): - attrs = kwargs.get('attrs', {}) - attrs.setdefault('icon', '') - kwargs['attrs'] = attrs - super().__init__(*args, **kwargs) diff --git a/opentech/apply/utils/image.py b/opentech/apply/utils/image.py new file mode 100644 index 000000000..f76e8c36a --- /dev/null +++ b/opentech/apply/utils/image.py @@ -0,0 +1,11 @@ +from django.urls import reverse +from django.utils.html import format_html + +from wagtail.images.views.serve import generate_signature + + +def generate_image_url(image, filter_spec): + signature = generate_signature(image.id, filter_spec) + url = reverse('wagtailimages_serve', args=(signature, image.id, filter_spec)) + url += image.file.name[len('original_images/'):] + return format_html(f'<img alt="{image.title}" src="{url}">') -- GitLab