From 90f17f8595602ec834e966c61e5cdc731ae6d975 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laur=C3=A9line=20Gu=C3=A9rin?= Date: Tue, 10 Mar 2020 16:39:04 +0100 Subject: [PATCH] assets: display assets related to cell in popup (#40223) --- .../templates/combo/manager_assets.html | 36 +------------ .../combo/manager_assets_fragment.html | 35 ++++++++++++ .../templates/combo/manager_slot_assets.html | 19 +++++++ combo/apps/assets/urls.py | 3 +- combo/apps/assets/views.py | 54 ++++++++++++++++++- combo/data/models.py | 7 ++- combo/manager/static/css/combo.manager.css | 16 +++--- .../combo/manager_edit_cell_block.html | 1 + tests/test_manager.py | 51 ++++++++++++++++++ 9 files changed, 176 insertions(+), 46 deletions(-) create mode 100644 combo/apps/assets/templates/combo/manager_assets_fragment.html create mode 100644 combo/apps/assets/templates/combo/manager_slot_assets.html diff --git a/combo/apps/assets/templates/combo/manager_assets.html b/combo/apps/assets/templates/combo/manager_assets.html index 1c8d9de6..fa80f1f7 100644 --- a/combo/apps/assets/templates/combo/manager_assets.html +++ b/combo/apps/assets/templates/combo/manager_assets.html @@ -38,41 +38,7 @@
- - - - - - - - - - - {% for asset in object_list %} - - - - - - - - {% endfor %} - -
{% trans "Name" %}{% trans "Size" %}
{{ asset.name }}{% if asset.size %}{{ asset.size|filesizeformat }}{% else %}-{% endif %}{% if asset.is_image %}{% endif %} - {% if asset.key %}{# theme asset #} - {% trans 'Overwrite' %} - {% if asset.asset %} - {% trans 'Delete' %} - {% endif %} - {% else %} - {% trans 'Overwrite' %} - {% trans 'Delete' %} - {% endif %} -
+ {% include "combo/manager_assets_fragment.html" %}
diff --git a/combo/apps/assets/templates/combo/manager_assets_fragment.html b/combo/apps/assets/templates/combo/manager_assets_fragment.html new file mode 100644 index 00000000..ccb9661c --- /dev/null +++ b/combo/apps/assets/templates/combo/manager_assets_fragment.html @@ -0,0 +1,35 @@ +{% load i18n %} + + + + + + + + + + + {% for asset in object_list %} + + + + + + + {% endfor %} + +
{% trans "Name" %}{% trans "Size" %}
{{ asset.name }}{% if asset.size %}{{ asset.size|filesizeformat }}{% else %}-{% endif %}{% if asset.is_image %}{% endif %} + {% if asset.key %}{# theme asset #} + {% trans 'Overwrite' %} + {% if asset.asset %} + {% trans 'Delete' %} + {% endif %} + {% else %} + {% trans 'Overwrite' %} + {% trans 'Delete' %} + {% endif %} +
diff --git a/combo/apps/assets/templates/combo/manager_slot_assets.html b/combo/apps/assets/templates/combo/manager_slot_assets.html new file mode 100644 index 00000000..6905430d --- /dev/null +++ b/combo/apps/assets/templates/combo/manager_slot_assets.html @@ -0,0 +1,19 @@ +{% extends "combo/manager_base.html" %} +{% load i18n %} + +{% block appbar %} +

{% trans 'Assets' %}

+{% endblock %} + +{% block breadcrumb %} +{{ block.super }} +{% trans 'Assets' %} +{% endblock %} + +{% block content %} + +
+{% include "combo/manager_assets_fragment.html" %} +
+ +{% endblock %} diff --git a/combo/apps/assets/urls.py b/combo/apps/assets/urls.py index ebdb8494..1f947898 100644 --- a/combo/apps/assets/urls.py +++ b/combo/apps/assets/urls.py @@ -23,6 +23,7 @@ from . import api_views assets_manager_urls = [ url(r'^$', views.assets, name='combo-manager-assets'), + url(r'^slots/(?P[\w_-]+)/$', views.slot_assets, name='combo-manager-slot-assets'), url(r'^delete$', views.asset_delete, name='combo-manager-asset-delete'), url(r'^overwrite/$', views.asset_overwrite, name='combo-manager-asset-overwrite'), url(r'^upload/$', views.asset_upload, name='combo-manager-asset-upload'), @@ -37,6 +38,6 @@ urlpatterns = [ url(r'^manage/assets/', decorated_includes(manager_required, include(assets_manager_urls))), - url('^api/assets/set/(?P[\w_:-]+)/$', api_views.view_set, + url(r'^api/assets/set/(?P[\w_:-]+)/$', api_views.view_set, name='api-assets-set'), ] diff --git a/combo/apps/assets/views.py b/combo/apps/assets/views.py index f9005b5e..8e04b262 100644 --- a/combo/apps/assets/views.py +++ b/combo/apps/assets/views.py @@ -20,7 +20,7 @@ import os from django.conf import settings from django.contrib import messages -from django.core.exceptions import PermissionDenied +from django.core.exceptions import ObjectDoesNotExist, PermissionDenied from django.core.files.storage import default_storage from django.core.urlresolvers import reverse, reverse_lazy from django.http import Http404, HttpResponse @@ -230,9 +230,41 @@ class AssetDelete(TemplateView): Assets(request=self.request).get_anchored_url( name=os.path.basename(img_orig))) + asset_delete = AssetDelete.as_view() +class SlotAssets(ListView): + template_name = 'combo/manager_slot_assets.html' + + def get_assets(self, cell): + asset_slots = cell.get_asset_slots() + assets = dict([(x.key, x) for x in Asset.objects.filter(key__in=asset_slots.keys())]) + for key, value in asset_slots.items(): + yield SlotAsset( + key, + name=value.get('short_label'), + asset_type=value.get('asset-type', 'image'), + asset=assets.get(key)) + + def get_queryset(self): + cell_reference = self.kwargs['cell_reference'] + try: + cell = CellBase.get_cell(cell_reference) + except ObjectDoesNotExist: + raise Http404() + + return self.get_assets(cell) + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['cell_reference'] = self.kwargs['cell_reference'] + return context + + +slot_assets = SlotAssets.as_view() + + class SlotAssetUpload(FormView): form_class = AssetUploadForm template_name = 'combo/manager_asset_upload.html' @@ -248,8 +280,18 @@ class SlotAssetUpload(FormView): return super(SlotAssetUpload, self).form_valid(form) def get_success_url(self): + if self.request.GET.get('cell_reference'): + cell_reference = self.request.GET['cell_reference'] + try: + cell = CellBase.get_cell(cell_reference) + except ObjectDoesNotExist: + pass + else: + return reverse('combo-manager-page-view', kwargs={'pk': cell.page_id}) + '#cell-' + cell_reference + return Assets(request=self.request).get_anchored_url(key=self.kwargs['key']) + slot_asset_upload = SlotAssetUpload.as_view() @@ -258,8 +300,18 @@ class SlotAssetDelete(TemplateView): def post(self, request, *args, **kwargs): Asset.objects.filter(key=kwargs['key']).delete() + if self.request.GET.get('cell_reference'): + cell_reference = self.request.GET['cell_reference'] + try: + cell = CellBase.get_cell(cell_reference) + except ObjectDoesNotExist: + pass + else: + return redirect( + reverse('combo-manager-page-view', kwargs={'pk': cell.page_id}) + '#cell-' + cell_reference) return redirect(Assets(request=self.request).get_anchored_url(key=kwargs['key'])) + slot_asset_delete = SlotAssetDelete.as_view() diff --git a/combo/data/models.py b/combo/data/models.py index 2b0158bc..da8fce5f 100644 --- a/combo/data/models.py +++ b/combo/data/models.py @@ -658,8 +658,13 @@ class CellBase(six.with_metaclass(CellMeta, models.Model)): 'label': self.get_label_for_asset(), 'suffix': suffix } + short_label = u'%(prefix)s%(suffix)s' % { + 'prefix': slot_template_data['prefix'], + 'suffix': suffix + } slots[slot_key] = { - 'label': label + 'label': label, + 'short_label': short_label, } slots[slot_key].update(slot_template_data) return slots diff --git a/combo/manager/static/css/combo.manager.css b/combo/manager/static/css/combo.manager.css index 5a31fd02..57b48d9f 100644 --- a/combo/manager/static/css/combo.manager.css +++ b/combo/manager/static/css/combo.manager.css @@ -258,23 +258,23 @@ div.navigation li.nav-up::before { width: 80%; } -#assets-browser #assets-listing table th, -#assets-browser #assets-listing table td { +#assets-listing table th, +#assets-listing table td { text-align: left; padding-left: 1ex; } -#assets-browser #assets-listing table td.image { +#assets-listing table td.image { padding: 0; text-align: center; } -#assets-browser #assets-listing table td.actions { +#assets-listing table td.actions { width: 80px; } -#assets-browser #assets-listing table td.actions a.overwrite, -#assets-browser #assets-listing table td.actions a.delete { +#assets-listing table td.actions a.overwrite, +#assets-listing table td.actions a.delete { display: inline-block; border: none; overflow: hidden; @@ -283,7 +283,7 @@ div.navigation li.nav-up::before { line-height: 30px; } -#assets-browser #assets-listing table td.actions a.delete::before { +#assets-listing table td.actions a.delete::before { text-align: center; font-family: FontAwesome; content: "\f057"; /* remove-sign */ @@ -291,7 +291,7 @@ div.navigation li.nav-up::before { width: 30px; } -#assets-browser #assets-listing table td.actions a.overwrite::before { +#assets-listing table td.actions a.overwrite::before { text-align: center; font-family: FontAwesome; content: "\f093"; /* upload */ diff --git a/combo/manager/templates/combo/manager_edit_cell_block.html b/combo/manager/templates/combo/manager_edit_cell_block.html index 337d7a38..4b716a37 100644 --- a/combo/manager/templates/combo/manager_edit_cell_block.html +++ b/combo/manager/templates/combo/manager_edit_cell_block.html @@ -17,6 +17,7 @@ {% trans 'Delete' %} | {% trans 'Visibility' %} | {% trans 'Options' %} | +{% if cell.can_have_assets %}{% trans 'Assets' %} |{% endif %} {% trans 'Close' %} {% if form %} diff --git a/tests/test_manager.py b/tests/test_manager.py index 0a76ba09..a09ae27c 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -1136,6 +1136,7 @@ def test_asset_management_search(app, admin_user): resp = resp.form.submit() assert resp.text.count('