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) |