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