Factor out sidebar entry construction
authorSverre Rabbelier <srabbelier@gmail.com>
Sun, 07 Dec 2008 17:01:44 +0000
changeset 704 8647e6b441fc
parent 703 c4f3997becd9
child 705 0ab17e14df95
Factor out sidebar entry construction This makes it possible to reuse this logic in other modules as well, preventing code duplication. While at it, move additional_sidebar merging before the other entries (additional entries should go first, since the other entries are mostly dev-only etc). Patch by: Sverre Rabbelier
app/soc/views/sitemap/sidebar.py
--- a/app/soc/views/sitemap/sidebar.py	Sun Dec 07 15:29:37 2008 +0000
+++ b/app/soc/views/sitemap/sidebar.py	Sun Dec 07 17:01:44 2008 +0000
@@ -81,26 +81,26 @@
 
   result = []
 
+  for item in params['sidebar_additional']:
+    result.append(item)
+
   for url, menu_text, access_type in defaults:
     url = url % params['url_name'].lower()
     item = (url, menu_text % params, access_type)
     result.append(item)
 
-  for item in params['sidebar_additional']:
-    result.append(item)
-
   return result
 
 
-def getSidebarMenus(request, params=None):
+def getSidebarMenu(request, items, params):
   """Returns an dictionary with one sidebar entry.
 
-  Calls getSidebarItems to retrieve the items that should be in the
-  menu. Expected is a tuple with an url, a menu_text, and an
+  Items is expected to be a tuple with an url, a menu_text, and an
   access_type. The access_type is then passed to checkAccess, if it
   raises out_of_band.Error, the item will not be added.
 
   Args:
+    items: see above
     request: the django request object
     params: a dict with params for this View
 
@@ -124,16 +124,34 @@
 
   rights = params['rights']
 
-  items = []
+  submenus = []
 
-  for url, menu_text, access_type in getSidebarItems(params):
+  for url, menu_text, access_type in items:
     try:
       access.checkAccess(access_type, request, rights)
-      items.append({'url': url, 'title': menu_text})
+      submenus.append({'url': url, 'title': menu_text})
     except out_of_band.Error:
       pass
 
-  if not items:
+  return submenus
+
+
+def getSidebarMenus(request, params=None):
+  """Constructs the default sidebar menu for a View.
+
+  Calls getSidebarItems to retrieve the items that should be in the
+  menu. Then passes the result to getSidebarMenu. See the respective
+  docstrings for an explanation on what they do.
+
+  Args:
+    request: the django request object
+    params: a dict with params for this View
+  """
+
+  items = getSidebarItems(params)
+  submenus = getSidebarMenu(request, items, params)
+
+  if not submenus:
     return
 
   menu = {}
@@ -142,7 +160,7 @@
     params['sidebar_heading'] = params['name']
 
   menu['heading'] = params['sidebar_heading']
-  menu['items'] = items
+  menu['items'] = submenus
 
   menus = [menu]