def add_zcml_menu_items(self, container): """Add the list of ZCML menu items (if any) for this top-level container. Top-level section given by container may define a menu in ZCML with naming convention: <container_name>_navigation. """ # !+ turn this into a utility zcml_menu_name_template = "%s_navigation" try: menu_name = zcml_menu_name_template % container.__name__ menu = component.getUtility(IBrowserMenu, name=menu_name) items = menu.getMenuItems(container, self.request) except (Exception, ): debug.log_exc(sys.exc_info(), log_handler=log.debug) return [] # OK, do any necessary post-processing of each menu item local_url = url.absoluteURL(container, self.request) site_url = url.absoluteURL(getSite(), self.request) request_url = self.request.getURL() default_view_name = queryDefaultViewName(container, self.request) selection = None for item in sorted(items, key=lambda item: item["action"], reverse=True): action = item["action"] if default_view_name == action.lstrip("@@"): _url = local_url if selection is None: selected = sameProxiedObjects(container, self.context) else: _url = make_absolute(action, local_url, site_url) if selection is None: selected = pos_action_in_url(action, request_url) item["url"] = _url item["selected"] = selected and u"selected" or u"" if selected: # self is marker selection = self selected = False self.items.append(item)
def add_zcml_menu_items(self, container): """Add the list of ZCML menu items (if any) for this top-level container. Top-level section given by container may define a menu in ZCML with naming convention: <container_name>_navigation. """ # !+ turn this into a utility zcml_menu_name_template = "%s_navigation" try: menu_name = zcml_menu_name_template % container.__name__ menu = component.getUtility(IBrowserMenu, name=menu_name) items = menu.getMenuItems(container, self.request) except (Exception,): debug.log_exc(sys.exc_info(), log_handler=log.debug) return [] # OK, do any necessary post-processing of each menu item local_url = url.absoluteURL(container, self.request) site_url = url.absoluteURL(getSite(), self.request) request_url = self.request.getURL() default_view_name = queryDefaultViewName(container, self.request) selection = None for item in sorted(items, key=lambda item: item["action"], reverse=True): action = item["action"] if default_view_name==action.lstrip("@@"): _url = local_url if selection is None: selected = sameProxiedObjects(container, self.context) else: _url = make_absolute(action, local_url, site_url) if selection is None: selected = pos_action_in_url(action, request_url) item["url"] = _url item["selected"] = selected and u"selected" or u"" if selected: # self is marker selection = self selected = False self.items.append(item)