--- 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