--- a/src/pyams_content/component/paragraph/zmi/pictogram.py Mon Jun 04 15:00:16 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/pictogram.py Mon Jun 04 16:43:56 2018 +0200
@@ -23,13 +23,15 @@
from pyams_content.component.paragraph.zmi import IParagraphContainerView, IParagraphEditFormButtons
from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor
from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
+from pyams_content.reference.pictograms.interfaces import IPictogramTable
from pyams_content.shared.common import IWfSharedContent
from pyams_form.interfaces.form import IInnerForm, IInnerSubForm
from pyams_i18n.interfaces import II18n
from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, IWidgetTitleViewletManager
from pyams_skin.layer import IPyAMSLayer
+from pyams_utils.interfaces.data import IObjectData
from pyams_zmi.interfaces import IPropertiesEditForm
-from z3c.form.interfaces import INPUT_MODE
+from z3c.form.interfaces import INPUT_MODE, IDataExtractedEvent
from z3c.table.interfaces import IValues, IColumn
# import packages
@@ -48,6 +50,7 @@
from pyams_skin.table import BaseTable, SorterColumn, I18nColumn, TrashColumn, VisibilitySwitcherColumn
from pyams_skin.viewlet.toolbar import ToolbarAction
from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter
+from pyams_utils.registry import query_utility
from pyams_utils.text import get_text_start
from pyams_utils.traversing import get_parent
from pyams_utils.url import absolute_url
@@ -55,10 +58,11 @@
from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm
from pyams_zmi.zmi.table import InnerTableView
from pyramid.decorator import reify
+from pyramid.events import subscriber
from pyramid.view import view_config
from z3c.form import field, button
from z3c.table.column import GetAttrColumn
-from zope.interface import implementer, Interface
+from zope.interface import implementer, alsoProvides, Interface, Invalid
from pyams_content import _
@@ -333,6 +337,22 @@
def updateWidgets(self, prefix=None):
super(PictogramAddForm, self).updateWidgets(prefix)
+ if 'pictogram_name' in self.widgets:
+ pictograms = query_utility(IPictogramTable)
+ if pictograms is not None:
+ label_id = '{0}_pictogram_label'.format(self.id)
+ widget = self.widgets['pictogram_name']
+ widget.after_widget_notice = '<span id="{0}" class="text-info">{1}</span>'.format(
+ label_id,
+ self.request.localizer.translate(_("Default header: --")))
+ widget.object_data = {
+ 'ams-change-handler': 'MyAMS.helpers.select2ChangeHelper',
+ 'ams-stop-propagation': 'true',
+ 'ams-select2-helper-type': 'html',
+ 'ams-select2-helper-url': absolute_url(pictograms, self.request, 'get-pictogram-header.html'),
+ 'ams-select2-helper-target': '#{0}'.format(label_id)
+ }
+ alsoProvides(widget, IObjectData)
if 'body' in self.widgets:
self.widgets['body'].widget_css_class = 'textarea height-100'
@@ -356,6 +376,14 @@
}
+@subscriber(IDataExtractedEvent, form_selector=PictogramAddForm)
+def handle_pictogram_add_form_data_extraction(event):
+ """Handle pictogram add form data extraction"""
+ data = event.data
+ if not data.get('pictogram_name'):
+ event.form.widgets.errors += (Invalid(_("You must select a pictogram!")), )
+
+
@pagelet_config(name='properties.html', context=IPictogramItem, layer=IPyAMSLayer, permission=MANAGE_CONTENT_PERMISSION)
class PictogramPropertiesEditForm(AdminDialogEditForm):
"""Pictogram properties edit form"""
@@ -371,6 +399,28 @@
def updateWidgets(self, prefix=None):
super(PictogramPropertiesEditForm, self).updateWidgets(prefix)
+ if 'pictogram_name' in self.widgets:
+ pictograms = query_utility(IPictogramTable)
+ if pictograms is not None:
+ pictogram = pictograms.get(self.context.pictogram_name)
+ label_id = '{0}_pictogram_label'.format(self.id)
+ widget = self.widgets['pictogram_name']
+ widget.required = True
+ if pictogram is None:
+ widget.after_widget_notice = '<span id="{0}" class="text-info">{1}</span>'.format(label_id, '--')
+ else:
+ widget.after_widget_notice = '<span id="{0}" class="text-info">{1}</span>'.format(
+ label_id,
+ self.request.localizer.translate(_("Default header: {0}")).format(
+ II18n(pictogram).query_attribute('header', request=self.request) or '--'))
+ widget.object_data = {
+ 'ams-change-handler': 'MyAMS.helpers.select2ChangeHelper',
+ 'ams-stop-propagation': 'true',
+ 'ams-select2-helper-type': 'html',
+ 'ams-select2-helper-url': absolute_url(pictograms, self.request, 'get-pictogram-header.html'),
+ 'ams-select2-helper-target': '#{0}'.format(label_id)
+ }
+ alsoProvides(widget, IObjectData)
if 'body' in self.widgets:
self.widgets['body'].widget_css_class = 'textarea height-100'
@@ -388,3 +438,11 @@
output.setdefault('events', []).append(
get_json_table_row_refresh_event(target, self.request, PictogramsTable, self.context))
return output
+
+
+@subscriber(IDataExtractedEvent, form_selector=PictogramPropertiesEditForm)
+def handle_pictogram_edit_form_data_extraction(event):
+ """Handle pictogram edit form data extraction"""
+ data = event.data
+ if not data.get('pictogram_name'):
+ event.form.widgets.errors += (Invalid(_("You must select a pictogram!")), )