diff --git a/castle/cms/behaviors/leadimage.py b/castle/cms/behaviors/leadimage.py index 6c631cb8f..e5d8e4a8f 100644 --- a/castle/cms/behaviors/leadimage.py +++ b/castle/cms/behaviors/leadimage.py @@ -6,12 +6,14 @@ from zope.component import adapter from zope.interface import implementer from zope.interface import provider +from plone.supermodel import model +from plone.supermodel.directives import fieldset import zope.schema as schema @provider(IFormFieldProvider) -class IRequiredLeadImage(ILeadImage): +class IRequiredLeadImage(model.Schema): image = namedfile.NamedBlobImage( title=_(u'label_leadimage', default=u'Lead Image'), @@ -19,12 +21,26 @@ class IRequiredLeadImage(ILeadImage): required=True ) + alternate_image = namedfile.NamedBlobImage( + title=_(u'label_alternateleadimage', default=u'Alternate Lead Image'), + description=_(u'label_alternateleadimage', default=u'An image to be displayed in tiles that support alternate lead images.'), + required=False + ) + image_caption = schema.TextLine( title=_(u'label_leadimage_caption', default=u'Lead Image Caption'), description=_(u'help_leadimage_caption', default=u''), required=False, ) + fieldset( + 'multimedia', + label=_(u'Multimedia'), + fields=['image', + 'alternate_image', + 'image_caption'] + ) + @implementer(IRequiredLeadImage) @adapter(IDexterityContent) diff --git a/castle/cms/browser/utils.py b/castle/cms/browser/utils.py index ed36b5f37..13363fb78 100644 --- a/castle/cms/browser/utils.py +++ b/castle/cms/browser/utils.py @@ -38,6 +38,7 @@ from zope.interface import implements from zope.viewlet.interfaces import IViewlet from zope.viewlet.interfaces import IViewletManager +from plone.app.uuid.utils import uuidToCatalogBrain import json @@ -368,9 +369,19 @@ def focal_image_tag( attributes=None, focal=None, attempt_overlay=False, + use_alternate_image=False ): - # read https://github.com/jonom/jquery-focuspoint on how to calc - image_info = utils.get_image_info(brain) + if use_alternate_image and brain.alternate_image: + # we have to manually retrieve the alternate 'Image' object here + # so we can get the proper url for 'src' + uid = brain.alternate_image.reference + brain = uuidToCatalogBrain(uid) + image_info = utils.get_image_info(brain) + brain = brain.getObject() + + else: + # read https://github.com/jonom/jquery-focuspoint on how to calc + image_info = utils.get_image_info(brain) image_attributes = {} if attributes is not None: diff --git a/castle/cms/widgets.py b/castle/cms/widgets.py index deede71c1..166885c3c 100644 --- a/castle/cms/widgets.py +++ b/castle/cms/widgets.py @@ -633,6 +633,12 @@ def RequiredLeadImageFocalNamedImageFieldWidget(field, request): widget = z3c.form.widget.FieldWidget(field, FocalNamedImageWidget(request)) return widget +@adapter(getSpecification(IRequiredLeadImage['alternate_image']), ICastleLayer) +@implementer(IFieldWidget) +def AlternateLeadImageFocalNamedImageFieldWidget(field, request): + widget = z3c.form.widget.FieldWidget(field, FocalNamedImageWidget(request)) + return widget + @adapter(INamedImageField, ICastleLayer) @implementer(IFieldWidget) diff --git a/castle/cms/widgets.zcml b/castle/cms/widgets.zcml index 7d0dc8242..d929681d6 100644 --- a/castle/cms/widgets.zcml +++ b/castle/cms/widgets.zcml @@ -31,6 +31,7 @@ +