diff --git a/opentech/apply/funds/forms.py b/opentech/apply/funds/forms.py index 8c51547999823658ff3b4ec665c765c19c5976a9..a53561320d50bea70aad0e6ec8090052cc909d3e 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 198373c993c2a89ee1e841ea721bfce45670887c..86cebfc3514e86d73c3e3df8f45c5cdbc5b4e049 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 dbaf8ba228462006ed3bfa4080dfa8d9a69b03e9..d7ac9d879f2ea91801d78b718bd2e9874071f787 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 0000000000000000000000000000000000000000..f76e8c36ac730c32dc0d4d056f67562e416ab1c4 --- /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}">')