src/pyams_content/component/gallery/__init__.py
changeset 555 8e8a14452567
parent 501 3407e6940f6a
child 950 12ad545bc649
equal deleted inserted replaced
554:120ce09ade94 555:8e8a14452567
    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
    26 from zope.annotation.interfaces import IAnnotations
       
    27 from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectModifiedEvent, IObjectRemovedEvent
    26 from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectModifiedEvent, IObjectRemovedEvent
    28 from zope.location.interfaces import ISublocations
    27 from zope.location.interfaces import ISublocations
    29 from zope.traversing.interfaces import ITraversable
    28 from zope.traversing.interfaces import ITraversable
    30 
    29 
    31 # import packages
    30 # import packages
    32 from pyams_catalog.utils import index_object
    31 from pyams_catalog.utils import index_object
    33 from pyams_content.features.checker import BaseContentChecker
    32 from pyams_content.features.checker import BaseContentChecker
    34 from pyams_content.features.renderer import RenderedContentMixin, IContentRenderer
    33 from pyams_content.features.renderer import RenderedContentMixin, RenderersVocabulary
    35 from pyams_utils.adapter import adapter_config, ContextAdapter
    34 from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter
       
    35 from pyams_utils.factory import factory_config
    36 from pyams_utils.container import BTreeOrderedContainer
    36 from pyams_utils.container import BTreeOrderedContainer
    37 from pyams_utils.request import check_request
       
    38 from pyams_utils.traversing import get_parent
    37 from pyams_utils.traversing import get_parent
    39 from pyams_utils.vocabulary import vocabulary_config
    38 from pyams_utils.vocabulary import vocabulary_config
    40 from pyramid.events import subscriber
    39 from pyramid.events import subscriber
    41 from pyramid.threadlocal import get_current_registry
    40 from pyramid.threadlocal import get_current_registry
    42 from zope.interface import implementer
    41 from zope.interface import implementer
    43 from zope.lifecycleevent import ObjectCreatedEvent, ObjectModifiedEvent
    42 from zope.lifecycleevent import ObjectCreatedEvent, ObjectModifiedEvent
    44 from zope.location import locate
    43 from zope.location import locate
    45 from zope.schema.fieldproperty import FieldProperty
    44 from zope.schema.fieldproperty import FieldProperty
    46 from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
       
    47 
    45 
    48 from pyams_content import _
    46 from pyams_content import _
    49 
    47 
    50 
    48 
    51 #
    49 #
    52 # Galleries container
    50 # Galleries container
    53 #
    51 #
    54 
    52 
    55 @implementer(IGallery)
    53 @implementer(IGallery)
    56 class Gallery(BTreeOrderedContainer, RenderedContentMixin):
    54 @factory_config(provided=IBaseGallery)
       
    55 class Gallery(RenderedContentMixin, BTreeOrderedContainer):
    57     """Gallery persistent class"""
    56     """Gallery persistent class"""
    58 
    57 
    59     title = FieldProperty(IGallery['title'])
    58     title = FieldProperty(IGallery['title'])
    60     description = FieldProperty(IGallery['description'])
    59     description = FieldProperty(IGallery['description'])
    61     renderer = FieldProperty(IGallery['renderer'])
    60     renderer = FieldProperty(IGallery['renderer'])
    78 
    77 
    79 
    78 
    80 @adapter_config(context=IGalleryTarget, provides=IGallery)
    79 @adapter_config(context=IGalleryTarget, provides=IGallery)
    81 def gallery_factory(target):
    80 def gallery_factory(target):
    82     """Galleries container factory"""
    81     """Galleries container factory"""
    83     annotations = IAnnotations(target)
    82     return get_annotation_adapter(target, GALLERY_CONTAINER_KEY, Gallery, name='++gallery++')
    84     gallery = annotations.get(GALLERY_CONTAINER_KEY)
       
    85     if gallery is None:
       
    86         gallery = annotations[GALLERY_CONTAINER_KEY] = Gallery()
       
    87         get_current_registry().notify(ObjectCreatedEvent(gallery))
       
    88         locate(gallery, target, '++gallery++')
       
    89     return gallery
       
    90 
    83 
    91 
    84 
    92 @adapter_config(name='gallery', context=IGalleryTarget, provides=ITraversable)
    85 @adapter_config(name='gallery', context=IGalleryTarget, provides=ITraversable)
    93 class GalleryContainerNamespace(ContextAdapter):
    86 class GalleryContainerNamespace(ContextAdapter):
    94     """++gallery++ namespace traverser"""
    87     """++gallery++ namespace traverser"""
   181     gallery = IGallery(context)
   174     gallery = IGallery(context)
   182     return IContentChecker(gallery, None)
   175     return IContentChecker(gallery, None)
   183 
   176 
   184 
   177 
   185 @vocabulary_config(name=GALLERY_RENDERERS)
   178 @vocabulary_config(name=GALLERY_RENDERERS)
   186 class GalleryRendererVocabulary(SimpleVocabulary):
   179 class GalleryRendererVocabulary(RenderersVocabulary):
   187     """Gallery renderers vocabulary"""
   180     """Gallery renderers vocabulary"""
   188 
   181 
   189     def __init__(self, context=None):
   182     content_interface = IBaseGallery
   190         request = check_request()
       
   191         translate = request.localizer.translate
       
   192         registry = request.registry
       
   193         if not IBaseGallery.providedBy(context):
       
   194             context = Gallery()
       
   195         terms = [SimpleTerm(name, title=translate(adapter.label))
       
   196                  for name, adapter in sorted(registry.getAdapters((context, request), IContentRenderer),
       
   197                                              key=lambda x: x[1].weight)]
       
   198         super(GalleryRendererVocabulary, self).__init__(terms)