23 from pyams_file.interfaces import IImage, IResponsiveImage |
23 from pyams_file.interfaces import IImage, IResponsiveImage |
24 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator |
24 from pyams_i18n.interfaces import II18n, II18nManager, INegotiator |
25 |
25 |
26 # import packages |
26 # import packages |
27 from pyams_content.component.paragraph import BaseParagraph, BaseParagraphFactory, BaseParagraphContentChecker |
27 from pyams_content.component.paragraph import BaseParagraph, BaseParagraphFactory, BaseParagraphContentChecker |
28 from pyams_content.features.renderer import RenderedContentMixin, IContentRenderer |
28 from pyams_content.features.renderer import RenderersVocabulary |
29 from pyams_file.property import FileProperty |
29 from pyams_file.property import FileProperty |
30 from pyams_utils.adapter import adapter_config |
30 from pyams_utils.adapter import adapter_config |
|
31 from pyams_utils.factory import factory_config |
31 from pyams_utils.registry import utility_config, get_utility |
32 from pyams_utils.registry import utility_config, get_utility |
32 from pyams_utils.request import check_request |
|
33 from pyams_utils.traversing import get_parent |
33 from pyams_utils.traversing import get_parent |
34 from pyams_utils.vocabulary import vocabulary_config |
34 from pyams_utils.vocabulary import vocabulary_config |
35 from zope.interface import implementer, alsoProvides |
35 from zope.interface import implementer, alsoProvides |
36 from zope.schema.fieldproperty import FieldProperty |
36 from zope.schema.fieldproperty import FieldProperty |
37 from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm |
|
38 |
37 |
39 from pyams_content import _ |
38 from pyams_content import _ |
40 |
39 |
41 |
40 |
42 @implementer(IContactParagraph) |
41 @implementer(IContactParagraph) |
43 class ContactParagraph(RenderedContentMixin, BaseParagraph): |
42 @factory_config(provided=IContactParagraph) |
|
43 class ContactParagraph(BaseParagraph): |
44 """Contact paragraph""" |
44 """Contact paragraph""" |
45 |
45 |
46 icon_class = 'fa-id-card-o' |
46 icon_class = 'fa-id-card-o' |
47 icon_hint = _("Contact card") |
47 icon_hint = _("Contact card") |
48 |
48 |
110 output.append(translate(MISSING_VALUE).format(field=field_title)) |
110 output.append(translate(MISSING_VALUE).format(field=field_title)) |
111 return output |
111 return output |
112 |
112 |
113 |
113 |
114 @vocabulary_config(name=CONTACT_PARAGRAPH_RENDERERS) |
114 @vocabulary_config(name=CONTACT_PARAGRAPH_RENDERERS) |
115 class ContactParagraphRendererVocabulary(SimpleVocabulary): |
115 class ContactParagraphRendererVocabulary(RenderersVocabulary): |
116 """Contact paragraph renderers vocabulary""" |
116 """Contact paragraph renderers vocabulary""" |
117 |
117 |
118 def __init__(self, context=None): |
118 content_interface = IContactParagraph |
119 request = check_request() |
|
120 translate = request.localizer.translate |
|
121 registry = request.registry |
|
122 if not IContactParagraph.providedBy(context): |
|
123 context = ContactParagraph() |
|
124 terms = [SimpleTerm(name, title=translate(adapter.label)) |
|
125 for name, adapter in sorted(registry.getAdapters((context, request), IContentRenderer), |
|
126 key=lambda x: x[1].weight)] |
|
127 super(ContactParagraphRendererVocabulary, self).__init__(terms) |
|