Changeset 4707
- Timestamp:
- 11/02/08 09:52:25 (2 months ago)
- Files:
-
- menusplugin/0.11/setup.py (modified) (1 diff)
- menusplugin/0.11/tracmenus/web_ui.py (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
menusplugin/0.11/setup.py
r4285 r4707 10 10 version="0.1", 11 11 packages=['tracmenus'], 12 author="Catalin Balan", 13 author_email="cbalan@optaros.com", 12 14 url="http://code.optaros.com/trac/oforge", 13 15 description="Trac Menus", menusplugin/0.11/tracmenus/web_ui.py
r4360 r4707 10 10 from trac.config import ListOption, BoolOption 11 11 from trac.util.html import html 12 from trac.util.compat import sorted13 12 14 13 class MenuManagerModule(Component): 15 14 implements(IRequestFilter, ITemplateProvider) 16 managed_menus = ListOption('menu-custom', 'managed_menus', 'mainnav,metanav', sep=',', doc=""" """) 17 serve_ui_files = BoolOption('menu-custom', 'serve_ui_files', 'true') 15 16 managed_menus = ListOption('menu-custom', 'managed_menus', 'mainnav,metanav', 17 doc="""List of menus to be controlled by the Menu Manager""") 18 serve_ui_files = BoolOption('menu-custom', 'serve_ui_files', True) 18 19 19 20 # ITemplateProvider … … 28 29 return handler 29 30 def post_process_request(self, req, template, data, content_type): 31 if 'nav_orig' in req.chrome: 32 return template, data, content_type 30 33 req.chrome['nav_orig'] = req.chrome['nav'].copy() 31 34 if 'ctxtnav' in self.managed_menus and 'ctxtnav' in req.chrome: … … 34 37 for menu_name in self.managed_menus: 35 38 req.chrome['nav'][menu_name] = list(self._get_menu(req, menu_name, 36 req.chrome['nav_orig'])) 39 req.chrome['nav_orig'])) 37 40 if menu_name=='ctxtnav': 38 41 req.chrome['ctxtnav'] = [ ctxt_item.get('label') for ctxt_item in req.chrome['nav'][menu_name] ] 39 42 40 43 if self.serve_ui_files: 41 44 add_script(req, 'tracmenus/js/superfish.js') … … 53 56 54 57 tree_menu={} 55 for option in sorted(menu_orig+[{'name':key} for key in config_menu.keys()], 56 key=lambda x:config_menu.get(x['name'],{}).get('order','0')): 57 if 'visited' in tree_menu.get(option['name'],[]) \ 58 or config_menu.get(option['name'],{}).get('enabled', True)==False \ 59 or config_menu.get(option['name'],{}).get('if_path_info', True)==False: 58 for option in sorted(menu_orig+[{'name':key} for key in config_menu.keys() if config_menu[key].get('hide_if_disabled',False)==False], 59 key=lambda x:int(config_menu.get(x['name'],{}).get('order',999))): 60 name = option['name'] 61 if 'visited' in tree_menu.get(name, []) \ 62 or config_menu.get(name, {}).get('enabled', True)==False \ 63 or config_menu.get(name, {}).get('if_path_info', True)==False \ 64 or False in [req.perm.has_permission(perm) for perm in config_menu.get(name, {}).get('perm', [])]: 60 65 continue 61 name=option['name'] 62 tree_menu.setdefault(name, {}).update(option.copy()) 63 if 'label' in option and 'label' in config_menu.get(name,[]): 66 67 tree_node = tree_menu.setdefault(name, {}) 68 tree_node.update(option.copy()) 69 70 if 'label' in option and 'label' in config_menu.get(name, []): 64 71 del config_menu[name]['label'] 65 tree_menu[name].update(config_menu.get(name,{'parent_name':'unassigned'})) 66 tree_menu[name]['label']=html(tree_menu[name].setdefault('label',html.a(name))) 67 tree_menu[name]['visited']=True 72 tree_node.update(config_menu.get(name, {'parent_name':'unassigned'})) 68 73 69 if '_tmp_children' in tree_menu[name]: 70 tree_menu[name]['children']=html.ul() 71 tree_menu[name]['label'].append(tree_menu[name]['children']) 72 tree_menu[name]['children'].children.extend(tree_menu[name]['_tmp_children']) 73 74 if (tree_menu[name]['parent_name']=='unassigned' and not 'unassigned' in config_menu) or tree_menu[name]['parent_name']=='top': 75 yield tree_menu[name] 74 tree_node['label'] = html(tree_node.setdefault('label', html.a(name))) 75 tree_node['visited'] = True 76 if tree_node.get('href'): 77 tree_node.setdefault('active', tree_node['href'].startswith(req.path_info)) 78 79 if '_tmp_children' in tree_node: 80 tree_node['children'] = html.ul() 81 tree_node['label'].append(tree_node['children']) 82 tree_node['children'].children.extend(tree_node['_tmp_children']) 83 del tree_node['_tmp_children'] 84 85 if (tree_node['parent_name']=='unassigned' and not 'unassigned' in config_menu) \ 86 or tree_node['parent_name']=='top': 87 yield tree_node 76 88 continue 77 89 78 tree_ menu[name]['parent']=tree_menu.setdefault(tree_menu[name]['parent_name'],{})90 tree_node['parent'] = tree_menu.setdefault(tree_node['parent_name'], {}) 79 91 80 child_node =html.li()81 child_node.children=[tree_ menu[name]['label']]82 if 'label' in tree_ menu[name]['parent']:83 if not 'children' in tree_ menu[name]['parent']:84 tree_ menu[name]['parent']['children']=html.ul()85 tree_ menu[name]['parent']['label'].append(tree_menu[name]['parent']['children'])86 tree_ menu[name]['parent']['children'].append(child_node)92 child_node = html.li(class_=tree_node.get('active')==True and 'active' or None) 93 child_node.children=[tree_node['label']] 94 if 'label' in tree_node['parent']: 95 if not 'children' in tree_node['parent']: 96 tree_node['parent']['children'] = html.ul() 97 tree_node['parent']['label'].append(tree_node['parent']['children']) 98 tree_node['parent']['children'].append(child_node) 87 99 else: 88 tree_ menu[name]['parent'].setdefault('_tmp_children',[]).append(child_node)100 tree_node['parent'].setdefault('_tmp_children',[]).append(child_node) 89 101 90 102 def _get_config_menus(self, req, menu_name): … … 111 123 elif prop_name=='path_info': 112 124 menu[name]['if_path_info'] = re.match(value, req.path_info) and True or False 125 elif prop_name=='hide_if_disabled': 126 menu[name][prop_name] = self.config[menu_name].getbool(option, False) 127 continue 128 elif prop_name=='perm': 129 menu[name][prop_name] = self.config[menu_name].getlist(option, default=[], sep=',') 130 continue 113 131 menu[name][prop_name]=value 114 132 return menu, options
