src/pyams_content/component/association/paragraph.py
changeset 437 4a4482e283df
parent 407 0ef5de2d5674
child 555 8e8a14452567
equal deleted inserted replaced
436:3b92ae4b8951 437:4a4482e283df
    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.association.interfaces import IAssociationParagraph, ASSOCIATION_PARAGRAPH_TYPE
    19 from pyams_content.component.association.interfaces import IAssociationParagraph, ASSOCIATION_PARAGRAPH_TYPE, \
       
    20     ASSOCIATION_PARAGRAPH_RENDERERS
    20 from pyams_content.component.extfile.interfaces import IExtFileContainerTarget
    21 from pyams_content.component.extfile.interfaces import IExtFileContainerTarget
    21 from pyams_content.component.links.interfaces import ILinkContainerTarget
    22 from pyams_content.component.links.interfaces import ILinkContainerTarget
    22 from pyams_content.component.paragraph.interfaces import IParagraphFactory
    23 from pyams_content.component.paragraph.interfaces import IParagraphFactory
    23 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
    24 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
       
    25 from pyams_content.features.renderer.interfaces import IContentRenderer
    24 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
    26 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
    25 
    27 
    26 # import packages
    28 # import packages
    27 from pyams_content.component.paragraph import BaseParagraph, BaseParagraphContentChecker, BaseParagraphFactory
    29 from pyams_content.component.paragraph import BaseParagraph, BaseParagraphContentChecker, BaseParagraphFactory
       
    30 from pyams_content.features.renderer import RenderedContentMixin
    28 from pyams_utils.adapter import adapter_config
    31 from pyams_utils.adapter import adapter_config
    29 from pyams_utils.registry import utility_config, get_utility
    32 from pyams_utils.registry import utility_config, get_utility
    30 from pyams_utils.request import check_request
    33 from pyams_utils.request import check_request
    31 from pyams_utils.traversing import get_parent
    34 from pyams_utils.traversing import get_parent
       
    35 from pyams_utils.vocabulary import vocabulary_config
    32 from zope.interface import implementer
    36 from zope.interface import implementer
       
    37 from zope.schema.fieldproperty import FieldProperty
       
    38 from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
    33 
    39 
    34 from pyams_content import _
    40 from pyams_content import _
    35 
    41 
    36 
    42 
    37 @implementer(IAssociationParagraph, IExtFileContainerTarget, ILinkContainerTarget)
    43 @implementer(IAssociationParagraph, IExtFileContainerTarget, ILinkContainerTarget)
    38 class AssociationParagraph(BaseParagraph):
    44 class AssociationParagraph(RenderedContentMixin, BaseParagraph):
    39     """Associations paragraph"""
    45     """Associations paragraph"""
    40 
    46 
    41     icon_class = 'fa-link'
    47     icon_class = 'fa-link'
    42     icon_hint = _("Associations paragraph")
    48     icon_hint = _("Associations paragraph")
       
    49 
       
    50     renderer = FieldProperty(IAssociationParagraph['renderer'])
    43 
    51 
    44 
    52 
    45 @utility_config(name=ASSOCIATION_PARAGRAPH_TYPE, provides=IParagraphFactory)
    53 @utility_config(name=ASSOCIATION_PARAGRAPH_TYPE, provides=IParagraphFactory)
    46 class AssociationParagraphFactory(BaseParagraphFactory):
    54 class AssociationParagraphFactory(BaseParagraphFactory):
    47     """Associations paragraph factory"""
    55     """Associations paragraph factory"""
    78                 if len(langs) == 1:
    86                 if len(langs) == 1:
    79                     output.append(translate(MISSING_VALUE).format(field=field_title))
    87                     output.append(translate(MISSING_VALUE).format(field=field_title))
    80                 else:
    88                 else:
    81                     output.append(translate(MISSING_LANG_VALUE).format(field=field_title, lang=lang))
    89                     output.append(translate(MISSING_LANG_VALUE).format(field=field_title, lang=lang))
    82         return output
    90         return output
       
    91 
       
    92 
       
    93 @vocabulary_config(name=ASSOCIATION_PARAGRAPH_RENDERERS)
       
    94 class AssociationParagraphRendererVocabulary(SimpleVocabulary):
       
    95     """Associations paragraph renderers vocabulary"""
       
    96 
       
    97     def __init__(self, context=None):
       
    98         request = check_request()
       
    99         translate = request.localizer.translate
       
   100         registry = request.registry
       
   101         if not IAssociationParagraph.providedBy(context):
       
   102             context = AssociationParagraph()
       
   103         terms = [SimpleTerm(name, title=translate(adapter.label))
       
   104                  for name, adapter in sorted(registry.getAdapters((context, request), IContentRenderer),
       
   105                                              key=lambda x: x[1].weight)]
       
   106         super(AssociationParagraphRendererVocabulary, self).__init__(terms)