Skip to content
18 changes: 17 additions & 1 deletion castle/cms/behaviors/leadimage.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,41 @@
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'),
description=_(u'help_leadimage', default=u''),
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)
Expand Down
15 changes: 13 additions & 2 deletions castle/cms/browser/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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:
Expand Down
6 changes: 6 additions & 0 deletions castle/cms/widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
1 change: 1 addition & 0 deletions castle/cms/widgets.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@

<adapter factory=".widgets.LeadImageFocalNamedImageFieldWidget" />
<adapter factory=".widgets.RequiredLeadImageFocalNamedImageFieldWidget" />
<adapter factory=".widgets.AlternateLeadImageFocalNamedImageFieldWidget" />
<z3c:widgetTemplate
mode="input"
widget=".widgets.IFocalNamedImageWidget"
Expand Down