18 |
18 |
19 # import interfaces |
19 # import interfaces |
20 from pyams_content.shared.form.interfaces import IFormFieldFactory, IFormField, IFormFieldContainer, \ |
20 from pyams_content.shared.form.interfaces import IFormFieldFactory, IFormField, IFormFieldContainer, \ |
21 IFormFieldContainerTarget, FORM_FIELD_CONTAINER_KEY |
21 IFormFieldContainerTarget, FORM_FIELD_CONTAINER_KEY |
22 from pyams_i18n.interfaces import II18n |
22 from pyams_i18n.interfaces import II18n |
23 from zope.annotation.interfaces import IAnnotations |
|
24 from zope.location.interfaces import ISublocations |
23 from zope.location.interfaces import ISublocations |
25 from zope.traversing.interfaces import ITraversable |
24 from zope.traversing.interfaces import ITraversable |
26 |
25 |
27 # import packages |
26 # import packages |
28 from persistent import Persistent |
27 from persistent import Persistent |
29 from pyams_utils.adapter import adapter_config, ContextAdapter |
28 from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter |
30 from pyams_utils.registry import utility_config, get_global_registry |
29 from pyams_utils.registry import utility_config, get_global_registry |
31 from pyams_utils.request import check_request |
30 from pyams_utils.request import check_request |
32 from pyams_utils.schema import MailAddressField |
31 from pyams_utils.schema import MailAddressField |
33 from pyams_utils.vocabulary import vocabulary_config |
32 from pyams_utils.vocabulary import vocabulary_config |
34 from pyramid.threadlocal import get_current_registry |
|
35 from zope.container.contained import Contained |
33 from zope.container.contained import Contained |
36 from zope.container.ordered import OrderedContainer |
34 from zope.container.ordered import OrderedContainer |
37 from zope.interface import implementer |
35 from zope.interface import implementer |
38 from zope.lifecycleevent import ObjectCreatedEvent |
|
39 from zope.location import locate |
|
40 from zope.schema import TextLine, Text, Bool, Int, Decimal, URI, Date, Choice, List |
36 from zope.schema import TextLine, Text, Bool, Int, Decimal, URI, Date, Choice, List |
41 from zope.schema.fieldproperty import FieldProperty |
37 from zope.schema.fieldproperty import FieldProperty |
42 from zope.componentvocabulary.vocabulary import UtilityVocabulary, UtilityTerm |
38 from zope.componentvocabulary.vocabulary import UtilityVocabulary, UtilityTerm |
43 |
39 |
44 from pyams_content import _ |
40 from pyams_content import _ |
75 |
71 |
76 |
72 |
77 @adapter_config(context=IFormFieldContainerTarget, provides=IFormFieldContainer) |
73 @adapter_config(context=IFormFieldContainerTarget, provides=IFormFieldContainer) |
78 def form_field_container_factory(context): |
74 def form_field_container_factory(context): |
79 """Form fields container factory""" |
75 """Form fields container factory""" |
80 annotations = IAnnotations(context) |
76 return get_annotation_adapter(context, FORM_FIELD_CONTAINER_KEY, FormFieldContainer, name='++fields++') |
81 container = annotations.get(FORM_FIELD_CONTAINER_KEY) |
|
82 if container is None: |
|
83 container = annotations[FORM_FIELD_CONTAINER_KEY] = FormFieldContainer() |
|
84 get_current_registry().notify(ObjectCreatedEvent(container)) |
|
85 locate(container, context, '++fields++') |
|
86 return container |
|
87 |
77 |
88 |
78 |
89 @adapter_config(name='fields', context=IFormFieldContainerTarget, provides=ITraversable) |
79 @adapter_config(name='fields', context=IFormFieldContainerTarget, provides=ITraversable) |
90 class FormFieldContainerNamespace(ContextAdapter): |
80 class FormFieldContainerNamespace(ContextAdapter): |
91 """Form fields container ++fields++ namespace""" |
81 """Form fields container ++fields++ namespace""" |