src/pyams_content/component/paragraph/header.py
changeset 420 edf9ce1b3f69
parent 408 e1d40ed27899
child 424 e59436858d4c
equal deleted inserted replaced
419:824fef808845 420:edf9ce1b3f69
    17 
    17 
    18 # import interfaces
    18 # import interfaces
    19 from pyams_content.component.paragraph.interfaces import IParagraphFactory
    19 from pyams_content.component.paragraph.interfaces import IParagraphFactory
    20 from pyams_content.component.paragraph.interfaces.header import IHeaderParagraph, HEADER_PARAGRAPH_TYPE
    20 from pyams_content.component.paragraph.interfaces.header import IHeaderParagraph, HEADER_PARAGRAPH_TYPE
    21 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
    21 from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
       
    22 from pyams_content.features.renderer.interfaces import IContentRenderer
    22 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
    23 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
    23 
    24 
    24 # import packages
    25 # import packages
    25 from pyams_content.component.paragraph import BaseParagraph, BaseParagraphContentChecker, BaseParagraphFactory
    26 from pyams_content.component.paragraph import BaseParagraph, BaseParagraphContentChecker, BaseParagraphFactory
       
    27 from pyams_content.features.renderer import RenderedContentMixin
    26 from pyams_utils.adapter import adapter_config
    28 from pyams_utils.adapter import adapter_config
    27 from pyams_utils.registry import utility_config, get_utility
    29 from pyams_utils.registry import utility_config, get_utility
       
    30 from pyams_utils.request import check_request
    28 from pyams_utils.text import get_text_start
    31 from pyams_utils.text import get_text_start
    29 from pyams_utils.traversing import get_parent
    32 from pyams_utils.traversing import get_parent
       
    33 from pyams_utils.vocabulary import vocabulary_config
    30 from zope.interface import implementer
    34 from zope.interface import implementer
    31 from zope.schema.fieldproperty import FieldProperty
    35 from zope.schema.fieldproperty import FieldProperty
       
    36 from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
    32 
    37 
    33 from pyams_content import _
    38 from pyams_content import _
    34 
    39 
    35 
    40 
    36 @implementer(IHeaderParagraph)
    41 @implementer(IHeaderParagraph)
    37 class HeaderParagraph(BaseParagraph):
    42 class HeaderParagraph(RenderedContentMixin, BaseParagraph):
    38     """Header paragraph"""
    43     """Header paragraph"""
    39 
    44 
    40     icon_class = 'fa-header'
    45     icon_class = 'fa-header'
    41     icon_hint = _("Header")
    46     icon_hint = _("Header")
    42 
    47 
    44     def title(self):
    49     def title(self):
    45         header = II18n(self).query_attribute('header')
    50         header = II18n(self).query_attribute('header')
    46         return get_text_start(header, 50, 10)
    51         return get_text_start(header, 50, 10)
    47 
    52 
    48     header = FieldProperty(IHeaderParagraph['header'])
    53     header = FieldProperty(IHeaderParagraph['header'])
       
    54     renderer = FieldProperty(IHeaderParagraph['renderer'])
    49 
    55 
    50 
    56 
    51 @utility_config(name=HEADER_PARAGRAPH_TYPE, provides=IParagraphFactory)
    57 @utility_config(name=HEADER_PARAGRAPH_TYPE, provides=IParagraphFactory)
    52 class HeaderParagraphFactory(BaseParagraphFactory):
    58 class HeaderParagraphFactory(BaseParagraphFactory):
    53     """Header paragraph factory"""
    59     """Header paragraph factory"""
    77                 if len(langs) == 1:
    83                 if len(langs) == 1:
    78                     output.append(translate(MISSING_VALUE).format(field=field_title))
    84                     output.append(translate(MISSING_VALUE).format(field=field_title))
    79                 else:
    85                 else:
    80                     output.append(translate(MISSING_LANG_VALUE).format(field=field_title, lang=lang))
    86                     output.append(translate(MISSING_LANG_VALUE).format(field=field_title, lang=lang))
    81         return output
    87         return output
       
    88 
       
    89 
       
    90 @vocabulary_config(name='PyAMS header paragraph renderers')
       
    91 class HeaderParagraphRendererVocabulary(SimpleVocabulary):
       
    92     """Header paragraph renderers vocabulary"""
       
    93 
       
    94     def __init__(self, context=None):
       
    95         request = check_request()
       
    96         translate = request.localizer.translate
       
    97         registry = request.registry
       
    98         if not IHeaderParagraph.providedBy(context):
       
    99             context = HeaderParagraph()
       
   100         terms = [SimpleTerm(name, title=translate(adapter.label))
       
   101                  for name, adapter in sorted(registry.getAdapters((context, request), IContentRenderer),
       
   102                                              key=lambda x: x[1].weight)]
       
   103         super(HeaderParagraphRendererVocabulary, self).__init__(terms)