Update menu resolution to return a list of lists of resolved objects. Allows segmented 'Action' dropdown on multi objects action menu.

This commit is contained in:
Roberto Rosario
2015-06-17 02:21:53 -04:00
parent 5fc77f4e84
commit 22340d8b8f
7 changed files with 70 additions and 46 deletions

View File

@@ -86,29 +86,43 @@ class Menu(object):
pass
for resolved_navigation_object in resolved_navigation_object_list:
for source, links in self.bound_links.iteritems():
resolved_links = []
for bound_source, links in self.bound_links.iteritems():
try:
if inspect.isclass(source) and isinstance(resolved_navigation_object, source) or source == CombinedSource(obj=resolved_navigation_object.__class__, view=current_view):
if inspect.isclass(bound_source) and isinstance(resolved_navigation_object, bound_source) or source == CombinedSource(obj=resolved_navigation_object.__class__, view=current_view):
for link in links:
resolved_link = link.resolve(context=context, resolved_object=resolved_navigation_object)
if resolved_link:
result.append(resolved_link)
resolved_links.append(resolved_link)
break # No need for further content object match testing
except TypeError:
# When source is a dictionary
pass
if resolved_links:
result.append(resolved_links)
resolved_links = []
# View links
for link in self.bound_links.get(current_view, []):
resolved_link = link.resolve(context)
if resolved_link:
result.append(resolved_link)
resolved_links.append(resolved_link)
if resolved_links:
result.append(resolved_links)
resolved_links = []
# Main menu links
for link in self.bound_links.get(None, []):
resolved_link = link.resolve(context)
if resolved_link:
result.append(resolved_link)
resolved_links.append(resolved_link)
if resolved_links:
result.append(resolved_links)
return result