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