src/pyams_content/component/gallery/zmi/paragraph.py
changeset 976 5d23f030767c
parent 845 6b039f09a91c
child 989 ba512b0e74de
--- a/src/pyams_content/component/gallery/zmi/paragraph.py	Mon Sep 24 11:23:45 2018 +0200
+++ b/src/pyams_content/component/gallery/zmi/paragraph.py	Mon Sep 24 16:06:40 2018 +0200
@@ -12,41 +12,43 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
+from pyramid.interfaces import IView
+from pyramid.renderers import render
+from pyramid.view import view_config
+from transaction.interfaces import ITransactionManager
+from z3c.form import button, field
+from z3c.form.interfaces import INPUT_MODE
+from zope.interface import Interface, implementer
 
-# import interfaces
-from pyams_content.component.gallery.interfaces import IGalleryParagraph, IBaseGallery, GALLERY_PARAGRAPH_TYPE
+from pyams_content import _
+from pyams_content.component.gallery.interfaces import GALLERY_PARAGRAPH_TYPE, IGalleryParagraph
+from pyams_content.component.gallery.paragraph import Gallery
+from pyams_content.component.gallery.zmi.file import GalleryMediaAddForm
 from pyams_content.component.gallery.zmi.interfaces import IGalleryContentsView
-from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
-    PARAGRAPH_HIDDEN_FIELDS
-from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor, IParagraphContainerView
+from pyams_content.component.paragraph.interfaces import IParagraphContainer, IParagraphContainerTarget
+from pyams_content.component.paragraph.zmi import BaseParagraphAJAXAddForm, BaseParagraphAJAXEditForm, \
+    BaseParagraphAddMenu, BaseParagraphPropertiesEditForm, IParagraphEditFormButtons, ParagraphContainerTable, \
+    get_json_paragraph_refresh_event
+from pyams_content.component.paragraph.zmi.interfaces import IParagraphContainerView, IParagraphInnerEditor
+from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
+from pyams_content.shared.common.zmi import WfSharedContentPermissionMixin
+from pyams_form.form import AJAXAddForm, ajax_config
 from pyams_form.interfaces.form import IInnerForm, IInnerSubForm
 from pyams_i18n.interfaces import II18n
+from pyams_pagelet.pagelet import pagelet_config
+from pyams_skin.container import delete_container_element
 from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, IWidgetTitleViewletManager
 from pyams_skin.layer import IPyAMSLayer
-from pyramid.interfaces import IView
-from z3c.form.interfaces import INPUT_MODE
-
-# import packages
-from pyams_content.component.gallery.paragraph import Gallery
-from pyams_content.component.paragraph.zmi import BaseParagraphAJAXAddForm, BaseParagraphAJAXEditForm, \
-    BaseParagraphAddMenu, BaseParagraphPropertiesEditForm, get_json_paragraph_refresh_event, IParagraphEditFormButtons
-from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
-from pyams_content.shared.common.zmi import WfSharedContentPermissionMixin
-from pyams_form.form import ajax_config
-from pyams_pagelet.pagelet import pagelet_config
+from pyams_skin.table import get_table_id
 from pyams_skin.viewlet.toolbar import ToolbarAction
 from pyams_template.template import template_config
 from pyams_utils.adapter import adapter_config
+from pyams_utils.interfaces import ICacheKeyValue
+from pyams_utils.traversing import get_parent
 from pyams_utils.url import absolute_url
 from pyams_viewlet.viewlet import viewlet_config
 from pyams_zmi.form import AdminDialogAddForm, InnerAdminDisplayForm
-from z3c.form import field, button
-from zope.interface import implementer, Interface
-
-from pyams_content import _
 
 
 @viewlet_config(name='add-gallery.menu', context=IParagraphContainerTarget, view=IParagraphContainerView,
@@ -70,7 +72,7 @@
     legend = _("Add new gallery")
     icon_css_class = 'fa fa-fw fa-picture-o'
 
-    fields = field.Fields(IGalleryParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
+    fields = field.Fields(IGalleryParagraph).select('renderer')
     edit_permission = MANAGE_CONTENT_PERMISSION
 
     def create(self, data):
@@ -92,21 +94,11 @@
     legend = _("Edit gallery properties")
     icon_css_class = 'fa fa-fw fa-picture-o'
 
-    fields = field.Fields(IGalleryParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
+    fields = field.Fields(IGalleryParagraph).select('renderer')
     fields['renderer'].widgetFactory = RendererFieldWidget
 
     edit_permission = MANAGE_CONTENT_PERMISSION
 
-    def get_ajax_output(self, changes):
-        updated = changes.get(IBaseGallery, ())
-        if 'title' in updated:
-            return {
-                'status': 'success',
-                'events': [get_json_paragraph_refresh_event(self.context, self.request), ]
-            }
-        else:
-            return super(self.__class__, self).get_ajax_output(changes)
-
 
 @adapter_config(context=(IGalleryParagraph, IPyAMSLayer), provides=IParagraphInnerEditor)
 @implementer(IInnerForm)
@@ -149,7 +141,7 @@
 
 @viewlet_config(name='add-media.menu', context=IGalleryParagraph, view=GalleryContentsView,
                 manager=IWidgetTitleViewletManager)
-class GalleryMediaAddMenu(WfSharedContentPermissionMixin, ToolbarAction):
+class GalleryParagraphMediaAddMenu(WfSharedContentPermissionMixin, ToolbarAction):
     """Gallery media add menu"""
 
     label = _("Add media(s)")
@@ -157,3 +149,47 @@
     url = 'add-media.html'
     modal_target = True
     stop_propagation = True
+
+
+@pagelet_config(name='add-media.html', context=IGalleryParagraph, layer=IPyAMSLayer,
+                permission=MANAGE_CONTENT_PERMISSION)
+@ajax_config(name='add-media.json', context=IGalleryParagraph, layer=IPyAMSLayer, base=AJAXAddForm)
+class GalleryParagraphMediaAddForm(GalleryMediaAddForm):
+    """Gallery media add form"""
+
+    def get_ajax_output(self, changes):
+        ITransactionManager(self.context).commit()
+        medias = []
+        for media in changes:
+            medias.append(render('templates/gallery-media.pt',
+                                 {'media': media}, request=self.request))
+        output = {
+            'status': 'success',
+            'message': self.request.localizer.translate(_("Media(s) successfully added")),
+            'events': [
+                get_json_paragraph_refresh_event(self.context, self.request)
+            ],
+            'callback': 'PyAMS_content.galleries.addMediaCallback',
+            'options': {
+                'parent': '{0}::{1}'.format(get_table_id(ParagraphContainerTable,
+                                                         context=get_parent(self.context, IParagraphContainerTarget)),
+                                            ICacheKeyValue(self.context)),
+                'medias': medias
+            }
+        }
+        return output
+
+
+@view_config(name='delete-element.json', context=IGalleryParagraph, request_type=IPyAMSLayer,
+             renderer='json', xhr=True)
+def delete_media(request):
+    """Delete media from container"""
+    result = delete_container_element(request, IGalleryParagraph)
+    if result.get('status') == 'success':
+        result.update({
+            'handle_json': True,
+            'events': [
+                get_json_paragraph_refresh_event(request.context, request)
+            ]
+        })
+    return result