src/pyams_content/component/gallery/__init__.py
changeset 395 2a39b333a585
parent 363 86d1a240d4dc
child 426 ad309e5090bd
equal deleted inserted replaced
394:1ebcb03e9bff 395:2a39b333a585
    14 
    14 
    15 
    15 
    16 # import standard library
    16 # import standard library
    17 
    17 
    18 # import interfaces
    18 # import interfaces
    19 from pyams_content.component.gallery.interfaces import IGallery, IGalleryTarget, \
    19 from pyams_content.component.gallery.interfaces import IBaseGallery, IGallery, IGalleryTarget, \
    20     GALLERY_CONTAINER_KEY, IGalleryRenderer
    20     GALLERY_CONTAINER_KEY
    21 from pyams_content.component.paragraph import IBaseParagraph
    21 from pyams_content.component.paragraph import IBaseParagraph
    22 from pyams_content.features.checker.interfaces import IContentChecker
    22 from pyams_content.features.checker.interfaces import IContentChecker
    23 from pyams_content.shared.common.interfaces import IWfSharedContent
    23 from pyams_content.shared.common.interfaces import IWfSharedContent
    24 from pyams_form.interfaces.form import IFormContextPermissionChecker
    24 from pyams_form.interfaces.form import IFormContextPermissionChecker
    25 from pyams_i18n.interfaces import II18n
    25 from pyams_i18n.interfaces import II18n
    29 from zope.traversing.interfaces import ITraversable
    29 from zope.traversing.interfaces import ITraversable
    30 
    30 
    31 # import packages
    31 # import packages
    32 from pyams_catalog.utils import index_object
    32 from pyams_catalog.utils import index_object
    33 from pyams_content.features.checker import BaseContentChecker
    33 from pyams_content.features.checker import BaseContentChecker
       
    34 from pyams_content.features.renderer import RenderedContentMixin
    34 from pyams_utils.adapter import adapter_config, ContextAdapter
    35 from pyams_utils.adapter import adapter_config, ContextAdapter
    35 from pyams_utils.container import BTreeOrderedContainer
    36 from pyams_utils.container import BTreeOrderedContainer
    36 from pyams_utils.request import check_request
       
    37 from pyams_utils.traversing import get_parent
    37 from pyams_utils.traversing import get_parent
    38 from pyams_utils.vocabulary import vocabulary_config
       
    39 from pyramid.events import subscriber
    38 from pyramid.events import subscriber
    40 from pyramid.threadlocal import get_current_registry
    39 from pyramid.threadlocal import get_current_registry
    41 from zope.interface import implementer
    40 from zope.interface import implementer
    42 from zope.lifecycleevent import ObjectCreatedEvent, ObjectModifiedEvent
    41 from zope.lifecycleevent import ObjectCreatedEvent, ObjectModifiedEvent
    43 from zope.location import locate
    42 from zope.location import locate
    44 from zope.schema.fieldproperty import FieldProperty
    43 from zope.schema.fieldproperty import FieldProperty
    45 from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
       
    46 
    44 
    47 from pyams_content import _
    45 from pyams_content import _
    48 
    46 
    49 
    47 
    50 #
    48 #
    51 # Galleries container
    49 # Galleries container
    52 #
    50 #
    53 
    51 
    54 @implementer(IGallery)
    52 @implementer(IGallery)
    55 class Gallery(BTreeOrderedContainer):
    53 class Gallery(BTreeOrderedContainer, RenderedContentMixin):
    56     """Gallery persistent class"""
    54     """Gallery persistent class"""
    57 
    55 
    58     title = FieldProperty(IGallery['title'])
    56     title = FieldProperty(IGallery['title'])
    59     description = FieldProperty(IGallery['description'])
    57     description = FieldProperty(IGallery['description'])
    60     renderer = FieldProperty(IGallery['renderer'])
    58     renderer = FieldProperty(IGallery['renderer'])
   177 
   175 
   178 @adapter_config(name='gallery', context=IGalleryTarget, provides=IContentChecker)
   176 @adapter_config(name='gallery', context=IGalleryTarget, provides=IContentChecker)
   179 def GalleryTargetContentChecker(context):
   177 def GalleryTargetContentChecker(context):
   180     gallery = IGallery(context)
   178     gallery = IGallery(context)
   181     return IContentChecker(gallery, None)
   179     return IContentChecker(gallery, None)
   182 
       
   183 
       
   184 @vocabulary_config(name='PyAMS gallery renderers')
       
   185 class GalleryRendererVocabulary(SimpleVocabulary):
       
   186     """Gallery renderer utilities vocabulary"""
       
   187 
       
   188     def __init__(self, context=None):
       
   189         request = check_request()
       
   190         translate = request.localizer.translate
       
   191         registry = request.registry
       
   192         context = Gallery()
       
   193         terms = [SimpleTerm(name, title=translate(adapter.label))
       
   194                  for name, adapter in sorted(registry.getAdapters((context, request), IGalleryRenderer),
       
   195                                              key=lambda x: x[1].weight)]
       
   196         super(GalleryRendererVocabulary, self).__init__(terms)