--- a/src/pyams_content/component/links/zmi/__init__.py Wed Sep 25 09:47:48 2019 +0200
+++ b/src/pyams_content/component/links/zmi/__init__.py Wed Sep 25 09:50:05 2019 +0200
@@ -10,41 +10,50 @@
# FOR A PARTICULAR PURPOSE.
#
-__docformat__ = 'restructuredtext'
-
from z3c.form import field
from z3c.form.browser.checkbox import SingleCheckBoxFieldWidget
-from zope.interface import implementer
+from zope.interface import Interface, implementer
-from pyams_content import _
from pyams_content.component.association.interfaces import IAssociationContainer
-from pyams_content.component.association.zmi import AssociationItemAJAXAddForm, AssociationItemAJAXEditForm
+from pyams_content.component.association.zmi import AssociationItemAJAXAddForm, \
+ AssociationItemAJAXEditForm
from pyams_content.component.association.zmi.interfaces import IAssociationsView
-from pyams_content.component.links import ExternalLink, InternalLink, MailtoLink
-from pyams_content.component.links.interfaces import IExternalLink, IInternalLink, ILinkContainerTarget, IMailtoLink
+from pyams_content.component.links import ExternalLink, IInternalLinkCustomInfo, InternalLink, \
+ MailtoLink
+from pyams_content.component.links.interfaces import ICustomInternalLinkTarget, IExternalLink, \
+ IInternalLink, ILinkContainerTarget, IMailtoLink
from pyams_content.component.paragraph.zmi import get_json_paragraph_markers_refresh_event
from pyams_content.component.paragraph.zmi.container import ParagraphContainerCounterBase
-from pyams_content.component.paragraph.zmi.interfaces import IParagraphContainerTable, IParagraphTitleToolbar
+from pyams_content.component.paragraph.zmi.interfaces import IParagraphContainerTable, \
+ IParagraphTitleToolbar
from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
from pyams_content.reference.pictograms.zmi.widget import PictogramSelectFieldWidget
from pyams_form.form import ajax_config
+from pyams_form.interfaces.form import IInnerSubForm
from pyams_form.security import ProtectedFormObjectMixin
from pyams_pagelet.pagelet import pagelet_config
from pyams_skin.interfaces.viewlet import IToolbarAddingMenu
from pyams_skin.layer import IPyAMSLayer
from pyams_skin.viewlet.toolbar import ToolbarMenuItem
+from pyams_utils.adapter import adapter_config
from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
from pyams_viewlet.viewlet import viewlet_config
-from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm
+from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm, InnerAdminEditForm
from pyams_zmi.interfaces import IPropertiesEditForm
+__docformat__ = 'restructuredtext'
+
+from pyams_content import _
+
+
#
# Internal links views
#
-@viewlet_config(name='internal-links', context=ILinkContainerTarget, layer=IPyAMSLayer, view=IParagraphContainerTable,
- manager=IParagraphTitleToolbar, permission=VIEW_SYSTEM_PERMISSION, weight=10)
+@viewlet_config(name='internal-links', context=ILinkContainerTarget, layer=IPyAMSLayer,
+ view=IParagraphContainerTable, manager=IParagraphTitleToolbar,
+ permission=VIEW_SYSTEM_PERMISSION, weight=10)
class InternalLinksCounter(ParagraphContainerCounterBase):
"""Internal links count column"""
@@ -61,8 +70,8 @@
if IInternalLink.providedBy(file)])
-@viewlet_config(name='add-internal-link.menu', context=ILinkContainerTarget, view=IAssociationsView,
- layer=IPyAMSLayer, manager=IToolbarAddingMenu, weight=50)
+@viewlet_config(name='add-internal-link.menu', context=ILinkContainerTarget,
+ view=IAssociationsView, layer=IPyAMSLayer, manager=IToolbarAddingMenu, weight=50)
class InternalLinkAddMenu(ProtectedFormObjectMixin, ToolbarMenuItem):
"""Internal link add menu"""
@@ -83,7 +92,8 @@
legend = _("Add new internal link")
icon_css_class = 'fa fa-fw fa-external-link-square fa-rotate-90'
- fields = field.Fields(IInternalLink).select('reference', 'force_canonical_url', 'title', 'description',
+ fields = field.Fields(IInternalLink).select('reference', 'force_canonical_url', 'title',
+ 'description',
'pictogram_name')
fields['force_canonical_url'].widgetFactory = SingleCheckBoxFieldWidget
fields['pictogram_name'].widgetFactory = PictogramSelectFieldWidget
@@ -99,12 +109,14 @@
def get_ajax_output(self, changes):
output = super(self.__class__, self).get_ajax_output(changes)
if output:
- output.setdefault('events', []).append(get_json_paragraph_markers_refresh_event(self.context, self.request,
- self, InternalLinksCounter))
+ output.setdefault('events', []).append(
+ get_json_paragraph_markers_refresh_event(self.context, self.request,
+ self, InternalLinksCounter))
return output
-@pagelet_config(name='properties.html', context=IInternalLink, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
+@pagelet_config(name='properties.html', context=IInternalLink, layer=IPyAMSLayer,
+ permission=VIEW_SYSTEM_PERMISSION)
@ajax_config(name='properties.json', context=IInternalLink, layer=IPyAMSLayer,
permission=MANAGE_CONTENT_PERMISSION, base=AssociationItemAJAXEditForm)
@implementer(IPropertiesEditForm)
@@ -117,7 +129,8 @@
icon_css_class = 'fa fa-fw fa-external-link-square fa-rotate-90'
dialog_class = 'modal-large'
- fields = field.Fields(IInternalLink).select('reference', 'force_canonical_url', 'title', 'description',
+ fields = field.Fields(IInternalLink).select('reference', 'force_canonical_url', 'title',
+ 'description',
'pictogram_name')
fields['force_canonical_url'].widgetFactory = SingleCheckBoxFieldWidget
fields['pictogram_name'].widgetFactory = PictogramSelectFieldWidget
@@ -131,12 +144,42 @@
return super(self.__class__, self).get_ajax_output(changes)
+@adapter_config(name='custom',
+ context=(ICustomInternalLinkTarget, IPyAMSLayer, InternalLinkPropertiesEditForm),
+ provides=IInnerSubForm)
+class CustomInternalLinkPropertiesEditForm(InnerAdminEditForm):
+ """Custom internal link properties edit form"""
+
+ prefix = 'custom_properties.'
+
+ css_class = 'form-group'
+ padding_class = ''
+
+ legend = _("Custom target properties")
+ fieldset_class = 'bordered'
+
+ @property
+ def fields(self):
+ info = IInternalLinkCustomInfo(self.context, None)
+ if info is not None:
+ return field.Fields(info.properties_interface).omit('properties_interface')
+ return field.Fields(Interface)
+
+ weight = 1
+
+ def render(self):
+ if not self.fields:
+ return ''
+ return super(CustomInternalLinkPropertiesEditForm, self).render()
+
+
#
# External links views
#
-@viewlet_config(name='external-links', context=ILinkContainerTarget, layer=IPyAMSLayer, view=IParagraphContainerTable,
- manager=IParagraphTitleToolbar, permission=VIEW_SYSTEM_PERMISSION, weight=11)
+@viewlet_config(name='external-links', context=ILinkContainerTarget, layer=IPyAMSLayer,
+ view=IParagraphContainerTable, manager=IParagraphTitleToolbar,
+ permission=VIEW_SYSTEM_PERMISSION, weight=11)
class ExternalLinksCounter(ParagraphContainerCounterBase):
"""External links count column"""
@@ -153,8 +196,8 @@
if IExternalLink.providedBy(file)])
-@viewlet_config(name='add-external-link.menu', context=ILinkContainerTarget, view=IAssociationsView,
- layer=IPyAMSLayer, manager=IToolbarAddingMenu, weight=51)
+@viewlet_config(name='add-external-link.menu', context=ILinkContainerTarget,
+ view=IAssociationsView, layer=IPyAMSLayer, manager=IToolbarAddingMenu, weight=51)
class ExternalLinkAddMenu(ProtectedFormObjectMixin, ToolbarMenuItem):
"""External link add menu"""
@@ -175,7 +218,8 @@
legend = _("Add new external link")
icon_css_class = 'fa fa-fw fa-external-link'
- fields = field.Fields(IExternalLink).select('url', 'title', 'description', 'pictogram_name', 'language')
+ fields = field.Fields(IExternalLink).select('url', 'title', 'description', 'pictogram_name',
+ 'language')
fields['pictogram_name'].widgetFactory = PictogramSelectFieldWidget
edit_permission = MANAGE_CONTENT_PERMISSION
@@ -189,12 +233,14 @@
def get_ajax_output(self, changes):
output = super(self.__class__, self).get_ajax_output(changes)
if output:
- output.setdefault('events', []).append(get_json_paragraph_markers_refresh_event(self.context, self.request,
- self, ExternalLinksCounter))
+ output.setdefault('events', []).append(
+ get_json_paragraph_markers_refresh_event(self.context, self.request,
+ self, ExternalLinksCounter))
return output
-@pagelet_config(name='properties.html', context=IExternalLink, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
+@pagelet_config(name='properties.html', context=IExternalLink, layer=IPyAMSLayer,
+ permission=VIEW_SYSTEM_PERMISSION)
@ajax_config(name='properties.json', context=IExternalLink, layer=IPyAMSLayer,
permission=MANAGE_CONTENT_PERMISSION, base=AssociationItemAJAXEditForm)
@implementer(IPropertiesEditForm)
@@ -207,7 +253,8 @@
icon_css_class = 'fa fa-fw fa-external-link'
dialog_class = 'modal-large'
- fields = field.Fields(IExternalLink).select('url', 'title', 'description', 'pictogram_name', 'language')
+ fields = field.Fields(IExternalLink).select('url', 'title', 'description', 'pictogram_name',
+ 'language')
fields['pictogram_name'].widgetFactory = PictogramSelectFieldWidget
edit_permission = None # defined by IFormContextPermissionChecker adapter
@@ -223,8 +270,9 @@
# Mailto links views
#
-@viewlet_config(name='mailto-links', context=ILinkContainerTarget, layer=IPyAMSLayer, view=IParagraphContainerTable,
- manager=IParagraphTitleToolbar, permission=VIEW_SYSTEM_PERMISSION, weight=12)
+@viewlet_config(name='mailto-links', context=ILinkContainerTarget, layer=IPyAMSLayer,
+ view=IParagraphContainerTable, manager=IParagraphTitleToolbar,
+ permission=VIEW_SYSTEM_PERMISSION, weight=12)
class MailtoLinksCounter(ParagraphContainerCounterBase):
"""Mailto links count column"""
@@ -263,7 +311,8 @@
legend = _("Add new mailto link")
icon_css_class = 'fa fa-fw fa-envelope-o'
- fields = field.Fields(IMailtoLink).select('address', 'address_name', 'title', 'description', 'pictogram_name')
+ fields = field.Fields(IMailtoLink).select('address', 'address_name', 'title', 'description',
+ 'pictogram_name')
fields['pictogram_name'].widgetFactory = PictogramSelectFieldWidget
edit_permission = MANAGE_CONTENT_PERMISSION
@@ -277,12 +326,14 @@
def get_ajax_output(self, changes):
output = super(self.__class__, self).get_ajax_output(changes)
if output:
- output.setdefault('events', []).append(get_json_paragraph_markers_refresh_event(self.context, self.request,
- self, MailtoLinksCounter))
+ output.setdefault('events', []).append(
+ get_json_paragraph_markers_refresh_event(self.context, self.request,
+ self, MailtoLinksCounter))
return output
-@pagelet_config(name='properties.html', context=IMailtoLink, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
+@pagelet_config(name='properties.html', context=IMailtoLink, layer=IPyAMSLayer,
+ permission=VIEW_SYSTEM_PERMISSION)
@ajax_config(name='properties.json', context=IMailtoLink, layer=IPyAMSLayer,
permission=MANAGE_CONTENT_PERMISSION, base=AssociationItemAJAXEditForm)
@implementer(IPropertiesEditForm)
@@ -294,7 +345,8 @@
legend = _("Edit mailto link properties")
icon_css_class = 'fa fa-fw fa-envelope-o'
- fields = field.Fields(IMailtoLink).select('address', 'address_name', 'title', 'description', 'pictogram_name')
+ fields = field.Fields(IMailtoLink).select('address', 'address_name', 'title', 'description',
+ 'pictogram_name')
fields['pictogram_name'].widgetFactory = PictogramSelectFieldWidget
edit_permission = None # defined by IFormContextPermissionChecker adapter