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 IAssociationContainer, IAssociationTarget, \ |
19 from pyams_content.component.association.interfaces import IAssociationContainer, IAssociationContainerTarget, \ |
20 ASSOCIATION_CONTAINER_KEY, IAssociationItem, IAssociationInfo |
20 ASSOCIATION_CONTAINER_KEY, IAssociationItem, IAssociationInfo |
21 from pyams_content.features.checker.interfaces import IContentChecker |
21 from pyams_content.features.checker.interfaces import IContentChecker |
22 from zope.location.interfaces import ISublocations |
22 from zope.location.interfaces import ISublocations |
23 from zope.traversing.interfaces import ITraversable |
23 from zope.traversing.interfaces import ITraversable |
24 |
24 |
56 |
56 |
57 def get_visible_items(self): |
57 def get_visible_items(self): |
58 return filter(lambda x: IAssociationItem(x).visible, self.values()) |
58 return filter(lambda x: IAssociationItem(x).visible, self.values()) |
59 |
59 |
60 |
60 |
61 @adapter_config(context=IAssociationTarget, provides=IAssociationContainer) |
61 @adapter_config(context=IAssociationContainerTarget, provides=IAssociationContainer) |
62 def association_container_factory(target): |
62 def association_container_factory(target): |
63 """Associations container factory""" |
63 """Associations container factory""" |
64 return get_annotation_adapter(target, ASSOCIATION_CONTAINER_KEY, AssociationContainer, name='++ass++') |
64 return get_annotation_adapter(target, ASSOCIATION_CONTAINER_KEY, AssociationContainer, name='++ass++') |
65 |
65 |
66 |
66 |
67 @adapter_config(name='ass', context=IAssociationTarget, provides=ITraversable) |
67 @adapter_config(name='ass', context=IAssociationContainerTarget, provides=ITraversable) |
68 class AssociationContainerNamespace(ContextAdapter): |
68 class AssociationContainerNamespace(ContextAdapter): |
69 """Associations container ++ass++ namespace""" |
69 """Associations container ++ass++ namespace""" |
70 |
70 |
71 def traverse(self, name, furtherpath=None): |
71 def traverse(self, name, furtherpath=None): |
72 registry = get_current_registry() |
72 registry = get_current_registry() |
73 return registry.queryAdapter(self.context, IAssociationContainer, name=name or '') |
73 return registry.queryAdapter(self.context, IAssociationContainer, name=name or '') |
74 |
74 |
75 |
75 |
76 @adapter_config(name='associations', context=IAssociationTarget, provides=ISublocations) |
76 @adapter_config(name='associations', context=IAssociationContainerTarget, provides=ISublocations) |
77 class AssociationContainerSublocations(ContextAdapter): |
77 class AssociationContainerSublocations(ContextAdapter): |
78 """Associations container sub-locations adapter""" |
78 """Associations container sub-locations adapter""" |
79 |
79 |
80 def sublocations(self): |
80 def sublocations(self): |
81 return IAssociationContainer(self.context).values() |
81 return IAssociationContainer(self.context).values() |
82 |
82 |
83 |
83 |
84 @adapter_config(name='associations', context=IAssociationTarget, provides=IContentChecker) |
84 @adapter_config(name='associations', context=IAssociationContainerTarget, provides=IContentChecker) |
85 class AssociationsContentChecker(BaseContentChecker): |
85 class AssociationsContentChecker(BaseContentChecker): |
86 """Associations content checker""" |
86 """Associations content checker""" |
87 |
87 |
88 label = _("Associations") |
88 label = _("Associations") |
89 sep = '\n' |
89 sep = '\n' |
108 class ContentAssociationsVocabulary(SimpleVocabulary): |
108 class ContentAssociationsVocabulary(SimpleVocabulary): |
109 """Content associations vocabulary""" |
109 """Content associations vocabulary""" |
110 |
110 |
111 def __init__(self, context=None): |
111 def __init__(self, context=None): |
112 terms = [] |
112 terms = [] |
113 target = get_parent(context, IAssociationTarget) |
113 target = get_parent(context, IAssociationContainerTarget) |
114 if target is not None: |
114 if target is not None: |
115 terms = [SimpleTerm(link.__name__, title=IAssociationInfo(link).inner_title) |
115 terms = [SimpleTerm(link.__name__, title=IAssociationInfo(link).inner_title) |
116 for link in IAssociationContainer(target).values()] |
116 for link in IAssociationContainer(target).values()] |
117 super(ContentAssociationsVocabulary, self).__init__(terms) |
117 super(ContentAssociationsVocabulary, self).__init__(terms) |